This repository contains documentation and configuration resources for installing Gentoo Linux on laptops. It is currently geared toward network testing, with plans to use more generic package keywords in the future to. The goal is to have something that is useful for KVM virtualization, network testing, and development.
This file (README.md) is a companion guide to the Gentoo install documentation. It can be deployed quickly (about a day of compile time on an i3; it is Gentoo), supports a wide range of laptop hardware, and features sets to quickly install groups of software.
If you are installing using our configuration files, make sure that this file (README.md) and the configuration files are the same version.
The kernel and initramfs are compiled using genkernel-next. Kernel configuration is largely based on the Kali Linux configuration, which has excellent laptop hardware support. It is configured to use systemd
as an init system, for compatibility with the Gnome desktop environment.
It supports Docker containers (with the devicemapper storage driver), QEMU/KVM, VirtualBox (currently broken), and has guest support for most virtualization hosts.
Our kernel modules are quite expansive. You can expect a ~12G source tree, with ~2.8G worth of compiled modules in /lib/modules/
.
This has been tested on at least one 2in1 laptop, and everything works. Laptop hardware support has come a long way since the 1990s, in everything from the kernel to desktop environments.
Full disk and swap encryption are a necessity in a lot of industries. We use LUKS on LVM to encrypt everything except the boot partition.
This section can be used to replace a lot of the instructions in the Preparing the disks section of the gentoo install documentation.
The /usr
directory can get quite large when compiling a kernel using the included configuration. 20G will not be enough. The filesystem size recommendations that follow were arrived at through extensive testing.
Large parts of our dmcrypt and lvm setup were inspired by an Arch Linux Wiki article. The Arch Linux documentation is an invaluable resource to all Linux users, especially gentoo users.
Create a grub partition and boot partition as normal, and create a third partition that takes up the remainder of the disk. We will encrypt this, and create logical volumes on top of it.
- Format the partition with LUKS
cryptsetup luksFormat /dev/sda3
cryptsetup open /dev/sda3 cryptolvm
- Then create a physical volume and a logical volume group:
pvcreate /dev/mapper/cryptolvm
vgcreate MyVG /dev/mapper/cryptolvm
- Then create some LVM partitions:
lvcreate -L 8G MyVG -n swap
lvcreate -L 20G MyVG -n root
lvcreate -L 40G MyVG -n usr
lvcreate -L 20G MyVG -n var
lvcreate -l 100%FREE MyVG -n home
lvcreate -L 8G MyVG -n swap
lvcreate -l 100%FREE MyVG -n root
- Start with swap:
mkswap /dev/mapper/MyVG-swap
swapon /dev/mapper/MyVG-swap
- Then create the filesystems:
mkfs.ext4 /dev/mapper/MyVG-root
mkfs.ext4 /dev/mapper/MyVG-usr
mkfs.ext4 /dev/mapper/MyVG-var
mkfs.ext4 /dev/mapper/MyVG-home
mkfs.ext4 /dev/mapper/MyVG-root
- Then mount everything:
mount /dev/mapper/MyVG-root /mnt/gentoo
mkdir /mnt/gentoo/usr
mount /dev/mapper/MyVG-usr /mnt/gentoo/usr
mkdir /mnt/gentoo/var
mount /dev/mapper/MyVG-var /mnt/gentoo/var
mkdir /mnt/gentoo/home
mount /dev/mapper/MyVG-home /mnt/gentoo/home
mount /dev/mapper/MyVG-root /mnt/gentoo
This repository contains configuration files needed for installation in gentoo-laptop/files/
. You can use them as examples, copy them to /etc
, or ignore them entirely. If you are going to copy them all, a good time to do it is right after unpacking the stage tarball.
To download this repo, use links:
links https://github.com/dogoncouch/gentoo-laptop/releases/latest
Navigate to the link labeled Source code (tar.gz)
, and hit d
to download. Then hit q
to quit, and unpack the tarball:
tar -xzf v*.tar.gz
Then remove the version number from the repo directory, so the instructions in the rest of this guide will work:
mv gentoo-laptop* gentoo-laptop
To copy all configuration files:
cp -ir gentoo-laptop/files/* .
We use Gnome for a desktop environment, which requires using the systemd init system. If you don't mind a bit of extra work, you can use something else. That is one of the reasons we like Gentoo.
If you plan on using Gnome and systemd, make sure to select the right profile during the Configuring Portage section of installation. For example:
eselect profile set default/linux/amd64/13.0/desktop/gnome/systemd
Our initial make.conf leaves out some USE flags to avoid circular dependencies during the initial system install. After updating your @world set, switch to the final make.conf and re-do the update:
mv /etc/portage/make.conf.final /etc/portage/make.conf
emerge --ask --deep --newuse @world
If you are using LVM
and LuKS
, you will need to use genkernel-next
instead of genkernel
to compile a kernel and/or initramfs. This section will replace the Configuring the Linux Kernel section of the Gentoo Handbook.
To install genkernel-next
, grub
(version 2), gentoo-sources
, and some bootsplash utilities, install our dogoncouch-kernel
set:
emerge --ask --verbose @dogoncouch-kernel
Our genkernel configuration will automatically configure the Grub bootloader after installing the kernel. Before compiling, install grub on /dev/sda
:
grub-install /dev/sda
To compile and install a kernel, modules, and an initramfs:
genkernel --install all
genkernel
will use the kernel configuration and genkernel.conf
in /etc
. If you want to be able to edit the kernel configuration, use menuconfig:
genkernel --menuconfig --install all
This should be done once installation is complete, after rebooting into the new system. For this phase, do whatever you did to get networking to work on the install medium.
Once networking is up, install Gnome:
- Install Gnome:
emergse --ask --verbose gnome
This will take a while.
- Enable GDM:
systemctl enable gdm
- Enable NetworkManager:
systemctl enable NetworkManager
Our /etc/NetworkManager/conf.d/20-clone.conf
will enable stable mac address cloning (one different address for each network), and keep the vendor ID portion of the address.
- Reboot
reboot
The incuded configuration files come with portage sets for various purposes. Portage sets are groups of packages that can be easily installed together. Available sets are:
- dogoncouch-core
- Core packages
- dogoncouch-kernel
- Packages related to our kernel
- dogoncouch-laptop
- Non-model-specific laptop utilities (lm_sensors, etc.)
- dogoncouch-net
- Network analysis tools (non-GUI)
- dogoncouch-disk
- Disk forensics utilities (non-GUI)
- dogoncouch-wifi
- Wireless network analysis tools (non-GUI)
- dogoncouch-guisec
- Graphical forensics and network analysis programs
- dogoncouch-office
- Graphical programs for office productivity
- dogoncouch-gfx
- Graphical programs for multi-media
To emerge a set:
emerge -av @dogoncouch-core
This will emerge the dogoncouch-core
set.
Use the Gentoo Wiki article to get bluetooth working. Our kernel contains a lot of bluetooth hardware modules, so the kernel configuration should be ok.
There is an issue with bluetooth and Gnome. Gnome seems to use rfkill to turn off the bluetooth interface, and then for some reason it disappears out of the menu and has to be unblocked manually, or through the settings GUI.
If bluetooth isn't working, make sure it is running/up/unblocked:
rfkill unblock bluetooth
hciconfig bluetooth up
systemctl start bluetooth
To Do: Full bluetooth control via gnome
iio-sensor-proxy
handles accelerometers and light sensors, and is used for screen rotation and automatic brightness control, if the system has the necessary sensors. Our kernel includes a lot of modules for sensors.
If you are using our all of our config files, and you have installed our dogoncouch-laptop
set, iio-sensor-proxy
should already be installed. Check with emerge -pv iio-sensor-proxy
. If it is, skip ahead to using iio-sensor-proxy
First, download the iio-sensor-proxy ebuild. Then put it in the /usr/portage
tree:
mkdir /usr/portage/sys-apps/iio-sensor-proxy
cp iio-sensor-proxy-2.0.ebuild /usr/portage/sys-apps/iio-sensor-proxy
Then emerge it:
emerge sys-apps/iio-sensor-proxy
The iio-sensor-proxy service has to be started at first; after a while it becomes static, and no longer needs to be started.
systemctl start iio-sensor-proxy
In the beginning, it may not work on startup until after a suspend/resume cycle. That issue seems to go away on its own after a few days/weeks.
lm_sensors
is a set of laptop hardware sensor utilities, and part of our dogoncouch-laptop
set. Once installed, it can be configured using sensors-detect
(go through the prompts, and pay attention to the warnings), and enabled with systemctl enable --now lm_sensors
.
If you have a bug, an anomaly, or a story about anything from odd configurations to setting up complex software on top of our system, we would love to hear about it. File an issue on our GitHub page, or email the developer at dpersonsdev@gmail.com.