#!/bin/sh set -e #extract the version of the compiled busybox :) busybox_ver="$(find ./src/ -type d -maxdepth 1 -name "busy*" | cut -d- -f2)" mkdir initrd cd initrd mkdir -p bin dev proc sys etc usr #Add busybox programs cd bin cp ../../src/busybox-$busybox_ver/busybox ./ for prog in $(./busybox --list); do ln -s /bin/busybox ./$prog done cd .. #Create initial init cat <init #!/bin/sh mount -t sysfs sysfs /sys mount -t proc proc /proc mount -t devtmpfs udev /dev exec /bin/init clear EOF #Create busybox initrd echo "tty1::respawn:-/bin/sh" > ./etc/inittab #Create resolv.conf echo "nameserver 1.1.1.1" > ./etc/resolv.conf #Add curl + certificates for tls support #Add static curl binary ver="$(curl -s "https://api.github.com/repos/stunnel/static-curl/tags" | jq -r '.[0].name' | tr "_" ".")" rel="$(curl -s "https://api.github.com/repos/stunnel/static-curl/releases" | jq -r '.[0].name' | tr "_" ".")" wget "https://github.com/stunnel/static-curl/releases/download/$rel/curl-linux-x86_64-musl-$ver.tar.xz" tar xf curl-linux-x86_64-musl-$ver.tar.xz -C ./bin/ rm curl-linux-x86_64-musl-$ver.tar.xz #Add certificates ##very ugly way to extract the certs, but hey it just works :) container="$(podman run -d alpine:edge /bin/sh -c "apk add ca-certificates && update-ca-certificates && sleep 90")" sleep 10 #make sure that the cmds are finished (except sleep ofc) podman cp $container:/etc/ssl/ ./etc/ podman container rm -f $container #give perms to files, #todo: find a better way someday #prevents errors like "can't open /dev/tty1: no such file " chmod -R 777 . #Add all the files to a img find . | cpio -o -H newc > ../initrd.img cd ..