Initial Whisparr Cloudron app implementation
- Created Dockerfile with multi-stage build using thespad/whisparr image - Added CloudronManifest.json with proper configuration (port 6969) - Created start.sh script to launch Whisparr - Added README.md with installation instructions - Copied all required musl-compatible libraries: - musl libc dynamic linker - C++ standard library (libstdc++) - GCC support library (libgcc_s) - ICU libraries for .NET globalization - OpenSSL libraries for HTTPS/TLS - SQLite library for database operations - Brotli compression libraries - zlib library - Configured for amd64 architecture (Cloudron compatible)
This commit is contained in:
20
CloudronManifest.json
Normal file
20
CloudronManifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"id": "whisparr.com",
|
||||
"title": "Whisparr",
|
||||
"author": "Jean-Benoît RICHEZ <jeanbenoit-richez@outlook.com>",
|
||||
"description": "Whisparr is an adult movie collection manager for Usenet and BitTorrent users",
|
||||
"tagline": "A great beginning",
|
||||
"version": "0.0.1",
|
||||
"healthCheckPath": "/",
|
||||
"httpPort": 6969,
|
||||
"addons": {
|
||||
"localstorage": {}
|
||||
},
|
||||
"manifestVersion": 2,
|
||||
"website": "https://whisparr.com",
|
||||
"contactEmail": "support@cloudron.io",
|
||||
"icon": "file://icon.png",
|
||||
"tags": [ "media", "movies", "adult" ],
|
||||
"mediaLinks": [ "https://whisparr.com" ]
|
||||
}
|
||||
|
||||
83
Dockerfile
Normal file
83
Dockerfile
Normal file
@@ -0,0 +1,83 @@
|
||||
# Stage 1: Extract Whisparr binaries from available Docker image
|
||||
# Default to linux/amd64 for Cloudron compatibility, but allow override
|
||||
ARG TARGETPLATFORM=linux/amd64
|
||||
ARG BUILDPLATFORM
|
||||
# Explicitly use linux/amd64 to ensure correct architecture
|
||||
FROM --platform=linux/amd64 thespad/whisparr:latest AS whisparr-source
|
||||
|
||||
# Stage 2: Build the Cloudron image
|
||||
# Use explicit amd64 to match the source image
|
||||
FROM --platform=linux/amd64 cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
|
||||
|
||||
RUN apt-get update -y && \
|
||||
apt install -y curl sqlite3 dpkg file libstdc++6 libgcc-s1 libicu-dev
|
||||
|
||||
RUN mkdir -p /app/code/whisparr
|
||||
WORKDIR /app/code
|
||||
|
||||
# Copy Whisparr binaries from the source image
|
||||
# Most Whisparr Docker images have the binary in /app/whisparr
|
||||
COPY --from=whisparr-source /app/whisparr /app/code/whisparr
|
||||
|
||||
# Copy musl libc dynamic linker from the source image
|
||||
# Whisparr binary uses musl libc which is not in the Cloudron base image (which uses glibc)
|
||||
RUN mkdir -p /lib /usr/lib
|
||||
COPY --from=whisparr-source /lib/ld-musl-x86_64.so.1 /lib/ld-musl-x86_64.so.1
|
||||
# Create the symlink for libc.musl (it's a symlink to ld-musl in the source)
|
||||
RUN ln -sf /lib/ld-musl-x86_64.so.1 /lib/libc.musl-x86_64.so.1
|
||||
|
||||
# Copy musl-compatible C++ standard library and GCC support library from source image
|
||||
# These are musl-linked versions needed by the Whisparr binary
|
||||
COPY --from=whisparr-source /usr/lib/libstdc++.so.6.0.33 /usr/lib/libstdc++.so.6.0.33
|
||||
COPY --from=whisparr-source /usr/lib/libgcc_s.so.1 /usr/lib/libgcc_s.so.1
|
||||
# Create symlinks if needed
|
||||
RUN if [ ! -f /usr/lib/libstdc++.so.6 ]; then \
|
||||
ln -sf /usr/lib/libstdc++.so.6.0.33 /usr/lib/libstdc++.so.6; \
|
||||
fi
|
||||
|
||||
# Copy ICU libraries from source image (required by .NET applications)
|
||||
COPY --from=whisparr-source /usr/lib/libicudata.so.76.1 /usr/lib/libicudata.so.76.1
|
||||
COPY --from=whisparr-source /usr/lib/libicui18n.so.76.1 /usr/lib/libicui18n.so.76.1
|
||||
COPY --from=whisparr-source /usr/lib/libicuio.so.76.1 /usr/lib/libicuio.so.76.1
|
||||
COPY --from=whisparr-source /usr/lib/libicuuc.so.76.1 /usr/lib/libicuuc.so.76.1
|
||||
COPY --from=whisparr-source /usr/share/icu /usr/share/icu
|
||||
# Create symlinks for ICU libraries
|
||||
RUN ln -sf /usr/lib/libicudata.so.76.1 /usr/lib/libicudata.so.76 && \
|
||||
ln -sf /usr/lib/libicui18n.so.76.1 /usr/lib/libicui18n.so.76 && \
|
||||
ln -sf /usr/lib/libicuio.so.76.1 /usr/lib/libicuio.so.76 && \
|
||||
ln -sf /usr/lib/libicuuc.so.76.1 /usr/lib/libicuuc.so.76
|
||||
|
||||
# Copy OpenSSL libraries from source image (required by .NET applications for HTTPS/TLS)
|
||||
COPY --from=whisparr-source /usr/lib/libssl.so.3 /usr/lib/libssl.so.3
|
||||
COPY --from=whisparr-source /usr/lib/libcrypto.so.3 /usr/lib/libcrypto.so.3
|
||||
|
||||
# Copy SQLite library from source image (required for database operations)
|
||||
COPY --from=whisparr-source /usr/lib/libsqlite3.so.3.49.2 /usr/lib/libsqlite3.so.3.49.2
|
||||
RUN ln -sf /usr/lib/libsqlite3.so.3.49.2 /usr/lib/libsqlite3.so.0
|
||||
|
||||
# Copy Brotli compression libraries from source image (required for HTTP compression)
|
||||
COPY --from=whisparr-source /usr/lib/libbrotlicommon.so.1.1.0 /usr/lib/libbrotlicommon.so.1.1.0
|
||||
COPY --from=whisparr-source /usr/lib/libbrotlidec.so.1.1.0 /usr/lib/libbrotlidec.so.1.1.0
|
||||
COPY --from=whisparr-source /usr/lib/libbrotlienc.so.1.1.0 /usr/lib/libbrotlienc.so.1.1.0
|
||||
RUN ln -sf /usr/lib/libbrotlicommon.so.1.1.0 /usr/lib/libbrotlicommon.so.1 && \
|
||||
ln -sf /usr/lib/libbrotlidec.so.1.1.0 /usr/lib/libbrotlidec.so.1 && \
|
||||
ln -sf /usr/lib/libbrotlienc.so.1.1.0 /usr/lib/libbrotlienc.so.1
|
||||
|
||||
# Copy zlib library from source image (required by libSystem.IO.Compression.Native)
|
||||
COPY --from=whisparr-source /usr/lib/libz.so.1.3.1 /usr/lib/libz.so.1.3.1
|
||||
RUN ln -sf /usr/lib/libz.so.1.3.1 /usr/lib/libz.so.1
|
||||
|
||||
# Verify the binary exists and set permissions
|
||||
RUN if [ -f /app/code/whisparr/bin/Whisparr ]; then \
|
||||
file /app/code/whisparr/bin/Whisparr || echo "file command not available"; \
|
||||
chmod +x /app/code/whisparr/bin/Whisparr; \
|
||||
fi && \
|
||||
chmod +x /lib/ld-musl-x86_64.so.1 && \
|
||||
chmod +x /lib/libc.musl-x86_64.so.1 && \
|
||||
chmod +x /app/code/whisparr/bin/libSystem.IO.Compression.Native.so 2>/dev/null || true
|
||||
|
||||
COPY start.sh /app/code/
|
||||
RUN chown -R cloudron:cloudron /app/code/whisparr && \
|
||||
chmod +x /app/code/whisparr/bin/Whisparr 2>/dev/null || true
|
||||
|
||||
CMD [ "/app/code/start.sh" ]
|
||||
18
LICENSE
18
LICENSE
@@ -1,18 +0,0 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 bradinfluence
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
|
||||
associated documentation files (the "Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the
|
||||
following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial
|
||||
portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
||||
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
|
||||
EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
72
README.md
72
README.md
@@ -1,3 +1,71 @@
|
||||
# cloudron-whisparr
|
||||
# Whisparr Cloudron App
|
||||
|
||||
Whisparr is an adult movie collection manager for Usenet and BitTorrent users, similar to Radarr but for adult content.
|
||||
|
||||
## Installation
|
||||
|
||||
### Prerequisites
|
||||
|
||||
You need to install Cloudron CLI: [here](https://docs.cloudron.io/cli/). After you need to connect the CLI to your cloudron instance.
|
||||
|
||||
### Install app
|
||||
|
||||
To install Whisparr, navigate to this directory and run:
|
||||
|
||||
```bash
|
||||
cloudron install --image [DOCKER IMAGE NAME]
|
||||
```
|
||||
|
||||
**Important:** Always install the application with the greatest version image. For example, if `jbrichez/cloudron-whisparr` greatest is `0.5`, install `jbrichez/cloudron-whisparr:0.5` with cloudron cli. If not, cloudron CLI will install the `latest` version which is not valid. Why? Because cloudron internal registry needs a tagged image version other from `latest` to be able to update version when new image is out.
|
||||
|
||||
### Cloudron volumes
|
||||
|
||||
You will need to create:
|
||||
|
||||
* (1) volume as **download folder** for your download client
|
||||
* (2) volume as **your movies library** for Whisparr
|
||||
|
||||
Here is the guide to create cloudron volume: [guide](https://docs.cloudron.io/apps/storage/).
|
||||
|
||||
**I recommend to choose "Filesystem" mount type when you create the volumes.**
|
||||
**⚠️ You need to physically create the folder on host before, cloudron can't create one for you.**
|
||||
|
||||
To connect a volume to a specific app, go to app's settings, then "storage" tab and "mount" options on right panel.
|
||||
|
||||
You will need to:
|
||||
|
||||
* connect (1) and (2) to Whisparr's App.
|
||||
* connect (1) to your download client app (e.g., nzbget, sabnzbd).
|
||||
|
||||
You can mount volumes to app in the app's settings and "storage" tab.
|
||||
|
||||
### Docker network
|
||||
|
||||
You will need to have the internal IP of your container when you will connect services together. To get private IP you need to connect to your VPS.
|
||||
|
||||
Get your container's name:
|
||||
|
||||
```bash
|
||||
docker ps -a
|
||||
```
|
||||
|
||||
Find the cloudron network's name (sometimes: cloudron):
|
||||
|
||||
```bash
|
||||
docker network ls
|
||||
```
|
||||
|
||||
List ip of all containers connected to network:
|
||||
|
||||
```bash
|
||||
docker network inspect cloudron
|
||||
```
|
||||
|
||||
## About
|
||||
|
||||
Whisparr is a fork of Radarr for managing adult movie collections. It works with Usenet and BitTorrent download clients.
|
||||
|
||||
## License
|
||||
|
||||
MIT license
|
||||
|
||||
Whisparr adult movie collection manager. Packaged for Cloudron.
|
||||
32
start.sh
Executable file
32
start.sh
Executable file
@@ -0,0 +1,32 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -eu
|
||||
|
||||
echo "Starting Whisparr..."
|
||||
|
||||
# Find the Whisparr binary (it might be in different locations)
|
||||
WHISPARR_BIN=""
|
||||
|
||||
if [ -f /app/code/whisparr/bin/Whisparr ]; then
|
||||
WHISPARR_BIN="/app/code/whisparr/bin/Whisparr"
|
||||
elif [ -f /app/code/whisparr/Whisparr/Whisparr ]; then
|
||||
WHISPARR_BIN="/app/code/whisparr/Whisparr/Whisparr"
|
||||
elif [ -f /app/code/whisparr/Whisparr ]; then
|
||||
WHISPARR_BIN="/app/code/whisparr/Whisparr"
|
||||
else
|
||||
# Try to find it
|
||||
WHISPARR_BIN=$(find /app/code/whisparr -name "Whisparr" -type f | head -1)
|
||||
fi
|
||||
|
||||
if [ -z "$WHISPARR_BIN" ] || [ ! -f "$WHISPARR_BIN" ]; then
|
||||
echo "Error: Could not find Whisparr binary"
|
||||
echo "Searched in: /app/code/whisparr"
|
||||
find /app/code/whisparr -type f | head -10
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Ensure it's executable
|
||||
chmod +x "$WHISPARR_BIN" 2>/dev/null || true
|
||||
|
||||
echo "Found Whisparr at: $WHISPARR_BIN"
|
||||
exec "$WHISPARR_BIN" -nobrowser -data=/app/data/config/
|
||||
Reference in New Issue
Block a user