Ein FreeBSD 12.1 Minimalsystem installieren, wie?

Rosendoktor

Well-Known Member
Hallo zusammen,

ich möchte auf einem neuen, später entfernt stehenden Server ein weitestgehend vollverschlüsseltes FreeBSD installieren. Dazu müsste ich, soweit ich bisher herausfinden konnte, zunächst ein unverschlüsseltes Minimalsystem installieren, in das man sich per ssh einloggen, dann die eigentliche mit GELI verschlüsselte Root Partition ensperren und per reboot -r neu starten kann.

Erste Fragerunde, wie installiere ich am besten ein solches, möglichst kleines Grundsystem (mit ssh, evtl. ppp/pppoe)? Wie groß wird das in etwa (für die Partitionierung)? Kann gerne auch händisch installieren oder eingreifen, aber bitte nichts zum selbst kompilieren.

Zweite Frage, das soll grundsätzlich als Mirror laufen, es ist aber momentan nur eine Platte verfügbar. Kann man so ein GMIRROR anlegen, mit einer Platte als "abwesend", und diese dann einfach später hinzufügen (so mache ich es z.B. immer mit Debians mdraid)?

Danke & Grüße,

Robert
 
Kann gerne auch händisch installieren oder eingreifen, aber bitte nichts zum selbst kompilieren.
Viel kann ich dazu leider nicht beitragen, aber wirklich "minimal" wird es mit FreeBSD im Moment nicht, ohne das System selbst zu bauen. Ein Ansatz, das zu ändern, ist base zu paketieren; ob das eine gute Idee ist und ob/wann das kommt weiß ich nicht… Jedenfalls im Moment ist selbst bauen und entsprechende WITHOUT_FOO Variablen in src.conf setzen der einzige Weg, im Basissystem Dinge wegzulassen, die du nicht brauchst.
 
Aber ob das notwendig ist bei Festplatten jenseits der Terabyte Marke? Da spielen 20 Gig doch keine wirkliche Rolle mehr.
 
Denke da kommst um eine normale Minimalinstallation von FreeBSD nicht herum. Also ~1GB. Wie du von dem ins entschlüsselte Zweitsystem bootest musst du dir ansehen, ich denke aber es sollte möglich sein.

Wenn du eh einen neuen Server kaufst: Nimm doch was mit nem Management Controller. Über den kannst du dich dann einloggen/authentifizieren und das System normal per virtueller Console entsperren.
 
Ich habe vor Jahren damit aufgehört. Selbst auf kleinen SSDs fällt das Basissystem einfach nicht mehr ins Gewicht, vor allem nicht, wenn man noch lz4-Kompression auf dem Dataset hat.

Aber zum Thema: FreeBSD liegt mit NanoBSD ein Framework bei um minimale Systeme bauen zu können. Die Anleitung ist unter https://www.freebsd.org/doc/en/articles/nanobsd/ Aber das läuft auf selbst compilen hinaus und ist auch eher für Embedded Systeme gedacht, die man jederzeit vom Strom trennen kann und so weiter.

Alternativ kann man sich ein minimales System händisch zusammenkopieren. Viel braucht es ja nicht:
  • Eine Shell, also wahrscheinlich sh.
  • ifconfig um die IP-Adressen zu setzen.
  • sshd, login und PAM.
  • /sbin/init, die Panic ohne init ist aber lustig. :)
  • Die zugehörigen Blibliotheken (bekommt man mit ldd raus) und den RTLD /libexec/ld-elf.so.1
  • In /etc/rc kann man ein kleines Shellscript legen, was die IP-Adressen setzt und sshd startet.
  • Dazu die notwendigen Configs.
 
Ich teste derzeit folgendes, aber ob das so schlau ist? Zumindest funktioniert es.
Vollwertige Installation als RAID-10 wobei die root Partition 20GB groß ist, dann eine weitere neue Partition mit dem restlichen Speicherplatz, die dann mit Geli verschlüsselt und das dann in einen weiteren RAID-10 Pool.

So kann ich das System normal booten und nach einem reboot führe ich geli attach /dev/da0p5 /dev/da1p5 aus und kann die Jails etc. starten die im tank-Pool leben sollen.

Code:
# gpart show
=>       40  104857520  da0  GPT  (50G)
         40     409600    1  efi  (200M)
     409640       1024    2  freebsd-boot  (512K)
     410664        984       - free -  (492K)
     411648    4194304    3  freebsd-swap  (2.0G)
    4605952   41943040    4  freebsd-zfs  (20G)
   46548992   52428800    5  freebsd-zfs  (25G)
   98977792    5879768       - free -  (2.8G)

=>       40  104857520  da1  GPT  (50G)
         40     409600    1  efi  (200M)
     409640       1024    2  freebsd-boot  (512K)
     410664        984       - free -  (492K)
     411648    4194304    3  freebsd-swap  (2.0G)
    4605952   41943040    4  freebsd-zfs  (20G)
   46548992   52428800    5  freebsd-zfs  (25G)
   98977792    5879768       - free -  (2.8G)

Code:
# zpool status
  pool: tank
state: ONLINE
  scan: none requested
config:

        NAME           STATE     READ WRITE CKSUM
        tank           ONLINE       0     0     0
          mirror-0     ONLINE       0     0     0
            da0p5.eli  ONLINE       0     0     0
            da1p5.eli  ONLINE       0     0     0

errors: No known data errors

  pool: zroot
state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        zroot       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            da0p4   ONLINE       0     0     0
            da1p4   ONLINE       0     0     0

errors: No known data errors
 
Sorry für die verspätete Antwort, hab' dann soch gewartet bis die beiden Datenträger da waren.

Letztlich hab ich ein unverschlüsseltes FreeBSD mit dem allernotwendigsten auf den kleinen Partitionen installiert, und auf den großen verschlüsselten dann das eigentliche System. Das Rerooten per "reboot -r" funktioniert sehr sauber. War allerdings ein bisschen frickelig das Ganze, letztlich lief es darauf hinaus die Installationen (zfs mirror bzw. zfs auf geli auf gmirror) per Hand durchzuführen, ging aber prima (einen Debian Installer hab' ich ja auch seit 15 Jahren nicht mehr gesehen).

Danke an alle & Grüße,

Robert
 
Würdets du mal dein Partitionsschema posten (gpart show)?
Im wesentlichen genauso wie bei Dir:
Code:
root@polaris:~# gpart show ada0
=>       40  250069600  ada0  GPT  (119G)
         40     409600     1  efi  (200M)
     409640       1024     2  freebsd-boot  (512K)
     410664        984        - free -  (492K)
     411648    8388608     3  freebsd-zfs  (4.0G)
    8800256  234881024     4  freebsd-zfs  (112G)
  243681280    6388360        - free -  (3.0G)

root@polaris:~# gpart show ada1
=>       40  250069600  ada1  GPT  (119G)
         40     409600     1  efi  (200M)
     409640       1024     2  freebsd-boot  (512K)
     410664        984        - free -  (492K)
     411648    8388608     3  freebsd-zfs  (4.0G)
    8800256  234881024     4  freebsd-zfs  (112G)
  243681280    6388360        - free -  (3.0G)

root@polaris:~# zpool status
  pool: polaris_zroot
 state: ONLINE
  scan: none requested
config:

    NAME                       STATE     READ WRITE CKSUM
    polaris_zroot              ONLINE       0     0     0
      mirror/polaris_root.eli  ONLINE       0     0     0

errors: No known data errors

  pool: polaris_zroot_pre
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    polaris_zroot_pre  ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        ada1p3  ONLINE       0     0     0
        ada0p3  ONLINE       0     0     0
polaris_zroot_pre ist das unverschlüsselte kleine System, ein zfs mirror auf ada0p3 und ada1p3. polaris_zroot ist das verschlüsselte System, ein gmirror auf ada0p4 und ada1p4, darauf ein geli, und dann ein normales zfs Filesystem.

Installiert hab ich händisch, nachdem der Installer sich immer die ganze Platte gekrallt hat.

So wie Du es gemacht hast ist es auch sinnvoll und wenn das mit dem rerooting nicht gehen würde hätte ich es wohl genauso gemacht wie Du.

Grüße,

Robert
 
Ok, klingt interessant, mit rerooting hab ich mich bisher nicht beschäftigt, kannst du das mal näher erklären, besonders in Hinblick auf die mountpoints (reicht auch wenn du einfach deine Befehle postest die du nach dem booten eingibst :D).

Und hast du dir mal übers updaten Gedanken gemacht?
Ich vermute du kannst auf deinem "pre" (p3) ganz normal mit freebsd-update fetch/install updaten, dann nach einem eventuell benötigen reboot in dein "p4" wechseln und dort ebenfalls mit freebsd-update arbeiten?
 
Ok, klingt interessant, mit rerooting hab ich mich bisher nicht beschäftigt, kannst du das mal näher erklären, besonders in Hinblick auf die mountpoints (reicht auch wenn du einfach deine Befehle postest die du nach dem booten eingibst :D).
Ich bin bei der installation der beiden Systeme grundsätzlich und teilweise nach dieser Anleitung vorgegangen: https://stefankonarski.de/content/zfs-root-partition-unter-freebsd-9, mit leichten eigenen Abwandlungen, weiß nicht wie gut und aktuell die ist, funktioniert aber.

Ist das unverschlüsselte System gebootet muss man einfach mit "geli attach /dev/<pfad-zum-verschl.-device>" das verschlüsselte System öffnen, mit zfs steht dann dessen zpool zum Import zur verfügung (muss aber nicht importiert werden). Dann mit "kenv vfs.root.mountfrom=<neues-root-device>" (in meinem Fall mit zfs also einfach "zfs:polaris_zroot/root") dem Kernel das neue root Device mitteilen und mit "reboot -r" das unverschlüsselte herunterfahren und das verschlüsselte starten.

Und hast du dir mal übers updaten Gedanken gemacht?
Ich vermute du kannst auf deinem "pre" (p3) ganz normal mit freebsd-update fetch/install updaten, dann nach einem eventuell benötigen reboot in dein "p4" wechseln und dort ebenfalls mit freebsd-update arbeiten?
Exakt.
 
Ist das unverschlüsselte System gebootet muss man einfach mit "geli attach /dev/<pfad-zum-verschl.-device>" das verschlüsselte System öffnen, mit zfs steht dann dessen zpool zum Import zur verfügung (muss aber nicht importiert werden). Dann mit "kenv vfs.root.mountfrom=<neues-root-device>" (in meinem Fall mit zfs also einfach "zfs:polaris_zroot/root") dem Kernel das neue root Device mitteilen und mit "reboot -r" das unverschlüsselte herunterfahren und das verschlüsselte starten.
Das ist inzwischen nicht mehr notwendig, der Loader kann direkt den Kernel vom verschlüsselten ZFS booten.
 
@Kamikaze Wenn man den Zugriff aufs System hat, das ist bei "Remote" Installationen etwas schwieriger und genau darum geht es hier.

@Rosendoktor Danke für die Infos, ich werde mal am Wochenende etwas damit rumspielen :)
 
@Kamikaze Wenn man den Zugriff aufs System hat, das ist bei "Remote" Installationen etwas schwieriger und genau darum geht es hier.
Du meinst um das geli Passwort per SSH einzugeben? Da hast Du natürlich recht. Einen EFI Loader mit ssh haben wir noch nicht. Mit IPMI Konsole ist die Passworteingabe aber auch ohne SSH machbar.
 
Genau das meine ich und IPMI/ILO/etc. sind zwar schön und gut, aber auch nicht immer vorhanden/realisierbar/bezahlbar.
Ich bin mir auch nicht sicher ob ich ein SSH Server im EFI Loader haben wollte, deswegen lieber diesen Umweg.
 
Zurück
Oben