(Added mdev for hotplug) |
(Added DropBear) |
||
Line 1: | Line 1: | ||
− | == Building a minimal RootFS with Busybox == | + | == Building a minimal RootFS with Busybox, GLIBC and DropBear == |
[http://www.busybox.net/ BusyBox] is a collection of cut down versions of common UNIX utilities compiled into a single small executable. This makes BusyBox an ideal foundation for resource constrained systems. | [http://www.busybox.net/ BusyBox] is a collection of cut down versions of common UNIX utilities compiled into a single small executable. This makes BusyBox an ideal foundation for resource constrained systems. | ||
Line 84: | Line 84: | ||
You should now have a basic, yet quite functional, BusyBox root file system. | You should now have a basic, yet quite functional, BusyBox root file system. | ||
+ | |||
+ | === DropBear (Optional) === | ||
+ | |||
+ | [https://matt.ucc.asn.au/dropbear/dropbear.html DropBear] is a small SSH server and client and is useful to allow remote shell access to your system. | ||
+ | |||
+ | Download, build and install DropBear: | ||
+ | |||
+ | <PRE> | ||
+ | wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2014.63.tar.bz2 | ||
+ | tar -xjf dropbear-2014.63.tar.bz2 | ||
+ | cd dropbear-2014.63 | ||
+ | ./configure --host=arm-linux-gnueabi --prefix=/ --disable-zlib CC=arm-linux-gnueabi-gcc LD=arm-linux-gnueabi-ld | ||
+ | make | ||
+ | make install DESTDIR=/home/export/rootfs | ||
+ | </PRE> | ||
+ | |||
+ | DropBear requires RSA and DSS (Digital Signature Standard) encryption keys to be generated. I normally do this on the target, but you could generate the keys on the host if you have the dropbearkey executable installed. | ||
+ | |||
+ | To generate your keys: | ||
+ | <PRE> | ||
+ | makedir /etc/dropbear | ||
+ | dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key | ||
+ | dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key | ||
+ | </PRE> | ||
+ | |||
+ | You will also require users and passwords to validate login credentials: | ||
+ | |||
+ | <PRE> | ||
+ | touch /etc/passwd | ||
+ | touch /etc/group | ||
+ | adduser root -u 0 | ||
+ | </PRE> | ||
+ | |||
+ | Unless otherwise specified, root will be given a default home directory of /home/root. However as this doesn't exist, DropBear will close your connection immediately after successfully logging in. To address this, simply create a home directory for root: | ||
+ | |||
+ | <PRE> | ||
+ | mkdir /home/root | ||
+ | </PRE> | ||
+ | |||
+ | DropBear can now be started by running: | ||
+ | |||
+ | <PRE> | ||
+ | dropbear | ||
+ | </PRE> | ||
+ | |||
+ | and you should be able to remotely login to your system using the root user. |
BusyBox is a collection of cut down versions of common UNIX utilities compiled into a single small executable. This makes BusyBox an ideal foundation for resource constrained systems.
Install the following prerequisites (assuming an Ubuntu 14.04 built machine):
apt-get install gcc-arm-linux-gnueabi apt-get install libncurses5-dev apt-get install gawk
BusyBox can be built either as a single static binary requiring no external libraries, or built requiring shared libraries such as GLIBC (default). This setting can be found under BusyBox Settings -> Build Options -> Build BusyBox as a static binary (no shared libs).
I generally choose to build BusyBox to require GLIBC as it is highly likely you will want to run additional applications that will require GLIBC.
wget http://busybox.net/downloads/busybox-1.22.1.tar.bz2 tar -xjf busybox-1.22.1.tar.bz2 cd busybox-1.22.1/ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- defconfig make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
At the menu, you can configure BusyBox options. Once configured, you can build BusyBox:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- install CONFIG_PREFIX=/home/export/rootfs
GLIBC is the GNU C Library and includes common system calls required by executables running on your system.
Download, build and install GLIBC:
wget http://ftp.gnu.org/gnu/libc/glibc-2.19.tar.gz tar -xzf glibc-2.19.tar.gz mkdir glibc-build cd glibc-build/ ../glibc-2.19/configure arm-linux-gnueabi --target=arm-linux-gnueabi --prefix= --enable-add-ons make make install install_root=/home/export/rootfs
If you get an error resembling that below with cross-rpcgen, then it would appear cross-rpcgen was built for arm, but is trying to run on your x86 based build system. To alleviate the problem I pre-build a copy for x86 and place it in /glibc-build/sunrpc/cross-rpcgen and then restart the arm build.
CPP='arm-linux-gnueabi-gcc -E -x c-header' /.../glibc-build/sunrpc/cross-rpcgen -Y ../scripts -c rpcsvc/bootparam_prot.x -o /.../glibc-build/sunrpc/xbootparam_prot.T /.../glibc-build/sunrpc/cross-rpcgen: 1: /.../glibc-build/sunrpc/cross-rpcgen: Syntax error: word unexpected (expecting ")") make[2]: *** [/.../glibc-build/sunrpc/xbootparam_prot.stmp] Error 2
Once BusyBox and GLIBC has been cross-compiled, you will want to create the remainder of the root file system. Start by creating the necessary directory structure:
mkdir proc sys dev etc/init.d
Now we must mount the /proc & /sys filesystem and populate the /dev nodes. This can be done at runtime by creating a file called etc/init.d/rcS and adding:
#!bin/sh mount -t proc none /proc mount -t sysfs none /sys echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s
and make executable:
chmod +x etc/init.d/rcS
You should now have a basic, yet quite functional, BusyBox root file system.
DropBear is a small SSH server and client and is useful to allow remote shell access to your system.
Download, build and install DropBear:
wget https://matt.ucc.asn.au/dropbear/releases/dropbear-2014.63.tar.bz2 tar -xjf dropbear-2014.63.tar.bz2 cd dropbear-2014.63 ./configure --host=arm-linux-gnueabi --prefix=/ --disable-zlib CC=arm-linux-gnueabi-gcc LD=arm-linux-gnueabi-ld make make install DESTDIR=/home/export/rootfs
DropBear requires RSA and DSS (Digital Signature Standard) encryption keys to be generated. I normally do this on the target, but you could generate the keys on the host if you have the dropbearkey executable installed.
To generate your keys:
makedir /etc/dropbear dropbearkey -t dss -f /etc/dropbear/dropbear_dss_host_key dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key
You will also require users and passwords to validate login credentials:
touch /etc/passwd touch /etc/group adduser root -u 0
Unless otherwise specified, root will be given a default home directory of /home/root. However as this doesn't exist, DropBear will close your connection immediately after successfully logging in. To address this, simply create a home directory for root:
mkdir /home/root
DropBear can now be started by running:
dropbear
and you should be able to remotely login to your system using the root user.