HTS-Software®Unternehmensberatung
Eine Arbeitsnotiz zur Gentoo Installaion mit Verschlüsselter Root und Swap Partition. Die arbeit wurde nicht genauer überprüft und wegen Änderungen bei Gentoo funktioniert vielleicht nicht alles so wie beschrieben. Besonders das booten mit Verwendung der Partition Label ist davon betroffen. Die Gentoo Macher haben wichtige Optionen dafür ohne Vorwarnung aus ihren Tools entfernt (z.B. genkernel, Option: --disklabel). Wenn sie zum booten die UUID benutzen sollte es keine Probleme geben. Ich finde UUIDs nur extrem unleserlich. Es ist geplant das in der näheren Zukunft zu überprüfen und weiter auszubauen.
 
#####
# 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://gentoo.ussg.indiana.edu//releases/amd64/autobuilds/current-stage3-amd64/
  Stage3 Filename    : stage3-amd64-20200419T214502Z.tar.xz
  Stage3 Prüfsumme   : stage3-amd64-20200422T214502Z.tar.xz.DIGESTS
  Mount Verzeichnis  : /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
  /dev/sdb1 +5M     4  (BIOS boot)
  /dev/sdb2 +100M   31 (Linux erweiterter boot)
  /dev/sdb3 +20G    19 (Linux Swap)
  /dev/sdb4 +24 (Linux root x86-64)

# GPT Partitionen können eigen Label haben
# Mit fdisk kann man das setzen im Experten Modus (x)
# Dann mit (n) einen Namen vergeben.
# z.BRoot undSwap

# sfdisk Script Daten für die Philips USB-Platte
# (Suchen ob es möglich ist die genaue Angabe der Sektorgrenzen und IDs universeller zu gestalten.)
  label: gpt
  label-id: 8D7677E4-019A-F140-9057-133E37FC4FB3
  device: /dev/sdb
  unit: sectors
  first-lba: 2048
  last-lba: 312581774

  /dev/sdb1 : start=        2048, size=       10240, type=21686148-6449-6E6F-744E-656564454649, uuid=6DD321AB-18F1-2C49-B723-2C987442CAAA
  /dev/sdb2 : start=       12288, size=      204800, type=BC13C2FF-59E6-4262-A352-B275FD6F7172, uuid=C8618EB8-3618-244B-8FBE-071F360D4101
  /dev/sdb3 : start=      217088, size=    41943040, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=B80D4DB3-8AB9-564D-A9AC-FDB916E54562
  /dev/sdb4 : start=    42160128, size=   270421647, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=8F218753-DED7-164F-8A44-69EB286DB1D5
#
#####

#####
# 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 und Prüfsumme Download.
#
# Den Dateinamen muss man jeweils durch den aktuellen ersetzen.
  wget https://gentoo.ussg.indiana.edu//releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200422T214502Z.tar.xz
  wget https://gentoo.ussg.indiana.edu//releases/amd64/autobuilds/current-stage3-amd64/stage3-amd64-20200422T214502Z.tar.xz.DIGESTS.asc

# Den öffentlichen Schlüsse von Gentoo hohlen
  gpg --keyserver hkps://keys.gentoo.org --recv-keys 0xBB572E0E2D182910

# Die Signatur der Prüfsummen prüfen
# Hier: https://www.gentoo.org/downloads/signatures/ kann man die Prüfsumme der Signatur prüfen (manuell).
  gpg --verify stage3-amd64-20200422T214502Z.tar.xz.DIGESTS.asc

# 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-20200422T214502Z.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-20200419T214502Z.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
#
#####

#####
# Compiler Optionen einstellen: /mnt/etc/portage/make.conf

# 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"
#
#####

#####
# 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 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

# Wichtig die News lesen (enthalten oft wichtige Infos zu Änderungen)
  eselect news list
  eselect news read# Nutzerprofil auswählen
# Benutze dieses für ein Basis System ohne Desktop: [16]  default/linux/amd64/17.1 (stable)
  eselect profile set 16

# 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
  LABEL=GentooBoot                /boot           ext2            noauto,noatime  1 2
  LABEL=GentooRoot                /               ext4            noatime         0 1
  LABEL=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
  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.

  --disklabel als Option gibt es nicht mehr

  genkernel --no-clean --luks --keymap --disklabel --microcode --menuconfig all

# ... oder so wenn man z.B. auf einem Amd64 ein Intel 32Bit bauen will.
  genkernel --no-clean --luks --keymap --disklabel --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/GentooRoot"

# 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.
  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.
  user add -m -G wheel -s /bin/bash# Passwort für den User festlegen
  passwd#
#####

#####
# 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

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

#####
# 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
#
#####

################################################################################################################################
# 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

# Wenn die Fehlermeldung kommt das GentooRoot nicht gefunden wurde
# Folgenden Befehle eingeben:
  shell
  cryptsetup open /dev/sda4 GentooRoot
  exit
#                                                                                                                              # 
################################################################################################################################

################################################################################################################################
# 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
#                                                                                                                              #
################################################################################################################################