File PKGBUILD of Package john
pkgname=john
_jumbover=1
_johnver=1.9.0
pkgver=${_johnver}.jumbo${_jumbover}
pkgrel=6
pkgdesc='John the Ripper password cracker'
url='https://www.openwall.com/john'
arch=('x86_64')
license=('GPL2' 'custom')
depends=('openssl' 'gmp' 'libpcap' 'openmpi' 'gcc-libs' 'opencl-icd-loader')
optdepends=(
'bash-completion: completion for bash'
'lua: lua based john scripts'
'perl: perl based john scripts'
'ruby: ruby based john scripts'
'python2: python2 based john scripts'
'python: python based john scripts')
makedepends=('pkg-config' 'opencl-headers')
backup=('etc/john/john.conf')
# source=(https://www.openwall.com/john/k/john-${_johnver}-jumbo-${_jumbover}.tar.xz{,.sign})
#source=('https://www.openwall.com/john/k/john-1.9.0-jumbo-1.tar.xz'
_commit=f47aa64258bd46b9123db877a1152c217ad905bb
source=('https://github.com/magnumripper/JohnTheRipper/archive/f47aa64258bd46b9123db877a1152c217ad905bb.tar.gz'
'bleeding_clerror_patch.patch')
sha512sums=('SKIP'
'SKIP')
prepare() {
mv JohnTheRipper-${_commit} ${pkgname}-${_johnver}-jumbo-${_jumbover}
cd ${pkgname}-${_johnver}-jumbo-${_jumbover}/src
# Patch for debugging
patch -p2 -i ../../bleeding_clerror_patch.patch
sed 's|$prefix/bin|/usr/lib/john|' -i configure.ac
autoreconf -fiv
}
build() {
cd ${pkgname}-${_johnver}-jumbo-${_jumbover}/src
local CFLAGS="${CFLAGS} -DCPU_FALLBACK"
local options=(
--prefix=/usr
--with-systemwide
--disable-native-tests
--enable-openmp
--enable-mpi
--enable-opencl
--enable-pkg-config
--enable-pcap
)
if [[ "${CARCH}" == "x86_64" ]]; then
./configure "${options[@]}" CFLAGS="${CFLAGS/-DCPU_FALLBACK}"
make clean; make
mv ../run/john{,-non-avx}
./configure "${options[@]}" CFLAGS="${CFLAGS} -mavx"
make clean; make
mv ../run/john{,-non-xop}
./configure "${options[@]}" CFLAGS="${CFLAGS} -mxop"
make clean; make
elif [[ "${CARCH}" == "i686" ]]; then
./configure "${options[@]}" CFLAGS="${CFLAGS}"
make clean; make
mv ../run/john{,-non-mmx}
./configure "${options[@]}" CFLAGS="${CFLAGS} -mmmx"
make clean; make
mv ../run/john{,-non-sse}
./configure "${options[@]}" CFLAGS="${CFLAGS} -msse2"
make clean; make
mv ../run/john{,-non-avx}
./configure "${options[@]}" CFLAGS="${CFLAGS} -mavx"
make clean; make
mv ../run/john{,-non-xop}
./configure "${options[@]}" CFLAGS="${CFLAGS} -mxop"
make clean; make
else
./configure "${options[@]}" CFLAGS="${CFLAGS}"
make clean; make
fi
}
package() {
cd ${pkgname}-${_johnver}-jumbo-${_jumbover}
# config
install -Dm 644 run/john.conf -t "${pkgdir}/etc/john"
install -Dm 644 run/*.conf -t "${pkgdir}/usr/share/john"
# opencl
install -Dm 644 run/opencl/*.cl -t "${pkgdir}/usr/share/john/opencl"
install -Dm 644 run/opencl/*.h -t "${pkgdir}/usr/share/john/opencl"
ls -la run/opencl/
ls -la ${pkgdir}/usr/share/john/opencl/
# docs
install -d "${pkgdir}/usr/share/doc/john"
cp -r doc/* "${pkgdir}/usr/share/doc/john"
rm "${pkgdir}/usr/share/doc/john/README"
install -Dm 644 README.md "${pkgdir}/usr/share/doc/${pkgname}"
install -Dm 644 doc/LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}"
chmod -R o+r "${pkgdir}"/usr/share/doc/john/*
# completion
install -Dm 644 run/john.bash_completion "${pkgdir}/usr/share/bash-completion/completions/john"
install -Dm 644 run/john.zsh_completion "${pkgdir}/usr/share/zsh/site-functions/_john"
# scripts
install -d "${pkgdir}/usr/bin" "${pkgdir}/usr/lib/john"
install -Dm 755 run/{*.py,*.pl,*.rb,*.lua,*.js,mailer,benchmark-unify} -t "${pkgdir}/usr/lib/john"
for ext in lua pl rb py; do
for script in run/*."${ext}"; do
ln -sf "/usr/lib/john/$(basename "${script}")" "${pkgdir}/usr/bin/$(basename "${script/.${ext}/}")"
done
done
# binaries
install -Dm 755 run/john -t "${pkgdir}/usr/bin"
install -Dm 755 run/john-non-* -t "${pkgdir}/usr/lib/john"||true
local john_bins=(bitlocker2john calc_stat cprepair dmg2john eapmd5tojohn genmkvpwd hccap2john \
keepass2john mkvcalcproba putty2john racf2john raw2dyna SIPdump uaf2john \
vncpcap2john wpapcap2john)
for bin in "${john_bins[@]}"; do
install -Dm 755 "run/${bin}" -t "${pkgdir}/usr/lib/john"
ln -sf "/usr/lib/john/${bin}" "${pkgdir}/usr/bin/${bin}"
done
# symlink john
for link in $(find run -maxdepth 1 -type l); do
ln -s john "${pkgdir}/usr/bin/$(basename "${link}")"
ln -s /usr/bin/john "${pkgdir}/usr/lib/john/$(basename "${link}")"
done
# data
install -Dm 644 run/*.chr run/*.lst run/dictionary* run/stats -t "${pkgdir}/usr/share/john"
install -Dm 644 run/rules/* -t "${pkgdir}/usr/share/john/rules"
}
# vim: ts=2 sw=2 et: