#!/bin/bash
# see https://gist.github.com/zefie/69dc79494f3321c5a6254fe09eab5ed6 for most updated version
DEB_TEMPLATE='1.1.1d-0+deb10u3'
DEB_TEMPLATE_SID='1.1.1a-1'
SSL_VERS="$(echo "${DEB_TEMPLATE}" | cut -d'-' -f1)"
DEB_SERVER_SID='http://deb.debian.org/debian/pool/main/o/openssl'
DEB_SERVER='http://security.debian.org/debian-security/pool/updates/main/o/openssl'
SSL_SERVER='https://www.openssl.org/source'
DEBUILD_ARGS=('-b')
DEBUILD_INT_ARGS=() # ccache stuff needs to go first
# check options
while true; do
case "$1" in
# distcc implies ccache
-d | --distcc ) echo " * distcc mode enabled"; Z_USE_DISTCC=1; Z_USE_CCACHE=1; shift ;;
# ccache only
-c | --ccache ) echo " * ccache mode enabled"; Z_USE_CCACHE=1; shift ;;
-- ) shift; break 2; ;;
* ) break 2; ;;
esac
done
function chkerr() {
if [ ${1} -ne 0 ]; then
echo " ! Previous command failed with code ${1}"
exit "${1}"
fi
}
# check for required build packages. more may be needed
Z_PACKAGES=''
Z_REQUIRED=('build-essential' 'cryptodev-linux-dev' 'devscripts' 'curl')
if [ ! -z "${Z_USE_DISTCC}" ]; then
Z_USE_CCACHE=1
Z_REQUIRED+=('distcc')
fi
if [ ! -z "${Z_USE_CCACHE}" ]; then
Z_REQUIRED+=('ccache')
fi
for f in "${Z_REQUIRED[@]}"; do
if ! dpkg --list | grep '^ii' | grep -q "${f}"; then
Z_PACKAGES="${Z_PACKAGES} ${f}";
fi
done
# install needed packages
if [ "${Z_PACKAGES}" != '' ]; then
sudo apt install ${Z_PACKAGES}
chkerr $?
fi
if [ ! -z "${Z_USE_CCACHE}" ]; then
# forcing full path to compiler can help if using distcc
CC="$(realpath "$(which ccache)") $(realpath "$(which gcc)")"
CXX="$(realpath "$(which ccache)") $(realpath "$(which g++)")"
DEBUILD_INT_ARGS+=('-eCC' '-eCXX')
fi
if [ ! -z "${Z_USE_DISTCC}" ]; then
if [ -z "${DISTCC_HOSTS}" ]; then
echo " ! Please define DISTCC_HOSTS first, or disable distcc support!"
exit 1;
fi
export CCACHE_PREFIX="distcc"
export DISTCC_JOBS=$(distcc -j)
echo " * Testing distcc..."
# test distcc .. distcc won't distribute stdin so make temp file
Z_HELLO_C='I2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbigpIHsKICAgIHByaW50ZigiSGVsbG8gZGlzdGNjIVxuIik7CiAgICByZXR1cm4gMDsKfQo='
DISTCC_VERBOSE=1
Z_TMP=$(mktemp --suffix='.c')
echo "${Z_HELLO_C}" | base64 -d > "${Z_TMP}"
Z_TEST=$(distcc "$(realpath "$(which gcc)")" -o /dev/null -c "${Z_TMP}" 2>&1)
rm "${Z_TMP}"
Z_RES=$(echo "${Z_TEST}" | grep -c 'failed to distribute')
unset DISTCC_VERBOSE
if [ ${Z_RES} -gt 0 ]; then
echo " ! Your distcc host (${DISTCC_HOSTS}) is not working! Please fix or try again with distcc mode"
echo "${Z_TEST}"
exit 1;
fi
DEBUILD_INT_ARGS+=('-eCCACHE_PREFIX' '-eDISTCC_HOSTS' '-eDISTCC_JOBS')
fi
read -r -d '' DEB_PATCH << EOM
ZGlmZiAtTmF1ciBhL2RlYmlhbi9ydWxlcyBiL2RlYmlhbi9ydWxlcwotLS0gYS9kZWJpYW4vcnVs
ZXMJMjAxOC0xMS0yNCAyMTo1Nzo0NS4wMDAwMDAwMDAgKzAxMDAKKysrIGIvZGViaWFuL3J1bGVz
CTIwMTktMDEtMjcgMDQ6NDk6NDYuOTY2OTkyMTY1ICswMTAwCkBAIC0zMSw3ICszMSw3IEBACiAJ
TUFLRUZMQUdTICs9IC1qJChOVU1KT0JTKQogZW5kaWYKIAotQ09ORkFSR1MgID0gLS1wcmVmaXg9
L3VzciAtLW9wZW5zc2xkaXI9L3Vzci9saWIvc3NsIC0tbGliZGlyPWxpYi8kKERFQl9IT1NUX01V
TFRJQVJDSCkgbm8taWRlYSBuby1tZGMyIG5vLXJjNSBuby16bGliIG5vLXNzbDMgZW5hYmxlLXVu
aXQtdGVzdCBuby1zc2wzLW1ldGhvZCBlbmFibGUtcmZjMzc3OSBlbmFibGUtY21zCitDT05GQVJH
UyAgPSAtLXByZWZpeD0vdXNyIC0tb3BlbnNzbGRpcj0vdXNyL2xpYi9zc2wgLURIQVZFX0NSWVBU
T0RFViAtRFVTRV9DUllQVE9ERVZfRElHRVNUUyAtbWFyY2g9YXJtdjctYSAtV2wsLS1lbmFibGUt
bmV3LWR0YWdzLC1ycGF0aCwvdXNyL2xpYi9zc2wgLS1saWJkaXI9bGliLyQoREVCX0hPU1RfTVVM
VElBUkNIKSBuby1pZGVhIG5vLW1kYzIgbm8tcmM1IG5vLXpsaWIgbm8tc3NsMyBlbmFibGUtdW5p
dC10ZXN0IG5vLXNzbDMtbWV0aG9kIGVuYWJsZS1yZmMzNzc5IGVuYWJsZS1jbXMKIE9QVF9hbHBo
YSA9IGV2NCBldjUKIEFSQ0hPUFRTICA9IE9QVF8kKERFQl9IT1NUX0FSQ0gpCiBPUFRTICAgICAg
PSAkKCQoQVJDSE9QVFMpKQo=
EOM
DEB_TEMPLATE_SID_URL="${DEB_SERVER_SID}/openssl_${DEB_TEMPLATE_SID}.debian.tar.xz"
DEB_TEMPLATE_URL="${DEB_SERVER}/openssl_${DEB_TEMPLATE}.debian.tar.xz"
OPENSSL_URL="${SSL_SERVER}/openssl-${SSL_VERS}.tar.gz"
if [ -d "openssl-${SSL_VERS}" ]; then
echo " * Cleaning old build directory..."
rm -rf "openssl-${SSL_VERS}"
chkerr $?
fi
echo " * Getting OpenSSL ${SSL_VERS} source..."
curl -sL "${OPENSSL_URL}" | tar -xz
chkerr $?
echo " * Entering build directory..."
cd "openssl-${SSL_VERS}"
chkerr $?
echo " * Getting debian build rules/patches from ${DEB_TEMPLATE}"
curl -sL "${DEB_TEMPLATE_URL}" | tar -xJ
chkerr $?
echo " * Patching for cryptodev support"
echo "${DEB_PATCH}" | base64 -d | patch -p1 > /dev/null
chkerr $?
echo " * Getting updated changelog and patches from ${DEB_TEMPLATE_SID}"
rm debian/patches/*
chkerr $?
curl -sL "${DEB_TEMPLATE_SID_URL}" | tar -xJ debian/changelog debian/patches
chkerr $?
echo -n " * Starting build in"
for f in $(seq 5 -1 1); do
echo -n " ${f}.."
sleep 1;
done
echo ''
if [ ${#DEBUILD_INT_ARGS[@]} -gt 0 ]; then
DEBUILD_ARGS=("${DEBUILD_INT_ARGS[@]}" "${DEBUILD_ARGS[@]}")
fi
debuild "${DEBUILD_ARGS[@]}"
chkerr $?
Comments