commit 56fbac0a965ab508da08dfa4d2e6077685540e82 Author: Deon George Date: Fri Aug 24 13:57:25 2018 +1000 Initial Release - for Mystic BBS 1.1.12a39 diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c3f413b --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +cleaninstall/ +.git/ +Makefile diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..b4c4b18 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,42 @@ +image: docker:latest + +stages: +- test +- build + +variables: + VERSION: latest + CACHETAG: build + DOCKER_HOST: tcp://docker:2375 + +services: +- docker:dind + +before_script: +- 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 + only: + - debug + - armv7l + +build: + 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: + - armv7l diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..7f70556 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +# NAME leenooks/mysticbbs +# VERSION 1.12a39-armv7l + +FROM arm32v7/debian:jessie-slim + +MAINTAINER Deon George + +# Pre-requisites +RUN apt-get update \ + && apt-get install -yqq unzip zip curl libhunspell-dev \ + && rm -rf /var/lib/apt/lists/* /tmp/* + +# For SSH connections and Spell +ADD libcl.so.3.4.3 /usr/lib +RUN ln -sf libcl.so.3.4.3 /usr/lib/libcl.so +RUN ln -sf /usr/lib/arm-linux-gnueabihf/libhunspell-1.3.so.0 /usr/lib/libhunspell.so + +RUN ln -sf /usr/share/zoneinfo/Australia/Melbourne /etc/localtime + +WORKDIR /mystic +ENV mysticbbs /mystic/data +EXPOSE 22 23 24554 + +COPY init /sbin/init +ENTRYPOINT [ "/sbin/init" ] +CMD [ "start" ] + +ADD mystic.tar.gz / +VOLUME ["/mystic/data"] + +# Add Mystic Mods diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..195d736 --- /dev/null +++ b/Makefile @@ -0,0 +1,18 @@ +NAME=$$(head -1 Dockerfile|grep NAME |awk '{print $$3}') +VERSION=$$(grep VERSION Dockerfile |awk '{print $$3}') +REGISTRY=registry.leenooks.net +SUBDIRS := $(wildcard */.) +.PHONY: all build image $(SUBDIRS) + +all: build + +build: Dockerfile + @if test "$(NAME)" = ""; then echo "NAME not in Dockerfile."; exit 1; fi + @if test "$(VERSION)" = ""; then echo "VERSION not in Dockerfile."; exit 1; fi + @if test -f image.bz2; then rm -f image.bz2; fi + @#docker pull $(NAME):$(VERSION) + @#docker build --cache-from $(NAME):$(VERSION) -t $(NAME):$(VERSION) . + docker build -t $(NAME):$(VERSION) . + +image: Dockerfile + docker save $(NAME):$(VERSION) | bzip2 -9 > image.bz2 diff --git a/README.md b/README.md new file mode 100644 index 0000000..fc7ad85 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# Mystic BBS (Bulletin Board Software) +---- +## What is Mystic BBS? +see [MysticBBS](https://www.mysticbbs.com) + +> Mystic BBS was conceived around the year 1995 when the author became frustrated by the lack of customization available with Renegade BBS, and first released to the public in late 1997 during a period when many BBS packages were seeing a decline (or a full stop) in development. Mystic is developed from the ground up with all original source code and is intended to be the spiritual successor to both Telegard and Renegade (two of the packages the author used prior to developing Mystic BBS). +> With the fall of MS-DOS and the decline of the BBS, Mystic continued to push forward by releasing an OS/2 and Windows 32 native version in 1998. Mystic was the first of the non-commerical DOS based BBS packages to make the transition and integrate directly with the Telnet protocol. Mystic also went on to become the first of the MS-DOS based packages to release a native Linux version in 1999, and the first to introduce a standardized platform for DOOR games across all 4 operating systems. +> In the following years after the first MS-DOS release in 1997, Mystic grew to become one of the most widely used BBS packages. Popular amongst many SysOps who took ease of customization and the user experience seriously, it is arguable that Mystic was (or even still is) the most popular BBS software for those who share a common interest in ANSI art and BBS modding. +> In recent years, Mystic has removed its DOS version and its limitations, and has moved on to better integrate with Internet protocols. Mystic now has internal Telnet, RLOGIN, SSH, NNTP, POP3, SMTP, FTP, HTTP and BINKP servers while continuing to focus on and enhance the SysOp and user experience. + +---- +## About this Docker Container +This Docker Container represents a completed installation of MysticBBS. 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/leenooks/mysticbbs:1.12a39-armv7l + +2. Create a directory to hold your BBS data. (I use */srv/docker/mystic*). + + mkdir -p /srv/mystic/data + +3. Start the container. + + docker run -itd -v /srv/mystic/data:/mystic data -p 10022:22 -p 10023:23 -p 24554:24554 registry.leenooks.net/leenooks/mysticbbs:1.12a39-armv7l + + Explanation of these parameters: + | Parameter | Value | + | :- | :-- | + | -d | Detached mode: run the container in the background and print the new container ID. | + | -i | Keep STDIN open even if not attached. | + | -n | Give your container a specific name. | + | -p | Map host ports to container ports. | + | -t | Allocate a pseudo-TTY. | + + Remember your container ID *(your number will be different)*. + + ca219a461376... + +4. Attach to your container and create your sysop user. + + docker exec -it ca219a461376 ./mystic -l + +5. Upgrade your new user to sysop levels + + docker exec -it ca219a461376 ./mystic -cfg + +6. You can now start to play. If you externalised your telnet port, then you can telnet in. + +If you want to monitor your container, or stop it, attach to the console with: + + docker attach ca219a461376 diff --git a/cleaninstall/.gitignore b/cleaninstall/.gitignore new file mode 100644 index 0000000..dbb32b1 --- /dev/null +++ b/cleaninstall/.gitignore @@ -0,0 +1,4 @@ +data +mystic +mods +*.zip diff --git a/cleaninstall/cleaninstall.sh b/cleaninstall/cleaninstall.sh new file mode 100755 index 0000000..d72289e --- /dev/null +++ b/cleaninstall/cleaninstall.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +set -e + +MYSTIC_SOURCE=${1:-mys112a39_pi.zip} +[ "$1" ] && shift +SPELL_SOURCE=${1:-mystic_spellcheck_v2.zip} +[ "$1" ] && shift + +CLEAN_INSTALL_DIR=x +INSTALL_CONTAINER=arm32v7/debian:jessie-slim +TARGET_DIR=mystic +PATCH_FILE=mystic.112a39.patch + +[ $(id -u) -ne 0 ] && echo "ERROR: You need to run me as root." && exit 1 + +if [ -d ${TARGET_DIR} ]; then + echo "! Skipping installation [$TARGET_DIR} already exists" + +else + # 1) Download Mystic App + [ ! -f ${MYSTIC_SOURCE} -o ! -f ${SPELL_SOURCE} ] && echo "ERROR: Source file missing [${MYSTIC_SOURCE}/${SPELL_SOURCE}], did you download it?" && exit 1 + + # 2) Create a new directory for it and unzip the App into it + [ -d ${CLEAN_INSTALL_DIR} ] && echo "ERROR: Directory [${CLEAN_INSTALL_DIR}] already exists!" && exit 1 + + unzip ${MYSTIC_SOURCE} -d ${CLEAN_INSTALL_DIR} + [ $? -gt 0 ] && echo "ERROR: Unzip failed?" && exit 1 + + # 3) Run docker with -v mapping the unzip files to an arbitrary directory -v unzipfiles:/install + # ** @TODO Request upstream to default QWK and Echo DIRs to named dir as well during installation + echo "Running docker, please perform the installation, and set:" + echo "* Installation directory to /mystic" + echo "* Data directories prefixed with /mystic/data" + echo "+ * Leave System Path and Scripts to /mystic" + echo "+ * Especially, QWK Settings and Echomail Settings" + + docker run --rm -it -v ${PWD}/${CLEAN_INSTALL_DIR}:/install ${INSTALL_CONTAINER} /bin/bash -c "cd /install; ./install; [ -d /mystic ] && echo \"Now change QWK Settings and Echomail settings...\" && cd /mystic/ && sleep 5 && ./mystic -cfg && cd /; mv /mystic /install/" + + [ ! -d ${CLEAN_INSTALL_DIR}/mystic/data/data ] && echo "ERROR: Expected a [${CLEAN_INSTALL_DIR}/mystic/data/data] dir, but it wasnt there?" && exit 1 + [ ! -d ${CLEAN_INSTALL_DIR}/mystic/scripts ] && echo "ERROR: Expected a [${CLEAN_INSTALL_DIR}/mystic/scripts] dir, but it wasnt there?" && exit 1 + [ ! -d ${CLEAN_INSTALL_DIR}/mystic/semaphore ] && echo "ERROR: Expected a [${CLEAN_INSTALL_DIR}/mystic/semaphore] dir, but it wasnt there?" && exit 1 + + # Add the spell directionary files to the data directory + unzip ${SPELL_SOURCE} dictionary.* -d ${CLEAN_INSTALL_DIR}/mystic/data/data + + # 4) Run this script which will clean up the install and ZIP it up to be used with a docker. + cd ${CLEAN_INSTALL_DIR}/mystic + + mv files mystic.dat data/ + rm -rf localqwk echomail + + # We need a symbolic link so that MIS can find MYSTIC + # @TODO Request fix from upstream + ln -s ../mystic data/mystic + + chmod 755 * scripts/mide scripts/mplc scripts/*.mpx + chmod 644 *.ini *.txt docs/*.txt scripts/*.mps scripts/*.ini + + patch -p0 < ../../${PATCH_FILE} + + # Clean up data dir + find data -type f -exec chmod 644 {} \; + + # Finished + mv data ../.. + cd ../.. + mv ${CLEAN_INSTALL_DIR}/mystic . + rm -rf ${CLEAN_INSTALL_DIR} +fi + +# Tar up the data dir and add it back to the main install +echo "Zipping up data dir..." +tar czf mystic/data.tar.gz data/ + +# That dir is now ready for the image +tar czf mystic.tar.gz mystic +echo "OK mystic.tar.gz can be moved to your docker build" diff --git a/cleaninstall/mystic.112a39.patch b/cleaninstall/mystic.112a39.patch new file mode 100644 index 0000000..83e3715 --- /dev/null +++ b/cleaninstall/mystic.112a39.patch @@ -0,0 +1,43 @@ +--- nodespy.ini.orig 2018-08-22 21:51:26.498766941 +1000 ++++ nodespy.ini 2018-08-22 21:51:51.018652751 +1000 +@@ -12,7 +12,7 @@ + ; terminal, you can do that here otherwise it will use the current + ; directory + +- ;transfer_dir = c:\ ++ transfer_dir = /mystic/data/nodespy/ + + ; Use auto zmodem downloads and detect automatically zmodem uploads + +--- scripts/mide.ini.orig 2018-08-22 22:26:44.452789582 +1000 ++++ scripts/mide.ini 2018-08-22 22:27:28.062371856 +1000 +@@ -44,6 +44,6 @@ + ; For rootpath, you need to include the directory where the MYSTIC binary + ; exists. + +- rootpath = c:\mystic\ +- username = sysopname +- password = password ++ rootpath = /mystic/ ++ username = guest ++ password = guest +--- mutil.ini.orig 2018-08-24 12:25:37.571848476 +1000 ++++ mutil.ini 2018-08-24 12:27:14.481005284 +1000 +@@ -75,7 +75,7 @@ + ; Set this value if you want to run mutil from a directory other than + ; the root Mystic directory or the mysticbbs environment variable: + +- ; mystic_directory=c:\mystic\mystic.dat ++ ; mystic_directory=/mystic/data/mystic.dat + + ; If no directory is specified in the logfile name, mUtil will attempt + ; to use the configured LOGS directory from in Mystic's configuration. +@@ -97,7 +97,7 @@ + loglevel=2 + + ; logfile time stamp. defaults to NNN DD HH:II:SS if not set here +- ;logstamp = YYYYHHMMHHIISS ++ ;logstamp = YYYYMMDDHHIISS + + ; Log roller type: + ; 0 = Do not roll log files diff --git a/init b/init new file mode 100755 index 0000000..7b14f94 --- /dev/null +++ b/init @@ -0,0 +1,24 @@ +#!/bin/bash + +set -e +NAME="Mystic BBS" +INIT=mis + +function stop { + echo "Stopping ${NAME}" + kill $(ps -Af|grep ${INIT} |grep -v grep|awk '{ print $2}') +} + +trap 'stop' SIGTERM +export PATH=$PATH:/mystic + +if [ "$1" == "start" ]; then + # First time install - expand out our data directory + [ $(find data|wc -l) -le 1 ] && tar xzf data.tar.gz + + # OK, start + exec ${INIT} server + +else + exec $@ +fi diff --git a/libcl.so.3.4.3 b/libcl.so.3.4.3 new file mode 100644 index 0000000..731b2e6 Binary files /dev/null and b/libcl.so.3.4.3 differ diff --git a/mystic.tar.gz b/mystic.tar.gz new file mode 100644 index 0000000..25bd950 Binary files /dev/null and b/mystic.tar.gz differ