SlackBuild: best practices

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
evaimitico
Linux 1.x
Linux 1.x
Messaggi: 140
Iscritto il: mer 16 giu 2004, 0:00

SlackBuild: best practices

Messaggio da evaimitico »

Ciao a tutti!
ero curioso di conoscere quali erano le abitudini/miglior pratiche di tutti noi nell'uso degli slackbuild..

Per esempio partendo dagli SlackBuild di NoCat e di Sukko, ne ho fatto uno mio
che fosse in grado di rilevare da solo i parametri più importanti, per esempio nome,
versione ...

Codice: Seleziona tutto

#!/bin/sh

# Get the current and temporary directories
CWD=`pwd`

if [ "$TMP" = "" ]; then
 TMP=/tmp/pkg
fi

NAME=`basename $0 .SlackBuild`
PKG=$TMP/package-$NAME

SUFFIX=".tar.gz"
VERSION=`basename \`ls $NAME*$SUFFIX\` $SUFFIX  | awk --field-separator - '{print $NF}'`
if [ ! -x SLCKARCH ] ; then
	SLCKARCH="pentium-m"
fi
BUILD=1fab

# if tarname is different from program name
#TNAME=$NAME-src
#SOURCESLCKARCH=$TNAME-$VERSION
SOURCESLCKARCH=$NAME-$VERSION


# Set up working directories
if [ ! -d $TMP ]; then
 mkdir -p $TMP 
fi
if [ ! -d $PKG ]; then
 mkdir -p $PKG
fi


# Set compilation flags according to the architecture
if [ ! -x SLCKFLAGS ] ; then
case $SLCKARCH in
        "i686")
                SLCKFLAGS="-O2 -march=i686"
                ;;
        "celeron")
                SLCKFLAGS="-Os -march=pentium3"
                ;;
        "pentium3")
                SLCKFLAGS="-O2 -march=pentium3"
                ;;
        "pentium-m")
                SLCKFLAGS="-O2 -march=pentium-m"
                ;;
        "pentium4")
                SLCKFLAGS="-O2 -march=pentium4"
                ;;
        "duron"|"sempron")
                SLCKFLAGS="-Os -march=athlon-xp"
                ;;
        "athlonxp")
                SLCKFLAGS="-O2 -march=athlon-xp"
                ;;
        "sparc")
                SLCKFLAGS="-O2"
                ;;
        "supersparc")
                SLCKFLAGS="-O2 -mcpu=supersparc"
                ;;
        *|"i486")
                SLCKFLAGS="-O2 -march=i486 -mtune=i686"
                ;;
esac
fi

# Print a welcome screen
# "+----------------+"
# "| $NAME-$VERSION |"
# "+----------------+"
BEGIN="+-"
END="-+"
BODY=""
for (( i = 1 ; i < `echo "$NAME-$VERSION" |wc -m` ; i++ )) ; do	BODY="$BODY-" ; done
echo "$BEGIN$BODY$END"
echo "| $NAME-$VERSION |"
echo "$BEGIN$BODY$END"

if [ -d $PKG ] ;
then
    if [ "$1" == "--clean" ] ;
    	then
        	# Clean up a previous build and go on
			rm -rf $PKG $TMP/$NAME-$VERSION
			echo "Removed previous build"
        	exit 1
	fi
fi

echo "------------------------- Uncompressing source -------------------------"
cd $TMP
tar xzvf $CWD/$SOURCESLCKARCH.tar.gz
cd $SOURCESLCKARCH
chown -R root.root .
find . -perm 664 -exec chmod 644 {} \;

# Execute only the source
if [[ "$1" == "--source-only" || "$1" == "-s" ]] ;
	then
        echo "source extracted. I'm stopping ..."
		exit 1
fi

# Patch
# echo "------------------------------- Patching -------------------------------"

# Build
echo "------------------------------ Configuring -----------------------------"
CFLAGS=$SLCKFLAGS \
CXXFLAGS=$SLCKFLAGS \
		./configure --prefix=/usr \
		--sysconfdir=/etc \
#        --localstatedir=/var \
		--with-preview=yes \
		--program-prefix="" \
		--program-suffix="" \
		$SLCKARCH-slackware-linux

echo "------------------------------ Compiling -------------------------------"
make
res=$?
if [ $res -ne 0 ]
then
        # make failed, we cannot continue
        exit $res
fi

echo "------------------------------ Installing ------------------------------"
make install DESTDIR=$PKG
res=$?
if [ $res -ne 0 ]
then
        # make install failed, we cannot continue
        exit 1
fi

# Doc
echo "----------------- Copying documentation and other files ----------------"

mkdir -p $PKG/usr/doc/$NAME-$VERSION
cp -a \
AUTHORS COPYING.LIB ChangeLog NEWS README \
 $PKG/usr/doc/$NAME-$VERSION

# Gzip man pages
find $PKG/usr/man -name "*.[123456789]" -exec gzip -9 {} \;

# SlackBuild stuff
mkdir -p $PKG/usr/doc/$NAME-$VERSION/slackbuild
cp $CWD/{$0,$NAME.slack-desc,*.desktop} $PKG/usr/doc/$NAME-$VERSION/slackbuild


# Strip binaries.
# The commented one is an alternative version
#echo "--------------------------- Stripping binaries -------------------------"
#find $PKG -type f | xargs file | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded

( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null
  find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs strip -g 2> /dev/null
)

# Set permissions
echo "--------------------------- Setting permissions ------------------------"
chown -R root.bin $PKG/usr/bin # $PKG/usr/sbin

chown -R root.root $PKG/usr/doc
chmod -R 755 $PKG/usr/doc/*
find $PKG/usr/doc -type f -exec chmod 644 {} \;

if [ -d $PKG/usr/share ]
then
      chown -R root.root $PKG/usr/share
      chmod -R 755 $PKG/usr/share/*
      find $PKG/usr/share -type f -exec chmod 644 {} \;
fi


# Copy Slackware package files
echo "--------------------- Copying Slackware package files ------------------"
mkdir -p $PKG/install
cat $CWD/$NAME.slack-desc > $PKG/install/slack-desc
#ln -s  $PKG/install/$NAME.slack-desc $PKG/install/slack-desc
#cat $CWD/slack-required > $PKG/install/slack-required
if [ -f $CWD/$NAME.doinst.sh ] ; then
  cat $CWD/$NAME.doinst.sh > $PKG/install/doinst.sh
#  ln -s $PKG/install/$NAME.doinst.sh  $PKG/install/doinst.sh
fi


# Create package
echo "---------------------------- Creating package --------------------------"
echo "Creating package"
cd $PKG
makepkg -l y -c n $CWD/$NAME-$VERSION-$SLCKARCH-$BUILD.tgz

# Cleanup the temporary working directory
if [ "$1" = "--cleanup" ]; then
 rm -rf $TMP/$NAME-$VERSION
 rm -rf $PKG
fi
che ne dite? idee? suggerimenti?

Bart
Staff
Staff
Messaggi: 4249
Iscritto il: lun 9 ago 2004, 0:00
Località: Rimini

Messaggio da Bart »

Ciao,
scusa ma slackbuild per quale programma?

Avatar utente
backbone
Linux 0.x
Linux 0.x
Messaggi: 64
Iscritto il: gio 13 mag 2004, 0:00
Slackware: 12.1
Kernel: 2.6.26.6 vanilla
Desktop: xfce4, fluxbox
Località: sicilia (meglio non sapere dove)
Contatta:

Messaggio da backbone »

evaimitico a me garba.
Uno dei problemi penso sia comunque:

Per quanto riguarda la compilazione come fai visto che il supporto per certi programmi o le features attivabili vanno cambiando???
Voglio dire tu cerchi di far prendere allo slackbuild la maggior parte di informazioni da se, ma devi comunque sempre modificare il file per adattarlo ad uno specifico software di conseguenza il vantaggio è minimo a mio parere oltre al fatto che comunque non tutti i software hanno gli stessi doc ed in alcuni mi è capitato di non avere le man pages.
Ora per certe cose potrebbe anche non essere fastidioso se non che comunque devi leggerti il log dello slackbuild per vedere cosa è andato storto, e quando leggi di certi errori che magari non sarebbero dovuti essere loggati perche' non avrebbero nemmeno dovuto essere generati rende a mio parere per software magari un po' complessi un po' una rogna da dover andare ad appurare il vero od il falso.
Ovviamente sempre a mio parere io mica sono un gran slackbuilder.

Avatar utente
Loris
Admin
Admin
Messaggi: 7731
Iscritto il: lun 31 mar 2003, 0:00
Nome Cognome: Loris Vincenzi
Località: Gradisca D'Isonzo
Contatta:

Messaggio da Loris »

Quando decido di fare un pacchetto creo prima il pacchetto a mano e poi scrivo lo SlackBuild su misura, certo la base rimane spesso invariata ma parametri di configurazione, documenti, man, info, permessi vari, doinst.sh vari etc etc è difficile automatizzarli bene.
"Ho una testa piuttosto balzana e comunque non sono quello che credete" - Roger Keith Barrett

evaimitico
Linux 1.x
Linux 1.x
Messaggi: 140
Iscritto il: mer 16 giu 2004, 0:00

Messaggio da evaimitico »

Ovviamente non si riesce ad automatizzare completamente, perché ogni sw è una storia a se, in particolare dal configure in poi.
E quella parte al momento la modifico a mano.

Si potrebbe pensare ad uno slackbuild generico per un linguaggio + un file di configurazione per ogni sw, che dia i parametri e contenga eventuali modifiche/comandi specifici, ma vuol dire rivoluzionare tutta la filosofia degli slackbuild :)

più che altro con le modifiche fatte allo slackbuild, mi risparmio di dover settare sempre il nome e la versione, dato che sono facilmente ricavabili, inoltre posso evitare di configurare l'architettura, dato che all'avvio setto le due var SLCKARCH e SLCKFLAGS in modo che quando compilo (tramite slackbuild) è sempre ottimizzato come voglio.

L'altra mia comodità è l'aggiunta dell'opzione '-s' allo slackbuild in modo da avere i sorgenti sempre scompattati in maniera consistente nello stesso posto [dare uno *SlackBuild -s è più corto del rispettivo tar ... si sono pigro :D ]

Altra cosa è che invece di cercare dei file slack-desc, cerca $NAME.slack-desc, poiché
preferisco mantenermi con tale nome le descrizioni sull'hd. uso slack-desc solo dentro al pacchetto.

PS per Bart, lo slackbuild che ho postato è quello per mono, che sto al momento compilando per poter mettere su beagle

Rispondi