Da Zero a RPM. Introduzione al packaging. Gianluca Sforna. Fedora Project Ambassador



Documenti analoghi
Introduzione ai pacchetti RPM

Drupal. E vai con un po' di Drupal for Dummies... :D. Copyright by hachreak

Tale attività non è descritta in questa dispensa

Pacchettizzazione e distribuzione del software

Installazione & Configurazione Php e MySQL su Mac Os X. Php

Il web server Apache Lezione n. 3. Introduzione

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

Creare un sito Multilingua con Joomla 1.6

Manuale Utente Amministrazione Trasparente GA

GUIDA ALLE SOLUZIONI

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

INDICE. IL CENTRO ATTIVITÀ... 3 I MODULI... 6 IL MY CLOUD ANASTASIS... 8 Il menu IMPORTA... 8 I COMANDI DEL DOCUMENTO...

Capitolo 12 Lavorare con i modelli

NOZIONI BASE PER ESERCITAZIONI

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

MANUALE D USO DELLA PIATTAFORMA ITCMS

FtpZone Guida all uso Versione 2.1

DevC++ vers Manuale d uso

Usare Qt con Visual C++ Express Edition

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

ISTRUZIONI PER L INSTALLAZIONE DI MINGW

DynDNS tra Client e server Linux Ubuntu (Client e server 8.04 LTS)

Intel One Boot Flash Update Utility Guida dell utente

19. LA PROGRAMMAZIONE LATO SERVER

Corso di Informatica (Programmazione) Lezione 6 (31 ottobre 2008)

Cos'é Code::Blocks? Come Creare un progetto Come eseguire un programma Risoluzione problemi istallazione Code::Blocks Che cos è il Debug e come si usa

Eclipse e Subversion

Note per scaricare e installare il software cliccando alla pagina DOWNLOAD del sito,

Manuale di KLinkStatus. Paulo Moura Guedes Traduzione iniziale italiana: Samuele Kaplun Traduzione italiana: Pino Toscano

Domande e Risposte ALLEGATI CLIENTI E FORNITORI. DATALOG Soluzioni Integrate

Capitolo 4 Pianificazione e Sviluppo di Web Part

COSA FARE APPENA ACQUISTATA UNA SMARTBOARD TM

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

Breve introduzione al Javadoc

per scrivere un articolo da prima pagina! per inviare una newsletter Come si crea Comunicazione Anfaa Edizione 4a.2013

INSTALLAZIONE JOOMLA

MANUALE EDICOLA 04.05

Appunti di Informatica 1

Manuale di KSig. Richard A. Johnson Traduzione del documento: Daniele Micci

Introduzione a LyX. Creazione di un documento Struttura e stile Modelli di documento Automatismi Riferimenti...

Guida all uso della piattaforma. portale Weblog & Podcast del MIUR COME UTILIZZARE AL MEGLIO L AMMINISTRAZIONE DEL BLOG

Corso Eclipse. Prerequisiti. 1 Introduzione

Corso ForTIC C2 LEZIONE n. 1

INDICE. Accesso al Portale Pag. 2. Nuovo preventivo - Ricerca articoli. Pag. 4. Nuovo preventivo Ordine. Pag. 6. Modificare il preventivo. Pag.

Product Shipping Cost Guida d'installazione ed Utilizzo

GUIDA ALL INSTALLAZIONE DEI ROTABILI v.1.1 TRAIN SIMULATOR 2014


SOMMARIO... 3 INTRODUZIONE...

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

File, Modifica, Visualizza, Strumenti, Messaggio

filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44

Progetto di Ingegneria del Software 2. SWIMv2

Guido d uso sito internet Unione Valdera

Qui Pago (Key Client/CartaSì) Guida d'installazione ed Utilizzo

Creare un applicazione con Qt Creator in pochi semplici passi

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Guida di Installazione GCC

Tutorial sugli ambienti di sviluppo: Eclipse e NetBeans

Setup e installazione

Eclipse. Avviare un progetto e compilare un semplice programma

WORD per WINDOWS95. Un word processor e` come una macchina da scrivere ma. con molte più funzioni. Il testo viene battuto sulla tastiera

Prova Finale Controllo delle versioni

Apache 2, PHP5, MySQL 5

Modelli Computazionali per Sistemi Complessi

Servizio Feed RSS del sito CNIT

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Server Galileo.

Corso ForTIC C2 LEZIONE n. 8. Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

CAPITOLO 1 PREREQUISITI DI INSTALLAZIONE SOFTWARE RICAMBI CAPITOLO 2 PROCEDURA

UN TOPO SFUGGENTE. CoderDOJO su Javascript - Trento. Augusto Ciuffoletti. 26 maggio 2015

LABORATORIO PER IL DESIGN DELLE INTERFACCE PEGORARO ALESSANDRO CASSERO.IT MANUALE DI AGGIORNAMENTO, MANUTENZIONE E USO DEL SITO

FtpZone Guida all uso

STAMPA UNIONE DI WORD

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Manuale di Aggiornamento BOLLETTINO. Rel H4. DATALOG Soluzioni Integrate a 32 Bit

Il pacchetto contiene sia l ambiente di sviluppo sia i driver per la scheda.

ToolChain: Come Generare Applicazioni in Linguaggio Macchina

Questa guida vi illustrerà i principali passaggi da eseguire per l'inserimento dei Bandi di gara.

Il Programma... 3 I moduli... 3 Installazione... 3 La finestra di Login... 4 La suite dei programmi... 6 Pannello voci... 10

CONTENUTI 1. INTRODUZIONE CONCETTI BASICI SU EQUINOX CMS XPRESS ACCESSO A EQUINOX CMS XPRESS PAGINA D INIZIO...

Creare un nuovo tema grafico ( skin")

Dropbox. Quando qualcuno ci invita a condivide con noi una cartella, veniamo avvisati via mail.

Breve guida introduttiva ad Orario Grafico LITE 1.27

Accesso al Web Client Zimbra

Manuale di Blogilo. Mehrdad Momeny Traduzione e revisione del documento: Valter Mura

Agenzia delle entrate on line. A cosa serve?

FPf per Windows 3.1. Guida all uso

SDLXLIFF in Word. Revisionare file SDLXLIFF in MS Word. Guida

Attivazione della connessione PPTP ADSL

La prima applicazione Java con NetBeans IDE. Dott. Ing. M. Banci, PhD

Database Manager Guida utente DMAN-IT-01/09/10

Manuale Utente Albo Pretorio GA

ImporterONE Export Plugin Magento

A T I C _W E B G U I D A AL L A N A V I G A Z I O N E S U L S I T O D E L G R U P P O. Rev. 2.1

IL MIO PRIMO SITO: NEWS

Stampa Grafica Cud. Guida all Istallazione e all Uso. RICERCA INFORMATICA s.r.l.

WinRAR: Guida alla compressione dei files

Transcript:

Da Zero a RPM Introduzione al packaging Gianluca Sforna Fedora Project Ambassador Questa presentazione è disponibile con la licenza Creative Commons Attribution-ShareAlike (BY-SA) 3.0 ad eccezione dei logo e dei trademark Red Hat e Fedora, usati con permesso.

Prerequisiti saper usare un editor di testo saper installare RPM saper compilare un software dai sorgenti

Nota bene useremo un esempio semplice i pacchetti 'veri' sono più complicati a volte MOLTO più complicati In caso di dubbi, chiedete!

Perchè pacchettizziamo standardizza deployment sicuro di averlo installato semplifica l'ambiente sicuro di come trovarlo gestione conformità sicuro di cosa è presente

Come pacchettizziamo https://fedoraproject.org/wiki/packaging:guidelines documento in evoluzione colleziona le best practices esistono eccezioni quelle comuni sono documentate per il resto rivolgersi al Fedora Engineering Steering Committee (FESCo)

Ok, ma quando si inizia? ci vuole un progetto: semplice significativo che ci eviti la maledizione del programmatore???

La maledizione Quando si affronta un nuovo linguaggio o tecnologia, il primo progetto deve essere 'Hello world' o non saremo mai in grado di usare questo linguaggio o tecnologia

Hello RPM

Cuciniamo un RPM Preparare un RPM è come cucinare Strumenti da cucina (rpmbuild, mock) Ingredienti (sorgenti + patch) Ricetta (spec file)

Gli strumenti installiamo l'indispensabile con # yum install @fedora-packager creiamo ambiente di build nella home $ rpmdev-setuptree

Lo spec file il file spec è come una ricetta simile ad uno script shell elenca i contenuti dell'rpm sorgenti patch altri file descrive il processo di build Image CC-BY-SA http://www.flickr.com/photos/ted_major/5045483028

Anatomia di uno spec preambolo %prep (setup) %build %install %files %changelog Image CC-BY http://www.flickr.com/photos/27620885@n02/2671077524/

Il nostro primo spec Portiamoci nella directory SPECS $ cd rpmbuild/specs/ Prepariamo un nuovo spec $ rpmdev-newspec hello hello.spec created; type minimal, rpm version >= 4.9.

Preambolo Name: hello Version: Release: 1%{?dist} Summary: URL: License: Source0: %description Usare spazi o tabulatori, a scelta. Non mescolare lo stile nello stesso spec.

Preambolo Name: hello Version: 2.8 Release: 1%{?dist} Summary: URL: License: Source0: %description MACRO! Nel caso più semplice, la versione è quella del pacchetto upstream in caso di pacchetti pre o post release, regole specifiche per campi Version and Release https://fedoraproject.org/wiki/packaging:namingguidelines#package_version

Macro Simili alle variabili negli script shell possono comportarsi da stringhe o interi ma è più semplice trattarle sempre da stringhe le più comuni macro sono già definite rpm --showrc mostra tutte le macro definite rpm --eval %{macroname} mostra l'espansione della macro quasi tutte le macro di sistema inziano con _ (es. %{_bindir})

Macro %{?dist} https://fedoraproject.org/wiki/packaging:disttag esiste in Fedora e RHEL 5+. serve ad aggiungere un identificativo (dist tag) alla fine del campo release? significa se definito, aggiungilo, altrimenti non fare nulla verrà quindi convertito in 1.fc17 in Fedora 17, e 1.el5 in RHEL 5.

Preambolo Name: hello Version: 2.8 Release: 1%{?dist} Summary: Prints a Familiar, Friendly Greeting URL: License: Source0: %description Hello prints a friendly greeting. It also serves as a sample GNU package, showing practices that may be useful for GNU projects. Summary è una breve descrizione (<80 caratteri) di quello che fa il pacchetto, senza punto alla fine La descrizione più estesa va in %description

Preambolo Name: hello Version: 2.8 Release: 1%{?dist} Summary: Prints a Familiar, Friendly Greeting URL: http://www.gnu.org/software/hello/ License: Source0: %description Hello prints a friendly greeting. It also serves as a sample GNU package, showing practices that may be useful for GNU projects. URL fa riferimento alla home page del software

Preambolo Name: hello Version: 2.8 Release: 1%{?dist} Summary: Prints a Familiar, Friendly Greeting URL: http://www.gnu.org/software/hello/ License: TODO Source0: %description Hello prints a friendly greeting. It also serves as a sample GNU package, showing practices that may be useful for GNU projects. License identifica la licenza/e dei files installati dal pacchetto. Per determinare il valore corretto dovremo guardare i sorgenti. Per ora mettiamo TODO

Preambolo Name: hello Version: 2.8 Release: 1%{?dist} Summary: Prints a Familiar, Friendly Greeting URL: http://www.gnu.org/software/hello/ License: TODO Source0: ftp://ftp.gnu.org/gnu/hello/hello-2.8.tar.gz %description Hello prints a friendly greeting. It also serves as a sample GNU package, showing practices that may be useful for GNU projects. Source0 indica quali sorgenti usare. Si può avere più di un Source# se necessario Usare la URL completa da cui si è scaricato il file

Preambolo Name: hello Version: 2.8 Release: 1%{?dist} Summary: Prints a Familiar, Friendly Greeting URL: http://www.gnu.org/software/hello/ License: TODO Source0: ftp://ftp.gnu.org/gnu/hello/%{name}-%{version}.tar.gz %description Hello prints a friendly greeting. It also serves as a sample GNU package, showing practices that may be useful for GNU projects. Ancora macro! in caso di update, basterà cambiare Version

spec file: prep %prep %setup -q %patch0 -p1 Scompatta sorgenti in ~/rpmbuild/build/ Applica eventuali patch Altri comandi pre-build

spec file: build %build %configure make %{?_smp_mflags} creazione componenti binarie macro %configure utile per progetti basati su autotools esegue./configure con sane opzioni di default da adattare a seconda del metodo di build usato (scons, cmake, etc) dal progetto

spec file: install %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} creazione della buildroot preparazione struttura del filesystem copia dei file compilati nella buildroot eventuale pulizia file installati non necessari

spec file: files elenca il contenuto del pacchetto se non appare in %files, non ci sarà nel pacchetto RPM si fermerà in presenza di file non pacchettizzati MAI cercare di aggirare il controllo Per ora lasciamolo vuoto

spec file: changelog %changelog * Sat Oct 27 2012 Gianluca Sforna <giallu@gmail.com> 2.8-1 - Initial package usato per annotare i cambiamenti al pacchetto non è alternativo al changelog dei sorgenti da aggiornare ad OGNI cambiamento

Licenza rpmbuild -bp hello.spec -b: build, -p: prep (esegue solo sezione prep) se non ci sono errori troverete i sorgenti in ~/rpmbuild/build/hello-2.8 assegnare la giusta licenza è fondamentale. alcuni suggerimenti: cercate nei file COPYING, LICENSE o README controllate i sorgenti, il codice migliore ha la licenza indicata in ognuno dei file

Licenza /2 annotare le licenze trovate (anche più di una) confrontarle con la lista ufficiale sul wiki https://fedoraproject.org/wiki/licensing#software_license_list che licenza mettiamo per hello? trovare la giusta licenza può essere molto complicato per ogni dubbio scrivere alla mailing list: fedora-legal@lists.fedoraproject.org

%doc COPYING va messo nell'rpm aggiungiamolo a %files con la macro %doc %doc marca i files come documentazione li copia direttamente dai sorgenti: ~/rpmbuild/build/hello-2.8/ nella docdir del pacchetto mettiamolo nello spec: %files %doc COPYING

Dai sorgenti al binario rpmbuild -ba hello.spec -b: build, -a: all packages (src e binari) rpmbuild -bb hello.spec -b: build, -b: binary packages (solo binari) rpmbuild -bc hello.spec -b: build, -c: compile (esegue solo sezione prep) man rpmbuild

Proviamo la build rpmbuild -ba hello.spec ERRORE. Ma ci dice quali files aggiungere! RPM build errors: Installed (but unpackaged) file(s) found: /usr/bin/hello /usr/share/info/dir /usr/share/info/hello.info.gz /usr/share/locale/bg/lc_messages/hello.mo /usr/share/locale/ca/lc_messages/hello.mo /usr/share/locale/da/lc_messages/hello.mo... che ci fanno i file sotto /usr/share/locale?

Traduzioni potremmo aggiungere i files a mano supporto diretto nel build system Tre step: aggiungo nel preambolo: BuildRequires: gettext aggiungo in %install: %{find_lang} %{name} modifico %files: %files -f %{name}.lang

Best Practices 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

Altre Best Practices usare rpmlint, correggere gli errori segnalati includere config/script come files (Source#) Commenti!...ma che lo spec rimanga leggibile pensare a chi dovrà lavorare al pacchetto dopo di noi. MAI eseguire rpm da uno spec file come in Ghostbusters. Incrociare i flussi? male.

Errori di inesperienza generatori di pacchetti "funziona" non è lo stesso di "fatto bene" pacchettizzare binari, non partendo dai sorgenti non sempre evitabile, ma potendo scegliere meglio non farlo disattivare controllo file non pacchettizzati solo se si è in cerca di guai...

Link utili Linee guida per il packaging: http://fedoraproject.org/wiki/packaging:guidelines http://fedoraproject.org/wiki/packaging:reviewguidelines Maximum RPM: http://rpm.org/max-rpm-snapshot/ Fedora GIT Tree (contiene migliaia di spec) http://pkgs.fedoraproject.org/cgit/ Rpmlint website: http://rpmlint.zarb.org

GRAZIE Contatti: http://morefedora.blogspot.com http://giallu.fedorapeople.org/events giallu@fedoraproject.org @giallu su identi.ca e twitter

Preamble: Other items we didn't need for enum Patch0 If you need to apply a patch to the software being packaged, you can add a numbered patch entry here: Patch0: foo-1.2.3-fixbugs.patch BuildRequires This lists the packages which need to be present to build the software. rubygem-color is very very simple. Most packages have at least one BuildRequires: BuildRequires: bar >= 2.0 You can list as many packages as BuildRequires as you need, although, you should try to avoid redundant items. Also, BuildRequires can be versioned (see above).

Preamble: Explicit Requires Requires This lists any packages which we know are necessary to be present on the system to run the software in our package, once it is installed. RPM usually does a very good job of autodetecting dependencies and adding them for you especially when the software is in C, C++, or Perl. Be careful about adding explicit Requires here, as most packages will not need any. You can add versioned Requires as needed, in exactly the same way as versioned BuildRequires are done.

%if condition How to handle different OSes with one spec? Use macros and conditions: %if 0%{?rhel} == 6 0%{?fedora} < 17 Requires: ruby(abi) = 1.8 %else Requires: ruby(abi) = 1.9.1 %endif

Preamble: Explicit Provides Provides: tell rpm that this package provides something else. E.g. Httpd provides www-server