diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 09d9c34..d9f9960 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -9,6 +9,13 @@ stages:
before_script:
- apk add bash
+cron_or_supervisord:
+ stage: build_publish
+ script:
+ - /bin/bash utils/publish/feature--cron-or-supervisord.sh
+ only:
+ - feature--cron-or-supervisord
+
staging:
stage: build_publish
script:
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/Dockerfile.cron b/Dockerfile.cron
new file mode 100644
index 0000000..3cd88ab
--- /dev/null
+++ b/Dockerfile.cron
@@ -0,0 +1,61 @@
+# 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
+# Create the seafile client user.
+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-cron-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 ;\
+ bash /import-seafile-apt-key.sh ;\
+ apt-get update ;\
+ apt-get install \
+ -o Dpkg::Options::="--force-confold" \
+ -y \
+ seafile-cli \
+ cron ;\
+ 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/ ;\
+ echo "seafuser" > /etc/cron.allow ;\
+ echo "*/20 * * * * /bin/bash /home/seafuser/infinite-seaf-cli-start.sh" \
+ > /var/spool/cron/crontabs/seafuser ;\
+ 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/infinite-seaf-cli-start.sh /home/seafuser/
+COPY assets/seafile-cron-entrypoint.sh /home/seafuser/entrypoint.sh
+
+ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
diff --git a/Dockerfile b/Dockerfile.supervisord
similarity index 73%
rename from Dockerfile
rename to Dockerfile.supervisord
index 56d653f..81dd58e 100644
--- a/Dockerfile
+++ b/Dockerfile.supervisord
@@ -18,13 +18,20 @@ 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 seafile repository.
-COPY assets/seafile.list /etc/apt/sources.list.d/
+# Copy over the Docker related files.
+COPY utils/build/import-seafile-apt-key.sh /
+COPY assets/docker-supervisord-entrypoint.sh /entrypoint.sh
# Safely import Seafile APT key, then install both seafile-cli and supervisord.
-COPY utils/build/import-seafile-apt-key.sh /
-RUN /bin/bash /import-seafile-apt-key.sh ;\
+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" \
@@ -39,22 +46,13 @@ RUN /bin/bash /import-seafile-apt-key.sh ;\
/var/log/fsck/*.log \
/var/log/apt/*.log \
/var/cache/debconf/*.dat-old \
- /import-seafile-apt-key.sh
-
-# Create the seafile client user.
-ENV UNAME=seafuser
-ENV UID=1000
-ENV GID=1000
-RUN groupadd -g $GID -o $UNAME ;\
+ /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 Docker entrypoint.
-COPY assets/docker-entrypoint.sh /entrypoint.sh
-
# Copy over the required files for Seafile/SupervisorD.
-COPY assets/supervisord.conf /home/seafuser/
-COPY assets/infinite-seaf-cli-start.sh /home/seafuser/
-COPY assets/seafile-entrypoint.sh /home/seafuser/entrypoint.sh
-RUN mkdir /volume
+COPY assets/supervisord.conf assets/infinite-seaf-cli-start.sh /home/seafuser/
+COPY assets/seafile-supervisord-entrypoint.sh /home/seafuser/entrypoint.sh
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
diff --git a/README.md b/README.md
index 0bcd52c..7851453 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://gitlab.com/flwgns-docker/seafile-client/commits/1.1.2)
[](https://hub.docker.com/r/flowgunso/seafile-client)
[](https://www.gnu.org/licenses/gpl-3.0)
-[](https://gitlab.com/flwgns-docker/seafile-client/)
+[](https://gitlab.com/flwgns-docker/seafile-client/)
# Available tags
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/docker-cron-entrypoint.sh b/assets/docker-cron-entrypoint.sh
new file mode 100644
index 0000000..39ea374
--- /dev/null
+++ b/assets/docker-cron-entrypoint.sh
@@ -0,0 +1,56 @@
+#!/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 /home/seafuser/infinite-seaf-cli-start.sh
+chown $UID.$GID /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
+
+cron -f
\ No newline at end of file
diff --git a/assets/docker-entrypoint.sh b/assets/docker-supervisord-entrypoint.sh
similarity index 100%
rename from assets/docker-entrypoint.sh
rename to assets/docker-supervisord-entrypoint.sh
diff --git a/assets/infinite-seaf-cli-start.sh b/assets/infinite-seaf-cli-start.sh
index dc7abb6..5aadbcf 100755
--- a/assets/infinite-seaf-cli-start.sh
+++ b/assets/infinite-seaf-cli-start.sh
@@ -16,11 +16,9 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
-set -x
-
-sleep 10
+/bin/sleep 10
while true; do
/usr/bin/seaf-cli stop
/usr/bin/seaf-cli start
- sleep 1200
+ /bin/sleep 1200
done
\ 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..52aa07d
--- /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
+
+# Run the infinite Seafile restart.
+source ~/infinite-seaf-cli-start.sh
diff --git a/assets/seafile-cron-entrypoint.sh b/assets/seafile-cron-entrypoint.sh
new file mode 100644
index 0000000..7716ba7
--- /dev/null
+++ b/assets/seafile-cron-entrypoint.sh
@@ -0,0 +1,36 @@
+#!/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
+mkdir ~/.supervisord
+
+# 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
\ No newline at end of file
diff --git a/assets/seafile-entrypoint.sh b/assets/seafile-supervisord-entrypoint.sh
similarity index 100%
rename from assets/seafile-entrypoint.sh
rename to assets/seafile-supervisord-entrypoint.sh
diff --git a/utils/publish/feature--cron-or-supervisord.sh b/utils/publish/feature--cron-or-supervisord.sh
new file mode 100755
index 0000000..26f8348
--- /dev/null
+++ b/utils/publish/feature--cron-or-supervisord.sh
@@ -0,0 +1,34 @@
+#!/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 .
+
+# Restrict to pipeline triggered by pushes.
+if [ $CI_PIPELINE_SOURCE != "push" ]; then
+ echo "This must be only ran from pushes."
+ exit 1
+fi
+
+# Login with Docker Registry.
+echo $CI_REGISTRY_BOT_PASSWORD | docker login -u $CI_REGISTRY_BOT_USERNAME docker.io --password-stdin
+
+# Build and push as staging.
+docker build -t index.docker.io/$CI_REGISTRY_IMAGE:staging-supervisord -f Dockerfile.supervisord .
+docker build -t index.docker.io/$CI_REGISTRY_IMAGE:staging-cron -f Dockerfile.cron .
+docker build -t index.docker.io/$CI_REGISTRY_IMAGE:staging-bash -f Dockerfile.bash .
+docker push index.docker.io/$CI_REGISTRY_IMAGE:staging-supervisord
+docker push index.docker.io/$CI_REGISTRY_IMAGE:staging-cron
+docker push index.docker.io/$CI_REGISTRY_IMAGE:staging-bash