Skip to content

Commit

Permalink
tools/*openbsd*: smaller VMM images and tweaks.
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Steuck authored and dvyukov committed Sep 20, 2018
1 parent 7f7e03f commit b117b6e
Show file tree
Hide file tree
Showing 2 changed files with 187 additions and 2 deletions.
8 changes: 6 additions & 2 deletions tools/create-openbsd-gce-ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,17 @@ mkdir -p etc
cat >install.site <<EOF
#!/bin/sh
syspatch
pkg_add -iv bash git gmake go llvm nano wget && echo pkg_add OK
pkg_add -I bash git gmake go llvm nano wget && echo pkg_add OK
echo 'set tty com0' > boot.conf
echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
mkdir /syzkaller
echo '/dev/sd1a /syzkaller ffs rw,noauto 1 0' >> /etc/fstab
rm -rf /usr/{src,ports}
ln -s /syzkaller/src /usr/src
ln -s /syzkaller/ports /usr/ports
EOF

cat >etc/installurl <<EOF
Expand Down Expand Up @@ -178,7 +182,7 @@ grep 'pkg_add OK' install_log > /dev/null \

# Create Compute Engine disk image.
echo "Archiving disk.raw... (this may take a while)"
i="openbsd-${ARCH}-gce.tar.gz"
i="openbsd-${ARCH}-${RELNO}-gce.tar.gz"
tar -Szcf "$i" disk.raw

cat <<EOF
Expand Down
181 changes: 181 additions & 0 deletions tools/create-openbsd-vmm-worker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
#!/bin/bash

# Copyright 2018 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in
# the LICENSE file.

# Produces a very minimal image for running syzkaller fuzzers running on OpenBSD.

# Mostly derived from Go buildlet generator with blessing from bradfitz@.

set -eu -o pipefail

readonly MIRROR="${MIRROR:-cloudflare.cdn.openbsd.org}"
readonly VERSION="${VERSION:-6.4}"
readonly DOWNLOAD_VERSION="${DOWNLOAD_VERSION:-snapshots}"
readonly RELNO="${2:-${VERSION/./}}"

# The only supported setting.
readonly ARCH="amd64"

readonly ISO="install${RELNO}-${ARCH}.iso"
readonly ISO_PATCHED="install${RELNO}-${ARCH}-patched.iso"

if [[ ! -f "${ISO}" ]]; then
curl -o "${ISO}" "https://${MIRROR}/pub/OpenBSD/${DOWNLOAD_VERSION}/${ARCH}/install${RELNO}.iso"
fi

# Create custom siteXX.tgz set.
mkdir -p etc
cat >install.site <<'EOF'
#!/bin/sh
echo 'set tty com0' > boot.conf
echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config
rm /usr/libexec/reorder_kernel
ln -s /usr/bin/true /usr/libexec/reorder_kernel
rm -fr /usr/share/relink
perl -i.bak -pne 's/^(ttyC.*)vt220.*/$1unknown off/' /etc/ttys
touch root/.hushlogin home/syzkaller/.hushlogin
EOF

cat >etc/installurl <<EOF
https://${MIRROR}/pub/OpenBSD
EOF

cat >etc/rc.local <<EOF
(
set -x
echo "starting syz-manager"
)
EOF
chmod +x install.site

cat >etc/rc.conf.local <<EOF
cron_flags=NO
pflogd_flags=NO
library_aslr=NO
slaacd_flags=NO
smtpd_flags=NO
sndiod_flags=NO
pf=NO
ntpd_flags=NO
EOF

# Generate the worker keys.
rm -f worker_key*
ssh-keygen -t ed25519 -N '' -f worker_key -C worker_key

tar --owner=root --group=root -zcvf site${RELNO}.tgz install.site etc/*

# Autoinstall script.
cat >auto_install.conf <<EOF
System hostname = worker
DNS domain name = syzkaller
Which network interface = vio0
IPv4 address for vio0 = dhcp
IPv6 address for vio0 = none
Password for root account = root
Public ssh key for root account = $(cat worker_key.pub)
Do you expect to run the X Window System = no
Change the default console to com0 = yes
Which speed should com0 use = 115200
Setup a user = syzkaller
Full name for user syzkaller = Syz Kaller
Password for user syzkaller = syzkaller
Public ssh key for user syzkaller = $(cat worker_key.pub)
Allow root ssh login = prohibit-password
What timezone = US/Pacific
Which disk = sd0
Use (W)hole disk or (E)dit the MBR = whole
Use (A)uto layout, (E)dit auto layout, or create (C)ustom layout = auto
URL to autopartitioning template for disklabel = file://disklabel.template
Set name(s) = -* +bsd +bsd.mp +base* +site* done
Directory does not contain SHA256.sig. Continue without verification = yes
EOF

# Disklabel template.
cat >disklabel.template <<EOF
/ 700M-* 100%
swap 300M
EOF

# Hack install CD a bit.
echo 'set tty com0' > boot.conf
dd if=/dev/urandom of=random.seed bs=4096 count=1
cp "${ISO}" "${ISO_PATCHED}"
growisofs -M "${ISO_PATCHED}" -l -R -graft-points \
/${VERSION}/${ARCH}/site${RELNO}.tgz=site${RELNO}.tgz \
/auto_install.conf=auto_install.conf \
/disklabel.template=disklabel.template \
/etc/boot.conf=boot.conf \
/etc/random.seed=random.seed

# Initialize disk image.
rm -f worker_disk.raw
qemu-img create -f raw worker_disk.raw 1G

# Run the installer to create the disk image.
expect 2>&1 <<EOF | tee install_log
set timeout 1800
spawn qemu-system-x86_64 -nographic -smp 2 \
-drive if=virtio,file=worker_disk.raw,format=raw -cdrom "${ISO_PATCHED}" \
-net nic,model=virtio -net user -boot once=d
expect timeout { exit 1 } "boot>"
send "\n"
# Need to wait for the kernel to boot.
expect timeout { exit 1 } "\(I\)nstall, \(U\)pgrade, \(A\)utoinstall or \(S\)hell\?"
send "s\n"
expect timeout { exit 1 } "# "
send "mount /dev/cd0c /mnt\n"
send "cp /mnt/auto_install.conf /mnt/disklabel.template /\n"
send "chmod a+r /disklabel.template\n"
send "umount /mnt\n"
send "exit\n"
expect timeout { exit 1 } "CONGRATULATIONS!"
proc login {} {
send "root\n"
expect "Password:"
send "root\n"
expect "# "
send "cat /etc/ssh/ssh_host_*_key.pub\nhalt -p\n"
expect eof
}
# There is some form of race condition with OpenBSD 6.2 MP
# and qemu, which can result in init(1) failing to run /bin/sh
# the first time around...
expect {
timeout { exit 1 }
"Enter pathname of shell or RETURN for sh:" {
send "\nexit\n"
expect "login:" {
login
}
}
"login:" {
login
}
}
EOF

# Create Compute Engine disk image.
echo "Archiving worker_disk.raw... (this may take a while)"
i="openbsd-${ARCH}-${RELNO}-vmm.tar.gz"
tar -zcf "$i" worker_disk.raw

cat <<EOF
Done: $i
EOF

0 comments on commit b117b6e

Please sign in to comment.