diff --git a/.PKGBUILD/PKGBUILD b/.PKGBUILD/PKGBUILD new file mode 100644 index 0000000..3a2fac0 --- /dev/null +++ b/.PKGBUILD/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: samicrusader +# Maintainer: Oscar Krause + +pkgname=fastapi-dls +pkgver=1.0 +pkgrel=1 +pkgdesc='NVIDIA DLS server implementation with FastAPI' +arch=('any') +url='https://git.collinwebdesigns.de/oscar.krause/fastapi-dls' +license=('MIT') +depends=('python' 'python-jose' 'python-starlette' 'python-httpx' 'python-fastapi' 'python-dotenv' 'python-dateutil' 'python-sqlalchemy' 'python-pycryptodome' 'uvicorn' 'python-markdown' 'openssl') +provider=("$pkgname") +install="$pkgname.install" +source=('git+file:///builds/oscar.krause/fastapi-dls' # https://gitea.publichub.eu/oscar.krause/fastapi-dls.git + "$pkgname.default" + "$pkgname.service") +sha256sums=('SKIP' + 'd8b2216b67a2f8f35ad6f07c825839794f7c34456a72caadd9fc110810348d90' + '10cb98d64f8bf37b11a60510793c187cc664e63c895d1205781c21fa2e703f32') + +check() { + cd "$srcdir/$pkgname/test" + mkdir "$srcdir/$pkgname/app/cert" + openssl genrsa -out "$srcdir/$pkgname/app/cert/instance.private.pem" 2048 + openssl rsa -in "$srcdir/$pkgname/app/cert/instance.private.pem" -outform PEM -pubout -out "$srcdir/$pkgname/app/cert/instance.public.pem" + python "$srcdir/$pkgname/test/main.py" + rm -rf "$srcdir/$pkgname/app/cert" +} + +package() { + install -d "$pkgdir/usr/share/doc/$pkgname" + install -d "$pkgdir/var/lib/$pkgname/cert" + cp -r "$srcdir/$pkgname/doc"/* "$pkgdir/usr/share/doc/$pkgname/" + install -Dm644 "$srcdir/$pkgname/README.md" "$pkgdir/usr/share/doc/$pkgname/README.md" + + sed -i "s/README.md/\/usr\/share\/doc\/$pkgname\/README.md/g" "$srcdir/$pkgname/app/main.py" + sed -i "s/join(dirname(__file__), 'cert\//join('\/var\/lib\/$pkgname', 'cert\//g" "$srcdir/$pkgname/app/main.py" + install -Dm755 "$srcdir/$pkgname/app/main.py" "$pkgdir/opt/$pkgname/main.py" + install -Dm755 "$srcdir/$pkgname/app/orm.py" "$pkgdir/opt/$pkgname/orm.py" + install -Dm644 "$srcdir/$pkgname.default" "$pkgdir/etc/default/$pkgname" + install -Dm644 "$srcdir/$pkgname.service" "$pkgdir/usr/lib/systemd/system/$pkgname.service" +} diff --git a/.PKGBUILD/fastapi-dls.default b/.PKGBUILD/fastapi-dls.default new file mode 100644 index 0000000..079679b --- /dev/null +++ b/.PKGBUILD/fastapi-dls.default @@ -0,0 +1,23 @@ +# Toggle FastAPI debug mode +DEBUG=false + +# Where the client can find the DLS server +## DLS_URL should be a hostname +DLS_URL="localhost.localdomain" +DLS_PORT=8443 +CORS_ORIGINS="https://$DLS_URL:$DLS_PORT" + +# Lease expiration in days +LEASE_EXPIRE_DAYS=90 + +# Database location +## See https://dataset.readthedocs.io/en/latest/quickstart.html for details +DATABASE="sqlite:////var/lib/fastapi-dls/db.sqlite" + +# UUIDs for identifying the instance +SITE_KEY_XID="<>" +INSTANCE_REF="<>" + +# Site-wide signing keys +INSTANCE_KEY_RSA="/var/lib/fastapi-dls/instance.private.pem" +INSTANCE_KEY_PUB="/var/lib/fastapi-dls/instance.public.pem" diff --git a/.PKGBUILD/fastapi-dls.install b/.PKGBUILD/fastapi-dls.install new file mode 100644 index 0000000..17ad880 --- /dev/null +++ b/.PKGBUILD/fastapi-dls.install @@ -0,0 +1,14 @@ +post_install() { + sed -i "s/<>/$(uuidgen)/" /etc/default/fastapi-dls + sed -i "s/<>/$(uuidgen)/" /etc/default/fastapi-dls + + echo 'The environment variables for this server can be edited at: /etc/default/fastapi-dls' + echo 'The server can be started with: systemctl start fastapi-dls.service' + echo + echo 'A valid HTTPS certificate needs to be installed to /var/lib/fastapi-dls/cert/webserver.{crt,key}' + echo 'A self-signed certificate can be generated with: openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /var/lib/fastapi-dls/cert/webserver.key -out /var/lib/fastapi-dls/cert/webserver.crt' + echo + echo 'The signing keys for your instance need to be generated as well. Generate them with these commands:' + echo 'openssl genrsa -out /var/lib/fastapi-dls/instance.private.pem 2048' + echo 'openssl rsa -in /var/lib/fastapi-dls/instance.private.pem -outform PEM -pubout -out /var/lib/fastapi-dls/instance.public.pem' +} diff --git a/.PKGBUILD/fastapi-dls.service b/.PKGBUILD/fastapi-dls.service new file mode 100644 index 0000000..1bca7b7 --- /dev/null +++ b/.PKGBUILD/fastapi-dls.service @@ -0,0 +1,15 @@ +[Unit] +Description=FastAPI-DLS +Documentation=https://git.collinwebdesigns.de/oscar.krause/fastapi-dls +After=network.target + +[Service] +Type=forking +EnvironmentFile=/etc/default/fastapi-dls +ExecStart=/usr/bin/python /opt/fastapi-dls/main.py +WorkingDir=/opt/fastapi-dls +Restart=on-abort +User=root + +[Install] +WantedBy=multi-user.target diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3cbaa87..f7abf00 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -15,13 +15,11 @@ build:docker: - docker build . --tag ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:${CI_BUILD_REF} - docker push ${CI_REGISTRY}/${CI_PROJECT_PATH}/${CI_BUILD_REF_NAME}:${CI_BUILD_REF} -build:package: - # debian:bullseye-slim +build:apt: image: debian:bookworm-slim # just to get "python3-jose" working stage: build before_script: - apt-get update -qq && apt-get install -qq -y build-essential - - chmod 0755 -R . # create build directory for .deb sources - mkdir build # copy install instructions @@ -42,6 +40,31 @@ build:package: paths: - build/build.deb +build:pamac: + image: archlinux:base-devel + stage: build + rules: + - if: $CI_COMMIT_BRANCH == "archlinux-makepkg" + before_script: + - pacman -Syu --noconfirm git + # "makepkg" don't likes root user + - useradd --no-create-home --shell=/bin/false build && usermod -L build + - 'echo "build ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers' + - 'echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers' + - chown -R build:build . + # move .PKGBUILD contents to root directory + - mv .PKGBUILD/* . + script: + - pwd + # download dependencies + - source PKGBUILD && pacman -Syu --noconfirm --needed --asdeps "${makedepends[@]}" "${depends[@]}" + # build + - sudo -u build makepkg -s + artifacts: + expire_in: 1 week + paths: + - "*.pkg.tar.zst" + test: image: python:3.10-slim-bullseye stage: test @@ -60,7 +83,7 @@ test: .test:linux: stage: test needs: - - job: build:package + - job: build:apt artifacts: true variables: DEBIAN_FRONTEND: noninteractive @@ -120,7 +143,7 @@ deploy:docker: - docker push $PUBLIC_REGISTRY_USER/${CI_PROJECT_NAME}:${VERSION} - docker push $PUBLIC_REGISTRY_USER/${CI_PROJECT_NAME}:latest -deploy:debian: +deploy:apt: # doc: https://git.collinwebdesigns.de/help/user/packages/debian_repository/index.md#install-a-package image: debian:bookworm-slim stage: deploy @@ -130,7 +153,7 @@ deploy:debian: - .DEBIAN/**/* - app/**/* needs: - - job: build:package + - job: build:apt artifacts: true before_script: - apt-get update -qq && apt-get install -qq -y curl lsb-release