etc.git


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