+++ /dev/null
-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.<date>
-
-Replace <date> 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:<uid>:<gid>:nethack,1,1,1,1:/home/nethack:/bin/bash
-
-You need to modify the new user's line like so:
-
-nethack:x:<uid>:<gid>:nethack,1,1,1,1:/home/nethack:/opt/dgamelaunch/bin/dgamelaunch.<date>
-
-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
-===========
-
-dgamelaunch is a network-based game shell where anyone can sign up for an
-account and start playing any game which suits your fancy - games known to
-work with dgamelaunch are for example NetHack (http://www.nethack.org) and
-Crawl (http://crawl.develz.org).
-
-
-DGAMELAUNCH VERSIONS
-====================
-
-Development version can be fetched from the source repository with git:
-
- git clone git://github.com/paxed/dgamelaunch.git
-
-Releases are downloadable at http://alt.org/nethack/dgamelaunch/
-
-
-REQUIREMENTS
-============
-
-- normal development tools (make, etc)
-- autotools (autogen, autoconf, automake)
-- ncurses library and development files
-- bison (or yacc or byacc)
-- flex (or lex)
-- optionally sqlite3 library and development files
-
-
-COMPILING
-=========
-
-Basically all you have to do is:
-
- ./autogen.sh && make
-
-Some options you might want give to autogen:
-
- --with-config-file=/absolute/path/to/dgamelaunch.config
- --enable-shmem
- --enable-sqlite
-
-
-Dgamelaunch should compile without issue on Linux, Solaris, FreeBSD 4 and 5.
-(Whether it _runs_ on all of these platforms is a different issue. We'd
-like to hear about it.)
-
-dgamelaunch was originally developed by M. Drew Streib <dtype@dtype.org> but
-is now a collaborative project. Copyright and contact information is in the
-COPYING file, included with this package.
-
-
-BASIC SETUP INSTRUCTIONS
-========================
-
-These instructions are not current. For a more up-to-date ones, see
-http://nethackwiki.com/wiki/User:Paxed/HowTo_setup_dgamelaunch
-
-
-
-
-1) Setup a chroot jail. There is a helpful script included to accomplish this,
-called dgl-create-chroot, in the source directory. The default settings are
-viewable by editing the script; to customize the installation, look at
-dgl-create-chroot.conf.example.* (also in the source directory) and edit it to
-suit your needs, and save it into the same directory as dgl-create-chroot as
-dgl-create-chroot.conf. It's very likely you need to run the script as root.
-The script will not work with the very limited System V /bin/sh, such found on
-Solaris; start it with ksh instead.
-
-If you decide to not use dgl-create-chroot, you're on your own and we assume
-you have enough clue to figure out exactly what's needed for the chroot to
-operate correctly.
-
-2) Compile nethack. Make sure the directories in the chroot match up with
-where nethack thinks everything is. You may need to edit the VAR_PLAYGROUND
-variable in include/unixconf.h and/or the HACKDIR variable in include/config.h.
-
-(Note: Try not to, for security, to put anything else in the chroot. You may
-need to put gzip in there though if you compile nethack to use it for
-compression.)
-
-3) Make a copy of dgamelaunch.conf and edit it. This will contain information
-for dgamelaunch about what uid/username, gid/group to shed privileges to at
-runtime. It must also contain the path to nethack, and needs to know certain
-aspects of your chroot.
-
-Note that using a username in dgamelaunch.conf will cause (part of) your
-passwd database to be loaded into dgamelaunch's memory space. If you use BSD,
-this will also include encrypted passwords. Therefore, it's recommended to
-put the uid in the dgamelaunch.conf. The same applies to groups, but openpty(3)
-often looks up the tty group anyway.
-
-4) Setup dgamelaunch as one of the following:
- a) The shell for a single login.
- b) An (x)inetd service.
-
-If you choose a login shell make sure dgamelaunch is setuid root. (that is,
-chmod 4755 dgamelaunch.) It will shed privs right after entering the chroot
-jail though.
-
-Example xinetd lines:
-
-service telnet
-{
- socket_type = stream
- protocol = tcp
- wait = no
- user = root
- server = /usr/sbin/in.telnetd
- server_args = -h -L /opt/nethack/nethack.dtype.org/dgamelaunch -q -f /etc/dgamelaunch.conf
- rlimit_cpu = 3600
- bind = 64.71.163.206
-}
-
-A classic inetd line would look like this:
-
-telnet stream tcp nowait root.root /usr/sbin/tcpd /usr/sbin/in.telnetd -h -L /usr/sbin/dgamelaunch -q -f /etc/dgamelaunch.conf
-
-In both cases, the -L specifies an alternate login program (telnetlogin is
-invoked by default) and -h prevents revealing of a login banner (for
-example, "Debian GNU/Linux testing/unstable influx") before starting the
-login shell.
-
-It goes without saying that the argument after -L must point to dgamelaunch's
-exact location. Also, the location of dgamelaunch.conf is variable and of
-course should be customized by you.
-
-NOTE: It appears that the -L option is not very widely supported. FreeBSD's
-telnetd uses -p instead, and you can't give arguments (arguments appropriate
-to standard login are used). Some other telnetds do not support anything
-like this at all.
-
-The -f option, followed by a filename, specifies the path to the config file
-to use for dgamelaunch. If you specify the right path for DEFCONFIG in the
-Makefile, you may be able to omit this.
-
-For dgamelaunch, the -q option will silence errors pertaining to the server
-configuration. This is recommended for use within inetd to prevent spamming
-the clients, but when testing and setting up we strongly suggest you leave it
-off until running dgamelaunch produces no error output on stderr.
-
-5) Test your compilation of dgamelaunch by running it as root. If this
-works, a shell login or (x)inetd will work with the correct configuration.
-If you have problems with dgamelaunch's display make sure that your chroot's
-/etc/terminfo directory (or whatever directory your ncurses uses) is
-populated.
-
-
-COMMANDLINE PARAMETERS
-======================
-
- -a Ignored.
- -c Shows error message and exits. (login shell command)
- -e Ignored.
- -h Ignored.
- -i user Autologin and run the register -command hook for "user"
- (with password "user").
- -p Ignored.
- -q Be quiet, suppress errors.
- -s Show players currently playing.
- -W user:msg Send message "msg" to all players. The message seems
- to come from "user".
- -S Free the shared memory block.
- -D Show contents of the shared memory block.
-
-
-ENVIRONMENT VARIABLES
-=====================
-
- Linux telnetd allows importing the USER environment variables via telnet,
- while FreeBSD does not. FreeBSD, on the other hand, does allow the LOGNAME
- environment variable. Dgamelaunch will first check USER, then LOGNAME,
- for "username:password", and tries autologin if either exists.
- Dgamelaunch-specific DGLAUTH is checked before either of those.
-
-
-ERROR CODES
-===========
-
- 1 Could not terminate stale processes
- 2 Cannot chroot()
- 3 Cannot chdir()
- 4 Cannot setgroups()
- 5 Cannot setgid()
- 6 Cannot setuid()
- 7 Caught HUP
- 8 Cannot run as root: Config file has shed_user = "root"
- 9 Cannot run as root: Config file has shed_user set to UID 0 user.
- 10 Could not setup player
- 11 Cannot run as root: Config file has shed_uid = 0
- 12 Config file has an unrecognized token
- 13 Config file: Negative value not accepted
- 15 dgamelaunch called with -c (login shell command); exited
- 20 No menu defined, or no banner found for menu
- 60 Cannot create a new terminal, or no termcap files.
- 61 Cannot openpty()
- 62 Cannot open /dev/ptmx
- 65 Cannot open master ptsname
- 68 Cannot fcntl inprogress-lock
- 70 Cannot write to inprogress-lock
- 71 ftok() error for shm_key, no "dgamelaunch" file found?
- 72 ftok() error for shm_sem_key, no "dgamelaunch" file found?
- 73 shmget() error, cannot connect to shared memory
- 74 smat() error, cannot attach to shared memory
- 75 Nothing in shared memory?
- 76 sem_init() error, could not initialize shared memory
- 77 sem_wait() error
- 78 sem_post() error
- 95 Cannot fnctl lockfile
- 96 sqlite3_open() failed when checking user existence: could not open login database
- 97 sqlite3_open() failed in writefile()
- 98 sqlite3_exec() failed in writefile()
- 99 Could not open password file
- 100 Username field too long in login file
- 101 Email field too long in login file
- 102 password field too long in login file
- 103 env field too long in login file
- 104 Cannot read config file
- 105 Cannot read default config file
- 106 Cannot open lockfile or password file
- 107 fcntl failed on login database in writefile()
- 108 sqlite3_exec() failed when checking user existence.
- 109 Too many registered users. (see maxusers setting in config file)
- 110 Login failed
- 111 Two users trying to register at the same time
- 112 Error changing password: cannot have ':' in password
- 113 Error parsing configuration file
- 114 exec-command fork failed
- 115 could not read lock file in writefile()
- 116 Too many registered users. (see maxusers setting in config file)
- 117 wall error: no message to send
- 118 wall error: no players
- 119 User has a retarded terminal
- 120 wall error: message too long
- 121 wall error: "from" username is too short
- 122 Error changing password: struct "me" does not exist
- 123 chdir() failed in dgl commands.
- 140 populate_games(): Cannot open inprogress-dir
- 145 populate_games(): Inprogress-filename does not have ':' in it
- 146 populate_games(): Inprogress-filename does not have ': in it (pt. 2)
- 200 purge_stale_locks(): could not open inprogress-dir
- 201 purge_stale_locks(): inprogress-file did not have ':' in it
- 202 purge_stale_locks(): could not read inprogress-file
- 203 purge_stale_locks(): could not get inprogress-file contents
--- /dev/null
+dgamelaunch
+===========
+
+dgamelaunch is a network-based game shell where anyone can sign up for an
+account and start playing any game which suits your fancy - games known to
+work with dgamelaunch are for example NetHack (http://www.nethack.org) and
+Crawl (http://crawl.develz.org).
+
+
+DGAMELAUNCH VERSIONS
+====================
+
+Development version can be fetched from the source repository with git:
+
+ git clone git://github.com/paxed/dgamelaunch.git
+
+Releases are downloadable at http://alt.org/nethack/dgamelaunch/
+
+
+REQUIREMENTS
+============
+
+- normal development tools (make, etc)
+- autotools (autogen, autoconf, automake)
+- ncurses library and development files
+- bison (or yacc or byacc)
+- flex (or lex)
+- optionally sqlite3 library and development files
+
+
+COMPILING
+=========
+
+Basically all you have to do is:
+
+ ./autogen.sh && make
+
+Some options you might want give to autogen:
+
+ --with-config-file=/absolute/path/to/dgamelaunch.config
+ --enable-shmem
+ --enable-sqlite
+
+
+Dgamelaunch should compile without issue on Linux, Solaris, FreeBSD 4 and 5.
+(Whether it _runs_ on all of these platforms is a different issue. We'd
+like to hear about it.)
+
+dgamelaunch was originally developed by M. Drew Streib <dtype@dtype.org> but
+is now a collaborative project. Copyright and contact information is in the
+COPYING file, included with this package.
+
+
+BASIC SETUP INSTRUCTIONS
+========================
+
+These instructions are not current. For a more up-to-date ones, see
+http://nethackwiki.com/wiki/User:Paxed/HowTo_setup_dgamelaunch
+
+
+
+
+1) Setup a chroot jail. There is a helpful script included to accomplish this,
+called dgl-create-chroot, in the source directory. The default settings are
+viewable by editing the script; to customize the installation, look at
+dgl-create-chroot.conf.example.* (also in the source directory) and edit it to
+suit your needs, and save it into the same directory as dgl-create-chroot as
+dgl-create-chroot.conf. It's very likely you need to run the script as root.
+The script will not work with the very limited System V /bin/sh, such found on
+Solaris; start it with ksh instead.
+
+If you decide to not use dgl-create-chroot, you're on your own and we assume
+you have enough clue to figure out exactly what's needed for the chroot to
+operate correctly.
+
+2) Compile nethack. Make sure the directories in the chroot match up with
+where nethack thinks everything is. You may need to edit the VAR_PLAYGROUND
+variable in include/unixconf.h and/or the HACKDIR variable in include/config.h.
+
+(Note: Try not to, for security, to put anything else in the chroot. You may
+need to put gzip in there though if you compile nethack to use it for
+compression.)
+
+3) Make a copy of dgamelaunch.conf and edit it. This will contain information
+for dgamelaunch about what uid/username, gid/group to shed privileges to at
+runtime. It must also contain the path to nethack, and needs to know certain
+aspects of your chroot.
+
+Note that using a username in dgamelaunch.conf will cause (part of) your
+passwd database to be loaded into dgamelaunch's memory space. If you use BSD,
+this will also include encrypted passwords. Therefore, it's recommended to
+put the uid in the dgamelaunch.conf. The same applies to groups, but openpty(3)
+often looks up the tty group anyway.
+
+4) Setup dgamelaunch as one of the following:
+ a) The shell for a single login.
+ b) An (x)inetd service.
+
+If you choose a login shell make sure dgamelaunch is setuid root. (that is,
+chmod 4755 dgamelaunch.) It will shed privs right after entering the chroot
+jail though.
+
+Example xinetd lines:
+
+service telnet
+{
+ socket_type = stream
+ protocol = tcp
+ wait = no
+ user = root
+ server = /usr/sbin/in.telnetd
+ server_args = -h -L /opt/nethack/nethack.dtype.org/dgamelaunch -q -f /etc/dgamelaunch.conf
+ rlimit_cpu = 3600
+ bind = 64.71.163.206
+}
+
+A classic inetd line would look like this:
+
+telnet stream tcp nowait root.root /usr/sbin/tcpd /usr/sbin/in.telnetd -h -L /usr/sbin/dgamelaunch -q -f /etc/dgamelaunch.conf
+
+In both cases, the -L specifies an alternate login program (telnetlogin is
+invoked by default) and -h prevents revealing of a login banner (for
+example, "Debian GNU/Linux testing/unstable influx") before starting the
+login shell.
+
+It goes without saying that the argument after -L must point to dgamelaunch's
+exact location. Also, the location of dgamelaunch.conf is variable and of
+course should be customized by you.
+
+NOTE: It appears that the -L option is not very widely supported. FreeBSD's
+telnetd uses -p instead, and you can't give arguments (arguments appropriate
+to standard login are used). Some other telnetds do not support anything
+like this at all.
+
+The -f option, followed by a filename, specifies the path to the config file
+to use for dgamelaunch. If you specify the right path for DEFCONFIG in the
+Makefile, you may be able to omit this.
+
+For dgamelaunch, the -q option will silence errors pertaining to the server
+configuration. This is recommended for use within inetd to prevent spamming
+the clients, but when testing and setting up we strongly suggest you leave it
+off until running dgamelaunch produces no error output on stderr.
+
+5) Test your compilation of dgamelaunch by running it as root. If this
+works, a shell login or (x)inetd will work with the correct configuration.
+If you have problems with dgamelaunch's display make sure that your chroot's
+/etc/terminfo directory (or whatever directory your ncurses uses) is
+populated.
+
+
+COMMANDLINE PARAMETERS
+======================
+
+ -a Ignored.
+ -c Shows error message and exits. (login shell command)
+ -e Ignored.
+ -h Ignored.
+ -i user Autologin and run the register -command hook for "user"
+ (with password "user").
+ -p Ignored.
+ -q Be quiet, suppress errors.
+ -s Show players currently playing.
+ -W user:msg Send message "msg" to all players. The message seems
+ to come from "user".
+ -S Free the shared memory block.
+ -D Show contents of the shared memory block.
+
+
+ENVIRONMENT VARIABLES
+=====================
+
+ Linux telnetd allows importing the USER environment variables via telnet,
+ while FreeBSD does not. FreeBSD, on the other hand, does allow the LOGNAME
+ environment variable. Dgamelaunch will first check USER, then LOGNAME,
+ for "username:password", and tries autologin if either exists.
+ Dgamelaunch-specific DGLAUTH is checked before either of those.
+
+
+ERROR CODES
+===========
+
+ 1 Could not terminate stale processes
+ 2 Cannot chroot()
+ 3 Cannot chdir()
+ 4 Cannot setgroups()
+ 5 Cannot setgid()
+ 6 Cannot setuid()
+ 7 Caught HUP
+ 8 Cannot run as root: Config file has shed_user = "root"
+ 9 Cannot run as root: Config file has shed_user set to UID 0 user.
+ 10 Could not setup player
+ 11 Cannot run as root: Config file has shed_uid = 0
+ 12 Config file has an unrecognized token
+ 13 Config file: Negative value not accepted
+ 15 dgamelaunch called with -c (login shell command); exited
+ 20 No menu defined, or no banner found for menu
+ 60 Cannot create a new terminal, or no termcap files.
+ 61 Cannot openpty()
+ 62 Cannot open /dev/ptmx
+ 65 Cannot open master ptsname
+ 68 Cannot fcntl inprogress-lock
+ 70 Cannot write to inprogress-lock
+ 71 ftok() error for shm_key, no "dgamelaunch" file found?
+ 72 ftok() error for shm_sem_key, no "dgamelaunch" file found?
+ 73 shmget() error, cannot connect to shared memory
+ 74 smat() error, cannot attach to shared memory
+ 75 Nothing in shared memory?
+ 76 sem_init() error, could not initialize shared memory
+ 77 sem_wait() error
+ 78 sem_post() error
+ 95 Cannot fnctl lockfile
+ 96 sqlite3_open() failed when checking user existence: could not open login database
+ 97 sqlite3_open() failed in writefile()
+ 98 sqlite3_exec() failed in writefile()
+ 99 Could not open password file
+ 100 Username field too long in login file
+ 101 Email field too long in login file
+ 102 password field too long in login file
+ 103 env field too long in login file
+ 104 Cannot read config file
+ 105 Cannot read default config file
+ 106 Cannot open lockfile or password file
+ 107 fcntl failed on login database in writefile()
+ 108 sqlite3_exec() failed when checking user existence.
+ 109 Too many registered users. (see maxusers setting in config file)
+ 110 Login failed
+ 111 Two users trying to register at the same time
+ 112 Error changing password: cannot have ':' in password
+ 113 Error parsing configuration file
+ 114 exec-command fork failed
+ 115 could not read lock file in writefile()
+ 116 Too many registered users. (see maxusers setting in config file)
+ 117 wall error: no message to send
+ 118 wall error: no players
+ 119 User has a retarded terminal
+ 120 wall error: message too long
+ 121 wall error: "from" username is too short
+ 122 Error changing password: struct "me" does not exist
+ 123 chdir() failed in dgl commands.
+ 140 populate_games(): Cannot open inprogress-dir
+ 145 populate_games(): Inprogress-filename does not have ':' in it
+ 146 populate_games(): Inprogress-filename does not have ': in it (pt. 2)
+ 200 purge_stale_locks(): could not open inprogress-dir
+ 201 purge_stale_locks(): inprogress-file did not have ':' in it
+ 202 purge_stale_locks(): could not read inprogress-file
+ 203 purge_stale_locks(): could not get inprogress-file contents
--- /dev/null
+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 <dir> [/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 <dir> [/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 <dir> [/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 <dir> [/etc/menu] Location for menu files. Really they can
+# be anywhere, but this instructs the
+# script where to put the default ones.
+
+# --hackdir <dir> [/opt/nh500] NetHack is built wth this as its prefix.
+
+# --playground <dir> [/var/nh500] NetHack is built with this as its
+# 'var playground.'
+
+# --dbfile <sqlite3 db> [/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.<date>
+```
+
+Replace <date> 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:<uid>:<gid>:nethack,1,1,1,1:/home/nethack:/bin/bash
+```
+
+You need to modify the new user's line like so:
+
+```bash
+nethack:x:<uid>:<gid>:nethack,1,1,1,1:/home/nethack:/opt/dgamelaunch/bin/dgamelaunch.<date>
+```
+
+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
*/
#ifndef HACKDIR
-#define HACKDIR "/usr/games/lib/nethackdir"
-+#define HACKDIR "/opt/nh500"
++#define HACKDIR "(:hackdir:)"
#endif
/*
* 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"
-HACKDIR=$(PREFIX)/games/lib/nethackdir
-SHELLDIR = $(PREFIX)/games
+PREFIX=/.
-+HACKDIR=$(PREFIX)/opt/nh500
++HACKDIR=$(PREFIX)(:hackdir:)
+SHELLDIR = $(PREFIX)
VARDIRPERM = 0755
VARFILEPERM = 0600
INSTDIR=$(HACKDIR)
-VARDIR = $(HACKDIR)
-+VARDIR = $(PREFIX)/var/nh500
++VARDIR = $(PREFIX)(:playground:)
ifdef MAKEFILE_TOP
TESTGDBPATH=/usr/bin/gdb
#!/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 <dir> [/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 <dir> [/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 <dir> [/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 <dir> [<etc>/menu] Location for menu files. Really they can
+# be anywhere, but this instructs the
+# script where to put the default ones.
+
+# --hackdir <dir> [/opt/nh500] NetHack is built wth this as its prefix.
+
+# --playground <dir> [/var/nh500] NetHack is built with this as its
+# 'var playground.'
+
+# --dbfile <sqlite3 db> [<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.
+
+# --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 <dir>, --var <dir>, --etc <dir>, --menudir <dir>, --hackdir <dir>, --playground <dir>"
+ exit 1
+ ;;
+ *)
+ break # (treat this as $1)
+ ;;
+ esac
+done
## SETTINGS
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 <nh-src>/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"
# and can't run without it.
#
# If you change this here, you will have to change it in <chroot>/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:
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"
################
# 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
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
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
# 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