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
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:
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.
block-mount kmod-usb-storage kmod-fs-ext4 mod-usb-core kmod-usb2 kmod-mmc
config mount
option target /
option device /dev/sda1
option fstype ext4
option options rw,sync
option enabled 1
option enabled_fsck 0
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
Takto jsem se znazil, jeste nez vznikla oficialni podpora pro chroot v OpenWRT. Jsou zde zajimave veci, ktere se mohou hodit jinde.
mkdir /tmp/sto /tmp/new_root mount /dev/sda1 /tmp/sto
mount -t mini_fo -o base=/rom,sto=/tmp/sto /rom /tmp/new_root
mount --bind /tmp/sto /overlay
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
'nejspis je potreba ext3!! na fat mi to hazelo nejake chyby.. nejde nastavit napriklad suid bit'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 :(
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