diff options
| author | Owen Jacobson <owen@grimoire.ca> | 2024-10-29 17:35:53 -0400 |
|---|---|---|
| committer | Owen Jacobson <owen@grimoire.ca> | 2024-10-29 17:35:53 -0400 |
| commit | fe689a4de2631d680e9325621ed1530384ee9aee (patch) | |
| tree | aeca22dabaabdb82c014038e82549ab30ca20522 | |
| parent | c85201406bf351298832f136b2a89a1bf5b17202 (diff) | |
| parent | 1859296186d22cae6eceb1acbd9d3e347d2e76db (diff) | |
Merge branch 'docker-deb-build'
| -rw-r--r-- | Cargo.toml | 10 | ||||
| -rw-r--r-- | Dockerfile.builder | 7 | ||||
| -rwxr-xr-x | builder/image-setup | 61 | ||||
| -rw-r--r-- | debian/hi.service | 10 | ||||
| -rwxr-xr-x | debian/postinst | 10 | ||||
| -rw-r--r-- | docs/debian-packaging.md | 8 | ||||
| -rwxr-xr-x | tools/build-builder | 14 | ||||
| -rwxr-xr-x | tools/build-debian | 20 | ||||
| -rwxr-xr-x | tools/version | 11 |
9 files changed, 151 insertions, 0 deletions
@@ -4,6 +4,16 @@ version = "0.1.0" edition = "2021" rust-version = "1.82" default-run = "hi" +authors = [ + "Owen Jacobson <hi@grimoire.ca>", + "Kit La Touche <kit@transneptune.net>", +] + +[package.metadata.deb] +maintainer = "Owen Jacobson <hi@grimoire.ca>" +maintainer-scripts = "debian" + +[package.metadata.deb.systemd-units] [dependencies] argon2 = "0.5.3" diff --git a/Dockerfile.builder b/Dockerfile.builder new file mode 100644 index 0000000..da80c69 --- /dev/null +++ b/Dockerfile.builder @@ -0,0 +1,7 @@ +FROM rust:1-slim-bookworm + +COPY builder /opt/hi-builder +RUN /opt/hi-builder/image-setup + +RUN mkdir /app +WORKDIR /app diff --git a/builder/image-setup b/builder/image-setup new file mode 100755 index 0000000..6b7895e --- /dev/null +++ b/builder/image-setup @@ -0,0 +1,61 @@ +#!/bin/bash -e + +cd "$(dirname "$0")" + +apt-get update +apt-get install -y \ + apt-transport-https \ + ca-certificates \ + curl \ + dpkg-dev \ + gnupg \ + +# Key from <https://github.com/nodesource/distributions>, specifically +# <https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key> +gpg --dearmor -o /usr/share/keyrings/nodesource.gpg <<'NODESOURCE_KEY' +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQENBFdDN1ABCADaNd/I3j3tn40deQNgz7hB2NvT+syXe6k4ZmdiEcOfBvFrkS8B +hNS67t93etHsxEy7E0qwsZH32bKazMqe9zDwoa3aVImryjh6SHC9lMtW27JPHFeM +Srkt9YmH1WMwWcRO6eSY9B3PpazquhnvbammLuUojXRIxkDroy6Fw4UKmUNSRr32 +9Ej87jRoR1B2/57Kfp2Y4+vFGGzSvh3AFQpBHq51qsNHALU6+8PjLfIt+5TPvaWR +TB+kAZnQZkaIQM2nr1n3oj6ak2RATY/+kjLizgFWzgEfbCrbsyq68UoY5FPBnu4Z +E3iDZpaIqwKr0seUC7iA1xM5eHi5kty1oB7HABEBAAG0Ik5Tb2xpZCA8bnNvbGlk +LWdwZ0Bub2Rlc291cmNlLmNvbT6JATgEEwECACIFAldDN1ACGwMGCwkIBwMCBhUI +AgkKCwQWAgMBAh4BAheAAAoJEC9ZtfmbG+C0y7wH/i4xnab36dtrYW7RZwL8i6Sc +NjMx4j9+U1kr/F6YtqWd+JwCbBdar5zRghxPcYEq/qf7MbgAYcs1eSOuTOb7n7+o +xUwdH2iCtHhKh3Jr2mRw1ks7BbFZPB5KmkxHaEBfLT4d+I91ZuUdPXJ+0SXs9gzk +Dbz65Uhoz3W03aiF8HeL5JNARZFMbHHNVL05U1sTGTCOtu+1c/33f3TulQ/XZ3Y4 +hwGCpLe0Tv7g7Lp3iLMZMWYPEa0a7S4u8he5IEJQLd8bE8jltcQvrdr3Fm8kI2Jg +BJmUmX4PSfhuTCFaR/yeCt3UoW883bs9LfbTzIx9DJGpRIu8Y0IL3b4sj/GoZVq5 +AQ0EV0M3UAEIAKrTaC62ayzqOIPa7nS90BHHck4Z33a2tZF/uof38xNOiyWGhT8u +JeFoTTHn5SQq5Ftyu4K3K2fbbpuu/APQF05AaljzVkDGNMW4pSkgOasdysj831cu +ssrHX2RYS22wg80k6C/Hwmh5F45faEuNxsV+bPx7oPUrt5n6GMx84vEP3i1+FDBi +0pt/B/QnDFBXki1BGvJ35f5NwDefK8VaInxXP3ZN/WIbtn5dqxppkV/YkO7GiJlp +Jlju9rf3kKUIQzKQWxFsbCAPIHoWv7rH9RSxgDithXtG6Yg5R1aeBbJaPNXL9wpJ +YBJbiMjkAFaz4B95FOqZm3r7oHugiCGsHX0AEQEAAYkBHwQYAQIACQUCV0M3UAIb +DAAKCRAvWbX5mxvgtE/OB/0VN88DR3Y3fuqy7lq/dthkn7Dqm9YXdorZl3L152eE +IF882aG8FE3qZdaLGjQO4oShAyNWmRfSGuoH0XERXAI9n0r8m4mDMxE6rtP7tHet +y/5M8x3CTyuMgx5GLDaEUvBusnTD+/v/fBMwRK/cZ9du5PSG4R50rtst+oYyC2ao +x4I2SgjtF/cY7bECsZDplzatN3gv34PkcdIg8SLHAVlL4N5tzumDeizRspcSyoy2 +K2+hwKU4C4+dekLLTg8rjnRROvplV2KtaEk6rxKtIRFDCoQng8wfJuIMrDNKvqZw +FRGt7cbvW5MCnuH8MhItOl9Uxp1wHp6gtav/h8Gp6MBa +=MARt +-----END PGP PUBLIC KEY BLOCK----- +NODESOURCE_KEY + +cat > /etc/apt/sources.list.d/nodesource.list <<NODESOURCE_REPO +deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main +NODESOURCE_REPO + +cat > /etc/apt/preferences.d/nodejs <<'NODEJS_PIN' +Package: nodejs +Pin: origin deb.nodesource.com +Pin-Priority: 600 +NODEJS_PIN + +apt-get update +apt-get install -y \ + nodejs + +cargo install cargo-deb diff --git a/debian/hi.service b/debian/hi.service new file mode 100644 index 0000000..ec444c8 --- /dev/null +++ b/debian/hi.service @@ -0,0 +1,10 @@ +[Unit] +Description=Hi chat service +After=network-online.target + +[Service] +ExecStart=/usr/bin/hi --database-url sqlite:///var/lib/hi/hi.db +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/debian/postinst b/debian/postinst new file mode 100755 index 0000000..b7d02c3 --- /dev/null +++ b/debian/postinst @@ -0,0 +1,10 @@ +#!/bin/sh +set -ex + +adduser \ + --system \ + --group \ + --home /var/lib/hi \ + hi + +#DEBHELPER# diff --git a/docs/debian-packaging.md b/docs/debian-packaging.md new file mode 100644 index 0000000..f307536 --- /dev/null +++ b/docs/debian-packaging.md @@ -0,0 +1,8 @@ +# Building Debian packages + +You will need `docker` installed, and set up to use the `containerd` storage backend. The builder image is built as a multi-architecture image. + +1. Run `tools/build-builder`. +2. Run `tools/build-debian`. + +Packages will be built in `target/debian`. diff --git a/tools/build-builder b/tools/build-builder new file mode 100755 index 0000000..fcb1e84 --- /dev/null +++ b/tools/build-builder @@ -0,0 +1,14 @@ +#!/bin/bash -e + +## tools/build-builder +## +## Builds a Docker image containing the Debian package builder. + +cd "$(dirname "$0")/.." + +docker build \ + --platform "linux/arm64,linux/amd64" \ + --tag "hi-debian-builder:$(tools/version)" \ + --tag "hi-debian-builder:latest" \ + --file Dockerfile.builder \ + . diff --git a/tools/build-debian b/tools/build-debian new file mode 100755 index 0000000..c64fc78 --- /dev/null +++ b/tools/build-debian @@ -0,0 +1,20 @@ +#!/bin/bash -e + +## tools/build-builder +## +## Builds a Debian package for the current tree. Output in ./target/debian. +## +## Requires the Debian builder (see tools/build-builder). + +cd "$(dirname "$0")/.." + +for platform in linux/arm64 linux/amd64; do + docker run \ + --platform "$platform" \ + --rm \ + --interactive \ + --tty \ + --volume "$PWD:/app" \ + "hi-debian-builder:$(tools/version)" \ + cargo deb +done diff --git a/tools/version b/tools/version new file mode 100755 index 0000000..8e47a7c --- /dev/null +++ b/tools/version @@ -0,0 +1,11 @@ +#!/bin/bash -e + +## tools/version +## +## Print the current version of the project to stdout. Data comes from Cargo. + +cd "$(dirname "$0")/.." + +cargo metadata \ + --format-version 1 | +jq -r '.packages[] | select(.name == "hi") | .version' |
