I've put a little time into generating a hyper small footprint linaro headless image. From UDS the two sizes to try and fit into as I understand are 64M and 128M installed. So with that in mind, via live helper I created a headless image where none of the recommended packages were installed. This brings the installed size of the root fs down to 165Meg installed (excluding hwpacks)
With a little script-foo which I've created to be part of the live-helper build I can get the rootfs installed size down to 82,240,000. This is without turning to the usual things to slim things down like busybox as well as without going through /bin /sbin /usr/bin /usr/lib /lib and pulling out specific function that isn't needed.
What I have done is gone after the low hanging fruit. That is i18n locales, documentation, zoneinfo, charmaps and some X11 & firefox things that obviously aren't needed since those things aren't installed in headless anyway. All of that gets us down to `125Meg. To get the next approx 40Meg I have to take out /var/lib/dpkg and /var/lib/apt. This could make a certain amount of sense for a demo system running on out NAND flash. This is somewhat problematic however in so much if you want to use linaro-media-create with hwpacks, well you need apt to work and that comes with the as mentioned 40 Meg price tag.
Anyway this seemed to be a good Friday night over a beverage type of hack to gain a little data just to see the effort required.
All in all I do think this is a reasonable approach to get to a "nano" sized system that would fit into flash. To get that last mile tho, I think we'd need to turn to busybox, audit the libs and binaries, adjust the kernel build such that modules are kept to a minimum and only function actually needed is built in the kernel as well as working out the last bit of install via something linaro-media-create-like so that one could at least get things onto an SD card without too much hackery for test yet not gain the full 123 meg noted below.
Raw Data: --------------
du of the 82 Meg system, hwpack not yet installed 4 ./proc 4 ./home 4 ./sys 9784 ./lib 3364 ./sbin 4 ./selinux 12 ./dev 4 ./srv 12 ./root 928 ./var 4 ./tmp 3688 ./bin 61456 ./usr 4 ./opt 2260 ./etc 4 ./mnt 4 ./boot 4 ./media 82240
du of the 125 Meg system (without /var/lib/apt and /var/lib/dpkg chopped out) hwpack not installed yet 4 ./proc 4 ./home 4 ./sys 9784 ./lib 3364 ./sbin 4 ./selinux 12 ./dev 4 ./srv 12 ./root 44064 ./var 4 ./tmp 3688 ./bin 61456 ./usr 4 ./opt 2260 ./etc 4 ./mnt 4 ./boot 4 ./media 125376 .
du of installed system (based on the 125Meg image) after hwpack installed and system is booted 4 ./home 4 ./opt 4 ./srv 4 ./mnt 65312 ./usr <--- grew by 4 Meg 3764 ./bin 3444 ./sbin 16 ./root 4 ./tmp 75816 ./var <-- var is ~31 Meg larger after hwpack install!! 4 ./selinux 0 ./sys 4 ./media 2276 ./etc 86524 ./lib <-- lib after hwpack install is ~79 Meg larger!! 10400 ./boot <-- grew by 10 Meg 188 ./dev 16 ./lost+found 0 ./proc 248484 . <-- grew by ~123Meg
For those interested in following in my footsteps, my live helper maverick config is located in here:
lp:~tom-gall/linaro/live-helper.config.maverick.headless-nano
du of original 165 Meg headless image without recommended packages. 4 ./proc 4 ./home 4 ./sys 852 ./lib/udev 4 ./lib/firmware 508 ./lib/security 148 ./lib/plymouth 200 ./lib/terminfo 40 ./lib/init 4 ./lib/modules 16 ./lib/lsb 9784 ./lib 3364 ./sbin 4 ./selinux 4 ./dev/pts 4 ./dev/shm 12 ./dev 4 ./srv 12 ./root 16 ./var/spool 4 ./var/lock 4 ./var/mail 12 ./var/log 43392 ./var/lib 4 ./var/run 4 ./var/tmp 4 ./var/opt 4 ./var/backups 612 ./var/cache 4 ./var/local 44064 ./var 4 ./tmp 3688 ./bin 34604 ./usr/lib 1580 ./usr/sbin 54756 ./usr/share 4 ./usr/games 4 ./usr/src 10260 ./usr/bin 40 ./usr/include 56 ./usr/local 101308 ./usr 4 ./opt 20 ./etc/udev 64 ./etc/pam.d 8 ./etc/rc5.d 8 ./etc/cron.monthly 36 ./etc/cron.daily 8 ./etc/rc4.d 4 ./etc/profile.d 8 ./etc/rsyslog.d 144 ./etc/console-setup 16 ./etc/skel 68 ./etc/initramfs-tools 8 ./etc/cron.hourly 28 ./etc/modprobe.d 56 ./etc/apt 48 ./etc/security 48 ./etc/default 20 ./etc/apparmor.d 8 ./etc/rc3.d 12 ./etc/kbd 8 ./etc/X11 664 ./etc/ssl 8 ./etc/insserv 4 ./etc/insserv.conf.d 8 ./etc/cron.d 16 ./etc/bash_completion.d 8 ./etc/alternatives 24 ./etc/sysctl.d 32 ./etc/dhcp3 12 ./etc/ld.so.conf.d 28 ./etc/iproute2 12 ./etc/apparmor 8 ./etc/terminfo 16 ./etc/update-motd.d 24 ./etc/dpkg 8 ./etc/rcS.d 4 ./etc/lsb-base 12 ./etc/firefox 8 ./etc/sudoers.d 172 ./etc/init 4 ./etc/opt 8 ./etc/ca-certificates 8 ./etc/rc1.d 36 ./etc/network 8 ./etc/python 8 ./etc/linaro 8 ./etc/rc6.d 8 ./etc/ldap 16 ./etc/logrotate.d 16 ./etc/logcheck 20 ./etc/kernel 8 ./etc/depmod.d 108 ./etc/init.d 8 ./etc/rc0.d 12 ./etc/vim 8 ./etc/rc2.d 8 ./etc/python2.6 12 ./etc/dbus-1 8 ./etc/cron.weekly 2280 ./etc 4 ./mnt 4 ./boot 4 ./media 165248 .
Regards, Tom
On Saturday 06 November 2010, Tom Gall wrote:
I've put a little time into generating a hyper small footprint linaro headless image. From UDS the two sizes to try and fit into as I understand are 64M and 128M installed. So with that in mind, via live helper I created a headless image where none of the recommended packages were installed. This brings the installed size of the root fs down to 165Meg installed (excluding hwpacks)
I've had a few conversations at Plumbers Conf about the new "yocto" project of the Linux Foundation. I think going to the really small sizes (certainly below 64 MB), it would be much easier to build on this than the Ubuntu archive. The yocto folks are very interested in using the Linaro kernel and tool chain to build their images for ARM, at least as one of the options.
Having a yocto-headless image below a nano-headless image seems to also fit in with the naming ;-)
Arnd
Dnia poniedziaĆek, 8 listopada 2010 o 09:36:52 Arnd Bergmann napisaĆ(a):
I've had a few conversations at Plumbers Conf about the new "yocto" project of the Linux Foundation. I think going to the really small sizes (certainly below 64 MB), it would be much easier to build on this than the Ubuntu archive.
The yocto folks are very interested in using the Linaro kernel and tool chain to build their images for ARM, at least as one of the options.
Having a yocto-headless image below a nano-headless image seems to also fit in with the naming ;-)
If we will decide to work on Yocto Project then I would like to be one of such persons due to fact that I am OpenEmbedded developer since 2004 and developed Poky in 2007-2009 (as part of main development team in 2007-2008 and as one of main contributors in 2008-2009).
Regards,