From e2d114fcec0c601670f34425ccd3f04e872149d3 Mon Sep 17 00:00:00 2001 From: sbkelley Date: Sat, 23 May 2026 19:57:54 -0400 Subject: [PATCH] Merge branch 'dev' (cherry picked from commit dc9c243e4ce81a1c78f54a33b3831f7662c1ce0c) --- README => README.bak | 74 -------------- README.md | 158 +++++++++++++++++++++++++++++ dgl-nh500.patch | 8 +- install-dgl-nh500 | 235 ++++++++++++++++++++++++++++++++++--------- 4 files changed, 349 insertions(+), 126 deletions(-) rename README => README.bak (76%) create mode 100644 README.md diff --git a/README b/README.bak similarity index 76% rename from README rename to README.bak index 0ffeba8..2ecc7ef 100644 --- a/README +++ b/README.bak @@ -1,77 +1,3 @@ -To install and use NetHack and dgamelaunch, simply (tested as working on -Debian 6.12.88-1, with prerequisites already installed): - -After downloading this version of dgamelaunch: - -cd dgamelaunch-nh500 -sudo ./install-dgl-nh500 - -dgamelaunch will be installed at /opt/dgamelaunch, and NetHack 5.0.0 will be -installed in /opt/dgamelaunch/opt/nh500. - -To test the system: - -sudo /opt/dgamelaunch/bin/dgamelaunch - -Try to register a new user, login, and play the game. -If it works, brilliant! If it doesn't work, try the NetHack binary: - -sudo chroot /opt/dgamelaunch nh500 - -If that fails, it might be a missing library. Check /opt/dgamelaunch/lib/ and /lib64, and -compare the contents with the results of `ldd /opt/dgamelaunch/bin/nh500`. -Then copy over libraries as necessary. - - -If it's working, then you may wish to let people connect to the server just like other servers you see online. - -To do this, you will need to do something pretty dangerous -- let anyone run dgamelaunch, even though it has -root privileges. - -sudo chmod a+s /opt/dgamelaunch/bin/dgamelaunch. - -Replace with the appropriate string of numbers, obviously. From here, any user can run dgamelaunch on -your system, which might potentially create a vulnerability. - -Next, set up a new user. On Debian: - -adduser nethack - -And follow the prompts. Name the user whatever you like, and give bogus info for everything other than password. -Now edit /etc/passwd. The new user's line will look like this: - -nethack:x:::nethack,1,1,1,1:/home/nethack:/bin/bash - -You need to modify the new user's line like so: - -nethack:x:::nethack,1,1,1,1:/home/nethack:/opt/dgamelaunch/bin/dgamelaunch. - -What we are doing there is setting the user nethack's login shell to dgamelaunch. This way, when someone uses -SSH to connect to your server, and logs in as nethack, they will be presented immediately with dgamelaunch, and -will not see a shell when it exits. - -Congrats on your new server... - -More resources for troubleshooting vis NetHack: -https://nethackwiki.com/wiki/User:Paxed/HowTo_setup_dgamelaunch - -See also the old readme below. - -First, though, here's how to install Dungeon Crawl Stone Soup: -1) obtain the source, navigate to that directory -2) sudo make install prefix=/ DATADIR=/etc/dcss0341 SAVEDIR=/var/dcss0341 NOWIZARD=1 -3) navigate to the directory with these scripts (dgamelaunch source dir) -4) ./cpbin -b /bin /bin/crawl /opt/dgamelaunch -5) sudo cp /etc/dcss0341 /opt/dgamelaunch/etc/ -6) sudo cp /var/dcss0341 /opt/dgamelaunch/var/ -7) (clean up in /bin/crawl, /etc/dcss0341, /var/dcss0341 if you want to; don't need those files anymore) -8) Modify dgamelaunch.conf to uncomment relevant lines -9) sudo mkdir /opt/dgamelaunch/var/inprogress-dcss0341 -10) modify the main menu (or apply dcss-menu.patch to it) - -That's it! - - dgamelaunch =========== diff --git a/README.md b/README.md new file mode 100644 index 0000000..c17a528 --- /dev/null +++ b/README.md @@ -0,0 +1,158 @@ +The main feature of this fork of dgamelaunch is install-dgl-nh500, which automates installation of NetHack inside +a dgamelaunch chroot. + +# install-dgl-nh500 documentation +```bash +# install-dgl-nh500 +# +# Script for setting up Debian DGL/NetHack 5.0.0 environment +# (hopefully to also set up DCSS 0.34.1 too) +# +# You should run this as root. +# +# Should be run in the directory it was shipped in. +# +# Usage: +# ./install-dgl-nh500 [options] +# +# OPTION [default] DESCRIPTION +# --prefix [/opt/dgamelaunch] DGL's chroot. All other locations are +# relative to this directory! And +# everything DGL or NetHack need to run +# is in this directory. + +# --var [/var] Location for mutable data. Organized a +# little strangely in that each game known +# to dgamelaunch has its own subdirectory, +# and dgamelaunch's data is just in here. + +# --etc [/etc] Location for immutable and config data. +# Ditto, each game has its own subdirectry. +# note that NetHack doesn't have one; all +# of its immutable data lives in hackdir. + +# --menudir [/etc/menu] Location for menu files. Really they can +# be anywhere, but this instructs the +# script where to put the default ones. + +# --hackdir [/opt/nh500] NetHack is built wth this as its prefix. + +# --playground [/var/nh500] NetHack is built with this as its +# 'var playground.' + +# --dbfile [/var/dgamelaunch.db] The location for the database. + +# --nano [FLAG] If you set the nano flag, nano will be +# installed in the chroot, for use as an +# editor. The default configuration +# assumes it is "built" with nano. + +# -q -s --quiet --silent [FLAG] Causes autogen and make to run quietly. + + +# Here are some settings which would cause nethack and dgl to be installed +# in a way that reflects the setup instructions provided by Paxed... +# for posterity and testing. +# +# CHROOT="/opt/nethack/nethack.alt.org" +# DGLVAR="/dgldir" +# DGLETC="/." +# MENUDIR="$DGLETC" +# HACKDIR="/nh500" +# PLAYGROUND="/nh500/var" +# +# ./install-dgl-nh500 --prefix /opt/nethack/nethack.alt.org --var /dgldir --etc /. --menudir /. --hackdir /nh500 --playground /nh500/var +``` + +# step-by-step usage +To install and use NetHack and dgamelaunch, simply (tested as working on +Debian 6.12.88-1, with prerequisites already installed): + +After downloading this version of dgamelaunch: + +```bash +cd dgamelaunch-nh500 +sudo ./install-dgl-nh500 +``` +dgamelaunch will be installed at `/opt/dgamelaunch`, and NetHack 5.0.0 will be +installed in `/opt/dgamelaunch/opt/nh500`. + +To test the system: + +```bash +sudo /opt/dgamelaunch/bin/dgamelaunch +``` + +Try to register a new user, login, and play the game. +If it works, brilliant! If it doesn't work, try the NetHack binary: + +```bash +sudo chroot /opt/dgamelaunch nh500 +``` + +If that fails, it might be a missing library. Check `/opt/dgamelaunch/lib/` and `.../lib64`, and +compare the contents with the results of `ldd /opt/dgamelaunch/bin/nh500`. +Then copy over libraries as necessary. + + +If it's working, then you may wish to let people connect to the server just like other servers you see online. + +To do this, you will need to do something pretty dangerous -- let anyone run dgamelaunch, even though it has +root privileges. + +```bash +sudo chmod a+s /opt/dgamelaunch/bin/dgamelaunch. +``` + +Replace with the appropriate string of numbers, obviously. From here, any user can run dgamelaunch on +your system, which might potentially create a vulnerability. + +Next, set up a new user. On Debian: + +```bash +sudo adduser nethack +``` +And follow the prompts. Name the user whatever you like, and give bogus info for everything other than password. +Now edit `/etc/passwd`. The new user's line will look like this: + +```bash +nethack:x:::nethack,1,1,1,1:/home/nethack:/bin/bash +``` + +You need to modify the new user's line like so: + +```bash +nethack:x:::nethack,1,1,1,1:/home/nethack:/opt/dgamelaunch/bin/dgamelaunch. +``` + +What we are doing there is setting the user nethack's login shell to dgamelaunch. This way, when someone uses +SSH to connect to your server, and logs in as nethack, they will be presented immediately with dgamelaunch, and +will not see a shell when it exits. + +Congrats on your new server... + +More resources for troubleshooting vis NetHack: +https://nethackwiki.com/wiki/User:Paxed/HowTo_setup_dgamelaunch + + +# Dungeon Crawl Stone Soup +First, though, here's how to install Dungeon Crawl Stone Soup: +1) obtain the source, navigate to that directory +2) `sudo make install prefix=/ DATADIR=/etc/dcss0341 SAVEDIR=/var/dcss0341 NOWIZARD=1` +3) navigate to the directory with these scripts (dgamelaunch source dir) +4) ... +```bash +./cpbin -b /bin /bin/crawl /opt/dgamelaunch +sudo cp /etc/dcss0341 /opt/dgamelaunch/etc/ +sudo cp /var/dcss0341 /opt/dgamelaunch/var/ +``` +5) (clean up in `/bin/crawl`, `/etc/dcss0341`, `/var/dcss0341` if you want to; don't need those files anymore) +6) Modify `dgamelaunch.conf` to uncomment relevant lines +7) ... +```bash +sudo mkdir /opt/dgamelaunch/var/inprogress-dcss0341 +sudo chown -R games:games /opt/dgamelaunch/var +``` +8) Modify the main menu (it might help to `dcss-menu.patch` to it) + +That's it! \ No newline at end of file diff --git a/dgl-nh500.patch b/dgl-nh500.patch index b3decf3..140f8a9 100644 --- a/dgl-nh500.patch +++ b/dgl-nh500.patch @@ -15,7 +15,7 @@ diff -urB NetHack-5.0.0.bak/include/config.h NetHack-5.0.0/include/config.h */ #ifndef HACKDIR -#define HACKDIR "/usr/games/lib/nethackdir" -+#define HACKDIR "/opt/nh500" ++#define HACKDIR "(:hackdir:)" #endif /* @@ -27,7 +27,7 @@ diff -urB NetHack-5.0.0.bak/include/unixconf.h NetHack-5.0.0/include/unixconf.h * system, define VAR_PLAYGROUND to be where the variable parts are kept. */ -/* #define VAR_PLAYGROUND "/var/lib/games/nethack" */ -+#define VAR_PLAYGROUND "/var/nh500" ++#define VAR_PLAYGROUND "(:playground:)" /* * Define DEF_PAGER as your default pager, e.g. "/bin/cat" or "/usr/ucb/more" @@ -74,7 +74,7 @@ diff -urB NetHack-5.0.0.bak/sys/unix/hints/linux.500 NetHack-5.0.0/sys/unix/hint -HACKDIR=$(PREFIX)/games/lib/nethackdir -SHELLDIR = $(PREFIX)/games +PREFIX=/. -+HACKDIR=$(PREFIX)/opt/nh500 ++HACKDIR=$(PREFIX)(:hackdir:) +SHELLDIR = $(PREFIX) VARDIRPERM = 0755 VARFILEPERM = 0600 @@ -83,7 +83,7 @@ diff -urB NetHack-5.0.0.bak/sys/unix/hints/linux.500 NetHack-5.0.0/sys/unix/hint INSTDIR=$(HACKDIR) -VARDIR = $(HACKDIR) -+VARDIR = $(PREFIX)/var/nh500 ++VARDIR = $(PREFIX)(:playground:) ifdef MAKEFILE_TOP TESTGDBPATH=/usr/bin/gdb diff --git a/install-dgl-nh500 b/install-dgl-nh500 index ec5b34b..7ea46d0 100644 --- a/install-dgl-nh500 +++ b/install-dgl-nh500 @@ -1,11 +1,149 @@ #!/bin/bash +# install-dgl-nh500 +# # Script for setting up Debian DGL/NetHack 5.0.0 environment # (hopefully to also set up DCSS 0.34.1 too) # # You should run this as root. # # Should be run in the directory it was shipped in. +# +# Usage: +# ./install-dgl-nh500 [options] +# +# OPTION [default] DESCRIPTION +# --prefix [/opt/dgamelaunch] DGL's chroot. All other locations are +# relative to this directory! And +# everything DGL or NetHack need to run +# is in this directory. + +# --var [/var] Location for mutable data. Organized a +# little strangely in that each game known +# to dgamelaunch has its own subdirectory, +# and dgamelaunch's data is just in here. + +# --etc [/etc] Location for immutable and config data. +# Ditto, each game has its own subdirectry. +# note that NetHack doesn't have one; all +# of its immutable data lives in hackdir. + +# --menudir [/menu] Location for menu files. Really they can +# be anywhere, but this instructs the +# script where to put the default ones. + +# --hackdir [/opt/nh500] NetHack is built wth this as its prefix. + +# --playground [/var/nh500] NetHack is built with this as its +# 'var playground.' + +# --dbfile [/dgamelaunch.db] The location for the database. + +# --nano [FLAG] If you set the nano flag, nano will be +# installed in the chroot, for use as an +# editor. The default configuration +# assumes it is "built" with nano. + +# --without-nh500 [FLAG] If you set without-nh500, the script will +# not install NetHack. Know what you're +# doing! + +# -q -s --quiet --silent [FLAG] Causes autogen and make to run quietly. + + +# Here are some settings which would cause nethack and dgl to be installed +# in a way that reflects the setup instructions provided by Paxed... +# for posterity and testing. +# +# CHROOT="/opt/nethack/nethack.alt.org" +# DGLVAR="/dgldir" +# DGLETC="/." +# MENUDIR="$DGLETC" +# HACKDIR="/nh500" +# PLAYGROUND="/nh500/var" +# +# ./install-dgl-nh500 --prefix /opt/nethack/nethack.alt.org --var /dgldir --etc /. --menudir /. --hackdir /nh500 --playground /nh500/var + +while [[ $# -gt 0 ]]; do + case $1 in + -h|--help|--usage|-?|--?) + printf "`sed -n '3,65p;65q' $0 | tr -d "#"`" + exit 0 + ;; + -q|-s|--quiet|--silent) + QUIETMAKE=1 + shift + ;; + --prefix) + CHROOT="/${2#/}" + CHROOT="${CHROOT%/}" + shift + shift + ;; + --var) + DGLVAR="/${2#/}" + DGLVAR="${DGLVAR%/}" + shift + shift + ;; + --etc) + DGLETC="/${2#/}" + DGLETC="${CDGLETC%/}" + shift + shift + ;; + --menudir) + MENUDIR="/${2#/}" + MENUDIR="${MENUDIR%/}" + shift + shift + ;; + --hackdir) + HACKDIR="/${2#/}" + HACKDIR="${HACKDIR%/}" + shift + shift + ;; + --playground) + PLAYGROUND="/${2#/}" + PLAYGROUND="${PLAYGROUND%/}" + shift + shift + ;; + --dbfile) + SQLITE_DBFILE="/${2#/}" + SQLITE_DBFILE="${SQLITE_DBFILE%/}" + shift + shift + ;; + --nano) + DGLNANO="/${2#/}" + DGLNANO="${DGLNANO%/}" + shift + shift + ;; + # Know what you're doing, or look up a guide on installing NetHack! + --without-nh500) + NONH=1 + shift + ;; + --fetch-dgl) + FETCHDGL=1 + ;; + --) + set -- + break + ;; + -*|--*) + echo "Unknown option $1" + echo "Valid options are: --install-nh500, --nano, --quiet|--silent, --prefix , --var , --etc , --menudir , --hackdir , --playground " + exit 1 + ;; + *) + break # (treat this as $1) + ;; + esac +done ## SETTINGS @@ -15,32 +153,6 @@ NETHACK500=https://www.nethack.org/download/5.0.0/nethack-500-src.tgz NETHACKSHA256=2959b7886aac76185b90aea0c9f80d14343f604de0ae96b3dd2a760f7ab3bde9 DGL=https://github.com/crawl/dgamelaunch/archive/455308b96fa7522c8c9873653401b4e0cf8f71e4.zip -# If this thing ain't working, and you can't figure out why, try disabling -# the -s flag to make by commenting out this line. It won't fix anything, -# but there might be some tell-tale warnings or errors. -QUIETMAKE=1 - -# If you downloaded NetHack yourself, and have applied dgl-nh500.patch etc, -# then comment these lines out to skip fetching/patching. -# Skipping patch step also skips running /sys/unix/setup.sh; -# so know what you're doing, or look up a guide on installing NetHack! - -# Disable if you already have NetHack-5.0.0 source downloaded and uncompressed. -FETCHNH=1 -# Disable if you don't want to patch linux.500 and config.h to make life easy. -PATCHNH=1 -# Disable if you already built NetHack-5.0.0 with your preferred settings! -BUILDNH=1 -# Disable if you don't want NetHack to be installed in DGL's root. -INSTALLNH=1 - -# If you got this script already bundled with DGL, this should already be -# disabled. -#FETCHDGL=1 - -# Install nano in chroot/bin -DGLNANO=1 - # Configuration options for DGL. # User and group for NetHack and DGL. USRGRP="games:games" @@ -50,25 +162,49 @@ USRGRP="games:games" # and can't run without it. # # If you change this here, you will have to change it in /etc/dgamelaunch.conf too. -CHROOT="/opt/dgamelaunch" +if [ -z $CHROOT ]; then + CHROOT="/opt/dgamelaunch" +fi # In theory these would help keep dgamelaunch organized within its own environment. # # Each directory is within the chroot! # -DGLVAR="/var" -DGLETC="/etc" -MENUDIR="$DGLETC/menu" +if [ -z $DGLVAR ]; then + DGLVAR="/var" +fi +if [ -z $DGLETC ]; then + DGLETC="/etc" +fi +if [ -z $MENUDIR ]; then + MENUDIR="$DGLETC/menu" +fi # The path of the sqlite db for users. # If this is left undefined (commented out), DGL will be built # without sqlite3. Also, it'll probably not work. - SQLITE_DBFILE="$DGLVAR/dgamelaunch.db" +if [ -z $SQLITE_DBFILE ]; then + SQLITE_DBFILE="$DGLVAR/dgamelaunch.db" +fi # These are baked into the patch files, so if you change them here, # change them there also. -HACKDIR="/opt/nh500" -PLAYGROUND="/var/nh500" +if [ -z $HACKDIR ]; then + HACKDIR="/opt/nh500" +fi +if [ -z $PLAYGROUND ]; then + PLAYGROUND="/var/nh500" +fi +if [ -n $NONH ]; then + # Disable if you already have NetHack-5.0.0 source downloaded and uncompressed. + FETCHNH=1 + # Disable if you don't want to patch linux.500 and config.h to make life easy. + PATCHNH=1 + # Disable if you already built NetHack-5.0.0 with your preferred settings! + BUILDNH=1 + # Disable if you don't want NetHack to be installed in DGL's root. + INSTALLNH=1 +fi # These are set in the NetHack Makefile, and possibly config.h # Note: the Makefile only appears after you run: @@ -81,17 +217,6 @@ GREPBIN="/bin/grep" WORKDIR="`pwd`" NETHACKBIN="$HACKDIR/nethack" -# Here are some settings which would cause nethack and dgl to be installed -# in a way that reflects the setup instructions provided by Paxed... -# for posterity mostly. If you uncomment these, you will have to also modify -# some of the patch files, and dgamelaunch.conf. -# -#CHROOT="/opt/nethack/nethack.alt.org" -#DGLVAR="/dgldir" -#DGLETC="/." -#MENUDIR="$DGLETC" -#HACKDIR="/nh500" -#PLAYGROUND="/nh500/var" ################ @@ -157,10 +282,23 @@ WORKDIR=`standdir $WORKDIR` # dgl-create-chroot script. set -e + if [ -n "$QUIETMAKE" ]; then MAKEFLAGS="-s" AUTOGENFLAGS="-q" fi + +PATCH_ME="dgl-nh500.patch examples/dgamelaunch.conf" +for i in $PATCH_ME; do + cp $i $i.bak +done +sed -i -e "s,(:chroot:),"/$CHROOT",g" $PATCH_ME +sed -i -e "s,(:var:),"/$DGLVAR",g" $PATCH_ME +sed -i -e "s,(:etc:),"/$DGLETC",g" $PATCH_ME +sed -i -e "s,(:menudir:),"/$MENUDIR",g" $PATCH_ME +sed -i -e "s,(:hackdir:),"/$HACKDIR",g" $PATCH_ME +sed -i -e "s,(:playground:),"/$PLAYGROUND",g" $PATCH_ME + ############### # Fetch, patch, build, install NetHack if [ -n "$FETCHNH" ]; then @@ -192,7 +330,7 @@ fi cd "/$WORKDIR" ################################### -# Patch, build, install dgamelaunch +# Patch, build, install dgamelaunch -- pretty much never used, since this is packaged with dgamelaunch. Unmaintained. if [ -n "$FETCHDGL" ]; then wget -O dgamelaunch.zip ${DGL} unzip -q dgamelaunch.zip @@ -272,15 +410,16 @@ fi cp "/$CURDIR/virus" bin # Copy NetHack and DGL +# Remember: we are currently in $CHROOT if [ -n "$INSTALLNH" ]; then NHBINFILE="`basename /$NETHACKBIN`.`date +%Y%m%d`" LIBS="$LIBS `findlibs /$NETHACKBIN`" LHACKDIR="`echo "$HACKDIR" | awk -F/ 'BEGIN {OFS=FS} {NF-=1; print}'`" LPLAYGROUND="`echo "$PLAYGROUND" | awk -F/ 'BEGIN {OFS=FS} {NF-=1; print}'`" - cp -r "/$HACKDIR" "$LHACKDIR" + cp -r "/$HACKDIR" "./$LHACKDIR" cp "$NETHACKBIN" "$HACKDIR/$NHBINFILE" ln -s "/$HACKDIR/$NHBINFILE" bin/nh500 - cp -r "/$PLAYGROUND" "$LPLAYGROUND" + cp -r "/$PLAYGROUND" "./$LPLAYGROUND" chown -R "$USRGRP" "$HACKDIR" chown -R "$USRGRP" "$PLAYGROUND" fi @@ -330,7 +469,7 @@ fi # cleanup cd "/$WORKDIR" -RM_ME="/opt/nh500 /var/nh500 NetHack-5.0.0 dgamelaunch.zip nethack-500-src.tgz" +RM_ME="$HACKDIR $PLAYGROUND NetHack-5.0.0 dgamelaunch.zip nethack-500-src.tgz" if [ -n $INSTALLDGL ]; then RM_ME="$RM_ME dgamelaunch" fi -- 2.47.3