So I've been trying to create a Debian rootfs tiny enough to fit into the limited NAND storage found on the Pogoplug (E02/Mobile) which is only 128 MB. The goal being to produce an embedded Debian rescue system now that Embedian is no longer around. My first attempt using
Debian Stretch - Mini Rootfs Armel No Kernel
As the name implies there's no kernel installed in the system because unfortunately once installed, the kernel brings the total rootfs size to ~200 MB. This should not be an issue for devices with larger NAND storage but I'm currently still working on compiling a small enough kernel to fit in the remaining NAND flash. That said I figured someone else might benefit from the rootfs and this project in its current state. This is the list of the total installed packages:
In case you'd like to create your own rootfs, i'll outline the steps i took
---------------------------------------------------------------------------------------------
On another linux machine, use docker to pull a recent "slim" Debian container. This is the one I used:
Now on an ARMV5/Armel system:
Create a small img that we'll loopback mount:
copy/extract layer.tar into mounted image. As root:
Copy these debs into SomeMountPoint/tmp for later install:
chroot into the rootfs (as root):
Now that you're in the chroot system you just need to install the deb's we copied over in a previous step. Also create/edit the following config files:
Don't forget to change the default password:
Now you can choose to install one of Bodhi's kernel's which works perfectly on this rootfs but will take the total installed size to ~200 MB. Regardless when you're ready exit and umount proc,dev/pts, and dev/urandom as well as the mounted image:
Now you should have an img you can mount/copy/backup which you can use to create a tar.gz backup/rootfs as outlined in Bodhi's wiki post:
https://forum.doozan.com/read.php?2,12096,24034#msg-24034
debootstrap --arch=armel --variant=minbase stretch . http://SomeDebianMirrorCreated a rootfs that was still much too big. Somewhere near 250 MB+ if memory serves. After some research I found that Debian produces a slimmed down rootfs for docker that is small enough, but lacks several components to run on actual hardware as there's no init system, no kernel, and no networking, After still more hours of work/research I added back the missing components and was surprised the whole rootfs was roughly ~85 MB total uncompressed (24 MB compressed). I've taken the liberty of uploading it here:
Debian Stretch - Mini Rootfs Armel No Kernel
As the name implies there's no kernel installed in the system because unfortunately once installed, the kernel brings the total rootfs size to ~200 MB. This should not be an issue for devices with larger NAND storage but I'm currently still working on compiling a small enough kernel to fit in the remaining NAND flash. That said I figured someone else might benefit from the rootfs and this project in its current state. This is the list of the total installed packages:
apt list --installed Listing... Done adduser/now 3.115 all [installed,local] apt/now 1.4.10 armel [installed,local] base-files/now 9.9+deb9u13 armel [installed,local] base-passwd/now 3.5.43 armel [installed,local] bash/now 4.4-5 armel [installed,local] bsdutils/now 1:2.29.2-1+deb9u1 armel [installed,local] busybox/now 1:1.22.0-19+b3 armel [installed,local] coreutils/now 8.26-3 armel [installed,local] cpio/now 2.11+dfsg-6 armel [installed,local] dash/now 0.5.8-2.4 armel [installed,local] debconf/now 1.5.61 all [installed,local] debian-archive-keyring/now 2017.5+deb9u1 all [installed,local] debianutils/now 4.8.1.1 armel [installed,local] dialog/now 1.3-20160828-2 armel [installed,local] diffutils/now 1:3.5-3 armel [installed,local] dpkg/now 1.18.25 armel [installed,local] dropbear-bin/now 2016.74-5+deb9u1 armel [installed,local] dropbear-initramfs/now 2016.74-5+deb9u1 all [installed,local] dropbear-run/now 2016.74-5+deb9u1 all [installed,local] e2fslibs/now 1.43.4-2+deb9u2 armel [installed,local] e2fsprogs/now 1.43.4-2+deb9u2 armel [installed,local] findutils/now 4.6.0+git+20161106-2 armel [installed,local] gcc-6-base/now 6.3.0-18+deb9u1 armel [installed,local] gpgv/now 2.1.18-8~deb9u4 armel [installed,local] grep/now 2.27-2 armel [installed,local] gzip/now 1.6-5+b1 armel [installed,local] hostname/now 3.18+b1 armel [installed,local] ifupdown/now 0.8.19 armel [installed,local] init-system-helpers/now 1.48 all [installed,local] initramfs-tools/now 0.130 all [installed,local] initramfs-tools-core/now 0.130 all [installed,local] initscripts/now 2.88dsf-59.9 armel [installed,local] insserv/now 1.14.0-5.4+b1 armel [installed,local] iproute2/now 4.9.0-1+deb9u1 armel [installed,local] isc-dhcp-client/now 4.3.5-3+deb9u1 armel [installed,local] isc-dhcp-common/now 4.3.5-3+deb9u1 armel [installed,local] klibc-utils/now 2.0.4-9 armel [installed,local] kmod/now 23-2 armel [installed,local] libacl1/now 2.2.52-3+b1 armel [installed,local] libapt-pkg5.0/now 1.4.10 armel [installed,local] libattr1/now 1:2.4.47-2+b2 armel [installed,local] libaudit-common/now 1:2.6.7-2 all [installed,local] libaudit1/now 1:2.6.7-2 armel [installed,local] libblkid1/now 2.29.2-1+deb9u1 armel [installed,local] libbz2-1.0/now 1.0.6-8.1 armel [installed,local] libc-bin/now 2.24-11+deb9u4 armel [installed,local] libc6/now 2.24-11+deb9u4 armel [installed,local] libcap-ng0/now 0.7.7-3+b1 armel [installed,local] libcomerr2/now 1.43.4-2+deb9u2 armel [installed,local] libdb5.3/now 5.3.28-12+deb9u1 armel [installed,local] libdebconfclient0/now 0.227 armel [installed,local] libdns-export162/now 1:9.10.3.dfsg.P4-12.3+deb9u7 armel [installed,local] libelf1/now 0.168-1 armel [installed,local] libfdisk1/now 2.29.2-1+deb9u1 armel [installed,local] libgcc1/now 1:6.3.0-18+deb9u1 armel [installed,local] libgcrypt20/now 1.7.6-2+deb9u3 armel [installed,local] libgpg-error0/now 1.26-2 armel [installed,local] libisc-export160/now 1:9.10.3.dfsg.P4-12.3+deb9u7 armel [installed,local] libklibc/now 2.0.4-9 armel [installed,local] libkmod2/now 23-2 armel [installed,local] liblz4-1/now 0.0~r131-2+b1 armel [installed,local] liblzma5/now 5.2.2-1.2+b1 armel [installed,local] libmnl0/now 1.0.4-2 armel [installed,local] libmount1/now 2.29.2-1+deb9u1 armel [installed,local] libncurses5/now 6.0+20161126-1+deb9u2 armel [installed,local] libncursesw5/now 6.0+20161126-1+deb9u2 armel [installed,local] libpam-modules/now 1.1.8-3.6 armel [installed,local] libpam-modules-bin/now 1.1.8-3.6 armel [installed,local] libpam-runtime/now 1.1.8-3.6 all [installed,local] libpam0g/now 1.1.8-3.6 armel [installed,local] libpcre3/now 2:8.39-3 armel [installed,local] libprocps6/now 2:3.3.12-3+deb9u1 armel [installed,local] libselinux1/now 2.6-3+b3 armel [installed,local] libsemanage-common/now 2.6-2 all [installed,local] libsemanage1/now 2.6-2 armel [installed,local] libsepol1/now 2.6-2 armel [installed,local] libsmartcols1/now 2.29.2-1+deb9u1 armel [installed,local] libss2/now 1.43.4-2+deb9u2 armel [installed,local] libssl1.0.2/now 1.0.2u-1~deb9u2 armel [installed,local] libstdc++6/now 6.3.0-18+deb9u1 armel [installed,local] libsystemd0/now 232-25+deb9u12 armel [installed,local] libtinfo5/now 6.0+20161126-1+deb9u2 armel [installed,local] libudev1/now 232-25+deb9u12 armel [installed,local] libustr-1.0-1/now 1.0.4-6 armel [installed,local] libuuid1/now 2.29.2-1+deb9u1 armel [installed,local] linux-base/now 4.5 all [installed,local] linux-image-4.20.6-kirkwood-tld-1/now 1.0 armel [installed,local] login/now 1:4.4-4.1 armel [installed,local] lsb-base/now 9.20161125 all [installed,local] mawk/now 1.3.3-17+b3 armel [installed,local] mount/now 2.29.2-1+deb9u1 armel [installed,local] multiarch-support/now 2.24-11+deb9u4 armel [installed,local] ncurses-base/now 6.0+20161126-1+deb9u2 all [installed,local] ncurses-bin/now 6.0+20161126-1+deb9u2 armel [installed,local] net-tools/now 1.60+git20161116.90da8a0-1 armel [installed,local] netbase/now 5.4 all [installed,local] passwd/now 1:4.4-4.1 armel [installed,local] perl-base/now 5.24.1-3+deb9u7 armel [installed,local] procps/now 2:3.3.12-3+deb9u1 armel [installed,local] sed/now 4.4-1 armel [installed,local] sensible-utils/now 0.0.9+deb9u1 all [installed,local] startpar/now 0.59-3.1 armel [installed,local] sysv-rc/now 2.88dsf-59.9 all [installed,local] sysvinit-core/now 2.88dsf-59.9 armel [installed,local] sysvinit-utils/now 2.88dsf-59.9 armel [installed,local] tar/now 1.29b-1.1 armel [installed,local] tzdata/now 2020a-0+deb9u1 all [installed,local] u-boot-tools/now 2016.11+dfsg1-4 armel [installed,local] udev/now 232-25+deb9u12 armel [installed,local] util-linux/now 2.29.2-1+deb9u1 armel [installed,local] zlib1g/now 1:1.2.8.dfsg-5 armel [installed,local]
In case you'd like to create your own rootfs, i'll outline the steps i took
---------------------------------------------------------------------------------------------
On another linux machine, use docker to pull a recent "slim" Debian container. This is the one I used:
docker pull debian@sha256:ee521e00a735696b1d44cb15620e924bd6f2e9b69553ce873f8efc0a567f376bPull up the Image ID of the container you just downloaded:
sudo docker images -aSave it as a tar archive:
docker save -o SomeName.tar IMAGE-IDOnce you extract the archive, there should be a file called "layer.tar" inside. That's the base rootfs archive that's used (~53 MB). This will need to be copied over to an Armel based system.
Now on an ARMV5/Armel system:
Create a small img that we'll loopback mount:
dd if=/dev/zero of=ImageName.img bs=1M count=200 status=progress mkfs.ext3 ImageName.img mount -o loop ImageName.img SomeMountPoint/
copy/extract layer.tar into mounted image. As root:
cp layer.tar SomeMountPoint/ cd SomeMountPoint/ tar -xvf layer.tar
Copy these debs into SomeMountPoint/tmp for later install:
busybox_1.22.0-19+b3_armel.deb cpio_2.11+dfsg-6_armel.deb dialog_1.3-20160828-2_armel.deb dropbear-bin_2016.74-5+deb9u1_armel.deb dropbear-initramfs_2016.74-5+deb9u1_all.deb dropbear-run_2016.74-5+deb9u1_all.deb ifupdown_0.8.19_armel.deb initramfs-tools_0.130_all.deb initramfs-tools-core_0.130_all.deb initscripts_2.88dsf-59.9_armel.deb insserv_1.14.0-5.4+b1_armel.deb iproute2_4.9.0-1+deb9u1_armel.deb isc-dhcp-client_4.3.5-3+deb9u1_armel.deb isc-dhcp-common_4.3.5-3+deb9u1_armel.deb klibc-utils_2.0.4-9_armel.deb kmod_23-2_armel.deb libdns-export162_9.10.3.dfsg.P4-12.3+deb9u7_armel.deb libelf1_0.168-1_armel.deb libisc-export160_9.10.3.dfsg.P4-12.3+deb9u7_armel.deb libklibc_2.0.4-9_armel.deb libkmod2_23-2_armel.deb libmnl0_1.0.4-2_armel.deb libncurses5_6.0+20161126-1+deb9u2_armel.deb libprocps6_3.3.12-3+deb9u1_armel.deb libssl1.0.2_1.0.2u-1~deb9u2_armel.deb linux-base_4.5_all.deb netbase_5.4_all.deb net-tools_1.60+git20161116.90da8a0-1_armel.deb procps_3.3.12-3+deb9u1_armel.deb startpar_0.59-3.1_armel.deb sysvinit-core_2.88dsf-59.9_armel.deb sysv-rc_2.88dsf-59.9_all.deb u-boot-tools_2016.11+dfsg1-4_armel.deb udev_232-25+deb9u12_armel.deb
chroot into the rootfs (as root):
In the root of SomeMountPoint: mkdir dev/pts touch dev/urandom mount -t proc /proc/ proc/ mount devpts dev/pts/ -t devpts mount --bind /dev/urandom dev/urandom chroot . /bin/bash
Now that you're in the chroot system you just need to install the deb's we copied over in a previous step. Also create/edit the following config files:
/etc/network/interfaces /etc/fw_env.config /etc/fstabThese can be copied over from Bodhi's rootfs without issue.
Don't forget to change the default password:
passwd
Now you can choose to install one of Bodhi's kernel's which works perfectly on this rootfs but will take the total installed size to ~200 MB. Regardless when you're ready exit and umount proc,dev/pts, and dev/urandom as well as the mounted image:
exit umount proc/ umount dev/pts umount dev/urandom cd .. umount SomeMountPoint
Now you should have an img you can mount/copy/backup which you can use to create a tar.gz backup/rootfs as outlined in Bodhi's wiki post:
https://forum.doozan.com/read.php?2,12096,24034#msg-24034