Fix build for vaultwarden 1.30.0

This commit is contained in:
Nico Isenbeck
2023-11-10 15:17:15 +01:00
parent 60bbdbf359
commit 2520b168b2
13 changed files with 136 additions and 95 deletions
+12 -8
View File
@@ -7,14 +7,18 @@ This repository will help you produce a debian package.
## TL;DR ## TL;DR
Make sure you have the required build dependencies: Make sure you have the required build dependencies:
* docker
* git
* patch
* curl
* apparmor
``` ```
apt install docker.io git patch curl apparmor apt-get update
apt-get install git curl gnupg ca-certificates apparmor build-essential patch sudo psmisc
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
``` ```
Then: Then:
@@ -28,7 +32,7 @@ cd vaultwarden-debian
The `build.sh` script will build vaultwarden for the same Debian version which targets vaultwarden. The `build.sh` script will build vaultwarden for the same Debian version which targets vaultwarden.
That means, to build vaultwarden v1.19.0, make sure to checkout tag `v1.19.0` of this project. That means, to build vaultwarden v1.19.0, make sure to checkout tag `v1.19.0` of this project.
To compile for a different Debian version, specify the release name (e.g. Buster, Bullseye) using the `-o` option. You can compile for arm32v7, arm64 and amd64 architecture using the `-a` option. Only the Buster (default) release of debian is supported by arm32v7. To compile for a different Debian version, specify the release name (e.g. buster, bullseye, bookworm) using the `-o` option. You can compile for amd64 or arm64 architecture using the `-a` option.
``` ```
./build.sh -o bullseye ./build.sh -o bullseye
+51 -10
View File
@@ -6,15 +6,16 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
SRC="$DIR/git" SRC="$DIR/git"
DST="$DIR/dist" DST="$DIR/dist"
OS_VERSION_NAME="buster" OS_VERSION_NAME="bullseye"
DB_TYPE="sqlite" DB_TYPE="sqlite"
SYSTEMD_DB="true"
ARCH_DIR="amd64" ARCH_DIR="amd64"
PACKAGENAME="vaultwarden" PACKAGENAME="vaultwarden"
PACKAGEDIR="vaultwarden" PACKAGEDIR="vaultwarden"
SERVICEUSER="vaultwarden" SERVICEUSER="vaultwarden"
EXECUTABLENAME="$PACKAGEDIR" EXECUTABLENAME="$PACKAGEDIR"
while getopts ":r:o:d:a:p:i:u:e:" opt; do while getopts ":r:o:d:a:p:i:u:e:s" opt; do
case $opt in case $opt in
r) REF="$OPTARG" r) REF="$OPTARG"
;; ;;
@@ -32,13 +33,30 @@ while getopts ":r:o:d:a:p:i:u:e:" opt; do
;; ;;
e) EXECUTABLENAME="$OPTARG" e) EXECUTABLENAME="$OPTARG"
;; ;;
s) SYSTEMD_DB="false"
;;
\?) echo "Invalid option -$OPTARG" >&2 ; exit \?) echo "Invalid option -$OPTARG" >&2 ; exit
;; ;;
esac esac
done done
if [ -z "$REF" ]; then REF=$(curl -s https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 1-); fi if [ -z "$REF" ]; then REF=$(curl -s https://api.github.com/repos/dani-garcia/vaultwarden/releases/latest | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/' | cut -c 1-); fi
ARCH=$ARCH_DIR ARCH=$ARCH_DIR
if [[ "$ARCH" =~ ^arm7 ]]; then ARCH="armhf"; fi if [[ "$ARCH" =~ ^arm ]]; then ARCH="armhf"; fi
VAULTWARDEN_DEPS="libc6, libgcc-s1"
# mysql and postgresql need additional libraries. Sqlite support is built into the vaultwarden binary
case $DB_TYPE in
mysql)
VAULTWARDEN_DEPS="$VAULTWARDEN_DEPS, libmariadb3"
RECOMMENDS="mariadb-server"
;;
postgresql)
VAULTWARDEN_DEPS="$VAULTWARDEN_DEPS, libpq5"
RECOMMENDS="postgresql"
;;
esac
# Clone vaultwarden # Clone vaultwarden
if [ ! -d "$SRC" ]; then if [ ! -d "$SRC" ]; then
@@ -80,34 +98,57 @@ chmod 644 "$DEBIANDIR/conffiles"
sed postinst.dist > "$DEBIANDIR/postinst" -f <( echo "$SEDCOMMANDS" ) || exit sed postinst.dist > "$DEBIANDIR/postinst" -f <( echo "$SEDCOMMANDS" ) || exit
chmod 755 "$DEBIANDIR/postinst" chmod 755 "$DEBIANDIR/postinst"
# Prepare postrm
sed postrm.dist > "$DEBIANDIR/postrm" -f <( echo "$SEDCOMMANDS" ) || exit
chmod 755 "$DEBIANDIR/postrm"
# Prepare prerm
sed prerm.dist > "$DEBIANDIR/prerm" -f <( echo "$SEDCOMMANDS" ) || exit
chmod 755 "$DEBIANDIR/prerm"
mkdir -p "$DST" mkdir -p "$DST"
# Prepare Dockerfile # Prepare Dockerfile
pushd "$SRC/docker" || exit
make
popd || exit
sed "$DIR/patch/$ARCH_DIR/Dockerfile.patch" -f <( echo "$SEDCOMMANDS" ) | \ sed "$DIR/patch/$ARCH_DIR/Dockerfile.patch" -f <( echo "$SEDCOMMANDS" ) | \
patch "$SRC/docker/$ARCH_DIR/Dockerfile" --verbose -o "$DIR/Dockerfile" || \ patch "$SRC/docker/Dockerfile.debian" --verbose -o "$DIR/Dockerfile" || \
exit exit
sed -E "s/(FROM[[:space:]]*docker.io\/library\/rust:[^-]+)[^[:space:]]+(.+)/\1-${OS_VERSION_NAME}\2/g" -i "$DIR/Dockerfile" sed "/docker.io\/library\/rust/s/bookworm/${OS_VERSION_NAME}/g" -i "$DIR/Dockerfile"
sed -E "s/(FROM[[:space:]]*docker.io\/library\/debian:)[^-]+(-.+)/\1${OS_VERSION_NAME}\2/g" -i "$DIR/Dockerfile" sed "/docker.io\/library\/debian/s/bookworm/${OS_VERSION_NAME}/g" -i "$DIR/Dockerfile"
# Prepare Controlfile # Prepare Controlfile
CONTROL="$DEBIANDIR/control" CONTROL="$DEBIANDIR/control"
cp "$DIR/control.dist" "$CONTROL" cp "$DIR/control.dist" "$CONTROL"
sed -i "s/@@PACKAGENAME@@/$PACKAGENAME/g" "$CONTROL" sed -i "s/@@PACKAGENAME@@/$PACKAGENAME/g" "$CONTROL"
sed -i "s/Version:.*/Version: $REF-1-$OS_VERSION_NAME/" "$CONTROL" sed -i "s/@@VAULTWARDEN_DEPS@@/$VAULTWARDEN_DEPS/g" "$CONTROL"
sed -i "s/Version:.*/Version: $REF-1/" "$CONTROL"
sed -i "s/Architecture:.*/Architecture: $ARCH/" "$CONTROL" sed -i "s/Architecture:.*/Architecture: $ARCH/" "$CONTROL"
if [ -n "$RECOMMENDS" ]; then
echo "Recommends: $RECOMMENDS" >> "$CONTROL"
fi
# Prepare Systemd-unit # Prepare Systemd-unit
SYSTEMD_UNIT="$DEBIANDIR/$EXECUTABLENAME.service" SYSTEMD_UNIT="$DEBIANDIR/$EXECUTABLENAME.service"
sed "$DIR/service.dist" > "$SYSTEMD_UNIT" -f <( echo "$SEDCOMMANDS" ) || exit sed "$DIR/service.dist" > "$SYSTEMD_UNIT" -f <( echo "$SEDCOMMANDS" ) || exit
if [ "$DB_TYPE" = "mysql" ]; then if [ "$SYSTEMD_DB" = true ] && [ "$DB_TYPE" = "mysql" ]; then
sed -i "s/After=network.target/After=network.target mysqld.service\nRequires=mysqld.service/g" "$SYSTEMD_UNIT" sed -i "s/After=network.target/After=network.target mysqld.service\nRequires=mysqld.service/g" "$SYSTEMD_UNIT"
elif [ "$DB_TYPE" = "postgresql" ]; then elif [ "$SYSTEMD_DB" = true ] && [ "$DB_TYPE" = "postgresql" ]; then
sed -i "s/After=network.target/After=network.target postgresql.service\nRequires=postgresql.service/g" "$SYSTEMD_UNIT" sed -i "s/After=network.target/After=network.target postgresql.service\nRequires=postgresql.service/g" "$SYSTEMD_UNIT"
fi fi
# Prepare sysusers
sed sysusers.conf > "$DEBIANDIR/sysusers.conf" -f <( echo "$SEDCOMMANDS" ) || exit
chmod 644 "$DEBIANDIR/sysusers.conf"
# Prepare tmpfiles
sed tmpfiles.conf > "$DEBIANDIR/tmpfiles.conf" -f <( echo "$SEDCOMMANDS" ) || exit
chmod 644 "$DEBIANDIR/tmpfiles.conf"
echo "[INFO] docker build -t vaultwarden-deb $DIR --build-arg DB=$DB_TYPE" echo "[INFO] docker build -t vaultwarden-deb $DIR --build-arg DB=$DB_TYPE"
docker build -t vaultwarden-deb "$SRC" --build-arg DB="$DB_TYPE" --target dpkg -f "$DIR/Dockerfile" docker buildx build -t vaultwarden-deb "$SRC" --build-arg DB="$DB_TYPE" --target dpkg -f "$DIR/Dockerfile"
CID=$(docker run -d vaultwarden-deb) CID=$(docker run -d vaultwarden-deb)
docker cp "$CID:/outdir/${PACKAGEDIR}.deb" "$DST/${PACKAGEDIR}-${OS_VERSION_NAME}-${REF}-${DB_TYPE}-${ARCH_DIR}.deb" docker cp "$CID:/outdir/${PACKAGEDIR}.deb" "$DST/${PACKAGEDIR}-${OS_VERSION_NAME}-${REF}-${DB_TYPE}-${ARCH_DIR}.deb"
+1
View File
@@ -3,5 +3,6 @@ Architecture: -
Maintainer: Greizgh <greizgh+vaultwarden@ephax.org> Maintainer: Greizgh <greizgh+vaultwarden@ephax.org>
Priority: optional Priority: optional
Version: - Version: -
Depends: @@VAULTWARDEN_DEPS@@, systemd | systemd-standalone-sysusers | opensysusers, systemd | default-systemd-tmpfiles | systemd-tmpfiles | systemd-standalone-tmpfiles
Description: Unofficial Bitwarden compatible server written in Rust Description: Unofficial Bitwarden compatible server written in Rust
Homepage: https://github.com/greizgh/vaultwarden-debian Homepage: https://github.com/greizgh/vaultwarden-debian
+12 -7
View File
@@ -1,26 +1,31 @@
--- git/docker/amd64/Dockerfile 2022-12-24 16:59:28.554597529 +0100 --- git/docker/amd64/Dockerfile 2023-07-29 15:42:52.131945764 -0500
+++ Dockerfile 2022-12-24 18:12:24.069923032 +0100 +++ Dockerfile 2023-07-29 16:18:19.915440456 -0500
@@ -84,6 +84,26 @@ @@ -77,6 +77,31 @@
# hadolint ignore=DL3059 # your actual source files being built
RUN cargo build --features ${DB} --release RUN cargo build --features ${DB} --release
+####################### dpkg target ########################## +####################### dpkg target ##########################
+FROM build as dpkg +FROM build as dpkg
+RUN mkdir /outdir +RUN mkdir /outdir
+RUN mkdir -p /vaultwarden_package/DEBIAN +RUN mkdir -p /vaultwarden_package/DEBIAN
+RUN mkdir -p /vaultwarden_package/usr/local/bin
+RUN mkdir -p /vaultwarden_package/usr/lib/systemd/system +RUN mkdir -p /vaultwarden_package/usr/lib/systemd/system
+RUN mkdir -p /vaultwarden_package/usr/lib/sysusers.d
+RUN mkdir -p /vaultwarden_package/usr/lib/tmpfiles.d
+RUN mkdir -p /vaultwarden_package/etc/@@PACKAGEDIR@@ +RUN mkdir -p /vaultwarden_package/etc/@@PACKAGEDIR@@
+RUN mkdir -p /vaultwarden_package/usr/share/@@PACKAGEDIR@@ +RUN mkdir -p /vaultwarden_package/usr/share/@@PACKAGEDIR@@
+ +
+WORKDIR /vaultwarden_package +WORKDIR /vaultwarden_package
+COPY debian/control /vaultwarden_package/DEBIAN/control +COPY debian/control /vaultwarden_package/DEBIAN/control
+COPY debian/postinst /vaultwarden_package/DEBIAN/postinst +COPY debian/postinst /vaultwarden_package/DEBIAN/postinst
+COPY debian/postrm /vaultwarden_package/DEBIAN/postrm
+COPY debian/prerm /vaultwarden_package/DEBIAN/prerm
+COPY debian/conffiles /vaultwarden_package/DEBIAN/conffiles +COPY debian/conffiles /vaultwarden_package/DEBIAN/conffiles
+COPY debian/config.env /vaultwarden_package/etc/@@PACKAGEDIR@@ +COPY --chmod=600 debian/config.env /vaultwarden_package/etc/@@PACKAGEDIR@@
+COPY debian/@@EXECUTABLENAME@@.service /vaultwarden_package/usr/lib/systemd/system +COPY debian/@@EXECUTABLENAME@@.service /vaultwarden_package/usr/lib/systemd/system
+COPY debian/sysusers.conf /vaultwarden_package/usr/lib/sysusers.d/@@PACKAGEDIR@@.conf
+COPY debian/tmpfiles.conf /vaultwarden_package/usr/lib/tmpfiles.d/@@PACKAGEDIR@@.conf
+COPY --from=vault /web-vault /vaultwarden_package/usr/share/@@PACKAGEDIR@@/web-vault +COPY --from=vault /web-vault /vaultwarden_package/usr/share/@@PACKAGEDIR@@/web-vault
+COPY --from=build app/target/release/vaultwarden /vaultwarden_package/usr/local/bin/@@EXECUTABLENAME@@ +COPY --from=build app/target/final/vaultwarden /vaultwarden_package/usr/bin/@@EXECUTABLENAME@@
+ +
+RUN dpkg-deb --build . /outdir/@@PACKAGEDIR@@.deb +RUN dpkg-deb --build . /outdir/@@PACKAGEDIR@@.deb
+ +
+1
View File
@@ -0,0 +1 @@
amd64
-31
View File
@@ -1,31 +0,0 @@
diff --git a/docker/arm64/Dockerfile b/docker/arm64/Dockerfile
index 117517a..2c82058 100644
--- a/docker/arm64/Dockerfile
+++ b/docker/arm64/Dockerfile
@@ -96,6 +96,26 @@ RUN touch src/main.rs
# your actual source files being built
RUN cargo build --features ${DB} --release --target=aarch64-unknown-linux-gnu
+####################### dpkg target ##########################
+FROM build as dpkg
+RUN mkdir /outdir
+RUN mkdir -p /vaultwarden_package/DEBIAN
+RUN mkdir -p /vaultwarden_package/usr/local/bin
+RUN mkdir -p /vaultwarden_package/usr/lib/systemd/system
+RUN mkdir -p /vaultwarden_package/etc/@@PACKAGEDIR@@
+RUN mkdir -p /vaultwarden_package/usr/share/@@PACKAGEDIR@@
+
+WORKDIR /vaultwarden_package
+COPY debian/control /vaultwarden_package/DEBIAN/control
+COPY debian/postinst /vaultwarden_package/DEBIAN/postinst
+COPY debian/conffiles /vaultwarden_package/DEBIAN/conffiles
+COPY debian/config.env /vaultwarden_package/etc/@@PACKAGEDIR@@
+COPY debian/@@EXECUTABLENAME@@.service /vaultwarden_package/usr/lib/systemd/system
+COPY --from=vault /web-vault /vaultwarden_package/usr/share/@@PACKAGEDIR@@/web-vault
+COPY --from=build app/target/aarch64-unknown-linux-gnu/release/vaultwarden /vaultwarden_package/usr/local/bin/@@EXECUTABLENAME@@
+
+RUN dpkg-deb --build . /outdir/@@PACKAGEDIR@@.deb
+
######################## RUNTIME IMAGE ########################
# Create a new stage with a minimal image
# because we already have a binary built
-29
View File
@@ -1,29 +0,0 @@
--- git/docker/armv7/Dockerfile 2022-12-24 15:34:46.644360901 +0100
+++ Dockerfile 2022-12-24 18:15:38.065904150 +0100
@@ -104,6 +104,26 @@
# hadolint ignore=DL3059
RUN cargo build --features ${DB} --release --target=armv7-unknown-linux-gnueabihf
+####################### dpkg target ##########################
+FROM build as dpkg
+RUN mkdir /outdir
+RUN mkdir -p /vaultwarden_package/DEBIAN
+RUN mkdir -p /vaultwarden_package/usr/local/bin
+RUN mkdir -p /vaultwarden_package/usr/lib/systemd/system
+RUN mkdir -p /vaultwarden_package/etc/@@PACKAGEDIR@@
+RUN mkdir -p /vaultwarden_package/usr/share/@@PACKAGEDIR@@
+
+WORKDIR /vaultwarden_package
+COPY debian/control /vaultwarden_package/DEBIAN/control
+COPY debian/postinst /vaultwarden_package/DEBIAN/postinst
+COPY debian/conffiles /vaultwarden_package/DEBIAN/conffiles
+COPY debian/config.env /vaultwarden_package/etc/@@PACKAGEDIR@@
+COPY debian/@@EXECUTABLENAME@@.service /vaultwarden_package/usr/lib/systemd/system
+COPY --from=vault /web-vault /vaultwarden_package/usr/share/@@PACKAGEDIR@@/web-vault
+COPY --from=build app/target/armv7-unknown-linux-gnueabihf/release/vaultwarden /vaultwarden_package/usr/local/bin/@@EXECUTABLENAME@@
+
+RUN dpkg-deb --build . /outdir/@@PACKAGEDIR@@.deb
+
######################## RUNTIME IMAGE ########################
# Create a new stage with a minimal image
# because we already have a binary built
+30 -8
View File
@@ -1,10 +1,32 @@
#!/bin/sh #!/bin/sh
if [ -f /etc/@@PACKAGEDIR@@/Rocket.toml ] set -e
then
mv /etc/@@PACKAGEDIR@@/Rocket.toml /etc/@@PACKAGEDIR@@/Rocket.toml.deprecated # Automatically added by dh_installsysusers/13.11.4
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
systemd-sysusers ${DPKG_ROOT:+--root="$DPKG_ROOT"} @@PACKAGEDIR@@.conf
fi
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if [ -x "$(command -v systemd-tmpfiles)" ]; then
systemd-tmpfiles ${DPKG_ROOT:+--root="$DPKG_ROOT"} --create @@PACKAGEDIR@@.conf >/dev/null || true
fi
fi
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if deb-systemd-helper --quiet is-enabled '@@PACKAGEDIR@@.service'; then
# Creates new symlinks on upgrades if the unit file has changed.
deb-systemd-helper enable '@@PACKAGEDIR@@.service' >/dev/null || true
else
# Update the statefile to add new symlinks (if any), which need to be
# cleaned up on purge. Also remove old symlinks.
deb-systemd-helper update-state '@@PACKAGEDIR@@.service' >/dev/null || true
fi
fi
if [ "$1" = "configure" ] || [ "$1" = "abort-upgrade" ] || [ "$1" = "abort-deconfigure" ] || [ "$1" = "abort-remove" ] ; then
if [ -d /run/systemd/system ]; then
systemctl --system daemon-reload >/dev/null || true
if systemctl --system is-active '@@PACKAGEDIR@@.service'; then
deb-systemd-invoke restart '@@PACKAGEDIR@@.service' >/dev/null || true
fi
fi
fi fi
DIR_MODE=0700 adduser --system --group --home /var/lib/@@PACKAGEDIR@@ @@SERVICEUSER@@
chmod 700 /var/lib/@@PACKAGEDIR@@
chmod 600 /etc/@@PACKAGEDIR@@/config.env
systemctl daemon-reload
systemctl restart vaultwarden.service
Executable
+14
View File
@@ -0,0 +1,14 @@
#!/bin/sh
set -e
# Automatically added by dh_installsystemd/13.11.4
if [ "$1" = remove ] && [ -d /run/systemd/system ] ; then
systemctl --system daemon-reload >/dev/null || true
fi
# End automatically added section
# Automatically added by dh_installsystemd/13.11.4
if [ "$1" = "purge" ]; then
if [ -x "/usr/bin/deb-systemd-helper" ]; then
deb-systemd-helper purge '@@PACKAGEDIR@@.service' >/dev/null || true
fi
fi
# End automatically added section
Executable
+7
View File
@@ -0,0 +1,7 @@
#!/bin/sh
set -e
# Automatically added by dh_installsystemd/13.11.4
if [ -z "${DPKG_ROOT:-}" ] && [ "$1" = remove ] && [ -d /run/systemd/system ] ; then
deb-systemd-invoke stop '@@PACKAGEDIR@@.service' >/dev/null || true
fi
# End automatically added section
+2 -2
View File
@@ -1,11 +1,11 @@
[Unit] [Unit]
Description=Bitwarden API server Description=Vaultwarden API server
After=network.target After=network.target
[Service] [Service]
Type=simple Type=simple
User=@@SERVICEUSER@@ User=@@SERVICEUSER@@
ExecStart=/usr/local/bin/@@EXECUTABLENAME@@ ExecStart=/usr/bin/@@EXECUTABLENAME@@
PrivateTmp=true PrivateTmp=true
PrivateDevices=true PrivateDevices=true
ProtectHome=true ProtectHome=true
+2
View File
@@ -0,0 +1,2 @@
# Setup the user for the @@PACKAGEDIR@@ service
u @@SERVICEUSER@@ - "@@PACKAGEDIR@@ service user" /var/lib/@@PACKAGEDIR@@
+4
View File
@@ -0,0 +1,4 @@
# Data directory for @@PACKAGEDIR@@
d /var/lib/@@PACKAGEDIR@@ 0700 @@SERVICEUSER@@ root - -
# Adjust the permissions of this file to be owned by @@SERVICEUSER@@
z /etc/@@PACKAGEDIR@@/config.env 0600 @@SERVICEUSER@@ root - -