openSUSE:Package naming guidelines

Μετάβαση σε: πλοήγηση, αναζήτηση
Οι κατευθυντήριες γραμμές για την ονομασία των πακέτων στο openSUSE θα σας βοηθήσουν να αποφασίσετε πως να ονομάσετε το πακέτο και το specfile σωστά.

Κοινό Σύνολο Χαρακτήρων για Ονομασία Πακέτων

Ενώ το openSUSE είναι μια διεθνή κοινότητα, για συνέπεια και ευχρηστία, υπάρχουν ανάγκες για ένα κοινό σύνολο χαρακτήρων για την ονομασία των πακέτων.

Ειδικότερα, όλα τα openSUSE πακέτα πρέπει να ονομάζονται χρησιμοποιώντας μόνο τους ακόλουθους ASCII χαρακτήρες. Αυτοί οι χαρακτήρες εμφανίζονται εδώ:

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789-._+

Όταν η Ονομασία στο Upstream είναι εκτός του καθορισμένου συνόλου χαρακτήρων

Το openSUSE αναγνωρίζει ότι η μετατροπή κειμένου στο καθορισμένο σύνολο χαρακτήρων ASCII (κοινώς μεταγραφή) είναι δύσκολη. Συνεπώς, όταν το όνομα στο πεδίο name είναι εκτός του καθορισμένου συνόλου χαρακτήρων ASCII, ο συντηρητής του πακέτου στο openSUSE θα πρέπει πρώτα να επικοινωνήσει με το upstream για αυτό το λογισμικό και να τους ρωτήσει για μια transliteration του ονόματος για να χρησιμοποιηθεί στο openSUSE.

Αν (και μόνο αν) το upstream δεν μπορεί, δε θέλει, ή δεν είναι διαθέσιμο για να παρέχει ένα μεταγραμμένο όνομα, τότε ο πακετάς στο openSUSE πρέπει να επιλέξει είτε να πραγματοποιήσει τη δική του μεταγραφή, ή να αποσύρει το πακέτο από τη συμπερίληψή του στο openSUSE.

Όταν αποφασίζει για το πως να μεταγράψει ένα όνομα πακέτου, ο πακετάς για το openSUSE θα πρέπει να δει τι (αν είναι εφικτό) έχουν κάνει άλλες διανομές για το όνομα αυτού του πακέτου, και να το λάβει υπόψη του.

Μεταγραμμένα πακέτα μπορούν να Provide: το αυθεντικό, μη-μεταγραμμένο όνομα, αλλά δεν απαιτείται να το κάνουν.

Γενική Ονοματολογία

Κατά την ονομασία ενός πακέτου, το όνομα θα πρέπει να ταιριάζει με το όνομα της αρχειοθήκης tarball στο upstream ή με το όνομα του έργου από το οποίο προήλθε το συγκεκριμένο λογισμικό. Σε μερικές περιπτώσεις, η επιλογή του ονόματος μπορεί να είναι πιο πολύπλοκη. Αν το πακέτο έχει πακεταριστεί από άλλες διανομές/πακετάδες στο παρελθόν, τότε θα πρέπει να προσπαθήσετε να ταιριάξετε με το δικό τους όνομα για συνέπεια. Σε κάθε περίπτωση, χρησιμοποιήστε την καλύτερη δυνατή σας κρίση, και άλλοι προγραμματιστές θα βοηθήσουν στην τελική απόφαση.

Επιπλέον, είναι πιθανό το όνομα στο upstream να μην πέφτει στο Κοινό Σύνολο Χαρακτήρων. Αν μιλάμε για αυτήν την περίπτωση, δείτε το: Όταν η Ονομασία στο Upstream είναι εκτός του καθορισμένου συνόλου χαρακτήρων.

Διαχωριστές

Κατά την ονομασία πακέτων για το openSUSE, ο συντηρητής πρέπει να χρησιμοποιεί την παύλα '-' ως οριοθέτη για τα τμήματα του ονόματος. Ο συντηρητής πρέπει να ΜΗΝ χρησιμοποιεί την κάτω παύλα (underscore) '_', το συν '+', ή την τελεία ως '.' ως οριοθέτη.

Υπάρχουν μερικές εξαιρέσεις στον κανόνα της κάτω παύλας (underscore) '_'.

  • httpd, pam, και SDL πρόσθετα πακέτα εξαιρούνται, δείτε το

" Πρόσθετα Πακέτα (httpd, pam and SDL) ".

  • πακέτα ειδικά για την εντοπιότητα (locale specific), και χρησιμοποιούν το locale στο όνομα εξαιρούνται, δείτε το

" Πρόσθετα Πακέτα (locale) ".

  • Πακέτα όπου το όνομα στο upstream φυσιολογικά περιέχει μια κάτω παύλα (underscore) εξαιρούνται από αυτόν τον κανόνα.

Παραδείγματα τέτοιων πακέτων συμπεριλαμβάνουν:

java_cup
libart_lgpl
microcode_ctl
nss_ldap
sg3_utils

Αν έχετε αμφιβολίες, ρωτήστε στη λίστα ηλεκτρονικού ταχυδρομείου opensuse-packaging.

Πολλαπλά πακέτα με το ίδιο βασικό όνομα

Για πολλούς λόγους, αποτελεί μερικές φορές πλεονέκτημα να κρατάτε πολλαπλές εκδόσεις ενός πακέτου στο openSUSE για να εγκαθίσταται ταυτόχρονα. Όταν το κάνετε αυτό, το όνομα του πακέτου πρέπει να καθρεφτίζει αυτό το γεγονός. Ένα πακέτο θα έπρεπε να χρησιμοποιεί το βασικό όνομα χωρίς εκδόσεις και όλα τα άλλα πρόσθετα θα πρέπει να σημειώνουν την έκδοσή τους στο όνομα. Υπάρχουν ορισμένες εξαιρέσεις όπου όλα τα πακέτα έχουν την έκδοση συνημμένη στο όνομα (π.χ. Δεν υπάρχει πακέτο χωρίς έκδοση στο όνομα).

Παραδείγματα:
Το autoconf ή η sqlite περιστασιακά έχουν πολλαπλές εκδόσεις στο openSUSE για προς τα πίσω συμβατότητα.
Η πιο πρόσφατη έκδοση του autoconf έχει Name: autoconf
Η παλιότερη 2.1.3 έκδοση του autoconf έχει Name: autoconf213
Τα πακέτα για τη σειρά 3.x εκδόσεων της sqlite έχουν Name: sqlite3 και Name: sqlite3-devel
Τα πακέτα για τη σειρά 2.x εκδόσεων της sqlite έχουν Name: sqlite2 και Name: sqlite2-devel

Σημειώστε ότι δεν χρησιμοποιούμε οριοθέτες στο όνομα σε αυτή την περίπτωση, αφαιρούμε την τελεία '.' από τον αριθμό έκδοσης και τον επισυνάπτουμε στο όνομα.

Η ειδική περίπτωση που αντιμετωπίζεται διαφορετικά είναι οι διαμοιραζόμενες βιβλιοθήκες. Υπάρχει μια ξεχωριστή Πολιτική πακεταρίσματος κοινόχρηστων βιβλιοθηκών που περιγράφει το πως να τις χειρίζεστε.

Διάκριση μεταξύ πεζών κεφαλαίων

Στο πακετάρισμα για το openSUSE, ο συντηρητής θα έπρεπε να χρησιμοποιεί την καλύτερή του/της κρίση όταν σκέφτεται για το πως να ονομάσει το πακέτο. Ενώ η διάκριση μεταξύ πεζών κεφαλαίων δεν είναι μια υποχρεωτική απαίτηση, θα πρέπει να χρησιμοποιείται μόνο όπου είναι αυτό απαραίτητο. Έχετε υπόψη να σέβεστε τις επιθυμίες των συντηρητών στο upstream. Αν αναφέρονται στην εφαρμογή τους ως "ORBit", θα πρέπει να χρησιμοποιήσετε το "ORBit" ως όνομα για το πακέτο, και όχι το "orbit". Ωστόσο, αν δεν εκφράζουν κάποια ιδιαίτερη προτίμηση, θα πρέπει να χρησιμοποιείτε εξορισμού πεζά γράμματα στην ονοματολογία.

Εξαίρεση σε αυτό γίνεται για το πακετάρισμα των αρθρωμάτων της perl. Το CPAN Group and Type πρέπει να είναι με κεφαλαία στο όνομα, καθώς είναι καθαρά ουσιαστικά. (Δείτε το Πρόσθετα Πακέτα (perl modules) για λεπτομέρειες.)

Ονομασία αρχείου Spec

Το αρχείο spec πρέπει να ονομάζεται σύμφωνα με το σχήμα %{name}.spec. Αν το πακέτο σας ονομάζεται foo-1.0-1.src.rpm, τότε το αρχείο spec θα έπρεπε να ονομαστεί foo.spec.


Μετονομασία/αντικατάσταση υπαρχόντων πακέτων

Στην περίπτωση που κριθεί απαραίτητο να μετονομαστεί ή να αντικατασταθεί ένα υπάρχον πακέτο, το νέο πακέτο θα πρέπει να κάνει την αλλαγή αδιαφανώς για τον τελικό χρήστη όσο είναι αυτό δυνατόν. Αν ένα πακέτο μετονομάζεται χωρίς κάποιες λειτουργικές αλλαγές, ή είναι μια αρκετά συμβατή αντικατάσταση σε κάποιο υπάρχον πακέτο (όπου το "αρκετά" σημαίνει ότι περιλαμβάνει μόνο αλλαγές μεγέθους που συναντώνται συνήθως σε αλλαγές κατά την αναβάθμιση εκδόσεων), δώστε καθαρές διαδρομές αναβάθμισης και συμβατότητας με τα:

Provides: oldpackagename = %version
Obsoletes: oldpackagename < 1.0

Αν ένα πακέτο αντικαθιστά ένα υπάρχον χωρίς να είναι αρκετά συμβατή αντικατάσταση όπως ορίστηκε παραπάνω, χρησιμοποιήστε μόνο την Obsoletes από παραπάνω.

Παράδειγμα

  1. Το walkman μετονομάζεται σε ipod
  2. το ipod είναι συμβατό με το walkman
  3. η τελευταία έκδοση πακέτου του walkman ήταν η walkman-1.4

Αυτά πρέπει να είναι τα περιεχόμενα του ipod.spec

Provides: walkman = %{version}
Obsoletes: walkman < 1.0

Το Provides πρέπει να υποθέσουμε ότι είναι κατακριτέο και έχει μικρή διάρκεια ζωής και θα αφαιρεθεί στη διάθεση της διανομής μετά την επόμενη. Για πακέτα που δεν κατεβαίνουν συνήθως ως εξάρτηση με βάση το όνομα όπως πακέτα που περιέχουν μόνο βιβλιοθήκες (που κατεβαίνουν μέσω εξαρτήσεων βιβλιοθηκών με soname), δε χρειάζεται να προσθέσουμε το Provides.

ΥποΠακέτα Τεκμηρίωσης

Μεγάλα αρχεία τεκμηρίωσης θα πρέπει να πηγαίνουν σε κάποιο υποπακέτο. Αυτό το υποπακέτο πρέπει να ονομάζεται σύμφωνα με τη μορφή: %{name}-doc . Ο ορισμός του μεγάλου αφήνεται στην καλύτερη κρίση του πακετά, αλλά δεν περιορίζεται μόνο στο μέγεθος. Το μεγάλο μπορεί να αναφέρεται είτε στο μέγεθος είτε στην ποσότητα.

Πρόσθετα Πακέτα (Γενικά)

Αν ένα νέο πακέτο θεωρείται ως ένα "πρόσθετο" πακέτο που βελτιώνει ή προσθέτει μια νέα λειτουργικότητα σε ένα υπάρχον πακέτο openSUSE χωρίς να είναι χρήσιμο από μόνο του, το όνομά του πρέπει να καθρεφτίζει αυτό το γεγονός.

Το νέο πακέτο ("παιδί") θα πρέπει να βάζει μπροστά το "γονεϊκό" πακέτο στο όνομά του, σύμφωνα με την εξής μορφή: %{parent}-%{child}.

Παραδείγματα:

gnome-applet-netmon (netmon εφαρμογίδιο για το gnome, βασίζεται στο gnome)
php-adodb (adodb λειτουργικότητα για την php, βασίζεται στην php)
python-twisted (το twisted module για python, βασίζεται στην python)
xmms-cdread (λειτουργικότητα άμεσης ανάγνωσης από cd για το xmms, βασίζεται στο xmms)