#!/bin/bash set -e source funcs.sh # # stage3 install # # sync time ntpd -q -g || true # download & unpack stage3 tarball links https://www.gentoo.org/downloads/mirrors/ LINKS_RUNNING="true" while [[ $LINKS_RUNNING == "true" ]]; do log_msg INFO "Waiting for user to quit links ..." LINKS_RUNNING=$(ps -aux | (grep -o '[l]inks') || true) sleep 5s done tar xpvf stage3-*.tar.xz --xattrs-include="*.*" --numeric-owner rm stage3-*.tar.xz # set USE flags for later rm -rf /mnt/gentoo/etc/package.use touch /mnt/gentoo/etc/package.use cat package.use > /mnt/gentoo/etc/package.use # configure portage (COMMON/USE) cat make.conf > /mnt/gentoo/etc/make.conf # make sure DNS works after chroot cp --dereference /etc/resolv.conf /mnt/gentoo/etc/ # mount filesystems mount --types proc /proc /mnt/gentoo/proc mount --rbind /sys /mnt/gentoo/sys mount --make-rslave /mnt/gentoo/sys mount --rbind /dev /mnt/gentoo/dev mount --make-rslave /mnt/gentoo/dev mount --bind /run /mnt/gentoo/run mount --make-slave /mnt/gentoo/run # change root! chroot /mnt/gentoo /bin/bash << EOF set -e source funcs.sh source /etc/profile export PS1="(chroot) ${PS1}" log_msg INFO "mount boot partition (EFI)" >> /var/log/installer.log mkdir -p /boot/efi mount ${CFG_BLOCK_PART}1 /boot/efi log_msg INFO "synchronize gentoo ebuild repo" >> /var/log/installer.log emerge --ask n --sync # set some makeopts and default opts # WARNING: THE DEFAULT USES ALL THE THREADS IN THE SYSTEM! # IF YOU DO NOT WANT THIS PLEASE CHANGE IT TO WHAT GENTOO RECOMMENDS # https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage#MAKEOPTS emerge --ask n cpuid2cpuflags cpuid2cpuflags | sed 's/:\s/="/; s/$/"/' >> /etc/portage/make.conf echo "EMERGE_DEFAULT_OPTS=\"--jobs=$(nproc) --load-average=$(nproc) --keep-going --verbose --quiet-build --with-bdeps=y --complete-graph=y --deep --ask\"" >> /etc/portage/make.conf echo "MAKEOPTS=\"-j$(nproc) -l$(nproc)\"" >> /etc/portage/make.conf # install custom compiler for firefox mkdir -p /etc/portage/env curl -L https://gist.githubusercontent.com/emrakyz/23bf6fe9c30aa0b1eb88021889750ace/raw/832a0160ac0d0383c4f600da5cf8af4290019ff6/compiler-firefox -o /etc/portage/env/compiler-firefox echo "www-client/firefox compiler-firefox" > /etc/portage/package.env # TODO: select profile log_msg INFO "update @world set (@system and @selected)" >> /var/log/installer.log emerge --ask n --update --deep --newuse @world emerge --ask n @preserved-rebuild emerge --ask n --depclean log_msg INFO "configure licenses" >> /var/log/installer.log echo "ACCEPT_LICENSE=\"*\"" >> /etc/portage/make.conf log_msg INFO "configure timezone (glibc)" >> /var/log/installer.log echo ${CFG_TIMEZONE} > /etc/timezone emerge --ask n --config sys-libs/timezone-data log_msg INFO "configure locales (glibc)" >> /var/log/installer.log echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen locale-gen log_msg INFO "reload environment" >> /var/log/installer.log env-update && source /etc/profile && export PS1="(chroot) ${PS1}" # # firmware install # log_msg INFO "installing microcode and firmware" >> /var/log/installer.log emerge --ask n intel-microcode SIGNATURE=$(iucode_tool -S 2>&1 | grep -o "0.*$") sed -i "s/MICROCODE_SIGNATURES=\"-S\"/MICROCODE_SIGNATURES=\"-s $SIGNATURE\"/" /etc/portage/make.conf emerge --ask n intel-microcode USE="-compress-xz" emerge --ask n linux-firmware emerge --oneshot --ask n pciutils GPU_CODE=$(lspci | grep -i 'vga\|3d\|2d' | awk -F'[[]' '{print $1}' | awk '{print $NF}' | tr '[:upper:]' '[:lower:]') sed -i "/^nvidia\/\($GPU_CODE\)/!d" /etc/portage/savedconfig/sys-kernel/linux-firmware-* USE="-harfbuzz" emerge --oneshot --ask n freetype emerge --oneshot --ask n freetype # # kernel install # log_msg INFO "install kernel sources" >> /var/log/installer.log emerge --ask n sys-kernel/gentoo-sources log_msg INFO "select kernel sources" >> /var/log/installer.log eselect kernel list eselect kernel set 1 log_msg INFO "install genkernel" >> /var/log/installer.log emerge --ask n sys-kernel/genkernel log_msg INFO "set /boot/efi in fstab" >> /var/log/installer.log echo "${CFG_BLOCK_PART}1 /boot/efi vfat defaults 0 2" >> /etc/fstab if [[ "${CFG_LLVM}" == "y" ]]; then log_msg INFO "compile kernel sources (llvm)" >> /var/log/installer.log LLVM=1 LLVM_IAS=1 genkernel all \ --kernel-as=llvm-as \ --kernel-ar=llvm-ar \ --kernel-cc=clang \ --kernel-ld=ld.lld \ --kernel-nm=llvm-nm \ --utils-as=llvm-as \ --utils-ar=llvm-ar \ --utils-cc=clang \ --utils-cxx=clang++ \ --utils-ld=ld.lld \ --utils-nm=llvm-nm else log_msg INFO "compile kernel sources (gcc)" >> /var/log/installer.log genkernel all fi # # filesystem install # log_msg INFO "set swap, / and cdrom in fstab" >> /var/log/installer.log mkdir -p /mnt/cdrom echo "${CFG_BLOCK_PART}"2 none swap sw 0 0 >> /etc/fstab echo "${CFG_BLOCK_PART}"3 / ext4 noatime 0 1 >> /etc/fstab echo /dev/cdrom /mnt/cdrom auto noauto,user 0 0 >> /etc/fstab # # networking install # log_msg INFO "set hostname" >> /var/log/installer.log echo "hostname=\"${CFG_HOSTNAME}\"" > /etc/conf.d/hostname log_msg INFO "install networkmanager" >> /var/log/installer.log emerge --ask n --noreplace net-misc/networkmanager log_msg INFO "install dhcpcd" >> /var/log/installer.log emerge --ask n net-misc/dhcpcd log_msg INFO "install wireless" >> /var/log/installer.log emerge --ask n net-wireless/iw net-wireless/wpa_supplicant log_msg INFO "configure networking" >> /var/log/installer.log log_msg INFO "configure hosts" >> /var/log/installer.log echo "127.0.0.1 ${CFG_HOSTNAME} localhost" >> /etc/hosts # # system install # log_msg INFO "set root password" >> /var/log/installer.log echo "root:${CFG_ROOT_PASSWORD}" | chpasswd log_msg INFO "set keymap" >> /var/log/installer.log sed -i '/^keymap/s/=.*$/=$"'"fi"'"/' /etc/conf.d/keymaps rc-update add keymaps boot rc-service keymaps restart log_msg INFO "install syslog" >> /var/log/installer.log emerge --ask n app-admin/sysklogd rc-update add sysklogd default log_msg INFO "install crond" >> /var/log/installer.log emerge --ask n sys-process/cronie rc-update add cronie default log_msg INFO "install file indexer" >> /var/log/installer.log emerge --ask n sys-apps/mlocate log_msg INFO "install filesystem tools" >> /var/log/installer.log emerge --ask n sys-fs/e2fsprogs emerge --ask n sys-fs/dosfstools # # bootloader install # log_msg INFO "install grub2 with efi" >> /var/log/installer.log echo "GRUB_PLATFORMS=\"efi-64\"" >> /etc/portage/make.conf emerge --ask n sys-boot/grub log_msg INFO "install EFI bootloader" >> /var/log/installer.log grub-install --target=x86_64-efi --efi-directory=/boot/efi log_msg INFO "configure bootloader" >> /var/log/installer.log grub-mkconfig -o /boot/grub/grub.cfg EOF