#!/bin/hush # Announce version sed -n 's/PRETTY_NAME="\([^"]*\)"/\1/p' /etc/os-release export HOME=/home export PATH=/bin:/sbin # Mount filesystems mountpoint -q proc || mount -t proc proc proc mountpoint -q sys || mount -t sysfs sys sys mountpoint -q dev || mount -t devtmpfs dev dev || mdev -s mkdir -p dev/pts mountpoint -q dev/pts || mount -t devpts dev/pts dev/pts # /tmp inherited from initmpfs # If nobody said how many CPUS to use in builds, try to figure it out. if test -z $CPUS { export CPUS=$[echo /sys/devices/system/cpu/cpu[0-9]* | wc -w] test $CPUS -lt 1 && global CPUS := '1' } export PS1="($HOST:$CPUS) \w \$ " # When running under qemu, do some more setup if test $Pid -eq 1 { # Note that 10.0.2.2 forwards to 127.0.0.1 on the host. # Setup networking for QEMU (needs /proc) ifconfig eth0 10.0.2.15 route add default gw 10.0.2.2 # If we have no RTC, try rdate instead: test $[date +%s] -lt 1000 && rdate 10.0.2.2 # or time-b.nist.gov # mount hda on /usr/overlay, hdb on /home, and hdc on /mnt, if available test -b /dev/[hsv]da && mkdir -p /usr/overlay && mount /dev/[hsv]da /usr/overlay test -b /dev/[hsv]db && mount -o noatime /dev/[hsv]db /home && cd /home test -b /dev/[hsv]dc && mount -o ro /dev/[hsv]dc /mnt test -z $CONSOLE && global CONSOLE := $[sed -n 's@.* console=\(/dev/\)*\([^ ]*\).*@\2@p' /proc/cmdline] # Call overlay/init if available test -e /usr/overlay/init && source /usr/overlay/init test -z $HANDOFF && echo Type exit when done. && global HANDOFF := '/bin/hush' test -z $CONSOLE && global CONSOLE := 'console' exec /sbin/oneit -c /dev/"$CONSOLE" $HANDOFF # If we're not PID 1, it's probably a chroot. } else { test ! -z $[grep "default for QEMU" /etc/resolv.conf] && echo "nameserver 8.8.8.8" > /etc/resolv.conf # If we have no RTC, try using ntp to set the clock test $[date +%s] -lt 10000000 && ntpd -nq -p north-america.pool.ntp.org # Switch to a shell with command history. echo Type exit when done. /bin/hush cd / umount ./dev/pts umount ./dev umount ./sys umount ./proc sync } (CommandList children: [ (C {(sed)} {(-n)} {(SQ <"s/PRETTY_NAME=\"\\([^\"]*\\)\"/\\1/p">)} {(/etc/os-release)}) (C {(export)} {(Lit_VarLike "HOME=") (/home)}) (C {(export)} {(Lit_VarLike "PATH=") (/bin) (Lit_Other ":") (/sbin)}) (AndOr children: [(C {(mountpoint)} {(-q)} {(proc)}) (C {(mount)} {(-t)} {(proc)} {(proc)} {(proc)})] op_id: Op_DPipe ) (AndOr children: [(C {(mountpoint)} {(-q)} {(sys)}) (C {(mount)} {(-t)} {(sysfs)} {(sys)} {(sys)})] op_id: Op_DPipe ) (AndOr children: [ (C {(mountpoint)} {(-q)} {(dev)}) (AndOr children: [(C {(mount)} {(-t)} {(devtmpfs)} {(dev)} {(dev)}) (C {(mdev)} {(-s)})] op_id: Op_DPipe ) ] op_id: Op_DPipe ) (C {(mkdir)} {(-p)} {(dev/pts)}) (AndOr children: [ (C {(mountpoint)} {(-q)} {(dev/pts)}) (C {(mount)} {(-t)} {(devpts)} {(dev/pts)} {(dev/pts)}) ] op_id: Op_DPipe ) (If arms: [ (if_arm cond: [(C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$CPUS"))} {(Lit_Other "]")})] action: [ (C {(export)} {(Lit_VarLike "CPUS=") (CommandSubPart command_list: (CommandList children: [ (Pipeline children: [ (C {(echo)} {(/sys/devices/system/cpu/cpu) (Lit_Other "[") (0-9) (Lit_Other "]") (Lit_Other "*") } ) (C {(wc)} {(-w)}) ] negated: False ) ] ) left_token: spids: [143 157] ) } ) (AndOr children: [ (C {(Lit_Other "[")} {(DQ ($ VSub_Name "$CPUS"))} {(-lt)} {(1)} {(Lit_Other "]")}) (Assignment keyword: Assign_None pairs: [(assign_pair lhs:(LhsName name:CPUS) op:Equal rhs:{(1)} spids:[174])] spids: [174] ) ] op_id: Op_DAmp ) ] spids: [-1 137] ) ] spids: [-1 177] ) (C {(export)} {(Lit_VarLike "PS1=") (DQ ("(") ($ VSub_Name "$HOST") (":") ($ VSub_Name "$CPUS") (") ") (EscapedLiteralPart token:) (" ") (EscapedLiteralPart token:) (" ") ) } ) (If arms: [ (if_arm cond: [(C {(Lit_Other "[")} {($ VSub_Dollar "$$")} {(-eq)} {(1)} {(Lit_Other "]")})] action: [ (C {(ifconfig)} {(eth0)} {(10.0.2.15)}) (C {(route)} {(add)} {(default)} {(gw)} {(10.0.2.2)}) (AndOr children: [ (C {(Lit_Other "[")} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(date)} {(Lit_Other "+") (Lit_Other "%") (s)})] ) left_token: spids: [249 255] ) ) } {(-lt)} {(1000)} {(Lit_Other "]")} ) (C {(rdate)} {(10.0.2.2)}) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(-b)} {(/dev/) (Lit_Other "[") (hsv) (Lit_Other "]") (da)} {(Lit_Other "]")} ) (AndOr children: [ (C {(mkdir)} {(-p)} {(/usr/overlay)}) (C {(mount)} {(/dev/) (Lit_Other "[") (hsv) (Lit_Other "]") (da)} {(/usr/overlay)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(-b)} {(/dev/) (Lit_Other "[") (hsv) (Lit_Other "]") (db)} {(Lit_Other "]")} ) (AndOr children: [ (C {(mount)} {(-o)} {(noatime)} {(/dev/) (Lit_Other "[") (hsv) (Lit_Other "]") (db)} {(/home)} ) (C {(cd)} {(/home)}) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(-b)} {(/dev/) (Lit_Other "[") (hsv) (Lit_Other "]") (dc)} {(Lit_Other "]")} ) (C {(mount)} {(-o)} {(ro)} {(/dev/) (Lit_Other "[") (hsv) (Lit_Other "]") (dc)} {(/mnt)}) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$CONSOLE"))} {(Lit_Other "]")}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CONSOLE) op: Equal rhs: { (DQ (CommandSubPart command_list: (CommandList children: [ (C {(sed)} {(-n)} {(SQ <"s@.* console=\\(/dev/\\)*\\([^ ]*\\).*@\\2@p">)} {(/proc/cmdline)} ) ] ) left_token: spids: [394 404] ) ) } spids: [392] ) ] spids: [392] ) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(-e)} {(/usr/overlay/init)} {(Lit_Other "]")}) (C {(.)} {(/usr/overlay/init)}) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$HANDOFF"))} {(Lit_Other "]")}) (AndOr children: [ (C {(echo)} {(Type)} {(exit)} {(when)} {(done.)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:HANDOFF) op: Equal rhs: {(/bin/hush)} spids: [453] ) ] spids: [453] ) ] op_id: Op_DAmp ) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} {(-z)} {(DQ ($ VSub_Name "$CONSOLE"))} {(Lit_Other "]")}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:CONSOLE) op: Equal rhs: {(console)} spids: [469] ) ] spids: [469] ) ] op_id: Op_DAmp ) (C {(exec)} {(/sbin/oneit)} {(-c)} {(/dev/) (DQ ($ VSub_Name "$CONSOLE"))} {(DQ ($ VSub_Name "$HANDOFF"))} ) ] spids: [-1 210] ) ] else_action: [ (AndOr children: [ (C {(Lit_Other "[")} {(KW_Bang "!")} {(-z)} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(grep)} {(DQ ("default for QEMU"))} {(/etc/resolv.conf)})] ) left_token: spids: [502 510] ) ) } {(Lit_Other "]")} ) (SimpleCommand words: [{(echo)} {(DQ ("nameserver 8.8.8.8"))}] redirects: [(Redir op_id:Redir_Great fd:-1 arg_word:{(/etc/resolv.conf)} spids:[524])] ) ] op_id: Op_DAmp ) (AndOr children: [ (C {(Lit_Other "[")} { (DQ (CommandSubPart command_list: (CommandList children: [(C {(date)} {(Lit_Other "+") (Lit_Other "%") (s)})] ) left_token: spids: [537 543] ) ) } {(-lt)} {(10000000)} {(Lit_Other "]")} ) (C {(ntpd)} {(-nq)} {(-p)} {(north-america.pool.ntp.org)}) ] op_id: Op_DAmp ) (C {(echo)} {(Type)} {(exit)} {(when)} {(done.)}) (C {(/bin/hush)}) (C {(cd)} {(/)}) (C {(umount)} {(./dev/pts)}) (C {(umount)} {(./dev)}) (C {(umount)} {(./sys)}) (C {(umount)} {(./proc)}) (C {(sync)}) ] spids: [492 610] ) ] )