mayfrost-guides/INITIATION.md
2018-02-26 03:52:35 +00:00

15 KiB

Initiation Rite

This guide is for those wanting one of the two most beautiful source based distros, either CRUX or Source Mage GNU/Linux. The was written so it can be used by both, only diverging on particular details.

  • CRUX: A ports based, BSD style init scripts, distro following true KISS principles (Keep It Simple, Stupid).
  • Source Mage GNU/Linux: Without 3rd party patches, sensible defaults or masked packages, free from obfuscated and pre-configured code, use clean dependencies as they came from upstream developers and can also use flags.

TOC

  1. START
  2. PARTITIONING
  3. SETUP
    3.1. CHROOT
    3.2. CHANGE NETWORK INTERFACES
    3.3. EDIT FSTAB
    3.4. SETUP THE ENVIRONMENT
  4. KERNEL
  5. BOOTLOADER
    5.1. LILO
    5.2. SYSLINUX
    5.3. GRUB Legacy
    5.4. GRUB 2
  6. THE END
  7. CONFIGURATION ON CRUX
    7.1. ENABLE CONTRIB REPO
    7.2. ADD EXTERNAL REPOS
    7.3. INSTALL XORG
  8. CRUX COMMANDS
    8.1. AUTOMATED INSTALLATION OF PORTS
    8.2. MANUAL DOWNLOAD AND INSTALLATION
  9. SOURCE MAGE GNU/LINUX COMMANDS

START

Boot in UEFI mode if on UEFI, BIOS if on BIOS, and select installation media.

  • Make sure your network is up (OPTIONAL)
    dhcpcd <NIC>
  • Temporarily change keyboard (available configurations can be found in the directories "/usr/share/kbd/keymaps/" for CRUX and "/usr/share/keymaps/i386/qwerty" for Source Mage GNU/Linux)
    loadkeys <KEYMAP>

PARTITIONING

Supported filesystems by bootloaders are (if on UEFI ignore this as it only supports FAT):

  • LILO: indifferent (anything?)
  • SYSLINUX: ext2, ext3, ext4, btrfs, ufs 1/2, FAT16, FAT32, iso9660, udf, NTFS
  • GRUB Legacy: FAT16, FAT32, minix, ext2, ext3, ext4, ReiserFS, JFS, XFS, VSTa fs, Btrfs
  • GRUB 2: ext2, ext3, ext4, btrfs, zfs, ufs, minix, iso9660, udf, jfs, hfs, hfs+, afs, affs, sfs, xfs, reiserfs, tar, cpio, NTFS, FAT16, FAT32

In these examples we make only two partitions but you can extend this if you know how. The partitions are one root partition, later mounted to "/mnt/drive" with "mkfs.<ROOT_FILESYSTEM>" format, and one boot partition, later mounted to "/mnt/drive/boot" and with "mkfs.<BOOTLOADER_FILESYSTEM>" format unless is UEFI in which case "mkfs.vfat" is the only format available and will be mounted to "/mnt/drive/boot/efi" instead.

  • Use parted
    parted /dev/sda

  • Inside parted, if on UEFI label the disk "gpt", but if on BIOS label it "msdos"
    mklabel <LABEL>
    unit mb
    mkpart primary 0g 128
    mkpart primary 128 -1
    toggle 1 boot
    p free
    quit

  • Make root filesystem according to your personal preference
    mkfs.<ROOT_FILESYSTEM> /dev/sda2
    mkdir /mnt/drive
    mount /dev/sda2 /mnt/drive

  • Make boot filesystem according to supported bootloader or just "mkfs.vfat" if on UEFI
    mkfs.<BOOTLOADER_FILESYSTEM> /dev/sda1

  • If on BIOS make directory and mount
    mkdir /mnt/drive/boot
    mount /dev/sda1 /mnt/drive/boot

  • If on UEFI make directory and mount
    mkdir -p /mnt/drive/boot/efi
    mount /dev/sda1 /mnt/drive/boot/efi
    cd /mnt/drive
    mount --bind /dev /mnt/drive/dev
    mount --bind /sys /mnt/drive/sys
    mount -t proc none /mnt/drive/proc
    mount -t devpts none /mnt/drive/dev/pts

SETUP

  • On CRUX run "setup", and if on UEFI select on setup grub2-efi (if using GRUB 2), efibootmgr, and elfutils from opt (only select core, and say yes when you're asked if you want to select individual packages). And if you are not using LILO de-select it from core.
  • On Source Mage GNU/Linux get the tarball
    cd /mnt/drive
    wget -c "http://download.sourcemage.org/image/official/smgl-stable-<version>-basesystem-x86_64.<compression>"
    tar xvf smgl-stable-<version>-basesystem-x86_64.<compression>

CHROOT

  • Chroot specifying Bash in case live media has another shell
    chroot /mnt/drive /bin/bash
  • Change root password in chroot (TEST IF YOUR KEYBOARD HAS ALL THE CORRECT MAPPINGS before you change the password)
    passwd root

CHANGE NETWORK INTERFACES

  • On CRUX modify "/etc/rc.d/net" with the rules you want (IP, gateway, domain, etc)
  • On Source Mage GNU/Linux add preferred interfaces to "/etc/network/interfaces" for example
    auto eth0
    allow-hotplug eth0
    iface eth0 inet dhcp
  • On the "/etc/resolv.conf.head" file set your preferred DNS provider (this example is from OpenNIC)
    nameserver 193.41.79.236
  • Or copy "/etc/resolv.conf" to "/mnt/etc/resolv.conf" BEFORE chrooting

EDIT FSTAB

  • Change the "/etc/fstab" file with appropriate filesystems
    /dev/sda1 /boot <BOOTLOADER_FILESYSTEM> defaults 0 2
    /dev/sda2 / <ROOT_FILESYSTEM> noatime 0 1
  • On CRUX uncomment the lines referring to devpts, tmp, and shm as some programs require it (Firefox), also USB and or cdrom if using those
  • If on UEFI replace "/boot" with "/boot/efi"

SETUP THE ENVIRONMENT

  • On CRUX change the font, keyboard, timezone, hostname and services on the "/etc/rc.conf" file
    ls /usr/share/kbd/keymaps/
  • On Source Mage GNU/Linux change keymaps on the "/etc/sysconfig/keymap" file
    ls /usr/share/keymaps/i386/qwerty
  • On CRUX generate locales (change interface language)
    localedef -i <LOCALE> -f ISO-<CODE> <LOCALE>
  • On Source Mage GNU/Linux generate locales (change interface language)
    cast -r locale

KERNEL

  • Include the filesystem support the boot partition is format in.

  • Include UEFI options if on UEFI.

  • Include device drivers you need, build the rest as modules.

  • On CRUX
    cd /usr/src/linux-<VERSION>
    make menuconfig
    make all
    make modules_install
    cp arch/x86/boot/bzImage /boot/vmlinuz
    cp System.map /boot

  • On Source Mage GNU/Linux (OPTIONAL)
    cast -r linux

BOOTLOADER

  • The drive where bootloaders and OSes are installed on these examples is "/dev/sda", but could be anywhere.
  • The bootloader installation IS inside chroot AND with drives mounted, so this guides assumes you are inside "/mnt/drive".
  • "<PARTITION_NUMBER_OF_DISTRO>", "<PARTITION_NUMBER_OF_FREEDOS>" and "<PARTITION_NUMBER_OF_WINDOWS>" are just the numbers of partitions.
  • The "vmlinuz" file makes reference to the kernel image, you can rename it or simlink to it in all cases, the only rule is you have to make sure the name is referenced correctly in the bootloader. By default it can have names like "vmlinuz-linux", "vmlinuz-<KERNEL_VERSION>" and so on. The same with "initramfs.img", it can be "initramfs-<KERNEL_VERSION>.img" and such.
  • All bootloader examples have included other OS inside what is called "stanzas".
  • FreeDOS and Windows stanzas are OPTIONAL.
  • If dualbooting with Windows remember that it likes to be in the first partition.
  • If on UEFI check if module is loaded by issuing "modprobe efivars".
  • On CRUX do "prt-get remove lilo" if you dont use LILO.
  • On Source Mage GNU/Linux do "cast " to install the preferred bootloader.

LILO

  • If on UEFI use elilo and change names to "/etc/elilo.conf" instead of "/etc/lilo.conf" and "elilo" instead of "lilo" in commands
    nano /etc/lilo.conf
  • Inserting "password=" inside an OS stanza will protect with a password that OS, but inserting "password=" just before the stanzas and outside any of them will protect with a password the bootloader itself (notice the space inside stanzas)
    boot = /dev/sda
    image = /boot/vmlinuz
    Label = <DISTRO_NAME>
    root = /dev/sda<PARTITION_NUMBER_OF_DISTRO>
    other = /dev/sda<PARTITION_NUMBER_OF_FREEDOS>
    table = /dev/sda
    Label = FreeDos
    other = /dev/sda<PARTITION_NUMBER_OF_WINDOWS>
    table = /dev/sda
    Label = Windows7 lilo -A /dev/sda 1
    lilo
  • Prevent anyone but root of reading the config file (in case you used a password)
    chmod 600 /etc/lilo.conf

SYSLINUX

  • If on BIOS make directory and copy files accordingly
    mkdir -p /boot/syslinux
    cp /usr/lib/syslinux/bios/*.c32 /boot/syslinux/
  • If on UEFI make directory and copy files accordingly
    mkdir -p /boot/efi/EFI/syslinux
    cp -r /usr/lib/syslinux/efi64/* /boot/efi/EFI/syslinux/
  • If on BIOS setup boot entry
    umount /dev/sda1
    syslinux --directory syslinux --install /dev/sda1
    mount /dev/sda1 /boot
  • If on UEFI setup boot entry using "efibootmgr"
    umount /dev/sda1
    efibootmgr -c -d /dev/sda -p 1 -l /boot/efi/EFI/syslinux/syslinux.efi -L Syslinux
    mount /dev/sda1 /boot/efi
  • Edit "/boot/syslinux/syslinux.cfg" if on BIOS or "/boot/efi/EFI/syslinux/syslinux.cfg" if on UEFI
  • "splash.png" is the splash screen image located in "/boot/syslinux/" if on BIOS or "/boot/efi/EFI/syslinux/" if on UEFI
    PROMPT 1
    TIMEOUT 50
    MENU BACKGROUND splash.png
    DEFAULT <DISTRO_NAME>
    LABEL <DISTRO_NAME>
    MENU LABEL <DISTRO_NAME>
    LINUX /boot/vmlinuz
    INITRD /boot/initramfs.img
    LABEL FreeDOS
    MENU LABEL FreeDOS
    KERNEL chain.c32
    APPEND sda <PARTITION_NUMBER_OF_FREEDOS>
    LABEL Windows7
    MENU LABEL Windows7
    KERNEL chain.c32
    APPEND sda <PARTITION_NUMBER_OF_WINDOWS>

GRUB Legacy

  • If on BIOS setup boot entry (boot partition must be mounted)
    mount /dev/sda1 /boot
    grub-install /dev/sda
  • If on UEFI setup boot entry (boot partition must be mounted)
    mount /dev/sda1 /boot/efi
    grub-install /boot/efi`
  • Edit configuration file "/boot/grub/menu.lst"
    default=0
    timeout=10
    splashimage=(hd0,0)/grub/splash.xpm.gz
    #hiddenmenu
    title <DISTRO_NAME> (<KERNEL_VERSION>)
    root (hd0,<PARTITION_NUMBER_OF_DISTRO>)
    kernel /vmlinuz-<KERNEL_VERSION> ro root=/dev/sda5 rhgb quiet
    initrd /initramfs-<KERNEL_VERSION>.img
    title <DISTRO_NAME_alternative_kernel> (<ANOTHER_KERNEL_VERSION>)
    root (hd0,<PARTITION_NUMBER_OF_DISTRO>)
    kernel /vmlinuz-<ANOTHER_KERNEL_VERSION> ro root=/dev/sda5 rhgb quiet
    initrd /initramfs-<ANOTHER_KERNEL_VERSION>.img
    title FreeDOS
    root (hd0,<PARTITION_NUMBER_OF_FREEDOS>)
    kernel /memdisk
    initrd (hd0,<PARTITION_NUMBER_OF_FREEDOS>)/fdboot.img
    title Windows 7
    root (hd0,<PARTITION_NUMBER_OF_WINDOWS>)
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi

GRUB 2

  • If on BIOS setup boot entry (boot partition must be mounted)
    mount /dev/sda1 /boot
    grub-install /dev/sda`
  • If on UEFI setup boot entry (boot partition must be mounted)
    mount /dev/sda1 /boot/efi
    grub-install /boot/efi
  • If Grub does not detect your OS run "os-prober" followed by "update-grub"
  • Or add the OS manually to the Grub config file "/etc/grub.d/40_custom"
    menuentry "FreeDOS" {
    set root='(hd0,msdos2)'
    linux16 /memdisk
    initrd16 /fdboot.img
    chainloader +1
    }
    menuentry "Windows 7" {
    insmod part_msdos
    insmod ntfs
    insmod search_fs_uuid
    insmod ntldr
    search --fs-uuid --no-floppy --set=root 3482FBC382FB879E
    chainloader +1
    ntldr /bootmgr
    }
  • Update config file
    grub-mkconfig -o /boot/grub/grub.cfg

THE END

  • Exit the chroot
    exit
  • Shutdown the machine
    shutdown -h now

And done.

CONFIGURATION ON CRUX

ENABLE CONTRIB REPO

  • Enable contrib for ports
    cd /etc/ports
    mv contrib.rsync.inactive contrib.rsync
  • Enable contrib for prt-get
    nano /etc/prt-get.conf
  • Uncomment line "prtdir /usr/ports/contrib"

ADD EXTERNAL REPOS

cd /etc/ports/

  • download httpup/rsync file and pub file
    wget -c <URL>

  • Add repo location to /etc/prt-get.conf (order sets precedence)
    nano /etc/prt-get.conf

  • Add "prtdir /usr/ports/"

  • Populate repo
    ports -u <REPO>

  • Enable pre-/post-install scripts in "/etc/prt-get.conf" (usually safe to run repeatedly, usually used to rebuild caches and add system users when installing certain software)
    nano /etc/prt-get.conf

  • uncomment line "runscripts yes"

  • Ignore footprint mismatches due to new files (usually not a bad thing)
    nano /etc/pkgmk.conf

  • Set line "PKGMK_IGNORE_NEW="yes""

INSTALL XORG

  • Install a minimal set of xorg and xorg dependent tools one by one prtget depinst xorg-server xorg-xf86-video- xorg-font- xkeyboard-config xorg-xinit
  • Alternatively just install the metapackage "xorg"

CRUX COMMANDS

AUTOMATED INSTALLATION OF PORTS

  • Populate ports tree (is empty by default)
    ports -u
  • Automatically download and build a package with its required dependencies ignoring signature mismatch
    prt-get -in depinst <PORT>
  • Remove a package
    prt-get remove <PORT>
  • Search package
    prt-get search <PORT>
  • Get info from package
    prt-get info <PORT>
  • Get dependency info from package
    prt-get depends <PORT>
  • Update all packages
    prt-get sysup
  • List all installed packages
    pkginfo -i

MANUAL DOWNLOAD AND INSTALLATION

  • Go to apropriate directory for all these tasks
    cd to /usr/ports/<REPO>/<PORT>
  • To download a package
    pkgmk -d <PORT>
  • To install a downloaded package
    pkgmk -i <PORT>
  • In case of signature mismatch
    pkgadd -f <PORT>
  • To clean directory from downloaded package and build
    pkgadd -c <PORT>
  • To remove installed package
    pkgrm <PORT>

SOURCE MAGE GNU/LINUX COMMANDS

  • To get a manual cast smgl-setup man smgl-setup
  • To change general things like the color scheme sorcery
  • To update the package manager sorcery update
  • To update the package list scribe update
  • To check for any changes in the architecture specs cast smgl-archspecs
  • To rebuild everything from source sorcery rebuild
  • To recompile the kernel cast -r linux
  • To get a list of spells needing upgrade sorcery -q
  • To upgrade the spells themselves known to be available for upgrade cast --queue
  • To check for broken installations cleanse --fix
  • After casting new spells you need this to have apropos, man -k, and whatis makewhatis
  • To install new packages cast <spell>
  • To update an existing package cast <spell>
  • To search for packages gaze search <spell>
  • To search by package name gaze search -name <spell>
  • To list installed packages gaze installed
  • To remove a spell dispel <spell>
  • To delete completely a package dispel --nosustain <spell>
  • To list repositories scribe index
  • To add a repository scribe add <grimoire>
  • To remove a repository scribe remove <grimoire>