ooni-probe-cli/CLI/linux/debian
Simone Basso 3109d56aef
feat(gha): build debian package using ./make (#331)
Part of https://github.com/ooni/probe/issues/1466. We're building both `arm64` and `amd64`. We are still not publishing `arm64` packages, which is what is asked in the original issue, but we're really close to doing that.
2021-05-06 22:13:09 +02:00

74 lines
2.2 KiB
Bash
Executable File

#!/bin/sh
# This script creates a Debian package. When run by `./make`, it
# is run inside a debian:stable container. It's fine to also
# run this script from any debian-like system, as long as the
# following ASSUMPTIONS are met:
#
# 1. the `ooniprobe` we are packaging is available at
# this path `./CLI/linux/$GOARCH/ooniprobe`;
#
# 2. we are running on a debian system that has the same
# architecture of the `ooniprobe` we are packaging.
if [ $# -gt 1 ]; then
echo "usage: $0 [run_number]" 1>&2
exit 1
fi
run_number=$1
# Copy the target binary in the correct location expected
# by the debian/ooniprobe-cli.install file.
rm -rf ./debian/bin
mkdir -p ./debian/bin
machine=`uname -m`
goarch=""
case $machine in
x86_64)
cp ./CLI/linux/amd64/ooniprobe ./debian/bin
goarch=amd64
;;
aarch64)
cp ./CLI/linux/arm64/ooniprobe ./debian/bin
goarch=arm64
;;
*)
# TODO(bassosimone): here we probably want to further extend
# this script to support at least armv7.
echo "FATAL: unsupported machine: $machine" 1>&2
exit 1
;;
esac
set -ex
# figure out the version number from the binary itself (which rests
# on the assumption that `uname -m` can run such a binary)
version=`./debian/bin/ooniprobe version`
if [ ! -z $run_number ]; then
version="${version}~${run_number}"
fi
# The OONI_DEB_DRY_RUN is a semi-undocumented feature allowing
# us to see the commands that would be run by this script.
# install the dependencies required by the build process
$OONI_DEB_DRY_RUN apt-get update -q
$OONI_DEB_DRY_RUN apt-get build-dep -y --no-install-recommends .
# keep the original changelog file safe
$OONI_DEB_DRY_RUN cp ./debian/changelog ./debian/changelog.oocopy
$OONI_DEB_DRY_RUN dch -v $version "New version ${version}"
$OONI_DEB_DRY_RUN dpkg-buildpackage -us -uc -b
# restore the original changelog file
$OONI_DEB_DRY_RUN mv ./debian/changelog.oocopy ./debian/changelog
# move the package so that we don't loose track
# of it when using a build container
$OONI_DEB_DRY_RUN mv ../*.deb .
# install the package on the container as a smoke test to
# ensure that it is installable.
DEBIAN_FRONTEND=noninteractive dpkg -i ooniprobe-cli_${version}_${goarch}.deb