openSUSE:OSC
Si noti che esiste anche osc2, una riscrittura in corso di osc che non è ancora pronta per il normale utilizzo operativo.
Indice
Introduzione
osc è scritto in Python e, in aggiunta all'interfaccia da riga di comando, fornisce anche un modulo Python per consentirne l'uso da altri programmi in Python.
osc è un client con interfaccia a riga di comando e funzionalità di rete in stile Subversion. Svolge fa funzione di client per il componente deposito dei codici sorgente del Build Service, viene inoltre usato per modificare i metadati o per eseguire interrogazioni riguardo i risultati delle operazioni di build (creazione pacchetti).
Scaricamento e installazione
osc è incluso nelle versioni recenti della distribuzione Linux openSUSE. Per averlo nel proprio sistema è sufficiente eseguire
Le nuove versioni, nel caso in cui le si ritenga davvero necessarie, sono disponibili nel repository tools di openSUSE, in cui si trovano inoltre i pacchetti per molte altre distribuzioni (SLES, Fedora, Mandriva, Debian, etc.). Se si desidera avere a disposizione la versione del codice ancora più recente, si può ricorrere a Git:
Per avere osc funzionante, è richiesto python-xml, e, se non fosse già stato installato automaticamente da zypper (ad esempio se si è deciso fin da subito di usare la versione git), sarà necessario installarlo in seguito.
Fase operativa
Autenticazione
Quando si usa osc per la prima volta, vengono richiesti i propri dati di autenticazione, che verranno archiviati nel file ~/.oscrc. La password viene salvata come testo semplice, proteggere dunque il file ~/.oscrc e il proprio filesystem in maniera adeguata.
python-keyring dovrebbe già essere fornito da openSUSE e installato assieme a osc (è raccomandato dal suo pacchetto rpm), se così non fosse si potrà installarlo manualmente (preferibilmente prima di avviare
osc
per la prima volta) oppure aggiungere un repository opportuno prima di installare il pacchetto osc. Se si volesse usare il portachiavi dopo aver già creato l'utente con osc, sarà necessario rimuovere la sezione con i propri dati d'accesso dal file ~/.oscrc. La prossima volta che si esegue
osc
verranno nuovamente richiesti i dati di autenticazione. Ma prima di ciò potrebbe essere necessario de-commentare la riga
#use_keyring = 1
nella sezione [general]
del suddetto file .oscrc (dipende dalla versione di osc in uso).È stato riportato che, con python-keyring e le modifiche di qui sopra nel file ~/.oscrc, non è possibile autenticarsi usando il portachiavi di Gnome. In tal caso è stato d'aiuto rimuovere il pacchetto python-keyring e aggiungere alla sezione relativa al server di autenticazione nel file ~/.oscrc soltanto la riga gnome_keyring=1, invece della riga keyring=1.
Esempi di utilizzo
Qui sotto si riportano alcuni esempi d'uso a scopo introduttivo. Da notare la disponibilità del Tutorial su Build Service, che fornisce un'introduzione più sistematica.
Mostra informazioni su come usare un comando
osc help osc help <cmd>
Elenca il contenuto presente sul server
osc ls # elenca i progetti osc ls Apache # elenca i pacchetti in un progetto osc ls Apache subversion # elenca i file del pacchetto di un progetto
Checkout (crea una copia locale gestibile da ocs) del contenuto
osc co Apache # tutto il progetto osc co Apache subversion # un pacchetto osc co Apache subversion foo # un singolo file
Aggiorna una directory di lavoro (ovvero già inizializzata e gestibile da ocs)
osc up osc up <directory> osc up * # dall'interno della directory del progetto, aggiorna tutti i pacchetti osc up # dall'interno della directory del progetto, aggiorna tutti i pacchetti E fai il check out (crea copia gestibile da ocs) di tutti i pacchetti aggiunti dall'ultima volta
Invia al server la revisione (checkin/commit) con i contenuti modificati
osc ci # directory corrente osc ci <file1> <file2> # solo i file specificati osc ci <dir1> <dir2> ... # più pacchetti osc ci -m "updated foobar" # specifica un messaggio per il commit (commento in inglese, please)
Mostra il log (registro) dei commit
osc log
Mostra lo status (quali file sono stati modificati in locale)
osc st osc st <directory>
Se un aggiornamento (update) non può essere importato automaticamente, il relativo file sarà in condizione 'C' (di conflitto) e i conflitti saranno segnalati con le righe speciali <<<<<<<
e >>>>>>>
.
Una volta risolto manualmente il problema, usare
osc resolved <file>
Segna i file che devono essere aggiunti o rimossi al prossimo "checkin"
osc add foo osc rm foo
Aggiunge tutti i file nella copia locale che sono nuovi e rimuove tutti quelli non più presenti.
osc addremove
Genera un confronto per visualizzare le modifiche
osc diff [file]
Mostra i risultati della creazione (build) del pacchetto
osc results osc results <piattaforma>
Visualizza il file registro (log) di un pacchetto (è necessario lanciare il comando all'interno della directory di un pacchetto)
osc buildlog <piattaforma> <arch>
Mostra gli indirizzi URL dei file .repo che costituiscono le fonti di installazione pacchetti per Yum/YaST/smart
osc repourls [dir]
Richiamo una nuova creazione di pacchetto per tutti i repository/architetture di un pacchetto
osc rebuildpac [dir]
Crea un pacchetto nella propria piattaforma locale
osc build <piattaforma> <arch> <filespec> [--clean|--noinit|...]
Mostra le piattaforme configurate o gli obiettivi della creazione pacchetti.
osc platforms [progetto]
Visualizza gli obiettivi della creazione pacchetti disponibili per il proprio progetto.
osc repos
Mostra le meta-informazioni
osc meta prj <progetto> osc meta pkg <progetto> <pacchetto> osc meta user <nomeutente> osc meta prjconf <progetto>
Modifica le meta-informazioni. Verrà creato un nuovo pacchetto o progetto se non è ancora presente, in ogni caso si aprirà un Editor (default: vi) con il file sorgente dei metadati, direttamente in formato XML. Se non si ha dimestichezza con il codice XML da inserire, si può invece usare il client web, dal browser.
osc meta prj -e <progetto> osc meta pkg -e <progetto> <pacchetto> osc meta prjconf -e <progetto>
(Il file di configurazione del progetto (prjconf) può essere tranquillamente vuoto. È necessario soltanto in casi particolari.)
Aggiorna i meta-dati del pacchetto con i metadati estratti dal file spec
osc updatepacmetafromspec <dir>
Tenere traccia di un pacchetto
Con osc è inoltre possibile gestire i pacchetti in una modalità simile a svn. Questa funzionalità è chiamata package tracking (tracciatura del pacchetto) e, per usarla, deve essere attivata nella sezione [general]
del file ~/.oscrc
# gestire i pacchetti in modalità simile a svn do_package_tracking = 1
Aggiungere un nuovo pacchetto al progetto
osc mkpac <pacchetto>
Aggiungere ad un progetto una directory già esistente, assieme ai file all'interno di essa
osc add <directory>
Rimuovere un pacchetto e i file ad esso appartenenti da un progetto
osc deletepac <pacchetto>
Tutti i comandi qui sopra modificheranno soltanto la copia di lavoro locale gestita da ocs. Per inviare le modifiche al buildservice sarà necessario inviare la revisione (commit) delle stesse (comando: osc ci -m <message>
).
Il comando status
mostra anche lo stato attuale dei pacchetti
osc st
Documentazione
Oltre alla pagina di manuale per osc, è disponibile anche una scheda di riferimento rapido.
Come faccio a intervenire su un pacchetto, con dei problemi, non in factory?
Checkout del pacchetto che ti interessa:
Sistemalo e, dopo aver verificato che il pacchetto si può compilare senza problemi, invialo al server:
Estendere osc con i plugin
osc è estendibile, per cui è possibile modificare il comportamento dei comandi o scriverne di propri. Si veda en:openSUSE:OSC plugins per maggiori informazioni.
Migrazione di configurazione
Con la versione 0.114 sono stati riordinati alcuni aspetti relativi al file di configurazione, per cui alcune opzioni sono diventate deprecate, in particolare:
- apisrv
- scheme
È stata aggiunta una nuova opzione:
-
apiurl = <protocollo>://<hostqualunque> # da usare come apiurl predefinita. Se questa opzione non è specificata viene usata quella predefinita (https://api.opensuse.org).
Qualora la versione in uso di osc sia ancora (limitatamente) retro-compatibile con queste opzioni, che tuttavia potrebbero venire rimosse in futuro, verrà comunque emesso un avviso di opzione deprecata, nel caso in cui una di tali opzioni venga ancora utilizzata. Il nuovo schema di configurazione si presenta come il seguente:
# voce per una apiurl [<protocollo>://<apiurl>] user = <nomeutente> password = <password> ...
Prima di iniziare la migrazione si raccomanda di salvare il proprio file ~/.oscrc!
Se la migrazione non dovesse avvenire correttamente per un qualche motivo, contattare la mailinglist opensuse-buildservice o il canale irc #opensuse-buildservice.
Primo caso di migrazione (solo apisrv)
L'opzione apisrv è usata per specificare l'apihost predefinito. Se apisrv non è in alcun modo specificata viene usata quella predefinita ("api.opensuse.org"). In questo primo caso la sezione [general] si presenta al momento così:
[general] ... apisrv = <hostqualunque> # oppure apisrv = <protocollo>://<hostqualunque>
ma apisrv è stata rimpiazzata dalla nuova opzione apiurl, che deve essere usata in questo modo:
[general] ... apiurl = <protocollo>://<hostqualunque>
Se non è stato specificato nessun "<protocollo>" per apisrv, verrà usato https. Assicurarsi che tutte le sezioni apiurl siano nel nuovo formato descritto sopra, dopodiché si potrà rimuovere apisrv.
Secondo caso di migrazione (solo scheme)
In tal caso la sezione [general] si presenta al momento così:
[general] ... scheme = <protocollo>
questo significa che ogni sezione apiurl che non sia usata nel nuovo formato, il quale è descritto nell'esempio qui di seguito
[<hostqualunque>] user = <nomeutente> password = <password> ...
deve essere convertita in
[<protocollo>://<hostqualunque>] user = <nomeutente> password = <password> ...
Dopodiché l'opzione scheme può essere rimossa dalla sezione [general] (potrebbe darsi che alcune sezioni siano già nel formato corretto).
Terzo caso di migrazione (apisrv e scheme)
In tal caso la sezione [general] si presenta al momento così:
[general] ... apisrv = <hostqualunque> scheme = <protocollo>
Entrambe le opzioni devono essere rimosse, una volte che tutte le sezioni apiurl siano nel nuovo formato descritto sopra. Quindi si tratta in pratica di correggere tutte le sezioni apiurl (potrebbe darsi che alcune sezioni siano già nel formato corretto).
Usare osc build con xen
Prima di procedere sarà necessario avere i pacchetti xen e il kernel Xen installati e avviati all'avvio del sistema. Al fine di attivare i build locali con xen, sarà necessario aggiungere le righe qui di seguito alla sezione [general] del file ~/.oscrc del proprio utente:
build-type=xen build-device=/tmp/FILE.root build-swap=/tmp/FILE.swap build-memory=512
Creare quindi i succitati due file:
dd if=/dev/zero of=/tmp/FILE.root bs=1M count=4096 # partizione di 4GB per / . Con grossi progetti si dovrebbero usare 8GB. mkfs.ext3 /tmp/FILE.root # Premere (y) se si riceve l'avviso che il file non è un nodo dispositivo. dd if=/dev/zero of=/tmp/FILE.swap bs=1M count=512 # se necessario usare una dimensione diversa mkswap /tmp/FILE.swap
Nel caso in cui si voglia utilizzare la funzionalità di compilazione multi-piattaforma, sarà necessario aggiungere, nel file /etc/sysconfig/kernel del proprio sistema, rispettivamente:
-
binfmt_misc
aINITRD_MODULES
-
binfmt_misc
aDOMU_INITRD_MODULES
-
binfmt_misc
aMODULES_LOADED_ON_BOOT
Rigenerare il file initrd con mkinitrd
.
Lanciare infine osc build
.
Scheda di riferimento rapido per .oscrc
Sezione [general]
Archiviazione:
# I pacchetti scaricati sono salvati, temporaneamente, qui. Sono necessari i permessi di scrittura da parte dell'utente. # default: packagecachedir = /var/tmp/osbuild-packagecache
# directory radice impostata per l'ambiente chroot # può contenere (anche più volte) %(repo) e/o %(arch) etc. automaticamente sostituiti coi loro valori # /<percorso>/%(repo)-%(arch)-%(project)-%(package) # default: build-root = /var/tmp/build-root/
API di comunicazione:
# utilizza questo server delle API (nomehost[:porta]) # (richiede una sezione [api.opensuse.org] con i dati di autenticazione) # default: apisrv = api.opensuse.org
# usare questo protocollo per accedere al server delle API (http o https) # default: scheme = https
Host delle API:
# è possibile fare riferimento agli host delle API con l'ausilio di alias, p.es. 'osc -A alias ...' # Elenca gli alias per gli host delle API nella sezione host API. # https://api.opensuse.org # user=jdoe # aliases=
Build locale:
# Wrapper per invocare build come root (sudo, su -, ...) # default: su-wrapper = su -c # non richiedere alcuna password con: #su-wrapper = sudo #con questa voce nel file sudoers: # <nomeutente> ALL = NOPASSWD: /usr/bin/build
# Per conveninenza/scopi di debug, osc aggiunge internamente vim gdb strace # ai pacchetti installati nel chroot della build, se extra-pkgs non è impostato a: #extra-pkgs=
# build-type, tipo di build - valori ammessi: # * vuoto -> chroot # * xen -> xen VM # * kvm -> kvm VM (necessita di test) # default: non impostato/chroot #build-type=xen
# build-device, dispositivo di build - filesystem radice da usare per la VM (macchina virtuale) # default: non impostato #build-device=/tmp/FILE.root
# build-swap - filesystem di swap da usare per la VM # default: non impostato #build-swap=/tmp/FILE.swap
# build-memory - quantità di memoria per la VM # default: non impostata #build-memory=512
Contribuire: segnalazione di bug, sviluppo, etc.
Lo sviluppo viene portato avanti in: https://github.com/openSUSE/osc
Segnalare eventuali nuovi problemi a: https://github.com/openSUSE/osc/issues/new