commit d485c47da2a7dcca25fa962b5d2f442c5fdbaa63 Author: Deon George Date: Fri Nov 9 12:14:57 2018 +1100 Initial Revision diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..882a395 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,63 @@ +image: docker:latest + +stages: +- test +- build + +variables: + DOCKER_HOST: tcp://docker:2375 + +services: +- docker:dind + +before_script: +- apk add curl +- docker info +- docker version +- echo "$CI_JOB_TOKEN" | docker login -u "$CI_REGISTRY_USER" "$CI_REGISTRY" --password-stdin + +test: + stage: test + script: + - cat /etc/hosts + - env|sort + - docker build -t ${CI_REGISTRY_IMAGE}:${VERSION} . + - docker images + tags: + - docker + only: + - debug + +build:x86_64: + variables: + CACHETAG: build-x86_64 + VERSION: 0.12-alpha-x86_64 + stage: build + script: + - if [ -f init ]; then chmod 500 init; fi + - docker pull ${CI_REGISTRY_IMAGE}:${CACHETAG} || true + - docker build --cache-from ${CI_REGISTRY_IMAGE}:${CACHETAG} -t ${CI_REGISTRY_IMAGE}:${VERSION} -t ${CI_REGISTRY_IMAGE}:${CACHETAG} . + - docker push ${CI_REGISTRY_IMAGE}:${VERSION} + - docker push ${CI_REGISTRY_IMAGE}:${CACHETAG} + tags: + - docker + - x86_64 + only: + - docker + +build:armv7l: + variables: + CACHETAG: build-armv7l + VERSION: 0.12-alpha-armv7l + stage: build + script: + - if [ -f init ]; then chmod 500 init; fi + - docker pull ${CI_REGISTRY_IMAGE}:${CACHETAG} || true + - docker build --cache-from ${CI_REGISTRY_IMAGE}:${CACHETAG} -t ${CI_REGISTRY_IMAGE}:${VERSION} -t ${CI_REGISTRY_IMAGE}:${CACHETAG} . + - docker push ${CI_REGISTRY_IMAGE}:${VERSION} + - docker push ${CI_REGISTRY_IMAGE}:${CACHETAG} + tags: + - docker + - armv7l + only: + - docker diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..5d3c677 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +# NAME leenooks/magicka +# VERSION 0.12-4 + +FROM debian:stretch-slim + +MAINTAINER Deon George + +# Pre-requisites +# + Base application requires unzip zip curl +RUN apt-get update \ + && apt-get install -yqq unzip zip curl \ + && rm -rf /var/lib/apt/lists/* /tmp/* + +# Set timezone to Melbourne +RUN ln -sf /usr/share/zoneinfo/Australia/Melbourne /etc/localtime + +# Add in Leenooks' apt repository +RUN curl -s http://apt.leenooks.net/setup.sh | sh + +RUN apt-get update \ + && apt-get install -y --allow-unauthenticated magicka openssh-server binkd supervisor \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* #3 + +ADD binkd.conf /opt/magicka/etc/ +ADD magimail.prefs /opt/magicka/etc/ +ADD magitoss.sh /opt/magicka/bin +RUN ln -sf magitoss.sh /opt/magicka/bin/magiscan.sh + +WORKDIR /opt/magicka +EXPOSE 22 23 80 24554 + +COPY init /sbin/init +COPY supervisord.d /etc/supervisor/conf.d/ + +VOLUME [ "/opt/magicka/data" ] +ENTRYPOINT [ "/sbin/init" ] +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf", "-n"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..4d6f46e --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# Magicka BBS (Bulletin Board Software) +---- +## What is Magicka BBS? +see [MagickaBBS](https://magickabbs.com) + +> MagickaBBS is a Bulletin Board System (BBS) for Linux, macOS, FreeBSD, NetBSD, OpenIndiana, DragonFlyBSD and OpenBSD + +> Magicka contains both Telnet & SSH servers, an FTP server and a HTTP server. It is able to run both native and DOS doors (via DosBox or Dosemu). It comes with an external full screen editor, a mail tosser/scanner and bluewave offline mail. It has internal ZModem, and works with external protocols like LRZSZ. Magicka is also easily configurable via ini files, and a configuration utility is in the works. + +---- +## About this Docker Container +This Docker Container represents a completed installation of MagickaBBS. It is ready to configure and personalise. + +To use this container: + +1. Docker pull it from my registry. (Actually you can skip this step, but its worth doing it anyway!) + + docker pull registry.leenooks.net/bbs/magicka:0.12-alpha-x86_64 (armv7l is available too!) + +2. Create a directory to hold your BBS data. (I use */srv/docker/magicka*). + + mkdir -p /srv/magicka/data + +3. Start the container. + + docker run -d -v /srv/magicka/data:/opt/magicka/data -p 10022:2024 -p 10023:2023 -p 24554:24554 registry.leenooks.net/bbs/magicka:0.12-alpha-x86_64 + + Explanation of these parameters: + + | Parameter | Value | + | :- | :-- | + | -d | Detached mode: run the container in the background and print the new container ID. | + | --name= | Give your container a specific name. (optional) | + | -p | Map host ports to container ports. (may be required, otherwise recommended) | + | -v | Map a path on the host into the container (optional but recommended). | + + (There are other useful parameters you can use, like --restart, etc. If you dont pass in a data volume for /opt/magicka/data, docker will create one and preserve it if you start subsequent containers a specific way (beyond the scope of this README - so its recommended you do this in first instance anyway.) + + Remember your container ID *(your number will be different)*. + + ca219a461376... + +4. You can connect to your container and run any commands inside it. + + docker exec -it ca219a461376 + +5. You can now start to play. If you externalised your telnet port, then you can telnet in. + +You can also run this in a swarm (I do)! diff --git a/binkd.conf b/binkd.conf new file mode 100644 index 0000000..dd42bc2 --- /dev/null +++ b/binkd.conf @@ -0,0 +1,53 @@ +# Number @ end is the root zone +domain private /opt/magicka/data/ftn/private 10 +#domain fsxnet /opt/magicka/data/ftn/fsxnet 21 + +# Our Private address +address 10:10/999@private + +# Our FSXNet Address +#address 21:21/999@fsxnet + +sysname "My Magicka BBS" +location "Virtualised in Docker" +sysop "Docker Daemon" + +nodeinfo 115200,TCP,BINKP +try 10 +hold 600 +send-if-pwd + +log /opt/magicka/data/var/magicka/logs/binkd.log +loglevel 4 +conlog 4 +percents +printq +backresolv + +inbound /opt/magicka/data/ftn/in_sec +inbound-nonsecure /opt/magicka/data/ftn/in +temp-inbound /opt/magicka/data/ftn/in_temp + +minfree 2048 +minfree-nonsecure 2048 + +kill-dup-partial-files +kill-old-partial-files 86400 + +prescan + +# Private HUB +node 10:1/0@private -md hub.private.ftn:24554 CHANGEME c +# FSXNet HUB +#node 21:1/100@fsxnet -md ipv4.agency.bbs.geek.nz:24556 LETMEIN c + +# our listening port (default=24554) +iport 24554 + +pid-file /opt/magicka/var/magicka/binkd.pid + +exec "/opt/magicka/bin/magitoss.sh" *.[mwtfs][oehrau][0-9a-zA-Z] *.pkt +exec "/opt/magicka/bin/ticproc.sh" *.tic *.TIC + +# nuke old .bsy/.csy files after 24 hours +kill-old-bsy 43200 diff --git a/init b/init new file mode 100755 index 0000000..4b4f3d2 --- /dev/null +++ b/init @@ -0,0 +1,34 @@ +#!/bin/bash + +: ${MAGICKA_ROOT=/opt/magicka} + +PATH=${MAGICKA_ROOT}/bin:$PATH +export PATH + +# Adjust some paths +echo "* Adjusting some paths..." +sed -i 's/magicka\/var/magicka\/data\/var/g' ${MAGICKA_ROOT}/bin/magiedit.sh + +if [ ! -d "${MAGICKA_ROOT}/data/etc" ]; then + echo "* Installing MAGICKA_ROOT data files into ${MAGICKA_ROOT}/data" + cp -pR ${MAGICKA_ROOT}/{etc,share,var} ${MAGICKA_ROOT}/data/ + sed -ri 's#opt/magicka/(etc|share|var)#opt/magicka/data/\1#g' ${MAGICKA_ROOT}/data/etc/magicka/bbs.ini + sed -i 's/=\ USERNAME/= root/g' ${MAGICKA_ROOT}/data/etc/magicka/bbs.ini + sed -i 's#magicka#opt/magicka/data#g' ${MAGICKA_ROOT}/data/etc/magicka/filesgen.ini + sed -i 's#var/magicka/msgs#data/msgs#g' ${MAGICKA_ROOT}/data/etc/magicka/localmail.ini + mkdir ${MAGICKA_ROOT}/data/{msgs,ftn} + mkdir ${MAGICKA_ROOT}/data/ftn/{in_sec,in,in_temp} + rmdir ${MAGICKA_ROOT}/data/var/magicka/msgs +fi + +for keytype in rsa dsa; do + if [ ! -f "${MAGICKA_ROOT}/data/etc/magicka/keys/ssh_host_${keytype}_key" ]; then + echo "* Generating ${keytype} ssh key" + [ -d "${MAGICKA_ROOT}/data/etc/magicka/keys" ] || mkdir ${MAGICKA_ROOT}/data/etc/magicka/keys + /usr/bin/ssh-keygen -f ${MAGICKA_ROOT}/data/etc/magicka/keys/ssh_host_${keytype}_key -N '' -t ${keytype} + fi +done + +# clear out state and lockfiles from previous instance + +exec "$@" diff --git a/magimail.prefs b/magimail.prefs new file mode 100644 index 0000000..92da114 --- /dev/null +++ b/magimail.prefs @@ -0,0 +1,61 @@ +SYSOP "Docker Daemon" +BBSNAME "My Magicka BBS" + +BROADCAST 0.0.0.0 2025 + +LOGFILE "/opt/magicka/data/var/magicka/logs/magimail.log" +LOGLEVEL 3 + +DUPEFILE "/opt/magicka/data/var/magicka/logs/dupes.log" 200 +DUPEMODE BAD + +LOOPMODE LOG+BAD + +MAXPKTSIZE 50 +MAXBUNDLESIZE 100 + +DEFAULTZONE 10 + +INBOUND "/opt/magicka/data/ftn/in_sec" +OUTBOUND "/opt/magicka/data/ftn/out" +TEMPDIR "/opt/magicka/data/ftn/cm_temp" +CREATEPKTDIR "/opt/magicka/data/ftn/cm_temp" +PACKETDIR "/opt/magicka/data/ftn/cm_packets" +STATSFILE "/opt/magicka/data/ftn/magimail.stats" +FORCEINTL +ANSWERRECEIPT +ANSWERAUDIT +CHECKSEENBY +IMPORTAREAFIX +IMPORTSEENBY +WEEKDAYNAMING +ADDTID +ALLOWRESCAN +INCLUDEFORWARD +ALLOWKILLSENT + +GROUPNAME A "private" + +PACKER "ZIP" "zip -j %a %f" "unzip -j %a" "PK" + +AKA 10:1/999 +DOMAIN private + +NODE 10:1/0 "ZIP" "" AUTOADD PACKNETMAIL +DEFAULTGROUP A + +ROUTE "10:*/*.*" "10:1/0.0" 10:1/999 + +JAM_HIGHWATER +JAM_LINK +JAM_QUICKLINK +JAM_MAXOPEN 5 + +NETMAIL "NETMAIL" 10:1/999.0 JAM "/opt/magicka/data/msgs/pvt_netmail" + +AREA "BAD" 10:1/999.0 JAM "/opt/magicka/data/msgs/bad" + +AREA "PVT-TEST" 10:1/999.0 JAM "/opt/magicka/data/msgs/pvt_test" + +EXPORT %10:1/0.0 +GROUP A diff --git a/magitoss.sh b/magitoss.sh new file mode 100755 index 0000000..a64fe1b --- /dev/null +++ b/magitoss.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +FILE=$(basename $0) + +cd /opt/magicka/data/ftn + +if [ "${FILE}" == "magitoss.sh" ]; then + /opt/magicka/bin/magimail toss + +elif [ "${FILE}" == "magiscan.sh" ]; then + /opt/magicka/bin/magimail scan + +fi diff --git a/supervisord.d/bbs.conf b/supervisord.d/bbs.conf new file mode 100644 index 0000000..332b264 --- /dev/null +++ b/supervisord.d/bbs.conf @@ -0,0 +1,3 @@ +[program:magicka] +command=/opt/magicka/bin/magicka /opt/magicka/data/etc/magicka/bbs.ini +user=root diff --git a/supervisord.d/binkd.conf b/supervisord.d/binkd.conf new file mode 100644 index 0000000..c3d6387 --- /dev/null +++ b/supervisord.d/binkd.conf @@ -0,0 +1,3 @@ +[program:binkd] +command=/usr/sbin/binkd /opt/magicka/data/etc/binkd.conf +user=root