#!/bin/sh # # Copyright 1993,1994,1999 Patrick Volkerding, Moorhead, Minnesota USA # Copyright 2001, 2003, 2004 Slackware Linux, Inc., Concord, CA # Copyright 2006, 2007 Patrick Volkerding, Sebeka, Minnesota USA # All rights reserved. # # Redistribution and use of this script, with or without modification, is # permitted provided that the following conditions are met: # # 1. Redistributions of this script must retain the above copyright # notice, this list of conditions and the following disclaimer. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # Modified by Didier Spaier didier~at~slint~dot~fr for Slint. # export TEXTDOMAIN=slint . gettext.sh . /usr/lib/setup/SeTlocales if [ -f /tmp/.SlintInstallationLANG ]; then LANG=$( $TMP/SeTcolor # turn on color menus PATH="$PATH:/usr/lib/setup" export PATH; export COLOR=on #echo #echo #echo "Probing disk partitions. (Hint: if your ATAPI CD-ROM causes timeouts" #echo "during the probe process, try hitting the eject button)" #echo #sleep 5 # # Before probing, activate any LVM partitions # that may exist from before the boot: vgchange -ay 1> /dev/null 2> /dev/null if probe -l 2> /dev/null | grep -E 'Linux$' 1> /dev/null 2> /dev/null ; then probe -l 2> /dev/null | grep -E 'Linux$' | sort 1> $TMP/SeTplist 2> /dev/null else dialog --title "`gettext "NO LINUX PARTITIONS DETECTED"`" \ --msgbox "`gettext "There don't seem to be any partitions on this \ machine of type Linux. You'll need to make at least one of these to \ install Linux. To do this, you'll need to leave 'setup', and make the \ partitions using 'cfdisk' (MBR partitions) or 'cgdisk' (GPT partitions). \ For more information, read the 'setup' help file from the next menu."`" 10 80 fi if [ -d /sys/firmware/efi ]; then if ! probe -l 2> /dev/null | grep "EFI System Partition" 1> /dev/null 2> /dev/null ; then dialog --title "`gettext "NO EFI SYSTEM PARTITION DETECTED"`" \ --msgbox "`gettext "This machine appears to be using EFI/UEFI, but no EFI System \ Partition was found. You'll need to make an EFI System Partition in order \ to boot from the hard drive. To do this, leave 'setup', and \ use 'cgdisk' to make a 100MB partition of type EF00. For more information, \ read the 'setup' help file from the next menu."`" 10 80 fi fi T_PX="/mnt" echo "$T_PX" > $TMP/SeTT_PX ROOT_DEVICE="`mount | grep "on / " | cut -f 1 -d ' '`" echo "$ROOT_DEVICE" > $TMP/SeTrootdev if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then # clear source umount /var/log/mount # location fi # Anything mounted on /var/log/mount now is a fatal error: if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then gettext "Can't umount /var/log/mount. Reboot machine and run setup again." echo exit fi # If the mount table is corrupt, the above might not do it, so we will # try to detect Linux and FAT32 partitions that have slipped by: if [ -d /var/log/mount/lost+found -o -d /var/log/mount/recycled \ -o -r /var/log/mount/io.sys ]; then gettext "Mount table corrupt. Reboot machine and run setup again." echo exit fi rm -f /var/log/mount 2> /dev/null rmdir /var/log/mount 2> /dev/null mkdir /var/log/mount 2> /dev/null while [ 0 ]; do if [ -r $TMP/Pkeymap ]; then DefaultKeyMap="`cat $TMP/Pkeymap`" fi Version=14.2 dialog --visit-items --title "`eval_gettext "Slint Linux Setup (version \\\${Version})"`" \ --menu \ "`gettext "Welcome to Slint Linux Setup. Select an option below using the UP/DOWN keys and SPACE or ENTER. Alternate keys may also be used: '+', '-', and TAB."`" 0 0 0 \ "HELP" "`gettext "Read the Slint Setup HELP file"`" \ "KEYMAP" "`eval_gettext "Remap your keyboard (other than \\\$DefaultKeyMap)"`" \ "ADDSWAP" "`gettext "Set up your swap partition(s)"`" \ "TARGET" "`gettext "Set up your target partitions"`" \ "SOURCE" "`gettext "Select source media"`" \ "INSTALL" "`gettext "Install selected software"`" \ "CONFIGURE" "`gettext "Reconfigure your Linux system"`" \ "EXIT" "`gettext "Exit Slint Linux Setup"`" 2> $TMP/hdset if [ ! $? = 0 ]; then rm -f $TMP/hdset $TMP/SeT* exit fi MAINSELECT="`cat $TMP/hdset`" rm $TMP/hdset # Start checking what to do. Some modules may reset MAINSELECT to run the # next item in line. if [ "$MAINSELECT" = "HELP" ]; then SeTfdHELP fi if [ "$MAINSELECT" = "KEYMAP" ]; then SeTkeymap if [ -r $TMP/SeTkeymap ]; then MAINSELECT="ADDSWAP" fi fi if [ "$MAINSELECT" = "ADDSWAP" ]; then SeTswap if [ -r $TMP/SeTswap ]; then MAINSELECT="TARGET" elif [ -r $TMP/SeTswapskip ]; then # Go ahead to TARGET without swap space: MAINSELECT="TARGET" fi fi if [ "$MAINSELECT" = "TARGET" ]; then if [ -r $TMP/SeTnative ]; then dialog --title "`gettext "TARGET PARTITIONS ALREADY CONFIGURED"`" --msgbox "`gettext " You have already configured the target partitions, where the system will be installed. Press ENTER to return to the main menu."`" 0 0 continue fi SeTpartitions SeTEFI SeTDOS if [ -r $TMP/SeTnative ]; then if [ ! -r $TMP/SeTsource ]; then MAINSELECT="SOURCE" else MAINSELECT="INSTALL" fi fi fi if [ "$MAINSELECT" = "SOURCE" ]; then if [ -r $TMP/SeTsource ]; then dialog --title "`gettext "SOURCE OF PACKAGES ALREADY CHOSEN"`" --msgbox "`gettext " You have already chosen the source of packages. Press ENTER to return to the main menu."`" 0 0 continue fi SeTmedia if [ -r $TMP/SeTsource ]; then INSTALL_PATH=$(<$TMP/SeTDS) SLINTVERSION=$(sed -n "s/Slint version: //p" /.target) SFX=$(sed -n "s/System: //p" /.target) if [ ! -f $INSTALL_PATH/slint/DONOTREMOVEME.TXT ] || \ ! grep "^Slint version: ${SLINTVERSION}$" $INSTALL_PATH/slint/DONOTREMOVEME.TXT 1>/dev/null || \ ! grep "^System: ${SFX}$" $INSTALL_PATH/slint/DONOTREMOVEME.TXT 1>/dev/null; then dialog --title "`gettext "SOURCE PACKAGES INAPPROPRIATE"`" \ --msgbox "`eval_gettext "Either the source packages are inappropriate for the target system: Slint version \\\$SLINTVERSION (\\\${SFX}-bit) or the file \\\$INSTALL_PATH/slint/DONOTREMOVEME.TXT is missing. Please try again to set the source of packages"`" 0 0 fi fi if [ -r $TMP/SeTnative ]; then MAINSELECT="INSTALL" fi fi if [ "$MAINSELECT" = "INSTALL" ]; then if [ ! -r $TMP/SeTsource -o ! -r $TMP/SeTnative ]; then dialog --title "`gettext "CANNOT INSTALL SOFTWARE YET"`" --msgbox "`gettext " Before you can install software, complete the following tasks: 1. Select your source media. 2. Set up your target Linux partition(s). You may also optionally remap your keyboard and set up your \ swap partition(s). Press ENTER to return to the main menu."`" 0 0 continue fi dialog --title "`gettext "READY TO INSTALL THE PACKAGES?"`" \ --yesno "`gettext "Please confirm that you want to install \ the packages."`" 0 0 if [ $? = 0 ]; then dialog --title "`gettext "INSTALL KDE PACKAGES?"`" \ --yesno "`gettext "Do you want to install the KDE packages?"`" 0 0 export installkde="$?" MAINSELECT="INSTALL" else continue fi SOURCE_DEVICE="`cat $TMP/SeTsource`" setterm -background blue -foreground white -blank 0 clear echo gettext "A one-line description will be displayed as each package is installed." echo INSTALL_PATH=$(<$TMP/SeTDS) if [ -r $TMP/SeTCDdev ]; then # only try to remount media if it's a CD/DVD slackinstall --device `cat $TMP/SeTCDdev` --srcpath $INSTALL_PATH --mountpoint /var/log/mount --target $T_PX else slackinstall --device noremount --srcpath $INSTALL_PATH --mountpoint /var/log/mount --target $T_PX fi # we make some adjustments after all packages but the locales # have been installed, mostly setting which daemons should be # started by default in the installed system. zzz-settings # Let's pause a moment and then restore the terminal settings sleep 1 setterm -background default -foreground default -blank 0 if grep -q "brltty=" /proc/cmdline ; then # If a Braille display was set up in the command line, lets' # convey these settings in the installed system. sh /usr/lib/setup/bp2cf -u -p "$brltty" -f $T_PX/etc/brltty.conf fi # We will start brltty by default on the installed system. # TODO: find a way to know if a Braille device was used during # installation and only then start it by default. chmod 0755 $T_PX/etc/rc.d/rc.brltty MAINSELECT="CONFIGURE" fi # end of INSTALL if [ "$MAINSELECT" = "CONFIGURE" ]; then if ! grep -q aaa_base $T_PX/var/log/packages/* ; then dialog --title "`gettext "SYSTEM NOT YET INSTALLED"`" \ --msgbox "`gettext "You need to install the packages before configuring \ the system. Please press ENTER to return to the main menu."`" 0 0 continue fi SeTconfig REPLACE_FSTAB=Y if [ -r $TMP/SeTnative ]; then if [ -r $T_PX/etc/fstab ]; then dialog --title "`gettext "REPLACE /etc/fstab?"`" --yesno "`gettext "You already have an \ /etc/fstab on your install partition. If you were just adding software, \ you should probably keep your old /etc/fstab. If you've changed your \ partitioning scheme, you should use the new /etc/fstab. Do you want \ to replace your old /etc/fstab with the new one?"`" 10 80 if [ ! $? = 0 ]; then REPLACE_FSTAB=N fi fi if [ "$REPLACE_FSTAB" = "Y" ]; then cat /dev/null > $T_PX/etc/fstab if [ -r $TMP/SeTswap ]; then cat $TMP/SeTswap > $T_PX/etc/fstab fi cat $TMP/SeTnative >> $T_PX/etc/fstab if [ -r $TMP/SeTDOS ]; then cat $TMP/SeTDOS >> $T_PX/etc/fstab fi printf "%-16s %-16s %-11s %-16s %-3s %s\n" "#/dev/cdrom" "/mnt/cdrom" "auto" "noauto,owner,ro,comment=x-gvfs-show" "0" "0" >> $T_PX/etc/fstab printf "%-16s %-16s %-11s %-16s %-3s %s\n" "/dev/fd0" "/mnt/floppy" "auto" "noauto,owner" "0" "0" >> $T_PX/etc/fstab printf "%-16s %-16s %-11s %-16s %-3s %s\n" "devpts" "/dev/pts" "devpts" "gid=5,mode=620" "0" "0" >> $T_PX/etc/fstab printf "%-16s %-16s %-11s %-16s %-3s %s\n" "proc" "/proc" "proc" "defaults" "0" "0" >> $T_PX/etc/fstab printf "%-16s %-16s %-11s %-16s %-3s %s\n" "tmpfs" "/dev/shm" "tmpfs" "defaults" "0" "0" >> $T_PX/etc/fstab fi fi # We now set the locale that will be set in the installed system, # then install the packages and make the settings that depend on it. if echo $LOCALES|grep -q " $LANG " && [ "$LANG" != "en_US.utf8" ]; then chroot $T_PX /usr/sbin/localesetup $LANG 1>/dev/null else chroot $T_PX /usr/sbin/localesetup fi InstalledLang=$(sed -n "/^export LANG=/s/.*=\(.*\)/\1/p" $T_PX/etc/profile.d/lang.sh) ll_TT=${InstalledLang%.*} SeTlocales # Now let's install the packages that fit the locale used during # installation. # The locale is $lANG if one of those for which a translation is # shipped in the installler is used, else the one chosen through the # localsetup utility. # lo, kde, cgr, asp are set in SeTlocales # We won't attempt to install packages if INSTALL_PATH is not set as # that would mean that the installer was run without setting the # source of packages, maybe to reinstall a boot loader, whatever. if [ "$INSTALL_PATH" != "" ]; then dialog --infobox "`gettext "Installing translations..."`" 0 0 package=$(find $INSTALL_PATH -name libreoffice-l10n-${lo}-*t?z) if [ "$package" != "" ]; then spkg -i --root=$T_PX -qq --no-ldconfig --no-gtk-update-icon-cache $package fi package=$(find $INSTALL_PATH -name libreoffice-help-${lo}-*t?z) if [ "$package" != "" ]; then spkg -i --root=$T_PX -qq --no-ldconfig --no-gtk-update-icon-cache $package fi package=$(find $INSTALL_PATH -name kde-l10n-${kde}-*t?z) if [ "$package" != "" ] && [ "$installkde" = "0" ]; then spkg -i --root=$T_PX -qq --no-ldconfig --no-gtk-update-icon-cache $package fi package=$(find $INSTALL_PATH -name calligra-l10n-${cgr}-*t?z) if [ "$package" != "" ] && [ "$installkde" = "0" ]; then spkg -i --root=$T_PX -qq --no-ldconfig --no-gtk-update-icon-cache $package fi package=$(find $INSTALL_PATH -name aspell-${asp}-*t?z) if [ "$package" != "" ]; then spkg -i --root=$T_PX -qq --no-ldconfig --no-gtk-update-icon-cache $package fi fi chroot $T_PX /usr/sbin/update-all MAINSELECT=EXIT fi # End of CONFIGURE if [ "$MAINSELECT" = "EXIT" ]; then break fi done # end of main loop sync chmod 755 $T_PX if [ -d $T_PX/tmp ]; then chmod 1777 $T_PX/tmp fi if mount | grep /var/log/mntiso 1> /dev/null 2> /dev/null ; then umount -f /var/log/mntiso fi if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then umount /var/log/mount fi # Anything mounted on /var/log/mount now is a fatal error: if mount | grep /var/log/mount 1> /dev/null 2> /dev/null ; then exit fi # If the mount table is corrupt, the above might not do it, so we will # try to detect Linux and FAT32 partitions that have slipped by: if [ -d /var/log/mount/lost+found -o -d /var/log/mount/recycled \ -o -r /var/log/mount/io.sys ]; then exit fi rm -f /var/log/mount 2> /dev/null rmdir /var/log/mount 2> /dev/null mkdir /var/log/mount 2> /dev/null chmod 755 /var/log/mount # An fstab file is indicative of an OS installation, rather than # just loading the "setup" script and selecting "EXIT" if [ -f /mnt/etc/fstab ]; then # umount CD: if [ -r $TMP/SeTCDdev ]; then if mount | grep iso9660 > /dev/null 2> /dev/null ; then umount `mount | grep iso9660 | cut -f 1 -d ' '` fi eject -s `cat $TMP/SeTCDdev` # Tell the user to remove the disc, if one had previously been mounted # (it should now be ejected): dialog \ --clear \ --title "`gettext "Slint Linux Setup is complete"`" $@ \ --msgbox "`gettext " Please remove the installation disc. "`" 0 0 fi # Offer to reboot or drop to shell: dialog \ --title "`gettext "Slint Linux Setup is complete"`" $@ \ --yesno \ "`gettext " Would you like to reboot your system? If you choose \"No\", you will be dropped to a shell. "`" 0 0 retval=$? if [ $retval = 1 ]; then clear echo gettext "You may now reboot your system once you are ready. You can issue the 'reboot' command; or if your system has a keyboard attached, you can use the key combination: control+alt+delete " echo else touch /reboot fi fi # Fix the date: /sbin/fixdate # final cleanup rm -f $TMP/SeT* $TMP/tar-error $TMP/PKGTOOL_REMOVED rm -f /var/log/mount/treecache rmdir /var/log/mntiso 2>/dev/null rm -rf $TMP/treecache rm -rf $TMP/pkgcache rmdir /mnt/tmp/orbit-root 2> /dev/null # If the OS had been installed and the user elected to reboot: if [ -f /reboot ]; then clear gettext "** Starting reboot **" echo sleep 1 reboot fi # end Slint setup script