From 84f386a358241f9483f3eefe0783365652613801 Mon Sep 17 00:00:00 2001 From: Morgan Wattiez Date: Tue, 29 Apr 2025 21:44:04 +0200 Subject: [PATCH] wip: slskd --- CloudronManifest.json | 27 +++++++---- Dockerfile.cloudron | 103 +++++++++++++----------------------------- build.sh | 17 +++---- dev.sh | 18 ++++---- logo.png | Bin 0 -> 1727 bytes slskd.yml.example | 30 ++++++++++++ start.sh | 46 +++++++------------ 7 files changed, 111 insertions(+), 130 deletions(-) create mode 100644 logo.png create mode 100644 slskd.yml.example diff --git a/CloudronManifest.json b/CloudronManifest.json index 083d337..089b45a 100644 --- a/CloudronManifest.json +++ b/CloudronManifest.json @@ -1,18 +1,25 @@ { - "id": "org.zoemp.zikkenek", - "title": "Zikkenek Soulseek", - "author": "Morgan Wattiez", + "id": "org.zoemp.slskd", + "title": "slskd", + "author": "Morgan", "description": "file://DESCRIPTION.md", - "changelog": "Initial release.", - "tagline": "Soulseek client packaged for Cloudron", + "changelog": "file://CHANGELOG.md", + "tagline": "A modern client-server application for the Soulseek file-sharing network.", "version": "1.0.0", - "healthCheckPath": "/", - "httpPort": 6080, + "healthCheckPath": "/health", + "httpPort": 5030, "addons": { - "localstorage": {}, - "sendmail": {} + "localstorage": {} }, "manifestVersion": 2, - "minBoxVersion": "9.0.0" + "website": "https://zoemp.be/slskd", + "contactEmail": "morgan@zoemp.be", + "icon": "file://logo.png", + "tags": [ + "file sharing", + "chat", + "music" + ], + "minBoxVersion": "8.3.1" } diff --git a/Dockerfile.cloudron b/Dockerfile.cloudron index 4dbefaa..255b886 100644 --- a/Dockerfile.cloudron +++ b/Dockerfile.cloudron @@ -1,74 +1,35 @@ -FROM ubuntu:20.04 AS builder -ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y curl ca-certificates xz-utils binutils patch && rm -rf /var/lib/apt/lists/* +# syntax=docker/dockerfile:1 +FROM debian:bookworm-slim AS downloader +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + curl ca-certificates unzip jq \ + && rm -rf /var/lib/apt/lists/* WORKDIR /tmp -# Récupérer l'AppImage avec l'URL fournie -RUN curl -fL# 'https://drive.usercontent.google.com/download?id=1I7v1fh7jXa_YOh_AJ52XqRB3QJlqc1Hi&export=download&authuser=0' -o SoulseekQt-2024-2-4.AppImage && \ - chmod +x SoulseekQt-2024-2-4.AppImage && \ - ./SoulseekQt-2024-2-4.AppImage --appimage-extract && \ - mv squashfs-root /soulseek +ARG TARGETPLATFORM +RUN TAG=$(curl -fsSL https://api.github.com/repos/slskd/slskd/releases/latest \ + | jq -r '.tag_name') \ + && case "${TARGETPLATFORM}" in \ + "linux/amd64") URL="https://github.com/slskd/slskd/releases/download/${TAG}/slskd-${TAG}-linux-x64.zip" ;; \ + "linux/arm64") URL="https://github.com/slskd/slskd/releases/download/${TAG}/slskd-${TAG}-linux-arm64.zip" ;; \ + *) echo "Unsupported PLATFORM: ${TARGETPLATFORM}" >&2; exit 1 ;; \ + esac \ + && curl -fsSL "$URL" -o slskd.zip \ + && unzip slskd.zip -FROM ubuntu:20.04 -ENV LANG=C.UTF-8 -ENV QT_XCB_NO_ACCESS_CONTROL=1 -ENV QT_X11_NO_MITSHM=1 -ENV DISPLAY=:1 -ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y \ - xvfb \ - x11vnc \ - openbox \ - wmctrl \ - websockify \ - ca-certificates \ - curl \ - libegl1-mesa \ - libfontconfig1 \ - libxcb-cursor0 \ - libx11-xcb1 \ - libxcomposite1 \ - libxcursor1 \ - libxi6 \ - libxinerama1 \ - libxrandr2 \ - libxkbcommon-x11-0 \ - libxrender1 \ - libxcb-icccm4 \ - libxcb-image0 \ - libxcb-keysyms1 \ - libxcb-render-util0 \ - libxcb-shape0 \ - libxcb-shm0 \ - libxcb-xfixes0 \ - libxcb-xinerama0 \ - libxcb-xkb1 \ - libxshmfence1 \ - libgl1 \ - libdbus-1-3 \ - libxtst6 \ - libxss1 \ - libxv1 \ - libxvmc1 \ - libxxf86dga1 \ - libxxf86vm1 \ - gosu \ - xauth \ - x11-xserver-utils \ - && rm -rf /var/lib/apt/lists/* -# Créer les répertoires nécessaires -RUN mkdir -p /app/code /app/data /usr/share/novnc -# Télécharger noVNC -RUN curl -fL# "https://github.com/novnc/noVNC/archive/master.tar.gz" -o /tmp/novnc.tar.gz && \ - tar -xf /tmp/novnc.tar.gz --strip-components=1 -C /usr/share/novnc && \ - rm /tmp/novnc.tar.gz -# Copier l'app Soulseek depuis le builder -COPY --from=builder /soulseek /app/code -# Copier nos fichiers Cloudron spécifiques -COPY start.sh /app/code/start.sh -COPY soulseek.conf /app/code/soulseek.conf -# Créer l'utilisateur non-root Cloudron et régler les droits sur les dossiers persistants -RUN useradd -u 1000 -m -d /app/data -s /bin/false cloudron && \ - chown -R cloudron:cloudron /app/code /app/data -EXPOSE 6080 -CMD ["/app/code/start.sh"] +FROM debian:bookworm-slim +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + tini jq ca-certificates gosu libstdc++6 \ + && rm -rf /var/lib/apt/lists/* +RUN mkdir -p /app/code /app/data /run/slskd \ + && useradd -u 1000 -m -d /app/data -s /bin/bash cloudron +COPY --from=downloader /tmp/slskd /app/code/slskd +COPY --from=downloader /tmp/wwwroot /app/code/wwwroot +COPY slskd.yml.example /app/code/slskd.yml.example +COPY start.sh /app/code/start.sh +RUN chmod +x /app/code/slskd /app/code/start.sh \ + && chown -R cloudron:cloudron /app/code /app/data /run/slskd +WORKDIR /app/code +ENTRYPOINT ["/usr/bin/tini", "--"] +CMD ["./start.sh"] diff --git a/build.sh b/build.sh index dd34c1e..a5002a8 100755 --- a/build.sh +++ b/build.sh @@ -1,13 +1,8 @@ -#!/bin/bash -set -x -set -eu +#!/usr/bin/env bash +set -xeuo pipefail -# Construire l'image Docker -docker build --platform linux/amd64 -t dr.zoemp.be/soulseek:$(cat VERSION) -f Dockerfile.cloudron . - -# Pousser l'image vers le registre -docker push dr.zoemp.be/soulseek:$(cat VERSION) - -# Installer l'application sur Cloudron -cloudron update --image dr.zoemp.be/soulseek:$(cat VERSION) --app soulseek +VERSION=$(cat VERSION) +docker build --platform linux/amd64 -t dr.zoemp.be/slskd:${VERSION} -f Dockerfile.cloudron . +docker push dr.zoemp.be/slskd:${VERSION} +cloudron update --image dr.zoemp.be/slskd:${VERSION} --app slskd diff --git a/dev.sh b/dev.sh index 244cd06..b7c2fbc 100755 --- a/dev.sh +++ b/dev.sh @@ -1,11 +1,13 @@ -#!/bin/bash -set -x -set -eu +#!/usr/bin/env bash +set -xeuo pipefail -# Construire l'image Docker -docker build --platform linux/amd64 -t dr.zoemp.be/soulseek:$(cat VERSION) -f Dockerfile.cloudron . +VERSION=$(cat VERSION) +docker build --platform linux/amd64 -t dr.zoemp.be/slskd:${VERSION} -f Dockerfile.cloudron . -# Lancer l'image Docker en mode développement -docker run --platform linux/amd64 --rm -it -v $(pwd)/data:/app/data/ -p 8080:80 dr.zoemp.be/soulseek:$(cat VERSION) -#docker run --rm -it -p 6080:6080 -v /Users/morganwattiez/Code/soulseek/data:/app/data dr.zoemp.be/zikkenek:1.0.0 +# Montez ./data qui doit contenir VOTRE slskd.yml +docker run --rm -it \ + --platform linux/amd64 \ + -v "$(pwd)/data:/app/data" \ + -p 8080:5030 \ + dr.zoemp.be/slskd:${VERSION} diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..04af69d6225acee91b9346bf572b9dd9190834ce GIT binary patch literal 1727 zcmV;w20;0VP)r5V~drIQIZb{b<# zrtLJ3>C_q0QetT#C78q%P)TF3DlmYg#B@X<7zB>v;BN1IySKZYWf{P`g98q8{E^?> zAI$CV@!|LV{vLaHMn(qArGh3J5MI6p#VT_Sgx}HLB?RM>?&9@#2~3JW>LpZ#h$70l zF|UnaJ4yCBA_;dKBod5&(R%;F^+C%T&bUm%C=em)2MKy;YlHgBYIS!tDg>0~$ZRcp z3B`POf6Kjcmw)jl2~~{^EJfFh|DZm*sr9&~`vYWFKqASw);`W=9T0SBBV+I!)!j^W zH#onM3z#Yu=$<-L<1y0J8Tn}1 zAXnC&!5v2>oRKxd#qiPZ!!!Wk&fFuB>d`vmq@3yUG2OMlBNOyL4UmMO_Q#I8*Y5=p zFsD^>fQN|5lziAOke%v z15F7es11G3zQv`l0X}5>@Kt@?UqqEUxNvo9@m?&zM%Gs-O77b?ALA_d0?%2_gB{7W}lN`FkatdqBOt@?py#rHsf7iha0B z7;gR12|jH(2%(gcJVgTl%;&WPJEjR~k|Vd9K+3AYjYj}L*H)r!KQ$FiY|zm5!@(ul zAc48;MNQkev1S6V99wMGlYLMAnKz_|tr|h4wLS6%U?ge#%yjWLQ`E!=nQ!U+?865E zAgSs#U1R0=MGZSU(6sR03ur(aIGSQ6Qa*Uszvez8a=Va{8Y)6YeQG7eDob^uVf z)ZlKr9KMZv2Y3ELuFQwboIWRWtUJ~s88eJXqV%rwzKA=3gN zr>YQyB*u}mBY$V^;=zIg;FQ5;NF2fzvE3Ax7|cNj(KJKRsEmMSTn&4sr4f= zW19VmmjRL2x~{GysrH2Oy=UbXZ{}A0g(A|{;ac~&XU%Q^z+BeU(tYIMjd(QCK?pzc z0??oPCuORbD^;e-SClm+0m9t4sJVJppmg>}e(7EP7)U@`uUg6v5o~Xqn&=?Hb`wH8 zpoFM1g9zl!|E9eCGejD>Yat*ZL9ch&Ci|nW2)g+of~KXy{I8>EC>XycItb+g^#3mT zS8kGr_pz3@oFIz#OCZ%g2h}pqrLoYaQ?EM{8MAER{~HS z_4-eWm}}=Jx);wTNW@8Y%YHd