Repository 32bit  Forum
Repository 64bit  Wiki

Il mio primo slackbuild

Postate qui se avete consigli per migliorare i pacchetti disponibili in questo sito o se avete problemi con installazione, funzionamento o altro.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il nome del pacchetto.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
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.

Il mio primo slackbuild

Messaggioda tom » mer mag 19, 2010 10:48

Ciao a tutti, come da topic ho deciso di creare uno slackbuild perchè mi piacerebbe contribuire a questa community, pertanto avrei tante curiosità e perplessità che vorrei esporvi.
Ho scelto virtualbox PUEL edition (quello closed source, con il file .run), si lo so non è molto visto che tratta di un file precompilato, ma l'ho scelto per i seguenti motivi:
-non l'ho trovato pacchettizzato in formato txz da nessuna parte
-farebbe molto comodo agli utilizzatori di slackware64 che non vogliono avere una distro multilib
- su AUR (arch user repository) ci sono alcuni PKGBUILD per arch linux che mi stanno dando una mano di non poca rilevanza.

Volevo chiedervi innanzitutto una cosa: ho visto che sul sito utilizzate una specie di "prototipo", molte cose in diversi slackbuild sono praticamente identiche (come l'intestazione
Codice: Seleziona tutto
# Heavily based on the Slackware 13.0 SlackBuild
# http://sourceforge.net/projects/aften
# Packagers Andrea Sciucca Gohanz ( gohanz @ infinito.it)
# http://www.slacky.it

la definizione delle variabili (NAME, BUILD, ecc...) ed alcune strutture come queste:
Codice: Seleziona tutto
if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"; SLKLDFLAGS=""; LIBDIRSUFFIX=""; CHOST=i486
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"; SLKLDFLAGS=""; LIBDIRSUFFIX=""; CHOST=i486
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2 -fPIC"; SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"
fi
Codice: Seleziona tutto
find . -perm 666 -exec chmod 644 {} \;
find . -perm 664 -exec chmod 644 {} \;
find . -perm 600 -exec chmod 644 {} \;
find . -perm 444 -exec chmod 644 {} \;
find . -perm 400 -exec chmod 644 {} \;
find . -perm 440 -exec chmod 644 {} \;
find . -perm 777 -exec chmod 755 {} \;
find . -perm 775 -exec chmod 755 {} \;
find . -perm 511 -exec chmod 755 {} \;
find . -perm 711 -exec chmod 755 {} \;
find . -perm 555 -exec chmod 755 {} \;

chown -R root:root .


dunque la mia prima domanda è questa: è un problema se uso un tipo di prototipo diverso? diciamo tipo "alla alien" (mi sto basando molto sugli slackbuild di alien, alcune cose sono proprio copiate ed incollate)

Poi ancora vorrei capire bene cosa sono i 2 file slack-desk e slack-required, come devo crearli (che regole devo seguire) e tutto quello che serve per crearli al meglio.
tom
Packager
Packager
 
Messaggi: 407
Iscritto il: dom nov 01, 2009 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce

Re: Il mio primo slackbuild

Messaggioda ZeroUno » mer mag 19, 2010 11:16

tasodan ha scritto:-non l'ho trovato pacchettizzato in formato txz da nessuna parte

http://slak.homelinux.org/index.php?sta ... e=#results


Volevo chiedervi innanzitutto una cosa: ho visto che sul sito utilizzate una specie di "prototipo"

Finora in verità un vero e proprio prototipo non c'era, ma alla fine era uno scopiazzare l'uno dell'altro, quindi sono molto simili.
In occasione di slackware 13.1 in questi giorni stiamo elaborando (e pubblicheremo a breve) un prototipo che diventerà lo standard slacky (a almeno il "fortemente consigliato").
Per questo prototipo abbiamo scelto le cose che abbiamo ritenuto migliori dei vari slackbuild (sia da alien, sia da slackware, sia dagli altri slacky) e li abbiamo messi insieme.

Poi ancora vorrei capire bene cosa sono i 2 file slack-desk e slack-required, come devo crearli (che regole devo seguire) e tutto quello che serve per crearli al meglio.

slack-desc è ufficialmente presente su slackware e sarebbe quella descrizione che vedi quando fai installpkg.
slack-required è un file creato da un tool chiamato "requirebuilder" che tenta di determinare le dipendenze del pacchetto (cioè di quali librerie ha bisogno per essere avviato. prova a dare ldd /usr/bin/ls per esempio) così che so quali pacchetti devo installare prima (inoltre con software come slapt-get e swaret ti scarica automaticamente queste dipendenze)
lo slack-required non fa parte dello standard slackware e viene ignorato da installpkg.

Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4304
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: Il mio primo slackbuild

Messaggioda tom » mer mag 19, 2010 16:08

ZeroUno ha scritto:http://slak.homelinux.org/index.php?start=0&order=&maxresult=30&repo=0&name=virtualbox&desc=&file=#results

In realtà non riesco a collegarmi a questo sito, comunque mi fido, vorrei lo stesso terminare lo slackbuild che ho cominciato e farvelo almeno provare, così, per allenamento.

In ogni caso so cosa sono le dipendenze di un pacchetto...uso slackware da circa 8-9 mesi, volevo sapere solo come si otteneva il file slack-required, in ogni caso è ottimo questo tool requirebuilder, devo provarlo (ne conosco un altro, chiamato depfinder).

Invece per quanto riguarda lo slack-desk come devo crearlo? esiste un tool o lo devo scrivere a mano?
Inoltre le informazioni contenute al suo interno le scrivo io, a mia discrezione, o le devo copiare da una qualche documentazione?
tom
Packager
Packager
 
Messaggi: 407
Iscritto il: dom nov 01, 2009 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce

Re: Il mio primo slackbuild

Messaggioda ulisse89 » mer mag 19, 2010 16:57

Invece per quanto riguarda lo slack-desk come devo crearlo? esiste un tool o lo devo scrivere a mano?
Inoltre le informazioni contenute al suo interno le scrivo io, a mia discrezione, o le devo copiare da una qualche documentazione?

C'è questo script per creare i file slack-desc: http://www.slacky.eu/wikislack/index.ph ... slack-desc
Le informazioni solitamente le trovi nella home-page del software in questione.
Per esempio vlc. http://www.videolan.org/vlc/. Come vedi c'è la descrizione in dettaglio del software. Basta fare copia-incolla.
Avatar utente
ulisse89
Packager
Packager
 
Messaggi: 644
Iscritto il: sab gen 17, 2009 12:53
Località: Bologna
Nome Cognome: Riccardo
Slackware: 13.0
Kernel: 2.6.29.6
Desktop: Xfce

Re: Il mio primo slackbuild

Messaggioda ZeroUno » mer mag 19, 2010 17:10

tasodan ha scritto:
ZeroUno ha scritto:http://slak.homelinux.org/index.php?start=0&order=&maxresult=30&repo=0&name=virtualbox&desc=&file=#results

In realtà non riesco a collegarmi a questo sito, comunque mi fido

Il sito è stato un'oretta down. ora è up. (è più di una volta che succede... mi sa che è il caso che indago un po')

in ogni caso è ottimo questo tool requirebuilder, devo provarlo (ne conosco un altro, chiamato depfinder).

depfinder dovrebbe essere migliore, ma non lo usiamo ancora perchè non l'abbiamo testato a sufficienza.

Invece per quanto riguarda lo slack-desk come devo crearlo? esiste un tool o lo devo scrivere a mano?
e prendi uno prefatto (dal repository slacky o dai sorgenti di slackware) e lo modifichi.

Inoltre le informazioni contenute al suo interno le scrivo io, a mia discrezione, o le devo copiare da una qualche documentazione?

A seconda del pacchetto. Diciamo che è a discrezione ma dovrebbe essere più ufficiale possibile. Personalmente prendo qualche riga dal README del pacchetto o dal sito ufficiale e faccio copia/incolla (anche perchè con l'inglese non me la cavo un granchè)

vedi anche http://www.slacky.eu/wikislack/index.ph ... a:Packages


Ciao
Matteo
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4304
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: Il mio primo slackbuild

Messaggioda tom » mer mag 19, 2010 23:20

@Zerouno mi sono collegato al tuo link
ZeroUno ha scritto:
tasodan ha scritto:-non l'ho trovato pacchettizzato in formato txz da nessuna parte

http://slak.homelinux.org/index.php?sta ... e=#results

ma le versioni che ci sono sono tutte OSE (open source edition), e non PUEL (Personal Use and Evaluation License), quella che voglio pacchettizzare io è la versione PUEL -----> http://www.virtualbox.org/wiki/Linux_Downloads

In ogni caso questo è lo slackbuild (necessita ovviameennte di ritocchi):
Codice: Seleziona tutto
#!/bin/sh

NAME=virtualbox
LICENSE=puel
VERSION=3.2.0
BLD=61806

ARCH=${ARCH:-i486}
BUILD=${BUILD:-1}
TAG=${TAG:-tn}
CWD=$(pwd)
TMP=${TMP:-/tmp/build}
PKG=$TMP/package/$NAME
SRC=$TMP/source/$NAME
OUTPUT=${OUTPUT:-/tmp}

# Catch unitialized variables:
case "$ARCH" in
   i[3-6]86)   SLKCFLAGS="-O2 -march=$ARCH -mtune=i686"
         SLKLDFLAGS=""; LIBDIRSUFFIX=""; PARCH=x86
         ;;
   x86_64)      SLKCFLAGS="-O2 -fPIC"
         SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"; PARCH=amd64
         ;;
   *)      echo "error: unknown or invalid ARCH=$ARCH... aborting the build"; exit 1
esac

# Checking for root privileges
if [ "$UID" != "0" ]; then
   echo "error: you need to be root... aborting the build"; exit 1
fi

# Exit the script on errors:
set -e
trap 'echo "$0 FAILED at line $LINENO!" | tee $OUTPUT/error-$NAME.log' ERR

# Create working directories:
mkdir -p $SRC         # location to build the source
rm -rf $SRC/*         # remove the remnants of previous build
mkdir -p $PKG         # place for the package to be built
rm -rf $PKG/*         # erase old package's contents
mkdir -p $OUTPUT      # place for the package to be saved

# Source file availability:
SOURCE=http://dlc.sun.com.edgesuite.net/${NAME}/${VERSION}/\
VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run

if [ ! -e VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run ]; then
   wget -c $SOURCE
fi

# Check the run package via sh
sh VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run --check || return 1

# --- PACKAGE BUILDING ---
echo -e "\E[0;32m+--------------------------------+\E[0;0m"
echo -e "\E[0;32m| Building $NAME-$LICENSE-$VERSION |\E[0;0m"
echo -e "\E[0;32m+--------------------------------+\E[0;0m"

# Unpacking the binaries
echo yes | sh VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run --target $SRC \
   --nox11 --noexec &> /dev/null || return 1
cd $TMP
mkdir -p $PKG/usr/lib/$NAME || return 1
cd $PKG/usr/lib/$NAME
tar -xjf $SRC/VirtualBox.tar.bz2 || return 1
mkdir -p $PKG/usr/{bin,share/applications,share/pixmaps,share/$NAME} || return 1

# Mark set-user-ID-on-execution if release is marked as a hardened build
chmod 4511 VirtualBox VBox{SDL,Headless,NetDHCP}
for lib in VBox{VMM,REM,RT,DDU,XPCOM}.so; do
   ln -fs "/usr/lib/$NAME/$lib" "components/$lib"
done
chmod go-w .

# VBoxNetAdpCtl needs to be suid root in any case
chmod 4511 "VBoxNetAdpCtl"

# Replacing VirtualBox built-in Qt by system Qt libraries
for lib in libQt{Core,Gui,Network,OpenGL}; do
   ln -fs "/usr/lib/${lib}.so.4" "${lib}VBox.so.4"
done

# Installing the SDK
cd $PKG/usr/lib/$NAME/sdk/installer
VBOX_INSTALL_PATH="/usr/lib/$NAME" python vboxapisetup.py install --root "${PKG}" || return 1
rm -Rf build
cd $PKG/usr/lib/$NAME
rm -Rf sdk vboxshell.py VBoxPython*

# Symlink the launchers
for bin in VirtualBox VBox{Headless,Manage,SDL,SVC,Tunctl,NetAdpCtl} rdesktop-vrdp; do
   ln -s "/usr/lib/virtualbox/${bin}" "$PKG/usr/bin/${bin}"
done

# Symlink the VBoxGuestAdditions.iso into /usr/share/virtualbox
# to make it a Debian/Ubuntu or Fedora compatible installation
ln -s "/usr/lib/$NAME/additions/VBoxGuestAdditions.iso" \
   "$PKG/usr/share/$NAME/VBoxGuestAdditions.iso"

# Symlink the desktop icon and ".desktop" files appropriately
ln -s "/usr/lib/$NAME/VBox.png" "$PKG/usr/share/pixmaps/VBox.png"
ln -s "/usr/lib/$NAME/$NAME.desktop" "$PKG/usr/share/applications/$NAME.desktop"

# Add udev rules
mkdir -p "$PKG/etc/udev/rules.d"
echo 'KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"' \
   > "$PKG/etc/udev/rules.d/10-vboxdrv.rules"
echo 'SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664"' \
   >> "$PKG/etc/udev/rules.d/10-vboxdrv.rules"
echo 'SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"' \
   >> "$PKG/etc/udev/rules.d/10-vboxdrv.rules"

# Symlink the license
mkdir -p "$PKG/usr/share/licenses/$NAME" || return 1
ln -s "/usr/lib/$NAME/LICENSE" "$PKG/usr/share/licenses/$NAME/PUEL"

# Point the installation directory to vbox
mkdir -p "$PKG/etc/vbox" || return 1
echo '# VirtualBox installation directory' > "$PKG/etc/vbox/vbox.cfg"
echo 'INSTALL_DIR="/usr/lib/virtualbox"' >> "$PKG/etc/vbox/vbox.cfg"

# Install vbox_build_module
echo '#!/bin/bash' > $PKG/usr/bin/vbox_build_module
echo >> $PKG/usr/bin/vbox_build_module
echo 'echo "Building vboxdrv for `uname -sr`"' >> $PKG/usr/bin/vbox_build_module
echo 'cd "/usr/lib/virtualbox/src"' >> $PKG/usr/bin/vbox_build_module
echo 'make clean && make && make install' >> $PKG/usr/bin/vbox_build_module

# Replace some init scripts by simplified stuff
sed -i -e 's,sudo /etc/init.d/vboxdrv setup,/usr/bin/vbox_build_module,g' \
   "$PKG/usr/lib/$NAME/VBox.sh"
sed -i -e 's,sudo /etc/init.d/vboxdrv restart,modprobe vboxdrv,g' \
   "$PKG/usr/lib/$NAME/VBox.sh"

# Build the package
cd $PKG
makepkg -l y -c n $OUTPUT/$NAME-$LICENSE-$VERSION-$ARCH-$BUILD.txz \
   2>&1 | tee $OUTPUT/makepkg-$NAME.log
cd $OUTPUT
md5sum $NAME-$LICENSE-$VERSION-$ARCH-$BUILD.txz > $NAME-$LICENSE-$VERSION-$ARCH-$BUILD.txz.md5

# Clean up the extra stuff
if [ "$P1" = "--cleanup" ]; then
   rm -rf $SRC $PKG
fi

che ne pensate?

Dovrei inserire delle informazioni aggiuntive post_install: ho inserito in /usr/bin il file vbox_bin_module, un binario che compila il modulo del kernel una volta lanciato. Vorrei informare l'utente di ciò, devo usare lo slack-desk?
tom
Packager
Packager
 
Messaggi: 407
Iscritto il: dom nov 01, 2009 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce

Re: Il mio primo slackbuild

Messaggioda ZeroUno » gio mag 20, 2010 8:36

Non conosco bene virtualbox quindi non so dell'esistenza di più versioni. solo che difficilmente trovi pacchettizzati programmi evalutation.

Vedo qualche problema nel 64bit. Forse tu hai una slackware32 e quindi non hai la possibilità di testare a 64bit, ma le linee generali dovresti seguirle, oppure nega la possibilità di compilarlo a 64bit:
Da quello che vedo nello SB tu scarichi la versione adatta all'architettura specificata.
Tu all'inizio metti il classico case per determinare il LIBDIRSUFFIX ma poi indifferentemente dall'architettura installi tutto in /usr/lib/virtualbox, mentre l'installazione va fatta in /usr/lib$LIBDIRSUFFIX/virtualbox, ed anche le librerie di sistema usi quelle a 32bit che non sono presenti in una slackware64.

Indipendentemente dall'architettura:
Tutti (o quasi) i file che metti sotto etc/ rinominali in .new; il .new lo togli nel doinst.sh previa verifica dell'esistenza di uno precedente.
Se dentro il pacchetto virtualbox c'è qualche directory docs o similari spostala in /usr/doc/$NAME-$VERSION
Poichè installi icone e file .desktop probabilmente dovrai fare in modo che nella postinstallazione venga fatto il refresh della cache ecc. Non me ne intendo, ma nel doinst.sh chrdo che dovrai mettere qualcuna di queste righe:
Codice: Seleziona tutto
if [ -x /usr/bin/update-desktop-database ]; then
  /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi

if [ -x /usr/bin/update-mime-database ]; then
  /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
fi

if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
  if [ -x /usr/bin/gtk-update-icon-cache ]; then
    /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1
  fi
fi

Lo script vbox_build_module sarebbe il caso di metterlo in /usr/lib/virtualbox/bin (i magari linkarlo in /usr/bin come fai con gli altri)
L'utente lo informi nel doinst.sh, cioè a fine installazione.
Prima del makepkg dai un "chmod -R root.root ." ; talvolta è inutile, ma talvolta è necessario.. tanto vale mettercelo sempre.
In [ "$P1" = "--cleanup" ], suppongo che volevi scrivere "$1"...
L'md5sum dipende su quale repository lo vuoi mettere. Su slacky non c'è perchè viene costruito da uno script a parte.

Non capisco i vari "return 1".
Hai già il 'set -e' e semmai sarebbe "exit 1"

Il tuo script ha una buona differenza con gli altri, ma è una questione di necessità visto che installi un programma non da sorgenti ma da binari.

Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4304
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: Il mio primo slackbuild

Messaggioda tom » gio mag 20, 2010 15:53

Scusa ma in slackware64 io so che esistono 2 directory /usr/lib32/ e /usr/lib64/, mentre /usr/lib è solo un link (a usr/lib64), o no?
E, se hai ragione tu, cioè che devo mettere tutto in /usr/lib$LIBDIRSUFFIX/, come faccio con vbox_build_module, dato che il suo contenuto finale è questo:
Codice: Seleziona tutto
#!/bin/bash

echo "Building vboxdrv for `uname -sr`"
cd "/usr/lib/virtualbox/src"
make clean && make && make install

?
tom
Packager
Packager
 
Messaggi: 407
Iscritto il: dom nov 01, 2009 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce

Re: Il mio primo slackbuild

Messaggioda ZeroUno » gio mag 20, 2010 16:37

In slackware64 non esiste /usr/lib32 (quello esiste in un porting non ufficiale), ma solo /usr/lib64 che contiene binari e librerie a 64bit e /usr/lib che contiene binari e librerie a 32bit.
quello script ho visto che lo crei tu nello slackbuild, quindi basta fare
echo "cd '/usr/lib$LIBDIRSUFFIX/$NAME/src'" >> $PKG/usr/bin/vbox_build_module
okkio all'inversione di virgolette.
stessa cosa in vbox.cfg e ovunque hai lib/virtualbox; va tutto convertito in lib$LIBDIRSUFFIX/$NAME
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4304
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: Il mio primo slackbuild

Messaggioda tom » gio mag 20, 2010 17:17

claro, risolto quasi tutto :D
vbox_build_module l'ho cambiato di posizione come hai consigliato tu, però non l'ho messo in /usr/lib/virtualbox/bin, ma in /usr/lib/virtualbox perche tutti gli altri binari si trovano in quest'ultima (infatti non esiste /usr/lib/virtualbox/bin, dovrei crearla io, solo per metterci vbox_build_module [-X ).

Altra cosa: questa storia del doinst.sh mi è totalmente nuova, c'è una qualche documentazione, un prototipo, e qualche esempio da qualche parte u come costruirlo/usarlo? Perchè a quanto ho visto sono pochissimi i pacchetti che lo richiedono e non riesco a trovarne quasi nessuno...
tom
Packager
Packager
 
Messaggi: 407
Iscritto il: dom nov 01, 2009 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce

Re: Il mio primo slackbuild

Messaggioda ZeroUno » gio mag 20, 2010 18:37

In verità il doinst.sh ce l'hanno quasi tutti i pacchetti perchè lo costruisce makepkg se nel pacchetto ci metti qualche link. Se hai bisogno di metterci altre cose allora ne devi fare uno aggiuntivo tu.

Giusto in questi giorni stiamo ristrutturando i template.
In questa pagina ci sono diverse guide sulla pacchettizzazione, http://slacky.eu/wikislack/index.php?ti ... a:Packages, ma sono vecchiotte.
Ne sto costruendo una nuova. Ma non è ancora terminata.
La puoi vedere come anteprima quì: http://wiki.frattocchie.it/wiki/Linee_g ... ttizzatori
Al termine verrà spostata al link precedente, in sostituzione di quelle vecchie.

Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4304
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: Il mio primo slackbuild

Messaggioda tom » ven mag 21, 2010 18:41

Ho guardato la tua pagina, mi è stata utilissima. Credo di essere ad ottimo punto.
Avrei tuttavia i seguenti problemi:
1) ho dei comandi post-install
2) ho dei comandi post-upgrade
3) ho dei comandi pre-remove
Se per il punto 1 posso mettere i comandi post-install direttamente nel doinst.sh, per il punto 2 e 3 come faccio? C'è un modo?
tom
Packager
Packager
 
Messaggi: 407
Iscritto il: dom nov 01, 2009 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce

Re: Il mio primo slackbuild

Messaggioda ZeroUno » ven mag 21, 2010 19:55

slackware non prevede pre-remove.
per il post-upgrade credo che sia sufficiente che al lancio di doinst vedi di capire se era già installato o meno e lanci l'uno o l'altro script.
Per esempio:

Codice: Seleziona tutto
if [ -e usr/shar/virtualbox/installation-done ];then
  echo "sto lanciando gli script di post-upgrade"
else
  touch usr/share/virtualbox/installation-done
  echo "sto lanciando gli script di post-install"
fi


Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4304
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: Il mio primo slackbuild

Messaggioda ZeroUno » sab mag 22, 2010 15:43

ancora meglio...

ho scoperto che installpkg lancia il doinst.sh con il parametro -install

quindi
Codice: Seleziona tutto
if [ "$1" == "-install" ];then
  echo "questa è una installazione"
else
  echo "questo è un upgrade"
fi
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4304
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: Il mio primo slackbuild

Messaggioda tom » dom mag 30, 2010 20:10

Nel frattempo mi son divertito con pacchetti più facili (qualche plasmoide intrigante e le localizzazioni per firefox), che funzionano benissimo. Oggi sono tornato da questo benedetto virtualbox-puel che sta dando un sacco di grane: funziona solo con root!!! :doubt: :doubt: :doubt:
Questi sono i miei file:

- virtualbox-puel.SlackBuild
Codice: Seleziona tutto
#!/bin/sh

# Heavily based on the Slackware 13.1 SlackBuild
# Written by Tommaso D'Anna ( tasodan@gmail.com )
# Last build from Tommaso D'Anna ( tasodan@gmail.com )

# Slackware build script for VirtualBox - Personal Use and Evaluation License (PUEL)
# Official Site: http://http://www.virtualbox.org

# 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.

# Catching variables
PKGNAME=virtualbox-puel
VERSION=${VERSION:-3.2.0}
BLD=61806
BUILD=${BUILD:-1}
ARCH=${ARCH:-i486}

case "$ARCH" in
  i[4-6]86)      SLKCFLAGS="-O2 -march=$ARCH -mtune=i686"
                 SLKLDFLAGS=""; LIBDIRSUFFIX=""; PARCH=x86
                 ;;
  x86_64)        SLKCFLAGS="-O2 -fPIC"
                 SLKLDFLAGS="-L/usr/lib64"; LIBDIRSUFFIX="64"; PARCH=amd64
                 ;;
  *)             echo "error: unknown or invalid ARCH=$ARCH... aborting the build"; exit 1
esac

TAG=${TAG:-sl}
CWD=$(pwd)
TMP=${TMP:-/tmp/build}
PKG=$TMP/package/$PKGNAME
SRC=$TMP/source/$PKGNAME
OUTPUT=${OUTPUT:-/tmp}
SOURCE=http://dlc.sun.com.edgesuite.net/virtualbox/${VERSION}/VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run

# Exit the script on errors:
set -e
trap 'echo "$0 FAILED at line $LINENO!" | tee $OUTPUT/error-$PKGNAME.log' ERR

# Source file availability:
if [ ! -e VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run ]; then
  echo "VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run not found, downloading..."
  wget -c $SOURCE
fi

# Create working directories:
mkdir -p $SRC         # location to build the source
rm -rf $SRC/*         # remove the remnants of previous build
mkdir -p $PKG         # place for the package to be built
rm -rf $PKG/*         # erase old package's contents
mkdir -p $OUTPUT      # place for the package to be saved

# Check the run package via sh
sh VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run --check

####################################################################
# --- PACKAGE BUILDING ---
####################################################################
echo -e "\E[0;32m+--------------------------------+\E[0;0m"
echo -e "\E[0;32m| Building $PKGNAME-$VERSION |\E[0;0m"
echo -e "\E[0;32m+--------------------------------+\E[0;0m"

# Unpacking the binaries
sh VirtualBox-${VERSION}-${BLD}-Linux_${PARCH}.run --target $SRC --nox11 --noexec &> /dev/null
mkdir -p $PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME
cd $PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME
tar -xjf $SRC/VirtualBox.tar.bz2
mkdir -p $PKG/usr/{bin,share/applications,share/pixmaps,share/$PKGNAME}

# Mark set-user-ID-on-execution if release is marked as a hardened build
if egrep '^HARDENED="1"' "$SRC/install.sh" &> /dev/null; then
  chmod 4511 VirtualBox VBox{SDL,Headless,NetDHCP}
  for lib in VBox{VMM,REM,RT,DDU,XPCOM}.so; do
    ln -fs "/usr/lib/$PKGNAME/$lib" "components/$lib"
  done
  chmod go-w .
fi

# VBoxNetAdpCtl needs to be suid root in any case
chmod 4511 "VBoxNetAdpCtl"

# Replacing VirtualBox built-in Qt by system Qt libraries (this fixes
# problems with some KDE themes reported by users)
for lib in libQt{Core,Gui,Network,OpenGL}; do
   ln -fs "/usr/lib$LIBDIRSUFFIX/${lib}.so.4" "${lib}VBox.so.4"
done

# Installing the SDK
cd $PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME/sdk/installer
VBOX_INSTALL_PATH="/usr/lib$LIBDIRSUFFIX/$PKGNAME" python vboxapisetup.py install \
   --root "${PKG}" || return 1
rm -Rf build
cd $PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME
rm -Rf sdk vboxshell.py VBoxPython*

# Installing vbox_build_module
#install -Dm0744 "$SRC/vbox_build_module" "$PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME/vbox_build_module"

# Symlink the launchers and the init script
for bin in VirtualBox VBox{Headless,Manage,SDL,SVC,Tunctl,NetAdpCtl} rdesktop-vrdp; do
   ln -s "/usr/lib$LIBDIRSUFFIX/$PKGNAME/$bin" "$PKG/usr/bin/$bin"
done
mkdir -p $PKG/etc/rc.d
install -Dm0755 "$SRC/vboxdrv.sh" "$PKG/etc/rc.d/rc.vboxdrv.new"

# Symlink the VBoxGuestAdditions.iso into /usr/share/virtualbox (to make it
# a Debian/Ubuntu or Fedora compatible installation)
ln -s "/usr/lib$LIBDIRSUFFIX/$PKGNAME/additions/VBoxGuestAdditions.iso" \
   "$PKG/usr/share/$PKGNAME/VBoxGuestAdditions.iso"

# Symlink the desktop icon and ".desktop" files appropriately
ln -s "/usr/lib$LIBDIRSUFFIX/$PKGNAME/VBox.png" "$PKG/usr/share/pixmaps/VBox.png"
ln -s "/usr/lib$LIBDIRSUFFIX/$PKGNAME/virtualbox.desktop" \
  "$PKG/usr/share/applications/virtualbox.desktop"

# Adding udev rules
mkdir -p "$PKG/etc/udev/rules.d"
install -Dm0644 "$CWD/10-vboxdrv.rules" "$PKG/etc/udev/rules.d/10-vboxdrv.rules.new"

# Point the installation directory to vbox
mkdir -p "$PKG/etc/vbox"
echo '# VirtualBox installation directory' > "$PKG/etc/vbox/vbox.cfg.new"
echo "INSTALL_DIR='/usr/lib$LIBDIRSUFFIX/virtualbox-puel'" >> "$PKG/etc/vbox/vbox.cfg.new"

# Replace some init scripts by simplified stuff
sed -i -e 's,sudo /etc/init.d/vboxdrv setup,/usr/bin/vbox_build_module,g' \
   "$PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME/VBox.sh"
sed -i -e 's,sudo /etc/init.d/vboxdrv restart,modprobe vboxdrv,g' \
   "$PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME/VBox.sh"

# Copying documentation files
mkdir -p $PKG/usr/doc/$PKGNAME-$VERSION
cd $PKG/usr/lib$LIBDIRSUFFIX/$PKGNAME
cp -a \
  License-8.html UserManual.pdf LICENSE \
  $PKG/usr/doc/$PKGNAME-$VERSION
cat $CWD/$PKGNAME.SlackBuild > $PKG/usr/doc/$PKGNAME-$VERSION/$PKGNAME.SlackBuild
cat $CWD/slack-desc > $PKG/usr/doc/$PKGNAME-$VERSION/slack-desc
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh

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

# Build the package
cd $PKG
chown -R root:root $PKG

if [ -x "$(which depfinder 2>/dev/null)" ];then
  depfinder -f -s -a -p $PKG
  mv slack-required $CWD/
elif [ -x "$(which requiredbuilder 2>/dev/null)" ];then
  requiredbuilder -y -v -s $CWD $PKG
fi

/sbin/makepkg -l y -c n $OUTPUT/$PKGNAME-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-txz}

# Clean up the extra stuff
if [ "$1" = "--cleanup" ]; then
  rm -rf $SRC $PKG
fi


- doinst.sh
Codice: Seleziona tutto
config() {
  NEW="$1"
  OLD="$(dirname $NEW)/$(basename $NEW .new)"
  # If there's no config file by that name, mv it over:
  if [ ! -r $OLD ]; then
    mv $NEW $OLD
  elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then
    # toss the redundant copy
    rm $NEW
  fi
  # Otherwise, we leave the .new copy for the admin to consider...
}

config etc/udev/rules.d/10-vboxdrv.rules.new
config etc/vbox/vbox.cfg.new
config etc/rc.d/rc.vboxdrv.new

# Load new udev rule for module vboxdrv
udevadm control --reload-rules

# if rc.vboxdrv is executable, run it on startup
run=`grep "sh /etc/rc.d/rc.vboxdrv" etc/rc.d/rc.local`
if [[ "${run}" == "" ]]; then
cat << EOF >> etc/rc.d/rc.local

# Load vboxdrv module
if [ -x /etc/rc.d/rc.vboxdrv ]; then
        sh /etc/rc.d/rc.vboxdrv start
fi
EOF
fi


if [ -x /usr/bin/update-desktop-database ]; then
  /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi
if [ -x /usr/bin/update-mime-database ]; then
  /usr/bin/update-mime-database usr/share/mime >/dev/null 2>&1
fi
if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then
  if [ -x /usr/bin/gtk-update-icon-cache ]; then
    /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1
  fi
fi

# Show the license
echo '---------------------------------------------------------------------------'
echo ' You must agree to the following license in order to use this program:'
echo
cat "/usr/doc/virtualbox-puel-3.2.0/LICENSE"
echo
echo '---------------------------------------------------------------------------'
echo

# Insert the vboxusers group in the possible --root target
chroot . << EOR 2>/dev/null
/usr/sbin/groupadd -g215 vboxusers 2> /dev/null
EOR

# Important notes
echo '#####################################################################################'
echo '#                             !!!IMPORTANT NOTES!!!                                 #'
echo '#                                                                                   #'
echo '# Remember to run "/etc/rc.d/rc.vboxdrv setup", every time your kernel is upgraded, #'
echo '# to compile virtualbox driver modules for a new kernel version.                    #'
echo '#                                                                                   #'
echo '# Add your users to the vboxusers group:                                            #'
echo '# gpasswd -a USERNAME vboxusers                                                     #'
echo '#                                                                                   #'
echo '#                                                                                   #'
echo '# If USB does not work for you out-of-the-box, add the following line               #'
echo '# to your "/etc/fstab":                                                             #'
echo '# none /proc/bus/usb usbfs auto,busgid=108,busmode=0775,devgid=108,devmode=0664 0 0 #'
echo '#####################################################################################'



- slack-desc
Codice: Seleziona tutto
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.  Line
# up the first '|' above the ':' following the base package name, and the '|' on
# the right side marks the last column you can put a character in.  You must make
# exactly 11 lines for the formatting to be correct.  It's also customary to
# leave one space after the ':'.
       |-----handy-ruler------------------------------------------------------|
virtualbox-puel: VirtualBox - Personal Use and Evaluation License edition
virtualbox-puel:
virtualbox-puel: VirtualBox is a powerful x86 and AMD64/Intel64 virtualization
virtualbox-puel: product for enterprise as well as home use.
virtualbox-puel: This version is released under the VirtualBox Personal Use
virtualbox-puel: and Evaluation License (PUEL). By installing, you agree to
virtualbox-puel: the terms and conditions of that license.
virtualbox-puel:
virtualbox-puel:
virtualbox-puel: Web Site: http://www.virtualbox.org
virtualbox-puel:


- 10-vboxdrv.rules
Codice: Seleziona tutto
KERNEL=="vboxdrv", NAME="vboxdrv", OWNER="root", GROUP="vboxusers", MODE="0660"
SUBSYSTEM=="usb_device", GROUP="vboxusers", MODE="0664"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", GROUP="vboxusers", MODE="0664"



Ora, quando lancio il comando VirtualBox da root fila tutto liscio come l'olio, mentre se lo lancio da mio utente normale (l'ho già aggiunto al gruppo vboxusers) ricevo questo messaggio:
Codice: Seleziona tutto
tom@Kallisto:~$ VirtualBox
VirtualBox: Error -10 in SUPR3HardenedMain!
VirtualBox: Effective UID is not root (euid=1000 egid=100 uid=1000 gid=100)

VirtualBox: Tip! It may help to reinstall VirtualBox.
tom@Kallisto:~$


Dove posso aver sbagliato??? I permessi credo di averli settati correttamente...

(PS: il vbox_build_module è commentato perchè sto provando a vedere se riesco a farne a meno)
tom
Packager
Packager
 
Messaggi: 407
Iscritto il: dom nov 01, 2009 12:53
Nome Cognome: Tommaso D'Anna
Slackware: 13.37
Kernel: 2.6.37.6
Desktop: xfce

Prossimo

Torna a Packages

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti