Installing the base system
After preparing the system’s disks the operating system can now be installed. The best resource for installing Gentoo is the Installation Handbook which I will follow as well. I will add explainations to the process and commands when nessesary for a better understanding.
Mounting the disks
mkdir /mnt/gentoo mount /dev/md1 /mnt/gentoo/ mkdir -p /mnt/gentoo/{boot,usr/portage} mount /dev/md0 /mnt/gentoo/boot/ mount /dev/vg/portage /mnt/gentoo/usr/portage/ mkdir /mnt/gentoo/usr/portage/distfiles cd /mnt/gentoo/
Fetching the base system
Now quickly download the stage3 tarball and extract it. I decided to go with the hardened no-multilib amd64 stage file, since I do not plan to run any 32bit software on the Server. If I ever need to switch to a multilib later there is a nice post by Charles Svitlik on how to do it without reinstalling.
wget http://mirror.netcologne.de/gentoo/releases/amd64/autobuilds/current-stage3-amd64-hardened/stage3-amd64-hardened+nomultilib-20150319.tar.bz2 tar xjpf stage3-*.tar.bz2
Into the chroot
This is strait forward. The only thing to watch out is the /dev/shm which is just a symlink in the Hetzner rescue system and has to be replace by something real.
cp -L /etc/resolv.conf /mnt/gentoo/etc/ mount /dev/vg/distfiles /mnt/gentoo/usr/portage/distfiles/ mount -t proc proc /mnt/gentoo/proc mount --rbind /sys /mnt/gentoo/sys mount --make-rslave /mnt/gentoo/sys rm /dev/shm && mkdir /dev/shm mount -t tmpfs -o nosuid,nodev,noexec shm /dev/shm chmod 1777 /dev/shm mount --rbind /dev /mnt/gentoo/dev mount --make-rslave /mnt/gentoo/dev chroot /mnt/gentoo /bin/bash source /etc/profile export PS1="(chroot) $PS1" emerge-webrsync
Use flags ’n‘ CFLAGS stuff
Before starting to install any software lets set the CFLAGS for compiling and the use flags so that emerge can pick the right packages for us. On the CFLAGS just the -march=native was added to let gcc decide for the best arch. The use flags are extended by the flag systemd.
CFLAGS="-march=native -O2 -pipe" CXXFLAGS="${CFLAGS}" CHOST="x86_64-pc-linux-gnu" USE="bindist mmx sse sse2 systemd" PORTDIR="/usr/portage" DISTDIR="${PORTDIR}/distfiles" PKGDIR="${PORTDIR}/packages" MAKEOPTS="-j8"
Disk stabbing
The disks are mounted, but the new linux will not remember them! So its f-stabbing time.
/dev/md0 /boot ext2 noauto,noatime 1 2 /dev/md1 / ext4 noatime 0 1 /dev/sda3 none swap sw,pri=1 0 0 /dev/sdb3 none swap sw,pri=1 0 0 /dev/vg/portage /usr/portage ext2 noatime 1 2 /dev/vg/distfiles /usr/portage/distfiles ext2 noatime 1 2 tmpfs /var/tmp/portage tmpfs uid=portage,gid=portage,mode=775,size=2048M,noatime 0 0
The last line will make portage able to use the RAM temporarly while compiling, which is a hugh speed up when enough RAM is available. Please refer to the Gentoo Wiki on Portage temp directory. Mount the RAM-drive using mount /var/tmp/portage. Later you can have per ebuild environments which either use the tmpfs or not which is pretty neat and another reason I do love Gentoo!
Re-emerge the world
Now that preparations are done let’s recompile everything for fun 🙂
emerge -DNeav @world
Timezone and Locale
Sets quickly setup the timezone and locale, so we can start working on the kernel. After rebooting the system we will comeback to this again using the systemd tools.
echo "Europe/Berlin" > /etc/timezone emerge --config sys-libs/timezone-data nano -w /etc/locale.gen locale-gen eselect locale list eselect locale set 6 env-update && source /etc/profile
Kernel
Last but not least the Kernel. Here I again refer to the systemd wiki page and the Gentoo Handbook on that matter.
The finishing touch
Last steps before the first reboot of the system are to install the system services, as well as configuring and installing the network and bootloader.
System services
emerge dhcpcd lvm2 mdadm vim sudo systemctl enable dhcpcd systemctl enable systemd-networkd systemctl enable systemd-resolved systemctl enable sshd systemctl enable lvm2-monitor.service visudo
The last command opens up a editor with which the sudoer file is changed. Look for the commented line %wheel and uncomment it, so that users from this group can run sudo commands.
Network configuration
Good thing is, that Hetzner has an DHCP server, which eases up the configuration a lot. To configure the network create a new file nano -w /etc/systemd/network/dhcp.network and paste the content.
[Match] Name=en* [Network] DHCP=on
Arch Linux Wiki systemd-networkd has some good tips on how to use systemd for network configuration.
Grub the bootloader
Before emerging the grub bootloader it must be chosen which architectures should be supported. I choose efi-64 and the legacy bios boot pc.
GRUB_PLATFORMS="efi-64 pc"
Now emerge and install the bootloader
emerge grub grub2-install /dev/sda grub2-install /dev/sdb grub2-mkconfig -o /boot/grub/grub.cfg
User
Before leaving the chroot create a new user and change the password for root.
passwd useradd -m -G users,wheel,portage -s /bin/bash zeUser passwd zeUser
Rebooting
Remember to set the link to the resolv.conf which will be created by systemd-resolvd, otherwise we stick to the settings we copied before entering the chroot.
ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf exit cd umount -l /mnt/gentoo/dev{/shm,/pts,} umount /mnt/gentoo{/boot,/sys,/proc,/usr/portage/distfiles,/usr/portage,/var/tmp/portage,} reboot