Added support for dynamically configure DEB package creation
This commit is contained in:
+3
-1
@@ -2,5 +2,7 @@ git/
|
|||||||
dist/
|
dist/
|
||||||
debian/config.env
|
debian/config.env
|
||||||
debian/control
|
debian/control
|
||||||
debian/vaultwarden.service
|
debian/*.service
|
||||||
|
debian/conffiles
|
||||||
|
debian/postinst
|
||||||
Dockerfile
|
Dockerfile
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|||||||
SRC="$DIR/git"
|
SRC="$DIR/git"
|
||||||
DST="$DIR/dist"
|
DST="$DIR/dist"
|
||||||
|
|
||||||
while getopts ":r:o:d:a:" opt; do
|
while getopts ":r:o:d:a:p:i:u:e:" opt; do
|
||||||
case $opt in
|
case $opt in
|
||||||
r) REF="$OPTARG"
|
r) REF="$OPTARG"
|
||||||
;;
|
;;
|
||||||
@@ -16,7 +16,15 @@ while getopts ":r:o:d:a:" opt; do
|
|||||||
;;
|
;;
|
||||||
a) ARCH_DIR="$OPTARG"
|
a) ARCH_DIR="$OPTARG"
|
||||||
;;
|
;;
|
||||||
\?) echo "Invalid option -$OPTARG" >&2
|
p) PACKAGENAME="$OPTARG"
|
||||||
|
;;
|
||||||
|
i) PACKAGEDIR="$OPTARG"
|
||||||
|
;;
|
||||||
|
u) SERVICEUSER="$OPTARG"
|
||||||
|
;;
|
||||||
|
e) EXECUTABLENAME="$OPTARG"
|
||||||
|
;;
|
||||||
|
\?) echo "Invalid option -$OPTARG" >&2 ; exit
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
@@ -26,45 +34,71 @@ if [ -z "$DB_TYPE" ]; then DB_TYPE="sqlite"; fi
|
|||||||
if [ -z "$ARCH_DIR" ]; then ARCH_DIR="amd64"; fi
|
if [ -z "$ARCH_DIR" ]; then ARCH_DIR="amd64"; fi
|
||||||
ARCH=$ARCH_DIR
|
ARCH=$ARCH_DIR
|
||||||
if [[ "$ARCH" =~ ^arm ]]; then ARCH="armhf"; fi
|
if [[ "$ARCH" =~ ^arm ]]; then ARCH="armhf"; fi
|
||||||
|
if [ -z "$PACKAGENAME" ]; then PACKAGENAME="vaultwarden"; fi
|
||||||
|
if [ -z "$PACKAGEDIR" ]; then SERVICEUSER="vaultwarden"; fi
|
||||||
|
if [ -z "$SERVICEUSER" ]; then SERVICEUSER="vaultwarden"; fi
|
||||||
|
if [ -z "$EXECUTABLENAME" ]; then EXECUTABLENAME="$PACKAGEDIR"; fi
|
||||||
|
|
||||||
# Clone vaultwarden
|
# Clone vaultwarden
|
||||||
if [ ! -d "$SRC" ]; then
|
if [ ! -d "$SRC" ]; then
|
||||||
git clone https://github.com/dani-garcia/vaultwarden.git "$SRC"
|
git clone https://github.com/dani-garcia/vaultwarden.git "$SRC"
|
||||||
fi
|
fi
|
||||||
cd "$SRC" || exit
|
pushd "$SRC" || exit
|
||||||
CREF="$(git branch | grep \* | cut -d ' ' -f2)"
|
CREF="$(git branch | grep \* | cut -d ' ' -f2)"
|
||||||
if [ "$CREF" != "$REF" ]; then
|
if [ "$CREF" != "$REF" ]; then
|
||||||
git fetch
|
git fetch || exit
|
||||||
git checkout "$REF" --force
|
git checkout "$REF" --force || exit
|
||||||
else
|
else
|
||||||
git clean -d -f
|
git pull || exit
|
||||||
git pull
|
|
||||||
fi
|
fi
|
||||||
cd - || exit
|
git clean -d -f || exit
|
||||||
|
popd || exit
|
||||||
|
|
||||||
|
DEBIANDIR="$SRC/debian"
|
||||||
|
mkdir -p "$DEBIANDIR"
|
||||||
|
|
||||||
|
SEDCOMMANDS="
|
||||||
|
s/@@PACKAGENAME@@/$PACKAGENAME/g
|
||||||
|
s/@@PACKAGEDIR@@/$PACKAGEDIR/g
|
||||||
|
s/@@SERVICEUSER@@/$SERVICEUSER/g
|
||||||
|
s/@@EXECUTABLENAME@@/$EXECUTABLENAME/g
|
||||||
|
"
|
||||||
|
|
||||||
# Prepare EnvFile
|
# Prepare EnvFile
|
||||||
CONFIG="$DIR/debian/config.env"
|
CONFIG="$DEBIANDIR/config.env"
|
||||||
cp "$SRC/.env.template" "$CONFIG"
|
cp "$SRC/.env.template" "$CONFIG"
|
||||||
sed -i "s#\# DATA_FOLDER=data#DATA_FOLDER=/var/lib/vaultwarden#" "$CONFIG"
|
sed -i "s#\# DATA_FOLDER=data#DATA_FOLDER=/var/lib/$PACKAGEDIR#" "$CONFIG"
|
||||||
sed -i "s#\# WEB_VAULT_FOLDER=web-vault/#WEB_VAULT_FOLDER=/usr/share/vaultwarden/web-vault/#" "$CONFIG"
|
sed -i "s#\# WEB_VAULT_FOLDER=web-vault/#WEB_VAULT_FOLDER=/usr/share/$PACKAGEDIR/web-vault/#" "$CONFIG"
|
||||||
sed -i "s/Uncomment any of the following lines to change the defaults/Uncomment any of the following lines to change the defaults\n\n## Warning\n## The default systemd-unit does not allow any custom directories.\n## Be sure to check if the service has appropriate permissions before you set custom paths./g" "$CONFIG"
|
sed -i "s/Uncomment any of the following lines to change the defaults/Uncomment any of the following lines to change the defaults\n\n## Warning\n## The default systemd-unit does not allow any custom directories.\n## Be sure to check if the service has appropriate permissions before you set custom paths./g" "$CONFIG"
|
||||||
|
|
||||||
|
# Prepare conffiles
|
||||||
|
sed conffiles.dist > $DEBIANDIR/conffiles -f <( echo "$SEDCOMMANDS" ) || exit
|
||||||
|
chmod 644 $DEBIANDIR/conffiles
|
||||||
|
|
||||||
|
# Prepare postinst
|
||||||
|
sed postinst.dist > $DEBIANDIR/postinst -f <( echo "$SEDCOMMANDS" ) || exit
|
||||||
|
chmod 755 $DEBIANDIR/postinst
|
||||||
|
|
||||||
mkdir -p "$DST"
|
mkdir -p "$DST"
|
||||||
|
|
||||||
# Prepare Dockerfile
|
# Prepare Dockerfile
|
||||||
patch -i "$DIR/patch/$ARCH_DIR/Dockerfile.patch" "$SRC/docker/$ARCH_DIR/Dockerfile" --verbose -o "$DIR/Dockerfile" || exit
|
sed "$DIR/patch/$ARCH_DIR/Dockerfile.patch" -f <( echo "$SEDCOMMANDS" ) | \
|
||||||
|
patch "$SRC/docker/$ARCH_DIR/Dockerfile" --verbose -o "$DIR/Dockerfile" || \
|
||||||
|
exit
|
||||||
|
|
||||||
sed -E "s/(FROM[[:space:]]*rust:)[^[:space:]]+(.+)/\1${OS_VERSION_NAME}\2/g" -i "$DIR/Dockerfile"
|
sed -E "s/(FROM[[:space:]]*rust:)[^[:space:]]+(.+)/\1${OS_VERSION_NAME}\2/g" -i "$DIR/Dockerfile"
|
||||||
sed -E "s/(FROM[[:space:]]*debian:)[^-]+(-.+)/\1${OS_VERSION_NAME}\2/g" -i "$DIR/Dockerfile"
|
sed -E "s/(FROM[[:space:]]*debian:)[^-]+(-.+)/\1${OS_VERSION_NAME}\2/g" -i "$DIR/Dockerfile"
|
||||||
|
|
||||||
# Prepare Controlfile
|
# Prepare Controlfile
|
||||||
CONTROL="$DIR/debian/control"
|
CONTROL="$DEBIANDIR/control"
|
||||||
cp "$DIR/control.dist" "$CONTROL"
|
cp "$DIR/control.dist" "$CONTROL"
|
||||||
|
sed -i "s/@@PACKAGENAME@@/$PACKAGENAME/g" "$CONTROL"
|
||||||
sed -i "s/Version:.*/Version: $REF-1/" "$CONTROL"
|
sed -i "s/Version:.*/Version: $REF-1/" "$CONTROL"
|
||||||
sed -i "s/Architecture:.*/Architecture: $ARCH/" "$CONTROL"
|
sed -i "s/Architecture:.*/Architecture: $ARCH/" "$CONTROL"
|
||||||
|
|
||||||
# Prepare Systemd-unit
|
# Prepare Systemd-unit
|
||||||
SYSTEMD_UNIT="$DIR/debian/vaultwarden.service"
|
SYSTEMD_UNIT="$DEBIANDIR/$EXECUTABLENAME.service"
|
||||||
cp "$DIR/service.dist" "$SYSTEMD_UNIT"
|
sed "$DIR/service.dist" > "$SYSTEMD_UNIT" -f <( echo "$SEDCOMMANDS" ) || exit
|
||||||
if [ "$DB_TYPE" = "mysql" ]; then
|
if [ "$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 [ "$DB_TYPE" = "postgresql" ]; then
|
||||||
@@ -72,10 +106,8 @@ elif [ "$DB_TYPE" = "postgresql" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
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"
|
||||||
cp -r "$DIR/debian" "$SRC/debian"
|
|
||||||
docker build -t vaultwarden-deb "$SRC" --build-arg DB=$DB_TYPE --target dpkg -f "$DIR/Dockerfile"
|
docker build -t vaultwarden-deb "$SRC" --build-arg DB=$DB_TYPE --target dpkg -f "$DIR/Dockerfile"
|
||||||
pushd "$SRC"; git clean -fd; popd
|
|
||||||
|
|
||||||
CID=$(docker run -d vaultwarden-deb)
|
CID=$(docker run -d vaultwarden-deb)
|
||||||
docker cp "$CID":/vaultwarden_package/vaultwarden.deb "$DST/vaultwarden-${OS_VERSION_NAME}-${REF}-${DB_TYPE}-${ARCH_DIR}.deb"
|
docker cp "$CID:/vaultwarden_package/${PACKAGEDIR}.deb" "$DST/${PACKAGEDIR}-${OS_VERSION_NAME}-${REF}-${DB_TYPE}-${ARCH_DIR}.deb"
|
||||||
docker rm "$CID"
|
docker rm "$CID"
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
/etc/@@PACKAGEDIR@@/Rocket.toml
|
||||||
|
/etc/@@PACKAGEDIR@@/config.env
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
Package: vaultwarden
|
Package: @@PACKAGENAME@@
|
||||||
Architecture: -
|
Architecture: -
|
||||||
Maintainer: Greizgh <greizgh+vaultwarden@ephax.org>
|
Maintainer: Greizgh <greizgh+vaultwarden@ephax.org>
|
||||||
Priority: optional
|
Priority: optional
|
||||||
|
|||||||
Vendored
-2
@@ -1,2 +0,0 @@
|
|||||||
/etc/vaultwarden/Rocket.toml
|
|
||||||
/etc/vaultwarden/config.env
|
|
||||||
Vendored
-5
@@ -1,5 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
DIR_MODE=0700 adduser --system --home /var/lib/vaultwarden vaultwarden
|
|
||||||
chmod 700 /var/lib/vaultwarden
|
|
||||||
chmod 600 /etc/vaultwarden/config.env
|
|
||||||
chmod 600 /etc/vaultwarden/Rocket.toml
|
|
||||||
@@ -10,17 +10,17 @@
|
|||||||
+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/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/etc/vaultwarden
|
+RUN mkdir -p /vaultwarden_package/etc/@@PACKAGEDIR@@
|
||||||
+RUN mkdir -p /vaultwarden_package/usr/share/vaultwarden
|
+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/conffiles /vaultwarden_package/DEBIAN/conffiles
|
+COPY debian/conffiles /vaultwarden_package/DEBIAN/conffiles
|
||||||
+COPY Rocket.toml /vaultwarden_package/etc/vaultwarden
|
+COPY Rocket.toml /vaultwarden_package/etc/@@PACKAGEDIR@@
|
||||||
+COPY debian/config.env /vaultwarden_package/etc/vaultwarden
|
+COPY debian/config.env /vaultwarden_package/etc/@@PACKAGEDIR@@
|
||||||
+COPY debian/vaultwarden.service /vaultwarden_package/usr/lib/systemd/system
|
+COPY debian/@@EXECUTABLENAME@@.service /vaultwarden_package/usr/lib/systemd/system
|
||||||
+COPY --from=vault /web-vault /vaultwarden_package/usr/share/vaultwarden/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
|
+COPY --from=build app/target/release/vaultwarden /vaultwarden_package/usr/local/bin/@@EXECUTABLENAME@@
|
||||||
+
|
+
|
||||||
+RUN dpkg-deb --build . vaultwarden.deb
|
+RUN dpkg-deb --build . @@PACKAGEDIR@@.deb
|
||||||
|
|||||||
@@ -10,17 +10,17 @@
|
|||||||
+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/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/etc/vaultwarden
|
+RUN mkdir -p /vaultwarden_package/etc/@@PACKAGEDIR@@
|
||||||
+RUN mkdir -p /vaultwarden_package/usr/share/vaultwarden
|
+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/conffiles /vaultwarden_package/DEBIAN/conffiles
|
+COPY debian/conffiles /vaultwarden_package/DEBIAN/conffiles
|
||||||
+COPY Rocket.toml /vaultwarden_package/etc/vaultwarden
|
+COPY Rocket.toml /vaultwarden_package/etc/@@PACKAGEDIR@@
|
||||||
+COPY debian/config.env /vaultwarden_package/etc/vaultwarden
|
+COPY debian/config.env /vaultwarden_package/etc/@@PACKAGEDIR@@
|
||||||
+COPY debian/vaultwarden.service /vaultwarden_package/usr/lib/systemd/system
|
+COPY debian/@@EXECUTABLENAME@@.service /vaultwarden_package/usr/lib/systemd/system
|
||||||
+COPY --from=vault /web-vault /vaultwarden_package/usr/share/vaultwarden/web-vault
|
+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
|
+COPY --from=build app/target/armv7-unknown-linux-gnueabihf/release/vaultwarden /vaultwarden_package/usr/local/bin/@@EXECUTABLENAME@@
|
||||||
+
|
+
|
||||||
+RUN dpkg-deb --build . vaultwarden.deb
|
+RUN dpkg-deb --build . @@PACKAGEDIR@@.deb
|
||||||
|
|||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
DIR_MODE=0700 adduser --system --home /var/lib/@@PACKAGEDIR@@ @@SERVICEUSER@@
|
||||||
|
chmod 700 /var/lib/@@PACKAGEDIR@@
|
||||||
|
chmod 600 /etc/@@PACKAGEDIR@@/config.env
|
||||||
|
chmod 600 /etc/@@PACKAGEDIR@@/Rocket.toml
|
||||||
+5
-5
@@ -4,15 +4,15 @@ After=network.target
|
|||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
Type=simple
|
Type=simple
|
||||||
User=vaultwarden
|
User=@@SERVICEUSER@@
|
||||||
ExecStart=/usr/local/bin/vaultwarden
|
ExecStart=/usr/local/bin/@@EXECUTABLENAME@@
|
||||||
PrivateTmp=true
|
PrivateTmp=true
|
||||||
PrivateDevices=true
|
PrivateDevices=true
|
||||||
ProtectHome=true
|
ProtectHome=true
|
||||||
ProtectSystem=strict
|
ProtectSystem=strict
|
||||||
WorkingDirectory=/etc/vaultwarden
|
WorkingDirectory=/etc/@@PACKAGEDIR@@
|
||||||
ReadWriteDirectories=/var/lib/vaultwarden
|
ReadWriteDirectories=/var/lib/@@PACKAGEDIR@@
|
||||||
EnvironmentFile=/etc/vaultwarden/config.env
|
EnvironmentFile=/etc/@@PACKAGEDIR@@/config.env
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
|
|||||||
Reference in New Issue
Block a user