Multi-LiveCD na pendrive’ie

W serwisie Hard Core Security Lab pojawiła się ostatnio informacja o płycie typu Live CD zawierającej 15 różnych dystrybucji Linuksa. Szczerze powiedziawszy nie bardzo wiem do czego taki twór ma służyć, ponieważ większość użytkowników (zwłaszcza tych bardziej zaawansowanych) już dawno wybrała swoją ulubioną dystrybucję typu Live i ewentualnie nawet dostosowała ją do swoich własnych wymagań doinstalowując brakujące programy.

W jednym z ostatnich zdań autor pisze:

“Warto docenić pracę włożoną w utworzenie tego projektu. Wbrew pozorom, utworzenie kompilacji złożonej z kilkunastu różnych systemów typu LiveCD wcale nie jest takie proste.”

Jakkolwiek zgadzam się z tym, że upchnięcie 15 dystrybucji na jednym krążku DVD faktycznie może nie być banalne, to jednak sam proces integracji dystrybucji, aby startowały z jednego krążka z jednym menu jest dosyć proste. W tym wpisie pokażę Wam jak zrobić coś takiego samemu na kilku partycjach pendrive’a. Dla przykładu posłużę się bardzo przydatnymi dystrybucjami SystemRescueCD oraz BackTrack 4.

Co będzie potrzebne:

  1. pendrive, wielkość odpowiednia na zmieszczenie dystrybucji
  2. pliki iso lub img tych dystrybucji
  3. zainstalowany GRUB wraz z plikami uruchomieniowymi (tzw. stage*)

Do działa:

  1. Na początku musimy utworzyć partycje na naszym pendrive’ie i sformatować je. Jako system plików najlepiej wybrać ext3. Użyjcie do tego waszego ulubionego narzędzia. Partycje oczywiście muszą być tak dobrane, aby zmieściły się na nie wybrane dystrybucje.
  2. Montujemy utworzone partycje (np. jako “/mnt/partycja1” i “/mnt/partycja2”).
  3. Kopiujemy na nie dane naszych dystrybucji:
    • najpierw montujemy, jako root, obraz iso komendą:
      mount -o loop backtrack4-final.iso /mnt/temp
    • a następnie kopiujemy wszystkie dane z katalogu /mnt/temp na partycje naszego pendrive’a
      cp -r /mnt/temp/* /mnt/partycja1
  4. BackTrack 4 korzysta z GRUB’a, także w tym przypadku ilość potrzebnych przeróbek w pliku konfiguracyjnym jest minimalna:
    • otwieramy plik konfiguracyjny GRUB’a (/mnt/partycja1/boot/grub/menu.lst) i po każdej linii zaczynającej się od “title” dodajemy linie
      root (hd0,0)
    • na końcu pliku natomiast dopisujemy linie:
      title Back
      configfile (hd0,0)/boot/grub/menu.lst

      pierwsze “0” oznacza pierwszy dysk (jeśli uruchamiamy system z pendrive’a to zawsze jest on widziany jako pierwszy dysk), a drugie “0” pierwszą partycję tego dysku. Powyższa linijka mówi GRUB’owi, że wszystkie dane z configu są relatywne względem tej partycji. Tak zmodyfikowany plik zapisujemy jako “/mnt/partycja1/boot/grub/bt.menu.lst” (bez cudzysłowów).

  5. Plik “menu.lst” modyfikujemy natomiast, aby zawierał tylko linie:
    timeout 30
    default 0
    
    title BackTrack 4
    configfile (hd0,0)/boot/grub/bt.menu.lst
    
    title SystemRescueCD
    configfile (hd0,1)/sysrcd.menu.lst
    
    title Boot from hard disk
    root (hd0)
    chainloader +1

    W ten sposób tworzymy menu z którego będziemy wybierać do menu której dystrybucji chcemy przejść.

  6. Dla SystemRescueCD sprawa jest trochę trudniejsza ponieważ nie używa on GRUB’a tylko isolinux’a jako bootloader’a. Oznacza to, że cały plik konfiguracyjny musimy utworzyć sami. Nie jest to jednak trudne i dosyć szybko i prosto można przerobić istniejący config na config GRUB’a.
    Tak samo jak w przypadku BackTrack’a montujemy iso SysRCD i odnajdujemy plik “isolinux/isolinux.cfg”. Wewnątrz zmieniamy:

    • default rescuecd

      zamieniamy na

      default 0
    • kasujemy wszystkie linie między linią zaczynającą się od “default”, a pierwszą linią zaczynającą się od “label”, za wyjątkiem linii “timeout”
    • w liniach zaczynających się od słowa “label” zamieniamy je na “title”
    • po liniach “title” dodajemy linie
      root (hd0,1)
    • linie “kernel” modyfikujemy tak, aby wskazywały na lokalizację plików jąder, które w tym wypadku znajdują się w katalogu “/isolinux”:
      kernel /isolinux/rescuecd
    • z linii zaczynających się od “append” kasujemy to słowo i pozostałą zawartość przenosimy do linii zaczynającej się od “kernel”
    • w przeniesionej przed chwilą linii znajdujemy ciąg
      initrd=initram.igz

      i przenosimy go do osobnej linii zmieniając na

      initrd /isolinux/initram.igz

      linie zaczynające się od “append” ale mające inną wartość po “initrd=” traktujemy tak samo

    • na końcu pliku kasujemy wpisy “disk1”, “disk2”, “floppy” i “nextboot”
    • na końcu pliku dodajemy:
      title Back
      configfile (hd0,0)/boot/grub/menu.lst
    • tak zmodyfikowany plik zapisujemy jako “sysrcd.menu.lst” w katalogu w którym zamontowaliśmy iso SysRCD, czyli np. “/mnt/temp”
    • przykładowy plik dla SysRCD znajduje się tutaj.
  7. Pozostaje nam już tylko upewnić się, że odpowiednie pliki GRUB’a znajdują się gdzie trzeba, oraz zainstalować GRUB’a na pendrive’ie, aby uczynić całość boot’owalną. Następujące pliki muszą być w katalogu “/boot/grub” na pierwszej partycji naszego pendrive’a:
    • stage1
    • e2fs_stage1_5
    • stage2

    Jeśli sformatowaliśmy partycję innym systemem plików niż ext2/ext3 to plik “e2fs_stage1_5” należy zastąpić innym, odpowiednim dla utworzonego systemu plików.
    Aby zainstalowa GRUB’a wpisujemy następujące polecenia jako root (!WAŻNE! partycja na której znajdują się powyższe pliki musi być zamontowana podczas wykonywania tych poleceń):

    grub
    root (hd1,0)
    setup (hd1)
    quit
    

    pierwsza komenda spowoduje uruchomienie GRUB’a i pozostawi nas w interaktywnej powłoce GRUB’a. W drugiej linii określamy gdzie znajdują się pliki GRUB’a. Przedostatnia linia instaluje GRUB’a do MBR pendrive’a, a ostatniej nie muszę chyba opisywać. ;) Oczywiście wartości w nawiasach dostosowujemy do własnych potrzeb. Czyli jeśli posiadamy dwa dyski twarde w komputerze to podłączony pendrive zostanie wykryty jako trzeci dysk, a że GRUB numeruje dyski i partycje od 0 to pierwsza partycja na pendrive’ie będzie oznaczona jako “(hd2,0)”

Efekt:

No i to by było na tyle. :) Po tym powinniśmy mieć na pierwszej partycji, skopiowanego BackTrack’a (na tej samej partycji w /boot/grub pliki menu.lst i bt.menu.lst), a na drugiej SystemRescueCD (z plikiem sysrcd.menu.lst w katalogu głównym partycji). Podczas uruchamiania powinniśmy dostać menu z którego możemy wybrać którą dystrybucje chcemy uruchomić, a po jej wybraniu powinniśmy przejść do menu z wpisami do uruchamiania tej dystrybucji. Na dole zaś powinien być wpis “Back” którym powracamy do poprzedniego menu.

W ten sam sposób można potraktować (prawie) dowolną dystrybucję.

Co zaś do nagrywania tego na płytę to przyznaję, że nigdy tego nie próbowałem (mój netbook nie posiada czytnika DVD), ale generalnie wygląda to tak samo tylko zamiast na partycje wszystko kopiujemy do katalogów i wpisy tworzymy relatywnie do tych katalogów. Żeby następnie stworzyć boot’owalną płytę zaglądamy tutaj.

Comment are closed.