dla początkujących
52
luty 2005
GRUB – program
uruchomieniowy
Piotr Machej
C
zym jest program uruchomie-
niowy (ang. bootloader) i czy
jest mi potrzebny do szczę-
ścia? Jest to program umiesz-
czony w początkowych sektorach dysku
twardego (np. w MBR – Master Boot
Record). BIOS, po uruchomieniu kompu-
tera i wykonaniu testów, przekazuje ste-
rowanie właśnie do programu zawartego
w MBR dysku wskazanego jako startowy,
czyli do naszego programu uruchomie-
niowego. Jego zadaniem jest załadowanie
systemu operacyjnego do pamięci i prze-
kazanie mu kontroli. Obecnie większość
popularnych programów uruchomienio-
wych pozwala na wybór jednego z sys-
temów zainstalowanych na dysku. Najpo-
pularniejsze tego typu programy, dostar-
czane wraz z dystrybucjami Linuksa, to
LILO i GRUB (Grand Unified Bootloader).
W niniejszym artykule postaram się przy-
bliżyć to drugie narzędzie.
Przykład użycia
Jestem tradycjonalistą. Nie ukrywam
tego. Z tego powodu przez bardzo długi
czas (szczególnie na studiach) urucha-
miałem Linuksa z dyskietki. Koledzy
z pokoju przez długi czas nie mogli dojść,
dlaczego uruchamia mi się inny system
niż im. No i po co w ogóle uruchamiać
system, na którym nie można pograć
w Dooma ? Później zacząłem korzystać
z LILO. Dzięki temu programowi rozru-
chowemu nie musiałem już pamiętać,
w której kieszeni została dyskietka.
Ponadto, mój komputer był już wtedy
bezpieczny od zakusów studenckiej
braci, więc mogłem sobie pozwolić na
odrobinę luksusu. I chociaż w kolej-
nych dystrybucjach miałem możliwość
zmiany na GRUB-a, przez kilka lat upar-
cie zostawałem przy LILO. Do zmiany
przekonało mnie moje własne lenistwo...
Po prostu, gdy po raz kolejny zapomnia-
łem uruchomić polecenie
lilo
po zmia-
nie w pliku konfiguracyjnym i musiałem
szukać dyskietki ratunkowej, powie-
działem: dość. Zainstalowałem GRUB-a
i od tej pory nie mam już powodów do
narzekań. I nawet jak przyjadą krewni,
to nie ma siły, aby uruchomili system,
którego nie powinni – przynajmniej
dopóki nie odgadną hasła.
Instalacja
Pakiety z programem GRUB można zna-
leźć w praktycznie każdej dystrybucji.
Co więcej, podczas instalacji dystrybu-
cji możemy wybrać program uruchomie-
niowy, z którego chcemy korzystać. Jeśli
zdecydujemy się na GRUB-a, to system
od razu postara się odpowiednio dosto-
sować jego konfigurację. Jeśli jednak nie
zdecydowaliśmy się na instalację GRUB-a,
musimy to zrobić teraz sami.
Na płycie CD/DVD
Na płycie CD/DVD znajdują się
narzędzia omawiane w artykule.
Rysunek 1.
Wersja GRUB-a obecnie
wykorzystywana w dystrybucjach nie jest
już rozwijana
53
dla początkujących
grub
www.lpmagazine.org
Przede wszystkim upewnijmy się,
że nie jest już zainstalowany. W przy-
padku Auroksa wykorzystamy do tego
polecenie
rpm -q grub
. Jeśli pojawi się
napis pakiet grub nie jest zainstalowa-
ny, to będziemy musieli zmienić ten stan
rzeczy. Pakiet z GRUB-em możemy zain-
stalować z kilku różnych źródeł. Pierw-
szym z nich są płyty, z których instalo-
waliśmy naszą dystrybucję. W przypadku
Auroksa pakiet znajduje się na pierwszej
płycie, więc po włożeniu jej do napędu
możemy wydać polecenia:
# mount /mnt/cdrom/
# rpm -Uvh /mnt/cdrom/Aurox/RPMS/
S
grub-0.94-5.i386.rpm
Drugim źródłem są repozytoria pakie-
tów. Jeśli korzystamy z jednego z syste-
mów zarządzania pakietami, to możemy
użyć odpowiedniego dla niego polece-
nia, np.:
# yum install grub
# apt-get grub install
# emerge grub
Oczywiście, wydajemy tylko jedno
z powyższych poleceń. Analogicznie
możemy wykorzystać system zarządzania
pakietami do aktualizacji wersji GRUB-a
(np. poleceniem
yum update grub
).
Mamy jeszcze trzecią możliwość.
Jeśli zależy nam na najnowszej wersji,
możemy ją pobrać ze strony domowej
projektu (http://www.gnu.org/software/
grub/ ). Ze względu na rozpoczęcie prac
nad GRUB 2, starsza wersja (linia 0.9.x,
wciąż jeszcze wykorzystywana w dys-
trybucjach) została przemianowana na
GRUB Legacy. Tutaj mamy dostępne jedy-
nie źródła, których instalacja przebiega
zwykłym torem – po pobraniu i rozpako-
waniu pliku (
tar xzvf grub-0.95.tar.gz
)
wchodzimy do utworzonego katalo-
gu i wydajemy polecenia:
./configure
i
make
. Następnie, po uzyskaniu upra-
wnień administratora (poleceniem
su -
),
wydajemy ostatnie polecenie:
make
install
. Lepszym rozwiązaniem jest
jednak skorzystanie z pakietów dostęp-
nych dla naszej dystrybucji.
Teraz musimy skonfigurować nasze-
go GRUB-a, a następnie umieścić go na
dysku.
Podstawowa konfiguracja
Główny plik konfiguracyjny GRUB-a to
/boot/grub/grub.conf. Zazwyczaj istnie-
ją również dwa dowiązania symbolicz-
ne do tego pliku: /boot/grub/menu.lst
oraz /etc/grub.conf (tak jest w Auroksie –
w innych dystrybucjach głównym pli-
kiem konfiguracyjnym może być jeden
z trzech wymienionych). Co prawda, nie
jest on konieczny, gdyż możemy korzy-
stać z linii poleceń GRUB-a, ale odpo-
wiednie skonfigurowanie pliku bardzo
ułatwi nam pracę. Dzięki temu nie
będziemy musieli każdorazowo przy uru-
chamianiu komputera wpisywać szeregu
poleceń, a w przypadku zainstalowania
wielu systemów będziemy mogli korzy-
stać z wygodnego menu.
Dyskietka ratunkowa
Przede wszystkim zadbajmy o to, aby
mieć dyskietkę lub płytę ratunkową. Dys-
kietkę mogliśmy utworzyć podczas insta-
lacji dystrybucji. Jeśli tego nie zrobiliśmy,
zazwyczaj możemy skorzystać z pierw-
szej płyty dystrybucji. Zazwyczaj nie ma
potrzeby korzystania z dyskietki ratunko-
wej, ale podczas zmiany programu roz-
ruchowego mogą pojawić się problemy,
które sprawią, że nie uda się nam uru-
chomić z systemów zainstalowanych na
dysku.
Uruchamianie Linuksa
Najpierw spróbujmy wykorzystać GRUB-a
do uruchamiania naszego Linuksa.
W tym celu powinniśmy mieć w pliku
/boot/grub/grub.conf przynajmniej cztery
linie:
title Aurox Linux (2.4.22-1)
root (hd0,7)
kernel /vmlinuz-2.4.22-1 ro root=LABEL=/
initrd /initrd-2.4.22-1.img
Pierwsza z nich, po słowie title, zawie-
ra tekst, który pojawi się w menu. Naj-
lepiej umieścić tu nazwę systemu (dys-
trybucji) oraz w nawiasie numer wersji
jądra. Oczywiście, możemy też podać
inne dodatkowe informacje (np. czy jest
wykorzystywany FrameBuffer), które
pomogą w zidentyfikowaniu pozycji
w menu.
Druga linia wskazuje, na jakiej par-
tycji jest umieszczony katalog /boot/.
W naszym przykładzie katalog /boot/
umieszczony jest na osobnej partycji,
/dev/hda8, natomiast główny katalog
systemowy / jest umieszczony na par-
tycji /dev/hda9 (oznaczonej etykietą / ).
Więcej o nazewnictwie partycji stoso-
wanym przez GRUB-a można przeczy-
tać w ramce Nazewnictwo dysków i par-
tycji.
W kolejnej linii określamy, które
jądro chcemy załadować. Po słowie
kernel podajemy ścieżkę do pliku
z jądrem (w naszym przykładzie vmli-
nuz-2.4.22-1), liczoną w stosunku do
partycji określonej linię wcześniej.
Ponieważ dla katalogu /boot/ w naszym
przykładzie mamy osobną partycję, to
podajemy ścieżkę /vmlinuz-2.4.22-1. Po
nazwie pliku jądra możemy podać
parametry jądra. W naszym przy-
padku określamy partycję z głów-
nym systemem plików (root). Wyja-
śnienie wartości LABEL=/ znajduje się
w ramce Nazewnictwo dysków i par-
tycji. Należy zwrócić uwagę, że słowo
root w tej linii ma inne znaczenie niż
w linii wcześniejszej. Tutaj jest to para-
metr jądra, wskazujący główny system
plików, natomiast słowo root, występu-
jące w drugiej linii, to komenda GRUB-a,
pozwalająca wskazać urządzenie, wzglę-
dem którego będą opisywane następne
ścieżki dostępu.
Ostatnia linia nie jest konieczna,
lecz jeśli tylko mamy utworzony plik
initrd odpowiedni dla naszego jądra, to
powinniśmy z niego skorzystać. Polece-
nie
initrd
zawarte w tej linii ładuje RAM-
dysk. To, czy go wykorzystamy, zależy od
konfiguracji naszego jądra.
Rysunek 2.
Podstawowe menu GRUB-a
nie wygląda zbyt atrakcyjnie
Rysunek 3.
Dokumentację GRUB-a
możemy również znaleźć na stronie
WWW
54
dla początkujących
luty 2005
Opcje ogólne
Oprócz powyższych czterech linii, warto
od razu dodać kilka innych, które określą
zachowanie naszego menu. Są to nastę-
pujące linie:
default=0
timeout=30
Umieszczamy je przed (podkreślam
– przed) wymienionymi wcześniej linia-
mi, zaraz na początku pliku /boot/grub/
grub.conf. Pierwsza z nich określa, która
pozycja menu będzie domyślnie wybra-
na. Jak wiemy, GRUB liczy od zera,
więc w naszym przykładzie wybraliśmy
pierwszą (i na razie jedyną) pozycję w
menu. Druga opcja wskazuje, że przez 30
sekund (możemy ustawić inną wartość)
GRUB będzie czekał na naszą decyzję.
Jeśli nie wciśniemy żadnego klawisza, to
uruchomi automatycznie pozycję menu
wskazaną w opcji default. W przypadku,
gdy użyliśmy opcji timeout bez korzysta-
nia z opcji default, uruchomiona zostanie
pierwsza zdefiniowana pozycja w menu.
Zapisywanie GRUB-a na dysk
Teraz już możemy zapisać GRUB-a na
dysk (jeśli jeszcze tego nie robiliśmy).
Zazwyczaj będziemy chcieli umieścić go
na pierwszym dysku. Służy do tego pole-
cenie
grub-install /dev/hda
.
Jeśli później zmienimy zawartość
pliku konfiguracyjnego /boot/grub/grub.
conf, to nie będziemy musieli ponow-
nie wykonywać tego polecenia. GRUB
automatycznie rozpozna zmiany w pli-
ku i podczas kolejnego uruchomie-
nia komputera wyświetli odpowied-
nie menu. W zasadzie jedyny przypa-
dek, gdy możemy chcieć wydać ponow-
nie to polecenie, to moment aktualizacji
GRUB-a do nowszej wersji.
Warto uruchomić ponownie kompu-
ter, aby sprawdzić, jak działa nasz GRUB.
Powinniśmy zobaczyć proste menu
z jedną pozycją do wyboru. Po jej zatwier-
dzeniu klawiszem [Enter] (lub odczeka-
niu 30 sekund) powinien załadować się
nasz Linux.
Uruchamianie różnych
systemów
Możliwości GRUB-a najlepiej wykorzysta-
my, jeśli mamy zainstalowane również inne
systemy operacyjne – bardzo wielu użyt-
kowników systemu spod znaku pingwi-
na korzysta również z Windows (choćby
po to, aby czasem pograć) lub z FreeBSD
(np. ze względu na studia czy pracę).
Inne dystrybucje Linuksa
W przypadku, gdy chcemy z pomocą
GRUB-a uruchamiać również inne dystry-
bucje Linuksa zainstalowane w naszym
komputerze, postępujemy tak samo, jak
w przypadku opisanym w rozdzia-
le Uruchamianie Linuksa. Wystarczy
dopisać kolejną sekcję zaczynają-
cą się od linii title i zawierającą odpo-
wiednie opcje. Tego samego sposo-
bu możemy zresztą użyć, gdy chcemy
przetestować nowe jądro w naszej dystry-
bucji. Przypuśćmy, że skompilowaliśmy
samodzielnie jądro i nazwaliśmy je
vmlinuz-new. Wówczas w pliku /boot/
grub/grub.conf możemy na końcu dopi-
sać następujące linie:
title Aurox Linux (2.4.22-1a)
root (hd0,7)
kernel /vmlinuz-new ro root=LABEL=/
initrd /initrd-2.4.22-1a.img
Jeśli nie wygenerowaliśmy RAM-dysku,
to nie dopisujemy ostatniej linii, a zamiast
root=LABEL=/ musimy podać odpowiednią
nazwę partycji (w naszym przykładzie
root=/dev/hda9). Jeśli o tym zapomnimy, to
nasz system przestanie się ładować na eta-
pie montowania głównego systemu plików.
Windows, DOS
Najprostszym sposobem na uruchamia-
nie systemów z rodziny Windows jest
umieszczenie na końcu pliku /boot/grub/
grub.conf następujących linii:
title DOS lub Windows
rootnoverify (hd0,0)
chainloader +1
Polecenie title już znamy. W linii rootno-
verify wskazujemy partycję, na której jest
W pliku konfiguracyjnym GRUB-a (/boot/
grub/grub.conf) zazwyczaj nie używa-
my znanych z Linuksa oznaczeń dysków
i partycji, takich jak hda, hdb2 i tym podob-
ne. Zamiast tego, widzimy oznaczenia typu
(fd0) lub (hd1,2). Jest to nieco mylące, na
początku, lecz można się szybko przyzwy-
czaić.
Opis (fd0) oznacza pierwszy napęd
dyskietek (należy pamiętać o nawia-
sach i braku odstępu pomiędzy znakami).
W przypadku dysków twardych nazwa
(hd0) odpowiada dyskowi hda, nazwa (hd1)
to dysk hdb itd. Jak więc widać, zamiast liter
używamy cyfr, zaczynając od zera. Aby
wskazać konkretną partycję, dodajemy jej
numer (znów licząc od zera) po przecinku.
Tak więc dla hda1 mamy (hd0,0), dla hda7
– (hd0,6), a dla hdc3 – (hd2,2). Wystarczy
w zasadzie pamiętać, że numerujemy od 0,
a nie od 1. Jeśli mamy wątpliwości, możemy
przypisanie nazw do dysków sprawdzić
w pliku /boot/grub/device.map. Dla kompu-
tera posiadającego tylko jeden napęd dys-
kietek i jeden dysk twardy, plik ten powinien
mieć następującą zawartość:
(fd0) /dev/fd0
(hd0) /dev/hda
W niektórych dystrybucjach (np. w Red
Hat i pochodnych – Fedora i Aurox) popu-
Nazewnictwo dysków i partycji
larne jest wskazywanie partycji za pomocą
etykiety. Jeśli w naszym pliku konfiguracyj-
nym mamy linię postaci:
kernel /vmlinuz-
2.4.22-1 ro root=LABEL=/
, to zwróćmy
uwagę na tekst root=LABEL=/. Zastępuje
on zwykły tekst postaci root=/dev/hda1 (jeśli
nasz katalog / jest umieszczony na partycji
hda1). Można zastanawiać się, co to daje i
czemu się tego używa. Zapis taki pozwala
nam swobodnie przekładać dysk w ramach
naszego komputera, np. w przypadku dokła-
dania nowego napędu lub nagrywarki. Jeśli
stosujemy etykiety, nie musimy wówczas
poprawiać plików konfiguracyjnych (m.in.
grub.conf i /etc/fstab).
Powstaje pytanie, jak odczytać i stwo-
rzyć etykiety dla partycji. Służy do tego
polecenie
e2label
/dev/hda1
, gdzie
zamiast /dev/hda1 wstawiamy nazwę par-
tycji ext2 lub ext3. Polecenie to spowoduje
wyświetlenie etykiety przypisanej do party-
cji. Jeśli chcemy nadać partycji nową etykie-
tę, to stosujemy zapis
e2label /dev/hda1
etykieta
.
Przy okazji warto zaznaczyć, że z ety-
kiet możemy korzystać tylko wtedy, gdy
ładujemy również odpowiadający jądru
RAM-dysk. Służy do tego polecenie
initrd
/initrd-2.4.22-1.img
, umieszczone pod
wspomnianą wcześniej linią pliku konfigu-
racyjnego.
55
dla początkujących
grub
www.lpmagazine.org
umieszczony system, który chcemy zała-
dować. Polecenie to różni się od polece-
nia root tym, że wskazana partycja nie
jest montowana. Polecenie chainloader
przekazuje kontrolę do następnego pro-
gramu rozruchowego. Jak to działa? Jeśli
na partycji /dev/hda1 mamy zainstalowa-
ny tylko pojedynczy system (np. DOS lub
Windows 98), to zostanie on uruchomio-
ny. Jeśli mamy na dysku zainstalowane
systemy Windows 98 i Windows XP, to
program uruchomieniowy zainstalowany
przez Windows XP potrafi obsłużyć oba
te systemy. Wystarczy więc w poleceniu
rootnoverify wskazać partycję, na której
jest zainstalowany program uruchomie-
niowy Windows XP. Dzięki temu, po
wybraniu w menu GRUB-a pozycji DOS
lub Windows, zobaczymy kolejne menu,
pozwalające nam wybrać pomiędzy Win-
dows 98 a Windows XP.
FreeBSD
Systemy z rodziny FreeBSD możemy uru-
chamiać w analogiczny sposób, jak Win-
dows i DOS, czyli korzystając z poleceń
rootnoverify i chainloader. Możemy też
wskazać dokładnie na program /boot/
loader z pomocą następujących linii
w pliku /boot/grub/grub.conf :
title FreeBSD
root (hd1,a)
kernel /boot/loader
Widać tu użycie innego nazewnictwa.
Wynika to stąd, że FreeBSD nazywa
swoje
partycje
literami
alfabetu,
a w dodatku wprowadza pojęcie slice
(tzw. plastra – natywnej partycji Fre-
eBSD). Jeśli więc mamy FreeBSD zain-
stalowane na pierwszej partycji drugie-
go dysku, to zapis (hd1,a) powinien być
odpowiedni. Wyszuka on pierwszy slice,
na którym znajduje się partycja a. Jeśli
chcemy dokładnie sprecyzować, który
slice ma być zamontowany, to możemy
użyć postaci (hd1,0,a).
Uruchamianie Memtest86+
Od czasu do czasu warto przetestować
pamięć naszego komputera, aby zawcza-
su wykryć wszelkie problemy. Dwa naj-
lepsze programy przeznaczone do tego
celu to Memtest86 i Memtest86+. GRUB
może nam pomóc w ich uruchomieniu.
Wystarczy wybrać jeden z wymie-
nionych programów, gdyż obydwa czer-
pią nawzajem ze swoich kodów źródło-
wych. Osobiście polecam Memtest86+.
Najpierw musimy pobrać odpowied-
ni plik ze strony domowej programu
(http://www.memtest.org/ ). Odnajduje-
my sekcję Download (Pre-built & ISOs),
w której znajdują się już skompilowane
wersje. Następnie z sekcji odpowiada-
jącej najnowszej wersji (w chwili pisa-
nia artykułu była to wersja 1.40) pobie-
ramy plik znajdujący się pod odnośni-
kiem Download – Pre-Compiled Boota-
ble Binary (.gz). Plik ma zaledwie
około 40 kB, więc jego pobieranie nie
powinno potrwać zbyt długo. Dla pew-
ności możemy sprawdzić, czy plik jest
poprawny. W tym celu wchodzimy do
katalogu, w którym znajduje się nasz
plik i wydajemy polecenie:
# md5sum memtest86+-1.40.bin.gz
Oczywiście, jeśli pobraliśmy nowszą
wersję, to musimy odpowiednio dosto-
sować nazwę pliku. W wyniku powin-
niśmy otrzymać ciąg znaków (tzw. skrót
MD5), który porównujemy z ciągiem
znaków umieszczonym obok odnośni-
ka do pliku na stronie domowej progra-
mu. Jeśli oba ciągi są takie same, możemy
przystąpić do następnych czynności.
Czas na rozpakowanie pliku. Doko-
nujemy tego poleceniem
gzip -d mem-
test86+-1.40.bin
. Następnie uzyskujemy
uprawnienia superużytkownika (wydaje-
my polecenie
su -
i podajemy hasło użyt-
kownika root), po czym kopiujemy plik
memtest86+-1.40.bin do katalogu /boot/.
Teraz pozostało nam odpowiednio zmo-
dyfikować plik konfiguracyjny GRUB-a.
Otwieramy go w naszym ulubionym edy-
torze (np. Vim) i na końcu dopisujemy
dwie linie:
title MEMTEST
root (hd0,7)
kernel /memtest86+-1.40.bin
Oczywiście, zamiast MEMTEST możemy
wstawić inny odpowiadający nam tytuł.
Pamiętajmy, że te linie dotyczą wciąż
naszego przykładu. Jeśli katalog /boot/
mamy na innej partycji, to musimy odpo-
wiednio dostosować wartości poleceń
root i kernel.
Po zapisaniu zmian możemy już zre-
startować system, a w naszym menu
powinna pojawić się nowa opcja – MEM-
TEST. Jeśli ją wybierzemy, uruchomi się
program Memtest86+ i od razu rozpocz-
nie testowanie pamięci. Opcje programu
są dostępne po wciśnięciu klawisza [c],
natomiast klawiszem [ESC ] możemy zre-
startować komputer, jeśli nie mamy czasu
na przeprowadzanie pełnego testu.
Upiększanie GRUB-a
Jeśli nie podoba nam się domyślny
wygląd menu GRUB-a, możemy spróbo-
wać je nieco ubarwić. Jedną z możliwo-
ści jest ustawienie lub zmiana rysunku
wyświetlanego w tle. Ponadto, możemy
dopasować kolory czcionki do naszych
upodobań.
Większość
dystrybucji
dostarcza
swoje własne tło dla GRUB-a, więc naj-
prawdopodobniej mamy już w pliku kon-
figuracyjnym odpowiednią opcję. Jest to
linia o zawartości podobnej do poniż-
szej:
splashimage=(hd0,7)/grub/splash.xpm.gz
Linia ta opcji splashimage przypisuje plik
splash.xpm.gz znajdujący się w katalo-
gu /grub/ na partycji /dev/hda8 (a więc
w naszym przykładzie plik ten znajduje
się w katalogu /boot/grub/ ).
Jeśli w naszym pliku nie ma takiej
linii, to należy ją dodać, odpowiednio
dopasowując wartości. Linia ta powin-
na być umieszczona przed pierwszą linią
title. Możemy ją wstawić zaraz poniżej
opcji timeout.
Powstaje pytanie, skąd wziąć rysunki.
Jak widać, w opcji splashimage nie poda-
jemy plików w popularnych formatach,
takich jak PNG czy JPG. Zamiast tego,
mamy tu plik w formacie XPM, skompre-
sowany programem Gzip. To nie jedyne
ograniczenie. Nasz obrazek może mieć
tylko 14 kolorów i rozdzielczość 640x480
pikseli. Nie brzmi to może zbyt zachęca-
jąco, ale zapewniam, że można przygo-
tować interesujące rysunki spełniające
te wymagania. Zacznijmy od obejrzenia
kilku przykładowych rysunków.
Rysunek 4.
Memtest86+ zajmuje niewiele
miejsca, lecz jest bardzo przydatny
56
dla początkujących
luty 2005
Wybieranie tła
Na stronie http://vision.featia.net/linux/
grubsplash/ możemy znaleźć kilka przy-
kładów rysunków mogących posłu-
żyć za tło GRUB-a. Mamy tu do dys-
pozycji zarówno pliki w formacie GIF
(dzięki nim od razu możemy zapoznać
się z rysunkiem), jak i odpowiadające im
pliki w formacie XPM.GZ. Pobierzmy je
wszystkie na nasz dysk. Rysunki dostar-
czane z dystrybucją znajdują się w kata-
logu /boot/grub/, lecz jeśli umieścimy tam
również nasze, może powstać bałagan.
Zamiast tego, utworzymy podkatalog
splashes/ poleceniem
mkdir /boot/grub/
splashes/
(oczywiście, potrzebujemy
do tego uprawnień użytkownika root).
Następnie do tego katalogu kopiuje-
my wszystkie pobrane pliki z końców-
ką .xpm.gz.
Wydawałoby się, że powinniśmy
teraz zmodyfikować plik /boot/grub/
grub.conf i w linii z opcją splashimage
podać nową ścieżkę do pliku. Owszem,
można to zrobić, wstawiając przykłado-
wo taką linię:
splashimage=(hd0,7)/grub/splashes/
S
seachair.xpm.gz
Jeśli jednak chcemy sami poeksperymen-
tować i sprawdzić, które tło najbardziej
nam odpowiada, to ciągłe restartowa-
nie systemu i modyfikowanie jednej linii
może być męczące. Na szczęście, można
to zrobić inaczej. Gdy już zrestartujemy
system i powita nas menu GRUB-a, wci-
skamy klawisz [c]. W ten sposób przej-
dziemy do linii poleceń GRUB-a, która
szerzej jest opisana w rozdziale Obsłu-
ga. W linii tej najpierw wpisujemy
root
(hd0,7)
, a następnie wciskamy [Enter].
Pamiętamy, że polecenie to ustawia par-
tycję wykorzystywaną w następnych
poleceniach. Później wpisujemy
splash-
image
/grub/splashes/seachair.xpm.gz
i ponownie zatwierdzamy klawiszem
[Enter]. I już mamy wyświetlone nasze
tło. Klawiszem [Esc] możemy wrócić do
menu, aby zobaczyć, jak wygląda. Jeśli
będziemy chcieli wypróbować inne tła,
znów wciskamy klawisz [c] i postępujemy
tak, jak wcześniej (nie musimy ponownie
używać polecenia root – wystarczy samo
splashimage). No właśnie, ale pewnie
zapomnieliśmy już, jak się nazywa-
ły poszczególne pliki. Nie martwmy się.
Linia poleceń GRUB-a obsługuje uzupeł-
nianie nazw, więc możemy wpisać słowa
splashimage /
(pamiętajmy o znaku / ),
a następnie wcisnąć klawisz [Tab]. Pojawi
się nam spis dostępnych nazw katalo-
gów i plików. W ten sposób dopisujemy
dalszy ciąg ścieżki (/grub/splashes/ lub
/boot/grub/splashes/ – zależnie od naszej
konfiguracji) i znów wciskamy klawisz
[Tab] w celu wyświetlenia nazw plików
z tłami.
Gdy już się zdecydujemy na konkret-
ne tło, możemy uruchomić system (wy-
chodzimy klawiszem [Esc] aż do menu
i wybieramy pozycję z naszym Linuk-
sem), a następnie dopisać odpowiednią
linię do pliku /boot/grub/grub.conf.
Tworzenie własnego tła
Oprócz gotowych plików z tłami, które
można znaleźć w Internecie, każdy
pewnie chciałby mieć możliwość stwo-
rzenia całkiem własnego. Oczywi-
ście, nic nie stoi na przeszkodzie. Jeśli
chcemy po prostu przekonwertować
posiadany obrazek do skompresowane-
go formatu XPM, możemy wydać pole-
cenia:
# convert -resize 640x480 -colors 14
S
picture.jpg picture.xpm
# gzip picture.xpm
Polecenie convert należy do pakietu Ima-
geMagick. Jeśli nie jest on zainstalowany
w naszym systemie, możemy go zainsta-
lować z płyt dystrybucji lub z repozyto-
rium (analogicznie, do instalacji pakietu
GRUB-a). Opcja -resize 640x480 powo-
duje zmianę rozdzielczości rysunku do
wymaganego rozmiaru, a opcja -colors 14
redukuje paletę kolorów do czternastu.
Nazwy picture.jpg i picture.xpm to odpo-
wiednio nazwy pliku wejściowego
(z konwertowanym rysunkiem) i wyjścio-
wego (z tłem dla GRUB-a). Drugim pole-
ceniem kompresujemy rysunek progra-
mem Gzip.
Powyższa metoda jest szybka,
lecz czasem uzyskane rezultaty wołają
o pomstę do nieba. Lepszym rozwiąza-
niem jest uruchomienie programu GIMP,
wczytanie pliku, który chcemy konwer-
tować, a następnie zmiana rozmia-
ru obrazu (Obraz–>Przeskaluj obraz)
i liczby kolorów (Obraz–>Tryb–> Indek-
sowany). Dzięki temu możemy poeks-
perymentować z różnymi opcjami
obrazu. Ponadto, może okazać się, że
konieczne będzie ręczne poprawianie
całego rysunku, zanim uzyskamy zado-
walający efekt.
Innym wyjściem jest stworzenie
pustego rysunku o wymiarach 640x480
i palecie 14 kolorów, a następnie nary-
sowanie na nim tego, co nam się
podoba. Nie każdy jednak ma żyłkę
artystyczną.
Wybór metody zależy od nas. Z uzy-
skanym plikiem postępujemy tak, jak to
opisaliśmy w rozdziale Wybieranie tła.
Niektórzy Czytelnicy mogą zaintere-
sować się, dlaczego kompresujemy tła
przed wykorzystaniem ich w GRUB-ie.
Można wykorzystać również pliki XPM
nieskompresowane programem Gzip.
Różnica będzie dla nas w sumie nieod-
czuwalna, lecz dla zasady lepiej kom-
presować. Przy obecnych komputerach
mniej czasu zajmuje wczytanie z dysku
skompresowanego (a więc i mniejsze-
go) pliku, a następnie rozkompreso-
wanie go w pamięci, niż wczytanie
z dysku większego pliku, nie poddane-
go kompresji.
Dobór kolorów
Oprócz ustalenia własnego tła, możemy
pokusić się o zmianę kolorów czcion-
ki wykorzystywanej w menu. Służą do
tego opcje foreground i background
ustawiane w początkowej części pliku
/boot/grub/grub.conf (możemy je umie-
ścić nawet przed opcją splashimage).
Opcje te przyjmują jako parametry kolory
Rysunek 5.
Rysunek na tło powinniśmy
dobrać tak, aby menu było czytelne
Rysunek 6.
Nawet korzystając tylko z 14
kolorów można stworzyć ładne rysunki
57
dla początkujących
grub
www.lpmagazine.org
zapisane w szesnastkowym formacie RGB
(Red, Green, Blue). Jeśli będziemy chcie-
li uzyskać białe litery z czarnym tłem, to
użyjemy opcji:
foreground ffffff
background 000000
Oczywiście, możemy też używać innych
kolorów, jak czerwony (ff0000), zielo-
ny (00ff00), niebieski (0000ff ) i inne.
Jeśli chcemy w wygodny sposób dopa-
sować kolory do naszego tła i gustu,
możemy wykorzystać tę samą metodę,
którą stosowaliśmy przy wybieraniu tła.
Tym razem, po wejściu do linii poleceń
GRUB-a, wydajemy odpowiednie pole-
cenia
foreground ffff00
i
background
ff00ff
(oczywiście, eksperymentując
z kolorami).
Oprócz tego, istnieje możliwość
zmiany koloru podświetlenia i tła
menu. Wykorzystywane jest do tego
polecenie color, które możemy umie-
ścić w pliku konfiguracyjnym przed
poleceniami foreground i backgro-
und. Listę kolorów dostępnych w tym
poleceniu można uzyskać korzysta-
jąc z polecenia
help color
w linii pole-
ceń GRUB-a (jak również w dokumen-
tacji GRUB-a –
info grub
). Przykładowe
wywołanie tego polecenia (dające cał-
kiem przyjemny kolor) ma postać:
color
cyan/blue white/blue
.
Obsługa
Jeśli zainstalowaliśmy GRUB-a na
dysku i stworzyliśmy dla niego plik
konfiguracyjny, to podczas uruchamia-
nia komputera powinno nas przywi-
tać menu GRUB-a. Możemy poruszać
się po nim z pomocą strzałek kurso-
ra, a klawiszem [Enter] wybierać pozy-
cję, którą chcemy uruchomić. Oprócz
tego, mamy jednak do dyspozycji kilka
innych funkcji.
Modyfikacja pozycji menu
Przypuśćmy, że chcemy poekspery-
mentować z innymi parametrami jądra.
Możemy w tym celu utworzyć nowe
sekcje title w pliku konfiguracyjnym.
Lepszym rozwiązaniem jest modyfikacja
parametrów jądra podczas uruchamia-
nia systemu. Jak tego dokonać? Prze-
suńmy zaznaczenie w menu na pozycję
naszej dystrybucji Linuksa. W naszym
przykładzie jest to linia Aurox Linux
(2.4.22-1). Zamiast wcisnąć [Enter], wci-
skamy klawisz [e]. Zobaczymy wyświe-
tloną zawartość tej sekcji title. Pomię-
dzy liniami możemy przemieszczać się
podobnie jak w menu. Jeśli chcemy
zmodyfikować jakąś linię, wciskamy
[Enter]. Spróbujmy w linii z poleceniem
kernel dopisać opcję jądra vga=791.
W naszym przykładzie linia wygląda-
łaby tak:
kernel /vmlinuz-2.4.22-1
S
ro root=LABEL=/ vga=791
Zmiany zatwierdzamy klawiszem [Enter].
Wprowadzona właśnie opcja powoduje,
że system, zamiast w standardowym
trybie tekstowym, uruchomi się z wyko-
rzystaniem bufora ramki, ustawiając roz-
dzielczość ekranu na 1024x768 pikseli
z ponad 16 tysiącami kolorów.
Jeśli chcielibyśmy dodać nową
linię, możemy skorzystać z klawiszy [o]
i [O ]. Pierwszy z nich powoduje doda-
nie nowej linii po aktualnie zaznaczo-
nej linii, a drugi – przed nią. Niepo-
trzebne linie możemy skasować klawi-
szem [d ].
Gdy jesteśmy już zadowoleni z wpro-
wadzonych zmian, wciskamy klawisz
[b], co powoduje uruchomienie edyto-
wanej pozycji wraz z wprowadzonymi
zmianami. Jeśli wolimy zrezygnować ze
zmian, możemy klawiszem [Esc] wrócić
do głównego menu.
Linia poleceń
Jeszcze większe możliwości daje nam linia
poleceń dostępna w GRUB-ie. Korzystali-
śmy z niej już w rozdziale Wybieranie
tła, lecz teraz opiszemy ją bardziej szcze-
gółowo. Aby się do niej dostać, w menu
GRUB-a wciskamy klawisz [c]. Mamy tu
do dyspozycji cały szereg mniej lub bar-
dziej przydatnych poleceń. Ich spis uzy-
skamy wciskając po prostu klawisz [Tab].
Z pewnością zwrócimy uwagę, że na
spisie znajduje się wiele znanych nam już
poleceń, z których korzystaliśmy podczas
tworzenia menu – chainloader, kernel,
initrd, root i inne. Jak więc widać, linię
poleceń również możemy wykorzystać
do uruchamiania systemów zainstalo-
wanych na naszym komputerze. Zresztą,
gdybyśmy nie utworzyli pliku konfigura-
cyjnego /boot/grub/grub.conf, to przy uru-
chamianiu komputera moglibyśmy korzy-
stać tylko z linii poleceń GRUB-a. Jeśli
w takim przypadku chcielibyśmy urucho-
mić Memtest86+ (zainstalowany zgodnie
z wcześniej podanymi wskazówkami),
musielibyśmy wydać następujące pole-
cenia:
root (hd0,7)
kernel /memtest86+-1.40.bin
boot
Jedyna różnica pomiędzy zawartością
grub.conf i poleceniami przy ręcznym
uruchamianiu systemu, to dodatkowe
polecenie
boot
powodujące załadowanie
wskazanego jądra.
Warto pamiętać, że w czasie wprowa-
dzania poleceń i nazw plików możemy
korzystać z autouzupełniania – wystar-
czy wcisnąć klawisz [Tab], a wyświetlone
zostaną możliwe wartości.
Do czego jeszcze może przydać się
nam linia poleceń? Z pomocą polecenia
cat możemy sprawdzić zawartość dowol-
nego pliku, np.
cat /etc/fstab
. Wynika
z tego, że osoba mająca dostęp do linii
poleceń GRUB-a może przeczytać prak-
tycznie dowolny plik (np. /etc/shadow
zawierający zakodowane hasła). Tym
jednak będziemy się martwić za chwilę,
w rozdziale Zabezpieczenia. Niezależnie
od zagrożeń, polecenie cat może przy-
dać się nam, jeśli w czasie eksperymen-
tów będziemy chcieli sprawdzić jakieś
ustawienia.
Inne przydatne polecenie to find,
pozwalające nam sprawdzać, na której
partycji znajduje się wskazany plik.
Powinniśmy podawać bezwzględną
ścieżkę do pliku, np.
find /boot/grub/
stage1
lub
find /grub/stage1
– polece-
nie to zwróci nam nazwę partycji, jaką
powinniśmy wpisać w linii root w pliku
konfiguracyjnym GRUB-a.
Warto zapoznać się z innymi pole-
ceniami. Bardzo przydatna jest pomoc,
którą możemy uzyskać wpisując
help
nazwa_polecenia
.
Linię poleceń GRUB-a można rów-
nież uruchomić z konta użytkownika root
Rysunek 7.
Skrypt Grubconfig może nam
ułatwić konfigurowanie GRUB-a
58
dla początkujących
luty 2005
wpisując polecenie
grub
. Mamy wówczas
podobne możliwości, jak w opisywa-
nej wyżej linii poleceń, lecz oczywiście
z niektórych poleceń nie możemy korzy-
stać (dotyczy to przykładowo polecenia
splashimage).
Zabezpieczenia
Menu oferowane przez GRUB-a jest
bardzo wygodne, lecz czasem daje zbyt
wiele możliwości. Jak przekonaliśmy
się w poprzednim rozdziale, użytkow-
nik mający dostęp do GRUB-a może
dowolnie zmieniać parametry wywo-
łania systemu, a nawet uzyskać dostęp
do chronionych plików. Na szczęście,
GRUB pozwala na zablokowanie takie-
go dostępu.
Służy do tego hasło broniące dostę-
pu do edycji pozycji w menu, jak rów-
nież do linii poleceń. Jeśli chcemy,
to nawet uruchomienie poszczegól-
nych systemów może wymagać poda-
nia hasła.
Jeśli chcemy zabezpieczyć w ten
sposób nasz system, to – oczywiście –
potrzebujemy do tego uprawnień użyt-
kownika root. Najpierw wygenerujemy
nasze hasło. Uruchamiamy linię pole-
ceń GRUB-a –
grub
. Tym razem sko-
rzystamy z polecenia
md5crypt
. Po jego
wydaniu zostaniemy zapytani o hasło.
Wpisujemy je (niech tylko nie będzie
zbyt łatwe do odgadnięcia) i wciskamy
[Enter]. W odpowiedzi zobaczymy linię
z zakodowanym hasłem.
Teraz edytujemy nasz plik konfigu-
racyjny (np.
vim /boot/grub/grub.conf
)
i na jego początku umieszczamy linię
o treści:
password --md5
S
$1$ikVvf0$naEIsTUTM5yM1MYrx3Ms7.
Oczywiście, zamiast podanej tu warto-
ści należy wkleić wynik działania pole-
cenia md5crypt. Wykorzystanie podanej
wyżej wartości nie jest dobrym pomy-
słem, gdyż jest to zakodowane słowo
password. Skoro w pliku przechowu-
jemy hasło, powinniśmy się upewnić,
że nie będzie ono łatwe do odczytu.
W tym celu ustawiamy odpowiednio
prawa dostępu do pliku:
# chmod 600 /boot/grub/grub.conf
Ta zmiana wystarczy, aby przy urucha-
mianiu komputera w menu GRUB-a
były dostępne tylko dwie możliwości
– uruchomienie jednego z systemów
lub wciśnięcie klawisza [p]. Jeśli po
wciśnięciu klawisza [p] podamy pra-
widłowe hasło (to, które wpisywaliśmy
w poleceniu md5crypt), to dopiero
wtedy uzyskamy dostęp do możliwości
opisywanych w rozdziale Obsługa.
Nadal użytkownik może urucho-
mić dowolną pozycję w menu, a to nie
zawsze musi nam odpowiadać. Skoro
już mamy ustalone hasło, wystarczy
teraz w sekcji title, którą chcemy zablo-
kować, umieścić polecenie
lock
. Musi
ono być umieszczone od razu pod linią
title, gdyż użytkownik może wykony-
wać wszystkie polecenia aż do napo-
tkania polecenia
lock
. W tym momen-
cie zostaje zapytany o hasło i dopóki
nie poda prawidłowego, nie będzie
mógł wykonać dalszych poleceń. Jak
więc widać, umieszczanie polecenia
lock na końcu sekcji title zazwyczaj
mija się z celem – lepiej umieścić je na
początku.
Należy zaznaczyć, że zabezpieczenie
to nie jest doskonałe. Nie można liczyć,
że założenie hasła na GRUB-a zabezpie-
czy nas przed niecnymi zamiarami osób
mających bezpośredni dostęp do kom-
putera. Zawsze jednak może zwiększyć
wygodę korzystania z komputera oraz
zabezpieczyć nas przed mniej doświad-
czonymi użytkownikami.
Ułatwianie konfiguracji
Jeśli nie chcemy ręcznie zmieniać pliku
konfiguracyjnego GRUB-a, możemy
skorzystać z jednego z konfigurato-
rów. Najlepszym rozwiązaniem wydaje
się być moduł Webmina dostępny
w sekcji Sprzęt–>Inicjator systemu
GRUB. Oprócz tego, mamy do dyspo-
zycji działający w trybie tekstowym
skrypt Grubconfig oraz przeznaczony
dla środowiska graficznego program
GrubConf. Pierwszy z nich jest mało
intuicyjny, lecz ma kilka ciekawych
opcji, a przy tym nie wymaga instala-
cji – wystarczy rozpakować archiwum
i można go uruchomić.
Osoby samodzielnie kompilują-
ce jądro prawdopodobnie zainteresu-
ją się programem Install Kernel, który
nie tylko zwalnia nas od konieczności
wykonania szeregu poleceń, ale rów-
nież automatycznie uaktualnia konfi-
gurację programów uruchomieniowych
(oprócz GRUB-a, obsługuje też LILO).
Jeśli chcemy całkiem uprościć sobie
ustawianie tła menu GRUB-a, możemy
skorzystać z programu GrubTk. Wystar-
czy w nim podać tylko nazwę pliku
z rysunkiem, a program zajmie się
resztą.
A jeśli chcemy zobaczyć, do czego
jeszcze można wykorzystać GRUB-a, to
zainstalujmy sobie grę GRUB Invaders.
Jest ona uruchamiana przez GRUB-a
i nie wymaga do działania żadnego
systemu operacyjnego.
Zakończenie
Wydawałoby się, że program urucho-
mieniowy to proste narzędzie pozwa-
lające tylko wskazać, który system ma
być uruchomiony. Tymczasem, okazuje
się, że jest to program, który możemy
stosunkowo łatwo dopasować do
swoich potrzeb. Z jego pomocą uru-
chomimy nie tylko systemy, ale rów-
nież takie programy, jak Memtest86.
GRUB może stanowić barierę bronią-
cą innym użytkownikom dostępu do
naszego systemu, równocześnie nie
zmniejszając naszej wygody obsługi.
Dodatkowo, może witać nas naszym
ulubionym rysunkiem. Warto zapoznać
się z jego dokumentacją i poznać inne
jego funkcje.
W Internecie:
• Strona domowa GRUB-a:
http://www.gnu.org/software/grub/
• GNU GRUB splashimage howto:
http://ruslug.rutgers.edu/~mcgrof/
grub-images/
• Różne tła dla menu GRUB-a:
http://vision.featia.net/linux/
grubsplash/
• Strona domowa Memtest86:
http://www.memtest86.com/
• Strona domowa Memtest86+:
http://www.memtest.org/
• Strona domowa skryptu Grubconfig:
http://www.tux.org/pub/people/kent-
robotti/looplinux/index.html
• Strona domowa programu GrubConf:
http://grubconf.sourceforge.net/
• Strona domowa programu Install
Kernel:
http://installkernel.tripod.com/ik/
index.html
• Strona domowa programu GrubTk:
http://freshmeat.net/projects/grubtk/
• Strona domowa gry GRUB Invaders:
http://www.erikyyy.de/invaders/