| #!/bin/sh |
| |
| # mount all kinds of things |
| mount tmpfs -t tmpfs /etc |
| # we need our own /dev/rfkill, and don't want device access |
| mount tmpfs -t tmpfs /dev |
| mount tmpfs -t tmpfs /tmp |
| # some sockets go into /var/run, and / is read-only |
| mount tmpfs -t tmpfs /var/run |
| mount proc -t proc /proc |
| mount sysfs -t sysfs /sys |
| # needed for tracing |
| mount debugfs -t debugfs /sys/kernel/debug |
| |
| # reboot on any sort of crash |
| sysctl kernel.panic_on_oops=1 |
| sysctl kernel.panic=1 |
| |
| # get extra command line variables from /proc/cmdline |
| TESTDIR=$(sed 's/.*testdir=\([^ ]*\) .*/\1/' /proc/cmdline) |
| TIMEWARP=$(sed 's/.*timewarp=\([^ ]*\) .*/\1/' /proc/cmdline) |
| EPATH=$(sed 's/.*EPATH=\([^ ]*\) .*/\1/' /proc/cmdline) |
| ARGS=$(sed 's/.*ARGS=//' /proc/cmdline) |
| |
| # create /dev entries we need |
| mknod -m 660 /dev/ttyS0 c 4 64 |
| mknod -m 660 /dev/random c 1 8 |
| mknod -m 660 /dev/urandom c 1 9 |
| mknod -m 666 /dev/null c 1 3 |
| test -f /sys/class/misc/rfkill/dev && \ |
| mknod -m 660 /dev/rfkill c $(cat /sys/class/misc/rfkill/dev | tr ':' ' ') |
| ln -s /proc/self/fd/0 /dev/stdin |
| ln -s /proc/self/fd/1 /dev/stdout |
| ln -s /proc/self/fd/2 /dev/stderr |
| |
| # create dummy sudo - everything runs as uid 0 |
| mkdir /tmp/bin |
| cat > /tmp/bin/sudo << EOF |
| #!/bin/bash |
| |
| exec "\$@" |
| EOF |
| chmod +x /tmp/bin/sudo |
| # and put it into $PATH, as well as our extra-$PATH |
| export PATH=/tmp/bin:$EPATH:$PATH |
| |
| # some tests assume adm/admin group(s) exist(s) |
| cat > /etc/group <<EOF |
| adm:x:0: |
| admin:x:0: |
| messagebus:x:106: |
| EOF |
| # root should exist |
| cat > /etc/passwd <<EOF |
| root:x:0:0:root:/tmp:/bin/bash |
| messagebus:x:102:106::/var/run/dbus:/bin/false |
| EOF |
| cat > /etc/ethertypes <<EOF |
| IPv4 0800 ip ip4 |
| ARP 0806 ether-arp |
| IPv6 86DD ip6 |
| EOF |
| cat > /etc/protocols <<EOF |
| ip 0 IP |
| icmp 1 ICMP |
| tcp 6 TCP |
| udp 17 UDP |
| ipv6-icmp 58 IPv6-ICMP |
| EOF |
| |
| # local network is needed for some tests |
| ip link set lo up |
| |
| # create logs mountpoint and mount the logshare |
| mkdir /tmp/logs |
| mount -t 9p -o trans=virtio,rw logshare /tmp/logs |
| |
| if [ "$TIMEWARP" = "1" ] ; then |
| ( |
| while sleep 1 ; do |
| date --set "@$(($(date +%s) + 19))" |
| done |
| ) & |
| fi |
| |
| # check if we're rebooting due to a kernel panic ... |
| if grep -q 'Kernel panic' /tmp/logs/console ; then |
| echo "KERNEL CRASHED!" >/dev/ttyS0 |
| else |
| # finally run the tests |
| export USER=0 |
| export LOGDIR=/tmp/logs |
| export DBFILE=$LOGDIR/results.db |
| export PREFILL_DB=y |
| |
| # some tests need CRDA, install a simple uevent helper |
| # and preload the 00 domain it will have asked for already |
| echo $TESTDIR/vm/uevent.sh > /sys/kernel/uevent_helper |
| COUNTRY=00 crda |
| |
| mkdir -p /var/run/dbus |
| touch /var/run/dbus/hwsim-test |
| chown messagebus.messagebus /var/run/dbus |
| dbus-daemon --config-file=$TESTDIR/vm/dbus.conf --fork |
| |
| cd $TESTDIR |
| ./run-all.sh $ARGS </dev/ttyS0 >/dev/ttyS0 2>&1 |
| if test -d /sys/kernel/debug/gcov ; then |
| cp -ar /sys/kernel/debug/gcov /tmp/logs/ |
| # these are broken as they're updated while being read ... |
| find /tmp/logs/gcov/ -wholename '*kernel/gcov/*' -print0 | xargs -0 rm |
| fi |
| #bash </dev/ttyS0 >/dev/ttyS0 2>&1 |
| fi |
| |
| # and shut down the machine again |
| halt -f -p |