1
0
mirror of https://github.com/paxed/dgamelaunch.git synced 2025-04-08 17:06:19 +02:00
dgamelaunch/dgl-create-chroot
Pasi Kallinen 2407611518 Allow printing raw string.
Add escape codes to string substitutions.
Some mode docs in the example config file.
Make chroot creation script fail with message when no sqlite3.
2012-06-04 18:11:56 +03:00

227 lines
6.0 KiB
Bash
Executable File

#!/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
#
# 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.alt.org/"
# 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="/home/paxed/hacking/coding/nethacksource/nethack-3.4.3-nao/nh343/nethack.343-nao"
# fixed data to copy (leave blank to skip)
#NH_PLAYGROUND_FIXED="/home/paxed/hacking/coding/nethacksource/nethack-3.4.3-nao/nh343/"
# HACKDIR from include/config.h; aka nethack subdir inside chroot
NHSUBDIR="/nh343/"
# VAR_PLAYGROUND from include/unixconf.h
NH_VAR_PLAYGROUND="/nh343/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-nh343"
mkdir -p "$CHROOT/dgldir/userdata"
chown "$USRGRP" "$CHROOT/dgldir/inprogress-nh343"
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.nh343"
chmod go+r dgl_menu_main_anon.txt dgl_menu_main_user.txt dgl-banner dgl-default-rcfile.nh343
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."