Annotation of dgamelaunch-openbsd/dgl-create-chroot, Revision 1.10
1.1 rubenllo 1: #!/bin/sh
2:
3: # Ideas and some parts from the original dgl-create-chroot (by joshk@triplehelix.org, modifications by jilles@stack.nl)
1.8 rubenllo 4: # This one by paxed@alt.org, modified by porting@use.startmail.com
1.1 rubenllo 5:
6:
7: #
8: # configure dgl with --with-config-file=/path_to_chroot/etc/dgamelaunch.conf, if you want the conf file inside the chroot.
9: #
10:
11:
12: # Same as chroot_path in dgl config file
13: CHROOT="/opt/nethack/nethack.alt.org/"
14: # the user & group from dgamelaunch config file.
15: USRGRP="games:games"
16: # COMPRESS from include/config.h; the compression binary to copy. leave blank to skip.
1.4 rubenllo 17: COMPRESSBIN="/usr/bin/gzip"
1.1 rubenllo 18: # nethack binary to copy into chroot (leave blank to skip)
19: #NETHACKBIN="/home/paxed/hacking/coding/nethacksource/nethack-3.4.3-nao/nh343/nethack.343-nao"
20: # fixed data to copy (leave blank to skip)
21: #NH_PLAYGROUND_FIXED="/home/paxed/hacking/coding/nethacksource/nethack-3.4.3-nao/nh343/"
22: # HACKDIR from include/config.h; aka nethack subdir inside chroot
23: NHSUBDIR="/nh343/"
24: # VAR_PLAYGROUND from include/unixconf.h
25: NH_VAR_PLAYGROUND="/nh343/var/"
26:
27: # only define this if dgl was configured with --enable-sqlite
28: SQLITE_DBFILE="/dgldir/dgamelaunch.db"
29:
1.6 rubenllo 30: # only define this is dgl was configured without --enable-sqlite
31: #PASSWD_FILE="/dgldir/dgl-login"
1.10 ! rubenllo 32: #LOCK_FILE="/dgldir/dgl-lock"
1.6 rubenllo 33:
1.7 rubenllo 34: # only define this is dgl was configured without --enable-debugfile
35: #DEBUGFILE="/dgldebug.log"
36:
1.1 rubenllo 37: # END OF CONFIG
38: ##############################################################################
39:
40: errorexit()
41: {
42: echo "Error: $@" >&2
43: exit 1
44: }
45:
46: findlibs()
47: {
48: for i in "$@"; do
1.2 rubenllo 49: if [ -z "`ldd "$i" | grep 'not a'`" ]; then
50: if test $(uname -s) == OpenBSD; then
51: echo $(ldd "$i" | awk '{ print $7 }' | egrep -v ^'\(') | cut -d ' ' -f 3-
52: else
53: echo $(ldd "$i" | awk '{ print $3 }' | egrep -v ^'\(')
1.1 rubenllo 54: echo $(ldd "$i" | grep 'ld-linux' | awk '{ print $1 }')
1.2 rubenllo 55: fi
1.1 rubenllo 56: fi
57: done
58: }
59:
60: ##############################################################################
61:
62: if [ -z "$TERMDATA" ]; then
63: SEARCHTERMDATA="/etc/terminfo /usr/share/lib/terminfo /usr/share/terminfo /lib/terminfo"
64: for dir in $SEARCHTERMDATA; do
65: if [ -e "$dir/x/xterm" ]; then
66: TERMDATA="$TERMDATA $dir"
67: fi
68: done
69: if [ -z "$TERMDATA" ]; then
70: errorexit "Couldn't find terminfo definitions. Please specify in 'TERMDATA' variable."
71: fi
72: fi
73:
74:
75:
76: # remove trailing slash, if any
77: CHROOT="`echo ${CHROOT%/}`"
78:
79: set -e
80: umask 022
81:
82: if [ -e "$CHROOT" ]; then
83: errorexit "Chroot $CHROOT already exists."
84: fi
85:
86: CURDIR="`pwd`"
87:
1.4 rubenllo 88: if [ ! -e "$CURDIR/dgamelaunch-openbsd" ]; then
89: errorexit "Cannot find dgamelaunch-openbsd in $CURDIR"
1.1 rubenllo 90: fi
91:
92: DGLFILE="dgamelaunch.`date +%Y%m%d`"
93:
94: echo "Setting up chroot in $CHROOT"
95:
1.4 rubenllo 96: LIBS="`findlibs dgamelaunch-openbsd`"
1.1 rubenllo 97:
98: mkdir -p "$CHROOT" || errorexit "Cannot create chroot"
99: cd "$CHROOT"
100: mkdir dgldir etc lib mail usr bin
101: chown "$USRGRP" dgldir mail
1.4 rubenllo 102: cp "$CURDIR/dgamelaunch-openbsd" "$DGLFILE"
1.1 rubenllo 103: ln -s "$DGLFILE" dgamelaunch
104:
105: mkdir -p "$CHROOT/dgldir/inprogress-nh343"
106: mkdir -p "$CHROOT/dgldir/userdata"
107: chown "$USRGRP" "$CHROOT/dgldir/inprogress-nh343"
108: chown "$USRGRP" "$CHROOT/dgldir/userdata"
109:
110:
111: if [ -n "$SQLITE_DBFILE" ]; then
112: if [ "x`which sqlite3`" = "x" ]; then
113: errorexit "No sqlite3 found."
114: else
115: echo "Creating SQLite database at $SQLITE_DBFILE"
116: SQLITE_DBFILE="`echo ${SQLITE_DBFILE%/}`"
117: SQLITE_DBFILE="`echo ${SQLITE_DBFILE#/}`"
118: sqlite3 "$CHROOT/$SQLITE_DBFILE" "create table dglusers (id integer primary key, username text, email text, env text, password text, flags integer);"
119: chown "$USRGRP" "$CHROOT/$SQLITE_DBFILE"
1.5 rubenllo 120: chmod 0700 "$CHROOT/$SQLITE_DBFILE"
1.1 rubenllo 121: fi
122: fi
123:
1.9 rubenllo 124: if [ -n "$PASSWD_FILE" ]; then
1.6 rubenllo 125: echo "Creating password file at $PASSWD_FILE"
126: touch "$CHROOT/$PASSWD_FILE"
1.7 rubenllo 127: chown "$USRGRP" "$CHROOT/$PASSWD_FILE"
1.6 rubenllo 128: chmod 0700 "$CHROOT/$PASSWD_FILE"
1.7 rubenllo 129: fi
130:
1.9 rubenllo 131: if [ -n "$LOCK_FILE" ]; then
132: echo "Creating lockfile at $LOCK_FILE"
133: touch "$CHROOT/$LOCK_FILE"
134: chown "$USRGRP" "$CHROOT/$LOCK_FILE"
135: chmod 0700 "$CHROOT/$LOCK_FILE"
136: fi
137:
138: if [ -n "$DEBUGFILE" ]; then
1.7 rubenllo 139: echo "Creating debugfile at $DEBUGFILE"
140: touch "$CHROOT/$DEBUGFILE"
141: chown "$USRGRP" "$CHROOT/$DEBUGFILE"
142: chmod 0700 "$CHROOT/$DEBUGFILE"
1.6 rubenllo 143: fi
1.1 rubenllo 144:
145: if [ -n "$COMPRESSBIN" -a -e "`which $COMPRESSBIN`" ]; then
146: COMPRESSDIR="`dirname $COMPRESSBIN`"
147: COMPRESSDIR="`echo ${COMPRESSDIR%/}`"
148: COMPRESSDIR="`echo ${COMPRESSDIR#/}`"
149: echo "Copying $COMPRESSBIN to $COMPRESSDIR"
150: mkdir -p "$COMPRESSDIR"
151: cp "`which $COMPRESSBIN`" "$COMPRESSDIR/"
152: LIBS="$LIBS `findlibs $COMPRESSBIN`"
153: fi
154:
155:
156: mkdir -p dev
157: cd dev
1.3 rubenllo 158: if test $(uname -s) == OpenBSD; then
159: mknod urandom c 45 0
160: else
161: mknod urandom c 1 9
162: fi
1.1 rubenllo 163: cd ..
164:
165:
166: cd etc
167: cp "$CURDIR/examples/dgamelaunch.conf" .
168: echo "Edit $CHROOT/etc/dgamelaunch.conf to suit your needs."
169: [ -f /etc/localtime ] && cp /etc/localtime .
170: cd ..
171:
172:
173: cd bin
174: cp "$CURDIR/ee" .
175: cp "$CURDIR/virus" .
176: echo "Copied text editors 'ee' and 'virus' to chroot."
177: cd ..
178:
179:
180: cp "$CURDIR/examples/dgl_menu_main_anon.txt" .
181: cp "$CURDIR/examples/dgl_menu_main_user.txt" .
182: cp "$CURDIR/examples/dgl_menu_watchmenu_help.txt" .
183: cp "$CURDIR/examples/dgl-banner" .
184: cp "$CURDIR/dgl-default-rcfile" "dgl-default-rcfile.nh343"
185: chmod go+r dgl_menu_main_anon.txt dgl_menu_main_user.txt dgl-banner dgl-default-rcfile.nh343
186:
187: NHSUBDIR="`echo ${NHSUBDIR%/}`"
188: NHSUBDIR="`echo ${NHSUBDIR#/}`"
189:
190: mkdir "$CHROOT/$NHSUBDIR"
191:
192: if [ -n "$NETHACKBIN" -a ! -e "$NETHACKBIN" ]; then
193: errorexit "Cannot find NetHack binary $NETHACKBIN"
194: fi
195:
196: if [ -n "$NETHACKBIN" -a -e "$NETHACKBIN" ]; then
197: echo "Copying $NETHACKBIN"
198: cd "$NHSUBDIR"
199: NHBINFILE="`basename $NETHACKBIN`.`date +%Y%m%d`"
200: cp "$NETHACKBIN" "$NHBINFILE"
201: ln -s "$NHBINFILE" nethack
202: LIBS="$LIBS `findlibs $NETHACKBIN`"
203: cd "$CHROOT"
204: fi
205:
206:
207: NH_PLAYGROUND_FIXED="`echo ${NH_PLAYGROUND_FIXED%/}`"
208:
209: if [ -n "$NH_PLAYGROUND_FIXED" -a -d "$NH_PLAYGROUND_FIXED" ]; then
210: echo "Copying NetHack playground stuff."
211: NHFILES="*.lev *.dat cmdhelp data dungeon help hh history license opthelp options oracles recover rumors wizhelp"
212: for fil in $NHFILES; do
213: cp $NH_PLAYGROUND_FIXED/$fil "$CHROOT/$NHSUBDIR/"
214: done
215: fi
216:
217:
218: NH_VAR_PLAYGROUND="`echo ${NH_VAR_PLAYGROUND%/}`"
219: NH_VAR_PLAYGROUND="`echo ${NH_VAR_PLAYGROUND#/}`"
220:
221: echo "Creating NetHack variable dir stuff."
222: if [ -n "$NH_VAR_PLAYGROUND" ]; then
223: mkdir -p "$CHROOT/$NH_VAR_PLAYGROUND"
224: chown -R "$USRGRP" "$CHROOT/$NH_VAR_PLAYGROUND"
225: fi
226: mkdir -p "$CHROOT/$NH_VAR_PLAYGROUND/save"
227: chown -R "$USRGRP" "$CHROOT/$NH_VAR_PLAYGROUND/save"
228: touch "$CHROOT/$NH_VAR_PLAYGROUND/logfile"
229: touch "$CHROOT/$NH_VAR_PLAYGROUND/perm"
230: touch "$CHROOT/$NH_VAR_PLAYGROUND/record"
231: touch "$CHROOT/$NH_VAR_PLAYGROUND/xlogfile"
232:
233: chown -R "$USRGRP" "$CHROOT/$NHSUBDIR"
234: chown -R "$USRGRP" "$CHROOT/$NH_VAR_PLAYGROUND"
235:
236:
237:
238: # Curses junk
239: if [ -n "$TERMDATA" ]; then
240: echo "Copying termdata files from $TERMDATA"
241: for termdat in $TERMDATA; do
242: mkdir -p "$CHROOT`dirname $termdat`"
243: if [ -d $termdat/. ]; then
244: cp -LR $termdat/. $CHROOT$termdat
245: else
246: cp $termdat $CHROOT`dirname $termdat`
247: fi
248: done
249: fi
250:
251:
252: LIBS=`for lib in $LIBS; do echo $lib; done | sort | uniq`
253: echo "Copying libraries:" $LIBS
254: for lib in $LIBS; do
255: mkdir -p "$CHROOT`dirname $lib`"
256: cp $lib "$CHROOT$lib"
257: done
258:
259:
260: echo "Finished."
261:
262:
CVSweb