#!/bin/sh

kernel_version=2.4.25

if [ $# -lt 1 ]; then

  ## post bootcdimage ##
  bootcdroot=/var/lib/bootcd
  LC_ALL=C

  # rm useless staff in $bootcdroot
  rm -rf $bootcdroot/opt/drblcd
  rm -rf $bootcdroot/openoffice

  # /tftpboot/drbl
  rm -rf $bootcdroot/tftpboot
  mkdir -p $bootcdroot/tftpboot/drbl

  # install wm2
  chroot $bootcdroot apt-get -y install wm2

  # 2003/08/26 this demo cd is created for zh_TW
  cat <<-EOF >> $bootcdroot/etc/kde3/system.kdeglobals

[Locale]
Country=tw
Language=zh_TW
EOF

  # create drbl root from bootcdroot
  echo "Creating drbl root from $bootcdroot. This will take few minutes.."
  if [ ! -f bootcdroot.tar.gz ]; then
    CPWD=$(pwd)
    cd $bootcdroot
    tar --exclude=opt -czf $CPWD/bootcdroot.tar.gz .
    cd $CPWD
  fi
  rm -rf $bootcdroot/tftpboot/drbl
  mkdir -p $bootcdroot/tftpboot/drbl/root
  tar -C $bootcdroot/tftpboot/drbl/root -xzf bootcdroot.tar.gz
  mkdir -p $bootcdroot/tftpboot/drbl/root/opt
  mkdir -p $bootcdroot/tftpboot/drbl/root/etc/drblcd

  # /var/lib/diskless/default -> /tftpboot/drbl
  mkdir -p $bootcdroot/var/lib/diskless/
  ln -s /tftpboot/drbl $bootcdroot/var/lib/diskless/default

  # chroot to setup drbl ..
  mount -t proc proc $bootcdroot/proc
  trap 'umount $bootcdroot/proc' HUP INT QUIT TERM
  chroot $bootcdroot /root/postbootcdimage drbl
  umount $bootcdroot/proc

  # init
  cp $bootcdroot/root/init $bootcdroot/tftpboot/drbl/root/sbin
  nhost=1
  for dir in `ls $bootcdroot/tftpboot/drbl`
  do
    if [ "$dir" = "." -o "$dir" = ".." -o "$dir" = "root" ]; then continue; fi
    CPWD=$(pwd)

    # login_user
    if [ $nhost -lt 10 ]; then login_user="demo00$nhost";
	elif [ $nhost -lt 100 ]; then login_user="demo0$nhost";
	else login_user="demo$nhost"; fi
	nhost=`expr $nhost + 1`

    mkdir -p $bootcdroot/tftpboot/drbl/root/sbin/$dir
    # etc.tar.gz
    cd $bootcdroot/tftpboot/drbl/$dir/etc
    perl -p -i -e "s/AutoLoginEnable=.*/AutoLoginEnable=true/" kde3/kdm/kdmrc
    perl -p -i -e "s/AutoLoginUser=.*/AutoLoginUser=$login_user/" kde3/kdm/kdmrc
    tar czmf $bootcdroot/tftpboot/drbl/root/sbin/$dir/etc.tar.gz .
    # var.tar.gz
    cd $bootcdroot/tftpboot/drbl/$dir/var
    tar czmf $bootcdroot/tftpboot/drbl/root/sbin/$dir/var.tar.gz .
    # home.tar.gz
    cd $bootcdroot/home
	tar czmf $bootcdroot/tftpboot/drbl/root/sbin/$dir/home.tar.gz $login_user
    rm -rf $login_user

    cd $CPWD
    rm -rf $bootcdroot/tftpboot/drbl/$dir
	echo "/usr	$dir(ro no_root_squash)" >> $bootcdroot/etc/exports

  done
  # for ocs
  mkdir -p $bootcdroot/home/partimag

  # setup.sh
  cp $bootcdroot/root/autoypinit $bootcdroot/sbin/
  cat <<-EOF > $bootcdroot/sbin/setup.sh
#!/bin/sh
# nis
cp /var.ro/yp/Makefile /var/yp
/etc/init.d/nis start
/sbin/autoypinit

# dhcp3-server
touch /var/lib/dhcp3/dhcpd.leases

# nfs-user-server (diskless imageroot)
ln -s /tftpboot/drbl /var/lib/diskless/default
EOF
  chmod 755 $bootcdroot/sbin/setup.sh

  # rm useless staff in $bootcdroot/tftpboot/drbl/root/
  rm -rf $bootcdroot/tftpboot/drbl/root/root/*

  cp $bootcdroot/tftpboot/drbl/root/usr/bin/awk .
  cp $bootcdroot/tftpboot/drbl/root/usr/bin/cut .
  cp $bootcdroot/tftpboot/drbl/root/usr/bin/wc .
  rm -rf $bootcdroot/tftpboot/drbl/root/usr
  mkdir -p $bootcdroot/tftpboot/drbl/root/usr/bin
  mv awk $bootcdroot/tftpboot/drbl/root/usr/bin
  mv cut $bootcdroot/tftpboot/drbl/root/usr/bin
  mv wc $bootcdroot/tftpboot/drbl/root/usr/bin

  # $bootcdroot/root/Desktop (put the demo items here)
  rm -rf $bootcdroot/root/Desktop

  # rm -f bootcdroot.tar.gz
  echo -n "Do you want to remove bootcdroot.tar.gz [Y|n]? "
  read ANS
  if [ "$ANS" = "" -o "$ANS" = "Y" -o "$ANS" = "y" ]; then
    rm -f bootcdroot.tar.gz
  fi

else

  ## drbl setup ##
  drblroot=/var/lib/diskless/default/root

  # dhcp3-server tftpd-hda nis nfs-user-server diskless
  cat <<-EOF > /etc/defaultdomain
drbl
EOF
  apt-get -y install dhcp3-server
  apt-get -y install tftpd-hpa
  apt-get -y install nis
  apt-get -y install nfs-user-server
  apt-get -y install diskless

  # nis
  cat <<-EOF > /etc/default/nis
#
# /etc/defaults/nis Configuration settings for the NIS daemons.
#

# Are we a NIS server and if so what kind (values: false, slave, master)
NISSERVER=master

# Location of the master NIS password file (for yppasswdd).
# If you change this make sure it matches with /var/yp/Makefile.
YPPWDDIR=/etc

# Do we allow the user to use ypchsh and/or ypchfn ? The YPCHANGEOK
# fields are passed with -e to yppasswdd, see it's manpage.
# Possible values: "chsh", "chfn", "chsh,chfn"
YPCHANGEOK=chsh
EOF

  # tftp
  has_tftp=`cat /etc/inetd.conf | grep "tftp"`
  if [ "$has_tftp" != "" ]; then
    cat /etc/inetd.conf | sed -e '/^tftp.*/D' > inetd.conf
	cp inetd.conf /etc
	rm -f inetd.conf
  fi
  echo "tftp	dgram	udp	wait	root	/usr/sbin/in.tftpd	/usr/sbin/in.tftpd -s /tftpboot" >> /etc/inetd.conf
  if [ ! -e "/tftpboot" ]; then
    mkdir /tftpboot
  fi

  rmdir /opt/drblcd
  deb=`ls /root/drbl-script*`
  dpkg -i $deb
  deb=`ls /root/drbl-installer*`
  dpkg -i $deb
  deb=`ls /root/drbl-patch*`
  dpkg -i $deb

  # drblroot diskless-image
  tar -C /tmp -xvzf /root/drbl.tar.gz
  mkdir -p $drblroot/usr/lib
  cp -r /tmp/drblcli/diskless-image $drblroot/usr/lib
  mv $drblroot/sbin/init $drblroot/sbin/init.orig
  cp /tmp/drblcli/init $drblroot/sbin/init
  cp /tmp/drblcli/X $drblroot/etc/init.d/X

  master="drbl"
  nfsserver="192.168.1.1"
  nfsimagedir="/var/lib/diskless/default/root"
  nfshostsdir="/var/lib/diskless/default"
  nfshostdir="/home"
  nameserver="192.168.1.1"
  domain="drbl.org"
  maildomain="drbl.org"
  mailroute="smtp"
  devfs="yes"

  mkdir -p $drblroot/etc/diskless-image
  cat > $drblroot/etc/diskless-image/config << EOF
master=$master
nfsserver=$nfsserver
nfsimagedir=$nfsimagedir
nfshostsdir=$nfshostsdir
nfshomedir=$nfshomedir
nameserver=$nameserver
domain=$domain
maildomain=$maildomain
mailroute=$mailroute
devfs=$devfs
EOF

  cat > $drblroot/etc/diskless-image/config.m4 <<EOF
divert(-1)dnl
define(<[image_master]>,<[$master]>)
define(<[image_nfsserver]>,<[$nfsserver]>)
define(<[image_nfsimagedir]>,<[$nfsimagedir]>)
define(<[image_nfshostsdir]>,<[$nfshostsdir]>)
define(<[image_nfshomedir]>,<[$nfshomedir]>)
define(<[image_nameserver]>,<[$nameserver]>)
define(<[image_domain]>,<[$domain]>)
define(<[image_maildomain]>,<[$maildomain]>)
define(<[image_mailroute]>,<[$mailroute]>)
define(<[image_devfs]>,<[$devfs]>)
divert(0)dnl
EOF

  cat > $drblroot/etc/diskless-image/exports << EOF
$nfsimagedir <ipaddress>(rw no_root_squash)
EOF

  cat > $drblroot/etc/fstab << EOF
none    /proc   proc    defaults    1   0
$nfsserver:$nfsimagedir /   nfs defaults,nolock 0   1
EOF

  cp /etc/resolv.conf $drblroot/etc/resolv.conf
  cat >> $drblroot/etc/resolv.conf << EOF
domain $domain
search $domain
EOF

  cat > $drblroot/etc/hostname << EOF
$master
EOF

  cat > $drblroot/etc/network/interfaces << EOF
auto lo
iface lo inet loopback
EOF

  ln -fs /proc/mounts $drblroot/usr/lib/diskless-image/template/etc/mtab

  cat <<-EOF > $drblroot/etc/defaultdomain
drbl
EOF

  # rm syslog, ksyslog services
  mv $drblroot/etc/rc2.d/S10sysklogd $drblroot/etc/rc2.d/K10sysklogd
  mv $drblroot/etc/rc2.d/S11klogd $drblroot/etc/rc2.d/K11klogd
  mv $drblroot/etc/rc5.d/S10sysklogd $drblroot/etc/rc2.d/K10sysklogd
  mv $drblroot/etc/rc5.d/S11klogd $drblroot/etc/rc2.d/K11klogd

  # modutils
  mkdir -p $drblroot/etc/kernel
  mv $drblroot/lib/modules/$kernel_version/modules.* $drblroot/etc/kernel/
  for file in `ls $drblroot/etc/kernel/ | grep "modules"`
  do
    echo "ln -fs /etc/kernel/$file /lib/modules/$kernel_version/$file" >> $drblroot/etc/kernel/modutils.sh
  done
  chmod 755 $drblroot/etc/kernel/modutils.sh
  mount -t proc proc $drblroot/proc
  chroot $drblroot /etc/kernel/modutils.sh
  umount $drblroot/proc
  rm -rf $drblroot/etc/kernel/modules.sh

  # drblpush-desktop
  export GPL=0; /opt/drbl/sbin/drblpush-desktop
  /opt/drbl/sbin/drbl_deploy.sh
  # drbl-useradd
  nhosts=0
  for dir in `ls /tftpboot/drbl`
  do
    if [ "$dir" != "." -a "$dir" != ".." -a "$dir" != "root" ]; then
      nhosts=`expr $nhosts + 1`
    fi
  done
  if [ $nhosts -lt 10 ]; then nhosts="00$nhosts";
  elif [ $nhosts -lt 100 ]; then nhosts="0$nhosts";
  fi
  /opt/drbl/bin/drbl-useradd --range demo 1 $nhosts

  cp /root/networking /etc/init.d

  rm -rf /tmp/*
fi
