...
Code Block |
---|
[program:xterm] command=/usr/bin/xterm environment=DISPLAY=":1" autostart=true autorestart=true startsecs=5 startretries=1000000 stdout_logfile=NONE stderr_logfile=NONE |
...
vi /
...
etc/
...
supervisor/
...
conf.d/rawsocat.conf
Code Block |
---|
#![program:rawsocat] command=/usr/local/bin/bash echo " *** startvnc script" set -e export VNCPASSWORD='xxx' if [ -z "$VNCPASSWORD" ]; then VNCPASSWORD=`pwgen 8` echo " *** VNC password for this session: $VNCPASSWORD" fi export USER="`whoami`" mkdir -p ~/.vnc echo "$VNCPASSWORD" | tightvncpasswd -f > ~/.vnc/passwd chmod 0600 ~/.vnc/passwd tightvncserver -geometry 1024x768 :1 sleep 1 tail -f ~/.vnc/*.log |
vi /usr/local/bin/waitfordaemon
Code Block |
---|
#!/bin/bash
while supervisorctl status "$1" 2>/dev/null | grep -vq 'RUNNING'; do
echo "Waiting for $1"
sleep 1
done
# An additional wait, just to be safe
sleep 3
shift
exec "$@" |
chmod +x /usr/local/bin/waitfordaemon
DOSEmu
Installation
sudo su
apt-get update
apt-get install dosemu
Setup OS and Utilities
Setup Folders
Code Block |
---|
mkdir /dos
for DRIVE in e f g h i j k; do
mkdir -p /dos/drive_$DRIVE
ln -s /dos/drive_$DRIVE /etc/dosemu/drives/$DRIVE
done
mkdir /dos/drive_h/UTILS
mkdir /dos/drive_h/STARTUP
mkdir /dos/sessions
mkdir /dos/session.skel
echo > /dos/drive_e/BOOTUP.BAT
unix2dos /dos/drive_e/BOOTUP.BAT
# These seem to be what dosemu does on start.
#cp -rv /etc/dosemu/freedos /dos/session.skel/drive_c
#mkdir /dos/session.skel/drive_c/tmp
touch /dos/session.skel/dosemu.conf
echo 0 > /dos/numnodes
echo 1 > /dos/startconsole
echo '$_com1 = "virtual"' >> /etc/dosemu/dosemu.conf
echo '$_timemode = "linux"' >> /etc/dosemu/dosemu.conf
|
Update AUTOEXEC.BAT
vi /etc/dosemu/freedos/autoexec.bat
Code Block |
---|
@echo off
rem autoexec.bat for DOSEMU + FreeDOS
path z:\bin;z:\gnu;z:\dosemu;h:\utils
set HELPPATH=z:\help
set TEMP=c:\tmp
blaster
prompt $P$G
unix -s DOSEMU_VERSION
echo "Welcome to dosemu %DOSEMU_VERSION%!"
CALL E:\BOOTUP
unix -e |
unix2dos /etc/dosemu/freedos/autoexec.bat
Install utilities
Run the following script
Code Block |
---|
#!/bin/bash
set -e
set -x
rm -rf /tmp/setup
mkdir /tmp/setup
## Do the downloads
cd /tmp/setup
wget https://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/simtelnet/msdos/fossil/adf_150.zip
wget https://bbs.bapho.net/bbs/i-drive/generic/pkz204g.exe
wget http://cd.textfiles.com/pier/pier08/046/list91k.zip
wget http://www.filegate.net/comm/dszexe.zip
# Unpack PKZIP
mkdir /tmp/setup/t
cd /tmp/setup/t
unzip ../pkz204g.exe
mv -v PKZIP.EXE PKUNZIP.EXE PKUNZJR.COM /dos/drive_h/UTILS/
cd /tmp/setup
rm -r /tmp/setup/t
# Unpack LIST
mkdir /tmp/setup/t
cd /tmp/setup/t
unzip ../list91k.zip
mv -v LIST.COM /dos/drive_h/UTILS/
cd /tmp/setup
rm -r /tmp/setup/t
# Unpack DSZ
mkdir /tmp/setup/t
cd /tmp/setup/t
unzip ../dszexe.zip
mv -v DSZ.EXE /dos/drive_h/UTILS/
cd /tmp/setup
rm -r /tmp/setup/t
# Unpack ADF (FOSSIL)
cd /dos/drive_h
rm -rf adf
mkdir adf
cd adf
unzip /tmp/setup/adf_150.zip
rm /tmp/setup/adf_150.zip |
Add startdossession script
vi /usr/local/bin/startdossession
Code Block |
---|
#!/bin/bash
# $1 - session name
set -e
if [ -z "$1" ]; then
echo "Syntax: $0 sessionname [dosemuargs]"
exit 1
fi
export SESSION="$1"
SESSPATH="/dos/sessions/$1"
if [ ! -e "$SESSPATH" ]; then
cp -a /dos/session.skel "$SESSPATH"
fi
if check-dosemu-session $SESSION; then
echo "dosemu session $SESSION already running; refusing to start again"
exit 1
fi
HOME=/root # telnetd may not leave this set for us
# Copy .Xauthority, since we have to set HOME
rm -rf "$SESSPATH/.Xauthority"
cp -r $HOME/.Xauthority "$SESSPATH"
# After the first start, we have to copy the drive stuff into here.
DRIVESPATH="$SESSPATH/.dosemu/drives"
if [ -e "$DRIVESPATH" ]; then
cp -an /etc/dosemu/drives/* "$DRIVESPATH"
fi
waitfordaemon vncserver
shift
# Final sanity check.
dotlockfile -p -l "$SESSPATH/jglock"
# -f is an excuse for the session check
stty raw
DISPLAY=:1 HOME="$SESSPATH" exec dosemu -f "$SESSPATH/dosemu.conf" "$@"
dotlockfile -p -u "$SESSPATH/jglock"
|
chmod +x /usr/local/bin/startdossession
Add check-dosemu-session script
vi /usr/local/bin/check-dosemu-session
waitfordaemon vncserver /usr/bin/socat TCP4-LISTEN:23,reuseaddr,fork EXEC:"/usr/local/bin/startnode,pty"
priority=1
directory=/dos
environment=DISPLAY=":1"
autostart=true
autorestart=true
startsecs=5
startretries=1000000
stdout_logfile=NONE
stderr_logfile=NONE |
vi /etc/supervisor/conf.d/tcpsercon.conf
Code Block |
---|
[program:tcpsercon]
command=/usr/bin/tcpser -v 7000 -s 115200 -p 8000
priority=1
directory=/dos
environment=DISPLAY=":1"
autostart=true
autorestart=true
startsecs=5
startretries=1000000
stdout_logfile=NONE
stderr_logfile=NONE |
vi /etc/supervisor/conf.d/telnetinetd.conf
Code Block |
---|
[program:telnetinetd]
command=/usr/local/bin/waitfordaemon vncserver /usr/sbin/inetd -E -i -l
priority=1
directory=/dos
environment=DISPLAY=":1"
autostart=false
autorestart=true
startsecs=5
startretries=1000000
stdout_logfile=NONE
stderr_logfile=NONE |
vi /usr/local/bin/startvnc
Code Block |
---|
#!/bin/bash
echo " *** startvnc script"
set -e
export VNCPASSWORD='xxx'
if [ -z "$VNCPASSWORD" ]; then
VNCPASSWORD=`pwgen 8`
echo " *** VNC password for this session: $VNCPASSWORD"
fi
export USER="`whoami`"
mkdir -p ~/.vnc
echo "$VNCPASSWORD" | tightvncpasswd -f > ~/.vnc/passwd
chmod 0600 ~/.vnc/passwd
tightvncserver -geometry 1024x768 :1
sleep 1
tail -f ~/.vnc/*.log |
vi /usr/local/bin/waitfordaemon
Code Block |
---|
#!/bin/bash
while supervisorctl status "$1" 2>/dev/null | grep -vq 'RUNNING'; do
echo "Waiting for $1"
sleep 1
done
# An additional wait, just to be safe
sleep 3
shift
exec "$@" |
chmod +x /usr/local/bin/waitfordaemon
DOSEmu
Installation
sudo su
apt-get update
apt-get install dosemu
Setup OS and Utilities
Setup Folders
Code Block |
---|
mkdir /dos
for DRIVE in e f g h i j k; do
mkdir -p /dos/drive_$DRIVE
ln -s /dos/drive_$DRIVE /etc/dosemu/drives/$DRIVE
done
mkdir /dos/drive_h/UTILS
mkdir /dos/drive_h/STARTUP
mkdir /dos/sessions
mkdir /dos/session.skel
echo > /dos/drive_e/BOOTUP.BAT
unix2dos /dos/drive_e/BOOTUP.BAT
# These seem to be what dosemu does on start.
#cp -rv /etc/dosemu/freedos /dos/session.skel/drive_c
#mkdir /dos/session.skel/drive_c/tmp
touch /dos/session.skel/dosemu.conf
echo 0 > /dos/numnodes
echo 1 > /dos/startconsole
echo '$_com1 = "virtual"' >> /etc/dosemu/dosemu.conf
echo '$_timemode = "linux"' >> /etc/dosemu/dosemu.conf
|
Update AUTOEXEC.BAT
vi /etc/dosemu/freedos/autoexec.bat
Code Block |
---|
@echo off
rem autoexec.bat for DOSEMU + FreeDOS
path z:\bin;z:\gnu;z:\dosemu;h:\utils
set HELPPATH=z:\help
set TEMP=c:\tmp
blaster
prompt $P$G
unix -s DOSEMU_VERSION
echo "Welcome to dosemu %DOSEMU_VERSION%!"
CALL E:\BOOTUP
unix -e |
unix2dos /etc/dosemu/freedos/autoexec.bat
Install utilities
Run the following script
Code Block |
---|
#!/bin/bash
set -e
set -x
rm -rf /tmp/setup
mkdir /tmp/setup
## Do the downloads
cd /tmp/setup
wget https://ftp.sunet.se/mirror/archive/ftp.sunet.se/pub/simtelnet/msdos/fossil/adf_150.zip
wget https://bbs.bapho.net/bbs/i-drive/generic/pkz204g.exe
wget http://cd.textfiles.com/pier/pier08/046/list91k.zip
wget http://www.filegate.net/comm/dszexe.zip
# Unpack PKZIP
mkdir /tmp/setup/t
cd /tmp/setup/t
unzip ../pkz204g.exe
mv -v PKZIP.EXE PKUNZIP.EXE PKUNZJR.COM /dos/drive_h/UTILS/
cd /tmp/setup
rm -r /tmp/setup/t
# Unpack LIST
mkdir /tmp/setup/t
cd /tmp/setup/t
unzip ../list91k.zip
mv -v LIST.COM /dos/drive_h/UTILS/
cd /tmp/setup
rm -r /tmp/setup/t
# Unpack DSZ
mkdir /tmp/setup/t
cd /tmp/setup/t
unzip ../dszexe.zip
mv -v DSZ.EXE /dos/drive_h/UTILS/
cd /tmp/setup
rm -r /tmp/setup/t
# Unpack ADF (FOSSIL)
cd /dos/drive_h
rm -rf adf
mkdir adf
cd adf
unzip /tmp/setup/adf_150.zip
rm /tmp/setup/adf_150.zip |
Add startdossession script
vi /usr/local/bin/startdossession
Code Block |
---|
#!/bin/bash
# $1 - session name
set -e
if [ -z "$1" ]; then
echo "Syntax: $0 sessionname [dosemuargs]"
exit 1
fi
export SESSION="$1"
SESSPATH="/dos/sessions/$1"
if [ ! -e "$SESSPATH" ]; then
cp -a /dos/session.skel "$SESSPATH"
fi
if check-dosemu-session $SESSION; then
echo "dosemu session $SESSION already running; refusing to start again"
exit 1
fi
HOME=/root # telnetd may not leave this set for us
# Copy .Xauthority, since we have to set HOME
rm -rf "$SESSPATH/.Xauthority"
cp -r $HOME/.Xauthority "$SESSPATH"
# After the first start, we have to copy the drive stuff into here.
DRIVESPATH="$SESSPATH/.dosemu/drives"
if [ -e "$DRIVESPATH" ]; then
cp -an /etc/dosemu/drives/* "$DRIVESPATH"
fi
waitfordaemon vncserver
shift
# Final sanity check.
dotlockfile -p -l "$SESSPATH/jglock"
# -f is an excuse for the session check
stty raw
DISPLAY=:1 HOME="$SESSPATH" exec dosemu -f "$SESSPATH/dosemu.conf" "$@"
dotlockfile -p -u "$SESSPATH/jglock"
|
chmod +x /usr/local/bin/startdossession
Add check-dosemu-session script
vi /usr/local/bin/check-dosemu-session
Code Block |
---|
#!/bin/bash
# Check if a dosemu session named "$1" is running.
# If yes, exit with code 0 and display its PID.
# If no, exit with code 1.
pgrep -f "dosemu.*/dos/sessions/$1/dosemu.conf" |
chmod +x /usr/local/bin/check-dosemu-session
Add startnode script
vi /usr/local/bin/startnode
Code Block |
---|
#!/bin/bash
set -e
MAXNODE=${BBSNODES:-`cat /dos/numnodes`}
FOUNDNODE=""
for NODE in `seq 1 $MAXNODE`; do
if ! check-dosemu-session node$NODE &> /dev/null; then
FOUNDNODE="$NODE"
break
fi
done
if [ -z "$FOUNDNODE" ]; then
echo "All nodes are busy now; please try again later."
exit 1
fi
SESSNAME=node$FOUNDNODE
STARTUP=/dos/drive_h/STARTUP/NODE$FOUNDNODE.BAT
# Hook to let node prep happen
if [ -e /dos/nodeprephook.sh ]; then
. /dos/nodeprephook.sh
fi
printf "Welcome to node $FOUNDNODE. Please stand by while we connect you...\r\n"
exec startdossession $SESSNAME "H:\\STARTUP\\NODE$FOUNDNODE |
Code Block |
#!/bin/bash
# Check if a dosemu session named "$1" is running.
# If yes, exit with code 0 and display its PID.
# If no, exit with code 1.
pgrep -f "dosemu.*/dos/sessions/$1/dosemu.conf" |
chmod +x /usr/local/bin/check-dosemu-sessionstartnode
Add dosconsole Add startnode script
vi /usr/local/bin/startnode/bin/dosconsole
Code Block |
---|
#!/bin/bash
export DISPLAY=:1
SESSNAME="console"
set -e
set -x |
Code Block |
#!/bin/bash set -e MAXNODE=${BBSNODES:-`cat /dos/numnodes`} FOUNDNODE="" for NODE in `seq 1 $MAXNODE`; do if ! check-dosemu-session node$NODE &> /dev/null; then FOUNDNODE="$NODE" break fi done if [ -z "$FOUNDNODE""`cat /dos/startconsole`" = 0 ]; then echo "All$0 nodesstartup aredisabled busy now; please try again later." exit 1 fi SESSNAME=node$FOUNDNODE STARTUP=/dos/drive_h/STARTUP/NODE$FOUNDNODE.BAT # Hook to let node prep happenby /dos/startconsole; not starting." sleep 900d exit 0 fi waitfordaemon vncserver true waitfordaemon tcpsercon true exec socat TCP4:localhost:7000 EXEC:"startdossession console",pty |
vi /dos/nodeprephook.sh
Code Block |
---|
# Called by startnode if [ ! -e /dos/nodeprephook.sh$STARTUP ]; then . /dos/nodeprephook.sh fi printf "Welcome to node $FOUNDNODE. Please stand by while we connect you...\r\n" exec startdossession $SESSNAME "H:\\STARTUP\\NODE$FOUNDNODE" |
chmod +x /usr/local/bin/startnode
Add dosconsole script
vi /usr/local/bin/dosconsole
Code Block |
---|
#!/bin/bash export DISPLAY=:1 SESSNAME="console" set -e set -x if [ "`cat /dos/startconsole`" = 0 ]; thenecho "H:" >> $STARTUP.tmp echo "cd ADF" >> $STARTUP.tmp echo "lh adf COM1 3F8 4 115200 8192 8192 8" >> $STARTUP.tmp echo "G:" >> $STARTUP.tmp echo "cd rg" >> $STARTUP.tmp echo "$0renegade startup/N$FOUNDNODE disabled by /dos/startconsole; not starting." sleep 900d exit 0 fi #waitfordaemon vncserver true #waitfordaemon tcpsercon true exec socat TCP4:localhost:7000 EXEC:"startdossession console",pty-Q -B115200" >> $STARTUP.tmp echo "exitemu" >> $STARTUP.tmp unix2dos $STARTUP.tmp &> /dev/null mv $STARTUP.tmp $STARTUP fi |
chmod +x /dos/nodeprephook.sh
Update inetd.conf
vi /etc/inetd.conf
...
Fill in Path to Drop File, Drop file type.
Drop Path | g:\rg\temp1 |
BBS Drop File Type | DOOR |
Configure Renegade
In Renegade, perform the following steps:
...