Initial commit

main
Jerry Aldrich 5 years ago
commit 67140d743a
  1. 4
      .gitignore
  2. 88
      Dockerfile
  3. 33
      README.md
  4. 1
      TODO.md
  5. 341
      dgamelaunch.conf
  6. 221
      dgl-create-chroot.sh
  7. 18
      dgl_menu_main_user.txt
  8. 30
      entrypoint.sh
  9. 41
      hints.sh
  10. 13
      sshd_config

4
.gitignore vendored

@ -0,0 +1,4 @@
**/data
**/dgldir/
**/nethack_var/
**/sshd_host_keys/

@ -0,0 +1,88 @@
FROM debian:stable-slim as build
ARG nethack_version=3.6.6
RUN apt-get update -y
RUN apt-get install -y gcc make flex bison build-essential git libncurses5-dev wget autotools-dev autoconf sqlite3 libsqlite3-dev
# Build dgamelaunch
WORKDIR /
RUN git clone git://github.com/paxed/dgamelaunch.git
WORKDIR dgamelaunch
RUN ./autogen.sh --enable-sqlite --enable-shmem --with-config-file=/opt/nethack/nethack.jerryaldrichiii.com/etc/dgamelaunch.conf
RUN make
COPY dgl-create-chroot.sh dgl-create-chroot.sh
RUN sh dgl-create-chroot.sh
WORKDIR /opt/nethack/nethack.jerryaldrichiii.com/
# Copy libs needed at runtime
RUN cp /lib/x86_64-linux-gnu/libncurses.so.6 lib/x86_64-linux-gnu/
RUN cp /lib/x86_64-linux-gnu/libnss_files.so.2 lib/x86_64-linux-gnu/libnss_files.so.2
COPY dgamelaunch.conf etc/dgamelaunch.conf
# Build Nethack
WORKDIR /
RUN wget https://github.com/NetHack/NetHack/archive/NetHack-${nethack_version}_Released.tar.gz
RUN tar xvzf NetHack*.tar.gz
WORKDIR NetHack-NetHack-${nethack_version}_Released
COPY ./hints.sh hints.sh
RUN sh sys/unix/setup.sh hints.sh
RUN make && make install
# TODO: Add a custom sysconf? https://nethackwiki.com/wiki/Sysconf
RUN cp -R /root/nethack/chroot/nethack/* /opt/nethack/nethack.jerryaldrichiii.com/nethack
RUN chown games:games /opt/nethack/nethack.jerryaldrichiii.com/nethack/sysconf
# Could probably use alpine..but I'm too lazy to trackdown libc/musl errors
FROM debian:stable-slim
LABEL maintainer "jerryaldrichiii@gmail.com"
RUN apt-get update && apt-get install -y openssh-server && apt-get clean
COPY --from=build /opt/nethack/nethack.jerryaldrichiii.com/ /opt/nethack/nethack.jerryaldrichiii.com
RUN cp -R /opt/nethack/nethack.jerryaldrichiii.com/dgldir /opt/nethack/nethack.jerryaldrichiii.com/dgldir.orig
RUN cp -R /opt/nethack/nethack.jerryaldrichiii.com/nethack/var /opt/nethack/nethack.jerryaldrichiii.com/nethack_var.orig
RUN cp /opt/nethack/nethack.jerryaldrichiii.com/usr/lib/x86_64-linux-gnu/* /usr/lib/x86_64-linux-gnu/
COPY dgl_menu_main_user.txt /opt/nethack/nethack.jerryaldrichiii.com/
RUN useradd --no-create-home --gid 60 --shell /opt/nethack/nethack.jerryaldrichiii.com/dgamelaunch nethack
RUN passwd -d nethack
RUN chown -R nethack:games /opt/nethack/nethack.jerryaldrichiii.com/nethack
# If you figure out how to make this run without suid or root...let me know
RUN chmod 4755 /opt/nethack/nethack.jerryaldrichiii.com/dgamelaunch
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Configure SSHD
RUN mkdir -p /srv/sshd/host_keys
COPY sshd_config /srv/sshd/sshd_config
RUN chown -R nethack /srv/sshd
RUN cp /etc/passwd /opt/nethack/nethack.jerryaldrichiii.com/etc
RUN chown nethack /etc/shadow
EXPOSE 2323
VOLUME ["/opt/nethack/nethack.jerryaldrichiii.com/dgldir"]
VOLUME ["/opt/nethack/nethack.jerryaldrichiii.com/nethack/var"]
VOLUME ["/srv/sshd/host_keys"]
USER nethack
ENTRYPOINT ["/entrypoint.sh"]

@ -0,0 +1,33 @@
# nethack-server via dgamelaunch + Docker
## Setup
Create SSHD host keys (optional):
```
mkdir bootstrap
ssh-keygen -N '' -t rsa -f data/sshd_host_keys/sshd_host_rsa_key
```
Run the server:
```
docker build . -t replaceme/nethack-server:latest
# These directories will contain your persistent data
mkdir -p data/{dgldir,nethack_var,sshd_host_keys}
sudo chown -R 1000:60 data
docker run -it --rm \
-p 2222:2222 \
-v $(pwd)/data/dgldir:/opt/nethack/nethack.jerryaldrichiii.com/dgldir \
-v $(pwd)/data/nethack_var:/opt/nethack/nethack.jerryaldrichiii.com/nethack/var \
-v $(pwd)/data/sshd_host_keys:/srv/sshd/host_keys \
replaceme/nethack-server:latest
```
# Forgive me
This was a weekend project...it could use some work.
See: TODO.md

@ -0,0 +1 @@
Substitute nethack.jerryaldrichii.com with a variable

@ -0,0 +1,341 @@
# This is a sample dgamelaunch configuration file. Only bash-style comments
# are allowed, such as this. Each configuration option will be explained
# along with its default value.
# Global config variables:
# Max amount of registered users to allow. Has no effect if dgl was
# compiled with SQLite
maxusers = 64000
# Allow registration of new nicks? (yes or no)
allow_new_nicks = yes
# Max length for newly registered nicks. Must be less than 20.
# By default, NetHack only stores the first 10 chars of a name into
# the record/logfile.
maxnicklen = 10
# Set the default watching-screen sorting mode. Can be one of
# "username", "game", "windowsize", "starttime" or "idletime".
# "username" is the default.
#sortmode = "username"
# Set the columns displayed in the watching-screen. Each column definition
# must have four elements as:
# [ "<display title>", "<sortname>", <Screen column>, "<printf format>" ]
#
# <sortname> may be "unsorted", "username", "game", "windowsize", "starttime",
# "duration", "idletime", or (if shmem is enabled) "watchers".
#
# watch_columns = [ ["", "", 1, "%s)"],
# ["User", "username", 4, "%-15s"],
# ["Game", "game", 21, "%-11s"],
# ["Term", "windowsize", 34, "%s"],
# ["Idle", "idletime", 43, "%-10s"],
# ["Watchers", "watchers", 55, "%5s"],
# ["Started", "starttime", 65, "%s"]
# ]
# Path to a prepared chroot jail.
chroot_path = "/opt/nethack/nethack.jerryaldrichiii.com/"
# From inside the jail, dgamelaunch's working directory for rcfiles/ttyrec/etc
dglroot = "/dgldir/"
# Strings to be replaced in every banner
# you can have either direct string replacements, like
# "$FOO" = "BAR", or you can get the server time with
# "$FOO" = timeformat("%F %T")
# for the timeformat parameter string format, see man strftime
bannervars = [
"$MOTDTIME" = "2011.10.08",
"$SERVERID" = "$ATTR(14)nethack.jerryaldrichiii.com$ATTR()",
"$DATETIME" = timeformat("%F %T")
]
# From inside the jail, location of a banner file, which is
# shown in submenus that cannot be defined separately.
# Some string substitution is done for every banner file contents:
# - bannervars from above
# - $VERSION replaced with "dgamelaunch v" + dgl version number.
# - $USERNAME replaced with logged-in user's name, or with "[Anonymous]"
# - $INCLUDE(filename) the named file will be inserted here.
banner = "/dgl-banner"
# The following two options are fairly insecure. They will force us to
# load the password/group database into memory while still having root
# privileges. Replace them with shed_uid/shed_gid entries as soon as
# possible if you decide to use them. dgamelaunch will inform you of
# the uids/gids corresponding to your choices when it loads.
#
# Note that shed_uid and shed_gid will always take precedence over
# shed_user and shed_group if they are specified.
# shed_user: username to shed privileges to
#shed_user = "games"
# shed_group: group name to shed privileges to
#shed_group = "games"
# Preferably, you may use the respective gids/uids. This is for Debian:
shed_uid = 1000
shed_gid = 60
# Locale. Leaving this out, dgamelaunch will not explicitly set locale.
locale = "en_US.UTF-8"
# Default TERM, used if the user's $TERM is unknown.
# If undefined, dgamelaunch will just terminate in that case.
default_term = "xterm"
# Should dgl send select-UTF8-charset escape code? (that is: ESC % G)
# default is no.
#utf8esc = yes
# Should dgl allow XON/XOFF? Default is "yes", meaning "don't touch it".
# "no" disables XON/XOFF
#flowcontrol = no
# Maximum time in seconds user can idle in the dgamelaunch menus
# before dgl exits. Default value is 0, which disables the idling timer.
# Does not apply to external programs or config editors.
# For setting game idle time, use max_idle_time in the game DEFINE.
# menu_max_idle_time = 1024
# Passwd refers to the file that stores the user database.
# The default passwd file is "/dgl-login" for flat-text database, and for
# sqlite, whatever value was defined for the sqlite database at compile time.
# This is also used for the shared memory key, if shmem is enabled at compile
# time.
#passwd = "/dgl-login"
# Lockfile is used only when dgl was compiled without sqlite.
#lockfile = "/dgl-lock"
#
# define some commands that are run when something happens. format is
# commands [ <time> ] = <command> ...
#
# <time> can be one of:
# dglstart = when someone telnets in
# login = when user has logged in
# register = right after a new user is registered
# gamestart = just before a game is started
# gameend = after a game ends (see also per-game "postcommand" define)
#
# <command> is:
# mkdir "foo" = create a directory "foo"
# chdir "foo" = change current work dir to "foo"
# cp "foo" "bar" = copy file "foo" to "bar", overwriting previous "bar"
# ifnxcp "foo" "bar" = copy file "foo" to "bar", if "bar" doesn't exist
# unlink "foo" = delete file "foo"
# setenv "foo" "bar" = set environment variable "foo" to "bar"
# exec "foo" "bar" = execute "foo" with "bar" as it's param
# rawprint "foo" = output string "foo"
# chpasswd = do the change password prompting, if logged in
# chmail = do the change email prompting, if logged in
# watch_menu = go to the watching menu
# quit = quit dgl
# ask_login = do the login prompting, if not logged in
# ask_register = do register new user prompting, if not logged in and
# registration of new nicks is allowed.
# play_game "foo" = start game which has the short name "foo"
# (user must be logged in)
# play_if_exist "foo" "file" = start game "foo", if file "file" exists.
# submenu "foo" = go to submenu "foo"
# return = return from submenu
#
# NOTE: edit_options-command was removed. use ifnxcp and exec to simulate it.
#
# The commands will be done inside the chroot and with the uid and gid
# defined above.
# Parameters to the commands are subject to variable substitution:
# %r = dglroot, as defined above
# %n = user nick, if user is logged in
# %N = first character of user name, if user is logged in
# %u = shed_uid, as defined above, but numeric
# %g = game name, if user has selected a game.
# %s = short game name, if user has selected a game.
# %t = ttyrec path & filename of the last game played.
#
# Also some escape codes:
# \\ = backslash
# \a = bell
# \b = backspace
# \e = escape character
# \f = form feed
# \n = newline
# \r = carriage return
# \t = tab
# \v = vertical tab
#
# eg. commands[login] = mkdir "foo", unlink "bar", setenv "Z" "foo"
#
# Change the terminal title: (assuming terminals support the escape code)
#commands[dglstart] = rawprint "\e]2;nethack.alt.org\a"
# create the user's dirs when they register
commands[register] = mkdir "%ruserdata/%n",
mkdir "%ruserdata/%n/dumplog",
mkdir "%ruserdata/%n/ttyrec"
commands[login] = mkdir "%ruserdata/%n",
mkdir "%ruserdata/%n/dumplog",
mkdir "%ruserdata/%n/ttyrec"
# file mode for when commands copy files.
# readable and writable by all. you could use eg. "0644" to be more secure.
filemode = "0666"
# Define the main menus.
# You _must_ define "mainmenu_anon" and "mainmenu_user".
# $VERSION and $SERVERID will be replaced, as per the bannerfile above.
# First, the menu shown to anonymous user:
menu["mainmenu_anon"] {
bannerfile = "dgl_menu_main_anon.txt"
cursor = (5,18)
commands["l"] = ask_login
commands["r"] = ask_register
commands["w"] = watch_menu
commands["q"] = quit
}
# Then the menu shown when the user has logged in:
# $USERNAME in here will be replaced with the user name.
menu["mainmenu_user"] {
# contents of this file are written to screen.
# the file must be inside the chroot.
# Some string subsitutions can be done in the file:
# $INCLUDE(filename) = includes the file to this file.
# String substitutions defined in bannervars-section above.
# $VERSION = dgamelaunch version
# $USERNAME = user name (or [Anonymous] if not logged in)
# $ATTR(params) = change text color and attributes.
# params can be either number (to set the text color),
# one, or any of "b" (bold), "s" (standout), "u" (underline),
# "r" (reverse) or "d" (dim),
# or both color number and attribute characters, separated by colon.
# Empty param resets color and attributes to default.
bannerfile = "dgl_menu_main_user.txt"
# after which cursor is moved to this location
# if cursor-definition is missing, the cursor is put
# to the end of the last line of the banner.
# cursor = (5,18)
# keys we accept. format is
# commands["string_of_keys"] = <commandlist>
# for example, you could use commands["qQ"] = quit
commands["c"] = chpasswd
commands["e"] = chmail
commands["w"] = watch_menu
commands["o"] = ifnxcp "/dgl-default-rcfile.nh" "%ruserdata/%n/%n.nhrc",
exec "/bin/virus" "%ruserdata/%n/%n.nhrc"
commands["p"] = play_game "NH"
commands["q"] = quit
}
# this menu is shown when user presses '?' in the watching menu
menu["watchmenu_help"] {
bannerfile = "dgl_menu_watchmenu_help.txt"
commands["qQ "] = return
}
# Next, we'll define one game's data:
DEFINE {
game_path = "/nethack/nethack"
game_name = "NetHack"
short_name = "NH"
game_args = "/nethack/nethack", "-u", "%n"
spooldir = "/mail/"
rc_template = "/dgl-default-rcfile.nh"
rc_fmt = "%ruserdata/%n/%n.nhrc"
inprogressdir = "%rinprogress-nh/"
# The place where ttyrecs are stored for this game.
# If this is not defined, ttyrecs are not saved for this game.
# Leaving this undefined also means the games cannot be spectated.
ttyrecdir = "%ruserdata/%n/ttyrec/"
# back up savefile
commands = cp "/nethack/var/save/%u%n.gz" "/nethack/var/save/%u%n.gz.bak",
# set NETHACKOPTIONS to point to the rcfile
setenv "NETHACKOPTIONS" "@%ruserdata/%n/%n.nhrc",
# set up nethack mail stuff, assuming it's compiled with it...
setenv "MAIL" "/mail/%n",
setenv "SIMPLEMAIL" "1",
# don't let the mail file grow
unlink "/mail/%n"
}
#
# the second game
#
#
#DEFINE {
# # From inside the jail, the location of the binary to be launched.
# game_path = "/bin/nethackstub"
#
# # Full name of the game
# game_name = "NetHack stub"
#
# # Short name, used in the watching menu
# short_name = "NHstb"
#
# # Game ID - should be unique. Defaults to game_name, if not defined.
# # Used to determine which game is which for "play_game" and "play_if_exists" commands
# game_id = "NHstb"
#
# # arguments for when we exec the binary
# game_args = "/bin/nethackstub",
# "foo",
# "user:%n",
# "shed_uid:%u",
# "bar"
#
# # From inside the jail, where dgamelaunch should put mail.
# spooldir = "/var/mail/"
#
# # From inside the jail, the default .nethackrc that is copied for new users.
# # rc_template = "/dgl-default-rcfile"
#
# # If player idles longer than max_idle_time seconds, the game will
# # receive a sighup. Default value is 0, which disables the idling timer.
# max_idle_time = 2000
#
# # Player-specific path to an extra information file written by the game
# # The game should write the extra information on one line in this format:
# # <numeric-weight>|extra-information
# # For example, the game might write: "100|Astral", "1|D:1", etc. to indicate
# # where the player is in the game world. The numeric weight is used when
# # a spectator sorts games by the extra information field: higher weights
# # will be sorted to appear before lower weights.
# #
# extra_info_file = "%rgamedir/%n.extrainfo"
#
# # Make sure the inprogress dir actually exists. default is "inprogress/"
# # Each game you define here must have it's own.
# inprogressdir = "%rinprogress-nethackstub/"
#
# # We can also define per-game commands, that are executed
# # when the game starts:
# # commands = chdir "/dgldir", mkdir "foo_%u_%g"
#
# # We can also define per-game commands executed after the game ends,
# # but before commands[gameend]
# postcommands = chdir "/"
#
# # If the game uses an ancient encoding, you may specify "ibm" or "dec".
# # If set to "ask", the game will be run with --print-charset beforehand,
# # expected to return one of these values.
# encoding = "unicode"
#}

@ -0,0 +1,221 @@
#!/bin/sh
# Ideas and some parts from the original dgl-create-chroot (by joshk@triplehelix.org, modifications by jilles@stack.nl)
# This one by paxed@alt.org then jerryaldrichiii@gmail.com
#
# configure dgl with --with-config-file=/path_to_chroot/etc/dgamelaunch.conf, if you want the conf file inside the chroot.
#
# Same as chroot_path in dgl config file
CHROOT="/opt/nethack/nethack.jerryaldrichiii.com/"
# the user & group from dgamelaunch config file.
USRGRP="games:games"
# COMPRESS from include/config.h; the compression binary to copy. leave blank to skip.
COMPRESSBIN="/bin/gzip"
# nethack binary to copy into chroot (leave blank to skip)
#NETHACKBIN="/root/nethack/chroot/nethack/nethack"
# fixed data to copy (leave blank to skip)
#NH_PLAYGROUND_FIXED="/home/paxed/hacking/coding/nethacksource/nethack-3.4.3-nao/nh/"
# HACKDIR from include/config.h; aka nethack subdir inside chroot
NHSUBDIR="/nethack/"
# VAR_PLAYGROUND from include/unixconf.h
NH_VAR_PLAYGROUND="/nethack/var/"
# only define this if dgl was configured with --enable-sqlite
SQLITE_DBFILE="/dgldir/dgamelaunch.db"
# END OF CONFIG
##############################################################################
errorexit()
{
echo "Error: $@" >&2
exit 1
}
findlibs()
{
for i in "$@"; do
if [ -z "`ldd "$i" | grep 'not a dynamic executable'`" ]; then
echo $(ldd "$i" | awk '{ print $3 }' | egrep -v ^'\(')
echo $(ldd "$i" | grep 'ld-linux' | awk '{ print $1 }')
fi
done
}
##############################################################################
if [ -z "$TERMDATA" ]; then
SEARCHTERMDATA="/etc/terminfo /usr/share/lib/terminfo /usr/share/terminfo /lib/terminfo"
for dir in $SEARCHTERMDATA; do
if [ -e "$dir/x/xterm" ]; then
TERMDATA="$TERMDATA $dir"
fi
done
if [ -z "$TERMDATA" ]; then
errorexit "Couldn't find terminfo definitions. Please specify in 'TERMDATA' variable."
fi
fi
# remove trailing slash, if any
CHROOT="`echo ${CHROOT%/}`"
set -e
umask 022
if [ -e "$CHROOT" ]; then
errorexit "Chroot $CHROOT already exists."
fi
CURDIR="`pwd`"
if [ ! -e "$CURDIR/dgamelaunch" ]; then
errorexit "Cannot find dgamelaunch in $CURDIR"
fi
DGLFILE="dgamelaunch.`date +%Y%m%d`"
echo "Setting up chroot in $CHROOT"
LIBS="`findlibs dgamelaunch`"
mkdir -p "$CHROOT" || errorexit "Cannot create chroot"
cd "$CHROOT"
mkdir dgldir etc lib mail usr bin
chown "$USRGRP" dgldir mail
cp "$CURDIR/dgamelaunch" "$DGLFILE"
ln -s "$DGLFILE" dgamelaunch
mkdir -p "$CHROOT/dgldir/inprogress-nh"
mkdir -p "$CHROOT/dgldir/userdata"
chown "$USRGRP" "$CHROOT/dgldir/inprogress-nh"
chown "$USRGRP" "$CHROOT/dgldir/userdata"
if [ -n "$SQLITE_DBFILE" ]; then
if [ "x`which sqlite3`" = "x" ]; then
errorexit "No sqlite3 found."
else
echo "Creating SQLite database at $SQLITE_DBFILE"
SQLITE_DBFILE="`echo ${SQLITE_DBFILE%/}`"
SQLITE_DBFILE="`echo ${SQLITE_DBFILE#/}`"
sqlite3 "$CHROOT/$SQLITE_DBFILE" "create table dglusers (id integer primary key, username text, email text, env text, password text, flags integer);"
chown "$USRGRP" "$CHROOT/$SQLITE_DBFILE"
fi
fi
if [ -n "$COMPRESSBIN" -a -e "`which $COMPRESSBIN`" ]; then
COMPRESSDIR="`dirname $COMPRESSBIN`"
COMPRESSDIR="`echo ${COMPRESSDIR%/}`"
COMPRESSDIR="`echo ${COMPRESSDIR#/}`"
echo "Copying $COMPRESSBIN to $COMPRESSDIR"
mkdir -p "$COMPRESSDIR"
cp "`which $COMPRESSBIN`" "$COMPRESSDIR/"
LIBS="$LIBS `findlibs $COMPRESSBIN`"
fi
mkdir -p dev
cd dev
mknod urandom c 1 9
cd ..
cd etc
cp "$CURDIR/examples/dgamelaunch.conf" .
echo "Edit $CHROOT/etc/dgamelaunch.conf to suit your needs."
[ -f /etc/localtime ] && cp /etc/localtime .
cd ..
cd bin
cp "$CURDIR/ee" .
cp "$CURDIR/virus" .
echo "Copied text editors 'ee' and 'virus' to chroot."
cd ..
cp "$CURDIR/examples/dgl_menu_main_anon.txt" .
cp "$CURDIR/examples/dgl_menu_main_user.txt" .
cp "$CURDIR/examples/dgl_menu_watchmenu_help.txt" .
cp "$CURDIR/examples/dgl-banner" .
cp "$CURDIR/dgl-default-rcfile" "dgl-default-rcfile.nh"
chmod go+r dgl_menu_main_anon.txt dgl_menu_main_user.txt dgl-banner dgl-default-rcfile.nh
NHSUBDIR="`echo ${NHSUBDIR%/}`"
NHSUBDIR="`echo ${NHSUBDIR#/}`"
mkdir "$CHROOT/$NHSUBDIR"
if [ -n "$NETHACKBIN" -a ! -e "$NETHACKBIN" ]; then
errorexit "Cannot find NetHack binary $NETHACKBIN"
fi
if [ -n "$NETHACKBIN" -a -e "$NETHACKBIN" ]; then
echo "Copying $NETHACKBIN"
cd "$NHSUBDIR"
NHBINFILE="`basename $NETHACKBIN`.`date +%Y%m%d`"
cp "$NETHACKBIN" "$NHBINFILE"
ln -s "$NHBINFILE" nethack
LIBS="$LIBS `findlibs $NETHACKBIN`"
cd "$CHROOT"
fi
NH_PLAYGROUND_FIXED="`echo ${NH_PLAYGROUND_FIXED%/}`"
if [ -n "$NH_PLAYGROUND_FIXED" -a -d "$NH_PLAYGROUND_FIXED" ]; then
echo "Copying NetHack playground stuff."
NHFILES="*.lev *.dat cmdhelp data dungeon help hh history license opthelp options oracles recover rumors wizhelp"
for fil in $NHFILES; do
cp $NH_PLAYGROUND_FIXED/$fil "$CHROOT/$NHSUBDIR/"
done
fi
NH_VAR_PLAYGROUND="`echo ${NH_VAR_PLAYGROUND%/}`"
NH_VAR_PLAYGROUND="`echo ${NH_VAR_PLAYGROUND#/}`"
echo "Creating NetHack variable dir stuff."
if [ -n "$NH_VAR_PLAYGROUND" ]; then
mkdir -p "$CHROOT/$NH_VAR_PLAYGROUND"
chown -R "$USRGRP" "$CHROOT/$NH_VAR_PLAYGROUND"
fi
mkdir -p "$CHROOT/$NH_VAR_PLAYGROUND/save"
chown -R "$USRGRP" "$CHROOT/$NH_VAR_PLAYGROUND/save"
touch "$CHROOT/$NH_VAR_PLAYGROUND/logfile"
touch "$CHROOT/$NH_VAR_PLAYGROUND/perm"
touch "$CHROOT/$NH_VAR_PLAYGROUND/record"
touch "$CHROOT/$NH_VAR_PLAYGROUND/xlogfile"
chown -R "$USRGRP" "$CHROOT/$NHSUBDIR"
chown -R "$USRGRP" "$CHROOT/$NH_VAR_PLAYGROUND"
# Curses junk
if [ -n "$TERMDATA" ]; then
echo "Copying termdata files from $TERMDATA"
for termdat in $TERMDATA; do
mkdir -p "$CHROOT`dirname $termdat`"
if [ -d $termdat/. ]; then
cp -LR $termdat/. $CHROOT$termdat
else
cp $termdat $CHROOT`dirname $termdat`
fi
done
fi
LIBS=`for lib in $LIBS; do echo $lib; done | sort | uniq`
echo "Copying libraries:" $LIBS
for lib in $LIBS; do
mkdir -p "$CHROOT`dirname $lib`"
cp $lib "$CHROOT$lib"
done
echo "Finished."

@ -0,0 +1,18 @@
## $SERVERID
##
## $VERSION - network console game launcher
## Copyright (c) 2000-2010 The Dgamelaunch Team
## See http://nethackwiki.com/wiki/dgamelaunch for more info
##
## Games on this server are recorded for in-progress viewing and playback!
Logged in as: $USERNAME
c) Change password
e) Change email address
w) Watch games in progress
o) Edit options
p) Play NetHack
q) Quit
=>

@ -0,0 +1,30 @@
#!/bin/sh
set -e
CHROOTDIR=/opt/nethack/nethack.jerryaldrichiii.com
# Copy dgldir on initial run
if [ ! -d $CHROOTDIR/dgldir/userdata ]; then
echo "No dgldir detected, copying from image"
# Need archive here to get original attributes
cp -a $CHROOTDIR/dgldir.orig/* $CHROOTDIR/dgldir/
fi
# Copy nethack/var on initial run
if [ ! -d $CHROOTDIR/nethack/var/save ]; then
echo "No nethack_var detected, copying from image"
# Need archive here to get original attributes
cp -a $CHROOTDIR/nethack_var.orig/* $CHROOTDIR/nethack/var
fi
mkdir -p /srv/sshd/host_keys
if [ ! -f /srv/sshd/host_keys/sshd_host_rsa_key ]; then
echo "No SSHD host key found at /srv/sshd/host_keys/sshd_host_rsa_key"
printf "Generating SSHD host key pair"
ssh-keygen -N '' -t rsa -f /srv/sshd/host_keys/sshd_host_rsa_key
chmod 400 /srv/sshd/host_keys/sshd_host_rsa_key
echo "SSHD host key pair generated successfully"
fi
/usr/sbin/sshd -f /srv/sshd/sshd_config -De

@ -0,0 +1,41 @@
#-PRE
# Linux hints file
# This hints file provides a chrooted build for Linux, specifically
# for Ubuntu dapper.
# Does not copy required libraries or termcap files into the chroot.
COMPILEREVISION?=1
# this is the chroot dir
PREFIX=$(wildcard ~)/nethack/chroot
# this is the dir where NetHack is inside the chroot
HACKDIR=/nethack
INSTDIR=$(PREFIX)$(HACKDIR)
SHELLDIR=$(PREFIX)/games
VARDIR=$(INSTDIR)/var
POSTINSTALL=cp -n sys/unix/sysconf $(INSTDIR)/sysconf; $(CHOWN) $(GAMEUID) $(INSTDIR)/sysconf; $(CHGRP) $(GAMEGRP) $(INSTDIR)/sysconf; chmod $(VARFILEPERM) $(INSTDIR)/sysconf;
CFLAGS1=-DCOMPRESS=\"/bin/gzip\" -DCOMPRESS_EXTENSION=\".gz\"
CFLAGS=-g -O -I../include -DNOTPARMDECL $(CFLAGS1) -DDLB
CFLAGS+=-DSYSCF -DSYSCF_FILE=\"$(HACKDIR)/sysconf\" -DSECURE
CFLAGS+=-DTIMED_DELAY
CFLAGS+=-DHACKDIR=\"$(HACKDIR)\"
CFLAGS+=-DVAR_PLAYGROUND=\"$(HACKDIR)/var\"
LINK=$(CC)
# Only needed for GLIBC stack trace:
LFLAGS=-rdynamic
WINSRC = $(WINTTYSRC)
WINOBJ = $(WINTTYOBJ)
WINLIB = $(WINTTYLIB)
WINTTYLIB=-lncurses -ltinfo
CHOWN=true
CHGRP=true
VARDIRPERM = 0755
VARFILEPERM = 0600
GAMEPERM = 0755

@ -0,0 +1,13 @@
Port 2222
PermitRootLogin no
PermitEmptyPasswords yes
AllowAgentForwarding no
AllowTcpForwarding no
PermitTTY yes
X11Forwarding no
PrintMotd no
PidFile /srv/sshd/sshd.pid
HostKey /srv/sshd/host_keys/sshd_host_rsa_key
Loading…
Cancel
Save