From 87334fbfadf312f925294fe01521353ac41fa03b Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 20 Mar 2023 20:21:02 +0100 Subject: [PATCH 01/25] added unraid section --- .UNRAID/FastAPI-DLS.xml | 48 +++++++++++++++++++++++++++++++++++++++++ README.md | 17 ++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 .UNRAID/FastAPI-DLS.xml diff --git a/.UNRAID/FastAPI-DLS.xml b/.UNRAID/FastAPI-DLS.xml new file mode 100644 index 0000000..f6bf52b --- /dev/null +++ b/.UNRAID/FastAPI-DLS.xml @@ -0,0 +1,48 @@ + + + FastAPI-DLS + collinwebdesigns/fastapi-dls:latest + https://hub.docker.com/r/collinwebdesigns/fastapi-dls + br0 + + sh + false + + + Source: +https://git.collinwebdesigns.de/oscar.krause/fastapi-dls#docker + +Make sure you create these certificates before starting the container for the first time: +``` +# Check https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/main/#docker for more information: +WORKING_DIR=/mnt/user/appdata/fastapi-dls/cert +mkdir -p $WORKING_DIR +cd $WORKING_DIR +# create instance private and public key for singing JWT's +openssl genrsa -out $WORKING_DIR/instance.private.pem 2048 +openssl rsa -in $WORKING_DIR/instance.private.pem -outform PEM -pubout -out $WORKING_DIR/instance.public.pem +# create ssl certificate for integrated webserver (uvicorn) - because clients rely on ssl +openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout $WORKING_DIR/webserver.key -out $WORKING_DIR/webserver.crt +``` + + + https://[IP]:[PORT:443] + + https://git.collinwebdesigns.de/uploads/-/system/project/avatar/106/png-transparent-nvidia-grid-logo-business-nvidia-electronics-text-trademark.png?width=64 + --restart always + + + 1679161568 + + + + 443 + /mnt/user/appdata/fastapi-dls/cert + 443 + /mnt/user/appdata/fastapi-dls/data + + + sqlite:////app/database/db.sqlite + true + 90 + diff --git a/README.md b/README.md index add9f24..fe8fae4 100644 --- a/README.md +++ b/README.md @@ -352,6 +352,17 @@ pacman -U --noconfirm fastapi-dls.pkg.tar.zst Start with `systemctl start fastapi-dls.service` and enable autostart with `systemctl enable fastapi-dls.service`. +## unRAID + +1. Download [this xml file](.UNRAID/FastAPI-DLS.xml) +2. Put it in /boot/config/plugins/dockerMan/templates-user/ +3. Go to Docker page, scroll down to `Add Container`, click on Template list and choose `FastAPI-DLS` +4. Open terminal/ssh, follow the instructions in overview description +5. Setup your container `IP`, `Port`, `DLS_URL` and `DLS_PORT` +6. Apply and let it boot up + +*Unraid users must also make sure they have Host access to custom networks enabled if unraid is the vgpu guest*. + ## Let's Encrypt Certificate (optional) If you're using installation via docker, you can use `traefik`. Please refer to their documentation. @@ -673,4 +684,8 @@ The error message can safely be ignored (since we have no license limitation :P) Thanks to vGPU community and all who uses this project and report bugs. -Special thanks to @samicrusader who created build file for ArchLinux and @cyrus who wrote the section for openSUSE. +Special thanks to + +- @samicrusader who created build file for ArchLinux +- @cyrus who wrote the section for openSUSE +- @midi who wrote the section for unRAID From 1fc5ac83789e8f27bb8f41ac445250b36ecb08b4 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Wed, 22 Mar 2023 07:10:18 +0100 Subject: [PATCH 02/25] added setup_vgpu_license.sh script --- .UNRAID/setup_vgpu_license.sh | 197 ++++++++++++++++++++++++++++++++++ README.md | 15 +++ 2 files changed, 212 insertions(+) create mode 100644 .UNRAID/setup_vgpu_license.sh diff --git a/.UNRAID/setup_vgpu_license.sh b/.UNRAID/setup_vgpu_license.sh new file mode 100644 index 0000000..c3c93a0 --- /dev/null +++ b/.UNRAID/setup_vgpu_license.sh @@ -0,0 +1,197 @@ +#!/bin/bash + +# This script automates the licensing of the vGPU guest driver +# on Unraid boot. Set the Schedule to: "At Startup of Array". +# +# Relies on FastAPI-DLS for the licensing. +# It assumes FeatureType=1 (vGPU), change it as you see fit in line <114> +# +# Requires `eflutils` to be installed in the system for `nvidia-gridd` to run +# To Install it: +# 1) You might find it here: https://packages.slackware.com/ (choose the 64bit version of Slackware) +# 2) Download the package and put it in /boot/extra to be installed on boot +# 3) a. Reboot to install it, OR +# b. Run `upgradepkg --install-new /boot/extra/elfutils*` +# [i]: Make sure to have only one version of elfutils, otherwise you might run into issues + +# Sources and docs: +# https://docs.nvidia.com/grid/15.0/grid-vgpu-user-guide/index.html#configuring-nls-licensed-client-on-linux +# + +################################################ +# MAKE SURE YOU CHANGE THESE VARIABLES # +################################################ + +###### CHANGE ME! +# IP and PORT of FastAPI-DLS +DLS_IP=192.168.0.123 +DLS_PORT=443 +# Token folder, must be on a filesystem that supports +# linux filesystem permissions (eg: ext4,xfs,btrfs...) +TOKEN_PATH=/mnt/user/system/nvidia +PING=$(which ping) + +# Check if the License is applied +if [[ "$(nvidia-smi -q | grep "Expiry")" == *Expiry* ]]; then + echo " [i] Your vGPU Guest drivers are already licensed." + echo " [i] $(nvidia-smi -q | grep "Expiry")" + echo " [<] Exiting..." + exit 0 +fi + +# Check if the FastAPI-DLS server is reachable +# Check if the License is applied +MAX_RETRIES=30 +for i in $(seq 1 $MAX_RETRIES); do + echo -ne "\r [>] Attempt $i to connect to $DLS_IP." + if ping -c 1 $DLS_IP >/dev/null 2>&1; then + echo -e "\n [*] Connection successful." + break + fi + if [ $i -eq $MAX_RETRIES ]; then + echo -e "\n [!] Connection failed after $MAX_RETRIES attempts." + echo -e "\n [<] Exiting..." + exit 1 + fi + sleep 1 +done + +# Check if the token folder exists +if [ -d "${TOKEN_PATH}" ]; then + echo " [*] Token Folder exists. Proceeding..." +else + echo " [!] Token Folder does not exists or not ready yet. Exiting." + echo " [!] Token Folder Specified: ${TOKEN_PATH}" + exit 1 +fi + +# Check if elfutils are installed, otherwise nvidia-gridd service +# wont start +if [ "$(grep -R "elfutils" /var/log/packages/* | wc -l)" != 0 ]; then + echo " [*] Elfutils is installed, proceeding..." +else + echo " [!] Elfutils is not installed, downloading and installing..." + echo " [!] Downloading elfutils to /boot/extra" + echo " [i] This script will download elfutils from slackware64-15.0 repository." + echo " [i] If you have a different version of Unraid (6.11.5), you might want to" + echo " [i] download and install a suitable version manually from the slackware" + echo " [i] repository, and put it in /boot/extra to be install on boot." + echo " [i] You may also install it by running: " + echo " [i] upgradepkg --install-new /path/to/elfutils-*.txz" + echo "" + echo " [>] Downloading elfutils from slackware64-15.0 repository:" + wget -q -nc --show-progress --progress=bar:force:noscroll -P /boot/extra https://slackware.uk/slackware/slackware64-15.0/slackware64/l/elfutils-0.186-x86_64-1.txz 2>/dev/null \ + || { echo " [!] Error while downloading elfutils, please download it and install it manually."; exit 1; } + echo "" + if upgradepkg --install-new /boot/extra/elfutils-0.186-x86_64-1.txz + then + echo " [*] Elfutils installed and will be installed automatically on boot" + else + echo " [!] Error while installing, check logs..." + exit 1 + fi +fi + +echo " [~] Sleeping for 60 seconds before continuing..." +echo " [i] The script is waiting until the boot process settles down." + +for i in {60..1}; do + printf "\r [~] %d seconds remaining" "$i" + sleep 1 +done + +printf "\n" + +create_token () { + echo " [>] Creating new token..." + if ${PING} -c1 ${DLS_IP} > /dev/null 2>&1 + then + # curl --insecure -L -X GET https://${DLS_IP}:${DLS_PORT}/-/client-token -o ${TOKEN_PATH}/client_configuration_token_"$(date '+%d-%m-%Y-%H-%M-%S')".tok || { echo " [!] Could not get the token, please check the server."; exit 1;} + wget -q -nc -4c --no-check-certificate --show-progress --progress=bar:force:noscroll -O "${TOKEN_PATH}"/client_configuration_token_"$(date '+%d-%m-%Y-%H-%M-%S')".tok https://${DLS_IP}:${DLS_PORT}/-/client-token \ + || { echo " [!] Could not get the token, please check the server."; exit 1;} + chmod 744 "${TOKEN_PATH}"/*.tok || { echo " [!] Could not chmod the tokens."; exit 1; } + echo "" + echo " [*] Token downloaded and stored in ${TOKEN_PATH}." + else + echo " [!] Could not get token, DLS server unavailable ." + exit 1 + fi +} + +setup_run () { + echo " [>] Setting up gridd.conf" + cp /etc/nvidia/gridd.conf.template /etc/nvidia/gridd.conf || { echo " [!] Error configuring gridd.conf, did you install the drivers correctly?"; exit 1; } + sed -i 's/FeatureType=0/FeatureType=1/g' /etc/nvidia/gridd.conf + echo "ClientConfigTokenPath=${TOKEN_PATH}" >> /etc/nvidia/gridd.conf + echo " [>] Creating /var/lib/nvidia folder structure" + mkdir -p /var/lib/nvidia/GridLicensing + echo " [>] Starting nvidia-gridd" + if pgrep nvidia-gridd >/dev/null 2>&1; then + echo " [!] nvidia-gridd service is running. Closing." + sh /usr/lib/nvidia/sysv/nvidia-gridd stop + stop_exit_code=$? + if [ $stop_exit_code -eq 0 ]; then + echo " [*] nvidia-gridd service stopped successfully." + else + echo " [!] Error while stopping nvidia-gridd service." + exit 1 + fi + + # Kill the service if it does not close + if pgrep nvidia-gridd >/dev/null 2>&1; then + kill -9 "$(pgrep nvidia-gridd)" || { + echo " [!] Error while closing nvidia-gridd service" + exit 1 + } + fi + + echo " [*] Restarting nvidia-gridd service." + sh /usr/lib/nvidia/sysv/nvidia-gridd start + + if pgrep nvidia-gridd >/dev/null 2>&1; then + echo " [*] Service started, PID: $(pgrep nvidia-gridd)" + else + echo -e " [!] Error while starting nvidia-gridd service. Use strace -f nvidia-gridd to debug.\n [i] Check if elfutils is installed.\n [i] strace is not installed by default." + exit 1 + fi + else + sh /usr/lib/nvidia/sysv/nvidia-gridd start + + if pgrep nvidia-gridd >/dev/null 2>&1; then + echo " [*] Service started, PID: $(pgrep nvidia-gridd)" + else + echo -e " [!] Error while starting nvidia-gridd service. Use strace -f nvidia-gridd to debug.\n [i] Check if elfutils is installed.\n [i] strace is not installed by default." + exit 1 + fi + fi +} + +for token in "${TOKEN_PATH}"/*; do + if [ "${token: -4}" == ".tok" ] + then + echo " [*] Tokens found..." + setup_run + else + echo " [!] No Tokens found..." + create_token + setup_run + fi +done + +while true; do + if nvidia-smi -q | grep "Expiry" >/dev/null 2>&1; then + echo " [>] vGPU licensed!" + echo " [i] $(nvidia-smi -q | grep "Expiry")" + break + else + echo -ne " [>] vGPU not licensed yet... Checking again in 5 seconds\c" + for i in {1..5}; do + sleep 1 + echo -ne ".\c" + done + echo -ne "\r\c" + fi +done + +echo " [>] Done..." +exit 0 diff --git a/README.md b/README.md index fe8fae4..d12f5ff 100644 --- a/README.md +++ b/README.md @@ -363,6 +363,8 @@ Start with `systemctl start fastapi-dls.service` and enable autostart with `syst *Unraid users must also make sure they have Host access to custom networks enabled if unraid is the vgpu guest*. +Continue [here](#unraid-guest) for docker guest setup. + ## Let's Encrypt Certificate (optional) If you're using installation via docker, you can use `traefik`. Please refer to their documentation. @@ -482,6 +484,19 @@ vGPU Software Licensed Product Done. For more information check [troubleshoot section](#troubleshoot). +## unRAID Guest + +1. Make sure you create a folder in a linux filesystem (BTRFS/XFS/EXT4...), I recommend `/mnt/user/system/nvidia` (this is where docker and libvirt preferences are saved, so it's a good place to have that) +2. Edit the script to put your `DLS_IP`, `DLS_PORT` and `TOKEN_PATH`, properly +3. Install `User Scripts` plugin from *Community Apps* (the Apps page, or google User Scripts Unraid if you're not using CA) +4. Go to `Settings > Users Scripts > Add New Script` +5. Give it a name (the name must not contain spaces preferably) +6. Click on the *gear icon* to the left of the script name then edit script +7. Paste the script and save +8. Set schedule to `At First Array Start Only` +9. Click on Apply + + # Endpoints ### `GET /` From 6f11bc414c7fa8082a8241aed9e40a2183a1d9a1 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:11:57 +0100 Subject: [PATCH 03/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 93188ca..b6f8463 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,6 +8,7 @@ include: cache: key: one-key-to-rule-them-all +# https://docs.docker.com/build/building/multi-platform/ build:docker: image: docker:dind interruptible: true @@ -21,10 +22,12 @@ build:docker: tags: [ docker ] before_script: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` + - docker buildx ls + - docker buildx inspect script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker build . --tag $IMAGE + - docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . --tag $IMAGE - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From c8e5676c01354987ae25118affe0afb1b8cb057c Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:17:31 +0100 Subject: [PATCH 04/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b6f8463..2006868 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,6 +24,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect + - docker buildx create –use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From c8e000eb3e81a25bd1d402a95218946d99ba298a Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:22:51 +0100 Subject: [PATCH 05/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2006868..b643d0d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -8,7 +8,6 @@ include: cache: key: one-key-to-rule-them-all -# https://docs.docker.com/build/building/multi-platform/ build:docker: image: docker:dind interruptible: true @@ -24,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –use + - docker buildx create –use docker script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From 6395214fa0fece014a25a4a407c4674f91bb6450 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:24:40 +0100 Subject: [PATCH 06/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b643d0d..01ccd9d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –use docker + - docker buildx create –-use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From 89704bc2a1c4d6a6138e7fb29748a57189f18310 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:35:27 +0100 Subject: [PATCH 07/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 01ccd9d..30e95a6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –-use + - docker buildx create –-use tcp://docker:2375 script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From 04ff36c94d96ba3c1fe749e4ebd5781950a4a9ba Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 08:36:34 +0100 Subject: [PATCH 08/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 30e95a6..aa8df78 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -23,7 +23,7 @@ build:docker: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx ls - docker buildx inspect - - docker buildx create –-use tcp://docker:2375 + - docker buildx create --use tcp://docker:2375 script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF From e200c84345bf2260b868ac69f8af1ab0609c1bab Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 11:10:53 +0100 Subject: [PATCH 09/25] improvements --- .gitlab-ci.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index aa8df78..31492e5 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -21,14 +21,13 @@ build:docker: tags: [ docker ] before_script: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - - docker buildx ls - docker buildx inspect - - docker buildx create --use tcp://docker:2375 + - docker buildx create --use # tcp://docker:2375 script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 . --tag $IMAGE - - docker push $IMAGE + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . +# - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: reports: From 995b94413583a62dabdfd7672ffb44478976bcb3 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Thu, 23 Mar 2023 11:46:17 +0100 Subject: [PATCH 10/25] removed "linux/arm/v7" --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 31492e5..c046d35 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -22,11 +22,11 @@ build:docker: before_script: - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx inspect - - docker buildx create --use # tcp://docker:2375 + - docker buildx create --use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . # - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 3d9e3cb88fe782687083f40a54467212dc036158 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 07:48:35 +0100 Subject: [PATCH 11/25] set specific arm64 version to v8 --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c046d35..80c0470 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,7 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE --push . # - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 593db0e78984b9bb663ccef3e3a4f7926563a1fa Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 08:43:29 +0100 Subject: [PATCH 12/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 80c0470..3a99f56 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,8 +26,8 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE --push . -# - docker push $IMAGE + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE . # --push + - docker push $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: reports: From 76d8753f2892e854545911f9b72e2d5652e0a739 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 09:07:49 +0100 Subject: [PATCH 13/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3a99f56..108fa9b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,8 +26,9 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64/v8 --tag $IMAGE . # --push + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --output type=docker . # --push - docker push $IMAGE + - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: reports: From f72c0f7db3e170e7de452b9c7280ece646d719ea Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 09:11:26 +0100 Subject: [PATCH 14/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 108fa9b..007f8ca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,8 +26,7 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --output type=docker . # --push - - docker push $IMAGE + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 7b7f14bd8231e9138de6103457c52844c7a33c4d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 09:31:27 +0100 Subject: [PATCH 15/25] Aktualisieren .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 007f8ca..e115cce 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -26,7 +26,7 @@ build:docker: script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64,linux/arm/v7 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: From 9d1422cbdfe034ee02d87591b2ddcab4614c26e0 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 10:00:25 +0100 Subject: [PATCH 16/25] secret detection --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e115cce..843e12f 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -219,6 +219,8 @@ secret_detection: - if: $SECRET_DETECTION_DISABLED when: never - if: $CI_PIPELINE_SOURCE == "merge_request_event" + before_script: + - git config --global --add safe.directory $CI_PROJECT_DIR semgrep-sast: rules: From 04a1ee0948408ddd580bccb6e469db13718b8329 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Fri, 24 Mar 2023 14:28:44 +0100 Subject: [PATCH 17/25] added Roadmap --- README.md | 6 +++--- ROADMAP.md | 25 +++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 ROADMAP.md diff --git a/README.md b/README.md index d12f5ff..009600f 100644 --- a/README.md +++ b/README.md @@ -9,9 +9,9 @@ Only the clients need a connection to this service on configured port. **Official Links** -- https://git.collinwebdesigns.de/oscar.krause/fastapi-dls -- https://gitea.publichub.eu/oscar.krause/fastapi-dls -- Docker Image `collinwebdesigns/fastapi-dls:latest` +- https://git.collinwebdesigns.de/oscar.krause/fastapi-dls (Private Git) +- https://gitea.publichub.eu/oscar.krause/fastapi-dls (Public Git) +- https://hub.docker.com/r/collinwebdesigns/fastapi-dls (Docker-Hub `collinwebdesigns/fastapi-dls:latest`) *All other repositories are forks! (which is no bad - just for information and bug reports)* diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 0000000..0b3a5a6 --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,25 @@ +# Roadmap + +I'am planning to implement the following features in future. + + +## HA - High Availability + +Support Failover-Mode (secondary ip address) as in official DLS. + +**Note**: There is no Load-Balancing / Round-Robin HA Mode supported! If you want to use that, consider to use Docker-Swarm with shared/cluster database (e.g. postgres). + +*See [ha branch](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/ha) for current status.* + + +## UI - User Interface + +Add a user interface to manage origins and leases. + +*See [ui branch](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/ui) for current status.* + + +## Config Database + +Instead of using environment variables, configuration files and manually create certificates, store cofigs and certificates in databse (like origins and leases). Also there sould be provided a startup assistand to prefill required attributes and create instance-certificates. +This is more user friendly and should improve setup. From d2e4042932e1ddbe938b5790148cb57ac360d92d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Sat, 1 Apr 2023 23:20:06 +0200 Subject: [PATCH 18/25] added 15.2 to supported versions --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 009600f..1bb4c15 100644 --- a/README.md +++ b/README.md @@ -415,6 +415,7 @@ Successfully tested with this package versions: | vGPU Suftware | vGPU Manager | Linux Driver | Windows Driver | Release Date | |---------------|--------------|--------------|----------------|---------------| +| `15.2` | `525.105.14` | `525.105.17` | `528.89` | March 2023 | | `15.1` | `525.85.07` | `525.85.05` | `528.24` | January 2023 | | `15.0` | `525.60.12` | `525.60.13` | `527.41` | December 2022 | | `14.4` | `510.108.03` | `510.108.03` | `514.08` | December 2022 | From b216dcb3dd21704108d33753f3a86a312326ebe2 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 17 Apr 2023 10:35:08 +0200 Subject: [PATCH 19/25] fixed nvidia-smi path on windows --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1bb4c15..49b2bcf 100644 --- a/README.md +++ b/README.md @@ -473,7 +473,7 @@ Restart-Service NVDisplay.ContainerLocalSystem Check licensing status: ```shell -& 'C:\Program Files\NVIDIA Corporation\NVSMI\nvidia-smi.exe' -q | Select-String "License" +& 'nvidia-smi' -q | Select-String "License" ``` Output should be something like: From c9c73f6cf23fc39e3ddeeb89eb3afdd58e32a398 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 17 Apr 2023 10:35:23 +0200 Subject: [PATCH 20/25] updated docker image requirements.txt --- requirements.txt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/requirements.txt b/requirements.txt index a1838b5..626f31d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ -fastapi==0.92.0 -uvicorn[standard]==0.20.0 +fastapi==0.95.1 +uvicorn[standard]==0.21.1 python-jose==3.3.0 pycryptodome==3.17 python-dateutil==2.8.2 -sqlalchemy==2.0.3 -markdown==3.4.1 -python-dotenv==0.21.1 +sqlalchemy==2.0.9 +markdown==3.4.3 +python-dotenv==1.0.0 From d1a77df0e1a8dc89c42cfa3d3d8bd1b1f1ca4ab0 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 17 Apr 2023 10:58:25 +0200 Subject: [PATCH 21/25] updated sudo / su commands (list sudo fist instead of su) --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 49b2bcf..b972c92 100644 --- a/README.md +++ b/README.md @@ -145,9 +145,9 @@ This is only to test whether the service starts successfully. ```shell cd /opt/fastapi-dls/app -su - www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" +sudo -u www-data /opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app # or -sudo -u www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" +su - www-data -c "/opt/fastapi-dls/venv/bin/uvicorn main:app --app-dir=/opt/fastapi-dls/app" ``` **Create config file** @@ -247,6 +247,8 @@ This is only to test whether the service starts successfully. BASE_DIR=/opt/fastapi-dls SERVICE_USER=dls cd ${BASE_DIR} +sudo -u ${SERVICE_USER} ${BASE_DIR}/venv/bin/uvicorn main:app --app-dir=${BASE_DIR}/app +# or su - ${SERVICE_USER} -c "${BASE_DIR}/venv/bin/uvicorn main:app --app-dir=${BASE_DIR}/app" ``` From 774a1c21a149d50a6f773878de87a843199c1949 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 9 May 2023 06:57:03 +0200 Subject: [PATCH 22/25] improved docker build with "ARG" instead of using "version.env" which is not present on local builds (because it's created by ci-pipeline) --- .gitlab-ci.yml | 26 +++++++++++++------------- Dockerfile | 5 ++++- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 843e12f..69d8ba9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,13 +20,12 @@ build:docker: - if: $CI_PIPELINE_SOURCE == 'merge_request_event' tags: [ docker ] before_script: - - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env # COMMIT=`git rev-parse HEAD` - docker buildx inspect - docker buildx create --use script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF - - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --tag $IMAGE --push . + - docker buildx build --progress=plain --platform linux/amd64,linux/arm64 --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE --push . - docker buildx imagetools inspect $IMAGE - echo "CS_IMAGE=$IMAGE" > container_scanning.env artifacts: @@ -266,21 +265,22 @@ deploy:docker: extends: .deploy stage: deploy before_script: - - echo -e "VERSION=$CI_BUILD_REF_NAME\nCOMMIT=$CI_COMMIT_SHA" > version.env - echo "Building docker image for commit $CI_COMMIT_SHA with version $CI_BUILD_REF_NAME" script: - - echo "GitLab-Registry" + - echo "========== GitLab-Registry ==========" - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - - docker build . --tag $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF_NAME - - docker build . --tag $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:latest - - docker push $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:$CI_BUILD_REF_NAME - - docker push $CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME:latest - - echo "Docker-Hub" + - IMAGE=$CI_REGISTRY/$CI_PROJECT_PATH/$CI_BUILD_REF_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_BUILD_REF_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest + - docker push $IMAGE:$CI_BUILD_REF_NAME + - docker push $IMAGE:latest + - echo "========== Docker-Hub ==========" - docker login -u $PUBLIC_REGISTRY_USER -p $PUBLIC_REGISTRY_TOKEN - - docker build . --tag $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME - - docker build . --tag $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:latest - - docker push $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME - - docker push $PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME:latest + - IMAGE=$PUBLIC_REGISTRY_USER/$CI_PROJECT_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:$CI_BUILD_REF_NAME + - docker build . --build-arg VERSION=$CI_BUILD_REF_NAME --build-arg COMMIT=$CI_COMMIT_SHA --tag $IMAGE:latest + - docker push $IMAGE:$CI_BUILD_REF_NAME + - docker push $IMAGE:latest deploy:apt: # doc: https://git.collinwebdesigns.de/help/user/packages/debian_repository/index.md#install-a-package diff --git a/Dockerfile b/Dockerfile index e92f5dc..99c76bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,9 @@ FROM python:3.11-alpine +ARG VERSION +ARG COMMIT="" +RUN echo -e "VERSION=$VERSION\nCOMMIT=$COMMIT" > /version.env + COPY requirements.txt /tmp/requirements.txt RUN apk update \ @@ -11,7 +15,6 @@ RUN apk update \ && apk del build-deps COPY app /app -COPY version.env /version.env COPY README.md /README.md HEALTHCHECK --start-period=30s --interval=10s --timeout=5s --retries=3 CMD curl --insecure --fail https://localhost/-/health || exit 1 From 6a5d3cb2f777d82d1a5a4fa5c1ee9712813f4e0d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 9 May 2023 06:57:17 +0200 Subject: [PATCH 23/25] requirements.txt updated --- requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 626f31d..2aaec8d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ fastapi==0.95.1 -uvicorn[standard]==0.21.1 +uvicorn[standard]==0.22.0 python-jose==3.3.0 pycryptodome==3.17 python-dateutil==2.8.2 -sqlalchemy==2.0.9 +sqlalchemy==2.0.12 markdown==3.4.3 python-dotenv==1.0.0 From 14cf6a953fc46f9cafbd9818214201f6248c58b8 Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Tue, 9 May 2023 06:58:51 +0200 Subject: [PATCH 24/25] typos --- ROADMAP.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 0b3a5a6..60e0a87 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,13 +1,14 @@ # Roadmap -I'am planning to implement the following features in future. +I am planning to implement the following features in the future. ## HA - High Availability Support Failover-Mode (secondary ip address) as in official DLS. -**Note**: There is no Load-Balancing / Round-Robin HA Mode supported! If you want to use that, consider to use Docker-Swarm with shared/cluster database (e.g. postgres). +**Note**: There is no Load-Balancing / Round-Robin HA Mode supported! If you want to use that, consider to use +Docker-Swarm with shared/cluster database (e.g. postgres). *See [ha branch](https://git.collinwebdesigns.de/oscar.krause/fastapi-dls/-/tree/ha) for current status.* @@ -21,5 +22,6 @@ Add a user interface to manage origins and leases. ## Config Database -Instead of using environment variables, configuration files and manually create certificates, store cofigs and certificates in databse (like origins and leases). Also there sould be provided a startup assistand to prefill required attributes and create instance-certificates. -This is more user friendly and should improve setup. +Instead of using environment variables, configuration files and manually create certificates, store configs and +certificates in database (like origins and leases). Also, there should be provided a startup assistant to prefill +required attributes and create instance-certificates. This is more user-friendly and should improve fist setup. From 98da86fc2e9fa89b0ef0482c35a0103d7e3f170d Mon Sep 17 00:00:00 2001 From: Oscar Krause Date: Mon, 12 Jun 2023 09:31:43 +0200 Subject: [PATCH 25/25] removed debian bookworm testing notes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b972c92..4d78b1e 100644 --- a/README.md +++ b/README.md @@ -310,7 +310,7 @@ Packages are available here: Successful tested with: -- Debian 12 (Bookworm) (works but not recommended because it is currently in *testing* state) +- Debian 12 (Bookworm) - Ubuntu 22.10 (Kinetic Kudu) Not working with: