⬢ DragonFlyBSD Kernel Audit
DF-2390 / build.sh
← back to finding ↓ download raw
#!/bin/sh
# build_acharness.sh -- build + install the ACHARNESS kernel (baseline
# or fixed) and reboot into it.  Run from the rig dir on the host.
#
# usage: sh build_acharness.sh [fixed]
set -e
cd "$(dirname "$0")"
ROOT="${DFBSD_ROOT:-/home/maxx/dfbsd/dfbsd}"
[ -d "$ROOT/sys/dev/acpica" ] || { echo "FATAL: no sys tree at $ROOT"; exit 1; }
VM="$ROOT/dfbsd-qemu"
SCP="scp -q -F $VM/config"
SSH="ssh -F $VM/config -o ConnectTimeout=15"
GUEST_DIR=/usr/src/sys

echo "== push rig sources =="
$SSH dfbsd "mkdir -p $GUEST_DIR/dev/acpica/acsim $GUEST_DIR/dev/acpica/aibs $GUEST_DIR/dev/agp" </dev/null
$SCP acsim.c dfbsd:$GUEST_DIR/dev/acpica/acsim/
$SCP aib_shim.c dfbsd:$GUEST_DIR/dev/acpica/aibs/
$SCP "$ROOT/sys/dev/acpica/aibs/atk0110.c" dfbsd:$GUEST_DIR/dev/acpica/aibs/atk0110_verbatim.c
$SCP agp_shim.c dfbsd:$GUEST_DIR/dev/agp/
$SCP "$ROOT/sys/dev/agp/agp.c" dfbsd:$GUEST_DIR/dev/agp/agp_verbatim.c

if [ "${1:-}" = "fixed" ]; then
	echo "== push + apply all fix.diffs to the GUEST tree only =="
	for f in fix_2372.diff fix_2374.diff fix_2375.diff fix_2376.diff fix_2377.diff fix_2381.diff fix_2385.diff fix_2390.diff fix_2391.diff fix_2393.diff fix_2394.diff fix_2395.diff fix_2396.diff fix_2398.diff fix_2399.diff fix_cstcopy.diff ; do
		[ -f "$f" ] && $SCP "$f" "dfbsd:/tmp/$f"
	done
	$SSH dfbsd 'cd /usr/src && for f in /tmp/fix_*.diff /tmp/fix_cstcopy.diff; do [ -f "$f" ] && echo "applying $f" && patch -s -N -p1 < "$f" || true; done; true'
	# verbatim copies must carry the fixes too
	$SSH dfbsd "cp $GUEST_DIR/dev/acpica/aibs/atk0110.c $GUEST_DIR/dev/acpica/aibs/atk0110_verbatim.c; cp $GUEST_DIR/dev/agp/agp.c $GUEST_DIR/dev/agp/agp_verbatim.c; true"
else
	echo "== baseline: restore verbatim production sources =="
	$SCP "$ROOT/sys/dev/acpica/aibs/atk0110.c" dfbsd:$GUEST_DIR/dev/acpica/aibs/atk0110_verbatim.c
	$SCP "$ROOT/sys/dev/agp/agp.c" dfbsd:$GUEST_DIR/dev/agp/agp_verbatim.c
fi

echo "== conf/files + kernel config (idempotent) =="
$SSH dfbsd 'set -e
	if ! grep -q "acpica/acsim/acsim.c" /usr/src/sys/conf/files; then
		printf "dev/acpica/acsim/acsim.c\t\toptional acsim acpi\n" >> /usr/src/sys/conf/files
		printf "dev/acpica/aibs/aib_shim.c\t\toptional aibsim acpi\n" >> /usr/src/sys/conf/files
		printf "dev/agp/agp_shim.c\t\t\toptional agpshim\n" >> /usr/src/sys/conf/files
		printf "dev/agp/agp_if.m\t\t\toptional agpshim\n" >> /usr/src/sys/conf/files
	fi
	if [ ! -f /usr/src/sys/config/ACHARNESS ]; then
		sed -e "s/^ident.*X86_64_GENERIC/ident\t\tACHARNESS/" \
		    -e "/^device[[:space:]]*agp/d" \
		    /usr/src/sys/config/X86_64_GENERIC > /usr/src/sys/config/ACHARNESS
		printf "\n# DF-23xx acpica/agp verification rig\ndevice\t\tacsim\ndevice\t\taibsim\ndevice\t\tagpshim\ndevice\t\tacpi_fujitsu\ndevice\t\tacpi_toshiba\ndevice\t\tacpi_sony\n" >> /usr/src/sys/config/ACHARNESS
	fi
	grep -E "acsim|aibsim|agpshim|fujitsu|toshiba|sony" /usr/src/sys/config/ACHARNESS
'

echo "== kernel build + install =="
$SSH dfbsd 'cd /usr/src && make -j6 nativekernel KERNCONF=ACHARNESS && make installkernel KERNCONF=ACHARNESS' 2>&1 | tail -25

echo "== rebooting =="
$SSH dfbsd 'reboot' >/dev/null 2>&1 || true
sleep 12
"$VM/vm.sh" down >/dev/null 2>&1 || true
sleep 2
"$VM/vm.sh" up 300
"$VM/vm.sh" run_root 'uname -v'