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-
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
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
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
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-
gę
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
Plik z chomika:
SOLARIX33
Inne pliki z tego folderu:
2006.01_Koder plików w formacie OGG_[Programowanie].pdf
(722 KB)
2007.06_Piękno fraktali_[Programowanie].pdf
(1778 KB)
2008.11_GanttProject_[Programowanie].pdf
(1014 KB)
2007.04_USB Device Explorer_[Programowanie].pdf
(1134 KB)
2006.09_QT, PyQT – szybkie tworzenie baz danych_[Programowanie].pdf
(1319 KB)
Inne foldery tego chomika:
Administracja
Aktualnosci
Audio
Bazy Danych
Bezpieczenstwo
Zgłoś jeśli
naruszono regulamin