Introduzione ai pacchetti RPM
GLUGTO – 12 maggio 2011
Mihai T. Lăzărescu
[email protected]
www.lazarescu.org
Questa presentazione è disponibile con la licenza
Creative Commons Attribution-ShareAlike (BY-SA) 3.0
Indice
●
Gestori grafici di pacchetti RPM
●
Dietro che c’è?
●
Gestione automatica delle dipendenze
●
Gestione manuale pacchetti
●
Creazione e compilazione
●
Conversione
●
Risoluzione problemi
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 2
Gestori grafici di pacchetti RPM
– Fedora –
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 3
Gestori grafici di pacchetti RPM
– SuSE –
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 4
Gestori grafici di pacchetti RPM
– Mandriva –
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 5
Distribuzioni basate su RPM
aLinux, ALT Linux, Ark Linux, Caldera OpenLinux, cAos Linux,
Fedora, Linkat, Lycoris Desktop/LX, Mandriva Linux, Red Hat
Linux, SUSE Linux, Turbolinux, Vine Linux, YOPER, Aurora
SPARC Linux, Berry Linux, BLAG Linux and GNU, EduLinux,
EnGarde Secure Linux, Hanthana, K12LTSP, Kororaa, Linpus
Linux, Moblin, MythDora, Network Security Toolkit, Ojuba
Linux, Red Hat Enterprise Linux, Russian Fedora Remix,
Trustix, Xange, Fusion Linux, Yellow Dog Linux, Asianux,
CentOS, ClearOS, Fermi Linux LTS, Miracle Linux, Oracle
Enterprise Linux, Red Flag Linux, Rocks Cluster Distribution,
Scientific Linux, SME Server, TrixBox, Annvix, Caixa Mágica,
MCNLive, PCLinuxOS, Trinity Rescue Kit, Unity Linux, Mageia
Sono 51 su Wikipedia>List_of_Linux_distributions
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 6
Perché pacchetti RPM?
●
●
●
●
●
Processo di installazione ben definito
Interfaccia unica per installare,
aggiornare, rimuovere pacchetti
Database con informazioni sui pacchetti,
metadata (nome, versione, licenza, ...)
Interrogazioni varie, tipo a chi appartiene un file
Stabilità di sistema, dipendenze,
aggiornamenti automatici, sicurezza,
firme digitali, checksum file
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 7
Breve storia dell’RPM
●
Avviato da Marc Ewing ed Erik Troan in
1997 per Red Hat
●
RPM == Red Hat Package Manager
●
Free source, ottime caratteristiche
●
Ripreso nei primi 2000, usato oltre Red Hat
●
Per binari, documenti, Java, Perl, etc.
●
Fa parte di LSB, alla base di OpenPKG
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 8
Specifiche di progetto per l’RPM
●
Facilità d’uso
●
Focus sul pacchetto
●
Gestione di upgrade, di dipendenze
●
Capacità di interrogare, verificare
●
Supporto per varie architetture
●
Lavorare con i sorgenti originali inalterati
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 9
Formato del pacchetto RPM
●
File archivio compresso in formato cpio
●
Istruzioni per l’installazione:
dipendenze
– dove mettere i file
– permessi e proprietà per ciascun file
Script di supporto (scriplets)
–
●
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 10
– YUM –
lo sciogli nodo delle dipendenze
●
●
●
Le dipendenze sono molto utili,
ma possono essere rompicapo
Con YUM si trovano le soluzioni:
installa quanto richiesto, quanto
necessario e rimuove l’obsoleto
Usa i metadati estratti
dai pacchetti per calcolare le dipendenze
Immagine CC-BY
http://www.flickr.com/photos/psyberartist/348348983/
–
anche la lista dei file, se necessario
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 11
Metadata – informazioni di base
●
Name
k3b
●
Version
2.0.2
●
Release
4.fc14
●
Group
Applications/Archiving
●
Summary
(breve descrizione)
●
License
GPLv2+
●
Project website
http://www.k3b.org/
●
Description
(lunga)
●
etc.
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 12
Metadata – informazioni di
sistema
●
●
●
Elenco file
File di documentazione (omissibili),
file di configurazione (non sovrascritti),
file firma (MD5->SHA1->SHA256)
Pacchetti, librerie richieste (versione
opzionale), binari (eseguibili, script, ...)
●
Cosa fornisce – informazione simbolica
●
Script per installazione / rimozione
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 13
Convenzioni nomi pacchetti RPM
●
Pacchetti binari:
grep-2.7-2.fc14.i686.rpm
● grep – nome
● 2.7 – versione
● 2.fc14 – release, distribuzione
● i686 – architettura
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 14
Convenzioni nomi pacchetti RPM
●
Pacchetti non binari:
bitmap-console-fonts-0.3-16.fc14.noarch.rpm
bitmap-console-fonts – nome
● 0.3 – versione
● 16.fc14 – release, distribuzione
● noarch – nessuna architettura
●
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 15
Convenzioni nomi pacchetti RPM
●
Pacchetti sorgente:
gcc-4.5.1-4.fc14.src.rpm
● gcc – nome
● 4.5.1 – versione
● 4.fc14 – release, distribuzione
● src – sorgente
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 16
La base dati RPM
●
Elenco di tutti i pacchetti installati con:
–
metadata per ciascuno
–
data installazione
●
Berkeley DB per accesso rapido
●
In /var/lib/rpm/
●
Risorsa critica, fare backup, mai cancellare
●
Può essere rimediata, ricostruita, gestita, ma non
rifatta
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 17
RPM CLI
●
La linea di comando è amico! :-)
●
Scrittura solo per root, lettura per chiunque
●
Processo volutamente non-interattivo
●
Argomenti gettonati del commando rpm:
–
-h: barra di avanzamento operazione
–
-v: loquace (informazioni download)
–
--test: modo test (“dry run”)
–
--force: sovrascrittura file (!!)
–
--nodeps: ignora le dipendenze (!!)
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 18
Esempi
●
installazione => nome del file
rpm -ivh grep-2.7-2.fc14.i686.rpm
– i: installa, v: loquace, h: mostra #
upgrade => nome del file
–
●
rpm -Uvh grep-2.7-2.fc14.i686.rpm
– U: upgrade, v: loquace, h: mostra #
–
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 19
Esempi
●
●
●
interrogazione => nome pacchetto
–
rpm -ql grep
–
q: query, l: list files
rimozione => nome pacchetto
–
rpm -e grep
–
e: erase
downgrade => nome pacchetto
–
rpm -Uvh --oldpackage grep-2.5.1-55.el5.rpm
–
--oldpackage: più vecchio di quello installato
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 20
File di configurazione dei RPM
●
I file di configurazione esistenti e
modificati sono salvati come
–
<file>.rpmsave
oppure
–
<file>.rpmnew
in base ai loro tag nel pacchetto, o anche
–
<file>.rpmorig
se il file è rimosso nel nuovo RPM
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 21
Rete
●
Si possono specificare file in rete
●
Supporta HTTP e FTP
●
I file sono scaricati temporaneamente
●
I pattern funzionano solo con FTP
rpm --install http://.../grep-2.7-2.fc14.i686.rpm
rpm --upgrade ftp://.../grep-2.7-2.fc14.i686.rpm
rpm --freshen ftp://.../*.rpm
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 22
Pacchetti RPM sorgente
●
Gli SRPM contengono tutto il necessario
per generare i pacchetti RPM binari:
file spec
– sorgenti (tar.gz)
– patch
–
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 23
Installazione file sorgente
●
installazione => nome del file SRPM
rpm -ivh grep-2.7-2.fc14.src.rpm
● mette i files in SOURCES
● e la spec in SPECS
gli SRPM non entrano nel database RPM
–
●
●
rimozione => spec file name
–
rpmbuild --rmsource --rmspec grep.spec
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 24
Compilazione SRPM
●
Creazione dei pacchetti binari dall’SRPM:
–
●
●
Creazione rpm dal file spec:
–
rpmbuild -ba grep.spec
–
-b: build, -a: all packages (src e binari)
Creazione rpm dall’archivio tar:
–
●
rpmbuild --rebuild grep-2.7-2.fc14.src.rpm
rpmbuild -ta grep-2.7.tar.gz
I sorgenti con patch vanno in BUILD,
gli RPM binari in RPMS/<arch>/
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 25
Buon senso!
MAI COMPILARE RPM COME ROOT
MAI COMPILARE RPM COME ROOT
MAI COMPILARE RPM COME ROOT
MAI COMPILARE RPM COME ROOT
MAI COMPILARE RPM COME ROOT
MAI COMPILARE RPM COME ROOT
MAI COMPILARE RPM COME ROOT
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 26
Per chiarezza
E POI MAI!
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 27
Struttura dell’albero di
compilazione
|-- BUILD
|-- BUILDROOT
|-- RPMS
| |-- athlon
| |-- i386
| |-- i486
| |-- i586
| |-- i686
| `-- noarch
|-- SOURCES
|-- SPECS
`-- SRPMS
GLUGTO – 12 maggio 2011
●
Macro definiti in:
–
●
~/.rpmmacros
Esempi:
–
%_topdir
–
%_tmppath
–
%_smp_mflags
Introduzione ai pacchetti RPM – 28
Amici CLI per...
●
Creare l’albero:
–
●
Ripulire l’albero:
–
●
rpmdev-setuptree
rpmdev-wipetree
Estrarre i file da un RPM:
–
rpmdev-extract
rpmdev-: bumpspec, checksig, cksum, diff, extract, md5,
newinit, newspec, packager, rmdevelrpms, setuptree,
sha1, sha224, sha256, sha384, sha512, sort, sum,
vercmp, wipetree
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 29
Come preparare un RPM
●
Il file spec contiene la ricetta
●
Somiglia ad uno script shell
●
Elenca i contenuti per creare l'RPM
sorgenti
– patch
– altri file
Descrive il processo di creazione
–
●
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 30
Anatomia di un file spec
●
preambolo
●
%prep (setup)
●
%build
●
%install
●
%clean
●
%files
●
%changelog
GLUGTO – 12 maggio 2011
Immagine CC-BY
http://www.flickr.com/photos/27620885@N02/2671077524/
Introduzione ai pacchetti RPM – 31
File spec: preambolo
●
Name/Version/Group/License
●
Release (revisione del pacchetto)
●
Source/Patch
●
Require (dipendenze)
compilazione e installazione
Summary/Description
–
●
●
Definizione macro locali
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 32
Esempio di preambolo
Name:
helloworld
Version:
1.1
Release:
3
Summary:
An application that prints “Hello World!”
License:
GPLv2+
Group:
System Environment/Base
Source0:
http://helloworld.com/helloworld-1.1.tar.gz
Patch0:
fixtypo.patch
BuildRoot:
%{_tmppath}/%{name}-%{version}-%
{release}-root-%(%{__id_u} -n)
BuildArch:
noarch
%description
Il programma ...
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 33
File spec: setup
●
Creazione albero sorgenti
●
Scompattazione sorgenti
●
Applicazione patch
●
Eventuali comandi pre-build
●
Esempio di setup:
%prep
%setup -q
%patch0 -p1
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 34
File spec: build
●
Creazione componenti binarie
●
Macro %configure
esegue ./configure con opzioni sane
Esempio:
–
●
%build
%configure
make %{?_smp_mflags}
●
da adattare al metodo di build del progetto
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 35
File spec: install
●
Creazione della buildroot
●
Preparazione struttura del filesystem
●
Copia dei file compilati nella buildroot
●
Rimuove file installati non necessari
%install
rm -rf %{buildroot}
mkdir -p %{buildroot}%{_bindir}
cp helloworld.sh %{buildroot}%{_bindir}/helloworld
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 36
File spec: clean & files
●
Clean cancella la buildroot
●
Files elenca il contenuto del pacchetto
–
RPM si ferma se ci sono file non indicati
–
MAI cercare di aggirare il controllo
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%attr(0755,gold,fish) %{_bindir}/helloworld
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 37
File spec: changelog
●
Annotare i cambiamenti al pacchetto
●
È diverso dal changelog dei sorgenti
●
Da aggiornare ad OGNI cambiamento
●
Esempio di sezione %changelog:
%changelog
* Mon Jun 2 2008 Pippo Caio <[email protected]> 1.1-3
- minor example changes
* Mon Apr 16 2007 Pippo Caio <[email protected]> 1.1-2
- update example package
* Sun May 14 2006 Pippo Caio <[email protected]> 1.1-1
- initial package
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 38
Magnificenza
●
K.I.S.S.
●
Una patch per ogni modifica
●
Evitare pre/post quando possibile
●
Usare sempre il changelog
●
Ispirarsi a pacchetti Fedora
●
Usare macro (correttamente)
●
Essere coerenti
●
Preferire macro di sistema
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 39
Magnificenza Superiore
●
Usare rpmlint, correggere gli errori
●
Includere config/script come files (Source#)
●
Commenti!
...ma che lo spec rimanga leggibile
– pensare a chi dovrà lavorare dopo
MAI eseguire rpm da uno spec file
–
●
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 40
Prendere lucciole per candele
●
Generatori di pacchetti
●
“funziona” non è uguale a “fatto bene”
Pacchettizzare binari non partendo dai
sorgenti
–
non sempre evitabile
Disattivare controllo file non pacchettizzati
–
●
–
solo se si è in cerca di guai...
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 41
Utile sapere
●
I cortocircuiti:
rpm -bp – esegui solo %prep
– rpm -bc – esegui anche %build
– rpm -bi – esegui anche %install
– rpm -bl – controlla file in lista %files
ccache
–
●
–
accelera i cicli di ricompilazione
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 42
Prova del nove
●
Guardiamo spec e compiliamo qualcosa?
GLUGTO – 12 maggio 2011
Introduzione ai pacchetti RPM – 43
Scarica

QUI - GlugTo