<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="assets/xml/rss.xsl" media="all"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dejice Jacob: University of Glasgow</title><link>http://www.dcs.gla.ac.uk/~jacobd/</link><description>Dejice Jacob's research profile</description><atom:link href="http://www.dcs.gla.ac.uk/~jacobd/rss.xml" rel="self" type="application/rss+xml"></atom:link><language>en</language><copyright>Contents © 2025 &lt;a href="mailto:dejice.jacob@glasgow.ac.uk"&gt;Dejice Jacob&lt;/a&gt; </copyright><lastBuildDate>Wed, 29 Jan 2025 17:55:22 GMT</lastBuildDate><generator>Nikola (getnikola.com)</generator><docs>http://blogs.law.harvard.edu/tech/rss</docs><item><title>A gentoo installation story - continued!</title><link>http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/a-gentoo-installation-story-continued/</link><dc:creator>Dejice Jacob</dc:creator><description>&lt;h3&gt;The birth of a Gentoo Linux KDE Desktop&lt;/h3&gt;
&lt;p&gt;I have previously journaled (&lt;a href="http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/an-encrypted-boot-gentoo-installation-story"&gt;Part-I&lt;/a&gt;)
my attempt to create an encrypted Gentoo Linux desktop. Please follow that first. 
It was a little more involved than I expected. I had to revisit some of the steps one or two times. 
Some of the steps in that post might better fit in this post. But hindsight is a wonderful thing. 
Now we come to building out what the general public think of as a computer (the Desktop). &lt;/p&gt;
&lt;h3&gt;Install some useful utilities&lt;/h3&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;eselect&lt;span class="w"&gt; &lt;/span&gt;profile&lt;span class="w"&gt; &lt;/span&gt;list&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;# to get a list of desktop profiles &lt;/span&gt;
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;eselect&lt;span class="w"&gt; &lt;/span&gt;profile&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;lt;KDE-openrc&amp;gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# I will also setup i3 tiling window manager&lt;/span&gt;
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Europe/London"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/timezone
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--sync&lt;span class="w"&gt; &lt;/span&gt;
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--quiet-build&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;--config&lt;span class="w"&gt; &lt;/span&gt;sys-libs/timezone-data&lt;span class="w"&gt; &lt;/span&gt;
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--quiet-build&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;app-misc/screen&lt;span class="w"&gt; &lt;/span&gt;sys-process/htop
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;Setup WiFi (Optional)&lt;/h5&gt;
&lt;p&gt;In (&lt;a href="http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/an-encrypted-boot-gentoo-installation-story"&gt;Part-I&lt;/a&gt;), 
I already had ethernet and used that for installation. However, if WiFi is something that is 
required, then the following instructions should set up WiFi. Bear in mind that WiFi drivers 
could be missing from your kernel configuration. Searching 
the &lt;a href="https://forums.gentoo.org"&gt;Gentoo forums&lt;/a&gt; for a similar issue would be helpful. &lt;/p&gt;
&lt;p&gt;I will be installing &lt;code&gt;network-manager&lt;/code&gt; later on
and will have to disable both &lt;em&gt;dhcpcd&lt;/em&gt; and &lt;em&gt;wpa-supplicant&lt;/em&gt;. If we forget, then we will have 
two instances of DHCP and WiFi daemons duelling each other. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--quiet-build&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;net-misc/dhcpcd
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;--verbose&lt;span class="w"&gt; &lt;/span&gt;net-wireless/wpa_supplicant
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;/usr/share/dhcpcd/hooks/10-wpa_supplicant&lt;span class="w"&gt; &lt;/span&gt;/lib/dhcpcd/dhcpcd-hooks/
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;bzcat&lt;span class="w"&gt;  &lt;/span&gt;/usr/share/doc/wpa_supplicant-&amp;lt;ver-no&amp;gt;/wpa-supplicant.conf.bz2&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/wpa_supplicant/wpa_supplicant.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Almost all variations of a wpa-supplicant configuration can be obtained from 
"&lt;em&gt;/usr/share/doc/wpa_supplicant-&lt;ver-no&gt;/wpa_supplicant.conf.bz2&lt;/ver-no&gt;&lt;/em&gt;". Uncomment the
following in &lt;code&gt;/etc/wpa_supplicant/wpa_supplicant.conf&lt;/code&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;ctrl_interface&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/var/run/wpa_supplicant&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;GROUP&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wheel
&lt;span class="nv"&gt;eapol_version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="nv"&gt;ap_scan&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="nv"&gt;fast_reauth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also generate the network connection parameters and insert into &lt;code&gt;wpa_supplicant.conf&lt;/code&gt; using &lt;code&gt;wpa_passphrase&lt;/code&gt;
and remove every other configuration in that file. In case you have a more complicated set-up, then you will 
have to configure this according to your setup. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;wpa_passphrase&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;ssid&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;passphrase&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/wpa_supplicant/wpa_supplicant.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Change the value of &lt;code&gt;wpa_supplicant_args&lt;/code&gt; in &lt;code&gt;/etc/conf.d/wpa_supplicant.conf&lt;/code&gt; to: &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;wpa_supplicant_args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"-B -M -c/etc/wpa_supplicant/wpa_supplicant.conf"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now add the &lt;code&gt;dhcpcd&lt;/code&gt; and &lt;code&gt;wpa_supplicant&lt;/code&gt; services to default runlevel and start the services. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;dhcpcd&lt;span class="w"&gt; &lt;/span&gt;default
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;wpa_supplicant&lt;span class="w"&gt; &lt;/span&gt;default
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-service&lt;span class="w"&gt; &lt;/span&gt;dhcpcd&lt;span class="w"&gt; &lt;/span&gt;start
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-service&lt;span class="w"&gt; &lt;/span&gt;wpa_supplicant&lt;span class="w"&gt; &lt;/span&gt;start
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;&lt;a href="https://wiki.gentoo.org/wiki/Ntp#Ntpd"&gt;Setting up NTP&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Networking and "time" dependent programs require accurate date and time information. This is achieved by installing &lt;strong&gt;NTPD&lt;/strong&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;net-misc/ntp
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;ntpd&lt;span class="w"&gt; &lt;/span&gt;default
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-service&lt;span class="w"&gt; &lt;/span&gt;ntpd&lt;span class="w"&gt; &lt;/span&gt;start
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/0/05/Gentoo_Live_GUI_USB_running_KDE.png/640px-Gentoo_Live_GUI_USB_running_KDE.png" title="A Gentoo KDE Desktop" alt="Gentoo KDE desktop"&gt;
&lt;/p&gt;
&lt;h3&gt;&lt;a href="https://wiki.gentoo.org/wiki/KDE"&gt;Install the KDE desktop&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;While Wayland seems to be the future, I am still quite comfortable with the &lt;code&gt;X&lt;/code&gt; server. It also helps that the 
&lt;code&gt;i3wm&lt;/code&gt; window manager also is dependent on &lt;code&gt;X-sever&lt;/code&gt;. The &lt;strong&gt;KDE&lt;/strong&gt; meta-package is comprehensive and installs 
all the KDE applications and dependencies. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localhost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;kde-plasma/plasma-meta
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ensure that the KDE display manager &lt;code&gt;sddm&lt;/code&gt; is installed; then ensure that the "&lt;strong&gt;DISPLAYMANAGER&lt;/strong&gt;" variable is set 
to &lt;em&gt;sddm&lt;/em&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;DISPLAYMANAGER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"sddm"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add the requisite services to openrc to start at boot, &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;dbus&lt;span class="w"&gt; &lt;/span&gt;default
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;display-manager&lt;span class="w"&gt; &lt;/span&gt;default
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;elogind&lt;span class="w"&gt; &lt;/span&gt;boot
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img src="https://media2.giphy.com/media/v1.Y2lkPTc5MGI3NjExc2t3czJ2YTF6MHJheGRlNHplenlmbGhpN214Mng3czBrcnQya203dCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/DUtVdGeIU8lmo/giphy.gif" title="Restarting always works!" alt="IT crowd"&gt;

In my case, at this point, I found that just starting up the boot displaymanager from &lt;em&gt;openrc&lt;/em&gt; did not get &lt;code&gt;sddm&lt;/code&gt; to start.
Rebooting the machine sorted the crashing display manager out. &lt;/p&gt;
&lt;h5&gt;Debugging:  &lt;a href="https://wiki.gentoo.org/wiki/X_server"&gt;Install &lt;em&gt;X-server&lt;/em&gt;&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;If there are any problems with bringing up KDE, using X-server to debug the issue is very useful. 
In case it was not already installed when &lt;em&gt;KDE-meta&lt;/em&gt; was installed, 
start with installing X-server and  driver  packages.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;--verbose&lt;span class="w"&gt; &lt;/span&gt;x11-base/xorg-drivers&lt;span class="w"&gt; &lt;/span&gt;x11-base/xorg-server
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To test out that the X-server is working correctly install a few &lt;strong&gt;X&lt;/strong&gt; applications&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;-a&lt;span class="w"&gt; &lt;/span&gt;x11-terms/xterm&lt;span class="w"&gt; &lt;/span&gt;x11-apps/xclock&lt;span class="w"&gt; &lt;/span&gt;x11-wm/twm
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;startx&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;# to test if display server is working&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;Sidenote: Uninstall dhcp and wpa-supplicant&lt;/h5&gt;
&lt;p&gt;Keeping &lt;code&gt;dhcpcd&lt;/code&gt; and &lt;code&gt;wpa-supplicant&lt;/code&gt; running in the background led me to some incredibly 
annoying and hard to debug problems with networking. The KDE deskptop already installs 
&lt;code&gt;NetworkManager&lt;/code&gt; and this will in turn call an instance of &lt;em&gt;dhcp&lt;/em&gt;  and &lt;em&gt;wpa_supplicant&lt;/em&gt;. 
You do NOT need your own version fighting with it. So... &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-service&lt;span class="w"&gt; &lt;/span&gt;stop&lt;span class="w"&gt; &lt;/span&gt;dhcpcd
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;del&lt;span class="w"&gt; &lt;/span&gt;dhcpcd
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-service&lt;span class="w"&gt; &lt;/span&gt;stop&lt;span class="w"&gt; &lt;/span&gt;wpa_supplicant
localost&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;$&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;del&lt;span class="w"&gt; &lt;/span&gt;wpa_supplicant
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Congratulations!&lt;/h3&gt;
&lt;p&gt;If you have persevered with the process this far, congratulations! You should have a
desktop machine that you have compiled from source. Obviously, I have cleverly 
hidden all the frustrating debug work that went into steps going wrong. Along with 
this, there are issues with drivers or kernel features required by some software
component not being turned &lt;strong&gt;ON&lt;/strong&gt;. However, that is what the incredible 
gentoo &lt;a href="https://forums.gentoo.org/"&gt;forums&lt;/a&gt; and &lt;a href="https://wiki.gentoo.org/wiki/Main_Page"&gt;wiki&lt;/a&gt; 
are for. Happy compiling and debugging.&lt;/p&gt;</description><category>gentoo</category><category>install</category><category>linux</category><category>security</category><guid>http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/a-gentoo-installation-story-continued/</guid><pubDate>Sun, 19 Jan 2025 20:14:21 GMT</pubDate></item><item><title>An encrypted-boot gentoo installation story</title><link>http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/an-encrypted-boot-gentoo-installation-story/</link><dc:creator>Dejice Jacob</dc:creator><description>&lt;h3&gt;How I got to gentoo&lt;/h3&gt;
&lt;p&gt;Like many people, I have gone through a few linux distros in my lifetime.
Over the span of two decades, I ended up going through OpenSuse → Ubuntu → Debian (Stable) →
Debian (Testing) → Gentoo. 
I keep an eye on distributions quite often, but the motivation for moving distributions crosses a threshold 
when a major workflow or technology disruption occurs within the distribution. It also correlates with my
(&lt;em&gt;Slowly&lt;/em&gt;) increasing knowledge and comfort with delving into how systems are put together. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Gentoo_Penguin_Baby_%2824940372635%29.jpg/209px-Gentoo_Penguin_Baby_%2824940372635%29.jpg" title="A Southern Gentoo Penguin" alt="Southern Gentoo Penguin" align="right"&gt;
&lt;/p&gt;
&lt;p&gt;I moved from Ubuntu → Debian (Stable) when Ubuntu decided to 
develop &lt;a href="https://fridge.ubuntu.com/2013/03/04/mir-an-outpost-envisioned-as-a-new-home"&gt;Mir&lt;/a&gt; rather
than developing for Wayland. 
I am always enthusiastic about new software being developed, if only to see what could have been. The vision of convergence
between devices was a cool one and given the right circumstances, may have succeeded. 
However, any large scale surgery of this sort which veers off and does its own thing risks failure. &lt;/p&gt;
&lt;p&gt;Another thing that philosophically did not sit right with me was the usage of &lt;a href="https://snapcraft.io/blog/a-technical-comparison-between-snaps-and-debs"&gt;&lt;em&gt;snap&lt;/em&gt; packages&lt;/a&gt;. 
To me this felt like a way to reduce the pressure of maintenance in the short-term at the 
expense of long-term fragmentation. Desktop &lt;em&gt;*nix&lt;/em&gt; distributions are not &lt;strong&gt;yet&lt;/strong&gt; (it is now decade no.3 of
trying to conquer the desktop) popular enough. I wish it was different (&lt;em&gt;sigh&lt;/em&gt;)!
Like any demand-supply equation, any let-up in the pressure to maintain 
library/API compatibility, in my opinion, would just lead to fragmentation and end-user frustration in the long-run.&lt;/p&gt;
&lt;p&gt;So I decided to do the Ubuntu → Debian (Stable) switch. As I was using a slightly older laptop, and it had all the
drivers and packages I needed, I wonder why I did not do this earlier (&lt;em&gt;Doh&lt;/em&gt;)! After two of my upgrades between major 
Debian revisions ended up requiring re-installations, I heard of this amazing new term called &lt;em&gt;rolling&lt;/em&gt;-distributions. 
(Please excuse the &lt;em&gt;naïvete&lt;/em&gt; and yes, I really am that naïve)! &lt;/p&gt;
&lt;p&gt;The next trigger to move was Debian's &lt;a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=727708#6734"&gt;embrace&lt;/a&gt;  of &lt;a href="https://systemd.io"&gt;Systemd&lt;/a&gt;. I feel more comfortable with &lt;a href="https://github.com/OpenRC/openrc"&gt;openRC&lt;/a&gt; which I think keeps better to the
overall *nix philosophy. 
I had by now done enough systems level software development and debugging to no longer be afraid of doing silly things
that break stuff (&lt;em&gt;a little knowledge being dangerous&lt;/em&gt; and all that). Building a new system from ground up would be something 
that would allow me to explore and understand the guts of my own system. &lt;/p&gt;
&lt;h5&gt;Enter Gentoo&lt;/h5&gt;
&lt;p&gt;Keeping with the theme of going further upstream and closer to the source 
(&lt;em&gt;wipe that smug &lt;a href="https://en.wikipedia.org/wiki/Icarus"&gt;Icarus&lt;/a&gt; image from your mind&lt;/em&gt;), 
the choice was between &lt;a href="https://www.linuxfromscratch.org/"&gt;Linux from Scratch&lt;/a&gt;, &lt;a href="http://www.slackware.com"&gt;Slackware&lt;/a&gt; and &lt;a href="https://www.gentoo.org"&gt;Gentoo&lt;/a&gt;. In the end, I went with Gentoo due to the package manager and the sheer amount of 
support and documentation on the website.
It should help reduce the amount of debugging and maintenance work I have to do, while still making me 
feel like a proper computer scientist. &lt;em&gt;Vanity and naïvete -- what could possibly go wrong?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://wiki.gentoo.org/images/thumb/e/ee/Gblend.png/234px-Gblend.png" title="Gentoo Linux" alt="Gentoo Linux Logo" align="right"&gt;
&lt;/p&gt;
&lt;h3&gt;Why ?!&lt;/h3&gt;
&lt;p&gt;This leads us onto the purpose of this blog. Installing gentoo is relatively easy but time consuming if we go through 
the relatively straightforward instructions in the marvellous &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64"&gt;Gentoo AMD64 handbook&lt;/a&gt;. However, I wanted to do a fully encrypted &lt;code&gt;/boot&lt;/code&gt; drive as well and had to search around for various instructions. 
This is the command log (My Gentoo installation story) for my own personal notes. Someone else finding it useful is just a bonus.
For more comprehensive information and various options, Each link in the subsections below are linked 
to the much more comprehensive information in the gentoo &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64"&gt;wiki&lt;/a&gt;. &lt;/p&gt;
&lt;h3&gt;Gentoo AMD64 installation with encrypted &lt;em&gt;/boot&lt;/em&gt;&lt;/h3&gt;
&lt;h5&gt;Obtaining and preparing the &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Media"&gt;installation media&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Very detailed instructions are already provided
in the &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Media"&gt;handbook&lt;/a&gt;
and I don't have anything new to add. 
Switch off secure-boot in the BIOS and choose to boot  from the USB drive that was just prepared. 
Once the laptop has been booted into the linux kernel and shows a root prompt, we will need to 
set up &lt;a href="http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/an-encrypted-boot-gentoo-installation-story/#configuring-the-network"&gt;networking&lt;/a&gt;. &lt;/p&gt;
&lt;h5&gt;Partitioning the storage &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Disks"&gt;disks&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;I have a 16 GiB Laptop with 1TB of space on the SSD. I wanted to partition it with the following schema:&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;NAME&lt;span class="w"&gt;                     &lt;/span&gt;MAJ:MIN&lt;span class="w"&gt; &lt;/span&gt;RM&lt;span class="w"&gt;   &lt;/span&gt;SIZE&lt;span class="w"&gt; &lt;/span&gt;RO&lt;span class="w"&gt; &lt;/span&gt;TYPE&lt;span class="w"&gt;  &lt;/span&gt;MOUNTPOINTS
nvme0n1&lt;span class="w"&gt;                  &lt;/span&gt;&lt;span class="m"&gt;259&lt;/span&gt;:0&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;953&lt;/span&gt;.9G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;disk
├─nvme0n1p1&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="m"&gt;259&lt;/span&gt;:2&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;2M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
├─nvme0n1p2&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="m"&gt;259&lt;/span&gt;:4&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;512M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
│&lt;span class="w"&gt; &lt;/span&gt;└─luks_boot&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="m"&gt;253&lt;/span&gt;:0&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;496M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;crypt
├─nvme0n1p3&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="m"&gt;259&lt;/span&gt;:6&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;128M&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
└─nvme0n1p4&lt;span class="w"&gt;              &lt;/span&gt;&lt;span class="m"&gt;259&lt;/span&gt;:8&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;953&lt;/span&gt;.2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;part
&lt;span class="w"&gt;  &lt;/span&gt;└─luks_root&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="m"&gt;253&lt;/span&gt;:1&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;953&lt;/span&gt;.2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;crypt
&lt;span class="w"&gt;    &lt;/span&gt;├─osvg-swap&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="m"&gt;253&lt;/span&gt;:2&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;8G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lvm&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;SWAP&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;├─osvg-gentoo--root&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;253&lt;/span&gt;:3&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;64G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lvm&lt;span class="w"&gt;   &lt;/span&gt;/
&lt;span class="w"&gt;    &lt;/span&gt;├─osvg-gentoo--home&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;253&lt;/span&gt;:4&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;16G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lvm&lt;span class="w"&gt;   &lt;/span&gt;/home
&lt;span class="w"&gt;    &lt;/span&gt;└─osvg-data&lt;span class="w"&gt;          &lt;/span&gt;&lt;span class="m"&gt;253&lt;/span&gt;:5&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;865&lt;/span&gt;.2G&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lvm&lt;span class="w"&gt;   &lt;/span&gt;/media/data
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Zap all pre-existing partitions on the disk. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;sgdisk&lt;span class="w"&gt; &lt;/span&gt;--zap-all&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ensure the first &lt;em&gt;1MiB&lt;/em&gt; is left for grub to be written into raw device head. So we create a &lt;em&gt;1MiB&lt;/em&gt; partition with &lt;em&gt;offset=1MiB&lt;/em&gt;.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;sgdisk&lt;span class="w"&gt;  &lt;/span&gt;--new&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;:1M:+2M&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;sgdisk&lt;span class="w"&gt;  &lt;/span&gt;--new&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;:0:+512M&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;sgdisk&lt;span class="w"&gt;  &lt;/span&gt;--new&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;:0:+128M&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1&lt;span class="w"&gt;    &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;sgdisk&lt;span class="w"&gt;  &lt;/span&gt;--new&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;:0:0&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Change the names of the partitions and their filesystem types in the GPT partition table. 
A list of partition types can be obtained with &lt;code&gt;sgdisk -L&lt;/code&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;sgdisk&lt;span class="w"&gt;  &lt;/span&gt;--typecode&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;:ef02&lt;span class="w"&gt; &lt;/span&gt;--typecode&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;:8300&lt;span class="w"&gt; &lt;/span&gt;--typecode&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;:ef00&lt;span class="w"&gt; &lt;/span&gt;--typecode&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;:8300&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;sgdisk&lt;span class="w"&gt; &lt;/span&gt;--change-name&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;:GRUB&lt;span class="w"&gt; &lt;/span&gt;--change-name&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;:/boot&lt;span class="w"&gt; &lt;/span&gt;--change-name&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;:EFI-SP&lt;span class="w"&gt; &lt;/span&gt;--change-name&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;:OS&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Encrypt the &lt;code&gt;/boot&lt;/code&gt; partition with a password. While it is certainly more robust to have a separate Keyfile
stored on another USB flash drive, it is cumbersome to carry around. Also, if you forget it or lose it,
then it can be a pain. I am just going to use a plain old password for this in this case. 
Additionally, grub can not yet decrypt keys in the default LUKS2 format (argon2id) and requires the
key to be in the LUKS1 default format of PBKDF2. So the &lt;code&gt;/boot&lt;/code&gt; partition is formatted with LUKS1. 
I will maybe write up a detached header version in a future post.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cryptsetup&lt;span class="w"&gt; &lt;/span&gt;luksFormat&lt;span class="w"&gt; &lt;/span&gt;--key-size&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;512&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--type&lt;span class="o"&gt;=&lt;/span&gt;luks1&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p2
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Format the &lt;code&gt;/boot&lt;/code&gt; and &lt;code&gt;efi-sp&lt;/code&gt; partitions &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cryptsetup&lt;span class="w"&gt; &lt;/span&gt;open&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p2&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/luks_boot
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkfs.ext4&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;boot&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/luks_boot
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkfs.vfat&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;EFI-SP&lt;span class="w"&gt; &lt;/span&gt;-F&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p3&lt;span class="w"&gt; &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;To obtain an encrypted &lt;em&gt;&lt;code&gt;/root, /home and swap&lt;/code&gt;&lt;/em&gt; partition, I decided to use 
Logical Volume Management (&lt;a href="https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/configuring_and_managing_logical_volumes/overview-of-logical-volume-management_configuring-and-managing-logical-volumes#lvm-architecture_overview-of-logical-volume-management"&gt;LVM&lt;/a&gt;) on a LUKS encrypted partition. 
With experience, I can say that if you intend on using the KDE desktop, the machine should ideally have 
32GB of RAM. Some packages such as firefox, the qtwebkit renderer etc require greater than 16GB of RAM. 
This would then influence the amount of swap space that you should keep aside. Since I have 32GiB of RAM, 
and I  do not want suspend, only 8GiB of swap space is allocated. The beauty of LVM is that 
this can be resized in the future if required. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cryptsetup&lt;span class="w"&gt; &lt;/span&gt;luksFormat&lt;span class="w"&gt; &lt;/span&gt;--key-size&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;512&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--key-slot&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p4&lt;span class="w"&gt; &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cryptsetup&lt;span class="w"&gt; &lt;/span&gt;open&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p4&lt;span class="w"&gt; &lt;/span&gt;luks_root&lt;span class="w"&gt;    &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;pvcreate&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/luks_root&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# Create a Physical volume on the decrypted device&lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;vgcreate&lt;span class="w"&gt; &lt;/span&gt;osvg&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/luks_root&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# Create a volume group on the Physical volume&lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;lvcreate&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;8G&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;swap&lt;span class="w"&gt; &lt;/span&gt;osvg&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# Create swap space on the encrypted LVM &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;lvcreate&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;64G&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;gentoo-root&lt;span class="w"&gt; &lt;/span&gt;osvg&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# Create /root on the encrypted LVM &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;lvcreate&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;16G&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;gentoo-home&lt;span class="w"&gt; &lt;/span&gt;osvg&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# Create /home on the encrypted LVM &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;lvcreate&lt;span class="w"&gt; &lt;/span&gt;-l&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;100&lt;/span&gt;%FREE&lt;span class="w"&gt; &lt;/span&gt;-n&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;osvg&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# Create a separate data partition&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Format the partitions created in the LVM.&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkswap&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;swap&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-swap&lt;span class="w"&gt; &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkfs.ext4&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;root&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-gentoo--root
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkfs.ext4&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;home&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-gentoo--home
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkfs.ext4&lt;span class="w"&gt; &lt;/span&gt;-L&lt;span class="w"&gt; &lt;/span&gt;data&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-data
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now mount the encrypted drives to various directories&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/&lt;span class="o"&gt;{&lt;/span&gt;root,home,data&lt;span class="o"&gt;}&lt;/span&gt;
mount&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-gentoo--root&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root
mount&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-gentoo--home&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/home
mount&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-data&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/data
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;Configuring the &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Networking"&gt;network&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;I already have an ethernet cable to connect, so I did not require to set up WiFi. Gentoo already has 
the &lt;code&gt;net-setup&lt;/code&gt; utility to help with setting up WiFi. 
The network interface names can be obtained using the &lt;code&gt;ip link&lt;/code&gt; command. 
Set-up is through a fairly easy menu driven &lt;code&gt;ncurses&lt;/code&gt; style interactive interface. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;net-setup&lt;span class="w"&gt; &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;For ethernet, configure the wired ethernet interface (starts with &lt;em&gt;enp&lt;/em&gt;...) &lt;/li&gt;
&lt;li&gt;In the case of WiFi, choose wireless WiFi interface (starts with &lt;em&gt;wlp&lt;/em&gt;...) &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Make sure the time of the system is accurate. I utilised a simple &lt;strong&gt;NTP&lt;/strong&gt; client (&lt;em&gt;chronyd&lt;/em&gt;) 
to correct the time. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;chronyd&lt;span class="w"&gt; &lt;/span&gt;-q
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;Obtaining the &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage"&gt;Stage-3&lt;/a&gt; Installation files&lt;/h5&gt;
&lt;p&gt;I like &lt;em&gt;openrc&lt;/em&gt; and chose the &lt;em&gt;desktop-openrc&lt;/em&gt; profile for the stage-3 tarball. 
Use the livecd built-in &lt;em&gt;ncurses&lt;/em&gt; browser to obtain the stage-3 tarball. Alternatively 
download it on another PC and transfer via another USB device. &lt;/p&gt;
&lt;h5&gt;Setup base &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage"&gt;root filesystem&lt;/a&gt;, configure &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Stage#Configuring_compile_options"&gt;portage&lt;/a&gt; and &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base"&gt;gentoo base&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Assuming the stage-3 tarball is in &lt;code&gt;/mnt/gentoo/data&lt;/code&gt; untar it to the target storage-device's &lt;code&gt;/root&lt;/code&gt; directory. 
In our case, we have mounted it to &lt;code&gt;/mnt/gentoo/root&lt;/code&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/data
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;tar&lt;span class="w"&gt; &lt;/span&gt;-Jxpvf&lt;span class="w"&gt; &lt;/span&gt;stage3_tarball.tar.xz&lt;span class="w"&gt; &lt;/span&gt;--xattrs-include&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'*.*'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;--numeric-owner&lt;span class="w"&gt; &lt;/span&gt;-C&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root&lt;span class="w"&gt;  &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;/mnt/gentoo/root
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cp&lt;span class="w"&gt; &lt;/span&gt;--dereference&lt;span class="w"&gt;  &lt;/span&gt;/etc/resolv.conf&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/resolv.conf&lt;span class="w"&gt; &lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;MAKEOPTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;-j&lt;span class="k"&gt;$(&lt;/span&gt;nproc&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ACCEPT_KEYWORDS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;amd64&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;USE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;udev&lt;span class="w"&gt; &lt;/span&gt;lvm&lt;span class="w"&gt; &lt;/span&gt;dbus&lt;span class="w"&gt; &lt;/span&gt;X&lt;span class="w"&gt; &lt;/span&gt;pulseaudio&lt;span class="w"&gt; &lt;/span&gt;networkmanager&lt;span class="w"&gt; &lt;/span&gt;clang&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add the CPU flags for your host to &lt;code&gt;/mnt/gentoo/root/etc/portage/make.conf&lt;/code&gt;. Make sure you replace the newly added line
to the format &lt;code&gt;CPU_FLAGS_X86="aes ....."&lt;/code&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;cpuid2cpuflags&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now add the &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Base#VIDEO_CARDS"&gt;video-cards&lt;/a&gt;
depending on your machine. On this machine, I had an AMD video card. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;VIDEO_CARDS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;amdgpu&lt;span class="w"&gt; &lt;/span&gt;radeonsi&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Add some miscellaneous devices as well. &lt;code&gt;libinput&lt;/code&gt; provides input handling for display servers. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;INPUT_DEVICES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;libinput&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;SANEBACKENDS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;hp&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Within the portage configuration file &lt;code&gt;/mnt/gentoo/root/etc/portage/make.conf&lt;/code&gt; update the value of the 
variable &lt;code&gt;COMMON_FLAGS&lt;/code&gt; to &lt;code&gt;COMMON_FLAGS="-march=native -O2 -pipe"&lt;/code&gt;
Also select from the worldwide mirrors to download software from. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mirrorselect&lt;span class="w"&gt; &lt;/span&gt;-i&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/etc/portage/make.conf
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Mount the system files required to prepare the target computer's &lt;code&gt;chroot&lt;/code&gt; environment. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;--types&lt;span class="w"&gt; &lt;/span&gt;proc&lt;span class="w"&gt; &lt;/span&gt;/proc&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/proc
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;--rbind&lt;span class="w"&gt; &lt;/span&gt;/sys&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/sys
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;--make-rslave&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/sys
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;--rbind&lt;span class="w"&gt; &lt;/span&gt;/dev&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/dev
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;--make-rslave&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/dev
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;--bind&lt;span class="w"&gt; &lt;/span&gt;/run&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/run
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;--make-slave&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/run
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Enter the &lt;code&gt;chroot&lt;/code&gt; environment. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;umount&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/home&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/data
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;chroot&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root&lt;span class="w"&gt; &lt;/span&gt;/bin/bash
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/profile
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PS1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"(chroot) &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PS1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;PS1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"(chroot) &lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;PS1&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/home&lt;span class="w"&gt; &lt;/span&gt;/media/data
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-gentoo--home&lt;span class="w"&gt; &lt;/span&gt;/home
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-data&lt;span class="w"&gt; &lt;/span&gt;/media/data
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;swapon&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-swap
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Prepare the EFI System Partition. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/luks_boot&lt;span class="w"&gt; &lt;/span&gt;/boot
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/boot/efi&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mount&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p3&lt;span class="w"&gt; &lt;/span&gt;/boot/efi
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Synchronise &lt;code&gt;emerge&lt;/code&gt;'s software package list with upstream mirrors&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;emerge-webrsync
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Setup Locale Details&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Europe/London"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/timezone
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"C.UTF8 UTF-8"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/locale.gen
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en_GB ISO-8859-1"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/locale.gen
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en_GB.UTF-8 UTF-8"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/locale.gen
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;locale-gen
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;env-update
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;Configuring the &lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Kernel"&gt;Linux Kernel&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Obtain all kernel related gentoo packages. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/etc/portage/package.license&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sys-kernel/linux-firmware linux-fw-redistributable"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/portage/package.license/kernel
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;--quiet-build&lt;span class="w"&gt; &lt;/span&gt;sys-kernel/linux-firmware&lt;span class="w"&gt; &lt;/span&gt;sys-fs/cryptsetup&lt;span class="w"&gt; &lt;/span&gt;sys-kernel/gentoo-sources&lt;span class="w"&gt; &lt;/span&gt;sys-kernel/genkernel&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;eselect&lt;span class="w"&gt; &lt;/span&gt;kernel&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# this should link /usr/src/linux to current kernel source&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sys-boot/grub:2 device-mapper"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/portage/package.use/grub2
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;--quiet-build&lt;span class="w"&gt; &lt;/span&gt;sys-boot/grub&lt;span class="w"&gt; &lt;/span&gt;sys-fs/genfstab
&lt;span class="c1"&gt;## Ensure all the relvant drives (including swap are already mounted / turned on&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;genfstab&lt;span class="w"&gt; &lt;/span&gt;-Up&lt;span class="w"&gt; &lt;/span&gt;/&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/fstab&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="c1"&gt;## add noauto to the /boot and /boot/efi mount-points in /etc/fstab&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Generate a LUKS key and add the generated key to the block device holding the encrypted 
partition. In my case, this was  &lt;code&gt;luks_boot (/dev/nvme0n1p2)&lt;/code&gt; and optionally&lt;code&gt;luks_root (/dev/nvme0n1p4)&lt;/code&gt;. 
This will be the key that is used by the kernel-&lt;em&gt;initramfs&lt;/em&gt;  to decrypt and mount the encrypted LVM volume and
(optionally) the &lt;code&gt;/boot&lt;/code&gt; partition. There is a good argument to not automatically decrypt the  &lt;code&gt;/boot&lt;/code&gt; partition. 
This is why I have decided it is optional. &lt;strong&gt;Remember&lt;/strong&gt;: We are adding this newly generated key to &lt;em&gt;Key-slot:0&lt;/em&gt;
of &lt;code&gt;luks_root&lt;/code&gt; -- this is why we carefully added the original-key during disk-partitioning in &lt;em&gt;Key-slot:1&lt;/em&gt;. 
Using &lt;em&gt;Key-slot:0&lt;/em&gt; will make it faster during actual booting and each key is tried in sequence.
&lt;a href="http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/an-encrypted-boot-gentoo-installation-story/#partitioning-the-storage-disks"&gt;link&lt;/a&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;-p&lt;span class="w"&gt; &lt;/span&gt;/etc/luks/mnt/key
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;dd&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/urandom&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;of&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/etc/luks/mnt/key/boot_os.keyfile&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;bs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4096&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;u&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;rx,go-rwx&lt;span class="w"&gt; &lt;/span&gt;/etc/luks
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;u&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;r,go-rwx&lt;span class="w"&gt; &lt;/span&gt;/etc/luks/mnt/key/boot_os.keyfile
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cryptsetup&lt;span class="w"&gt; &lt;/span&gt;--key-slot&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p4&lt;span class="w"&gt;  &lt;/span&gt;/etc/luks/mnt/key/boot_os.keyfile&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# luks_root&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cryptsetup&lt;span class="w"&gt; &lt;/span&gt;--key-slot&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p2&lt;span class="w"&gt;  &lt;/span&gt;/etc/luks/mnt/key/boot_os.keyfile&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;# luks_boot&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"luks_boot UUID=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;blkid&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;UUID&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;value&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p2&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; /etc/luks/mnt/key/boot_os.keyfile luks,discard"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/crypttab
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"luks_root UUID=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;blkid&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;UUID&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;value&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p4&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; /etc/luks/mnt/key/boot_os.keyfile luks,discard"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/crypttab
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;: The key should be generated in a directory with the following pattern &lt;code&gt;${INITRAMFS_OVERLAY}/mnt/key&lt;/code&gt;. 
The &lt;code&gt;genkernel&lt;/code&gt; tool when provided the &lt;code&gt;INITRAMFS_OVERLAY&lt;/code&gt; variable will use this overlay within its filesystem. 
The kernel will then look for the internal key in &lt;code&gt;/mnt/key&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;While you could spend a long time configuring the kernel, I think it is easier to use &lt;code&gt;genkernel&lt;/code&gt; to generate 
a kernel with a lot of options. We can always slim down the kernel afterwards. We can see the list of kernels 
with &lt;code&gt;eselect kernel list&lt;/code&gt;. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;eselect&lt;span class="w"&gt; &lt;/span&gt;kernel&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Set-up the following configurations in &lt;code&gt;/etc/genkernel.conf&lt;/code&gt;. &lt;strong&gt;NOTE&lt;/strong&gt;: Without the &lt;code&gt;INITRAMFS_OVERLAY&lt;/code&gt;, the initramfs kernel cannot decrypt the enncrypted block device holding 
the LVMs for &lt;code&gt;/root, /home&lt;/code&gt; etc. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;NOCOLOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"false"&lt;/span&gt;
&lt;span class="nv"&gt;LVM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"yes"&lt;/span&gt;
&lt;span class="nv"&gt;LUKS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"yes"&lt;/span&gt;
&lt;span class="nv"&gt;GK_SHARE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GK_SHARE&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="p"&gt;/usr/share/genkernel&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nv"&gt;CACHE_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/var/cache/genkernel"&lt;/span&gt;
&lt;span class="nv"&gt;DISTDIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GK_SHARE&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/distfiles"&lt;/span&gt;
&lt;span class="nv"&gt;LOGFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/var/log/genkernel.log"&lt;/span&gt;
&lt;span class="nv"&gt;LOGLEVEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="nv"&gt;ZFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"no"&lt;/span&gt;
&lt;span class="nv"&gt;BTRFS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"no"&lt;/span&gt;
&lt;span class="nv"&gt;XFSPROGS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"no"&lt;/span&gt;
&lt;span class="nv"&gt;DEFAULT_KERNEL_SOURCE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/usr/src/linux"&lt;/span&gt;
&lt;span class="nv"&gt;INITRAMFS_OVERLAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/etc/luks"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now execute &lt;code&gt;genkernel&lt;/code&gt; and prune as much of the kernel config that you don't need before executing. (Ensure 
that &lt;code&gt;/boot&lt;/code&gt; and &lt;code&gt;/boot/efi&lt;/code&gt; are mounted)!&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;genkernel&lt;span class="w"&gt; &lt;/span&gt;--menuconfig&lt;span class="w"&gt; &lt;/span&gt;--luks&lt;span class="w"&gt; &lt;/span&gt;--lvm&lt;span class="w"&gt; &lt;/span&gt;--no-zfs&lt;span class="w"&gt; &lt;/span&gt;all
&lt;/pre&gt;&lt;/div&gt;

&lt;h5&gt;&lt;a href="https://wiki.gentoo.org/wiki/Handbook:AMD64/Installation/Bootloader#Default:_GRUB"&gt;Configuring the GRUB bootloader&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;Ensure the following settings are inserted into the &lt;em&gt;Grub&lt;/em&gt; configuration file in &lt;code&gt;/etc/default/grub&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="nv"&gt;GRUB_DISTRIBUTOR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"Gentoo"&lt;/span&gt;
&lt;span class="nv"&gt;GRUB_TIMEOUT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;
&lt;span class="nv"&gt;GRUB_TIMEOUT_STYLE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;menu
&lt;span class="nv"&gt;GRUB_DISABLE_LINUX_PARTUUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
&lt;span class="nv"&gt;GRUB_PRELOAD_MODULES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"part_gpt part_msdos lvm"&lt;/span&gt;
&lt;span class="nv"&gt;GRUB_CMDLINE_LINUX_RECOVERY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"recovery"&lt;/span&gt;
&lt;span class="nv"&gt;GRUB_ENABLE_CRYPTODISK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;y
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Also add the commandline for the linux kernel during boot before downloading and installing &lt;code&gt;grub&lt;/code&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;GRUB_CMDLINE_LINUX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="nv"&gt;keymap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;uk&lt;span class="w"&gt; &lt;/span&gt;dolvm&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;crypt_root&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;blkid&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;UUID&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;value&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p4&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;root_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;boot_os.keyfile&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;root_trim&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;yes&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;resume&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/dev/osvg/swap&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/default/grub
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;emerge&lt;span class="w"&gt; &lt;/span&gt;--ask&lt;span class="w"&gt; &lt;/span&gt;--quiet-build&lt;span class="w"&gt; &lt;/span&gt;sys-boot/grub
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;mkdir&lt;span class="w"&gt; &lt;/span&gt;/boot/grub
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;grub-mkconfig&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;/boot/grub/grub.cfg&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;grub-install&lt;span class="w"&gt; &lt;/span&gt;--target&lt;span class="o"&gt;=&lt;/span&gt;x86_64-efi&lt;span class="w"&gt; &lt;/span&gt;--efi-directory&lt;span class="o"&gt;=&lt;/span&gt;/boot/efi&lt;span class="w"&gt; &lt;/span&gt;--bootloader-id&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"grub"&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This should install various bootloader stages in their respective locations. Set &lt;code&gt;keymap=uk&lt;/code&gt;
in the file &lt;code&gt;/etc/conf.d/keymaps&lt;/code&gt;. Otherwise, a recovery shell dropping you into a 
different keymap can be frustrating for passwords and debugging in a shell. &lt;/p&gt;
&lt;h5&gt;Preparing to reboot into our newly installed bare-bones system.&lt;/h5&gt;
&lt;p&gt;We are now ready to shutdown and reboot into our newly installed system. 
Unmount all the mount points, bind-mounts and dmcrypt. 
First set a root password for the new system. Then unmount all our devices. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;passwd&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="c1"&gt;#Set new password&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;umount&lt;span class="w"&gt; &lt;/span&gt;/boot/efi
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;umount&lt;span class="w"&gt; &lt;/span&gt;/boot
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;cryptsetup&lt;span class="w"&gt; &lt;/span&gt;close&lt;span class="w"&gt; &lt;/span&gt;luks_boot&lt;span class="w"&gt; &lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;swapoff&lt;span class="w"&gt; &lt;/span&gt;/dev/mapper/osvg-swap
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;umount&lt;span class="w"&gt; &lt;/span&gt;/media/data&lt;span class="w"&gt; &lt;/span&gt;/home
&lt;span class="o"&gt;(&lt;/span&gt;chroot&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;umount&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/proc
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;umount&lt;span class="w"&gt; &lt;/span&gt;--recursive&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/dev&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/sys&lt;span class="w"&gt; &lt;/span&gt;/mnt/gentoo/root/run
livecd&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;shutdown&lt;span class="w"&gt; &lt;/span&gt;-Ph&lt;span class="w"&gt; &lt;/span&gt;now&lt;span class="w"&gt; &lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Now reboot into the newly installed system and put in the password for grub. This should 
then drop you into a prompt for the root password for the new system. &lt;/p&gt;
&lt;p&gt;(&lt;strong&gt;Optional&lt;/strong&gt;): It might be a good idea to automatically decrypt the encrypted &lt;code&gt;/boot&lt;/code&gt; block device 
so that we can very simply just use a &lt;code&gt;mount /boot&lt;/code&gt; command that was earalier set up in &lt;code&gt;/etc/fstab&lt;/code&gt;. 
We add entries for the  &lt;em&gt;dmcrypt&lt;/em&gt; service  to automatically decrypt &lt;code&gt;/boot&lt;/code&gt; during bootup and start
the dmcrypt service&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;hostname&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"target=luks_boot"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/conf.d/dmcrypt
hostname&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;UUID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="k"&gt;$(&lt;/span&gt;blkid&lt;span class="w"&gt; &lt;/span&gt;-s&lt;span class="w"&gt; &lt;/span&gt;UUID&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;value&lt;span class="w"&gt; &lt;/span&gt;/dev/nvme0n1p2&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="se"&gt;\"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/conf.d/dmcrypt
hostname&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"key=/etc/luks/mnt/key/boot_os.keyfile"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&amp;gt;&amp;gt;&lt;span class="w"&gt; &lt;/span&gt;/etc/conf.d/dmcrypt
hostname&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;rc-update&lt;span class="w"&gt; &lt;/span&gt;add&lt;span class="w"&gt; &lt;/span&gt;dmcrypt&lt;span class="w"&gt; &lt;/span&gt;boot
hostname&lt;span class="w"&gt; &lt;/span&gt;~#&lt;span class="w"&gt; &lt;/span&gt;rc-service&lt;span class="w"&gt; &lt;/span&gt;dmcrypt&lt;span class="w"&gt; &lt;/span&gt;start
&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;This will get gentoo booting into a shell. Modern desktop computing is however a lot more. 
&lt;del&gt;I will chronicle my system setup in a further post.&lt;/del&gt;
My &lt;strong&gt;gentoo&lt;/strong&gt; desktop installation saga continues in &lt;a href="http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/a-gentoo-installation-story-continued"&gt;Part-II&lt;/a&gt;. &lt;/p&gt;</description><category>gentoo</category><category>install</category><category>linux</category><category>security</category><guid>http://www.dcs.gla.ac.uk/~jacobd/posts/2025/01/an-encrypted-boot-gentoo-installation-story/</guid><pubDate>Sat, 11 Jan 2025 12:15:49 GMT</pubDate></item><item><title>OTP on the Linux command line</title><link>http://www.dcs.gla.ac.uk/~jacobd/posts/2022/03/otp-on-the-linux-command-line/</link><dc:creator>Dejice Jacob</dc:creator><description>&lt;p&gt;Using SMS as a two-factor authentication method is quite a &lt;a href="https://philipp-markert.com/assets/papers/way19-5-view-the-email.pdf"&gt;bad idea&lt;/a&gt;. Bruce Schneier &lt;a href="https://www.schneier.com/blog/archives/2016/08/nist_is_no_long.html"&gt;agrees&lt;/a&gt; with
&lt;a href="https://pages.nist.gov/800-63-3/sp800-63b.html"&gt;NIST&lt;/a&gt;, saying that it should no longer have any place in a 2FA environment.
The UK's National Cyber Security Centre &lt;a href="https://www.ncsc.gov.uk/guidance/setting-2-step-verification-2sv"&gt;NCSC&lt;/a&gt; also does not recommend this. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/U2F.USB-Token.jpg/320px-U2F.USB-Token.jpg" title="MFA USB Token" alt="MFA USB Token" align="right"&gt;
&lt;/p&gt;
&lt;p&gt;While this was initially a novelty, it has lately started to grate on me that each application and service
has their own secure key and authentication method. They each have their own physical 2FA keys. Once a user 
has to carry around multiple 2FA tokens around, weariness will settle in and they will compromise on security. &lt;/p&gt;
&lt;p&gt;To prevent this, many 2FA implementations have tried to do away with multiple 2FA devices. 
Most of them (for purposes other than security) have settled
on the &lt;em&gt;least-common-denominator&lt;/em&gt; 2FA method - insecure SMS. Forgetting about the security aspects 
(very well covered &lt;a href="https://www.schneier.com/blog/archives/2017/05/criminals_are_n.html"&gt;elsewhere&lt;/a&gt;), I am also at the mercy 
of being in a network coverage area. This might not be the case when travelling to a location where your network provider 
does not have any roaming options. &lt;/p&gt;
&lt;p&gt;Linux's &lt;code&gt;oathtool&lt;/code&gt; is a nifty command line tool for websites that use standard HOTP/TOTP based 2FA (&lt;a href="https://datatracker.ietf.org/doc/html/rfc6238"&gt;RFC6238&lt;/a&gt;). When enabling 2FA from the "&lt;em&gt;Security Options&lt;/em&gt;", choose to authenticate 
using an "&lt;em&gt;authenticator application&lt;/em&gt;". This should pop up with a QR code or it might offer you the option of copying the 
private key (&lt;code&gt;pKey&lt;/code&gt;). Most of the time the &lt;code&gt;pKey&lt;/code&gt; is encoded using &lt;a href="https://en.wikipedia.org/wiki/Base32"&gt;&lt;em&gt;base32&lt;/em&gt;&lt;/a&gt;. The tool uses &lt;em&gt;SHA-1&lt;/em&gt; by default, but this can be changed using the &lt;code&gt;--totp=hash-algorithm&lt;/code&gt; option. However,  you are at the mercy of the 2FA provider. Every time you need an OTP: &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;oathtool&lt;span class="w"&gt; &lt;/span&gt;-b&lt;span class="w"&gt; &lt;/span&gt;--totp&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"My Secret Key from some service provider"&lt;/span&gt;
&lt;span class="m"&gt;191049&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Suffice it to say, please keep the &lt;code&gt;pKey&lt;/code&gt; private and encrypted using &lt;code&gt;openssl&lt;/code&gt; or &lt;code&gt;gpg&lt;/code&gt;. As it can be executed on any Linux device, this does not have to be your phone (which I keep losing or damaging). 
TOTP is especially cool for people who travel to different time zones as the OTP is derived based on Unix Time. &lt;/p&gt;</description><category>2FA</category><category>oauth2</category><category>security</category><guid>http://www.dcs.gla.ac.uk/~jacobd/posts/2022/03/otp-on-the-linux-command-line/</guid><pubDate>Mon, 07 Mar 2022 23:33:45 GMT</pubDate></item><item><title>Configure Mutt to work with OAuth 2.0</title><link>http://www.dcs.gla.ac.uk/~jacobd/posts/2022/03/configure-mutt-to-work-with-oauth-20/</link><dc:creator>Dejice Jacob</dc:creator><description>&lt;p&gt;My email client of choice is &lt;a href="https://gitlab.com/muttmua/mutt"&gt;&lt;em&gt;mutt&lt;/em&gt;&lt;/a&gt;. The keyboard short-cuts are
ingrained into muscle memory. I have tried to use complex passwords to keep myself secure. While that
may help, many large web service providers require the use of &lt;a href="https://oauth.net/2"&gt;OAuth 2.0&lt;/a&gt; for better security. &lt;/p&gt;
&lt;p&gt;&lt;img src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Mutt.png/320px-Mutt.png" title="Mutt mail user agent (MUA)" alt="Mutt mail user agent (MUA)"&gt;
&lt;/p&gt;
&lt;p&gt;The fine &lt;em&gt;defenders of the galaxy&lt;/em&gt; at &lt;a href="https://www.gla.ac.uk/it"&gt;University of Glasgow IT&lt;/a&gt; 
started pushing for better security to access email and &lt;em&gt;office365&lt;/em&gt; applications.  If Computer Scientists
do not lead the way on these things, what hope is there for the rest of digital society? &lt;/p&gt;
&lt;h4&gt;Introduction&lt;/h4&gt;
&lt;p&gt;&lt;a href="https://www.vanormondt.net/~peter/"&gt;Peter van Ormondt&lt;/a&gt; wrote a simplified (&lt;em&gt;for dummies&lt;/em&gt;) 
&lt;a href="https://www.vanormondt.net/~peter/blog/2021-03-16-mutt-office365-mfa.html"&gt;guide&lt;/a&gt; that even I could understand. 
It worked first time on &lt;em&gt;Outlook365&lt;/em&gt; and &lt;em&gt;GMail&lt;/em&gt;. On GMail, I can now turn off "Less Secure Apps"&lt;sup id="fnref:lesssecure"&gt;&lt;a class="footnote-ref" href="http://www.dcs.gla.ac.uk/~jacobd/posts/2022/03/configure-mutt-to-work-with-oauth-20/#fn:lesssecure"&gt;1&lt;/a&gt;&lt;/sup&gt;
that annoyingly keeps getting switched off, if the method is not utilised regularly. &lt;/p&gt;
&lt;p&gt;A better understanding of how OAuth 2.0 has been implemented is explained in the OAuth 2.0 
&lt;a href="https://gitlab.com/muttmua/mutt/-/blob/master/contrib/mutt_oauth2.py.README"&gt;documentation&lt;/a&gt; found in the mutt repo. 
While Mutt has native &lt;a href="http://www.mutt.org/doc/manual/#oauth"&gt;OAuth2 support&lt;/a&gt;, it provides a hook
to an external script to provide the authentication details. Conveniently, the Mutt project themselves have 
provided a Python script &lt;a href="https://gitlab.com/muttmua/mutt/-/raw/master/contrib/mutt_oauth2.py"&gt;&lt;code&gt;mutt_oauth2.py&lt;/code&gt;&lt;/a&gt;
to authorise  the user. The script keeps local state on a file which can be used to refresh the token. The 
&lt;code&gt;mutt_oauth2.py&lt;/code&gt; script keeps this encrypted using &lt;code&gt;gpg&lt;/code&gt;. &lt;/p&gt;
&lt;h4&gt;Configuration&lt;/h4&gt;
&lt;h5&gt;Configure and Authorise with &lt;a href="https://gitlab.com/muttmua/mutt/-/raw/master/contrib/mutt_oauth2.py"&gt;&lt;code&gt;mutt_oauth2.py&lt;/code&gt;&lt;/a&gt;&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Create a separate &lt;code&gt;gpg&lt;/code&gt; user to encrypt all the OAuth2 tokens for all providers. You could just as well re-use
one of your other GPG keys for this. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;gpg&lt;span class="w"&gt; &lt;/span&gt;--gen-key&lt;span class="w"&gt; &lt;/span&gt;
GnuPG&lt;span class="w"&gt; &lt;/span&gt;needs&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;construct&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;user&lt;span class="w"&gt; &lt;/span&gt;ID&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;identify&lt;span class="w"&gt; &lt;/span&gt;your&lt;span class="w"&gt; &lt;/span&gt;key.

Real&lt;span class="w"&gt; &lt;/span&gt;name:&lt;span class="w"&gt; &lt;/span&gt;My&lt;span class="w"&gt; &lt;/span&gt;OAuth2&lt;span class="w"&gt; &lt;/span&gt;Token&lt;span class="w"&gt; &lt;/span&gt;Encryption&lt;span class="w"&gt; &lt;/span&gt;Key
Email&lt;span class="w"&gt; &lt;/span&gt;address:&lt;span class="w"&gt; &lt;/span&gt;token.encryptor@oauth2.me
You&lt;span class="w"&gt; &lt;/span&gt;selected&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;USER-ID:
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="s2"&gt;"My OAuth2 Token Encryption Key &amp;lt;token.encryptor@oauth2.me&amp;gt;"&lt;/span&gt;

Change&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;N&lt;span class="o"&gt;)&lt;/span&gt;ame,&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;E&lt;span class="o"&gt;)&lt;/span&gt;mail,&lt;span class="w"&gt; &lt;/span&gt;or&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;O&lt;span class="o"&gt;)&lt;/span&gt;kay/&lt;span class="o"&gt;(&lt;/span&gt;Q&lt;span class="o"&gt;)&lt;/span&gt;uit?&lt;span class="w"&gt; &lt;/span&gt;O
We&lt;span class="w"&gt; &lt;/span&gt;need&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;generate&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;lot&lt;span class="w"&gt; &lt;/span&gt;of&lt;span class="w"&gt; &lt;/span&gt;random&lt;span class="w"&gt; &lt;/span&gt;bytes.&lt;span class="w"&gt; &lt;/span&gt;It&lt;span class="w"&gt; &lt;/span&gt;is&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;good&lt;span class="w"&gt; &lt;/span&gt;idea&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;perform
some&lt;span class="w"&gt; &lt;/span&gt;other&lt;span class="w"&gt; &lt;/span&gt;action&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;on&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;keyboard,&lt;span class="w"&gt; &lt;/span&gt;move&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;mouse,&lt;span class="w"&gt; &lt;/span&gt;utilize&lt;span class="w"&gt; &lt;/span&gt;the
disks&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;during&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;prime&lt;span class="w"&gt; &lt;/span&gt;generation&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;this&lt;span class="w"&gt; &lt;/span&gt;gives&lt;span class="w"&gt; &lt;/span&gt;the&lt;span class="w"&gt; &lt;/span&gt;random&lt;span class="w"&gt; &lt;/span&gt;number
generator&lt;span class="w"&gt; &lt;/span&gt;a&lt;span class="w"&gt; &lt;/span&gt;better&lt;span class="w"&gt; &lt;/span&gt;chance&lt;span class="w"&gt; &lt;/span&gt;to&lt;span class="w"&gt; &lt;/span&gt;gain&lt;span class="w"&gt; &lt;/span&gt;enough&lt;span class="w"&gt; &lt;/span&gt;entropy.
&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Download and install &lt;a href="https://gitlab.com/muttmua/mutt/-/blob/master/contrib/mutt_oauth2.py"&gt;&lt;code&gt;mutt_oauth2.py&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;$&lt;span class="w"&gt; &lt;/span&gt;curl&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;/any-path/mutt_oauth2.py&lt;span class="w"&gt; &lt;/span&gt;https://gitlab.com/muttmua/mutt/-/raw/master/contrib/mutt_oauth2.py?inline&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false&lt;/span&gt;
$&lt;span class="w"&gt; &lt;/span&gt;chmod&lt;span class="w"&gt; &lt;/span&gt;u+x&lt;span class="w"&gt; &lt;/span&gt;/any-path/mutt_oauth2.py
&lt;/pre&gt;&lt;/div&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Replace &lt;code&gt;YOUR_GPG_IDENTITY&lt;/code&gt; with your &lt;em&gt;GPG&lt;/em&gt; key in 
&lt;a href="https://gitlab.com/muttmua/mutt/-/blob/master/contrib/mutt_oauth2.py#L47"&gt;&lt;code&gt;mutt_oauth2.py&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Our setup masquerades as the &lt;strong&gt;Mozilla Thunderbird&lt;/strong&gt; e-mail client and utilizes their &lt;a href="https://hg.mozilla.org/comm-central/file/tip/mailnews/base/src/OAuth2Providers.jsm"&gt;&lt;code&gt;client-id&lt;/code&gt; and &lt;code&gt;client-secret&lt;/code&gt;&lt;/a&gt; 
   which is hard-coded into the client. The client secret is actually within the open-source repos of the Thunderbird client.
   You can also create your own credentials. See instructions for &lt;a href="http://www.dcs.gla.ac.uk/~jacobd/posts/2022/03/configure-mutt-to-work-with-oauth-20/#owncred"&gt;GMail&lt;/a&gt;.  The Thunderbird client registration 
   details as of today : &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://hg.mozilla.org/comm-central/file/tip/mailnews/base/src/OAuth2Providers.jsm#l81"&gt;GMail&lt;/a&gt;: &lt;strong&gt;client-id&lt;/strong&gt; - 
     &lt;a href="https://hg.mozilla.org/comm-central/file/tip/mailnews/base/src/OAuth2Providers.jsm#l83"&gt;&lt;code&gt;406964657835-aq8lmia8j95dhl1a2bvharmfk3t1hgqj.apps.googleusercontent.com&lt;/code&gt;&lt;/a&gt;, 
 &lt;strong&gt;client-secret&lt;/strong&gt; - &lt;a href="https://hg.mozilla.org/comm-central/file/tip/mailnews/base/src/OAuth2Providers.jsm#l84"&gt;&lt;code&gt;kSmqreRr0qwBWJgbf5Y-PjSU&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hg.mozilla.org/comm-central/file/tip/mailnews/base/src/OAuth2Providers.jsm#l127"&gt;Microsoft&lt;/a&gt;: &lt;strong&gt;client-id&lt;/strong&gt; - 
     &lt;a href="https://hg.mozilla.org/comm-central/file/tip/mailnews/base/src/OAuth2Providers.jsm#l129"&gt;&lt;code&gt;08162f7c-0fd2-4200-a84a-f25a4db0b584&lt;/code&gt;&lt;/a&gt;,
 &lt;strong&gt;client-secret&lt;/strong&gt; - &lt;a href="https://hg.mozilla.org/comm-central/file/tip/mailnews/base/src/OAuth2Providers.jsm#l130"&gt;&lt;code&gt;TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Intial authorisation for this client should be executed as: &lt;code&gt;/any-path/mutt_oauth2.py /any-path/oath2_token_file --authorize&lt;/code&gt;. There should be a separate file for each email provider. When requested to input &lt;em&gt;authorisation flow&lt;/em&gt; or &lt;em&gt;authentication method&lt;/em&gt;, &lt;code&gt;localhostauthcode&lt;/code&gt; will store the file in the same path. This is a one time operation and will be valid as long as the &lt;strong&gt;oauth2_token_file&lt;/strong&gt; is available. You can delete the file and do the authorisation again if you so desire. Executing this script will provide a URL to paste into a browser. After opening the link in the browser and finishing any requisite authorisation, the script will obtain a token, encrypt it with your &lt;em&gt;GPG&lt;/em&gt; key and store it locally in the path you have chosen.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5&gt;Configure &lt;code&gt;.mutt&lt;/code&gt; config&lt;/h5&gt;
&lt;p&gt;Add the following entries to the &lt;code&gt;.mutt&lt;/code&gt; config file for &lt;strong&gt;OAUTH2&lt;/strong&gt; authentication. &lt;/p&gt;
&lt;div class="code"&gt;&lt;pre class="code literal-block"&gt;set&lt;span class="w"&gt; &lt;/span&gt;imap_authenticators&lt;span class="w"&gt; &lt;/span&gt;=&lt;span class="w"&gt; &lt;/span&gt;"oauthbearer:xoauth2"
set&lt;span class="w"&gt; &lt;/span&gt;imap_oauth_refresh_command&lt;span class="w"&gt; &lt;/span&gt;=&lt;span class="w"&gt; &lt;/span&gt;"/any-path/mutt_oauth2.py&lt;span class="w"&gt; &lt;/span&gt;/any-path/oath2_token_file"
set&lt;span class="w"&gt; &lt;/span&gt;smtp_authenticators&lt;span class="w"&gt; &lt;/span&gt;=&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;imap_authenticators&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;
set&lt;span class="w"&gt; &lt;/span&gt;smtp_oauth_refresh_command&lt;span class="w"&gt; &lt;/span&gt;=&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="cp"&gt;${&lt;/span&gt;&lt;span class="n"&gt;imap_oauth_refresh_command&lt;/span&gt;&lt;span class="cp"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;xoauth2&lt;/code&gt; was the experimental authentication protocol which got standardised as &lt;code&gt;oauthbearer&lt;/code&gt;. However, it seems that while 
GMail seems to work with &lt;code&gt;oauthbearer&lt;/code&gt;, Microsoft still requires &lt;code&gt;xoauth2&lt;/code&gt;. &lt;/p&gt;
&lt;h5&gt;&lt;a name="owncred"&gt;&lt;/a&gt; Roll your own Client credentials for GMail&lt;/h5&gt;
&lt;ol&gt;
&lt;li&gt;Login to your google account, and navigate to your developer console to generate 
&lt;a href="https://console.cloud.google.com/apis/credentials"&gt;OAuth 2.0 credentials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Navigate to the "&lt;em&gt;Credentials&lt;/em&gt;" page and click on &lt;code&gt;+ Create Credentials&lt;/code&gt; to create an OAuth client ID. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This &lt;code&gt;client-ID&lt;/code&gt; and &lt;code&gt;client-secret&lt;/code&gt; can then be used in the &lt;code&gt;mutt_oauth2.py&lt;/code&gt; script. &lt;/p&gt;
&lt;div class="footnote"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:lesssecure"&gt;
&lt;p&gt;I fear the long term consequences of cajoling users by using manipulative language 
such as this.  It will cause a loss of credibility for experts in the long run. 
Regaining trust that is once lost crying "Wolf" will only happen after a period 
of difficult consequences for both expert and layperson. &lt;a class="footnote-backref" href="http://www.dcs.gla.ac.uk/~jacobd/posts/2022/03/configure-mutt-to-work-with-oauth-20/#fnref:lesssecure" title="Jump back to footnote 1 in the text"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</description><category>2FA</category><category>mutt</category><category>oauth2</category><category>security</category><guid>http://www.dcs.gla.ac.uk/~jacobd/posts/2022/03/configure-mutt-to-work-with-oauth-20/</guid><pubDate>Fri, 04 Mar 2022 16:53:39 GMT</pubDate></item></channel></rss>