Zabawy z Ubuntu. Część pierwsza: „O LiveCD, które nie mieszka na płycie”.
Cykl „Zabaw z Ubuntu”, rozpoczynający się niniejszym artykułem, ma na celu pokazanie rzeczy oczywistych - tak bardzo oczywistych, że nie zdajemy sobie z nich sprawy. Wszystko opiera się o elastyczność Linuksa - brak jedynej słusznej drogi do celu. Nie przeczytamy tu sensu stricto technicznych pojęć służących samym sobie ;) nie będziemy dręczyli się dogłębnymi wyjaśnieniami, czasem uprościmy definicje, czasem użyjemy częściowo nietrafnych pojęć, a wszystko po to, by maksymalnie upraszczając teorię skupić się na praktyce.
Praca z Linuksem - praca z Ubuntu może być zabawą! Bawmy się więc!
Jakiś czas temu czytaliśmy i słyszeliśmy dużo o „Ubuntu na USB”. Niestety musimy się rozczarować - nie ma w nich nic magicznego. Ubuntu na USB nie zostało „wynalezione”, a sam proces został bardzo dokładnie udokumentowany znacznie wcześniej. Dlaczego więc poniższy artykuł omawia to po raz kolejny? Nie! Nie dla „wtórności, od której bolą zęby”. W moim zamierzeniu ma on stać się podstawą dla kolejnych części „Zabaw z Ubuntu”, w których będziemy „grzebali” w obrazach initrd, zainstalujemy bootloader (grub) na płycie CD, przenośnej pamięci typu „pendrive”, czy też instalowali „ręcznie” Ubuntu na pustych partycjach (albo i w katalogach), z użyciem płyty LiveCD oraz bez żadnych płyt. Wreszcie przygotujemy własną wersję LiveCD *buntu, bez użycia żadnych dodatkowych programów typu UCK.
LiveCD
Prawie każda szanująca się dystrybucja Linuksa może być uruchomiona z płyty LiveCD. Dla jednych jest to opcja, a inne, tak jak Ubuntu (i wszelkie *buntu), rozpowszechniane są w tej właśnie formie. Nie ma sensu opisywać zalet czy wad płyt LiveCD, skupmy się zatem na tym, czym taka płyta jest. Bez obaw - nie musimy znać jej w 100%. Na początek ograniczmy się do 4 informacji:
Płyta zawiera program rozruchowy (bootloader) wraz z plikami konfiguracyjnymi
Płyta zawiera serce systemu - jądro, które uruchamiane jest przez bootloader
Płyta zawiera obraz initrd (pomijając szczegóły, pewien system plików, można powiedzieć: małą dystrybucję systemu, która po wczytaniu do pamięci odpowiada za zamontowanie właściwego systemu plików i dalszy rozruch systemu)
Płyta zawiera obraz systemu plików (skompresowany, aby zajmował mniej miejsca) z wszelkimi programami, bibliotekami, danymi, które dostępne są po uruchomieniu systemu.
Powyższe punkty pokazują dodatkowo w jakiej kolejności nasz komputer „sięga” po konkretne elementy.
Uwaga. Testowanie procedur (zaleceń/czegokolwiek) z tej, jak i kolejnych części „cyklu” może nieść pewne ryzyko dla Twojego systemu/danych - niezbyt dokładnie cytując fragment strony WWW gry Danger from the Deep: komputer może wypić Twoje mleko, czy ukraść Ci kota ;)
Zostałeś ostrzeżony/Zostałaś ostrzeżona!
Uruchomienie komputera w sesji LiveCD bez płyty
Jeśli wszystko jest jasne, zajmijmy się procesem uruchomienia płyty LiveCD z dysku twardego. Zrozumienie tego procesu pozwoli nam „pobawić się Ubuntu” w bardziej zaawansowany sposób. Test przeprowadzimy przy użyciu płyty LiveCD *buntu 7.10. Wcześniejsze wersje posiadały inaczej skonstruowany skrypt casper dostępny w obrazie initrd, który odpowiada za odnalezienie pliku filesystem.squashfs, przez co nie mogą być bezpośrednio wykorzystane!
Ponieważ nie chcemy ingerować w system plików naszego dysku, określmy, co będzie nam potrzebne na początek:
Komputer zdolny do uruchomienia się z płyty LiveCD (oczywiście nie musi zawierać napędu CD-ROM/DVD, jeśli zamierzamy skorzystać z obrazu płyty)
Płyta lub obraz płyty LiveCD.
Bootloader (grub) - zainstalowany i skonfigurowany.
Jeśli jesteś użytkownikiem systemu *buntu prawdopodobnie wszystkie powyższe wymagania są już spełnione, zatem do dzieła:
Na prawie dowolną* partycję (do katalogu głównego) na dysku twardym skopiujemy katalogi casper oraz .disk z płyty LiveCD. W rzeczywistości w katalogu /casper musi znajdować się tylko jeden plik: filesystem.squashfs. Pliki vmlinuz oraz initrd.gz mogą znajdować się gdziekolwiek, byle pozostały osiągalne dla programu rozruchowego grub. Pozostałe pliki z owego katalogu w ogóle nie są nam potrzebne!
* obsługiwane systemy plików to vfat, iso9660, udf, ext2, ext3 oraz w pewnym stopniu ntfs. Ten ostatni wymaga dodatkowego zabiegu - jądro (vmlinuz) oraz system plików ramdysku (initrd.gz) muszą znaleźć się na dowolnym obsługiwanym w pełni przez grub systemie plików.
W części drugiej cyklu dowiemy się, w jaki sposób do listy powyższych systemów plików „dołączyć” choćby ReiserFS.
Zapamiętaj na jaką partycję kopiujesz ów katalog (np. że jest to /dev/sda5)
Uruchom ponownie komputer, a gdy pojawi się menu programu rozruchowego grub wciśnij przycisk c aby przejść do linii komend.
W linii komend wpisz:
root (hd0,4) # dla /dev/sda5, (hd0,0) dla /dev/sda1, itd
kernel=/casper/vmlinuz boot=casper
initrd=/casper/initrd.gz
boot
# jeśli jądro lub initrd zostało skopiowane w inne miejsce, należy odpowiednio zmodyfikować ścieżki. Zamiast powyższej procedury możemy wtedy użyć podobnej do poniższej:
kernel=(hd0,4)/katalog/vmlinuz boot=casper
initrd=(hd0,4)/katalog/initrd.gz
Jeśli nie popełniliśmy żadnej pomyłki, nasze LiveCD uśmiechnie się do nas uruchomione z dysku twardego.
Powyższe uruchamia jądro zapisane w katalogu /casper. Dodatkowa informacja boot=casper powoduje, iż “bootowanie” odbędzie się w specjalnym “trybie” casper. W skrócie obraz systemu initrd.gz po załadowaniu „postara się” odszukać obraz systemu plików poszukując na dysku/płycie pliku /casper/*.squashfs, /casper/*.ext2, lub /casper/*.dir
„Odkryliśmy” właśnie, że Ubuntu możemy uruchomić z prawie dowolnego nośnika danych, w tym choćby pamięci USB (pendrive). Pewną niedogodnością dla nas jest oczywiście wymóg, aby plik zawierający skompresowany system plików systemu docelowego znajdował się w katalogu casper, a ten w katalogu głównym partycji. Możemy oczywiście wspomóc się linkami symbolicznymi i umieścić wspomniane dane gdziekolwiek! Nie jest to zbyt niewygodne, a przy tym nieuciążliwe, jednak w kolejnej części pozbędziemy się tej małej niedogodności wprowadzając „udoskonalenia” do domyślnego „ramdysku” initrd.
Instalacja Ubuntu bez użycia instalatora
Potrafimy już uruchomić komputer w sesji LiveCD bez płyty, a czy możemy „zainstalować” Ubuntu z LiveCD bez instalatora? Oczywiście! I choć może brzmieć to przerażająco, to jednak sama procedura jest wyjątkowo prosta i wymaga zaledwie kilku poleceń w konsoli!
Nasz „magiczny” obraz systemu plików zapisany na płycie jest dokładnie tym, czym go nazywamy. Jeśli skopiujemy jego zawartość na dysk, to 95% procesu instalacji *buntu mamy już za sobą! Zróbmy więc to:
Tworzymy punkt montowania oraz montujemy skompresowany system plików:
sudo mkdir /media/squash
sudo mount -o loop /media/cdrom0/casper/filesystem.squashfs /media/squash # /media/cdrom zastępujemy miejscem gdzie zamontowana jest płyta LiveCD/jej obraz.
Kopiujemy zawartość obrazu na partycję docelową (w przykładzie /dev/sda5 zamontowanej do /media/sda5):
sudo cp -a /media/squash/. /media/sda5
Kosmetyka w środowisku chroot:
sudo chroot /media/sda5 /bin/bash
adduser nazwa_użytkownika
gpasswd -a nazwa_użytkownika admin
wciskamy ctrl+d aby opuścić środowisko chroot.
Pozostało nam jeszcze poprawić 4 pliki:
sudo gedit /media/sda5/etc/sudoers
dopisujemy tam następującą linię:
%admin ALL=(ALL) ALL
Prawidłowo należałoby do edycji pliku sudoers użyć polecenia visudo w środowisku chroot, jednak gedit również nadaje się do tego wyśmienicie ;)
sudo gedit /media/sda5/etc/hostname
w którym powinien znaleźć się jeden wyraz określający nazwę naszego komputera (hosta)
sudo gedit /media/sda5/etc/hosts
którego zawartość uzupełniamy następująco:
127.0.0.1 nazwa_komputera_ustalona_w_poprzednim_kroku
natomiast plik /media/sda5/fstab musimy uzupełnić treścią podobną do poniższej:
# proc
proc /proc proc defaults 0 0
# partycja root
/dev/sda5 / ext3 defaults 0 1
# partycja wymiany (swap)
/dev/sda2 none swap sw 0 0
# cdrom/dvd
/dev/hda /media/cdrom0 udf,iso9660 user,noauto 0 0
Jeśli planujemy umieścić /home na innej partycji, powinniśmy ową partycję wcześniej zamontować do przykładowego /media/sda5/home oraz dodać odpowiedni wpis do pliku fstab.
Tak przygotowany system jest już gotowy do uruchomienia. Pozostało kilka nieścisłości - brak nam języka polskiego. Pozostało wiele innych pakietów językowych, które instalator usunąłby automatycznie. Nasz użytkownik powinien dodatkowo znaleźć się w grupach audio, video, cdrom itd. jednak bardzo łatwo możemy wykonać to z poziomu narzędzi administracyjnych naszego systemu po uruchomieniu, lub też skorzystać ze znanego już nam polecenia gpasswd oraz nieśmiertelnego apt-get!
Czas na wielką próbę ;) naszego “dzieła”. Aby wygodnie uruchamiać system możemy zasilić plik /boot/grub/menu.lst naszego gruba wpisem podobnym do tego:
title Ubuntu
root (hd0,4)
kernel /boot/vmlinuz-2.6.22-14-generic root=/dev/sda5 ro locale=pl_PL
initrd /boot/initrd.img-2.6.22-14-generic.bak
lub też po załadowaniu się listy systemów przejść do konsoli gruba wciskając c, a następnie wydać ciąg poleceń:
root (hd0,4)
kernel /boot/vmlinuz-2.6.22-14-generic root=/dev/sda5 ro locale=pl_PL
initrd /boot/initrd.img-2.6.22-14-generic.bak
Gratulacje! Udało się! Teraz z uśmiechem na ustach pomyśl o tych terabajtach transferu, które zostały wygenerowane, gdy pobierano wersję alternate, ponieważ komputer nie uruchamiał się poprawnie z płyty LiveCD ;)