From 3e1e7f7b718825a8d97f51341bcca172632382ea Mon Sep 17 00:00:00 2001 From: "flow.gunso" Date: Wed, 24 Apr 2019 11:27:21 +0200 Subject: [PATCH] Add a Docker image that just run a Bash sub process to keep it alive --- Dockerfile.bash | 56 +++++++++++++++++++++++++++++++ assets/docker-bash-entrypoint.sh | 54 +++++++++++++++++++++++++++++ assets/seafile-bash-entrypoint.sh | 38 +++++++++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 Dockerfile.bash create mode 100644 assets/docker-bash-entrypoint.sh create mode 100644 assets/seafile-bash-entrypoint.sh diff --git a/Dockerfile.bash b/Dockerfile.bash new file mode 100644 index 0000000..401cde5 --- /dev/null +++ b/Dockerfile.bash @@ -0,0 +1,56 @@ +# Docker Seafile client, help you mount a Seafile library as a volume. +# Copyright (C) 2019, flow.gunso@gmail.com +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +FROM debian:jessie-slim + +# Prevent the packages installation to halt. +ENV DEBIAN_FRONTEND noninteractive +# Specify the user running Seafile. +ENV UNAME=seafuser +ENV UID=1000 +ENV GID=1000 + +# Copy over the Docker related files. +COPY utils/build/import-seafile-apt-key.sh / +COPY assets/docker-bash-entrypoint.sh /entrypoint.sh + +# Safely import Seafile APT key, then install both seafile-cli and supervisord. +RUN mkdir -p /etc/apt/sources.list.d/ ;\ + echo "deb http://deb.seadrive.org jessie main" \ + > /etc/apt/sources.list.d/seafile.list ;\ + /bin/bash /import-seafile-apt-key.sh ;\ + apt-get update ;\ + apt-get install \ + -o Dpkg::Options::="--force-confold" \ + -y seafile-cli ;\ + apt-get clean ;\ + apt-get autoclean \ + -o APT::Clean-Installed=true ;\ + rm \ + -f \ + /var/log/fsck/*.log \ + /var/log/apt/*.log \ + /var/cache/debconf/*.dat-old \ + /import-seafile-apt-key.sh ;\ + mkdir /volume ;\ + groupadd -g $GID -o $UNAME ;\ + useradd -m -u $UID -g $GID -o -s /bin/bash $UNAME + +# Copy over the required files for Seafile/SupervisorD. +COPY assets/supervisord.conf assets/infinite-seaf-cli-start.sh /home/seafuser/ +COPY assets/seafile-bash-entrypoint.sh /home/seafuser/entrypoint.sh + +ENTRYPOINT ["/bin/bash", "/entrypoint.sh"] diff --git a/assets/docker-bash-entrypoint.sh b/assets/docker-bash-entrypoint.sh new file mode 100644 index 0000000..c446e0f --- /dev/null +++ b/assets/docker-bash-entrypoint.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# Docker Seafile client, help you mount a Seafile library as a volume. +# Copyright (C) 2019, flow.gunso@gmail.com +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Check mandatory Seafile configuration have been properly set. +if [ -z $SEAF_SERVER_URL ]; then echo "The \$SEAF_SERVER_URL was not defined. Stopping container..."; exit 1; fi +if [ -z $SEAF_USERNAME ]; then echo "The \$SEAF_USERNAME was not defined. Stopping container..."; exit 1; fi +if [ -z $SEAF_PASSWORD ]; then echo "The \$SEAF_PASSWORD was not defined. Stopping container..."; exit 1; fi +if [ -z $SEAF_LIBRARY_UUID ]; then echo "The \$SEAF_LIBRARY_UUID was not defined. Stopping container..."; exit 1; fi + +# Update the user ID, if the $UID changed. +if [ "$UID" != "1000" ]; then + usermod -u $UID $UNAME + # What if the $UID already exists ? +fi + +# Change the group, if the $GID changed. +if [ "$GID" != "1000" ]; then + getent group | grep ":$GID:" >/dev/null + if [ $? -eq 0 ]; then + usermod -g $GID -G 1000 $UNAME + else + groupmod -g $GID $UNAME + fi +fi + +# Set the files ownership. +chown $UID.$GID -R /home/seafuser/infinite-seaf-cli-start.sh +chown $UID.$GID -R /home/seafuser/entrypoint.sh +chown $UID.$GID -R /volume + +# Run the Seafile client as the container user. +su - $UNAME << EO + export SEAF_SERVER_URL=$SEAF_SERVER_URL + export SEAF_USERNAME=$SEAF_USERNAME + export SEAF_PASSWORD=$SEAF_PASSWORD + export SEAF_LIBRARY_UUID=$SEAF_LIBRARY_UUID + export UNAME=$UNAME + /bin/bash /home/seafuser/entrypoint.sh +EO \ No newline at end of file diff --git a/assets/seafile-bash-entrypoint.sh b/assets/seafile-bash-entrypoint.sh new file mode 100644 index 0000000..2ceae1a --- /dev/null +++ b/assets/seafile-bash-entrypoint.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Docker Seafile client, help you mount a Seafile library as a volume. +# Copyright (C) 2019, flow.gunso@gmail.com +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Define variable shortcuts for readability purposes. +seafile_ini=~/.ccnet/seafile.ini +seafile_sock=~/.seafile/seafile-data/seafile.sock + +# Prepare the directories. +mkdir ~/.seafile + +# Safely initialise the Seafile client. +/usr/bin/seaf-cli init -d ~/.seafile +while [ ! -f $seafile_ini ]; do sleep 1; done + +# Safely start the Seafile daemon. +/usr/bin/seaf-cli start +while [ ! -S $seafile_sock ]; do sleep 1; done + +# Start the synchronisation. +/usr/bin/seaf-cli sync -u $SEAF_USERNAME -p $SEAF_PASSWORD -s $SEAF_SERVER_URL -l $SEAF_LIBRARY_UUID -d /volume + +# Start the Seafile healthcheck as a disowned process. +(/usr/bin/bash ~/infinite-seaf-cli-start.sh &) \ No newline at end of file