#!/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 "; exit 1; } [ -n "$DIST_DIR" ] || { echo "usage: $0 "; 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"