#!/bin/sh
#
# 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/4/13
#

# Setting
url_prefix="http://opensource.nchc.org.tw/"
wget_rpm_MDK9_2="wget-1.8.2-12mdk.i586.rpm"
wget_rpm_MDK10_0="wget-1.9.1-4mdk.i586.rpm"
wget_rpm_MDK10_1="wget-1.9.1-4mdk.i586.rpm"

# for RH and MDK, the arch is different
ARCH="i586"

check_distribution_name() {
 #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)
 #MDK 9.2: /etc/mandrake-release: "Mandrake Linux release 9.2 (FiveStar) for i586" 
 #MDK 10.0 (Community): /etc/mandrake-release: "Mandrake Linux release 10.0 (Community) for i586" 
 #MDK 10.0 (Official): /etc/mandrake-release: "Mandrake Linux release 10.0 (Official) for i586" 
 #$OS_Version will be the index for rc.sysinit in drblsrv-rh, drblsrv-mdk and drblpush
  grep -q "Red Hat Linux release 8.0 (Psyche)" /etc/redhat-release 2>/dev/null && OS_Version="RH8.0"
  grep -q "Red Hat Linux release 9 (Shrike)" /etc/redhat-release 2>/dev/null && OS_Version="RH9"
  grep -q "Fedora Core release 1 (Yarrow)" /etc/fedora-release 2>/dev/null && OS_Version="FC1"
  grep -q "Fedora Core release 2 (Tettnang)" /etc/fedora-release 2>/dev/null && OS_Version="FC2"
  grep -q "Fedora Core release 3 (Heidelberg)" /etc/fedora-release 2>/dev/null && OS_Version="FC3"
  grep -q "Mandrake Linux release 9.2 (FiveStar) for i586" /etc/mandrake-release 2>/dev/null && OS_Version="MDK9.2"
  grep -q "Mandrake Linux release 10.0 (Community) for i586" /etc/mandrake-release 2> /dev/null && OS_Version="MDK10.0"
  grep -q "Mandrake Linux release 10.0 (Official) for i586" /etc/mandrake-release 2> /dev/null && OS_Version="MDK10.0"
  grep -q "Mandrakelinux release 10.1 (Official) for i586" /etc/mandrakelinux-release 2> /dev/null && OS_Version="MDK10.1"
  echo $OS_Version
}
# define a function get_inst_rpm to get and install rpm package which 
# apt can not process now. ie. only $ARCH 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 -q -e robots=off -nd -P "$pkg_tmp_dir" -A "$pkg-[0-9].*.$ARCH.rpm" $url_tmp/
  pkg_file=$(ls $pkg_tmp_dir/$pkg-[0-9].*.$ARCH.rpm)
  if [ "$pkg_file" != "" ]; then
    rpm -ivh $opt $pkg_file
    RETVAL=$?
    if [ "$RETVAL" -gt 0 ]; then 
       echo "Failed to install $pkg_file..."
       return $RETVAL
    fi
  else
    echo "XXXXXXX        XXXXXXX       XXXXXXX"
    echo "Failed to install package \"$pkg\"!!!"
    echo "Please check the network connection between your machine and $url"
    exit 1
  fi
  if [ -d $pkg_tmp_dir ]; then
    rm -rf $pkg_tmp_dir
  fi
}

# Start
if [ ! "$UID" = "0" ]; then
  echo
  echo "[$LOGNAME] You need to run this script \"`basename $0`\" as root."
  echo
  exit 1
fi

OS_Version=`check_distribution_name`
#
case "$OS_Version" in
   MDK9.2|MDK10.0)
            VER=${OS_Version:3}
            echo "The version number for your Mandrake: $VER"
            #http://opensource.nchc.org.tw/redhat/apt/ redhat/9/en/$ARCH/ 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="/mandrake/apt/"
	    # note!!! Do NOT append "/" in the end of $apt_list
	    apt_list="mandrake/linux/$VER/i586"
	    media="Mandrake"
	    media_info="base"
	    main_rpmdir="RPMS"
	    contrib_rpmdir="RPMS2"
	    jpackage_rpmdir="RPMS3"
	    main_updates="base"
	    update_rpmdir="RPMS"
            ;;
   "MDK10.1")
            # sources.list
            # rpm http://opensource.nchc.org.tw//mandrake/official/10.1/i586/media media_info/hdlist main
            # Mandrake contrib
            # rpm http://opensource.nchc.org.tw//mandrake/official/10.1/i586/media media_info/hdlist2 contrib
            # Mandrake jpackage
            # rpm http://opensource.nchc.org.tw//mandrake/official/10.1/i586/media media_info/hdlist3 jpackage
            # Mandrake updates
            # rpm http://opensource.nchc.org.tw//mandrake/official/updates/10.1/ main_updates/media_info/hdlist main_updates
            VER=${OS_Version:3}
            echo "The version number for your Mandrake: $VER"
            apt_dir="/mandrake/apt/"
	    # note!!! Do NOT append "/" in the end of $apt_list
	    apt_list="mandrake/linux/$VER/i586"
	    media="media"
	    media_info="media_info"
	    main_rpmdir="main"
	    contrib_rpmdir="contrib"
	    jpackage_rpmdir="jpackage"
	    main_updates="main_updates/media_info"
	    update_rpmdir="main_updates"
            ;;
   *)
            echo "$OS_Version is not supported version, program stop!."
	    echo "Please press Ctrl-C to stop the program!"
	    read
	    exit 1 
            
esac

# url is where the RPMS.os, RPMS.update, RPMS.drbl... exist
url="$url_prefix/$apt_dir/$apt_list/"

# check if apt is installed or not
rpm -q apt &>/dev/null
if [ "$?" -gt 0 ]; then 
   echo "Install APT ..."
   rpm -q wget &>/dev/null
   RC=$?
   if [ "$RC" -gt 0 ]; then 
      echo "No wget ? Trying to install wget..."
      WGET_idx=$(echo $OS_Version | tr "\." "_")
      # we will get the variables like wget_rpm_RH8_0, wget_rpm_FC1, wget_rpm_MDK9_2
      eval WGET_RPM=\$wget_rpm_$WGET_idx
      rpm -ivh --quiet $url/RPMS.core/$WGET_RPM &> /dev/null
      RETVAL=$?
      [ $RETVAL -eq 0 ] && break

      # check if wget installed
      rpm -q wget &>/dev/null
      if [ "$?" -gt 0 ]; then
       echo "Unable to install wget!!!"
      else
       echo "wget is installed successfully!"
      fi
   fi

   # install apt
   echo "Trying to download apt..."
   get_inst_rpm $url/RPMS.drbl libapt-pkg0
   get_inst_rpm $url/RPMS.drbl apt   
else
   echo "***************************************************************"
   echo "apt is already installed. Amazing!!! You are excellent!"  
   echo "***************************************************************"
fi
echo

echo "***************************************************************"
echo "Setup apt sources.list ..."
if [ -f /etc/apt/sources.list ]; then
  mv /etc/apt/sources.list /etc/apt/sources.list.orig
fi

echo "Setting the apt sources.list for MDK $VER..."
cat <<-APT_END > /etc/apt/sources.list
# Mandrake core
rpm $url_prefix/mandrake/official/$VER/i586/$media/ $media_info/hdlist $main_rpmdir
# Mandrake contrib
rpm $url_prefix/mandrake/official/$VER/i586/$media/ $media_info/hdlist2 $contrib_rpmdir
# Mandrake jpackage
rpm $url_prefix/mandrake/official/$VER/i586/$media/ $media_info/hdlist3 $jpackage_rpmdir

# Mandrake updates
rpm $url_prefix/mandrake/official/updates/$VER/ $main_updates/hdlist $update_rpmdir

# DRBL related.
rpm $url_prefix/$apt_dir/$apt_list base/hdlist.drbl RPMS.drbl
APT_END

apt-get update
echo "--------------------------------------------------------------------"
echo "Now enjoy APT! Thanks, Debian!!!"


# To uninstall apt, run like this:
# rpm -e libapt-pkg0 apt
