Portage è fantastico. Lo trovo il package manager più potente e flessibile.
A fronte di un’ operazione di attenta configurazione , permette di avere un sistema altamente ottimizzato e personalizzato. Il suo punto di forza, da usare però con attenzione, è la possibilità di mischiare pacchetti stabili con pacchetti in fase di testing o marcati come instabili.
Make.conf
Il file make.conf contiene tutte le opzioni per l’installazione dei pacchetti, visto che la loro quasi totalità di questi viene compilata permette di avere installato solo quello che serve.
E’ possibile scegliere ad esempio il livello di ottimizzazione della compilazione , per omettere tutte le parti relative al debug e tramite i flag use decidere cosa includere nei pacchetti.
Esistono 2 livelli di flag use , il primo è quello generale a livello di make.conf ed il secondo è a livello di pacchetto ( /etc/portage/package.use). Questo permette un tuning ancora più mirato della vostra distro.
In make.conf si possono inoltre impostare altre opzioni per l’installazione come la lingua supportata.
Ecco il mio make.conf
These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /etc/make.conf.example for a more detailed example.
CFLAGS="-march=k8 -O2 -pipe"
MAKEOPTS="-j3"
CXXFLAGS="${CFLAGS}"
# This should not be changed unless you know exactly what you are doing. You
# should probably be using a different stage, instead.
CHOST="x86_64-pc-linux-gnu"
Queste sopra sono le opzioni di compilazione il -O2 -pipe servono per avere una compilazione più ottimizzata, mentre MAKEOPTS ="-j3" indica quante compilazioni vanno fatte in parallelo in questo caso 3 , la guida consiglia il numero di processori +1.
#PORTDIR_OVERLAY="/usr/local/layman/xeffects"
Questo è l’overlay di Xeffects , la voce è commentata perchè alla fine voglio solo installare Avant-window-navigator.
USE="3dnow X a52 aac acl acpi aiglx alsa apache2 apm audiofile bash-completation bash-completion bindist cairo cdb cddb cdparanoia cdr cups dbus directfb disk-partition dts dvd dvdr dvdread encode exif fbcon ffmpeg firefox flac gif gimp gnome gstreamer gtk gtkhtml hal hddtemp ieee1394 -ipv6 java javascript joystick jpeg jpeg2k libnotify lm_sensors mad -mono mp3 mpeg nsplugin nvidia offensive ogg openal opengl pdf php png ppds python quicktime samba scanner sensord svg symlink tiff truetype type1 usb vcd vorbis win32codecs xcomposite xml xvid"
Questi sono i flag use , non serve inserirli tutti all’inizio dell’installazione , il simbolo - davanti vuol dire che questo è disabilitato , ad esempio -mono
e -ipv6 .
LINGUAS="it en"
#X11
INPUT_DEVICES="keyboard mouse"
VIDEO_CARDS="nvidia"
#ALSA
ALSA_CARDS="intel8x0"
Queste sono le impostazioni rispettivamente per la lingua , per X11 e per alsa.
Quanti e quali flag use?
La flessibilità di portage vi permette di scegliere. Il mio metodo , che può essere alquanto discutibile, è quello di inserire quello che a prima vista può sembrarmi utile durante l’installazione attraverso questo elenco. Attenzione a non esagerare ,altrimenti se siamo nella fase di installazione portage può dare un errore di dipendenze circolari , a me è successo ed ho dovuto cancellare temporaneamente la voce relativa ad alsa.
I flag use si popoleranno con il tempo , per vedere che opzioni di compilazione ha un pacchetto basta lanciare emerge --ask --verbose [nome pacchetto] (versione breve emerge -av ). Ecco un esempio:
bob1 bob # emerge -av vlcThese are the packages that would be merged, in order:
Calculating dependencies... done!
[ebuild R ] media-video/vlc-0.8.6b USE="X a52 alsa bidi cdda cddb directfb dts dvd fbcon flac gnutls hal httpd libnotify live matroska mp3 mpeg ncurses nsplugin ogg opengl png samba stream svg theora truetype vcd vlm vorbis wxwindows xml xv (-3dfx) -aalib (-altivec) -arts -avahi -corba -daap -dc1394 -debug -dvb -esd -ggi -jack -libcaca -lirc -mod -musepack -optimisememory -oss -rtsp -sdl -sdl-image -seamonkey -shout -skins -speex (-svga) -upnp -v4l (-win32codecs) -x264 -xinerama -xosd" 0 kB
Total: 1 package (1 reinstall), Size of downloads: 0 kB
Would you like to merge these packages? [Yes/No]
Come si può vedere i flag use sono molti, in questo caso si può scegliere di inserirli , invece che a livello globale , a livello di singolo pacchetto . Basta quindi impostare il file /etc/portage/package.use così:
m
edia-video/vlc dvd ffmpeg mpeg mad wxwindows aac dts a52 ogg flac theora oggvorbis matroska freetype bidi xv svga gnutls stream vlm httpd cdda vcd cdio live
Come fare se abbiamo aggiunto un flag use e vogliamo abilitare la modifica a tutti i pacchetti installati? Semplicemente basta usare emerge --ask --update --newuse --deep world (versione breve emerge -avuD world) e portage automaticamente installerà tutti quei pacchetti che sono stati compilati con flag use diversi ed installerà i nuovi pacchetti necessari.
Stabile o testing?
Gentoo non ha versione , quella che vedete sul sito è una foto della distro in un dato momento.
Esiste la possibilità di mischiare pacchetti dichiarati in fasi di testing , per quelli unstable conviene aspettare a meno che non vogliate dare una mano al debug.
Sul sito di Gentoo il database dei pacchetti è consultabile da qui , si può anche cercare un pacchetto con emerge --search [nome] .
In base al pacchetto sotto ad ogni architettura si trova un simbolo che può avere questi significati:
- + stable
- ~ testing
- - not available
- M+ stable / hard masked
- M~ testing / hard masked
I casi che ci interessano sono lo stato stable e testing.
Per installare un pacchetto marcato testing basta usare l’apposita keyword ~arch dove arch è la vostra architettura ( esempio x86 , amd64 ecc.ecc.). La sconsideratezza potrebbe portarvi a fare ACCEPT_KEYWORDS="~arch" emerge [pachetto] NON FATELO! Sebbene un pacchetto testing non è pericoloso , potrebbe portarsi dietro altre librerie di sistema (ho scoperto che non si può downgradare glibc , non c’è modo).
La soluzione è di popolare il vostro /etc/portage/package.use , ecco uno stralcio del mio:
x11-drivers/nvidia-drivers
app-cdr/k3b
app-cdr/k9copy
app-cdr/kover
app-cdr/koverartist
app-cdr/k3b
media-gfx/gimp
media-gfx/gimp-print
#compiz
x11-wm/compiz
x11-plugins/compiz-extra
x11-apps/compiz-settings
app-portage/layman
x11-wm/metacity
x11-libs/
Potrebbe sembrare palloso aggiungere pacchetti su pacchetti , per installare compiz , ad esempio, ma è la soluzione corretta per non rischiare di rovinare il proprio sistema (“Da un grande potere derivano grandi responsabilità”).
Sui forum di Gentoo si legge di gente che vive felice con “~arch” attivo per tutti i pacchetti, la cosa è probabile , ma non è facile da gestire. Gentoo è una distro fantastica , ma per certi versi molto ostica , se si è alle prime armi è meglio evitare di crearsi problemi da soli.
Un esempio di libertà di scelta.
Ho deciso di non utilizzare moNO per nulla al mondo , con altre distribuzioni devi stare attento a cosa installi e quali pacchetti questo si porta dietro. Con Gentoo bastando 2 modifiche :
-monoin make.conf- inserire il pacchetto non voluto in /
etc/portage/package.maskinserendo la rigadev-lang/mono
Mettiamo che una sera torni a casa e sotto i fumi dell’alcool decida di installare beagle , perchè ho appena visto un beagle che mi stava simpatico , ecco cosa risponderà il mio terminale:
bob1 bob # emerge -av app-misc/beagle
These are the packages that would be merged, in order:
Calculating dependencies -
!!! All ebuilds that could satisfy ">=dev-lang/mono-1.1.9" have been masked.
!!! One of the following masked packages is required to complete your request:
- dev-lang/mono-1.2.2.1 (masked by: package.mask)
- dev-lang/mono-1.2.4 (masked by: package.mask, ~amd64 keyword)
- dev-lang/mono-1.1.16.1 (masked by: package.mask, ~amd64 keyword)
- dev-lang/mono-1.2.3.1 (masked by: package.mask, ~amd64 keyword)
For more information, see MASKED PACKAGES section in the emerge man page or
refer to the Gentoo Handbook.
(dependency required by "dev-dotnet/gtk-sharp-2.10.0" [ebuild])
Pericolo scampato.
Conclusioni
Questa è una minima dissertazione su portage , per saperne di più consultate le guide on-line, che sono ottime e veramente esaurienti.
Per i curiosi il flag use “offensive” serve per abilitare feauture potenzialmente offensive dei pacchetti come ad esempio sudo che ti offende se sbagli password (io l’ho abilitato ovviamente) seguendo queste istruzioni.
Sottofondo musicale : John Coltrane – Coltrane