This commit is contained in:
Eric Nemchik
2020-10-05 13:06:38 -05:00
parent 69f8a2efb7
commit 769363f408
10 changed files with 73 additions and 68 deletions
+4 -4
View File
@@ -4,7 +4,7 @@ language: shell
branches:
only:
- <baseimagename>-<modname> #replace variables, omit brackets
- universal-cron #replace variables, omit brackets
services:
- docker
@@ -12,8 +12,8 @@ services:
env:
global:
- DOCKERHUB="linuxserver/mods" #don't modify
- BASEIMAGE="baseimagename" #replace
- MODNAME="modname" #replace
- BASEIMAGE="universal" #replace
- MODNAME="cron" #replace
jobs:
include:
@@ -32,4 +32,4 @@ jobs:
- echo $DOCKERPASS | docker login -u $DOCKERUSER --password-stdin
# Push all of the tags
- docker push ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}-${TRAVIS_COMMIT}
- docker push ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}
- docker push ${DOCKERHUB}:${BASEIMAGE}-${MODNAME}
+1 -1
View File
@@ -1,6 +1,6 @@
FROM scratch
LABEL maintainer="username"
LABEL maintainer="nemchik"
# copy local files
COPY root/ /
-21
View File
@@ -1,21 +0,0 @@
## Buildstage ##
FROM lsiobase/alpine:3.9 as buildstage
RUN \
echo "**** install packages ****" && \
apk add --no-cache \
curl && \
echo "**** grab rclone ****" && \
mkdir -p /root-layer && \
curl -o \
/root-layer/rclone.deb -L \
"https://downloads.rclone.org/v1.47.0/rclone-v1.47.0-linux-amd64.deb"
# copy local files
COPY root/ /root-layer/
## Single layer deployed image ##
FROM scratch
# Add files from buildstage
COPY --from=buildstage /root-layer/ /
+14 -12
View File
@@ -1,17 +1,19 @@
# Rsync - Docker mod for openssh-server
# cron - Docker mod for any container
This mod adds rsync to openssh-server, to be installed/updated during container start.
This mod adds cron to any container, to be installed/updated during container start.
In openssh-server docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:openssh-server-rsync`
In any container docker arguments, set an environment variable `DOCKER_MODS=linuxserver/mods:universal-cron`
If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:openssh-server-rsync|linuxserver/mods:openssh-server-mod2`
If adding multiple mods, enter them in an array separated by `|`, such as `DOCKER_MODS=linuxserver/mods:universal-cron|linuxserver/mods:universal-mod2`
# Mod creation instructions
This mod will ensure you have a `/config/crontabs/root` file where you can add cron jobs to run inside the container.
* Fork the repo, create a new branch based on the branch `template`.
* Edit the `Dockerfile` for the mod. `Dockerfile.complex` is only an example and included for reference; it should be deleted when done.
* Inspect the `root` folder contents. Edit, add and remove as necessary.
* Edit this readme with pertinent info, delete these instructions.
* Finally edit the `travis.yml`. Customize the build branch, and the vars for `BASEIMAGE` and `MODNAME`.
* Ask the team to create a new branch named `<baseimagename>-<modname>`. Baseimage should be the name of the image the mod will be applied to. The new branch will be based on the `template` branch.
* Submit PR against the branch created by the team.
No cron jobs (aside from what may be included in the base OS) are included by default.
You can test to confirm things are working by adding the following line to `/config/crontabs/root`
```cron
*/5 * * * * /bin/echo test >> /config/tmp.txt
```
Then restart the container and wait 5 minutes to see that the test completes. Remove the test and restart the container after confirming.
+1
View File
@@ -0,0 +1 @@
# min hour day month weekday command
+1
View File
@@ -0,0 +1 @@
# min hour day month weekday command
+42
View File
@@ -0,0 +1,42 @@
#!/usr/bin/with-contenv bash
# determine if setup is needed for ubuntu
if [ ! -f /usr/sbin/cron ] && \
[ -f /usr/bin/apt ]; then
# install cron
apt-get update
apt-get install --no-install-recommends -y \
cron
fi
# make folders
mkdir -p \
/config/crontabs
# if root crontabs do not exist in config
# copy root crontab from system
if [[ ! -f /config/crontabs/root ]] && \
crontab -l -u root; then
crontab -l -u root > /config/crontabs/root
fi
# if root crontabs still do not exist in config (were not copied from system)
# copy root crontab from included defaults
[[ ! -f /config/crontabs/root ]] && \
cp /defaults/crontabs-mod/root /config/crontabs/
# if abc crontabs do not exist in config
# copy abc crontab from system
if [[ ! -f /config/crontabs/abc ]] && \
crontab -l -u abc; then
crontab -l -u abc > /config/crontabs/abc
fi
# if abc crontabs still do not exist in config (were not copied from system)
# copy abc crontab from included defaults
[[ ! -f /config/crontabs/abc ]] && \
cp /defaults/crontabs-mod/abc /config/crontabs/
# import user crontabs
crontab -u root /config/crontabs/root
crontab -u abc /config/crontabs/abc
-27
View File
@@ -1,27 +0,0 @@
#!/usr/bin/with-contenv bash
# Determine if setup is needed
if [ ! -f /usr/local/lib/python***/dist-packages/sshuttle ] && \
[ -f /usr/bin/apt ]; then
## Ubuntu
apt-get update
apt-get install --no-install-recommends -y \
iptables \
openssh-client \
python3 \
python3-pip
pip3 install sshuttle
fi
if [ ! -f /usr/lib/python***/site-packages/sshuttle ] && \
[ -f /sbin/apk ]; then
# Alpine
apk add --no-cache \
iptables \
openssh \
py3-pip \
python3
pip3 install sshuttle
fi
chown -R root:root /root
chmod -R 600 /root/.ssh
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/with-contenv bash
if [ -f /usr/bin/apt ]; then
# ubuntu
exec /usr/sbin/cron -f -L 1
fi
if [ -f /sbin/apk ]; then
# alpine
exec /usr/sbin/crond -f -S -l 5
fi
-3
View File
@@ -1,3 +0,0 @@
#!/usr/bin/with-contenv bash
sshuttle --dns --remote root@${HOST}:${PORT} 0/0 -x 172.17.0.0/16