<?xml version="1.0" encoding="UTF-8"?>


Η Οργάνωση των Εκδόσεων του FreeBSD


Murray Stokely

<murray@FreeBSD.org>
          http://www.FreeBSD.org/~murray
          
Αναθεώρηση: 43126
2013-11-07 από gabor.
 ερίληψη
Αυτό το άρθρο περιγράφει την αντιμετώπιση
και οργάνωση της ομάδας ανάπτυξης του FreeBSD,
όσον αφορά στην προετοιμασία ποιοτικών
εκδόσεων του Λειτουργικού Συστήματος FreeBSD.
Εξηγεί με λεπτομέρεια την μεθοδολογία που
χρησιμοποιείται για τις επίσημες εκδόσεις
του FreeBSD και περιγράφει τα εργαλεία που
είναι διαθέσιμα σε όσους ενδιαφέρονται να
παράγουν παραμετροποιημένες εκδόσεις του
FreeBSD για εσωτερική ή εμπορική χρήση και
ανάπτυξη προϊόντων.
-------------------------------------------------------------------------------
 ίνακας  εριεχομένων


  1._Εισαγωγή

  2._Η_Διαδικασία_Δημιουργίας_μιας_Έκδοσης

  3._Μεταγλώττιση_της_Έκδοσης

  4._Διανομή_των_Εκδόσεων

  5._Επεκτασιμότητα

  6._Μαθήματα_που__ήραμε_από_την_Έκδοση_4.4_του
  FreeBSD

  7._Μελλοντικές_Κατευθύνσεις

  8._Ευχαριστίες

  9._Αναφορές


1. Εισαγωγή

Η ανάπτυξη του FreeBSD είναι μια πολύ ανοιχτή
διαδικασία. Το FreeBSD αποτελείται από
συνεισφορές χιλιάδων ανθρώπων από όλο τον
κόσμο. Η ομάδα του FreeBSD παρέχει πρόσβαση
μέσω ανώνυμου CVS[1] σε όλους, έτσι ώστε να
μπορεί όποιος θέλει να δει μηνύματα log,
διαφορές (patches) που έχουν τα διάφορα development
branches, και άλλα χαρακτηριστικά που βοηθούν
την ανάπτυξη, τα οποία προκύπτουν από την
χρήση ενός αυστηρού συστήματος
διαχείρισης κώδικα. Αυτό αποτέλεσε και τον
πιο σημαντικό παράγοντα έλξης για ένα
μεγάλο αριθμό από ταλαντούχους
προγραμματιστές από όλο τον κόσμο στο FreeBSD.
Είναι προφανές, βέβαια, πως πολύ σύντομα θα
είχε γίνει εντελώς χαοτική η κατάσταση αν
είχαν όλοι, από όλο τον κόσμο, πρόσβαση να
γράψουν στον κώδικα. Γι' αυτό, μόνο μια
«επιλεγμένη» ομάδα από περίπου 300 άτομα
έχουν πρόσβαση να γράψουν στο CVS repository.
Αυτοί οι committers[6] είναι υπεύθυνοι για το
μεγαλύτερο μέρος της ανάπτυξηςς που
γίνεται στο FreeBSD. Μια κεντρική-ομάδα[7] (core
team) από διακεκριμένους προγραμματιστές
εκλέγεται για να παρέχει κάποιου είδους
καθοδήγηση και μια κατεύθυνση στο σύνολο
των committers.
Οι ταχύτατοι ρυθμοί ανάπτυξης του FreeBSD δεν
αφήνουν και πολύ χρόνο για το ξεκαθάρισμα
του συστήματος ανάπτυξης σε μια έκδοση με
ποιότητα που να αξίζει να χρησιμοποιείται
ευρέως. Για να λυθεί αυτό το δίλλημα, η
ανάπτυξη γίνεται ταυτόχρονα σε δυο
παράλληλα μονοπάτια. Ο κύριος κορμός
ανάπτυξης είναι ο HEAD ή trunk στο CVS repository μας,
γνωστός και ως «FreeBSD-CURRENT», ή «-CURRENT» εν
συντομία.
Ένας πιο σταθερός κορμός συντηρείται,
γνωστός με το όνομα «FreeBSD-STABLE» ή πιο σύντομα
«-STABLE». Και οι δυο κορμοί είναι
αποθηκευμένοι στο κύριο CVS repository, στην
Καλιφόρνια, και αντιγράφονται μέσω CVSup[2] σε
mirrors παντού στον κόσμο. Το FreeBSD-CURRENT[8] είναι η
«πρώτη σειρά» της ανάπτυξης του FreeBSD καθώς
σε αυτό γίνονται πρώτα όλες οι καινούριες
αλλαγές. Το FreeBSD-STABLE είναι ο κορμός
ανάπτυξης από τον οποίο φτιάχνονται οι
εκδόσεις. Οι αλλαγές εισέρχονται σε αυτόν,
τον δεύτερο κορμό ανάπτυξης, με πιο αργό
ρυθμό, αφού πρώτα (σύμφωνα με την πολιτική
μας) δοκιμαστούν στο FreeBSD-CURRENT και έχουν
εξεταστεί πολύ καλά.
Κατά την περίοδο που μεσολαβεί από τη μια
έκδοση στην επόμενη, φτιάχνονται
καθημερινά snapshots από τα μηχανήματα της
ομάδας του FreeBSD και είναι διαθέσιμες από
τον εξυπηρετητή ftp://stable.FreeBSD.org/. Η μεγάλη
διαθεσιμότητα των εκτελέσιμων snapshots, καθώς
και η τάση της κοινότητας των χρηστών μας
να ενημερώνουν τα μηχανήματά τους με τις
πρόσφατες -STABLE εκδόσεις μέσω CVSup και «make
world»[8] βοηθούν να κρατιέται το FreeBSD-STABLE σε
μια πολύ αξιόπιστη κατάσταση ακόμα και
πριν αρχίσει ο κύκλος των ελέγχων
ποιότητας ακριβώς πριν από την διάθεση
μιας έκδοσης του FreeBSD.
Συνεχώς στέλνονται από τους χρήστες μας
αναφορές προβλημάτων και αιτήσεις για
καινούρια χαρακτηριστικά, κατά τη διάρκεια
του κύκλου της κάθε έκδοσης. Οι αναφορές
προβλημάτων εισάγονται στην βάση GNATS[9] μέσω
e-mail, με την εφαρμογή send-pr(1), ή μέσω του web-
interface που παρέχεται στην διεύθυνση http://
www.FreeBSD.org/send-pr.html. Εκτός από τις διάφορες
λίστες ηλεκτρονικού ταχυδρομείου με θέμα
τα τεχνικά χαρακτηριστικά του FreeBSD υπάρχει
και η λίστα FreeBSD_Quality_Assurance_mailing_list, η οποία
παρέχει ένα φόρουμ για συζητήσεις σχετικά
με τις λεπτομέρειες της «οργάνωσης των
εκδόσεων».
Για να εξυπηρετηθούν οι πιο συντηρητικοί
χρήστες μας, με έκδοση του FreeBSD 4.3 αρχίσαμε
να χρησιμοποιούμε ξεχωριστούς κορμούς
εκδόσεων. Αυτοί οι κορμοί δημιουργούνται
λίγο πρίν φτιαχτεί η τελική έκδοση. Μετά
την ανακοίνωση της έκδοσης, μόνο πολύ
σημαντικές αλλαγές και προσθήκες σχετικές
με την ασφάλεια γίνονται στον κορμό της
έκδοσης. Εκτός από την δυνατότητα
αναβάθμισης μέσω CVS, εκτελέσιμα patchkits
φτιάχνονται για να μπορούν να αναβαθμίσουν
τα συστήματά τους όσοι χρησιμοποιούν τις
εκδόσεις RELENG_X_Y.
Το Τμήμα_2,_«Η_Διαδικασία_Δημιουργίας_μιας
Έκδοσης» εξηγεί με λεπτομέρειες τα διάφορα
στάδια της διαδικασίας που βρίσκεται πίσω
από κάθε έκδοση, μέχρι και τα βήματα που
οδηγούν στην μεταγλώττιση του συστήματος
και το Τμήμα_3,_«Μεταγλώττιση_της_Έκδοσης»
εξηγεί την ίδια τη διαδικασία της
μεταγλώττισης. Το Τμήμα_5,
«Επεκτασιμότητα» περιγράφει πως μπορεί να
επεκταθεί το βασικό σύστημα από τρίτους
και το Τμήμα_6,_«Μαθήματα_που__ήραμε_από_την
Έκδοση_4.4_του_FreeBSD» περιγράφει κάποια από τα
πράγματα που μάθαμε από την διαδικασία
έκδοσης του FreeBSD 4.4. Τέλος, το Τμήμα_7,
«Μελλοντικές_Κατευθύνσεις» παρουσιάζει
κάποιες από τις κατευθύνσεις που θέλουμε
να πάρει η ανάπτυξη στο μέλλον.

2. Η Διαδικασία Δημιουργίας μιας Έκδοσης

Οι νέες εκδόσεις του FreeBSD φτιάχνονται από
τον -STABLE κορμό ανάπτυξης περίπου κάθε
τέσσερεις μήνες. Η διαδικασία
προετοιμασίας μιας έκδοσης ξεκινάει
σχεδόν 45 μέρες πριν την αναμενόμενη
ημερομηνία έκδοσης, όταν ο υπεύθυνος
εκδόσεων του FreeBSD στέλνει ένα γράμμα στις
λίστες των προγραμματιστών για να
υπενθυμίσει στους προγραμματιστές ότι
έχουν 15 μέρες καιρό να κάνουν όποιες
αλλαγές θέλουν, πριν το πάγωμα του κώδικα.
Μέσα σε αυτό τον καιρό, πολλοί
προγραμματιστές κάνουν μια σειρά από
αλλαγές που έχουν μείνει πλέον γνωστές ως
«ξεκαθαρίσματα MFC». Ο όρος MFC σημαίνει «Merge
From CURRENT» και περιγράφει την διαδικασία
προσαρμογής του κώδικα μιας δοκιμασμένης
αλλαγής από τον -CURRENT πειραματικό κορμό
ανάπτυξης στον σταθερό -STABLE κορμό.

2.1. Έλεγχος Κώδικα

Τριάντα ημέρες πριν την αναμενόμενη
ημερομηνία έκδοσης, ο κώδικας του repository
εισέρχεται σε μια περίοδο «καθυστέρησης».
Κατά τη διάρκεια αυτής της περιόδου, όλες
οι αλλαγές στον -STABLE κορμό πρέπει να έχουν
την έγκριση της re@FreeBSD.org. Οι αλλαγές που
επιτρέπονται σε αυτή την περίοδο που
διαρκεί 15 ημέρες είναι:

* Διορθώσεις γνωστών προβλημάτων.
* Ενημερώσεις στην τεκμηρίωση.
* Αλλαγές σχετικές με την ασφάλεια.
* Μικρές αλλαγές στους οδηγούς συσκευών,
  όπως π.χ. η προσθήκη των IDs νέων συσκευών.
* Οποιαδήποτε άλλη αλλαγή πιστεύει η ομάδα
  ανάπτυξης ότι πρέπει να γίνει, με το
  αναμενόμενο πάντα ρίσκο.

Μετά τις πρώτες 15 μέρες καθυστέρησης,
φτιάχνεται μια δοκιμαστική έκδοση για να
χρησιμοποιηθεί σαν δοκιμή της τελικής
έκδοσης και ο κώδικας εισέρχεται σε μια
περίοδο «παγώματος».  λέον είναι πολύ πιο
δύσκολο να γίνουν νέες αλλαγές στο σύστημα,
εκτός κι αν διορθώνουν κάποιο πολύ σοβαρό
bugή κάποιο πρόβλημα ασφάλειας. Κατά τη
διάρκεια του παγώματος του κώδικα,
τουλάχιστον μία δοκιμαστική έκδοση
φτιάχνεται κάθε εβδομάδα, μέχρι να είναι
έτοιμη η τελική έκδοση. Τις ημέρες ακριβώς
πριν την τελική έκδοση, η ομάδα που είναι
υπεύθυνη για τις εκδόσεις είναι σε συνεχή
επικοινωνία με την ομάδα ασφάλειας, την
ομάδα συντήρησης της τεκμηρίωσης, και την
ομάδα συντήρησης των ports, για να βεβαιωθούν
πως όλα τα απαραίτητα κομμάτια για μια
πλήρη έκδοση είναι διαθέσιμα.

2.2. Λίστα Ελέγχου της Τελικής Έκδοσης

Όταν αρκετές δοκιμαστικές εκδόσεις έχουν
γίνει διαθέσιμες, έχουν δοκιμαστεί από
αρκετό κόσμο και όλα τα σοβαρά θέματα έχουν
αναλυθεί, η τελική έκδοση μπορεί να
αρχίσει.

2.2.1. Δημιουργία του Κορμού Έκδοσης

Όπως περιγράψαμε στην εισαγωγή, οι κορμοί
RELENG_X_Y είναι μια σχετικά νέα προσθήκη στην
μεθοδολογία των εκδόσεών μας. Το πρώτο βήμα
στην δημιουργία αυτού του κορμού είναι να
βεβαιωθείτε ότι δουλεύετε με την τελευταία
έκδοση του πηγαίου κώδικα από τον RELENG_X
κορμό από τον οποίο θα φτιάξετε το νέο
κορμό.

  /usr/src# cvs update -rRELENG_4 -P -d

Το επόμενο βήμα είναι να δημιουργήσετε μια
ετικέτα (tag) στο σημείο εκκίνησης του
κορμού, ώστε να μπορείτε να δείτε τις
διαφορές με την αρχή του κορμού εύκολα στο
μέλλον με το CVS:

  /usr/src# cvs rtag -rRELENG_4 RELENG_4_8_BP src

Και τότε μπορείτε να δημιουργήσετε το νέο
κορμό με:

  /usr/src# cvs rtag -b -rRELENG_4_8_BP RELENG_4_8 src


Σημείωση:

Οι ετικέτες RELENG_* είναι δεσμευμένες για
χρήση από τους CVS-meisters και την ομάδα των
εκδόσεων.
Ο όρος «ετικέτα» είναι ορολογία του CVS.
Σημαίνει ένα όνομα που καθορίζει μια
συγκεκριμένη έκδοση του κώδικα στο χρόνο.
Χρησιμοποιώντας ετικέτες στον πηγαίο
κώδικα βοηθάμε όποιον φτιάξει στο μέλλον
εκδόσεις του FreeBSD να βρίσκει και να
χρησιμοποιεί ακριβώς τον ίδιο κώδικα που
χρησιμοποιήθηκε για τις επίσημες εκδόσεις
της Ομάδας του FreeBSD.

2.2.2. Αυξάνοντας τον Αριθμό Έκδοσης

 ριν μπει η ετικέτα, μεταγλωττιστεί και
ετοιμαστεί η τελική έκδοση, πρέπει να
γίνουν αλλαγές στα παρακάτω αρχεία για να
περιέχουν τον σωστό αριθμό έκδοσης για το
FreeBSD:

* doc/en_US.ISO8859-1/books/handbook/mirrors/chapter.xml
* doc/en_US.ISO8859-1/books/porters-handbook/book.xml
* doc/share/xml/freebsd.ent
* src/Makefile.inc1
* src/UPDATING
* src/gnu/usr.bin/groff/tmac/mdoc.local
* src/release/Makefile
* src/release/doc/en_US.ISO8859-1/share/xml/release.dsl
* src/release/doc/share/examples/Makefile.relnotesng
* src/release/doc/share/xml/release.ent
* src/share/examples/cvsup/standard-supfile
* src/sys/conf/newvers.sh
* src/sys/sys/param.h
* src/usr.sbin/pkg_install/add/main.c
* www/en/docs.xml
* www/en/cgi/ports.cgi
* ports/Tools/scripts/release/config

Οι σημειώσεις έκδοσης και τα αρχεία με τις
διορθώσεις της τελευταίας στιγμής πρέπει
επίσης να προσαρμοστούν στην νέα έκδοση
(στον κορμό της έκδοσης) και να
επεξεργαστούν κατάλληλα (στους δύο κορμούς
stable και current):

* src/release/doc/en_US.ISO8859-1/relnotes/common/new.xml
* src/release/doc/en_US.ISO8859-1/errata/article.xml

Η εφαρμογή sysinstall πρέπει επίσης να
ενημερωθεί με τον σωστό αριθμό των ports και
το χώρο του δίσκου που απαιτείται για την
Συλλογή των Ports. Αυτές οι πληροφορίες
υπάρχουν στο αρχείο src/release/sysinstall/dist.c.
Αφού ολοκληρωθεί η προετοιμασία της νέας
επίσημης έκδοσης, πρέπει να ενημερώσετε
μερικά αρχεία για να ενημερώσετε τον κόσμο
για τη νέα έκδοση του FreeBSD.

* www/en/includes.xsl
* www/en/includes.xml
* www/es/includes.xml
* www/en/releases/*
* src/share/misc/bsd-family-tree


2.2.3. Δημιουργία των Ετικετών της Έκδοσης

Όταν η τελική έκδοση είναι έτοιμη, η
παρακάτω εντολή θα δημιουργήσει την
ετικέτα RELENG_4_8_0_RELEASE.

  /usr/src# cvs rtag -rRELENG_4_8 RELENG_4_8_0_RELEASE src

Οι υπεύθυνοι της Τεκμηρίωσης και των Ports
είναι αυτοί που πρέπει να δημιουργήσουν
τις ετικέτες RELEASE_4_8_0 στα κατάλληλα δέντρα
πηγαίου κώδικα.
Μερικές φορές, μπορεί να χρειαστεί να
γίνουν κάποιες αλλαγές τελευταία στιγμή
μετά την τοποθέτηση των ετικετών. Γενικά,
δεν είναι δύσκολο να γίνει κάτι τέτοιο αφού
το CVS επιτρέπει να μετακινήσει κάποιος τις
ετικέτες με εντολές όπως cvs tag -d tagname filename.
Είναι πολύ σημαντικό όμως αυτές οι αλλαγές
της τελευταίας στιγμής να σημειωθούν με
τις σωστές ετικέτες για την συγκεκριμένη
έκδοση. Οι επίσημες εκδόσεις του FreeBSD
πρέπει να είναι πάντα εύκολο να
αναπαραχθούν. Τοπικές αλλαγές στο
περιβάλλον του μηχανικού των εκδόσεων δεν
επιτρέπονται.

3. Μεταγλώττιση της Έκδοσης

Οι «εκδόσεις» του FreeBSD μπορούν να
μεταγλωττιστούν από οποιονδήποτε έχει ένα
σχετικά γρήγορο μηχάνημα και πρόσβαση στο
repository του πηγαίου κώδικα. (Όλοι έχουν αυτή
τη δυνατότητα, αφού παρέχουμε πρόσβαση
μέσω ανώνυμου CVS! Δείτε το Εγχειρίδιο του
FreeBSD για περισσότερες λεπτομέρειες.) Η μόνη
ειδική απαίτηση είναι να υπάρχει
υποστήριξη στον πυρήνα σας για την συσκευή
vn(4). (Στο -CURRENT, αυτή η συσκευή έχει
αντικατασταθεί από την νέα συσκευή δίσκου
βασισμένου σε μνήμη md(4).) Αν η συσκευή δεν
είναι ενσωματωμένη στον πυρήνα σας, τότε ο
κατάλληλος οδηγός θα φορτωθεί αυτόματα
όταν εκτελεστεί η εντολή vnconfig(8) κατά τη
διάρκεια της φάσης ετοιμασίας του μέσου
εκκίνησης. Όλα τα εργαλεία που χρειάζονται
για να μεταγλωττίσετε μια έκδοση είναι
διαθέσιμα σε μορφή πηγαίου κώδικα στον
κατάλογο src/release. Αυτά τα εργαλεία έχουν ως
σκοπό να παρέχουν ότι χρειάζεται για να
χτίζονται οι εκδόσεις του FreeBSD με ένα
συνεπή και συγκεκριμένο τρόπο. Μια πλήρης
έκδοση μπορεί να μεταγλωττιστεί
χρησιμοποιώντας αυτά τα εργαλεία με μια
και μόνο εντολή, συμπεριλαμβανομένης και
της δημιουργίας ενός ISO αρχείου κατάλληλο
για να καεί σε CDROM, οι δισκέττες εκκίνησης,
καθώς και ο κατάλληλος εγκατάστασης μέσω
FTP. Αυτή η εντολή είναι φυσική η make release.

3.1. Η εντολή make release

Για να μεταγλωττίσετε επιτυχώς μια έκδοση,
πρέπει πρώτα να υπάρχουν τα κατάλληλα
αρχεία μέσα στον κατάλογο /usr/obj. Μπορείτε να
τα δημιουργήσετε είτε με την εντολή make world ή
απλά make buildworld. Για να πετύχει επίσης η
μεταγλώττιση της έκδοσης πρέπει να δώσετε
τις κατάλληλες τιμές και σε κάποιες
μεταβλητές:

* CHROOTDIR - Ο κατάλογος που θα χρησιμοποιηθεί
  σαν περιβάλλον chroot για όλη την
  μεταγλώττιση της έκδοσης.
* BUILDNAME - Το όνομα της έκδοσης που θα
  μεταγλωττίσετε.
* CVSROOT - Ο κατάλογος στον οποίο βρίσκεται το
  CVS repository.
* RELEASETAG - Η ετικέτα CVS που αντιστοιχεί στην
  έκδοση την οποία θέλετε να
  μεταγλωττίσετε.

Αν δεν έχετε ήδη πρόσβαση σε κάποιο τοπικό
CVS repository με τον κώδικα του FreeBSD, μπορείτε
πάντα να φτιάξετε το δικό σας τοπικό CVS mirror
με το CVSup. Υπάρχει ένα supfile, στο αρχείο /usr/share/
examples/cvsup/cvs-supfile, το οποίο μπορείτε να
χρησιμοποιήσετε για να αντιγράψετε το CVS
repository του FreeBSD στο δικό σας τοπικό mirrror.
Αν παραλείψετε την ετικέτα RELEASETAG, τότε θα
μεταγλωττιστεί μια πλήρης έκδοση από την
κορυφή του HEAD (δηλ. του -CURRENT) κορμού. Οι
εκδόσεις που φτιάχνονται από αυτόν τον
κορμό, συνήθως αναφέρονται σαν «-CURRENT
snapshots».
Υπάρχουν και πολλές άλλες μεταβλητές που
μπορούν να χρησιμοποιηθούν για να
παραμετροποιήσετε την έκδοσή σας. Οι πιο
πολλές από αυτές τις μεταβλητές
περιγράφονται στην κορυφή του αρχείου src/
release/Makefile. Η ακριβής εντολή που
χρησιμοποιήθηκε για να φτιαχτεί η επίσημη
έκδοση 4.7 του FreeBSD (x86 πλατφόρμα) ήταν:

  make release CHROOTDIR=/local3/release \
         BUILDNAME=4.7-RELEASE \
         CVSROOT=/host/cvs/usr/home/ncvs \
         RELEASETAG=RELENG_4_7_0_RELEASE

Το Makefile που χρησιμοποιείται για να
μεταγλωττίζονται οι εκδόσεις μπορεί να
χωριστεί σε αρκετά ξεχωριστά μεταξύ τους
βήματα.

* Δημιουργία ενός καθαρού περιβάλλοντος σε
  μια ξεχωριστή ιεραρχία καταλόγων με την
  εντολή «make installworld».
* Εξαγωγή από το CVS μιας καινούριας έκδοσης
  του πηγαίου κώδικα του συστήματος, της
  τεκμηρίωσης και των ports μέσα στην ιεραρχία
  καταλόγων μεταγλώττισης της έκδοσης.
* Ρυθμίσεις των αρχείων στον κατάλογο /etc
  και /dev μέσα στο περιβάλλον chroot.
* Εκτέλεση της εντολής chroot μέσα στην
  ιεραρχία καταλόγων που ετοιμάστηκε, για
  να μην μπορεί το εξωτερικό περιβάλλον να
  επηρεάσει τη μεταγλώττιση της έκδοσης.
* Εκτέλεση της εντολής make world μέσα στο
  περιβάλλον chroot.
* Μεταγλώττιση των εκτελέσιμων που είναι
  σχετικά με το σύστημα Kerberos.
* Μεταγλώττιση του πυρήνα GENERIC.
* Δημιουργία ενός τελικού καταλόγου στον
  οποίο θα μεταγλωττιστούν και θα
  αποθηκευθούν οι εκτελέσιμες μορφές των
  τελικών πακέτων.
* Μεταγλώττιση και εγκατάσταση των
  εργαλείων που χρειάζονται για την
  προετοιμασία της έκδοσης και τη μετατροπή
  της τεκμηρίωσης από τον πηγαίο κώδικα (SGML)
  σε html και αρχεία κειμένου που θα
  συνοδεύουν την έκδοση.
* Μετατροπή και εγκατάσταση της
  τεκμηρίωσης (εγχειρίδια χρήστη,
  εισαγωγικά κείμενα, σημειώσεις έκδοσης,
  λίστες συμβατότηταςς υλικού, κλπ.)
* Μεταγλώττιση των «συμπιεσμένων» (crunched)
  εκτελέσιμων που θα χρησιμοποιηθούν στις
  δισκέττες εγκατάστασης.
* Δημιουργία των πακέτων της εγκατάστασης
  και των πακέτων πηγαίου κώδικα.
* Δημιουργία των μέσων εκκίνησης και της
  δισκέττας «fixit».
* Δημιουργία της ιεραρχίας καταλόγων για
  την εγκατάσταση μέσω FTP.
* (προαιρετικά) Δημιουργία των ISO αρχείων
  για μέσα CDROM/DVD media.

Για περισσότερες πληροφορίες σχετικά με
την διαδικασία δημιουργίας μιας έκδοσης,
δείτε την σελίδα τεκμηρίωσης release(7).

3.2. Μεταγλώττιση των XFree86

Το γραφικό περιβάλλον XFree86 είναι ένα
σημαντικό κομμάτι κάθε έκδοσης για πολλούς
χρήστες που θέλουν το FreeBSD για σταθμούς
εργασίας.  ριν την έκδοση 4.6-RELEASE του FreeBSD, οι
επίσημες εκδόσεις του FreeBSD χρησιμοποιούσαν
την έκδοση 3.X των XFree86. Ο πιο εύκολος τρόπος
να μεταγλωττίσετε αυτές τις εκδόσεις είναι
να χρησιμοποιήσετε το πρόγραμμα src/release/
scripts/X11/build_x.sh. Αυτό το πρόγραμμα απαιτεί να
είναι ήδη στημένα στο σύστημά σας τόσο το
περιβάλλον XFree86 όσο και η γλώσσα Tcl/Tk. Μετά
την μεταγλώττιση των κατάλληλων X servers, το
πρόγραμμα θα πακετάρει όλα τα αρχεία σε
συλλογές αρχείων που περιμένει να βρει το
sysinstall(8) μέσα στον κατάλογο XF86336 στο μέσο
εγκατάστασης.
Ξεκινώντας με την έκδοση 4.6-RELEASE του FreeBSD, το
sysinstall(8) εγκαθιστά την έκδοση 4.X των XFree86, σαν
κανονικά πακέτα. Αυτά μπορεί να είναι είτε
τα πακέτα που δημιούργησε το cluster των ports ή
οποιαδήποτε άλλα πακέτα που έχουν
δημιουργηθεί από ένα ports tree με την
κατάλληλη ετικέτα.

Σημείωση:

Είναι πολύ σημαντικό να αφαιρέσετε από το
αρχείο /etc/make.conf οποιεσδήποτε τοπικές
ρυθμίσεις έχετε κάνει. Για παράδειγμα, δεν
είναι καλή ιδέα να διανέμετε εκτελέσιμα
που έχουν μεταγλωττιστεί σε κάποιο
συγκεκριμένο σύστημα με ορισμένη την τιμή
της μεταβλητής CPUTYPE για βελτιστοποίηση των
εκτελέσιμων για κάποιο συγκεκριμένο
επεξεργαστή.

3.3.  ρογράμματα Τρίτων («ports»)

Η Συλλογή_των_Ports_του_FreeBSD είναι μια συλλογή
με περισσότερα από 24,000 προγράμματα από
τρίτους, που είναι διαθέσιμα για FreeBSD. Οι
Ομάδα Διαχείρισης των Ports <portmgr@FreeBSD.org> είναι
υπεύθυνοι για την συντήρηση ενός δέντρου
από πηγαίο κώδικα για τα ports, που μπορεί να
χρησιμοποιηθεί για να δημιουργηθούν τα
πακέτα με τα προγράμματα που συνοδεύουν
τις επίσημες εκδόσεις του FreeBSD.
Η διαδικασία συντήρησης της συλλογής των
ports είναι κάτι που δεν μπορούμε να
καλύψουμε εδώ. Ένα ξεχωριστό άρθρο, με
τίτλο Η_Οργάνωση_Έκδοσης_των__ακέτων
Λογισμικού_από_Τρίτους, καλύπτει αυτό το
θέμα.

3.4. Αρχεία ISO της Έκδοσης

Ξεκινώντας με την έκδοση 4.4 του FreeBSD, η Ομάδα
Ανάπτυξης του FreeBSD αποφάσισε να διανέμει
και τα τέσσερα ISO αρχεία που πρώτα
πουλούσαν οι εταιρείες BSDi/Wind River Systems/FreeBSD Mall
στις «επίσημες» διανομές CDROM που έκαναν.
Κάθε ένα από τα τέσσερα ISO αρχεία πρέπει να
περιέχει ένα αρχείο README.TXT που περιγράφει
τα περιεχόμενα του δίσκου, κι ένα αρχείο
CDROM.INF που περιέχει μετα-πληροφορίες για να
μπορεί το πρόγραμμα sysinstall(8) να ελέγξει και
να χρησιμοποιήσει αυτό το δίσκο, καθώς κι
ένα αρχείο filename.txt που παρέχει μια λίστα
αρχείων του CDROM. Αυτή η λίστα μπορεί να
δημιουργηθεί πολύ απλά, ως εξής:

  /stage/cdrom# find . -type f | sed -e 's/^\.\///' | sort > filename.txt

Οι συγκεκριμένες απαιτήσεις για κάθε ένα
από αυτά τα CD περιγράφονται παρακάτω:

3.4.1. Δίσκος 1

Ο πρώτος δίσκος είναι σχεδόν αποκλειστικά
αποτέλεσμα της εντολής make release. Οι μόνες
αλλαγές που πρέπει να γίνουν στον κατάλογο
disc1 είναι η προσθήκη του κατάλογου tools, των
XFree86, και όσο το δυνατόν περισσότερων
πακέτων μπορούν να χωρέσουν στο δίσκο. Ο
κατάλογος tools περιέχει εργαλεία που
επιτρέπουν σε χρήστες άλλων λειτουργικών
συστημάτων να φτιάξουν τις δισκέττες
εκκίνησης. Αυτός ο πρώτος δίσκος πρέπει να
φτιάχνεται bootable έτσι ώστε να μπορούν οι
χρήστες των μοντέρνων υπολογιστών να
αποφεύγουν το στάδιο δημιουργίας των
δισκεττών εκκίνησης.
Αν μια διαφορετική έκδοση των XFree86 θα
διανέμεται με την έκδοση αυτή, πρέπει να
ενημερωθεί το πρόγραμμα sysinstall(8) για την νέα
θέση και οι οδηγίες εγκατάστασης. Ο
σχετικός κώδικας υπάρχει στον κατάλογο src/
release/sysinstall στον -STABLE κορμό ή στον κατάλογο
src/usr.sbin/sysinstall στον -CURRENT κορμό. Συγκεκριμένα,
τα αρχεία dist.c, menus.c, και config.c θα χρειαστεί να
ενημερωθούν.

3.4.2. Δίσκος 2

Ο δεύτερος δίσκος είναι επίσης αποτέλεσμα
της εντολής make release κατά ένα μεγάλο μέρος.
Αυτός ο δίσκος περιέχει ένα «live filesystem» που
μπορεί να χρησιμοποιηθεί από το sysinstall(8) για
να εξεταστούν προβλήματα σε μια
εγκατάσταση του FreeBSD. Κι αυτός ο δίσκος
πρέπει να είναι bootable. Θα πρέπει επίσης να
περιέχει ένα συμπιεσμένο αντίγραφο του CVS
repository στον κατάλογο CVSROOT και δείγματα από
εμπορικά προγράμματα στον κατάλογο commerce.

3.4.3. Δίσκοι 3 και 4

Οι υπόλοιποι δυο δίσκοι περιέχουν
επιπρόσθετα πακέτα λογισμικού για το FreeBSD.
Τα πακέτα θα πρέπει να είναι ομαδοποιημένα,
έτσι ώστε κάθε πακέτο να είναι στον ίδιο
δίσκο με όλα τα πακέτα από τα οποία
εξαρτάται για να εγκατασταθεί και να
τρέξει.  ερισσότερες πληροφορίες για την
δημιουργία αυτών των δίσκων αναφέρονται
στο άρθρο Η_Οργάνωση_Έκδοσης_των__ακέτων
Λογισμικού_από_Τρίτους.

4. Διανομή των Εκδόσεων


4.1. Εξυπηρετητές FTP

Όταν η έκδοση είναι έτοιμη, έχει δοκιμαστεί
εκτενώς, και έχει πακεταριστεί για διανομή,
ο κύριος FTP εξυπηρετητής πρέπει να
ενημερωθεί. Οι επίσημοι εξυπηρετητές FTP του
FreeBSD είναι όλοι mirrors ενός κύριου
εξυπηρετητή στον οποίο έχουν πρόσβαση μόνο
άλλοι FTP εξυπηρετητές. Αυτός ο εξυπηρετητής
είναι γνωστός ως ftp-master. Όταν η έκδοση είναι
έτοιμη, πρέπει να ενημερωθούν τα παρακάτω
αρχεία στον ftp-master:


  /pub/FreeBSD/index.html
      Μια απλή web σελίδα που περιέχει δείκτες
      σε διάφορους σημαντικούς FTP καταλόγους
      για την τρέχουσα έκδοση του FreeBSD.

  /pub/FreeBSD/releases/arch/X.Y-RELEASE/
      Ο κατάλογος από τον οποίο μπορούν να
      γίνουν εγκαταστάσεις μέσω FTP, όπως τον
      έχει προετοιμάσει η εντολή make release.

  /pub/FreeBSD/ports/arch/packages/packages-X.Y-release/
      Όλα τα προμεταγλωττισμένα πακέτα για
      την τρέχουσα έκδοση.

  /pub/FreeBSD/releases/arch/X.Y-RELEASE/tools
      Μια συμβολική συντόμευση για τον
      κατάλογο ../../../tools.

  /pub/FreeBSD/releases/arch/X.Y-RELEASE/packages
      Μια συμβολική συντόμευση για τον
      κατάλογο ../../../ports/i386/packages-X.Y-release.

  /pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-*.iso
      Τα αρχεία ISO.

Για περισσότερες πληροφορίες σχετικά με
την οργάνωση των mirror διανομής FTP του FreeBSD,
παρακαλώ δείτε το άρθρο Φτιάχνοντας_ένα
FreeBSD_mirror.
Μπορεί να πάρει αρκετές ώρες από την στιγμή
που θα ενημερωθεί ο ftp-master μέχρι να
ενημερωθούν στην πλειοψηφία τους τα πρώτου
επιπέδου FTP mirror με την νέα έκδοση.
Επιβάλλεται οι υπεύθυνοι έκδοσης να
συνεννοηθούν με την ηλεκτρονική_λίστα_των
mirror_sites_του_FreeBSD πριν ανακοινώσουν την
γενική διαθεσιμότητα της νέας έκδοσης
στους εξυπηρετητές FTP.

4.2. Μαζική Αναπαραγωγή των CD-ROM

Θα συμπληρωθεί σύντομα: Συμβουλές για την
αποστολή των ISO αρχείων του FreeBSD σε κάποιον
που μπορεί να κάνει μαζική αναπαραγωγή, και
μέτρα ελέγχου ποιότητας που μπορούν να
παρθούν.

5. Επεκτασιμότητα

 αρόλο που το FreeBSD είναι ένα πλήρες
λειτουργικό σύστημα, δεν υπάρχει κάτι που
να σας αναγκάζει να χρησιμοποιήσετε το
σύστημα ακριβώς όπως το έχουμε πακετάρει
εμείς για διανομή. Έχουμε προσπαθήσει να
σχεδιάσουμε το σύστημα έτσι που να είναι
όσο το δυνατόν πιο επεκτάσιμο, για να είναι
εύκολο να χρησιμοποιηθεί σαν βάση πάνω
στην οποία άλλα εμπορικά προϊόντα να
μπορούν να στηριχθούν. Ο μόνος «κανόνας»
που έχουμε σχετικά με αυτό είναι πως αν
σχεδιάζετε να διανείμετε το FreeBSD με μεγάλης
κλίμακας αλλαγές, σας ενθαρρύνουμε να
τεκμηριώσετε τις αλλαγές σας. Η κοινότητα
του FreeBSD μπορεί μόνο να βοηθήσει στην
υποστήριξη αυτών που χρησιμοποιούν το
λογισμικό ακριβώς όπως το διανέμουμε
εμείς. Ενθαρρύνουμε και δεχόμαστε κάθε
αλλαγή που προωθεί την ανάπτυξη πιο
εξελιγμένων εργαλείων εγκατάστασης και
διαχείρισης, για παράδειγμα, αλλά δεν θα
πρέπει να περιμένει κανείς να μπορούμε να
απαντήσουμε και ερωτήσεις σχετικά με κάτι
τέτοιο.

5.1. Δημιουργία  ροσαρμοσμένων Δισκεττών
Εκκίνησης.

 ολλές εγκαταστάσεις έχουν πολύπλοκες
απαιτήσεις που μπορεί με τη σειρά τους να
απαιτούν την προσθήκη περισσότερων οδηγών
ή εργαλείων χρήστη στις δισκέττες
εγκατάστασης. Ο «μπακάλικος» τρόπος να το
κάνετε αυτό είναι να κάνετε τις αλλαγές σας
στον κατάλογο που έχει ετοιμάσει μετά το
τέλος της η διαδικασία make release:

*  εράστε τα patches σας ή προσθέστε τα
  επιπλέον αρχεία μέσα στον κατάλογο chroot
  της έκδοσης.
* rm ${CHROOTDIR}/usr/obj/usr/src/release/release.[59]
* Μεταγλωττίστε πάλι το sysinstall(8), τον πυρήνα,
  ή όποια άλλα προγράμματα έχουν επηρεαστεί
  από τις αλλαγές σας.
* chroot ${CHROOTDIR} ./mk floppies

Οι νέες δισκέττες εγκατάστασης θα
δημιουργηθούν στον κατάλογο ${CHROOTDIR}/R/stage/
floppies.
Εναλλακτικά, μπορείτε να χρησιμοποιήσετε
το make target boot.flp, ή μπορείτε να τρέξετε
απευθείας το script που δημιουργεί τα
συστήματα αρχείων src/release/scripts/doFS.sh.
Μπορείτε επίσης να κανονίσετε ώστε δικές
σας αλλαγές να περαστούν με μορφή patch στην
έκδοση όπως θα φτιάχνεται, δίνοντας τιμή
στην μεταβλητή LOCAL_PATCH όταν τρέξετε την
εντολή make release.

5.2.  ρογραμματίζοντας το sysinstall

Το εργαλείο εγκατάστασης και ρύθμισης του
FreeBSD, το sysinstall(8), μπορεί να προγραμματιστεί
για να κάνει πιο εύκολες τις
αυτοματοποιημένες εγκαταστάσεις σε πολλά
μηχανήματα. Αυτό το χαρακτηριστικό του
προγράμματος μπορεί να χρησιμοποιηθεί σε
συνδυασμό με το PXE[13] της Intel για να
ξεκινήσει η εγκατάσταση από το δίκτυο, ή σε
συνδυασμό με προσαρμοσμένες δισκέττες
εκκίνησης κι ένα sysinstall script. Ένα παράδειγμα
από τέτοιο sysinstall script μπορείτε να βρείτε στο
αρχείο src/release/sysinstall/install.cfg.

6. Μαθήματα που  ήραμε από την Έκδοση 4.4 του
FreeBSD

Η διαδικασία ετοιμασίας της έκδοσης 4.4 του
FreeBSD ξεκίνησε επίσημα την 1η Αυγούστου 2001.
Μετά από αυτή την ημερομηνία, όλες οι
αλλαγές στον κορμό RELENG_4 του FreeBSD έπρεπε να
έχουν έγκριση από την re@FreeBSD.org. Η πρώτη
δοκιμαστική έκδοση για την αρχιτεκτονική
x86 έγινε διαθέσιμη στις 16 Αυγούστου, κι
ακολουθήθηκε από 4 ακόμα δοκιμαστικές
εκδόσεις που οδήγησαν στην τελική έκδοση
στις 18 του Σεπτέμβρη. Ο υπεύθυνος ασφάλειας
έπαιξε σημαντικό ρόλο κατά την διάρκεια
της τελευταίας εβδομάδας καθώς κάποια
προβλήματα ασφάλειας βρέθηκαν σε
προηγούμενες, δοκιμαστικές εκδόσεις.
Συνολικά, πάνω από 500 email στάλθηκαν στην
re@FreeBSD.org σε διάστημα μικρότερο από ένα μήνα.
Η κοινότητα των χρηστών μας έκανε σαφές ότι
η ασφάλεια και η σταθερότητα μιας έκδοσης
δεν θά 'πρεπε να θυσιάζεται για κανενός
είδους προθεσμίες ή ημερομηνίες που έχουν
τεθεί σαν στόχοι από πριν. Το FreeBSD έχει
μεγαλώσει δραματικά κατά τη διάρκεια της
ζωής του σαν σύστημα, και η ανάγκη για
συγκεκριμένη πολιτική και οργάνωση για την
δημιουργία νέων εκδόσεων είναι πλέον
φανερή περισσότερο από ποτέ. Αυτή η ανάγκη
θα γίνει ακόμα πιο σημαντική καθώς το FreeBSD
θα αρχίσει να μεταφέρεται σε νέες
πλατφόρμες.

7. Μελλοντικές Κατευθύνσεις

Είναι ζωτικής σημασίας οι πρακτικές και η
οργάνωση της διαδικασίας δημιουργίας των
εκδόσεών μας να συμβαδίζουν με την συνεχώς
αυξανόμενη βάση των χρηστών μας. Με βάση
αυτή τη σκέψη εργαζόμαστε σκληρά για να
τεκμηριώσουμε την διαδικασία παραγωγής
των εκδόσεων του FreeBSD.

*  αράλληλη εκτέλεση - Μερικά μέρη της
  μεταγλώττισης μιας εγκατάστασης μπορούν
  να γίνουν «πολύ παράλληλα». Τα πιο πολλά
  από τα στάδια είναι I/O intensive, οπότε η
  ύπαρξη πολλών υψηλής-ταχύτητας δίσκων
  είναι πιο σημαντική από τηνν χρήση πολλών
  επεξεργαστών για να επιταχυνθεί κάπως η
  διαδικασία του make release. Αν διαφορετικοί
  δίσκοι χρησιμοποιηθούν για τμήματα της
  ιεραρχίας του chroot(2) περιβάλλοντος, τότε το
  CVS checkout των καταλόγων ports και doc μπορεί να
  γίνει ταυτόχρονα με την εντολή make world στον
  άλλο δίσκο. Χρησιμοποιώντας μια RAID λύση
  (hardware ή software) μπορεί να μειώσει δραστικά
  τον συνολικό χρόνο που χρειάζεται να
  μεταγλωττιστεί μια πλήρης έκδοση.
* Μεταγλώττιση εκδόσεων για διαφορετικές
  αρχιτεκτονικές - Θέλετε να μεταγλωττίσετε
  μια έκδοση για IA-64 ή Alpha σε κάποιον x86
  επεξεργαστή? make TARGET=ia64 release.
* Δοκιμές για λάθη - Χρειαζόμαστε καλύτερα
  εργαλεία για αυτόματο έλεγχο ορθότητας
  στο FreeBSD.
* Εργαλεία Εγκατάστασης - Το πρόγραμμά μας
  για την εγκατάσταση του FreeBSD έχει
  ξεπεράσει προ πολλού τον αναμενόμενο
  χρόνο ζωής του. Υπάρχουν διάφορες ομάδες
  που εργάζονται για να υλοποιήσουν κάποιον
  άλλο, πιο μοντέρνο μηχανισμό
  εγκατάστασης. Μια από τις πιο υποσχόμενες,
  είναι η ομάδα libh[5] που στοχεύει στην
  υλοποίηση ενός έξυπνου, νέου τρόπου
  πακεταρίσματος λογισμικού και ενός GUI
  προγράμματος εγκατάστασης.


8. Ευχαριστίες

Θα ήθελα να ευχαριστήσω τον Jordan Hubbard, που
μου έδωσε την ευκαιρία να πάρω κάποια από
την ευθύνη της έκδοσης 4.4 του FreeBSD, καθώς και
για όλη την δουλειά που έχει κάνει εδώ και
χρόνια για να είναι το FreeBSD αυτό που είναι
σήμερα. Φυσικά, η έκδοση δεν θα ήταν ποτέ
δυνατόν να ολοκληρωθεί χωρίς όλη την
σχετική με την έκδοση δουλειά που έκαναν οι
Satoshi Asami, Steve Price, Bruce A. Mah, Nik Clayton, David O'Brien, Kris
Kennaway, John Baldwin και όλοι οι υπόλοιποι που
ασχολούνται με την ανάπτυξη του FreeBSD. Θέλω
επίσης να ευχαριστήσω τους Rodney Grimes, Poul-Henning
Kamp, και όλους τους άλλους που εργάστηκαν
για να φτιάξουν τα εργαλεία για τις
εκδόσεις στις πρώτες μέρες της δημιουργίας
του FreeBSD. Αυτό το άρθρο έχει επηρεαστεί από
κείμενα σχετικά με την οργάνωση των
εκδόσεων από το CSRG[14], την Ομάδα του NetBSD[11],
και την πρόταση για μια διαδικασία
οργάνωσης των εκδόσεων του John Baldwin[12].

9. Αναφορές

[1] CVS - Concurrent Versions System http://www.cvshome.org
[2] CVSup - The CVS-Optimized General Purpose Network File Distribution System
http://www.polstra.com/projects/freeware/CVSup
[3] http://bento.FreeBSD.org
[4] FreeBSD Ports Collection http://www.FreeBSD.org/ports
[5] The libh Project http://www.FreeBSD.org/projects/libh.html
[6] FreeBSD Committers http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/
contributors/staff-committers.html
[7] FreeBSD Core-Team http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/
contributors/staff-core.html
[8] FreeBSD Handbook http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook
[9] GNATS: The GNU Bug Tracking System http://www.gnu.org/software/gnats
[10] FreeBSD PR Statistics http://www.FreeBSD.org/prstats/index.html
[11] NetBSD Developer Documentation: Release Engineering http://www.NetBSD.org/
developers/releng/index.html
[12] John Baldwin's FreeBSD Release Engineering Proposal http://
people.FreeBSD.org/~jhb/docs/releng.txt
[13] PXE Jumpstart Guide http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/
pxe/index.html
[14] Marshall Kirk McKusick, Michael J. Karels, and Keith Bostic: The_Release
Engineering_of_4.3BSD
