---
title: Η Οργάνωση των Εκδόσεων του FreeBSD
authors:
  - author: Murray Stokely
    email: murray@FreeBSD.org
    webpage: https://people.FreeBSD.org/~murray/
releaseinfo: "$FreeBSD$" 
trademarks: ["freebsd", "intel", "general"]
---

= Η Οργάνωση των Εκδόσεων του FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:xrefstyle: full
:toc-title: Πίνακας Περιεχομένων
:table-caption: Πίνακας
:figure-caption: Σχήμα
:example-caption: Παράδειγμα

include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/el/teams.adoc[lines=21..-1]
include::shared/el/mailing-lists.adoc[lines=10..-1]
include::shared/el/urls.adoc[]

[.abstract-title]
Περίληψη

Αυτό το άρθρο περιγράφει την αντιμετώπιση και οργάνωση της ομάδας ανάπτυξης του FreeBSD, όσον αφορά στην προετοιμασία ποιοτικών εκδόσεων του Λειτουργικού Συστήματος FreeBSD. Εξηγεί με λεπτομέρεια την μεθοδολογία που χρησιμοποιείται για τις επίσημες εκδόσεις του FreeBSD και περιγράφει τα εργαλεία που είναι διαθέσιμα σε όσους ενδιαφέρονται να παράγουν παραμετροποιημένες εκδόσεις του FreeBSD για εσωτερική ή εμπορική χρήση και ανάπτυξη προϊόντων.

'''

toc::[]

[[introduction]]
== Εισαγωγή

Η ανάπτυξη του 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, με την εφαρμογή man:send-pr[1], ή μέσω του web-interface που παρέχεται στην διεύθυνση http://www.FreeBSD.org/send-pr/[http://www.FreeBSD.org/send-pr/]. Εκτός από τις διάφορες λίστες ηλεκτρονικού ταχυδρομείου με θέμα τα τεχνικά χαρακτηριστικά του FreeBSD υπάρχει και η λίστα {freebsd-qa}, η οποία παρέχει ένα φόρουμ για συζητήσεις σχετικά με τις λεπτομέρειες της "οργάνωσης των εκδόσεων".

Για να εξυπηρετηθούν οι πιο συντηρητικοί χρήστες μας, με έκδοση του FreeBSD 4.3 αρχίσαμε να χρησιμοποιούμε ξεχωριστούς κορμούς εκδόσεων. Αυτοί οι κορμοί δημιουργούνται λίγο πρίν φτιαχτεί η τελική έκδοση. Μετά την ανακοίνωση της έκδοσης, μόνο πολύ σημαντικές αλλαγές και προσθήκες σχετικές με την ασφάλεια γίνονται στον κορμό της έκδοσης. Εκτός από την δυνατότητα αναβάθμισης μέσω CVS, εκτελέσιμα patchkits φτιάχνονται για να μπορούν να αναβαθμίσουν τα συστήματά τους όσοι χρησιμοποιούν τις εκδόσεις __RELENG``_X_Y``__.

Το <<release-proc>> εξηγεί με λεπτομέρειες τα διάφορα στάδια της διαδικασίας που βρίσκεται πίσω από κάθε έκδοση, μέχρι και τα βήματα που οδηγούν στην μεταγλώττιση του συστήματος και το <<release-build>> εξηγεί την ίδια τη διαδικασία της μεταγλώττισης. Το <<extensibility>> περιγράφει πως μπορεί να επεκταθεί το βασικό σύστημα από τρίτους και το <<lessons-learned>> περιγράφει κάποια από τα πράγματα που μάθαμε από την διαδικασία έκδοσης του FreeBSD 4.4. Τέλος, το <<future>> παρουσιάζει κάποιες από τις κατευθύνσεις που θέλουμε να πάρει η ανάπτυξη στο μέλλον.

[[release-proc]]
== Η Διαδικασία Δημιουργίας μιας Έκδοσης

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

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

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

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

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

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

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

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

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

[source,shell]
....
/usr/src# cvs update -rRELENG_4 -P -d
....

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

[source,shell]
....
/usr/src# cvs rtag -rRELENG_4 RELENG_4_8_BP src
....

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

[source,shell]
....
/usr/src# cvs rtag -b -rRELENG_4_8_BP RELENG_4_8 src
....

[NOTE]
====
__Οι ετικέτες ``RELENG_*`` είναι δεσμευμένες για χρήση από τους CVS-meisters και την ομάδα των εκδόσεων.__
====

Ο όρος "_ετικέτα_ " είναι ορολογία του CVS. Σημαίνει ένα όνομα που καθορίζει μια συγκεκριμένη έκδοση του κώδικα στο χρόνο. Χρησιμοποιώντας ετικέτες στον πηγαίο κώδικα βοηθάμε όποιον φτιάξει στο μέλλον εκδόσεις του FreeBSD να βρίσκει και να χρησιμοποιεί ακριβώς τον ίδιο κώδικα που χρησιμοποιήθηκε για τις επίσημες εκδόσεις της Ομάδας του FreeBSD.

[[versionbump]]
==== Αυξάνοντας τον Αριθμό Έκδοσης

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

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

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

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

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

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

* [.filename]#www/en/includes.xsl#
* [.filename]#www/en/includes.xml#
* [.filename]#www/es/includes.xml#
* [.filename]#www/en/releases/*#
* [.filename]#src/shared/misc/bsd-family-tree#

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

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

[source,shell]
....
/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 πρέπει να είναι πάντα εύκολο να αναπαραχθούν. Τοπικές αλλαγές στο περιβάλλον του μηχανικού των εκδόσεων δεν επιτρέπονται.

[[release-build]]
== Μεταγλώττιση της Έκδοσης

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

=== Η εντολή `make release`

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

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

Αν δεν έχετε ήδη πρόσβαση σε κάποιο τοπικό CVS repository με τον κώδικα του FreeBSD, μπορείτε πάντα να φτιάξετε το δικό σας τοπικό CVS mirror με το link:{handbook}#synching[CVSup]. Υπάρχει ένα supfile, στο αρχείο [.filename]#/usr/shared/examples/cvsup/cvs-supfile#, το οποίο μπορείτε να χρησιμοποιήσετε για να αντιγράψετε το CVS repository του FreeBSD στο δικό σας τοπικό mirrror.

Αν παραλείψετε την ετικέτα `RELEASETAG`, τότε θα μεταγλωττιστεί μια πλήρης έκδοση από την κορυφή του `HEAD` (δηλ. του -CURRENT) κορμού. Οι εκδόσεις που φτιάχνονται από αυτόν τον κορμό, συνήθως αναφέρονται σαν "-CURRENT snapshots".

Υπάρχουν και πολλές άλλες μεταβλητές που μπορούν να χρησιμοποιηθούν για να παραμετροποιήσετε την έκδοσή σας. Οι πιο πολλές από αυτές τις μεταβλητές περιγράφονται στην κορυφή του αρχείου [.filename]#src/release/Makefile#. Η ακριβής εντολή που χρησιμοποιήθηκε για να φτιαχτεί η επίσημη έκδοση 4.7 του FreeBSD (x86 πλατφόρμα) ήταν:

[source,shell]
....
make release CHROOTDIR=/local3/release \
       BUILDNAME=4.7-RELEASE \
       CVSROOT=/host/cvs/usr/home/ncvs \
       RELEASETAG=RELENG_4_7_0_RELEASE 
....

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

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

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

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

Το γραφικό περιβάλλον XFree86 είναι ένα σημαντικό κομμάτι κάθε έκδοσης για πολλούς χρήστες που θέλουν το FreeBSD για σταθμούς εργασίας. Πριν την έκδοση 4.6-RELEASE του FreeBSD, οι επίσημες εκδόσεις του FreeBSD χρησιμοποιούσαν την έκδοση 3._X_ των XFree86. Ο πιο εύκολος τρόπος να μεταγλωττίσετε αυτές τις εκδόσεις είναι να χρησιμοποιήσετε το πρόγραμμα [.filename]#src/release/scripts/X11/build_x.sh#. Αυτό το πρόγραμμα απαιτεί να είναι ήδη στημένα στο σύστημά σας τόσο το περιβάλλον XFree86 όσο και η γλώσσα Tcl/Tk. Μετά την μεταγλώττιση των κατάλληλων X servers, το πρόγραμμα θα πακετάρει όλα τα αρχεία σε συλλογές αρχείων που περιμένει να βρει το man:sysinstall[8] μέσα στον κατάλογο [.filename]#XF86336# στο μέσο εγκατάστασης.

Ξεκινώντας με την έκδοση 4.6-RELEASE του FreeBSD, το man:sysinstall[8] εγκαθιστά την έκδοση 4._X_ των XFree86, σαν κανονικά πακέτα. Αυτά μπορεί να είναι είτε τα πακέτα που δημιούργησε το cluster των ports ή οποιαδήποτε άλλα πακέτα που έχουν δημιουργηθεί από ένα ports tree με την κατάλληλη ετικέτα.

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

=== Προγράμματα Τρίτων ("ports")

Η http://www.FreeBSD.org/ports[Συλλογή των Ports του FreeBSD] είναι μια συλλογή με περισσότερα από {numports} προγράμματα από τρίτους, που είναι διαθέσιμα για FreeBSD. Οι `{portmgr}` είναι υπεύθυνοι για την συντήρηση ενός δέντρου από πηγαίο κώδικα για τα ports, που μπορεί να χρησιμοποιηθεί για να δημιουργηθούν τα πακέτα με τα προγράμματα που συνοδεύουν τις επίσημες εκδόσεις του FreeBSD.

Η διαδικασία συντήρησης της συλλογής των ports είναι κάτι που δεν μπορούμε να καλύψουμε εδώ. Ένα ξεχωριστό άρθρο, με τίτλο link:{releng-packages}[Η Οργάνωση Έκδοσης των Πακέτων Λογισμικού από Τρίτους], καλύπτει αυτό το θέμα.

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

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

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

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

==== Δίσκος 1

Ο πρώτος δίσκος είναι σχεδόν αποκλειστικά αποτέλεσμα της εντολής `make release`. Οι μόνες αλλαγές που πρέπει να γίνουν στον κατάλογο [.filename]#disc1# είναι η προσθήκη του κατάλογου [.filename]#tools#, των XFree86, και όσο το δυνατόν περισσότερων πακέτων μπορούν να χωρέσουν στο δίσκο. Ο κατάλογος [.filename]#tools# περιέχει εργαλεία που επιτρέπουν σε χρήστες άλλων λειτουργικών συστημάτων να φτιάξουν τις δισκέττες εκκίνησης. Αυτός ο πρώτος δίσκος πρέπει να φτιάχνεται bootable έτσι ώστε να μπορούν οι χρήστες των μοντέρνων υπολογιστών να αποφεύγουν το στάδιο δημιουργίας των δισκεττών εκκίνησης.

Αν μια διαφορετική έκδοση των XFree86 θα διανέμεται με την έκδοση αυτή, πρέπει να ενημερωθεί το πρόγραμμα man:sysinstall[8] για την νέα θέση και οι οδηγίες εγκατάστασης. Ο σχετικός κώδικας υπάρχει στον κατάλογο [.filename]#src/release/sysinstall# στον -STABLE κορμό ή στον κατάλογο [.filename]#src/usr.sbin/sysinstall# στον -CURRENT κορμό. Συγκεκριμένα, τα αρχεία [.filename]#dist.c#, [.filename]#menus.c#, και [.filename]#config.c# θα χρειαστεί να ενημερωθούν.

==== Δίσκος 2

Ο δεύτερος δίσκος είναι επίσης αποτέλεσμα της εντολής `make release` κατά ένα μεγάλο μέρος. Αυτός ο δίσκος περιέχει ένα "live filesystem" που μπορεί να χρησιμοποιηθεί από το man:sysinstall[8] για να εξεταστούν προβλήματα σε μια εγκατάσταση του FreeBSD. Κι αυτός ο δίσκος πρέπει να είναι bootable. Θα πρέπει επίσης να περιέχει ένα συμπιεσμένο αντίγραφο του CVS repository στον κατάλογο [.filename]#CVSROOT# και δείγματα από εμπορικά προγράμματα στον κατάλογο [.filename]#commerce#.

==== Δίσκοι 3 και 4

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

[[distribution]]
== Διανομή των Εκδόσεων

[[dist-ftp]]
=== Εξυπηρετητές FTP

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

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

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

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

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

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

[.filename]#/pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-*.iso#::
Τα αρχεία ISO.

Για περισσότερες πληροφορίες σχετικά με την οργάνωση των mirror διανομής FTP του FreeBSD, παρακαλώ δείτε το άρθρο link:{hubs}[Φτιάχνοντας ένα FreeBSD mirror].

Μπορεί να πάρει αρκετές ώρες από την στιγμή που θα ενημερωθεί ο `ftp-master` μέχρι να ενημερωθούν στην πλειοψηφία τους τα πρώτου επιπέδου FTP mirror με την νέα έκδοση. Επιβάλλεται οι υπεύθυνοι έκδοσης να συνεννοηθούν με την {freebsd-hubs} πριν ανακοινώσουν την γενική διαθεσιμότητα της νέας έκδοσης στους εξυπηρετητές FTP.

[[dist-cdrom]]
=== Μαζική Αναπαραγωγή των CD-ROM

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

[[extensibility]]
== Επεκτασιμότητα

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

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

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

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

Οι νέες δισκέττες εγκατάστασης θα δημιουργηθούν στον κατάλογο [.filename]#${CHROOTDIR}/R/stage/floppies#.

Εναλλακτικά, μπορείτε να χρησιμοποιήσετε το make target [.filename]#boot.flp#, ή μπορείτε να τρέξετε απευθείας το script που δημιουργεί τα συστήματα αρχείων [.filename]#src/release/scripts/doFS.sh#.

Μπορείτε επίσης να κανονίσετε ώστε δικές σας αλλαγές να περαστούν με μορφή patch στην έκδοση όπως θα φτιάχνεται, δίνοντας τιμή στην μεταβλητή `LOCAL_PATCH` όταν τρέξετε την εντολή `make release`.

=== Προγραμματίζοντας το `sysinstall`

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

[[lessons-learned]]
== Μαθήματα που Πήραμε από την Έκδοση 4.4 του FreeBSD

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

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

[[future]]
== Μελλοντικές Κατευθύνσεις

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

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

[[ackno]]
== Ευχαριστίες

Θα ήθελα να ευχαριστήσω τον Jordan Hubbard, που μου έδωσε την ευκαιρία να πάρω κάποια από την ευθύνη της έκδοσης 4.4 του FreeBSD, καθώς και για όλη την δουλειά που έχει κάνει εδώ και χρόνια για να είναι το FreeBSD αυτό που είναι σήμερα. Φυσικά, η έκδοση δεν θα ήταν ποτέ δυνατόν να ολοκληρωθεί χωρίς όλη την σχετική με την έκδοση δουλειά που έκαναν οι {asami-name}, {steve-name}, {bmah-name}, {nik-name}, {obrien-name}, {kris-name}, {jhb-name} και όλοι οι υπόλοιποι που ασχολούνται με την ανάπτυξη του FreeBSD. Θέλω επίσης να ευχαριστήσω τους {rgrimes-name}, {phk-name}, και όλους τους άλλους που εργάστηκαν για να φτιάξουν τα εργαλεία για τις εκδόσεις στις πρώτες μέρες της δημιουργίας του FreeBSD. Αυτό το άρθρο έχει επηρεαστεί από κείμενα σχετικά με την οργάνωση των εκδόσεων από το CSRG[14], την Ομάδα του NetBSD[11], και την πρόταση για μια διαδικασία οργάνωσης των εκδόσεων του John Baldwin[12].

[[biblio]]
== Αναφορές

(1) CVS - Concurrent Versions System link:http://www.cvshome.org[http://www.cvshome.org]

(2) CVSup - The CVS-Optimized General Purpose Network File Distribution System http://www.polstra.com/projects/freeware/CVSup[http://www.polstra.com/projects/freeware/CVSup]

(3) http://bento.FreeBSD.org[http://bento.FreeBSD.org]

(4) FreeBSD Ports Collection http://www.FreeBSD.org/ports[http://www.FreeBSD.org/ports]

(5) The libh Project http://www.FreeBSD.org/projects/libh/[http://www.FreeBSD.org/projects/libh/]

(6) link:{contributors}#staff-committers[FreeBSD Committers]

(7) link:{contributors}#staff-core[FreeBSD Core-Team]

(8) link:{handbook}[FreeBSD Handbook]

(9) GNATS: The GNU Bug Tracking System http://www.gnu.org/software/gnats[http://www.gnu.org/software/gnats]

(10) FreeBSD PR Statistics http://www.FreeBSD.org/prstats/[http://www.FreeBSD.org/prstats/]

(11) NetBSD Developer Documentation: Release Engineering http://www.NetBSD.org/developers/releng/index.html[http://www.NetBSD.org/developers/releng/index.html]

(12) John Baldwin's FreeBSD Release Engineering Proposal http://people.FreeBSD.org/\~jhb/docs/releng.txt[http://people.FreeBSD.org/~jhb/docs/releng.txt]

(13) PXE Jumpstart Guide link:{pxe}[PXE Guide]

(14) Marshall Kirk McKusick, Michael J. Karels, and Keith Bostic: http://docs.FreeBSD.org/44doc/papers/releng.html[The Release Engineering of 4.3BSD]
