/srv/irclogs.ubuntu.com/2011/12/29/#ubuntu-it-meeting.txt

ic3dquit19:58
viettaciao Dolasilla :)20:29
* warp10 saluta20:31
viettahola warp10 20:31
warp10vietta: o/20:31
viettaXD20:31
Dolasillaciao vietta!! :)20:33
warp10Ok, a parte gli assenti giustificati manca solo una persona dei 6 iscritti, quindi aspettiamo qualche minuto20:33
* Dolasilla stava già dormendo...pessimo inizio20:33
viettaDolasilla, XD20:34
viettawarp10, hai portato la forchetta?20:34
* warp10 apre una fialetta puzzolente vicino a Dolasilla per tirarla su20:34
warp10vietta: ho solo armi chimiche20:34
viettalol warp10 armi chimiche antisonno?20:35
* Dolasilla rinsavisce per un attimo ma poi ricrolla20:35
viettahahahah20:35
Mony_ciao a tutti20:42
warp10bene20:42
Mony_scusate in ritardo20:42
viettaciao Mony_ 20:42
warp10Direi che possiamo partire20:42
warp10ché tanto si sa che gli assenti hanno sempre colpa :P20:42
vietta:P20:42
Mony_:)20:43
warp10Allacciate le cinture di sicurezza, mettete lo schienale della poltrona in posizione verticale, chiudete il tavolino di fronte a voi, seguite le indicazioni degli assistenti di volo e ricordate che per tutta la durata del volo non potrete usare apparati elettronici20:43
warp10A meno che non sia il vostro computer, ovviamente :)20:43
viettaXD ahhh mbhè20:43
warp10E ricordate anche che questo canale è loggato, e che tutto quello che direte sarà usato contro di voi quando meno ve lo aspettate :)20:43
viettalol20:44
viettaecco così nessuno farà più domande20:44
viettaspventatore di masse che non altro XD20:44
warp10Sorvoliamo sulle presentazioni, che tanto bene o male credo che ci conosciamo tutti. Facciamo come nei meeting seri e dichiariamo nome e cognome così:20:44
* warp10 <-- Andrea Colangelo20:44
viettaehm...20:44
* vietta <-- vietta20:45
Mony_<-- Monia Spinelli20:45
viettaalias silvia20:45
* Dolasilla = Silvia Bindelli20:45
warp10Bene. Oggi quindi parleremo di packaging e di sviluppo di Ubuntu.20:45
warp10La prima parte del tempo che trascorreremo insieme sarà più teorico e discorsivo, nella seconda parte (e nelle prossime puntate, magari) ci sporcheremo un pò le mani, invece :)20:46
warp10Cosa sono i pacchetti, quindi?20:46
warp10Beh, il discorso è molto semplice20:46
warp10I pacchetti sono delle specie di contenitori dentro i quali ci sono tutti i file già compilati e pronti per essere installati ognuno nella posizione giusta all'interno del filesystem20:46
warp10Credo che questo sia già abbastanza chiaro a tutti20:46
warp10Piuttosto che scaricare la tarball e fare il solito ./configure, make, make install, con tutte le dipendenze rotte, le compilazioni fallite e bla bla bla, arriva un oggetto già cucinato e pronto20:47
warp10Un pacchettino comodo e pieno di fiocchetti che piacciono a Dolasilla 20:47
Dolasilla\o/20:48
warp10Non solo semplificano la vita dell'utente che ha un attacco di panico quando sente parlare di Makefile, quindi, ma permettono di gestire in maniera automatica le dipendenze, permettono delle disinstallazioni pulite, e tanti altri vantaggi.20:48
warp10Insomma, i pacchetti ci piacciono da morire, sono una delle più grandi invenzioni dell'umanità dopo la ruota, la stampa e il telepass, e non vogliamo assolutamente farne a meno.20:48
warp10L'utente che vuole installare un programma non deve fare altro che lanciare USC, oppure synaptic, oppure apt-get, oppure quello che vuole, e il suo programma preferito tirerà giù dall'archivio il pacchetto, insieme a tutte le sue dipendenze, e installerà il tutto senza fare domande difficili (e anche senza fare il difficile, come nella compilazione a mano).20:49
warp10Ora, che cos'è l'archivio?20:49
warp10Puntate il vostro browser su http://archive.ubuntu.com e sarete entrati all'interno dell'archivio di Ubuntu!20:49
warp10(Pulitevi bene le scarpe sullo zerbino e non fate fotografie, è vietatissimo)20:50
warp10Organizzati secondo una gerarchia di cartella ben precisa, e che in realtà ci interessa molto poco approfondire, dentro la cartella ubuntu/ e nelle varie sottocartelle, ci sono *tutti* i pacchetti che compongono la nostra distribuzione preferita.20:50
warp10Se volete vedere i pacchetti veri e propri, andate su ubuntu/pool/ e scoprirete che lì ci sono 4 sottocartelle: main, restricted, universe, multiverse20:51
warp10Il nostro archivio infatti è quadripartito secondo uno schema ben preciso:20:51
warp10- main contiene software libero supportato direttamente da Canonical (ma anche dalla comunità): alcune centinaia di pacchetti (sopra la migliaia, IIRC)20:51
warp10- restricted contiene software non libero supportato direttamente da Canonical (ma anche dalla comunità): poche unità di pacchetti20:51
warp10- universe contiene software libero gestito principalmente dalla comunità: svariate migliaia di pacchetti20:52
warp10- multiverse contiente software non libero gestito principalmente dalla comunità: qualche decina di pacchetti20:52
warp10Qualcuna sa quanti pacchetti in totale ci sono nel nostro archivio?20:52
Dolasilla42?20:53
* Dolasilla torna a dormire prima di essere cazziata20:53
warp10Dolasilla: quello è il QI di alcuni che bazzicano #ubuntu-it-chat20:53
warp10La risposta ce la dà Launchpad (un sito web estremamente importante per i MOTU, lo vedremo), che ci dice che in Precise (la versione di Ubuntu in fase di sviluppo) ci sono quasi 20.000 source package e oltre 38.000 binary package (cfr.: https://launchpad.net/ubuntu/precise)20:54
warp10(La differenza tra source package e binary package la vedremo tra breve)20:54
warp10Capite bene che, a parte restricted e multiverse che contano veramente poco (anche se ci sono dei pacchetti che, purtroppo, sono indispensabili per molti), il grosso è in main (dove ci sono pacchi assolutamente essenziali) e in universe (da dove viene la stragrande maggioranza del nostro software).20:54
warp10Purtroppo, l'archivio è una bestia difficile da domare.20:55
warp10Dentro all'archivio possono succedere cose spiacevoli come inconsistenze, pacchetti che non buildano, altri che hanno dipendenze incrociate, altri che non hanno una dipendenza buildata e non sono installabile, e così via, il tutto per tacere dei singoli pacchetti, che possono avere bug più o meno gravi, legati al packaging, nati in Debian o arrivati direttamente da upstream.20:55
warp10Uhm... avete chiaro cosa intendo quando parlo di "upstream"?20:56
* vietta sì20:56
Mony_no, l'ultima cosa non mi è del tutto chiara20:56
warp10Mony_: upstream è lo sviluppatore del software20:57
warp10Mony_: e in generale, è quello che sta "sopra" di noi20:57
warp10Mony_: anche debian, da cui derivano molti dei pacchetti dell'archivio è un nostro upstream20:57
Mony_ok chiaro, grazie20:57
warp10Mony_: gli autori di Firefox, o di GNOME, o di quell'altro con la K, o di chromium, etc., sono il nostro upstream20:58
warp10Il concetto di upstream è importante, lo useremo spesso20:58
warp10Nota a latere: interrompete in qualsiasi momento, quando avete dubbi... nisciuno è nato imparato! (cit.) :)20:58
* Dolasilla chiarisce per tutti e che "quell'altro con la K" è proprio KDE20:59
* warp10 ricorda che KDE ormai lo usa solo Dolasilla e altri due sventurati20:59
warp10Insomma, dicevamo dell'archivio e del gran caos che c'è lì dentro20:59
warp10per gestire tutto questo gran casino servono delle persone di assoluta integrità morale, dei supereroi che non hanno paura di nulla e che lottano per il Bene contro il lato oscuro della forza: gli Ubuntu Developer20:59
* vietta ricorda a warp10 che mooolti prog per kde sono migliore di quelli per gnome esempio su tutti kate :P gedit bleah20:59
* warp10 ricorda a vietta che esiste solo vim. E basta.21:00
warp10Gli Ubuntu Developer sono quei loschi figuri semisconosciuti ai più che tengono a bada pacchetti e archivio, facendo in modo che Ubuntu abbia sempre programmi aggiornati, ben installabili, ben funzionanti e senza bug.21:00
* vietta dice... casomai vi21:00
warp10(Se avete installato Oneiric, forse converrete con me che non sempre questi risultati sono stati raggiunti </rant> :))21:00
warp10Sono personaggi misteriosi, che lavorano nell'ombra, senza ricevere mai un grazie da nessuno quando le cose vanno bene, ma che prendono tanti insulti quando le cose vanno male.21:01
warp10Avete visto il film "Bastardi senza gloria"? Ecco, il titolo è ispirato esattamente dagli Ubuntu Developer. :)21:01
warp10Scherzi a parte, il "lavoro" di Ubuntu Developer è estremamente divertente, e anche gratificante.21:01
warp10Tutto sommato è anche un'attività molto formativa ed educativa: io ho imparato un sacco di cose che non riguardano strettamente il packaging, facendo il packager.21:02
warp10Piccola curiosità: gli UD sono anche noti come MOTU, acronimo di Master Of The Universe (+1 punto per chi coglie il gioco di parole, +2 punti per chi coglie anche il riferimento fumettistico).21:02
warp10(Precisazione: UD non è strettamente sinonimo di MOTU. In realtà i MOTU sono un sottoinsieme degli UD, che hanno accesso solo a universe e multiverse. I privilegi di accesso all'archivio sono distribuiti su varie categorie. Cfr. https://wiki.ubuntu.com/UbuntuDevelopers per tutti i dettagli)21:03
warp10Ma insomma, cosa fanno di preciso gli Ubuntu Developer?21:03
warp10Developer significa Sviluppatore. Ebbene, gli Sviluppatori di Ubuntu in realtà sviluppano ben poco :)21:03
warp10Il nostro "lavoro" è più che altro legato al bugfixing e ai nostri rapporti con Debian e con gli upstream.21:04
warp10Spenderò poche parole su Debian, ma sono parole fondamentali: il rapporto con Debian è probabilmente la cosa più importante del nostro lavoro, sia dal punto di vista tecnico che da quello "politico".21:04
warp10Circa i 3/4 del nostro archivio arrivano da Debian senza alcuna modifica. Buona parte del quarto rimanente è formato da pacchetti che arrivano da Debian e che noi modifichiamo per creare l'identità della nostra distribuzione.21:05
warp10Anche dal punto di vista "politico", come dicevo, è importante mantenere delle buone relazioni con i nostri colleghi Debian Developer, per poter collaborare insieme in maniera fattiva.21:05
warp10E questo non vale solo per i MOTU e gli UD in generale, anche voi come contributori avrete a che fare con Debian, molto presto21:05
warp10Vi rivelerò una notizia forze sorprendente: un buon UD non è necessariamente uno strepitoso programmatore, un grande tecnico e/o un eccezionale informatico.21:06
warp10Ci sono molti UD che fanno un gran lavoro senza conoscere granchè in fatto di programmazione.21:06
warp10Un UD deve avere grandi doti come investigatore: capire subito dove sta il problema e intuire subito qual è la strategia migliore per risolverlo.21:07
warp10Un UD è soprattutto un buon comunicatore. L'UD è in una posizione tremendamente difficile, al centro di un pentacolo che ha ai vertici: 1) gli utenti; 2) i colleghi UD; 3) Debian; 4) Upstream 5) Downstream21:07
warp10Nota: I nostri Downstream sono le distribuzioni derivate, come Mint o altra analoghe. Ubuntu è un downstream di Debian, per dire. (Come vedete i concetti di up- e down- stream sono molto relativi)21:08
warp10Un buon UD riesce a far dialogare tra di loro i 5 vertici del pentacolo e a farli lavorare bene, ungendo adeguatamente gli ingranaggi che muovono il meccanismo (che spesso sono assai arrugginiti). Servirebbe qualche esempio pratico per spiegare queste parole, ma lo vedremo più avanti. Per ora fidatevi :)21:08
warp10Ovviamente, un UD possiede anche delle nozioni tecniche indispensabili per poter fare il proprio lavoro, e le basi di queste nozioni sono proprio le cose che vedrmo tra pochissimo.21:09
* vietta inizia a preoccuparsi21:09
warp10Un'altra cosa su cui spendo poche righe ma che è importantissima: non è indispensabile essere un UD per contribuire allo sviluppo di Ubuntu.21:09
* warp10 tranquillizza vietta: è tutta roba semplice... tanta, ma semplice :)21:10
warp10Chiunque di voi può fare del lavoro utile senza avere accesso all'archivio, sfruttando il meccanismo della sponsorizzazione.21:10
warp10Qualcuna di voi si è già fatta sponsorizzare qualcosa in archivio?21:10
viettadi altre distro sì21:10
Mony_in cosa consiste la sponsorizzazione?21:11
warp10Allora vietta sa già che sponsorizzare significa che un UD verificherà il vostro lavoro e lo caricherà in archivio in vostra vece.21:11
warp10Voi fate il lavoro e ve ne prendete tutti i meriti e i riconoscimenti, l'UD verificherà che sia tutto a posto e userà la sua chiave magica per aprirvi la porta dell'archivio21:12
warp10Tutto sommato, un UD è soltanto una persona che, lavorando assiduamente nel tempo, ha dimostrato che in lui si può riporre sufficiente fiducia da consegnargli la chiave di cui sopra, senza temere che appena arrivato sfascerà tutto21:12
warp10Tuttavia per contribuire felicemente ad Ubuntu il possesso di questa chiave è del tutto non è necessaria!21:12
warp10ho caricato molti pacchetti e bugfix in Debian, ma non sono un Debian Developer!21:12
warp10E che ve lo carichi un UD, o che lo carichiate voi stessi, la sensazione di vedere il vostro nome nelle mail automatiche che annunciano i nuovi upload, e la consapevolezza di aver restituito un contributo concreto ad un progetto che voi e milioni di altre persone utilizzano quotidianamente, beh, è impagabile. :)21:13
warp10Così come è impagabile l'emozione di andare in giro per aeroporti, università, bar e tanti altri luoghi, e vedere perfetti sconosciuti che aprono il portatile con Ubuntu (o con Debian, perchè no?), e tu sai che un pezzettino piccolo di quello che loro stanno usando l'hai fatto tu. Dopo 3 anni che sono UD, io mi emoziono ancora quando mi capita :)21:13
viettawarp10, tenerone lol21:14
warp10Insomma, il perfetto contributore ha tanto buon senso, molto acume, è un grande comunicatore, e conosce bene gli aspetti tecnici del packaging21:14
warp10Per poter contribuire ad Ubuntu è necessario conoscere bene come funzionano i pacchetti e come si costruiscono21:14
warp10E' un bagaglio di conoscenze abbastanza consistente e numeroso, e all'inizio la sensazione è di grande confusione, lo so... ci sono passato anch'io :)21:15
warp10Noi però affronteremo il discorso in maniera molto "easy"21:15
warp10Tutto chiaro fin qui?21:15
warp10Non abbiamo detto nulla di sconvolgente, tutto sommato21:16
Mony_tutto chiaro ;)21:16
warp10Bene. La prima cosa importante da capire è la distinzione tra i source package e i binary package: sorgenti e binari.21:16
warp10Dicevamo prima che normalmente si prendono le tarball (sorgenti) e poi si compilano per ottenere il programma eseguibile (binari), giusto?21:17
warp10Bene, il parallelismo è perfettamente conservato: il source package è la tarball originale che arriva da upstream condita con le istruzioni legate al packaging. Il binary package è il prodotto finito, il file .deb che gli utenti installano (o a mano con dpkg/gdebi/USC/etc., o automaticamente con synaptic/apt-get/USC/etc.)21:17
warp10Come packager, nel 99% del tempo noi lavoriamo solo ed esclusivamente sul source package. Il .deb ci serve solo come verifica finale che tutto sia andato a posto, ma non modificheremo *mai* nulla lì dentro.21:18
warp10Anche perchè in archivio si caricano solo i source package, e non i binari, e quelli sono generati dai build daemons. Quindi, una volta creati, non si toccano più21:18
warp10Perciò le cose devono funzionare bene da subito, le manipolazioni sui .deb sono impossibili21:19
warp10Per le più curiose, vi invito ad aprire un file .deb e a vedere cosa c'è dentro: è un banale archivio in formato ar (non "tar", proprio "ar"), e dentro ci sono due categorie di cose: 1) i file che saranno installati fisicamente sull'hard disk; 2) una serie di metadati che servono a gestire il pacchetto, cose come nome, numero di versione, dipendenze, etc21:19
warp101 binary package è composto da 1 file .deb quindi, e contiene i binari compilati. Piuttosto semplice, no?21:20
warp10Il source package è un oggetto più articolato, perchè è composto da 3 file distinti. Questa terna di file è inscindibile. Non ha senso parlare di uno di questi file se non congiuntamente agli altri. Uno e trino, come altre cose di stretta attualità nei giorni del Santo Natale. :)21:20
warp10Cerchiamo di capire bene cosa sono questi tre file e cosa rappresentano, perchè sono il nostro pane quotidiano:21:21
warp10- 1 file ha estensione .orig.tar.gz, ed è lo stesso identico file che si tira giù dal sito web upstream, semplicemente rinominato secondo uno schema opportuno (ovvero: <nomeSoftware>_<versioneUpstream>.orig.tar.gz)21:21
warp10(ovvero è la stessa tarball che ci insegue dall'inizio, quella su cui dovremmo fare ./configure, make, make install)21:21
gaspao/21:22
warp10E ora, signore e signore, permettetemi di introdurvi l'affascinante gaspa21:22
warp10buon amico e eccellente ubuntu developer, che viene a dare man forte21:22
warp10gaspa: arrivi giusto in tempo, cominciavamo a sporcarci le mani con noiosissime robe tecniche21:23
gaspabuonaseeeeeera. (puntualissimo, eh?)21:23
viettaciao gaspa 21:23
Dolasillagaspa, :-*21:23
Mony_ciao gaspa21:23
gaspa:)21:23
warp10gaspa: si parlava di source package21:24
warp10gaspa: e della sacra terna di file21:24
* gaspa era qui per imparare qualcosa...21:24
warp10il primo file quindi è la tarball che arriva da upstream, e non si tocca: si rinomina solo21:24
warp10- 1 file ha estensione .dsc, è un file di testo, e contiene una serie di metadati che riguardano il pacchetto. In un certo senso, è il file "principale" dei tre.21:25
warp10se gaspa vuole farmi vedere un suo lavoro  può mettere il source package (i tre file) su internet da qualche parte, poi gli basta darmi il link del .dsc, e il tool dget farà tutto, lo vedremo presto21:25
warp10- 1 file con estensione .diff.gz (oppure .debian.tar.gz, vedremo dopo la differenza), che contiene un file di testo compresso che altro non è che una patch che viene applicata al contenuto del file .orig.tar.gz. Questa patch contiene tutte le modifiche che noi facciamo per il packaging, e che tipicamente sono contenute in una serie di importantissimi file all'interno della cartella debian/21:26
warp10Avete le idee sufficientemente chiare su questi 3  file? Presto li vedremo in azione, ma se avete dubbi parlate ora (o tacete per sempre)21:26
warp10O siete tramortite o è tutto chiaro... propendo per la seconda :)21:28
warp10Ogni volta che tirate giù un source package, scaricherete questi tre file. Per poterci poi lavorare su dovete fare tre cose: 1- controllare l'hash dei file per assicurarvi della loro integrità; 2- decomprimere il file .orig.tar.gz (creerà una cartella chiamata <nomeSoftware>-<versioneUpstream> con dentro tutti i file originali); 3- decomprirmere il file .diff.gz (o .debian.tar.gz) e applicarlo alla cartella creata al punto 2.21:28
warp10A questo punto avremo nella root del source tree (ovvero nella cartella <nomeSoftware>-<versioneUpstream>) una cartella debian/ con una serie di file su cui lavoreremo e faremo le modifiche del caso.21:29
warp10Quindi, alla fine la cosa che ci interessa davvero è questa cartella debian/ e soprattutto i file che sono lì dentro.21:29
warp10Per approfondire l'argomento, tiriamo giù un pacchetto dall'archivio e vediamo cosa c'è dentro, così cominciamo a sporcarci le mani sul serio.21:29
warp10Aprite un terminale, create una cartella qualsiasi, diciamo che la chiamiamo packaging/, entrateci dentro e lanciate questo comando:21:30
warp10apt-get source tennix21:30
warp10Il comando apt-get quando viene lanciato con l'opzione source non installa alcun binary package, bensì scarica il source package indicato (tutti e tre i file, ovviamente), ed esegue automagicamente tutte le operazioni che vi ho indicato sopra21:30
warp10In questo caso quindi, vi ritroverete scaricato il source package di tennix, un giochino di tennis banalotto ma simpatico. E' un pacchetto al quale sono sentimentalmente legato: è stato il mio primo pacchetto creato da zero e caricato in Debian. :)21:31
warp10Avete scaricato tutte il source package di tennix?21:31
warp10Se avete una connessione a criceti come quella che ho io qui, potrebbe volerci qualche secondo in più21:31
viettascaricato21:32
warp10Bene. Mony_? Dolasilla?21:32
Mony_sta scaricando21:33
Mony_dalla sicilia ci vuole un po21:33
Mony_:P21:33
Mony_scaricato21:33
warp10Mony_: criceti anche tu, eh?21:33
warp10benone21:33
warp10Dolasilla è in Francia e ci mette tanto tempo, ma noi la ignoriamo bellamente21:33
DolasillaDolasilla è a scoppio ritardato21:34
Dolasillama ora sta scaricando21:34
warp10Se adesso fate ls, scoprirete che ci sono esattamente i tre file del source package (.orig.tar.gz, .debian.tar.gz e .dsc) e una cartella. Notate anche che i nomi dei file non sono casuali, bensì rispettano una sintassi ben precisa (che vi ho già accennato)21:34
Dolasilla;)21:34
warp10Dolasilla: s/a\ scoppio//21:34
warp10La cartella altro non è che è il file orig spacchettato al quale sono state aggiunte le modifiche inserite nel file .debian.tar.gz (che, vi ripeto, è una normalissima patch e può essere aperta con un qualsiasi editor di testo)21:35
warp10Entriamo dentro la cartella per vedere che cosa c'è, sempre da terminale.21:35
warp10cd tennix-1.1/21:36
warp10Vedete che c'è una marea di file, molti .c, .cc e .h che compongono il sorgente del programma, un pò di file di testo con informazioni assortite, un paio di cartelle che contengono documentazione e alcune immagini. Ma soprattutto c'è la cartella debian/21:36
warp10Tutti i file che vedete, tranne debian/, sono il contenuto del file .orig.tar.gz, che, vi ripeto, viene dritto dritto dal buon Thomas Perl, lo sviluppatore upstream di tennix. debian/ invece l'abbiamo creata noi ed è lì che come packager abbiamo totale dominio.21:37
warp10Noi non modifichiamo nessun file al di fuori di debian/ infatti, e quando dobbiamo farlo per correggere qualche bug upstream usiamo una particolare metodica che fa sì che comunque la nostra patch sia contenuta in debian/. Ma questo è un argomento più avanzato e lo tratteremo in una prossima puntata.21:37
warp10Tutto chiaro fin qui? Se qualcuno ha le idee confuse, chiariamoci per bene ora prima di andare avanti, mi raccomando. Queste cose anche se sono semplici tendono ad essere confusionarie. Domande?21:38
viettaper me tutto ok21:38
Mony_tutto chiaro21:38
Dolasillao/21:38
Dolasilladomanda21:38
warp10Dolasilla: spara21:39
Dolasillaniente21:39
Dolasillaho letto l'avevi detto sopra21:39
warp10bene, poche idee ma confuse21:39
Dolasillanella cartella vedevo il diff.gz, non il debian.tar.gz21:39
Dolasillama rileggendo il log ho visto che è lo stesso21:39
warp10Dolasilla: tra pochi istanti spiego la differenza, che é importante21:40
Dolasillak21:40
warp10allora non ci rimane che entrare dentro la misteriosa debian/ e vedere cosa c'è dentro.21:40
warp10cd debian/21:40
warp10Vedete che  ci sono un pò di file sparpagliati. Alcuni di questi (4, per la precisione) sono sempre obbligatori, e un pacchetto non builda se non ci sono. Altri sono facoltativi e la loro presenza dipende dalla tipologia del pacchetto.21:41
warp10Cominciamo da uno dei file facoltativi: source/format (ovvero il file format nella cartella source/, sempre da dentro debian/)21:41
warp10Se lo aprite vedete che c'è scritto 3.0 (quilt). Questa informazione riguarda il formato del source package. Nel corso del tempo ci sono state delle evoluzioni nel formato del source package, e la versione 3.0 è particolarmente succosa di novità piacevoli per noi packager. Tra l'altro, ecco svelato l'arcano sull'estensione del secondo file: dalla versione 3.0 si chiama .debian.tar.gz, nella versione precedente (la 1.0) si chiamava .diff21:42
warp10.gz21:42
* Dolasilla non trova la cartella source dentro a /debian... :-/21:42
Mony_nemmeno io21:43
warp10il concetto di formato del source package non vi suoni troppo strano... è normale che il protocollo per fare qualcosa abbia delle evoluzioni  nel tempo. Lo stesso vale per i source package21:43
viettanon c'è21:43
vietta:D21:43
warp10su quale versione di Ubuntu siete?21:43
Mony_10.1021:43
Dolasilla10.1021:44
viettaarch XD21:44
warp10vietta: arch?21:44
viettawarp10, lo so non ho avuto tempo di bootare ubuntu21:44
warp10vietta: scusa, e come l'hai scaricato il source package?21:45
viettasourceforge21:45
vietta:P21:45
warp10vietta: su sourceforge non ci sono i source package di ubuntu21:45
warp10Mony_, Dolasilla: quanto a voi, a parte ricordarvi che nel frattempo la Terra ha fatto un altro giro intorno al sole... :)21:47
Mony_warp10 :(21:47
Dolasillawarp10, :P prrrr21:47
warp10Mony_, Dolasilla: voi avete scaricato il source package di Ubuntu 10.10, che aveva ancora il format 1.0, nel quale quel file non esiste21:47
Dolasillawarp10, io e Mony_ siamo tradizionaliste21:47
Mony_si è vero21:48
Mony_:D21:48
Dolasillawarp10,  il che spiega anche perché vedevo il diff invece che il debian.tar21:48
warp10Dolasilla: brava, esattamente21:48
warp10Ne approfitto per farvi vedere come si scarica un source package a mano21:48
warp10Per la cronaca, le sorgenti dei source package sono indicati nel file /etc/apt/sources.list21:49
warp10le righe che cominciano per deb-src gestiscono i source package21:49
viettawarp10, (shhhhhh che ho una virtual machin)21:49
warp10se al posto di maverick ci mettete oneiric, per dire, apt-get source vi scaricherà il sorcio di oneiric21:49
warp10ma diciamo che siccome siamo... ehm... "tradizionaliste" non vogliamo cambiare quel file21:50
Mony_dobbiamo rifarlo quindi?21:50
warp10Mony_: per stavolta no, anche se alla fine basta fare una sostituzione in poche righe21:50
warp10basta andare su http://packages.ubuntu.com/source/oneiric/tennix21:51
warp10e alla fine di quella pagina ci sono i link ai tre file del source package21:51
warp10due possibilità:21:51
warp10- i comuni mortali scaricano i tre file uno alla volta con wget21:52
warp10- noi però usiamo un programmillo che si chiama dget!21:52
warp10a dget si passa come argomento solo il link al .dsc (ricordate? lo dicevo prima quando citavo l'esempio con gaspa)21:53
warp10e lui tira giù da solo tutto quanto21:53
warp10quindi, tornando alla cartella packaging nella home e date:21:53
warp10get http://archive.ubuntu.com/ubuntu/pool/universe/t/tennix/tennix_1.1-1.dsc21:53
warp10ops21:53
warp10dget http://archive.ubuntu.com/ubuntu/pool/universe/t/tennix/tennix_1.1-1.dsc21:53
warp10se alla fine vi dà un errore con le chiavi gpg non preoccupatevi, è normale21:54
warp10dget dopo aver scaricato decomprime la tarball e applica il diff21:54
Dolasillami dice "permesso negato"21:54
warp10ma lo fa solo se avete installato ubuntu-keyring21:54
warp10Dolasilla: lo dice dopo aver scaricato?21:55
Mony_a me ha dato solo il problema sulle chiavi21:55
Dolasilladget: retrieving http://archive.ubuntu.com/ubuntu/pool/universe/t/tennix/tennix_1.1-1.dsc21:56
Dolasillatennix_1.1-1.dsc: Permesso negato21:56
warp10Dolasilla: uhm... non è che sei dietro qualche firewall strano, o un NAT, o qualcosa di zozzo del genere?21:56
Dolasillano no ok21:56
Dolasillapiù facile21:57
Dolasillae risolto21:57
warp10Dolasilla: benone21:57
gaspao stai salvando in una directory di root? :)21:57
warp10gaspa: eh, molto più probabile, mi sa21:57
Dolasillagaspa, fuochino, ero rimasta nella cartella /debian ;-)21:57
warp10Ad ogni modo, se installate il pacchetto ubuntu-keyring, dget vi estrarrà anche la tarball21:57
warp10noi stavolta lo facciamo a mano con l'opzione -x (eXtract) di dpkg-source:21:58
warp10dpkg-source -x tennix_1.1-1.dsc21:58
warp10notate due cose:21:58
warp101- spesso e volentieri le operazioni sul source package si fanno col file .dsc21:58
warp102- notate l'output di dpkg-source: ha spacchettato i due file compressi, e ha applicato il file di patch21:59
warp10se ora entrate in tennix-1.1/debian/ troverete questo file source/format :)21:59
warp10Confermate?22:00
Dolasillasiii! :)22:00
Mony_source si22:00
warp10La procedura di download del source package con dget è molto importante per tirare giù pacchi da debian o da altre distroseries22:00
warp10Io sul mio sources.list per esempio ho precise come distroseries per i deb-src22:01
warp10perchè ovviamente lavoro sui pacchetti della distro in fase di sviluppo, che è precise22:01
warp10se devo prendere pacchi da altre parti, vado di dget22:01
warp10quindi bene che siate "tradizionaliste", così abbiamo imparato 'sta cosa :)22:01
Mony_;)22:02
warp10Allora, dicevamo22:02
warp10source/format dice solo il formato del sorcio, e non è obbligatorio (se non c'è, passa automaticamente al format 1.0)22:02
warp10Noi però siamo fighissimi e lavoriamo col formato 3.0, nuovo e scintillante22:02
warp10Passiamo a vedere i file obbligatori. Sono 4, ed è importante conoscerli bene22:03
warp10Il primo, e forse più importante, è control. Apritelo col vostro editor preferito22:03
* warp10 si chiede nel frattempo a che punto sia vietta22:03
warp10Qui dentro ci sono una serie di metainformazioni, molte di queste sono usate per generare il file .dsc e sono poi inserite nel file .deb22:03
viettavi control22:04
warp10Vedete che è composto da due stanze separate da una riga vuota: la prima riguarda le informazioni del source package, la seconda riguarda le informazioni del binary package.22:04
warp10Ci sono campi che riguardano il nome del pacchetto (e il nome del pacchetto binario, che può avere un nome diverso), sezione di pertinenza dell'archivio, importanza, il nome del maintainer del pacchetto (la persona che "gestisce" il pacchetto), l'elenco dei pacchetti necessari per compilare il pacchetto sorgente (le build-depends) e l'elenco dei pacchetti necessari per eseguire il pacchetto binario (le depends nella seconda stanza), descr22:04
warp10izione breve e lunga del pacco (quella che appare anche in USC) e altro ancora22:04
warp10Ci possono essere anche stanze supplementari, perchè un singolo source package può generare tanti binary package diversi, dipende dai casi22:04
warp10Ad esempio, il gioco pippo può generare i binary package 1) pippo, col binario del gioco; 2) pippo-data con le immagini e audio; 3)pippo-doc col manuale del gioco22:05
warp10Non ci soffermiamo troppo sui dettagli, ma chi vuole approfondire può leggere questa pagina della Debian Policy (che è la nostra Sacra Bibbia): http://www.debian.org/doc/debian-policy/ch-controlfields.html22:05
warp10Notate che non c'è alcun numero di versione in quel file?22:06
Mony_c'è nella stanza del source22:06
warp10Mony_: ti riferisci a Standards_Version?22:07
Mony_si scusa tu ti riferisci alla versione del programma22:07
warp10Mony_: quella non è la versione del pacchetto, bensì la versione della Debian Policy rispetto alla quale io dichiaro di aderire22:07
warp10Mony_: la Debian Policy viene rinnovata periodicamente con regolette nuove, in un mondo perfetto quel campo corrisponde sempre all'ultima versione22:08
Mony_warp10: ok22:08
warp10Quindi, niente numero di versione nel control, perchè questo viene preso dal secondo dei file obbligatori, il file changelog. Apritelo, please.22:08
viettawarp10, è d'obbloco dichiararla?22:08
warp10vietta: no, la Debian Policy stabilisce quel campo come "recommended"22:09
warp10vietta: se non la metti, builda lo stesso22:09
viettaok tnx22:09
warp10vietta: ma se non la metti, i tuoi colleghi packager ti guardano in cagnesco :)22:09
viettalol xd22:10
viettacapito22:10
warp10Il changelog, quindi22:10
warp10E' semplicemente il diario di quel pacchetto, con tutti gli interventi e i ritocchi che ha subito nel corso del tempo.22:10
warp10Tutti i bravi programmatori conservano un log di quello che fanno sul loro codice, in un modo o nell'altro, e noi non siamo certo da meno.22:10
warp10La prima riga è molto importante: c'è il nome del pacchetto, la versione e la distroseries in cui deve buildare. Lì c'è unstable perchè il pacchetto è stato caricato in debian e poi copiato (syncato, in gergo tecnico) in ubuntu. Potreste trovarci oneiric, o precise, o natty, etc, nel caso fosse stato caricato direttamente in ubuntu22:11
warp10Mi accorgo ora che ho usato spesso la parola distroseries: avete un'idea precisa di cosa sia?22:11
Dolasillaprecisa, no, ho intuito dal contesto22:12
warp10ogni release di ubuntu è una distroseries, grossolanamente22:12
warp10in certi VCS si fa un tag del trunk quando si vuole freezare lo sviluppo ad una certa versione, no?22:13
warp10una distroseries è qualcosa del genere22:13
Dolasillak22:13
warp10ma l'immagine distroseries == release è piuttosto efficace22:14
warp10Spendo qualche parola sul numero di versione, c'è una importante convenzione da sapere (e che vi fa comodo conoscere a prescindere)22:14
warp10In debian lo standard per le versioni dei pacchi è: <numeroVersioneUpstream>-<debianRevision>, dove debianRevision è un numero progressivo che indica gli upload successivi della stessa versione upstream. Qui vedete 1.1-1, ovvero versione 1.1 upstream, prima revision Debian. Se correggessi un bug sulla versione 1.1, caricherei la versione 1.1-2, e così via22:15
warp10Questo pacchetto è stato syncato da Debian senza modifiche, quindi il numero di versione è immutato rispetto a Debian22:15
warp10In ubuntu lo standard è: <numeroVersioneUpstream-<debianRevision>ubuntu<ubuntuRevision>. La parte "ubuntu<ubuntuRevision>" ovviamente riguarda solo i pacchetti modificati in Ubuntu (tennix è stato copiato senza modifiche, come dicevo, e infatti non ce l'ha)22:15
warp10Tanto per fare un esempio, unity in oneiric è alla versione 4.22.0-0ubuntu3: versione upstream 4.22.0, debian revision 0 (perchè non c'è unity in debian), ubuntu revision 3 (cfr: http://packages.ubuntu.com/search?keywords=unity)22:16
warp10Ci possono essere piccole variazioni, ma la sostanza è questa22:16
warp10Poco da dire sul changelog insomma, ma qualche curiosità in più è sulla Bibbia: http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog22:16
warp10Ora, un file complicatissimo22:16
warp10Attenzione, questo è davvero difficile22:16
warp10E' il file compat. Apritelo, prego22:16
warp10Ebbene, sì: c'è solo un numero lì dentro22:17
viettalol22:17
warp10Nella creazione dei pacchetti ci sono alcune procedur standardizzate e ripetitive che devono essere eseguite ogni volta. Siccome noi informatici siamo pigerrimi, piuttosto che rifare tutto da zero un'anima pia ha creato un programmino che gestisce automaticamente tutta questa procedura, e si chiama debhelper. Se notate, è una delle build-depends inserite in control22:17
warp10Di debhelper sono state create versioni successive con funzionalità sempre maggiori, e quindi ci sono diversi livelli di compatibilità. Il file compat dichiara qual è il livello di compatibilità minimo (debhelper 7, in questo caso).22:17
warp10Nient'altro da dire: se non volete usare debhelper questo file non serve a nulla. Ma fidatevi: debhelper volete usarlo sempre, ed è il vostro migliore amico :)22:18
warp10Ora un file che io odio profondamente, il file più importante di tutti ma che non fa nulla di utile: il file copyright22:18
warp10Chi crea il pacchetto deve compilare questo file, nel quale raccoglie tutte le informazioni legali su copyright, autori e licenze, presi dai singoli file sorgenti.22:18
Mony_warp1022:18
Mony_aspetta22:19
warp10dimmi Mony_  22:19
Mony_a cosa serve debhelper?22:19
Mony_anche solo un accenno22:19
warp10Mony_: hai ragione, sono stato piuttosto oscuro22:19
warp10Mony_: lo vedremo bene parlando del file rules, ma debhelper è una collezione di programmi che aiutano il build del pacchetto22:19
warp10Mony_: eseguono una serie di procedure standard che vanno fatte più o meno sempre22:20
warp10Mony_: procedure noiose e ripetitive, come dicevo prima, che sarebbe noioso e assurdo re-implementare di volta in volta22:20
Mony_warp10: grazie :)22:20
warp10Mony_: scenderò nei dettagli tra 2 minuti, appena arriviamo al rules22:20
warp10Scrivere il file debian/copyright è una gran rottura, per fortuna fatto una volta poi non si tocca per un bel pò, di solito. E però è un lavoro importantissimo: se questo file non è compilato correttamente il pacchetto viene rimosso all'istante dall'archivio (o non ci entra affatto, se è un pacchetto nuovo).22:21
warp10Pochissimo da dire sul copyright, ma ormai avete capito che su http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgcopyright trovate qualche informazione in più. :)22:21
warp10L'ultimo file obbligatorio è invece il file più divertente, e anche il più "tecnico": è il file rules.22:21
warp10Sapete già che cos'è un Makefile?22:21
Mony_si22:22
* Dolasilla stacca22:23
warp10Bene, il rules è nient'altro che un makefile in piena regola22:23
Mony_serve a generare degli eseguibili22:23
Dolasillama voi continuate! poi leggo i log!22:23
Mony_ciao Dolasilla22:23
viettaciao Dolasilla 22:23
warp10Mony_: esatto. E anche molto di più, genera documentazion, o installa i file sull'ardisco, o in generale fa qualsiasi cosavogliate, è uno strumento potente22:23
* warp10 saluta Dolasilla con la manina22:23
gaspaDolasilla: o/22:24
warp10Durante la fase di build del pacchetto le istruzioni contenute lì dentro saranno utilizzate per buildare opportunamente il pacchetto stesso (tipicamente il rules usa a sua volta il Makefile upstream).22:24
warp10infatti vi faccio notare che il rules di tennix comincia proprio con l'hashbang "#!/usr/bin/make -f"22:24
warp10proprio perchè è make ad eseguirlo, come tutti i Makefile22:25
warp10Se sapete scrivere, o almeno leggere un Makefile, siete a cavallo, c'è ben poco da imparare22:25
warp10In effetti i Makefile sono strumenti molto semplici, se vogliamo, e da debheper 8 il Makefile è un oggetto davvero semplicissimo. 22:25
warp10Talmente semplice che certe volte, quando vi va proprio di lusso, tutto quello che serve sono quelle ultime due righe del rules di tennix: 22:25
warp10%:22:25
warp10dh $@22:25
warp10Lì dentro debhelper scatena tutta la sua magia nera. :)22:26
warp10Qui invece vedete che ci sono anche due override di due programmi di debhelper. Cerco di spiegarvi un attimo cosa significa tutto ciò, e così rispondo anche alla domanda di Mony_ su debhelper22:26
warp10Nella migliore tradizione Unix, in cui ogni programma fa una sola cosa e la fa bene, debhelper è una suite di tanti piccoli programmi diversi. Li trovate dentro /usr/bin, cominciano tutti con dh_, sono circa un 70ina22:27
warp10Quando parte il build del pacchetto, il comando dh (che ovviamente sta per DebHelper, ed è il "coordinatore" di tutti quanti) scatena in sequenza, l'uno dopo l'altro, tutti i comandi dh_*, nell'ordine giusto22:27
warp10Un dh_ lancia la compilazione, uno controlla certe cose, uno installa i file compilati nel .deb, un'altro configura, etc. etc.22:28
warp10La lettura dei singoli man vi dirà un sacco di informazioni su cosa farà il singolo comando, ed è consigliata, almeno per quelli più importanti22:28
viettaehm warp10 riavvio su ubuntu torno subito22:29
* warp10 si freeza per aspettare vietta22:29
warp10Andrà a carbonella il computer di vietta?22:32
* warp10 inganna il tempo tirando il codino di gaspa22:33
warp10Mony_: quanto tempo a disposizione hai ancora?22:34
Mony_infinito22:34
Mony_finchè gli occhi reggono ovviamente22:34
Mony_;)22:34
warp10Mony_: :D22:35
warp10Mony_: allora aspettiamo altri 2 minutini, magari la carbonella è fredda 22:35
Mony_warp10: nessun problema22:35
gaspaprrr22:36
Mony_warp10: stavo pensando, ma se raccolgo tutto quello che hai scritto e lo trasformo in documentazione con magari qualche screen?22:37
* gaspa schiva warp10 con un doppio front flip 22:37
gaspaMony_: a me pare un'ottima idea :)22:37
warp10Mony_: beh, perchè no?22:37
warp10Mony_: ci puoi estrarre anche un articolo per qualche blog22:38
Mony_ok22:38
warp10Mony_: insomma, certo, senz'altro22:38
warp10Mony_: magari aiuta anche a fissare i concetti a te, se ci lavori sopra22:38
Mony_warp10: ne parlerò con Silvia per l'articolo22:38
warp10Ad ogni modo, la carbonella si è scaldata ed è tornata vietta22:38
warp10Mony_: yeah22:38
viettasorry...22:39
warp10Eravamo rimasti ai programmi di debhelper22:39
warp10e al rules, che invoca dh, che a sua volta invoca tutti i vari dh_*22:39
warp10Se tutto va bene, nessuna modifica al rules è necessaria, bastano quelle due righe misteriose e vissero tutti felici e contenti.22:39
Mony_warp10: domanda22:40
warp10A volte però è necessario dare delle istruzioni aggiuntive ai singoli programmi di debhelper, o fargli fare delle cose extra, e allora basta mettere un override per quel debhelper nel rules.22:40
warp10Mony_: dimmi22:40
Mony_warp10: dove stanno tutti i dh generalmente?22:40
warp10Mony_: in /usr/bin22:40
warp10Mony_: se scrivi dh e fai doppio tab veloce nel terminale li vedi tutti22:41
Mony_warp10: visto ok22:41
warp10Mony_: errr... è un metodo grezzo, potresti trovarci altri programmi che cominciano per dh, però è veloce ed efficace22:41
warp10Mony_: intuitivamente dal nome del comando si capisce cosa fa. Il man poi svela tutto il dietro le quinte22:42
warp10quando si deve overridare un dh_, basta scriverlo nel rules22:42
warp10ricorda un pò la programmazione ad oggetti: dh è la nostra classe e fa le sue brave robe, se serve cambiare qualcosa, si fa l'override del metodo, et voilà22:43
warp10Per esempio, nel caso di tennix, io ho overridato il comando che lancia il build per passargli un'opzione extra22:43
warp10ed è dh_auto_build, quindi ho usato override_dh_auto_build22:43
warp10E poi ho anche overridato il comando che "installa" il pacchetto (ovvero che mette nel giusto ordine i file da impacchettare nel .deb), anche in questo caso per passargli delle opzioni particolari che mi serviva passargli22:44
warp10il dh_ è dh_auto_install, ed ho usato override_dh_auto_install:22:44
warp10molto semplice, tutto sommato22:44
warp10Se il significato ben preciso però vi rimane poco chiaro, non vi preoccupate, lo diventerà col tempo :)22:44
warp10Insomma, debhelper ha uno schema di funzionamento molto semplice e molto modulare, e ci semplifica tanto la vita. Senza debhelper quel rules sarebbe lungo migliaia di righe!22:45
warp10Questo conclude la panoramica sui 6 file più importanti della cartella debian/22:45
Mony_warp10: mi faresti un esempio del perchè dovrei avere la necessità di fare un override?22:45
warp10Mony_: ti cito un esempio pratico22:46
warp10Mony_: la Debian Policy prescrive che il Changelog upstream debba essere installato22:46
warp10Mony_: e c'è un apposito dh_ che se ne occupa22:46
warp10Mony_: è dh_installchangelogs, guarda caso22:47
warp10Mony_: se guardi man dh_installchangelogs, ti accorgi che lui cerca file che abbiano dei nomi ben precisi, li prende automaticamente e li installa22:47
warp10Mony_: ma tu puoi invocarlo passandogli come argomento un file qualsiasi, che magari ha un nome diverso dal solito, e lui lo installa come changelog22:48
warp10Mony_: ebbene, tempo addietro io e gaspa abbiamo impaccato un programma, non ricordo quale22:48
warp10Mony_: e siccome il changelog aveva un nome esotico, dh_installchangelogs non lo installava di default22:48
warp10Mony_: gaspa ha modificato il rules per fare un override di questo tipo:22:49
warp10override_dh_installchangelogs:22:49
warp10    dh_installchangelogs <file_dal_nome_strano>22:49
warp10problema risolto22:49
Mony_warp10: Grazie22:49
Mony_chiaro22:50
warp10Mony_: ma ci sono centinaia di possibili casi22:50
warp10se faremo un'altra puntata, un pò più pratica, ne vediamo qualcuno22:50
warp10perchè in effetti, visto che è tardi, ed è pure cominciato lo show di Zoro su La7, direi che chiudiamo qui22:51
Mony_warp10: spero di si, la pratica è indispensabile in questo caso22:51
warp10quindi... facciamo un'altra puntata o vi siete annoiate mortalmente? :)22:51
Mony_a me è piaciuta22:51
viettanu nu altra puntata22:51
Mony_complimenti per l'ottima comunicazione ;)22:51
warp10questa era un pò noiosetta, diciamolo :)22:52
warp10ma la teoria pure serve22:52
warp10Mony_: grazie :)22:52
Mony_be allora buonanotte a tutti22:52
warp10Mony_: buonanotte!22:52
Mony_warp10: buon Zoro su La722:52
viettanotte Mony_ 22:53
warp10domani in ML pubblico il log e rifacciamo il doodle22:53
Mony_ok22:53
Mony_io inizio a scrivere appena finisco l'articolo che sto già facendo su Gimp22:53
warp10ok! :)22:54
viettawarp10, metapacchetti ci arriviamo?23:08
warp10vietta: mah... perchè no23:08
warp10vietta: almeno a citarli23:08
vietta:)23:09
warp10vietta: più che altro, una volta capito come si fa un pacchetto, basta scaricare il sorcio di un metapacco e copiare le parti giuste23:09
viettauhm oook23:10
viettanotteeeeee23:22
gaspao/23:27

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!