User:Bugalo/Supermicro A2SDi-4C-HLN4F

The Supermicro A2SDi-4C-HLN4F is a low-power server Mini-ITX motherboard. It is fully functional with the latest Linux kernel versions.

Summary
This document will serve as a guide on how to install on the Supermicro A2SDi-4C-HLN4F, to use is as a home  server, with the following configuration:
 * Single boot, in Handbook:AMD64/Installation/Disks with Handbook:AMD64/Installation/Disks mode, using GRUB2 as a boot loader.
 * ZFS on all partitions, including root, with native transparent compression and encryption. Deduplication will not be configured:
 * for all system partitions. Those will be located in two 64GB flash drives.
 * One for data. It will be located in six 8TB hard drives.
 * GNOME with systemd profile.

Bios
...

Preparing the Ubuntu Live Environment
Review the boot process...


 * 1) Create an Ubuntu bootable USB using, for example using UNetbootin.
 * 2) Plug the USB and boot the computer.
 * 3) Access the One-time boot menu of the  by pressing.
 * 4) Choose the appropriate entry to boot from the live USB.
 * 5) In the  menu, choose Try Ubuntu without installing.
 * 6) Connect to the internet through ethernet.
 * 7) Upgrade Ubuntu to use the latest  modules availabe.
 * 8) Verify that  is loaded
 * 9) Create a folder for the Gentoo install.
 * 10) Install the text editor of your choice, e.g. Vim.

Create the ZFS layout
All the partitions of the system will use the Filesystem. 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, and we would create different in it that would be conceptually similar to traditional partitions, but they don't need to have a fixed predetermined size. However, the choice of as a boot manager requires partitioning the disk, i.e a  needs to be created in a partition, not in the whole disk. cannot currently reside in a with advanced features activated, such as encryption. In order to satisfy both requirements of using as a  and having the system residing in  with native encryption, we need to create a  compatible with.


 * 1) Open.
 * 2) Delete any partition of the USB flash drive.
 * 3) Create an unformatted partition, , in the unallocated space, named Gentoo-Boot, of around 1GB.
 * 4) Create an unformatted partition, , in the unallocated space, named Gentoo-Root, occupying the remaining space.
 * 5) Apply all operations and exit.
 * 6) Create a, with all 's unsupported features disabled, in.
 * 7) Create a, for the Gentoo system, in.
 * 8) The status and properties of the pools created above can be checked with the following commands:
 * 9) Create the  where  will reside:
 * 10) Create the  where  will reside:
 * 11) Create the  where  will reside:
 * 12) Mount all the :
 * 13) Check that the  layout is correct:
 * 14) Set the  used for booting:  Check that the   property has been properly set:

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:
 * 2) Choose a stage tarball:.
 * 3) Move to the root installation directory:
 * 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:
 * 5) Unpack the stage3 tarball:
 * 6) Edit make.conf to configure:
 * 7) * The compile options to optimize compiled code, including the CPU_FLAGS_X86.
 * 8) * The global Handbook:Parts/Working/USE variable to specify system-wide package support.
 * 9) * The Handbook:AMD64/Installation/Base variable to select the license group automatically accepted.
 * 10) Configure the Gentoo ebuild repository:
 * 11) Copy the DNS info:
 * 12) Mount the necessary filesystems:
 * 13) Copy the  to the installation directory:
 * 14) Copy, Genkernel will later complain if it does not exist :
 * 15) Chroot into the new environment:
 * 16) Update the Gentoo Ebuild_repository:
 * 17) Choose the appropriate Profile_(Portage):
 * 18) Select fast mirrors available for source code download, by using mirrorselect:
 * 19) Emerge Vim to be used as a text editor:
 * 20) Set the timezone and reconfigure the :
 * 21) Configure the locales to use, at leaset, one UTF-8 locale:
 * 22) * Edit : and uncomment the line referencing  :
 * 23) * Generate the locales:
 * 24) * Reload the environment:
 * 25) Unmask the latest versions of  and :
 * 26) Unmask the latest versions of  and add  support:
 * 27) Update the World_set_(Portage):

Configuring, building and installing the Linux kernel

 * 1) Unmask the latest Kernel versions:
 * 2) Install the Kernel and Genkernel:
 * 3) Add compression support to  in order to be able to load compressed modules:
 * 4) Configure the :
 * 5) * Enable Linux_firmware loading support:
 * 6) * Architecture specific kernel configuration:
 * 7) * Enable support:
 * 8) * Enable support, needed if using a  hard drive;, needed for  devices,  external hard drives and optical drives, etc.:
 * 9) * Enable NVMe device support:
 * 10) * Enable compressed kernel modules:
 * 11) * Enable Device_file support:
 * 12) * Enable support for the Filesystem used:
 * 13) * Enable support for Filesystem_in_Userspace:
 * 14) * Enable support:
 * 15) * Enable support:
 * 16) * Configure USB support:
 * 17) * Configure USB support for input devices:
 * 18) * Enable audio:
 * 19) * Enable Systemd support:
 * 20) * Configure the Intel graphics:
 * 21) * Configure the Xorg support:
 * 22) * Configure the Wifi support:
 * 23) * Enable NetworkManager support:
 * 24) * Enable System_time support:
 * 25) * Enable Microcode for the Intel_microcode loading support:
 * 26) * Enable NTFS read and write support:
 * 27) * Enable Tmpfs support:
 * 28) * Enable ALSA and PulseAudio sound support:


 * 1) * Enable QEMU support:


 * 1) Prepare the kernel for module compilation:
 * 2) Compile the kernel:
 * 3) Install the kernel modules:
 * 4) Install the kernel:
 * 5) Rebuild the installed Kernel_Modules:
 * 6) Use Genkernel to generate an Initramfs:

Install Firmware

 * 1) Edit, as explained above, to enable  loading support.
 * 2) Update the Kernel, as explained below.
 * 3) Install the Linux_firmware:
 * 4) Add support for individual selection of firmware files to :
 * 5) Comment everything in  except the actual firmware files needed by the system:
 * 6) Re-emerge :

Configure fstab
With the use of, modifying the fstab file is not strictly needed. However, by editing, an easy way to mount and  will be provided (note the   option.
 * 1) Edit :

Configure the Network

 * 1) Set the computer's name:
 * 2) Install a  client:
 * 3) Install wireless networking tools:

Install systemd

 * 1) Edit, as explained above, to enable  support.
 * 2) Update the Kernel, as explained below.
 * 3) Edit make.conf to enable  support:
 * 4) Update the system with  support:
 * 5) Create  as a symlink to :
 * 6) Create a machine ID:
 * 7) Create a hostname:
 * 8) Enable the services needed to mount  filesystems automatically:
 * 9) Create a service to import  automatically and enable it:
 * 10) Create a service to mount  automatically and enable it:

Install GRUB
This guide uses GRUB2 as a boot loader.


 * 1) Edit make.conf to install  for the   platform:
 * 2) Mount the EFI_System_Partition partition:
 * 3) Emerge  and  to allow  to detect Windows 10:
 * 4) Get  to probe the  partition:
 * 5) Add parameters to the kernel command line in order to boot from a  partition:
 * 6) Create the  directory:
 * 7) Generate the  configuration file:
 * 8) Check that the configuration file includes instructions to load the  module:
 * 9) Install the bootloader:
 * 10) Check if the  module for  has been installed:
 * 11) Unmount the boot partitions:
 * 12) Allow  to be managed by legacy tools, such as  and the :

User Accounts

 * 1) Secure the  account with a strong password:
 * 2) Create a regular user:

First ZFS snapshot
Create a first. 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:
 * 2) Create a snapshot of the root filesystem:
 * 3) Create a snapshot of the home filesystem:

Rebooting

 * 1) Exit the  environment:
 * 2) Unmount all mounted partitions:
 * 3) Change the mountpoint of the :
 * 4) Reboot into the Gentoo environment:
 * 5) Remove the downloaded  files:
 * 6) If  gives errors regarding the locales, run:

FUSE

 * 1) Edit, as explained above, to enable  support.
 * 2) Update the Kernel, as explained below.
 * 3) Install the userspace  tools:

Sudo

 * 1) Enable the    flag to get funny replies when typing in wrong passwords:
 * 2) Install Sudo:
 * 3) Grant administrator privileges to all the users of the   group by editing the  file:
 * 4) Enable bash completion with sudo:
 * 5) Allow X applications to be run with sudo:

Intel Graphics
Configure the drivers for the Intel Graphics Chip.


 * 1) Edit, as explained above, to enable the Intel graphics support.
 * 2) Update the Kernel, as explained below.
 * 3) Edit make.conf to globally enable Intel graphics support:
 * 4) Update the system to reinstall packages with Intel graphics support:
 * 5) If needed, force  to load the modesetting driver:
 * 6) Install the Intel userland GPU tools:

Xorg
Configure the Xorg X server.


 * 1) Edit, as explained above, to enable  support.
 * 2) Update the Kernel, as explained below.
 * 3) Edit make.conf to enable  support and set the drivers for input devices:
 * 4) Install :
 * 5) Update the environment settings and source the profile:
 * 6) Install packages to test if the  is working:
 * 7) Install package to test if the 3D acceleration is working:
 * 8) Test if the  is working:
 * 9) Test if the 3D acceleration is working:
 * 10) Exit the X environment:
 * 11) Remove the packages installed for testing:
 * 12) Update the system to reinstall packages with  support:

Wifi
Configure the Wifi adapter.


 * 1) Identify the  adapter:
 * 2) According to this table :
 * 3) * The module required to control this adapter is iwlmvm.
 * 4) * The lowest Linux kernel compatible is 5.1+ (current stable kernels, 4.19.*, are not compatible).
 * 5) Edit, as explained above, to enable  support.
 * 6) Update the Kernel, as explained below.

NetworkManager
Configure NetworkManager support.


 * 1) Edit, as explained above, to enable  support.
 * 2) Update the Kernel, as explained below.
 * 3) Edit make.conf to enable  support:
 * 4) Update the system to reinstall packages with  support:

GNOME
Install the GNOME/Guide Desktop_environment.


 * 1) Edit make.conf to enable  support:
 * 2) Emege :
 * 3) Update the environment variables and reload the environment
 * 4) Verify that the   group exists and add each  user to it:
 * 5) Enable GNOME/GDM on boot:
 * 6) Install GNOME tweaks and shell extensions for  customization:
 * 7) Provide admin privileges in system dialogs to the users in the wheel group:
 * 8) Allow the  user to launch X window applications:
 * 9) Enable tap to click in GNOME/GDM:

Chromium
Install the Chromium web browser.


 * 1) Unmask the latest Chromium ebuild:
 * 2) Emerge Chromium:
 * 3) Open Chromium in incognito mode by default:
 * 4) Enable click-to-install  Shell Extensions through Chromium:
 * 5) * Install the required browser add-on through the Chrome store.
 * 6) * Emerge the backend:

Firefox
Install the Firefox web browser.


 * 1) Unmask the latest Firefox ebuild:
 * 2) Emerge Firefox:
 * 3) Open Firefox in incognito mode by default:
 * 4) Enable click-to-install  Shell Extensions through Firefox:
 * 5) * Install the required browser add-on through Add-ons for Firefox.
 * 6) * Emerge the backend:

Flash Player
Install the Adobe_Flash player.


 * 1) Emerge Flash:

Hardware Clock
Configure System_time support.


 * 1) Edit, as explained above, to enable  support.
 * 2) Update the Kernel, as explained below.
 * 3) Check that the  is in use:
 * 4) Configure  automatically update the  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:
 * 2) Modify the keyboard layout for the X server:
 * 3) Edit make.conf to enable systemwide localization:
 * 4) Update the system with with systemwide localization:

Loading of CPU microcode
Microcode for the Intel_microcode will be loaded by GRUB at boot time.


 * 1) Edit, as explained above, to enable  loading support.
 * 2) Update the Kernel, as explained below.
 * 3) Install the microcode firmware package and the manipulation tool:
 * 4) Mount the  and  partitions:
 * 5) Manually generate the microcode cpio archive:
 * 6) Regenerate the  configuration file:
 * 7) After reboot, check that the microcode has been loaded:

USB support
Configure support for USB devices.


 * 1) Edit, as explained above, to enable  support.
 * 2) Update the Kernel, as explained below.
 * 3) Install the Usbutils to be able to query the  interfaces:

NTFS support
Configure NTFS read and write support.


 * 1) Edit, as explained above, to enable in-kernel  read and  write support.
 * 2) Update the Kernel, as explained below.
 * 3) Enable  flags as needed:
 * 4) Emerge :

tmpfs support
Configure Tmpfs support.


 * 1) Edit, as explained above, to enable  support.
 * 2) Update the Kernel, as explained below.
 * 3)  will automatically mount  as . Place Portage_TMPDIR_on_tmpfs inside :
 * 4) Mount as Tmpfs any other appropriate directory, by using :

ALSA and PulseAudio support
Configure ALSA and PulseAudio support.


 * 1) Edit, as explained above, to enable  and  support.
 * 2) Update the Kernel, as explained below.
 * 3) Edit make.conf to enable  and  support:
 * 4) Update the system to reinstall packages with  and  support:
 * 5) Emerge :
 * 6) Add ffmpeg support to  and emerge it:

QEMU/KVM
and.


 * 1) Edit .conf.
 * 2) Edit USE
 * 3) * Apply patch or it will not compile.
 * 1) * Apply patch or it will not compile.
 * 1) * Apply patch or it will not compile.
 * 1) * Apply patch or it will not compile.

To Do...
Check the firmware used by rtl8153

https://wiki.gentoo.org/wiki/Linux_firmware

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

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

Troubleshooting
(Optional section.)

(Troubleshoot issues in this section. Separate issues by best describing the error with a new section name. Remove this section and subsections if no issues are known.)

Issue 1
When X happens, Y is how you fix it.

External resources

 * https://github.com/bugalo/gentoo_dell_xps_15_7590
 * https://wiki.archlinux.org/index.php/Dell_XPS_15_7590
 * https://github.com/zfsonlinux/zfs/wiki/Debian-Buster-Root-on-ZFS
 * https://wiki.archlinux.org/index.php/ZFS#GRUB-compatible_pool_creation
 * https://www.funtoo.org/ZFS_as_Root_Filesystem
 * https://www.reddit.com/r/zfs/comments/bnvdco/zol_080_encryption_dont_encrypt_the_pool_root/
 * https://wiki.archlinux.org/index.php/ZFS
 * https://github.com/zfsonlinux/zfs/issues/8810
 * https://github.com/HankB/Linux_ZFS_Root/tree/master/Debian
 * https://wiki.archlinux.org/index.php/ZFS#Native_encryption