From 681804dfe42a37aebe17fb8ba7d3c18383db539b Mon Sep 17 00:00:00 2001 From: sbkelley Date: Mon, 1 Jun 2026 15:42:43 -0400 Subject: [PATCH] Add scripts and files peculiar to this repo * install-dgl-nh500 * dgl.patch * dgl.-nh500.patch * cpbin * findlibs * sanepath * README.md * README -> README.bak * dgl_menu_main_user.txt.orig * dgamelaunch.conf.orig Modifications to: * dgamelaunch.conf * dgl_menu_main_user.txt.orig --- README => README.bak | 0 README.md | 188 ++++++++++ cpbin | 200 +++++++++++ dgl-nh500.patch | 89 +++++ dgl.patch | 269 ++++++++++++++ examples/dgamelaunch.conf | 177 +++++---- examples/dgamelaunch.conf.orig | 450 +++++++++++++++++++++++ examples/dgl_menu_main_user.txt | 5 +- examples/dgl_menu_main_user.txt.orig | 18 + findlibs | 10 + install-dgl-nh500 | 517 +++++++++++++++++++++++++++ sanepath | 5 + 12 files changed, 1864 insertions(+), 64 deletions(-) rename README => README.bak (100%) create mode 100644 README.md create mode 100644 cpbin create mode 100644 dgl-nh500.patch create mode 100644 dgl.patch create mode 100644 examples/dgamelaunch.conf.orig create mode 100644 examples/dgl_menu_main_user.txt.orig create mode 100644 findlibs create mode 100755 install-dgl-nh500 create mode 100644 sanepath diff --git a/README b/README.bak similarity index 100% rename from README rename to README.bak diff --git a/README.md b/README.md new file mode 100644 index 0000000..32f849f --- /dev/null +++ b/README.md @@ -0,0 +1,188 @@ +The main feature of the master branch of this fork is install-dgl-nh500, which does what it says on the tin. +It will fetch, compile, and install nethack 5.0.0, and do the same for DGL (although it is already fetched +by the time you're using the script), and put them into a chroot of your choosing. + +autoconf branch is for making dgl's configure/makefile stuff work, without having to use these bash scripts +people have written over the years. + +I'm pretty interested in the history of this program -- so much so that I went through pains trying to make +sure I was forking a version of the repository that contained accurate commit hashes -- crawl's fork has +somehow mangled them such that its history appears entirely-unrelated to git. + +Anyway, if you know anything of the history, reach out. + +# install-dgl-nh500 documentation +```bash +#!/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. + +# --without-nano [FLAG] If you do not set this 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. + +# --clean [FLAG] Skips everything except the clean step. +# Useful if the process gets interrupted... + + +# 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 --quiet +``` + +# 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... + + +# 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 USE_DGAMELAUNCH=1` +Note: 2) instead of setting USE_DGAMELAUNCH, you can also edi +`/crawl-ref/source/AppHdr.h`, and `#define DGAMELAUNCH=1` there. (and tweak + other settings which interest you) +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! + +# Resources +More resources for troubleshooting vis NetHack: +https://nethackwiki.com/wiki/User:Paxed/HowTo_setup_dgamelaunch +Vis dgamelaunch and crawl: +https://github.com/tarballqc/dcss-server-install/ \ No newline at end of file diff --git a/cpbin b/cpbin new file mode 100644 index 0000000..860959b --- /dev/null +++ b/cpbin @@ -0,0 +1,200 @@ +#!/bin/bash + +# cpbin copies a binary and its necessary libraries into a given directory. +# The purpose is to aid in preparing chroots. +# +# It doesn't do any other preparation of the directory as a chroot; it only +# copies bins and libs. +# +# refactored out of original dgl-create-chroot +# +# cpbin [OPTIONS] BINARY [DIRECTORY] +# +# [DIRECTORY] defaults to "$HOME/chroot" +# +# OPTIONS +# --bindir [dir] Sets BINDIR, the directory for the binary to live. +# Defaults to the binary's dirname. +# Path is from inside the chroot! So -b /bin will +# install binaries in //bin + +# --libdir [dir] Sets LIBDIR, the directory for libraries to live. +# Defaults to the library's dirname, for each library. +# Path is from inside the chroot! See above. + +# --only-libs Causes the program to refrain from copying the +# binaries; it only copies libraries. It still makes +# the directory, unless DRYRUN is set. + +# --only-bin Causes the program to refrain from copying the +# libraries; it only copies binaries. It still makes +# the directory, unless DRYRUN is set. + +# --only-dirs Creates the requisite directory structure only. Does +# not copy any files. Equivalent to setting both +# NOBIN and NOLIBS. + +# --dry Causes the program to output what it would do, +# ie it had not received the --dry option. ie do nothing + +# --quiet Causes the program to refrain from making extraneous +# noises. + +# --really-quiet Causes the program to refrain from even reporting +# errors... + +# --help Display this help message. +# ^^ line 46 + +set -e +umask 022 + +##### Some other programs +cpbindir=`dirname $0` +sanepath=$cpbindir/sanepath +findlibs=$cpbindir/findlibs +cpbinname="cpbin" + +##### functions +# Echo a message absent the QUIET env var. +say() { [ "$QUIET" -lt 2 ] && printf "$cpbinname: $1\n" || :; } + +# Echo a message to stderr. +err() { [ "$QUIET" -lt 1 ] && >&2 echo "$cpbinname - ERROR: $1" || :; } + +# Echo to stderr and exit 1. +errexit() { err "$1"; exit 1; } + +# mkdirif