annotate sources/native-root/sbin/init.sh @ 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.
author Rob Landley <rob@landley.net>
date Wed, 16 Jun 2010 08:13:30 -0500
parents 37c7bd84c777
children 1ad777637d2d
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
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
3 # Otherwise, building source packages wants things like /bin/bash and
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
4 # running the results wants /lib/ld-uClibc.so.0, so set up some directories
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
5 # and symlinks to let you easily compile source packages.
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
6
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
7 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
8
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
9 # Populate /dev
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
10 mountpoint -q sys || mount -t sysfs sys sys
688
78cbd428d60e Feed noatime flag to init.sh mounts.
Rob Landley <rob@landley.net>
parents: 673
diff changeset
11 mountpoint -q dev || mount -t tmpfs -o noatime dev dev
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
12 mdev -s
12b7ecb79ad0 A little init script for mini-native.sh that gets it read to build stuff.
Rob Landley <rob@landley.net>
parents:
diff changeset
13
790
188a182b1a7f Remove some leftover /tools residue.
Rob Landley <rob@landley.net>
parents: 783
diff changeset
14 # Make sure /proc is there
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
15 mountpoint -q proc || mount -t proc proc proc
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
16
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
17 [ -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
18 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
19
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
20 # 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
21 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
22 then
302
eb2aa88277e2 If a second block device exists, mount it on /home.
Rob Landley <rob@landley.net>
parents: 286
diff changeset
23
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
24 # 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
25
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 # 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
27 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
28 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
29
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
30 # 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
31 [ "$(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
32
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
33 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
34
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
35 # If there's a /dev/hdb or /dev/sdb, mount it on home
302
eb2aa88277e2 If a second block device exists, mount it on /home.
Rob Landley <rob@landley.net>
parents: 286
diff changeset
36
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 [ -b /dev/hdb ] && HOMEDEV=/dev/hdb
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 [ -b /dev/sdb ] && HOMEDEV=/dev/sdb
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
39 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
40 then
688
78cbd428d60e Feed noatime flag to init.sh mounts.
Rob Landley <rob@landley.net>
parents: 673
diff changeset
41 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
42 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
43 # 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
44 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
45 [ $? -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
46 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
47 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
48
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
49 [ -b /dev/hdc ] && MNTDEV=/dev/hdc
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
50 [ -b /dev/sdc ] && MNTDEV=/dev/sdc
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 if [ ! -z "$MNTDEV" ]
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
52 then
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
53 mount -o ro $MNTDEV /mnt
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
54 fi
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
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
56 CONSOLE="$(sed -n 's@.* console=\(/dev/\)*\([^ ]*\).*@\2@p' /proc/cmdline)"
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
57
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
58 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
59 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
60 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
61 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
62 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
63 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
64 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
65
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
66 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
67 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
68 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
69 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
70 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
71 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
72 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
73 then
983
2932487b59fa Typo fix.
Rob Landley <rob@landley.net>
parents: 980
diff changeset
74 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
75 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
76 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
77 fi
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
78 exec /bin/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
79
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
80 # 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
81 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
82 [ ! -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
83 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
84
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
85 # 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
86 [ "$(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
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 # 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
89
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
90 echo Type exit when done.
790
188a182b1a7f Remove some leftover /tools residue.
Rob Landley <rob@landley.net>
parents: 783
diff changeset
91 /bin/ash
425
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
92 cd /
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
93 umount ./dev
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
94 umount ./sys
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
95 umount ./proc
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
96 sync
6a8f6cecce7c Cleanup after chroot-setup.sh, and set nameserver.
Rob Landley <rob@landley.net>
parents: 415
diff changeset
97 fi