User:Bugalo/Dell XPS 15 7590

From Gentoo Wiki
Jump to:navigation Jump to:search
Warning, this page is a work in progress by Bugalo (talk | contribs). Treat its contents with caution.
Resources

The Dell XPS 15 7590 is the 2019 model of Dell's slim 15 inch laptop. It is fully functional with the latest Linux kernel versions.

Summary

This document will serve as a guide on how to install Gentoo on the Dell XPS 15 7590 with the following configuration:

  • Dual boot with Windows 10, in UEFI with GPT mode, using GRUB as a boot loader.
  • ZFS on all non-Windows partitions, including root, with native transparent compression and encryption. Deduplication will not be configured.
  • GNOME with systemd profile.

Hardware

Standard

Device Make/model Status Vendor ID / Product ID Kernel driver(s) Firmware Kernel version Notes
CPU Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz Works N/A N/A N/A 4.19.86 Different CPU options are available for this laptop.
GPU Intel(R) UHD Graphics 630 Works 8086:3e9b i915 kbl_dmc 4.19.86 N/A
RAM 32GB DDR4-2666MHz

Hynix HMA82GS6DJR8N-VK

Works N/A N/A N/A 4.19.86 Different RAM options are available for this laptop.

Two RAM slots. Up to 64GB.

Hard Disk Intel(R) SSD 760p 1.024TB SSDPEMKF010T8 NVMe INTEL 1.0TB Works 8086:f1a6 NVMe N/A 4.19.86 Different disk options are available for this laptop.

One NVMe slot.

Wifi Intel(R) Wi-Fi 6 AX200 Works 8086:2723 iwlwifi iwlwifi 5.1.4[1] Requires 5.1+ kernel to work.
Sound Realtek ALC3266 Works N/A snd_hda_intel snd_hda_codec_realtek N/A 4.19.86 N/A
Sound Intel(R) Cannon Lake PCH cAVS Works 8086:a348 snd_hda_intel snd_hda_codec_hdmi N/A 4.19.86 N/A

Accessories

Device Make/model Status Bus ID Kernel driver(s) Kernel version Notes
Dock ThinkPad Pro Dock Not tested N/A N/A 3.18.9 Note example.

Installation

Dual boot with Windows 10

Dual booting with Windows 10 requires some special steps that need to be performed both within Windows and the laptop's BIOS. All the steps of this section need to be performed within Windows 10 unless stated otherwise.

  1. Update Windows and the laptop's BIOS and firmware:
    • Open Windows Update and update as needed.
    • Open Dell Update and update the BIOS, firmware and controllers as needed.
  2. Create a recovery USB[2]. This drive can be used to restore the laptop's factory settings in case of need.
  3. Turn off Device Encryption and/or the Bitlocker Encryption[3]. It can be turned on again after install.
    Important
    The steps presented in the link above show how to turn on encryption. Modify appropriately to turn it off.
  4. Turn off Fast Startup[4].
  5. Configure Windows to use UTC[5] rather than localtime.
  6. Switch Windows 10 from RAID to AHCI operation[6], and disable Secure Boot and Fastboot in the BIOS[7].
    • Open cmd as administrator.
    • Run the command bcdedit /set {current} safeboot minimal.
    • Restart the computer and enter the BIOS by pressing F12 during boot.
    • Under System Configuration, change the SATA operation mode from RAID to AHCI.
    • Under Secure Boot, disable secure boot.
    • Under POST Behaviour, change Fastboot to Thorough.
    • Under Security, Absolute, choose Permanently Disabled to remove the Absolute Persistence Module tracking backdoor.
      Important
      This laptop comes with, at least, one tracking backdoor activated in the BIOS, autonomous with respect to the operating system, called Absolute Persistence Module. In principle, it might be permanently disabled by following the step above.
    • Save changes and exit.
    • Boot Windows. It will start in Safe Mode.
    • Open cmd as administrator.
    • Run the command bcdedit /deletevalue {current} safeboot.
    • Reboot.
  7. Reduce the size of the Windows install.
    • Disable Windows' hibernation[8]. This will free a space in the hard drive as big as the computer's RAM.
    • Enable NTFS compression in C:[9].
    • Run Compact OS[10].
    • Disable Virtual Memory[11].
    • Remove pre-installed bloatware[12].
    • Shrink the C: partition to leave space to Gentoo[13].
  8. Remove unneeded partitions created during Windows 10 install, i.e. Wineretools, Image, Dellsupport. Anything needed from those partitions should be already in the recovery USB created above.
    • Removing Wineretools[14].
      Important
      The file winre.wim mentioned in the link is not locatd in the Wineretools partition but in the recovery USB at D:\sources\OEM\winre.wim.
    • The partitions Image and Dellsupport can be deleted, their content should be already in the recovery USB. Their content might be copied, again, in the USB before deletion.
    • Microsoft Reserved Partition: there is a hidden partition of around 128mb. It will not appear in Windows' Disk Manager, but it will be shown by Gentoo's tools. Deleting this partition will render Windows 10 unbootable.
      Warning
      Removing the Microsoft Reserved Partition will render Windows 10 unbootable.

Preparing the Ubuntu Live Environment

  1. Create an Ubuntu bootable USB using, for example using UNetbootin.
  2. Plug the USB and boot the laptop.
  3. Access the One-time boot menu of the BIOS by pressing F2.
  4. Choose the appropriate entry to boot from the live USB.
  5. In the GRUB menu, choose Try Ubuntu without installing.
  6. Connect to the internet, through either a wireless[15] or wired network[16] with an USB-C to ethernet adapter.
  7. Upgrade Ubuntu to use the latest ZFS modules availabe.
    root #apt-get update
    root #apt-get upgrade
  8. Verify that ZFS is loaded
    user $dmesg | grep -i zfs
    [	9.658459] ZFS: Loaded module v0.8.1-1ubuntu12, ZFS pool version 5000, ZFS filesystem version 5 
  9. Create a folder for the Gentoo install.
    root #mkdir /mnt/gentoo
  10. Install the text editor of your choice, e.g. Vim.
    root #apt-get install vim
    Important
    This guide uses Vim as a text editor. Feel free to substitute it by your preferred editor.

Create the ZFS layout

All the partitions of the system will use the ZFS filesystem except the EFI System Partition (ESP), formatted in FAT, the aforementioned Microsoft Reserved Partition, and the Windows partition, formatted in NTFS. ZFS allows the use of whole disks, without partitioning, to install the different parts of the system. In this case, the whole disk would be a ZFS pool, and we would create different ZFS datasets in it that would be conceptually similar to traditional partitions, but they don't need to have a fixed predetermined size. However, the presence of Windows on the drive requires partitioning the disk. Thus, a ZFS pool needs to be created in a partition, not in the whole disk. Furthermore, GRUB cannot currently reside in a ZFS pool with advanced features activated, such as encryption[17]. In order to satisfy both requirements of using GRUB as a boot loader and having the system residing in ZFS with native encryption, we need to create yet another ZFS pool compatible with GRUB.

  1. Open GParted.
  2. Create an unformatted partition, /dev/nvme0n1p4, in the unallocated space, named Gentoo-Boot, of around 1GB.
  3. Create an unformatted partition, /dev/nvme0n1p5, in the unallocated space, named Gentoo-Root, occupying the remaining space.
  4. Apply all operations and exit.
  5. Create a ZFS pool, with all GRUB's unsupported features disabled, in /dev/nvme0n1p4.
    root #zpool create -d -o feature@allocation_classes=enabled \
                          -o feature@async_destroy=enabled      \ 
                          -o feature@bookmarks=enabled          \ 
                          -o feature@embedded_data=enabled      \ 
                          -o feature@empty_bpobj=enabled        \ 
                          -o feature@enabled_txg=enabled        \ 
                          -o feature@extensible_dataset=enabled \ 
                          -o feature@filesystem_limits=enabled  \ 
                          -o feature@hole_birth=enabled         \ 
                          -o feature@large_blocks=enabled       \ 
                          -o feature@lz4_compress=enabled       \ 
                          -o feature@project_quota=enabled      \ 
                          -o feature@resilver_defer=enabled     \ 
                          -o feature@spacemap_histogram=enabled \ 
                          -o feature@spacemap_v2=enabled        \ 
                          -o feature@userobj_accounting=enabled \ 
                          -o feature@zpool_checkpoint=enabled   \ 
                          -f -o ashift=12                       \ 
                          -o autotrim=on                        \ 
                          -o cachefile=/tmp/zpool.cache         \ 
                          -O aclinherit=passthrough             \ 
                          -O acltype=posixacl                   \ 
                          -O atime=off                          \ 
                          -O canmount=off                       \ 
                          -O devices=off                        \ 
                          -O mountpoint=/                       \ 
                          -O normalization=formD                \ 
                          -O xattr=sa                           \ 
                          -R /mnt/gentoo                        \ 
                          bpool /dev/nvme0n1p4
  6. Create a ZFS pool, for the Gentoo system, in /dev/nvme0n1p5.
    root #zpool create -f -o ashift=12 \
                          -o autotrim=on                        \ 
                          -o cachefile=/tmp/zpool.cache         \ 
                          -O acltype=posixacl                   \ 
                          -O aclinherit=passthrough             \ 
                          -O atime=off                          \ 
                          -O canmount=off                       \ 
                          -O devices=off                        \ 
                          -O dnodesize=auto                     \ 
                          -O mountpoint=/                       \ 
                          -O normalization=formD                \ 
                          -O xattr=sa                           \ 
                          -R /mnt/gentoo                        \ 
                          rpool /dev/nvme0n1p5
    Important
    Note that most native encryption ZFS guides encrypt the root ZFS pool[18]. However, this forces all its child pools and datasets to be encrypted and with the same algorithm[19]. Thus, here rpool will be left unencrypted, while encryption will be applied to its children.
  7. The status and properties of the pools created above can be checked with the following commands:
    root #zpool status
      pool: bpool 
     state: ONLINE
    status: Some supported features are not enabled on the pool. The pool can
    	still be used, but some features are unavailable.
    action: Enable all features using 'zpool upgrade'. Once this is done,
    	the pool may no longer be accessible by software that does not support
    	the features. See zpool-features(5) for details.
      scan: none requested
    config:

    	NAME         STATE     READ WRITE CKSUM
    	bpool        ONLINE       0     0     0
    	  nvme0n1p4  ONLINE       0     0     0

    errors: No known data errors

      pool: rpool
     state: ONLINE
      scan: none requested
    config:

    	NAME         STATE     READ WRITE CKSUM
    	rpool        ONLINE       0     0     0
    	  nvme0n1p5  ONLINE       0     0     0

    errors: No known data errors
    root #zfs get all bpool
    root #zfs get all rpool
  8. Create the ZFS dataset where GRUB2 will reside:
    root #zfs create -o canmount=off -o compression=gzip-9 -o mountpoint=none bpool/BOOT
    root #zfs create -o canmount=noauto -o compression=gzip-9 -o dnodesize=legacy -o mountpoint=/mnt/gentoo/boot bpool/BOOT/gentoo
    Important
    The LZ4 compression algorithm is generally favored over Gzip, due to its good balance between compression ratio and computational power required[20]. However, this guide uses gzip-9 as compression algorithm, offering the highest compression level at a higher computational cost. This is due to the availability of a powerful CPU in the system.
    Warning
    At the time of writing this paragraph, Grub does not support booting from a zfs pool compressed with zstd.
    Warning
    Setting here the parameter dnodesize to anything other than legacy will result in the following error[21]:
    cannot set property for 'bpool': operation not supported on this type of pool
  9. Create the ZFS dataset where root will reside:
    root #zfs create -o canmount=off -o compression=zstd-19 -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt -o mountpoint=none rpool/ROOT
    root #zfs create -o canmount=noauto -o compression=zstd-19 -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt -o mountpoint=/mnt/gentoo rpool/ROOT/gentoo
    Important
    The default mode of operation of ZFS native encryption is aes-256-ccm. However, aes-256-gcm is generally preferred[22].
    Important
    According to various benchmarks, zstd should provide similar or higher compression levels than gzip, but with higher compression and decompression speed.
  10. Create the ZFS dataset where home will reside:
    root #zfs create -o compression=zstd-19 -o encryption=aes-256-gcm -o keyformat=passphrase -o mountpoint=/mnt/gentoo/home rpool/ROOT/home
  11. Mount all the ZFS datasets :
    root #zfs mount rpool/ROOT/gentoo
    root #zfs mount bpool/BOOT/gentoo
  12. Check that the ZFS layout is correct:
    root #zfs list -t all
  13. Set the ZFS dataset used for booting:
    root #zpool set bootfs=bpool/BOOT/gentoo bpool
    Check that the bootfs property has been properly set:
    root #zpool get bootfs bpool

Install the Gentoo base system

This section will closely follow Gentoo's AMD64 Handbook, with adjustments where appropriate.

  1. Verify that the date and time of the system is correct. If not, fix it:
    root #date
    Thu Jan 23 23:35:23 CET 2020
  2. Choose a stage tarball: multilib 64-bit stage tarball.
  3. Move to the root installation directory:
    root #cd /mnt/gentoo/
  4. Find the name of the latest amd64 systemd stage3 at http://distfiles.gentoo.org/releases/amd64/autobuilds/latest-stage3-amd64-systemd.txt and download it:
    Note
    Modify the name of the stage3 file appropriately.
    Tip
    The downloaded stage3 file can be verified.
  5. Unpack the stage3 tarball:
    root #tar xpvf stage3-*.tar.xz --xattrs-include='*.*' --numeric-owner
  6. Edit make.conf to configure:
    • The compile options to optimize compiled code, including the CPU_FLAGS_X86[23].
    • The global USE variable to specify system-wide package support.
    • The ACCEPT_LICENSE variable to select the license group automatically accepted.
      root #vim /mnt/gentoo/etc/portage/make.conf
      FILE /etc/portage/make.confSetting the CPU_FLAGS_X86, USE and ACCEPT_LICENSE variables for systemwide support
      '"`UNIQ--pre-00000059-QINU`"''"`UNIQ--pre-0000005A-QINU`"''"`UNIQ--pre-0000005B-QINU`"''"`UNIQ--pre-0000005C-QINU`"''"`UNIQ--pre-0000005D-QINU`"''"`UNIQ--pre-0000005E-QINU`"'
      
      Tip
      A working make.conf for this system can be found here.
  7. Configure the Gentoo ebuild repository:
    root #mkdir --parents /mnt/gentoo/etc/portage/repos.conf
    root #cp /mnt/gentoo/usr/share/portage/config/repos.conf /mnt/gentoo/etc/portage/repos.conf/gentoo.conf
  8. Copy the DNS info:
    root #cp --dereference /etc/resolv.conf /mnt/gentoo/etc/
  9. Mount the necessary filesystems:
    root #mount --types proc /proc /mnt/gentoo/proc
    root #mount --rbind /sys /mnt/gentoo/sys
    root #mount --make-rslave /mnt/gentoo/sys
    root #mount --rbind /dev /mnt/gentoo/dev
    root #mount --make-rslave /mnt/gentoo/dev
    root #mount --bind /run /mnt/gentoo/run
    root #mount --make-slave /mnt/gentoo/run
  10. Copy the zpool.cache to the installation directory:
    root #mkdir -p /mnt/gentoo/etc/zfs
    root #cp /tmp/zpool.cache /mnt/gentoo/etc/zfs/zpool.cache
  11. Copy /etc/hostid, genkernel will later complain if it does not exist[24]:
    root #cp /etc/hostid /mnt/gentoo/etc/hostid
  12. Chroot into the new environment:
    root #chroot /mnt/gentoo /bin/bash
    root #source /etc/profile
    root #export PS1="(chroot) ${PS1}"
  13. Update the Gentoo ebuild repository:
    (chroot) root #emerge --sync --quiet
    (chroot) root #eselect news list
    (chroot) root #eselect news read
    (chroot) root #eselect news purge
  14. Choose the appropriate portage profile:
    (chroot) root #eselect profile list
    (chroot) root #eselect profile set default/linux/amd64/17.1/desktop/gnome/systemd
  15. Select fast mirrors available for source code download, by using mirrorselect:
    (chroot) root #emerge --ask app-portage/mirrorselect
    (chroot) root #mirrorselect -s4 -b10 -D
  16. Emerge Vim to be used as a text editor:
    (chroot) root #echo "app-editors/vim ~amd64" >> /etc/portage/package.accept_keywords/vim
    (chroot) root #echo "app-editors/vim-core ~amd64" >> /etc/portage/package.accept_keywords/vim-core
    (chroot) root #echo "app-editors/gvim ~amd64" >> /etc/portage/package.accept_keywords/gvim
    (chroot) root #emerge --ask app-editors/vim app-editors/gvim
  17. Set the timezone and reconfigure the sys-libs/timezone-data:
    (chroot) root #ls /usr/share/zoneinfo
    (chroot) root #echo "Europe/Madrid" > /etc/timezone
    (chroot) root #emerge --config sys-libs/timezone-data
  18. Configure the locales to use, at leaset, one UTF-8 locale:
    • Edit /etc/locale.gen:
      (chroot) root #vim /etc/locale.gen
      and uncomment the line referencing en_US.UTF-8 UTF-8:
      FILE /etc/locale.genAdding an UTF-8 locale
      '"`UNIQ--pre-0000006A-QINU`"''"`UNIQ--pre-0000006B-QINU`"''"`UNIQ--pre-0000006C-QINU`"'
      
    • Generate the locales:
      (chroot) root #locale-gen
      (chroot) root #eselect locale list
      (chroot) root #eselect locale set en_US.utf8
    • Reload the environment:
      (chroot) root #env-update && source /etc/profile && export PS1="(chroot) ${PS1}"
  19. Unmask the latest versions of sys-fs/zfs and sys-fs/zfs-kmod:
    (chroot) root #echo "sys-fs/zfs ~amd64" >> /etc/portage/package.accept_keywords/zfs
    (chroot) root #echo "sys-fs/zfs-kmod ~amd64" >> /etc/portage/package.accept_keywords/zfs-kmod
    Note
    ZFSOnLinux is under very active development, and the latest versions provide bug fixes and implement new interesting features, e.g zfs-0.8.0 introduced native encryption, support for TRIM in SSDs, etc[25].
    Important
    Versions of sys-fs/zfs lower than 0.8.0 depend on sys-kernel/spl. However, as of version 0.8.0, this dependency has been removed.[25].
  20. Unmask the latest versions of sys-boot/grub and add ZFS support:
    (chroot) root #echo "sys-boot/grub ~amd64" >> /etc/portage/package.accept_keywords/grub
    (chroot) root #echo "sys-boot/grub libzfs" > /etc/portage/package.use/grub
  21. Update the world set:
    (chroot) root #emerge -auvDN @world

Configuring, building and installing the Linux kernel

Warning
This laptop has an Intel® Wi-Fi 6 AX200 160MHz wireless chip, which use the iwlwifi driver. According to this table, it requires kernel version 5.1 or above to work, higher than the latest stable kernel version at the time of writing this.
Warning
At the time of writing this, ZFS 0.8.4 is not compatible with kernel versions 5.7.0 and above.
Tip
Working kernel configuration files, for different kernel versions, can be found here.
  1. Unmask a suitable kernel version:
    (chroot) root #echo "sys-kernel/gentoo-sources ~amd64" >> /etc/portage/package.accept_keywords/gentoo-sources
    Warning
    At the time of writing this, ZFS 0.8.4 is not compatible with kernel versions 5.7.0 and above. Mask the incompatible kernel versions:
    (chroot) root #echo ">=sys-kernel/gentoo-sources-5.7.0" >> /etc/portage/package.mask/gentoo-sources
  2. Install the kernel and genkernel:
    (chroot) root #emerge -auvDN sys-kernel/gentoo-sources sys-kernel/genkernel
  3. Add compression support to sys-apps/kmod in order to be able to load compressed modules:
    (chroot) root #echo "sys-apps/kmod lzma zlib" >> /etc/portage/package.use/kmod
    (chroot) root #emerge -auvDN sys-apps/kmod
  4. Configure the kernel:
    (chroot) root #eselect kernel list
    (chroot) root #eselect kernel set 2
    (chroot) root #cd /usr/src/linux
    (chroot) root #make menuconfig
    • Enable Firmware loading support:
      KERNEL Enable support for Linux firmware
      '"`UNIQ--pre-00000081-QINU`"''"`UNIQ--pre-00000082-QINU`"''"`UNIQ--pre-00000083-QINU`"''"`UNIQ--pre-00000084-QINU`"''"`UNIQ--pre-00000085-QINU`"''"`UNIQ--pre-00000086-QINU`"'
      
    • Architecture specific kernel configuration:
      KERNEL Selecting processor types and features
      '"`UNIQ--pre-00000089-QINU`"''"`UNIQ--pre-0000008A-QINU`"''"`UNIQ--pre-0000008B-QINU`"''"`UNIQ--pre-0000008C-QINU`"''"`UNIQ--pre-0000008D-QINU`"''"`UNIQ--pre-0000008E-QINU`"''"`UNIQ--pre-0000008F-QINU`"''"`UNIQ--pre-00000090-QINU`"''"`UNIQ--pre-00000091-QINU`"''"`UNIQ--pre-00000092-QINU`"'</br>'"`UNIQ--pre-00000093-QINU`"''"`UNIQ--pre-00000094-QINU`"'
      
    • Enable Hyper-Threading support:
      KERNEL Configuration for multi-processing support
      '"`UNIQ--pre-00000097-QINU`"''"`UNIQ--pre-00000098-QINU`"''"`UNIQ--pre-00000099-QINU`"''"`UNIQ--pre-0000009A-QINU`"''"`UNIQ--pre-0000009B-QINU`"'
      
      KERNEL Power management for multi-processor systems
      '"`UNIQ--pre-0000009E-QINU`"''"`UNIQ--pre-0000009F-QINU`"'
      
    • Enable SATA support, needed if using a SATA hard drive; SCSI, needed for SATA devices, USB external hard drives and optical drives, etc.:
      KERNEL Configuration options for SCSI support
      '"`UNIQ--pre-000000A2-QINU`"''"`UNIQ--pre-000000A3-QINU`"''"`UNIQ--pre-000000A4-QINU`"''"`UNIQ--pre-000000A5-QINU`"''"`UNIQ--pre-000000A6-QINU`"''"`UNIQ--pre-000000A7-QINU`"''"`UNIQ--pre-000000A8-QINU`"''"`UNIQ--pre-000000A9-QINU`"'
      
    • Enable NVMe device support:
      KERNEL Configuration for NVMe support
      '"`UNIQ--pre-000000AC-QINU`"''"`UNIQ--pre-000000AD-QINU`"''"`UNIQ--pre-000000AE-QINU`"'
      
    • Enable compressed kernel modules:
      Warning
      I have not been able to boot from a ZFS system with compressed modules enabled, although it should be entirely possible. Use at your own risk.
      KERNEL Enable module compression
      '"`UNIQ--pre-000000B1-QINU`"''"`UNIQ--pre-000000B2-QINU`"''"`UNIQ--pre-000000B3-QINU`"''"`UNIQ--pre-000000B4-QINU`"''"`UNIQ--pre-000000B5-QINU`"'
      
    • Enable devtmpfs support:
      KERNEL Enabling devtmpfs support
      '"`UNIQ--pre-000000B8-QINU`"''"`UNIQ--pre-000000B9-QINU`"''"`UNIQ--pre-000000BA-QINU`"''"`UNIQ--pre-000000BB-QINU`"'
      
    • Enable support for the filesystems used:
      KERNEL Selecting necessary file systems
      '"`UNIQ--pre-000000BE-QINU`"''"`UNIQ--pre-000000BF-QINU`"''"`UNIQ--pre-000000C0-QINU`"''"`UNIQ--pre-000000C1-QINU`"''"`UNIQ--pre-000000C2-QINU`"''"`UNIQ--pre-000000C3-QINU`"''"`UNIQ--pre-000000C4-QINU`"''"`UNIQ--pre-000000C5-QINU`"''"`UNIQ--pre-000000C6-QINU`"''"`UNIQ--pre-000000C7-QINU`"''"`UNIQ--pre-000000C8-QINU`"''"`UNIQ--pre-000000C9-QINU`"''"`UNIQ--pre-000000CA-QINU`"''"`UNIQ--pre-000000CB-QINU`"''"`UNIQ--pre-000000CC-QINU`"''"`UNIQ--pre-000000CD-QINU`"''"`UNIQ--pre-000000CE-QINU`"''"`UNIQ--pre-000000CF-QINU`"''"`UNIQ--pre-000000D0-QINU`"'
      
    • Enable support for FUSE:
      KERNEL Enable support for FUSE
      '"`UNIQ--pre-000000D3-QINU`"''"`UNIQ--pre-000000D4-QINU`"'
      
    • Enable GPT support:
      KERNEL Enable support for GPT
      '"`UNIQ--pre-000000D7-QINU`"''"`UNIQ--pre-000000D8-QINU`"''"`UNIQ--pre-000000D9-QINU`"''"`UNIQ--pre-000000DA-QINU`"'
      
    • Enable UEFI support:
      KERNEL Enable support for UEFI
      '"`UNIQ--pre-000000DD-QINU`"''"`UNIQ--pre-000000DE-QINU`"''"`UNIQ--pre-000000DF-QINU`"''"`UNIQ--pre-000000E0-QINU`"'</br>'"`UNIQ--pre-000000E1-QINU`"''"`UNIQ--pre-000000E2-QINU`"''"`UNIQ--pre-000000E3-QINU`"'
      
    • Configure USB support:
      KERNEL Configuration for USB Host Controller Devices
      '"`UNIQ--pre-000000E6-QINU`"''"`UNIQ--pre-000000E7-QINU`"''"`UNIQ--pre-000000E8-QINU`"''"`UNIQ--pre-000000E9-QINU`"''"`UNIQ--pre-000000EA-QINU`"''"`UNIQ--pre-000000EB-QINU`"''"`UNIQ--pre-000000EC-QINU`"''"`UNIQ--pre-000000ED-QINU`"''"`UNIQ--pre-000000EE-QINU`"''"`UNIQ--pre-000000EF-QINU`"''"`UNIQ--pre-000000F0-QINU`"''"`UNIQ--pre-000000F1-QINU`"''"`UNIQ--pre-000000F2-QINU`"''"`UNIQ--pre-000000F3-QINU`"''"`UNIQ--pre-000000F4-QINU`"'
      
    • Configure USB support for input devices:
      KERNEL Configuration for USB input devices
      '"`UNIQ--pre-000000F7-QINU`"''"`UNIQ--pre-000000F8-QINU`"''"`UNIQ--pre-000000F9-QINU`"''"`UNIQ--pre-000000FA-QINU`"''"`UNIQ--pre-000000FB-QINU`"''"`UNIQ--pre-000000FC-QINU`"''"`UNIQ--pre-000000FD-QINU`"'
      
    • Enable USB Type-C and Thunderbolt support:
      KERNEL PCI Hotplugging
      '"`UNIQ--pre-00000100-QINU`"''"`UNIQ--pre-00000101-QINU`"''"`UNIQ--pre-00000102-QINU`"''"`UNIQ--pre-00000103-QINU`"''"`UNIQ--pre-00000104-QINU`"''"`UNIQ--pre-00000105-QINU`"''"`UNIQ--pre-00000106-QINU`"'
      
    • Enable USB audio:
      KERNEL Enable support for SND_USB_AUDIO
      '"`UNIQ--pre-00000109-QINU`"''"`UNIQ--pre-0000010A-QINU`"''"`UNIQ--pre-0000010B-QINU`"''"`UNIQ--pre-0000010C-QINU`"''"`UNIQ--pre-0000010D-QINU`"''"`UNIQ--pre-0000010E-QINU`"'
      
    • Enable systemd support:
      KERNEL Enable support for Linux firmware
      '"`UNIQ--pre-00000111-QINU`"''"`UNIQ--pre-00000112-QINU`"''"`UNIQ--pre-00000113-QINU`"''"`UNIQ--pre-00000114-QINU`"''"`UNIQ--pre-00000115-QINU`"''"`UNIQ--pre-00000116-QINU`"''"`UNIQ--pre-00000117-QINU`"''"`UNIQ--pre-00000118-QINU`"''"`UNIQ--pre-00000119-QINU`"''"`UNIQ--pre-0000011A-QINU`"''"`UNIQ--pre-0000011B-QINU`"''"`UNIQ--pre-0000011C-QINU`"''"`UNIQ--pre-0000011D-QINU`"''"`UNIQ--pre-0000011E-QINU`"''"`UNIQ--pre-0000011F-QINU`"''"`UNIQ--pre-00000120-QINU`"'</br>'"`UNIQ--pre-00000121-QINU`"''"`UNIQ--pre-00000122-QINU`"'</br>'"`UNIQ--pre-00000123-QINU`"''"`UNIQ--pre-00000124-QINU`"'</br>'"`UNIQ--pre-00000125-QINU`"''"`UNIQ--pre-00000126-QINU`"''"`UNIQ--pre-00000127-QINU`"'</br>'"`UNIQ--pre-00000128-QINU`"''"`UNIQ--pre-00000129-QINU`"''"`UNIQ--pre-0000012A-QINU`"''"`UNIQ--pre-0000012B-QINU`"'</br>'"`UNIQ--pre-0000012C-QINU`"''"`UNIQ--pre-0000012D-QINU`"''"`UNIQ--pre-0000012E-QINU`"''"`UNIQ--pre-0000012F-QINU`"''"`UNIQ--pre-00000130-QINU`"''"`UNIQ--pre-00000131-QINU`"'</br>'"`UNIQ--pre-00000132-QINU`"''"`UNIQ--pre-00000133-QINU`"''"`UNIQ--pre-00000134-QINU`"''"`UNIQ--pre-00000135-QINU`"''"`UNIQ--pre-00000136-QINU`"''"`UNIQ--pre-00000137-QINU`"''"`UNIQ--pre-00000138-QINU`"''"`UNIQ--pre-00000139-QINU`"''"`UNIQ--pre-0000013A-QINU`"'</br>'"`UNIQ--pre-0000013B-QINU`"''"`UNIQ--pre-0000013C-QINU`"''"`UNIQ--pre-0000013D-QINU`"''"`UNIQ--pre-0000013E-QINU`"'
      
      Important
      Because of Device Drivers >> X86 Platform Specific Device Drivers >> BIOS update support for DELL systems via sysfs (DELL_RBU), need to activate Device Drivers >> Generic Driver Options >> Firmware loader >> -*- Enable the firmware sysfs fallback mechanism (CONFIG_FW_LOADER_USER_HELPER)
    • Configure the Intel graphics:
      KERNEL Configuration for Intel graphics
      '"`UNIQ--pre-00000141-QINU`"''"`UNIQ--pre-00000142-QINU`"''"`UNIQ--pre-00000143-QINU`"''"`UNIQ--pre-00000144-QINU`"''"`UNIQ--pre-00000145-QINU`"''"`UNIQ--pre-00000146-QINU`"''"`UNIQ--pre-00000147-QINU`"''"`UNIQ--pre-00000148-QINU`"''"`UNIQ--pre-00000149-QINU`"''"`UNIQ--pre-0000014A-QINU`"''"`UNIQ--pre-0000014B-QINU`"''"`UNIQ--pre-0000014C-QINU`"''"`UNIQ--pre-0000014D-QINU`"''"`UNIQ--pre-0000014E-QINU`"''"`UNIQ--pre-0000014F-QINU`"''"`UNIQ--pre-00000150-QINU`"''"`UNIQ--pre-00000151-QINU`"''"`UNIQ--pre-00000152-QINU`"''"`UNIQ--pre-00000153-QINU`"''"`UNIQ--pre-00000154-QINU`"''"`UNIQ--pre-00000155-QINU`"''"`UNIQ--pre-00000156-QINU`"''"`UNIQ--pre-00000157-QINU`"''"`UNIQ--pre-00000158-QINU`"''"`UNIQ--pre-00000159-QINU`"''"`UNIQ--pre-0000015A-QINU`"''"`UNIQ--pre-0000015B-QINU`"''"`UNIQ--pre-0000015C-QINU`"''"`UNIQ--pre-0000015D-QINU`"''"`UNIQ--pre-0000015E-QINU`"''"`UNIQ--pre-0000015F-QINU`"''"`UNIQ--pre-00000160-QINU`"''"`UNIQ--pre-00000161-QINU`"''"`UNIQ--pre-00000162-QINU`"''"`UNIQ--pre-00000163-QINU`"''"`UNIQ--pre-00000164-QINU`"''"`UNIQ--pre-00000165-QINU`"''"`UNIQ--pre-00000166-QINU`"''"`UNIQ--pre-00000167-QINU`"''"`UNIQ--pre-00000168-QINU`"''"`UNIQ--pre-00000169-QINU`"''"`UNIQ--pre-0000016A-QINU`"''"`UNIQ--pre-0000016B-QINU`"''"`UNIQ--pre-0000016C-QINU`"''"`UNIQ--pre-0000016D-QINU`"''"`UNIQ--pre-0000016E-QINU`"''"`UNIQ--pre-0000016F-QINU`"''"`UNIQ--pre-00000170-QINU`"''"`UNIQ--pre-00000171-QINU`"''"`UNIQ--pre-00000172-QINU`"''"`UNIQ--pre-00000173-QINU`"''"`UNIQ--pre-00000174-QINU`"''"`UNIQ--pre-00000175-QINU`"''"`UNIQ--pre-00000176-QINU`"''"`UNIQ--pre-00000177-QINU`"''"`UNIQ--pre-00000178-QINU`"''"`UNIQ--pre-00000179-QINU`"''"`UNIQ--pre-0000017A-QINU`"''"`UNIQ--pre-0000017B-QINU`"''"`UNIQ--pre-0000017C-QINU`"''"`UNIQ--pre-0000017D-QINU`"''"`UNIQ--pre-0000017E-QINU`"'
      
    • Configure the Xorg support:
      KERNEL Enabling evdev in the kernel
      '"`UNIQ--pre-00000181-QINU`"''"`UNIQ--pre-00000182-QINU`"''"`UNIQ--pre-00000183-QINU`"'
      
      KERNEL Disable legacy framebuffer support and enable basic console FB support
      '"`UNIQ--pre-00000186-QINU`"''"`UNIQ--pre-00000187-QINU`"''"`UNIQ--pre-00000188-QINU`"''"`UNIQ--pre-00000189-QINU`"''"`UNIQ--pre-0000018A-QINU`"''"`UNIQ--pre-0000018B-QINU`"''"`UNIQ--pre-0000018C-QINU`"''"`UNIQ--pre-0000018D-QINU`"''"`UNIQ--pre-0000018E-QINU`"''"`UNIQ--pre-0000018F-QINU`"'
      
    • Configure the Wifi support:
      KERNEL Enabling IEEE 802.11 support
      '"`UNIQ--pre-00000192-QINU`"''"`UNIQ--pre-00000193-QINU`"''"`UNIQ--pre-00000194-QINU`"''"`UNIQ--pre-00000195-QINU`"''"`UNIQ--pre-00000196-QINU`"''"`UNIQ--pre-00000197-QINU`"''"`UNIQ--pre-00000198-QINU`"''"`UNIQ--pre-00000199-QINU`"''"`UNIQ--pre-0000019A-QINU`"''"`UNIQ--pre-0000019B-QINU`"''"`UNIQ--pre-0000019C-QINU`"''"`UNIQ--pre-0000019D-QINU`"''"`UNIQ--pre-0000019E-QINU`"''"`UNIQ--pre-0000019F-QINU`"''"`UNIQ--pre-000001A0-QINU`"''"`UNIQ--pre-000001A1-QINU`"''"`UNIQ--pre-000001A2-QINU`"''"`UNIQ--pre-000001A3-QINU`"''"`UNIQ--pre-000001A4-QINU`"''"`UNIQ--pre-000001A5-QINU`"''"`UNIQ--pre-000001A6-QINU`"'
      
      KERNEL Configure the iwlwifi module
      '"`UNIQ--pre-000001A9-QINU`"''"`UNIQ--pre-000001AA-QINU`"''"`UNIQ--pre-000001AB-QINU`"''"`UNIQ--pre-000001AC-QINU`"''"`UNIQ--pre-000001AD-QINU`"''"`UNIQ--pre-000001AE-QINU`"''"`UNIQ--pre-000001AF-QINU`"''"`UNIQ--pre-000001B0-QINU`"''"`UNIQ--pre-000001B1-QINU`"''"`UNIQ--pre-000001B2-QINU`"''"`UNIQ--pre-000001B3-QINU`"''"`UNIQ--pre-000001B4-QINU`"''"`UNIQ--pre-000001B5-QINU`"''"`UNIQ--pre-000001B6-QINU`"''"`UNIQ--pre-000001B7-QINU`"''"`UNIQ--pre-000001B8-QINU`"''"`UNIQ--pre-000001B9-QINU`"''"`UNIQ--pre-000001BA-QINU`"''"`UNIQ--pre-000001BB-QINU`"''"`UNIQ--pre-000001BC-QINU`"''"`UNIQ--pre-000001BD-QINU`"''"`UNIQ--pre-000001BE-QINU`"''"`UNIQ--pre-000001BF-QINU`"''"`UNIQ--pre-000001C0-QINU`"''"`UNIQ--pre-000001C1-QINU`"''"`UNIQ--pre-000001C2-QINU`"''"`UNIQ--pre-000001C3-QINU`"''"`UNIQ--pre-000001C4-QINU`"''"`UNIQ--pre-000001C5-QINU`"''"`UNIQ--pre-000001C6-QINU`"''"`UNIQ--pre-000001C7-QINU`"''"`UNIQ--pre-000001C8-QINU`"''"`UNIQ--pre-000001C9-QINU`"''"`UNIQ--pre-000001CA-QINU`"''"`UNIQ--pre-000001CB-QINU`"''"`UNIQ--pre-000001CC-QINU`"''"`UNIQ--pre-000001CD-QINU`"''"`UNIQ--pre-000001CE-QINU`"''"`UNIQ--pre-000001CF-QINU`"''"`UNIQ--pre-000001D0-QINU`"''"`UNIQ--pre-000001D1-QINU`"''"`UNIQ--pre-000001D2-QINU`"''"`UNIQ--pre-000001D3-QINU`"'
      
    • Enable NetworkManager support:
      KERNEL Enabling NetworkManager support
      '"`UNIQ--pre-000001D6-QINU`"''"`UNIQ--pre-000001D7-QINU`"''"`UNIQ--pre-000001D8-QINU`"''"`UNIQ--pre-000001D9-QINU`"''"`UNIQ--pre-000001DA-QINU`"''"`UNIQ--pre-000001DB-QINU`"''"`UNIQ--pre-000001DC-QINU`"''"`UNIQ--pre-000001DD-QINU`"'
      
    • Enable hardware clock support:
      KERNEL Necessary kernel options for a hardware clock
      '"`UNIQ--pre-000001E0-QINU`"''"`UNIQ--pre-000001E1-QINU`"''"`UNIQ--pre-000001E2-QINU`"''"`UNIQ--pre-000001E3-QINU`"''"`UNIQ--pre-000001E4-QINU`"''"`UNIQ--pre-000001E5-QINU`"''"`UNIQ--pre-000001E6-QINU`"''"`UNIQ--pre-000001E7-QINU`"''"`UNIQ--pre-000001E8-QINU`"'
      
      KERNEL Letting the kernel sync the system clock
      '"`UNIQ--pre-000001EB-QINU`"''"`UNIQ--pre-000001EC-QINU`"''"`UNIQ--pre-000001ED-QINU`"''"`UNIQ--pre-000001EE-QINU`"''"`UNIQ--pre-000001EF-QINU`"''"`UNIQ--pre-000001F0-QINU`"''"`UNIQ--pre-000001F1-QINU`"''"`UNIQ--pre-000001F2-QINU`"''"`UNIQ--pre-000001F3-QINU`"''"`UNIQ--pre-000001F4-QINU`"''"`UNIQ--pre-000001F5-QINU`"''"`UNIQ--pre-000001F6-QINU`"''"`UNIQ--pre-000001F7-QINU`"'
      
    • Enable CPU microcode for the Intel CPU loading support:
      KERNEL Configuring the kernel to support Intel microcode loading
      '"`UNIQ--pre-000001FA-QINU`"''"`UNIQ--pre-000001FB-QINU`"'</br>'"`UNIQ--pre-000001FC-QINU`"''"`UNIQ--pre-000001FD-QINU`"''"`UNIQ--pre-000001FE-QINU`"''"`UNIQ--pre-000001FF-QINU`"''"`UNIQ--pre-00000200-QINU`"'
      
    • Enable NTFS read and write support:
      KERNEL Enable built-in NTFS filesystem reading support
      '"`UNIQ--pre-00000203-QINU`"''"`UNIQ--pre-00000204-QINU`"''"`UNIQ--pre-00000205-QINU`"''"`UNIQ--pre-00000206-QINU`"'
      
      KERNEL Enabling NTFS over FUSE using NTFS-3G
      '"`UNIQ--pre-00000209-QINU`"''"`UNIQ--pre-0000020A-QINU`"'
      
    • Enable tmpfs support:
      KERNEL Enable tmpfs support
      '"`UNIQ--pre-0000020D-QINU`"''"`UNIQ--pre-0000020E-QINU`"''"`UNIQ--pre-0000020F-QINU`"''"`UNIQ--pre-00000210-QINU`"''"`UNIQ--pre-00000211-QINU`"'
      
    • Enable ALSA and PulseAudio sound support:
      KERNEL Enable ALSA support
      '"`UNIQ--pre-00000214-QINU`"''"`UNIQ--pre-00000215-QINU`"'</br>'"`UNIQ--pre-00000216-QINU`"''"`UNIQ--pre-00000217-QINU`"''"`UNIQ--pre-00000218-QINU`"''"`UNIQ--pre-00000219-QINU`"''"`UNIQ--pre-0000021A-QINU`"''"`UNIQ--pre-0000021B-QINU`"''"`UNIQ--pre-0000021C-QINU`"''"`UNIQ--pre-0000021D-QINU`"''"`UNIQ--pre-0000021E-QINU`"''"`UNIQ--pre-0000021F-QINU`"''"`UNIQ--pre-00000220-QINU`"'
      
      KERNEL Enable PulseAudio support
      '"`UNIQ--pre-00000223-QINU`"''"`UNIQ--pre-00000224-QINU`"''"`UNIQ--pre-00000225-QINU`"'</br>'"`UNIQ--pre-00000226-QINU`"''"`UNIQ--pre-00000227-QINU`"''"`UNIQ--pre-00000228-QINU`"''"`UNIQ--pre-00000229-QINU`"''"`UNIQ--pre-0000022A-QINU`"'</br>'"`UNIQ--pre-0000022B-QINU`"''"`UNIQ--pre-0000022C-QINU`"''"`UNIQ--pre-0000022D-QINU`"''"`UNIQ--pre-0000022E-QINU`"'
      


    • Enable QEMU and KVM support:
      KERNEL Enabling QEMU and KVM support
      '"`UNIQ--pre-00000231-QINU`"''"`UNIQ--pre-00000232-QINU`"''"`UNIQ--pre-00000233-QINU`"''"`UNIQ--pre-00000234-QINU`"''"`UNIQ--pre-00000235-QINU`"''"`UNIQ--pre-00000236-QINU`"''"`UNIQ--pre-00000237-QINU`"''"`UNIQ--pre-00000238-QINU`"''"`UNIQ--pre-00000239-QINU`"''"`UNIQ--pre-0000023A-QINU`"''"`UNIQ--pre-0000023B-QINU`"''"`UNIQ--pre-0000023C-QINU`"''"`UNIQ--pre-0000023D-QINU`"''"`UNIQ--pre-0000023E-QINU`"''"`UNIQ--pre-0000023F-QINU`"''"`UNIQ--pre-00000240-QINU`"''"`UNIQ--pre-00000241-QINU`"''"`UNIQ--pre-00000242-QINU`"''"`UNIQ--pre-00000243-QINU`"''"`UNIQ--pre-00000244-QINU`"''"`UNIQ--pre-00000245-QINU`"''"`UNIQ--pre-00000246-QINU`"''"`UNIQ--pre-00000247-QINU`"'
      


  1. Prepare the kernel for module compilation:
    (chroot) root #make modules_prepare
  2. Compile the kernel:
    (chroot) root #make -j16
  3. Install the kernel modules:
    (chroot) root #make modules_install
  4. Install the kernel:
    (chroot) root #make install
  5. Rebuild the installed modules:
    (chroot) root #emerge --ask @module-rebuild
  6. Use genkernel to generate an initramfs:
    (chroot) root #genkernel initramfs --firmware --kernel-config=/usr/src/linux/.config --keymap --makeopts=-j16 --mountboot --no-clean --zfs
    Note
    Notice that native ZFS encryption is used for this system, rather than LUKS, and thus the lack of the --luks option in the genkernel invacation.

Install Firmware

  1. Edit /usr/src/linux/.config, as explained above, to enable firmware loading support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Install the firmware:
    (chroot) root #emerge -auvDN sys-kernel/linux-firmware
  4. Add support for individual selection of firmware files to sys-kernel/linux-firmware:
    (chroot) root #echo "sys-kernel/linux-firmware savedconfig" >> /etc/portage/package.use/linux-firmware
  5. Comment everything in /etc/portage/savedconfig/sys-kernel/linux-firmware-ddmmyyyy except the actual firmware files needed by the system:
    (chroot) root #vim /etc/portage/savedconfig/sys-kernel/linux-firmware-ddmmyyyy
    Note
    Currently loaded firmware can be assessed by
    user $dmesg | grep -i firmware
    Tip
    A working linux-firmware-ddmmyyyy for this system can be found here.
  6. Re-emerge sys-kernel/linux-firmware:
    (chroot) root #emerge --ask sys-kernel/linux-firmware

Configure fstab

With the use of ZFS, modifying the fstab file is not strictly needed. However, by editing /etc/fstab, an easy way to mount /boot and /boot/efi will be provided (note the noauto option.

  1. Edit /etc/fstab:
    (chroot) root #vim /etc/fstab
    FILE /etc/fstabMounting rules for /boot and /boot/efi
    '"`UNIQ--pre-0000024F-QINU`"''"`UNIQ--pre-00000250-QINU`"''"`UNIQ--pre-00000251-QINU`"''"`UNIQ--pre-00000252-QINU`"'
    
    Tip
    A working fstab for this system can be found here.

Configure the Network

  1. Set the computer's name:
    (chroot) root #echo 'hostname="foo"' > /etc/conf.d/hostname
  2. Install a DHCP client:
    (chroot) root #emerge --ask net-misc/dhcpcd
  3. Install wireless networking tools:
    (chroot) root #emerge --ask net-wireless/iw net-wireless/wpa_supplicant

Install systemd

  1. Edit /usr/src/linux/.config, as explained above, to enable systemd support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Edit make.conf to enable systemd support:
    (chroot) root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the USE variable for systemd support
    '"`UNIQ--pre-00000258-QINU`"''"`UNIQ--pre-00000259-QINU`"''"`UNIQ--pre-0000025A-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  4. Update the system with systemd support:
    (chroot) root #emerge -auvDN @world && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild
  5. Create /etc/mtab as a symlink to /proc/self/mounts:
    (chroot) root #ln -sf /proc/self/mounts /etc/mtab
  6. Create a machine ID:
    (chroot) root #systemd-machine-id-setup
  7. Create a hostname:
    (chroot) root #hostnamectl set-hostname foo
  8. Enable the services needed to mount ZFS filesystems automatically:
    (chroot) root #systemctl enable zfs.target
    (chroot) root #systemctl enable zfs-import-cache
    (chroot) root #systemctl enable zfs-mount
    (chroot) root #systemctl enable zfs-import.target
    (chroot) root #systemctl enable zfs-import-scan
  9. Create a service to import /boot automatically and enable it:
    (chroot) root #vim /etc/systemd/system/zfs-import-bpool.service
    FILE /etc/systemd/system/zfs-import-bpool.serviceSystemd service to automatically import /boot
    '"`UNIQ--pre-0000025D-QINU`"''"`UNIQ--pre-0000025E-QINU`"''"`UNIQ--pre-0000025F-QINU`"''"`UNIQ--pre-00000260-QINU`"'</br>'"`UNIQ--pre-00000261-QINU`"''"`UNIQ--pre-00000262-QINU`"''"`UNIQ--pre-00000263-QINU`"''"`UNIQ--pre-00000264-QINU`"'</br>'"`UNIQ--pre-00000265-QINU`"''"`UNIQ--pre-00000266-QINU`"'
    
    Tip
    A working zfs-import-bpool.service for this system can be found here.
    (chroot) root #systemctl enable zfs-import-bpool.service
  10. Create a service to mount /home automatically and enable it:
    (chroot) root #vim /etc/systemd/system/zfskey-home.service
    FILE /etc/systemd/system/zfskey-home.serviceSystemd service to automatically import /home
    '"`UNIQ--pre-00000269-QINU`"''"`UNIQ--pre-0000026A-QINU`"''"`UNIQ--pre-0000026B-QINU`"''"`UNIQ--pre-0000026C-QINU`"''"`UNIQ--pre-0000026D-QINU`"'</br>'"`UNIQ--pre-0000026E-QINU`"''"`UNIQ--pre-0000026F-QINU`"''"`UNIQ--pre-00000270-QINU`"''"`UNIQ--pre-00000271-QINU`"'</br>'"`UNIQ--pre-00000272-QINU`"''"`UNIQ--pre-00000273-QINU`"'
    
    Tip
    A working zfskey-home.service for this system can be found here.
    (chroot) root #systemctl enable zfskey-home.service

Install GRUB

This guide uses GRUB as a boot loader.

  1. Edit make.conf to install GRUB2 for the efi-64 platform:
    (chroot) root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the GRUB_PLATFORMS variable for EFI-64 platform
    '"`UNIQ--pre-00000276-QINU`"''"`UNIQ--pre-00000277-QINU`"''"`UNIQ--pre-00000278-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  2. Mount the EFI System Partition partition:
    (chroot) root #mkdir /boot/efi
    (chroot) root #mount /boot/efi
  3. Emerge sys-boot/grub and sys-boot/os-prober to allow GRUB2 to detect Windows 10:
    (chroot) root #emerge -auvDN sys-boot/grub sys-boot/os-prober
  4. Get GRUB to probe the /boot partition:
    (chroot) root #grub-probe /boot
    zfs
    Warning
    The above command must return ZFS, if not, something is wrong and the system will not boot.
  5. Add parameters to the kernel command line in order to boot from a ZFS partition:
    (chroot) root #vim /etc/default/grub
    FILE /etc/default/grubSetting the GRUB_CMDLINE_LINUX variable to boot from ZFS
    '"`UNIQ--pre-0000027F-QINU`"''"`UNIQ--pre-00000280-QINU`"''"`UNIQ--pre-00000281-QINU`"'
    
    Tip
    A working /etc/default/grub for this system can be found here.
  6. Create the /boot/grub directory:
    (chroot) root #mkdir /boot/grub
  7. Generate the GRUB configuration file:
    (chroot) root #grub-mkconfig -o /boot/grub/grub.cfg
  8. Check that the configuration file includes instructions to load the ZFS module:
    (chroot) root #grep 'insmod zfs' /boot/grub/grub.cfg
    insmod zfs
  9. Install the bootloader:
    (chroot) root #grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=Gentoo --recheck --no-floppy
  10. Check if the ZFS module for GRUB has been installed:
    (chroot) root #ls /boot/grub/*/zfs.mod
    /boot/grub/x86_64-efi/zfs.mod
  11. Unmount the boot partitions:
    (chroot) root #umount /boot/efi
    (chroot) root #umount /boot
  12. Allow bpool/BOOT/gentoo to be managed by legacy tools, such as GRUB and the /etc/fstab:
    (chroot) root #zfs set mountpoint=legacy bpool/BOOT/gentoo

User Accounts

  1. Secure the root account with a strong password:
    (chroot) root #passwd
  2. Create a regular user:
    (chroot) root #useradd -m -G audio,cdrom,portage,usb,users,video,wheel -s /bin/bash foo
    (chroot) root #passwd foo

First ZFS snapshot

Create a first ZFS snapshot. If anythong goes wrong afterwards, it will serve as a backup of a the freshly installed system.

  1. Create a snapshot of the boot filesystem:
    root #zfs snapshot bpool/BOOT/gentoo@install
  2. Create a snapshot of the root filesystem:
    root #zfs snapshot rpool/ROOT/gentoo@install
  3. Create a snapshot of the home filesystem:
    root #zfs snapshot rpool/ROOT/home@install
    Tip
    The following commands can be used to manage snapshots:
    • Create:
      root #zfs snapshot bpool/BOOT/gentoo@install
    • List:
      root #zfs list -t all
    • Rollback:
      root #zfs rollback bpool/BOOT/gentoo@install
    • Clone:
      root #zfs clone bpool/BOOT/gentoo@install bpool/BOOT/gentoo@install_backup
    • Rename:
      root #zfs rename bpool/BOOT/gentoo@install_backup bpool/BOOT/gentoo@original_install
    • Destroy:
      root #zfs destroy bpool/BOOT/gentoo@install

Rebooting

  1. Exit the chroot environment:
    (chroot) root #exit
  2. Unmount all mounted partitions:
    root #cd
    root #umount -l /mnt/gentoo/{dev,sys,proc,run}
    root #umount -R /mnt/gentoo/home
    root #umount -R /mnt/gentoo
  3. Change the mountpoint of the ZFS filesystems:
    root #zfs set mountpoint=/ rpool/ROOT/gentoo
    root #zfs set mountpoint=/home rpool/ROOT/home
  4. Reboot into the Gentoo environment:
    root #reboot
  5. Remove the downloaded stage3 files:
    root #rm /stage3-amd64-systemd-20191223.tar.bz2
  6. If systemd gives errors regarding the locales, run:
    root #localectl set-locale LANG=en_US.UTF-8

FUSE

  1. Edit /usr/src/linux/.config, as explained above, to enable FUSE support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Install the userspace FUSE tools:
    root #emerge --ask sys-fs/fuse

Sudo

  1. Enable the offensive USE flag to get funny replies when typing in wrong passwords:
    root #echo “app-admin/sudo offensive” >> /etc/portage/package.use/sudo
  2. Install sudo:
    root #emerge -auvDN app-admin/sudo
  3. Grant administrator privileges to all the users of the wheel group by editing the /etc/sudoers file:
    root #visudo
    FILE /etc/sudoersModify administrator privileges
    '"`UNIQ--pre-00000287-QINU`"''"`UNIQ--pre-00000288-QINU`"''"`UNIQ--pre-00000289-QINU`"'
    
  4. Enable bash completion with sudo:
    root #echo "complete -cf sudo" >> $HOME/.bashrc
  5. Allow X applications to be run with sudo:
    user $xhost local:root

Intel Graphics

Configure the drivers for the Intel Graphics Chip.

  1. Edit /usr/src/linux/.config, as explained above, to enable the Intel graphics support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Edit make.conf to globally enable Intel graphics support:
    root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the VIDEO_CARDS variable for Intel support
    '"`UNIQ--pre-0000028C-QINU`"''"`UNIQ--pre-0000028D-QINU`"''"`UNIQ--pre-0000028E-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  4. Update the system to reinstall packages with Intel graphics support:
    root #emerge -auvDN @world && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild
  5. If needed, force Xorg to load the modesetting driver:
    root #vim /etc/X11/xorg.conf.d/20-modesetting.conf
    FILE /etc/X11/xorg.conf.d/20-modesetting.confForce modesetting DDX
    '"`UNIQ--pre-00000291-QINU`"''"`UNIQ--pre-00000292-QINU`"''"`UNIQ--pre-00000293-QINU`"''"`UNIQ--pre-00000294-QINU`"''"`UNIQ--pre-00000295-QINU`"''"`UNIQ--pre-00000296-QINU`"'
    
  6. Install the Intel userland GPU tools:
    root #echo "x11-apps/igt-gpu-tools ~amd64" >> /etc/portage/package.accept_keywords/igt-gpu-tools

Xorg

Configure the Xorg X server.

  1. Edit /usr/src/linux/.config, as explained above, to enable Xorg support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Edit make.conf to enable Xorg support and set the drivers for input devices:
    root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the USE variable for X support and configure INPUT_DEVICES
    '"`UNIQ--pre-0000029A-QINU`"''"`UNIQ--pre-0000029B-QINU`"''"`UNIQ--pre-0000029C-QINU`"''"`UNIQ--pre-0000029D-QINU`"''"`UNIQ--pre-0000029E-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  4. Install Xorg:
    root #emerge -auvDN x11-base/xorg-server
  5. Update the environment settings and source the profile:
    root #env-update && source /etc/profile
  6. Install packages to test if the X server is working:
    root #emerge --ask x11-wm/twm x11-terms/xterm
  7. Install package to test if the 3D acceleration is working:
    root #emerge --ask x11-apps/mesa-progs
  8. Test if the X server is working:
    user $startx
  9. Test if the 3D acceleration is working:
    user $glxinfo | grep rendering
    direct rendering: Yes
    user $glxgears
  10. Exit the X environment:
    user $exit
  11. Remove the packages installed for testing:
  12. Update the system to reinstall packages with X support:
    root #emerge -auvDN @world && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild

Wifi

Configure the Wifi adapter.

  1. Identify the Wifi adapter:
    root #dmesg | grep -i -E '3b:00.0|wlan|iwl|80211'
    Detected Killer(R) Wi-Fi 6 AX1650x 160MHz Wireless Network Adapter (200NGW), REV=0x340
  2. According to this table[1]:
    • The module required to control this adapter is iwlmvm.
    • The lowest Linux kernel compatible is 5.1+ (current stable kernels, 4.19.*, are not compatible).
  3. Edit /usr/src/linux/.config, as explained above, to enable Wifi support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  4. Update the Kernel, as explained below.

NetworkManager

Configure NetworkManager support.

  1. Edit /usr/src/linux/.config, as explained above, to enable NetworkManager support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Edit make.conf to enable NetworkManager support:
    root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the USE variable for NetworkManager support
    '"`UNIQ--pre-000002AB-QINU`"''"`UNIQ--pre-000002AC-QINU`"''"`UNIQ--pre-000002AD-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  4. Update the system to reinstall packages with NetworkManager support:
    root #emerge -auvDN @world && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild
  5. Enable NetworkManager to be started at boot time:
    root #systemctl enable NetworkManager

GNOME Light

Install the GNOME desktop environment.

  1. Edit make.conf to enable GNOME support:
    root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the USE variable for GNOME support
    '"`UNIQ--pre-000002B0-QINU`"''"`UNIQ--pre-000002B1-QINU`"''"`UNIQ--pre-000002B2-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  2. Emerge GNOME Light:
    root #emerge -auvDN gnome-base/gnome-light
  3. Update the environment variables and reload the environment
    root #env-update && source /etc/profile
  4. Verify that the plugdev group exists and add each GNOME user to it:
    root #getent group plugdev
    plugdev:x:272:
    root #gpasswd -a foo plugdev
    root #gpasswd -a root plugdev
  5. Enable GDM on boot:
    root #systemctl enable gdm.service
  6. Install GNOME tweaks and shell extensions for GNOME 3 customization:
  7. Provide admin privileges in system dialogs to the users in the wheel group:
    root #vim /etc/polkit-1/rules.d/49-wheel.rules
    FILE /etc/polkit-1/rules.d/49-wheel.rulesAdministrator wheel group
    '"`UNIQ--pre-000002B9-QINU`"''"`UNIQ--pre-000002BA-QINU`"''"`UNIQ--pre-000002BB-QINU`"'
    
  8. Allow the root user to launch X window applications:
    user $vim ~/.bashrc
    FILE /home/foo/.bashrcX windows as root
    '"`UNIQ--pre-000002BE-QINU`"''"`UNIQ--pre-000002BF-QINU`"'
    
  9. Enable tap to click in GDM:
    user $xhost +SI:localuser:gdm
    user $sudo -u gdm gsettings set org.gnome.desktop.peripherals.touchpad tap-to-click true

GNOME

From the GNOME packages not installed by GNOME Light, install those that are really needed.

  1. Install gnome-extra/gnome-system-monitor:
  2. Install sys-block/gparted:
    root #echo "sys-block/gparted ~amd64" >> /etc/portage/package.accept_keywords/gparted
    root #emerge -auvDN sys-block/gparted

Chromium

Install the Chromium web browser.

  1. Unmask the latest Chromium ebuild:
    root #echo “www-client/chromium ~amd64” >> /etc/portage/package.accept_keywords/chromium
  2. Emerge Chromium:
    root #emerge -auvDN www-client/chromium
  3. Open Chromium in incognito mode by default:
    root #cp /usr/share/applications/chromium-browser-chromium.desktop ~/.local/share/applications/
    root #vim ~/.local/share/applications/chromium-browser-chromium.desktop
    FILE /home/foo/.local/share/applications/chromium-browser-chromium.desktopLauncher for Chromium in incognito mode
    '"`UNIQ--pre-000002C9-QINU`"''"`UNIQ--pre-000002CA-QINU`"''"`UNIQ--pre-000002CB-QINU`"'
    
  4. Enable click-to-install GNOME Shell Extensions through Chromium:

Firefox

Install the Firefox web browser.

  1. Unmask the latest Firefox ebuild:
    root #echo “www-client/firefox ~amd64” >> /etc/portage/package.accept_keywords/firefox
  2. Emerge Firefox:
    root #emerge -auvDN www-client/firefox
  3. Open Firefox in incognito mode by default:
    root #cp /usr/share/applications/firefox.desktop ~/.local/share/applications/
    root #vim ~/.local/share/applications/firefox.desktop
    FILE /home/foo/.local/share/applications/firefox.desktopLauncher for Firefox in incognito mode
    '"`UNIQ--pre-000002D1-QINU`"''"`UNIQ--pre-000002D2-QINU`"''"`UNIQ--pre-000002D3-QINU`"'
    
  4. Enable click-to-install GNOME Shell Extensions through Firefox:

Hardware Clock

Configure Hardware Clock support.

  1. Edit /usr/src/linux/.config, as explained above, to enable Hardware Clock support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Check that the Hardware Clock is in use:
    user $timedatectl | grep "RTC time"
  4. Configure GNOME automatically update the Hardware Clock from online servers: gnome-control-center > Details > Date & Time > Automatic Date & Time (set on).

Localization

Change some language specific settings.

  1. Modify the keyboard layout for the console:
    root #localectl list-keymaps
    root #localectl set-keymap es
    root #localectl | grep "VC Keymap"
           VC Keymap: es
  2. Modify the keyboard layout for the X server:
    root #localectl list-x11-keymap-layouts
    root #localectl set-x11-keymap es
    root #localectl | grep "X11 Layout"
           X11 Layout: es
  3. Edit make.conf to enable systemwide localization:
    root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the LINGUAS and L11N variables for systemwide localization
    '"`UNIQ--pre-000002D9-QINU`"''"`UNIQ--pre-000002DA-QINU`"''"`UNIQ--pre-000002DB-QINU`"''"`UNIQ--pre-000002DC-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  4. Update the system with with systemwide localization:
    root #emerge -auvDN @world && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild

Loading of CPU microcode

CPU microcode for the Intel CPU will be loaded by GRUB at boot time.

  1. Edit /usr/src/linux/.config, as explained above, to enable CPU microcode loading support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Install the microcode firmware package and the manipulation tool:
    root #echo "sys-firmware/intel-microcode hostonly" >> /etc/portage/package.use/intel-microcode
  4. Mount the /boot and /boot/efi partitions:
    root #mount /boot
    root #mount /boot/efi
  5. Manually generate the microcode cpio archive:
    root #iucode_tool -S --write-earlyfw=/boot/early_ucode.cpio /lib/firmware/intel-ucode/*
    iucode_tool: system has processor(s) with signature 0x000906ed
    iucode_tool: Writing selected microcodes to: /boot/early_ucode.cpio
    Note
    GRUB2 will automatically try to load any file named /boot/early_ucode.cpio.
  6. Regenerate the GRUB configuration file:
    root #grub-mkconfig -o /boot/grub/grub.cfg
  7. After reboot, check that the microcode has been loaded:
    root #dmesg | grep microcode
    [    0.000000] microcode: microcode updated early to revision 0xca, date = 2019-10-03
    [    2.623235] microcode: sig=0x906ed, pf=0x20, revision=0xca
    [    2.623592] microcode: Microcode Update Driver: v2.2.
    root #grep microcode /proc/cpuinfo
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca
    microcode	: 0xca

USB support

Configure support for USB devices.

  1. Edit /usr/src/linux/.config, as explained above, to enable USB support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Install the usbutils to be able to query the USB interfaces:
    root #emerge -auvDN sys-apps/usbutils

NTFS support

Configure NTFS read and write support.

  1. Edit /usr/src/linux/.config, as explained above, to enable in-kernel NTFS read and FUSE write support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Enable USE flags as needed:
    root #echo "sys-fs/ntfs3g ntfsdecrypt suid" >> /etc/portage/package.use/ntfs3g
  4. Emerge sys-fs/ntfs3g:
    root #emerge -auvDN sys-fs/ntfs3g

tmpfs support

Configure tmpfs support.

  1. Edit /usr/src/linux/.config, as explained above, to enable tmpfs support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Systemd will automatically mount /tmp as tmpfs. Place portage's tmpdir inside /tmp:
    root #vim /mnt/gentoo/etc/portage/make.conf
    FILE /etc/portage/make.confSetting the PORTAGE_TMPDIR variable for tmpfs use
    '"`UNIQ--pre-000002FB-QINU`"''"`UNIQ--pre-000002FC-QINU`"''"`UNIQ--pre-000002FD-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  4. Mount as tmpfs any other appropriate directory, by using /etc/fstab:
    root #vim /etc/fstab
    FILE /etc/fstabMounting rules for tmpfs directories
    '"`UNIQ--pre-00000300-QINU`"''"`UNIQ--pre-00000301-QINU`"''"`UNIQ--pre-00000302-QINU`"'
    
    Tip
    A working fstab for this system can be found here.

ALSA and PulseAudio support

Configure ALSA and PulseAudio support.

  1. Edit /usr/src/linux/.config, as explained above, to enable ALSA and PulseAudio support.
    Tip
    Working kernel configuration files, for different kernel versions, can be found here.
  2. Update the Kernel, as explained below.
  3. Edit make.conf to enable ALSA and PulseAudio support:
    root #vim /etc/portage/make.conf
    FILE /etc/portage/make.confSetting the USE variable for ALSA and PulseAudio support
    '"`UNIQ--pre-00000305-QINU`"''"`UNIQ--pre-00000306-QINU`"''"`UNIQ--pre-00000307-QINU`"'
    
    Tip
    A working make.conf for this system can be found here.
  4. Update the system to reinstall packages with ALSA and PulseAudio support:
    root #emerge -auvDN @world && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild
  5. Emerge media-sound/alsa-utils:
    root #emerge -auvDN media-sound/alsa-utils
  6. Add ffmpeg support to media-plugins/alsa-plugins and emerge it:
    root #echo "media-plugins/alsa-plugins ffmpeg" >> /etc/portage/package.use/alsa-plugins
    root #emerge -auvDN media-plugins/alsa-plugins

External Monitors

in GNOME Wayland, when using an external non-HiDPI monitor, it will be scaled, by default, as the laptop's screen, and this will make either the windows too big in the external monitor, or too small in the laptop's screen. In order to allow a different scaling in each screen:

  1. Open GNOME's dconf-editor.
  2. Go to /org/gnome/mutter/experimental-features.
  3. Disable "Use default value".
  4. write custom value: ['scale-monitor-framebuffer', 'x11-randr-fractional-scaling'].

QEMU/KVM

QEMU and KVM.

  1. Edit .conf.
  2. Edit USE
  3. root #emerge -auvDN app-emulation/qemu
  4. root #gpasswd -a foo kvm
  5. root #emerge -auvDN gnome-extra/gnome-boxes
    • Apply patch or it will not compile.

ZFS automatic snapshots

sys-fs/zfs-auto-snapshot provides scripts used to rotate periodic snapshots through cron jobs.

  1. Install sys-process/cronie and sys-fs/zfs-auto-snapshot:
    root #emerge -auvDN sys-process/cronie sys-fs/zfs-auto-snapshot && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild
  2. Disable the default cron job that would create a frequent snapshot each 15 minutes:
    root #rm /etc/cron.d/zfs-auto-snapshot
  3. Enable and start the cronie systemd service:
    root #systemctl enable cronie.service
    root #systemctl start cronie.service
    root #systemctl status cronie.service
  4. Set the com.sun:auto-snapshot property to true for each zpool of interest:
    root #zfs set com.sun:auto-snapshot=true bpool/BOOT/gentoo
    root #zfs set com.sun:auto-snapshot=true rpool/ROOT/gentoo
    root #zfs set com.sun:auto-snapshot=true rpool/ROOT/home
  5. Enable the desired periodic auto-snaphot jobs on each pool:
    root #zfs set com.sun:auto-snapshot:hourly=true bpool/BOOT/gentoo
    root #zfs set com.sun:auto-snapshot:daily=true bpool/BOOT/gentoo
    root #zfs set com.sun:auto-snapshot:weekly=true bpool/BOOT/gentoo
    root #zfs set com.sun:auto-snapshot:monthly=true bpool/BOOT/gentoo
    root #zfs set com.sun:auto-snapshot:hourly=true rpool/ROOT/gentoo
    root #zfs set com.sun:auto-snapshot:daily=true rpool/ROOT/gentoo
    root #zfs set com.sun:auto-snapshot:weekly=true rpool/ROOT/gentoo
    root #zfs set com.sun:auto-snapshot:monthly=true rpool/ROOT/gentoo
    root #zfs set com.sun:auto-snapshot:hourly=true rpool/ROOT/home
    root #zfs set com.sun:auto-snapshot:daily=true rpool/ROOT/home
    root #zfs set com.sun:auto-snapshot:weekly=true rpool/ROOT/home
    root #zfs set com.sun:auto-snapshot:monthly=true rpool/ROOT/home
  6. Modify the cron jobs as needed:
    root #vim /etc/cron.hourly/zfs-auto-snapshot
    root #vim /etc/cron.daily/zfs-auto-snapshot
    root #vim /etc/cron.weekly/zfs-auto-snapshot
    root #vim /etc/cron.monthly/zfs-auto-snapshot

To Do...

Check the firmware used by rtl8153

Linux_firmware

https://wiki.archlinux.org/index.php/Intel_graphics#Enable_GuC_/_HuC_firmware_loading

https://gist.github.com/Brainiarc7/aa43570f512906e882ad6cdd835efe57

Update the Linux kernel

root #mount /boot
root #mount /boot/efi
root #emerge --sync
root #emerge -auvDN sys-kernel/gentoo-sources
root #emerge --depclean
root #emerge @preserved-rebuild
root #revdep-rebuild
root #eselect kernel list
root #eselect kernel set 2
root #cd /usr/src/linux
root #cp /usr/src/linux-`uname -r`/.config /usr/src/linux/
root #make syncconfig
root #make modules_prepare
root #make -j16
root #make modules_install
root #make install
root #emerge --ask @module-rebuild
root #genkernel initramfs --firmware --kernel-config=/usr/src/linux/.config --keymap --makeopts=-j16 --mountboot --no-clean --zfs
root #grub-mkconfig -o /boot/grub/grub.cfg
root #eclean-kernel -pn 2
root #eclean-kernel -n 2

Removal of old kernels

root #mount /boot
root #mount /boot/efi
root #emerge -Cav =sys-kernel/gentoo-sources-X.Y.Z
root #emerge --depclean
root #emerge @preserved-rebuild
root #revdep-rebuild
root #rm -r /usr/src/linux-X.Y.Z
root #rm -r /lib/modules/X.Y.Z
root #rm /boot/config-X.Y.Z-gentoo
root #rm /boot/initramfs-X.Y.Z-gentoo.img
root #rm /boot/System.map-X.Y.Z-gentoo
root #rm /boot/vmlinuz-X.Y.Z-gentoo
root #grub-mkconfig -o /boot/grub/grub.cfg

Troubleshooting

Gparted reporting the whole disk as a single Zpool

At the time of writing this, GParted reports the whole disk as a single Zpool when any of its partitions is formatted with ZFS[26]. This is not happening in other disk utilities such as GNOME Disks, parted or fdisk. This is due to a bug of the blkid utility, in its stable version, which wrongly reports the disk type. Updating sys-apps/util-linux to its latest version fixes this problem:

root #echo "=sys-apps/util-linux-2.35.1-r1 ~amd64" >> /etc/portage/package.accept_keywords/util-linux
root #emerge -auvDN sys-apps/util-linux && emerge --depclean && emerge @preserved-rebuild && revdep-rebuild

See also

External resources

References

  1. 1.0 1.1 iwlwifi Firmware, The official Linux Wireless wiki, October 9th, 2019. Retrieved on February 4th, 2020.
  2. Create a recovery drive, Microsoft Support, July 8th, 2019. Retrieved on January 21st, 2020.
  3. Turn on device encryption, Microsoft Support, July 31st, 2019. Retrieved on January 21st, 2020.
  4. Patrick Barker. Fast Startup - How to disable if it's causing problems, Microsoft Community, June 15th, 2014. Retrieved on January 21st, 2020.
  5. UTC in Windows, ArchWiki. Retrieved on January 21st, 2020.
  6. Steve Schardein. SOLUTION: Switch Windows 10 from RAID/IDE to AHCI operation, Tripe-S Computers Blog, June 16th, 2016. Retrieved on January 21st, 2020.
  7. Armin Coralic. Dual boot Arch on Dell XPS 7590, GitHub, August 18th, 2019. Retrieved on January 21st, 2020.
  8. How to disable and re-enable hibernation on a computer that is running Windows, Microsoft Support, November 12th, 2019. Retrieved on January 21st, 2020.
  9. Mauro Huculak.How to use NTFS compression on Windows 10, Windows Central, March 20th, 2019. Retrieved on January 21st, 2020.
  10. Compact OS, single-instancing, and image optimization, Microsoft Docs, May 2nd, 2017. Retrieved on January 21st, 2020.
  11. Trisha. How to Disable Virtual Memory in Windows 10, TrishTech, November 26th, 2014. Retrieved on January 21st, 2020.
  12. Vamsi Krishna. How to Uninstall Pre-Installed Apps in Windows 10 Using Powershell, Make Tech Easier, October 20th, 2018. Retrieved on January 21st, 2020.
  13. Microsoft Support: How to re-partition without destroying the data?, Microsoft Support, May 27th, 2014. Retrieved on January 21st, 2020.
  14. Removing the Windows 10 Recovery (WinRE) Partition, TeraByte. Retrieved on January 21st, 2020.
  15. Connect to a wireless network, Official Ubuntu Documentation. Retrieved on January 22nd, 2020.
  16. Connect to a wired (Ethernet) network, Official Ubuntu Documentation. Retrieved on January 22nd, 2020.
  17. ZFS: GRUB-compatible pool creation, ArchWiki. Retrieved on January 22nd, 2020.
  18. Richard Laager. Debian Buster Root on ZFS, GitHub, December 27th, 2019. Retrieved on January 23rd, 2020.
  19. numinit. ZoL 0.8.0 encryption: don't encrypt the pool root!, Reddit, May, 2019. Retrieved on January 23rd, 2020.
  20. Patrick Kennedy. The Case For Using ZFS Compression, Serve The Home, January 2nd, 2018. Retrieved on January 23rd, 2020.
  21. populationless. Cannot set 'bootfs' property when 'dnodesize' is set to anything but legacy #8538, GitHub, March 27th, 2019. Retrieved on January 23rd, 2020.
  22. Laplacian. How to choose between AES-CCM and AES-GCM for storage volume encryption, Cryptography Stack Exchange, October 2nd, 2014. Retrieved on January 23rd, 2020.
  23. x86 Options, GCC, the GNU Compiler Collection, October 2nd, 2014. Retrieved on January 24th, 2020.
  24. Thomas Deutschmann. ZFS: Change hostid handling, Gentoo Git Repositories, March 27th, 2019. Retrieved on January 24th, 2020.
  25. 25.0 25.1 Brian Behlendorf. zfs-0.8.0, GitHub, May 23rd, 2019. Retrieved on January 25th, 2020.
  26. zfs partition wrongly shows occupying the whole disk, GNOME GitLab. Retrieved on April 7th, 2020.