-
-
Notifications
You must be signed in to change notification settings - Fork 54
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Working on adding universal-calibre to the CWA image instead of havin…
…g to rely on users adding it via the DOCKER_MODS env variable in their docker-compose files. To accomplish this, a number of oneshot start up services have been added to CWA and the Dockerfile has been modified. Those performing development on the current release version should continue to use the old Dockerfile via Dockerfile-old in the meantime
- Loading branch information
1 parent
96c329a
commit b9764e6
Showing
20 changed files
with
425 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
# syntax=docker/dockerfile:1 | ||
|
||
FROM ghcr.io/linuxserver/unrar:latest AS unrar | ||
FROM ghcr.io/linuxserver/baseimage-ubuntu:jammy | ||
|
||
# Set the default shell for the following RUN instructions to bash instead of sh | ||
SHELL ["/bin/bash", "-c"] | ||
|
||
# Simple Example Build Command: | ||
# docker build \ | ||
# --tag crocodilestick/calibre-web-automated:dev \ | ||
# --build-arg="BUILD_DATE=27-09-2024 12:06" \ | ||
# --build-arg="VERSION=2.1.0-test-5" . | ||
|
||
# Good guide on how to set up a buildx builder here: | ||
# https://a-berahman.medium.com/simplifying-docker-multiplatform-builds-with-buildx-3d7efd670f58 | ||
|
||
# Multi-Platform Example Build & Push Command: | ||
# docker buildx build \ | ||
# --push \ | ||
# --platform linux/amd64,linux/arm64, \ | ||
# --build-arg="BUILD_DATE=02-08-2024 20:52" \ | ||
# --build-arg="VERSION=2.1.0" \ | ||
# --tag crocodilestick/calibre-web-automated:latest . | ||
|
||
ARG BUILD_DATE | ||
ARG VERSION | ||
ARG CALIBREWEB_RELEASE=0.6.23 | ||
ARG LSCW_RELEASE=0.6.23-ls291 | ||
LABEL build_version="Version:- ${VERSION}" | ||
LABEL build_date="${BUILD_DATE}" | ||
LABEL CW-Stock-version="${CALIBREWEB_RELEASE}" | ||
LABEL LSCW_Image_Release="${LSCW_RELEASE}" | ||
LABEL maintainer="CrocodileStick" | ||
|
||
# Copy local files into the container | ||
COPY --chown=abc:abc . /app/calibre-web-automated/ | ||
|
||
# STEP 1 - Install stock Calibre-Web | ||
RUN \ | ||
# STEP 1.1 - Installs required build & runtime packages | ||
echo "**** install build packages ****" && \ | ||
apt-get update && \ | ||
apt-get install -y --no-install-recommends \ | ||
build-essential \ | ||
libldap2-dev \ | ||
libsasl2-dev \ | ||
python3-dev && \ | ||
echo "**** install runtime packages ****" && \ | ||
apt-get install -y --no-install-recommends \ | ||
imagemagick \ | ||
ghostscript \ | ||
libldap-2.5-0 \ | ||
libmagic1 \ | ||
libsasl2-2 \ | ||
libxi6 \ | ||
libxslt1.1 \ | ||
python3-venv && \ | ||
echo "**** install calibre-web ****" && \ | ||
# STEP 1.2 - Check that $CALIBREWEB_RELEASE ARG is not none and if it is, sets the variables value to the most recent tag name | ||
if [ -z ${CALIBREWEB_RELEASE+x} ]; then \ | ||
CALIBREWEB_RELEASE=$(curl -sX GET "https://api.github.com/repos/janeczku/calibre-web/releases/latest" \ | ||
| awk '/tag_name/{print $4;exit}' FS='[""]'); \ | ||
fi && \ | ||
# STEP 1.3 - Downloads the tarball of the release stored in $CALIBREWEB_RELEASE from CW's GitHub Repo, saving it into /tmp | ||
curl -o \ | ||
/tmp/calibre-web.tar.gz -L \ | ||
https://github.com/janeczku/calibre-web/archive/${CALIBREWEB_RELEASE}.tar.gz && \ | ||
# STEP 1.4 - Makes /app/calibre-web to extract the downloaded files from the repo to, -p to ignore potential errors that could arise if the folder already existed | ||
mkdir -p \ | ||
/app/calibre-web && \ | ||
# STEP 1.5 - Extracts the contents of the tar.gz file downloaded from the repo to the /app/calibre-web dir previously created | ||
tar xf \ | ||
/tmp/calibre-web.tar.gz -C \ | ||
/app/calibre-web --strip-components=1 && \ | ||
# STEP 1.6 - Sets up a python virtual enviroment and installs pip and wheel packages | ||
cd /app/calibre-web && \ | ||
python3 -m venv /lsiopy && \ | ||
pip install -U --no-cache-dir \ | ||
pip \ | ||
wheel && \ | ||
# STEP 1.7 - Installing the required python packages listed in 'requirements.txt' and 'optional-requirements.txt' | ||
# HOWEVER, they are not pulled from PyPi directly, they are pulled from linuxserver's Ubuntu Wheel Index | ||
# This is essentially a repository of precompiled some of the most popular packages with C/C++ source code | ||
# This provides the install maximum compatibility with multiple different architectures including: x86_64, armv71 and aarch64 | ||
# You can read more about python wheels here: https://realpython.com/python-wheels/ | ||
pip install -U --no-cache-dir --find-links https://wheel-index.linuxserver.io/ubuntu/ -r \ | ||
requirements.txt -r \ | ||
optional-requirements.txt && \ | ||
# STEP 1.8 - Installs the latest release of kepubify | ||
echo "***install kepubify" && \ | ||
if [ -z ${KEPUBIFY_RELEASE+x} ]; then \ | ||
KEPUBIFY_RELEASE=$(curl -sX GET "https://api.github.com/repos/pgaskin/kepubify/releases/latest" \ | ||
| awk '/tag_name/{print $4;exit}' FS='[""]'); \ | ||
fi && \ | ||
curl -o \ | ||
/usr/bin/kepubify -L \ | ||
https://github.com/pgaskin/kepubify/releases/download/${KEPUBIFY_RELEASE}/kepubify-linux-64bit && \ | ||
# STEP 2 - Install Calibre-Web Automated | ||
echo "~~~~ CWA Install - installing additional required packages ~~~~" && \ | ||
# STEP 2.1 - Install additional required packages | ||
apt-get update && \ | ||
apt-get install -y --no-install-recommends \ | ||
xdg-utils \ | ||
inotify-tools \ | ||
python3 \ | ||
python3-pip \ | ||
nano \ | ||
sqlite3 && \ | ||
# STEP 2.2 - Install additional required python packages | ||
pip install -r /app/calibre-web-automated/requirements.txt && \ | ||
# STEP 2.3 - Get required 'root' dir from the linuxserver/docker-calibre-web repo | ||
echo "~~~~ Getting required files from linuxserver/docker-calibre-web... ~~~~" && \ | ||
# STEP 2.4.1 - Check the most recent release of linuxserver/docker-calibre-web and store it's tag in LSCW_RELEASE if one was not specified as an ARG | ||
if [[ $LSCW_RELEASE == 'newest' ]]; then \ | ||
LSCW_RELEASE=$(curl -sX GET "https://api.github.com/repos/linuxserver/docker-calibre-web/releases/latest" \ | ||
| awk '/tag_name/{print $4;exit}' FS='[""]'); \ | ||
fi && \ | ||
# STEP 2.4.2 - Download the most recent LSCW release to /tmp | ||
curl -o \ | ||
/tmp/lscw.tar.gz -L \ | ||
https://github.com/linuxserver/docker-calibre-web/archive/refs/tags/${LSCW_RELEASE}.tar.gz && \ | ||
# STEP 2.4.3 - Makes /app/calibre-web to extract the downloaded files from the repo to, -p to ignore potential errors that could arise if the folder already existed | ||
mkdir -p \ | ||
/tmp/lscw && \ | ||
# STEP 2.4.4 - Extract contents of lscw.tat.gz to /tmp/lscw | ||
tar xf \ | ||
/tmp/lscw.tar.gz -C \ | ||
/tmp/lscw --strip-components=1 && \ | ||
# STEP 2.4.5 - Move contents of 'root' dirs to root dir | ||
cp -R /tmp/lscw/root/* / && \ | ||
cp -R /app/calibre-web-automated/root/* / && \ | ||
rm -R /app/calibre-web-automated/root/ && \ | ||
rm -R /tmp/lscw/root/ && \ | ||
# STEP 2.5 - ADD files referencing the verisons of the installed main packages | ||
# CALIRBE_RELEASE already exists at root and stock CW already has a method of determiniing it's verison built in | ||
echo "$VERSION" >| /app/CWA_RELEASE && \ | ||
echo "$LSCW_RELEASE" >| /app/LSCW_RELEASE && \ | ||
echo "$KEPUBIFY_RELEASE" >| /app/KEPUBIFY_RELEASE && \ | ||
# STEP 2.6 - Run CWA install script to make required dirs, set script permissions and add alliases for CLI commands ect. | ||
chmod +x /app/calibre-web-automated/scripts/setup-cwa.sh && \ | ||
/app/calibre-web-automated/scripts/setup-cwa.sh | ||
|
||
# Removes packages that are no longer required, also emptying dirs used to build the image that are no longer needed | ||
RUN \ | ||
echo "**** cleanup ****" && \ | ||
apt-get -y purge \ | ||
build-essential \ | ||
libldap2-dev \ | ||
libsasl2-dev \ | ||
python3-dev && \ | ||
apt-get -y autoremove && \ | ||
rm -rf \ | ||
/tmp/* \ | ||
/var/lib/apt/lists/* \ | ||
/var/tmp/* \ | ||
/root/.cache | ||
|
||
# add unrar | ||
COPY --from=unrar /usr/bin/unrar-ubuntu /usr/bin/unrar | ||
|
||
# ports and volumes | ||
EXPOSE 8083 | ||
VOLUME /config | ||
VOLUME /cwa-book-ingest | ||
VOLUME /calibre-library |
Empty file.
Empty file.
81 changes: 81 additions & 0 deletions
81
root/etc/s6-overlay/s6-rc.d/universal-calibre-add-packages/run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
#!/usr/bin/with-contenv bash | ||
|
||
if [[ "$(uname -m)" == "armv7l" ]]; then | ||
cat <<-EOF | ||
******************************************************** | ||
******************************************************** | ||
* * | ||
* !!!! * | ||
* universal-calibre mod is not supported on armhf. * | ||
* * | ||
******************************************************** | ||
******************************************************** | ||
EOF | ||
exit 0 | ||
fi | ||
|
||
if [ ! -f /usr/bin/apt ]; then | ||
cat <<-EOF | ||
******************************************************** | ||
******************************************************** | ||
* * | ||
* !!!! * | ||
* universal-calibre mod is only supported on images * | ||
* using an Ubuntu base image. * | ||
* * | ||
******************************************************** | ||
******************************************************** | ||
EOF | ||
exit 0 | ||
fi | ||
|
||
if ! dpkg -s xz-utils >/dev/null 2>&1; then | ||
PACKAGES="xz-utils ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libGL.so.1 ]; then | ||
PACKAGES="libgl1 libglx-mesa0 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libxdamage.so.1 ]; then | ||
PACKAGES="libxdamage1 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libEGL.so.1 ]; then | ||
PACKAGES="libegl1 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libxkbcommon.so.0 ]; then | ||
PACKAGES="libxkbcommon0 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libnss3.so ]; then | ||
PACKAGES="libnss3 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libOpenGL.so.0 ]; then | ||
PACKAGES="libopengl0 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libXcomposite.so.1 ]; then | ||
PACKAGES="libxcomposite1 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libxkbfile.so.1 ]; then | ||
PACKAGES="libxkbfile1 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libXrandr.so.2 ]; then | ||
PACKAGES="libxrandr2 ${PACKAGES}" | ||
fi | ||
|
||
if [ ! -L /usr/lib/x86_64-linux-gnu/libXtst.so.6 ]; then | ||
PACKAGES="libxtst6 ${PACKAGES}" | ||
fi | ||
|
||
if [ -n "${PACKAGES}" ]; then | ||
echo "${PACKAGES}" >> /mod-repo-packages-to-install.list | ||
echo "**** Adding calibre dependencies to package install list ****" | ||
else | ||
echo "**** Calibre dependencies already installed, skipping ****" | ||
fi |
1 change: 1 addition & 0 deletions
1
root/etc/s6-overlay/s6-rc.d/universal-calibre-add-packages/type
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
oneshot |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
/etc/s6-overlay/s6-rc.d/universal-calibre-add-packages/run |
Empty file.
Empty file.
Oops, something went wrong.
b9764e6
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i don't understand this commit, it drops arm64 support?