circa una settimana fa mi è venuta un'idea di fare uno script che effettuasse un'installazione della Slackware in una directory. Insomma che preparasse un ambiente di chroot.
Lo script l'ho realizzato ma vorrei sottoporlo a voi per un eventuale miglioramento. Ho voluto realizzarlo in quanto utlizzando lo script pubblicato su slackworld
(era inizialmente per slackware 11.0, ma lo adattai alla 13.1) quando arrivava all'installazione non finiva mai. Infatti i pacchetti continuavano l'installazione all'infinito. Secondo me era derivato dal fatto che lo script effettuava un
Codice: Seleziona tutto
installpkg -root $CHROOTDIR *.t?z
Il mio script invece installa il tutto come nell'installer di slackware (sezione per sezione).
Ecco lo script:
Codice: Seleziona tutto
#!/bin/sh
# Chroot Environment AutoBuilder
# Copyright (C) 2010 Luca De Pandis aka atomix600
# All rights reserved.
# Contact me @ Slacky.eu ( http://www.slacky.eu )
#
# Heavily based on the Tom Newsom's Chroot Howto ( http://slackworld.berlios.de/2007/chroot_howto.html )
#
# Thanks to conraid, zoros and metrofox for improvements
#
# 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.
# Exit on most errors
set -e
# Set variables
SLACKVERSION=${SLACKVERSION:-13.1}
PKGDIR=${PKGDIR:-/tmp/Slack_$SLACKVERSION}
SERIESDIR=${SERIESDIR:-"a ap d e f k kde kdei l n t tcl x xap y"}
CHROOTDIR=${CHROOTDIR:-/mnt/chroot}
MIRROR=${MIRROR:-ftp.slackware.at}
KDELANG=${KDELANG:-it} # Change this value for different language
PKGA=${PKGA:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/a/*.t?z}
PKGAP=${PKGAP:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/ap/*.t?z}
PKGD=${PKGD:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/d/*.t?z}
PKGE=${PKGE:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/e/*.t?z}
PKGF=${PKGF:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/f/*.t?z}
PKGK=${PKGK:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/k/*.t?z}
PKGKDE=${PKGKDE:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/kde/*.t?z}
PKGKDEI=${PKGKDEI:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/kdei/*$KDELANG*.t?z}
PKGL=${PKGL:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/l/*.t?z}
PKGN=${PKGN:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/n/*.t?z}
PKGT=${PKGT:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/t/*.t?z}
PKGTCL=${PKGTCL:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/tcl/*.t?z}
PKGX=${PKGX:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/x/*.t?z}
PKGXAP=${PKGXAP:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/xap/*.t?z}
PKGY=${PKGY:-ftp://$MIRROR/slackware-$SLACKVERSION/slackware/y/*.t?z}
PATCHES=${PATCHES:-ftp://$MIRROR/slackware-$SLACKVERSION/patches/packages/*.t?z}
PATCHDIR=${PATCHDIR:-patches}
HOSTFILE=${HOSTFILE:-/etc/hosts}
FSTABFILE=${FSTABFILE:-/etc/fstab}
SPACE_REQUIRED=7 # GByte
# Set Functions
check_space_on_hd()
{
SPACE=$(df -P -m $PKGDIR 2> /dev/null | tr -s ' ' | cut -f4 -d' ' | tail -1)
if [ -z "$SPACE" ]; then
echo 2 #error
elif [ $(expr $SPACE - $SPACE_REQUIRED) -gt 0 ]; then
echo 1
else
echo 0
fi
}
connection_check()
{
messaggio="[ERROR] This script was not be able to connect to the mirror. Try later or check your internet connection."
if [ -z "$ftp" ]; then
ping -c5 ftp.slackware.at > /dev/null 2>&1
if [ $? != 0 ]; then
echo $messaggio
exit 1
fi
fi
}
echo "+----------------------------------+"
echo "| StArTiNg ChRoOt AuToBuIlDeR... |"
echo "+----------------------------------+"
echo "This script will install Slackware $SLACKVERSION in a chroot environment."
echo "The estimated time for completion of the transaction is 80 minutes,"
echo "but it may vary depending on the configuration of the computer."
echo "[WARNING] you'll need about ${SPACE_REQUIRED} GiB in / to run this script [WARNING]"
echo "[WARNING] it's recommended a fast internet connection for download [WARNING]"
# Remove directories if that is necessary
echo -n "Checking for directories... "
rm -rf $PKGDIR
rm -rf $CHROOTDIR
mkdir -p $PKGDIR
echo "DONE"
# Check available space on hard disk
echo -n "Checking for space... "
CHECK=$(check_space_on_hd)
if [ $CHECK = 0 -o $CHECK = 2 ]; then
echo "FAIL. There is NOT enough space."
else
echo "OK"
fi
# Ping Mirror
echo -n "Checking for mirror... "
CHECK=$(connection_check)
echo "OK"
# Download Slackware Packages
cd $PKGDIR
mkdir -p $SERIESDIR
echo "Downloading packages from mirror..."
echo -n "Downloading Series A... "
cd $PKGDIR/a
wget -c $PKGA > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series AP... "
cd $PKGDIR/ap
wget -c $PKGAP > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series D... "
cd $PKGDIR/d
wget -c $PKGD > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series E... "
cd $PKGDIR/e
wget -c $PKGE > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series F... "
cd $PKGDIR/f
wget -c $PKGF > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series K... "
cd $PKGDIR/k
wget -c $PKGK > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series KDE... "
cd $PKGDIR/kde
wget -c $PKGKDE > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series KDEI... "
cd $PKGDIR/kdei
wget -c $PKGKDEI > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series L... "
cd $PKGDIR/l
wget -c $PKGL > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series N... "
cd $PKGDIR/n
wget -c $PKGN > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series T... "
cd $PKGDIR/t
wget -c $PKGT > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series TCL... "
cd $PKGDIR/tcl
wget -c $PKGTCL > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series X... "
cd $PKGDIR/x
wget -c $PKGX > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series XAP... "
cd $PKGDIR/xap
wget -c $PKGXAP > /dev/null 2>&1
echo "DONE"
echo -n "Downloading Series Y... "
cd $PKGDIR/y
wget -c $PKGY > /dev/null 2>&1
echo "DONE"
echo "Slackware $SLACKVERSION was downloaded successfully..."
# Prepare your Chroot Environment
echo "Starting Installation..."
cd $PKGDIR
mkdir -p $CHROOTDIR
# Install packages in chroot
echo -n "Installing series A... "
installpkg -root $CHROOTDIR a/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series AP... "
installpkg -root $CHROOTDIR ap/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series D... "
installpkg -root $CHROOTDIR d/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series E... "
installpkg -root $CHROOTDIR e/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series F... "
installpkg -root $CHROOTDIR f/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series K... "
installpkg -root $CHROOTDIR k/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series KDE... "
installpkg -root $CHROOTDIR kde/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series KDEI... "
installpkg -root $CHROOTDIR kdei/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series L... "
installpkg -root $CHROOTDIR l/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series N... "
installpkg -root $CHROOTDIR n/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series T... "
installpkg -root $CHROOTDIR t/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series TCL... "
installpkg -root $CHROOTDIR tcl/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series X... "
installpkg -root $CHROOTDIR x/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series XAP... "
installpkg -root $CHROOTDIR xap/*.t?z > /dev/null 2>&1
echo "DONE"
echo -n "Installing series Y... "
installpkg -root $CHROOTDIR y/*.t?z > /dev/null 2>&1
echo "DONE"
echo "Slackware $SLACKVERSION was installed successfully"
# Download patches
echo -n "Downloading patches... "
mkdir -p $PATCHDIR
(cd $PATCHDIR
wget -c $PATCHES > /dev/null 2>&1)
echo "DONE"
# Install patches
echo -n "Patching Slackware... "
ROOT=$CHROOTDIR upgradepkg --install-new patches/*.t?z > /dev/null 2>&1
echo "DONE"
# Copy host name and host partition table
echo -n "Configuring hostname and partition table... "
cp -a $HOSTFILE $CHROOTDIR/etc/hosts
cp -a $FSTABFILE $CHROOTDIR/etc/fstab
echo "DONE"
# Remove Slackware Packages
echo -n "Cleaning Cache... "
cd /tmp
rm -r $PKGDIR
echo "DONE"
echo "Finish!!!"
echo "+----------------------------------+"
echo "| Thank you for using my builder |"
echo "+----------------------------------+"
echo "#####################################################"
echo " If you want to start this chroot environment:"
echo " mount -o bind /proc $CHROOTDIR/proc"
echo " mount -o bind /dev $CHROOTDIR/dev"
echo " chroot $CHROOTDIR /bin/bash"
echo "#####################################################"
EDIT: Ecco lo script con alcuni piccoli accorgimenti.