diff options
Diffstat (limited to 'chunks/busybox.morph')
-rw-r--r-- | chunks/busybox.morph | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/chunks/busybox.morph b/chunks/busybox.morph new file mode 100644 index 00000000..ebc44818 --- /dev/null +++ b/chunks/busybox.morph @@ -0,0 +1,191 @@ +name: busybox +kind: chunk + +configure-commands: +# Busybox's default config has everything enabled. +- make defconfig + +- sed -e 's|.*UDHCPC_DEFAULT_SCRIPT.*|CONFIG_UDHCPC_DEFAULT_SCRIPT="'"$PREFIX"/share/udhcpc/default.script'"|' -i .config +- sed -e 's|.*IFUPDOWN_IFSTATE_PATH.*|CONFIG_IFUPDOWN_IFSTATE_PATH="/run/ifstate"|' -i .config + +# Avoid dividing applets between $PREFIX/[s]bin and $PREFIX/usr/[s]bin. +- '[ "$PREFIX" = /usr ] || sed -e ''s/.*INSTALL_NO_USR.*/CONFIG_INSTALL_NO_USR=y/'' -i .config' + +# We have GAWK, but in GENIVI baseline we want to get rid of it +# - sed -e 's/CONFIG_AWK=y.*/# CONFIG_AWK is not set/' -i .config + +# Depends on stuff that was removed since eglibc 2.14. +- sed -e 's/CONFIG_INETD=y.*/# CONFIG_INETD is not set/' -i .config + +# Busybox Patch is incompatible enough with GNU Patch that it can't be +# used for GNULib projects built from Git. +- sed -e 's/CONFIG_PATCH=y.*/# CONFIG_PATCH is not set/' -i .config + +# None of this is needed because we have kmod; and it actually breaks the +# Linux build because depmod isn't compatible enough with util-linux's. +- sed -e 's/CONFIG_DEPMOD=y.*/# CONFIG_DEPMOD is not set/' -i .config +- sed -e 's/CONFIG_INSMOD=y.*/# CONFIG_INSMOD is not set/' -i .config +- sed -e 's/CONFIG_MODPROBE=y.*/# CONFIG_MODPROBE is not set/' -i .config +- sed -e 's/CONFIG_MODPROBE_SMALL=y.*/# CONFIG_MODPROBE_SMALL is not set/' -i .config +- sed -e 's/CONFIG_LSMOD=y.*/# CONFIG_LSMOD is not set/' -i .config +- sed -e 's/CONFIG_RMMOD=y.*/# CONFIG_RMMOD is not set/' -i .config + +# General features that we don't need. +- sed -e 's/CONFIG_FEATURE_MOUNT_CIFS=y.*/# CONFIG_FEATURE_MOUNT_CIFS is not set/' -i .config +- sed -e 's/CONFIG_FEATURE_EXTRA_QUIET=y.*/# CONFIG_FEATURE_EXTRA_QUIET is not set/' -i .config +- sed -e 's/CONFIG_FEATURE_INIT_COREDUMPS=y.*/# CONFIG_FEATURE_INIT_COREDUMPS is not set/' -i .config +- sed -e 's/CONFIG_FEATURE_INIT_SCTTY=y.*/# CONFIG_FEATURE_INIT_SCTTY is not set/' -i .config +- sed -e 's/CONFIG_FEATURE_INIT_SYSLOG=y.*/# CONFIG_FEATURE_INIT_SYSLOG is not set/' -i .config +- sed -e 's/CONFIG_FEATURE_INITRD=y.*/# CONFIG_FEATURE_INITRD is not set/' -i .config +- sed -e 's/CONFIG_FEATURE_MINIX2=y.*/# CONFIG_FEATURE_MINIX2 is not set/' -i .config +- sed -e 's/CONFIG_FSCK_MINIX=y.*/# CONFIG_FSCK_MINIX is not set/' -i .config +- sed -e 's/CONFIG_LOSETUP=y.*/# CONFIG_LOSETUP is not set/' -i .config +- sed -e 's/CONFIG_LSUSB=y.*/# CONFIG_LSUSB is not set/' -i .config +- sed -e 's/CONFIG_LZMA=y.*/# CONFIG_LZMA is not set/' -i .config +- sed -e 's/CONFIG_MKFS_EXT2=y.*/# CONFIG_MKFS_EXT2 is not set/' -i .config +- sed -e 's/CONFIG_MKFS_MINIX=y.*/# CONFIG_MKFS_MINIX is not set/' -i .config +- sed -e 's/CONFIG_STRINGS=y.*/# CONFIG_STRINGS is not set/' -i .config +- sed -e 's/CONFIG_UNLZMA=y.*/# CONFIG_UNLZMA is not set/' -i .config +- sed -e 's/CONFIG_UNXZ=y.*/# CONFIG_UNXZ is not set/' -i .config +- sed -e 's/CONFIG_XZ=y.*/# CONFIG_XZ is not set/' -i .config + +# Now turn on some little bits we do need +- sed -e 's/# CONFIG_BBCONFIG is not set/CONFIG_BBCONFIG=y/' -i .config +- sed -e 's/# CONFIG_FEATURE_COMPRESS_BBCONFIG is not set/CONFIG_FEATURE_COMPRESS_BBCONFIG=y/' -i .config +- sed -e 's/# CONFIG_FEATURE_MOUNT_HELPERS is not set/CONFIG_FEATURE_MOUNT_HELPERS=y/' -i .config + + +build-commands: +- make + +install-commands: +- | + set -e + if [ "$PREFIX" = /usr ]; then PREFIX=; fi + make CONFIG_PREFIX="$DESTDIR$PREFIX" install + chmod 6755 "$DESTDIR$PREFIX"/bin/busybox +- | + install -D -m 644 /proc/self/fd/0 "$DESTDIR$PREFIX/lib/systemd/system/crond.service" <<'EOF' + [Unit] + Description=Cron Service + + [Service] + ExecStart=/usr/sbin/crond -f + Restart=always + EOF + +- mkdir -p "$DESTDIR/var/spool/cron/crontabs" + +# Install custom udev rule to run ifup for every network device detected +- | + install -D -m 644 /proc/self/fd/0 "$DESTDIR/lib/udev/rules.d/99-baserock.rule" <<'EOF' + ACTION=="remove", GOTO="baserock_end" + # run ifup for every network device detected + SUBSYSTEM=="net", KERNEL!="lo", ENV{SYSTEMD_WANTS}="ifup@%k.service" + + LABEL="baserock_end" + EOF +- | + install -D -m 644 /proc/self/fd/0 "$DESTDIR$PREFIX/lib/systemd/system/ifup@.service" <<'EOF' + [Unit] + Description=ifup for %I + Before=network.target + + [Service] + Type=oneshot + ExecStart=/sbin/ifup %I + ExecStop=/sbin/ifdown %I + RemainAfterExit=true + EOF + +# Set up DHCP +- mkdir -p "$DESTDIR$PREFIX"/share/udhcpc +- cp examples/udhcp/simple.script "$DESTDIR$PREFIX"/share/udhcpc/default.script + +# Set up NTP +- | + install -D /proc/self/fd/0 "$DESTDIR$PREFIX/sbin" <<'EOF' + #!/bin/sh + # + # Invoke the Busybox ntpd with servers listed in /etc/ntpd.conf, if it + # exists. The servers should be listed one per line, with the first + # word in the line being "server". Any lines that don't start with + # "server" as the first word are ignored. The server name should be + # the second word. Anything else on the line is ignored. + # + # If the config file does not exist, no default servers are used. + + set -eu + + parse_servers() + { + awk '$1 == "server" { for (i=2; i <= NF; ++i) print "-p", $i }' "$1" + } + + if [ -e /etc/ntpd.conf ] + then + exec ntpd $(parse_servers /etc/ntpd.conf) "$@" + else + exec ntpd "$@" + fi + EOF +- | + install -D -m 644 /proc/self/fd/0 "$DESTDIR$PREFIX/lib/systemd/system/ntpd-boot.service" <<'EOF' + [Unit] + Description=Set clock at boot with NTP + Before=network.target + Before=ntpd.service + + [Service] + Type=oneshot + ExecStart=/usr/sbin/run-ntpd-with-config -n -q + Restart=on-failure + RestartSec=15 + EOF +- | + install -D -m 644 /proc/self/fd/0 "$DESTDIR$PREFIX/lib/systemd/system/ntpd.service" <<'EOF' + [Unit] + Description=Keep clock synchronised with NTP + Before=network.target + After=ntpd-boot.service + + [Service] + Type=simple + ExecStart=/usr/sbin/run-ntpd-with-config -n + Restart=on-failure + RestartSec=15 + EOF +- install -d "$DESTDIR/etc" +- | + cat << EOF > "$DESTDIR/etc/ntpd.conf" + server 0.pool.ntp.org + server 1.pool.ntp.org + server 2.pool.ntp.org + server 3.pool.ntp.org + EOF + +# Set up man environment variables +- | + cat << EOF > "$DESTDIR/etc/profile" + # Set default pager to less + export MANPAGER='less -R' + EOF +- | + cat << EOF > "$DESTDIR/etc/man.conf" + # This file is used by man to provide a manpath for those without one by + # examining their PATH environment variable. + # + # Lines beginning with `#' are comments and are ignored. Any combination of + # tabs or spaces may be used as `whitespace' separators. + + MANDATORY_MANPATH /usr/man + MANDATORY_MANPATH /usr/share/man + MANDATORY_MANPATH /usr/local/share/man + EOF + +# Install systemd units +- mkdir -p "$DESTDIR$PREFIX/lib/systemd/system/multi-user.target.wants" +- | + for f in crond.service ntpd.service ntpd-boot.service; do + ln -s "../$f" "$DESTDIR$PREFIX/lib/systemd/system/multi-user.target.wants/" + done |