Преглед на файлове

user, init: update riscv64 init script

Make print message prettier. Also panic when we have an error.

Signed-off-by: greatbridf <greatbridf@icloud.com>
greatbridf преди 2 седмици
родител
ревизия
bc84f0be80
променени са 1 файла, в които са добавени 52 реда и са изтрити 36 реда
  1. 52 36
      user-programs/init_script_riscv64.sh

+ 52 - 36
user-programs/init_script_riscv64.sh

@@ -1,60 +1,75 @@
 #!/mnt/busybox sh
 
 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
-        true
+        :
     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
-root:x:0:0:root:/root:/mnt/busybox sh
+root:x:0:0:root:/root:/bin/sh
 EOF
 
 cat > /etc/group <<EOF
@@ -91,7 +106,8 @@ int main() {
 }
 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.
 # exec /mnt/init /bin/sh -c 'exec sh -l < /dev/ttyS0 > /dev/ttyS0 2> /dev/ttyS0'