Fix build for vaultwarden 1.30.0
This commit is contained in:
@@ -6,15 +6,16 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
||||
SRC="$DIR/git"
|
||||
DST="$DIR/dist"
|
||||
|
||||
OS_VERSION_NAME="buster"
|
||||
OS_VERSION_NAME="bullseye"
|
||||
DB_TYPE="sqlite"
|
||||
SYSTEMD_DB="true"
|
||||
ARCH_DIR="amd64"
|
||||
PACKAGENAME="vaultwarden"
|
||||
PACKAGEDIR="vaultwarden"
|
||||
SERVICEUSER="vaultwarden"
|
||||
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
|
||||
r) REF="$OPTARG"
|
||||
;;
|
||||
@@ -32,13 +33,30 @@ while getopts ":r:o:d:a:p:i:u:e:" opt; do
|
||||
;;
|
||||
e) EXECUTABLENAME="$OPTARG"
|
||||
;;
|
||||
s) SYSTEMD_DB="false"
|
||||
;;
|
||||
\?) echo "Invalid option -$OPTARG" >&2 ; exit
|
||||
;;
|
||||
esac
|
||||
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
|
||||
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
|
||||
if [ ! -d "$SRC" ]; then
|
||||
@@ -80,34 +98,57 @@ chmod 644 "$DEBIANDIR/conffiles"
|
||||
sed postinst.dist > "$DEBIANDIR/postinst" -f <( echo "$SEDCOMMANDS" ) || exit
|
||||
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"
|
||||
|
||||
# Prepare Dockerfile
|
||||
pushd "$SRC/docker" || exit
|
||||
make
|
||||
popd || exit
|
||||
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
|
||||
|
||||
sed -E "s/(FROM[[:space:]]*docker.io\/library\/rust:[^-]+)[^[:space:]]+(.+)/\1-${OS_VERSION_NAME}\2/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\/rust/s/bookworm/${OS_VERSION_NAME}/g" -i "$DIR/Dockerfile"
|
||||
sed "/docker.io\/library\/debian/s/bookworm/${OS_VERSION_NAME}/g" -i "$DIR/Dockerfile"
|
||||
|
||||
# Prepare Controlfile
|
||||
CONTROL="$DEBIANDIR/control"
|
||||
cp "$DIR/control.dist" "$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"
|
||||
if [ -n "$RECOMMENDS" ]; then
|
||||
echo "Recommends: $RECOMMENDS" >> "$CONTROL"
|
||||
fi
|
||||
|
||||
# Prepare Systemd-unit
|
||||
SYSTEMD_UNIT="$DEBIANDIR/$EXECUTABLENAME.service"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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)
|
||||
docker cp "$CID:/outdir/${PACKAGEDIR}.deb" "$DST/${PACKAGEDIR}-${OS_VERSION_NAME}-${REF}-${DB_TYPE}-${ARCH_DIR}.deb"
|
||||
|
||||
Reference in New Issue
Block a user