view dgl/dgamelaunch.conf @ 55:e421ea2519ec

dgamelaunch: define user/group by name instead of UID/GID. The user and group might not be created with the UID and GID expected, so it is better to use names. They can be changed to numeric values after installation.
author John "Elwin" Edwards
date Sun, 11 May 2014 08:32:31 -0700
parents 566e37477b91
children ad103f9f2e3a
line wrap: on
line source

# rlgallery.org dgamelaunch configuration file

# 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 = 20

# 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, "%-20s"],
                  ["Game", "game", 26, "%-11s"],
                  ["Term", "windowsize", 39, "%s"],
                  ["Idle", "idletime", 48, "%-10s"],
                  ["Started", "starttime", 60, "%s"]
                ]

# Path to a prepared chroot jail.
chroot_path = "/var/dgl"

# 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)Roguelike Gallery - rlgallery.org$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 = "/dgldir/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.

# Use names, because the numeric ID's are not really predictable. They can
# always be substituted after installation.

# shed_user: username to shed privileges to
shed_user = "rodney"
# shed_group: group name to shed privileges to
shed_group = "rodney"

# Preferably, you may use the respective gids/uids.
#shed_uid = 501
#shed_gid = 501

# 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)
#   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 "%rttyrec/%n",
                     mkdir "%rttyrec/%n/rogue3",
                     mkdir "%rttyrec/%n/rogue4",
                     mkdir "%rttyrec/%n/rogue5",
                     mkdir "%rttyrec/%n/srogue",
                     mkdir "%rttyrec/%n/arogue5"

commands[login] = mkdir "%ruserdata/%n",
                  mkdir "%rttyrec/%n",
                  mkdir "%rttyrec/%n/rogue3",
                  mkdir "%rttyrec/%n/rogue4",
                  mkdir "%rttyrec/%n/rogue5",
                  mkdir "%rttyrec/%n/srogue",
                  mkdir "%rttyrec/%n/arogue5"

# file mode for when commands copy files.
# readable and writable by all. you could use eg. "0644" to be more secure.
filemode = "0644"




# 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 = "/dgldir/dgl_menu_main_anon.txt"
        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 = "/dgldir/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["3"] = play_game "RogueV3"
        commands["4"] = play_game "RogueV4"
        commands["5"] = play_game "RogueV5"
        commands["Ss"] = play_game "SRogue"
        commands["Aa"] = play_game "ARogue5"
        commands["q"] = quit
}

# this menu is shown when user presses '?' in the watching menu
menu["watchmenu_help"] {
	bannerfile = "/dgldir/dgl_menu_watchmenu_help.txt"
	commands["qQ "] = return
}

# Rogue V3: short and simple, like the game
DEFINE {
  game_path = "/usr/bin/rogue3"
  game_name = "Rogue V3 (3.6)"
  short_name = "RogueV3"

  game_args = "rogue3", "-n", "%n"

  inprogressdir = "%rinprogress/rogue3/"
  ttyrecdir = "%rttyrec/%n/rogue3/"

  # Don't do anything with rcfiles.  Rogue has none.

  # Back up the savefile, just in case
  commands = cp "/var/games/roguelike/rogue3save/%u-%n.r3sav" "%rbackup/%u-%n.r3sav.bak"
}

# Rogue V4: just like it, but a little different
DEFINE {
  game_path = "/usr/bin/rogue4"
  game_name = "Rogue V4 (5.2)"
  short_name = "RogueV4"

  game_args = "rogue4", "-n", "%n"
  inprogressdir = "%rinprogress/rogue4/"
  ttyrecdir = "%rttyrec/%n/rogue4/"

  commands = cp "/var/games/roguelike/rogue4save/%u-%n.r4sav" "%rbackup/%u-%n.r4sav.bak"
}

# Rogue V5: a little more different from both
DEFINE {
  game_path = "/usr/bin/rogue5"
  game_name = "Rogue V5 (5.4)"
  short_name = "RogueV5"

  game_args = "rogue5", "-n", "%n"
  inprogressdir = "%rinprogress/rogue5/"
  ttyrecdir = "%rttyrec/%n/rogue5/"

  commands = cp "/var/games/roguelike/rogue5save/%u-%n.r5sav" "%rbackup/%u-%n.r5sav.bak"
}

# Super-Rogue: different?
DEFINE {
  game_path = "/usr/bin/srogue"
  game_name = "Super-Rogue"
  short_name = "SRogue"

  game_args = "srogue", "-n", "%n"
  inprogressdir = "%rinprogress/srogue/"
  ttyrecdir = "%rttyrec/%n/srogue/"

  commands = cp "/var/games/roguelike/sroguesave/%u-%n.srsav" "%rbackup/%u-%n.srsav.bak"
}

# Advanced Rogue 5: not different?
DEFINE {
  game_path = "/usr/bin/arogue5"
  game_name = "Advanced Rogue 5"
  short_name = "ARogue5"

  game_args = "arogue5", "-n", "%n"
  inprogressdir = "%rinprogress/arogue5/"
  ttyrecdir = "%rttyrec/%n/arogue5/"

  commands = cp "/var/games/roguelike/arogue5save/%u-%n.ar5sav" "%rbackup/%u-%n.ar5sav.bak"
}


# Next, we'll define one game's data:

#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"
#
#  # 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"
#}


#
# the second game
#
#

#DEFINE {
#  game_path = "/nh343/nethack"
#  game_name = "NetHack 3.4.3"
#  short_name = "NH343"
#
#  game_args = "/nh343/nethack", "-u", "%n"
#
#  spooldir = "/mail/"
#  rc_template = "/dgl-default-rcfile.nh343"
#
#  rc_fmt = "%ruserdata/%n/%n.nh343rc"
#
#  inprogressdir = "%rinprogress-nh343/"
#
## 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 "/nh343/var/save/%u%n.gz" "/nh343/var/save/%u%n.gz.bak",
#  # set NETHACKOPTIONS to point to the rcfile
#             setenv "NETHACKOPTIONS" "@%ruserdata/%n/%n.nh343rc",
#  # 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"
#}

#
# third game
#
#

#DEFINE {
#  game_path = "/bin/crawlss017"
#  game_name = "Crawl Stone Soup 0.1.7"
#  short_name = "Cr017"
#
#  game_args = "/bin/crawlss017",
#	      "-name",   "%n",
#	      "-dir",    "/crawlss017/",
#	      "-rc",     "%rrcfiles/%n.crawlrc",
#	      "-morgue", "/crawlss017/morgues/",
#	      "-macro",  "/crawlss017/macros/%n.macro"
#
#  rc_template = "/dgl-default-rcfile.crawl"
#  rc_fmt = "%rrcfiles/%n.crawlrc"
#  inprogressdir = "%rinprogress-crawlss017/"
#  encoding = ask
#}

#
# fourth game
#
#

#DEFINE {
#  game_path = "/bin/crawlss020"
#  game_name = "Crawl Stone Soup 0.2.0"
#  short_name = "Cr020"
#
#  game_args = "/bin/crawlss020",
#	      "-name",   "%n",
#	      "-dir",    "/crawlss020/",
#	      "-rc",     "/crawlss020/plr/%n/%n.crawlrc",
#	      "-morgue", "/crawlss020/plr/%n/",
#	      "-macro",  "/crawlss020/plr/%n/"
#
#  rc_template = "/dgl-default-rcfile.crawl"
#  rc_fmt = "/crawlss020/plr/%n/%n.crawlrc"
#  inprogressdir = "%rinprogress-crawlss020/"
#}