56 lines
1.7 KiB
Bash
56 lines
1.7 KiB
Bash
#!/bin/sh
|
|
# build-john.sh — build John the Ripper jumbo with OpenCL support for the LiveCD.
|
|
#
|
|
# Downloads a pinned source snapshot from the official openwall/john repository,
|
|
# builds it inside the builder container, and caches the resulting run/ tree.
|
|
|
|
set -e
|
|
|
|
JOHN_COMMIT="$1"
|
|
DIST_DIR="$2"
|
|
|
|
[ -n "$JOHN_COMMIT" ] || { echo "usage: $0 <john-commit> <dist-dir>"; exit 1; }
|
|
[ -n "$DIST_DIR" ] || { echo "usage: $0 <john-commit> <dist-dir>"; exit 1; }
|
|
|
|
echo "=== John the Ripper jumbo ${JOHN_COMMIT} ==="
|
|
|
|
CACHE_DIR="${DIST_DIR}/john-${JOHN_COMMIT}"
|
|
CACHE_ROOT="${BEE_CACHE_DIR:-${DIST_DIR}/cache}"
|
|
DOWNLOAD_CACHE_DIR="${CACHE_ROOT}/john-downloads"
|
|
SRC_TAR="${DOWNLOAD_CACHE_DIR}/john-${JOHN_COMMIT}.tar.gz"
|
|
SRC_URL="https://github.com/openwall/john/archive/${JOHN_COMMIT}.tar.gz"
|
|
|
|
if [ -x "${CACHE_DIR}/run/john" ] && [ -f "${CACHE_DIR}/run/john.conf" ]; then
|
|
echo "=== john cached, skipping build ==="
|
|
echo "run dir: ${CACHE_DIR}/run"
|
|
exit 0
|
|
fi
|
|
|
|
mkdir -p "${DOWNLOAD_CACHE_DIR}"
|
|
if [ ! -f "${SRC_TAR}" ]; then
|
|
echo "=== downloading john source snapshot ==="
|
|
wget --show-progress -O "${SRC_TAR}" "${SRC_URL}"
|
|
fi
|
|
|
|
BUILD_TMP=$(mktemp -d)
|
|
trap 'rm -rf "${BUILD_TMP}"' EXIT INT TERM
|
|
|
|
cd "${BUILD_TMP}"
|
|
tar xf "${SRC_TAR}"
|
|
SRC_DIR=$(find . -maxdepth 1 -type d -name 'john-*' | head -1)
|
|
[ -n "${SRC_DIR}" ] || { echo "ERROR: john source directory not found"; exit 1; }
|
|
|
|
cd "${SRC_DIR}/src"
|
|
echo "=== configuring john ==="
|
|
./configure
|
|
echo "=== building john ==="
|
|
make clean >/dev/null 2>&1 || true
|
|
make -j"$(nproc)"
|
|
|
|
mkdir -p "${CACHE_DIR}"
|
|
cp -a "../run" "${CACHE_DIR}/run"
|
|
chmod +x "${CACHE_DIR}/run/john"
|
|
|
|
echo "=== john build complete ==="
|
|
echo "run dir: ${CACHE_DIR}/run"
|