91 lines
2.3 KiB
Bash
Executable File
91 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -xeu
|
|
|
|
DEBIAN_FRONTEND=noninteractive
|
|
TARGET="$PWD"
|
|
|
|
export DEBIAN_FRONTEND
|
|
|
|
dependencies() {
|
|
# Update system and install basic tools
|
|
apt-get update -yq && apt-get install -yq aptitude curl git wget
|
|
# Install dependencies for Vaultwarden
|
|
aptitude --quiet --assume-yes install pkg-config libssl-dev build-essential libsqlite3-dev
|
|
}
|
|
|
|
install_rust() {
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-host x86_64-unknown-linux-gnu --default-toolchain nightly
|
|
. ~/.cargo/env
|
|
}
|
|
|
|
get_vault_sources() {
|
|
# Clone Vaultwarden repo
|
|
cd "$(mktemp -d)"
|
|
git clone https://github.com/dani-garcia/vaultwarden
|
|
cd vaultwarden
|
|
}
|
|
|
|
build_vault() {
|
|
# Build
|
|
cargo build --release --features sqlite
|
|
|
|
# Move to previous directory
|
|
cd -
|
|
}
|
|
|
|
get_webgui_sources() {
|
|
# Get Dani Garcia GPG key
|
|
gpg --keyserver keyserver.ubuntu.com --recv-keys B9B7A108373276BF3C0406F9FC8A7D14C3CD543A
|
|
|
|
# Clone Vault web builds repo
|
|
git clone https://github.com/dani-garcia/bw_web_builds
|
|
cd bw_web_builds
|
|
|
|
# Get the last version of builded web gui
|
|
web_vault_version=$(git tag --sort=v:refname | tail -n1)
|
|
wget "https://github.com/dani-garcia/bw_web_builds/releases/download/${web_vault_version}/bw_web_${web_vault_version}.tar.gz" -O ../bw_web_latest.tar.gz
|
|
web_vault_version=$(git tag --sort=v:refname | tail -n1)
|
|
wget "https://github.com/dani-garcia/bw_web_builds/releases/download/${web_vault_version}/bw_web_${web_vault_version}.tar.gz.asc" -O ../bw_web_latest.tar.gz.asc
|
|
|
|
# Move to previous directory
|
|
cd -
|
|
}
|
|
|
|
merge() {
|
|
# Verify the signature
|
|
gpg --verify bw_web_latest.tar.gz.asc bw_web_latest.tar.gz || exit 2
|
|
|
|
# Extract the builded web gui
|
|
tar xf bw_web_latest.tar.gz
|
|
|
|
# Move the web gui to Vaultwarden
|
|
mv web-vault vaultwarden/target/release/web-vault
|
|
|
|
# Produce an archive of this Vaultwarden release
|
|
cd vaultwarden/target
|
|
vaultwarden_version=$(git tag --sort=v:refname | tail -n1)
|
|
tar czf "/vaultwarden_${vaultwarden_version}.tar.gz" release
|
|
|
|
# Move to previous directory
|
|
cd -
|
|
}
|
|
|
|
copy() {
|
|
TARGET_UID="$(stat --printf %u "$TARGET")"
|
|
TARGET_GID="$(stat --printf %g "$TARGET")"
|
|
install -o "$TARGET_UID" -g "$TARGET_GID" -t "$TARGET/target" /*.tar.gz
|
|
}
|
|
|
|
main() {
|
|
dependencies
|
|
install_rust
|
|
get_vault_sources
|
|
build_vault
|
|
get_webgui_sources
|
|
merge
|
|
copy
|
|
}
|
|
|
|
main
|