summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml10
-rw-r--r--Dockerfile.builder7
-rwxr-xr-xbuilder/image-setup61
-rw-r--r--debian/hi.service10
-rwxr-xr-xdebian/postinst10
-rw-r--r--docs/debian-packaging.md8
-rwxr-xr-xtools/build-builder14
-rwxr-xr-xtools/build-debian20
-rwxr-xr-xtools/version11
9 files changed, 151 insertions, 0 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 989f8cc..03b6a67 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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'