Pagina 1 di 2

dubbio sui tgz

Inviato: sab 17 gen 2009, 9:19
da danix
Ciao a tutti, mi è balenato in mente un dubbio sui pacchetti tgz, cambia qualcosa se li creo usando l'utente root o un utente normale??
Se si, che problemi ci possono essere ad usare root per creare i tgz??


Grazie mille
Ciau...

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 10:05
da targzeta
Sicuramente ho capito male io. Visto che tutti i file (o quasi tutti) sono di proprietà dell'utente root è evidene che il pacchetto lo deve creare l'utente root, a meno di non creare tutto come utente normale (sino al make install, per intenderci) e poi eseguire un chown prima del makepkg.

Spina

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 10:45
da danix
no, hai capito bene... ripensandoci negli slackbuild di solito si cambiano i permessi proprio per rendere tutto di proprietà di root... è che ogni tanto mi vengono questi dubbi e non me li tolgo dalla mente se non li chiarisco... :)


Grazie della risposta... ;)

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 10:45
da conraid
Io ho provato usando fakeroot in stile Debian, ma, forse per mia incapacità di usarlo, non ha funzionato bene

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 10:58
da targzeta
Alcuni SlackBuild (che a me non piacciono) prima installano dei file sul'hard disk, ad esempio in /usr e poi compiono il loro lavoro. Non ne ricordo bene uno in particolare, però ne ho visti. Questi SlackBuild evidentemente devono essere eseguiti dall'utente root per funzionare.

Uno di questi slackbuild, ora che ci penso bene, l'ho fatto anche io, ed è quello che serve per compilare Mplayer. Infatti quando compili mplayer lui va a vedere se ci sono codec nella directory /usr/lib/codecs (o un altra a scelta) e poi si linka con quelli (se non sbaglio installando i codec in una dir temporanea non funziona perchè anche dopo cerca proprio quella directory....ma posso sbagliare, lo slackbuild è datato :)). Quindi prima devo controllare che esista la directory in questione, e se non esiste estraggo i codec prima di dare il make. Ovviamente solo root può farlo.

Io di solito prima di eseguire uno SlackBuild come root lo eseguo come utente normale, per controllare appunto che non succedano cose strane. Tieni conto che questi tipi di SlackBuild se vengono interrotti, è probabile che lascino traccia sul tuo filesystem.

Spina

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 12:24
da sardylan
Beh... Mi è capitato di avere alcuni SlackBuild che appunto dovevano essere eseguiti per forza da root perché il make install non accettava la variabile DESTDIR...
In tal caso sei costretto ad installare il tutto e poi a copiarti i file manualmente nella dir $PKG per poi lanciare makepkg!!
Ma a parte questi casi particolari, penso che ogni slackbuild possa tranquillamente essere lanciato anche da utente, basta che nel doinst.sh si inseriscano i chmod necessari...
Ma rimango del parere che lanciare tutto da root sia meglio... Tanto faccio lavorare tutto quanto usando

Codice: Seleziona tutto

$TMP="/tmp/tgz-build_$PKGNAME"
$PKG="${TMP}/package"

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 12:44
da 6C33C
conraid ha scritto:Io ho provato usando fakeroot in stile Debian, ma, forse per mia incapacità di usarlo, non ha funzionato bene
Ieri sera stavo cercando qualcosa del genere ( esempi) e santo google alla domanda
" how to use fakeroot in slackbuild " mi ha dato questo link:
http://www.slackbuilds.net/wiki/exemple
L' ultima parte riguardante il packaging forse può interessarti .

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 13:00
da conraid
6C33C ha scritto:
conraid ha scritto:Io ho provato usando fakeroot in stile Debian, ma, forse per mia incapacità di usarlo, non ha funzionato bene
Ieri sera stavo cercando qualcosa del genere ( esempi) e santo google alla domanda
" how to use fakeroot in slackbuild " mi ha dato questo link:
http://www.slackbuilds.net/wiki/exemple
L' ultima parte riguardante il packaging forse può interessarti .
Grazie, ci do un'occhiata
sardylan ha scritto:Beh... Mi è capitato di avere alcuni SlackBuild che appunto dovevano essere eseguiti per forza da root perché il make install non accettava la variabile DESTDIR...
In tal caso sei costretto ad installare il tutto e poi a copiarti i file manualmente nella dir $PKG per poi lanciare makepkg!!
Ma a parte questi casi particolari, penso che ogni slackbuild possa tranquillamente essere lanciato anche da utente, basta che nel doinst.sh si inseriscano i chmod necessari...
Ma rimango del parere che lanciare tutto da root sia meglio... Tanto faccio lavorare tutto quanto usando

Codice: Seleziona tutto

$TMP="/tmp/tgz-build_$PKGNAME"
$PKG="${TMP}/package"
Se non accettano la variabile DESTDIR (o simili) si segue altre strade, come modificare il Makefile con sed, etc...
Ma lo slackbuild deve fare tutto in automatico, altrimenti non va bene

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 13:05
da sardylan
conraid ha scritto: [...] Ma lo slackbuild deve fare tutto in automatico, altrimenti non va bene
Si!! Ovviamente!! Per fare le cose manualmente intendevo che vado a vedere nel Makefile quali file installa con make install, e riporto la procedura nello SlackBuild riga per riga in modo che faccia tutto da solo!!

Poi ho notato che nel link di 6c33c c'è scritto che alcuni Makefile accettano diversi parametri:
make install DESTDIR=$PKG # Please note that some software use INSTALL_ROOT=$PKG or prefix=$PKG/usr or install_root=$PKG ...
Quindi anche questa potrebbe essere una soluzione..
Rimane comunque tutto automatizato!!

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 13:10
da slucky
tutto giusto è corretto e per chiudere l'argomento dico, che secondo me, non esistono pacchetti migliori dei tgz, la prova l' ho avuta più volte avendo utilizzato varie distro (rpm, deb), tempo fa ad es. provai kde4, ma nessuna funzionava senza che ci fosse qualche crash... solo con i pacchetti .tgz del buon Pat e il suo team in /testing trovai un sistema già funzionante, stabile e pronto anche per un uso desktop... :D

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 13:10
da conraid
6C33C ha scritto:
conraid ha scritto:Io ho provato usando fakeroot in stile Debian, ma, forse per mia incapacità di usarlo, non ha funzionato bene
Ieri sera stavo cercando qualcosa del genere ( esempi) e santo google alla domanda
" how to use fakeroot in slackbuild " mi ha dato questo link:
http://www.slackbuilds.net/wiki/exemple
L' ultima parte riguardante il packaging forse può interessarti .
Così funziona come avevo provato io, cioè se ti basta modificare i file ok. Ma "purtroppo" alcuni Makefile cambiano loro stessi i file dei programmi, quindi ricevi errori tipo

Codice: Seleziona tutto

install: cannot change ownership of `/tmp/tgz/package-atop/usr/bin/atop': Operation not permitted
Stare a modificare quei Makefile è possibile, ma a questo punto non so quanto conveniente

Re: dubbio sui tgz

Inviato: sab 17 gen 2009, 14:21
da 6C33C
Sono sempre alla ricerca di esempi per mia curiosità.
Questo è un' altro esempio trovato in rete .

Codice: Seleziona tutto

#! /bin/sh

#-- libmimedir for Slackware --
# Build script by Martijn Dekker <martijn@inlv.org>
# Suggested usage: $ libmimedir.SlackBuild 2>&1 | tee build.log
#--
# Last edited: 05-Nov-2008
#--
# Copyright 2008 Martijn Dekker <martijn@inlv.org>, Groningen, Netherlands.
# Redistribution and use of this script, with or without modification, is
# permitted provided that this notice is preserved. ANY AND ALL WARRANTY AND
# LIABILITY ARE HEREBY EXPRESSLY DISCLAIMED.


##########  Init.

PATH=/bin:/usr/bin
export PATH
umask 022

VERSION=${VERSION:-0.5.1}
ARCH=${ARCH:-i486}
BUILD=${BUILD:-1}
TAG=${TAG:-$USER}
BUILDER=${BUILDER:-$USER@$HOSTNAME}
TMP=$(cd ${TMP:-/tmp}; pwd)

PRGNAM=libmimedir
PKGNAM=$PRGNAM-$VERSION-$ARCH-$BUILD$TAG
SLKCFLAGS="-O2"
DATE=$(LC_ALL=C date +%d-%b-%Y)
SRCAR=$PRGNAM-$VERSION.tar.gz
SRCURL=http://downloads.sourceforge.net/$PRGNAM/$SRCAR
PKG=$TMP/package-$PRGNAM
SRC=$TMP/$PRGNAM-$VERSION
DOC=/usr/doc/$PRGNAM-$VERSION
CWD=$(cd $(dirname $0); pwd)

# set appropriate -march and -mcpu/-mtune flags for i*86
GCC_VER=$( ${CC:-gcc} -dumpversion 2> /dev/null ) && case $ARCH in
( i[345]86 )	# use '-mtune' for GCC >= 3.4, '-mcpu' for GCC < 3.4
	TUNE='tune'
	case $GCC_VER in ( [12].* | 3.[0123].* ) TUNE='cpu' ;; esac
	SLKCFLAGS="$SLKCFLAGS -march=$ARCH -m$TUNE=i686"
	;;
( i686 )
	SLKCFLAGS="$SLKCFLAGS -march=i686"
	;;
esac

set -o errexit -o xtrace	# exit on error, print executed commands


##########  Download, unpack, and compile the source.

cd $CWD
test -r $SRCAR || wget $SRCURL
rm -rf $PKG $SRC
cd $TMP
tar -zxf $CWD/$SRCAR
cd $SRC

./configure \
	--cache-file=$TMP/config-$PRGNAM.cache \
	--prefix=/usr \
	--disable-static \
	--build=$ARCH-slackware-linux-gnu \
	CFLAGS="$SLKCFLAGS" \
	CXXFLAGS="$SLKCFLAGS"
make all
mkdir -p $PKG/usr/include $PKG/usr/lib
make install prefix=$PKG/usr

# Make doc dir
mkdir -p $PKG$DOC
install -pm644 README ChangeLog COPYING $PKG$DOC/


##########  Adjust package tree.

cd $PKG
rm -rf $SRC

mkdir install

cat > install/slack-desc <<EOF
$PRGNAM: MIME directory parser library - $PRGNAM $VERSION
$PRGNAM: 
$PRGNAM: RFC 2425 defines a MIME Content-Type for Directory Information.
$PRGNAM: This library contains necessary methods to parse information
$PRGNAM: blocks arranged in such a manner.
$PRGNAM: 
$PRGNAM: 
$PRGNAM: 
$PRGNAM: 
$PRGNAM: Homepage: http://libmimedir.sourceforge.net/
$PRGNAM: (Compiled by $BUILDER on $DATE)
EOF

# procreate: include this SlackBuild script in the package, updating
# a few defaults if they were overridden from outside the script
mkdir -p usr/src/slackbuilds/$PRGNAM
sed "	/^VERSION=/	s/:-.*}/:-$VERSION}/
	/^BUILD=/	s/:-.*}/:-$BUILD}/
	/^ARCH=/	s/:-.*}/:-$ARCH}/
	" $CWD/$PRGNAM.SlackBuild \
	> usr/src/slackbuilds/$PRGNAM/$PRGNAM.SlackBuild
chmod +x usr/src/slackbuilds/$PRGNAM/$PRGNAM.SlackBuild


##########  Make the package.

set +o xtrace
MKCMD="set -o errexit -o xtrace ;
	cd $PKG ;
	chown -R root:root .  ;
	/sbin/makepkg -l y -c n $TMP/$PKGNAM.tgz  ;
	rm -rf $PKG"

if test $(whoami) = root; then
	eval $MKCMD
	set +o xtrace
elif type fakeroot; then
	printf '\033[1mEntering fakeroot environment.\033[0m\n'
	echo $MKCMD | fakeroot
else
	printf '\033[1mPlease enter your root password.\033[0m '
	echo '(Consider installing fakeroot.)'
	su -c "$MKCMD"
fi

printf '\007\033[1;32mYour package is ready '
printf 'in \033[31m%s/%s.tgz\033[32m.\n' $TMP $PKGNAM
printf '\033[34mBuild script by Martijn Dekker <martijn@inlv.org>. '
printf 'Have fun. \033[33m:)\033[0m\n'
qui si va sul pesante !!!! :D

Re: dubbio sui tgz

Inviato: dom 18 gen 2009, 9:04
da conraid
6C33C ha scritto: qui si va sul pesante !!!! :D
in realtà fa la stessa cosa di quello di prima, posticipa il "chown root:root" facendolo eseguire a fakeroot insieme a makepkg. Il problema è per quei programmi che hanno metodi simili direttamente nel makefile, come quello che ho postato prima. Riceverai un errore, a meno di togliere la riga incriminata dal makefile e fare tutto tu a mano.
Cose che si possono fare e che per altre cose in altri programmi si fanno.
Ma lo vedo utile solo se non puoi essere root (una macchina remota per esempio), altrimenti conviene essere root e via. Meno complicazioni.
Per evitare il più possibile gli errori meglio usare "set -e" in modo che lo slackbuild si interrompa al primo errore, e controllare prima di lanciare lo slackbuild la modalità di installazione del programma

Re: dubbio sui tgz

Inviato: dom 18 gen 2009, 13:18
da sardylan
conraid ha scritto: [...] Per evitare il più possibile gli errori meglio usare "set -e" in modo che lo slackbuild si interrompa al primo errore, e controllare prima di lanciare lo slackbuild la modalità di installazione del programma
Io ho preso la buona abitudine di corredare praticamente tutti i comandi con un bel || exit 1... Forse non sarà lo stesso del set -e, però fa il suo dovere con praticamente ogni comando utilizzato (dai emplici cd, ai wget, sino ai make)...

Re: dubbio sui tgz

Inviato: dom 18 gen 2009, 13:54
da conraid
sardylan ha scritto:
conraid ha scritto: [...] Per evitare il più possibile gli errori meglio usare "set -e" in modo che lo slackbuild si interrompa al primo errore, e controllare prima di lanciare lo slackbuild la modalità di installazione del programma
Io ho preso la buona abitudine di corredare praticamente tutti i comandi con un bel || exit 1... Forse non sarà lo stesso del set -e, però fa il suo dovere con praticamente ogni comando utilizzato (dai emplici cd, ai wget, sino ai make)...
Con "set -e" lo trovo più pulito, ma alla fine con "|| exit 1" hai più controllo su cosa controllare (scusate il gioco di parole). Del resto Pat usa molto "|| exit 1" e non "set -e", che invece è usato dal team e dagli script in altre distribuzioni. Quei pochi script di Debian che ho visto iniziano con "#!/bin/sh -e"

il problema è evitare che per qualche motivo venga fatto per esempio

Codice: Seleziona tutto

chown root:root
dopo un errore di

Codice: Seleziona tutto

cd $PRGNAME
perché magari non è stato decompresso correttamente il file sorgente. Rischi di ritrovarti con permessi sballati in altri parti del filesystem che non volevi. Meglio uscire con errore secondo me

Con set -e però a volte non fa il pacchetto perché si ferma per un errore banale, come copiare un files che non esiste più in doc
Ma questo mi porta a sapere meglio dove sono gli errori ed a fare script meno "sporchi", poi uno lo può sempre togliere "set -e"