Sedam IT → Blog

Izrada LiveCD distribucije OpenWRT Linux sustava

Ovaj članak će vam prikazati kako zapakirati vlastitu verziju OpenWRT distribucije, u obliku pogodnom za direktno pokretanje.

OpenWRT je popularna Linux distribucija za sitnu kućnu elektroniku, poput kućnih rutera, ADSL modema, mrežnih preklopnika, itd. OpenWRT je složen i kompajliran za mnoge tipove procesora i arhitektura, poput Intel x86, MIPS, ARM, itd. Glavna značajka OpenWRTa je ekonomičnost: traži malo memorije i bilo koji CPU će biti dovoljan.

U ovom poglavlju ću pokazati kako zapakirati vlastitu verziju OpenWRT distribucije, u obliku pogodnom za direktno pokretanje, slično tzv. LiveCD distribucijama. Za čitanje bi bilo dobro da ste upoznati s osnovnim Linux komandama, i osnovno poznavanje bash skripti će dobro doći.


Za izradu sam koristio Ubuntu sustav na kućnom računalu za pripremu datoteka i konačnu izgradnju ISO cd-rom datoteke koja sadrži OpenWRT LiveCD sustav. Proces izgradnje ISO datoteke nije usko vezan za Ubuntu, te bi bilo koji drugi moderni Linux sustav bio dovoljan. Koristio sam tipične komande i alate koji se na većini modernih Linux distribucija mogu pronaći.

PRIPREMA

Za izradu ISO (cd-rom) datoteke, syslinux, isolinux i genisoimage paketa potrebni su:

Ovo bi trebalo instalirati navedene pakete. Bitna datoteka je isolinux.bin koja će ISO datoteku učiniti izvršnom.

Iz syslinux paketa nam treba ldlinux.c32 koji se nalazi u Ubuntu sustavu na lokaciji:

Bez ldlinux.c32 modula, isolinux loader neće pokrenuti OpenWRT kernel.

Programski paket genisoimage sadrži naredbu mkisofs za izradu ISO cd-rom datoteke.

Napravite podfolder openwrt, u svom radnom folderu:

Pa opet napravite podfolder cdrom:

Snimite OpenWRT kombiniranu ext4 image datoteku s web stranice:

https://archive.openwrt.org/chaos_calmer/15.05/x86/generic/

Preporučam ovu:

https://archive.openwrt.org/chaos_calmer/15.05/x86/generic/openwrt-15.05-x86-generic-combined-ext4.img.gz, jer ta datoteka sadrži OpenWRT kernel koji ima module potrebne za rad na većini sustava.

Otpakirajte arhivu:

Rezultat bi trebala biti datoteka koja predstavlja presliku čitavog hard diska:

Pripojite hard disk datoteku na loop uređaj:

Sada će sustav hard disk datoteku prepoznati kao novi uređaj, a komande za particioniranje, pripajanje, itd. će moći raditi s /dev/loop0 kao da je normalni disk uređaj poput /dev/sda.

Ispis bi trebao biti nešto poput ovoga:

Primjetite da openwrt-15.05-x86-generic-combined-ext4.img hard-diks datoteka ima 2 particije. Prva je tzv. boot partition, koja ima kernel datoteku vmlinuz, a druga je tzv. root particija sa svim potrebnim datotekama koje čine OpenWRT Linux sistem.

U nastavku je pokazano kako pripojiti obje particije i pristupiti datotekama koje će na kraju završiti u konačnoj ISO datoteci koja je rezultat rada.

Napravite 2 podfoldera u /mnt folderu:

Pripojite loop0 uređaj:

Brojevi u izračunu $((512*512)) i $((9216*512)) su iz prethodnog ispisa, iz kolone Start, i predstavljaju početak boot i root particije. Bash računa i postavlja korektne početne koordinate prilikom pripajanja boot i root particija pohranjenih u harddisk datoteci preuzetoj s OpenWRT web stranice.

Ispis datoteka u /mnt/openwrt-boot/ i /mnt/openwrt-rootfs/ folderima:

Ispis pokazuje tipični Linux datotečni sustav i raspored po folderima:

U ovom trenutku možemo početi pakirati datoteke u konačnu ISO cd-rom izvršnu datoteku.

IZRADA ISO DATOTEKE

Treba se pozicionirati u radni folder openwrt, podfolder cdrom/:

Ovdje se snimaju: kernel, initramfs i isolinux Linux loader za učitavanje kernela prilikom boot procedure.

Napravite isolinux/ folder i snimite isolinux.bin loader s modulom:

Napravite datoteku isolinux.cfg u folderu isolinux/ sa sadržajem:

Ovo je primjer konfiguracije isolinux loadera da prilikom pokretanja Linux kernela vmlinuz iskoristi datotečni sustav komprimiran u initrd.gz.

Prikazano je kako se može konfigurirati ispis na serijski priključak, u ovom primjeru na prvi COM priključak pri brzini 9600.

Praktično je prebaciti se kao root korisnik kako bi datoteke dobile ispravne dozvole i kako bi se izbjegli problemi poput Permission denied.

Napravite datoteku:

sa sadržajem:

To će biti prvi program kojega kernel pokreće u zadnjoj fazi učitavanja sustava. Zadnja linija:

je vrlo bitna jer ključna riječ exec osigurava da se procesni broj (PID) zadrži na 1 prilikom pokretanja /sbin/init programa.

Označite skriptu izvršnom:

Možemo pakirati root datotečni sustav u initramfs datoteku:

Ako ne pokrećete naredbe kao root korisnik, možete probati svakoj komandi dodati sudo, npr. komanda:

umjesto:

i na taj način će interpreter komandi izvršavati find i cpio s root dozvolama.

Provjerite sadržaj cdrom/ folder:

Ispis bi ovako trebao izgledati:

Ovdje je vmlinuz kernel kopiran s boot particije originalne OpenWRT harddisk slike, a initrd.gz je naš rezultat koji predstavlja initramfs datoteku. Initramfs se prilikom pokretanja otpakirava i sustav je koristi kao root datotečni sustav.

Folder isolinux/ sadrži minimum potrebnog za rad. Potrebni su samo loader isolinux.bin, moduli ldlinux.c32 i jednostavna konfiguracijska datoteka isolinux.cfg.

Izradite ISO cd-rom izvršnu datoteku s:

Ako je sve ispravno napravljeno, tada je rezultat openwrt-x86-LiveCD.iso datoteka spremna za testiranje u VirtualBoxu ili nekom drugom sustavu za pokretanje sustava, koji su zapakirani u ISO izvršne datoteke.

U ovom primjeru se sustav pokreće i automatski otvara naredbenom linijom. OpenWRT koristi busybox naredbenu liniju, a neke komande koje inače postoje na desktop Linux sustavima nisu prisutne u ovako pojednostavljenom sustavu. Može se dogovoditi da ta situacija iznenadi korisnika koji je navikao raditi na desktop Linux sustavima.

Sljedeći logičan korak bi bilo pakiranje korisnih programa u ovakav sustav, što ću ostaviti za neku drugu priliku.

ZAKLJUČAK

OpenWRT je popularna Linux distribucija za sustave skromnih zahtjeva. Koriste ga entuzijasti i ljubitelji Linuxa u cijelom svijetu.
Ovaj tekst može poslužiti kao baza za daljnju izradu specijaliziranih sustava baziranih na OpenWRT distribuciji.
Osnovna prednost OpenWRT su skromni zahtjevi za procesorom (CPU) i memorijom, što može biti bitno u nekim projektima s ograničenim mogućnostima elektronike.