#!/bin/sh -e kinstall() { # usage: kisntall 755 filename /usr/bin/file mkdir -p "${3%/*}"; cp "$2" "$3" chmod "$1" "$3" } for patch in patches/*.patch; do patch -p1 < "$patch" done # Build and install regular busybox. # This excludes utilities which require 'suid' to function. make CC="${CC:=gcc}" make CONFIG_PREFIX="$1/usr" install # Rename the binary temporarily. mv "$1/usr/bin/busybox" "$1/usr/bin/busybox-nosuid" # Build and install recovery busybox. # The only difference of this configuration is that it includes a recovery # shell. clsed '/SH_STANDALONE/cCONFIG_FEATURE_SH_STANDALONE=y' .config # Create an embedded script for recovery sh mkdir embed # We are not trying to expand here. # shellcheck disable=SC2016 printf '[ "$SHLVL" -gt 20 ] && exit 1; exec -a ash "$0" "$@"\n' > embed/rcsh chmod +x embed/rcsh make CC="$CC" make CONFIG_PREFIX="$1/usr" install mv "$1/usr/bin/busybox" "$1/usr/bin/rcsh" # Build and install suid busybox. # This _only_ includes utlities which require 'suid' to function. cp -f .config-suid .config make CC="${CC:-gcc}" make CONFIG_PREFIX="$1/usr" install # Aptly name the busybox binaries. mv "$1/usr/bin/busybox" "$1/usr/bin/busybox-suid" mv "$1/usr/bin/busybox-nosuid" "$1/usr/bin/busybox" # Install the non-suid symlinks. "$1/usr/bin/busybox" --list | while read -r bin; do ln -s busybox "$1/usr/bin/$bin" done # Install the suid symlinks. "$1/usr/bin/busybox-suid" --list | while read -r bin; do ln -s busybox-suid "$1/usr/bin/$bin" done # Set suid on busybox suid. chmod u+s "$1/usr/bin/busybox-suid" # Install runit and sysmgr services. clsv -d "$1" crond.run mdev.run ntpd.run syslogd.run acpid.run # Install configurations for ntp, init, and mdev. kinstall 644 ntp.conf "$1/etc/ntp.conf" kinstall 644 inittab "$1/etc/inittab" kinstall 644 mdev.conf "$1/etc/mdev.conf" # Install udhcpc configuration script. kinstall 755 udhcpc.script "$1/etc/udhcpc"