Files
dragonx/util/build-debian-package.sh
DanS 8976e020e9 packaging: don't fail the .deb build when optional lintian is absent
build-debian-package.sh warns at startup that lintian is optional, but then
called `lintian -i ...` unconditionally at the end. Under `set -e` that aborted
with exit 127 on hosts without lintian — after the .deb had already been built.
Guard the call with `command -v lintian` so the build exits 0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-21 16:04:08 -05:00

126 lines
4.3 KiB
Bash
Executable File

#!/usr/bin/env bash
# Copyright (c) 2016-2024 The Hush developers
# Copyright (c) 2024-2026 The DragonX developers
# Distributed under the GPLv3 software license, see the accompanying
# file COPYING or https://www.gnu.org/licenses/gpl-3.0.en.html
## Usages:
## ./util/build-debian-package.sh # build amd64 package
## ./util/build-debian-package.sh aarch64 # build package for specific archiecture
# Check if running on Debian and exit if it is not
if grep -qi "Debian" /etc/os-release; then
:
else
echo -e "NOT RUNNING THIS SCRIPT ON DEBIAN! Try again with Debian." >&2
exit 1
fi
ARCH=${1:-amd64}
echo "Let There Be DragonX Debian Packages"
# Check if lintian is installed and give details about installing
# It is an optional dependency
if ! [ -x "$(command -v lintian)" ]; then
echo 'Warning: lintian is not installed yet. Consult your Linux version package manager...' >&2
echo 'On Debian/Ubuntu, try "sudo apt install lintian"'
fi
# Check if fakeroot is installed and exit if it is not
if ! [ -x "$(command -v fakeroot)" ]; then
echo 'Error: fakeroot is not installed yet. Consult your Linux version package manager...' >&2
echo 'On Debian/Ubuntu, try "sudo apt install fakeroot"'
echo ""
exit 1
fi
set -e
set -x
BUILD_PATH="/tmp/dragonx-debian-$$"
PACKAGE_NAME="dragonx"
SRC_PATH=`pwd`
SRC_DEB=$SRC_PATH/contrib/debian
SRC_DOC=$SRC_PATH/doc
umask 022
if [ ! -d $BUILD_PATH ]; then
mkdir $BUILD_PATH
fi
# If dragonxd is not currently running, package version can be hardcoded
#PACKAGE_VERSION=1.0.3
PACKAGE_VERSION=$($SRC_PATH/src/dragonxd --version|grep version|cut -d' ' -f4|cut -d- -f1|sed 's/v//g')
DEBVERSION=$(echo $PACKAGE_VERSION | sed 's/-beta/~beta/' | sed 's/-rc/~rc/' | sed 's/-/+/')
BUILD_DIR="$BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-$ARCH"
if [ -d $BUILD_DIR ]; then
rm -R $BUILD_DIR
fi
DEB_BIN=$BUILD_DIR/usr/bin
DEB_CMP=$BUILD_DIR/usr/share/bash-completion/completions
DEB_DOC=$BUILD_DIR/usr/share/doc/$PACKAGE_NAME
DEB_MAN=$BUILD_DIR/usr/share/man/man1
# NOTE: /usr/share/hush is intentional and must NOT be renamed to /usr/share/dragonx.
# The compiled binary hardcodes /usr/share/hush as the Debian global search path for the
# sapling params and asmap.dat (see src/init.cpp and src/util.cpp).
DEB_SHR=$BUILD_DIR/usr/share/hush
mkdir -p $BUILD_DIR/DEBIAN $DEB_CMP $DEB_BIN $DEB_DOC $DEB_MAN $DEB_SHR
chmod 0755 -R $BUILD_DIR/*
# Package maintainer scripts (currently empty)
#cp $SRC_DEB/postinst $BUILD_DIR/DEBIAN
#cp $SRC_DEB/postrm $BUILD_DIR/DEBIAN
#cp $SRC_DEB/preinst $BUILD_DIR/DEBIAN
#cp $SRC_DEB/prerm $BUILD_DIR/DEBIAN
cp $SRC_PATH/contrib/asmap/asmap.dat $DEB_SHR
cp $SRC_PATH/sapling-spend.params $DEB_SHR
cp $SRC_PATH/sapling-output.params $DEB_SHR
cp $SRC_PATH/src/dragonxd $DEB_BIN
strip $DEB_BIN/dragonxd
cp $SRC_PATH/src/dragonx-cli $DEB_BIN
strip $DEB_BIN/dragonx-cli
cp $SRC_PATH/src/dragonx-tx $DEB_BIN
strip $DEB_BIN/dragonx-tx
cp $SRC_DEB/changelog $DEB_DOC
cp $SRC_DEB/copyright $DEB_DOC
cp -r $SRC_DEB/examples $DEB_DOC
# Copy manpages
cp $SRC_DOC/man/dragonxd.1 $DEB_MAN/dragonxd.1
cp $SRC_DOC/man/dragonx-cli.1 $DEB_MAN/dragonx-cli.1
cp $SRC_DOC/man/dragonx-tx.1 $DEB_MAN/dragonx-tx.1
# Copy bash completion files
cp $SRC_PATH/contrib/dragonxd.bash-completion $DEB_CMP/dragonxd
cp $SRC_PATH/contrib/dragonx-cli.bash-completion $DEB_CMP/dragonx-cli
cp $SRC_PATH/contrib/dragonx-tx.bash-completion $DEB_CMP/dragonx-tx
# Gzip files
#gzip --best -n $DEB_DOC/changelog
#gzip --best -n $DEB_DOC/changelog.Debian
gzip --best -n $DEB_MAN/dragonxd.1
gzip --best -n $DEB_MAN/dragonx-cli.1
gzip --best -n $DEB_MAN/dragonx-tx.1
cd $SRC_PATH/contrib
# Create the control file
dpkg-shlibdeps $DEB_BIN/dragonxd $DEB_BIN/dragonx-cli $DEB_BIN/dragonx-tx
dpkg-gencontrol -P$BUILD_DIR -v$DEBVERSION
#dpkg-gencontrol -P$BUILD_DIR
# Create the Debian package
fakeroot dpkg-deb --build $BUILD_DIR
cp $BUILD_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-$ARCH.deb $SRC_PATH
shasum -a 256 $SRC_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-$ARCH.deb
# Analyze with Lintian, reporting bugs and policy violations (optional tool).
# Guarded so the build does not fail under `set -e` when lintian is not installed.
if command -v lintian >/dev/null 2>&1; then
lintian -i $SRC_PATH/$PACKAGE_NAME-$PACKAGE_VERSION-$ARCH.deb
else
echo "lintian not installed; skipping package analysis. The .deb was built successfully."
fi
exit 0