Considerazioni personali prepost:
Molti ritengono che distribuzioni come Slackware manchino di requisiti minimi di usabilità. In primis ciò che li frena è la gestione delle dipendenze dal punto di vista software “A dipende da B che a sua volta dipende da C” ( problema noto a chi per giorni ha compilato a mano più e più pacchetti nel disperato tentativo di ritrovarsi un parco software quasi perfetto e un sistema stabile, magari anche esente da crash). Io personalmente non ho mai considerato questa cosa un problema, ne tantomeno un difetto… Ritengo invece che sia un grosso vantaggio da svariate angolazioni. Ciò che piuttosto mi ha sempre ispirato è l’idea di avere un tool che gestisse i pacchetti nativi “formato source” e che con le giuste opzioni rigorosamente inserite da me in maniera manuale e/o mediante script esterno (sempre scritto da me “della serie: per personale uso e consumo”) mi restituisca il pacchetto finale compilato e pronto per essere installato. Una sorta di tool appositamente creato per distro source-based come “Sourcerer/Lunar” per intenderci. A tal proposito poco tempo fà mi sono accorto che esisteva. Si chiama src2pkg.
Cos’è e cosa fà:
Src2pkg è appunto un tool di gestione di pacchetti source per Slackware comunemente zippati in tarball dalle specifiche e varie caratteristiche di compressione: tar,tgz,tar.bz2,tar.gz,tbz.
Src2pkg scarica, estrae, compila e crea pacchetti attraverso l’uso di script che sfruttano comandi comuni quali configure,make,checkinstall/make install,etc… Riesce a gestire oltre a source formato tarball anche pacchetti binari di tipo *.rpm o *.deb come vedremo in seguito.
Il programma utilizza Trackinstall e Tracklist per creare i pacchetti. Il primo è una sorta di Checkinstall ( molto familiare a chi utilizza Slackware ) con una serie di modifiche aggiuntive. Estrae il contenuto di un source-tarball in una directory specificata e/o temporanea poi compila e crea il pacchetto. Permette la generazione di script in maniera automatizzata o differenziata utile alla ricompilazione degli applicativi.
Tracklist invece crea i log di tutti i comandi dati e le directory create durante la creazione dei pacchetti. Non è intrusivo, crea un file chiamato FILELIST nella current directory e può essere richiamato mediante apposito comando.
Tutti gli script sono richiamati da src2pkg che implementa una serie di opzioni di sintassi che facilitano l’utente per creare ed eventualmente richiamare il package creato mediante script.
NB: come già detto nella prefazione e come ribadito dall’autore: src2pkg non risolve dipendenze e non è stato creato per sostituire applicativi destinati all’upgrade generale o aggiornamento del sistema. Il tool infatti, se non fosse chiaro a tutti, non mira ad essere un gestore di pacchetti generale e di upgrade di sistema come possono esserlo emerge,slackpkg, apt-get e tutti quelli che vi vengono in mente…
Vantaggi di utilizzo:
I vantaggi sono molti. Primo fra tutti è quello di tenere sempre il sistema pulito con un parco software ordinato nel formato proprietario (*.txz) gestibile poi a sua volta da pkgtool e residente in /var/log/packages come default di sistema stesso. Ogni user capisce bene infatti che un conto è compilare e installare un pacchetto seguendo i metodi tradizionali che spesso non garantiscono nemmeno all’utente la chiarezza di locazione finale dei file che contribuiscono al programma che si sta installando.
Tutt’altra cosa invece è installare software precedentemente compilato in modo specifico “personale” (che è diverso da generale), confezionato, che sarà installato nel formato proprietario della distribuzione in uso o come in questo caso *.txz . In sostanza potrebbe sembrare ciò che anche gli Slackbuild già fanno, con la differenza che gli Slackbuild si portano dietro delle limitazioni di tipo pratico legate giustamente alla competenza dell’utente che nel peggiore dei casi (io non lo farei mai per indole) deve lanciare lo script così come è scritto. Src2pkg, invece, lascia ampio margine di sfogo alle richieste di utenti di tutte le fasce di competenza, consentendo all’utente poco esperto una installazione generalizzata e a quello esperto una più specifica e dettagliata “quasi meticolosa” compilazione. E’ proprio questa snellicità di fascia di utenza e competenza che lo rende un ottimo tool di creazione e compilazione di pacchetti.
Installazione e fase preliminare:
L’installazione è davvero semplice. Per prima cosa si scarica e si installa il pacchetto per Slackware dal link ufficiale:
~$ wget src2pkg-1.9.9-noarch-3.tgz ~$ su - Password: ~# installpkg src2pkg-1.9.9-noarch-3.tgz
A questo punto bisogna configurare il programma in maniera standard attraverso un semplice comando:
~# src2pkg --setup
Il programma si configurerà prendendo dalla configurazione di sistema i flag USE e allocherà i file principali di configurazione nelle directory di riferimento.
NB: Il setup è necessario solo se si tratta del primo avvio del tool.
NB: La directory /etc/src2pkg conterrà il file src2pkg.conf . In questo file è possibile specificare e cambiare molti dei settaggi di base del tool che possono in ogni caso essere richiamati e modificati in fase di avvio. Per ora magari è consigliata un occhiata al file per capire meglio di cosa si parla. Magari è opportuno “consigliato” cambiare subito il formato finale dei pacchetti visto che l’ultima release del programma prevede l’utilizzo del precedente formato *.tgz .
Quindi decommentiamo nella sezione PKG_FORMAT come da sempio:
~# vi /etc/src2pkg/src2pkg.conf # PKG_FORMAT # src2pkg can create packages using bzip2 or lzma instead of gzip. These packages # are not compatible with standard Slackware pkgtools, but can be installed using # the tukaani pkgtools or other installers which support them. This defaults to # the normal 'tgz' packages, or can be set to 'tbz' for bzip2 or 'tlz' for lzma [[ $PKG_FORMAT ]] || PKG_FORMAT="txz"
Salvati i cambiamenti siamo pronti ad utilizzare il tool.
Utilizzo standard di src2pkg:
Di base il programma è talmente facile che potrebbe usarlo anche un bambino che non ha mai compilato. Supponiamo di voler compilare e creare il pacchetto dell’ultima release in sviluppo di fluxbox senza voler abilitare niente che non siano i parametri default:
Scarichiamo il tarball del source nel formato che più ci aggrada:
~# wget fluxbox-1.1.1.tar.gz
Completato il download non resta che lanciare e lasciare che il tool faccia il resto:
~# src2pkg fluxbox-1.1.1.tar.gz
NB: Con immensa sorpresa per i più scettici lo stesso risultato è ottenibile dando direttamente il link del tarball. Sarà infatti src2pkg a preoccuparsi di scaricarlo mediante configurazione precedente del gestore di download da utilizzare. Di default è impostato wget che può facilmente essere modificato dal file /etc/src2pkg/src2pkg.conf
~# src2pkg http://downloads.sourceforge.net/project/fluxbox/fluxbox/1.1.1/fluxbox-1.1.1.tar.gz?use_mirror=ovh
L’output sarà come il seguente:
Found source archive: fluxbox-1.1.1.tar.gz Deleting old build files - Done Creating working directories: PKG_DIR=/tmp/fluxbox-1.1.1-pkg-1 SRC_DIR=/tmp/fluxbox-1.1.1-src-1 Unpacking source archive - Done Correcting source permissions - Done Checking for patches - None found Found configure script - Done Configuring sources using: LDFLAGS="-L/lib -L/usr/lib" CFLAGS="-O2 -m32 -march=i486 -mtune=i686" ./configure --prefix=/usr --libdir=/usr/lib Configuration has been - Successful! Compiling sources - Using: 'make' Compiling has been - Successful! Checking for 'install' rule - Okay Checking for DESTDIR (or similar) support - Found DESTDIR Installing using DESTDIR - Using: make DESTDIR=/tmp/fluxbox-1.1.1-pkg-1 install Installation in DESTDIR - Successful Processing package content: Correcting package permissions - Done Stripping ELF binaries - Using: strip -p --strip-unneeded Done Checking for standard documents - Done Notice - Moving man pages installed under usr/share/man to /usr/man Compressing man pages - Done! Creating slack-desc - From default text Searching for links in PKG_DIR - None found Rechecking package correctness: Checking for misplaced dirs - Done Rechecking package permissions - Notice - Found directories with unusual owner, group or permissions: 0755 root:root install 0755 root:root usr 0755 root:root usr/share 0755 root:root usr/share/fluxbox 0755 root:root usr/share/fluxbox/styles 0755 root:root usr/share/fluxbox/styles/zimek_green ...
Notice - These files and/or directories are listed for information only. Corrections may not be needed, but you should check them to be sure. Making installable package - Done Package Creation - Successful! - Package Location: /tmp/fluxbox-1.1.1-i486-1.txz ~#
NB: Di default il tool lavora in modalità quiet, evitandoci tutta la trafila di stringhe pastate a terminale durante la compilazione e l’output sarà colorato per permettere una più semplice comprensione di ciò che sta avvenendo. Sarà possibile ovviamente per scelta “personale” disattivare i colori e/o disattivare la modalità quiet attraverso il solito file src2pkg.conf . Al termine sarà creato il pacchetto fluxbox-1.1.1-i486-1.txz che sarà allocato nella directory /tmp . Anche in questo caso le opzioni sono modificabili attraverso il conf generale o mediante sintassi manuale che vedremo in specifico.
A livello generale diciamo che il pacchetto sarebbe in ogni caso già pronto per essere installato mediante pkgtool:
~# installpkg /tmp/fluxbox-1.1.1-i486-1.txz
Sintassi ed esempi:
Per consultare tutte le possibilità di sintassi:
~# src2pkg --help
NB: Tutti i comandi sono ampiamente commentati. Non credo sia necessario spiegarli singolarmente. In ogni caso faremo qualche esempio pratico di seguito.
Di base, spesso, gli applicativi che si tenta di compilare non finiscono tale processo. Nella maggior parte dei casi questo risultato è dato dalle mancate opzioni in fase di conpilazione. A tal proposito src2pkg ci permette un uso mirato delle opzioni di compilazione. Tanto per citarne una, possiamo scegliere di compilare un applicativo con l’opzione -e= corrispondente a extra_configs= . Questa opzione consente di passare parametri aggiuntivi che saranno racchiusi all’interno degli apici come da esempio:
~# src2pkg -e='--enable-static --disable-tests' tarball-source-nome.tar.bz2
Potremmo definire il prefisso di installazione dell’applicativo che nel caso precedente era /usr mediante il parametro: -p= o -prefix=/directory/…
Allo stesso modo potremmo ad esempio scegliere di abilitare l’opzione -A che genererà uno script contenente tutte le opzioni di compilazione del nostro tarball-source da compilare. Questo script sarà utile perchè la modifica dello stesso in modo manuale ci permetterà in seguito di ricompilare il nostro package con i parametri opportunamente modificati.
Supponiamo di voler compilare come prima fluxbox passandogli una serie di parametri aggiuntivi come da esempio:
~# src2pkg -A -e='--enable-shape --enable-slit --enable-remember --enable-toolbar --enable-regexp --enable-newwmspec --enable-nls --enable-timed-cache --enable-kde --enable-gnome --enable-xft --enable-xrender --enable-xpm --enable-imlib2 --enable-xmb --enable-randr --enable-xinerama' -p=/usr
NB: In questo caso abiliteremo tutte le opzioni che abbiamo scelto per fluxbox (xinerama,icone,trasparenza,etc…), si genererà uno script build modificabile per una ricompilazione del package successiva volendo e dichiareremo il prefisso di installazione mediante prefix.
Al termine lo script autogenerato contenente i parametri utilizzati sarà presente nella directory corrente sotto il nome di fluxbox.src2pkg.auto.Il package creato sarà sempre creato nella directory /tmp , in alternativa si potrà fornire manualmente il percorso prescelto mediante sintassi oppure tramite modifica del file /etc/src2pkg/src2pkg.conf.
NB: Lo script è modificabile manualmente. Opzione utile per il rebuild -b=2 (ricompilerà il package *.pkg-2.txz
Lo script creato sarà simile al seguente:
#!/bin/bash ## src2pkg script for: fluxbox ## Auto-generated by src2pkg-1.9.9 ## src2pkg - Copyright 2005-2009 Gilbert Ashley <amigo@ibilio.org> SOURCE_NAME='fluxbox-1.1.1.tar.gz' NAME='fluxbox' # Use ALT_NAME to override guessed value VERSION='1.1.1' # Use ALT_VERSION to override guessed value # ARCH='' BUILD='1' PRE_FIX='usr' # Any extra options go here: EXTRA_CONFIGS="--enable-shape --enable-slit --enable-remember --enable-toolbar --enable-regexp --enable-newwmspec --enable-nls --enable-timed-cache --enable-kde --enable-gnome --enable-xft --enable-xrender --enable-xpm --enable-imlib2 --enable-xmb --enable-randr --enable-xinerama" # Optional function replaces configure_source, compile_source, fake_install # To use, uncomment and write/paste CODE between the {} brackets. # build() { CODE } # Get the functions and configs . /usr/libexec/src2pkg/FUNCTIONS ; # Execute the named packaging steps: pre_process find_source make_dirs unpack_source fix_source_perms configure_source # compile_source # If used, the 'build' function replaces these 3 fake_install # fix_pkg_perms strip_bins create_docs compress_man_pages make_description make_doinst make_package post_process ## See the documentation for more help and examples. Below are some of # the most common Extras and Options for easy cut-and-paste use. # DOCLIST='' PATCHLIST='' INSTALL_TYPE='' # CONFIG_COMMAND='' MAKE_COMMAND='' INSTALL_LINE='' # When editing src2pkg scripts to add custom code, use these variables # to refer to the current directory, the sources or the package tree: # $CWD (current directory), $SRC_DIR (sources), $PKG_DIR (package tree) # Other commonly-used directories include: $DOC_DIR (document directory) # $MAN_DIR (man-page directory) $DATA_DIR (shared-data directory)
NB: Con uno script simile opportunamente settato oppure autogenerato per l’applicativo scelto da pacchettizzare sarebbe sufficiente un comando come il seguente per ritrovarsi con il package creato senza passare opzioni direttamente nella fase di avvio in shell. In effetti si fa la stessa cosa in due modi differenti. Esempio avendo lo script prima di aver compilato:
~# src2pkg fluxbox.src2pkg.auto
NB: In questo caso si partirebbe da uno script per passare le opzioni al tool anzichè definirle manualmente.
Esistono tante altre opzioni utili , come ad esempio quella per testare la compilazione senza procedere oltre: -T ; oppure l’opzione per installare il package al termine della compilazione con -I ; la lista delle cose che riesce a fare src2pkg è davvero molto lunga. La migliore arma per imparare è sempre la pratica.
Per dubbi e incertezze vi rimando al wiki ufficiale e alla sintassi dell’help:
~# src2pkg --help
Considerazioni finali:
Spesso si cercano cose di facili utilizzo, ma non sempre queste riescono a soddisfare le aspettative di tutte le fasce di utenza. Ho scritto questo post perchè credo che la strada giusta sia proprio in progetti come questo dove “snello e facile” non corrisponde ad “automatico e magari instabile e mal compilato o magari anche soltanto (non compilato a proprio uso)” . Sono sicuro che molti capiranno ciò che intendo dire. Come questo tanti altri tools sono in sviluppo…io personalmente credo che questo tipo di tools dovrebbero essere implementati in maniera standard in Slackware, magari sarò di parte perchè amo le distro source-based come gentoo, sourcerer e lunar. Fatto stà, che negli anni, dalla mia personale esperienza, ho sempre tratto vantaggi dal compilare ed ho sempre “invocato al peccato” quando c’erano cose come apt* di mezzo. Detto questo è sempre e solo una questione strettamente personale. Slackware di suo non usa gestione pacchetti quindi una rogna in meno da considerare. Magari un tool del genere non mi dispiacerebbe vederlo sviluppato e implementato dalla comunità Slackware dipendente…vedremo :) .
# End