aboutsummaryrefslogtreecommitdiffstats
path: root/Containerfile
diff options
context:
space:
mode:
Diffstat (limited to 'Containerfile')
-rw-r--r--Containerfile84
1 files changed, 84 insertions, 0 deletions
diff --git a/Containerfile b/Containerfile
new file mode 100644
index 0000000..4e88152
--- /dev/null
+++ b/Containerfile
@@ -0,0 +1,84 @@
+FROM docker.io/alpine:latest AS base
+
+WORKDIR /root
+
+# Funny lil packages
+RUN apk upgrade --no-cache && \
+ apk add --no-cache \
+ git openssh \
+ python3 py3-pygments \
+ py3-markdown \
+ libintl musl-libintl \
+ zlib \
+ caddy \
+ cgit gitolite \
+ openssl \
+ dumb-init \
+ fcgiwrap \
+ sudo zsh openrc \
+ libcap
+
+ADD image/prepare-container.sh /usr/local/bin/prepare-container.sh
+ADD image/fcgiwrap-launcher /usr/local/bin/fcgiwrap-launcher
+RUN chmod +x /usr/local/bin/prepare-container.sh /usr/local/bin/fcgiwrap-launcher
+
+# SSHD config : no password, no strict mode
+# Moved by prepare-container.sh
+ADD image/sshd_config /etc/sshd_config
+
+# CGIT Config
+# Copied by prepare-container.sh
+ADD image/cgitrc /etc/cgitrc.default
+
+# Caddy config
+ADD image/Caddyfile /etc/caddy/Caddyfile
+
+# Remove SSH keyes, fresh keys will be generated at container startup by prepare-container.sh
+RUN rm -rf /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_dsa_key
+
+# Gitolis / Gitolite
+RUN adduser -D -g "" -s "/bin/ash" http
+RUN addgroup git www-data && addgroup git http
+RUN addgroup http www-data && addgroup http git
+# We need a password set, otherwise pubkey auth doesn't work... why ?? /sbin/nologin doesn't work either
+RUN echo "git:$(openssl rand -hex 4096)" | chpasswd
+
+# Caddy needs CAP_NET_BIND_SERVICE
+RUN setcap CAP_NET_BIND_SERVICE=+eip /usr/sbin/caddy
+
+RUN ln -s /var/lib/git/cgitrc /etc/cgitrc
+
+# SSH Keys, Config
+VOLUME ["/etc/ssh"]
+# Git Directories
+VOLUME ["/var/lib/git"]
+
+# CGit
+EXPOSE 80
+# SSH
+EXPOSE 22
+
+ENTRYPOINT ["/usr/bin/dumb-init", "--"]
+CMD ["sh", "-c", "/usr/local/bin/prepare-container.sh && sh -c 'sleep 1 && chgrp www-data /run/fcgiwrap/fcgiwrap.sock && chmod g+w /run/fcgiwrap/fcgiwrap.sock && exec sudo -u http /usr/sbin/caddy run --config /etc/caddy/Caddyfile --adapter caddyfile' & /usr/local/bin/fcgiwrap-launcher"]
+
+FROM base AS with-fmt
+RUN apk add --no-cache py3-markdown py3-docutils groff
+RUN echo -ne 'about-filter=/usr/lib/cgit/filters/about-formatting.sh\n' >> /etc/cgitrc.default
+
+FROM with-fmt AS with-highlighting
+RUN apk add --no-cache highlight
+ADD image/syntax-highlighting.sh /usr/lib/cgit/filters/syntax-highlighting-uwu.sh
+RUN chmod +x /usr/lib/cgit/filters/syntax-highlighting-uwu.sh
+RUN echo -ne 'source-filter=/usr/lib/cgit/filters/syntax-highlighting-uwu.sh\n' >> /etc/cgitrc.default
+
+FROM with-highlighting AS full
+# with nice userland aswell
+RUN apk add --no-cache curl zsh-fast-syntax-highlighting
+RUN sed -i 's|/bin/ash|/bin/zsh|g' /etc/passwd
+RUN (git clone https://git.estrogen.zone/zuwu.git/ /tmp/zuwu || git clone https://github.com/dmpmem/zuwu.git /tmp/zuwu) && \
+ cd /tmp/zuwu && \
+ ./install.zsh && \
+ /usr/local/share/zsh/plugins/zuwu/setup.zsh && \
+ sudo -u git /usr/local/share/zsh/plugins/zuwu/setup.zsh && \
+ cd ~ && \
+ rm -rf /tmp/zuwu