abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 00:22 | Nová verze

Google Chrome 70 byl prohlášen za stabilní (YouTube). Nejnovější stabilní verze 70.0.3538.67 tohoto webového prohlížeče přináší řadu oprav a vylepšení. Vylepšeny byly také nástroje pro vývojáře (YouTube). Opraveno bylo 23 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 6
včera 22:44 | Komunita

Open source nástroj pro monitorování zabezpečení počítačových sítí Bro (Bro Network Security Monitor, Wikipedie) byl přejmenován na Zeek (Zeek Network Security Monitor). Nový název bez negativní konotace by měl být pro uživatele atraktivnější.

Ladislav Hagara | Komentářů: 9
včera 22:00 | Nová verze

Po dvou letech od vydání verze 0.4 byla vydána nová major verze 5 linuxové distribuce elementary OS (Wikipedie) vycházející z Ubuntu. Kódové jméno této nejnovější verze je Juno. Přehled novinek i s náhledy v příspěvku na Medium.

Ladislav Hagara | Komentářů: 0
včera 18:33 | Komunita

Svobodná decentralizovaná mikroblogovací platforma a sociální síť podobná Twitteru Mastodon (Wikipedie) slaví 2 roky. Krátkou historii a milníky shrnuje příspěvek na blogu.

Ladislav Hagara | Komentářů: 0
včera 11:11 | Zajímavý článek

Společnosti Microsoft, Google, Apple i Mozilla včera shodně oznámily, že z jejich webových prohlížečů Internet Explorer, Edge, Chrome, Safari a Firefox počátkem roku 2020 odstraní protokoly TLS 1.0 a TLS 1.1. Michal Špaček v článku Vypněte TLS 1.0 a 1.1 už dnes na svých stránkách informuje, že TLS 1.0 a 1.1 lze vypnout již dnes. Ověřit to lze například pomocí SSL Labs Server Testu.

Ladislav Hagara | Komentářů: 11
včera 05:55 | Humor

Banksy před několika dny šokoval umělecký svět svým obrazem, jenž se přímo v aukční síni po svém prodeji za více než 30 milionů korun sám částečně skartoval. Z obrazu Dívka s balónem vznikl obraz Láska v koši. Command Line Magic ukazuje, jak na podobného Banksyho z příkazového řádku.

Ladislav Hagara | Komentářů: 1
15.10. 16:55 | Komunita

Handshake, decentralizovaná certifikační autorita a peer-to-peer DNS aneb DNS v blockchainu, postupně rozděluje mezi svobodné a open source projekty celkově 10,2 milionu dolarů. V srpnu získalo 300 000 dolarů GNOME a 100 000 dolarů GIMP. Dnes oznámila nezisková organizace KDE e.V. zastupující komunitu kolem KDE v právních a finančních záležitostech, že od Handshake získala 300 000 dolarů, z čehož 100 000 dolarů je alokováno pro multiplatformní balík svobodných kancelářských a grafických aplikací Calligra.

Ladislav Hagara | Komentářů: 51
12.10. 15:44 | Nová verze

Po třech letech od vydání verze 5.0 byla vydána nová major verze 6.0 v Javě napsané aplikace pro komplexní návrh rozmístění nábytku a dalšího vybavení v interiérech Sweet Home 3D. Přináší celou řadu novinek. Zdůraznit lze možnost otevírání oken, dveří nebo skříněk. Zmínit lze také novou figurínu s otočnými klouby.

Ladislav Hagara | Komentářů: 32
12.10. 15:00 | Nová verze

Byla vydána nová verze 2018-10-09 linuxové distribuce Raspbian určené především pro jednodeskové miniaturní počítače Raspberry Pi. Přehled novinek v poznámkách k vydání. Společně s Raspbianem byl aktualizován také instalační nástroj NOOBS (New Out Of the Box Software). Z novinek je nutno upozornit na odstranění programu Wolfram Mathematica.

Ladislav Hagara | Komentářů: 2
11.10. 22:44 | Zajímavý projekt

V rámci projektu PRIM (Podpora rozvíjení informatického myšlení), jehož cílem je "podporovat změnu orientace školského předmětu informatika z uživatelského ovládání ICT směrem k základům informatiky jako oboru", byly na stránkách iMyšlení (informatické myšlení) představeny volně stažitelné učebnice a výukové materiály pro výuku informatiky. Videozáznam z tiskové konference na Facebooku.

Ladislav Hagara | Komentářů: 2
Přispíváte osobně k vývoji svobodného softwaru?
 (41%)
 (42%)
 (24%)
 (23%)
 (11%)
 (35%)
Celkem 223 hlasů
 Komentářů: 11, poslední dnes 16:32
Rozcestník

LiveCD - 4 (linux live, před spuštěním systému)

27. 3. 2006 | Michal Vyskočil | Systém | 12613×

Seznámíme se s jedním z nástrojů pro tvorbu LiveCD - skripty linux-live a s jejich způsobem řešení.

V této fázi byste měli mít dostatek povědomí o živých CD, známe proces bootování, speciální souborové systémy, přesto ještě něco chybí. Nevíme, co je nutné udělat, abychom proměnili obyčejný systém v takový, který je schopen bootovat z CD.

Úvodem

Příkladem distribucí, které jsou vytvořeny pomocí těchto skriptů linux-live, jsou Slax (pochopitelně), ABC Linux 2005 (odvozena ze Slaxe) a minimax (používá upravenou verzi, jinak vychází z distribuce Arch Linux). Jejich použití je velmi snadné a na stránce je také velmi stručný návod:

Just install your favourite distro, remove all unnecessary files (for example man pages and all other files which are not important for you) and then download and run these scripts.

Jednoduše nainstalujte vaši oblíbenou distribuci, odstraňte všechny nepotřebné soubory (například manuálové stránky a ostatní soubory, které vás nezajímají) a potom si stáhněte a spusťte tyto skripty. Ale za takhle krátký článek by mě v redakci asi nepochválili. Proto se jim v následujících dílech podíváme na zoubek a zároveň budeme pokračovat v objevování tajů LiveCD.

initrd

V prvním díle LiveCD - 1 (úvod, isolinux) tohoto seriálu jsme se seznámili se zavaděčem isolinux, který umí spustit jádro z CD. Klasický postup bootování jádra je takový, že se

  1. Zavede do paměti a spustí.
  2. Provede se inicializace potřebného hardwaru.
  3. Není-li určeno parametrem init= jinak, jádro spustí program /sbin/init.

Jenže u LiveCD to tak jednoduše nejde, protože to musí běžet bez načítání potřebných programů z disku. Stejný problém nastává v situaci, kdy máme distribuční jádro, které obsahuje podporu pro souborové systémy na disku... který nedokáže bez těch modulů přečíst. Tento problém se nazývá bootstrapping a je to problém, který se netýká jen počítačů, ale kosmologie a filozofie. Naštěstí vývojáři jádra přišli s jednoduchým řešením, které se jmenuje initrd (Initial Ram Disk), což je speciální soubor, který se zavede do paměti a jádro z něho při bootu načte potřebné soubory.

Jádro musí ovšem obsahovat patřičnou podporu:

Device Drivers > Block devices:
<*> RAM disk support
(4096) Default RAM disk size (kbytes) (NEW)
[*]   Initial RAM disk (initrd) support

V případě klasických distribucí bývá součástí initrd ovladač pro souborové systémy a případně také bootsplash. Live systémy tu mají uložen minimální systém, který nejprve připraví všechno potřebné pro spuštění systému a teprve potom spustí samotný /sbin/init. Ovšem ramdisky mají omezenou kapacitu, takže není snadné do nich dát byť jen minimální systém, který by obsahoval klasické GNU nástroje, na něž jsme zvyklí.

Busybox

Proto byl vytvořen nástroj busybox, což je The Swiss Army Knife of Embedded Linux (a v té chvíli si pokaždé vzpomenu na jiný švýcarský nůž, program netcatthe network swiss army knife). Jedná se o kolekci nejpoužívanějších unixových nástrojů, které jsou součástí jednoho spustitelného souboru. Plná instalace zahrnuje více než 190 programů, ale není pochopitelně potřeba překládat všechny nástroje. Lze jej přeložit s knihovnou glibc, ale i s menší uClibc, což je vhodné především pro zabudované systémy.

Volat binární soubory busyboxu je možné dvěma způsoby. Buď explicitně napsat busybox příkaz [parametry], anebo vytvořit soustavu odkazů a busybox podle názvu souboru pozná, který program má spustit. Je nutné mít na paměti, že GNU nástroje, které denně používáme, mají oproti těm z busyboxu více možností.

Po spuštění jádra

Jak jsme si již řekli, v initrd je umístěn malý systém, který má za úkol připravit systém tak, aby mohl běžet z CD. Jenže konkrétní činnosti závisí na konkrétním řešení, a proto bude nejlepší tento proces ukázat na příkladu distribuce Slax, respektive skriptů linux-live, s jejichž pomocí je vytvářena.

V prvním díle byl uveden příklad konfigurace zavaděče isolinux. Pokud si ji nepamatujete, tak zde je malé připomenutí:

label linux
kernel boot/vmlinuz
append max_loop=255 initrd=boot/initrd.gz init=linuxrc load_ramdisk=1
prompt_ramdisk=0 ramdisk_size=4444 root=/dev/ram0 rw

Přímo ze zadaných parametrů můžeme vyčíst sekvenci kroků, které jádro po načtení zavaděčem provede. Rozbalí definovaný initrd do paměti a protože je explicitně určen jako kořenový adresář zařízení /dev/ram0 (což je rozbalený initrd), spustí program definovaný parametrem init. Ten se podle konvence nazývá linuxrc a právě on je zodpovědný za správné nastavení systému před jeho nabootováním.

Pokud vás zajímá, jak probíhá prebootovací nastavení systému, tak máte dvě možnosti. Můžete si spustit Slax nebo ABC Linux 2005 s parametrem debug. Ten způsobí, že se po každém kroku systém zastaví a dostanete se do shellu, což je ash z busyboxu. Druhou možností je zkopírovat si soubor boot/initrd.gz, rozbalit, připojit a obsah linuxrc si přečíst sám, protože se jedná o shellový skript.

Linuxrc krok za krokem

Skript linuxrc, které používá sada nástrojů linux-live potřebuje knihovnu funkcí zvanou liblinuxlive, která se používá i ve spoustě skriptů distribuce Slax. Proto prvním zajímavým příkazem je:

. liblinuxlive

Následuje připojení základních adresářů /proc a /sys, které jsou důležité pro jádro.

mount -t proc proc /proc
mount -t sysfs sysfs /sys

Dále jsou definovány důležité adresáře a proměnné:

UNION=/union
MEMORY=/memory
MOUNTDIR=mnt
CHANGES=$MEMORY/changes
COPY2RAM=$MEMORY/copy2ram
IMAGES=$MEMORY/images
INITRAMDISK=$MOUNTDIR/live

Skript natáhne základní moduly, které jsou nutné pro úspěšný start systému, což zařídí knihovní funkce modprobe_essential_modules. Ta natáhne moduly loop, isofs, squashfs, unionfs, vfat, ntfs a moduly nls, Native Language support, pro kódové stránky cp437, iso-8859-1 a iso-8859-2. Poslední akcí je vytvoření blokových zařízení funkcí create_block_devices. Jejich seznam je v adresářích /sys/block/*/dev a /sys/block/*/*/dev. Někdy je nutné dopředu nahrát i USB moduly (týká se to třeba USB klávesnice), proto se, v případě zadání bootovacího parametru probeusb, zavedou moduly ehci-hcd, ohci-hcd, uhci-hcd a usb-storage a znovu dojde k vytvoření případných nových blokových zařízení.

mount -t unionfs -o debug=0,dirs=$CHANGES=rw unionfs $UNION

Mimo tvorby důležitých adresářů se připojí adresář /memory/changes jako read-write větev pro hlavní adresář. Pokud jste ještě nezapomněli obsah minulého dílu LiveCD - 3 (podpora pro zápis), tak jistě tušíte, že tento příkaz zajistí, že se budou zapisovat změny vůči read-only adresáři.

Pokud jste si prohlíželi obsah CD, možná jste objevili soubor livecd.sgn s textem

All available discs and CDROMs are mounted during the boot process.
When done, linuxrc script is looking for this livecd.sgn file.
It tells linuxrc where to mount the live filesystem from.

Don't delete this file, else your LiveCD won't work

Skript postupně prochází a připojuje všechny disky a oddíly, přičemž hledá, zda tento soubor existuje. Pokud ne, zkusí ještě zavést ovladače USB a toto hledání zopakovat. Pokud ani teď nic nenalezne, skončí boot chybovým hlášením. Tato funkce nastaví proměnnou $DATA na adresář /base na CD.

if [ "`cmdline_parameter toram`" != "" -o 
   "`cmdline_parameter copy2ram`" != "" ]; then
   echolog "copying modules to RAM, this may take some time"
   copy_to_ram $DATA $COPY2RAM
   cd_autoeject 1
   umount $DATA 2>/dev/null
   if [ $? -ne 0 ]; then umount `dirname $DATA` 2>/dev/null; fi
   DATA=$COPY2RAM
   cd_autoeject 0
fi

Ano, právě tento kód zajišťuje funkci copy2ram, díky které je obsah celého CD zkopírován do operační paměti a práce s ním je velmi rychlá (nemluvě o uvolněném CD). Jak je vidět, hlavní zásluhy na tom má funkce copy_to_ram, která zkopíruje obsah datového adresáře $DATA i všechny dostupné moduly do paměti. Bohužel nijak nekontroluje množství dostupné paměti, takže pokud jí nemáte dostatek, zkopírování skončí chybou.

Dalším krokem je vložení modulů do souborového systému. To sestává ze dvou fází.

# pripojeni squashfs obrazu
mount -t squashfs -o loop,ro cesta_k_modulu pripojny_bod
echo "cesta_k_modulu pripojny_bod" >>/tmp/_mounts

# vlozeni pripojneho bodu do unionfs
unionctl pripojny_bod --add --after 0 --mode ro absolutni_cesta

Nejprve musíme někam připojit squashfs obraz a potom přidat to "někam" do struktury unionfs (všimněte si, že to připojujeme jako ro). Potom následuje prosté zkopírování adresáře /rootchanges.

Velmi zajímavou funkcí je automatické vytváření souboru /etc/fstab, bohužel je funkce activate_fstab příliš rozsáhlá na to, abych jí sem napsal celou. Proto napíši pouze jeho jednotlivé kroky:

  1. Tyto záznamy
    tmpfs   /        tmpfs   defaults       0 0
    devpts  /dev/pts devpts  gid=5,mode=620 0 0
    proc    /proc    proc    defaults       0 0
    se zapíší vždycky.
  2. Pro všechna zařízení z /proc/sys/dev/cdrom/info se vloží řádek
    /dev/jednotka /mnt/jednotka_cdrom iso9660 noauto,users,exec 0 0
    kde jednotka je název zařízení z /dev (například hdc).
  3. Nastavení diskových oddílů je složitější. Jejich seznam je v /proc/partitions, přičemž se navíc kontroluje v přítomnost souboru /sys/block/jednotka/removable, který označuje výměnnou jednotku (připojují se do adresáře /mnt/jednotka_removable). Oddíl se připojí do dočasného adresáře a ze souboru /proc/mounts se zjistí systém souborů a do /etc/fstab se zapíše:
    /dev/jednotka /mnt/jednotka souborovy_system auto,users,suid,dev,exec 0 0
    
  4. Za pomoci fdisk -l se zjistí swapovací oddíl a příslušný řádek je
    /dev/jednotka swap swap defaults 0 0
  5. Posledním krokem je explicitní vytvoření záznamu pro disketovou mechaniku
    /dev/fd0 /mnt/floppy auto noauto,users,suid,dev,exec 0 0

Následuje vytvoření některých důležitých adresářů (dev, proc, sys a tmp) a vše se připravuje k velkému finále, chroot nutím do paměti spuštěním programu /sbin/init. Vzniklou adresářovou strukturu si můžete prohlédnout na unionfs.org (úplně dole).

chroot a spuštění /sbin/init

Po provedení všech potřebných úkonů se schyluje k zahájení vlastního spuštění distribuce.

echolog "changing root directory..."
cd $UNION
mkdir -p $INITRAMDISK

umount /sys # we won't need it anymore
if [ ! -e $UNION/dev/console ]; then mknod $UNION/dev/console c 5 1; fi

if [ -x $UNION/usr/sbin/chroot ];
   then CHROOT=/usr/sbin/chroot
   else CHROOT=/usr/bin/chroot
fi

header "linux live end"

Systém změní pracovní adresář na $UNION (/union) a vytvoří adresář /mnt/live, pomocí něhož máme později přístup k modulům a podobně. Odpojí /sys a pokud neexistuje zařízení console, je vytvořena. Potom se již nastaví cesta k programu chroot a vypíše se hlášení o dokončení skriptu linux live.

pivot_root . $INITRAMDISK
exec $CHROOT . sbin/init dev/console 2>&1; fi

header "ERROR!"
echolog "You are not supposed to be here, something went wrong!"
echolog "Even Ctrl+Alt+Del won't help you in kernel panic."

Nejprve je příkazem pivot_root změněn kořenový adresář z /union na /union/mnt/live a zbytek systému je spuštěn v chrootu (s kořenovým adresářem umístěným v /union). Důležité je, že je vstup i výstup procesu /sbin/init přesměrovnán na konzoli!

Závěrem

Dnešní díl nás zavedl do tajů nastavení systému před vlastním startem. Podotýkám, že uvedená metoda je specifická pouze pro distribuce, které používají skripty linux live, ostatní se mohou chovat úplně jinak. Příští díl by měl být přece jenom praktičtější a bude se týkat distribuce Slax a možnostmi jeho úprav.

       

Hodnocení: 100 %

        špatnédobré        

Nástroje: Tisk bez diskuse

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

Vykook avatar 27.3.2006 00:25 Vykook | skóre: 23 | blog: Tomas
Rozbalit Rozbalit vše Re: LiveCD - 4 (linux live, před spuštěním systému)
kdybych byl debil, tak bych napsal ze sem prvni, ale ja to proste neudelam ;-)
Nejde nám o dobro druhých. Nejde nám o bohatství. Jde o čisté opojení mocí.
28.3.2006 21:42 Martin
Rozbalit Rozbalit vše Re: LiveCD - 4 (linux live, před spuštěním systému)
Super clanok. Dakujem.
30.3.2006 17:44 xxxxxxxx | skóre: 16 | blog: mrtvy blog | v nebi
Rozbalit Rozbalit vše Re: LiveCD - 4 (linux live, před spuštěním systému)
jj, zajimave
1.4.2006 14:42 niobi | skóre: 10 | blog: Niobi w3b.1og | Liberec city
Rozbalit Rozbalit vše Re: LiveCD - 4 (linux live, před spuštěním systému)
Takovyto clanek mi tu chybel jiz nejakou dobu uvazuji o vytvoreni zakladniho linuxu na "kreditku" do penezenky... dik to znate nekomu se nekde neco po**** a tohle je nejjednodussi reseni placnout tam miniCD s miniLinuxem :-) a zacit s tim neco provadet :-)
Totalni paranoia Linuxaka: emerge -C windows-base/windowsXP-meta MAC-WAR.eu - aneb i na apple je warez :-P

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.