#!/bin/bash

# Copyright (C) 2006 Benedikt Boehm <hollow@gentoo.org>
#  
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#  
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#  
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

## Called as: initpost <cfgdir> <path of util-vserver-vars>

# setup environment
cfgdir="$1"
vdir="$cfgdir"/vdir
. "$2"
. "$_LIB_VSERVER_BUILD_FUNCTIONS"


# vserver name
NAME="$cfgdir"


# go to vdir for chroot-sh
pushd "$vdir" &>/dev/null


# helper for sed in chroot
chrootsed() {
	local file="$1"
	shift
	
	sedtmp=$($_MKTEMP chrootsed.XXXXXX)
	
	$_CHROOT_SH cat "$file" | $_SED "$@" > $sedtmp
	$_CHROOT_SH truncate "$file"  < $sedtmp
	
	$_RM -f $sedtmp
}


# create a locale.gen if needed.
if test -n "$LANG" && test "$LANG" != "C"; then
	echo $LANG $(locale charmap) | $_CHROOT_SH append /etc/locale.gen
fi


# make apt and friends work
$_CHROOT_SH truncate /etc/apt/sources.list <<EOF
deb $MIRROR/ $DISTRIBUTION main
deb-src $MIRROR/ $DISTRIBUTION main

deb http://security.debian.org $DISTRIBUTION/updates main
EOF


# setting hostname
if test -r "$cfgdir"/uts/nodename; then
	$_CHROOT_SH truncate /etc/hostname < "$cfgdir"/uts/nodename
fi


# setting default /etc/hosts
$_CHROOT_SH truncate /etc/hosts <<EOF
# /etc/hosts

127.0.0.1	localhost

# The following lines are desirable for IPv6 capable hosts
# (added automatically by netbase upgrade)

::1	ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts
EOF


# copy proxy server statement from host if any
if test -f /etc/apt/apt.conf; then
	$_CHROOT_SH truncate /etc/apt/apt.conf < /etc/apt/apt.conf
fi


# fix gettys in inittab
if $_CHROOT_SH testfile /etc/inittab; then
	chrootsed /etc/inittab \
		-e 's/\(^[^#].*getty.*$\)/#\1/'
fi


# fix /proc/cmdline in sendsigs
if $_CHROOT_SH testfile /etc/init.d/sendsigs; then
	chrootsed /etc/init.d/sendsigs \
		-e 's/^\(\s\+splash_back\)$/#\1/'
fi


# upstart fixing
if $_CHROOT_SH testfile /sbin/initctl; then
    for i in etc/init/*; do
	i=${i##*/}
	case "$i" in
	  (control-alt-delete.conf|rc.conf)
	    ;;
	  (rsyslog.conf|syslog-ng.conf)
	    ;;
	  (*)
	    chrootsed /etc/init/$i \
		-e 's/^/#/'
	    ;;
	esac
    done
    $_CHROOT_SH truncate /etc/init/vserver.conf <<EOF
start on startup
script
       initctl emit virtual-filesystems
       initctl emit local-filesystems
       initctl emit remote-filesystems
       initctl emit filesystem
end script
EOF
fi


# start vserver before we can exec anything inside it
$_VSERVER "$NAME" stop &>/dev/null || :
startSleepingGuest "$NAME" 30

# run the configure commands from within the server
export LANG=C LC_ALL=C

$_CHROOT_SH testfile /usr/sbin/locale-gen && \
    $_VSERVER "$NAME" exec /usr/sbin/locale-gen

have_halt=
test "$(cat "$cfgdir"/apps/init/style 2>/dev/null)" != "plain" || \
    have_halt=halt

pushd etc/init.d &>/dev/null
for i in *; do
    case "$i" in
      (sysklogd|syslog-ng|rsyslog|dsyslog)
	;;
      (README|skeleton|sendsigs|single|rc|rc.local|rcS)
	;;
      ($have_halt)
	;;
      (*)
	$_VSERVER "$NAME" exec update-rc.d -f "$i" remove
	;;
    esac
done
popd &>/dev/null

# stop the vserver
stopSleepingGuest "$NAME" &>/dev/null || :

popd &>/dev/null
