etc~ scripts and random things |
| git clone https://github.com/djnnvx/etc.git |
| log | files | refs | archive |
build.sh (4105B)
1 #!/bin/bash 2 # build.sh — incremental rebuild for the linux-usb-stack fuzzing environment. 3 # 4 # Re-runs after kernel or syzkaller source changes. 5 # Does NOT re-download sources; run setup.sh for first-time setup. 6 # 7 # Usage: 8 # bash build.sh # rebuild kernel + syzkaller + initramfs 9 # bash build.sh --kernel # rebuild kernel only 10 # bash build.sh --syzkaller # rebuild syzkaller only 11 # bash build.sh --initramfs # repack initramfs only 12 13 set -euo pipefail 14 15 SCRIPT_DIR="$(cd "$(dirname "${0}")" && pwd)" 16 cd "${SCRIPT_DIR}" 17 18 DO_KERNEL=1 19 DO_SYZKALLER=1 20 DO_INITRAMFS=1 21 22 if [[ $# -gt 0 ]]; then 23 DO_KERNEL=0; DO_SYZKALLER=0; DO_INITRAMFS=0 24 for arg in "$@"; do 25 [[ "${arg}" == "--kernel" ]] && DO_KERNEL=1 26 [[ "${arg}" == "--syzkaller" ]] && DO_SYZKALLER=1 27 [[ "${arg}" == "--initramfs" ]] && DO_INITRAMFS=1 28 done 29 fi 30 31 log() { echo "[*] $*"; } 32 ok() { echo "[+] $*"; } 33 die() { echo "[!] $*" >&2; exit 1; } 34 35 # ── Go path ────────────────────────────────────────────────────────────────── 36 for cand in "${SCRIPT_DIR}/go/bin/go" /usr/local/go/bin/go; do 37 [[ -x "${cand}" ]] && export PATH="$(dirname "${cand}"):${PATH}" && break 38 done 39 export GOPATH="${SCRIPT_DIR}/gopath" 40 41 # ── kernel ─────────────────────────────────────────────────────────────────── 42 if [[ "${DO_KERNEL}" -eq 1 ]]; then 43 [[ -d "linux" ]] || die "linux/ not found. Run setup.sh first." 44 log "Rebuilding kernel..." 45 cd linux 46 make -j"$(nproc)" bzImage 2>&1 | tee /tmp/kbuild.log | \ 47 grep -E "^\s*(CC|LD|AR|error:|warning: )" || \ 48 { grep "error:" /tmp/kbuild.log | tail -20; exit 1; } 49 cp arch/x86/boot/bzImage "${SCRIPT_DIR}/bzImage" 50 cd "${SCRIPT_DIR}" 51 ok "Kernel rebuilt: bzImage" 52 fi 53 54 # ── syzkaller ───────────────────────────────────────────────────────────────── 55 if [[ "${DO_SYZKALLER}" -eq 1 ]]; then 56 [[ -d "syzkaller" ]] || die "syzkaller/ not found. Run setup.sh first." 57 log "Rebuilding syzkaller..." 58 cd syzkaller 59 make all -j"$(nproc)" 2>&1 | tail -5 60 cd "${SCRIPT_DIR}" 61 ok "syzkaller rebuilt." 62 fi 63 64 # ── initramfs ───────────────────────────────────────────────────────────────── 65 if [[ "${DO_INITRAMFS}" -eq 1 ]]; then 66 [[ -d "busybox-install" ]] || die "busybox-install/ not found. Run setup.sh first." 67 [[ -f "dropbear-install/sbin/dropbear" ]] || die "dropbear not found. Run setup.sh first." 68 [[ -f "qemu/id_rsa.pub" ]] || die "qemu/id_rsa.pub not found. Run setup.sh first." 69 70 log "Repacking initramfs..." 71 rm -rf initramfs 72 mkdir -p initramfs/{bin,sbin,usr/bin,usr/sbin,proc,sys,dev,tmp,run,lib,lib64,etc,etc/dropbear,root/.ssh} 73 74 cp busybox-install/bin/busybox initramfs/bin/busybox 75 (cd initramfs && bin/busybox --list | while read applet; do 76 ln -sf /bin/busybox bin/"${applet}" 2>/dev/null || true 77 done) 78 ln -sf /bin/busybox initramfs/bin/sh 79 ln -sf /bin/busybox initramfs/sbin/ip 80 ln -sf /bin/busybox initramfs/sbin/modprobe 81 82 cp dropbear-install/sbin/dropbear initramfs/sbin/dropbear 83 cp dropbear-install/sbin/dropbearkey initramfs/sbin/dropbearkey 84 chmod +x initramfs/sbin/dropbear initramfs/sbin/dropbearkey 85 86 cp qemu/id_rsa.pub initramfs/root/.ssh/authorized_keys 87 chmod 700 initramfs/root/.ssh 88 chmod 600 initramfs/root/.ssh/authorized_keys 89 90 cp qemu/init initramfs/init 91 chmod +x initramfs/init 92 93 (cd initramfs && find . | cpio -oH newc 2>/dev/null | gzip -9) > qemu/initramfs.cpio.gz 94 ok "initramfs repacked: $(du -sh qemu/initramfs.cpio.gz | cut -f1)" 95 fi