#!/usr/bin/perl -X
#
# Copyright (C) 2002-2003 by NCHC, Steven Shiau, K. L. Huang
# (steven@nchc.org.tw, c00hkl00@nchc.org.tw)
#
# 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; either version 2, or (at your option)
# any later version.
#
# 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.
#
# script to prepare some files for DRBL server
# Written by Steven Shiau < steven@nchc.org.tw > 2003/1/14
# 1. kernel, specially made for DRBL
# 2. mkinitrd-net, modified from mkinitrd-net of Mandrake 9.0
#

# Setting
our $drbl_url_zh_TW="http://drbl.nchc.org.tw";
our $drbl_url_en_US="http://drbl.sf.net";
our $drbl_setup_path="/opt/drbl/setup";

# use some perl modules
use Term::ANSIColor;

# main program

# help message, short and more details.
my $usage="Usage: $0 [-h|--help] [-r|--reinstall]  [-i|--install] [-u|--uninstall] [-l|--language] [-w|--website]";

sub usage_details{
    die "$usage\n".
        "-h, --help        This help message".
        "-r, --reinstall   Reinstall all the packages which DRBL installed".
        "-i, --install     Setup the DRBL server by installing and upgrading packages".
        "-u, --uninstall   Uninstall all the packages which DRBL installed".
        "-l, --language    Set the language to be shown - ".
        "                  [0]: English, [1]: Chinese Traditional (Big5) - Taiwan, [2] Chinese Traditional (UTF-8, Unicode) - Taiwan".
        "-w, --website     Browse the NCHC DRBL website";
} # end of usage_details

# must have argument
die "$usage\n" if $#ARGV<0;

# Parse command-line options
while ($#ARGV != -1) {
   my $arg;
   $arg = shift(@ARGV);
   if (lc($arg) =~ /^(-)?(-)?l(anguage)?$/) {
     $lang_opt = shift(@ARGV);
   } elsif (lc($arg) =~ /^(-)?(-)?u(uninstall)?$/) {
     $action="uninstall";
   } elsif (lc($arg) =~ /^(-)?(-)?i(nstall)?$/) {
     $action="install";
   } elsif (lc($arg) =~ /^(-)?(-)?r(einstall)?$/) {
     $action="reinstall";
   } else {
     usage_details();
   }
}

# if no action, quit
if ("$action" eq "") { usage_details(); }

# get the language
$language=lang_set($lang_opt);
require "$drbl_setup_path/lang/perl/$language";

if ("$action" eq "uninstall") {
	# check if drbl server package is installed or not
	print  "$lang_deploy{\"analyzing_rpm_info\"}\n";
        my $drbl = system("ls /tftpboot/nbi_img/kernel_version_in_initrd.txt > /dev/null");
	if ($drbl eq 256) {
		die "$lang_deploy{\"no_drbl_server_package\"}\n" ;
		exit(1);
	}else{
               my $apt = system("rpm -qa | grep ^apt- > /dev/null");
 	       if ($apt eq 256) {
			die "$lang_deploy{\"apt_pkg_not_installed\"}\n" ;
			exit(1);
	       }else{
			my $message = "uninstall";
			uninstall_drbl($language);
			do_it($message);
			exit(0);	
        	}
        }
} elsif ("$action" eq "install") {
	my $message = "$lang_deploy{\"install_and_upgrade\"}";
	setup_drbl($language);
	do_it($message);
	exit(0);	
} elsif ("$action" eq  "reinstall") {
	# check if drbl server package is installed or not
        my $drbl = system("rpm -qa | grep kernel | grep drbl > /dev/null");
	if ($drbl eq 256) {
		die "$lang_deploy{\"no_drbl_server_package\"}\n" ;
		exit(1);
	}else{
               my $apt = system("rpm -qa | grep ^apt- > /dev/null");
 	       if ($apt eq 256) {
			die "$lang_deploy{\"apt_pkg_not_installed\"}\n" ;
			exit(1);
	       }else{
		        # uninstall
			my $message = "$lang_text{\"uninstall\"}";
			uninstall_drbl();
			do_it($message);

			# setup
			my $message = "$lang_deploy{\"install_and_upgrade\"}";
	                setup_drbl($language);
			do_it($message);
			exit(0);	
        	}
        }
}

# functions
sub lang_set{
  my $lang_opt=$_[0];
  if ( "$lang_opt" eq "" ){
    # l10n
    print "Language | y| 語言 ?\n".
          "[0]: English\n".
          "[1]: Chinese Traditional (Big5) - Taiwan |  (jX) - xW\n".
          "[2]: Chinese Traditional (UTF-8, Unicode) - Taiwan | 中文 (萬國標準碼) - 台灣\n".
          "[0] ";
    chomp($language=<STDIN>);
  } else {
    $language=$lang_opt;
  }
  if ($language eq "1"){
    $language="tw.BIG5";
  } elsif ($language eq "2"){
    $language="tw.UTF-8";
  } else {
    $language="en";
  }
  return $language;
} # end of lang

sub do_it{
  $message=$_[0];
  print "$delimiter{\"star_line\"}\n".
        colored ("$lang_deploy{\"we_are_now_ready_to\"} $message $lang_deploy{\"the_files_for_DRBL_server\"}\n", 'red').
	"$lang_deploy{\"do_you_want_to_continue\"}\n".
	"$lang_deploy{\"say_no_to_quit_other_to_continue\"}\n".
	"[Y/n] ";
  chomp($line=<STDIN>);
  
  if ($line eq "n" || $line eq "N" || $line eq "no" || $line eq "NO") {
   print "$delimiter{\"exclamation_line\"}\n".
         "$lang_deploy{\"oh_quit_now\"}\n";
   unlink ($main_sh) if -f $main_sh;
   exit;
  } else {
   print "$delimiter{\"star_line\"}\n".
         "$lang_deploy{\"ok_let_do_it\"}\n";
   my $whoiam = `/usr/bin/id -nu`;
   chomp($whoiam);
   if ("$whoiam" eq "root") { 
       system("./$main_sh");
   }else{
       print colored("$lang_deploy{\"you_are_not_root\"},\n", 'red'). 
	     "$lang_word{\"please_enter\"} ". colored("$lang_word{\"root_passwd\"} ",'red') ."$lang_word{\"to_deploy_them\"}...\n"; 
       my $su_rlt=system("su -c ./$main_sh root");
       while ($su_rlt == 256) { 
              $su_rlt=system("su -c ./$main_sh root");
       }
   } 
   print "$delimiter{\"star_line\"}\n".
         "$lang_deploy{\"syncing_flush\"}\n"; 
   system("sync;sync;sync");
   unlink ($main_sh) if -f $main_sh;
   print "$delimiter{\"star_line\"}\n".
         "$lang_text{\"finish\"}!\n";
  }
} # end of do_it
	
sub uninstall_drbl{
  $lang=$_[0];
  $main_sh="drblsrv_uninstall.sh";
  # delete the old files
  unlink ($main_sh) if -f $main_sh;
  open(DRBLSRV_OUT,">$main_sh") or die "Can NOT write file \"$main_sh\" \n";
  
# we can not use q command in perl to pass the variable, so here we use this
  print DRBLSRV_OUT <<END_DRBLSRV_OUT;
#!/bin/sh
PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH
lang=$lang
drbl_setup_path=$drbl_setup_path

END_DRBLSRV_OUT

  print DRBLSRV_OUT q{

# get the l10n message
. $drbl_setup_path/lang/bash/$lang

#Setting
# note: check the setting in install script (sub setup_drbl) also.
# They must sync to each other.
cache_dir="/var/cache/apt/archives"
drbl_pkgdir="/opt/drbl/share/"

# Source function library.
. /etc/rc.d/init.d/functions

#
apt-get remove dhcp tftp-server nfs-utils ypserv ypbind yp-tools ntp
# remove devfsd, it will also remove kernel-drbl, but if only remove 
# kernel-drbl, apt will say not kernel-drbl... Strange, while 
# use "rpm -e kernel-drbl" will work ?
#apt-get remove devfsd
apt-get remove drbl-driver-.*

# now kernel is installed in /tftpboot/node_root directly. Comment the following:
## for Kernel, check it's being used or not
#kernel_in_use=`uname -r`
#kernel_pkg_in_use=`rpm -qf /boot/vmlinuz-${kernel_in_use}`
## ugly... but it works here...need to change ! To do!
## We want to changet the kernel pkg name used in rpm to that in apt, i.e.
## Ex: kernel-smp-2.4.20-20.9drbl -> kernel-smp#2.4.20-20.9drbl
#if echo $kernel_pkg_in_use | grep -q "kernel-smp-[0-9]"; then
#   kernel_pkg_in_use=`echo $kernel_pkg_in_use | sed -e "s/kernel-smp-/kernel-smp#/"`
#elif echo $kernel_pkg_in_use | grep -q "kernel-[0-9]"; then
#   kernel_pkg_in_use=`echo $kernel_pkg_in_use | sed -e "s/kernel-/kernel#/"`
#fi
#
#if apt-get remove --simulate -q=2 kernel.*#.*drbl | grep ${kernel_pkg_in_use}; then
#  [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
#  echo "$msg_delimiter_star_line"
#  echo "$msg_kernel_being_used: $kernel_in_use..."
#  echo "$msg_warning_not_to_remove"
#  echo "$msg_not_remove"
#  echo "$msg_delimiter_star_line"
#  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
#fi
#apt-get remove kernel.*#.*drbl

# skip removing dialog, rsync... which are usually necessary.
apt-get remove etherboot drbl-gdm syslinux partimage drbl-script socket memtest86+ freedos clonezilla rh-.*-netinstall mdk-.*-netinstall woody-netinstall
[ -f /etc/yp.conf ] && mv -v /etc/yp.conf /etc/yp.conf.drblsave
[ -f /etc/ypserv.conf ] && mv -v /etc/ypserv.conf /etc/ypserv.conf.drblsave
[ -f /var/yp/securenets ] && mv -v /var/yp/securenets /var/yp/securenets.drblsave
[ -f $drbl_pkgdir/dev.tgz ] && rm -f $drbl_pkgdir/dev.tgz
echo "$msg_remove_drbl_setup_question"
echo -n "[y/N] "
read drbl_setup_answer
case "$drbl_setup_answer" in 
   y|Y|[yY][eE][sS])
      rpm -e drbl-setup
   ;;
esac
echo "$msg_remove_apt_question"
echo -n "[y/N] "
read apt_answer
case "$apt_answer" in 
   y|Y|[yY][eE][sS])
      rpm -e apt
      [ -d /var/cache/apt/ ] && echo "$msg_cleaning_apt_cache" && rm -rf /var/cache/apt/
   ;;
esac

echo "$msg_delimiter_star_line"
echo "$msg_cleaning_tftpboot"
echo "$msg_delimiter_star_line"
rm -rf /tftpboot/* 

echo "$msg_Done!!!"

}; # end of print DRBLSRV_OUT

  close(DRBLSRV_OUT);
  system("chmod 700 $main_sh");

}# end of sub uninstall_drbl

sub setup_drbl{
  $lang=$_[0];
  $main_sh="drblsrv_deploy.sh";
  # delete the old files
  unlink ($main_sh) if -f $main_sh;
  open(DRBLSRV_OUT,">$main_sh") or die "Can NOT write file \"$main_sh\" \n";
  
  print DRBLSRV_OUT <<END_DRBLSRV_OUT;
#!/bin/sh
PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH
lang=$lang
drbl_setup_path=$drbl_setup_path

END_DRBLSRV_OUT

  print DRBLSRV_OUT q{

# get the l10n message
. $drbl_setup_path/lang/bash/$lang

#Setting
# note: check the setting in install script (sub uninstall_drbl) also.
# They must sync to each other.
DRBL_SCRIPT_PATH="/opt/drbl"
drblroot="/tftpboot/nodes"
cache_dir="/var/cache/apt/archives"
drbl_pkgdir="/opt/drbl/share/"
pxelinux_file="/usr/lib/syslinux/pxelinux.0"
memdisk_file="/usr/lib/syslinux/memdisk"
fdos_img_src="/usr/lib/freedos/fdos1440.img"
fdos_img_output="fdos1440_drbl.img"
fdos_nbi_output="fdos1440_drbl.nbi"

# fixed setting
RH8_wget_rpm="wget-1.8.2-3.i386.rpm"
RH9_wget_rpm="wget-1.8.2-9.i386.rpm"
FC1_wget_rpm="wget-1.8.2-15.3.i386.rpm"
FC2_wget_rpm="wget-1.9.1-5.i386.rpm"


# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

# some userful functions
check_apt_install() {
  RETVAL=$1
  if [ "$RETVAL" -gt 0 ]; then 
    echo "$msg_failed_to_install_pkgs"
    echo "$msg_please $msg_browse $drbl_url_zh_TW $msg_or $drbl_url_en_US $msg_for_more_details. "
    echo "$msg_press_ctrl_c_stop"
    read
    exit 1 
  fi
}


# define a function get_inst_rpm to get and install rpm package which 
# apt can not process now. ie. only i386 rpms
get_inst_rpm() {
  # example: get_inst_rpm http://os.nchc.org.tw/... glibc --force
  url_tmp="$1"
  pkg="$2"
  opt="$3"
  pkg_tmp_dir=`mktemp -d -q /tmp/$pkg.XXXXXX || exit 1`
  # note! the last / in $url must be kept!!!
  wget -r -l1 --no-parent --passive-ftp -e robots=off -q -nd -P "$pkg_tmp_dir" -A "$pkg-[0-9].*.i386.rpm" $url_tmp/
  rc="$?"
  if [ $rc -gt 0 ]; then
     [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
     echo "$msg_Failed_to_get $pkg...$msg_program_stop"
     [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
     exit 1
  fi
  pkg_file=$(ls $pkg_tmp_dir/$pkg-[0-9].*.i386.rpm)
  if [ "$pkg_file" != "" ]; then
    rpm -Uvh $opt $pkg_file
    RETVAL=$?
    if [ "$RETVAL" -gt 0 ]; then 
       echo "$msg_Failed_to_install $pkg_file..."
       return $RETVAL
    fi
  else
    echo "XXXXXXX        XXXXXXX       XXXXXXX"
    echo "$msg_Failed_to_install \"$pkg\"!!!"
    echo "$msg_check_network_and_url $url"
    sleep 3
    echo "$msg_press_enter_to_continue"
    read 
    #exit 1
  fi
  if [ -d $pkg_tmp_dir ]; then
    rm -rf $pkg_tmp_dir
  fi
}

# create the shared library program runtime env.
create_depmod_env() {
  local newroot="$1"
  [ -z $newroot ] && exit 1
  cp --parents /sbin/depmod $newroot
  if ldd /sbin/depmod > /dev/null 2>&1; then
    depmod_lib_need=$(ldd /sbin/depmod | cut -d" " -f3)
    cp --parents $depmod_lib_need $newroot
  fi
}
clean_depmod_env() {
  local newroot="$1"
  [ -z $newroot ] && exit 1
  [ -f $newroot/sbin/depmod ] && rm -f $newroot/sbin/depmod
  if ldd /sbin/depmod > /dev/null 2>&1; then
    depmod_lib_need=$(ldd /sbin/depmod | cut -d" " -f3)
    for f2rm in `echo $depmod_lib_need`; do
      [ -f $newroot/$f2rm ] && rm -f $newroot/$f2rm
    done
  fi
}

# Setting
# 8.0:/etc/issue or /etc/redhat-release: Red Hat Linux release 8.0 (Psyche)
# 9.0:/etc/issue or /etc/redhat-release: Red Hat Linux release 9 (Shrike)
# FC1:/etc/fedora-release: Fedora Core release 1 (Yarrow)
# FC2:/etc/fedora-release: Fedora Core release 2 (Tettnang)
# $RH_Version will be the directory index for apt repository
echo "$msg_delimiter_star_line"
grep "Red Hat Linux release 8.0 (Psyche)" /etc/redhat-release 2>/dev/null && RH_Version="8.0"
grep "Red Hat Linux release 9 (Shrike)" /etc/redhat-release 2>/dev/null && RH_Version="9"
grep "Fedora Core release 1 (Yarrow)" /etc/fedora-release 2>/dev/null && RH_Version="FC1"
grep "Fedora Core release 2 (Tettnang)" /etc/fedora-release 2>/dev/null && RH_Version="FC2"
echo "$msg_delimiter_star_line"
if [ -z "$RH_Version" ]; then
  echo "$msg_not_determine_OS"
  echo "$msg_enter_OS_ver"
  read RH_Version
  case "$RH_Version" in
  8|8.0|9|9.0)
              echo "$msg_OS_version: $RH_Version."
              ;;
  "fc1"|"FC1"|"Fedora Core 1"|"fc2"|"FC2"|"Fedora Core 2")
              echo "$msg_OS_version: $RH_Version."
              ;;
  *)
              echo "$RH_Version $msg_is_not_supported"
	      echo "$msg_press_ctrl_c_stop!"
	      read
	      exit 1 
  esac
fi

case "$RH_Version" in
   8|8.0|9|9.0)
            # set the official release number...
	    case "$RH_Version" in 
               8|8.0)
                    RH_Version="8.0" 
	            ;;
	       9|9.0)
                    RH_Version="9" 
	            ;;
            esac
            echo "$msg_OS_version: $RH_Version"
            #http://opensource.nchc.org.tw/redhat/apt/ redhat/9/i386/ os updates drbl... -> $url_prefix/$apt_dir $apt_list $core_dir
	    # core_dir is for the core program, for RH8 and 9, RPMS.os, set it as "os"
            apt_dir="redhat/apt/"
	    # note!!! Do NOT append "/" in the end of $apt_list
	    apt_list="redhat/$RH_Version/i386"
	    core_dir="os"
	    # RPMS_apt_dir indicates in apt repository, 
	    # where RPMS.${RPMS_apt_dir} exist,
	    # Ex.: RPMS.os, RPMS.updates, RPMS.drbl, RPMS.drbl-test
	    RPMS_apt_dir="$core_dir updates drbl drbl-test"

	    # RHL_prefix is for rh-netinstall, as a nbi prefix
	    #RHL_prefix="rh${RH_Version}"

            ;;
   "fc1"|"FC1"|"Fedora Core 1"|"fc2"|"FC2"|"Fedora Core 2")
	    case "$RH_Version" in 
                "fc1"|"FC1"|"Fedora Core 1")
		    FC_Ver="1"
		;;
                "fc2"|"FC2"|"Fedora Core 2")
		    FC_Ver="2"
	    esac
            echo "$msg_OS_version: $RH_Version"
            #http://opensource.nchc.org.tw/fedora/apt/ fedora/linux/1/i386/ core updates drbl... -> $url_prefix/$apt_dir $apt_list $core_dir
	    # core_dir is for the core program, for FC1, RPMS.core, set it as "core"
            apt_dir="fedora/apt/"
	    # note!!! Do NOT append "/" in the end of $apt_list
	    apt_list="fedora/linux/$FC_Ver/i386"
	    core_dir="core"
	    # RPMS_apt_dir indicates in apt repository, 
	    # where RPMS.${RPMS_apt_dir} exist,
	    # Ex.: RPMS.os, RPMS.updates, RPMS.drbl, RPMS.drbl-test
	    RPMS_apt_dir="$core_dir updates drbl drbl-test"

	    # RHL_prefix is for rh-netinstall, as a nbi prefix
	    #RHL_prefix="FC1"

            ;;
   *)
            echo "$RH_Version $msg_is_not_supported"
	    echo "$msg_press_ctrl_c_stop!"
	    read
	    exit 1 
            
esac

# do it

# Not optimized for i686 for RPM packages, otherwise there will be some 
# troubles for some clients whose CPUs are different to server
# Now we forcus on the 586 CPU 
# By setting the rpmrc, so apt-get will not fetch i686 packages.
# Especially glibc & openssl

# 0.
echo "$msg_delimiter_star_line"
DOMAINNAME=`/bin/dnsdomainname`
if [ -n "$DOMAINNAME" ]; then
    DEFAULT_PROXY="proxy.$DOMAINNAME"
fi
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_set_proxy"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[y/N] "
read proxy_answer
case "$proxy_answer" in
    [yY]|[yY])
      echo "$msg_http_proxy_server"
      echo -n "[$DEFAULT_PROXY] "
      read http_proxy_server_name
      echo "$msg_http_proxy_port"
      echo -n "[3128] "
      read http_proxy_server_port
      if [ -z  "$http_proxy_server_name" ]; then
          http_proxy_server_name="proxy.$DOMAINNAME"
      fi
      if [ -z  "$http_proxy_server_port" ]; then
          http_proxy_server_port="3128"
      fi

      # use the one use input for DEFAULT value. 
      echo "$msg_ftp_proxy_server"
      echo -n "[$http_proxy_server_name] "
      read ftp_proxy_server_name
      echo "$msg_ftp_proxy_port"
      echo -n "[$http_proxy_server_port] "
      read ftp_proxy_server_port
      if [ -z  "$ftp_proxy_server_name" ]; then
          ftp_proxy_server_name="$http_proxy_server_name"
      fi
      if [ -z  "$ftp_proxy_server_port" ]; then
          ftp_proxy_server_port="$http_proxy_server_port"
      fi

      echo "$msg_delimiter_star_line"
      echo "$msg_http_proxy_you_set: http://$http_proxy_server_name:$http_proxy_server_port"
      echo "$msg_ftp_proxy_you_set:  http://$ftp_proxy_server_name:$ftp_proxy_server_port"
      echo "$msg_delimiter_star_line"

      export http_proxy=http://$http_proxy_server_name:$http_proxy_server_port
      export ftp_proxy=ftp://$ftp_proxy_server_name:$ftp_proxy_server_port
      ;;
    *)
esac

# 1.
echo "$msg_delimiter_star_line"
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_which_apt_repository"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_apt_repository_0"
echo "$msg_apt_repository_1"
echo "$msg_apt_repository_2"
echo "$msg_apt_repository_3"
echo "$msg_apt_repository_4"
echo "$msg_apt_repository_5"
echo -n "[0] "
read apt_freshrpms_answer
echo "$msg_delimiter_star_line"

# url is where the RPMS.os, RPMS.update, RPMS.drbl... exist
# try to get url first, we need url for get wget and apt
case "$apt_freshrpms_answer" in
    1)
      # drbl.sourceforge.net and freshrpms
      url_prefix="http://drbl.sourceforge.net/"
      url="$url_prefix/$apt_dir/$apt_list/"
      ;;
    3)
      # both opensource.nchc.org.tw and freshrpms
      echo -n "Please enter the path of your local apt repository where directory RPMS.$core_dir, RPMS.drbl... exist. [/opt/apt/RedHat/apt] "
      read url
      # set the default url for local apt repository as /opt/apt/RedHat/apt
      if [ -z "$url" ]; then
	url="/opt/apt/RedHat/apt"
      fi
      while [ ! -d "$url/RPMS.drbl" ] && [ ! -d "$url/RPMS.$core_dir" ]; do
	echo "The path your entered does NOT have RPMS.$core_dir or RPMS.drbl!" 
	echo "Please enter it again!"
        read url
      done
      ;;
    4)
      #local httpd
      url_prefix="http://localhost/"
      url="$url_prefix/$apt_dir/$apt_list/"
      # todofc1, change url for FC1
      if [ ! -d /var/www/html/$apt_dir/$apt_list/base ]; then
         echo "XXXXXXX        XXXXXXX       XXXXXXX"
	 echo "The Redhat apt repository is not in the local directory /var/www/html/apt/, we can NOT go on!"
	 echo "$msg_press_ctrl_c_stop"
	 read
         exit 1
      fi

      # make sure if apache service is runing by restarting it
      echo "Make sure if apache service is runing by restarting it..."
      serv_st="httpd"
      if [ -f /var/lock/subsys/$serv_st ] ; then
        # service is running
        #echo "Restart $serv_st ..."
        RETVAL=0
        /etc/init.d/$serv_st restart
        RETVAL=$?
        if [ "$RETVAL" -gt 0 ]; then
             echo "XXXXXXX        XXXXXXX       XXXXXXX"
             echo "Failed to restart service $serv_st !!!"
	     echo "$msg_press_ctrl_c_stop"
	     read
             exit $RETVAL
        fi
      else
        # service is stopped
        #echo "Start $serv_st ..."
        RETVAL=0
        /etc/init.d/$serv_st start
        RETVAL=$?
        if [ "$RETVAL" -gt 0 ]; then
             echo "XXXXXXX        XXXXXXX       XXXXXXX"
             echo "Failed to start service $serv_st !!!"
	     echo "$msg_press_ctrl_c_stop"
	     read
             exit $RETVAL
        fi
      fi 
      ;;

    5)
      #enter by user
      echo "Please enter the hostname or IP address of apt reposity with http or ftp prefix..."
      echo -n "[http://drbl.sourceforge.net] "
      read url_prefix
      # set the default url for local apt repository as drbl.sourceforge.net
      if [ -z "$url_prefix" ]; then
	url_prefix="http://drbl.sourceforge.net"
      fi
      echo "Enter the path where RPMS.$core_dir and RPMS.drbl exist..." 
      echo -n "[DRBLCD/RedHat/apt] "
      read apt_path
      # apt_path actually is $apt_dir/$apt_list/, 
      # but we want user to answer just one question
      # set the default url for local apt repository as drbl.sourceforge.net
      if [ -z "$apt_path" ]; then
	apt_path="DRBLCD/RedHat/apt"
      fi
      # url is for downloading "apt" rpm, 
      # while we use $url_prefix and $apt_path in sources.list
      url="$url_prefix"/"$apt_path"
      echo "------------------------------------------------------"
      echo "$msg_input_apt_url_path: $url_prefix, $apt_path"
      echo "------------------------------------------------------"
      ;;

    *)
      # default one, use opensource.nchc.org.tw
      url_prefix="http://opensource.nchc.org.tw/"
      url="$url_prefix/$apt_dir/$apt_list/"

esac

[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_drbl_test_option"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[y/N] "
read drbl_test_answer
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_firefly_option"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[y/N] "
read cjk_answer
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_serial_console_option"
echo "$msg_know_nothing_serial_console"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[y/N] "
read console_output_answer
case "$console_output_answer" in
    [yY]|[yY])
      echo "$msg_serial_console_only"
      echo -n "[y/N] "
      read serial_console_only
      echo "$msg_redirect_to_which_port"
      echo "Enter \"1\" for COM1, \"2\" for COM2, \"3\" for COM3, \"4\" for COM4,"
      echo -n "[1] "
      read console_port
      echo "$msg_serial_console_speed"
      echo "$msg_text_Enter \"1\" for 9600, \"2\" for 19200, \"3\" for 38400."
      echo -n "[3] "
      read console_port_speed
      ;;
    *)
esac
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_smp_clients_RH"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[y/N] "
read SMP_answer
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_drbl_driver"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[Y/n] "
read driver_answer

# check if apt is installed or not
rpm -q apt &>/dev/null
if [ "$?" -gt 0 ]; then 
   echo "$msg_install_apt"
   rpm -q wget &>/dev/null
   if [ "$?" -gt 0 ]; then 
      echo "$msg_no_wget_get_it"
      case $RH_Version in
      8.0)
        # This one only works for RH8
        rpm -ivh $url/RPMS.$core_dir/$RH8_wget_rpm
        ;;
      9)
        # This one only works for RH9
        rpm -ivh $url/RPMS.$core_dir/$RH9_wget_rpm
        ;;
      "fc1"|"FC1"|"Fedora Core 1")
        # This one only works for FC1
        rpm -ivh $url/RPMS.$core_dir/$FC1_wget_rpm
        ;;
      "fc2"|"FC2"|"Fedora Core 2")
        # This one only works for FC2
        rpm -ivh $url/RPMS.$core_dir/$FC2_wget_rpm
      esac
   fi
   case "$apt_freshrpms_answer" in
   # if local apt repository, do do not use url in the network 
   3)
     # local apt repository
     rpm -Uvh $url/RPMS.drbl/apt-[0-9]*.i386.rpm
     RETVAL=$?
     if [ "$RETVAL" -gt 0 ]; then 
        echo "$msg_Failed_to_install $pkg_file..."
        return $RETVAL
     fi
     ;;
   *)
     get_inst_rpm $url/RPMS.drbl apt   
   esac
else
   echo "$msg_delimiter_star_line"
   echo "$msg_apt_already_installed"
   echo "$msg_delimiter_star_line"
fi
# Clean the "Architecture "i[356]86"; "in apt.conf first,
# later we will insert Architecture "i386" to /etc/apt/apt.conf here,
perl -p -i -e "s/Architecture *\"i[356]86\".*;//g" /etc/apt/apt.conf

case "$SMP_answer" in
 [yY]|[yY][eE][Ss])
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_delimiter_star_line"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   echo "$msg_smp_optimization_kernel"
   apt_archi_default="2"
   echo "$msg_press_enter_to_continue"
   read 
   ;;
 *)
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_delimiter_star_line"
   echo "$msg_apt_optimization_question"
   echo "$msg_optimization_level_0"
   echo "$msg_optimization_level_1"
   echo "$msg_optimization_level_2"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
   echo "$msg_N_note"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_note!!! $msg_different_level_machine_prompt"
   echo "$msg_diff_arch_explain"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   echo "$msg_not_sure_better_1"
   echo -n "[1] "
   read apt_archi_default
   echo "$msg_delimiter_star_line"
esac
# check if the answer fits to the distribution
# for RH8/9, FC1 -> i386, i586, i686 are available
# for FC2 -> i586, i686 are available, i386 is not available
if [ "$apt_archi_default" = "0" ]; then
  case "$RH_Version" in
  "fc2"|"FC2"|"Fedora Core 2")
        [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
        echo "$msg_change_opt_from_i386_to_i586"
        [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
        apt_archi_default="1"
        ;;
  esac
fi
# 
case "$apt_archi_default" in
 2)
   # use default, let apt-rpm decide, so we do not have to change anything in
   # /etc/apt/apt.conf
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_same_optimization"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   ;;
 0)
   # for i386... this is not available for FC2...
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_no_optimization"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   perl -p -i -e "s/^.*Install-Options.*\"\".*;/    Install-Options \"\"; Architecture \"i386\";/" /etc/apt/apt.conf
   ;;
 *)
   # for apt to use upto i586, the change will be in /etc/apt/apt.conf
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_i586_optimization"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   perl -p -i -e "s/^.*Install-Options.*\"\".*;/    Install-Options \"\"; Architecture \"i586\";/" /etc/apt/apt.conf
   ;;
esac

echo "$msg_delimiter_star_line"
if [ -f /etc/apt/sources.list ]; then
  echo "$msg_backup_apt_sources"
  mv -v /etc/apt/sources.list /etc/apt/sources.list.orig
fi

# It's important to remove the cache of apt, otherwise 
# the RPM::Architecture will not take effect. check this:
# http://distro2.conectiva.com.br/pipermail/apt-rpm/2003-November/002015.html
# ... RPM::Architecture, is what he's looking for. His problem was that the cache was built before he set the architecture. Doing "rm -f /var/cache/apt/*.bin; apt-get update" would make it work.

if [ "$(ls /var/cache/apt/*.bin 2> /dev/null)" != "" ]; then
   echo "$msg_clean_apt_cache_RH"
   rm -f /var/cache/apt/*.bin
fi

case "$drbl_test_answer" in
    [yY]|[yY][eE][Ss])
      DRBL_TEST="drbl-test"
      ;;
    *)
      DRBL_TEST=""
esac
case "$cjk_answer" in
    [yY]|[yY][eE][Ss])
      CJK_REPOSITORY="firefly"
      ;;
    *)
      CJK_REPOSITORY=""
esac
case "$console_output_answer" in
    [yY]|[yY][eE][Ss])
      case "$console_port" in
          2)
            PXE_CONSOLE_PORT="1"
            CONSOLE_PORT="ttyS1"
            ;;
          3)
            PXE_CONSOLE_PORT="2"
            CONSOLE_PORT="ttyS2"
            ;;
          4)
            PXE_CONSOLE_PORT="3"
            CONSOLE_PORT="ttyS3"
            ;;
          *)
            PXE_CONSOLE_PORT="0"
            CONSOLE_PORT="ttyS0"
      esac
      case "$console_port_speed" in
          1)
            CONSOLE_PORT_SPEED="9600"
            ;;
          2)
            CONSOLE_PORT_SPEED="19200"
            ;;
          *)
            CONSOLE_PORT_SPEED="38400"
      esac
      case "$serial_console_only" in
      [yY]|[yY][eE][Ss])
        # note! The latter console will dominate the whole boot message
        CONSOLE_OUTPUT="console=tty0 console=$CONSOLE_PORT,"$CONSOLE_PORT_SPEED"n81"
	;;
      *)
        CONSOLE_OUTPUT="console=$CONSOLE_PORT,"$CONSOLE_PORT_SPEED"n81 console=tty0 "
      esac
      PXE_SERIAL_OUTPUT="serial $PXE_CONSOLE_PORT $CONSOLE_PORT_SPEED"
      echo "------------------------------------------------------"
      echo "$msg_serial_console_parameter: $CONSOLE_OUTPUT"
      echo "------------------------------------------------------"
      ;;
    *)
      CONSOLE_OUTPUT=""
      PXE_SERIAL_OUTPUT=""
esac
case "$SMP_answer" in
    [yY]|[yY][eE][Ss])
      SMP_OPTION="-smp"
      ;;
    *)
      SMP_OPTION=""
esac

case "$apt_freshrpms_answer" in
    1)
    # drbl.sourceforge.net and freshrpms
cat <<-APT_END > /etc/apt/sources.list
# For DRBL in drbl.sourcefor.net, only RPMS.drbl, RPMS.drbl-test, RPMS.firefly
rpm $url_prefix/$apt_dir $apt_list drbl $DRBL_TEST $CJK_REPOSITORY
rpm-src $url_prefix/$apt_dir $apt_list  drbl $DRBL_TEST $CJK_REPOSITORY
rpm http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
rpm-src http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
# Examples:
# DRBL for RH9 in drbl.sourceforge.net, only DRBL packages, no RH9 packages
#rpm http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test

# DRBL for FC1 in drbl.sourceforge.net, only DRBL packages, no FC1 packages
#rpm http://drbl.sourceforge.net/fedora/apt/ fedora/linux/1/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net//fedora/apt/ fedora/linux/1/i386 drbl drbl-test

# DRBL for RH9 in opensource.nchc.org.tw, including DRBL packages and RH9 pacakges
#rpm http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl
#rpm-src http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl

# DRBL for FC1 in linux.nchc.org.tw, including DRBL packages and FC1 pacakges
#rpm http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  
#rpm-src http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  

### Dag Apt Repository for Red Hat Fedora Core 1 (rhfc1)
#rpm http://apt.sw.be redhat/fc1/en/i386 dag

### Dag Apt Repository for Red Hat 9 (rh90)
#rpm http://apt.sw.be redhat/9/en/i386 dag

### Dag Apt Repository for Red Hat 8.0 (rh80)
#rpm http://apt.sw.be redhat/8.0/en/i386 dag


APT_END

    ;;

    2)
    # both opensource.nchc.org.tw and freshrpms
cat <<-APT_END > /etc/apt/sources.list
rpm $url_prefix/$apt_dir $apt_list $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
rpm-src $url_prefix/$apt_dir $apt_list $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
rpm http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
rpm-src http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
# Examples:
# DRBL for RH9 in drbl.sourceforge.net, only DRBL packages, no RH9 packages
#rpm http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test

# DRBL for FC1 in drbl.sourceforge.net, only DRBL packages, no FC1 packages
#rpm http://drbl.sourceforge.net/fedora/apt/ fedora/linux/1/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net//fedora/apt/ fedora/linux/1/i386 drbl drbl-test

# DRBL for RH9 in opensource.nchc.org.tw, including DRBL packages and RH9 pacakges
#rpm http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl
#rpm-src http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl

# DRBL for FC1 in linux.nchc.org.tw, including DRBL packages and FC1 pacakges
#rpm http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  
#rpm-src http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  

### Dag Apt Repository for Red Hat Fedora Core 1 (rhfc1)
#rpm http://apt.sw.be redhat/fc1/en/i386 dag

### Dag Apt Repository for Red Hat 9 (rh90)
#rpm http://apt.sw.be redhat/9/en/i386 dag

### Dag Apt Repository for Red Hat 8.0 (rh80)
#rpm http://apt.sw.be redhat/8.0/en/i386 dag


APT_END
    ;;

    3) 
      #local harddisk dir
cat <<-APT_END > /etc/apt/sources.list
rpm copy:$url . $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
#rpm-src copy:$url . $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
#rpm http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
#rpm-src http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
# Examples:
# DRBL for RH9 in drbl.sourceforge.net, only DRBL packages, no RH9 packages
#rpm http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test

# DRBL for FC1 in drbl.sourceforge.net, only DRBL packages, no FC1 packages
#rpm http://drbl.sourceforge.net/fedora/apt/ fedora/linux/1/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net//fedora/apt/ fedora/linux/1/i386 drbl drbl-test

# DRBL for RH9 in opensource.nchc.org.tw, including DRBL packages and RH9 pacakges
#rpm http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl
#rpm-src http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl

# DRBL for FC1 in linux.nchc.org.tw, including DRBL packages and FC1 pacakges
#rpm http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  
#rpm-src http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  

### Dag Apt Repository for Red Hat Fedora Core 1 (rhfc1)
#rpm http://apt.sw.be redhat/fc1/en/i386 dag

### Dag Apt Repository for Red Hat 9 (rh90)
#rpm http://apt.sw.be redhat/9/en/i386 dag

### Dag Apt Repository for Red Hat 8.0 (rh80)
#rpm http://apt.sw.be redhat/8.0/en/i386 dag


APT_END
    ;;

    4) 
      #local httpd
cat <<-APT_END > /etc/apt/sources.list
rpm $url_prefix/$apt_dir $apt_list $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
rpm-src $url_prefix/$apt_dir $apt_list $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
#rpm http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
#rpm-src http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
# Examples:
# DRBL for RH9 in drbl.sourceforge.net, only DRBL packages, no RH9 packages
#rpm http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test

# DRBL for FC1 in drbl.sourceforge.net, only DRBL packages, no FC1 packages
#rpm http://drbl.sourceforge.net/fedora/apt/ fedora/linux/1/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net//fedora/apt/ fedora/linux/1/i386 drbl drbl-test

# DRBL for RH9 in opensource.nchc.org.tw, including DRBL packages and RH9 pacakges
#rpm http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl
#rpm-src http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl

# DRBL for FC1 in linux.nchc.org.tw, including DRBL packages and FC1 pacakges
#rpm http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  
#rpm-src http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  

### Dag Apt Repository for Red Hat Fedora Core 1 (rhfc1)
#rpm http://apt.sw.be redhat/fc1/en/i386 dag

### Dag Apt Repository for Red Hat 9 (rh90)
#rpm http://apt.sw.be redhat/9/en/i386 dag

### Dag Apt Repository for Red Hat 8.0 (rh80)
#rpm http://apt.sw.be redhat/8.0/en/i386 dag


APT_END

    ;;

    5) 
      #enter by user
cat <<-APT_END > /etc/apt/sources.list
rpm $url_prefix/ $apt_path $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
#rpm-src $url_prefix/ $apt_path $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
#rpm http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
#rpm-src http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
# Examples:
# DRBL for RH9 in drbl.sourceforge.net, only DRBL packages, no RH9 packages
#rpm http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test

# DRBL for FC1 in drbl.sourceforge.net, only DRBL packages, no FC1 packages
#rpm http://drbl.sourceforge.net/fedora/apt/ fedora/linux/1/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net//fedora/apt/ fedora/linux/1/i386 drbl drbl-test

# DRBL for RH9 in opensource.nchc.org.tw, including DRBL packages and RH9 pacakges
#rpm http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl
#rpm-src http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl

# DRBL for FC1 in linux.nchc.org.tw, including DRBL packages and FC1 pacakges
#rpm http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  
#rpm-src http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  

### Dag Apt Repository for Red Hat Fedora Core 1 (rhfc1)
#rpm http://apt.sw.be redhat/fc1/en/i386 dag

### Dag Apt Repository for Red Hat 9 (rh90)
#rpm http://apt.sw.be redhat/9/en/i386 dag

### Dag Apt Repository for Red Hat 8.0 (rh80)
#rpm http://apt.sw.be redhat/8.0/en/i386 dag


APT_END

    ;;
    *)
      # default one, use opensource.nchc.org.tw
cat <<-APT_END > /etc/apt/sources.list
rpm $url_prefix/$apt_dir $apt_list $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
rpm-src $url_prefix/$apt_dir $apt_list $core_dir updates drbl $DRBL_TEST $CJK_REPOSITORY
#rpm http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms
#rpm-src http://ayo.freshrpms.net $apt_list $core_dir updates freshrpms

# Examples:
# DRBL for RH9 in drbl.sourceforge.net, only DRBL packages, no RH9 packages
#rpm http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net/redhat/apt redhat/9/i386 drbl drbl-test

# DRBL for FC1 in drbl.sourceforge.net, only DRBL packages, no FC1 packages
#rpm http://drbl.sourceforge.net/fedora/apt/ fedora/linux/1/i386 drbl drbl-test
#rpm-src http://drbl.sourceforge.net//fedora/apt/ fedora/linux/1/i386 drbl drbl-test

# DRBL for RH9 in opensource.nchc.org.tw, including DRBL packages and RH9 pacakges
#rpm http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl
#rpm-src http://opensource.nchc.org.tw//redhat/apt/ redhat/9/i386 os updates drbl

# DRBL for FC1 in linux.nchc.org.tw, including DRBL packages and FC1 pacakges
#rpm http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  
#rpm-src http://opensource.nchc.org.tw//fedora/apt/ fedora/linux/1/i386 core updates drbl  

### Dag Apt Repository for Red Hat Fedora Core 1 (rhfc1)
#rpm http://apt.sw.be redhat/fc1/en/i386 dag

### Dag Apt Repository for Red Hat 9 (rh90)
#rpm http://apt.sw.be redhat/9/en/i386 dag

### Dag Apt Repository for Red Hat 8.0 (rh80)
#rpm http://apt.sw.be redhat/8.0/en/i386 dag


APT_END

esac

# 2.

# clean apt cache *bin, just in case to make sure it does not exist.
# Remember to remove /var/cache/apt/*.bin before apt-get update, so that 
# some parameters (such as RPM::Architecture) effect.
if [ "$(ls /var/cache/apt/*.bin 2> /dev/null)" != "" ];then
  echo "$msg_clean_apt_cache"
  rm /var/cache/apt/*.bin
fi

apt-get update

# 3.
# We will upgrade RH first.
# Try to find if the i386 glibc and openssl are installed or not
# If they are installed, hold them not to be upgraded to i686
echo "$msg_delimiter_star_line"
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_upgrade_whole_system"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_delimiter_star_line"

#apt-get dist-upgrade
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_glibc_openssl_upgrade_question"
echo "$msg_glibc_openssl_keep"
echo "$msg_keep_glibc_upgrade_openssl"
echo "$msg_upgrade_glibc_keep_openssl"
echo "$msg_upgrade_glibc_openssl"
echo "$msg_warning_glibc_upgrade"
echo "$msg_upgrade_glibc_make_you_cry"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo -n "[0] "
read RH_upgrade_option
case "$RH_upgrade_option" in
  1)
     apt-get dist-upgrade -o RPM::Hold::="glibc"
     ;;
  2)
     apt-get dist-upgrade -o RPM::Hold::="openssl"
     ;;
  3)
     apt-get dist-upgrade
     ;;
  *)
     apt-get dist-upgrade -o RPM::Hold::="openssl" -o RPM::Hold::="glibc"
esac

# After the dist upgrade, check the ARCH for glibc, openssl
glibc_ARCH=""
glibc_VER=""
openssl_ARCH=""
openssl_VER=""
rpm -q --qf '%{ARCH}' glibc > /dev/null && glibc_ARCH=`rpm -q --qf '%{ARCH}' glibc`
rpm -q --qf '%{ARCH}' openssl > /dev/null && openssl_ARCH=`rpm -q --qf '%{ARCH}' openssl`
rpm -q --qf '%{VERSION}' glibc > /dev/null && glibc_VER=`rpm -q --qf '%{VERSION}' glibc`
rpm -q --qf '%{VERSION}' openssl > /dev/null && openssl_VER=`rpm -q --qf '%{VERSION}' openssl`

#if [ $glibc_ARCH = "i386" ] && [ $openssl_ARCH = "i386" ]; then 
#  apt-get dist-upgrade -o RPM::Hold::="openssl" -o RPM::Hold::="glibc"
#else
#  apt-get dist-upgrade
#fi
# After contacting Gustavo Niemeyer <niemeyer@conectiva.com>, 
# new function in apt 0.5.5cnc3, check:http://moin.conectiva.com.br/AptRpm
# * mplemented RPM architecture setting. Packages "above" the given architecture will be considered invalid for the current machine. For example, if RPM::Architecture is set to "i386" in an i686 machine, only i386 and noarch packages will be considered valid. 

# apt-get dist-upgrade -o RPM::Architecture::="i386"

# 4.
# Install the necessary packages for DRBL 
echo "$msg_delimiter_star_line"
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_install_DRBL_necesary_files"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
echo "$msg_delimiter_star_line"
echo "$msg_install_dhcp_tftp_etc"
# Tune!
# Bugs fix for nfs-util, otherwise these is a bug about nfs over root 
# related links:
# http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=76065
# if not, you will see a lot of 
# "kernel: lockd: rejected NSM callback from 7f000001:1027" in the console and
# /var/log/messages
# if upgrade first time, it's better to reboot

apt-get -y install dhcp tftp-server nfs-utils ypserv ypbind yp-tools mkinitrd ntp firstboot iptables
RETVAL=$?
check_apt_install $RETVAL

# 5.
echo "$msg_delimiter_star_line"
#apt_archi_i386=$(grep "[ *]*[^/][^/][ *]Architecture.*\"i386\";" /etc/apt/apt.conf)
#if [ "$apt_archi_i386" != "" ]; then
#	# already set as not optimization (i386), use i386 for apt
#	apt_archi_default="no"
#fi
grep -q "[ *]*[^/][^/][ *]Architecture.*\"i386\";" /etc/apt/apt.conf && apt_archi_set="i386"
grep -q "[ *]*[^/][^/][ *]Architecture.*\"i586\";" /etc/apt/apt.conf && apt_archi_set="i586"
if [ -z "$apt_archi_set" ]; then
  apt_archi_set="best_optimization"
fi
case "$apt_archi_set" in
    best_optimization)
      [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
      echo "$msg_optimization_is_on"
      [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
      ;;
    *)
    # for i586 and i386, we force to use i386 version: glibc and openssl
      [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
      echo "$msg_optimization_is_off"
      [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
      if [ $glibc_ARCH != "i386" ]; then 
       installed_glibc=`rpm -qa |grep glibc-[0-9]`
       [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
       echo "$msg_install_i386_of $installed_glibc..."
       echo "$msg_searching_glibc_in_apt $RPMS_apt_dir..."
       [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
       case "$apt_freshrpms_answer" in
       # if local apt repository, do do not use url in the network 
       3)
         for irpm in `echo $RPMS_apt_dir`; do
          if [ -f "$url/RPMS.${irpm}/${installed_glibc}.i386.rpm" ]; then
           rpm -Uvh --force $url/RPMS.${irpm}/${installed_glibc}.i386.rpm
           RETVAL=$?
           break
          fi
         done
         ;;
       *)
         for irpm in `echo $RPMS_apt_dir`; do
         # search the glibc rpms in $RPMS_apt_dir
           glibc_tmp_dir=`mktemp -d -q /tmp/glibc.XXXXXX || exit 1`
           wget --quiet -P "$glibc_tmp_dir" $url/RPMS.${irpm}/${installed_glibc}.i386.rpm 
           RETVAL=$?
           if [ $RETVAL -eq 0 ]; then
             rpm -Uvh --force $glibc_tmp_dir/${installed_glibc}.i386.rpm
             [ -d $glibc_tmp_dir ] && rm -rf $glibc_tmp_dir
             break
           fi
           [ -d $glibc_tmp_dir ] && rm -rf $glibc_tmp_dir
         done
       esac
       # to mv the i686 lib which should not exists in i386 glibc packags
       # if they are not cleaned.
       lib_bk="/lib/i686 /lib/tls /usr/lib/i686"
       for bak in $lib_bk; do
         if [ -d "$bak" ]; then
           mv -f $bak $bak.bak
         fi
       done
      fi
      if [ $openssl_ARCH != "i386" ]; then 
       installed_openssl=`rpm -qa |grep openssl-[0-9]`
       [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
       echo "$msg_install_i386_of $installed_openssl..."
       echo "$msg_searching_openssl_in_apt $RPMS_apt_dir..."
       [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
       case "$apt_freshrpms_answer" in
       # if local apt repository, do do not use url in the network 
       3)
         for irpm in `echo $RPMS_apt_dir`; do
          if [ -f "$url/RPMS.${irpm}/${installed_openssl}.i386.rpm" ]; then
           rpm -Uvh --force $url/RPMS.${irpm}/${installed_openssl}.i386.rpm
           RETVAL=$?
           break
          fi
         done
         ;;
       *)
         for irpm in `echo $RPMS_apt_dir`; do
         # search the openssl rpms in $RPMS_apt_dir
           openssl_tmp_dir=`mktemp -d -q /tmp/openssl.XXXXXX || exit 1`
           wget --quiet -P "$openssl_tmp_dir" $url/RPMS.${irpm}/${installed_openssl}.i386.rpm 
           RETVAL=$?
           if [ $RETVAL -eq 0 ]; then
             rpm -Uvh --force $openssl_tmp_dir/${installed_openssl}.i386.rpm
             [ -d $openssl_tmp_dir ] && rm -rf $openssl_tmp_dir
             break
           fi
           [ -d $openssl_tmp_dir ] && rm -rf $openssl_tmp_dir
         done
       esac
      fi
esac

# 6.
echo "$msg_delimiter_star_line"
# Force to install all the kernel selected.
# Ref:
# http://distro.conectiva.com.br/pipermail/apt-rpm/2003-December/002119.html
echo "$msg_search_kernel_in_apt kernel${SMP_OPTION} ..."
# The search in apt repository includes vanilla kernel and drbl kernel...
# if both found, drbl kernel will be used first 
# i.e. sort -g -r will make kernel-xxxdrbl be the choosen one.
# note: apt-cache pkgnames does not support regular expression...
drbl_kernel_in_rep=`apt-cache pkgnames kernel${SMP_OPTION}# |sort -rdn -t - -k 2,2`
# we have to compare the last tag, like 2.4.20-8, 2.4.20-31.9
# using -rnd -t - -k 2,2 just sort the 8 or 31.9, this results in 31.9. not 8.
latest_drbl_kernel_in_rep=`echo $drbl_kernel_in_rep | cut -d" " -f1`
# latest_drbl_kernel_in_rep looks like: kernel#2.4.22-1.2199.nptl
if [ -z "$latest_drbl_kernel_in_rep" ]; then
   [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
   echo "$msg_error_no_drbl_kernel_in_apt"
   echo "$msg_program_stop"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   exit 1
fi
echo "$msg_latest_kernel_in_apt $latest_drbl_kernel_in_rep"
drbl_kernel_ver=`echo $latest_drbl_kernel_in_rep | sed -e s/kernel${SMP_OPTION}#//g`
# drbl_kernel_ver looks like: 2.4.22-1.2199.nptl

# Install kernel
# Create the necessary dirctories, UGLY...
# the /tftpboot/node_root/tmp/boot is for link only, refer to the /tftpboot/node_root/etc/rc.d/rc.sysinit, the code "# For DRBL, create the directory /tmp/boot, so that the link /tmp/boot /boot...
mkdir -p /tftpboot/node_root/tmp/boot/ /tftpboot/node_root/var/lib/ /tftpboot/nodes 
(cd /tftpboot/node_root; ln -fs tmp/boot boot)

if [ ! -d "/tftpboot/node_root/lib/modules/$drbl_kernel_ver" -a ! -f "/tftpboot/node_root/lib/modules/$drbl_kernel_ver/modules.dep" ] ; then 
   # if we did find the installed kernel in common root, install the kernel and
   # create the modules.dep

   # sync the RPM db for the node_root, cheat apt-get... otherwise apt-get will
   # try to install a base system in /tftpboot/node_root, we do not need that.
   rsync -a /var/lib/rpm /tftpboot/node_root/var/lib/
   
   # install the kernel
   apt-get -y --reinstall -o RPM::RootDir="/tftpboot/node_root/" -o RPM::Install-Options::="--force" -o RPM::Install-Options::="--nodeps" -o RPM::Install-Options::="--noscripts" install $latest_drbl_kernel_in_rep
   # clean the rpm db to avoid confusing.
   [ -d "/tftpboot/node_root/var/lib/rpm/" ] && rm -rf /tftpboot/node_root/var/lib/rpm/
   
   # create modules.dep...
   if [ -e "/tftpboot/node_root/boot/System.map-$drbl_kernel_ver" ]; then
      create_depmod_env /tftpboot/node_root
      /usr/sbin/chroot /tftpboot/node_root/ depmod -ae -F /boot/System.map-$drbl_kernel_ver $drbl_kernel_ver
      clean_depmod_env /tftpboot/node_root
   else
      echo "Can not find /tftpboot/node_root/boot/System.map-$drbl_kernel_ver $drbl_kernel_ver! Program stop!!!"
      exit 1 
   fi
fi

# create the directory for diskless image
[ ! -d "/tftpboot/nbi_img" ] && mkdir -p /tftpboot/nbi_img

# 7.
# mkinitrd-net, modified from mkinitrd-net of Mandrake 9.0 by Steven Shiau

echo "$msg_delimiter_star_line"
echo "$msg_install_mkinitrd_net_etherboot"
# 8.
# 8.a
# ugly...in the future we can delete this one... this is due to to old version
# memtest86 and new memtest86+ conflicts...and can not be upgrade due to version
# number reset.
for ipackage in memtest86 rh-netinstall mdk-netinstall; do
   if rpm -q --quiet $ipackage; then
      echo -n "$msg_removing_the_old $ipackage..."
      rpm -e $ipackage
      echo "$msg_done!"
   fi
done

# ugly...might be not my fault...
# for some distribution some version, we have to force upgrading some packages.
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "For some distribution some version, we have to force upgrading some packages..."
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
case "$RH_Version" in
  8.0)
        # This one only works for RH8
        apt-get -y install redhat-config-xfree86
        ;;
  9)
        # This one only works for RH8
        apt-get -y install redhat-config-xfree86
        ;;
  "fc1"|"FC1"|"Fedora Core 1")
        # gpm is buggy, can not work with clonezilla, so upgrage to mine
	# in drbl repository
        echo "$msg_OS_version: $RH_Version."
	echo "Force to upgrade some packages if necessary..."
	apt-get -y install gpm redhat-config-xfree86
        ;;
  "fc2"|"FC2"|"Fedora Core 2")
        # FC2 use different name "system-config-display" instead of "redhat-config-xfree86"
        echo "$msg_OS_version: $RH_Version."
	echo "Force to upgrade some packages if necessary..."
	apt-get -y install system-config-display
        ;;
esac

#
apt-get -y install mkinitrd-net etherboot syslinux drbl-gdm partimage drbl-script socket memtest86+ freedos clonezilla  rh-.*-netinstall mdk-.*-netinstall dialog initscripts rsync parted reiserfs-utils tcpdump bc woody-netinstall
RETVAL=$?
check_apt_install $RETVAL
# 8.b
# Creat dev tarball in $drbl_pkgdir,
# which will be copied to /tftpboot/node_root/etc/diskless-image 
# in deploy script
tmp_dev_dir=`mktemp -d -q /tmp/devtmp.XXXXXX || exit 1`
[ ! -d $drbl_pkgdir ] && mkdir -p $drbl_pkgdir

echo "$msg_delimiter_star_line"
echo "$msg_creating_dev"
echo "$msg_get_dev"
apt-get -y --download-only --reinstall install dev MAKEDEV
RETVAL=$?
check_apt_install $RETVAL
(cd $tmp_dev_dir; rpm2cpio $cache_dir/dev_*_i386.rpm |cpio -idm)
(cd $tmp_dev_dir; rpm2cpio $cache_dir/MAKEDEV_*_i386.rpm |cpio -idm)
(cd $tmp_dev_dir/dev; tar czf $drbl_pkgdir/dev.tgz *)
echo "$msg_clean_tmp_dev"
rm -rf $tmp_dev_dir

# 9.
# make the nbi files
# 1st, clean the old nbi files
if [ "$(ls -alF /tftpboot/nbi_img/boot* 2> /dev/null)" != "" ]; then
   echo "$msg_delimiter_star_line"
   echo "$msg_remove_old_nbi"
   rm -f /tftpboot/nbi_img/boot*
fi
echo "$msg_delimiter_star_line"
# Steven Shiau added notes here: From drbl-setup 1.2-1drbl, 
# we have 2 choices for kernel, one is the original kernel rpm from distribution
# the other is compiled by DRBL project. the former one exists in 
# RPMS.os, RPMS.updates... the latter one might exist in RPMS.drbl or 
# RPMS.drbl-test. The $drbl_kernel_ver is like: 2.4.22-1.2199.nptl

# So comment the following:
# COMMENT START
#latest_drbl_kernel=`rpm -q kernel"$SMP_OPTION" |grep drbl | sort -g | tail -n 1`
#latest_drbl_kernel="kernel"$SMP_OPTION"-$drbl_kernel_ver"
#echo "latest_drbl_kernel: $latest_drbl_kernel"
#rpm -q --qf '%{version}-%{release}\n' $latest_drbl_kernel > /dev/null && drbl_kernel=`rpm -q --qf '%{version}-%{release}\n' $latest_drbl_kernel`
# use rpm -q --qf '%{filenames}\n' to get the string of kernel verison.
#rpm -q --qf '%{filenames}\n' $latest_drbl_kernel > /dev/null && boot_kernel=`rpm -q --qf '%{filenames}\n' $latest_drbl_kernel`
#drbl_kernel_ver=`echo $boot_kernel |cut -d"-" -f2-`
# COMMENT END

case "$driver_answer" in
  n|N|[nN][oO])
              ;;
  *)
   # install the driver for DRBL client, this is the case such as bcm4400 is not
   # included in RH9 2.4.20-8 or others in updates, so we add here.
   # the code here is ugly...

   # check if such driver exists
   if [ -n "`apt-cache pkgnames drbl-driver |grep $drbl_kernel_ver`" ]; then
     echo "$msg_install_extra_driver"
     if [ -z "$SMP_OPTION" ]; then
      apt-get -y install drbl-driver-'[^(smp)]'.*-$drbl_kernel_ver
     else
      apt-get -y install drbl-driver-smp-.*-"$drbl_kernel_ver"
     fi
   else
      [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
      echo "$msg_no_extra_driver"
      [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   fi
   # Not so serious, so forget about the checking
   #RETVAL=$?
   #check_apt_install $RETVAL
esac

echo "$msg_delimiter_star_line"
echo "$msg_create_nbi_files"
# put and create the kernel and initrd for DRBL clients, this will be done by
# mknic-nbi
echo "$msg_latest_kernel_for_clients $drbl_kernel_ver"

# check if drbl-script is installed or not.
if ! rpm -q --quiet drbl-script; then
  [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE
  echo "$msg_no_drbl_script"
  [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
  exit 1
fi
# create the NBI and PXE image for DRBL clients
# modules will be copied when user runs drblpush
case "$SMP_OPTION" in
	"-smp")
         $DRBL_SCRIPT_PATH/sbin/mknic-nbi --kernel $drbl_kernel_ver --all --smp --no-modules
         ;;
	 *)
         $DRBL_SCRIPT_PATH/sbin/mknic-nbi --kernel $drbl_kernel_ver --all --no-modules
esac
echo "$msg_Done!"

# 10.
if [ -n "$CONSOLE_OUTPUT" ]; then
  echo -n "$msg_make_client_serial_console"
  # Notes, there are at least 3 "option etherboot.kernel-cmdline", so 
  # just the one - option etherboot.kernel-cmdline " mount=devfs" is replaced
  # ...
  perl -p -i -e "s/option etherboot.kernel-cmdline \".*\".*;/option etherboot.kernel-cmdline \" $CONSOLE_OUTPUT devfs=nomount\" ;/g" /etc/dhcpd.conf.etherboot.include
  echo "$msg_done!"
fi
# 11.
echo "$msg_delimiter_star_line"
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo -n "$msg_create_files_for_PXE_clients"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
[ ! -d /tftpboot/nbi_img/pxelinux.cfg ] && mkdir -p /tftpboot/nbi_img/pxelinux.cfg

if [ -f $pxelinux_file ]; then
   cp -f $pxelinux_file /tftpboot/nbi_img
else
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_Warning! $pxelinux_file $msg_NOT_found!!! $msg_PXE_NOT_work"
   echo "$msg_press_enter_to_continue"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   read
fi
if [ -f $memdisk_file ]; then
   cp -f $memdisk_file /tftpboot/nbi_img
else
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_Warning! $memdisk_file $msg_NOT_found!!! $msg_PXE_NOT_work"
   echo "$msg_press_enter_to_continue"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
   read
fi

cat <<-PXE_END > /tftpboot/nbi_img/pxelinux.cfg/default
# note!!! if "serial" directive exists, it must be the first directive
$PXE_SERIAL_OUTPUT
default drbl
timeout 70
prompt 1
say **********************************************
say Welcome to DRBL.
say NCHC Free Software Labs, Taiwan.
say http://drbl.nchc.org.tw; http://drbl.sf.net
say **********************************************
say Boot:
say ----------------------------------------------
say (Enter) System assigned by DRBL server (default)
say (1) Linux (from DRBL server)
say (2) System in local harddrive (if available)
say (3) Memtest
say (4) Freedos
say 5 options, what's your choice ? [Enter, 1, 2, 3, 4]:

#---------------------------------
label drbl
  kernel vmlinuz-pxe
  append initrd=initrd-pxe.img ramdisk_size=9600 $CONSOLE_OUTPUT

# alias for drbl... Easier for user to select by number...
label 1
  kernel vmlinuz-pxe
  append initrd=initrd-pxe.img ramdisk_size=9600
#---------------------------------
#---------------------------------
label local
  localboot 0
# alias for local... Easier for user to select by number...
label 2
  localboot 0
#---------------------------------
#---------------------------------
label memtest
  # note! *.bin is specially purpose for syslinux, 
  # do NOT use memtest86.bin, use memtest86 instead of memtest86.bin
  kernel memtest86
label 3
  # note! *.bin is specially purpose for syslinux, 
  # do NOT use memtest86.bin, use memtest86 instead of memtest86.bin
  kernel memtest86
#---------------------------------

#---------------------------------
label fdos
  # ref: http://syslinux.zytor.com/memdisk.php
  kernel memdisk
  append initrd=$fdos_img_output
label 4
  # ref: http://syslinux.zytor.com/memdisk.php
  kernel memdisk
  append initrd=$fdos_img_output
#---------------------------------

label rh-8.0-netinstall
  kernel vmlinuz.rh8.0_netinstall
  append initrd=initrd_rh8.0_netinstall.img

label rh-9-netinstall
  kernel vmlinuz.rh9_netinstall
  append initrd=initrd_rh9_netinstall.img

label rh-FC1-netinstall
  kernel vmlinuz.FC1_netinstall
  append initrd=initrd_FC1_netinstall.img

label rh-FC2-netinstall
  kernel vmlinuz.FC2_netinstall
  append initrd=initrd_FC2_netinstall.img

label mdk-9.2-netinstall
  kernel vmlinuz.mdk9.2_netinstall
  append initrd=initrd_mdk9.2_netinstall.img

label mdk-10.0-netinstall
  kernel vmlinuz.mdk10.0_netinstall
  append initrd=initrd_mdk10.0_netinstall.img

label woody-netinstall
  kernel vmlinuz.woody_netinstall
  append initrd=initrd_woody_netinstall.img ramdisk_size=65535

PXE_END

# create the freedos image, which a clean one.
# if user wants to insert files, use 
# the script /opt/drbl/sbin/insert-file-fdos.sh
[ -f kernel.sys ] && rm -f kernel.sys
if [ -f $fdos_img_src ]; then
   img_mt=`mktemp -d fdos_img.XXXXXX`
   mount -t vfat -o loop $fdos_img_src $img_mt
   cp -f $img_mt/kernel.sys .
   umount $img_mt
   mknbi-fdos --output=/tftpboot/nbi_img/$fdos_nbi_output kernel.sys $fdos_img_src
   cp -f $fdos_img_src /tftpboot/nbi_img/$fdos_img_output
   [ -d $img_mt ] && rm -rf $img_mt
   # clean the unnecessary file
   [ -f kernel.sys ] && rm -f kernel.sys
else
   [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
   echo "$msg_Warning! $fdos_img_src $msg_NOT_found!!! $msg_FreeDOS_NOT_work"
   echo "$msg_press_enter_to_continue"
   [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL

fi
[ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING
echo "$msg_Done!"
[ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL
}; # end of print DRBLSRV_OUT
  
  close(DRBLSRV_OUT);
  system("chmod 700 $main_sh");

}# end of setup_drbl
