openSUSE:OSC
Το εργαλείο της γραμμής εντολών για το openSUSE build service ονομάζεται osc
Περιεχόμενα
osc, ο Python πελάτης για τη γραμμή εντολών
Το osc είναι γραμμένο σε Python, και επιπρόσθετα στη διεπαφή της γραμμής εντολών παρέχει επίσης κι ένα άρθρωμα Python, για χρήση από άλλα προγράμματα Python.
Πακέτα μπορούν να βρεθούν στο http://download.opensuse.org/repositories/openSUSE:/Tools/ για μια πληθώρα διανομών (openSUSE, SLES, Fedora, Mandriva, Debian, κλπ.). Αν θέλετε να τραβήξετε τον πιο πρόσφατο πηγαίο κώδικα, μπορείτε να το κάνετε με το Git:
git clone git://github.com/openSUSE/osc.git
Για να δουλέψει το osc, το python-xml απαιτείται:
zypper install python-xml
Το osc είναι ένα πρόγραμμα πελάτη που μοιάζει με το subversion. Χρησιμοποιείται ως πελάτης όσον αφορά το αποθετήριο πηγαίου κώδικα του build service, και επιπλέον χρησιμοποιείται για την επεξεργασία των μεταδεδομένων ή για ερωτήματα σχετικά με τα αποτελέσματα της κατασκευής.
Εισαγωγικά παραδείγματα χρήσης δείχνονται παρακάτω. Σημειώστε τον οδηγό για το Build Service, που δίνει μια πιο συστηματική εισαγωγή.
Το osc είναι επεκτάσιμο. Μπορείτε να τροποποιήσετε τη συμπεριφορά του ή να γράψετε τις δικές σας εντολές.
Το osc θα σας ρωτήσει τα διαπιστευτήριά σας όταν το χρησιμοποιήσετε για πρώτη φορά, και θα τα αποθηκεύσει στο ~/.oscrc. Ο κωδικός πρόσβασης αποθηκεύεται σε απλό κείμενο. Προστατεύστε το αρχείο ~/.oscrc και το σύστημα αρχείων σας καταλλήλως.
Εμφανίστε πληροφορίες χρήσης για μια εντολή
osc help osc help <cmd>
Απαριθμήστε τα περιεχόμενα του εξυπηρετητή
osc ls # εμφανίζει τα έργα osc ls Apache # εμφανίζει τα πακέτα σε ένα έργο osc ls Apache subversion # εμφανίζει τα αρχεία του πακέτου ενός έργου
Τραβήξτε το περιεχόμενο
osc co Apache # ολόκληρο το έργο osc co Apache subversion # ένα πακέτο osc co Apache subversion foo # μεμονωμένο αρχείο
Ενημερώστε τον κατάλογο εργασίας
osc up osc up <directory> osc up * # εντός του καταλόγου του έργου, ενημερώνει όλα τα πακέτα osc up # εντός του καταλόγου του έργου, ενημερώνει όλα τα πακέτα ΚΑΙ τραβάει όλα τα νέα πακέτα που έχουν προστεθεί
Ανεβάστε το αλλαγμένο περιεχόμενο
osc ci # τωρινός κατάλογος osc ci <file1> <file2> # μόνο συγκεκριμένα αρχεία osc ci <dir1> <dir2> ... # πολλαπλά πακέτα osc ci -m "updated foobar" # δηλώνει ένα μήνυμα για την υποβολή
Δείτε την καταγραφή των υποβολών (commit)
osc log
Δείτε την κατάσταση (ποια αρχεία έχουν αλλάξει τοπικά)
osc st osc st <directory>
Αν μια ενημέρωση δεν μπορεί να ενωθεί αυτόματα, ένα αρχείο είναι σε κατάσταση 'C' (conflict=διένεξη), και οι διενέξεις σημειώνονται με ειδικές <<<<<<< και >>>>>>> γραμμές. Μετά τη χειροκίνητη επίλυση του προβλήματος, χρησιμοποιείστε
osc resolved <file>
Σημειώστε αρχεία για να προστεθούν ή να αφαιρεθούν στο επόμενο 'checkin'
osc add foo osc rm foo
Προσθέστε όλα τα νέα αρχεία σε τοπικά αντίγραφα και αφαιρέστε όλα τα εξαφανισμένα αρχεία.
osc addremove
Δημιουργήστε ένα diff για να δείτε τις αλλαγές
osc diff [file]
Εμφανίστε τα αποτελέσματα κατασκευής ενός πακέτου
osc results osc results <platform>
Εμφανίστε το αρχείο καταγραφής ενός πακέτου (πρέπει να είστε στον κατάλογο κάποιου πακέτου)
osc buildlog <platform> <arch>
Εμφανίστε τα URLs των αρχείων .repo που αποτελούν πηγές για το Yum/YaST/smart
osc repourls [dir]
Εκκινήστε την ανακατασκευή ενός πακέτου για όλα τα αποθετήρια/αρχιτεκτονικές ενός πακέτου
osc rebuildpac [dir]
Κατασκευάστε ένα πακέτο στην τοπική σας πλατφόρμα
osc build <platform> <arch> <specfile> [--clean|--noinit|...]
Εμφανίστε τις ρυθμισμένες πλατφόρμες/στόχους κατασκευής.
osc platforms [project]
Εμφανίστε τους πιθανούς στόχους κατασκευής για το έργο σας.
osc repos
Εμφανίστε τις μετά-πληροφορίες
osc meta prj <project> osc meta pkg <project> <package> osc meta user <username> osc meta prjconf <project>
Επεξεργαστείτε τις μετά-πληροφορίες. Δημιουργεί νέο πακέτο/έργο αν δεν υπάρχει. Θα ανοίξει έναν επεξεργαστή με τα χύμα XML μετά-δεδομένα. Αν δεν είστε σίγουροι για την XML, μπορείτε εναλλακτικά να χρησιμοποιήσετε την διεπαφή ιστού.
osc meta prj -e <project> osc meta pkg -e <project> <package> osc meta prjconf -e <project>
(Η ρύθμιση του έργου (prjconf) μπορεί κάλλιστα να είναι άδεια. Χρειάζεται μόνο σε ειδικές περιπτώσεις.)
Ενημερώστε τα μετά-δεδομένα του πακέτου με μετά-δεδομένα παρμένα από το αρχείο spec
osc updatepacmetafromspec <dir>
Ανίχνευση Πακέτων
Με το osc είναι δυνατό να διαχειριστείτε πακέτα με ένα τρόπο παρόμοιο με το svn. Αυτό το χαρακτηριστικό ονομάζεται ανίχνευση πακέτων και πρέπει να ενεργοποιηθεί στο [general] τμήμα του ~/.oscrc
# manage your packages in a svn like way do_package_tracking = 1
Προσθέστε ένα νέο πακέτο σε ένα έργο
osc mkpac <package>
Προσθέστε ένα υπάρχον κατάλογο με τα περιεχόμενά του σε ένα έργο
osc add <directory>
Αφαιρέστε ένα πακέτο και τα αρχεία του από ένα έργο
osc deletepac <package>
Όλες οι παραπάνω εντολές αλλάζουν μόνο το τοπικό αντίγραφο στο οποίο δουλεύετε. Για να υποβάλετε τις αλλαγές σας στο buildservice πρέπει να τις υποβάλετε (osc ci -m <message>).
Η εντολή κατάστασης εμφανίζει και την κατάσταση των πακέτων
osc st
Τεκμηρίωση
Εκτός από μια σελίδα τεκμηρίωσης για το osc, ένα σκονάκι είναι επίσης διαθέσιμο.
Πώς να διορθώσετε ένα πακέτο έξω από το factory;
Τραβήξτε το πακέτο της επιλογής σας:
osc -A https://api.suse.de bco SUSE:SLE-11-SP2:GA <package name>
Διορθώστε το και αφού ελέγξετε ότι κατασκευάζεται υποβάλετέ το:
osc commit <package name>
Μετανάστευση ρυθμίσεων
Η έκδοση 0.114 έλαβε κάποιες αλλαγές σχετικά με το χειρισμό του αρχείου ρυθμίσεων και επομένως κάποιες επιλογές είναι πλέον απαρχαιωμένες (deprecated), ονομαστικά:
- apisrv
- scheme
Μια νέα επιλογή προστέθηκε:
- apiurl = <protocol>://<somehost> # χρησιμοποίησε αυτή ως την προεπιλεγμένη διεύθυνση για το apiurl. Αν αυτή η επιλογή δεν οριστεί χρησιμοποιείται η προεπιλεγμένη (https://api.opensuse.org).
Μέχρι στιγμής το osc έχει μερική προς τα πίσω συμβατότητα για αυτές τις επιλογές αλλά πιθανόν να αφαιρεθούν στο μέλλον και για αυτό εμφανίζει μια προειδοποίηση στην περίπτωση που μια από αυτές τις επιλογές χρησιμοποιείται ακόμα. Το νέο σχήμα ρυθμίσεων φαίνεται ακολούθως:
# entry for an apiurl [<protocol>://<apiurl>] user = <username> password = <password> ...
Πριν ξεκινήσετε τη μετανάστευση σώστε το ~/.oscrc αρχείο σας!
Αν η μετανάστευση αποτύχει για τον οποιοδήποτε λόγο στείλτε ελεύθερα ένα email ή ρωτήστε στη λίστα ηλεκτρονικού ταχυδρομείου opensuse-buildservice ή στο irc κανάλι #opensuse-buildservice.
Μετανάστευση περίπτωση I (μόνο το apisrv)
Η επιλογή apisrv χρησιμοποιείται για να ορίσει τον προεπιλεγμένο υπολογιστή που φιλοξενεί το apihost. Αν η apisrv δεν οριστεί καθόλου χρησιμοποιείται ο προεπιλεγμένος ("api.opensuse.org"). Το τωρινό [general] τμήμα φαίνεται κάπως έτσι:
[general] ... apisrv = <somehost> # or apisrv = <protocol>://<somehost>
Η apisrv αντικαταστάθηκε από τη νέα επιλογή apiurl που φαίνεται κάπως έτσι:
[general] ... apiurl = <protocol>://<somehost>
Αν η apisrv δεν έχει καθόλου "<protocol>" χρησιμοποιείται το https. Βεβαιωθείτε ότι όλα τα τμήματα apiurl έχουν τη νέα μορφή που περιγράφηκε παραπάνω. Στη συνέχεια η apisrv μπορεί να αφαιρεθεί.
Μετανάστευση περίπτωση II (μόνο το scheme)
Το τωρινό [general] τμήμα φαίνεται κάπως έτσι:
[general] ... scheme = <protocol>
Αυτό σημαίνει κάθε τμήμα apiurl που δεν έχει τη νέα μορφή η οποία περιγράφηκε παραπάνω, για παράδειγμα
[<somehost>] user = <username> password = <password> ...
πρέπει να μετατραπεί σε
[<protocol>://<somehost>] user = <username> password = <password> ...
Στη συνέχεια η επιλογή scheme μπορεί να αφαιρεθεί από το [general] τμήμα (υπάρχει περίπτωση ορισμένα τμήματα να έχουν ήδη τη σωστή μορφή).
Μετανάστευση περίπτωση III (apisrv και scheme)
Το τωρινό [general] τμήμα φαίνεται κάπως έτσι:
[general] ... apisrv = <somehost> scheme = <protocol>
Και οι δυο επιλογές μπορούν να αφαιρεθούν αν όλα τα τμήματα apiurl έχουν τη νέα μορφή που περιγράφηκε παραπάνω. Οπότε βασικά απλά προσαρμόζετε όλα τα τμήματα apiurl (υπάρχει περίπτωση κάποια τμήματα να έχουν ήδη τη σωστή μορφή).
Κατασκευές osc με xen
Πρέπει να έχετε εγκατεστημένα τα πακέτα xen και πυρήνα xen και να εκκινήσετε από εκεί για να προχωρήσετε. Για να ενεργοποιήσετε τις τοπικές κατασκευές με τον xen, πρέπει να προσθέσετε αυτές τις γραμμές στο τμήμα [general] του δικού σας ~/.oscrc:
build-type=xen build-device=/tmp/FILE.root build-swap=/tmp/FILE.swap build-memory=512
Έπειτα φτιάξτε 2 αρχεία:
dd if=/dev/zero of=/tmp/FILE.root bs=1M count=4096 # 4GB κατάτμηση για το / . Σε μεγάλα έργα θα πρέπει να χρησιμοποιηθούν 8GB. mkfs.ext3 /tmp/FILE.root # Πατήστε (y) αν παραπονεθεί σχετικά με το αρχείο ότι δεν είναι κόμβος συσκευής (device node). dd if=/dev/zero of=/tmp/FILE.swap bs=1M count=512 # Χρησιμοποιήστε άλλα μεγέθη όπως χρειαστεί mkswap /tmp/FILE.swap
Αν θέλετε να χρησιμοποιήσετε το χαρακτηριστικό δια-μεταγλώττισης, θα πρέπει να προσθέσετε στο δικό σας /etc/sysconfig/kernel:
- binfmt_misc to INITRD_MODULES
- binfmt_misc to DOMU_INITRD_MODULES
- binfmt_misc to MODULES_LOADED_ON_BOOT
Αναδημιουργήστε το initrd με το mkinitrd.
Εκτελέστε το osc build.
Σκονάκι για το .oscrc
Το τμήμα [general]
Αποθήκευση:
# Downloaded packages are cached here. Must be writable by you. # default: packagecachedir = /var/tmp/osbuild-packagecache
# rootdir to setup the chroot environment # can contain %(repo)s and/or %(arch)s for replacement # /<path>/%(repo)s-%(arch)s-%(project)s-%(package)s # default: build-root = /var/tmp/build-root/
επικοινωνία με το API:
# use this API server (hostname[:port]) # (it needs a section [api.opensuse.org] with the credentials) # default: apisrv = api.opensuse.org
# use this protocol to access the API server (http or https) # default: scheme = https
Φιλοξενία του API:
# API hosts can be referenced by aliases, e.g. 'osc -A alias ...' # List aliases for API hosts under the API host section. # https://api.opensuse.org # user=jdoe # aliases=
Τοπική κατασκευή:
# Wrapper to call build as root (sudo, su -, ...) # default: su-wrapper = su -c # no password required with: #su-wrapper = sudo #with entry in sudoers file: # <username> ALL = NOPASSWD: /usr/bin/build
# For convenience/debugging, osc adds internally vim gdb strace to # the packages installed in the build chroot if extra-pkgs is not set to: #extra-pkgs=
# build type - possibe values: # * empty -> chroot # * xen -> xen VM # * kvm -> kvm VM (testing needed) # default: not set/chroot #build-type=xen
# build-device - root filesystem to use for VM # default: not set #build-device=/tmp/FILE.root
# build-swap - swap filesystem to use for VM # default: not set #build-swap=/tmp/FILE.swap
# build-memory - amount of memory for VM # default: not set #build-memory=512