Toto je starší verze dokumentu!
Obsah
OpenWrt
nastaveni time zone
echo "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00" > /etc/TZ
http://wiki.openwrt.org/oldwiki/openwrtdocs/whiterussian/configuration
statistiky provozu
- jak nahradit hotsanic? :) - pomoci iptables
root@HomeRouterII:~# iptables -L INPUT -vxn
Chain INPUT (policy ACCEPT 8444 packets, 1003147 bytes)
pkts bytes target prot opt in out source destination
1828997 189743951 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
30524 1893399 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
10019 529628 syn_flood tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02
2153813 265801766 input_rule all -- * * 0.0.0.0/0 0.0.0.0/0
2153766 265799194 input all -- * * 0.0.0.0/0 0.0.0.0/0
- pomoci -z lze zresetovat statistiky
- pokud nebude moc big.. lze pouzit rrdtool
- mozna neni vubec potreba perl.. proc?
- tutorial na rrdtool nepouziva perl :) http://oss.oetiker.ch/rrdtool/tut/rrdtutorial.en.html
- neci pokus a jednoduchy statistiky.. ale s perlem :) http://sandbox.cz/~covex/czfree/rrstats.html
- zavislosti u openwrt rrdtool (74066) → librrd (655035) → libart (97986), libfreetype (486683), libpng (296830), zlib (80048)
- velikost potrebna pro rrdtool: ~ 1.7MB
iftop
- kolik zabere? :)
- iftop (62791), libpcap (180563), libncurses (425516), libpthread (83890)
- celkem ~ 800K
chroot na usb (extroot)
extroot - pouzivani externiho uloziste jako korenovy adresar / (root) teorie extroot, extroot
Embeded zarizeni (SoC) vetsinou nepodporuji bootovani primo z USB (FTL flash), musi se nejprve spustit system ulozeny na flash chipu (raw flash).
Extroot lze v takovych pripadech realizovat pouze tak, ze do flash chipu se ulozi system, ktery behem startu prepne na nove externi uloziste. Je potreba pripravit image pro raw flash routeru a souborovy system na externim ulozisti.
Omezeni (upgradovani) pri pouzivani externiho uloziste
- nesmi se pouzivat balicky kompilovane s jinou verzi uClibc nez image. Nemusi byt kompatibilni.
- nesmi se upgradovat kernel na jinou verzi nebo z jineho build prostredi. Zpusobilo by nekompatibilitu.
- nesmi se pouzivat balicky, ktere byly kompilovane vuci jine verzi kernelu (treba iptables)
OpenWRT od verze Attitude Adjustment se snazi detekovat takove nekonzistence a predejit problemum vypnutim bootovani z externiho zarizeni. V takovem pripade je extroot pripojen do /tmp/overlay-disabled, aby se mohl opravit. Pokud je potreba upgradovat kernel, musi se upgradovat jak na extroot, tak v image.
OpenWRT podporuje dva rezimy extroot:
- pivot-overlay - externi uloziste tvori „prekryv“ - do puvodniho souboroveho systemu pridava/odstranuje polozky. Je vytvoren virtualni souborovy system (mini_fo), ktery se sklada z read-only casti ve flash a read-write na externim ulozisti.
- pivot-root - pouziva se vyhradne externi uloziste
image pro raw flash
- image se vetsinou vytvari se souborovym system squashfs (read-only) + jffs (rw), aby bylo mozne ukladat konfiguracni zmeny nebo provadet upgrade balicku.
- v kernelu je potreba drivery:
- kmod-usb-storage mod-usb-core kmod-usb2 - zakladni usb subsystem
- kmod-mmc - driver pro SD/MMC karty
- kmod-fs-ext4 - pro pouzity filesystem na externim ulozisti
- i kdyz mame tyto drivery v jadre.. stale je potreba neco, co by v init pripojilo souborovy system na externim ulozisti bez jineho souboroveho systemu, kde by tato akce byla popsana. K tomu se pouziva modul block-mount (drive navic block-extroot, block-hotplug)
- v image je dobre mit take nastroj e2fsprogs, pro vytvareni filesystemu na externim ulozisit (neni nutne)
Pro image si udelam vlastni build, chci tam mit jen minimum veci nezbytnych pro pro boot z externiho uloziste. Pokud bych pouzil image primo z openwrt, musel bych tam jeste doinstalovat chybejici balicky a image by byl zbytecne velky. Bude se mi take lepe udrzovat konzistence mezi externim ulozistem a image, protoze budu mit stejne buildovaci prostredi.
- vybereme zakladni balicky plus nasledujici
block-mount kmod-usb-storage kmod-fs-ext4 mod-usb-core kmod-usb2 kmod-mmc
- do fstab pridame (az po bootu nebo modfifikujeme cilovy fs)
config mount
option target /
option device /dev/sda1
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0
priprava externiho uloziste (pivot-root)
- externi uloziste se nejcasteji vytvari primo v nastarovanem OpenWrt na cilovem zarizeni.
- nejprve se vytvori filesystem (v tomto pripade ext4 na externim zarizeni /dev/sda1)
- v root filesystemu jsou pripojeny specialni soubory ve slozkach jako /dev /proc .., abychom nekopirovaly tyto systemove soubory, vytvari se bind souboroveho systemu do jineho adresare
- nevim, proc se pouziva tar misto cp, mozna je to flexibilnejsi (kopirovani po siti)
mkfs.ext4 /dev/sda1 mount /dev/sda1 /mnt mkdir /tmp/cproot mount --bind / /tmp/cproot tar -C /tmp/cproot -cvf - . | tar -C /mnt -xvf - sync ; umount /mnt umount /tmp/cproot
TIP: aby se dalo ihned rozlisit, zda nastartoval image nebo extroot je mozne ulozit do /etc/banner info o tom, ze je to z extroot :) TIP: online zalohu root (ro+sd) lze provest takto:
mount --bind / /tmp/xxx ssh gate "tar -C /tmp/xxx -cvf - ." > /tmp/zaloha.tar
stary pokus
Takto jsem se znazil, jeste nez vznikla oficialni podpora pro chroot v OpenWRT. Jsou zde zajimave veci, ktere se mohou hodit jinde.
- cil: pripravit USB disk s ext3
- problem - jak spustit chroot pred bootem init skriptu? prej to jde jen predanim options kernelu… ale do redboot preci zasahovat nemuzu ne?
- model A
- instalace
- nakopirovat obsah /dev/mtdblock3 on /overlay type jffs2 na usb
- inicializace
mkdir /tmp/sto /tmp/new_root mount /dev/sda1 /tmp/sto
- vytvorime novy R/W FS zalozeny na ROM
mount -t mini_fo -o base=/rom,sto=/tmp/sto /rom /tmp/new_root
- premountujeme adr, do ktereho se instaluji nove balicky
mount --bind /tmp/sto /overlay
- premountujeme zakladni adresare
mount --bind /tmp/new_root/etc /etc mount --bind /tmp/new_root/lib /lib mount --bind /tmp/new_root/sbin /sbin mount --bind /tmp/new_root/usr /usr mount --bind /tmp/sto/root /root
- slo by neco odmountovat?
'nejspis je potreba ext3!! na fat mi to hazelo nejake chyby.. nejde nastavit napriklad suid bit'- script pro rspro :)
- haze mi to seg.fault.. mam podezreni na FAT (misto ext3)… mozna chyba pri mountovani etc? - zkusim preskocit
mkdir /tmp/sto /tmp/new_root mount /dev/sda1 /tmp/sto mount --bind /tmp/sto/chroot /jffs mount -t mini_fo -o base=/rom,sto=/tmp/sto/chroot /rom /tmp/new_root mount --bind /tmp/new_root/lib /lib which Segmentation fault :(
- zjednodusena verze
mkdir /tmp/new_root mount -t mini_fo -o base=/rom,sto=/mnt/sdcard/chroot /rom /tmp/new_root ls -l /tmp/new_root/lib/ Segmentation fault
logread -f Jul 3 20:11:41 HomeRouterII user.alert kernel: CPU 0 Unable to handle kernel paging request at virtual address 0000008c, epc == 87b921a0, ra == 800e1afc Jul 3 20:11:41 HomeRouterII user.warn kernel: Oops[#1]: Jul 3 20:11:41 HomeRouterII user.warn kernel: Cpu 0 Jul 3 20:11:41 HomeRouterII user.warn kernel: $ 0 : 00000000 00000001 00000000 0000002e Jul 3 20:11:41 HomeRouterII user.warn kernel: $ 4 : 874e6380 874e859c 873a1d90 00000009 Jul 3 20:11:41 HomeRouterII user.warn kernel: $ 8 : 8732e011 874e635b 87b3bbe0 fffffff4 Jul 3 20:11:41 HomeRouterII user.warn kernel: $12 : 00000025 00000807 00000800 00480000 Jul 3 20:11:41 HomeRouterII user.warn kernel: $16 : 874e8580 874e8590 874e6300 873a1d90 Jul 3 20:11:41 HomeRouterII user.warn kernel: $20 : 00000009 8732e012 23d0d3f8 873fa700 Jul 3 20:11:41 HomeRouterII user.warn kernel: $24 : 00482398 87b92194 Jul 3 20:11:41 HomeRouterII user.warn kernel: $28 : 873a0000 873a1d08 873a1d80 800e1afc
- zajimave.. ok je: /tmp/new_root/, /tmp/new_root/etc, /tmp/new_root/usr,
- nok je .. /tmp/new_root/rom, /tmp/new_root/bin, /tmp/new_root/lib, /tmp/new_root/usr/*/
build konkretni vereze kernel
Tweak the LINUX_VERSION variable in target/linux/ar71xx/Makefile. Supported Kernels are listed in include/kernel-version.mk
