changeset 622:cccac82528b9

First cut of Debian package build
author Chris Cannam
date Thu, 10 Oct 2019 13:36:13 +0100
parents e06cbdc7301c
children 48802b1c9c1e 72f85d34a922
files deploy/linux/build-and-test-deb.sh deploy/linux/deploy-deb.sh deploy/linux/docker/Dockerfile_deb.in deploy/linux/docker/Dockerfile_test_deb.in deploy/linux/fix-lintian-bits.sh
diffstat 5 files changed, 141 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/build-and-test-deb.sh	Thu Oct 10 13:36:13 2019 +0100
@@ -0,0 +1,49 @@
+#!/bin/bash
+#
+# Docker required
+
+set -eu
+
+current=$(hg id | awk '{ print $1; }')
+release=$(perl -p -e 's/^[^"]*"([^"]*)".*$/$1/' version.h)
+
+case "$current" in
+    *+) echo "ERROR: Current working copy has been modified - unmodified copy required so we know we can check it out separately and obtain the same contents"; exit 2;;
+    *);;
+esac
+
+echo
+echo "Building Debian deb archive from revision $current..."
+
+dockerdir=deploy/linux/docker
+
+cat "$dockerdir"/Dockerfile_deb.in | \
+    perl -p -e "s/\[\[REVISION\]\]/$current/g" | \
+    perl -p -e "s/\[\[RELEASE\]\]/$release/g" > \
+         "$dockerdir"/Dockerfile_deb.gen
+
+cat "$dockerdir"/Dockerfile_test_deb.in | \
+    perl -p -e "s/\[\[REVISION\]\]/$current/g" | \
+    perl -p -e "s/\[\[RELEASE\]\]/$release/g" > \
+         "$dockerdir"/Dockerfile_test_deb.gen
+
+fgrep 'hg.sr.ht' ~/.ssh/known_hosts > "$dockerdir"/known_hosts
+cp ~/.ssh/id_rsa_build "$dockerdir"/id_rsa_build
+chmod 600 "$dockerdir"/known_hosts "$dockerdir"/id_rsa_build
+trap "rm $dockerdir/known_hosts $dockerdir/id_rsa_build" 0
+
+dockertag="cannam/tony-deb-$current"
+
+sudo docker build -t "$dockertag" -f "$dockerdir"/Dockerfile_deb.gen "$dockerdir"
+
+outdir="$dockerdir/output"
+mkdir -p "$outdir"
+
+container=$(sudo docker create "$dockertag")
+
+sudo docker cp "$container":output-deb.tar "$outdir"
+sudo docker rm "$container"
+
+( cd "$outdir" ; tar xf output-deb.tar && rm -f output-deb.tar )
+
+sudo docker build -f "$dockerdir"/Dockerfile_test_deb.gen "$dockerdir"
--- a/deploy/linux/deploy-deb.sh	Thu Oct 10 13:28:12 2019 +0100
+++ b/deploy/linux/deploy-deb.sh	Thu Oct 10 13:36:13 2019 +0100
@@ -1,8 +1,6 @@
 #!/bin/bash
 # 
-# Run this from the build root
-
-set -e
+# Run this from the build root (with sudo, I think)
 
 usage() {
     echo
@@ -10,7 +8,7 @@
     echo
     echo "$0 <version> <architecture>"
     echo
-    echo "For example: $0 1.0cc1-1 amd64"
+    echo "For example: $0 2.4cc1-1 amd64"
     echo
     exit 2
 }
@@ -22,7 +20,7 @@
     usage
 fi
 
-set -u
+set -eu
 
 program=tony
 plugins="chp pyin"
@@ -42,17 +40,20 @@
 
 cp -r "$depdir"/deb-skeleton/* "$targetdir"/
 
-mkdir -p "$targetdir"/usr/bin "$targetdir"/usr/share/pixmaps
+mkdir -p "$targetdir"/usr/bin
+mkdir -p "$targetdir"/usr/lib/"$program"
+mkdir -p "$targetdir"/usr/share/pixmaps
 
 cp "$program" "$targetdir"/usr/bin/
 
-for plug in $plugins; do
-    cp "$plug/$plug.so" "$targetdir"/usr/lib/"$program"/
+for p in $plugins ; do
+    cp "$p.so" "$targetdir"/usr/lib/"$program"/
 done
 
-cp icons/"$program"-128x128.png "$targetdir"/usr/share/pixmaps/
+cp icons/"$program"-icon.svg "$targetdir"/usr/share/pixmaps/
+cp icons/"$program"-128x128.png "$targetdir"/usr/share/pixmaps/"$program"-icon.png
 cp "$program".desktop "$targetdir"/usr/share/applications/
-cp README "$targetdir"/usr/share/doc/"$program"/
+cp README.md "$targetdir"/usr/share/doc/"$program"/
 
 perl -i -p -e "s/Architecture: .*/Architecture: $arch/" "$targetdir"/DEBIAN/control
 
@@ -60,7 +61,11 @@
 
 perl -i -p -e "s/Depends: .*/$deps/" "$targetdir"/DEBIAN/control
 
+control_ver=${version%-?}
+
+perl -i -p -e "s/Version: .*/Version: $control_ver/" "$targetdir"/DEBIAN/control
+
 bash "$depdir"/fix-lintian-bits.sh "$targetdir"
 
-sudo dpkg-deb --build "$targetdir" && lintian "$targetdir".deb
+dpkg-deb --build "$targetdir" && lintian "$targetdir".deb
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_deb.in	Thu Oct 10 13:36:13 2019 +0100
@@ -0,0 +1,59 @@
+FROM ubuntu:14.04
+MAINTAINER Chris Cannam <cannam@all-day-breakfast.com>
+RUN apt-get update && \
+    apt-get install -y \
+    software-properties-common \
+    build-essential \
+    libbz2-dev \
+    libfftw3-dev \
+    libfishsound1-dev \
+    libid3tag0-dev \
+    liblo-dev \
+    liblrdf0-dev \
+    libmad0-dev \
+    liboggz2-dev \
+    libopus-dev \
+    libopusfile-dev \
+    libpulse-dev \
+    libasound2-dev \
+    libjack-dev \
+    libsamplerate-dev \
+    libsndfile-dev \
+    libsord-dev \
+    libxml2-utils \
+    libgl1-mesa-dev \
+    raptor-utils \
+    librubberband-dev \
+    portaudio19-dev \
+    qt5-default libqt5svg5-dev \
+    git \
+    mercurial \
+    curl wget \
+    mlton \
+    autoconf automake libtool lintian
+
+RUN apt-get clean && rm -rf /var/lib/apt/lists/*
+
+RUN locale-gen en_US.UTF-8
+ENV LANG en_US.UTF-8  
+ENV LANGUAGE en_US:en  
+ENV LC_ALL en_US.UTF-8
+
+RUN hg clone -r[[REVISION]] https://code.soundsoftware.ac.uk/hg/tony
+
+WORKDIR /root
+
+COPY id_rsa_build .ssh/id_rsa_build
+COPY known_hosts .ssh/known_hosts
+RUN chmod 600 .ssh/id_rsa_build .ssh/known_hosts
+RUN echo '{"accounts": {"sourcehut": "~breakfastquay"}}' > .repoint.json
+RUN ( echo '[ui]' ; echo 'ssh = ssh -i /root/.ssh/id_rsa_build' ) > .hgrc
+
+RUN rm -f /usr/lib/x86_64-linux-gnu/librubberband.so*
+
+WORKDIR /tony
+RUN ./configure
+RUN make -j3
+
+RUN deploy/linux/deploy-deb.sh [[RELEASE]] amd64
+RUN tar cvf output-deb.tar *.deb && cp output-deb.tar ..
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/deploy/linux/docker/Dockerfile_test_deb.in	Thu Oct 10 13:36:13 2019 +0100
@@ -0,0 +1,13 @@
+FROM ubuntu:18.04
+
+# Ensure that everything subsequent is re-run when a new revision is
+# being built (rather than being cached) - so as to avoid potential
+# mismatches between results of apt-get update and the package
+# dependency installation itself
+RUN echo [[REVISION]]
+
+RUN apt-get update
+ADD output/tony_[[RELEASE]]_amd64.deb tony_[[RELEASE]]_amd64.deb
+RUN apt install -y ./tony_[[RELEASE]]_amd64.deb
+RUN /usr/bin/tony --version
+
--- a/deploy/linux/fix-lintian-bits.sh	Thu Oct 10 13:28:12 2019 +0100
+++ b/deploy/linux/fix-lintian-bits.sh	Thu Oct 10 13:36:13 2019 +0100
@@ -4,14 +4,15 @@
 
 [ -d "$dir" ] || exit 1
 
+set -eu
+
 strip "$dir"/usr/bin/*
-strip "$dir"/usr/lib/*/*.so
 
 sz=`du -sx --exclude DEBIAN "$dir" | awk '{ print $1; }'`
 perl -i -p -e "s/Installed-Size: .*/Installed-Size: $sz/" "$dir"/DEBIAN/control
 
 find "$dir" -name \*~ -exec rm \{\} \;
 
-sudo chown -R root.root "$dir"/*
+chown -R root.root "$dir"/*
 
-sudo chmod -R g-w "$dir"/*
+chmod -R g-w "$dir"/*