|
@@ -1,60 +1,75 @@
|
|
|
#!/mnt/busybox sh
|
|
#!/mnt/busybox sh
|
|
|
|
|
|
|
|
BUSYBOX=/mnt/busybox
|
|
BUSYBOX=/mnt/busybox
|
|
|
|
|
+TERMINAL=/dev/ttyS0
|
|
|
|
|
+VERBOSE=
|
|
|
|
|
|
|
|
-freeze() {
|
|
|
|
|
- echo "an error occurred while executing '''$@''', freezing..." >&2
|
|
|
|
|
|
|
+error() {
|
|
|
|
|
+ printf "\033[91merror: \033[0m%s\n" "$1" >&2
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+warn() {
|
|
|
|
|
+ printf "\033[93mwarn : \033[0m%s\n" "$1" >&2
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+info() {
|
|
|
|
|
+ printf "\033[92minfo : \033[0m%s\n" "$1" >&2
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+die() {
|
|
|
|
|
+ error "$1" && freeze
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
+freeze() {
|
|
|
|
|
+ info "freezing..." >&2
|
|
|
while true; do
|
|
while true; do
|
|
|
- true
|
|
|
|
|
|
|
+ :
|
|
|
done
|
|
done
|
|
|
|
|
+
|
|
|
|
|
+ exit 1
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-do_or_freeze() {
|
|
|
|
|
- if $@; then
|
|
|
|
|
- return
|
|
|
|
|
- fi
|
|
|
|
|
|
|
+unrecoverable() {
|
|
|
|
|
+ die "unrecoverable error occurred. check the message above."
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
- freeze $@
|
|
|
|
|
|
|
+busybox() {
|
|
|
|
|
+ $BUSYBOX "$@"
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-do_or_freeze $BUSYBOX mkdir -p /dev
|
|
|
|
|
|
|
+trap unrecoverable EXIT
|
|
|
|
|
+
|
|
|
|
|
+set -euo pipefail
|
|
|
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/console c 5 1
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/null c 1 3
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/zero c 1 5
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/vda b 8 0
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/vda1 b 8 1
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/vdb b 8 16
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/ttyS0 c 4 64
|
|
|
|
|
-do_or_freeze $BUSYBOX mknod -m 666 /dev/ttyS1 c 4 65
|
|
|
|
|
|
|
+if [ -n "$VERBOSE" ]; then
|
|
|
|
|
+ set -x
|
|
|
|
|
+fi
|
|
|
|
|
|
|
|
-echo -n -e "deploying busybox... " >&2
|
|
|
|
|
|
|
+busybox mkdir -p /dev
|
|
|
|
|
|
|
|
-do_or_freeze $BUSYBOX mkdir -p /bin
|
|
|
|
|
-do_or_freeze $BUSYBOX --install -s /bin
|
|
|
|
|
-do_or_freeze $BUSYBOX mkdir -p /lib
|
|
|
|
|
|
|
+busybox mknod -m 666 /dev/console c 5 1
|
|
|
|
|
+busybox mknod -m 666 /dev/null c 1 3
|
|
|
|
|
+busybox mknod -m 666 /dev/zero c 1 5
|
|
|
|
|
+busybox mknod -m 666 /dev/vda b 8 0
|
|
|
|
|
+busybox mknod -m 666 /dev/vda1 b 8 1
|
|
|
|
|
+busybox mknod -m 666 /dev/vdb b 8 16
|
|
|
|
|
+busybox mknod -m 666 /dev/ttyS0 c 4 64
|
|
|
|
|
+busybox mknod -m 666 /dev/ttyS1 c 4 65
|
|
|
|
|
|
|
|
-export PATH="/bin"
|
|
|
|
|
|
|
+info "deploying busybox..."
|
|
|
|
|
|
|
|
-echo ok >&2
|
|
|
|
|
|
|
+busybox mkdir -p /bin /lib
|
|
|
|
|
+busybox --install -s /bin
|
|
|
|
|
|
|
|
-do_or_freeze mkdir -p /etc /root /proc
|
|
|
|
|
-do_or_freeze mount -t procfs proc proc
|
|
|
|
|
|
|
+info "done"
|
|
|
|
|
|
|
|
-# Check if the device /dev/vdb is available and can be read
|
|
|
|
|
-if dd if=/dev/vdb of=/dev/null bs=512 count=1; then
|
|
|
|
|
- echo -n -e "Mounting the ext4 image... " >&2
|
|
|
|
|
- do_or_freeze mkdir -p /mnt1
|
|
|
|
|
- do_or_freeze mount -t ext4 /dev/vdb /mnt1
|
|
|
|
|
- echo ok >&2
|
|
|
|
|
-fi
|
|
|
|
|
|
|
+export PATH="/bin"
|
|
|
|
|
|
|
|
-cp /mnt/ld-musl-i386.so.1 /lib/ld-musl-i386.so.1
|
|
|
|
|
-ln -s /lib/ld-musl-i386.so.1 /lib/libc.so
|
|
|
|
|
|
|
+mkdir -p /etc /root /proc
|
|
|
|
|
+mount -t procfs proc proc
|
|
|
|
|
|
|
|
cat > /etc/passwd <<EOF
|
|
cat > /etc/passwd <<EOF
|
|
|
-root:x:0:0:root:/root:/mnt/busybox sh
|
|
|
|
|
|
|
+root:x:0:0:root:/root:/bin/sh
|
|
|
EOF
|
|
EOF
|
|
|
|
|
|
|
|
cat > /etc/group <<EOF
|
|
cat > /etc/group <<EOF
|
|
@@ -91,7 +106,8 @@ int main() {
|
|
|
}
|
|
}
|
|
|
EOF
|
|
EOF
|
|
|
|
|
|
|
|
-exec $BUSYBOX sh -l < /dev/ttyS0 > /dev/ttyS0 2> /dev/ttyS0
|
|
|
|
|
|
|
+# shellcheck disable=SC2094
|
|
|
|
|
+exec sh -l < "$TERMINAL" > "$TERMINAL" 2> "$TERMINAL"
|
|
|
|
|
|
|
|
# We don't have a working init yet, so we use busybox sh directly for now.
|
|
# We don't have a working init yet, so we use busybox sh directly for now.
|
|
|
# exec /mnt/init /bin/sh -c 'exec sh -l < /dev/ttyS0 > /dev/ttyS0 2> /dev/ttyS0'
|
|
# exec /mnt/init /bin/sh -c 'exec sh -l < /dev/ttyS0 > /dev/ttyS0 2> /dev/ttyS0'
|