diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b086bda --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.ps1 text eol=crlf diff --git a/.gitignore b/.gitignore index 56566e8..647e9ad 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,4 @@ src/bitBetter/.vs/* *.pfx *.cer *.vsidx +.DS_Store diff --git a/README.md b/README.md index f147d80..31da987 100644 --- a/README.md +++ b/README.md @@ -63,14 +63,14 @@ The scripts supports running and patching multi instances. Edit the .servers/serverlist.txt file and fill in the missing values, they can be replaced with existing installation values. This file may be empty, but there will be no containers will be spun up automatically. -Now it is time to **run the main build script** to generate a modified version of the `ghcr.io/bitwarden/self-host` docker image and the license generator. +Now it is time to **run the main build script** to generate a modified version of the `ghcr.io/bitwarden/lite` docker image and the license generator. From the BitBetter directory, simply run: ``` ./build.[sh|ps1] ``` -This will create a new self-signed certificate in the `.keys` directory if one does not already exist and then create a modified version of the official `ghcr.io/bitwarden/self-host` image called `bitwarden-patched`. +This will create a new self-signed certificate in the `.keys` directory if one does not already exist and then create a modified version of the official `ghcr.io/bitwarden/lite` image called `bitwarden-patched`. Afterwards it will automatically generate the license generator and start all previously specified containers which are **now ready to accept self-issued licenses.** @@ -100,7 +100,7 @@ If you ran the build script, you can **simply run the license gen in interactive ## Migrating from mssql to a real database -Prepare a new database and bwdata directory, download and prepare the new settings.env (https://raw.githubusercontent.com/bitwarden/self-host/refs/heads/main/docker-unified/settings.env) +Prepare a new database and bwdata directory, download and prepare the new settings.env (https://raw.githubusercontent.com/bitwarden/self-host/refs/heads/main/bitwarden-lite/settings.env) Make sure you can get the data from either the backup file or by connecting directly to the mssql database (navicat has a trial). @@ -160,4 +160,4 @@ Require a recreation of the docker container, build.sh will suffice too. 1This tool builds on top of the `bitbetter/api` container image so make sure you've built that above using the root `./build.sh` script. -2 If you wish to change this you'll need to change the value that `licenseGen/Program.cs` uses for its `GenerateUserLicense` and `GenerateOrgLicense` calls. Remember, this is really unnecessary as this certificate does not represent any type of security-related certificate. \ No newline at end of file +2 If you wish to change this you'll need to change the value that `licenseGen/Program.cs` uses for its `GenerateUserLicense` and `GenerateOrgLicense` calls. Remember, this is really unnecessary as this certificate does not represent any type of security-related certificate. diff --git a/build.ps1 b/build.ps1 index 5b2bb3a..67f9618 100644 --- a/build.ps1 +++ b/build.ps1 @@ -1,128 +1,128 @@ -$ErrorActionPreference = 'Stop' -$PSNativeCommandUseErrorActionPreference = $true - -# detect buildx, ErrorActionPreference will ensure the script stops execution if not found -docker buildx version - -# define temporary directory -$tempdirectory = "$pwd\temp" -# define services to patch -$components = "Api","Identity" - -# delete old directories / files if applicable -if (Test-Path "$tempdirectory" -PathType Container) { - Remove-Item "$tempdirectory" -Recurse -Force -} - -if (Test-Path -Path "$pwd\src\licenseGen\Core.dll" -PathType Leaf) { - Remove-Item "$pwd\src\licenseGen\Core.dll" -Force -} - -if (Test-Path -Path "$pwd\src\licenseGen\cert.pfx" -PathType Leaf) { - Remove-Item "$pwd\src\licenseGen\cert.pfx" -Force -} - -if (Test-Path -Path "$pwd\src\bitBetter\cert.cer" -PathType Leaf) { - Remove-Item "$pwd\src\bitBetter\cert.cer" -Force -} - -if (Test-Path "$pwd\.keys\cert.cert" -PathType Leaf) { - Rename-Item -Path "$pwd\.keys\cert.cert" -NewName "$pwd\.keys\cert.cer" -} - -# generate keys if none are available -if (!(Test-Path "$pwd\.keys" -PathType Container)) { - .\generateKeys.ps1 -} - -# copy the key to bitBetter -Copy-Item "$pwd\.keys\cert.cer" -Destination "$pwd\src\bitBetter" - -# build bitBetter and clean the source directory after -docker build --no-cache -t bitbetter/bitbetter "$pwd\src\bitBetter" -Remove-Item "$pwd\src\bitBetter\cert.cer" -Force - -# gather all running instances, cannot run a wildcard filter on Ancestor= :(, does find all where name = *bitwarden* -$oldinstances = docker container ps --all -f Name=bitwarden --format '{{.ID}}' - -# stop and remove all running instances -foreach ($instance in $oldinstances) { - docker stop $instance - docker rm $instance -} - -# update bitwarden itself -if ($args[0] -eq 'update') { - docker pull ghcr.io/bitwarden/self-host:beta -} else { - $confirmation = Read-Host "Update (or get) bitwarden source container (y/n)" - if ($confirmation -eq 'y') { - docker pull ghcr.io/bitwarden/self-host:beta - } -} - -# stop and remove previous existing patch(ed) container -$oldinstances = docker container ps --all -f Ancestor=bitwarden-patched --format '{{.ID}}' -foreach ($instance in $oldinstances) { - docker stop $instance - docker rm $instance -} -$oldinstances = docker image ls bitwarden-patched --format '{{.ID}}' -foreach ($instance in $oldinstances) { - docker image rm $instance -} - -# remove old extract containers -$oldinstances = docker container ps --all -f Name=bitwarden-extract --format '{{.ID}}' -foreach ($instance in $oldinstances) { - docker stop $instance - docker rm $instance -} - -# start a new bitwarden instance so we can patch it -$patchinstance = docker run -d --name bitwarden-extract ghcr.io/bitwarden/self-host:beta - -# create our temporary directory -New-item -ItemType Directory -Path $tempdirectory - -# extract the files that need to be patched from the services that need to be patched into our temporary directory -foreach ($component in $components) { - New-item -itemtype Directory -path "$tempdirectory\$component" - docker cp $patchinstance`:/app/$component/Core.dll "$tempdirectory\$component\Core.dll" -} - -# stop and remove our temporary container -docker stop bitwarden-extract -docker rm bitwarden-extract - -# run bitBetter, this applies our patches to the required files -docker run -v "$tempdirectory`:/app/mount" --rm bitbetter/bitbetter - -# create a new image with the patched files -docker build . --tag bitwarden-patched --file "$pwd\src\bitBetter\Dockerfile-bitwarden-patch" - -# start all user requested instances -if (Test-Path -Path "$pwd\.servers\serverlist.txt" -PathType Leaf) { - foreach($line in Get-Content "$pwd\.servers\serverlist.txt") { - if (!($line.StartsWith("#"))) { - Invoke-Expression "& $line" - } - } -} - -# remove our bitBetter image -docker image rm bitbetter/bitbetter - -# copy our patched library to the licenseGen source directory -Copy-Item "$tempdirectory\Identity\Core.dll" -Destination "$pwd\src\licenseGen" -Copy-Item "$pwd\.keys\cert.pfx" -Destination "$pwd\src\licenseGen" - -# build the licenseGen -docker build -t bitbetter/licensegen "$pwd\src\licenseGen" - -# clean the licenseGen source directory -Remove-Item "$pwd\src\licenseGen\Core.dll" -Force -Remove-Item "$pwd\src\licenseGen\cert.pfx" -Force - -# remove our temporary directory -Remove-Item "$tempdirectory" -Recurse -Force \ No newline at end of file +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +# detect buildx, ErrorActionPreference will ensure the script stops execution if not found +docker buildx version + +# define temporary directory +$tempdirectory = "$pwd\temp" +# define services to patch +$components = "Api","Identity" + +# delete old directories / files if applicable +if (Test-Path "$tempdirectory" -PathType Container) { + Remove-Item "$tempdirectory" -Recurse -Force +} + +if (Test-Path -Path "$pwd\src\licenseGen\Core.dll" -PathType Leaf) { + Remove-Item "$pwd\src\licenseGen\Core.dll" -Force +} + +if (Test-Path -Path "$pwd\src\licenseGen\cert.pfx" -PathType Leaf) { + Remove-Item "$pwd\src\licenseGen\cert.pfx" -Force +} + +if (Test-Path -Path "$pwd\src\bitBetter\cert.cer" -PathType Leaf) { + Remove-Item "$pwd\src\bitBetter\cert.cer" -Force +} + +if (Test-Path "$pwd\.keys\cert.cert" -PathType Leaf) { + Rename-Item -Path "$pwd\.keys\cert.cert" -NewName "$pwd\.keys\cert.cer" +} + +# generate keys if none are available +if (!(Test-Path "$pwd\.keys" -PathType Container)) { + .\generateKeys.ps1 +} + +# copy the key to bitBetter +Copy-Item "$pwd\.keys\cert.cer" -Destination "$pwd\src\bitBetter" + +# build bitBetter and clean the source directory after +docker build --no-cache -t bitbetter/bitbetter "$pwd\src\bitBetter" +Remove-Item "$pwd\src\bitBetter\cert.cer" -Force + +# gather all running instances, cannot run a wildcard filter on Ancestor= :(, does find all where name = *bitwarden* +$oldinstances = docker container ps --all -f Name=bitwarden --format '{{.ID}}' + +# stop and remove all running instances +foreach ($instance in $oldinstances) { + docker stop $instance + docker rm $instance +} + +# update bitwarden itself +if ($args[0] -eq 'update') { + docker pull ghcr.io/bitwarden/lite:latest +} else { + $confirmation = Read-Host "Update (or get) bitwarden source container (y/n)" + if ($confirmation -eq 'y') { + docker pull ghcr.io/bitwarden/lite:latest + } +} + +# stop and remove previous existing patch(ed) container +$oldinstances = docker container ps --all -f Ancestor=bitwarden-patched --format '{{.ID}}' +foreach ($instance in $oldinstances) { + docker stop $instance + docker rm $instance +} +$oldinstances = docker image ls bitwarden-patched --format '{{.ID}}' +foreach ($instance in $oldinstances) { + docker image rm $instance +} + +# remove old extract containers +$oldinstances = docker container ps --all -f Name=bitwarden-extract --format '{{.ID}}' +foreach ($instance in $oldinstances) { + docker stop $instance + docker rm $instance +} + +# start a new bitwarden instance so we can patch it +$patchinstance = docker run -d --name bitwarden-extract ghcr.io/bitwarden/lite:latest + +# create our temporary directory +New-item -ItemType Directory -Path $tempdirectory + +# extract the files that need to be patched from the services that need to be patched into our temporary directory +foreach ($component in $components) { + New-item -itemtype Directory -path "$tempdirectory\$component" + docker cp $patchinstance`:/app/$component/Core.dll "$tempdirectory\$component\Core.dll" +} + +# stop and remove our temporary container +docker stop bitwarden-extract +docker rm bitwarden-extract + +# run bitBetter, this applies our patches to the required files +docker run -v "$tempdirectory`:/app/mount" --rm bitbetter/bitbetter + +# create a new image with the patched files +docker build . --tag bitwarden-patched --file "$pwd\src\bitBetter\Dockerfile-bitwarden-patch" + +# start all user requested instances +if (Test-Path -Path "$pwd\.servers\serverlist.txt" -PathType Leaf) { + foreach($line in Get-Content "$pwd\.servers\serverlist.txt") { + if (!($line.StartsWith("#"))) { + Invoke-Expression "& $line" + } + } +} + +# remove our bitBetter image +docker image rm bitbetter/bitbetter + +# copy our patched library to the licenseGen source directory +Copy-Item "$tempdirectory\Identity\Core.dll" -Destination "$pwd\src\licenseGen" +Copy-Item "$pwd\.keys\cert.pfx" -Destination "$pwd\src\licenseGen" + +# build the licenseGen +docker build -t bitbetter/licensegen "$pwd\src\licenseGen" + +# clean the licenseGen source directory +Remove-Item "$pwd\src\licenseGen\Core.dll" -Force +Remove-Item "$pwd\src\licenseGen\cert.pfx" -Force + +# remove our temporary directory +Remove-Item "$tempdirectory" -Recurse -Force diff --git a/build.sh b/build.sh index 0b7938d..64a5c6f 100755 --- a/build.sh +++ b/build.sh @@ -54,11 +54,11 @@ done # update bitwarden itself if [ "$1" = "update" ]; then - docker pull ghcr.io/bitwarden/self-host:beta + docker pull ghcr.io/bitwarden/lite:latest else read -p "Update (or get) bitwarden source container (y/n): " if [[ $REPLY =~ ^[Yy]$ ]]; then - docker pull ghcr.io/bitwarden/self-host:beta + docker pull ghcr.io/bitwarden/lite:latest fi fi @@ -81,7 +81,7 @@ for INSTANCE in ${OLDINSTANCES[@]}; do done # start a new bitwarden instance so we can patch it -PATCHINSTANCE=$(docker run -d --name bitwarden-extract ghcr.io/bitwarden/self-host:beta) +PATCHINSTANCE=$(docker run -d --name bitwarden-extract ghcr.io/bitwarden/lite:latest) # create our temporary directory mkdir $TEMPDIRECTORY @@ -128,4 +128,4 @@ rm -f "$PWD/src/licenseGen/Core.dll" rm -f "$PWD/src/licenseGen/cert.pfx" # remove our temporary directory -rm -rf "$TEMPDIRECTORY" \ No newline at end of file +rm -rf "$TEMPDIRECTORY" diff --git a/licenseGen.ps1 b/licenseGen.ps1 index 7b69b43..c9477b2 100644 --- a/licenseGen.ps1 +++ b/licenseGen.ps1 @@ -1,17 +1,17 @@ -$ErrorActionPreference = 'Stop' -$PSNativeCommandUseErrorActionPreference = $true - -if ($($args.Count) -lt 1) { - echo "USAGE: [License Gen args...]" - echo "ACTIONS:" - echo " interactive" - echo " user" - echo " org" - Exit 1 -} - -if ($args[0] -eq "interactive") { - docker run -it --rm bitbetter/licensegen interactive -} else { - docker run bitbetter/licensegen $args -} +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +if ($($args.Count) -lt 1) { + echo "USAGE: [License Gen args...]" + echo "ACTIONS:" + echo " interactive" + echo " user" + echo " org" + Exit 1 +} + +if ($args[0] -eq "interactive") { + docker run -it --rm bitbetter/licensegen interactive +} else { + docker run bitbetter/licensegen $args +} diff --git a/src/bitBetter/Dockerfile-bitwarden-patch b/src/bitBetter/Dockerfile-bitwarden-patch index c14b2b3..4d6ec59 100644 --- a/src/bitBetter/Dockerfile-bitwarden-patch +++ b/src/bitBetter/Dockerfile-bitwarden-patch @@ -1,3 +1,3 @@ -FROM ghcr.io/bitwarden/self-host:beta +FROM ghcr.io/bitwarden/lite:latest -COPY ./temp/ /app/ \ No newline at end of file +COPY ./temp/ /app/