2006.12_GRUB_[Programowanie].pdf

(1137 KB) Pobierz
439031682 UNPDF
programowanie
Grub
GRUB
Adam Becmer
Program rozruchowy ( bootloader ) to element, który rzadko przykuwa uwagę początkujących
użytkowników. Warto jednak przyjrzeć mu się trochę bliżej, ponieważ odpowiedni jego wybór
i koniguracja potraią bardzo ułatwić życie – szczególnie tym, zainteresowanym posiadaniem
wielu systemów operacyjnych, eksperymentującym z kompilacją jądra Linuksa (Linux), czy choćby
korzystającym z klawiatury USB
Output System ) testuje sprzęt ( POST - Power On
Self Test ), inicjalizuje ważne struktury systemu
(programuje kontrolery przerwań, DMA, ini-
cjuje tablicę wektorów przerwań) i przekazuje sterowanie
do urządzenia, które ustawiono jako rozruchowe. Najczę-
ściej będzie to dysk twardy. Jego pierwszy sektor – zwa-
ny MBR ( Master Boot Record ( Sector )) – powinien zawierać
program, który zapewni prawidłowy start systemu opera-
cyjnego. Użytkownicy oprogramowania opartego na wol-
nych źródłach ( Open Source ) mają do wyboru właściwie
dwa takie programy – LILO ( LInux LOader ) oraz GRUB
( GRand Uniied Bootloader ). Ten drugi posiada nieporówny-
walnie większe możliwości, jest elastyczniejszy i lepiej
konigurowalny.
– 0x55aa (w notacji szesnastkowej). Nas interesuje wyłącz-
nie bootstrap – to tam (w zaledwie 446 bajtach!) musi się
zmieścić cały kod programu rozruchowego.
Zawartość MBR dysku /dev/hda można obejrzeć dzię-
ki poleceniu:
# cfdisk -P r /dev/hda
Tak niewielka przestrzeń zdeterminowała dwa różne po-
dejścia programistów LILO i GRUB-a. LILO w całości znaj-
duje się właśnie w sektorze rozruchowym, GRUB zaś po-
dzielony jest na części, tak zwane piętra ( stage ), z których
tylko jedna - stage1 – zlokalizowana jest w MBR. Każde
z rozwiązań ma swoje zalety i wady. LILO jest niezależ-
ne od dalszej zawartości dysku, będzie działać nawet po
usunięciu czy całkowitej reorganizacji partycji. GRUB mu-
si zawsze posiadać swoje pliki koniguracyjne i obraz dru-
giego piętra ( stage2 ) w systemie plików. Ze względu na
tę cechę korzystający z GRUB-a powinni posiadać odro-
binę większą wiedzę o działaniu swojego programu roz-
ruchowego – choć także nieszczególnie tajemną czy trud-
ną do przyswojenia. Z drugiej strony przeniesienie części
Kilka słów o MBR
MBR ma wielkość 512 bajtów, można go podzielić funk-
cjonalnie na trzy obszary. Pierwsze 446 bajty to tzw. bo-
otstrap. Dalsze 64 b zajmuje główna tablica partycji, skła-
dająca się z czterech 16-bajtowych pól (opisujących cztery
partycje podstawowe). Końcowe dwa bajty to sygnatura
48
grudzień 2006
P o uruchomieniu komputera BIOS ( Basic Input-
439031682.038.png 439031682.039.png 439031682.040.png 439031682.041.png
 
programowanie
Grub
programu w inne partie dysku usunęło ogra-
niczenie wynikające z niewielkiego rozmiaru
MBR – dzięki czemu GRUB mógł stać się tak
elastycznym narzędziem, wyposażonym we
własną powłokę ( shell ) z dopełnianiem pole-
ceń (tab- complementation ) oraz w obsługę sys-
temów plików.
GNU binutils w wersji 2.9.1.0.23
lub wyższej.
Listing 2. Dopełnianiem poleceń po naciśnięciu
klawisza TAB
Ściągamy i rozpakowujemy archiwum z ko-
dem źródłowym:
grub > ro [ NACISKAMY TAB ]
Possible commands are : root
rootnoverify
grub > root ( hd [ NACISKAMY TAB ]
Possible disk are : hd0 hd1 hd2
hd3 hd4
grub > root ( hd0 , [ NACISKAMY TAB ]
Possible partitions are :
Partition num : 0 , Filesystem
type is reiserfs , partition type
0x83
Partition num : 1 , Filesystem
type is reiserfs , partition type
0x83
grub > root ( hd0 , 0 )
Filesystem type is reiserfs ,
partition type 0x83
$ wget ftp://alpha.gnu.org/gnu/grub/
grub-0.97.tar.g z
$ tar -xzvf grub-0.97.tar.gz
Instalacja
Zwykle instalatory najnowszych dystrybu-
cji GNU/Linuksa w swej podstawowej funk-
cjonalności (bez specjalnych zabiegów, jak np.
przełączenie się w tryb expert ) nie pozostawia-
ją nam wyboru i instalują wybrany przez deve-
loperów program rozruchowy. Co zrobić, gdy
jest nim akurat LILO? Przejście na GRUB-a jest
operacją bezbolesną i nie wiąże się z żadnym
niebezpieczeństwem dla naszych danych. (W
ten sposób możemy stwierdzić, czy w naszym
systemie znajduje się grub :) Aby dowiedzieć się,
czy w naszym systemie znajduje się grub, nale-
ży wydać polecenie:
Konigurujemy i kompilujemy:
$ cd grub-0.97
$ ./conigure && make
Jeżeli pojawiły się komunikaty o błędach, to
musimy doinstalować brakujące składniki i
krok powtórzyć. W przeciwnym wypadku
logujemy się na konto root i instalujemy (bę-
dąc cały czas w tym samym katalogu):
# make install
$ whereis grub
Przyjrzyjmy się teraz zawartości katalogu
/usr/local/lib/grub/i386-pc (zakładając,
że w naszym systemie domyślny preix insta-
lowanych przez użytkownika programów to
/usr/local/lib ):
Właściwy program rozruchowy zawar-
ty jest w obrazie stage2 . Żeby ten załado-
wał się z systemu plików, potrzebny jest po-
most w postaci stage1.5 (ładowany przez
stage1) – który to potrai rozumieć określo-
ny system plików. Stage1.5 zwykle zapisa-
ny zostaje w kolejnych 153 sektorach, bezpo-
średnio za MBR – standardowo miejsce to nie
jest używane. Stage1.5 nie jest obligatoryjny
stage1 może bezpośrednio załadować sta-
ge2 , pod warunkiem, że ten ostatni jest w ści-
śle określonym sektorze dysku i informacja ta
jest zapisana w stage1.
(domyślnie /boot/grub , katalog /boot mo-
żemy zmienić dodając opcję --root-direc-
tory=KATALOG ).
Inny sposób bazuje na operacjach w po-
włoce GRUB:
Odpowiedź podobna do tej:
grub: /sbin/grub
/lib/grub
/usr/share/man
/man8/grub.8.gz
# grub –no-loppy
Po chwili powinien pojawić się znak zachęty:
oznacza, że binaria są obecne i gotowe do in-
stalacji w MBR.
Jak zdobyć GRUB-a? Wszystkie znane mi
dystrybucję (z pominięciem oczywiście tych
najmniejszych, dyskietkowych) posiadają go
w swoich repozytoriach. W popularnych wy-
daniach GNU/Linuksa zalecanym sposobem
instalacji jest posłużenie się menedżerem pa-
kietów. Jeżeli jednak z jakiegoś powodu chce-
my kompilować ze źródeł, to musimy posia-
dać w systemie:
grub >
Listę dostępnych poleceń wyświetli komen-
da help . Pierwsze, co musimy zrobić, to wska-
zać urządzenie, na którym znajduje katalog
główny GRUB – służą do tego komendy root
i rootnoverify . Wszystkie istniejące (i tylko
takie) urządzenia ponumerowane są od zera.
Dyski twarde to hd0, hd1, ... hdn – naj-
pierw liczone są te z interfejsem ATA, następ-
nie SCSI/SATA ; stacje dyskietek – fd0, fd1,
..., fdn . Numeracja ta zapisana jest w pli-
ku device.map (standardowo /boot/grub/
device.map ). Przykłady takich plików dla
różnych koniguracji:
Instalacja na twardym dysku
w MBR
Istnieją dwa sposoby instalacji GRUB-a na
twardym dysku. Pierwszy polega na uru-
chomieniu programu grub-install. Jeżeli nie
mamy stacji dyskietek, to możemy dodać --
no-loppy , co skróci znacznie czas oczekiwa-
nia podczas skanowania urządzeń. Jako pa-
rametr podajemy urządzenie, na którym ma
zostać zainstalowany GRUB:
gcc w wersji 2.95 lub wyższej;
GNU Make;
Listing 1. Zawartości katalogu /usr/local/lib/grub/
i386-pc
• jeden dysk twardy ATA podłączony jako
master na pierwszym kanale ( /dev/hda )
i jedna stacja dyskietek ( /dev/fd0 ); de-
vice.map:
(hd0) /dev/hda
(fd0) /dev/fd0
• dwa dyski twarde ATA, obydwa na dru-
gim kanale, jeden master (/dev/hdc),
drugi slave (/dev/hdd):
(hd0) /dev/hdc
(hd1) /dev/hdd
$ ls / usr / local / lib / grub / i386 - pc
efs2_stage1_5 jfs_stage1_5
stage1 ufs2_stage1_5
fat_stage1_5 minix_stage1_5
stage2 vstafs_stage1_5
ffs_stage1_5 reiserfs_stage1_5
stage2_eltorito xfs_stage1_5
iso9660_stage1_5
# grub-install –-no-loppy /dev/hda
Dodatkowo polecenie samo zadba o sko-
piowanie plików z /usr/local/lib/grub/
i386-pc/ (przydatne, jeżeli kompilowali-
śmy ze źródeł) do odpowiedniego katalogu
www.lpmagazine.org
49
439031682.001.png 439031682.002.png 439031682.003.png 439031682.004.png 439031682.005.png 439031682.006.png 439031682.007.png 439031682.008.png 439031682.009.png 439031682.010.png 439031682.011.png 439031682.012.png 439031682.013.png 439031682.014.png
 
programowanie
Grub
Listing 3. Uruchamianie systemu
Listing 4. System, który wybrany był przy poprzednim uruchomieniu komputera
# sekcja globalna, dotyczy
wszystkich wpisów:
default 0
# (default określa numer wpisu,
który ma uruchomić się domyślnie;
# tutaj właściwie niepotrzebny,
gdyż wartość 0 jest domyślna)
timeout 0
# (po timeout podajemy liczbę
sekund, jaką GRUB ma odczekać
# przed uruchomieniem domyślnego
wpisu)
hiddenmenu
# (nie chcemy wyświetlania menu;
nie będzie widoczne domyślnie,
jednak będzie
# można je wywołać przez
przytrzymanie klawisza ESC)
# tu (się) zaczynają się właściwe
wpisy:
title Nazwa wyswietlana w menu
root ( hd0 , 0 )
# (root określa partycję główną
GRUB-a, nie mylić z partycją root
systemu (/)!)
kernel ( hd0 , 0 ) / boot / vmlinuz root = /
dev / hda1 ro
# (wskazuje lokalizację jądra
# po root= podajemy partycję główną
– ale tym razem systemu, tj. /
# ro oznacza, że system plików
znajdujący się na niej zostanie
zamontowany w trybie
# tylko do odczytu)
initrd ( hd0 , 0 ) / boot / initrd . img
# (wskazuje lokalizację obrazu
initrd, jeżeli nie korzystamy z
initrd.img
# to opcje t ę pomijamy )
default saved
# (w połączeniu z występującą dalej opcją savedefaults sprawia, że
uruchomiony zostaje
# wpis wybrany przy poprzednim rozruchu)
timeout 5
color cyan / blue white / blue
# (zmieniamy kolory menu – domyślnie była czerń i biel)
title Debian GNU / Linux , kernel 2.6 . 15
root ( hd0 , 0 )
# (root wskazuje na naszą partycję /boot)
kernel / vmlinuz - 2.6 . 15 root = / dev / hda2 ro
# (GRUB będzie szukał pliku z jądrem na partycji określonej wcześniej
przez parametr root
# równie dobrze można było podać, jak w poprzednim przykładzie,
# jawnie (hd0,0)/vmlinuz-2.6.15; /dev/hda2 to partycja / Debiana)
savedefault
title Mandriva , kernel 2.6 .15 fb
root ( hd0 , 0 )
kernel / vmlinuz - 2.6 .15 fb root = / dev / hda3 ro vga = 0x305
# (po vga podajemy żądany tryb wideo, w którym będzie pracowała konsola
# tu mamy jądro z buforem ramki (framebuffer), więc możemy użyć trybu
0x305
# tryby będą wyszczególnione dalej; dwie specjalne wartości dla vga, to
# normal – standardowy tryb vga dostępny dla wszystkich standardowych kart
# ask – podczas uruchamiania wybieramy tryb z wyświetlonej listy)
initrd / initrd . img - 2.6 .15 fb
savedefault
title Windows
rootnoverify ( hd0 , 4 )
# (Windows na pierwszej partycji logicznej, nie próbujemy jej montować)
chainloader ( hd0 , 4 )+ 1
# (wczytujemy jeden sektor z początku partycji (hd0,4);
# tam znajduje się ntldr – loader windowsa;
# w związku z tym, że partycja (hd0,4) jest wskazana przez rootnoverify,
moglibyśmy
# użyć samego chainloader +1)
savedefault
ki, nawet wtedy, gdy w rzeczywistości wszyst-
kie podstawowe nie zostały utworzone i wolne
są niższe numery. Numer podajemy w nawia-
sie, oddzielony od numeru urządzenia prze-
cinkiem:
głównego GRUB. Możemy także posłużyć się
dopełnianiem poleceń po naciśnięciu klawisza
TAB (tab-complementation):
Inną metodą odnalezienia właściwej par-
tycji jest użycie komendy ind :
• trzy dyski SCSI ( /dev/sda, /dev/sdb, /dev/sdc )
na jednym kanale, jeden ATA jako master
na drugim kanale ( /dev/hdc ):
(hd0) /dev/hdc
(hd1) /dev/sda
(hd2) /dev/sdb
(hd3) /dev/sdc
/dev/hda1 – pierwsza partycja podstawo-
wa na dysku ATA master pierwszego ka-
nału – ( hd0,0 )
/dev/hdc5 – pierwsza partycja logiczna
dysku ATA master drugiego kanału, za-
kładając, że jest to drugi dysk w systemie
– ( hd1,4 )
/dev/sda6 – druga partycja logiczna dys-
ku SCSI, jedynego napędu w systemie
– ( hd0,5 )
grub> ind /grub/stage2 (hd0,0)
grub> root (hd0,0)
Ponadto dyski może reprezentować numer,
pod jakim widzi je BIOS. Dla hda będzie to
(0x80) lub (128) zależnie od tego, czy posłu-
gujemy się notacją szesnastkową, czy dzie-
siętną.
Partycje numerowane są także od zera.
Podstawowe mogą być tylko cztery, więc za-
rezerwowane są dla nich oznaczenia 0, 1, 2, 3.
Partycje logiczne zawsze zaczynają się od czwór-
Polecenie rootnoverify jest bardzo podobne,
z tym, że GRUB nie próbuje wtedy montować
partycji – przydatne jest w sytuacjach, kiedy
uruchamiamy system operacyjny znajdujący
się w obszarze dysku, którego nasz program
rozruchowy nie potrai przeczytać. Rootnoveri-
fy będziemy stosować do ładowania np. syste-
mu Windows.
Następnym krokiem jest uruchomienie
samej instalacji w MBR pierwszego dysku:
Znając już te zasady, bez problemu powin-
niśmy podać w powłoce lokalizację katalogu
50
grudzień 2006
439031682.015.png 439031682.016.png 439031682.017.png 439031682.018.png
 
programowanie
Grub
Listing 5 Linux i Windows
grub> setup (hd0,0) <- teraz tu jest
numer partycji, nie dysku
grub> quit
# mke2fs /dev/fd0
# mkdir -p /media/loppy && mount -t
ext2 /dev/fd0 /media/loppy
I tutaj podstawowa różnica – zmieniamy
katalog główny (root):
# grub-install -–root-directory=/
media/loppy /dev/fd0
Nie zapominamy odmontować!
# umount /media/loppy
default 0
timeout 5
fallback 1
# (jeżeli uruchomienie domyślnego
wpisu 0 się nie powiedzie, ładowany
wpis nr 1)
color cyan / blue white / blue
title Linux
root ( hd0 , 0 )
kernel / boot / vmlinuz ro vga = 0x305
title Linux single
root ( hd0 , 0 )
kernel / boot / vmlinuz - generic ro
init = / bin / bash
# (opcja init=/bin/bash wymusza
załadowanie powłoki bash z
pominięciem skryptów
# init; od razu dostajemy konto
root)
title Windows
rootnoverify ( hd1 , 0 )
makeactive
# (czynimy partycję aktywną)
map ( hd0 ) ( hd1 )
map ( hd1 ) ( hd0 )
# (oszukujemy system zmieniając
kolejność dysków; Windows będzie
odnosił wrażenie,
# że startuje z pierwszego napędu)
chainloader ( hd1 , 0 )+ 1
Analogicznie, z użyciem programu grub-in-
stall:
# grub-install –-no-loppy /dev/hda1
Uwaga! Tak zainstalowany GRUB nie bę-
dzie się w stanie uruchomić samoczynnie
po włączeniu komputera. W MBR dysku,
do którego BIOS przekazuje sterowanie, mu-
si już znajdować się jakiś program rozrucho-
wy (np. kolejny GRUB, LILO, isolinux, sysli-
nux, ntldr – loader Windows), który poprzez
mechanizm chainload wczyta i uruchomi kod
z zerowego sektora tej właśnie partycji. Przy-
kład uruchomienia GRUB-a z partycji ( hd0,0 )
za pomocą innego GRUB-a z MBR – fragment
pliku koniguracyjnego tego drugiego:
Instalacja na płycie CD
Konieczny będzie plik stage2_eltorito z ka-
talogu GRUB-a oraz program do tworzenia ob-
razu iso – mkisofs . Do wypalenia płyty zastosu-
jemy cdrecord .
Tworzymy katalog:
$ mkdir grub-cd
W nim przygotowujemy odpowiedni dla
GRUB-a układ katalogów i plików:
title GRUB z hd0,0
root (hd0,0)
chainload +1
$ mkdir -p grub-cd/boot/grub
$ ind /usr -name stage2_eltorito -exec
cp '{}' grub-cd/boot/grub/ \;
Instalacja na dyskietce bez sys-
temu plików
Dyskietka z programem rozruchowym mo-
że być bardzo przydatna w sytuacjach awa-
ryjnych – daje dostęp do powłoki GRUB, co
umożliwia znalezienie na dysku jądra i uru-
chomienie go. Równie dobrze może posłużyć
także jako loader Windows.
Zrobienie takiej dyskietki będzie polega-
ło na zapisaniu do jej zerowego sektora obra-
zu stage1, następnie bezpośrednio za nim, w
kolejnych 153 sektorach, stage2. Wykorzy-
stamy program do kopiowania blokowego
dd . Dyskietki nie montujemy, nie musimy
tworzyć na niej systemu plików. Zakładam,
że mamy poprawnie zainstalowany GRUB ze
swoim katalogiem głównym w /boot :
Oczywiście możemy także umieścić własny
plik koniguracyjny menu.lst . Z katalogu grub-
cd robimy uruchamialny obraz iso :
$ mkisofs -R -b boot/grub/stage2_
eltorito -no-emul-boot -boot-load-size
4 -boot-info-table -o grub-cd.iso
grub-cd
grub> setup (hd0)
Checking if ″/boot/grub/stage1″
exists... no
Checking if ″/grub/stage1″ exists...
yes
Checking if ″/grub/stage2″ exists...
yes
Checking if ″/grub/e2fs_stage1_5
exists... yes
Running ″embed /grub/ef2fs_stage1_5
(hd0)″... 15 sectors are embedded.
succeeded
Running ″install /grub/stage1
(hd0)1+15 p (hd0,0)/grub/stage2 /grub/
menu.lst″... succeeded
Done.
Nagrywamy płytę (odpowiednio zmieniając
w razie potrzeby /dev/hdc i wartość speed ):
# cdrecord -dev=/dev/hdc -speed=8
grub-cd.iso
Plik koniguracyjny menu.lst
Posługiwanie się powłoką podczas każdego
uruchomienia komputera w celu wskazania
# cd /boot/grub
# dd if=stage1 of=/dev/fd0 bs=512
count=1
1+0 records in
1+0 records out
# dd if=stage2 of=/dev/fd0 bs=512
seek=1
153+1 records in
153+1 records out
Gotowe.
Listing 6. Hasła skrótu (hash) md5
# grub
grub > md5crypt
Password : ***********
Encrypted : $ 1 $ mVk4b1 $1 ocssU8DMrqa .
Fqh3lwZX0
grub > quit
Otrzymany skr ó t wstawiamy do sekcji
globalnej ( gdzie ś na pocz ą tek )
pliku menu . lst :
password -- md5 $ 1 $ mVk4b1 $1 ocssU8DMr
qa . Fqh3lwZX0
Instalacja na twardym dysku,
na początku partycji
Instalacja wygląda bardzo podobnie, jednak
zamiast oznaczenia dysku podajemy nazwę
partycji. Np. instalacja na początku pierwszej
partycji podstawowej dysku hda:
Instalacja na dyskietce
z systemem plików
Tworzymy system plików (tutaj ext2 ) i mon-
tujemy dyskietkę:
# grub
grub> root (hd0,0)
52
grudzień 2006
439031682.019.png 439031682.020.png 439031682.021.png 439031682.022.png 439031682.023.png
 
programowanie
Grub
Listing 7. Wprowadzenie drugiego hasła
na końcu linijki kernel). Poza tym polece-
nie cat tejże powłoki nie respektuje ustawio-
nych w systemie plików uprawnień i pokaże
bez szemrania dowolnej osobie np. /etc/passwd
czy /etc/shadow . Należałoby więc program roz-
ruchowy zabezpieczyć. GRUB daje możliwość
ustawienia własnego hasła, co pozwala na za-
rezerwowanie opcji interaktywnych wyłącznie
dla administratora.
Robimy z hasła skrót ( hash ) md5 :
Dodatkowo hasło możemy sprawdzać
także przed uruchomieniem określonego wpi-
su. W tym przykładzie Linux będzie dostępny
tylko dla zaufanej osoby:
wisz przerwie odliczanie czasu przed uru-
chomieniem domyślnego wpisu (opcja time-
out ). Strzałkami góra-dół wskazujemy kolejne
wpisy, naciśnięcie enter powoduje uruchomie-
nie, klawiszem [ e ] przejdziemy do trybu edycji.
W trybie tym możemy poprawić ustawienia
zdeiniowane w pliku menu.lst. Pełną interak-
tywność uzyskujemy naciskając ' c '. Posługując
się znanymi już opcjami uruchamiamy jądro:
default 1
timeout 3
password -- md5 $ 1 $ mVk4b1 $1 ocssU8DMr
qa . Fqh3lwZX0
title Linux
lock
# (ta linijka wymusza podanie hasła
przed uruchomieniem wpisu; powinna
być
# zawsze zaraz za title)
root ( hd0 , 0 )
kernel / vmlinuz ro
title Windows
rootnoverify ( hd0 , 1 )
makeactive
chainloader + 1
Błędy
Co robić, gdy system przestał się uruchamiać?
Posiadacze GRUB-a są często w lepszej sytuacji
– gdyż bywa, że sam program rozruchowy ła-
duje się prawidłowo; z jego poziomu zaś może-
my sterować uruchomieniem systemu opera-
cyjnego. Najlepiej jednak zawsze posiadać dys-
kietkę rozruchową (uruchomieniową) z GRUB-
em, wykonaną w opisany wcześniej sposób.
W sytuacjach awaryjnych zaoszczędzi nam ner-
wów. Błędy zgłaszane przez GRUB możemy
podzielić na trzy grupy – błędy stage1 , sta-
ge1.5 oraz stage2 .
Po ukazaniu się błędu stage1 pozostaje
nam tylko jedno – Ctrl+Alt+Del . Program
rozruchowy nie załadował najbardziej pod-
stawowej składowej. Sprawdzamy, czy pro-
blem nie jest natury sprzętowej (odpowiednio
podłączone taśmy dysków, dobre ustawienia
w BIOS-ie) i restarujemy. Jeżeli nie pomoże, to
musimy użyć dyskietki ratunkowej lub płyty
live-cd. Komunikaty błędów tego etapu:
Splashimage
GRUB zamiast standardowego menu pozwa-
la na wyświetlenie tzw. splashimage , czyli ob-
razka w rozdzielczości 640x480 w 14 kolorach.
Sprawdźmy, czy nasza wersja posiada obsłu-
splashimage (pomysł przeszukiwania stage2
zaczerpnięty ze skryptu Luisa Rodrigueza):
właściwego do załadowania jądra (i przeka-
zania odpowiednich parametrów) byłoby dość
niewygodne. Dlatego mamy do dyspozycji plik
menu.lst (standardowo /boot/grub/menu.lst ,
lokalizacja może zostać zmieniona za pomo-
cą komendy powłoki GRUB conigile ). Tu-
taj, w przeciwieństwie do LILO, po wprowa-
dzeniu zmian w koniguracji nie musimy robić
nic więcej – jest ona czytana bezpośrednio z pli-
ku. LILO po edycji /etc/lilo.conf wymagał
przeładowania, gdyż swoje ustawienia prze-
chowywał w MBR. Spójrzmy na kilka typo-
wych sytuacji i przygotujmy odpowiednie pli-
ki menu.lst (linie zaczynające się od znaku # są
komentarzem i nie będą brane pod uwagę):
# grep -iaq splashimage /boot/grub/
stage2 && echo OK
Powinno wyświetlić się OK. Zwykłą graikę
jpg można przekonwertować do wymaganej
postaci bardzo prosto dzięki ImageMagick:
$ convert obrazek.jpg -resize 640x480
-colors 14 obrazek.xpm
Sposób ten może jednak dawać niezadowala-
jące rezultaty (szczególnie, jeżeli chodzi o ko-
lory). Wtedy zaleca się użycie programu gimp
(menu Obraz->tryb->indeksowany , opcja wygene-
rowana optymalna paleta , ustawić kolory na 14,
dithering kolorów i dithering przezroczystości
wyłączone). Teraz kompresujemy programem
gzip i umieszczamy we właściwym katalogu:
Hard Disk Error – podczas wczytywa-
nia Stage1.5 lub Stage2 nie powiodła się
próba pobrania podstawowych informacji
o dysku – wielkości i geometrii;
Floppy Disk Error – błąd określenia
wielkości i geometrii dyskietki, także pod-
czas odczytu Stage1.5 lub Stage2;
Read Error – błąd odczytu Stage1.5 lub
Stage2;
Geom Error – błąd geometrii – oznacza,
że Stage1.5 lub Stage2 leży poza obsza-
• Mamy tylko GNU/Linuksa, jedno jądro.
Chcemy, żeby system uruchamiał się od
razu, bez wyświetlania menu.
• Dwa jądra Linux dwóch różnych dystry-
bucji i system Windows. Wspólna party-
cja /boot , dwie partycje / . Chcemy mieć
menu w estetycznych kolorach. Jeżeli nie
wskażemy inaczej, to po 5 sekundach zo-
staje załadowany system, który wybrany
był przy poprzednim uruchomieniu kom-
putera.
• Linux i Windows. Windows na dysku sla-
ve pierwszego kanału ATA (/dev/hdb).
Domyślnie po pięciu sekundach urucha-
miany Linux. Jeżeli uruchomienie Linuksa
się nie powiedzie, to uruchamiane inne ją-
dro w trybie single.
$ gzip obrazek.xpm
# cp obrazek.xpm.gz /boot/grub/
Dodajemy odpowiedni wpis do menu.ls t (sek-
cja globalna): splashimage=(hd0,0)/grub/ob-
razek.xpm.gz
Mamy do dyspozycji jeszcze dwie dodat-
kowe opcje: ustawienie koloru napisów ( fore-
ground ) i cienia ( background ).
Listing 8. Uruchamianie jądra
grub > root ( hd0 , 0 )
Filesystem type is ext2fs ,
partition type 0x83
grub > kernel / vmlinuz root = / dev /
hda1 ro
[ Linux - bzImage , setup = 0x1400 ,
size = 0x10a952 ]
grub > initrd / initrd . img
[ Linux - initrd @ 0xbac2000 ,
0x41e000 bytes ]
grub > boot
Tryb interaktywny
Większość opisanych słów kluczowych pliku
koniguracyjnego może być zastosowana w try-
bie interaktywnym GRUB-a. Standardowo po
załadowaniu programu rozruchowego wyświe-
tla się menu (chyba, że zostało schowane opcją
hiddenmenu lub wystąpił błąd). Dowolny kla-
Bezpieczeństwo GRUB-a.
Mając bezpośredni dostęp do powłoki GRUB,
możemy bez problemu zmienić w systemie ha-
sło konta root bez znajomości dotychczasowe-
go. Wystarczy modyikacja parametrów prze-
kazywanych do jądra (dodanie init=/bin/sh
www.lpmagazine.org
53
439031682.024.png 439031682.025.png 439031682.026.png 439031682.027.png 439031682.028.png 439031682.029.png 439031682.030.png 439031682.031.png 439031682.032.png 439031682.033.png 439031682.034.png 439031682.035.png 439031682.036.png 439031682.037.png
 
Zgłoś jeśli naruszono regulamin