Questa volta vorrei portare alla vostra attenzione uno script che ho preparato per compilare in sequenza ordinata una serie di slackbuild, ovviamente non prescinde dal lavoro del packager che dovrà comunque preparare le directory con dentro i vari Slackbuild, slack-desc, sorgenti (opzionale), ecc.
Questo script si offre però di facilitare il lavoro in quanto non richiede al packager di lanciare manualmente ogni slackbuild e poi installare, se necessario, i pacchetti creati uno ad uno per soddisfare di volta in volta le dipendenze del pacchetto successivo.
Prendiamo ad esempio mplayer, che per come lo si compila di solito su slacky ha una bella lista di dipendenze, con questo script basterà creare un file ".queue" e mettere in sequenza i pacchetti così come dovranno essere compilati. Poi bisognerà organizzare una directory contenente una subdir per ogni pacchetto che si vorrà creare, dentro ogni subdir andremo a mettere tutti i files necessari alla compilazione di quel pacchetto (così come sono nel repo di slacky), ritoccheremo lo slackbuild e saremo pronti a lanciare lo script.
Una volta finita la compilazione ci ritroveremo in $OUTPUT i pacchetti creati, e nella dir principale un log per ogni pacchetto con tutte le fasi della compilazione.
Questo è lo script multibuilder:
Codice: Seleziona tutto
#! /bin/bash
# multiBuilder - script che consente l'esecuzione di una serie di SlackBuild
# contenuti in varie subdirectory della dir in cui viene
# lanciato. Consente la modifica al volo di alcuni parametri
#
# Copyright 2010 Danilo 'danix' Macrì < danix@danixland.net >
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for any purpose
# with or without fee is hereby granted, provided that the above copyright
# notice and this permission notice appear in all copies.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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
# AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS 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.
#
### VARIABILI
CWD=$(pwd)
E_QUEUEFILE_UNKNOWN=71
E_NO_QUEUEFILE_FOUND=72
E_QUEUEFILE_DONT_EXISTS=73
E_NO_SB_OR_SD=74
E_QUEUE_NO_DIR=75
### FUNZIONI
check_reqs ()
{
if [ ! -r ./$PROGRAM.SlackBuild ] || [ ! -r ./slack-desc ];then
echo "DIRECTORY $PROGRAM DOESN'T CONTAIN (AT LEAST) A SLACKBUILD SCRIPT"
echo "AND A SLACK-DESC FILE. CANNOT CONTINUE - EXITING"
exit $E_NO_SB_OR_SD
fi
}
### se esiste un argomento prendo quello come file coda, altrimenti
### controllo nella directory corrente, oppure esco con errore.
if [ ! -z $1 ];then
if [ -r $1 ];then
if [[ $1 == *".queue" ]] && [[ -r $1 ]];then
echo "Using $1 as queue file"
. $1
else
echo "FILE $1 UNKNOWN OR NOT READABLE - QUEUE FILES MUST END WITH .queue - EXITING"
exit $E_QUEUEFILE_UNKNOWN
fi
else
echo "QUEUE FILE $1 DOES NOT EXISTS - EXITING"
exit $E_QUEUEFILE_DONT_EXISTS
fi
elif [ -r $CWD/PKGS.queue ];then
QUEUEFILE=$CWD/PKGS.queue
echo "using $CWD/PKGS.queue as queue file"
. $QUEUEFILE
else
echo "QUEUE FILE NOT FOUND - EXITING"
exit $E_NO_QUEUEFILE_FOUND
fi
### verifico che tutti i pacchetti in coda abbiano una directory
### propria, all'interno di questa ci siano: uno slackbuild e uno
### slack-desc come requisito minimo.
### Se è tutto ok lancio gli SlackBuild
for PROGRAM in $PROGRAMS;
do
echo "Checking directory $PROGRAM"
if [ -d $PROGRAM ];then
cd $PROGRAM
check_reqs
sleep 2
ARCH=$ARCH VERSION=$VERSION BUILD=$BUILD sh $PROGRAM.SlackBuild |tee $CWD/$PROGRAM-sb.log
cd ..
else
echo "$PROGRAM IS NOT A DIRECTORY - EXITING"
exit $E_QUEUE_NO_DIR
fi
done
Codice: Seleziona tutto
#! /bin/bash
# multiBuilder - script che consente l'esecuzione di una serie di SlackBuild
# contenuti in varie subdirectory della dir in cui viene
# lanciato. Consente la modifica al volo di alcuni parametri
#
# Copyright 2010 Danilo 'danix' Macrì < danix@danixland.net >
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software for any purpose
# with or without fee is hereby granted, provided that the above copyright
# notice and this permission notice appear in all copies.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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
# AUTHORS AND COPYRIGHT HOLDERS AND THEIR CONTRIBUTORS 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.
#
### PKGS.queue - in questo script vengono impostati in sequenza i pacchetti da
### compilare nell'ordine in cui sono scritti.
### Vengono impostate anche le variabili di compilazione.
### EXAMPLE
### La variabile PROGRAMS contiene i nomi dei pacchetti da compilare
#PROGRAMS=" \
# sb01 \
# sb02 \
# sb03 \
# sb04 \
# sb05 "
### VARIABILI
### Si tratta delle stesse variabili presenti negli SB di Slacky.
### Queste variabili hanno valore rispetto a quelle negli SB.
ARCH=1486
VERSION=1555
BUILD=3