HTS-Software®Unternehmensberatung
Eine Arbeitsnotiz zur Gentoo Installaion mit Verschlüsselter Root und Swap Partition. Die Arbeit wurde nicht genauer überprüft und ist experimenteller Natur. Es sollte aber das meiste Funktionieren. Unten neben der Verionsnummer befindet sich das Datum der letzten Änderung.
 
Version: 1.1 23.6.2023, Archtektur: Amd64
#####
# Offene Punkte:
# ==============
#
# Qemu mit Wifi Routing: https://wiki.gentoo.org/wiki/QEMU/Bridge_with_Wifi_Routing
#
# Infos zur Plattenverschlüsselung von Debian: https://cryptsetup-team.pages.debian.net/cryptsetup/encrypted-boot.html
#
# Allgemeine Infos wie man ein Linux aufbaut (Deutsch): http://oss.erdfunkstelle.de/lfs-de/6.4/online/index.html
#####

#####
# Wichtige Quellen für weitere Möglichkeiten
# Ich beschreibe hier nur einen einfachen Weg ein Basissystem ohne Desktop mit Verschlusselung der
# Rootpartition und der Swappartition. Mit der Möglickeit das System über das Internet das zum
# booten nötige Passwort für die Platten Verschlüsselung zu setzen.
  Gentoo-Handbuch: https://wiki.gentoo.org/wiki/Handbook:AMD64/Full/Installation/de

  Beschreibung der Möglichkeiten Laufwerke zu benennen (Label):
  https://wiki.archlinux.org/index.php/Persistent_block_device_naming
  https://wiki.ubuntuusers.de/Labels/
#
#####

#####
# Parameter die veränderlich sind.
  Intallations Device: /dev/sdb
  Stage3 UrL         : https://www.gentoo.org/downloads/
  Stage3 Filename    : stage3-amd64-openrc-<Datum/Version>.tar.xz
  Stage3 Prüfsumme   : stage3-amd64-openrc-<Datum/Version>.tar.xz.DIGESTS
  Mount Verzeichnis  : /mnt
  Alle Angaben zur Hardware müssen an die eigene Hardware angepasst werden.
#
#####

#####
# Stage3 und Prüfsumme Download.
#
# Auf der Gentoo Seite: www.gentoo.org/downloads/
# Architektur: Amd64 suchen und dann die Überschrift: Details (contents, hashes, and signatures)
# Hier den Link Stage3 wählen und dann folgenden Dateinamen: stage3-amd64-openrc-<Datum/Version>.tar.xz
# Den Link kann man im Browser kopieren und mit wget herunterladen.
  stage3-amd64-openrc-<Datum/Version>.tar.xz
  stage3-amd64-openrc-<Datum/Version>.tar.xz.DIGESTS

# Die Signatur der Prüfsummendatei *.DIGESTS prüfen.
# Hier: https://www.gentoo.org/downloads/signatures/ kann man die Key-Fingerprint finden.
#       Gentoo Linux Release Engineering (Automated Weekly Release Key)
  gpg --verify stage3-amd64-openrc-<Datum/Version>.tar.xz.DIGESTS

# Stage3 Prüfsumme des Download mit der von Gentoo angegebenen Prüfsumme vergleichen.
# In der heruntergeladenen DIGESTS Datei befinden sich mehrere Prüfsummen. Ich kopiere dann immer die Prüfsumme von dem
# unteren Kommando in die DIGESTS Datei. Wenn man dann die vi Suchfunktion benutzt mit der Prüfsumme werden die zwei
# übereinstimmenden markiert. Nicht elegant aber funktioniert ... :-)
  sha512sum stage3-amd64-openrc-<Datum/Version>.tar.xz
#
#####

#####
# Stage3 entpacken
#
# Wird nicht auf der Zielpaltte entpakt muss man noch die Daten auf die Platte kopieren
# (cp -a)
  tar xpvf stage3-amd64-openrc-<Datum/Version>.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt
#
#####

#####
# Waren auf der Platte schon mal Daten gespeichert empfiehlt es sich diese mit Zufälligen Werten zu überschreiben.
# Andernfalls ist es möglich das in den Freien Bereichen Daten unverschlüsselt stehen geblieben sind.
# Mit cp werden Daten so lange auf die Platte kopiert bis diese voll ist. In diesem Fall wurde eine Meschanische
# USB-Platte mit ca. 35 M/s beschrieben. Mit dd werden auch keine besseren Werte erreicht.
  cp /dev/urandom /dev/sdb

# Was muss man bei SSD speziell beachten?

#
#####

#####
# Mit fdisk Partitionen anlegen
#
# GPT Partitionentabel anlegen. Die können eigene Label haben.
# Mit fdisk kann man das setzen im Experten Modus (x). Dann mit (n) einen Namen vergeben.
# z.B <Hostname>Root und <Hostname>Swap
# Die Nummer neben der Partition größe ist der Partitiontyp.

  /dev/sdb1 +5M     4  (BIOS boot)
  /dev/sdb2 +100M   20 (Linux Filesystem)  (Partitionlabel: GentooBoot)
  /dev/sdb3 +20G    19 (Linux Swap)        (Partitionlabel: GentooSwap)
  /dev/sdb4 +<Rest> 23 (Linux root x86-64) (Partitionlabel: GentooRoot)
#
#####

#####
# Die Partitionen root und swap verschlüsseln.
  cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sdb3
  cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 -y /dev/sdb4

# Vor dem Formatieren muss die Verschlüsselung für die Partitionen gestartet werden.
  cryptsetup luksOpen /dev/sdb3 GentooSwap
  cryptsetup luksOpen /dev/sdb4 GentooRoot
#
#####

#####
# Filesysteme auf der Platte anlegen
  mkfs.ext2 -L GentooBoot /dev/sdb2
  mkfs.ext4 -L GentooRoot /dev/mapper/GentooRoot

# SWAP Verschlüsselung mit einem Keyfile einrichten.
  mkswap -L GentooSwap /dev/mapper/GentooSwap

# Evtl. Label nochmal ändern
  e2label /dev/sdbx
  e2label /dev/sdbx#
#####

#####
# root Filesystem mounten
  mount /dev/mapper/GentooRoot /mnt
#
#####

#####
# Stage3 entpacken
#
# Wird nicht auf der Zielpaltte entpakt muss man noch die Daten auf die Platte kopieren
# (cp -a)
  tar xpvf stage3-amd64-openrc-<Datum/Version>.tar.xz --xattrs-include='*.*' --numeric-owner -C /mnt
#
#####

#####
# boot Filesystem mounten
  mount /dev/sdb2 /mnt/boot

# SWAP evtl. aktivieren
  swapon /dev/mapper/GentooSwap
#
#####

#####
# Systemuhr auf die richtige Zeit stellen.
# Das ist für Portage wichtig sonst werden evtl. alte Pakete intalliert.
  ntpdate ptbtime1.ptb.de
#
#####

#####
# Das neue System in einer chroot Umgebung starten.
  cd /

  mount --types proc /proc /mnt/proc
  mount --rbind /dev /mnt/dev
  mount --rbind /sys /mnt/sys

  cp --dereference /etc/resolv.conf /mnt/etc/

  chroot /mnt /bin/bash
  source /etc/profile
  export PS1="(chroot) $PS1"
#
#####

#####
# Portage Optionen einstellen.
  Datei: /etc/portage/make.conf
  Inhalt: #
          # Anzahl der Kerne die der Compiler verwendet bei der Erstellung der Gentoo Sourcepakete.
          # Soll mit dem System wärend der installation von Gentoo Paketen noch gearbeitet werden
          # oder ist nur wenig Speicher vorhanden hat sich die Anzahl der Kerne/2 bewährt. Bei wenig
          # Speicher kann es aber auch sein das nur ein Kern geht.
          #
            MAKEOPTS="-j2"

          #
          # USE-Flag zum anpassen der Installation.
          # (Je nach eigener Nutzung anpassen.)
          #
            USE="-gnome -kde -llvm -clang -rust elogind egl opengl gles2 ipv6"

          #
          # nouveau OpenSource Nvidia Treiber.
          # (Treiber für die eigene Grafikkarte eintragen. Es sind mehrere Möglich.)
          #
            VIDEO_CARDS="nouveau"

          #
          # Programme mit Deutscher Sprache erstellen.
          # (Eigene Sprache wählen.)
          #
            LINGUAS="de"
            L10N="de"
#
#####

#####
# Portage konfigurieren

# Portage Paketdaten Download
# Das Verzeichnis wird in der /etc/portage/make.conf konfiguriert
# Speicherort: /var/db/repos/gentoo
#
# Gibt es Fehlermeldungen beim Sync prüfen ob Systemdatum aktuell ist und die 
# Netzwerkverbindung funktioniert.
  emerge-webrsync
  emerge --sync

# Nutzerprofilliste anzeigen
  eselect profile list

# Nutzerprofil auswählen
# Welches Profil muss man je nach gewünschter Verwendung wählen.
# Die Nummern ändern sich laufend und muss vorher geprüft werden.
# Benutze dieses für ein Basis System ohne Desktop: [16]  default/linux/amd64/17.1 (stable)
  eselect profile set 16

# Wichtig die News lesen (enthalten oft wichtige Infos zu Änderungen)
  eselect news list
  eselect news read <News-Nr>

# System updaten
  emerge --ask --verbose --update --deep --newuse @world
#
#####

#####
# Zeitzone einstellen
# Passenden Wert suchen: /usr/share/zoneinfo/ls /usr/share/zoneinfo/Europe/

# Zeitzone einstellen
  echo "Europe/Berlin" > /etc/timezone

# Zeitzone konfigurieren
  emerge --config sys-libs/timezone-data
#
#####

#####
# Sprache/Zeichensatz/Datums-Währungsformat einstellen (Locale)
#
# Bestimmt auch das Zahlen-/Datumsformat

# In der Datei: /etc/locale.gen den Wert: de_DE.UTF-8 UTF-8 eintragen.
# (Gültige Werte siehe: /usr/share/i18n/SUPPORTED)

# Locale generieren
  locale-gen

# Prüfen welche locale vorhanden sind.
  locale -a

# Systemweite locale einstellen
  eselect locale list

  Available targets for the LANG variable:
    [1]   C
    [2]   C.utf8
    [3]   POSIX
    [4]   de_DE.utf8
    [ ]   (free form)

  eselect locale set 4

# Die Systemlocale steht dann in der Datei: /etc/env.d/02locale
# Umgebung neu laden damit die neuen Einstellungen aktiv werden.
  env-update
  source /etc/profile
  export PS1="(chroot) ${PS1}"
#
#####

#####
# Tastatur Layout einstellen
#
# Datei: /etc/conf.d/keymaps
# Mögliche Werte: /usr/share/keymaps/i386/qwertz
# Eintragen: keymap="de-latin1"

# Neustarten
  /etc/init.d/keymaps restart
# 
#####

#####
# /etc/fstab anpassen
# Sollte folgenden Inhalt haben
  PARTLABEL=GentooBoot                /boot           ext2            noauto,noatime  1 2
  PARTLABEL=GentooRoot                /               ext4            noatime         0 1
  PARTLABEL=GentooSwap                none            swap            sw              0 0
#
#####

#####
# Hostnamen einstellen
#
# Datei: /etc/conf.d/hostname
  hostname="hulk"

# Datei: /etc/hosts
  127.0.0.1 hulk.thewebsideoflife.de hulk
#   
#####

#####
# Netzwerkkonfiguration
#
# Qemu    : Client Netzwerkzugriffe. Zugriffe von Außen werden blockiert. Ping geht nicht wird blockiert.
# Hardware: Der Name der Netzwerkschnittstelle "ens3" muss ihrem Rechner angepasst werden.
#
# Anzeigen der vorhandenen Netzwerkgeräte
  ip addr

# Client Netzwerkzugriff mit DHCP
# Ping geht nicht beim starten mit QEMU
# Die Datei muss neu angelegt werden.
  nano /etc/conf.d/net

# DHCP-Client installieren
# wird der benötigt ???  emerge --ask dhcpcd

# Den lokalen Domainnamen einstellen
  dns_domain_lo="thewebsideoflife.de"

# Netzwerkschnittstell DHCP Konfigurieren.
  config_ens3="dhcp"

# Symbolischen Link zum start dieser Netzwerkschnittstelle anlegen
  ln -s /etc/init.d/net.lo /etc/init.d/net.ens3

# Netzwekverbindung beim booten starten.
# Fügt den oben angelegten Link dem Runlevel "defautl" hinzu.
  rc-update add net.ens3 default

# WLAN-Konfiguration
  emerge --ask wpa_supplicant
#
#####

#####
# Netzwerkkonfiguration
#
# Qemu    : Server Netzwerkzugriffe. Es sind auch eingehende Verbindungen möglich.
#           Der Zugriff auf dem Hostsystem wird über tun/tap realisiert. Für eine Verbindung
#           muss auf dem Hostsystem eine Bridge konfiguriert werden. Hier wird aber nur die 
#           konfiguration für einen Qemu Gastsystem beschrieben.
# Hardware: Der Name der Netzwerkschnittstelle "ens3" muss ihrem Rechner angepasst werden.
#
# Anzeigen der vorhandenen Netzwerkgeräte
  ip addr

# Die Datei muss neu angelegt werden.
  nano /etc/conf.d/net

#
#####

#####
# Linux Kernel und das Gentoo Kernel Tool installieren
#
# Kernel und Firmware Lizenzen akzeptieren.
  Verzeichnis: mkdir /etc/portage/package.license
               cd /etc/portage/package.license

  Datei      : kernel
  Inhalt     : # Für kaputte Intel CPUs nötige Microcode Updates.
               sys-firmware/intel-microcode intel-ucode

               # Gentoo-Sources verlangt nach Zustimmung zur Lizenz von Linux-Firmware
               sys-kernel/gentoo-sources linux-firmware
               sys-kernel/linux-firmware linux-fw-redistributable no-source-code

# Kernel und Fimware Paket installieren.
  emerge --ask sys-kernel/gentoo-sources sys-kernel/genkernel

# Alle installierten Kernel anzeigen
  eselect kernel list

# Über die Nummer einen Auswählen
# Das legt auch den Symolischen Link "linux" an.
  eselect kernel set 1

# Wenn vorhanden eine Kernel Konfigurationsdatei kopieren
# Diese evtl. auf eine neue Kernel Version updaten.
  .config
  make olddefconfig

# Kernel und initramfs mit genkernel generieren.
# --luks wird benötigt für Verschlüsseltes root und swap Filesystem.
# --ssh  wird benötigt um remote die Verschlüsselung zu entsperren.
# --keymap Deutsche Keymap ins initramfs einbauen.
  genkernel --no-clean --luks --keymap --microcode --menuconfig all

# ... oder so wenn man z.B. auf einem Amd64 ein Intel 32Bit bauen will.
  genkernel --no-clean --luks --keymap --menuconfig --cross-compile=i686-pc-linux-gnu all

# Grub installieren und konfigurieren.
# Soll auch ein Windows gebootet werden hilft es das Paket: sys-boot/os-prober zu installieren
# War die Installation erfolgreich wird mindestens einmal: Found linux image und Found initrd image
# ausgegeben.

# Grub installieren
  emerge --ask sys-boot/grub

# Anpassungen in der /etc/default/grub machen
  GRUB_CMDLINE_LINUX="crypt_root=PARTLABEL=GentooRoot crypt_swap=PARTLABEL=GentooSwap root=/dev/mapper/root"

# Bei Fehlermeldungen prüfen ob die boot Partition gemountet ist.
# Auch wenn ein neues InitRamFs den gleichen Namen hat muss grub-mmkconfig ausgeführt werden.
  mount /boot
  grub-install /dev/sdb
  grub-mkconfig -o /boot/grub/grub.cfg
#
#####

#####
# Zum booten nötige Pakete noch installieren
  emerge --ask cryptsetup
#
#####

#####
# Root Passwort festlegen
  passwd
#
#####

#####
# User anlegen
# Die Gruppe wheel wird benötigt wenn man su benutzen will.
  useradd -m -G wheel -s /bin/bash <UserName>

# Passwort für den User festlegen
  passwd <UserName>
#
#####

#####
# chroot Umgebung verlassen und Platte unmounten.
  exit

# Anzeigen was noch gemountet ist
  mount | grep /mnt

# Alle gemounteten /mnt unmounten
# Es kommt vor das nicht beim ersten mal alle unmounts ausgeführt werden.
# Man kann den Befehlsblock dann einfach ein weiteres mal ausführen. Bis
# umount /mnt auch ohne Fehler ausgeführt wird.
  umount /mnt/boot
  umount /mnt/proc
  umount --recursiv /mnt/sys
  umount --recursiv /mnt/dev
  umount /mnt
  swapoff /dev/mapper/GentooSwap

# Verschlüsselung beenden
  cryptsetup close GentooRoot
  cryptsetup close GentooSwap
#
#####

################################################################################################################################
# Jetzt kann man das System booten und muss nicht mehr im chroot arbeiten.                                                     #
#                                                                                                                              #
# Wurde das System auf einen USB-Datenträger oder ein Datei Image installiert                                                  #
# kann man es auch mit Qemu booten.                                                                                            #
#                                                                                                                              #
# Auf einem USB-Datenträger geht das so:                                                                                       #
# Qemu: Client Netzwerkzugriffe. Zugriffe von Außen werden blockiert. Ping geht nicht wird blockiert.                          #
# Booten eines Verschlüsselten Systems kann mit einem Gbyte RAM beim Entsperren des Laufwerks fehlschlagen.                    #
# qemu-system-x86_64 -enable-kvm -drive file=/dev/sdb,format=raw -serial stdio -k de -m 2G -cpu host -smp 2 -net nic -net user #
#                                                                                                                              #
################################################################################################################################

#####
# Interesssnte Programme installieren
# Es ist möglich das Pakete schon im Stage3 enthalten sind.
# Vor dem installieren von Paketen die Sprache einstellen. Beschreibung weiter oben.
  emerge --ask# Editor
  app-editors/vim

# System
  app-admin/syslog-ng
  sys-process/cronie
  net-misc/ntp
  usbutils
  pciutils
  wpa_supplicant
  bluez
  genkernel
  gentoo-sources (Kernel)
  grub
  dhcpcd
  openntpd (Soll nur die Systemzeit über Netz aktuallisiert werden ist das Paket nicht nötig.)

# Gentoo Portage
  gentoolkit
  genlop
  portage-utils

# Internet Wählverbindungen oder DSL ohne Router
  ppp
  wvdial
#
#####

#####
# Syslog konfiguration
  rc-config add syslog-ng default
#
#####

#####
# Cronie konfigurieren
  rc-config add cronie default
#
#####

#####
# NTP konfigurieren
  rc-config add ntpd default
#
#####

################################################################################################################################
# Automatisches entsperren einer mit LUKS Verschlüsselten Platte                                                               #
#
# Gentoo hat bei openrc einen Dienst dafür: /etc/init.d/dmcrypt
#
# Dafür braucht man eine externes Keyfile

# Keyfile erzeugen
# Testen ob man nicht das normale Passwort einfach in ein Keyfile schreiben kann?
  head -c 256 /dev/random > Keyfile

# Einem Verschlüsseltem Laufwerk ein Keyfile zuordnen.
  cryptsetup luksAddKey /dev/sda1 Keyfile
#                                                                                                                              #
################################################################################################################################