forked from greizgh/vaultwarden-debian
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.sh
More file actions
executable file
·174 lines (147 loc) · 5.39 KB
/
Copy pathbuild.sh
File metadata and controls
executable file
·174 lines (147 loc) · 5.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
#!/usr/bin/env bash
set -e
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
SRC="$DIR/git"
DST="$DIR/dist"
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:s" opt; do
case $opt in
r) REF="$OPTARG"
;;
o) OS_VERSION_NAME="$OPTARG"
;;
d) DB_TYPE="$OPTARG"
;;
a) ARCH_DIR="$OPTARG"
;;
p) PACKAGENAME="$OPTARG"
;;
i) PACKAGEDIR="$OPTARG"
;;
u) SERVICEUSER="$OPTARG"
;;
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" =~ ^arm ]]; then ARCH="armhf"; fi
VAULTWARDEN_DEPS="libc6, libgcc-s1"
# Setup libssl dependency correctly depending on Debian version.
# Also use this opportunity to exit if the user is trying to create a package for anything besides bullseye and bookworm
case $OS_VERSION_NAME in
bullseye)
VAULTWARDEN_DEPS="$VAULTWARDEN_DEPS, libssl1.1"
;;
bookworm|trixie)
VAULTWARDEN_DEPS="$VAULTWARDEN_DEPS, libssl3"
;;
*)
echo "ERROR: vaultwarden-debian only supports building packages for Debian Bullseye and Bookworm currently"
exit 1
;;
esac
# 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
git clone https://github.com/dani-garcia/vaultwarden.git "$SRC"
fi
pushd "$SRC" || exit
CREF="$(git branch | grep "\*" | cut -d ' ' -f2)"
if [ "$CREF" != "$REF" ]; then
git fetch || exit
git checkout "$REF" --force || exit
else
git pull || exit
fi
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
CONFIG="$DEBIANDIR/config.env"
cp "$SRC/.env.template" "$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/$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"
# 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"
# 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/Dockerfile.debian" --verbose -o "$DIR/Dockerfile" || \
exit
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"
# add debian dir to .dockerignore whitelisting
echo "!debian" >> $SRC/.dockerignore
# Prepare Controlfile
CONTROL="$DEBIANDIR/control"
cp "$DIR/control.dist" "$CONTROL"
sed -i "s/@@PACKAGENAME@@/$PACKAGENAME/g" "$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 [ "$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 [ "$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"
CID=$(docker run -d vaultwarden-deb)
docker cp "$CID:/outdir/${PACKAGEDIR}.deb" "$DST/${PACKAGEDIR}-${OS_VERSION_NAME}-${REF}-${DB_TYPE}-${ARCH_DIR}.deb"
docker rm "$CID"