#!/bin/sh
export TEXTDOMAIN=slint
LANG=$(cat /tmp/.SlintInstallationLANG)
ll_TT=${LANG%.*}
. /usr/lib/setup/SeTlocales
SeTFonts
PutFonts
TMP=/var/log/setup/tmp
if [ ! -d $TMP ]; then
  mkdir -p $TMP
fi
T_PX="$(cat $TMP/SeTT_PX)"
ROOT_DEVICE="$(cat $TMP/SeTrootdev)"
if [ ! -d $T_PX/bin -a ! -d $T_PX/etc ]; then # if there no Linux here, exit
  exit
fi

# Check for disk full error:
. /usr/lib/setup/SeTfull

# These next lines are intended to clean up any permissions
# problems that could be caused by a bad package.  We don't
# intend to make any bad packages here, but it never hurts
# to be safe. :^)
( cd $T_PX ; chmod 755 ./ )
( cd $T_PX ; chmod 755 ./var )
if [ -d $T_PX/usr/src/linux ]; then
  chmod 755 $T_PX/usr/src/linux
fi
if [ ! -d $T_PX/proc ]; then
  mkdir $T_PX/proc
  chown root.root $T_PX/proc
fi
if [ ! -d $T_PX/sys ]; then
  mkdir $T_PX/sys
  chown root.root $T_PX/sys
fi
chmod 1777 $T_PX/tmp
if [ ! -d $T_PX/var/spool/mail ]; then
  mkdir -p $T_PX/var/spool/mail
  chmod 755 $T_PX/var/spool
  chown root.mail $T_PX/var/spool/mail
  chmod 1777 $T_PX/var/spool/mail
fi
# Already done in setup at least in Slint
# Some of the install scripts need /proc and /sys.
# Some disks will need /dev with module loaded devices.
#if [ ! "$T_PX" = "/" ]; then
#  mount --bind /proc $T_PX/proc 1> /dev/null 2> /dev/null
#  mount --bind /sys $T_PX/sys 1> /dev/null 2> /dev/null
#  mount --bind /dev $T_PX/dev 1> /dev/null 2> /dev/null
#fi
# These will be left connected rather than unmounting them to
# make it easier to set up LVM/LUKS.

# Load keyboard map (if any) when booting
if [ -r $TMP/SeTkeymap ]; then # should be always true now - Didier Spaier
  MAPNAME="$(cat $TMP/SeTkeymap)"
  echo "#!/bin/sh" > $T_PX/etc/rc.d/rc.keymap
  echo "# Load the keyboard map.  More maps are in /usr/share/kbd/keymaps." \
  >> $T_PX/etc/rc.d/rc.keymap
  echo "if [ -x /usr/bin/loadkeys ]; then" >> $T_PX/etc/rc.d/rc.keymap
  echo " /usr/bin/loadkeys $MAPNAME" >> $T_PX/etc/rc.d/rc.keymap
  echo "fi" >> $T_PX/etc/rc.d/rc.keymap
  chmod 755 $T_PX/etc/rc.d/rc.keymap
fi

# Only ask if we want to skip configuring if we suspect the user should
# skip the step:
if [ -r $T_PX/etc/fstab ]; then
  dialog --title "`gettext "CONFIGURE THE SYSTEM"`" --yesno "`gettext "Now we can configure your \
Linux system.  If this is a new installation, you MUST configure it now or it \
will not boot correctly.  However, if you are just adding software to an \
existing system, you can back out to the main menu and skip this step.  \
However (important exception) if you've installed a new kernel image, it's \
important to reconfigure your system so that you can install LILO (the Linux \
loader) or create a bootdisk using the new kernel.  You want to CONFIGURE \
your system, right?"`" 0 0
  if [ ! $? = 0 ]; then
    exit
  fi
else
  dialog --title "`gettext "DONE INSTALLING PACKAGES"`" --infobox  \
"`gettext "Preparing to configure your new Linux system..."`" 3 70
  sleep 2
fi

# Post installation and setup scripts added by packages.
if [ -d $T_PX/var/log/setup ]; then
  # Prepare for LVM in a newly installed system
  if [ -r /etc/lvmtab -o -d /etc/lvm/backup ]; then # Available in local root
    if [ ! -r $T_PX/etc/lvmtab -a ! -d $T_PX/etc/lvm/backup ]; then
      #mount --bind /proc $T_PX/proc
      #mount --bind /sys $T_PX/sys
      chroot $T_PX /sbin/vgscan --mknodes --ignorelockingfailure 1> /dev/null 2> /dev/null
      # First run does not always catch LVM on a LUKS partition:
      chroot $T_PX /sbin/vgscan --mknodes --ignorelockingfailure 1> /dev/null 2> /dev/null
    fi
  fi
# for INSTALL_SCRIPTS in $T_PX/var/log/setup/setup.* ; do
# Don't run some scripts - Didier Spaier
  for SCRIPT in \
	setup.80.make-bootdisk \
	setup.netsetup \
	setup.services \
	setup.xstartupmode \
	setup.xwmconfig ; do
		# Here, we call each script in /var/log/setup. Two arguments are provided:
		# 1 -- the target prefix (normally /, but ${T_PX} from the bootdisk)
		# 2 -- the name of the root device.
		# In the internationalized installer we'll run the modified script in
		# /usr/lib/config if executable, else fall back to the genuine one. -  Didier Spaier
			( cd $T_PX
			if [ -x var/log/setup/$SCRIPT ]; then
				./var/log/setup/$SCRIPT $T_PX $ROOT_DEVICE
			fi
			)
	done
fi
ROOTPARTPATH=$(findmnt -lno source $T_PX)
DRIVENAME=$(lsblk -lpno pkname,name|grep $ROOTPARTPATH|cut -d' ' -f1)
BIOSBOOT=$(lsblk -lo parttype|grep -i "21686148-6449-6e6f-744e-656564454649")
PARTTYPE=$(lsblk -lno pttype $DRIVENAME|tail -n 1)
ESPGPT=$(lsblk -lo parttype|grep -i "c12a7328-f81f-11d2-ba4b-00a0c93ec93b")
ESPDOS=$(lsblk -lo parttype|grep -i "0xef")
chroot $T_PX /usr/sbin/clocksetup -c -z
# Figure out how to set the /dev/cdrom and/or /dev/dvd symlinks. Everything seems to
# report itself as a DVD-ROM, so don't blame me. Without asking what's what, all we can
# do here is guess. It's a better guess than before, though, as now it takes ide-scsi
# into account. This won't really matter these days (2018), as everything uses udev to
# create /dev, and it makes links like this...
if dmesg | grep "ATAPI CD" 1> /dev/null 2> /dev/null ; then
  dmesg | grep "ATAPI CD" | while read device ; do
    shortdev=`echo $device | cut -f 1 -d :`
    if grep -w "$shortdev=ide-scsi" $T_PX/etc/lilo.conf 1> /dev/null 2> /dev/null ; then
      shortdev=sr0
    fi
    ( cd $T_PX/dev
      rm -f cdrom dvd
      ln -sf /dev/$shortdev cdrom
      ln -sf /dev/$shortdev dvd
    )
    # Rather than keep overwriting the devices, quit keeping only links to the first
    # device found.  "Real" users will use the actual devices instead of silly links
    # anyway.  ;-)
    break;
  done
fi
# Set the console font
FONT=$(cat /tmp/FONT)
        cat << EOF > $T_PX/etc/rc.d/rc.font
#!/bin/sh
#
# This selects your default screen font from among the ones in
# /usr/share/kbd/consolefonts.
#
setfont -v $FONT
EOF
chmod 755 $T_PX/etc/rc.d/rc.font

# Set keymap and X keyboard on installed system
MAPCODE=$(cat $TMP/Pkeymap)
MAPCODE=${MAPCODE%.map}
chroot $T_PX /usr/sbin/keyboardsetup -k $MAPCODE

# Set root password:
/usr/lib/setup/SeTpasswd

# Create regular user(s)
[ -f /tmp/speech ] && touch $T_PX/tmp/speech
chroot $T_PX /usr/sbin/usersetup

chroot $T_PX geninitrd

if [ $BIOSBOOT ] || [ "$PARTTYPE" = "dos" ]; then
	chroot $T_PX grub-install --target=i386-pc $DRIVENAME
fi
if [ $ESPDOS ] || [ $ESPGPT ]; then
	chroot $T_PX grub-install --target=x86_64-efi --bootloader-id=slint $DRIVENAME
fi
chroot $T_PX update-grub
chroot $T_PX /usr/sbin/update-all
# This replaces setup.timeconfig.



