--- functions 2025-06-27 11:44:17.800221179 +0200 +++ functions-06 2025-06-27 19:48:41.054800606 +0200 @@ -23,14 +23,15 @@ # OTHER DEALINGS IN THE SOFTWARE. # # For more information, please refer to - +# Last updated lun. 17 mars 2025 19:50:58 CET export TEXTDOMAIN=auto . gettext.sh SLINTREPO=http://slackware.uk/slint/x86_64/slint-15.0 +SLACKREPO=http://slackware.uk/slackware/slackware64-15.0 # Directory /patches of a Slackware repository PATCHESREPO=http://slackware.uk/slackware/slackware64-15.0/patches export SLINTVERSION=15.0 -ISOVERSION=15.0-5 +ISOVERSION=15.0-6 ISOLABEL="SLINT$ISOVERSION" # Installed RAM in kilobytes #KRAM=$(sed -n 1p /proc/meminfo|sed "s/[ ]\{1,\}/ /"|cut -d" " -f2) @@ -43,7 +44,7 @@ # Name of the key file written if user wants an encrypted drive KEYFILE=crypto_keyfile.bin # minimum size in gigabytes of a drive allowed to install Slint in guided mode -GCOUNT=50 +GCOUNT=30 # minimum available room in megabytes in a ESP in manual mode MINLINUXSIZE=$((MEGA*100)) MINDRIVESIZE=$((GCOUNT*GIGA)) @@ -126,18 +127,13 @@ echo "$ARG" giveup } -displaydescription() { - SOURCEDIR=$1 - package=$2 - ( cd "$SOURCEDIR" || exit +description() { + package=$1 if [ -f "${package%t?z}"desc ]; then sed -n "1p" "${package%t?z}"desc - elif [ -f "${package%t?z}"txt ]; then - sed -n "1{s/[^:]\{1,\}://;p}" "${package%t?z}"txt else echo "${package%.t?z} (no available description)" fi - ) } trytoget() { rm -f "$(basename "$1")" @@ -148,6 +144,15 @@ FAILED=1 fi } +displayspkgerror() { + echo + clear + eval_gettext "Installation of \$1 failed for this reason:" + echo + cat "$PKGLISTS"/spkgerror + gettext "Therefore, Slint installation is not possible." + echo +} # Hints displayed when user types h for help. hintmode() { # We are called by welcome @@ -165,6 +170,18 @@ echo echo && gettext "Press Enter to continue" && read -r && clear } +hintselectcontent() { + # We are called by selectcontent + gettext "The \"core\" set of packages provides a command line only system +that you can expand using slapt-get. in this ISO it is provided for testing, +we recommend that you do not use it to buid a production system (yet)." + echo + gettext "The \"full\" set of packages allows to build a system including +a desktop and many applications. More applications and desktop can be added +after installation." + echo + echo && gettext "Press Enter to continue" && read -r && clear +} hintpartname(){ # We are called by setotherlinux or addpartition or setmountpoint eval_gettext "These directories should not be mounted on separate partitions: @@ -674,7 +691,7 @@ echo checkinstallationmodes >>$INSTALL/log # We check that conditions are met to allow the manual installation or # an auto installation selected by the user. We could do this checking - # before choosing emanual or auto instead but the user would then not + # before choosing manual or auto instead but the user would then not # know why the choice between manual and auto is not proposed. # we need in manual mode: # A big enough ESP (al least 100M available in it) if booted in EFI mode @@ -1349,6 +1366,23 @@ esac done } +selectcontent() { + gettext "you can choose between a full and a core installation. The core + installation includes only console applications, no graphical environmemt." + echo + unset SET + while true; do + gettext "Press F for full, C for core or h for help: " && clear_stdin && read -r ANSWER + case $(to_lower "$ANSWER") in + c) echo "core" >/tmp/set; break;; + f) echo "full" >/tmp/set; break;; + h) clear; hintselectcontent;; + *) clear + eval_gettext "\$ANSWER is not a valid answer." + echo + esac + done +} confirm() { echo confirm >>$INSTALL/log if [ "$AUTO" ]; then @@ -1426,6 +1460,9 @@ done < $INSTALL/"${KIND}"usedpart done fi + SET=$(cat /tmp/set) + eval_gettext "The \"\$SET\" set of packages will be installed." + echo rm -f $INSTALL/windowsusedpart $INSTALL/linuxusedpart echo gettext "If you confirm these settings they will be applied, @@ -1669,38 +1706,13 @@ echo "$0" >>$PKGLISTS/loginstall SRCPATH=$ISO/slint || exit 1 (cd $SRCPATH || exit - Liste=" devs \ - aaa_libraries \ - aaa_terminfo \ - coreutils \ - etc \ - bash \ - glibc-solibs \ - glibc-zoneinfo \ - glibc \ - glibc-i18n \ - shadow \ - brltty \ - dhcpcd \ - ncurses \ - dialog \ - findutils \ - grep \ - gettext \ - gettext-tools \ - sed \ - salixtools \ - slint-user-settings \ - sysvinit-scripts \ - pam \ - pam-krb5 " gettext "Installing the first software packages..." echo - for i in $Liste; do - PKG=$(find . |grep "${i}-[^-]*-[^-]*-[^-]*.t.z") + while read -r i; do + PKG=$(find . -name "*txz" |grep "/${i}-[^-]*-[^-]*-[^-]*$") [ "$DISPLAYNAME" ] && displaydescription $ISO/slint "$PKG" spkg --root $SLINT -qq --no-gtk-update-icon-cache -i "$PKG" 1>>$PKGLISTS/loginstall 2>>$PKGLISTS/loginstall - done + done < /bootstrap echo ) } @@ -1929,24 +1941,30 @@ } startupmode() { echo startupmode >>$INSTALL/log - # Choose the startup mode - gettext "Do you want to start Slint in a console or in graphical mode?" - echo - while true; do - gettext "Type c for console or g for graphical, or h for help then press Enter: " - clear_stdin - read -r ANSWER - case $(to_lower "$ANSWER") in - c) sed "/:initdefault:/s/.*/id:3:initdefault:/" $SLINT/etc/inittab > bof - mv bof $SLINT/etc/inittab - break;; - g) sed "/:initdefault:/s/.*/id:4:initdefault:/" $SLINT/etc/inittab > bof - mv bof $SLINT/etc/inittab - break;; - h) clear; hintloginmode;; - *) : - esac - done + SET=$(cat /tmp/set) + if [ ! "$SET" = core ]; then + # Choose the startup mode + gettext "Do you want to start Slint in a console or in graphical mode?" + echo + while true; do + gettext "Type c for console or g for graphical, or h for help then press Enter: " + clear_stdin + read -r ANSWER + case $(to_lower "$ANSWER") in + c) sed "/:initdefault:/s/.*/id:3:initdefault:/" $SLINT/etc/inittab > bof + mv bof $SLINT/etc/inittab + break;; + g) sed "/:initdefault:/s/.*/id:4:initdefault:/" $SLINT/etc/inittab > bof + mv bof $SLINT/etc/inittab + break;; + h) clear; hintloginmode;; + *) : + esac + done + else + sed "/:initdefault:/s/.*/id:3:initdefault:/" $SLINT/etc/inittab > bof + mv bof $SLINT/etc/inittab + fi } defaultlocale() { # Set the default locale for the installed system, @@ -2010,11 +2028,17 @@ } wireless() { [ -f /tmp/connected ] && return - echo wireless >>$INSTALL/log + IFACELIST=$(for dir in /sys/class/net/*/wireless; do + if [ -d "$dir" ]; then + basename "$(dirname "$dir")" + fi + done) + # If no wireless interface has been found, bail out + [ ! "$IFACELIST" ] && echo "no wireless interface" >> $INSTALL/log && return echo "wireless" >>$INSTALL/log echo gettext "An internet connection would allow to get software packages newer than -those shipped with the installer, but we couldn't get a wired connection." +those shipped in the ISO, but we couldn't get a wired connection." echo while true; do gettext "Should we try to get a wifi connection? Please type yes or no: " @@ -2022,7 +2046,7 @@ read -r ANSWER case $(to_lower "$ANSWER") in yes) break ;; - no) return 1 ;; + no) return ;; *) : esac done @@ -2033,11 +2057,6 @@ killall wpa_supplicant 2>/dev/null gettext "Scanning the wifi networks..." echo - IFACELIST=$(for dir in /sys/class/net/*/wireless; do - if [ -d "$dir" ]; then - basename "$(dirname "$dir")" - fi - done) for IFACE in $IFACELIST; do dhcpcd -k "$IFACE" 1>>$INSTALL/log 2>>$INSTALL/log ifconfig "$IFACE" down @@ -2048,7 +2067,7 @@ iwlist "$IFACE" scanning 1>$INSTALL/raw if grep -q "No scan results" $INSTALL/raw; then echo "No wifi networks found" >>$INSTALL/raw - return 1 + return fi echo "Scan of $IFACE done" >> $INSTALL/log echo >> $INSTALL/log @@ -2079,36 +2098,47 @@ done if [ ! -s $INSTALL/netlist ]; then gettext "No wifi network detected." - return 1 + return fi SSID="" + sort $INSTALL/netlist|uniq|cut -d'"' -f4 > /tmp/ssidlist + N=0 + rm -f /tmp/ssidlistnumbered + while read -r i; do + N=$((N+1)) + echo "$N $i" >> /tmp/ssidlistnumbered + done < /tmp/ssidlist while true; do - gettext "SSID (network name) or l to get a list: " - # backspace works only in the current line of input. + gettext "Network number or name (SSID) or l to get a list: " + # Backspace works only in the current line of input. setterm --linewrap off clear_stdin read -r ANSWER setterm --linewrap on + # Convert the network number to the corresponding SSID + NUMBER=$(grep "^$ANSWER " /tmp/ssidlistnumbered) + [ "$NUMBER" ] && ANSWER=$(echo "$NUMBER"|sed 's#.* ##') if [ "$(to_lower "$ANSWER")" = "l" ]; then - sort $INSTALL/netlist|uniq|cut -d'"' -f4 - elif grep -q \""$ANSWER"\" $INSTALL/netlist; then + cat /tmp/ssidlistnumbered + elif grep -q "$ANSWER" $INSTALL/netlist; then SSID="$ANSWER" - grep \""$SSID"\" $INSTALL/netlist|head -n 1 > $INSTALL/network + grep \""$SSID"\" $INSTALL/netlist|head -n 1 > "$INSTALL"/network break else gettext "Wrong SSID." echo gettext "Press Enter to try again or type q to give up: " read -r ANSWER - if [ "$(to_lower ANSWER)" = "q" ]; then - return 1 + if [ "$(to_lower "$ANSWER")" = "q" ]; then + return fi fi done . $INSTALL/network if [ $PSK -eq 1 ]; then while true; do - gettext "Passphrase: " + NETWORK=$(cat "$INSTALL"/network) + eval_gettext "Passphrase for the network \$SSID: " if [ "$DISPLAYPASS" = "no" ]; then stty -echo trap 'stty +echo' EXIT @@ -2120,7 +2150,7 @@ stty +echo fi if [ "$(to_lower "$ANSWER")" = "q" ]; then - return 1 + return fi if [ ${#ANSWER} -lt 8 ] || [ ${#ANSWER} -gt 63 ]; then gettext "A WPA passphrase should have between 8 and 63 characters" @@ -2140,7 +2170,7 @@ clear_stdin read -r ANSWER if [ "$(to_lower "$ANSWER")" = "q" ]; then - return 1 + return fi clear fi @@ -2155,7 +2185,7 @@ clear_stdin read -r ANSWER if [ "$(to_lower "$ANSWER")" = "q" ]; then - return 1 + return else killall wpa_supplicant 2>/dev/null continue @@ -2172,7 +2202,7 @@ mycmd="$?" if [ "$mycmd" -ne 0 ]; then echo "Wifi connection failed" >> $INSTALL/log - return 1 + return fi unset ANSWER while true; do @@ -2234,7 +2264,7 @@ stty +echo fi if [ "$(to_lower "$ANSWER")" = "q" ]; then - return 1 + return fi if [ ! "$ANSWER" ]; then gettext "A password is requested." @@ -2465,34 +2495,31 @@ done echo } -installfromweb() { - echo installfromweb >>$INSTALL/log - echo installfromweb >>$PKGLISTS/loginstall +install() { + echo install >>$INSTALL/log + echo install >>$PKGLISTS/loginstall FAILED="" - # The files whose name end in pkg contains paths to the packages in: - # isoslackpkg: the ISO (Slackware packages) - # isoslintpkg: the ISO (Slint packages) - # slintpkg: the Slint repository - # patchespkg: the Slackware repository in /patches - # - # If an internet connection is available we install: - # 1) from patchespkg packages with the same short name in isoslackpkg - # 2) from webslintpkg packages with the same shortname in isoslintpkg and - # packages added since the ISO was released (shortname not found in isoslint), - # 3) from isoslackpkg the packages not installed from patchespkg - # 4) from isoslintpkg the packages not installed from slintpkg, unless removed - # (short name not found in slintpkg) - # We will also upgrade already installed packages, case occurring. - # We won't handle removals and additions of packages in Slackware, as this - # occurs very rarely if ever in the life span of a Slackware release. - # If no internet connection is available we'll just install all packages from - # $ISO, but those already installed. - if [ ! -f /tmp/connected ]; then - FAILED=1 - return - else - [ "$DISPLAYNAME" ] && gettext "Preparing packages installation..." && echo - fi + # We assume that all packages in the ISO come from the Slint repository or + # or the Slackware64-15.0 repository + # We will install packages from the ISO unless: + # 1. We find a package with a different full name in the Slint repo and the + # package name in the ISO ends in slint.txz + # 2 We find a package with a different full name in the patches sub-directory + # of the Slackwkare repo and the package name in the ISO does not end in slint.txz + # We check the packages names in + # the file CHECKSUMS.md5 in the patches sub-directory of the Slacwkare repo + # the file CHECKSUMS.md5 of the Slacwkare repo + # the file CHECKSUM.md5 of the ISO + + # We do do not handle removals from the repositories since the ISO was built, + # nor packages migrated from Slackware to Slint since then. + # Packages are installed using spkg. If installed a package fails, abort the + # installation. + + unset CONNECTED + [ -f /tmp/connected ] && CONNECTED=1 + rm -f $PKGLISTS/spkgerror + [ "$DISPLAYNAME" ] && gettext "Preparing packages installation..." && echo cd $PKGLISTS || exit trytoget $SLINTREPO/CHECKSUMS.md5 [ "$FAILED" ] && return @@ -2500,298 +2527,132 @@ trytoget $PATCHESREPO/CHECKSUMS.md5 [ "$FAILED" ] && return mv CHECKSUMS.md5 PATCHESREPO.md5 - # Exclude the packages in /extra /voices and /locales not shipped in - # isoslintpkg below - grep "txz$" SLINTREPO.md5|grep -v -e "/extra/" -e "/voices/" -e "/locales/" |sed "s@[^.]*[.]@@" > reposlintpkg - while read -r PKG; do - basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//" >>reposlintbase - done patchespkg - while read -r PKG; do - basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//" >>patchesbase - done isoslintpkg - cp isoslintpkg isoslintpkg.orig - while read -r PKG; do - basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//" >>isoslintbase - done isoslackpkg - cp isoslackpkg isoslackpkg.orig - # list the Slackware packages in /patches at another version than in - # the ISO and remove them from the list isoslackpkg - while read -r PKG; do - BASE=$(basename "$PKG") - SHORT=$(echo "$BASE"|sed "s/-[^-]*-[^-]*-[^-]*$//") - if grep -q "^${SHORT}$" patchesbase && ! grep -q "$BASE" patchespkg; then - sed -n "/${SHORT}-[^-]*-[^-]*-[^-]*$/p" patchespkg >>webpatchespkg - sed "/${SHORT}-[^-]*-[^-]*-[^-]*$/d" isoslackpkg >bof - mv bof isoslackpkg - fi - done >webslintpkg - sed "/${SHORT}-[^-]*-[^-]*-[^-]*$/d" isoslintpkg >bof - mv bof isoslintpkg - fi - done >webslintpkg - fi - done bof - mv bof isoslintpkg - fi - done < isoslintpkg - # - #echo "Done computing the packages lists, now install the packages" - # First the packages you will get from a remote repository - if [ -s webslintpkg ]; then - echo - while read -r PKG; do - PKGBASE=${PKG%.t?z} - if [ -f $SLINT/var/lib/pkgtools/packages/"$PKGBASE" ]; then - echo "$PKG is already installed" >>$PKGLISTS/loginstall - continue - fi - if echo "$PKG"|grep -q "libreoffice-l10n"; then - continue - fi - if echo "$PKG"|grep -q "libreoffice-help"; then - continue - fi - echo "fetching $PKG" >>$PKGLISTS/loginstall - BASE=$(basename "$PKG") - trytoget $SLINTREPO/slint/"$BASE" - if [ "$FAILED" ]; then - rm -f -- *txz - return - fi - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint "$BASE" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$BASE" - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - FAILED=1 - rm -f -- *txz - return + while read -r PKGSHORT; do + # get the full name of the package in the ISO + PKGISO=$(find "$ISO"/slint -name "*txz" |grep "/${PKGSHORT}-[^-]*-[^-]*-[^-]*$") + BASEISO=$(basename "$PKGISO") + if echo "$PKGISO"|grep -q "slint.txz"; then + # the package comes from the Slint repository + PKGSLINT=$(grep "/${PKGSHORT}-[^-]*-[^-]*-[^-]*txz$" SLINTREPO.md5|sed 's#.* ..##') + BASESLINT=$(basename "$PKGSLINT") + if [ "$CONNECTED" ] && [ "$BASESLINT" ] && [ ! "$BASESLINT" = "$BASEISO" ]; then +echo "BASELINT=$BASESLINT but BASEISO=$BASEISO so get $BASESLINT from the repository" >>$PKGLISTS/loginstall + trytoget $SLINTREPO/"$PKGSLINT" + # If we can't get a package from the remote repository, install the one in the ISO + if [ "$FAILED" ]; then + rm -f -- *txz +echo "trytoget $SLINTREPO/$PKGSLINT failed, so install $BASEISO from the ISO" >>$PKGLISTS/loginstall + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return + else +echo "install $BASESLINT from the repository" >>$PKGLISTS/loginstall + # Install the package from the Slint repository + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$BASESLINT" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return + fi + else +echo "install $BASEISO from the ISO" >>$PKGLISTS/loginstall + # Install the package from the ISO + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGSLINT" && return fi - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall - rm -f -- *txz - done >$PKGLISTS/loginstall - spkg -i --root $SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors - rm -f -- *txz - FAILED=1 - return + else + # the package comes from the Slackware repository + PKGSLACK=$(grep "/${PKGSHORT}-[^-]*-[^-]*-[^-]*txz$" PATCHESREPO.md5|grep /packages/|sed 's#.*[.]/##') + BASESLACK=$(basename "$PKGSLACK") + if [ "$CONNECTED" ] && [ "$BASESLACK" ] && [ ! "$BASESLACK" = "$BASEISO" ]; then +echo "BASESLACK=$BASESLACK and BASEISO=$BASEISO so get it from the repository" >>$PKGLISTS/loginstall + trytoget "$PATCHESREPO"/"$PKGSLACK" + if [ "$FAILED" ]; then + rm -f -- *txz + # If we can't get a package from the remote repository, install the one in the ISO +echo "tryto get $PATCHESREPO/$PKGSLACK failed, so install $BASEISO from the ISO" >>$PKGLISTS/loginstall + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return + else +echo "install $BASESLACK from the repository" >>$PKGLISTS/loginstall + # Install the package from the /patches directory of the Slackware repository + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$BASESLACK" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return + fi + else - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall - rm -f -- *txz +echo "install $BASEISO from the ISO" >>$PKGLISTS/loginstall + # Install the package from the ISO + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGSLACK" && return fi fi - PKG=$(grep "libreoffice-help_${lo}-*t?z" webslintpkg) - if [ "$PKG" ]; then - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - BASE=$(basename "$PKG") - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint/locales "$BASE" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg -i --root $SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors + done < /"$SET" + PKGISO=$(find "$ISO"|grep "libreoffice-l10n-${lo}-.*txz") + BASEISO=$(basename "$PKGISO") + if [ "$PKGISO" ]; then + PKGSLINT=$(grep "/${PKGSHORT}-[^-]*-[^-]*-[^-]*txz$" SLINTREPO.md5|sed 's#.* ..##') + BASESLINT=$(basename "$PKGSLINT") + if [ "$CONNECTED" ] && [ "$BASESLINT" ] && [ ! "$BASELINT" = "$BASEISO" ]; then + trytoget $SLINTREPO/"$PKGSLINT" + # If we can't get a package from the remote repository, install the one in the ISO + if [ "$FAILED" ]; then rm -f -- *txz - FAILED=1 - return + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return else - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall + # Install the package from the Slint repository + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$BASESLINT" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return fi + else + # Install the package from the ISO + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGSLINT" && return fi fi - if [ -s webpatchespkg ]; then - echo - while read -r PKG; do - BASE=$(basename "$PKG") - if [ -f $SLINT/var/lib/pkgtools/packages/"$BASE" ]; then - echo "$PKG is already installed" >>$PKGLISTS/loginstall - continue - fi - echo "fetching $PKG" >>$PKGLISTS/loginstall - trytoget $PATCHESREPO/"$PKG" + PKGISO=$(find "$ISO"|grep "aspell-${asp}-.*txz") + BASEISO=$(basename "$PKGISO") + if [ "$PKGISO" ]; then + PKGSLACK=$(grep "/${PKGSHORT}-[^-]*-[^-]*-[^-]*txz$" PATCHESREPO.md5|grep /packages/|sed 's#.*[.]/##') + BASESLACK=$(basename "$PKGSLACK") + if [ "$CONNECTED" ] && [ "$BASESLACK" ] && [ ! "PKGSLACK" = "$BASEISO" ]; then + trytoget "$PATCHESREPO"/"$PKGSLACK" if [ "$FAILED" ]; then rm -f -- *txz - return - fi - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - PKGBASE=${PKG%.t?z} - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint "$BASE" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$BASE" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - SPKGERROR=$(cat $PKGLISTS/spkgerror) - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - FAILED=1 - rm -f -- *txz - return + # If we can't get a package from the remote repository, install the one in the ISO + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return + else + # Install the pacakge from the /patches dun-dircetory of the Slackware repository + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$BASESLACK" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGISO" && return fi - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall - rm -f -- *txz - done - BASE=$(basename "$PKG") - SHORT=$(echo "$BASE"|sed "s/-[^-]*-[^-]*-[^-]*$//") - if [ "$SHORT" = "kernel-huge" ]; then - continue - fi - PKGBASE=${PKG%.t?z} - if [ -f $SLINT/var/lib/pkgtools/packages/"$PKGBASE" ]; then - echo "$PKG is already installed" >>$PKGLISTS/loginstall - continue - fi - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint "$BASE" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >$PKGLISTS/installerror - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerror - gettext "Slint installation can't continue" >>$PKGLISTS/installerror - echo >>$PKGLISTS/installerrors - backtomenu "$(cat $PKGLISTS/installerror)" - else - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall - fi - done - while read -r PKG; do - # the variable $lo is set according to the language/region by SeTlocales - if echo "$PKG"|grep -q locales/; then - continue - fi - PKGBASE=${PKG%.t?z} - if [ -g $SLINT/var/lib/pkgtools/packages/"$PKGBASE" ]; then - echo "$PKG is already installed" >>$PKGLISTS/loginstall - continue - fi - BASE=$(basename "$PKG") - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - PKGBASE=${PKG%.t?z} - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint "$BASE" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >$PKGLISTS/installerror - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerror - gettext "Slint installation can't continue" >>$PKGLISTS/installerror - echo >>$PKGLISTS/installerrors - backtomenu "$(cat $PKGLISTS/installerror)" + else - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall - fi - done >$PKGLISTS/loginstall - spkg -i --root $SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + # Install the package from the ISO + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors - FAILED=1 - return - else - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall - fi - fi - PKG=$(find $ISO/slint/locales -name "libreoffice-help-${lo}-*t?z") - if [ "$PKG" ]; then - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - BASE=$(basename "$PKG") - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint/locales "$BASE" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg -i --root $SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors - FAILED=1 - return - else - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall - fi - fi - PKG=$(find $ISO/slint/locales -name "aspell-${asp}-*t?z") - if [ "$PKG" ]; then - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - BASE=$(basename "$PKG") - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint/locales "$BASE" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg -i --root $SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors - FAILED=1 - return - else - echo "Installation of $PKG succeeded." >>$PKGLISTS/loginstall + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGSLACK" && return fi fi } @@ -2807,79 +2668,23 @@ find $SLINT/var/lib/pkgtools/packages|while read -r i; do basename "$i"|sed "s/-[^-]*-[^-]*-[^-]*$//" >> $PKGLISTS/installed; done - find $ISO/slint/*txz|while read -r PKG; do - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint "$PKG" - echo "installing $PKG" >>$PKGLISTS/loginstall - spkg --root=$SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + while read -r PKGSHORT; do + PKGISO=$(find "$ISO"/slint -name "*txz" |grep "/${PKGSHORT}-[^-]*-[^-]*-[^-]*$") + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - clear - eval_gettext "Installation of \$PKG failed for this reason:" - echo - echo "$SPKGERROR" - gettext "Therefore, Slint installation is not possible." - echo - gettext "Check the integrity of the installation media." - echo - exit - fi - done - PKG=$(find $ISO/slint/locales -name "libreoffice-l10n-${lo}-*t?z") - if [ "$PKG" ]; then - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - if ! grep -q "^${SHORT}$" $PKGLISTS/installed; then - echo "installing $PKG" >>$PKGLISTS/loginstall - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint/locales "$PKG" - spkg -i --root=$SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors - return - fi - fi - fi - PKG=$(find $ISO/slint/locales -name "libreoffice-help-${lo}-*t?z") - if [ "$PKG" ]; then - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - if ! grep -q "^${SHORT}$" $PKGLISTS/installed; then - echo "installing $PKG" >>$PKGLISTS/loginstall - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint/locales "$PKG" - spkg -i --root=$SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors - return - fi - fi - fi - PKG=$(find $ISO/slint/locales -name "aspell-${asp}-*t?z") - if [ "$PKG" ]; then - SHORT=$(basename "$PKG"|sed "s/-[^-]*-[^-]*-[^-]*$//") - if ! grep -q "^${SHORT}$" $PKGLISTS/installed; then - echo "installing $PKG" >>$PKGLISTS/loginstall - [ "$DISPLAYNAME" ] && displaydescription $ISO/slint/locales "$PKG" - spkg -i --root=$SLINT -qq --no-ldconfig --no-gtk-update-icon-cache "$PKG" 2>$PKGLISTS/spkgerror - mycmd="$?" - if [ "$mycmd" -ne 0 ]; then - SPKGERROR=$(cat $PKGLISTS/spkgerror) - echo - eval_gettext "Installation of \$PKG failed for this reason:" >>$PKGLISTS/installerrors - echo >>$PKGLISTS/installerrors - echo "$SPKGERROR" >>$PKGLISTS/installerrors - return - fi - fi - fi + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGSLINT" && return + done >$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGSLINT" && return + PKGISO=$(find "$ISO"|grep "aspell-${asp}-.*txz") + [ "$DISPLAYNAME" ] && description "$PKGISO" + spkg --root $SLINT -qq --no-gtk-update-icon-cache --no-ldconfig -i --install-new --reinstall "$PKGISO" 1>>$PKGLISTS/loginstall 2>$PKGLISTS/spkgerror + mycmd="$?" + [ "$mycmd" -ne 0 ] && displayspkgerror "$PKGSLINT" && return } bindrootslint() { echo bindrootslint >>$INSTALL/log @@ -2900,14 +2705,16 @@ # in graphical desktops. LOGIN=$(cat $INSTALL/firstuserlogin) if [ ! -f /tmp/noespeakup ]; then - (cd $SLINT/home/"$LOGIN"/.config/autostart || exit - sed s/Hidden=true/Hidden=false/ startorca.desktop > bof - mv bof startorca.desktop - cat $SLINT/usr/share/orca/orcaprofile >> $SLINT/home/"$LOGIN"/.profile - ) - chroot $SLINT chown "${LOGIN}": \ - /home/"$LOGIN"/.config/autostart/startorca.desktop - chroot $SLINT chown "${LOGIN}": /home/"$LOGIN"/.profile + if [ -f $SLINT/usr/share/orca/orcaprofile ]; then + (cd $SLINT/home/"$LOGIN"/.config/autostart || exit + sed s/Hidden=true/Hidden=false/ startorca.desktop > bof + mv bof startorca.desktop + cat $SLINT/usr/share/orca/orcaprofile >> $SLINT/home/"$LOGIN"/.profile + ) + chroot $SLINT chown "${LOGIN}": \ + /home/"$LOGIN"/.config/autostart/startorca.desktop + chroot $SLINT chown "${LOGIN}": /home/"$LOGIN"/.profile + fi fi # console and Xkeybord settings KMAP="$(cat /tmp/Pkeymap)" @@ -2935,84 +2742,93 @@ # convey these settings in the installed system. sh /usr/sbin/setup/bp2cf -u -p "$brltty" -f $SLINT/etc/brltty.conf fi - # Set the graphical session - for filename in "$SLINT"/usr/share/xsessions/*; do - ! grep -q safe "$filename" && echo "${filename%.*}"|sed "s@.*/@@" - done > listesessions - while true; do - gettext "Please select a default desktop among those listed below. + SET=$(cat /tmp/set) + if [ ! "$SET" = core ]; then + # Set the graphical session + for filename in "$SLINT"/usr/share/xsessions/*; do + ! grep -q safe "$filename" && echo "${filename%.*}"|sed "s@.*/@@" + done > listesessions + while true; do + gettext "Please select a default desktop among those listed below. mate is the most accessible with a screen reader." + echo + gettext "i3 is also accessible. If you need speech, preferably type i38 before starting it." + echo + cat listesessions + gettext "Your choice: " + clear_stdin + read -r CHOICE + [ ! "$CHOICE" ] && clear && continue + session=$(echo "$CHOICE"|tr '[:upper:]' '[:lower:]') + grep -q "$session" listesessions && break + clear + eval_gettext "\$session is not an available desktops." + echo + sleep 1 + clear + done + eval_gettext "\$session has been chosen." echo - gettext "i3 is also accessible. If you need speech, preferably type i38 before starting it." - echo - cat listesessions - gettext "Your choice: " - clear_stdin - read -r CHOICE - [ ! "$CHOICE" ] && clear && continue - session=$(echo "$CHOICE"|tr '[:upper:]' '[:lower:]') - grep -q "$session" listesessions && break - clear - eval_gettext "\$session is not an available desktops." - echo - sleep 1 - clear - done - eval_gettext "\$session has been chosen." - echo - echo '[Desktop]' > $SLINT/home/"$LOGIN"/.dmrc - echo "Session=$session" >> $SLINT/home/"$LOGIN"/.dmrc - case $session in - i3) xinit=i3;; - lxqt) xinit=lxqt;; - xfce) xinit=xfce;; - mate) xinit=mate;; - wmaker) xinit=wmaker;; - fvwm) xinit=fvwm2;; - esac - # This is for startx - cp $SLINT/etc/X11/xinit/xinitrc.$xinit $SLINT/home/"$LOGIN"/.xinitrc - cp $SLINT/etc/X11/xinit/xinitrc.$xinit $SLINT/home/"$LOGIN"/.xsession - - # We need to run setxkbmap just after having started X, so that $DISPLAY - # be set. But in some cases that is easier to do live than when building - # the window manager or desktop. - case $session in - lxqt|mate|i3|xfce) (cd $SLINT/home/"$LOGIN" || exit - sed '/exec/i \ - /usr/bin/setxkbmap' .xinitrc > bof - mv bof .xinitrc);; - *) (cd $SLINT/home/"$LOGIN" || exit - sed '/DESKTOP_SESSION/i \ - /usr/bin/setxkbmap' .xinitrc > bof - mv bof .xinitrc) - esac - chroot $SLINT chown "$LOGIN": /home/"$LOGIN"/.dmrc - chroot $SLINT chown "$LOGIN": /home/"$LOGIN"/.xsession - chroot $SLINT chown "$LOGIN": /home/"$LOGIN"/.xinitrc + echo '[Desktop]' > $SLINT/home/"$LOGIN"/.dmrc + echo "Session=$session" >> $SLINT/home/"$LOGIN"/.dmrc + case $session in + i3) xinit=i3;; + lxqt) xinit=lxqt;; + xfce) xinit=xfce;; + mate) xinit=mate;; + wmaker) xinit=wmaker;; + fvwm) xinit=fvwm2;; + esac + # This is for startx + cp $SLINT/etc/X11/xinit/xinitrc.$xinit $SLINT/home/"$LOGIN"/.xinitrc + cp $SLINT/etc/X11/xinit/xinitrc.$xinit $SLINT/home/"$LOGIN"/.xsession + + # We need to run setxkbmap just after having started X, so that $DISPLAY + # be set. But in some cases that is easier to do live than when building + # the window manager or desktop. + case $session in + lxqt|mate|i3|xfce) (cd $SLINT/home/"$LOGIN" || exit + sed '/exec/i \ + /usr/bin/setxkbmap' .xinitrc > bof + mv bof .xinitrc);; + *) (cd $SLINT/home/"$LOGIN" || exit + sed '/DESKTOP_SESSION/i \ + /usr/bin/setxkbmap' .xinitrc > bof + mv bof .xinitrc) + esac + chroot $SLINT chown "$LOGIN": /home/"$LOGIN"/.dmrc + chroot $SLINT chown "$LOGIN": /home/"$LOGIN"/.xsession + chroot $SLINT chown "$LOGIN": /home/"$LOGIN"/.xinitrc + fi echo "Running update_all. Please be patient..." cp /sbin/update-all $SLINT/sbin chroot $SLINT chmod 0755 /usr/sbin/update-all chroot $SLINT /sbin/update-all # in auto partitioning mode an ESP is always created. In manual partitioning mode if an ESP - # exists in the same drive as the rott partition its path is set in $INSTALL/path + # exists in the same drive as the root partition its path is set in $INSTALL/path if [ "$AUTO" ] || [ -f $INSTALL/esppath ]; then mkdir -p $SLINT/boot/efi # grub will need to access the ESP chroot $SLINT mount /boot/efi mkdir -p $SLINT/boot/efi/EFI/BOOT fi - # set lightdm by default as graphical login manager - chmod 755 $SLINT/usr/sbin/lightdm - echo \ -"if [ -x /usr/sbin/lightdm ]; then - if [ -f /var/log/lightdm/startlightdm.log ]; then - mv /var/log/lightdm/startlightdm.log /var/log/lightdm/startlightdm.log.old - fi - exec /usr/sbin/lightdm 2>/var/log/lightdm/startlightdm.log -fi" > $SLINT/etc/rc.d/rc.4.local - chmod 755 $SLINT/etc/rc.d/rc.4.local - echo + if [ ! "$SET" = core ]; then + # set lightdm by default as graphical login manager + chmod 755 $SLINT/usr/sbin/lightdm + echo \ + "if [ -x /usr/sbin/lightdm ]; then + if [ -f /var/log/lightdm/startlightdm.log ]; then + mv /var/log/lightdm/startlightdm.log /var/log/lightdm/startlightdm.log.old + fi + exec /usr/sbin/lightdm 2>/var/log/lightdm/startlightdm.log + fi" > $SLINT/etc/rc.d/rc.4.local + chmod 755 $SLINT/etc/rc.d/rc.4.local + fi + cp /10.slint-appearance.gschema.override $SLINT/usr/share/glib-2.0/schemas/ || exit + if [ ! -f /tmp/noespeakup ]; then + sed 's#^screen-reader=false#screen-reader=true#' /10.slint-appearance.gschema.override > bof + mv bof $SLINT/usr/share/glib-2.0/schemas/10.slint-appearance.gschema.override + fi } mountefivarsandmovehome(){ [ -d /sys/firmware/efi/efivars ] && chroot $SLINT mount -t efivarfs none /sys/firmware/efi/efivars @@ -3099,6 +2915,8 @@ rm -f /tmp/u echo "coyping /tmp in $SLINT/var/log/$INSTALL" >>$INSTALL/log cp -r /tmp $SLINT/var/log/$INSTALL/ + echo "remove packages stored in $PKGLISTS" >>$INSTALL/log + rm -f "$PKGLISTS"/*.txz mv $PKGLISTS $SLINT/var/log/$INSTALL/ echo "copying installation scripts in $SLINT/var/log/$INSTALL/installation-scripts" >>$INSTALL/log mkdir -p $SLINT/var/log/$INSTALL/installation-scripts