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.
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.
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.
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.