opkginstall new packages somewhere else; however:
make image PROFILE=TLMR3020 PACKAGES="blkid block-mount kmod-fs-ext4 kmod-usb2 kmod-usb-uhci kmod-usb-ohci kmod-usb-storage"
You need to mount a file system, on which the overlay will be copied to.
Make sure that you can mount and have read/write access to your external storage device. For example, check if you can read/write from a manually mounted file system on your partitioned USB drive at
sda to your actual needs):
mount /dev/sda1 /mnt/sda1
You should check if the mount was succesful by running
df. Now check if you can write to
/mnt/sda1 by writing a file to it and reading it back.
root@OpenWrt:~# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 896 244 652 27% / /dev/root 2048 2048 0 100% /rom tmpfs 14708 64 14644 0% /tmp /dev/mtdblock6 896 244 652 27% /overlay overlayfs:/overlay 896 244 652 27% / tmpfs 512 0 512 0% /dev /dev/sda1 7759872 477328 7221104 6% /mnt/sda1 root@OpenWrt:~#
As described in extroot theory you can use pivot-overlay or pivot-root. This section will only cover pivot-overlay which is the recommended extroot implementation. If you really want pivot-root, check the Barrier Breaker section.
opkg update ; opkg install block-mount kmod-fs-ext4 kmod-usb-storage-extras
mount /dev/sda1 /mnt ; tar -C /overlay -cvf - . | tar -C /mnt -xf - ; umount /mnt
block detect > /etc/config/fstab; \ sed -i s/option$'\t'enabled$'\t'\'0\'/option$'\t'enabled$'\t'\'1\'/ /etc/config/fstab; \ sed -i s#/mnt/sda1#/overlay# /etc/config/fstab; \ cat /etc/config/fstab;
This command will create a fstab template enabling all partitions and setting '
/mnt/sda1' partition as '
/overlay' partition .
option enabled' is set to '
option target' of your root overlay partition must be set to '
option target' of your other partition(s) to show whatever mount point(s) you want them to have (make sure to also create the directories those mount points point to)
config 'global' option anon_swap '0' option anon_mount '0' option auto_swap '1' option auto_mount '1' option delay_root '5' option check_fs '0' config 'mount' option target '/overlay' option uuid 'c91232a0-c50a-4eae-adb9-14b4d3ce3de1' option fstype 'ext4' option enabled '1' config 'swap' option uuid '08b4f0a3-f7ab-4ee1-bde9-55fc2481f355' option enabled '1' config 'mount' option target '/data' option uuid 'c1068d91-863b-42e2-bcb2-b35a241b0fe2' option enabled '1'
root@OpenWrt:~# mount /dev/sda1 /overlay root@OpenWrt:~# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 896 244 652 27% / /dev/root 2048 2048 0 100% /rom tmpfs 14708 64 14644 0% /tmp /dev/mtdblock6 7759872 477328 7221104 6% /overlay overlayfs:/overlay 896 244 652 27% / tmpfs 512 0 512 0% /dev /dev/sda1 7759872 477328 7221104 6% /overlay root@OpenWrt:~#Note that only
/overlayhas grown but not the
mountshould show USB partition mounted as
root@OpenWrt:~# mount /dev/root on /rom type squashfs (ro,relatime) proc on /proc type proc (rw,noatime) sysfs on /sys type sysfs (rw,noatime) tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime) /dev/mtdblock6 on /overlay type jffs2 (rw,noatime) overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work) tmpfs on /dev type tmpfs (rw,relatime,size=512k,mode=755) devpts on /dev/pts type devpts (rw,relatime,mode=600) /dev/sda1 on /overlay type ext4 (rw,relatime,data=ordered) /dev/sda3 on /data type ext4 (rw,relatime,data=ordered) debugfs on /sys/kernel/debug type debugfs (rw,noatime) root@OpenWrt:~#
dfshould show free space available on your
/partition, all the storages mounted to
rootfsin the first place) should look the same increased capacity:
root@OpenWrt:~# df Filesystem 1K-blocks Used Available Use% Mounted on rootfs 7759872 477328 7221104 6% / /dev/root 2048 2048 0 100% /rom tmpfs 14708 64 14644 0% /tmp /dev/mtdblock6 7759872 477328 7221104 6% /overlay overlayfs:/overlay 7759872 477328 7221104 6% / tmpfs 512 0 512 0% /dev /dev/sda1 7759872 477328 7221104 6% /overlay /dev/sda3 242846048 163864 230323224 0% /data root@OpenWrt:~#
/etc/opkg.confto allow installation of packets bigger than your
/rompartitions free space:
echo option force_space >> /etc/opkg.conf
mkfs.ext4 /dev/sda1as per the example, also see storage).
config 'global' / option delay_root. On my system I had to set it to 15 seconds to get extroot working. Another hint to this being the culprit is having a working swap or other partitions mounted after booting, but not your extroot.
export PREINIT = 1;
mount_root, as described in 14946 ticket, which in the case of running Chaos Calmer r44266 in the Comtrend AR-5387un, has been the only thing that allowed me to achieve extroot.
/etc/config/fstabin the overlay partition. If your
/etc/config/fstabin the overlay partition only contains a
globalsection, you may need to add the following from the example:
config 'swap' option uuid '08b4f0a3-f7ab-4ee1-bde9-55fc2481f355' option enabled '1' config 'mount' option target '/data' option uuid 'c1068d91-863b-42e2-bcb2-b35a241b0fe2' option enabled '1'
kmod-fs-ext4 package is rather large, it can be a challenge setting up extroot on 4MB flash devices, where extroot is most needed.
Therefore, you can build an image to flash to your device with the required packages already included, this method saves considerable space on your device.
Using the image generator makes building the image very easy. See the Image Generator page for more detailed instructions.
make infofor a list):
make image PROFILE="TLMR3220" PACKAGES="kmod-fs-ext4 kmod-usb-storage"
Your new firmware file will be located within the
bin folder, with the packages to enable extroot already included.
The Use 3g/UMTS USB Dongle for WAN connection article advises to include the
usb-modeswitch tool in the image.
There is a caveat: if the
/overlay points to a memory card sitting in a slot of the dongle - the otherwise working
pivot overlay set-up will break in the later stages of OS boot. This is because the
usb-modeswitch (while disabling the CDROM and enabling the modem) would also intermittently affect the card-reader in the dongle thus hurting the file system.
To avoid this you need a dongle that can be pre-configured to enable its' modem or network adapter (and the card-reader as well) on the power-up, without the need to do it with the
usb-modeswitch on the router.
Insert your dongle in a desktop and use a terminal to send the necessary AT-commands.
Check your dongle's initial configuration:
at^setport? ^SETPORT:A1,A2;1,3,2,A1,A2 OKThe meaning of the above report can be understood with the following command:
at^setport=? ^SETPORT:A1: CDROM ^SETPORT:A2: SD ^SETPORT:A: BLUE TOOTH ^SETPORT:B: FINGER PRINT ^SETPORT:D: MMS ^SETPORT:E: PC VOICE ^SETPORT:1: MODEM ^SETPORT:2: PCUI ^SETPORT:3: DIAG ^SETPORT:4: PCSC ^SETPORT:5: GPS ^SETPORT:6: GPS CONTROL ^SETPORT:16: NCM OKSo, in the example above we have a dongle with CDROM and card-reader available in the first configuration (to the left of the
;character), and with modem, control and diagnostic interfaces, and card-reader available in the other configuration. It is between these configurations the
usb-modeswitchswitches the dongle on the router.
1above) or the network adapter (the
16above) while leaving the card-reader enabled (the
2above) - this will lock you out from your dongle!
;character according to their codes from the dongle's answer above:
at^setport="ff;1,2,3,a2" OK at^reset OK at^setport? ^SETPORT:;1,2,3,A2 OKThis sequence has disabled the CDROM and made the modem, control and diagnostic interfaces and the card-reader available by default - without any
usb-modeswitchinteraction. Thus only one configuration exists now in the dongle - see the
;character, there is nothing to the left of it now.
iptableswill be broken.
Sometimes you may need to access the original root overlay, for example to change your extroot settings. A convenient way of doing this is to configure
/etc/config/fstab on your extroot partition to mount the original root overlay in another directory, like this:
config mount option target /overlay-boot option device /dev/mtdblock3 option fstype jffs2 option options rw,sync option enabled 1 option enabled_fsck 0This assumes the original, internal overlay was on
/dev/mtdblock3- check your router's page on this wiki and look at the flash map to confirm what MTD block it is for you. Or run
$ cat /proc/mtdand search the partition named
rootfs_datato know where is your overlay.
If you then create
/overlay-boot on the extroot partition, this directory will contain the original root overlay, which is used as the main root overlay until the extroot is up and running. So you can then for example edit
/overlay-boot/etc/config/fstab to change your extroot configuration (or temporarily disable it) should you ever need to.
For extroot on OpenWrt versions Barrier Breaker, Attitude Adjustment, Backfire see: extroot.old