[BACK]Return to dgl-create-chroot CVS log [TXT][DIR] Up to [contributed] / dgamelaunch-openbsd

File: [contributed] / dgamelaunch-openbsd / dgl-create-chroot (download)

Revision 1.10, Fri Apr 2 12:06:20 2021 UTC (3 years ago) by rubenllorente
Branch: MAIN
CVS Tags: HEAD, DGAMELAUNCH_0_0_1
Changes since 1.9: +1 -1 lines

Fix shameful typo

#!/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, modified by porting@use.startmail.com


#
# 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="/usr/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"

# only define this is dgl was configured without --enable-sqlite
#PASSWD_FILE="/dgldir/dgl-login"
#LOCK_FILE="/dgldir/dgl-lock"

# only define this is dgl was configured without --enable-debugfile
#DEBUGFILE="/dgldebug.log"

# END OF CONFIG
##############################################################################

errorexit()
{
    echo "Error: $@" >&2
    exit 1
}

findlibs()
{
  for i in "$@"; do
      if [ -z "`ldd "$i" | grep 'not a'`" ]; then
        if test $(uname -s) == OpenBSD; then
          echo $(ldd "$i" | awk '{ print $7 }' | egrep -v ^'\(') | cut -d ' ' -f 3- 
	else
	 echo $(ldd "$i" | awk '{ print $3 }' | egrep -v ^'\(')
         echo $(ldd "$i" | grep 'ld-linux' | awk '{ print $1 }')
	fi
      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-openbsd" ]; then
   errorexit "Cannot find dgamelaunch-openbsd in $CURDIR"
fi

DGLFILE="dgamelaunch.`date +%Y%m%d`"

echo "Setting up chroot in $CHROOT"

LIBS="`findlibs dgamelaunch-openbsd`"

mkdir -p "$CHROOT" || errorexit "Cannot create chroot"
cd "$CHROOT"
mkdir dgldir etc lib mail usr bin
chown "$USRGRP" dgldir mail
cp "$CURDIR/dgamelaunch-openbsd" "$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"
      chmod 0700 "$CHROOT/$SQLITE_DBFILE"
  fi
fi

if [ -n "$PASSWD_FILE" ]; then
      echo "Creating password file at $PASSWD_FILE"
      touch "$CHROOT/$PASSWD_FILE"
      chown "$USRGRP" "$CHROOT/$PASSWD_FILE"
      chmod 0700 "$CHROOT/$PASSWD_FILE"
fi

if [ -n "$LOCK_FILE" ]; then
      echo "Creating lockfile at $LOCK_FILE"
      touch "$CHROOT/$LOCK_FILE"
      chown "$USRGRP" "$CHROOT/$LOCK_FILE"
      chmod 0700 "$CHROOT/$LOCK_FILE"
fi

if [ -n "$DEBUGFILE" ]; then
      echo "Creating debugfile at $DEBUGFILE"
      touch "$CHROOT/$DEBUGFILE"
      chown "$USRGRP" "$CHROOT/$DEBUGFILE"
      chmod 0700 "$CHROOT/$DEBUGFILE"
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
if test $(uname -s) == OpenBSD; then
  mknod urandom c 45 0
else
  mknod urandom c 1 9
fi
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."