annotate sources/root-filesystem/sbin/init.sh @ 1440:e93e6c80ebdc

Cleanups to init script.
author Rob Landley <rob@landley.net>
date Sat, 10 Sep 2011 08:28:00 -0500
parents ba04b2ff8730
children d97db0ec50fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
783
db06a8c1bfed Lots of changes to move buildall.sh functionality into build.sh.
Rob Landley <rob@landley.net>
parents: 741
diff changeset
1 #!/bin/sh
190
12b7ecb79ad0 A little init script for mini-native.sh that gets it read to build stuff.
Rob Landley <rob@landley.net>
parents:
diff changeset
2
570
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
3 export HOME=/home
415
acb61c298000 Make setup script reentrant, don't require preset PATH. Based on changes by Vladimir Dronnikov.
Rob Landley <rob@landley.net>
parents: 372
diff changeset
4
190
12b7ecb79ad0 A little init script for mini-native.sh that gets it read to build stuff.
Rob Landley <rob@landley.net>
parents:
diff changeset
5 # Populate /dev
1440
e93e6c80ebdc Cleanups to init script.
Rob Landley <rob@landley.net>
parents: 1438
diff changeset
6 mountpoint -q proc || mount -t proc proc proc
415
acb61c298000 Make setup script reentrant, don't require preset PATH. Based on changes by Vladimir Dronnikov.
Rob Landley <rob@landley.net>
parents: 372
diff changeset
7 mountpoint -q sys || mount -t sysfs sys sys
1414
594e15551781 Use devtmpfs instead of mdev.
Rob Landley <rob@landley.net>
parents: 1411
diff changeset
8 mountpoint -q dev || mount -t devtmpfs dev dev
1279
8c0b1c9b6525 Mounting a tmpfs on /dev means /dev/pts isn't there, so mkdir it.
Rob Landley <rob@landley.net>
parents: 1247
diff changeset
9 mkdir -p dev/pts
1247
84ea1b53b73c Mounting /dev/pts is useful.
Rob Landley <rob@landley.net>
parents: 1217
diff changeset
10 mountpoint -q dev/pts || mount -t devpts dev/pts dev/pts
190
12b7ecb79ad0 A little init script for mini-native.sh that gets it read to build stuff.
Rob Landley <rob@landley.net>
parents:
diff changeset
11
1038
2957c1dd95cb Update native prompt to show amount of parallelism a build can get (indicating whether distcc is enabled).
Rob Landley <rob@landley.net>
parents: 1008
diff changeset
12 [ -z "$CPUS" ] && export CPUS=1
2957c1dd95cb Update native prompt to show amount of parallelism a build can get (indicating whether distcc is enabled).
Rob Landley <rob@landley.net>
parents: 1008
diff changeset
13 export PS1='($HOST:$CPUS) \w \$ '
895
c1ab614da7b9 Change shell prompt in system image to start with ($HOST)
Rob Landley <rob@landley.net>
parents: 883
diff changeset
14
1217
1a24dc2bb3cb Make sure PATH and CONSOLE are properly exported even when kernel command line doesn't provide the right data.
Rob Landley <rob@landley.net>
parents: 1215
diff changeset
15 # Make sure $PATH is exported, even if not set on kernel command line.
1a24dc2bb3cb Make sure PATH and CONSOLE are properly exported even when kernel command line doesn't provide the right data.
Rob Landley <rob@landley.net>
parents: 1215
diff changeset
16 # (The shell gives us a default, but it's local, not exported.)
1a24dc2bb3cb Make sure PATH and CONSOLE are properly exported even when kernel command line doesn't provide the right data.
Rob Landley <rob@landley.net>
parents: 1215
diff changeset
17 export PATH
1a24dc2bb3cb Make sure PATH and CONSOLE are properly exported even when kernel command line doesn't provide the right data.
Rob Landley <rob@landley.net>
parents: 1215
diff changeset
18
361
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
19 # If we're running under qemu, do some more setup
570
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
20 if [ $$ -eq 1 ]
361
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
21 then
302
eb2aa88277e2 If a second block device exists, mount it on /home.
Rob Landley <rob@landley.net>
parents: 286
diff changeset
22
361
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
23 # Note that 10.0.2.2 forwards to 127.0.0.1 on the host.
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
24
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
25 # Setup networking for QEMU (needs /proc)
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
26 ifconfig eth0 10.0.2.15
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
27 route add default gw 10.0.2.2
190
12b7ecb79ad0 A little init script for mini-native.sh that gets it read to build stuff.
Rob Landley <rob@landley.net>
parents:
diff changeset
28
361
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
29 # If we have no RTC, try rdate instead:
880
b0aeb3446aa5 Some packages build differently as root than as a normal user, so add a "guest" account giving a non-root user option. Tweak mdev so it's vaguely useful. (Thanks to Vladimir Dronnikov for the idea.)
Rob Landley <rob@landley.net>
parents: 863
diff changeset
30 [ "$(date +%s)" -lt 1000 ] && rdate 10.0.2.2 # or time-b.nist.gov
361
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
31
863
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
32 mount -t tmpfs /tmp /tmp
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
33
1440
e93e6c80ebdc Cleanups to init script.
Rob Landley <rob@landley.net>
parents: 1438
diff changeset
34 # If there's a /dev/hdb or /dev/sdb, mount it on home, else tmpfs
302
eb2aa88277e2 If a second block device exists, mount it on /home.
Rob Landley <rob@landley.net>
parents: 286
diff changeset
35
1440
e93e6c80ebdc Cleanups to init script.
Rob Landley <rob@landley.net>
parents: 1438
diff changeset
36 [ -b /dev/[hsv]db ] && HOMEDEV=/dev/[hsv]db
361
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
37 if [ ! -z "$HOMEDEV" ]
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
38 then
688
78cbd428d60e Feed noatime flag to init.sh mounts.
Rob Landley <rob@landley.net>
parents: 673
diff changeset
39 mount -o noatime $HOMEDEV /home
863
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
40 else
1054
37c7bd84c777 Updates to init.sh: only mount tmpfs on /home if / isn't writeable, and use /proc/cmdline instead of grepping dmesg to get console info.
Rob Landley <rob@landley.net>
parents: 1038
diff changeset
41 # Only mount a tmpfs if / isn't writeable.
37c7bd84c777 Updates to init.sh: only mount tmpfs on /home if / isn't writeable, and use /proc/cmdline instead of grepping dmesg to get console info.
Rob Landley <rob@landley.net>
parents: 1038
diff changeset
42 touch /.temp 2>/dev/null
37c7bd84c777 Updates to init.sh: only mount tmpfs on /home if / isn't writeable, and use /proc/cmdline instead of grepping dmesg to get console info.
Rob Landley <rob@landley.net>
parents: 1038
diff changeset
43 [ $? -ne 0 ] && mount -t tmpfs /home /home || rm /.temp
361
13e35e130783 Let qemu-setup.sh be called under the name chroot-setup.sh, which skips the
Rob Landley <rob@landley.net>
parents: 359
diff changeset
44 fi
863
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
45 cd /home
570
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
46
1440
e93e6c80ebdc Cleanups to init script.
Rob Landley <rob@landley.net>
parents: 1438
diff changeset
47 # If there's a /dev/hdc mount it on /mnt
e93e6c80ebdc Cleanups to init script.
Rob Landley <rob@landley.net>
parents: 1438
diff changeset
48
e93e6c80ebdc Cleanups to init script.
Rob Landley <rob@landley.net>
parents: 1438
diff changeset
49 [ -b /dev/[hsv]dc ] && MNTDEV=/dev/[hsv]dc
e93e6c80ebdc Cleanups to init script.
Rob Landley <rob@landley.net>
parents: 1438
diff changeset
50 [ ! -z "$MNTDEV" ] && mount -o ro $MNTDEV /mnt
833
18fa21056b01 System Images' sbin/init.sh should mount /dev/hdc (if it exists) on /mnt, and then run /mnt/init (instead of a shell prompt) if that exists.
Rob Landley <rob@landley.net>
parents: 790
diff changeset
51
1217
1a24dc2bb3cb Make sure PATH and CONSOLE are properly exported even when kernel command line doesn't provide the right data.
Rob Landley <rob@landley.net>
parents: 1215
diff changeset
52 [ -z "$CONSOLE" ] &&
1a24dc2bb3cb Make sure PATH and CONSOLE are properly exported even when kernel command line doesn't provide the right data.
Rob Landley <rob@landley.net>
parents: 1215
diff changeset
53 CONSOLE="$(sed -n 's@.* console=\(/dev/\)*\([^ ]*\).*@\2@p' /proc/cmdline)"
1a24dc2bb3cb Make sure PATH and CONSOLE are properly exported even when kernel command line doesn't provide the right data.
Rob Landley <rob@landley.net>
parents: 1215
diff changeset
54 [ -z "$CONSOLE" ] && CONSOLE=console
833
18fa21056b01 System Images' sbin/init.sh should mount /dev/hdc (if it exists) on /mnt, and then run /mnt/init (instead of a shell prompt) if that exists.
Rob Landley <rob@landley.net>
parents: 790
diff changeset
55
863
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
56 if [ -z "$DISTCC_HOSTS" ]
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
57 then
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
58 echo "Not using distcc."
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
59 else
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
60 echo "Distcc acceleration enabled."
4bfe2b34dd9f Largeish refactoring/simplification of run-emulator.sh and associated code. Now automatically sets up the distcc trick if the appropriate $ARCH-cc toolchain is in the $PATH (or the current directory).
Rob Landley <rob@landley.net>
parents: 836
diff changeset
61 fi
570
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
62 echo Type exit when done.
833
18fa21056b01 System Images' sbin/init.sh should mount /dev/hdc (if it exists) on /mnt, and then run /mnt/init (instead of a shell prompt) if that exists.
Rob Landley <rob@landley.net>
parents: 790
diff changeset
63
18fa21056b01 System Images' sbin/init.sh should mount /dev/hdc (if it exists) on /mnt, and then run /mnt/init (instead of a shell prompt) if that exists.
Rob Landley <rob@landley.net>
parents: 790
diff changeset
64 HANDOFF=/bin/ash
980
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
65 if [ -e /mnt/init ]
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
66 then
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
67 X=xx
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
68 echo "Press any key for command line..."
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
69 read -t 3 -n 1 X
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
70 if [ "$X" == xx ]
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
71 then
983
2932487b59fa Typo fix.
Rob Landley <rob@landley.net>
parents: 980
diff changeset
72 echo "Running automated build."
980
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
73 HANDOFF=/mnt/init
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
74 fi
d424fd68f991 Idea from Johnicholas Hines: add a three second "read" before running hdc's init so the user can press a key to get a command shell instead.
Rob Landley <rob@landley.net>
parents: 895
diff changeset
75 fi
1133
1ad777637d2d Migrate oneit out of toybox into sources/toys as a standalone program, and fix it so pid 1 has / as its working directory so we can umount /home if necessary.
Rob Landley <rob@landley.net>
parents: 1117
diff changeset
76 exec /sbin/oneit -c /dev/"$CONSOLE" "$HANDOFF"
570
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
77
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
78 # If we're not PID 1, it's probably a chroot.
425
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
79 else
883
c48fc63b7df7 Fix a [ -z $test ] that produced multiple words for the $test part, but didn't have "$test" in quotes. I'm not sure how that ever worked.
Rob Landley <rob@landley.net>
parents: 880
diff changeset
80 [ ! -z "$(grep "default for QEMU" /etc/resolv.conf)" ] &&
1117
725e41d66379 Use Google's nameserver, use ntpd to set time for chroot (if necessary), don't umount home if we didn't mount it.
Rob Landley <rob@landley.net>
parents: 1054
diff changeset
81 echo "nameserver 8.8.8.8" > /etc/resolv.conf
725e41d66379 Use Google's nameserver, use ntpd to set time for chroot (if necessary), don't umount home if we didn't mount it.
Rob Landley <rob@landley.net>
parents: 1054
diff changeset
82
725e41d66379 Use Google's nameserver, use ntpd to set time for chroot (if necessary), don't umount home if we didn't mount it.
Rob Landley <rob@landley.net>
parents: 1054
diff changeset
83 # If we have no RTC, try using ntp to set the clock
725e41d66379 Use Google's nameserver, use ntpd to set time for chroot (if necessary), don't umount home if we didn't mount it.
Rob Landley <rob@landley.net>
parents: 1054
diff changeset
84 [ "$(date +%s)" -lt 10000000 ] && ntpd -nq -p north-america.pool.ntp.org
302
eb2aa88277e2 If a second block device exists, mount it on /home.
Rob Landley <rob@landley.net>
parents: 286
diff changeset
85
570
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
86 # Switch to a shell with command history.
372
37c8a6c9a493 Teach qemu-setup.sh to use oneit so ctrl-c works under the emulator. Also
Rob Landley <rob@landley.net>
parents: 369
diff changeset
87
570
0b384865cf0c Make the init script care about PID rather than script name for determining qemu vs chroot invocation.
Rob Landley <rob@landley.net>
parents: 552
diff changeset
88 echo Type exit when done.
790
188a182b1a7f Remove some leftover /tools residue.
Rob Landley <rob@landley.net>
parents: 783
diff changeset
89 /bin/ash
425
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
90 cd /
1247
84ea1b53b73c Mounting /dev/pts is useful.
Rob Landley <rob@landley.net>
parents: 1217
diff changeset
91 umount ./dev/pts
425
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
92 umount ./dev
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
93 umount ./sys
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
94 umount ./proc
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
95 sync
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
96 fi