#!/bin/ash

# this script is responsible for initial configuration


##########################################
################# main ###################
##########################################

set -e 
#set -x

script_name=$0
PATH=$PATH:. . installer-functions

find_config_paths $@

load_config
load_sys_config

log warn "`nls "Preparing initial configuration in %s" "/dest"`"

# copy /etc/modules.conf
if test -f /etc/modules.conf ; then
  if test -s /dest/etc/modules.conf ; then
    cp /etc/modules.conf /dest/etc/modules.conf.installer
    chmod 640 /dest/etc/modules.conf.installer
  else
    cp /etc/modules.conf /dest/etc/modules.conf
    chmod 640 /dest/etc/modules.conf
  fi
fi

set_var sysconfig/i18n LANG $lang

case "$timezone" in
  */*/* )
    set_var sysconfig/timezone ZONE_INFO_SCHEME \
    	$(echo $timezone | sed -e 's|\(.*\)/\([^/]*\)/\([^/]*\)|\1|')
    set_var sysconfig/timezone ZONE_INFO_AREA \
    	$(echo $timezone | sed -e 's|\(.*\)/\([^/]*\)/\([^/]*\)|\2|')
    set_var sysconfig/timezone TIME_ZONE \
    	$(echo $timezone | sed -e 's|\(.*\)/\([^/]*\)/\([^/]*\)|\3|')
    ;;
  */* )
    set_var sysconfig/timezone ZONE_INFO_AREA \
    	$(echo $timezone | sed -e 's|\([^/]*\)/\([^/]*\)|\1|')
    set_var sysconfig/timezone TIME_ZONE \
    	$(echo $timezone | sed -e 's|\([^/]*\)/\([^/]*\)|\2|')
    ;;
  '' )
    : # do nothing
    ;;
  * )
    set_var sysconfig/timezone TIME_ZONE $timezone
    ;;
esac

case "$clock_utc" in
  yes )
    set_var sysconfig/clock UTC true
    ;;
  no )
    set_var sysconfig/clock UTC false
    ;;
esac
    

dhcp=""
case "$net_config" in
installer_settings)
    log info "`nls "Network will be set based on installer settings"`"
    # set values from installer config
    load_config
    if test "x$net_ipaddr" = "xdhcp"; then
	dhcp=yes
    else 
	# this might be auto
	net_prefix=`ip addr show dev $net_device | grep ' inet' | sed 's@^[^/]*/@@' | sed 's@ .*@@'`
    fi
    ;;

dhcp)
    dhcp=yes
    ;;
esac

if test "$net_config" != "none"; then
    file=sysconfig/interfaces/ifcfg-$net_device
    set_var $file DEVICE $net_device
    set_var $file ONBOOT yes
fi

if test "$dhcp"; then
    set_var $file BOOTPROTO dhcp
else
    set_var sysconfig/network HOSTNAME $net_hostname
    set_var sysconfig/network NISDOMAIN $net_domainname
    echo "domain $net_domainname" >/dest/etc/resolv.conf

    if test "$net_config" != "none"; then
	set_var sysconfig/network GATEWAY $net_gateway
	set_var sysconfig/network GATEWAYDEV $net_device
	set_var $file BOOTPROTO none
	set_var $file IPADDR $net_ipaddr/$net_prefix
	for i in $net_dns; do
	    echo "nameserver $i" >>/dest/etc/resolv.conf
	done

	if grep -q "$net_hostname\$" /dest/etc/hosts ; then
	  : skip
	else
	  echo "$net_ipaddr	$net_hostname" >> /dest/etc/hosts
	fi

	if grep -q "^alias.*$net_device" /dest/etc/modules.conf ; then
	  :
	else
	  if [ "$net_device_module" = auto ] ; then
	    for f in $(detect-net-devices -m || :) ; do
	      net_device_module=$f
	      break
	    done
	  fi
	  echo "alias $net_device $net_device_module" \
	  	>> /dest/etc/modules.conf
	  if test "$net_device_module_options" ; then
	    echo "options $net_device $net_device_module_options" \
	    	>> /dest/etc/modules.conf
	  fi
	fi
    fi
fi 


# add user
if test "$user_name" ; then
  log info "`nls "Adding user '%s'" "$user_name"`"
  chroot /dest id "$user_name" >/dev/null 2>&1 \
    || chroot /dest useradd -g users -m -c "$user_realname" "$user_name" \
    || die "Failed to add user '$user_name'"
fi

log info "`nls "Setting passwords for 'root' and '%s'" "$user_name"`"
# set passwords
if test -n "$user_name" -a -n "$user_pass" ; then
  echo -e "root:$root_pass\n$user_name:$user_pass" | chroot /dest chpasswd \
    || die "Failed to set passwords"
else
  echo "root:$root_pass" | chroot /dest chpasswd \
    || die "Failed to set password"
fi

touch /dest/etc/resolv.conf
chmod 644 /dest/etc/resolv.conf

# user will probably want to keep install_langs and excludedocs settings
cat /etc/rpm/macros >> /dest/etc/rpm/macros

if test "x$root_pass" = "xroot"; then
    log err  "`nls "You have not changed root password!"`"
    log info "`nls "Default password has been used: '%s'" "root"`"
fi

# try detect where do we have cdrom (or dvd), and make appropiate link
# we do not use source_device (in case it was cdrom), since this will
# also work for installation from network.
if test -L /dest/dev/cdrom ; then
  : skip
else
  if test -d /proc/ide ; then
    for f in /proc/ide/*/media ; do
      if [ -f $f ] ; then
        if [ "$(cat $f)" = cdrom ] ; then
          hd=$(echo $f | sed -e 's|/proc/ide/||; s|/media||')
          ln -sf /dev/$hd /dest/dev/cdrom
	  if grep -qi dvd /proc/ide/$hd/model ; then
	    if test -L /dest/dev/cdrom ; then
	      : skip
	    else
              ln -sf /dev/$hd /dest/dev/dvd
	    fi
	  fi
        fi
      fi
    done
  fi
fi

# try to detect usb controller
if [ -z "$usb_controller" -o "$usb_controller" = "auto" ]; then
  log warn "$(nls "Detecting USB controller type...")"
    
  if test -f /lib/modules/`uname -r`/usbcore.o ; then
    : ok
  else
    load_package usb-mod
  fi
  
  usb_controller="none"
  
  if insmod /lib/modules/`uname -r`/usbcore.o 2> /dev/null; then
    if insmod /lib/modules/`uname -r`/usb-ohci.o 2> /dev/null; then
      sleep 5
      rmmod usb-ohci
      usb_controller="usb-ohci"
      log info "$(nls "Detected %s controller." "$usb_controller")"
    else
      if insmod /lib/modules/`uname -r`/usb-uhci.o 2> /dev/null; then
        sleep 5
        rmmod usb-uhci
        usb_controller="usb-uhci"
        log info "$(nls "Detected %s controller." "$usb_controller")"
      else
	log info "$(nls "No USB controller found.")"
      fi
    fi
    sleep 1
    rmmod usbcore
  fi
fi

case "$usb_controller" in
  ""|off|none|auto)
    ;;
  *)
    echo "alias usb-controller $usb_controller" >> /dest/etc/modules.conf
    echo "none	/proc/bus/usb	usbdevfs	defaults	 0 0" >> /dest/etc/fstab
    ;;
esac

# vim:ft=sh
