#!/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