Mit debootstrap auf usb Laufwerk install. und bootbar machen

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
chr.gogolin
Beiträge: 441
Registriert: 12.10.2005 23:09:28
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Mit debootstrap auf usb Laufwerk install. und bootbar machen

Beitrag von chr.gogolin » 07.06.2016 17:00:29

Um eine Einfache Methode zum anfertigen kompletter Systemabbilder meines stretch systems mittels dd zu haben möchte ich gerne auf einer Partition einer externen usb Festplatte ein minimales bootbares Debian installieren.

Dazu habe ich auf der usb Festplatte zwei Partitionen erstellt sdb1 und sdb2 (beide ext2). sdb1 ist für Daten, sdb2 für das minimale bootbare System. Nun habe ich sdb2 nach /media/sdb2 gemounted und per debootstrap ein minimales system installiert

Code: Alles auswählen

debootstrap --variant=minbase --include=linux-image-amd64 stretch /media/sdb2/ http://httpredir.debian.org/debian
Ich kann dieses system nun per chroot "betreten" aber logischerweise noch nicht booten.

Ich bin mir nun nicht sicher was ich noch machen muss um das minimale system bootbar zu machen. Welchen bootloader soll ich installieren und wie mache ich das genau ohne dabei mein laufendes system zu verändern?
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett

Benutzeravatar
detix
Beiträge: 1744
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von detix » 07.06.2016 18:28:05

Installier dir zB grub, außerhalb des chroot so:

Code: Alles auswählen

grub-install --recheck --root-directory=/media/sdb2 /dev/sdb
Im chroot dann grub selbst installieren

Code: Alles auswählen

apt-get install grub
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

chr.gogolin
Beiträge: 441
Registriert: 12.10.2005 23:09:28
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von chr.gogolin » 07.06.2016 18:56:57

Danke, aber das scheint leider nicht ganz zu klappen. Wenn ich aus meinem normalen system heraus grub install aufrufe bekomme ich folgenden Fehle:

Code: Alles auswählen

$ grub-install -v --boot-directory=/media/sdb2 /dev/sdb
grub-install: info: executing modprobe efivars 2>/dev/null.
grub-install: info: Looking for /sys/firmware/efi ...
grub-install: info: ...found.
Installing for x86_64-efi platform.
grub-install: info: cannot open `/media/sdb2/grub/device.map': No such file or directory.
grub-install: error: cannot find EFI directory.
Ich vermute das Problem ist, dass bei mir grub-efi-amd64 installiert ist, die usb Platte aber eine dos Partitionstabelle hat:

Code: Alles auswählen

$ blkid -s PTTYPE -o value /dev/sdb
dos
Kann ich auch die version von grub in dem chroot verwenden? Also erst grub dort installieren, /dev/sdb in die chroot verlinken, und dann aus der chroot heraus

Code: Alles auswählen

grub-install /dev/sdb
ausrufen? Dafür fehlen warscheinlich einige der virtuellen Dateisysteme im chroot. Welche brauche ich und kann ich wenn ich diese einbinde noch sicher sein, dass mein eigentliches system nicht verändert wird?
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett

Benutzeravatar
detix
Beiträge: 1744
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von detix » 07.06.2016 19:25:57

Da sind meine Infos doch schon arg vergammelt! :oops:
root-directory gibts nicht mehr und (u)efi habe ich hier nicht.
grub sollte sich aber auch im chroot installieren lassen, nur wie das mit efi ist?
Ich glaub für efi brauchst du eine seperate bootpartition, da können dir sicher andere weiterhelfen.

Nachtrag, da könnte was brauchbares zu finden sein:
https://www.lowlevel.eu/wiki/GRUB_Insta ... _USB-Stick
grub-install macht eigentlich nichts kaputt, sofern der richtige mount-Ordner und das richtige device angegeben sind.
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Benutzeravatar
smutbert
Beiträge: 8350
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von smutbert » 07.06.2016 20:04:00

chr.gogolin hat geschrieben:[…]
Ich vermute das Problem ist, dass bei mir grub-efi-amd64 installiert ist, die usb Platte aber eine dos Partitionstabelle hat:
[…]
Das an sich ist kein Problem, aber grub-efi muss auf einer FAT-Partition landen und automatisch funktioniert das afaik nur, wenn die unter /boot/efi gemountet ist und möglicherweise muss sie auch den Typ ef00 (EFI System Partition) haben.

Keines von beiden ist notwendig, wenn man grub selbst manuell installiert, eine Variante habe ich hier gepostet, allerdings als Beispiel für ein Live-System: viewtopic.php?f=12&t=160544&start=15#p1092718


Bei chroot bind-mounte ich für gewöhnlich /dev, /proc und /sys, das müsste imho genügen. Du brauchst dann aber immer noch die EFI System Partition unter /boot/efi...

edit:
Demnächst werde ich mir ein kleines Rettungs-jessie auf einen USB-Stick installieren. Wenn es dir hilft, könnte ich mein Vorgehen dokumentieren.

chr.gogolin
Beiträge: 441
Registriert: 12.10.2005 23:09:28
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von chr.gogolin » 08.06.2016 17:42:47

Der Artikel auf lowlevel.eu scheint mir etwas sehr veraltet zu sein...
smutbert hat geschrieben:
chr.gogolin hat geschrieben:[…]
Ich vermute das Problem ist, dass bei mir grub-efi-amd64 installiert ist, die usb Platte aber eine dos Partitionstabelle hat:
[…]
Das an sich ist kein Problem, aber grub-efi muss auf einer FAT-Partition landen und automatisch funktioniert das afaik nur, wenn die unter /boot/efi gemountet ist und möglicherweise muss sie auch den Typ ef00 (EFI System Partition) haben.

Keines von beiden ist notwendig, wenn man grub selbst manuell installiert, eine Variante habe ich hier gepostet, allerdings als Beispiel für ein Live-System: viewtopic.php?f=12&t=160544&start=15#p1092718
Bei deinen Aufruf von grub-install hast hast du gar kein Laufwerk angegeben. Ist das mit der efi version nicht mehr nötig? Könnte ich also ähnlich verfahren und eine efi/grub/grub.cfg mit dem Inhalt

Code: Alles auswählen

menuentry "Live ISO Boot" {
   search --no-floppy --label --set=root BACKUPSYSTEM
   linux /vmlinuz
   initrd /initrd.img
}
anlegen und dann wie du grub-install aufrufen? Oder geht das nicht da efi nur von FAT32 aus funktioniert? Oder zerschieße ich mir damit sogar den Bootloader meines Produktivsystems?
smutbert hat geschrieben: Bei chroot bind-mounte ich für gewöhnlich /dev, /proc und /sys, das müsste imho genügen. Du brauchst dann aber immer noch die EFI System Partition unter /boot/efi...
Sicher? Ich dachte wenn ich in dem chroot grub-legacy installiere, dann könnte das vielleicht gehen?
smutbert hat geschrieben: edit:
Demnächst werde ich mir ein kleines Rettungs-jessie auf einen USB-Stick installieren. Wenn es dir hilft, könnte ich mein Vorgehen dokumentieren.
Das wäre großartig! Genau so ein Rettungs-/Backupsystem möchte ich ja eben auch.
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett

Benutzeravatar
smutbert
Beiträge: 8350
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von smutbert » 08.06.2016 18:32:57

Bei UEFI ist es so, dass das BIOS/UEFI-Ding den Bootloader aus einer normalen Datei auf dem Dateisystem ausliest und das geht nur, wenn das UEFI das Dateisystem versteht. FAT verstehen afaik alle UEFIs, Applerechner können zusätzlich HFS(+) und manche Systeme können zusätzlich NTFS.
Wenn du also einen UEFI-Bootloader auf einem USB-Stick haben willst geht es verlässlich auf so guten wie allen uefi-Systemen nur mit FAT.

Weil auch keine Bootsektoren, MBR und dergleichen im Spiel sind, gibt man nur mehr Verzeichnisse und keine Gerätedateien mehr an.


Das zweite was dazugehört ist normalerweise ein Eintrag im UEFI für den Bootloader, damit das System weiß aus welcher Datei es den Bootloader laden soll. Bei USB-Sticks oder anderen Wechselmedien wäre das aber kontraproduktiv und für diesen Fall gibt es einen Pfad unter dem so gut wie alle uefis nach einer Datei suchen, auch ohne entsprechenden Booteintrag. Bei amd64 ist das »EFI/boot/bootx64.efi«. Es ist außerdem bestimmt nicht von Nachteil, wenn diese Partition als EFI System Partition gekennzeichnet ist (Partitionstyp ef00), aber wirklich notwendig ist es auf keinem der Systeme, die ich kenne.

Das einzige was du dir mit dem Installationsaufruf zerschießen könntest - solange du nicht irrtümlich die Dateien der EFI System Partition der internen Festplatte oder SSD überschreibst, wären diese Booteinträge. (Das sollte sich aber leicht reparieren lassen.)
Bei dem im verlinkten Thread gebe ich aber explizit an, dass die nicht erstellt/verändert werden sollen, genauso wie ich angebe, dass grub auch im Pfad für Wechselmedien installiert werden soll.

Die grub.cfg kann man auch im Nachhinein erstellen und die stimmt ungefähr so wie du sie hingeschrieben hast. Eventuell musst du dem Kernel noch Parameter mitgeben, zB welches das /-Dateisytem ist (root=/dev/sdxy oder root=LABEL=BACKUPSYSTEM oder root=UUID=jksdbgvlaikgb).

Mit chroot brauche ich für gewöhnlich 2 bis 3 Versuche, weil ich immer etwas vergesse, aber meistens bringt mich die Fehlermeldung darauf was ich vergessen habe… mit grub-pc (grub-legacy ist wohl grub 1, wenn es das noch in den Repositories gibt) sollte es auch funktionieren, aber bei gpt-Partitionierung ist dann eine BIOS Boot Partition notwendig.

edit:
Das mit dem Dokumentieren wird noch ein kleines Zeiterl dauern, aber diese Woche wirds noch was (hoffe ich).

Benutzeravatar
smutbert
Beiträge: 8350
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von smutbert » 10.06.2016 11:52:53

Ok, also geht es los. Ich schreibe einfach einmal alles auf, was ich mache, auch wenn du ein paar Sachen möglicherweise weglassen willst.

Ich war großzügig und habe mir einen Stick mit 64 GB gegönnt. Er heißt bei mir nun »/dev/sdd« und ist momentan komplett unpartioniert.
  1. USB-Stick vorbereiten
    • partitionieren
      Dazu habe ich Debiangdisk verwendet, weil es das simpelste Tool ist.

      Code: Alles auswählen

      # gdisk /dev/sdd
      
      Als erstes habe ich mit "o" eine leere Partitionstabelle erstellt und danach mit "n" zwei Partitionen angelegt. Den Typ der ersten Partition habe ich mit "ef00" (EFI System) angegeben, den der zweiten habe ich bei den vorgeschlagenen "8300" (Linux filesystem) belassen. Dann habe ich mit "c" beiden Partitionen einen Namen gegeben, EFI.USB für die erste und BTRFS.USB für die zweite Partition - ist aber eigentlich nicht weiter wichtig, die Namen der Partitionen dienen nur der Übersichtlichkeit.
      Bei mir sieht das dann so aus:

      Code: Alles auswählen

      # gdisk -l /dev/sdd
      GPT fdisk (gdisk) version 0.8.10
      
      Partition table scan:
        MBR: protective
        BSD: not present
        APM: not present
        GPT: present
      
      Found valid GPT with protective MBR; using GPT.
      Disk /dev/sdd: 121110528 sectors, 57.8 GiB
      Logical sector size: 512 bytes
      Disk identifier (GUID): D3E8D1C5-8E90-495D-AF01-C65FAED20E29
      Partition table holds up to 128 entries
      First usable sector is 34, last usable sector is 121110494
      Partitions will be aligned on 2048-sector boundaries
      Total free space is 8158 sectors (4.0 MiB)
      
      Number  Start (sector)    End (sector)  Size       Code  Name
         1            8192         4202495   2.0 GiB     EF00  EFI.USB
         2         4202496       121110494   55.7 GiB    8300  BTRFS.USB
      
      Start- und Endsektoren sind im Grunde nicht wichtig, ich habe nur ein vielfaches von 2048 gewählt und zu Beginn etwas Platz gelassen, weil das im Auslieferungszustand des USB-Sticks auch so war.
      Die erste Partition, die EFI System Partition muss keinesfalls so groß ausfallen und auch bei der zweiten kommt man mit einem 4 oder 8 GB großen USB-Stick aus, wenn man wie ich keine grafische Oberfläche installieren will.
    • Dateisysteme erstellen
      Das ist schnell erledigt, die erste Partition bekommt FAT und die zweite btrfs. btrfs erfordert zwar einige Extraschritte, aber gerade auf verglichen mit Festplatten oder SSDs möglicherweise etwas unzuverlässigeren und langsameren Speichermedien hat es sich bei mir bewährt und ich denke die bei btrfs zusätzlich notwendigen Schritte sind leicht als solche erkennbar.

      Code: Alles auswählen

      # mkfs.btrfs -L BTRFS.USB /dev/sdd2 
      btrfs-progs v4.4.1
      See http://btrfs.wiki.kernel.org for more information.
      
      Label:              BTRFS.USB
      UUID:               62b6caf3-950c-4b27-b3bd-9600d02d82cf
      Node size:          16384
      Sector size:        4096
      Filesystem size:    55.75GiB
      Block group profiles:
        Data:             single            8.00MiB
        Metadata:         DUP               1.01GiB
        System:           DUP              12.00MiB
      SSD detected:       no
      Incompat features:  extref, skinny-metadata
      Number of devices:  1
      Devices:
         ID        SIZE  PATH
          1    55.75GiB  /dev/sdd2
      
      # mkfs.fat -F 32 -n EFI.USB /dev/sdd1 
      mkfs.fat 3.0.27 (2014-11-12)
      
      Als Label habe ich dieselben Namen, wie beim Partitionieren für die Partitionen verwendet. Im Gegensatz zu den Namen der Partitionen sind die Dateisystemlabel wichtig, weil wir sie sowohl in der fstab wie auch bei der Konfiguration von Grub verwenden werden.

      Bei btrfs kann man nun für das System ein eigenes Subvolume anlegen, dazu mountet man das Dateisystem, ich hier unter »/mnt/tmp« mit aktivierter Kompression, die bei USB-Sticks meist der Geschwindigkeit etwas zugute kommt und mit noatime um die Anzahl der Schreibzugriffe zu minimieren

      Code: Alles auswählen

      # mount -o noatime,compress=lzo LABEL=BTRFS.USB /mnt/tmp
      
      und erstellt anschließen das Subvolume mit dem gewünschten Namen, hier schlicht »debian«

      Code: Alles auswählen

      # btrfs subvolume create /mnt/tmp/debian
      Create subvolume '/mnt/tmp/debian'
      
      Nach außen hin ist dieses Subvolume erst einmal nicht von einem normalen Verzeichnis zu unterscheiden.
  2. Grundsystem installieren

    Code: Alles auswählen

    # debootstrap --arch=amd64 jessie /mnt/tmp/debian http://server.local:3142/ftp.at.debian.org/debian/
    
    »server.local« heißt dabei mein Debianapt-cacher-ng-Server im lokalen Netzwerk, der die Sache sehr beschleunigt. Man kann die Angabe des Mirrors und der Architektur auch einfach weglassen.
  3. Kleinigkeiten wie Hostname, fstab, …
    • »/mnt/tmp/debian/etc/fstab«

      Code: Alles auswählen

      LABEL=BTRFS.USB         /               btrfs   noatime,compress=lzo,subvol=debian   0       0
      LABEL=EFI.USB           /boot/efi       vfat    noatime,dmask=077,fmask=177             0       0
      
      LABEL=BTRFS.USB         /mnt/BTRFS.USB  btrfs   noatime,compress=lzo                    0       0
      
      Hier habe ich die Label verwendet - mit der UUID würde es genauso funktionieren. Der letzte Eintrag in der fstab bietet eine Möglichkeit auf das komplette btrfs, also auf das root-Volume, wenn man so will, zuzugreifen und nicht nur auf das Subvolume debian, das als / gemountet wird. Das Verzeichnis dafür will natürlich auch erstellt werden

      Code: Alles auswählen

      # mkdir /mnt/tmp/debian/mnt/BTRFS.USB
      
    • Hostname

      Code: Alles auswählen

      # echo rescue > /mnt/tmp/debian/etc/hostname
      
    • »/mnt/tmp/debian/etc/apt/sources.list«

      Code: Alles auswählen

      deb http://ftp.at.debian.org/debian/ jessie main contrib non-free
      deb http://security.debian.org/ jessie/updates main contrib non-free
      
      deb http://ftp.at.debian.org/debian/ jessie-proposed-updates main contrib non-free
      deb http://ftp.at.debian.org/debian/ jessie-updates main contrib non-free
      deb http://ftp.at.debian.org/debian/ jessie-backports main contrib non-free
      
    • apt konfigurieren
      Hier habe ich beispielsweise den Debianapt-cacher-ng-Server eingetragen und festgelet, dass empfohlene Pakete standarmäßig nicht installiert werden sollen. Das alles habe ich in neu angelegte »/mnt/tmp/etc/apt/apt.conf.d/71local« geschrieben:

      Code: Alles auswählen

      APT::Install-Recommends "0";
      APT::Install-Suggests "0";
      Acquire::http { Proxy "http://server.local:3142"; };
      
    • »/etc/hosts«
      Hier habe ich notwendigerweise den Debianapt-cacher-ng-Server eingetragen

      Code: Alles auswählen

      …
      192.168.0.78	server.local		server
      
    • »/mnt/tmp/debian/etc/kernel-img.conf«
      Mithilfe dieser Datei lege ich fest, dass die Symlinks zu Kernel und initrd (vmlinuz und initrd.img) nicht in »/« sondern in »/boot« liegen sollen. Hier ist es egal, aber bei Systemen auf denen »/« und »/boot« auf verschiedenen Dateisytemen liegen lassen sich die Symlinks sonst nicht verwenden.
      Der Inhalt sieht folgendermaßen aus

      Code: Alles auswählen

      do_symlinks = yes
      relative_links = yes
      link_in_boot = yes
      
    • System als chroot-Umgebung vorbereiten
      Als Besonderheit von einem System auf einem btrfs-Subvolume muss man dieses Subvolume noch einmal explizit mounten, damit grub dem Dateisystem das richtige Gerät zuordnen kann

      Code: Alles auswählen

      # umount /mnt/tmp
      # mount -o noatime,compress=lzo,subvol=debian LABEL=BTRFS.USB /mnt/tmp
      
      nun die notwendigen virtuellen Dateisysteme

      Code: Alles auswählen

      # mount -o bind /dev /mnt/tmp/dev 
      # mount -o bind /sys /mnt/tmp/sys 
      # mount -o bind /proc /mnt/tmp/proc
      
      und schließlich dafür sorgen, dass die Netzwerkverbindung auch in der chroot-Umgebung funktioniert

      Code: Alles auswählen

      # cp /etc/resolv.conf /mnt/tmp/etc/resolv.conf
      
    • in das neue System chrooten

      Code: Alles auswählen

      # chroot /mnt/tmp
      
  4. Konfiguration und weitere Pakete
    Nun ist der Augenblick gekommen weitere Pakete zu installieren, wobei ich Kernel und btrfs-tools gleich aus den Backports installiere und noch einige Dinge zu konfigurieren, zB ein Passwort für root zu vergeben.

    Code: Alles auswählen

    # passwd
    # apt update
    # apt install tzdata locales linux-image-amd64/jessie-backports bash-completion libnss-myhostname btrfs-tools/jessie-backports kpartx gddrescue console-setup gdisk
    # dpkg-reconfigure tzdata
    # systemctl enable tmp.mount
    # systemctl enable systemd-timesyncd.service
    
    Die letzten beiden Befehle legen »/tmp« auf ein tmpfs in den Hauptspeicher und aktivieren die in systemd eingebaute Zeitsynchronisation über das Netzwerk.
    Damit sollte man ein bis auf den Bootloader brauchbares Basissystem haben.
  5. grub
    Dafür gibt es zwei Möglichkeiten. Man kann es so machen, wie man es bei einer ganz normalen Debianinstallation machen würde und die grub-Konfigurationsdatei würde zb bei der Installation eines normalen Kernels automatisch neu geschrieben oder man installiert einen von Debian komplett unabhängigen grub auf der EFI System Partition mit einer statischen Konfigurationsdatei, die sich auf die symbolischen Links auf Kernel und initrd verlässt und auf die Art nur den aktuellen und den vorigen Kernel starten kann.
    1. normale grub-Installation in chroot
      Es sollte genügen »/boot/efi« noch innerhalb der chroot-Umgebung zu mounten und Debiangrub-efi-amd64 zu installieren.

      Code: Alles auswählen

      # mkdir /boot/efi
      # mount /boot/efi
      # apt install grub-efi-amd64
      
      Auf die Frage nach dem "removable media path" sagt man ja. Ich habe es trotzdem schon erlebt, dass einerseits das grub-Image nicht dorthin kopiert worden ist und andererseits ein Booteintrag erstellt wurde, der den des "Hostsystems" überschrieben hat. Dagegen kann man zwei Dinge tun, erstens grub innerhalb der chroot-Umgebung manuell kopieren

      Code: Alles auswählen

      # mkdir /boot/efi/EFI/boot
      # cp /boot/efi/EFI/debian/grubx64.efi /boot/efi/EFI/boot/bootx64.efi
      
      (gegebenenfalls existieren die Verzeichnisse »EFI/boot« bereits mit abweichender Großkleinschreibung)
      und nach dem Verlassen der chroot-Umgebung auf dem "Hostsystem" dafür zu sorgen, dass der Booteintrag wieder richtig erstellt wird:

      Code: Alles auswählen

      # update-grub
      
      Ich bevorzuge die andere Variante, die im nächsten Abschnitt folgt…
    2. manuelle grub-Installation
      Die Installation kann man wahlweise noch in der chroot-Umgebung oder, was vielleicht etwas bequemer ist, vom Hostsystem aus machen. Wenn man es wie ich vom Hostsystem, also außerhalb der chroot-Umgebung macht, dann braucht man auf dem Rettungssystem weder Debiangrub-efi-amd64 noch ein anderen grub-Paket zu installieren - es genügt wenn das auf dem Hostsystem installiert ist.

      Nach dem Verlassen der chroot-Umgebung, habe ich also meinen "Arbeitsmountpoint" (»/mnt/tmp«) freigemacht

      Code: Alles auswählen

      # umount /mnt/tmp/dev
      # umount /mnt/tmp/proc
      # umount /mnt/tmp/sys
      # umount /mnt/tmp
      
      Falls du vorher in der chroot-Umgebung mehr Pakete installiert hast, die vielleicht irgendwelche Prozesse gestartet haben und damit irgendwelche Dateien auf den virtuellen Dateisystemen geöffnet haben, scheitert das möglicherweise mit dem Hinweis, dass das Dateisystem noch in Verwendung ist.
      In dem Fall ist es naheliegenderweise das einfachste einen neues Verzeichnis als Mountpoint zu erstellen, was ich hier auch mache

      Code: Alles auswählen

      # mkdir /mnt/tmp2
      # mount LABEL=EFI.USB /mnt/tmp2
      
      Vor der eigentlichen Installation von grub habe ich einige Dateien und Verzeichnisse erstellt

      Code: Alles auswählen

      # mkdir -p /mnt/tmp2/efi/grub
      # mkdir /mnt/tmp2/efi/boot
      
      »/mnt/tmp2/efi/grub/grub.cfg«

      Code: Alles auswählen

      insmod vbe
      insmod vga
      insmod efi_gop
      insmod efi_uga
      insmod part_msdos
      insmod part_gpt
      insmod ext2
      insmod btrfs
      insmod gzio
      insmod gfxterm
      insmod gettext
      
      set default=0
      terminal_output gfxterm
      search --no-floppy --label --set=root EFI.USB
      loadfont /efi/grub/fonts/unicode.pf2
      set locale_dir=/efi/grub/locale
      set menu_color_normal=white/black
      set menu_color_highlight=black/light-gray
      
      menuentry 'Debian GNU/Linux USB-Stick' {
              search --no-floppy --label --set=root BTRFS.USB
              linux  /debian/boot/vmlinuz root=LABEL=BTRFS.USB rootflags=subvol=debian ro quiet
              initrd  /debian/boot/initrd.img
      }
      
      menuentry 'Debian GNU/Linux USB-Stick (previous kernel)' {
              search --no-floppy --label --set=root BTRFS.USB
              linux  /debian/boot/vmlinuz.old root=LABEL=BTRFS.USB rootflags=subvol=debian ro quiet
              initrd  /debian/boot/initrd.img.old
      }
      
      und zur eigentlichen Installation

      Code: Alles auswählen

      # grub-install --boot-directory=/mnt/tmp2/efi --efi-directory=/mnt/tmp2 --force-extra-removable --no-nvram --no-uefi-secure-boot
      
      Auf dieselbe Art kann man auch zusätzlich Debiangrub-efi-i386 installieren, das auf einigen älteren Apple-Rechnern und möglicherweise einigen weiteren frühen EFI-Systemen notwendig ist.
Vorausgesetzt ich habe mit copy & paste keine Fehler eingebaut, lässt sich ein so ersteller Stick auf uefi-Systemen anstandslos starten. Das uefi-Bootmenü kann man beim Systemstart bei den meisten Systemen mit <Esc>, <F8> oder <F10> aufrufen.

Wenn irgendetwas unklar ist, zB weil du irgendeinen Teil lieber anders lösen möchstest, zB ein anderes Dateisystem verwenden, frag einfach.

chr.gogolin
Beiträge: 441
Registriert: 12.10.2005 23:09:28
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: Mit debootstrap auf usb Laufwerk install. und bootbar ma

Beitrag von chr.gogolin » 10.06.2016 16:27:23

Am ende habe ich auf folgendem Wege das bekommen was ich wollte:
  • - eine 1GB große ext2 partition (sdb1) auf dem usd Laufwerk angelegt
    - die partition als aktiv gekennzeichnet:
    $ sfdisk -A /dev/sdb 1
    - Partition eingehängt
    $ mount /deb/sdb1 /media/usbstick
    - Debian Stretch per debootstrap installiert
    $ debootstrap --variant=minbase --include=linux-image-amd64 stretch /media/usbstick/ http://httpredir.debian.org/debian
    - In das installierte system chrooten
    $ chroot /media/usbstick
    - Mounted proc und devpts
    $ mount -t proc proc /proc
    $ mount devpts /dev/pts -t devpts
    - Root passwort eingestellt
    $ passwd
    - Einige zusätzliche minimale Pakete installieren (je nach Wunsch anpassbar)
    $ apt-get install apt-utils dialog systemd keyboard-configuration nano locales console-setup
    (ohne init system kann man nicht mal herunterfahren, und keyboard-configuration macht das tippen angenehmer, ...)
    - Aktivire systemd
    $ ln -s /lib/systemd/systemd /sbin/init
    - Installed extlinux als bootloader installiert (defür ist das Paket extlinux nötig)
    $ mkdir /media/usbstick/extlinux
    $ extlinux --install /media/usbstick/extlinux
    - Configer extlinux by putting the following into /media/usbstick/extlinux/extlinux.conf

    Code: Alles auswählen

    DEFAULT backupsystem
      SAY Now booting backupsystem through SYSLINUX...
    LABEL backupsystem
      KERNEL /vmlinuz
      APPEND root=/deb/sdb1 initrd=/initrd.img
    - Anlegen der /etc/fstab mit folgenden Inhalt (nicht sicher ob das nötig ist)

    Code: Alles auswählen

    /dev/sdb1 / ext2 defaults 0 1
    - Unmount
    $ umount /media/usbstick/proc
    $ umount /media/usbstick
    - Write extlinux to the MBR
    $ dd if=/usr/lib/syslinux/mbr/mbr.bin of=/dev/sdb bs=440 count=1
Besser wäre es noch /dev/sdb1 in der fstab und der bootloader config durch UUID=... zu ersetzen.
"Linux supports the notion of a command line or a shell for the same reason that only children read books with only pictures in them." - Bill Garrett

Antworten