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