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:
2026-01-02 05:33:07 +00:00
parent e3e45a17d5
commit 10403723a5
6 changed files with 205 additions and 20 deletions

20
CloudronManifest.json Normal file
View 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
View 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
View File

@@ -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.

View File

@@ -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.

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

32
start.sh Executable file
View 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/