diff --git a/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml b/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml index 76c8c08158..bff155c4f8 100644 --- a/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/firewalls/chapter.sgml @@ -1,3578 +1,3561 @@ Joseph J. Barbish Συνεισφορά του Brad Davis Μετατράπηκε σε SGML και ανανεώθηκε από τον Firewalls firewall ασφάλεια firewalls Σύνοψη Το firewall (τείχος προστασίας) καθιστά δυνατό το φιλτράρισμα της εισερχόμενης και εξερχόμενης κίνησης που διέρχεται από το σύστημα σας. Ένα firewall μπορεί να χρησιμοποιεί ένα ή περισσότερα σετ κανόνων για να επιθεωρεί τα πακέτα κατά την είσοδο ή έξοδο τους από μια δικτυακή σύνδεση, και να τα επιτρέπει ή να τα απορρίπτει. Οι κανόνες του firewall μπορούν να ελέγχουν ένα ή περισσότερα χαρακτηριστικά των πακέτων, συμπεριλαμβανομένων μεταξύ άλλων και του τύπου του πρωτοκόλλου, καθώς και την διεύθυνση ή/και θύρα (port) της αφετηρίας ή του προορισμού. Τα firewalls μπορούν να ενισχύσουν σημαντικά την ασφάλεια ενός κόμβου ή ενός δικτύου. Μπορούν να χρησιμοποιηθούν για μία ή περισσότερες από τις ακόλουθες λειτουργίες: Να προστατεύουν και να απομονώνουν τις εφαρμογές, τις υπηρεσίες και τα μηχανήματα του εσωτερικού σας δικτύου από ανεπιθύμητη κίνηση που προέρχεται από το Internet. Να περιορίζουν ή να αποκλείουν την πρόσβαση μηχανημάτων του εσωτερικού δικτύου σε υπηρεσίες του Internet. Να υποστηρίζουν μετάφραση δικτυακών διευθύνσεων (NAT), η οποία επιτρέπει στο εσωτερικό σας δίκτυο να χρησιμοποιεί ιδιωτικές IP διευθύνσεις και να μοιράζεται μία μοναδική σύνδεση με το Internet (είτε μέσω μίας μοναδικής δημόσιας IP διεύθυνσης, είτε μέσω ενός πλήθους δημοσίων διευθύνσεων που ανατίθενται αυτόματα). Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Πως να δημιουργήσετε σωστούς κανόνες φιλτραρίσματος πακέτων. Τους διάφορους τύπους firewall που υπάρχουν στο &os; και τις διαφορές τους. Πως να ρυθμίσετε και να χρησιμοποιήσετε το PF firewall του OpenBSD. Πως να ρυθμίσετε και να χρησιμοποιήσετε το IPFILTER. Πως να ρυθμίσετε και να χρησιμοποιήσετε το IPFW. Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει: Να κατανοείτε βασικές αρχές του &os; και του Internet. Βασικές Έννοιες των Firewalls firewall rulesets Υπάρχουν δύο βασικοί τρόποι για τη δημιουργία κανόνων σε ένα firewall: ο inclusive και ο exclusive. Ένα exclusive firewall επιτρέπει τη διέλευση όλης της κίνησης, εκτός από αυτή που ταιριάζει με τους κανόνες του. Ένα inclusive firewall κάνει το ανάποδο. Επιτρέπει μόνο τη διέλευση της κίνησης που ταιριάζει με τους κανόνες του, και αποκλείει οτιδήποτε άλλο. Τα inclusive firewalls προσφέρουν πολύ καλύτερο έλεγχο της εξερχόμενης κίνησης και για το λόγο αυτό είναι καλύτερα για συστήματα που προσφέρουν υπηρεσίες στο δημόσιο Internet. Ελέγχουν επίσης και τα πακέτα που προέρχονται από το δημόσιο Internet με προορισμό το ιδιωτικό σας δίκτυο. Από προεπιλογή, όλη η κίνηση που δεν ταιριάζει με τους κανόνες απορρίπτεται και καταγράφεται. Τα inclusive firewalls είναι γενικά ασφαλέστερα από τα exclusive, καθώς μειώνουν σημαντικά την πιθανότητα διέλευσης ανεπιθύμητης κίνησης μέσα από αυτά. Εκτός και αν αναφέρεται διαφορετικά, όλα τα παραδείγματα ρυθμίσεων και κανόνων που φαίνονται σε αυτό το κεφάλαιο, δημιουργούν inclusive firewalls. Η ασφάλεια μπορεί να γίνει ακόμα ισχυρότερη με τη χρήση ενός stateful firewall. Αυτός ο τύπος firewall αποθηκεύει την κατάσταση των συνδέσεων που μεταφέρουν δεδομένα μέσα από αυτό, και επιτρέπει μόνο την κίνηση που είτε ταιριάζει με μια από τις υπάρχουσες συνδέσεις, ή που ξεκινά μια νέα σύνδεση. Το μειονέκτημα ενός stateful firewall είναι ότι μπορεί να είναι ευάλωτο σε επιθέσεις Denial of Service (Άρνησης Υπηρεσίας, DoS) αν δεχθεί ταυτόχρονα πολλές αιτήσεις για άνοιγμα νέων συνδέσεων σε μικρό χρονικό διάστημα. Με τα περισσότερα firewalls, είναι δυνατόν να γίνει συνδυασμός και των δύο συμπεριφορών (τόσο stateful όσο και μη-stateful) ώστε να δημιουργηθεί το βέλτιστο firewall για την συγκεκριμένη χρήση. Προγράμματα Firewall Το &os; έχει τρία διαφορετικά προγράμματα firewall ενσωματωμένα στο βασικό σύστημα. Είναι τα: IPFILTER (γνωστό επίσης και ως IPF), το IPFIREWALL (γνωστό επίσης και ως IPFW), και το PacketFilter του OpenBSD (γνωστό επίσης και ως PF). Το &os; ενσωματώνει επίσης δύο προγράμματα για διαμόρφωση κυκλοφορίας (traffic shaping, έλεγχος του διαθέσιμου εύρους ζώνης): το &man.altq.4; και το &man.dummynet.4;. Το Dummynet είναι κατά παράδοση στενά συνδεμένο με το IPFW, και το ALTQ με το PF. Η διαμόρφωση κυκλοφορίας για το IPFILTER μπορεί τη δεδομένη στιγμή να γίνει με το IPFILTER για το NAT και το φιλτράρισμα και με το IPFW σε συνδυασμό με το &man.dummynet.4; ή χρησιμοποιώντας το PF σε συνδυασμό με το ALTQ. Τόσο το IPFW όσο και το PF χρησιμοποιούν κανόνες για να ελέγξουν την κίνηση των πακέτων από και προς το σύστημά σας, αν και διαθέτουν διαφορετικούς τρόπους για να το επιτύχουν, και οι κανόνες τους χρησιμοποιούν διαφορετική σύνταξη. Ο λόγος για τον οποίο το &os; διαθέτει πολλαπλά firewall, είναι ότι διαφορετικοί άνθρωποι έχουν διαφορετικές ανάγκες και προτιμήσεις. Δεν υπάρχει ένα και μοναδικό firewall που να είναι το καλύτερο. Ο συγγραφέας προτιμά το IPFILTER, καθώς οι κανόνες τύπου stateful που διαθέτει είναι λιγότερο πολύπλοκοι όταν χρησιμοποιούνται σε ένα περιβάλλον NAT, ενώ διαθέτει και ενσωματωμένο ftp proxy το οποίο τους απλοποιεί ακόμα περισσότερο, επιτρέποντας ασφαλή σύνδεση σε εξωτερικούς εξυπηρετητές FTP. Καθώς όλα τα firewall βασίζονται στην επιθεώρηση τιμών ελέγχου των πακέτων, ο διαχειριστής που πρόκειται να δημιουργήσει τους κανόνες πρέπει να κατανοεί τον τρόπο λειτουργίας του TCP/IP, το ρόλο των διαφόρων τιμών στα πεδία ελέγχου των πακέτων και πως χρησιμοποιούνται στην ανταλλαγή πληροφοριών σε μια συνηθισμένη συνεδρία. Για περισσότερες λεπτομέρειες, διαβάστε το . John Ferrell Αναθεωρήθηκε και ενημερώθηκε από τον Το Packet Filter (PF) και το <acronym>ALTQ</acronym> του OpenBSD firewall PF Τον Ιούλιο του 2003, η εφαρμογή firewall του OpenBSD (γνωστή ως PF) μεταφέρθηκε στο &os; και έγινε διαθέσιμη στην Συλλογή των Ports. Το &os; 5.3 που κυκλοφόρησε το 2004, ήταν η πρώτη επίσημη έκδοση η οποία περιείχε το PF ως τμήμα του βασικού πλέον συστήματος. Το PF είναι ένα ολοκληρωμένο firewall, με πλήθος χαρακτηριστικών, το οποίο επίσης διαθέτει προαιρετικά υποστήριξη για το ALTQ (Alternate Queuing). Το ALTQ προσφέρει υπηρεσίες Διασφάλισης Ποιότητας (Quality of Service, QoS). Το OpenBSD Project κάνει εξαιρετική δουλειά στη συντήρηση του PF FAQ. Για το λόγο αυτό, η παρούσα ενότητα του Εγχειριδίου εστιάζει κυρίως στις ιδιαιτερότητες του PF όσο αφορά το &os;, ενώ παρέχει και μερικές γενικές πληροφορίες σχετικά με τη χρήση του. Για πιο λεπτομερείς πληροφορίες σχετικά με τη χρήση του PF, παρακαλούμε διαβάστε το PF FAQ. Περισσότερες πληροφορίες σχετικά με το PF στο &os; μπορείτε να βρείτε στο . Χρησιμοποιώντας τα Αρθρώματα Πυρήνα για το PF Για να φορτώσετε το άρθρωμα πυρήνα για το PF, προσθέστε την παρακάτω γραμμή στο στο /etc/rc.conf: pf_enable="YES" Εκτελέστε έπειτα το script εκκίνησης για να φορτώσετε το άρθρωμα: &prompt.root; /etc/rc.d/pf start Σημειώστε ότι το άρθρωμα PF δεν πρόκειται να φορτωθεί αν δεν βρει το καθορισμένο αρχείο κανόνων. Το προεπιλεγμένο αρχείο είναι το /etc/pf.conf. Αν το αρχείο κανόνων βρίσκεται σε κάποια άλλη τοποθεσία, μπορείτε να την καθορίσετε προσθέτοντας μια γραμμή όπως την παρακάτω στο /etc/rc.conf: pf_rules="/path/to/pf.conf" Από το &os; 7.0 και μετά, το υπόδειγμα του pf.conf το οποίο βρίσκονταν στον κατάλογο /etc/, μεταφέρθηκε στον κατάλογο /usr/share/examples/pf/. Στις εκδόσεις του &os; πριν από την 7.0, υπήρχε από προεπιλογή ένα αρχείο /etc/pf.conf. Το άρθρωμα PF μπορεί επίσης να φορτωθεί χειροκίνητα από την γραμμή εντολών: &prompt.root; kldload pf.ko Η υποστήριξης καταγραφής του PF παρέχεται από το άρθρωμα pflog.ko και μπορείτε να την φορτώσετε προσθέτοντας την παρακάτω γραμμή στο /etc/rc.conf: pflog_enable="YES" Εκτελέστε έπειτα το script εκκίνησης για να φορτώσετε το άρθρωμα: &prompt.root; /etc/rc.d/pflog start Αν χρειάζεστε κάποιο από τα προχωρημένα χαρακτηριστικά του PF, θα πρέπει να μεταγλωττίσετε την υποστήριξη για το PF απευθείας μέσα στον πυρήνα. Επιλογές του PF για τον Πυρήνα kernel options device pf kernel options device pflog kernel options device pfsync Αν και δεν είναι απαραίτητο να μεταγλωττίσετε την υποστήριξη PF μέσα στον πυρήνα του &os;, ίσως να θέλετε να χρησιμοποιήσετε ένα από τα προχωρημένα χαρακτηριστικά του PF το οποίο δεν περιλαμβάνεται στο άρθρωμα του πυρήνα: το &man.pfsync.4;. Πρόκειται για μια ψευδο-συσκευή η οποία αποκαλύπτει συγκεκριμένες αλλαγές στον πίνακα καταστάσεων που χρησιμοποιείται από το PF. Μπορεί να συνδυαστεί με το &man.carp.4; για να δημιουργηθούν με το PF firewalls με δυνατότητα αυτόματης αλλαγής σε περίπτωση αποτυχίας (failover). Περισσότερες πληροφορίες σχετικά με το CARP μπορείτε να βρείτε στο του Εγχειριδίου. Μπορείτε να δείτε όλες τις επιλογές πυρήνα για το PF στο αρχείο /usr/src/sys/conf/NOTES. Οι επιλογές φαίνονται επίσης παρακάτω: device pf device pflog device pfsync Η επιλογή device pf ενεργοποιεί την υποστήριξη για το firewall Packet Filter (&man.pf.4;). Η επιλογή device pflog ενεργοποιεί την προαιρετική ψευδο-δικτυακή συσκευή &man.pflog.4; που μπορεί να χρησιμοποιηθεί για την καταγραφή της κίνησης σε ένα &man.bpf.4; descriptor. Ο δαίμονας &man.pflogd.8; μπορεί να αποθηκεύσει την καταγραφή αυτή στο σκληρό δίσκο. Η επιλογή device pfsync ενεργοποιεί την προαιρετική ψευδό-δικτυακή συσκευή &man.pfsync.4; η οποία χρησιμοποιείται για να ανιχνεύει αλλαγές κατάστασης. Επιλογές στο rc.conf Το PF και το &man.pflog.4; μπορούν να ρυθμιστούν κατά την εκκίνηση με τις παρακάτω καταχωρίσεις στο &man.rc.conf.5;: pf_enable="YES" # Enable PF (load module if required) pf_rules="/etc/pf.conf" # rules definition file for pf pf_flags="" # additional flags for pfctl startup pflog_enable="YES" # start pflogd(8) pflog_logfile="/var/log/pflog" # where pflogd should store the logfile pflog_flags="" # additional flags for pflogd startup Αν πίσω από αυτό το firewall υπάρχει κάποιο τοπικό δίκτυο (LAN) προς το οποίο επιθυμείτε να προωθήσετε πακέτα, ή αν θέλετε να χρησιμοποιήσετε NAT, θα χρειαστείτε επίσης και την παρακάτω επιλογή: gateway_enable="YES" # Enable as LAN gateway Δημιουργία Κανόνων Φιλτραρίσματος Το PF διαβάζει τις ρυθμίσεις του από το &man.pf.conf.5; (η προεπιλεγμένη τοποθεσία είναι στο /etc/pf.conf) και τροποποιεί, απορρίπτει ή αποδέχεται πακέτα σύμφωνα με τους κανόνες και τους ορισμούς που περιέχονται σε αυτό. Η εγκατάσταση του &os; περιλαμβάνει αρκετά υποδείγματα αρχείων ρύθμισης, στην τοποθεσία /usr/share/examples/pf/. Παρακαλούμε να διαβάσετε το PF FAQ για πλήρη ανάλυση των κανόνων του PF. Καθώς διαβάζετε το PF FAQ, να έχετε υπόψη σας ότι διαφορετικές εκδόσεις του &os; περιέχουν - διαφορετικές εκδόσεις του PF: - - - - &os; 5.X — - Το PF είναι στην έκδοση που υπάρχει στο - OpenBSD 3.5 - - - - &os; 6.X — - Το PF είναι στην έκδοση που υπάρχει στο - OpenBSD 3.7 - - - - &os; 7.X — - Το PF είναι στην έκδοση που υπάρχει στο - OpenBSD 4.1 - - + διαφορετικές εκδόσεις του PF. Τη δεδομένη στιγμή, το + &os; 7.X και νεώτερες εκδόσεις, + χρησιμοποιούν την ίδια έκδοση του PF που + χρησιμοποιεί και το OpenBSD 4.1. Η &a.pf; είναι ένα καλό μέρος για να κάνετε ερωτήσεις σχετικές με τη ρύθμιση και τη λειτουργία του PF firewall. Μη ξεχάσετε να ελέγξετε τα αρχεία της λίστας πριν ξεκινήσετε τις ερωτήσεις! Δουλεύοντας με το PF Χρησιμοποιήστε το &man.pfctl.8; για να ελέγξετε το PF. Παρακάτω θα βρείτε κάποιες χρήσιμες εντολές (βεβαιωθείτε ότι έχετε διαβάσει τη σελίδα manual του &man.pfctl.8; για να δείτε όλες τις διαθέσιμες επιλογές): Εντολή Σκοπός pfctl Ενεργοποίηση του PF pfctl Απενεργοποίηση του PF pfctl all /etc/pf.conf Διαγραφή όλων των κανόνων (nat, filter, state, table, κ.λ.π.) και εκ νέου ανάγνωση από το αρχείο /etc/pf.conf pfctl [ rules | nat | state ] Εκτύπωση αναφοράς σχετικά με τους κανόνες του φίλτρου, του NAT, ή του πίνακα κατάστασης pfctl /etc/pf.conf Ελέγχει το /etc/pf.conf για λάθη, αλλά δεν φορτώνει τους κανόνες Ενεργοποίηση του <acronym>ALTQ</acronym> Το ALTQ διατίθεται μόνο αν μεταγλωττίσετε απευθείας την υποστήριξη του μέσα στον πυρήνα του &os;. Το ALTQ δεν υποστηρίζεται από όλα τα προγράμματα οδήγησης καρτών δικτύου. Παρακαλούμε δείτε τη σελίδα manual του &man.altq.4; για τη λίστα των οδηγών που υποστηρίζονται στην έκδοση του &os; που διαθέτετε. Οι παρακάτω επιλογές του πυρήνα ενεργοποιούν το ALTQ και παρέχουν επιπρόσθετες λειτουργίες: options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build Η γραμμή options ALTQ ενεργοποιεί το πλαίσιο λειτουργιών ALTQ. Η γραμμή options ALTQ_CBQ ενεργοποιεί το Class Based Queuing (CBQ). Το CBQ σας επιτρέπει να χωρίσετε το εύρος ζώνης μιας σύνδεσης σε διαφορετικές κλάσεις ή ουρές, ώστε να δίνονται προτεραιότητες στην κίνηση ανάλογα με τους κανόνες του φίλτρου. Η γραμμή options ALTQ_RED ενεργοποιεί το Random Early Detection (RED). Το RED χρησιμοποιείται για να αποφευχθεί η συμφόρηση του δικτύου. Για το σκοπό αυτό, το RED μετράει το μήκος της ουράς και το συγκρίνει με το μέγιστο και ελάχιστο όριο της. Αν η ουρά είναι πάνω από το μέγιστο, όλα τα νέα πακέτα θα απορρίπτονται. Σύμφωνα και με το όνομα του, το RED απορρίπτει πακέτα από διάφορες συνδέσεις με τυχαίο τρόπο. Η γραμμή options ALTQ_RIO ενεργοποιεί το Random Early Detection In and Out. Η γραμμή options ALTQ_HFSC ενεργοποιεί το Hierarchical Fair Service Curve Packet Scheduler. Για περισσότερες πληροφορίες σχετικά με το HFSC δείτε: . Η γραμμή options ALTQ_PRIQ ενεργοποιεί το Priority Queuing (PRIQ). Το PRIQ πάντοτε περνάει πρώτα την κίνηση με τη μεγαλύτερη προτεραιότητα. Η γραμμή options ALTQ_NOPCC ενεργοποιεί την υποστήριξη SMP για το ALTQ. Η επιλογή αυτή απαιτείται σε συστήματα SMP. Το IPFILTER (IPF) Firewall firewall IPFILTER Ο συγγραφέας του IPFILTER είναι ο Darren Reed. Το IPFILTER δεν εξαρτάται από το λειτουργικό σύστημα: είναι μια εφαρμογή ανοικτού κώδικα που έχει μεταφερθεί στο &os;, το NetBSD, το OpenBSD, το &sunos;, το HP/UX και το &solaris;. Το IPFILTER είναι υπό διαρκή και ενεργή ανάπτυξη και συντήρηση, και κυκλοφορούν τακτικά οι νέες εκδόσεις του. Το IPFILTER είναι ένα firewall και μηχανισμός NAT που λειτουργεί στον πυρήνα και μπορεί να ελέγχεται και να παρακολουθείται από προγράμματα χρήστη. Οι κανόνες του firewall μπορούν να τίθενται σε ισχύ ή να διαγράφονται μέσω του βοηθητικού προγράμματος &man.ipf.8;. Οι κανόνες για το NAT μπορούν να τίθενται σε ισχύ ή να διαγράφονται μέσω του βοηθητικού προγράμματος &man.ipnat.1;. Το βοηθητικό πρόγραμμα &man.ipfstat.8; μπορεί να εκτυπώσει στατιστικά εκτέλεσης για το τμήμα του IPFILTER που εκτελείται στον πυρήνα. Το πρόγραμμα &man.ipmon.8; μπορεί να καταγράψει τις ενέργειες του IPFILTER στο αρχεία καταγραφής συμβάντων του συστήματος. Το IPF γράφηκε αρχικά χρησιμοποιώντας μια λογική επεξεργασίας κανόνων του τύπου ο τελευταίο κανόνας που ταιριάζει, είναι και ο νικητής και χρησιμοποιούσε μόνο κανόνες τύπου stateless. Με την πάροδο του χρόνου, το IPF βελτιώθηκε για να περιλαμβάνει την επιλογή quick και την επιλογή keep state για stateful κανόνες. Οι επιλογές αυτές εκσυγχρόνισαν δραματικά τη λογική επεξεργασίας των κανόνων. Η επίσημη τεκμηρίωση του IPF καλύπτει μόνο τις παλιές παραμέτρους ρύθμισης και επεξεργασίας των κανόνων. Οι σύγχρονες λειτουργίες καλύπτονται μόνο ως πρόσθετες επιλογές, και έτσι δεν τονίζονται αρκετά τα πλεονεκτήματα τους στη δημιουργία ενός πολύ καλύτερου και ασφαλέστερου firewall. Οι οδηγίες που περιέχονται σε αυτή την ενότητα, βασίζονται στη χρήση κανόνων που περιέχουν την επιλογή quick καθώς και την stateful επιλογή keep state. Αυτό είναι και το βασικό πλαίσιο λειτουργιών για την δημιουργία του σετ κανόνων ενός inclusive firewall. Για λεπτομέρειες σχετικά με τον παλιότερο τρόπο επεξεργασίας των κανόνων, δείτε: και . Μπορείτε να δείτε το IPF FAQ στην τοποθεσία . Μπορείτε να βρείτε τις παλαιότερες δημοσιεύσεις τις λίστας ταχυδρομείου του IPFILTER στο . Παρέχεται δυνατότητα αναζήτησης. Ενεργοποιώντας το IPF IPFILTER enabling Το IPF περιλαμβάνεται στη βασική εγκατάσταση του &os; ως άρθρωμα το οποίο μπορεί να φορτωθεί χωριστά. Το σύστημα θα φορτώσει δυναμικά το άρθρωμα του IPF αν υπάρχει η καταχώριση ipfilter_enable="YES" στο αρχείο /etc/rc.conf. Το άρθρωμα έχει δημιουργηθεί με ενεργοποιημένη την δυνατότητα καταγραφής και με την επιλογή default pass all. Για να αλλάξετε αυτή την προεπιλογή σε block all, μπορείτε απλώς να προσθέσετε τον κανόνα απόρριψης (block all) στο τέλος των κανόνων σας. Δεν χρειάζεται να μεταγλωττίσετε την επιλογή IPF στο πυρήνα του &os; για το σκοπό αυτό. Επιλογές για τον Πυρήνα kernel options IPFILTER kernel options IPFILTER_LOG kernel options IPFILTER_DEFAULT_BLOCK IPFILTER kernel options Δεν είναι υποχρεωτικό να μεταγλωττίσετε τις παρακάτω επιλογές στον πυρήνα του &os; για να ενεργοποιήσετε το IPF. Η παρουσίαση τους εδώ είναι καθαρά ενημερωτική. Αν μεταγλωττίσετε το IPF απευθείας στον πυρήνα, δεν θα χρησιμοποιηθεί ποτέ το αντίστοιχο άρθρωμα. Στο αρχείο /usr/src/sys/conf/NOTES θα βρείτε παραδείγματα καταχωρίσεων IPF για το αρχείο ρύθμισης του πυρήνα. Οι επιλογές αυτές φαίνονται επίσης παρακάτω: options IPFILTER options IPFILTER_LOG options IPFILTER_DEFAULT_BLOCK Η επιλογή options IPFILTER ενεργοποιεί την υποστήριξη για το IPFILTER firewall. Η επιλογή options IPFILTER_LOG ενεργοποιεί την υποστήριξη καταγραφής του IPF, η οποία γράφει στην ψευδο-συσκευή καταγραφής πακέτων ipl για κάθε κανόνα που περιλαμβάνει την επιλογή log. Η επιλογή options IPFILTER_DEFAULT_BLOCK αλλάζει την προεπιλεγμένη συμπεριφορά, ώστε κάθε πακέτο που δεν ταιριάζει με κάποιο κανόνα pass του firewall, να απορρίπτεται αυτόματα. Οι παραπάνω επιλογές θα ενεργοποιηθούν μόνο αφού μεταγλωττίσετε και εγκαταστήσετε ένα προσαρμοσμένο πυρήνα που να τις περιλαμβάνει. Διαθέσιμες Επιλογές για το rc.conf Χρειάζεστε τις παρακάτω καταχωρίσεις στο /etc/rc.conf για να ενεργοποιήσετε το IPF κατά την εκκίνηση του υπολογιστή: ipfilter_enable="YES" # Start ipf firewall ipfilter_rules="/etc/ipf.rules" # loads rules definition text file ipmon_enable="YES" # Start IP monitor log ipmon_flags="-Ds" # D = start as daemon # s = log to syslog # v = log tcp window, ack, seq # n = map IP & port to names Αν πίσω από αυτό το firewall υπάρχει κάποιο LAN που χρησιμοποιεί δεσμευμένες ιδιωτικές διευθύνσεις, θα χρειαστεί να προσθέσετε τις παρακάτω καταχωρίσεις για να ενεργοποιήσετε τη λειτουργία NAT: gateway_enable="YES" # Enable as LAN gateway ipnat_enable="YES" # Start ipnat function ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat IPF ipf Η εντολή &man.ipf.8; χρησιμοποιείται για να φορτώσει το αρχείο των κανόνων. Φυσιολογικά, θα δημιουργήσετε ένα αρχείο με τους δικούς σας προσαρμοσμένους κανόνες και θα αντικαταστήσετε με αυτό εξ'ολοκλήρου τους ενσωματωμένους κανόνες του firewall: &prompt.root; ipf -Fa -f /etc/ipf.rules Η επιλογή αδειάζει τους κανόνες από τους εσωτερικούς πίνακες του firewall. Η επιλογή καθορίζει το αρχείο των κανόνων που θα φορτωθεί. Αυτό σας δίνει την δυνατότητα να αλλάξετε το αρχείο κανόνων σας, να εκτελέσετε την εντολή IPF που αναφέραμε παραπάνω, και να ανανεώσετε με αυτό τον τρόπο τους κανόνες στο firewall που εκτελείται ήδη με καινούργιους, χωρίς να χρειαστεί να επανεκκινήσετε το σύστημα σας. Η μέθοδος αυτή είναι πολύ βολική για να δοκιμάσετε νέους κανόνες, καθώς μπορεί να επαναληφθεί όσες φορές θέλετε. Δείτε τη σελίδα manual του &man.ipf.8; για λεπτομέρειες σχετικά με τις υπόλοιπες επιλογές που μπορείτε να χρησιμοποιήσετε με την εντολή αυτή. Η εντολή &man.ipf.8; αναμένει ένα απλό αρχείο κειμένου ως αρχείο κανόνων. Δεν θα δεχθεί αρχείο κανόνων γραμμένο ως script με συμβολικές αντικαταστάσεις. Υπάρχει ωστόσο τρόπος να γράψετε κανόνες IPF που να χρησιμοποιούν την ισχύ των συμβολικών αντικαταστάσεων. Για περισσότερες πληροφορίες, δείτε το . IPFSTAT ipfstat IPFILTER statistics Η προεπιλεγμένη συμπεριφορά του &man.ipfstat.8; είναι να ανακτά και να απεικονίζει το σύνολο των στατιστικών που συγκεντρώθηκαν ως αποτέλεσμα της εφαρμογής των κανόνων του χρήστη στα πακέτα που εισέρχονται και εξέρχονται από το firewall, από τη στιγμή της τελευταίας του εκκίνησης ή από τον τελευταίο τους μηδενισμό μέσω της εντολής ipf -Z. Δείτε τη σελίδα manual &man.ipfstat.8; για λεπτομέρειες. Η προεπιλεγμένη έξοδος της εντολής &man.ipfstat.8; θα μοιάζει με την παρακάτω: input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0 output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0 input packets logged: blocked 99286 passed 0 output packets logged: blocked 0 passed 0 packets logged: input 0 output 0 log failures: input 3898 output 0 fragment state(in): kept 0 lost 0 fragment state(out): kept 0 lost 0 packet state(in): kept 169364 lost 0 packet state(out): kept 431395 lost 0 ICMP replies: 0 TCP RSTs sent: 0 Result cache hits(in): 1215208 (out): 1098963 IN Pullups succeeded: 2 failed: 0 OUT Pullups succeeded: 0 failed: 0 Fastroute successes: 0 failures: 0 TCP cksum fails(in): 0 (out): 0 Packet log flags set: (0) Όταν χρησιμοποιηθεί η επιλογή για τα εισερχόμενα ή η επιλογή για τα εξερχόμενα πακέτα, η εντολή θα ανακτήσει και θα απεικονίσει την αντίστοιχη λίστα κανόνων που είναι εγκατεστημένη και χρησιμοποιείται από τον πυρήνα τη δεδομένη στιγμή. Η εντολή ipfstat -in δείχνει ένα αριθμημένο πίνακα κανόνων για εισερχόμενα πακέτα. Η εντολή ipfstat -on δείχνει ένα αριθμημένο πίνακα κανόνων για εξερχόμενα πακέτα. Η έξοδος θα μοιάζει με την παρακάτω: @1 pass out on xl0 from any to any @2 block out on dc0 from any to any @3 pass out quick on dc0 proto tcp/udp from any to any keep state Η εντολή ipfstat -ih δείχνει τον πίνακα κανόνων για τα εισερχόμενα πακέτα, τοποθετώντας μπροστά από τον κάθε κανόνα ένα αριθμό που δείχνει πόσες φορές έχει χρησιμοποιηθεί. Η εντολή ipfstat -oh δείχνει τον πίνακα κανόνων για τα εξερχόμενα πακέτα, τοποθετώντας μπροστά από τον κάθε κανόνα ένα αριθμό που δείχνει πόσες φορές έχει χρησιμοποιηθεί. Η έξοδος θα μοιάζει με την παρακάτω: 2451423 pass out on xl0 from any to any 354727 block out on dc0 from any to any 430918 pass out quick on dc0 proto tcp/udp from any to any keep state Μια από τις πιο σημαντικές λειτουργίες της εντολής ipfstat είναι η επιλογή η οποία απεικονίζει τον πίνακα καταστάσεων, με τρόπο όμοιο με αυτό που χρησιμοποιεί η εντολή &man.top.1; για να δείξει τον πίνακα διεργασιών που εκτελούνται στο &os;. Όταν το firewall σας δέχεται επίθεση, η λειτουργία αυτή σας δίνει την δυνατότητα να αναγνωρίσετε και να εστιάσετε στα ίδια τα πακέτα που την αποτελούν. Οι προαιρετικές υπο-επιλογές σας δίνουν την δυνατότητα να επιλέξετε το IP αφετηρίας ή προορισμού, την θύρα, ή το πρωτόκολλο το οποίο θέλετε να παρακολουθήσετε σε πραγματικό χρόνο. Δείτε τη σελίδα manual του &man.ipfstat.8; για περισσότερες λεπτομέρειες. IPMON ipmon IPFILTER logging Για να λειτουργήσει σωστά η εντολή ipmon, θα πρέπει να ενεργοποιηθεί η επιλογή IPFILTER_LOG στον πυρήνα. Η εντολή αυτή διαθέτει δύο διαφορετικούς τρόπους λειτουργίας. Ο προεπιλεγμένος κανονικός τρόπος λειτουργίας ενεργοποιείται όταν η εντολή χρησιμοποιείται χωρίς την επιλογή . Η εντολή μπορεί να χρησιμοποιηθεί σε λειτουργία δαίμονα όταν επιθυμείτε να έχετε ένα συνεχόμενο αρχείο καταγραφής ώστε να μπορείτε να εξετάσετε τις προηγούμενες εγγραφές. Αυτός είναι και ο τρόπος με τον οποίο έχει ρυθμιστεί να συνεργάζεται το &os; με το IPFILTER. Το &os; έχει ενσωματωμένη δυνατότητα εναλλαγής αρχείων καταγραφής. Για αυτό το λόγο, είναι καλύτερο η καταγραφή να γίνεται μέσω του &man.syslogd.8; παρά σε ένα συνηθισμένο αρχείο. Από προεπιλογή, η ρύθμιση ipmon_flags στο αρχείο rc.conf χρησιμοποιεί τις επιλογές : ipmon_flags="-Ds" # D = start as daemon # s = log to syslog # v = log tcp window, ack, seq # n = map IP & port to names Τα πλεονεκτήματα της καταγραφής είναι προφανή. Παρέχει την δυνατότητα επισκόπησης πληροφοριών όπως τα πακέτα που απορρίφθηκαν, τις διευθύνσεις από τις οποίες λήφθηκαν, και τον προορισμό τους. Έχετε έτσι ένα σημαντικό πλεονέκτημα όταν προσπαθείτε να αναγνωρίσετε ένα εισβολέα. Ακόμα και όταν ενεργοποιήσετε την δυνατότητα καταγραφής, το IPF δεν θα καταγράψει τίποτα αν δεν έχει γίνει η αντίστοιχη ρύθμιση στους κανόνες. Ο διαχειριστής του firewall αποφασίζει για ποιους κανόνες του σετ θέλει να ενεργοποιήσει την καταγραφή, και προσθέτει σε αυτούς την λέξη log. Φυσιολογικά, η καταγραφή ενεργοποιείται μόνο σε κανόνες που απορρίπτουν πακέτα. Είναι πολύ συνηθισμένο να περιλαμβάνεται ένας κανόνας στο τέλος του συνόλου, που να απορρίπτει από προεπιλογή όλα τα πακέτα που φτάνουν μέχρι εκεί (default deny). Με τον τρόπο αυτό μπορείτε να δείτε όλα τα πακέτα που δεν ταίριαξαν με κανένα κανόνα του σετ. Καταγραφή του IPMON Το syslogd χρησιμοποιεί τη δική του ειδική μέθοδο για το διαχωρισμό των δεδομένων καταγραφής. Διαθέτει ειδικές ομαδοποιήσεις που ονομάζονται facility και level. Όταν το IPMON χρησιμοποιείται με την επιλογή , χρησιμοποιεί το security ως όνομα facility. Όλα τα δεδομένα που καταγράφονται από το IPMON καταλήγουν στο security. Αν το επιθυμείτε, μπορείτε να χρησιμοποιήσετε τα παρακάτω επίπεδα για περαιτέρω διαχωρισμό των δεδομένων καταγραφής: LOG_INFO - packets logged using the "log" keyword as the action rather than pass or block. LOG_NOTICE - packets logged which are also passed LOG_WARNING - packets logged which are also blocked LOG_ERR - packets which have been logged and which can be considered short Για να ρυθμίσετε το IPFILTER να καταγράφει όλα τα δεδομένα στο /var/log/ipfilter.log, θα χρειαστεί να δημιουργήσετε από πριν το αρχείο. Αυτό μπορεί να γίνει με την παρακάτω εντολή: &prompt.root; touch /var/log/ipfilter.log Η λειτουργία του &man.syslogd.8; μπορεί να ρυθμιστεί με καταχωρίσεις στο αρχείο /etc/syslog.conf. Το αρχείο syslog.conf προσφέρει σημαντική ευελιξία στον τρόπο με τον οποίο το syslog αντιμετωπίζει τα μηνύματα συστήματος που προέρχονται από εφαρμογές όπως το IPF. Προσθέστε την παρακάτω καταχώριση στο αρχείο /etc/syslog.conf: security.* /var/log/ipfilter.log Το security.* σημαίνει ότι θα γίνεται καταγραφή όλων των μηνυμάτων αυτού του τύπου στην τοποθεσία που έχει οριστεί. Για να ενεργοποιήσετε τις αλλαγές στο /etc/syslog.conf θα πρέπει να επανεκκινήσετε το μηχάνημα ή να αναγκάσετε το &man.syslogd.8; να ξαναδιαβάσει το /etc/syslog.conf, εκτελώντας την εντολή /etc/rc.d/syslogd reload Μην ξεχάσετε να τροποποιήσετε το /etc/newsyslog.conf ώστε να εναλλάσσει το αρχείο καταγραφής που δημιουργήσατε παραπάνω. Η Μορφή των Μηνυμάτων Καταγραφής Τα μηνύματα που παράγονται από την ipmon αποτελούνται από πεδία δεδομένων που χωρίζονται από λευκό διάστημα. Τα πεδία που είναι κοινά σε όλα τα μηνύματα, είναι τα παρακάτω: Η ημερομηνία παραλαβής του πακέτου Η ώρα παραλαβής του πακέτου. Έχει την μορφή HH:MM:SS.F, η οποία υποδηλώνει ώρες, λεπτά, δευτερόλεπτα και κλάσματα δευτερολέπτου (τα οποία μπορεί να είναι πολλά δεκαδικά ψηφία). Το όνομα της διεπαφής στην οποία έγινε η επεξεργασία του πακέτου π.χ. dc0. Ο αριθμός ομάδας και ο αύξων αριθμός του κανόνα, π.χ. @0:17. Μπορείτε να δείτε τα παρακάτω με την εντολή ipfstat -in: Το είδος της ενέργειας: p αν το πακέτο πέρασε, b αν το πακέτο απορρίφθηκε, S για σύντομο πακέτο, n αν δεν ταίριαξε με κανένα κανόνα, L για κανόνα με καταγραφή. Η σειρά προτεραιότητας στην απεικόνιση των παραπάνω, είναι S, p, b, n, L. Το κεφαλαίο P ή το B σημαίνουν ότι η καταγραφή του πακέτου έγινε λόγω κάποιας γενικής ρύθμισης καταγραφής και όχι εξαιτίας κάποιου κανόνα. Οι διευθύνσεις. Πρόκειται στην πραγματικότητα για τρία πεδία: τη διεύθυνση και τη θύρα αφετηρίας (χωρίζονται με κόμμα), το σύμβολο -> και την διεύθυνση και θύρα προορισμού, π.χ. 209.53.17.22,80 -> 198.73.220.17,1722. Το PR ακολουθούμενο από το όνομα ή τον αριθμό του πρωτοκόλλου, π.χ. PR tcp. Το len ακολουθούμενο από το μήκος της επικεφαλίδας και το συνολικό μήκος του πακέτου, π.χ. len 20 40. Αν πρόκειται για πακέτο TCP, θα υπάρχει ένα επιπλέον πεδίο το οποίο θα ξεκινάει με μια παύλα και θα ακολουθείται από γράμματα τα οποία αντιστοιχούν στις επιλογές (flags) που έχουν τεθεί. Δείτε τη σελίδα manual &man.ipmon.8; για τη λίστα των γραμμάτων και των αντίστοιχων flags. Αν πρόκειται για πακέτο ICMP, θα υπάρχουν δύο πεδία στο τέλος, το πρώτο θα είναι πάντα ICMP και το επόμενο θα είναι ο τύπος του μηνύματος και του υπό-μηνύματος ICMP, χωρισμένα με μια κάθετο, π.χ. ICMP 3/3 για ένα μήνυμα μη προσβάσιμης θύρας (port unreachable). Δημιουργία Script Κανόνων με Συμβολική Υποκατάσταση Ορισμένοι έμπειροι χρήστες του IPF δημιουργούν ένα αρχείο κανόνων το οποίο μπορεί να εκτελεστεί ως script με δυνατότητα συμβολικής υποκατάστασης. Το βασικό όφελος του παραπάνω, είναι ότι χρειάζεται να αλλάξετε μόνο την τιμή που σχετίζεται με το συμβολικό όνομα και όταν το script εκτελεστεί, η τιμή θα υποκατασταθεί σε όλους τους κανόνες που περιέχουν το όνομα αυτό. Καθώς πρόκειται για script, μπορείτε να χρησιμοποιήσετε συμβολική υποκατάσταση για να κωδικοποιήσετε συχνά χρησιμοποιούμενες τιμές και να τις υποκαθιστάτε σε πολλαπλούς κανόνες. Αυτό φαίνεται και στο παράδειγμα που ακολουθεί. Η σύνταξη του script που χρησιμοποιείται εδώ, είναι συμβατή με τα κελύφη &man.sh.1;, &man.csh.1;, και &man.tcsh.1;. Τα πεδία στα οποία γίνεται συμβολική υποκατάσταση προσημειώνονται με το σήμα του δολαρίου: $. Τα συμβολικά πεδία δεν έχουν την προσημείωση με το $. Η τιμή που θα χρησιμοποιηθεί στο συμβολικό πεδίο, θα πρέπει να εσωκλείεται σε διπλά εισαγωγικά ("). Ξεκινήστε το αρχείο των κανόνων σας με κάτι αντίστοιχο με το παρακάτω: ############# Start of IPF rules script ######################## oif="dc0" # name of the outbound interface odns="192.0.2.11" # ISP's DNS server IP address myip="192.0.2.7" # my static IP address from ISP ks="keep state" fks="flags S keep state" # You can choose between building /etc/ipf.rules file # from this script or running this script "as is". # # Uncomment only one line and comment out another. # # 1) This can be used for building /etc/ipf.rules: #cat > /etc/ipf.rules << EOF # # 2) This can be used to run script "as is": /sbin/ipf -Fa -f - << EOF # Allow out access to my ISP's Domain name server. pass out quick on $oif proto tcp from any to $odns port = 53 $fks pass out quick on $oif proto udp from any to $odns port = 53 $ks # Allow out non-secure standard www function pass out quick on $oif proto tcp from $myip to any port = 80 $fks # Allow out secure www function https over TLS SSL pass out quick on $oif proto tcp from $myip to any port = 443 $fks EOF ################## End of IPF rules script ######################## Αυτό είναι όλο. Στο παραπάνω παράδειγμα δεν είναι σημαντικοί οι κανόνες, αλλά ο τρόπος με τον οποίο λειτουργούν και παίρνουν τιμές τα πεδία υποκατάστασης. Αν το παραπάνω παράδειγμα βρίσκονταν σε ένα αρχείο με το όνομα /etc/ipf.rules.script, θα μπορούσατε να επαναφορτώσετε αυτούς τους κανόνες με την παρακάτω εντολή: &prompt.root; sh /etc/ipf.rules.script Υπάρχει ένα πρόβλημα όταν χρησιμοποιούνται αρχεία κανόνων με ενσωματωμένους συμβολισμούς: Το IPF δεν καταλαβαίνει τη συμβολική υποκατάσταση, και δεν μπορεί να διαβάσει αυτά τα scripts άμεσα. Ένα τέτοιο script μπορεί να χρησιμοποιηθεί με ένα από τους δύο παρακάτω τρόπους: Αφαιρέστε το σχόλιο από τη γραμμή που ξεκινάει με cat, και μετατρέψτε σε σχόλιο τη γραμμή που ξεκινάει με /sbin/ipf. Τοποθετήστε το ipfilter_enable="YES" στο αρχείο /etc/rc.conf όπως συνήθως, και εκτελέστε το script μια φορά μετά από κάθε αλλαγή για να δημιουργήσετε ή να ενημερώσετε το /etc/ipf.rules. Απενεργοποιήστε το IPFILTER στα scripts εκκίνησης του συστήματος, προσθέτοντας την καταχώριση ipfilter_enable="NO" (πρόκειται για την προεπιλεγμένη τιμή) στο αρχείο /etc/rc.conf. Προσθέστε ένα script όπως το παρακάτω στον κατάλογο εκκίνησης /usr/local/etc/rc.d/. Το script θα πρέπει να έχει ένα προφανές όνομα, όπως ipf.loadrules.sh. Η επέκταση .sh είναι υποχρεωτική. #!/bin/sh sh /etc/ipf.rules.script Οι άδειες σε αυτό το αρχείο, θα πρέπει να επιτρέπουν ανάγνωση, εγγραφή και εκτέλεση για τον χρήστη root. &prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh Οι κανόνες του IPF θα φορτώνονται πλέον κατά την εκκίνηση του συστήματος σας. Το Σύνολο Κανόνων του IPF Ως σύνολο κανόνων στο IPF, ορίζουμε μια ομάδα κανόνων που έχουν γραφεί για να επιτρέπουν ή να απορρίπτουν πακέτα ανάλογα με τις τιμές που περιέχονται σε αυτά. Η διπλής κατεύθυνσης ανταλλαγή πακέτων μεταξύ υπολογιστών αποτελεί μια συνεδρία. Το σύνολο κανόνων του firewall επεξεργάζεται τόσο τα πακέτα που έρχονται από το Internet, όσο και τα πακέτα που παράγονται από το σύστημα ως απάντηση σε αυτά. Κάθε υπηρεσία TCP/IP (π.χ. telnet, www, mail, κ.λ.π.) καθορίζεται από το πρωτόκολλο και την προνομιακή (privileged) θύρα που χρησιμοποιεί για να δέχεται αιτήματα εξυπηρέτησης. Τα πακέτα που προορίζονται για μια συγκεκριμένη υπηρεσία, ξεκινούν από τη διεύθυνση αφετηρίας χρησιμοποιώντας μια μη-προνομιακή θύρα και καταλήγουν στη συγκεκριμένη θύρα υπηρεσίας στον προορισμό. Όλες οι παραπάνω παράμετροι (θύρες και διευθύνσεις) μπορούν να χρησιμοποιηθούν ως κριτήρια επιλογής για την δημιουργία κανόνων που επιτρέπουν ή εμποδίζουν την πρόσβαση σε υπηρεσίες. IPFILTER rule processing order Το IPF γράφτηκε αρχικά χρησιμοποιώντας μια λογική επεξεργασίας κανόνων του τύπου ο τελευταίος κανόνας που ταιριάζει, είναι ο νικητής και χρησιμοποιούσε μόνο κανόνες stateless. Με την πάροδο του χρόνου, το IPF ενισχύθηκε με την επιλογή quick και με δυνατότητα αποθήκευσης κατάστασης μέσω της επιλογής keep state. Με τον τρόπο αυτό, εκσυγχρονίστηκε δραματικά η λογική επεξεργασίας των κανόνων. Οι οδηγίες που περιέχονται σε αυτή την ενότητα βασίζονται στη χρήση κανόνων που περιέχουν την επιλογή quick και την επιλογή keep state για τη διατήρηση της κατάστασης. Αυτές είναι και οι βασικές λειτουργίες για την κωδικοποίηση του συνόλου κανόνων ενός inclusive firewall. Όταν δουλεύετε με τους κανόνες του firewall, θα πρέπει να είστε πολύ προσεκτικοί. Αν βάλετε λανθασμένες ρυθμίσεις, μπορεί να κλειδωθείτε έξω από τον εξυπηρετητή σας. Για να είστε ασφαλείς, είναι προτιμότερο να κάνετε τις αρχικές σας ρυθμίσεις από την τοπική κονσόλα, παρά μέσω απομακρυσμένης σύνδεσης (π.χ. μέσω ssh). Συντακτικό Κανόνων IPFILTER rule syntax Το συντακτικό των κανόνων που παρουσιάζουμε εδώ, έχει απλοποιηθεί ώστε να απεικονίζει τη σύγχρονη stateful υλοποίηση και τη λογική του τύπου ο πρώτος κανόνας που ταιριάζει είναι και ο νικητής. Για την περιγραφή του παλιότερου τρόπου λειτουργίας, διαβάστε τη σελίδα manual του &man.ipf.8;. Ο χαρακτήρας # χρησιμοποιείται για να επισημάνει την αρχή ενός σχολίου, και μπορεί να εμφανίζεται στο τέλος μιας γραμμής κανόνα ή στη δική του γραμμή. Οι κενές γραμμές αγνοούνται. Οι κανόνες περιέχουν λέξεις-κλειδιά. Οι λέξεις αυτές θα πρέπει να κωδικοποιηθούν με συγκεκριμένη σειρά από τα αριστερά προς τα δεξιά της γραμμής. Οι λέξεις-κλειδιά φαίνονται παρακάτω με έντονα γράμματα. Μερικές λέξεις έχουν υπο-επιλογές οι οποίες μπορεί να είναι επίσης λέξεις-κλειδιά και να περιλαμβάνουν επίσης περισσότερες υπο-επιλογές. Κάθε μια από τις επικεφαλίδες στο παράδειγμα που φαίνεται παρακάτω έχει μια κεφαλίδα με έντονα γράμματα η οποία επεξηγεί το περιεχόμενο της. ACTION IN-OUT OPTIONS SELECTION STATEFUL PROTO SRC_ADDR,DST_ADDR OBJECT PORT_NUM TCP_FLAG STATEFUL ACTION = block | pass IN-OUT = in | out OPTIONS = log | quick | on interface-name SELECTION = proto value | source/destination IP | port = number | flags flag-value PROTO = tcp/udp | udp | tcp | icmp SRC_ADD,DST_ADDR = all | from object to object OBJECT = IP address | any PORT_NUM = port number TCP_FLAG = S STATEFUL = keep state ACTION Η ενέργεια (action) δείχνει τι πρέπει να γίνει με το πακέτο αν ταιριάζει με τον κανόνα του φίλτρου. Κάθε κανόνας πρέπει να διαθέτει μια ενέργεια. Οι ενέργειες που αναγνωρίζονται, φαίνονται παρακάτω: Το block δείχνει ότι το πακέτο θα πρέπει να απορριφθεί αν ταιριάζει με τις παραμέτρους επιλογής του κανόνα. Το pass δείχνει ότι το πακέτο θα πρέπει να εξέλθει από το firewall, αν ταιριάζει με τις παραμέτρους επιλογής του κανόνα. IN-OUT Κάθε κανόνας του φίλτρου πρέπει υποχρεωτικά να διευκρινίζει με σαφήνεια αν αναφέρεται στην είσοδο ή την έξοδο πακέτων. Η επόμενη λέξη-κλειδί πρέπει να είναι in ή out και αν δεν υπάρχει, ο κανόνας θα αποτύχει κατά το συντακτικό έλεγχο. Το in σημαίνει ότι ο κανόνας θα εφαρμοστεί σε ένα εισερχόμενο πακέτο το οποίο μόλις λήφθηκε στη διεπαφή που συνδέεται με το Διαδίκτυο. Το out σημαίνει ότι ο κανόνας θα εφαρμοστεί σε ένα πακέτο που προορίζεται για έξοδο μέσω της διεπαφής που συνδέεται με το Διαδίκτυο. OPTIONS Οι παρακάτω επιλογές πρέπει να χρησιμοποιηθούν με τη σειρά που φαίνονται εδώ. Το log δείχνει ότι η επικεφαλίδα του πακέτου θα γραφεί στο αρχείο καταγραφής του ipl (όπως περιγράφεται στην ενότητα LOGGING που ακολουθεί) αν οι παράμετροι της επιλογής ταιριάζουν με το πακέτο. To quick δείχνει ότι αν οι παράμετροι της επιλογής ταιριάζουν με το πακέτο, ο συγκεκριμένος κανόνας θα είναι και ο τελευταίος κανόνας που θα ελεγχθεί. Η επιλογή αυτή είναι υποχρεωτική για τη σύγχρονη λογική επεξεργασίας πακέτων. Το on δείχνει το όνομα της διεπαφής που θα ενσωματωθεί στις παραμέτρους επιλογής. Τα ονόματα των διεπαφών φαίνονται όταν εκτελείται η εντολή &man.ifconfig.8;. Χρησιμοποιώντας την επιλογή αυτή, ο κανόνας θα ελεγχθεί μόνο αν το πακέτο διέρχεται μέσω της συγκεκριμένης διεπαφής και προς τη συγκεκριμένη κατεύθυνση (εισερχόμενα/εξερχόμενα). Η επιλογή αυτή είναι υποχρεωτική για την σύγχρονη λογική επεξεργασίας των κανόνων. Όταν γίνεται καταγραφή ενός πακέτου, οι επικεφαλίδες γράφονται στην ψευδο-συσκευή καταγραφής πακέτων IPL. Μετά την εντολή log, μπορούν να χρησιμοποιηθούν οι παρακάτω παράμετροι (με τη σειρά που φαίνονται): Το body δείχνει ότι θα γίνει καταγραφή των πρώτων 128 bytes των περιεχομένων του πακέτου, που βρίσκονται αμέσως μετά την επικεφαλίδα. Η επιλογή first συνίσταται να χρησιμοποιηθεί αν η επιλογή log χρησιμοποιείται σε συνδυασμό με την keep state. Με τον τρόπο αυτό γίνεται καταγραφή μόνο του πρώτου πακέτου (με το οποίο ξεκίνησε η επικοινωνία), και όχι όλων των υπολοίπων τα οποία ταιριάζουν με την πληροφορία keep state. SELECTION Οι λέξεις κλειδιά που περιγράφονται σε αυτή την ενότητα, χρησιμοποιούνται για να περιγράψουν ποιες ιδιότητες του πακέτου θα διερευνηθούν για να καθοριστεί αν ταιριάζει ή όχι με τους κανόνες. Μια λέξη-κλειδί ορίζει το κεντρικό θέμα και ακολουθείται από άλλες λέξεις που ορίζουν τις ακριβείς επιλογές. Πρέπει πάντοτε να επιλέγεται μια από αυτές τις λέξεις. Παρέχονται οι παρακάτω ιδιότητες γενικής χρήσης οι οποίες πρέπει να χρησιμοποιηθούν με αυτή τη σειρά: PROTO Το proto είναι η βασική λέξη, και πρέπει να γράφεται μαζί με κάποια αντίστοιχη τιμή για περαιτέρω επιλογή. Η τιμή επιτρέπει το ταίριασμα με ένα συγκεκριμένο πρωτόκολλο. Είναι υποχρεωτικό να χρησιμοποιηθεί για να λειτουργεί η σύγχρονη λογική επεξεργασίας των κανόνων. Τα ονόματα πρωτοκόλλων που αναγνωρίζονται και μπορούν να χρησιμοποιηθούν, είναι τα tcp/udp | udp | tcp | icmp ή οποιαδήποτε άλλα εμφανίζονται στο /etc/protocols. Μπορείτε να χρησιμοποιήσετε το ειδικό όνομα tcp/udp το οποίο ταιριάζει είτε με πακέτο TCP είτε με UDP. Η ειδική αυτή ονομασία προστέθηκε ώστε να αποφεύγονται διπλοί, αλλά κατά τα άλλα όμοιοι, κανόνες. SRC_ADDR/DST_ADDR Η λέξη all είναι ουσιαστικά συνώνυμη με την φράση from any to any χωρίς να υπάρχουν άλλες παράμετροι για το ταίριασμα. Όταν χρησιμοποιείται το from src to dst, οι λέξεις from και to δηλώνουν διευθύνσεις IP που θα χρησιμοποιηθούν για το ταίριασμα. Οι κανόνες πρέπει να καθορίζουν τις παραμέτρους τόσο της αφετηρίας όσο και του προορισμού. Η λέξη any έχει την ειδική ιδιότητα να ταιριάζει με οποιαδήποτε διεύθυνση IP. Παραδείγματα χρήσης: from any to any ή from 0.0.0.0/0 to any ή from any to 0.0.0.0/0 ή from 0.0.0.0 to any ή from any to 0.0.0.0. Δεν υπάρχει τρόπος να περιγραφούν περιοχές IP διευθύνσεων που δεν μπορούν να εκφραστούν εύκολα με τη μορφή αριθμών χωρισμένων με τελείες / μάσκας υποδικτύου. Μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα net-mgmt/ipcalc για διευκόλυνση σας στους υπολογισμούς. Δείτε την δικτυακή τοποθεσία του προγράμματος για περισσότερες πληροφορίες: . PORT Το ταίριασμα με κάποια συγκεκριμένη θύρα αφετηρίας ή/και προορισμού (αν υπάρχει) εφαρμόζεται μόνο σε πακέτα TCP και UDP. Κατά την δημιουργία συγκρίσεων με θύρες, μπορείτε είτε να χρησιμοποιήσετε τον αριθμό της θύρας, είτε το όνομα της αντίστοιχης υπηρεσίας από το αρχείο /etc/services. Όταν η θύρα εμφανίζεται ως τμήμα του αντικειμένου from, το ταίριασμα θα γίνει με την θύρα της αφετηρίας. Όταν εμφανίζεται ως τμήμα του αντικειμένου to, το ταίριασμα θα γίνει με τη θύρα προορισμού. Για να λειτουργεί η σύγχρονη λογική ταιριάσματος κανόνων, θα πρέπει οπωσδήποτε να υπάρχει η επιλογή θύρας στο αντικείμενο to. Παράδειγμα χρήσης: from any to any port = 80 Οι συγκρίσεις που αναφέρονται σε μια μόνο θύρα, μπορούν να γίνουν με πολλούς διαφορετικούς τρόπους, χρησιμοποιώντας διαφορετικούς τελεστές σύγκρισης. Είναι επίσης δυνατόν να καθοριστούν ολόκληρες περιοχές από θύρες. port "=" | "!=" | "<" | ">" | "<=" | ">=" | "eq" | "ne" | "lt" | "gt" | "le" | "ge". Για να καθορίσετε περιοχές θυρών, χρησιμοποιήστε port "<>" | "><" Μετά τις παραμέτρους για το ταίριασμα της αφετηρίας και του προορισμού, οι παρακάτω δύο παράμετροι είναι υποχρεωτικές για να λειτουργεί η σύγχρονη λογική επεξεργασίας των κανόνων. <acronym>TCP</acronym>_FLAG Τα flags είναι ενεργά μόνο στο φιλτράρισμα του πρωτοκόλλου TCP. Το κάθε γράμμα αντιπροσωπεύει ένα πιθανό flag το για το οποίο γίνεται ανίχνευση στην επικεφαλίδα του πακέτου TCP. Η σύγχρονη λογική επεξεργασίας των κανόνων, χρησιμοποιεί την παράμετρο flags S για την αναγνώριση της έναρξης μια συνεδρίας tcp. STATEFUL Σε ένα κανόνα που επιτρέπει (pass) το πέρασμα των πακέτων, η επιλογή keep state δείχνει ότι θα πρέπει να ενεργοποιείται η λειτουργία stateful filtering όταν το πακέτο ταιριάζει με τα κριτήρια επιλογής. Η επιλογή αυτή είναι υποχρεωτική για τη λειτουργία της σύγχρονης λογικής επεξεργασίας κανόνων. Φιλτράρισμα με Διατήρηση της Κατάστασης (stateful) IPFILTER stateful filtering Το stateful φιλτράρισμα, αντιμετωπίζει την κίνηση του δικτύου ως μιας διπλής κατεύθυνσης ανταλλαγή πακέτων τα οποία δημιουργούν μια συνεδρία. Όταν ενεργοποιηθεί, η διατήρηση της κατάστασης (keep-state) δημιουργεί δυναμικά εσωτερικούς κανόνες για κάθε πακέτο το οποίο ανταλλάσσεται κατά τη διάρκεια αυτής της συνεδρίας. Έχει επίσης τη δυνατότητα να διερευνήσει αν ακολουθούνται οι έγκυροι κανόνες ανταλλαγής μηνυμάτων μεταξύ του αποστολέα και του παραλήπτη. Οποιαδήποτε πακέτα δεν ταιριάζουν με το πρότυπο αυτής της επικοινωνίας, απορρίπτονται ως ψεύτικα. Η διατήρηση της κατάστασης επιτρέπει επίσης να περάσουν τα πακέτα ICMP που σχετίζονται με μια συνεδρία TCP ή UDP. Έτσι, αν ληφθούν πακέτα ICMP τύπου 3 code 4 ως απάντηση κατά τη διάρκεια της επίσκεψης σας σε μια ιστοσελίδα, (η οποία επιτρέπεται από τον αντίστοιχο κανόνα εξερχομένων), θα τους επιτραπεί η είσοδος. Οποιοδήποτε πακέτο για το οποίο το IPF είναι σίγουρο ότι πρόκειται για τμήμα μιας ενεργής συνεδρίας, θα περάσει ακόμα και αν είναι διαφορετικό πρωτόκολλο. Αυτό που συμβαίνει είναι το παρακάτω: Τα πακέτα που προορίζονται να εξέλθουν μέσω της διεπαφής που συνδέεται στο Internet, ελέγχονται αρχικά σύμφωνα με το δυναμικό πίνακα καταστάσεων. Αν το πακέτο ταιριάζει με το επόμενο που αναμένεται σε μια ενεργή συνεδρία, εξέρχεται από το firewall και ταυτόχρονα ενημερώνεται η κατάσταση της συγκεκριμένης συνεδρίας στον παραπάνω δυναμικό πίνακα. Τα υπόλοιπα πακέτα (που δεν ταιριάζουν με κάποια συνεδρία σε εξέλιξη) ελέγχονται σύμφωνα με το σύνολο κανόνων για τα εξερχόμενα πακέτα. Τα πακέτα που έρχονται από τη διεπαφή που είναι συνδεμένη με το Internet, ελέγχονται αρχικά μέσω του δυναμικού πίνακα καταστάσεων. Αν το πακέτο ταιριάζει με το επόμενο που αναμένεται σε μια ενεργή συνεδρία, εξέρχεται από το firewall και ταυτόχρονα ενημερώνεται η κατάσταση της συγκεκριμένης συνεδρίας στον παραπάνω πίνακα. Τα υπόλοιπα πακέτα (που δεν ταιριάζουν με κάποια συνεδρία σε εξέλιξη) ελέγχονται σύμφωνα με το σύνολο κανόνων για τα εισερχόμενα πακέτα. Όταν η επικοινωνία ολοκληρωθεί, διαγράφεται από τον δυναμικό πίνακα καταστάσεων. Το stateful φιλτράρισμα επιτρέπει να εστιάσουμε την προσοχή μας στην αποδοχή ή απόρριψη των νέων συνδέσεων. Αν επιτραπεί μια νέα συνεδρία, όλα τα υπόλοιπα πακέτα της θα επιτρέπονται αυτόματα, ενώ τυχόν ψεύτικα πακέτα θα απορρίπτονται επίσης αυτόματα. Το stateful φιλτράρισμα διαθέτει μια σειρά από προχωρημένες ικανότητες διερεύνησης των πακέτων, με δυνατότητα να αμύνεται σε πολλές διαφορετικές μεθόδους που χρησιμοποιούν οι επιτιθέμενοι. Παράδειγμα Συνόλου Κανόνων για ένα Inclusive Firewall Το παρακάτω σύνολο κανόνων δίνεται ως παράδειγμα για να φτιάξετε ένα ιδιαίτερα ασφαλές inclusive firewall. Ένα inclusive firewall επιτρέπει το πέρασμα μόνο των υπηρεσιών που ταιριάζουν με τους κανόνες που έχει για αποδοχή πακέτων, και απορρίπτει όλα τα υπόλοιπα. Τα firewalls που προστατεύουν άλλα μηχανήματα (τα οποία καλούνται και network firewalls) θα πρέπει να διαθέτουν τουλάχιστον δύο διεπαφές. Η μια διεπαφή συνδέεται με το τοπικό δίκτυο (LAN) το οποίο θεωρείται έμπιστο, και η άλλη με το δημόσιο Internet. Εναλλακτικά, ένα firewall μπορεί να προστατεύει μόνο το σύστημα στο οποίο εκτελείται—αυτό καλείται host based firewall και είναι κατάλληλο ιδιαίτερα για εξυπηρετητές που λειτουργούν σε μη έμπιστα δίκτυα. Όλα τα συστήματα τύπου &unix;, συμπεριλαμβανομένου και του &os;, έχουν σχεδιαστεί να χρησιμοποιούν την διεπαφή lo0 και την IP διεύθυνση 127.0.0.1 για εσωτερική επικοινωνία μέσα στο ίδιο το λειτουργικό σύστημα. Το firewall πρέπει να περιέχει κανόνες που να επιτρέπουν την ελεύθερη και χωρίς περιορισμούς κίνηση των ειδικών αυτών εσωτερικών πακέτων. Οι κανόνες που εξουσιοδοτούν την πρόσβαση προς το Internet, ορίζονται στην διεπαφή του δικτύου που συνδέεται σε αυτό. Οι κανόνες αυτοί ελέγχουν τόσο την εισερχόμενη όσο και την εξερχόμενη κίνηση στο Internet. Η διεπαφή αυτή μπορεί να είναι η tun0 που χρησιμοποιείται στο PPP χρήστη, ή ακόμα και η κάρτα δικτύου που συνδέεται σε ένα DSL router ή modem. Σε περίπτωση που μια ή περισσότερες κάρτες δικτύου συνδέονται σε εσωτερικά ιδιωτικά δίκτυα πίσω από το firewall, θα πρέπει να υπάρχουν οι αντίστοιχοι κανόνες που να επιτρέπουν την ελεύθερη διακίνηση των πακέτων ανάμεσα στις διεπαφές αυτές ή/και στο Internet. Οι κανόνες πρέπει να οργανώνονται σε τρεις κύριες ενότητες: αρχικά όλες οι διεπαφές στις οποίες επιτρέπεται η ελεύθερη διακίνηση δεδομένων, έπειτα η διεπαφή από την οποία εξέρχονται τα πακέτα προς το δημόσιο δίκτυο (Internet) και τέλος η διεπαφή από την οποία λαμβάνονται πακέτα από το Internet. Σε κάθε μια από τις ενότητες των διεπαφών που συνδέονται στο Internet, πρέπει να τοποθετούνται πρώτοι οι κανόνες που ταιριάζουν συχνότερα με την αντίστοιχη κίνηση. Ο τελευταίος κανόνας της ενότητας θα πρέπει να απορρίπτει και να καταγράφει όλα τα πακέτα της συγκεκριμένης διεπαφής/κατεύθυνσης. Η ενότητα των Εξερχομένων (Outbound) στο ακόλουθο σύνολο κανόνων, περιέχει μόνο κανόνες τύπου pass οι οποίοι επιτρέπουν (μέσω κατάλληλων τιμών στις παραμέτρους τους) σε συγκεκριμένες υπηρεσίες να αποκτήσουν πρόσβαση στο Internet. Όλοι οι κανόνες διαθέτουν τις επιλογές quick, on, proto, port και keep state. Οι κανόνες proto tcp περιλαμβάνουν την επιλογή flag ώστε να αναγνωρίζουν την αίτηση έναρξης της συνεδρίας και να ενεργοποιούν τη λειτουργία διατήρησης της κατάστασης (stateful). Στην ενότητα των εισερχόμενων πακέτων (Inbound) που φαίνεται παρακάτω, πρώτοι εμφανίζονται οι κανόνες που χρησιμοποιούνται για την απόρριψη των ανεπιθύμητων πακέτων. Αυτό γίνεται για δύο διαφορετικούς λόγους. Ο πρώτος είναι ότι τα κακόβουλα πακέτα μπορεί εν μέρει να ταιριάζουν με κάποια χαρακτηριστικά της έγκυρης κίνησης. Τα πακέτα αυτά θα πρέπει να απορριφθούν, αντί να γίνουν δεκτά από κάποιο επόμενο κανόνα allow. Ο δεύτερος είναι ότι μπορείτε να απορρίψετε συγκεκριμένα πακέτα τα οποία γνωρίζετε ότι δεν είναι έγκυρα, αλλά σας είναι αδιάφορη η καταγραφή τους. Με τον τρόπο αυτό εμποδίζεται η λήψη και καταγραφή τους από τον τελευταίο κανόνα. Ο τελευταίος κανόνας τυπικά απορρίπτει και καταγράφει όλα τα πακέτα που έφτασαν μέχρι αυτόν. Ο κανόνας αυτός χρησιμοποιείται για την παροχή νομικών αποδείξεων σε περίπτωση που κινήσετε δικαστική διαδικασία κατά ατόμων που προέβησαν σε επιθέσεις στο σύστημα σας. Θα πρέπει επίσης να εξασφαλίσετε ότι το σύστημα σας δεν θα δώσει καμιά απάντηση σε κανένα από τα ανεπιθύμητα πακέτα. Τα πακέτα αυτά θα πρέπει να απορριφθούν και να εξαφανιστούν. Με τον τρόπο αυτό, ο επιτιθέμενος δεν έχει καμιά γνώση αν τα πακέτα του έφτασαν μέχρι το σύστημα σας. Όσο λιγότερα μπορούν να μάθουν οι επιτιθέμενοι σχετικά με το σύστημα σας, τόσο περισσότερο χρόνο θα χρειαστεί να επενδύσουν για να καταφέρουν να σας βλάψουν στα αλήθεια. Οι κανόνες με την επιλογή log first καταγράφουν το συμβάν μόνο την πρώτη φορά που ενεργοποιούνται. Η επιλογή αυτή περιλαμβάνεται στον κανόνα nmap OS fingerprint στο παράδειγμα που φαίνεται παρακάτω. Το βοηθητικό πρόγραμμα security/nmap χρησιμοποιείται συχνά από κακόβουλα άτομα, που προσπαθούν με αυτό τον τρόπο να αναγνωρίσουν το λειτουργικό σύστημα του μηχανήματος σας. Κάθε φορά που υπάρχει καταγραφή από κάποιο κανόνα με την επιλογή log first, θα πρέπει να εκτελέσετε την εντολή ipfstat -hio για να δείτε πόσες φορές έχει ενεργοποιηθεί αυτός ο κανόνας συνολικά. Έτσι θα ξέρετε αν π.χ. σας κάνουν επίθεση υπερχείλισης (flood). Δείτε το αρχείο /etc/services για να βρείτε αριθμούς θυρών που δεν αναγνωρίζετε. Μπορείτε επίσης να επισκεφθείτε την τοποθεσία και να κάνετε αναζήτηση για τη συγκεκριμένη θύρα, ώστε να δείτε ποια υπηρεσία εξυπηρετεί. Δείτε την επόμενη τοποθεσία για τις θύρες που χρησιμοποιούνται συνήθως από κακόβουλα προγράμματα (trojans): . Το παρακάτω σύνολο κανόνων είναι αρκετά πλήρες και πολύ ασφαλές. Δημιουργεί firewall τύπου inclusive, και έχει δοκιμαστεί σε πραγματικές συνθήκες λειτουργίας. Μπορεί να εξυπηρετήσει το ίδιο καλά και το δικό σας σύστημα. Απλώς μετατρέψτε σε σχόλιο τους κανόνες για τις υπηρεσίες που δεν θέλετε να ενεργοποιήσετε. Για να αποφύγετε την καταγραφή ανεπιθύμητων μηνυμάτων, απλώς προσθέστε ένα αντίστοιχο κανόνα απόρριψης (block) στην ενότητα των εισερχομένων (inbound). Θα πρέπει να αλλάξετε το όνομα της διεπαφής dc0 του παραδείγματος, με το πραγματικό όνομα της κάρτας δικτύου που συνδέει το σύστημα σας με το Internet. Για όσους χρησιμοποιούν το PPP χρήστη, το όνομα θα είναι tun0. Προσθέστε τις ακόλουθες καταχωρίσεις στο αρχείο /etc/ipf.rules: ################################################################# # No restrictions on Inside LAN Interface for private network # Not needed unless you have LAN ################################################################# #pass out quick on xl0 all #pass in quick on xl0 all ################################################################# # No restrictions on Loopback Interface ################################################################# pass in quick on lo0 all pass out quick on lo0 all ################################################################# # Interface facing Public Internet (Outbound Section) # Match session start requests originating from behind the # firewall on the private network # or from this gateway server destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # xxx must be the IP address of your ISP's DNS. # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state pass out quick on dc0 proto udp from any to xxx port = 53 keep state # Allow out access to my ISP's DHCP server for cable or DSL networks. # This rule is not needed for 'user ppp' type connection to the # public Internet, so you can delete this whole group. # Use the following rule and check log for IP address. # Then put IP address in commented out rule & delete first rule pass out log quick on dc0 proto udp from any to any port = 67 keep state #pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state # Allow out non-secure standard www function pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow out secure www function https over TLS SSL pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state # Allow out send & get email function pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state # Allow out Time pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state # Allow out nntp news pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state # Allow out gateway & LAN users' non-secure FTP ( both passive & active modes) # This function uses the IPNAT built in FTP proxy function coded in # the nat rules file to make this single rule function correctly. # If you want to use the pkg_add command to install application packages # on your gateway system you need this rule. pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state # Allow out ssh/sftp/scp (telnet/rlogin/FTP replacements) # This function is using SSH (secure shell) pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state # Allow out insecure Telnet pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow out FreeBSD CVSup function pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state # Allow out ping to public Internet pass out quick on dc0 proto icmp from any to any icmp-type 8 keep state # Allow out whois from LAN to public Internet pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state # Block and log only the first occurrence of everything # else that's trying to get out. # This rule implements the default block block out log first quick on dc0 all ################################################################# # Interface facing Public Internet (Inbound Section) # Match packets originating from the public Internet # destined for this gateway server or the private network. ################################################################# # Block all inbound traffic from non-routable or reserved address spaces block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 private IP block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 private IP block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 private IP block in quick on dc0 from 127.0.0.0/8 to any #loopback block in quick on dc0 from 0.0.0.0/8 to any #loopback block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto-config block in quick on dc0 from 192.0.2.0/24 to any #reserved for docs block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect block in quick on dc0 from 224.0.0.0/3 to any #Class D & E multicast ##### Block a bunch of different nasty things. ############ # That I do not want to see in the log # Block frags block in quick on dc0 all with frags # Block short tcp packets block in quick on dc0 proto tcp all with short # block source routed packets block in quick on dc0 all with opt lsrr block in quick on dc0 all with opt ssrr # Block nmap OS fingerprint attempts # Log first occurrence of these so I can get their IP address block in log first quick on dc0 proto tcp from any to any flags FUP # Block anything with special options block in quick on dc0 all with ipopts # Block public pings block in quick on dc0 proto icmp all icmp-type 8 # Block ident block in quick on dc0 proto tcp from any to any port = 113 # Block all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 block in log first quick on dc0 proto tcp/udp from any to any port = 137 block in log first quick on dc0 proto tcp/udp from any to any port = 138 block in log first quick on dc0 proto tcp/udp from any to any port = 139 block in log first quick on dc0 proto tcp/udp from any to any port = 81 # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP's DHCP server as it's the only # authorized source to send this packet type. Only necessary for # cable or DSL configurations. This rule is not needed for # 'user ppp' type connection to the public Internet. # This is the same IP address you captured and # used in the outbound section. pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state # Allow in standard www function because I have apache server pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID/PW passed over public Internet as clear text. # Delete this sample group if you do not have telnet server enabled. #pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state # Allow in secure FTP, Telnet, and SCP from public Internet # This function is using SSH (secure shell) pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state # Block and log only first occurrence of all remaining traffic # coming into the firewall. The logging of only the first # occurrence avoids filling up disk with Denial of Service logs. # This rule implements the default block. block in log first quick on dc0 all ################### End of rules file ##################################### <acronym>NAT</acronym> NAT IP masquerading NAT network address translation NAT Το NAT είναι ακρωνύμιο των λέξεων Network Address Translation ή Μετάφραση Διευθύνσεων Δικτύου. Για όσους είναι εξοικειωμένοι με το &linux;, βασίζεται στην αρχή του IP Masquerading. Στην πραγματικότητα το NAT και το IP Masquerading είναι το ίδιο πράγμα. Μια από τις πολλές δυνατότητες που παρέχει η λειτουργία NAT του IPF, είναι και η δυνατότητα να έχουμε ένα ιδιωτικό τοπικό δίκτυο (LAN) πίσω από το firewall το οποίο να μοιράζεται μια μοναδική δημόσια διεύθυνση IP στο Internet. Ίσως να αναρωτηθείτε γιατί να θέλει κάποιος να το κάνει αυτό. Οι ISPs συνήθως αποδίδουν δυναμικές διευθύνσεις σε μη εταιρικούς πελάτες. Αυτό ουσιαστικά σημαίνει ότι η διεύθυνση IP που αποδίδεται στο μηχάνημα σας, μπορεί να είναι διαφορετική κάθε φορά που κάνετε κλήση για να συνδεθείτε. Για τους χρήστες DSL modem και router, η αλλαγή διεύθυνσης πραγματοποιείται κάθε φορά που ενεργοποιείται το modem. Η διεύθυνση IP που σας αποδίδεται από τον ISP σας, είναι αυτή με την οποία φαίνεστε στο Internet. Ας υποθέσουμε τώρα ότι έχετε πέντε PC στο σπίτι σας, και χρειάζεστε σε όλα σύνδεση Internet. Κανονικά, θα έπρεπε να πληρώσετε τον ISP σας χωριστό λογαριασμό για κάθε PC και να διαθέτετε πέντε γραμμές τηλεφώνου. Με το NAT, χρειάζεστε μόνο ένα λογαριασμό με τον ISP σας. Μπορείτε απλώς να συνδέσετε τα τέσσερα PC σε ένα διανομέα ή switch στο οποίο θα συνδέσετε επίσης και το &os; μηχάνημα σας. Το μηχάνημα αυτό θα ενεργεί ως πύλη του τοπικού σας δικτύου για το Internet. Το NAT θα μεταφράσει αυτόματα τις ιδιωτικές διευθύνσεις IP του κάθε μηχανήματος στην μοναδική δημόσια IP διεύθυνση που έχετε, καθώς το πακέτο φεύγει από το firewall και κατευθύνεται προς το Internet. Εκτελεί επίσης και την αντίστροφη μετάφραση για τα πακέτα που επιστρέφουν. Υπάρχει μια ειδική περιοχή διευθύνσεων IP που έχουν παραχωρηθεί για χρήση σε τοπικά δίκτυα με NAT. Σύμφωνα με το RFC 1918, μπορείτε να χρησιμοποιήσετε για αυτό το σκοπό τις παρακάτω περιοχές, οι οποίες δεν δρομολογούνται ποτέ απευθείας στο δημόσιο Internet: Αρχικό IP 10.0.0.0 - Τελικό IP 10.255.255.255 Αρχικό IP 172.16.0.0 - Τελικό IP 172.31.255.255 Αρχικό IP 192.168.0.0 - Τελικό IP 192.168.255.255 IP<acronym>NAT</acronym> NAT and IPFILTER ipnat Οι κανόνες του NAT φορτώνονται με τη χρήση της εντολής ipnat. Τυπικά, οι κανόνες του NAT αποθηκεύονται στο αρχείο /etc/ipnat.rules. Δείτε τη σελίδα manual του &man.ipnat.1; για λεπτομέρειες. Για να αλλάξετε τους κανόνες του NAT καθώς αυτό εκτελείται, τροποποιήστε το αρχείο που τους περιέχει, και εκτελέστε την εντολή ipnat με την παράμετρο για να διαγράψετε τους εσωτερικούς κανόνες του NAT και να αδειάσετε όλες τις ενεργές καταχωρίσεις του πίνακα μεταφράσεων. Για να φορτώσετε τους κανόνες του NAT από την αρχή, εκτελέστε μια εντολή όπως την παρακάτω: &prompt.root; ipnat -CF -f /etc/ipnat.rules Για να δείτε κάποια στατιστικά σχετικά με το NAT, χρησιμοποιήστε την παρακάτω εντολή: &prompt.root; ipnat -s Για να δείτε μια λίστα με τις τρέχουσες καταχωρίσεις του πίνακα NAT, χρησιμοποιήστε την παρακάτω εντολή: &prompt.root; ipnat -l Για να ενεργοποιήσετε την λεπτομερή απεικόνιση μηνυμάτων και να δείτε πληροφορίες που σχετίζονται με την επεξεργασία των κανόνων και τους ενεργούς κανόνες και καταχωρίσεις στον πίνακα, γράψτε: &prompt.root; ipnat -v Κανόνες του IP<acronym>NAT</acronym> Οι κανόνες του NAT είναι αρκετά ευέλικτοι, και διαθέτουν πλήθος δυνατοτήτων ώστε να καλύπτουν τις ανάγκες των οικιακών αλλά και των επιχειρησιακών χρηστών. Η σύνταξη των κανόνων που παρουσιάζεται εδώ, έχει απλοποιηθεί ώστε να συμβαδίζει με τη συνήθη χρήση σε μη-εμπορικά περιβάλλοντα. Για πιο πλήρη περιγραφή της σύνταξης, δείτε τη σελίδα manual του &man.ipnat.5;. Η σύνταξη ενός κανόνα NAT μοιάζει με την παρακάτω: map IF LAN_IP_RANGE -> PUBLIC_ADDRESS Ο κανόνας ξεκινάει με τη λέξη map. Αντικαταστήστε το IF με την εξωτερική διεπαφή (τη κάρτα δικτύου που συνδέεται στο Internet). Η παράμετρος LAN_IP_RANGE είναι η περιοχή διευθύνσεων που χρησιμοποιείται από το εσωτερικό σας δίκτυο. Στην πραγματικότητα θα μοιάζει με κάτι σαν το 192.168.1.0/24. Η παράμετρος PUBLIC_ADDRESS μπορεί να είναι είτε η εξωτερική IP διεύθυνση, είτε η ειδική λέξη 0/32, η οποία σημαίνει ότι θα χρησιμοποιηθεί η IP διεύθυνση που έχει αποδοθεί στο IF. Πως λειτουργεί το <acronym>NAT</acronym> Ένα πακέτο φτάνει στο firewall από το LAN με προορισμό το Internet. Περνάει διαμέσου των κανόνων φιλτραρίσματος εξερχομένων, όπου γίνεται η επεξεργασία του από το NAT. Οι κανόνες εφαρμόζονται από τον πρώτο και προς τα κάτω, και κερδίζει ο πρώτος που ταιριάζει. Ο έλεγχος γίνεται με βάση τη διεπαφή από την οποία λήφθηκε το πακέτο και τη διεύθυνση IP από την οποία προέρχεται. Όταν το όνομα της διεπαφής ενός πακέτου ταιριάζει με κάποιο κανόνα του NAT, η διεύθυνση IP της αφετηρίας (που προέρχεται από το ιδιωτικό δίκτυο) ελέγχεται για να εξακριβωθεί αν ταιριάζει με την περιοχή διευθύνσεων που καθορίζεται στην αριστερά πλευρά του συμβόλου (βέλος) του κανόνα NAT. Αν ταιριάζει, η διεύθυνση του πακέτου ξαναγράφεται, χρησιμοποιώντας τη δημόσια διεύθυνση IP η οποία παρέχεται από το 0/32. Το NAT δημιουργεί μια καταχώριση στον εσωτερικό του πίνακα, έτσι ώστε όταν επιστρέψει η απάντηση από το Internet, να μπορεί να αντιστοιχηθεί ξανά στην αρχική ιδιωτική διεύθυνση IP και να περάσει έπειτα από τους κανόνες του φίλτρου για περαιτέρω επεξεργασία. Ενεργοποιώντας το IP<acronym>NAT</acronym> Για να ενεργοποιήσετε το IPNAT, προσθέστε τις παρακάτω γραμμές στο /etc/rc.conf. Για να επιτρέψετε στο μηχάνημα σας να δρομολογεί πακέτα μεταξύ διεπαφών δικτύου: gateway_enable="YES" Για να ξεκινάει αυτόματα το IPNAT σε κάθε εκκίνηση: ipnat_enable="YES" Για να καθορίσετε από που επιθυμείτε να φορτώνονται οι κανόνες του IPNAT: ipnat_rules="/etc/ipnat.rules" Το <acronym>NAT</acronym> σε Ένα Μεγάλο Τοπικό Δίκτυο Για τοπικά δίκτυα με μεγάλο αριθμό υπολογιστών, ή για δίκτυα που διασυνδέουν περισσότερα από ένα LAN, η διαδικασία της μετατροπής όλων αυτών των ιδιωτικών διευθύνσεων σε μια μοναδική δημόσια διεύθυνση, δημιουργεί πρόβλημα κατανομής πόρων, καθώς χρησιμοποιούνται πολλές φορές οι ίδιοι αριθμοί θυρών, οδηγώντας τα PC του δικτύου σε συγκρούσεις. Υπάρχουν δύο τρόποι για να ελαττώσουμε αυτό το πρόβλημα. Ανάθεση των θυρών που θα Χρησιμοποιηθούν Ένα συνηθισμένος κανόνας NAT μοιάζει με τον παρακάτω: map dc0 192.168.1.0/24 -> 0/32 Στον παραπάνω κανόνα, η θύρα αφετηρίας του πακέτου παραμένει αναλλοίωτη καθώς το πακέτο διέρχεται μέσω του IPNAT. Αν προσθέσετε την λέξη-κλειδί portmap, μπορείτε να ρυθμίσετε το IPNAT να χρησιμοποιεί θύρες που ανήκουν σε μια καθορισμένη περιοχή. Για παράδειγμα, ο παρακάτω κανόνας θα οδηγήσει το NAT να τροποποιήσει την θύρα της αφετηρίας, ώστε να είναι μέσα στην περιοχή που φαίνεται: map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp 20000:60000 Μπορούμε επίσης να απλοποιήσουμε ακόμα περισσότερο τη διαδικασία χρησιμοποιώντας τη λέξη auto ώστε το IPNAT να καθορίζει από μόνο του ποιες θύρες είναι διαθέσιμες για χρήση: map dc0 192.168.1.0/24 -> 0/32 portmap tcp/udp auto Χρησιμοποιώντας ένα Απόθεμα Δυναμικών Διευθύνσεων Σε ένα πολύ μεγάλο τοπικό δίκτυο, αργά ή γρήγορα φτάνουμε στο σημείο που μια μοναδική δημόσια διεύθυνση δεν επαρκεί για να καλύψει τόσες πολλές ιδιωτικές. Αν υπάρχει διαθέσιμο ένα εύρος δημοσίων διευθύνσεων, μπορούν να χρησιμοποιηθούν ως απόθεμα (pool), επιτρέποντας στην IPNAT να επιλέξει μια από αυτές καθώς αντιστοιχεί τα πακέτα κατά την έξοδο τους προς το δημόσιο δίκτυο. Για παράδειγμα, αντί να αντιστοιχούν όλα τα πακέτα μέσω μιας μοναδικής δημόσιας IP διεύθυνσης όπως παρακάτω: map dc0 192.168.1.0/24 -> 204.134.75.1 μπορούμε να χρησιμοποιήσουμε ένα εύρος IP διευθύνσεων, είτε με τη χρήση μάσκας δικτύου: map dc0 192.168.1.0/24 -> 204.134.75.0/255.255.255.0 είτε με συμβολισμό CIDR: map dc0 192.168.1.0/24 -> 204.134.75.0/24 Ανακατεύθυνση Θυρών Είναι κοινή πρακτική να εγκαθίστανται υπηρεσίες όπως ο εξυπηρετητής ιστοσελίδων, ταχυδρομείου, βάσης δεδομένων και DNS σε διαφορετικά PC στο τοπικό δίκτυο. Στην περίπτωση αυτή, η κίνηση πακέτων από αυτά τα μηχανήματα εξακολουθεί να χρειάζεται το NAT, αλλά χρειάζεται επίσης να υπάρχει κάποιος τρόπος να κατευθύνεται η εισερχόμενη κίνηση στα σωστά PC του δικτύου. Το IPNAT έχει τις κατάλληλες δυνατότητες για την επίλυση αυτού του προβλήματος. Για παράδειγμα, έστω ότι ένας εξυπηρετητής ιστοσελίδων βρίσκεται στην διεύθυνση LAN 10.0.10.25 και η μοναδική δημόσια IP είναι 20.20.20.5. Ο κανόνας που θα γράφατε θα έμοιαζε με τον παρακάτω: rdr dc0 20.20.20.5/32 port 80 -> 10.0.10.25 port 80 ή: rdr dc0 0.0.0.0/0 port 80 -> 10.0.10.25 port 80 ή για ένα εξυπηρετητή DNS με διεύθυνση στο τοπικό δίκτυο 10.0.10.33 ο οποίος πρέπει να δέχεται αναζητήσεις από το δημόσιο δίκτυο: rdr dc0 20.20.20.5/32 port 53 -> 10.0.10.33 port 53 udp FTP και <acronym>NAT</acronym> Το FTP είναι ένας δεινόσαυρος που έχει απομείνει από την εποχή που το Internet ήταν στα αρχικά του στάδια, όπου τα ερευνητικά εργαστήρια των πανεπιστήμιων ήταν συνδεμένα μεταξύ τους με μισθωμένες γραμμές και οι ερευνητές το χρησιμοποιούσαν για να στέλνουν αρχεία ο ένας στον άλλο. Την εποχή εκείνη, δεν υπήρχαν ανησυχίες σχετικά με την ασφάλεια. Με το πέρασμα του χρόνου, το FTP θάφτηκε στο πίσω μέρος του ταχέως εξελισσόμενου Internet. Δεν εξελίχθηκε ποτέ ώστε να ξεπεράσει προβλήματα ασφάλειας, όπως π.χ. το γεγονός ότι στέλνει το όνομα και τον κωδικό του χρήστη ως απλό κείμενο. Το FTP έχει δυο καταστάσεις λειτουργίας, την ενεργή και την παθητική. Η διαφορά είναι στο πως γίνεται η ανάκτηση του καναλιού δεδομένων. Η παθητική λειτουργία είναι πιο ασφαλής, καθώς το κανάλι δεδομένων αποτελεί το κύριο κανάλι της συνεδρίας. Μπορείτε να βρείτε πολύ καλή περιγραφή του πρωτοκόλλου και των διαφορετικών τρόπων λειτουργίας του, στο . Κανόνες του IP<acronym>NAT</acronym> Το IPNAT διαθέτει μια ειδική επιλογή για διαμεσολάβηση FTP (proxy) η οποία μπορεί να καθοριστεί στον κατάλληλο κανόνα του NAT. Μπορεί να παρακολουθήσει όλα τα εξερχόμενα πακέτα για να ανιχνεύσει την έναρξη μιας ενεργής ή παθητικής συνεδρίας FTP, και να δημιουργήσει δυναμικά προσωρινούς κανόνες στο φίλτρο που να περιέχουν μόνο τον αριθμό της θύρας που χρησιμοποιείται από το κανάλι δεδομένων. Αυτό εξαλείφει το πρόβλημα ασφάλειας που δημιουργείται από το γεγονός ότι διαφορετικά θα χρειαζόταν να ανοιχθεί μια μεγάλη περιοχή θυρών (στην υψηλή περιοχή) στο firewall. Ο παρακάτω κανόνας χειρίζεται όλα τα δεδομένα για το εσωτερικό δίκτυο (LAN): map dc0 10.0.10.0/29 -> 0/32 proxy port 21 ftp/tcp Ο παρακάτω κανόνας χειρίζεται την κίνηση FTP από την πύλη (gateway): map dc0 0.0.0.0/0 -> 0/32 proxy port 21 ftp/tcp Ο παρακάτω κανόνας χειρίζεται όλη την κίνηση από το εσωτερικό LAN που δεν ανήκει στο πρωτόκολλο FTP: map dc0 10.0.10.0/29 -> 0/32 Ο κανόνας χαρτογράφησης του FTP τοποθετείται πριν από τον κανονικό κανόνα χαρτογράφησης. Κάθε πακέτο ελέγχεται αρχικά από τον κανόνα που βρίσκεται στην κορυφή. Αν ταιριάζει στη διεπαφή και στην ιδιωτική διεύθυνση IP και πρόκειται για πακέτο FTP, ο διαμεσολαβητής FTP δημιουργεί προσωρινούς κανόνες στο φίλτρο οι οποίοι επιτρέπουν την εισερχόμενη και εξερχόμενη κίνηση FTP ενώ ταυτόχρονα εκτελούν και την απαραίτητη μετάφραση NAT. Όλα τα πακέτα που δεν ανήκουν σε μετάδοση FTP δεν ταιριάζουν με τον πρώτο κανόνα, έτσι κατευθύνονται στον τρίτο κανόνα, εξετάζονται όσο αφορά τη διεπαφή και το IP από το οποίο προέρχονται, και γίνεται η αντίστοιχη μετάφραση τους από το NAT. Κανόνες Φίλτρου για το IP<acronym>NAT</acronym> Όταν χρησιμοποιείται ο μεσολαβητής FTP, χρειάζεται μόνο ένας κανόνας για το NAT. Χωρίς το μεσολαβητή FTP, χρειάζονται οι παρακάτω τρεις κανόνες: # Allow out LAN PC client FTP to public Internet # Active and passive modes pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state # Allow out passive mode data channel high order port numbers pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state # Active mode let data channel in from FTP server pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state IPFW firewall IPFW Το IPFIREWALL (IPFW) είναι λογισμικό που αναπτύχθηκε για το &os;. Έχει γραφεί και συντηρείται από εθελοντές που ανήκουν στο Project. Χρησιμοποιεί τους κλασικούς κανόνες χωρίς διατήρηση της κατάστασης (stateless) καθώς και μια τεχνική κωδικοποίησης που επιτυγχάνει αυτό που αναφέρεται ως Απλή Stateful Λογική (Simple Stateful Logic). Το υπόδειγμα κανόνων για το IPFW (στα αρχεία /etc/rc.firewall και /etc/rc.firewall6) της τυπικής εγκατάστασης του &os; είναι μάλλον απλό και θα χρειαστεί να κάνετε κάποιες αλλαγές πριν το χρησιμοποιήσετε. Το παράδειγμα δεν χρησιμοποιεί φιλτράρισμα τύπου stateful. Η stateful λειτουργία είναι ευεργετική στις περισσότερες περιπτώσεις, έτσι δεν θα χρησιμοποιήσουμε αυτό το παράδειγμα ως βάση αυτής της ενότητας. Η σύνταξη των κανόνων stateless του IPFW έχει ενισχυθεί με εξελιγμένες δυνατότητες επιλογής οι οποίες συνήθως ξεπερνάνε κατά πολύ τις τυπικές γνώσεις του ατόμου που καλείται να το ρυθμίσει. Το IPFW απευθύνεται στον επαγγελματία χρήστη ή τον τεχνικά προχωρημένο χομπίστα, ο οποίος έχει ανάγκη προχωρημένου φιλτραρίσματος πακέτων. Η πραγματική δύναμη των κανόνων του IPFW αποκαλύπτεται μόνο αν διαθέτετε προχωρημένες γνώσεις σχετικά με το πως διαφορετικά πρωτόκολλα δημιουργούν και χρησιμοποιούν την επικεφαλίδα των πακέτων τους. Τέτοιο επίπεδο επεξηγήσεων είναι πέρα από το σκοπό αυτής της ενότητας του Εγχειριδίου. Το IPFW αποτελείται από επτά εξαρτήματα. Το βασικό εξάρτημα είναι ο επεξεργαστής κανόνων του firewall στον πυρήνα, με ενσωματωμένη τη δυνατότητα καταγραφής. Τα υπόλοιπα εξαρτήματα είναι το σύστημα καταγραφής (logging), ο κανόνας divert ο οποίος ενεργοποιεί τη λειτουργία NAT, καθώς και οι προχωρημένες δυνατότητες ειδικού σκοπού: το σύστημα διαμόρφωσης κίνησης (traffic shaper) dummynet, η δυνατότητα προώθησης μέσω του fwd rule, η δυνατότητα γεφύρωσης (bridge) καθώς και η δυνατότητα απόκρυψης (ipstealth). To IPFW υποστηρίζει τόσο το πρωτόκολλο IPv4 όσο και το IPv6. Ενεργοποιώντας το IPFW IPFW enabling Το IPFW περιλαμβάνεται στην βασική εγκατάσταση του &os; ως άρθρωμα του πυρήνα το οποίο μπορεί να φορτωθεί δυναμικά. Το σύστημα θα φορτώσει δυναμικά το άρθρωμα όταν βρει την καταχώριση firewall_enable="YES" στο αρχείο /etc/rc.conf. Δεν χρειάζεται να μεταγλωττίσετε το IPFW μέσα στον πυρήνα, εκτός αν θέλετε να χρησιμοποιήσετε τις λειτουργίες NAT που παρέχει. Αφού επανεκκινήσετε το σύστημα σας με την καταχώριση firewall_enable="YES" στο rc.conf, θα δείτε με άσπρα έντονα γράμματα το ακόλουθο μήνυμα κατά τη διαδικασία της εκκίνησης: ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled Το άρθρωμα έχει ενσωματωμένη τη δυνατότητα καταγραφής. Για να ενεργοποιήσετε την καταγραφή και να θέσετε το επίπεδο λεπτομέρειας, υπάρχουν κάποιες ρυθμίσεις που μπορείτε να θέσετε στο /etc/sysctl.conf. Προσθέτοντας τις παρακάτω καταχωρίσεις, θα ενεργοποιηθεί η καταγραφή στις επόμενες εκκινήσεις: net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=5 Επιλογές του Πυρήνα kernel options IPFIREWALL kernel options IPFIREWALL_VERBOSE kernel options IPFIREWALL_VERBOSE_LIMIT IPFW kernel options Δεν είναι υποχρεωτικό να ενεργοποιήσετε το IPFW μεταγλωττίζοντας τις παρακάτω επιλογές στον πυρήνα του &os;, εκτός και αν θέλετε να χρησιμοποιήσετε NAT. Ο σκοπός αυτής της παρουσίασης είναι καθαρά ενημερωτικός. options IPFIREWALL Η επιλογή αυτή ενεργοποιεί το IPFW ως μέρος του πυρήνα. options IPFIREWALL_VERBOSE Ενεργοποιεί την καταγραφή των πακέτων που περνούν μέσω του IPFW και περιλαμβάνουν τη λέξη log στον κανόνα τους. options IPFIREWALL_VERBOSE_LIMIT=5 Περιορίζει τον πλήθος των πακέτων που καταγράφονται μέσω του &man.syslogd.8; σε συγκεκριμένο αριθμό ανά καταχώριση. Η ρύθμιση είναι χρήσιμη σε εχθρικά περιβάλλοντα στα οποία είναι επιθυμητή η καταγραφή. Με αυτό τον τρόπο μπορεί να αποφευχθεί μια πιθανή επίθεση με στόχο την υπερχείλιση των αρχείων καταγραφής. kernel options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_DEFAULT_TO_ACCEPT Η επιλογή αυτή αφήνει τα πάντα να περνάνε μέσα από το firewall, το οποίο είναι καλή ιδέα την πρώτη φορά που ρυθμίζετε το firewall σας. kernel options IPDIVERT options IPDIVERT Η επιλογή αυτή ενεργοποιεί τη λειτουργία NAT. Το firewall θα απορρίπτει όλα τα πακέτα που κατευθύνονται από και προς το μηχάνημα, αν δεν περιλάβετε την επιλογή IPFIREWALL_DEFAULT_TO_ACCEPT ή αν δεν ρυθμίσετε ένα κατάλληλο κανόνα που να επιτρέπει αυτές τις συνδέσεις. Επιλογές στο <filename>/etc/rc.conf</filename> Ενεργοποιήστε το firewall: firewall_enable="YES" Για να επιλέξετε ένα από τους προεπιλεγμένους τύπους firewall που υποστηρίζονται από το &os;, διαβάστε το αρχείο /etc/rc.firewall και δημιουργήστε μια εγγραφή όπως την παρακάτω: firewall_type="open" Οι διαθέσιμες τιμές για αυτή τη ρύθμιση είναι: open — επιτρέπει τη διέλευση όλης της κίνησης. client — προστατεύει μόνο το συγκεκριμένο μηχάνημα. simple — προστατεύει ολόκληρο το δίκτυο. closed — απενεργοποιεί εντελώς την κίνηση πακέτων, εκτός από την εσωτερική διεπαφή (loopback). UNKNOWN — απενεργοποιεί την φόρτωση κανόνων του firewall. filename — το πλήρες μονοπάτι του αρχείου που περιέχει τους κανόνες του firewall. Μπορείτε να χρησιμοποιήσετε δύο διαφορετικούς τρόπους για να φορτώσετε προσαρμοσμένους κανόνες στο ipfw firewall. Ο ένας είναι θέτοντας τη μεταβλητή firewall_type στην απόλυτη διαδρομή του αρχείου που περιέχει τους κανόνες του firewall, χωρίς να δώσετε ορίσματα στην γραμμή εντολών για το ίδιο το &man.ipfw.8;. Το αρχείο κανόνων που φαίνεται παρακάτω, απορρίπτει όλη την εισερχόμενη και εξερχόμενη κίνηση: add deny in add deny out Από την άλλη μεριά, είναι επίσης δυνατό να θέσετε τη μεταβλητή firewall_script στην απόλυτη διαδρομή ενός εκτελέσιμου script που περιλαμβάνει μια σειρά από εντολές ipfw που θα εκτελεστούν κατά την εκκίνηση. Ένα έγκυρο τέτοιο script το οποίο είναι αντίστοιχο με το αρχείο κανόνων που δείξαμε παραπάνω, είναι το ακόλουθο: #!/bin/sh ipfw -q flush ipfw add deny in ipfw add deny out Αν θέσετε την τιμή του firewall_type είτε σε client είτε σε simple, θα πρέπει να ελέγξετε ότι οι προεπιλεγμένοι κανόνες που περιέχονται στο /etc/rc.firewall ταιριάζουν με τις ρυθμίσεις του συγκεκριμένου μηχανήματος. Παρατηρήστε επίσης ότι τα παραδείγματα που χρησιμοποιούνται σε αυτό το κεφάλαιο αναμένουν να να έχετε θέσει τη μεταβλητή firewall_script στην τιμή /etc/ipfw.rules. Ενεργοποιήστε την καταγραφή: firewall_logging="YES" Το μόνο πράγμα που κάνει η μεταβλητή firewall_logging είναι να θέσει την τιμή της μεταβλητής sysctl net.inet.ip.fw.verbose στην τιμή 1 (δείτε το ). Δεν υπάρχει μεταβλητή του rc.conf που να ορίζει περιορισμούς στην καταγραφή, αλλά αυτό μπορεί να ρυθμιστεί μέσω της παραπάνω μεταβλητής sysctl είτε χειροκίνητα, είτε μέσω του αρχείου /etc/sysctl.conf: net.inet.ip.fw.verbose_limit=5 Αν το μηχάνημα σας λειτουργεί ως πύλη (gateway), δηλαδή παρέχει υπηρεσία μετάφρασης διευθύνσεων δικτύου (Network Address Translation, NAT) μέσω του &man.natd.8;, παρακαλούμε να διαβάσετε το για πληροφορίες σχετικά με τις ρυθμίσεις που απαιτούνται στο αρχείο /etc/rc.conf. Η Εντολή IPFW ipfw Η εντολή ipfw είναι ο συνήθης τρόπος για την προσθήκη η διαγραφή κανόνων στους εσωτερικούς ενεργούς κανόνες του firewall, καθώς αυτό εκτελείται. Το πρόβλημα με τη χρήση αυτής της μεθόδου είναι ότι οι αλλαγές χάνονται με τον τερματισμό λειτουργίας του μηχανήματος. Μπορείτε να γράψετε όλους τους κανόνες σας σε ένα αρχείο και να το χρησιμοποιείτε για να τους φορτώνετε στην εκκίνηση. Μπορείτε να χρησιμοποιήσετε το ίδιο αρχείο για να αντικαταστήσετε τους τρέχοντες κανόνες του firewall, την ώρα που αυτό εκτελείται. Αυτός είναι και ο συνιστώμενος τρόπος που χρησιμοποιούμε στα παραδείγματα μας. Η εντολή ipfw είναι επίσης χρήσιμη για να απεικονίζει τους τρέχοντες κανόνες στη κονσόλα σας. Το σύστημα καταγραφής χρήσης της IPFW δημιουργεί αυτόματα ένα μετρητή για κάθε κανόνα, ο οποίος μετράει πόσα πακέτα ταίριαξαν με αυτόν. Κατά τη διάρκεια των δοκιμών, η δυνατότητα να ελέγξετε την τιμή του μετρητή είναι ένας τρόπος για να διαπιστώσετε αν ο κανόνας λειτουργεί κανονικά. Για να δείτε όλους τους κανόνες με τη σειρά: &prompt.root; ipfw list Για να δείτε μια λίστα όλων των κανόνων, μαζί με την ώρα που ενεργοποιήθηκε τελευταία φορά ο κάθε κανόνας, γράψτε: &prompt.root; ipfw -t list Το επόμενο παράδειγμα δείχνει τον αριθμό των πακέτων που ταίριαξαν μαζί με τον αντίστοιχο κανόνα. Η πρώτη στήλη δείχνει τον αριθμό του κανόνα, ακολουθείται από τον αριθμό πακέτων που ταίριαξαν (πρώτα τα εξερχόμενα και μετά τα εισερχόμενα) και τέλος από τον ίδιο τον κανόνα. &prompt.root; ipfw -a list Για να δείτε μια λίστα που να περιλαμβάνει τόσο τους δυναμικούς όσο και τους στατικούς κανόνες: &prompt.root; ipfw -d list Για να δείτε και τους δυναμικούς κανόνες που έχουν λήξει: &prompt.root; ipfw -d -e list Για να μηδενίσετε τους μετρητές: &prompt.root; ipfw zero Για να μηδενίσετε τους μετρητές μόνο για τον κανόνα με τον αριθμό NUM: &prompt.root; ipfw zero NUM Το Σύνολο Κανόνων του IPFW Ως σύνολο κανόνων στο IPFW, ορίζουμε μια ομάδα κανόνων που έχουν γραφεί για να επιτρέπουν ή να απορρίπτουν πακέτα ανάλογα με τις τιμές που περιέχονται σε αυτά. Η διπλής κατεύθυνσης ανταλλαγή πακέτων μεταξύ υπολογιστών αποτελεί μια συνεδρία. Το σύνολο κανόνων του firewall επεξεργάζεται τόσο τα πακέτα που έρχονται από το Internet, όσο και τα πακέτα που παράγονται από το σύστημα ως απάντηση σε αυτά. Κάθε υπηρεσία TCP/IP (π.χ. telnet, www, mail, κ.λ.π.) καθορίζεται από το πρωτόκολλο και την προνομιακή (privileged) θύρα που χρησιμοποιεί για να δέχεται αιτήματα εξυπηρέτησης. Τα πακέτα που προορίζονται για μια συγκεκριμένη υπηρεσία, ξεκινούν από τη διεύθυνση αφετηρίας χρησιμοποιώντας μια μη-προνομιακή θύρα και καταλήγουν στη συγκεκριμένη θύρα υπηρεσίας στον προορισμό. Όλες οι παραπάνω παράμετροι (θύρες και διευθύνσεις) μπορούν να χρησιμοποιηθούν ως κριτήρια επιλογής για την δημιουργία κανόνων που επιτρέπουν ή εμποδίζουν την πρόσβαση σε υπηρεσίες. IPFW rule processing order Όταν ένα πακέτο εισέρχεται στο firewall, συγκρίνεται με βάση τον πρώτο κανόνα. Η σύγκριση συνεχίζεται διαδοχικά με τους υπόλοιπους κανόνες, από τον πρώτο προς τον τελευταίο, με βάση τον αύξοντα αριθμό τους. Όταν το πακέτο ταιριάξει με τις παραμέτρους επιλογής κάποιου κανόνα, εκτελείται η οδηγία που αναφέρεται στο πεδίο ενεργειών του κανόνα αυτού και η αναζήτηση κανόνων για το συγκεκριμένο πακέτο τερματίζεται. Σε αυτή τη μέθοδο αναζήτησης, ο πρώτος κανόνας που ταιριάζει, είναι ο νικητής. Αν το πακέτο δεν ταιριάζει με κανένα από τους κανόνες, θα ληφθεί από τον υποχρεωτικό προεπιλεγμένο κανόνα του IPFW, με αριθμό 65535, ο οποίος εμποδίζει τη διέλευση όλων των πακέτων, και τα απορρίπτει χωρίς να στείλει καμιά απάντηση στον αρχικό αποστολέα τους. Η αναζήτηση συνεχίζεται μετά από κανόνες τύπου count, skipto και tee. Οι οδηγίες που φαίνονται εδώ, βασίζονται στη χρήση κανόνων που περιέχουν τις οδηγίες keep state, limit, in, out και via. Αυτές είναι και οι βασικές λειτουργίες για την δόμηση ενός firewall τύπου inclusive με stateful λειτουργία. Να δίνετε μεγάλη προσοχή όταν δουλεύετε με τους κανόνες ενός firewall. Μπορεί άθελα σας να κλειδωθείτε έξω από το σύστημα σας. Σύνταξη Κανόνων IPFW rule syntax Στην ενότητα αυτή, θα παρουσιάσουμε μια απλοποιημένη σύνταξη κανόνων. Δείχνουμε μόνο ότι χρειάζεται για να δημιουργηθεί ένα τυποποιημένο σύνολο κανόνων για ένα inclusive firewall. Για πλήρη περιγραφή, δείτε τη σελίδα manual του &man.ipfw.8;. Οι κανόνες περιέχουν λέξεις-κλειδιά. Οι λέξεις αυτές θα πρέπει να κωδικοποιηθούν με συγκεκριμένη σειρά από τα αριστερά προς τα δεξιά της γραμμής. Οι λέξεις-κλειδιά φαίνονται παρακάτω με έντονα γράμματα. Μερικές λέξεις έχουν υπο-επιλογές οι οποίες μπορεί να είναι επίσης λέξεις-κλειδιά και να περιλαμβάνουν επίσης ακόμα περισσότερες υπο-επιλογές. Η αρχή ενός σχολίου, σηματοδοτείται με το σύμβολο #, το οποίο μπορεί να εμφανίζεται στο τέλος μιας γραμμής κανόνα, ή και σε μια δική του γραμμή. Οι κενές γραμμές αγνοούνται. CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL CMD Για να γίνει η προσθήκη ενός νέου κανόνα στον εσωτερικό πίνακα, τοποθετείται μπροστά από αυτόν η παράμετρος add. RULE_NUMBER Κάθε κανόνας πρέπει να διαθέτει ένα αριθμό που να τον χαρακτηρίζει. ACTION Ένας κανόνας μπορεί να σχετίζεται με μια ή περισσότερες ενέργειες, οι οποίες εκτελούνται όταν το πακέτο ταιριάζει με τα κριτήρια επιλογής αυτού του κανόνα. allow | accept | pass | permit Όλα τα παραπάνω έχουν το ίδιο αποτέλεσμα: το πακέτο εξέρχεται από την σύστημα του firewall. Η αναζήτηση για το συγκεκριμένο πακέτο τερματίζεται σε αυτό τον κανόνα. check-state Ελέγχει το πακέτο με βάση το δυναμικό πίνακα κανόνων. Αν βρεθεί κανόνας που να ταιριάζει, θα εκτελεστεί η ενέργεια του κανόνα ο οποίος δημιούργησε τον συγκεκριμένο δυναμικό κανόνα. Διαφορετικά, η αναζήτηση συνεχίζεται με τον επόμενο κανόνα. Ένας κανόνας check-state δεν έχει κριτήρια επιλογής. Αν δεν υπάρχει κανόνας check-state στο σύνολο κανόνων, ο έλεγχος του πίνακα δυναμικών κανόνων ξεκινάει από τον πρώτο κανόνα τύπου keep-state ή limit. deny | drop Και οι δύο λέξεις σημαίνουν το ίδιο πράγμα: τα πακέτα που ταιριάζουν με αυτό τον κανόνα απορρίπτονται. Η αναζήτηση τερματίζεται. Καταγραφή log ή logamount Όταν ένα πακέτο ταιριάζει με ένα κανόνα που περιέχει τη λέξη log, γίνεται καταγραφή του μηνύματος μέσω του &man.syslogd.8; στη δυνατότητα SECURITY. Η καταγραφή συμβαίνει μόνο αν ο αριθμός των πακέτων που έχει καταγραφεί μέχρι στιγμής δεν υπερβαίνει την παράμετρο logamount. Αν η παράμετρος αυτή δεν έχει καθοριστεί, το όριο ρυθμίζεται με βάση την τιμή της μεταβλητής sysctl net.inet.ip.fw.verbose_limit. Και στις δύο περιπτώσεις, μια μηδενική τιμή σημαίνει ότι δεν θα υπάρχει όριο στην καταγραφή. Μόλις η καταγραφή φτάσει στο όριο, μπορεί να γίνει επανενεργοποίηση της με το μηδενισμό του μετρητή καταγραφής, ή του μετρητή για το συγκεκριμένο κανόνα. Δείτε την εντολή ipfw reset log. Η καταγραφή γίνεται μόνο αφού επαληθευθούν όλες οι άλλες συνθήκες ταιριάσματος του πακέτου, και πριν την τελική αποδοχή ή απόρριψη του. Είναι στη δική σας ευχέρεια να αποφασίσετε σε ποιους κανόνες θα ενεργοποιήσετε την καταγραφή. Επιλογή Οι λέξεις-κλειδιά που περιγράφονται σε αυτή την ενότητα, χρησιμοποιούνται για να περιγράψουν χαρακτηριστικά του πακέτου που θα πρέπει να διερευνηθούν για να καθοριστεί αν το πακέτο ταιριάζει ή όχι με τον κανόνα. Η επιλογή μπορεί να γίνει με βάση τα παρακάτω γενικής φύσεως χαρακτηριστικά, τα οποία και θα πρέπει να χρησιμοποιηθούν με τη σειρά που φαίνονται: udp | tcp | icmp Μπορούν επίσης να χρησιμοποιηθούν τα πρωτόκολλα που περιέχονται στο αρχείο /etc/protocols. Η τιμή που καθορίζεται χρησιμοποιείται για το ταίριασμα του πρωτοκόλλου. Πρόκειται για υποχρεωτική παράμετρο. from src to dst Οι λέξεις from και to χρησιμοποιούνται για το ταίριασμα IP διευθύνσεων. Οι κανόνες πρέπει να καθορίζουν τόσο την πηγή όσο και τον προορισμό. Η λέξη any μπορεί να χρησιμοποιηθεί για ταίριασμα με οποιαδήποτε διεύθυνση. Η λέξη me έχει επίσης ειδική σημασία. Ταιριάζει με οποιαδήποτε διεύθυνση που έχει ρυθμιστεί σε κάποια διεπαφή του συστήματος σας, αντιπροσωπεύοντας έτσι το PC στο οποίο εκτελείται το firewall. Μπορούν έτσι να γραφούν κανόνες του τύπου from me to any ή from any to me ή from any to 0.0.0.0/0 ή from 0.0.0.0/0 to me ή from any to 0.0.0.0 ή from me to 0.0.0.0. Οι διευθύνσεις IP καθορίζονται ως αριθμητικές οκτάδες χωρισμένες με τελείες και ακολουθούνται από το μήκος της μάσκας υποδικτύου. Μια IP διεύθυνση μπορεί να καθορίζεται με αριθμούς που χωρίζονται με τελείες. Μπορεί επίσης να ακολουθείται από το μέγεθος της μάσκας υποδικτύου (μορφή CIDR). Πρόκειται για υποχρεωτική παράμετρο. Μπορείτε να χρησιμοποιήσετε το βοηθητικό πρόγραμμα net-mgmt/ipcalc για διευκόλυνση σας στους υπολογισμούς. Δείτε την δικτυακή τοποθεσία του προγράμματος για περισσότερες πληροφορίες: . port number Χρησιμοποιείται σε πρωτόκολλα που υποστηρίζουν αριθμούς θυρών (όπως είναι τα TCP και UDP). Είναι υποχρεωτικό να δίνεται ο αριθμός θύρας της υπηρεσίας που θέλετε να ταιριάξετε. Μπορείτε να χρησιμοποιήσετε τα ονόματα των υπηρεσιών (μπορείτε να τα βρείτε στο αρχείο /etc/services) αντί για τους κανονικούς αριθμούς θυρών. in | out Με το παραπάνω μπορεί να καθοριστεί αν το ταίριασμα θα γίνεται σε εισερχόμενα ή σε εξερχόμενα πακέτα αντίστοιχα. Είναι υποχρεωτικό να έχετε ως μέρος των κριτηρίων του κανόνα σας, είτε τη λέξη in είτε τη λέξη out. via IF Ταιριάζει τα πακέτα τα οποία διέρχονται μέσω της διεπαφής με το όνομα που καθορίζεται. Η λέξη via εξασφαλίζει ότι το όνομα της διεπαφής θα είναι πάντα μέρος των κριτηρίων κατά τη διαδικασία ταιριάσματος. setup Πρόκειται για υποχρεωτική παράμετρο που αναγνωρίζει την αίτηση έναρξης μιας συνεδρίας για πακέτα TCP. keep-state Πρόκειται για υποχρεωτική παράμετρο. Μόλις υπάρξει ταίριασμα, το firewall θα δημιουργήσει ένα δυναμικό κανόνα, του οποίου η προεπιλεγμένη συμπεριφορά είναι να ταιριάζει επικοινωνία διπλής κατεύθυνσης μεταξύ της διεύθυνσης IP και της θύρας αφετηρίας και προορισμού, χρησιμοποιώντας το ίδιο πρωτόκολλο. limit {src-addr | src-port | dst-addr | dst-port} Το firewall θα επιτρέψει μόνο N πλήθος συνδέσεων με τις παραμέτρους που περιγράφονται σε αυτό τον κανόνα. Μπορούν να καθοριστούν περισσότερες από μια διευθύνσεις και πόρτες αφετηρίας και προορισμού. Δεν μπορούν να χρησιμοποιηθούν στον ίδιο κανόνα οι παράμετροι limit και keep-state. Η επιλογή limit παρέχει την ίδια λειτουργία stateful με την keep-state, καθώς και επιπρόσθετες δικές της λειτουργίες. Επιλογή για Stateful Κανόνες IPFW stateful filtering Το stateful φιλτράρισμα, αντιμετωπίζει την κίνηση του δικτύου ως διπλής κατεύθυνσης ανταλλαγή πακέτων τα οποία δημιουργούν μια συνεδρία. Έχει επίσης τη δυνατότητα να διερευνήσει αν τηρούνται οι έγκυροι κανόνες ανταλλαγής μηνυμάτων μεταξύ του αποστολέα και του παραλήπτη. Οποιαδήποτε πακέτα δεν ταιριάζουν με το πρότυπο αυτής της επικοινωνίας, απορρίπτονται ως ψεύτικα. Η επιλογή check-state χρησιμοποιείται για να αναγνωριστεί σε ποιο σημείο του συνόλου κανόνων του IPFW θα ελεγχθεί το πακέτο με βάση τη δυνατότητα των δυναμικών κανόνων. Σε περίπτωση ταιριάσματος, το πακέτο εξέρχεται από το firewall και συνεχίζει την πορεία του, ενώ την ίδια στιγμή δημιουργείται ένας νέος δυναμικός κανόνας για το επόμενο πακέτο που αναμένεται να έρθει με βάση τη συγκεκριμένη διπλής κατεύθυνσης επικοινωνία. Σε περίπτωση που το πακέτο δεν ταιριάζει με το δυναμικό κανόνα, θα προχωρήσει για να ελεγχθεί από τον επόμενο κανόνα του firewall. Η δυνατότητα δυναμικών κανόνων είναι ευάλωτη σε εξάντληση πόρων σε περίπτωση επίθεσης υπερχείλισης (flood) SYN. Η επίθεση αυτή μπορεί να δημιουργήσει πολύ μεγάλο πλήθος δυναμικών κανόνων. Για την αντιμετώπιση μιας τέτοιας επίθεσης, το &os; χρησιμοποιεί μια ακόμα επιλογή που ονομάζεται limit. Η επιλογή αυτή μπορεί να περιορίσει τον αριθμό των ταυτόχρονων συνεδριών, εξετάζοντας τα πεδία αφετηρίας και προορισμού των κανόνων. Ανιχνεύει με αυτό τον τρόπο το πλήθος των δυναμικών κανόνων και πόσες φορές έχει χρησιμοποιηθεί ο καθένας από τη συγκεκριμένη IP διεύθυνση. Αν ο αριθμός αυτός ξεπερνάει το όριο που έχει τεθεί με την επιλογή limit, το πακέτο απορρίπτεται. Καταγραφή Μηνυμάτων του Firewall IPFW logging Τα πλεονεκτήματα της καταγραφής συμβάντων του firewall, είναι προφανή: παρέχουν τη δυνατότητα να δείτε για ποιο λόγο ενεργοποιήθηκαν οι κανόνες στους οποίους έχετε ενεργοποιήσει την καταγραφή. Οι πληροφορίες περιλαμβάνουν τα πακέτα που απορρίφθηκαν, τις διευθύνσεις από τις οποίες προήλθαν και που κατευθύνονταν. Με αυτό τον τρόπο, έχετε ένα σημαντικό πλεονέκτημα στην ανίχνευση των εισβολέων. Ακόμα και αν ενεργοποιήσετε τη λειτουργία καταγραφής, το IPFW δεν θα αρχίσει από μόνο του την καταγραφή για κανένα κανόνα. Ο διαχειριστής του firewall θα αποφασίσει σε ποιους από όλους τους κανόνες θα ενεργοποιήσει την καταγραφή, και θα προσθέσει την λέξη log στην αντίστοιχη καταχώριση. Φυσιολογικά, γίνεται καταγραφή μόνο για κανόνες που απορρίπτουν πακέτα (κανόνες deny), όπως για παράδειγμα ο κανόνας απόρριψης των εισερχόμενων ICMP pings. Είναι κοινή πρακτική, να αντιγράφεται στο τέλος των κανόνων ο κανόνας ipfw default deny everything και να προστίθεται σε αυτόν η επιλογή log. Με τον τρόπο αυτό, μπορείτε να δείτε όλα τα πακέτα που δεν ταίριαξαν με κανένα κανόνα του συνόλου. Η καταγραφή συμβάντων είναι δίκοπο μαχαίρι. Αν δεν είστε προσεκτικός, θα χαθείτε μέσα στο πλήθος των δεδομένων της καταγραφής και θα γεμίσετε το δίσκο σας με άχρηστα αρχεία. Οι πιο παλιές και κοινές επιθέσεις τύπου άρνησης υπηρεσίας (DoS), είναι αυτές που προσπαθούν να γεμίσουν τους δίσκους σας. Τα μηνύματα αυτά όχι μόνο καταγράφονται στο syslogd, αλλά εμφανίζονται και στην κονσόλα του συστήματος σας, και σύντομα γίνονται πολύ ενοχλητικά. Η επιλογή IPFIREWALL_VERBOSE_LIMIT=5 στον πυρήνα, περιορίζει τον αριθμό των συνεχόμενων όμοιων μηνυμάτων που στέλνονται στον καταγραφέα συστήματος &man.syslogd.8; σχετικά με το ταίριασμα πακέτων ενός συγκεκριμένου κανόνα. Όταν ενεργοποιείται αυτή η επιλογή στον πυρήνα, ο αριθμός των συνεχόμενων μηνυμάτων ενός συγκεκριμένου κανόνα, σταματάει μετά τον αριθμό που καθορίζεται. Δεν υπάρχει κανένα όφελος από 200 συνεχόμενα μηνύματα με το ίδιο ακριβώς περιεχόμενο. Για παράδειγμα, πέντε συνεχόμενα μηνύματα για ένα συγκεκριμένο κανόνα θα καταγράφονταν κανονικά στο syslogd. Τα υπόλοιπα όμοια μηνύματα θα καταμετρηθούν και θα καταγραφούν όπως φαίνεται παρακάτω: last message repeated 45 times Όλα τα μηνύματα καταγραφής των πακέτων, γράφονται από προεπιλογή στο αρχείο /var/log/security το οποίο καθορίζεται στο αρχείο /etc/syslog.conf. Δημιουργία Ενός Script Κανόνων Οι περισσότεροι έμπειροι χρήστες του IPFW, δημιουργούν ένα αρχείο που περιέχει τους κανόνες και το γράφουν με τέτοιο τρόπο ώστε να να μπορεί να εκτελεστεί ως script. Το βασικό πλεονέκτημα του παραπάνω τρόπου, είναι ότι οι κανόνες του firewall μπορούν να ανανεωθούν χωρίς την ανάγκη να επανεκκινήσει το σύστημα για να φορτωθούν οι νέοι. Η μέθοδος αυτή είναι πολύ βολική για την δοκιμή νέων κανόνων, καθώς η διαδικασία μπορεί να επαναληφθεί όσες φορές χρειάζεται. Καθώς πρόκειται για κανονικό script, μπορείτε να χρησιμοποιήσετε συμβολική υποκατάσταση για να κωδικοποιήσετε και να υποκαταστήσετε συχνά χρησιμοποιούμενες τιμές σε πολλαπλούς κανόνες. Αυτό φαίνεται στο παρακάτω παράδειγμα. Η σύνταξη που χρησιμοποιείται εδώ, είναι συμβατή με τα κελύφη &man.sh.1;, &man.csh.1; και &man.tcsh.1;. Μπροστά από τα πεδία της συμβολικής υποκατάστασης, υπάρχει το σήμα του δολαρίου, $. Το σύμβολο αυτό δεν υπάρχει μπροστά από τα συμβολικά πεδία. Η τιμή που θα αποδοθεί στο συμβολικό πεδίο, πρέπει να εσωκλείεται σε διπλά εισαγωγικά. Ξεκινήστε το αρχείο των κανόνων σας όπως φαίνεται παρακάτω: ############### start of example ipfw rules script ############# # ipfw -q -f flush # Delete all rules # Set defaults oif="tun0" # out interface odns="192.0.2.11" # ISP's DNS server IP address cmd="ipfw -q add " # build rule prefix ks="keep-state" # just too lazy to key this each time $cmd 00500 check-state $cmd 00502 deny all from any to any frag $cmd 00501 deny tcp from any to any established $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks $cmd 00611 allow udp from any to $odns 53 out via $oif $ks ################### End of example ipfw rules script ############ Αυτό είναι όλο. Στο παράδειγμα αυτό δεν είναι σημαντικοί οι κανόνες, αλλά ο τρόπος με τον οποίο λειτουργούν και παίρνουν τιμές τα πεδία συμβολικής υποκατάστασης. Αν το παραπάνω παράδειγμα ήταν στο αρχείο /etc/ipfw.rules θα μπορούσατε να φορτώσετε αυτούς τους κανόνες, γράφοντας την παρακάτω εντολή: &prompt.root; sh /etc/ipfw.rules Το αρχείο /etc/ipfw.rules μπορεί να βρίσκεται σε όποιο κατάλογο θέλετε, και να ονομάζεται επίσης όπως θέλετε. Θα μπορούσατε να επιτύχετε το ίδιο πράγμα, εκτελώντας τις παρακάτω εντολές χειροκίνητα: &prompt.root; ipfw -q -f flush &prompt.root; ipfw -q add check-state &prompt.root; ipfw -q add deny all from any to any frag &prompt.root; ipfw -q add deny tcp from any to any established &prompt.root; ipfw -q add allow tcp from any to any 80 out via tun0 setup keep-state &prompt.root; ipfw -q add allow tcp from any to 192.0.2.11 53 out via tun0 setup keep-state &prompt.root; ipfw -q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep-state Σύνολο Κανόνων Stateful Το παρακάτω σύνολο κανόνων (που δεν περιέχει κανόνες για NAT) είναι ένα παράδειγμα γραφής ενός inclusive firewall. Ένα inclusive firewall επιτρέπει την είσοδο μόνο των πακέτων που ταιριάζουν με τους κανόνες αποδοχής (pass) και απορρίπτει από προεπιλογή όλα τα άλλα. Τα firewalls που έχουν σχεδιαστεί να προστατεύουν ολόκληρα δίκτυα, διαθέτουν το λιγότερο δύο διεπαφές, στις οποίες πρέπει να υπάρχουν κανόνες ώστε το firewall να λειτουργεί. Όλα τα λειτουργικά συστήματα τύπου &unix;, συμπεριλαμβανομένου και του &os;, έχουν σχεδιαστεί να χρησιμοποιούν τη διεπαφή lo0 και τη διεύθυνση IP 127.0.0.1 για εσωτερική επικοινωνία με το λειτουργικό σύστημα. Το firewall πρέπει να περιέχει κανόνες που να επιτρέπουν την απρόσκοπτη κίνηση αυτών των ειδικών, για εσωτερική χρήση, πακέτων. Οι κανόνες που ορίζουν την πρόσβαση εισερχόμενων και εξερχόμενων πακέτων, γράφονται για τη διεπαφή που συνδέεται στο δημόσιο Internet. Η διεπαφή αυτή μπορεί να είναι για παράδειγμα η tun0 (σε περίπτωση που χρησιμοποιείτε το PPP χρήστη), ή η κάρτα δικτύου που συνδέεται στο καλωδιακό ή DSL modem σας. Σε περίπτωση που μια ή περισσότερες κάρτες δικτύου συνδέονται σε εσωτερικά ιδιωτικά δίκτυα πίσω από το firewall, θα πρέπει να υπάρχουν οι αντίστοιχοι κανόνες που να επιτρέπουν την ελεύθερη διακίνηση των πακέτων ανάμεσα στις διεπαφές αυτές ή/και στο Internet. Οι κανόνες πρέπει να οργανώνονται σε τρεις κύριες ενότητες: αρχικά όλες οι διεπαφές στις οποίες επιτρέπεται η ελεύθερη διακίνηση δεδομένων, έπειτα η διεπαφή από την οποία εξέρχονται τα πακέτα προς το δημόσιο δίκτυο (Internet) και τέλος η διεπαφή από την οποία λαμβάνονται πακέτα από το Internet. Σε κάθε μια από τις ενότητες των διεπαφών που συνδέονται στο Internet, πρέπει να τοποθετούνται πρώτοι οι κανόνες που ταιριάζουν συχνότερα με την αντίστοιχη κίνηση. Ο τελευταίος κανόνας της ενότητας θα πρέπει να απορρίπτει και να καταγράφει όλα τα πακέτα της συγκεκριμένης διεπαφής/κατεύθυνσης. Η ενότητα εξερχομένων (Outbound) στο σύνολο κανόνων που φαίνεται παρακάτω, περιέχει μόνο κανόνες τύπου allow. Οι κανόνες αυτοί περιέχουν συγκεκριμένες επιλεγμένες τιμές, με τις οποίες αναγνωρίζεται με μοναδικό τρόπο η υπηρεσία στην οποία επιτρέπεται η πρόσβαση από το δημόσιο Internet. Όλοι οι κανόνες έχουν τις επιλογές proto, port, in/out και keep-state. Οι κανόνες τύπου proto tcp περιέχουν την επιλογή setup για την αναγνώριση του πακέτου έναρξης της συνεδρίας, ώστε να γίνει η καταχώριση της στον πίνακα συνδέσεων (stateful). Στην ενότητα των εισερχόμενων πακέτων (Inbound) που φαίνεται παρακάτω, εμφανίζονται πρώτοι οι κανόνες που χρησιμοποιούνται για την απόρριψη των ανεπιθύμητων πακέτων. Αυτό γίνεται για δύο διαφορετικούς λόγους. Ο πρώτος είναι ότι τα κακόβουλα πακέτα μπορεί εν μέρει να ταιριάζουν με κάποια χαρακτηριστικά της έγκυρης κίνησης. Τα πακέτα αυτά θα πρέπει να απορριφθούν, αντί να γίνουν δεκτά από κάποιο επόμενο κανόνα allow. Ο δεύτερος είναι ότι μπορείτε να απορρίψετε συγκεκριμένα πακέτα τα οποία γνωρίζετε ότι δεν είναι έγκυρα, αλλά σας είναι αδιάφορη η καταγραφή τους. Με τον τρόπο αυτό εμποδίζεται η λήψη και καταγραφή τους από τον τελευταίο κανόνα. Ο τελευταίος κανόνας τυπικά απορρίπτει και καταγράφει όλα τα πακέτα που έφτασαν μέχρι αυτόν. Ο κανόνας αυτός χρησιμοποιείται για την παροχή νομικών αποδείξεων σε περίπτωση που κινήσετε νομική διαδικασία κατά ατόμων που προέβησαν σε επιθέσεις στο σύστημα σας. Θα πρέπει επίσης να εξασφαλίσετε ότι το σύστημα σας δεν θα δώσει καμιά απάντηση σε κανένα από τα ανεπιθύμητα πακέτα. Τα πακέτα αυτά θα πρέπει να απορριφθούν και να εξαφανιστούν. Με τον τρόπο αυτό, ο επιτιθέμενος δεν έχει καμιά γνώση αν τα πακέτα του έφτασαν μέχρι το σύστημα σας. Όσο λιγότερα μπορούν να μάθουν οι επιτιθέμενοι σχετικά με το σύστημα σας, τόσο πιο ασφαλές είναι. Όταν εκτελείτε καταγραφή πακέτων με αριθμούς θυρών που δεν αναγνωρίζετε, κοιτάξτε στο αρχείο /etc/services/ ή δείτε το και αναζητήστε τον αριθμό της θύρας για να δείτε ποιος είναι ο σκοπός της. Ελέγξτε την παρακάτω τοποθεσία για τους αριθμούς θυρών που χρησιμοποιούνται συχνά από κακόβουλα προγράμματα (Trojans): . Ένα Υπόδειγμα Συνόλου Κανόνων Inclusive Το παρακάτω σύνολο κανόνων (στο οποίο δεν υλοποιείται λειτουργία NAT) είναι αρκετά πλήρες και πολύ ασφαλές. Δημιουργεί firewall τύπου inclusive, και έχει δοκιμαστεί σε πραγματικές συνθήκες λειτουργίας. Μπορεί να εξυπηρετήσει το ίδιο καλά και το δικό σας σύστημα. Απλώς μετατρέψτε σε σχόλιο τους κανόνες pass για τις υπηρεσίες που δεν θέλετε να ενεργοποιήσετε. Για να αποφύγετε την καταγραφή ανεπιθύμητων μηνυμάτων, απλώς προσθέστε ένα κανόνα τύπου deny στην ενότητα των εισερχομένων. Σε όλους τους κανόνες, Θα πρέπει να αλλάξετε το όνομα της διεπαφής από dc0 στο πραγματικό όνομα της διεπαφής που συνδέεται στο δημόσιο Internet. Σε περίπτωση που χρησιμοποιείτε το PPP χρήστη, το όνομα της διεπαφής θα είναι tun0. Θα διαπιστώσετε ότι υπάρχει μια συγκεκριμένη λογική στη χρήση αυτών των κανόνων. Όλοι οι κανόνες που αποτελούν αίτηση για έναρξη μιας νέας συνεδρίας με το δημόσιο Internet, χρησιμοποιούν την επιλογή keep-state. Όλες οι διαπιστευμένες υπηρεσίες που προέρχονται από το δημόσιο Internet, διαθέτουν την επιλογή limit, για την αποφυγή επιθέσεων υπερχείλισης (flooding). Όλοι οι κανόνες χρησιμοποιούν τις επιλογές in ή out για να διευκρινίζουν την κατεύθυνση της επικοινωνίας. Όλοι οι κανόνες χρησιμοποιούν την επιλογή via όνομα-διεπαφής για να καθορίσουν τη διεπαφή από την οποία διέρχεται το πακέτο. Οι κανόνες που φαίνονται παρακάτω, θα πρέπει να γραφούν στο /etc/ipfw.rules. ################ Start of IPFW rules file ############################### # Flush out the list before we begin. ipfw -q -f flush # Set rules command prefix cmd="ipfw -q add" pif="dc0" # public interface name of NIC # facing the public Internet ################################################################# # No restrictions on Inside LAN Interface for private network # Not needed unless you have LAN. # Change xl0 to your LAN NIC interface name ################################################################# #$cmd 00005 allow all from any to any via xl0 ################################################################# # No restrictions on Loopback Interface ################################################################# $cmd 00010 allow all from any to any via lo0 ################################################################# # Allow the packet through if it has previous been added to the # the "dynamic" rules table by a allow keep-state statement. ################################################################# $cmd 00015 check-state ################################################################# # Interface facing Public Internet (Outbound Section) # Check session start requests originating from behind the # firewall on the private network or from this gateway server # destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # x.x.x.x must be the IP address of your ISP.s DNS # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file $cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep-state $cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep-state # Allow out access to my ISP's DHCP server for cable/DSL configurations. # This rule is not needed for .user ppp. connection to the public Internet. # so you can delete this whole group. # Use the following rule and check log for IP address. # Then put IP address in commented out rule & delete first rule $cmd 00120 allow log udp from any to any 67 out via $pif keep-state #$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep-state # Allow out non-secure standard www function $cmd 00200 allow tcp from any to any 80 out via $pif setup keep-state # Allow out secure www function https over TLS SSL $cmd 00220 allow tcp from any to any 443 out via $pif setup keep-state # Allow out send & get email function $cmd 00230 allow tcp from any to any 25 out via $pif setup keep-state $cmd 00231 allow tcp from any to any 110 out via $pif setup keep-state # Allow out FBSD (make install & CVSUP) functions # Basically give user root "GOD" privileges. $cmd 00240 allow tcp from me to any out via $pif setup keep-state uid root # Allow out ping $cmd 00250 allow icmp from any to any out via $pif keep-state # Allow out Time $cmd 00260 allow tcp from any to any 37 out via $pif setup keep-state # Allow out nntp news (i.e. news groups) $cmd 00270 allow tcp from any to any 119 out via $pif setup keep-state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) $cmd 00280 allow tcp from any to any 22 out via $pif setup keep-state # Allow out whois $cmd 00290 allow tcp from any to any 43 out via $pif setup keep-state # deny and log everything else that.s trying to get out. # This rule enforces the block all by default logic. $cmd 00299 deny log all from any to any out via $pif ################################################################# # Interface facing Public Internet (Inbound Section) # Check packets originating from the public Internet # destined for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces $cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect $cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Deny public pings $cmd 00310 deny icmp from any to any in via $pif # Deny ident $cmd 00315 deny tcp from any to any 113 in via $pif # Deny all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 $cmd 00320 deny tcp from any to any 137 in via $pif $cmd 00321 deny tcp from any to any 138 in via $pif $cmd 00322 deny tcp from any to any 139 in via $pif $cmd 00323 deny tcp from any to any 81 in via $pif # Deny any late arriving packets $cmd 00330 deny all from any to any frag in via $pif # Deny ACK packets that did not match the dynamic rule table $cmd 00332 deny tcp from any to any established in via $pif # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP.s DHCP server as it.s the only # authorized source to send this packet type. # Only necessary for cable or DSL configurations. # This rule is not needed for .user ppp. type connection to # the public Internet. This is the same IP address you captured # and used in the outbound section. #$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep-state # Allow in standard www function because I have apache server $cmd 00400 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Allow in secure FTP, Telnet, and SCP from public Internet $cmd 00410 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID & PW are passed over public # Internet as clear text. # Delete this sample group if you do not have telnet server enabled. $cmd 00420 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Reject & Log all incoming connections from the outside $cmd 00499 deny log all from any to any in via $pif # Everything else is denied by default # deny and log all packets that fell through to see what they are $cmd 00999 deny log all from any to any ################ End of IPFW rules file ############################### Ένα Υπόδειγμα <acronym>NAT</acronym> με Stateful Σύνολο Κανόνων NAT and IPFW Για να ενεργοποιηθεί η λειτουργία NAT στο IPFW, χρειάζονται κάποιες επιπλέον ρυθμίσεις. Θα πρέπει να προσθέσετε την επιλογή option IPDIVERT μαζί με τις υπόλοιπες επιλογές για το IPFIREWALL στο αρχείο ρυθμίσεων του πυρήνα. Θα πρέπει έπειτα να μεταγλωττίσετε και να εγκαταστήσετε το νέο σας προσαρμοσμένο πυρήνα. Εκτός από τις συνηθισμένες επιλογές για το IPFW, θα πρέπει να προσθέσετε και τις παρακάτω στο αρχείο /etc/rc.conf: natd_enable="YES" # Enable NATD function natd_interface="rl0" # interface name of public Internet NIC natd_flags="-dynamic -m" # -m = preserve port numbers if possible Η χρήση κανόνων stateful μαζί με τον κανόνα divert natd (NAT), περιπλέκει πολύ την λογική συγγραφής των κανόνων. Η θέση εμφάνισης των κανόνων check-state και divert natd μέσα στο σύνολο κανόνων γίνεται πολύ κρίσιμη. Δεν πρόκειται πλέον για απλή λογική περάσματος από τον ένα κανόνα στον επόμενο. Χρησιμοποιείται ένα νέο είδος ενέργειας που ονομάζεται skipto. Για να χρησιμοποιηθεί η εντολή skipto, είναι υποχρεωτικό να έχετε αριθμήσει τους κανόνες, ώστε να ξέρετε σε ποιο κανόνα θα καταλήξει το άλμα που θα εκτελεστεί από την εντολή αυτή. Παρακάτω θα βρείτε ένα υπόδειγμα (χωρίς πρόσθετα σχόλια) μιας μεθόδου συγγραφής που επιλέξαμε εδώ για να εξηγήσουμε την ακολουθία ροής του πακέτου μέσα στο σύνολο κανόνων. Η ροή της επεξεργασίας ξεκινάει με τον πρώτο από την κορυφή κανόνα και συνεχίζει ένα κανόνα κάθε φορά προς τα κάτω, είτε μέχρι να φτάσει τον τελευταίο, ή μέχρι το πακέτο να ταιριάξει με τα κριτήρια επιλογής κάποιου κανόνα και να ελευθερωθεί από το firewall. Είναι σημαντικό να παρατηρήσουμε τη θέση των κανόνων με αριθμούς 100, 101, 450, 500 και 510. Οι κανόνες αυτοί ελέγχουν την μετάφραση των εξερχόμενων και εισερχόμενων πακέτων, ώστε οι καταχωρήσεις τους στο δυναμικό πίνακα καταστάσεων να περιέχουν πάντα την ιδιωτική IP διεύθυνση του τοπικού δικτύου. Παρατηρήστε επίσης ότι όλοι οι κανόνες allow και deny καθορίζουν την κατεύθυνση κίνησης του πακέτου καθώς και την διεπαφή. Επίσης, όλες οι εξερχόμενες αιτήσεις για νέες συνεδρίες μεταφέρονται απευθείας (μέσω του skipto rule 500) στον κανόνα 500 για να γίνει η μετάφραση διευθύνσεων δικτύου (NAT). Ας υποθέσουμε ότι ένα χρήστης του τοπικού δικτύου χρησιμοποιεί τον φυλλομετρητή του για να δει μια ιστοσελίδα. Οι ιστοσελίδες χρησιμοποιούν την πόρτα 80 για την επικοινωνία. Το πακέτο εισέρχεται στο firewall. Δεν ταιριάζει με τον κανόνα 100 γιατί είναι εξερχόμενο και όχι εισερχόμενο. Περνάει τον κανόνα 101 γιατί πρόκειται για νέα επικοινωνία και έτσι δεν υπάρχει ακόμα στον δυναμικό πίνακα καταστάσεων. Το πακέτο τελικά φτάνει στον κανόνα 125 με τον οποίο και ταιριάζει. Εξέρχεται μέσω της κάρτας δικτύου που συνδέεται στο δημόσιο Internet. Το πακέτο έχει ακόμα ως IP αφετηρίας την ιδιωτική διεύθυνση του τοπικού δικτύου. Το ταίριασμα με αυτό τον κανόνα προκαλεί δύο ενέργειες. Η επιλογή keep-state θα δημιουργήσει ένα νέο δυναμικό κανόνα, θα τον καταχωρήσει στον πίνακα, και θα εκτελέσει την αντίστοιχη ενέργεια. Η ενέργεια αυτή είναι μέρος της πληροφορίας που γράφεται στον δυναμικό πίνακα. Στην περίπτωση αυτή είναι η skipto rule 500. Ο κανόνας 500 μεταφράζει μέσω NAT τη διεύθυνση IP του πακέτου, πριν αυτό εξέλθει προς το Internet. Αυτό είναι ιδιαίτερα σημαντικό. Το πακέτο κατευθύνεται προς τον προορισμό του, όπου δημιουργείται και αποστέλλεται ένα νέο πακέτο ως απάντηση. Το νέο αυτό πακέτο εισέρχεται ξανά στο firewall, στον κανόνα που είναι στην κορυφή της λίστας. Αυτή τη φορά ταιριάζει με τον κανόνα 100 και η διεύθυνση προορισμού του αλλάζει ξανά στην αρχική του τοπικού δικτύου. Έπειτα, γίνεται η επεξεργασία του από τον κανόνα check-state ο οποίος ανακαλύπτει ότι πρόκειται για πακέτο συνεδρίας σε εξέλιξη και το απελευθερώνει στο τοπικό δίκτυο. Κατευθύνεται προς τον υπολογιστή του τοπικού δικτύου που το έστειλε, ο οποίος στέλνει ένα νέο πακέτο ζητώντας περισσότερα δεδομένα από τον απομακρυσμένο εξυπηρετητή. Το πακέτο αυτό ελέγχεται από τον κανόνα check-state, ο οποίος βρίσκει την καταχώριση του στα εξερχόμενα και εκτελεί την αντίστοιχη ενέργεια που σε αυτή την περίπτωση είναι skipto 500. Το πακέτο προωθείται στον κανόνα 500, γίνεται η μετάφραση της διεύθυνσης του μέσω NAT και απελευθερώνεται στο Internet. Από την μεριά των εισερχόμενων, όποιο πακέτο αναγνωρίζεται ως μέρος μιας υπάρχουσας συνεδρίας, ελέγχεται αυτόματα από τον κανόνα check-state και τους αντίστοιχους κανόνες divert natd. Το μόνο που χρειάζεται να αντιμετωπίσουμε είναι η απόρριψη όλων των προβληματικών πακέτων και η έγκριση μόνο των πακέτων που προορίζονται για εγκεκριμένες υπηρεσίες. Ας υποθέσουμε ότι έχουμε ένα εξυπηρετητή apache ο οποίος εκτελείται στο μηχάνημα με το firewall, και επιθυμούμε το τοπικό site να είναι προσβάσιμο από το δημόσιο Internet. Η εισερχόμενη αίτηση νέας συνεδρίας ταιριάζει με τον κανόνα 100 και η IP διεύθυνση της αντιστοιχίζεται στο τοπικό IP του μηχανήματος με το firewall. Το πακέτο έπειτα ελέγχεται για οποιοδήποτε πρόβλημα μπορεί να έχει σύμφωνα με τους κανόνες που χρησιμοποιούμε, και τελικά ταιριάζει με τον κανόνα 425. Στην περίπτωση αυτή συμβαίνουν δύο πράγματα. Ο κανόνας για το πακέτο γράφεται στο δυναμικό πίνακα καταστάσεων, αλλά αυτή τη φορά περιορίζεται ο αριθμός αιτήσεων νέας συνεδρίας από το συγκεκριμένο IP σε 2. Με αυτό τον τρόπο μπορούμε να αμυνθούμε σε επιθέσεις τύπου άρνησης υπηρεσίας (DoS) όσο αφορά τη συγκεκριμένη θύρα επικοινωνίας. Η ενέργεια του κανόνα είναι το allow, και έτσι το πακέτο απελευθερώνεται στο τοπικό δίκτυο. Το πακέτο που παράγεται ως απάντηση, ελέγχεται από τον κανόνα check-state, ο οποίος αναγνωρίζει ότι ανήκει σε μια ήδη ενεργή συνεδρία, και αποστέλλεται στον κανόνα 500 όπου γίνεται η μετάφραση της διεύθυνσης του μέσω NAT. Το πακέτο τελικά απελευθερώνεται μέσω της διεπαφής εξερχομένων. Υπόδειγμα Κανόνων #1: #!/bin/sh cmd="ipfw -q add" skip="skipto 500" pif=rl0 ks="keep-state" good_tcpo="22,25,37,43,53,80,443,110,119" ipfw -q -f flush $cmd 002 allow all from any to any via xl0 # exclude LAN traffic $cmd 003 allow all from any to any via lo0 # exclude loopback traffic $cmd 100 divert natd ip from any to any in via $pif $cmd 101 check-state # Authorized outbound packets $cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks $cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks $cmd 130 $skip icmp from any to any out via $pif $ks $cmd 135 $skip udp from any to any 123 out via $pif $ks # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Authorized inbound packets $cmd 400 allow udp from xx.70.207.54 to any 68 in $ks $cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1 $cmd 450 deny log ip from any to any # This is skipto location for outbound stateful rules $cmd 500 divert natd ip from any to any out via $pif $cmd 510 allow ip from any to any ######################## end of rules ################## Οι παρακάτω κανόνες είναι σχεδόν ίδιοι με τους παραπάνω, αλλά περιέχουν περισσότερα σχόλια για να βοηθήσουν τον αρχάριο χρήστη του IPFW να καταλάβει καλύτερα πως λειτουργούν. Υπόδειγμα Κανόνων #2: #!/bin/sh ################ Start of IPFW rules file ############################### # Flush out the list before we begin. ipfw -q -f flush # Set rules command prefix cmd="ipfw -q add" skip="skipto 800" pif="rl0" # public interface name of NIC # facing the public Internet ################################################################# # No restrictions on Inside LAN Interface for private network # Change xl0 to your LAN NIC interface name ################################################################# $cmd 005 allow all from any to any via xl0 ################################################################# # No restrictions on Loopback Interface ################################################################# $cmd 010 allow all from any to any via lo0 ################################################################# # check if packet is inbound and nat address if it is ################################################################# $cmd 014 divert natd ip from any to any in via $pif ################################################################# # Allow the packet through if it has previous been added to the # the "dynamic" rules table by a allow keep-state statement. ################################################################# $cmd 015 check-state ################################################################# # Interface facing Public Internet (Outbound Section) # Check session start requests originating from behind the # firewall on the private network or from this gateway server # destined for the public Internet. ################################################################# # Allow out access to my ISP's Domain name server. # x.x.x.x must be the IP address of your ISP's DNS # Dup these lines if your ISP has more than one DNS server # Get the IP addresses from /etc/resolv.conf file $cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep-state # Allow out access to my ISP's DHCP server for cable/DSL configurations. $cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep-state # Allow out non-secure standard www function $cmd 040 $skip tcp from any to any 80 out via $pif setup keep-state # Allow out secure www function https over TLS SSL $cmd 050 $skip tcp from any to any 443 out via $pif setup keep-state # Allow out send & get email function $cmd 060 $skip tcp from any to any 25 out via $pif setup keep-state $cmd 061 $skip tcp from any to any 110 out via $pif setup keep-state # Allow out FreeBSD (make install & CVSUP) functions # Basically give user root "GOD" privileges. $cmd 070 $skip tcp from me to any out via $pif setup keep-state uid root # Allow out ping $cmd 080 $skip icmp from any to any out via $pif keep-state # Allow out Time $cmd 090 $skip tcp from any to any 37 out via $pif setup keep-state # Allow out nntp news (i.e. news groups) $cmd 100 $skip tcp from any to any 119 out via $pif setup keep-state # Allow out secure FTP, Telnet, and SCP # This function is using SSH (secure shell) $cmd 110 $skip tcp from any to any 22 out via $pif setup keep-state # Allow out whois $cmd 120 $skip tcp from any to any 43 out via $pif setup keep-state # Allow ntp time server $cmd 130 $skip udp from any to any 123 out via $pif keep-state ################################################################# # Interface facing Public Internet (Inbound Section) # Check packets originating from the public Internet # destined for this gateway server or the private network. ################################################################# # Deny all inbound traffic from non-routable reserved address spaces $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 private IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 private IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 private IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto-config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #reserved for docs $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Class D & E multicast # Deny ident $cmd 315 deny tcp from any to any 113 in via $pif # Deny all Netbios service. 137=name, 138=datagram, 139=session # Netbios is MS/Windows sharing services. # Block MS/Windows hosts2 name server requests 81 $cmd 320 deny tcp from any to any 137 in via $pif $cmd 321 deny tcp from any to any 138 in via $pif $cmd 322 deny tcp from any to any 139 in via $pif $cmd 323 deny tcp from any to any 81 in via $pif # Deny any late arriving packets $cmd 330 deny all from any to any frag in via $pif # Deny ACK packets that did not match the dynamic rule table $cmd 332 deny tcp from any to any established in via $pif # Allow traffic in from ISP's DHCP server. This rule must contain # the IP address of your ISP's DHCP server as it's the only # authorized source to send this packet type. # Only necessary for cable or DSL configurations. # This rule is not needed for 'user ppp' type connection to # the public Internet. This is the same IP address you captured # and used in the outbound section. $cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep-state # Allow in standard www function because I have Apache server $cmd 370 allow tcp from any to me 80 in via $pif setup limit src-addr 2 # Allow in secure FTP, Telnet, and SCP from public Internet $cmd 380 allow tcp from any to me 22 in via $pif setup limit src-addr 2 # Allow in non-secure Telnet session from public Internet # labeled non-secure because ID & PW are passed over public # Internet as clear text. # Delete this sample group if you do not have telnet server enabled. $cmd 390 allow tcp from any to me 23 in via $pif setup limit src-addr 2 # Reject & Log all unauthorized incoming connections from the public Internet $cmd 400 deny log all from any to any in via $pif # Reject & Log all unauthorized out going connections to the public Internet $cmd 450 deny log all from any to any out via $pif # This is skipto location for outbound stateful rules $cmd 800 divert natd ip from any to any out via $pif $cmd 801 allow ip from any to any # Everything else is denied by default # deny and log all packets that fell through to see what they are $cmd 999 deny log all from any to any ################ End of IPFW rules file ############################### diff --git a/el_GR.ISO8859-7/books/handbook/kernelconfig/chapter.sgml b/el_GR.ISO8859-7/books/handbook/kernelconfig/chapter.sgml index 3652ba9c35..d2a3d9a8d7 100644 --- a/el_GR.ISO8859-7/books/handbook/kernelconfig/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/kernelconfig/chapter.sgml @@ -1,1639 +1,1639 @@ Jim Mock Ανανεώθηκε και αναδομήθηκε από τον Jake Hamby Αρχική συνεισφορά από τον Ρυθμίζοντας τον Πυρήνα του &os; Σύνοψη πυρήνας δημιουργία προσαρμοσμένου πυρήνα Ο πυρήνας είναι η καρδιά του λειτουργικού συστήματος &os;. Είναι υπεύθυνος για τη διαχείριση της μνήμης, την επιβολή των ρυθμίσεων ασφαλείας, τη δικτύωση, την πρόσβαση στο δίσκο, και πολλά άλλα. Ένα συνεχώς αυξανόμενο μέρος του &os; μπορεί να ρυθμιστεί δυναμικά, αλλά υπάρχουν ακόμα περιπτώσεις οι οποίες απαιτούν ρυθμίσεις και μεταγλώττιση του πυρήνα του &os; με προσαρμοσμένες παραμέτρους. Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Για ποιους λόγους μπορεί να χρειαστεί να φτιάξετε ένα προσαρμοσμένο πυρήνα. Πως να γράψετε ένα αρχείο ρυθμίσεων πυρήνα, ή να αλλάξετε ένα υπάρχον αρχείο ρυθμίσεων. Πως να χρησιμοποιήσετε το αρχείο ρυθμίσεων του πυρήνα για να φτιάξετε και να μεταγλωττίσετε ένα νέο πυρήνα. Πως να εγκαταστήσετε το νέο πυρήνα. Πως να επιλύσετε τυχόν προβλήματα με το νέο πυρήνα. Όλες οι εντολές που εμφανίζονται σε αυτό το κεφάλαιο ως παραδείγματα πρέπει να εκτελεστούν ως root για να είναι επιτυχείς. Γιατί να Φτιάξετε Προσαρμοσμένο Πυρήνα; Κατά παράδοση, το &os; είχε αυτό που αποκαλούμε μονολιθικό πυρήνα. Αυτό σημαίνει ότι ο πυρήνας ήταν ένα μεγάλο πρόγραμμα, υποστήριζε ένα σταθερό αριθμό συσκευών, και αν θέλατε να αλλάξετε τη συμπεριφορά του, θα έπρεπε να μεταγλωττίσετε καινούριο και να επανεκκινήσετε τον υπολογιστή σας με αυτόν. Σήμερα, το &os; κινείται ταχύτατα προς ένα μοντέλο όπου οι περισσότερες λειτουργίες του πυρήνα περιέχονται σε modules (αρθρώματα) τα οποία μπορούν να φορτωθούν και να αποφορτωθούν κατά απαίτηση, δυναμικά στον πυρήνα. Αυτό επιτρέπει στον πυρήνα να προσαρμόζεται σε υλικό το οποίο ενεργοποιείται τη δεδομένη στιγμή (όπως για παράδειγμα όταν εισέρχεται μια κάρτα PCMCIA σε ένα φορητό υπολογιστή). Επίσης επιτρέπει στον πυρήνα να επεκτείνει δυναμικά τη λειτουργικότητά του, προσθέτοντας χαρακτηριστικά τα οποία δεν ήταν απαραίτητα όταν είχε μεταγλωττιστεί αρχικά. Αυτού του είδους ο πυρήνας είναι γνωστός ως modular (αρθρωτός). Παρ' όλα αυτά, είναι ακόμα απαραίτητο να γίνουν κάποιες στατικές ρυθμίσεις στον πυρήνα. Σε ορισμένες περιπτώσεις, αυτό συμβαίνει επειδή η συγκεκριμένη λειτουργία είναι τόσο στενά συνδεμένη με τον πυρήνα ώστε δεν μπορεί να φορτωθεί δυναμικά. Σε άλλες, συμβαίνει επειδή απλά κανείς δεν έχει ακόμα ασχοληθεί να γράψει ένα δυναμικό module που να παρέχει αυτή τη λειτουργικότητα. Η δημιουργία προσαρμοσμένου πυρήνα είναι από τις πλέον σημαντικές τελετουργίες κάθε προχωρημένου χρήστη του BSD. Η διαδικασία αυτή, αν και χρονοβόρα, θα αποβεί ιδιαίτερα ωφέλιμη για το &os; σύστημα σας. Σε αντίθεση με τον πυρήνα GENERIC, ο οποίος πρέπει να υποστηρίξει μεγάλο εύρος συσκευών, ένας προσαρμοσμένος πυρήνας περιέχει υποστήριξη μόνο για το υλικό του δικού σας υπολογιστή. Έτσι έχετε κάποια οφέλη, όπως: Ταχύτερη εκκίνηση. Καθώς ο πυρήνας θα ανιχνεύει μόνο το υλικό που έχετε στο σύστημα σας, ο χρόνος που χρειάζεται για την εκκίνηση του συστήματος σας θα μειωθεί δραματικά. Χαμηλότερη κατανάλωση μνήμης. Ένας προσαρμοσμένος πυρήνας, συχνά χρησιμοποιεί λιγότερη μνήμη από τον πυρήνα GENERIC, αφού απουσιάζουν από αυτόν συσκευές και χαρακτηριστικά που δεν χρησιμοποιούνται. Αυτό είναι σημαντικό, καθώς ο πυρήνας βρίσκεται πάντα φορτωμένος στη φυσική μνήμη, μειώνοντας έτσι τη μνήμη που είναι διαθέσιμη για εφαρμογές. Για το λόγο αυτό, ο προσαρμοσμένος πυρήνας είναι ιδιαίτερα χρήσιμος σε συστήματα με μικρό μέγεθος φυσικής μνήμης (RAM). Επιπρόσθετη υποστήριξη συσκευών. Ο προσαρμοσμένος πυρήνας σας επιτρέπει να προσθέσετε υποστήριξη για συσκευές οι οποίες δεν υπάρχουν στον GENERIC πυρήνα, όπως για παράδειγμα για κάρτες ήχου. Tom Rhodes Γράφηκε από τον Ανακαλύπτοντας τις Συσκευές του Συστήματος σας Πριν ξεκινήσετε με τη ρύθμιση του πυρήνα σας, θα ήταν σκόπιμο να κάνετε μια απογραφή υλικού του υπολογιστή σας. Σε περιπτώσεις που το &os; δεν είναι το βασικό σας λειτουργικό σύστημα, μπορείτε εύκολα να δημιουργήσετε αυτή τη λίστα, εξετάζοντας τις ρυθμίσεις του τρέχοντος λειτουργικού συστήματος. Για παράδειγμα, η Διαχείριση Συσκευών (Device Manager) της µsoft; δείχνει συνήθως σημαντικές πληροφορίες σχετικά με τις εγκατεστημένες συσκευές. Μπορείτε να βρείτε την Διαχείριση Συσκευών στον πίνακα ελέγχου. Μερικές εκδόσεις των µsoft.windows; διαθέτουν ένα εικονίδιο με τίτλο Σύστημα (System). Από την οθόνη που εμφανίζεται μπορείτε να επιλέξετε την Διαχείριση Συσκευών. Αν δεν υπάρχει άλλο λειτουργικό σύστημα στον υπολογιστή, ο διαχειριστής θα πρέπει να βρει αυτές τις πληροφορίες χειροκίνητα. Μια μέθοδος είναι με τη χρήση του βοηθητικού προγράμματος &man.dmesg.8; και της εντολής &man.man.1;. Τα περισσότερα προγράμματα οδήγησης του &os; διαθέτουν σελίδα manual, η οποία δείχνει το υποστηριζόμενο υλικό. Κατά τη διάρκεια της εκκίνησης, εμφανίζεται μια λίστα με τις συσκευές που ανιχνεύθηκαν. Για παράδειγμα, οι παρακάτω γραμμές δείχνουν ότι το πρόγραμμα οδήγησης psm εντόπισε ένα ποντίκι: psm0: <PS/2 Mouse> irq 12 on atkbdc0 psm0: [GIANT-LOCKED] psm0: [ITHREAD] psm0: model Generic PS/2 mouse, device ID 0 Αυτό το πρόγραμμα οδήγησης θα πρέπει να περιληφθεί στο αρχείο ρυθμίσεων του προσαρμοσμένου πυρήνα σας, ή να φορτωθεί δυναμικά μέσω του &man.loader.conf.5;. Σε ορισμένες περιπτώσεις, η έξοδος της dmesg μπορεί να δείχνει μόνο τα μηνύματα του συστήματος και όχι τα αποτελέσματα της ανίχνευσης συσκευών. Στις περιπτώσεις αυτές, μπορείτε να δείτε την επιθυμητή έξοδο στα περιεχόμενα του αρχείου /var/run/dmesg.boot. Μια άλλη μέθοδος για την ανίχνευση του υλικού, είναι μέσω του βοηθητικού προγράμματος &man.pciconf.8;, το οποίο παρέχει πιο αναλυτική περιγραφή. Για παράδειγμα: ath0@pci0:3:0:0: class=0x020000 card=0x058a1014 chip=0x1014168c rev=0x01 hdr=0x00 vendor = 'Atheros Communications Inc.' device = 'AR5212 Atheros AR5212 802.11abg wireless' class = network subclass = ethernet Η παραπάνω έξοδος, που λήφθηκε μέσω της εντολής pciconf , δείχνει ότι το πρόγραμμα οδήγησης ath εντόπισε μια συσκευή ασύρματου Ethernet. Μπορείτε να δείτε την αντίστοιχη σελίδα manual του προγράμματος &man.ath.4;, χρησιμοποιώντας την εντολή man ath. Μπορείτε επίσης να πάρετε χρήσιμες πληροφορίες από την εντολή &man.man.1;, αν δώσετε την επιλογή . Στο παραπάνω παράδειγμα, δίνοντας: &prompt.root; man -k Atheros Θα δείτε μια λίστα από σελίδες manual που περιέχουν τη συγκεκριμένη λέξη: ath(4) - Atheros IEEE 802.11 wireless network driver ath_hal(4) - Atheros Hardware Access Layer (HAL) Έχοντας διαθέσιμη την απογραφή υλικού του υπολογιστή σας, η διαδικασία δημιουργίας προσαρμοσμένου πυρήνα σίγουρα φαίνεται λιγότερο αποθαρρυντική. Προγράμματα Οδήγησης, Υποσυστήματα και Αρθρώματα (modules) kernel drivers / modules / subsystems Πριν δημιουργήσετε ένα προσαρμοσμένο πυρήνα, θα πρέπει πρώτα να σκεφτείτε για ποιους λόγους τον χρειάζεστε. Σε πολλές περιπτώσεις, η υποστήριξη κάποιας συγκεκριμένης συσκευής μπορεί να επιτευχθεί με την χρήση κάποιου αρθρώματος (module). Τα αρθρώματα του πυρήνα βρίσκονται στον κατάλογο /boot/kernel/ και μπορούν να φορτωθούν δυναμικά στον πυρήνα που εκτελείται τη δεδομένη στιγμή, με τη χρήση της εντολής &man.kldload.8;. Τα περισσότερα, αν και όχι όλα, τα προγράμματα οδήγησης στον πυρήνα, διατίθενται και σε μορφή αρθρώματος· έχουν επίσης τη δική του σελίδα βοήθειας το καθένα. Για παράδειγμα, στην προηγούμενη ενότητα, είδαμε το πρόγραμμα οδήγησης ασύρματου Ethernet ath. Η σελίδα βοήθειας για αυτή τη συσκευή αναφέρει: Alternatively, to load the driver as a module at boot time, place the following line in &man.loader.conf.5: if_ath_load="YES" Όπως αναφέρεται στις οδηγίες, αν βάλετε την γραμμή if_ath_load="YES" στο αρχείο /boot/loader.conf, το άρθρωμα θα φορτωθεί δυναμικά κατά την εκκίνηση του συστήματος σας. Σε μερικές περιπτώσεις ωστόσο, δεν υπάρχει άρθρωμα που να σχετίζεται με κάποιο πρόγραμμα οδήγησης. Αυτό ισχύει περισσότερο για κάποια ιδιαίτερα υποσυστήματα και πολύ σημαντικά προγράμματα οδήγησης. Για παράδειγμα, το πρόγραμμα οδήγησης του συστήματος αρχείων fast file system (FFS) απαιτείται να είναι ενσωματωμένο στον πυρήνα. Το ίδιο συμβαίνει και με την υποστήριξη δικτύου (INET). Δυστυχώς, ο μόνος τρόπος για να δείτε αν ένα πρόγραμμα οδήγησης πρέπει να είναι υποχρεωτικά ενσωματωμένο στον πυρήνα, είναι να ελέγξετε αν υπάρχει το αντίστοιχο άρθρωμα. Είναι αρκετά εύκολο να αφαιρέσετε την υποστήριξη για κάποια συσκευή ή άλλη επιλογή, και να καταλήξετε με ένα πυρήνα που δεν μπορεί να ξεκινήσει. Για παράδειγμα, αν βγάλετε το πρόγραμμα οδήγησης &man.ata.4; από το αρχείο ρυθμίσεων του πυρήνα σας, αν το σύστημα σας χρησιμοποιεί δίσκους ATA δεν θα μπορεί να ξεκινήσει. Στην περίπτωση αυτή θα πρέπει να βάλετε την αντίστοιχη γραμμή στο αρχείο loader.conf για να φορτώσετε το σχετικό άρθρωμα. Αν δεν είστε σίγουροι, ελέγξτε για την ύπαρξη του αρθρώματος, και απλώς αφήστε την υποστήριξη ενσωματωμένη στον πυρήνα. Δημιουργία και Εγκατάσταση Προσαρμοσμένου Πυρήνα kernel building / installing Αρχικά, θα κάνουμε μια γρήγορη παρουσίαση του καταλόγου στον οποίο γίνεται η μεταγλώττιση του πυρήνα. Όλοι οι κατάλογοι που θα αναφέρουμε βρίσκονται κάτω από τον κατάλογο /usr/src/sys ο οποίος είναι επίσης προσβάσιμος μέσω της διαδρομής /sys. Υπάρχει εδώ ένας αριθμός υποκαταλόγων ο οποίος αντιπροσωπεύει διαφορετικά τμήματα του πυρήνα, αλλά οι πλέον σημαντικοί για το σκοπό μας είναι οι arch/conf, όπου θα επεξεργαστείτε τις ρυθμίσεις για τον προσαρμοσμένο πυρήνα σας, και ο compile, που είναι ο χώρος εργασίας στον οποίο θα γίνει η μεταγλώττιση του. Ο arch αντιπροσωπεύει ένα από τα i386, alpha, amd64, ia64, powerpc, sparc64, ή pc98 (ένας εναλλακτικός τύπος PC, διαδεδομένος στην Ιαπωνία). Οτιδήποτε βρίσκεται μέσα στον συγκεκριμένο κατάλογο μιας αρχιτεκτονικής, σχετίζεται μόνο με την αρχιτεκτονική αυτή. Το υπόλοιπο του κώδικα, είναι ανεξάρτητο από την αρχιτεκτονική και κοινό σε κάθε πλατφόρμα όπου θα μπορούσε να μεταγλωττιστεί το &os;. Παρατηρήστε τη λογική οργάνωση της δομής των καταλόγων, όπου κάθε υποστηριζόμενη συσκευή, σύστημα αρχείων και επιλογή βρίσκεται στο δικό της κατάλογο. Στα παραδείγματα αυτού του κεφαλαίου υποθέτουμε ότι χρησιμοποιείτε την αρχιτεκτονική i386. Αν δεν συμβαίνει αυτό, κάντε τις αντίστοιχες ρυθμίσεις στα ονόματα των καταλόγων και διαδρομών ώστε να συμβαδίζουν με την αρχιτεκτονική του μηχανήματος σας. Αν δεν υπάρχει ο κατάλογος /usr/src/sys στο σύστημα σας, τότε δεν έχετε εγκαταστήσει τον πηγαίο κώδικα του πυρήνα. Ο ευκολότερος τρόπος για να τον εγκαταστήσετε είναι εκτελώντας το sysinstall ως root, επιλέγοντας Configure, μετά Distributions, έπειτα src, μετά base και sys. Αν αντιπαθείτε το sysinstall αλλά έχετε πρόσβαση σε ένα επίσημο CDROM του &os; μπορείτε να εγκαταστήσετε τον πηγαίο κώδικα μέσω της γραμμής εντολών: &prompt.root; mount /cdrom &prompt.root; mkdir -p /usr/src/sys &prompt.root; ln -s /usr/src/sys /sys &prompt.root; cat /cdrom/src/ssys.[a-d]* | tar -xzvf - &prompt.root; cat /cdrom/src/sbase.[a-d]* | tar -xzvf - Έπειτα, μετακινηθείτε στον κατάλογο arch/conf και αντιγράψτε το αρχείο ρυθμίσεων GENERIC στο όνομα το οποίο θέλετε να δώσετε στο νέο σας πυρήνα. Για παράδειγμα: &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; cp GENERIC MYKERNEL Κατά παράδοση, το όνομα αυτό γράφεται εξ' ολοκλήρου με κεφαλαία γράμματα και αν έχετε πολλά μηχανήματα &os; με διαφορετικό υλικό, είναι καλή ιδέα να του δώσετε το όνομα του μηχανήματος. Για το παράδειγμα μας, θα το αποκαλούμε MYKERNEL. Δεν είναι γενικά καλή ιδέα να αποθηκεύσετε το αρχείο ρυθμίσεων σας απευθείας στον κατάλογο /usr/src. Αν αντιμετωπίσετε προβλήματα, ίσως μπείτε στον πειρασμό να διαγράψετε απλώς τον κατάλογο /usr/src και να ξεκινήσετε από την αρχή. Συνήθως λίγα δευτερόλεπτα μετά από αυτό θα συνειδητοποιήσετε ότι έχετε επίσης διαγράψει το αρχείο ρυθμίσεων του πυρήνα σας. Επίσης, μην επεξεργάζεστε απευθείας το αρχείο GENERIC, καθώς μπορεί οι αλλαγές σας να χαθούν την επόμενη φορά που θα ανανεώσετε τον πηγαίο σας κώδικα. Καλό θα είναι να αποθηκεύσετε το αρχείο ρυθμίσεων σε άλλο κατάλογο και να δημιουργήσετε ένα συμβολικό δεσμό προς το αρχείο, στον κατάλογο i386. Για παράδειγμα: &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; mkdir /root/kernels &prompt.root; cp GENERIC /root/kernels/MYKERNEL &prompt.root; ln -s /root/kernels/MYKERNEL Τώρα, τροποποιήστε το αρχείο MYKERNEL με τον επεξεργαστή κειμένου που προτιμάτε. Αν ξεκινάτε μόλις τώρα, πιθανόν ο μόνος διαθέσιμος επεξεργαστής κειμένου να είναι το vi, ο οποίος είναι αρκετά πολύπλοκος για να τον εξηγήσουμε εδώ, αλλά καλύπτεται αρκετά καλά από πλήθος βιβλίων στην βιβλιογραφία. Ωστόσο, το &os; διαθέτει επίσης ένα ευκολότερο επεξεργαστή κειμένου, τον ee ο οποίος είναι η κατάλληλη επιλογή αν είστε αρχάριος. Αλλάξτε κατά βούληση τα σχόλια στην αρχή του αρχείου ρυθμίσεων ώστε να αντανακλούν τις αλλαγές που έχετε κάνει και οι οποίες το διαχωρίζουν από το GENERIC. SunOS Αν έχετε δημιουργήσει πυρήνα στο &sunos; ή σε κάποιο άλλο λειτουργικό σύστημα τύπου BSD, το μεγαλύτερο μέρος αυτού του αρχείου θα σας φανεί γνωστό. Από την άλλη, αν έρχεστε από κάποιο άλλο λειτουργικό, όπως το DOS το αρχείο ρυθμίσεων GENERIC ίσως να σας είναι δύσκολο στην κατανόηση, για το λόγο αυτό ακολουθήστε αργά και προσεκτικά τις περιγραφές του τμήματος Αρχείο Ρυθμίσεων. Αν συγχρονίσετε τον πηγαίο κώδικα με τις τελευταίες αλλαγές του &os; project, να διαβάσετε το αρχείο /usr/src/UPDATING πριν προχωρήσετε σε οποιοδήποτε βήμα αναβάθμισης. Το αρχείο αυτό περιγράφει πιθανά σημαντικά προβλήματα ή περιοχές που χρειάζονται ιδιαίτερη προσοχή όσο αφορά τον ανανεωμένο πηγαίο κώδικα. Το αρχείο /usr/src/UPDATING ταιριάζει πάντα με την έκδοση του πηγαίου κώδικα του &os; που έχετε, και είναι για αυτό το λόγο πιο ενημερωμένο σε σχέση με ότι διαβάσετε στο παρόν βιβλίο. Θα πρέπει τώρα να μεταγλωττίσετε τον πηγαίο κώδικα του πυρήνα. Δημιουργώντας τον Πυρήνα Μετακινηθείτε στον κατάλογο /usr/src: &prompt.root; cd /usr/src Μεταγλωττίστε τον πυρήνα: &prompt.root; make buildkernel KERNCONF=MYKERNEL Εγκαταστήστε το νέο πυρήνα: &prompt.root; make installkernel KERNCONF=MYKERNEL Είναι απαραίτητο να έχετε όλο τον πηγαίο κώδικα (source tree) του &os; για να δημιουργήσετε πυρήνα. Από προεπιλογή, όταν δημιουργείτε ένα προσαρμοσμένο πυρήνα, δημιουργούνται επίσης και όλα τα modules (αρθρώματα) πυρήνα. Αν θέλετε να κάνετε πιο γρήγορη ανανέωση του πυρήνα ή να δημιουργήσετε μόνο συγκεκριμένα modules, θα πρέπει να τροποποιήσετε το αρχείο /etc/make.conf πριν ξεκινήσετε τη δημιουργία του πυρήνα: MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs Στη μεταβλητή αυτή δίνετε μια λίστα των modules που θέλετε να δημιουργηθούν, αντί να δημιουργηθούν όλα. - WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs + WITHOUT_MODULES = linux acpi sound ntfs - Στη μεταβλητή αυτή δίνετε μια λίστα modules που θέλετε να - παραλείψετε κατά τη διαδικασία δημιουργίας. Για άλλες μεταβλητές που - ίσως είναι χρήσιμες στη διαδικασία δημιουργίας πυρήνα, δείτε τη σελίδα - manual του &man.make.conf.5;. + Στη μεταβλητή αυτή δίνετε μια λίστα βασικών (top level) modules + που θέλετε να παραλείψετε κατά τη διαδικασία δημιουργίας. Για άλλες + μεταβλητές που ίσως είναι χρήσιμες στη διαδικασία δημιουργίας πυρήνα, + δείτε τη σελίδα manual του &man.make.conf.5;. /boot/kernel.old Ο νέος πυρήνας θα αντιγραφεί στον κατάλογο /boot/kernel με το όνομα /boot/kernel/kernel ενώ ο παλιός πυρήνας θα μετακινηθεί στο /boot/kernel.old/kernel. Τερματίστε τώρα το σύστημα σας και επανεκκινήστε για να χρησιμοποιήσετε το νέο πυρήνα. Αν κάτι πάει στραβά, υπάρχουν κάποιες πληροφορίες για Αντιμετώπιση Προβλημάτων που ίσως σας φανούν χρήσιμες, στο τέλος αυτού του κεφαλαίου. Βεβαιωθείτε ότι διαβάσατε το τμήμα που εξηγεί πως να επαναφέρετε το σύστημα σας σε περίπτωση που ο νέος πυρήνας δεν εκκινεί. Άλλα αρχεία που σχετίζονται με τη διαδικασία εκκίνησης, όπως ο &man.loader.8; και οι ρυθμίσεις του, βρίσκονται στον κατάλογο /boot. Εξειδικευμένα modules ή modules τρίτων κατασκευαστών μπορούν να τοποθετηθούν στον κατάλογο /boot/kernel, αν και οι χρήστες θα πρέπει να γνωρίζουν ότι είναι σημαντικό τα modules να είναι σε συγχρονισμό με τον πυρήνα. Modules τα οποία δεν προορίζονται για εκτέλεση με τον τρέχοντα πυρήνα, μπορούν να προκαλέσουν αστάθεια ή εσφαλμένη λειτουργία του συστήματος σας. Joel Dahl Ανανεώθηκε για το &os; 6.X από τον Το Αρχείο Ρυθμίσεων kernel NOTES NOTES kernel configuration file Η γενική μορφή ενός αρχείου ρυθμίσεων πυρήνα, είναι αρκετά απλή. Κάθε γραμμή περιέχει μια λέξη-κλειδί και ένα ή περισσότερα ορίσματα. Για λόγους απλότητας, οι περισσότερες γραμμές περιέχουν μόνο ένα όρισμα. Οτιδήποτε βρίσκεται μετά το σύμβολο # θεωρείται σχόλιο και αγνοείται. Στα επόμενα τμήματα θα βρείτε περιγραφή για τις λέξεις-κλειδιά, με τη σειρά που εμφανίζονται στο αρχείο ρυθμίσεων GENERIC. Για εξαντλητική λίστα των παραμέτρων και συσκευών που εξαρτώνται από την αρχιτεκτονική, δείτε το αρχείο NOTES το οποίο βρίσκεται στον ίδιο κατάλογο με το αρχείο GENERIC. Για επιλογές και ρυθμίσεις που είναι ανεξάρτητες από την αρχιτεκτονική, δείτε το αρχείο /usr/src/sys/conf/NOTES. Από το &os; 5.0 και μετά, είναι δυνατή η χρήση της οδηγίας include στα αρχεία ρυθμίσεων. Η οδηγία αυτή επιτρέπει την λογική συμπερίληψη ενός άλλου αρχείου ρυθμίσεων μέσα στο τρέχον, κάνοντας πιο εύκολη τη συντήρηση του όταν οι αλλαγές που χρειάζονται είναι λίγες σε σχέση με το αρχικό αρχείο. Για παράδειγμα, αν χρειάζεστε ένα πυρήνα GENERIC με λίγες μόνο παραπάνω επιλογές ή προγράμματα οδήγησης, μπορείτε να δημιουργήσετε ένα μικρό αρχείο διαφορών σε σχέση με τον GENERIC: include GENERIC ident MYKERNEL options IPFIREWALL options DUMMYNET options IPFIREWALL_DEFAULT_TO_ACCEPT options IPDIVERT Πολλοί διαχειριστές βρίσκουν ότι αυτό το μοντέλο προσφέρει σημαντικά πλεονεκτήματα σε σχέση με τον παραδοσιακό τρόπο συγγραφής αρχείων ρυθμίσεων από το μηδέν: το τοπικό αρχείο ρυθμίσεων περιέχει μόνο τις διαφορές από ένα πυρήνα GENERIC. Καθώς γίνονται αναβαθμίσεις στο σύστημα, τα νέα χαρακτηριστικά και δυνατότητες που προστίθενται στον GENERIC θα προστεθούν και στον προσαρμοσμένο πυρήνα, εκτός αν το αποτρέψετε χρησιμοποιώντας το nooptions ή το nodevice. Το υπόλοιπο αυτού του κεφαλαίου, εξηγεί το περιεχόμενο ενός τυπικού αρχείου ρυθμίσεων και το ρόλο που έχουν οι διάφορες επιλογές και τα προγράμματα οδήγησης που εμφανίζονται σε αυτό. Για να δημιουργήσετε ένα αρχείο το οποίο να περιέχει όλες τις διαθέσιμες επιλογές, όπως γίνεται συνήθως για δοκιμές, εκτελέστε την ακόλουθη εντολή ως root: &prompt.root; cd /usr/src/sys/i386/conf && make LINT kernel configuration file Το παρακάτω είναι ένα παράδειγμα του αρχείου ρυθμίσεων GENERIC με επιπρόσθετα διευκρινιστικά σχόλια όπου είναι απαραίτητο. Το παράδειγμα θα πρέπει να ταιριάζει αρκετά καλά με το αντίγραφο του αρχείου πού έχετε στο /usr/src/sys/i386/conf/GENERIC. kernel options machine machine i386 Πρόκειται για την αρχιτεκτονική του μηχανήματος. Πρέπει να είναι alpha, amd64, i386, ia64, pc98, powerpc, ή sparc64. kernel options cpu cpu I486_CPU cpu I586_CPU cpu I686_CPU Η παραπάνω επιλογή καθορίζει τον τύπο της CPU που έχετε στο σύστημα σας. Μπορεί να έχετε παραπάνω από μια τέτοιες γραμμές (αν για παράδειγμα δεν είστε σίγουρος αν θα πρέπει να χρησιμοποιήσετε I586_CPU ή I686_CPU), αλλά για ένα προσαρμοσμένο πυρήνα είναι καλύτερα να καθορίσετε μόνο τη CPU που έχετε. Αν δεν είστε σίγουρος για τον τύπο της CPU μπορείτε να ελέγξετε το αρχείο /var/run/dmesg.boot για να δείτε τα μηνύματα εκκίνησης του συστήματος σας. kernel options ident ident GENERIC Αυτό είναι το αναγνωριστικό όνομα του πυρήνα. Θα πρέπει να το αλλάξετε στο όνομα που δώσατε στον πυρήνα σας, π.χ. MYKERNEL αν έχετε ακολουθήσει τις οδηγίες από το προηγούμενο μας παράδειγμα. Η τιμή που θα βάλετε στο αλφαριθμητικό ident θα εκτυπώνεται όταν εκκινείτε με τον συγκεκριμένο πυρήνα, και έτσι είναι χρήσιμο να δώσετε στο νέο πυρήνα ένα διαφορετικό όνομα αν θέλετε να το ξεχωρίζετε από το συνηθισμένο πυρήνα σας (αν π.χ. θέλετε να φτιάξετε ένα πειραματικό πυρήνα). #To statically compile in device wiring instead of /boot/device.hints #hints "GENERIC.hints" # Default places to look for devices. Το αρχείο &man.device.hints.5; χρησιμοποιείται για τον καθορισμό επιλογών που σχετίζονται με τους οδηγούς συσκευών. Η προεπιλεγμένη θέση την οποία ελέγχει ο &man.loader.8; κατά την εκκίνηση είναι το /boot/device.hints. Χρησιμοποιώντας την επιλογή hints μπορείτε να ενσωματώσετε στατικά τις οδηγίες αυτές μέσα στον πυρήνα. Στην περίπτωση αυτή δεν υπάρχει λόγος να δημιουργήσετε το αρχείο device.hints στον κατάλογο /boot. makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols Η φυσιολογική διαδικασία δημιουργίας του &os; περιλαμβάνει πληροφορίες εκσφαλμάτωσης (debugging) όταν ο πυρήνας δημιουργείται με την επιλογή , επιτρέποντας έτσι την χρήση τους όταν δοθούν στο &man.gcc.1;. options SCHED_ULE # ULE scheduler Ο προεπιλεγμένος scheduler του &os;. Κρατήστε την επιλογή αυτή. options PREEMPTION # Enable kernel thread preemption Επιτρέπει σε νήματα του πυρήνα να προσπεραστούν από άλλα, υψηλότερης προτεραιότητας. Βοηθάει στην αύξηση απόκρισης του συστήματος και επιτρέπει σε νήματα διακοπών (interrupts) να εκτελεστούν πιο γρήγορα, αντί να μένουν σε αναμονή. options INET # InterNETworking Υποστήριξη δικτύου. Αφήστε την επιλογή αυτή ενεργοποιημένη, ακόμα και αν δεν σκοπεύετε να συνδεθείτε σε κάποιο δίκτυο. Τα περισσότερα προγράμματα χρειάζονται έστω και την εσωτερική (loopback) δικτύωση (τη δυνατότητα δηλ. να κάνουν συνδέσεις δικτύου μέσα στο ίδιο σας το μηχάνημα), καθιστώντας την επιλογή αυτή ουσιαστικά υποχρεωτική. options INET6 # IPv6 communications protocols Η επιλογή αυτή ενεργοποιεί τα πρωτόκολλα επικοινωνίας IPv6. options FFS # Berkeley Fast Filesystem Πρόκειται για το βασικό σύστημα αρχείων του σκληρού δίσκου. Αφήστε την επιλογή αυτή ενεργοποιημένη, αν ξεκινάτε από το σκληρό δίσκο. options SOFTUPDATES # Enable FFS Soft Updates support Η επιλογή αυτή ενεργοποιεί τα Soft Updates στον πυρήνα, το οποίο βοηθάει την επιτάχυνση της εγγραφής στους δίσκους. Ακόμα και αν η λειτουργία αυτή παρέχεται από τον πυρήνα, θα πρέπει επίσης να ενεργοποιηθεί για συγκεκριμένους δίσκους. Δείτε την έξοδο της εντολής &man.mount.8; για να δείτε αν είναι ενεργοποιημένα τα Soft Updates στους δίσκους του συστήματος σας. Αν δεν δείτε την επιλογή soft-updates θα χρειαστεί να την ενεργοποιήσετε με την εντολή &man.tunefs.8; (για υπάρχοντα συστήματα αρχείων) ή &man.newfs.8; (για νέα συστήματα αρχείων). options UFS_ACL # Support for access control lists Με την επιλογή αυτή, ενεργοποιείται η υποστήριξη του πυρήνα για λίστες ελέγχου πρόσβασης (access control lists). Τα ACLs εξαρτιούνται από τη χρήση εκτεταμένων ιδιοτήτων και από το σύστημα αρχείων UFS2, και περιγράφονται με λεπτομέρεια στο . Τα ACLs είναι ενεργοποιημένα από προεπιλογή, και δεν θα πρέπει να τα απενεργοποιήσετε από τον πυρήνα αν έχουν χρησιμοποιηθεί στο παρελθόν σε κάποιο σύστημα αρχείων, καθώς αυτό θα τα αφαιρέσει από τα αρχεία, αλλάζοντας έτσι τον τρόπο προστασίας τους με απρόβλεπτους τρόπους. options UFS_DIRHASH # Improve performance on big directories Με την επιλογή αυτή, περιλαμβάνονται λειτουργίες που αυξάνουν την ταχύτητα πρόσβασης του δίσκου σε μεγάλους καταλόγους, με κόστος τη χρήση επιπρόσθετης μνήμης. Φυσιολογικά, θα θέλετε να κρατήσετε την επιλογή αυτή σε ένα μεγάλο εξυπηρετητή ή σταθμό εργασίας, και να την αφαιρέσετε όταν χρησιμοποιείτε το &os; σε ένα μικρό σύστημα όπου η μνήμη είναι περιορισμένη και η ταχύτητα πρόσβασης στο δίσκο είναι λιγότερο σημαντική, όπως για παράδειγμα σε ένα firewall. options MD_ROOT # MD is a potential root device Με την επιλογή αυτή ενεργοποιείται η υποστήριξη χρήσης ενός εικονικού δίσκου στη μνήμη RAM (ramdrive) για χρήση ως συσκευή root. kernel options NFS kernel options NFS_ROOT options NFSCLIENT # Network Filesystem Client options NFSSERVER # Network Filesystem Server options NFS_ROOT # NFS usable as /, requires NFSCLIENT Το δικτυακό σύστημα αρχείων. Αν δεν έχετε σκοπό να προσαρτήσετε συστήματα αρχείων από άλλο εξυπηρετητή αρχείων &unix; μέσω TCP/IP, μπορείτε να μετατρέψετε αυτές τις γραμμές σε σχόλια. kernel options MSDOSFS options MSDOSFS # MSDOS Filesystem Το σύστημα αρχείων του &ms-dos;. Αν δεν σκοπεύετε να προσαρτήσετε δίσκο DOS κατά την εκκίνηση, μπορείτε με ασφάλεια να μετατρέψετε την επιλογή αυτή σε σχόλιο. Η υποστήριξη θα φορτωθεί αυτόματα την πρώτη φορά που θα προσαρτήσετε κατάτμηση DOS όπως περιγράψαμε παραπάνω. Επίσης, το εξαιρετικό πρόγραμμα emulators/mtools σας επιτρέπει να έχετε πρόσβαση σε δισκέτες DOS χωρίς να χρειάζεται να τις προσαρτήσετε και να αποπροσαρτήσετε (και επίσης δεν απαιτεί τη χρήση του MSDOSFS). options CD9660 # ISO 9660 Filesystem Το σύστημα αρχείων ISO 9660 για CDROM. Μετατρέψτε το σε σχόλιο αν δεν έχετε οδηγό CDROM ή αν σπάνια προσαρτάτε CD δεδομένων (καθώς θα φορτωθεί δυναμικά την πρώτη φορά που θα προσαρτήσετε τέτοιο CD ). Τα μουσικά CD δεν χρειάζονται αυτό το σύστημα αρχείων. options PROCFS # Process filesystem (requires PSEUDOFS) Αυτό το σύστημα αρχείων περιέχει τις διεργασίες του συστήματος. Πρόκειται για ένα εικονικό σύστημα αρχείων το οποίο προσαρτάται στον κατάλογο /proc και επιτρέπει σε προγράμματα όπως το &man.ps.1; να δίνουν περισσότερες πληροφορίες για τις διεργασίες που εκτελούνται. Η χρήση του PROCFS δεν απαιτείται στις περισσότερες περιπτώσεις, καθώς τα περισσότερα εργαλεία παρακολούθησης και εκσφαλμάτωσης έχουν προσαρμοστεί να εκτελούνται χωρίς το PROCFS. Στις νέες εγκαταστάσεις, αυτό το σύστημα αρχείων δεν προσαρτάται από προεπιλογή. options PSEUDOFS # Pseudo-filesystem framework Πυρήνες της σειράς 6.Χ που χρησιμοποιούν το PROCFS πρέπει επίσης να παρέχουν υποστήριξη για το PSEUDOFS. options GEOM_GPT # GUID Partition Tables. Με την επιλογή αυτή δίνεται η δυνατότητα ύπαρξης μεγάλου αριθμού κατατμήσεων σε ένα μόνο δίσκο. options COMPAT_43 # Compatible with BSD 4.3 [KEEP THIS!] Συμβατότητα με το 4.3BSD. Αφήστε την επιλογή αυτή ενεργή: κάποια προγράμματα θα συμπεριφέρονται παράξενα αν την απενεργοποιήσετε. options COMPAT_FREEBSD4 # Compatible with &os;4 Η επιλογή αυτή απαιτείται σε συστήματα &os; 5.X &i386; και Alpha για την υποστήριξη εφαρμογών που έχουν μεταγλωττιστεί σε παλιότερες εκδόσεις του &os; και οι οποίες χρησιμοποιούν παλιές διεπαφές και κλήσεις συστήματος. Συνίσταται να υπάρχει αυτή η επιλογή σε όλα τα συστήματα &i386; και Alpha τα οποία εκτελούν παλιότερες εφαρμογές. Αρχιτεκτονικές όπως η ia64 και η &sparc64; που άρχισαν να υποστηρίζονται από την έκδοση 5.Χ και μετά δεν χρειάζονται αυτή την επιλογή. options COMPAT_FREEBSD5 # Compatible with &os;5 Η επιλογή αυτή απαιτείται στο &os; 6.X και άνω για την υποστήριξη εφαρμογών που έχουν μεταγλωττιστεί στο &os; 5.X και χρησιμοποιούν τις αντίστοιχες κλήσεις συστήματος. options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI Με την επιλογή αυτή ο πυρήνας περιμένει 5 δευτερόλεπτα πριν ανιχνεύσει κάθε συσκευή SCSI στο σύστημα σας. Αν έχετε μόνο IDE δίσκους μπορείτε να την αγνοήσετε, διαφορετικά μπορείτε να δοκιμάσετε να μειώσετε τον αριθμό αυτό, για να επιταχύνετε την εκκίνηση. Φυσικά, αν το κάνετε αυτό και ανακαλύψετε ότι το &os; έχει πρόβλημα στην αναγνώριση των συσκευών σας, θα πρέπει να την ανεβάσετε ξανά. options KTRACE # ktrace(1) support Η επιλογή αυτή ενεργοποιεί το tracing των διεργασιών του πυρήνα, το οποίο είναι χρήσιμο στην εκσφαλμάτωση. options SYSVSHM # SYSV-style shared memory Η επιλογή αυτή ενεργοποιεί την κοινόχρηστη μνήμη σύμφωνα με το πρότυπο του System V. Η πλέον κοινή χρήση της, είναι η επέκταση XSHM στα Χ η οποία χρησιμοποιείται αυτόματα από πολλές βαριές εφαρμογές γραφικών για καλύτερη ταχύτητα. Αν χρησιμοποιείτε Χ, σίγουρα θέλετε να περιλάβετε αυτή την επιλογή. options SYSVMSG # SYSV-style message queues Υποστήριξη για μηνύματα του System V. Η επιλογή αυτή προσθέτει μόνο μερικές εκατοντάδες bytes στον πυρήνα. options SYSVSEM # SYSV-style semaphores Υποστήριξη σηματοφορέων του System V. Χρησιμοποιείται λιγότερο συχνά, αλλά προσθέτει μόνο μερικές εκατοντάδες bytes στον πυρήνα. Η επιλογή της εντολής &man.ipcs.1; θα σας δείξει ποιες διεργασίες χρησιμοποιούν κάθε μια από αυτές τις λειτουργίες του System V. options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions Επεκτάσεις πραγματικού χρόνου (Real-time) που προστέθηκαν στο &posix; το 1993. Χρησιμοποιείται από κάποιες εφαρμογές στη συλλογή των ports (όπως το &staroffice;). options KBD_INSTALL_CDEV # install a CDEV entry in /dev Η επιλογή αυτή είναι απαραίτητη για τη δημιουργία του αρχείου συσκευής πληκτρολογίου στον κατάλογο /dev. options ADAPTIVE_GIANT # Giant mutex is adaptive. Το Giant είναι το όνομα ενός συστήματος αμοιβαίου αποκλεισμού (sleep mutex) το οποίο προστατεύει ένα μεγάλο αριθμό πόρων του πυρήνα. Στις μέρες μας, αυτό θεωρείται ανεπίτρεπτο από πλευράς απόδοσης και αντικαθίσταται με κλειδώματα τα οποία προστατεύουν συγκεκριμένους πόρους. Η επιλογή ADAPTIVE_GIANT επιτρέπει στο Giant να συμπεριληφθεί στο σετ των mutexes που μπορούν να εκτελεστούν επιλεκτικά. Έτσι, αν ένα νήμα θέλει να κλειδώσει το Giant mutex, αλλά αυτό είναι ήδη κλειδωμένο από ένα νήμα σε μια άλλη CPU, το πρώτο νήμα θα συνεχίσει να εκτελείται, και θα περιμένει για την απελευθέρωση του κλειδώματος. Φυσιολογικά, το νήμα θα επέστρεφε στην κατάσταση ύπνου (sleep) και θα περίμενε για την επόμενη ευκαιρία εκτέλεσης του. Αν δεν είστε σίγουρος, αφήστε αυτή την επιλογή ενεργή. Σημειώστε ότι από το &os; 8.0-CURRENT και τις επόμενες εκδόσεις, όλα τα mutexes έχουν από προεπιλογή τη δυνατότητα προσαρμογής, εκτός αν έχει επίτηδες γίνει διαφορετική ρύθμιση, χρησιμοποιώντας την επιλογή NO_ADAPTIVE_MUTEXES κατά τη μεταγλώττιση. Το Giant έχει επίσης δυνατότητα προσαρμογής πλέον, και έτσι η επιλογή ADAPTIVE_GIANT έχει αφαιρεθεί από το αρχείο ρυθμίσεων πυρήνα. kernel options SMP device apic # I/O APIC Η συσκευή apic επιτρέπει τη χρήση του I/O APIC για την παράδοση των interrupts (διακοπών). Η συσκευή apic μπορεί να χρησιμοποιηθεί τόσο σε πυρήνες για ένα επεξεργαστή (UP) όσο και για πολλαπλούς (SMP), αλλά στη δεύτερη περίπτωση είναι απαραίτητη. Προσθέστε την επιλογή options SMP για να έχετε υποστήριξη πολλαπλών επεξεργαστών. Η συσκευή apic υπάρχει μόνο στην αρχιτεκτονική i386, η γραμμή αυτή δεν θα πρέπει να χρησιμοποιηθεί σε άλλες αρχιτεκτονικές. device eisa Θα πρέπει να συμπεριλάβετε την επιλογή αυτή αν έχετε μητρική με δίαυλο τύπου EISA. Ενεργοποιείται έτσι η αυτόματη ανίχνευση και ρύθμιση όλων των συσκευών στο δίαυλο EISA. device pci Θα πρέπει να συμπεριλάβετε αυτή την επιλογή αν έχετε μητρική με δίαυλο PCI. Ενεργοποιείται έτσι η αυτόματη ανίχνευση των καρτών PCI και η επικοινωνία μεταξύ των διαύλων PCI και ISA. # Floppy drives device fdc Πρόκειται για τον ελεγκτή μονάδας δισκέτας. # ATA and ATAPI devices device ata Αυτός ο οδηγός υποστηρίζει όλες τις συσκευές τύπου ATA και ATAPI. Χρειάζεστε μόνο μια καταχώρηση device ata για να ανιχνεύσει ο πυρήνας όλες τις συσκευές ATA/ATAPI τύπου PCI στα σύγχρονα μηχανήματα. device atadisk # ATA disk drives Η επιλογή αυτή απαιτείται μαζί με το device ata για την υποστήριξη δίσκων ATA. device ataraid # ATA RAID drives Η επιλογή αυτή απαιτείται μαζί με τοdevice ata για την υποστήριξη δίσκων ATA RAID. device atapicd # ATAPI CDROM drives Η επιλογή αυτή απαιτείται μαζί με το device ata για την υποστήριξη οδηγών ATAPI CDROM. device atapifd # ATAPI floppy drives Η επιλογή αυτή απαιτείται μαζί με το device ata για την υποστήριξη οδηγών δισκέτας ATAPI. device atapist # ATAPI tape drives Η επιλογή αυτή απαιτείται μαζί με το device ata για την υποστήριξη μονάδων ταινίας ATAPI. options ATA_STATIC_ID # Static device numbering Με την επιλογή αυτή, ο αριθμός του ελεγκτή γίνεται στατικός. Χωρίς αυτή, οι αριθμοί συσκευών αποδίδονται δυναμικά. # SCSI Controllers device ahb # EISA AHA1742 family device ahc # AHA2940 and onboard AIC7xxx devices options AHC_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~128k to driver. device ahd # AHA39320/29320 and onboard AIC79xx devices options AHD_REG_PRETTY_PRINT # Print register bitfields in debug # output. Adds ~215k to driver. device amd # AMD 53C974 (Teckram DC-390(T)) device isp # Qlogic family #device ispfw # Firmware for QLogic HBAs- normally a module device mpt # LSI-Logic MPT-Fusion #device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (newer chipsets + those of `ncr') device trm # Tekram DC395U/UW/F DC315U adapters device adv # Advansys SCSI adapters device adw # Advansys wide SCSI adapters device aha # Adaptec 154x SCSI adapters device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60. device bt # Buslogic/Mylex MultiMaster SCSI adapters device ncv # NCR 53C500 device nsp # Workbit Ninja SCSI-3 device stg # TMC 18C30/18C50 Ελεγκτές SCSI. Μπορείτε να μετατρέψετε σε σχόλιο οποιονδήποτε δεν έχετε στο σύστημα σας. Αν το σύστημα σας έχει μόνο συσκευές IDE, μπορείτε να αφαιρέσετε όλες τις γραμμές. Οι γραμμές τύπου *_REG_PRETTY_PRINT χρησιμοποιούνται για να δίνουν περισσότερες διαγνωστικές πληροφορίες για τους αντίστοιχους οδηγούς. # SCSI peripherals device scbus # SCSI bus (required for SCSI) device ch # SCSI media changers device da # Direct Access (disks) device sa # Sequential Access (tape etc) device cd # CD device pass # Passthrough device (direct SCSI access) device ses # SCSI Environmental Services (and SAF-TE) Περιφερειακά SCSI. Μπορείτε και πάλι να μετατρέψετε σε σχόλιο όσες συσκευές δεν έχετε, ή αν έχετε μόνο συσκευές IDE, μπορείτε να αφαιρέσετε εντελώς αυτές τις γραμμές. Ο οδηγός USB &man.umass.4; και κάποιοι άλλοι οδηγοί χρησιμοποιούν το υποσύστημα SCSI αν και δεν είναι πραγματικές SCSI συσκευές. Για το λόγο αυτό, σιγουρευτείτε ότι δεν αφαιρέσατε την υποστήριξη SCSI αν περιλαμβάνονται τέτοιοι οδηγοί στο αρχείο ρύθμισης του πυρήνα σας. # RAID controllers interfaced to the SCSI subsystem device amr # AMI MegaRAID device arcmsr # Areca SATA II RAID device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID device ciss # Compaq Smart RAID 5* device dpt # DPT Smartcache III, IV - See NOTES for options device hptmv # Highpoint RocketRAID 182x device rr232x # Highpoint RocketRAID 232x device iir # Intel Integrated RAID device ips # IBM (Adaptec) ServeRAID device mly # Mylex AcceleRAID/eXtremeRAID device twa # 3ware 9000 series PATA/SATA RAID # RAID controllers device aac # Adaptec FSA RAID device aacp # SCSI passthrough for aac (requires CAM) device ida # Compaq Smart RAID device mfi # LSI MegaRAID SAS device mlx # Mylex DAC960 family device pst # Promise Supertrak SX6000 device twe # 3ware ATA RAID Υποστηριζόμενοι ελεγκτές RAID. Αν δεν έχετε κανένα από αυτούς, μπορείτε να τους μετατρέψετε σε σχόλια ή να τους αφαιρέσετε εντελώς. # atkbdc0 controls both the keyboard and the PS/2 mouse device atkbdc # AT keyboard controller Ο ελεγκτής πληκτρολογίου (atkbdc) παρέχει υπηρεσίες I/O για πληκτρολόγια τύπου AT και συσκευές κατάδειξης (ποντίκια) τύπου PS/2. Ο ελεγκτής απαιτείται για τη λειτουργία του οδηγού πληκτρολογίου (atkbd) και του οδηγού συσκευής κατάδειξης PS/2 (psm). device atkbd # AT keyboard Ο οδηγός atkbd, μαζί με τον ελεγκτή atkbdc, παρέχει πρόσβαση σε πληκτρολόγιο τύπου AT 84 ή εκτεταμένου AT το οποίο συνδέεται στον ελεγκτή πληκτρολογίου. device psm # PS/2 mouse Χρησιμοποιήστε αυτή τη συσκευή αν το ποντίκι σας συνδέεται στην θύρα PS/2. device kbdmux # keyboard multiplexer Βασική υποστήριξη πολυπλεξίας πληκτρολογίων. Αν δε σκοπεύετε να χρησιμοποιήσετε περισσότερα από ένα πληκτρολόγια στο σύστημα σας, μπορείτε με ασφάλεια να αφαιρέσετε αυτή τη γραμμή. device vga # VGA video card driver Το πρόγραμμα οδήγησης της κάρτας γραφικών. device splash # Splash screen and screen saver support Γραφική οθόνη (splash) κατά την εκκίνηση! Η συσκευή αυτή χρησιμοποιείται επίσης από τα προγράμματα προφύλαξης οθόνης (κονσόλας). # syscons is the default console driver, resembling an SCO console device sc Ο οδηγός sc είναι ο προεπιλεγμένος οδηγός κονσόλας και προσομοιώνει κονσόλα τύπου SCO. Καθώς τα περισσότερα προγράμματα πλήρους οθόνης αποκτούν πρόσβαση στην κονσόλα μέσω κάποιας βιβλιοθήκης βάσης δεδομένων τερματικών όπως το termcap, δεν θα πρέπει να έχει σημασία αν χρησιμοποιήσετε αυτόν τον οδηγό ή τον vt ο οποίος είναι συμβατός με κονσόλα VT220. Μετά την είσοδο σας στο σύστημα, θέστε την μεταβλητή TERM στην τιμή scoansi αν κάποια προγράμματα πλήρους οθόνης έχουν πρόβλημα όταν χρησιμοποιείται αυτή η κονσόλα. # Enable this for the pcvt (VT220 compatible) console driver #device vt #options XSERVER # support for X server on a vt console #options FAT_CURSOR # start with block cursor Πρόκειται για ένα οδηγό κονσόλας συμβατό με VT220, και με προς τα πίσω συμβατότητα με VT100/102. Λειτουργεί καλά σε κάποιους φορητούς υπολογιστές που έχουν ασυμβατότητα υλικού με τον sc. Μετά την είσοδο σας στο σύστημα, θέστε την μεταβλητή TERM σε vt100 ή vt220. Ο οδηγός μπορεί επίσης να αποδειχθεί χρήσιμος όταν συνδέεστε σε μεγάλο αριθμό από διαφορετικά μηχανήματα μέσω δικτύου, όπου δεν υπάρχουν καταχωρήσεις για τη συσκευή sc στο termcap ή terminfo — το vt100 θα πρέπει να είναι διαθέσιμο πρακτικά σε κάθε πλατφόρμα. device agp Συμπεριλάβετε τη συσκευή αυτή αν έχετε AGP κάρτα στο σύστημα σας. Θα ενεργοποιήσετε με αυτό τον τρόπο την υποστήριξη για AGP και AGP GART για μητρικές που υποστηρίζουν αυτές τις λειτουργίες. APM # Power management support (see NOTES for more options) #device apm Υποστήριξη Advanced Power Management (προχωρημένης διαχείρισης ισχύος). Χρήσιμο για φορητά, αν και η επιλογή αυτή, από προεπιλογή, είναι ανενεργή στον πυρήνα GENERIC. # Add suspend/resume support for the i8254. device pmtimer Πρόγραμμα οδήγησης μετρητή χρόνου (Timer) για συμβάντα που σχετίζονται με διαχείριση ενέργειας όπως το APM και το ACPI. # PCCARD (PCMCIA) support # PCMCIA and cardbus bridge support device cbb # cardbus (yenta) bridge device pccard # PC Card (16-bit) bus device cardbus # CardBus (32-bit) bus Υποστήριξη PCMCIA. Την χρειάζεστε αν χρησιμοποιείτε φορητό υπολογιστή. # Serial (COM) ports device sio # 8250, 16[45]50 based serial ports Πρόκειται για τις σειριακές θύρες οι οποίες είναι γνωστές στον κόσμο του &ms-dos;/&windows; ως θύρες COM. Αν έχετε εσωτερικό μόντεμ στη θύρα COM4 και έχετε και σειριακή θύρα COM2, θα πρέπει να αλλάξετε το IRQ του μόντεμ στο 2 (για περίεργους τεχνικούς λόγους, IRQ2 = IRQ 9) για να μπορέσετε να το χρησιμοποιήσετε από το &os;. Αν έχετε κάρτα πολλαπλών σειριακών εξόδων, ελέγξτε τη σελίδα manual του &man.sio.4; για περισσότερες πληροφορίες σχετικά με τις σωστές τιμές που πρέπει να προσθέσετε στο /boot/device.hints. Κάποιες κάρτες γραφικών (ειδικά αυτές που βασίζονται σε ολοκληρωμένα S3) χρησιμοποιούν διευθύνσεις IO μορφής 0x*2e8, και καθώς πολλές φτηνές σειριακές κάρτες δεν αποκωδικοποιούν πλήρως τη 16 bit περιοχή διευθύνσεων, συγκρούονται με τις κάρτες αυτές, καθιστώντας έτσι πρακτικά άχρηστη τη θύρα COM4. Κάθε σειριακή πόρτα χρειάζεται να έχει μια μοναδική IRQ (εκτός αν χρησιμοποιείτε κάρτα πολλαπλών σειριακών που υποστηρίζει κοινή χρήση interrupts), και έτσι δεν μπορούν να χρησιμοποιηθούν τα προεπιλεγμένα interrupts για την COM3 και την COM4. # Parallel port device ppc Πρόκειται για την παράλληλη θύρα στο δίαυλο ISA. device ppbus # Parallel port bus (required) Παρέχει υποστήριξη για το δίαυλο της παράλληλης θύρας. device lpt # Printer Παρέχει υποστήριξη για εκτυπωτές παράλληλης θύρας. Χρειάζεστε και τα τρία παραπάνω για να ενεργοποιήσετε την υποστήριξη εκτυπωτή παράλληλης θύρας. device plip # TCP/IP over parallel Πρόκειται για το πρόγραμμα οδήγησης δικτύου μέσω παράλληλης θύρας. device ppi # Parallel port interface device Πρόγραμμα I/O γενικής χρήσης (geek port) + IEEE1284 I/O. #device vpo # Requires scbus and da zip drive Χρησιμοποιείται για μονάδα δισκέτας Iomega Zip. Απαιτεί υποστήριξη από τους οδηγούς scbus και da. Η καλύτερη απόδοση επιτυγχάνεται με θύρα σε κατάσταση λειτουργίας EPP 1.9. #device puc Ενεργοποιήστε αυτή τη συσκευή αν έχετε μια χαζή σειριακή ή παράλληλη PCI κάρτα η οποία υποστηρίζεται από το πρόγραμμα οδήγησης &man.puc.4; (glue driver). # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (Tulip) device em # Intel PRO/1000 adapter Gigabit Ethernet Card device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (Typhoon) device vx # 3Com 3c590, 3c595 (Vortex) Διάφορα προγράμματα οδήγησης για PCI κάρτες δικτύου. Μετατρέψτε σε σχόλιο ή αφαιρέστε τελείως όσες δεν υπάρχουν στο σύστημα σας. # PCI Ethernet NICs that use the common MII bus controller code. # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! device miibus # MII bus support Η υποστήριξη διαύλου MII απαιτείται για κάποιες κάρτες δικτύου Ethernet PCI 10/100, ειδικά για αυτές που χρησιμοποιούν πομποδέκτη συμβατό με MII ή έχουν διεπαφή ελέγχου που λειτουργεί παρόμοια με τον MII. Προσθέτοντας device miibus στο αρχείο ρύθμισης του πυρήνα, θα έχετε υποστήριξη για το γενικό API του miibus και για όλους τους οδηγούς PHY, συμπεριλαμβανομένου και ενός γενικού για PHYs που δεν υποστηρίζονται από κάποιο συγκεκριμένο οδηγό. device bce # Broadcom BCM5706/BCM5708 Gigabit Ethernet device bfe # Broadcom BCM440x 10/100 Ethernet device bge # Broadcom BCM570xx Gigabit Ethernet device dc # DEC/Intel 21143 and various workalikes device fxp # Intel EtherExpress PRO/100B (82557, 82558) device lge # Level 1 LXT1001 gigabit ethernet device msk # Marvell/SysKonnect Yukon II Gigabit Ethernet device nge # NatSemi DP83820 gigabit ethernet device nve # nVidia nForce MCP on-board Ethernet Networking device pcn # AMD Am79C97x PCI 10/100 (precedence over 'lnc') device re # RealTek 8139C+/8169/8169S/8110S device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (Starfire) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet device ste # Sundance ST201 (D-Link DFE-550TX) device stge # Sundance/Tamarack TC9021 gigabit Ethernet device ti # Alteon Networks Tigon I/II gigabit Ethernet device tl # Texas Instruments ThunderLAN device tx # SMC EtherPower II (83c170 EPIC) device vge # VIA VT612x gigabit ethernet device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (Boomerang, Cyclone) Προγράμματα οδήγησης που χρησιμοποιούν τον κώδικα του διαύλου ελέγχου MII. # ISA Ethernet NICs. pccard NICs included. device cs # Crystal Semiconductor CS89x0 NIC # 'device ed' requires 'device miibus' device ed # NE[12]000, SMC Ultra, 3c503, DS8390 cards device ex # Intel EtherExpress Pro/10 and Pro/10+ device ep # Etherlink III based cards device fe # Fujitsu MB8696x based cards device ie # EtherExpress 8/16, 3C507, StarLAN 10 etc. device lnc # NE2100, NE32-VL Lance Ethernet cards device sn # SMC's 9000 series of Ethernet chips device xe # Xircom pccard Ethernet # ISA devices that use the old ISA shims #device le Προγράμματα οδήγησης καρτών Ethernet τύπου ISA. Δείτε το αρχείο /usr/src/sys/i386/conf/NOTES για λεπτομέρειες σχετικά με το ποιες κάρτες υποστηρίζονται από ποιον οδηγό. # Wireless NIC cards device wlan # 802.11 support Γενική υποστήριξη του 802.11. Η γραμμή αυτή απαιτείται για ασύρματη δικτύωση. device wlan_wep # 802.11 WEP support device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support Υποστήριξη κρυπτογράφησης για συσκευές 802.11. Οι γραμμές αυτές χρειάζονται αν σκοπεύετε να χρησιμοποιήσετε κρυπτογράφηση και πρωτόκολλα ασφαλείας 802.11i. device an # Aironet 4500/4800 802.11 wireless NICs. device ath # Atheros pci/cardbus NIC's device ath_hal # Atheros HAL (Hardware Access Layer) device ath_rate_sample # SampleRate tx rate control for ath device awi # BayStack 660 and others device ral # Ralink Technology RT2500 wireless NICs. device wi # WaveLAN/Intersil/Symbol 802.11 wireless NICs. #device wl # Older non 802.11 Wavelan wireless NIC. Υποστήριξη για διάφορες ασύρματες κάρτες. # Pseudo devices device loop # Network loopback Πρόκειται για τη γενική συσκευή εσωτερικού δικτύου (loopback) του TCP/IP. Η σύνδεση μέσω telnet ή FTP στο localhost (γνωστό επίσης και ως 127.0.0.1) πραγματοποιείται μέσω αυτής της συσκευής. Η ύπαρξη αυτής της συσκευής είναι υποχρεωτική. device random # Entropy device Κρυπτογραφικά ασφαλής γεννήτρια τυχαίων αριθμών. device ether # Ethernet support Η γραμμή ether απαιτείται μόνο αν έχετε κάρτα δικτύου Ethernet. Περιέχει γενικό κώδικα για το πρωτόκολλο Ethernet. device sl # Kernel SLIP Η γραμμή sl παρέχει υποστήριξη SLIP. Η υποστήριξη αυτή έχει σχεδόν ολοκληρωτικά ξεπεραστεί από το PPP, το οποίο είναι ευκολότερο στη ρύθμιση, υποστηρίζει καλύτερα τις συνδέσεις μέσω μόντεμ, και παρέχει καλύτερες δυνατότητες. device ppp # Kernel PPP Η γραμμή αυτή είναι για υποστήριξη PPP μέσω του πυρήνα για επιλογικές (dial-up) συνδέσεις. Υπάρχει επίσης μια έκδοση PPP η οποία υλοποιείται ως εφαρμογή χρήστη (userland), χρησιμοποιεί το tun και προσφέρει περισσότερη ευελιξία και λειτουργίες όπως κλήση κατά απαίτηση (demand dialing). device tun # Packet tunnel. Η συσκευή αυτή χρησιμοποιείται από το πρόγραμμα PPP χρήστη (userland). Δείτε το τμήμα PPP αυτού του βιβλίου για περισσότερες πληροφορίες. device pty # Pseudo-ttys (telnet etc) Πρόκειται για συσκευή ψευδό-τερματικού ή προσομοίωσης θύρας login. Χρησιμοποιείται για εισερχόμενες συνδέσεις telnet και rlogin, από το xterm, και από κάποιες άλλες εφαρμογές όπως το Emacs. device md # Memory disks Ψευτό-συσκευές δίσκου με χρήση μνήμης (ramdrives). device gif # IPv6 and IPv4 tunneling Η συσκευή αυτή υλοποιεί IPv6 σε IPv4 tunneling, IPv4 σε IPv6 tunneling, IPv4 σε IPv4 tunneling, και IPv6 σε IPv6 tunneling. Η συσκευή gif αυτό-κλωνοποιείται, και δημιουργεί τα αντίστοιχα αρχεία συσκευών όπως απαιτούνται. device faith # IPv6-to-IPv4 relaying (translation) Αυτή η ψεύδο-συσκευή συλλαμβάνει πακέτα που στέλνονται προς αυτήν και τα ανακατευθύνει προς το δαίμονα μετάφρασης του IPv4/IPv6. # The `bpf' device enables the Berkeley Packet Filter. # Be aware of the administrative consequences of enabling this! # Note that 'bpf' is required for DHCP. device bpf # Berkeley packet filter Πρόκειται για το φίλτρο πακέτων Berkeley. Αυτή η ψεύδο-συσκευή επιτρέπει σε κάρτες δικτύου να λειτουργούν σε κατάσταση promiscuous (πλήρους ακρόασης), συλλαμβάνοντας με αυτό τον τρόπο κάθε πακέτο ενός δικτύου (π.χ. Ethernet). Τα πακέτα αυτά μπορεί να αποθηκεύονται στο δίσκο ή να εξετάζονται με τη βοήθεια του προγράμματος &man.tcpdump.1;. Η συσκευή &man.bpf.4; χρησιμοποιείται επίσης από το &man.dhclient.8; για την ανάκτηση της διεύθυνσης IP της προεπιλεγμένης πύλης κ.ο.κ. Αν χρησιμοποιείτε DHCP, αφήστε αυτή την επιλογή ενεργοποιημένη. # USB support device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface device ehci # EHCI PCI->USB interface (USB 2.0) device usb # USB Bus (required) #device udbp # USB Double Bulk Pipe devices device ugen # Generic device uhid # Human Interface Devices device ukbd # Keyboard device ulpt # Printer device umass # Disks/Mass storage - Requires scbus and da device ums # Mouse device ural # Ralink Technology RT2500USB wireless NICs device urio # Diamond Rio 500 MP3 player device uscanner # Scanners # USB Ethernet, requires mii device aue # ADMtek USB Ethernet device axe # ASIX Electronics USB Ethernet device cdce # Generic USB over Ethernet device cue # CATC USB Ethernet device kue # Kawasaki LSI USB Ethernet device rue # RealTek RTL8150 USB Ethernet Υποστήριξη για διάφορες συσκευές USB. # FireWire support device firewire # FireWire bus code device sbp # SCSI over FireWire (Requires scbus and da) device fwe # Ethernet over FireWire (non-standard!) Υποστήριξη για διάφορες συσκευές Firewire. Για περισσότερες πληροφορίες και επιπλέον συσκευές που υποστηρίζονται από το &os;, δείτε το αρχείο /usr/src/sys/i386/conf/NOTES . Λειτουργία με Μεγάλη Ποσότητα Μνήμης (<acronym>PAE</acronym>) Physical Address Extensions (PAE) large memory Μηχανήματα με μεγάλη ποσότητα μνήμης, χρειάζονται πρόσβαση σε μνήμη που υπερβαίνει το όριο των 4 gigabytes των Εικονικών Διευθύνσεων Χρήστη+Πυρήνα (User+Kernel Virtual Address, KVA). Εξαιτίας αυτού του περιορισμού, η Intel πρόσθεσε υποστήριξη για 36bit φυσικών διευθύνσεων, από τον επεξεργαστή &pentium; Pro και μετά. Η δυνατότητα Επέκτασης Φυσικών Διευθύνσεων, (Physical Address Extension, PAE) των &intel; &pentium; Pro και μεταγενέστερων CPU, επιτρέπει χρήση μνήμης ως 64 gigabytes. To &os; παρέχει υποστήριξη για τη δυνατότητα αυτή μέσω της ρύθμισης πυρήνα , η οποία διατίθεται για όλες τις τρέχουσες σταθερές εκδόσεις του &os;. Λόγω περιορισμών στην αρχιτεκτονική του συστήματος μνήμης της Intel, δεν γίνεται διάκριση για τη μνήμη που βρίσκεται πάνω ή κάτω από τα 4 gigabytes. Η μνήμη που εκχωρείται πάνω από τα 4 gigabytes, απλώς προστίθεται στο μέγεθος της διαθέσιμης μνήμης. Για να ενεργοποιήσετε την υποστήριξη PAE στον πυρήνα, απλώς προσθέστε την ακόλουθη γραμμή στο αρχείο των ρυθμίσεων σας: options PAE Η υποστήριξη PAE στο &os; είναι διαθέσιμη μόνο για επεξεργαστές αρχιτεκτονικής &intel; IA-32. Θα πρέπει επίσης να σημειώσουμε ότι η υποστήριξη PAE στο &os; δεν έχει δοκιμαστεί εκτεταμένα, και θα πρέπει να θεωρείται ποιότητας beta σε σχέση με τα άλλα σταθερά χαρακτηριστικά του &os;. Η υποστήριξη PAE στο &os; υπόκειται σε κάποιους περιορισμούς: Μια διαδικασία δεν έχει πρόσβαση σε περισσότερα από 4 gigabytes χώρου VM. Οδηγοί συσκευών που δεν χρησιμοποιούν τη διεπαφή &man.bus.dma.9; ίσως προκαλέσουν καταστροφή δεδομένων σε ένα PAE πυρήνα και για το λόγο αυτό δεν συνίσταται η χρήση τους. Στο &os; παρέχεται ένα αρχείο ρυθμίσεων PAE στο οποίο έχουν εξαιρεθεί όλα τα προγράμματα οδήγησης που είναι γνωστό ότι δεν δουλεύουν σε πυρήνα τύπου PAE. Κάποιες μεταβλητές συστήματος (system tunables) εξακριβώνουν τη χρήση της μνήμης, βλέποντας το ποσό της διαθέσιμης φυσικής μνήμης. Αυτές οι μεταβλητές μπορεί να χρησιμοποιήσουν αδικαιολόγητα μεγάλη ποσότητα μνήμης, λόγω της φύσης του συστήματος PAE. Ένα τέτοιο παράδειγμα είναι η ρύθμιση sysctl η οποία ελέγχει το μέγιστο αριθμό vnodes που επιτρέπονται στον πυρήνα. Είναι σκόπιμο να ρυθμίσετε αυτή και άλλες παρόμοιες παραμέτρους σε λογικές τιμές. Ίσως χρειαστεί να ρυθμίσετε τις εικονικές διευθύνσεις του πυρήνα (KVA) ή να μειώσετε την ποσότητα κάποιου συγκεκριμένου πόρου που έχει μεγάλη χρήση (δείτε παραπάνω) για να αποφύγετε την εξάντληση του KVA. Μπορείτε να αυξήσετε το μέγεθος του KVA μέσω της επιλογής . Για λόγους σταθερότητας και απόδοσης, σας συμβουλεύουμε να διαβάσετε τη σελίδα manual &man.tuning.7;. Επίσης η σελίδα &man.pae.4; περιέχει ενημερωμένες πληροφορίες σχετικά με την υποστήριξη PAE στο &os;. Αν Κάτι Πάει Λάθος Υπάρχουν τέσσερις κατηγορίες προβλημάτων που μπορούν να παρουσιαστούν όταν δημιουργείτε ένα προσαρμοσμένο πυρήνα: Αποτυχία της εντολής config: Αν η εντολή &man.config.8; αποτυγχάνει όταν της δίνετε την περιγραφή του πυρήνα σας, έχετε κατά πάσα πιθανότητα, κάνει κάποιο απλό λάθος. Ευτυχώς, η &man.config.8; θα σας δείξει τον αριθμό γραμμής στον οποίο συνάντησε το πρόβλημα, και έτσι θα μπορέσετε εύκολα να το εντοπίσετε. Για παράδειγμα, αν δείτε: config: line 17: syntax error Βεβαιωθείτε ότι η λέξη-κλειδί στη γραμμή αυτή είναι σωστή, συγκρίνοντας τη με την αντίστοιχη στο αρχείο GENERIC ή σε άλλο αρχείο αναφοράς. Αποτυχία της εντολής make: Αν αποτυγχάνει η εντολή make, συνήθως αυτό σημαίνει κάποιο λάθος στο αρχείο ρυθμίσεων το οποίο δεν είναι αρκετά σοβαρό για να το καταλάβει η &man.config.8;. Κοιτάξτε ξανά το αρχείο ρυθμίσεων σας και αν ακόμα δεν μπορείτε να εντοπίσετε το πρόβλημα, στείλτε το μαζί με το αρχείο με mail στην &a.questions; και θα εντοπιστεί πολύ γρήγορα. Ο πυρήνας δεν εκκινεί: Αν ο νέος σας πυρήνας δεν εκκινεί ή αποτυγχάνει να αναγνωρίσει τις συσκευές σας, μην πανικοβάλλεστε! Ευτυχώς, το &os; έχει ένα εξαιρετικό μηχανισμό για να επανέλθετε από μη-συμβατούς πυρήνες. Απλώς επιλέξτε τον πυρήνα από τον οποίο θέλετε να ξεκινήσετε μέσω του συστήματος εκκίνησης (boot loader) του &os;. Έχετε πρόσβαση σε αυτό, την ώρα που εμφανίζεται το μενού επιλογών εκκίνησης. Επιλέξτε Escape to a loader prompt, αριθμός έξι. Στην προτροπή που εμφανίζεται, γράψτε την εντολή unload kernel και έπειτα γράψτε boot /boot/kernel.old/kernel , ή το όνομα αρχείου ενός άλλου πυρήνα που ξεκινάει κανονικά. Όταν φτιάχνετε ένα νέο πυρήνα, είναι πάντα καλή ιδέα να έχετε πρόχειρο ένα πυρήνα που ξέρετε ότι δουλεύει. Αφού εκκινήσετε με ένα καλό πυρήνα, μπορείτε να ελέγξετε το αρχείο ρυθμίσεων σας από την αρχή, και να προσπαθήσετε ξανά. Μια χρήσιμη πηγή πληροφοριών είναι το αρχείο /var/log/messages το οποίο μεταξύ άλλων καταγράφει όλα τα μηνύματα του πυρήνα από κάθε επιτυχημένη εκκίνηση. Επίσης η εντολή &man.dmesg.8; θα σας δείξει όλα τα μηνύματα του πυρήνα της τρέχουσας εκκίνησης. Αν έχετε πρόβλημα στη δημιουργία πυρήνα, βεβαιωθείτε ότι έχετε κρατήσει ένα πυρήνα GENERIC, ή κάποιο άλλο που γνωρίζετε ότι λειτουργεί, χρησιμοποιώντας ένα διαφορετικό όνομα ώστε να μη διαγραφεί στην επόμενη μεταγλώττιση. Δεν μπορείτε να βασιστείτε στον πυρήνα kernel.old, γιατί κάθε φορά που εγκαθιστάτε νέο πυρήνα, το kernel.old αντικαθίσταται με τον τελευταίο εγκατεστημένο πυρήνα, ο οποίος μπορεί να μην λειτουργεί. Επίσης, όσο το δυνατόν πιο σύντομα, μετακινήστε τον πυρήνα που λειτουργεί στην σωστή θέση, /boot/kernel, διαφορετικά εντολές όπως η &man.ps.1; ίσως να μη λειτουργούν σωστά. Για να το κάνετε αυτό, απλώς μετονομάστε τον κατάλογο που περιέχει τον καλό πυρήνα, π.χ: &prompt.root; mv /boot/kernel /boot/kernel.bad &prompt.root; mv /boot/kernel.good /boot/kernel Ο νέος πυρήνας λειτουργεί, αλλά η &man.ps.1; δεν λειτουργεί πλέον: Αν εγκαταστήσετε πυρήνα διαφορετικής έκδοσης από αυτόν με τον οποίο έχουν φτιαχτεί τα εργαλεία συστήματος, για παράδειγμα εάν βάλετε ένα πυρήνα της σειράς -CURRENT σε ένα σύστημα -RELEASE, πολλές από τις εντολές που σχετίζονται με την κατάσταση του συστήματος όπως ή &man.ps.1; και η &man.vmstat.8; δεν θα λειτουργούν πλέον. Θα πρέπει να μεταγλωττίσετε και να εγκαταστήσετε όλο το βασικό σύστημα (world) χρησιμοποιώντας ίδια έκδοση του πηγαίου κώδικα με αυτή του πυρήνα σας. Αυτός είναι και ένας λόγος για τον οποίο δεν είναι συνήθως καλή ιδέα να χρησιμοποιείτε διαφορετική έκδοση πυρήνα από το υπόλοιπο του λειτουργικού συστήματος. diff --git a/el_GR.ISO8859-7/books/handbook/l10n/chapter.sgml b/el_GR.ISO8859-7/books/handbook/l10n/chapter.sgml index 15bfeebb56..036953b243 100644 --- a/el_GR.ISO8859-7/books/handbook/l10n/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/l10n/chapter.sgml @@ -1,1041 +1,1040 @@ Andrey Chernov Συνεισφορά του Michael C. Wu Γράφηκε ξανά από τον Τοπικές Ρυθμίσεις - Χρήση και ρύθμιση I18N/L10N Σύνοψη Το &os; είναι ένα ιδιαίτερα αποκεντρωμένο έργο με χρήστες και εθελοντές σε ολόκληρο τον κόσμο. Στο κεφάλαιο αυτό συζητούνται οι δυνατότητες τοπικών και διεθνών ρυθμίσεων του &os;, οι οποίες επιτρέπουν σε χρήστες γλωσσών εκτός της Αγγλικής να εκτελέσουν πραγματική εργασία. Υπάρχουν πολλοί παράγοντες στην υλοποίηση του πλαισίου i18n, τόσο σε επίπεδο συστήματος, όσο και εφαρμογών, και για το λόγο αυτό, όπου χρειάζεται, παραπέμπουμε τον αναγνώστη σε πιο συγκεκριμένες πηγές τεκμηρίωσης. Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Πως κωδικοποιούνται οι γλώσσες και οι τοπικές ρυθμίσεις στα σύγχρονα λειτουργικά συστήματα. Πως να βάλετε τοπικές ρυθμίσεις στο κέλυφος σας (login shell). Πως να ρυθμίσετε την κονσόλα για γλώσσες εκτός της Αγγλικής. Πως να χρησιμοποιήσετε αποτελεσματικά το σύστημα X Windows με διαφορετικές γλώσσες. Που να βρείτε περισσότερες πληροφορίες για τη συγγραφή εφαρμογών συμβατών με το πρότυπο i18n. Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει: Να γνωρίζετε πως να εγκαταστήσετε πρόσθετο λογισμικό τρίτου κατασκευαστή (). Βασικές Γνώσεις Τι Είναι το I18N/L10N; internationalization localization localization Οι ομάδες ανάπτυξης λογισμικού δημιούργησαν τον όρο I18N, ως συντόμευση της λέξης internationalization (διεθνοποίηση), μετρώντας απλώς τα γράμματα της λέξης ανάμεσα στο πρώτο και το τελευταίο. Ο όρος L10N έχει προκύψει με τον ίδιο τρόπο, αυτή τη φορά από τη λέξη localization (τοπικοποίηση, ή απλώς τοπικές ρυθμίσεις). Συνδυάζοντας μεταξύ τους τις μεθόδους, τα πρωτόκολλα, και τις εφαρμογές που συμβαδίζουν με τα I18N/L10N, οι χρήστες μπορούν να χρησιμοποιήσουν τις γλώσσες της επιλογής τους. Οι εφαρμογές I18N προγραμματίζονται με τη βοήθεια εργαλείων (kits) και βιβλιοθηκών. Επιτρέπεται έτσι στους προγραμματιστές να γράψουν ένα απλό αρχείο και να μεταφράσουν τα μενού και τα κείμενα που απεικονίζει η εφαρμογή, σε κάθε γλώσσα που απαιτείται. Συνιστούμε ένθερμα στους προγραμματιστές να ακολουθούν την παραπάνω σύμβαση. Γιατί Πρέπει να Χρησιμοποιήσω τα I18N/L10N; Τα I18N/L10N χρησιμοποιούνται κάθε φορά που επιθυμείτε να δείτε, να εισάγετε, ή να επεξεργαστείτε δεδομένα σε γλώσσες εκτός της Αγγλικής. Ποιες Γλώσσες Υποστηρίζονται στο I18N; Το I18N και το L10N δεν είναι ειδικά φτιαγμένα για το &os;. Την δεδομένη στιγμή, υποστηρίζονται οι περισσότερες γνωστές γλώσσες, συμπεριλαμβανομένων των: Κινεζικών, Γερμανικών, Γιαπωνέζικων, Κορεατικών, Γαλλικών, Ρωσικών, Βιετναμέζικων, κ.α. Χρήση των Τοπικών Ρυθμίσεων Το I18N είναι στην πραγματικότητα μια σύμβαση, και δεν έχει δημιουργηθεί αποκλειστικά για το &os;. Επιθυμούμε τη βοήθεια σας ώστε το &os; να ακολουθεί αυτή τη σύμβαση. locale Οι τοπικές ρυθμίσεις βασίζονται σε τρεις βασικούς όρους: Κωδικό Γλώσσας, Κωδικό Χώρας και Κωδικοποίηση. Τα ονόματα των τοπικών ρυθμίσεων προκύπτουν από τους παραπάνω όρους, με τον τρόπο που περιγράφεται παρακάτω: ΚωδικόςΓλώσσας_ΚωδικόςΧώρας.Κωδικοποίηση Κωδικοί Γλωσσών και Χωρών language codes country codes Για να χρησιμοποιηθούν οι τοπικές ρυθμίσεις για μια συγκεκριμένη γλώσσα σε ένα σύστημα &os; (ή σε άλλο σύστημα τύπου &unix; που υποστηρίζει το πρότυπο I18N), ο χρήστης θα πρέπει να βρει τους κωδικούς της συγκεκριμένης χώρας και γλώσσας (οι κωδικοί χωρών καθοδηγούν τις εφαρμογές σχετικά με τη διάλεκτο της γλώσσας που πρέπει να χρησιμοποιηθεί). Προγράμματα όπως φυλλομετρητές, εξυπηρετητές ιστοσελίδων, εξυπηρετητές SMTP/POP κλπ. παίρνουν επίσης κάποιες αποφάσεις που εξαρτώνται από τους κωδικούς αυτούς. Παρακάτω φαίνονται μερικά παραδείγματα γλωσσών/χωρών: Κωδικός Γλώσσας/Χώρας Περιγραφή en_US Αγγλικά - Ηνωμένες Πολιτείες ru_RU Ρώσικα - Ρωσία zh_TW Παραδοσιακά Κινέζικα - Ταϊβάν Κωδικοποιήσεις encodings ASCII Κάποιες γλώσσες χρησιμοποιούν κωδικοποιήσεις που δεν είναι ASCII, αλλά περιέχουν χαρακτήρες 8-bit, wide, ή multibyte (δείτε τη σελίδα manual &man.multibyte.3; για περισσότερες πληροφορίες). Οι πιο καινούριες εφαρμογές συνήθως αναγνωρίζουν τους χαρακτήρες 8-bit. Ανάλογα με την υλοποίηση, οι χρήστες μπορεί να χρειάζεται να μεταγλωττίσουν μια εφαρμογή με υποστήριξη χαρακτήρων wide ή multibyte, ή να προσαρμόσουν τις ρυθμίσεις του προγράμματος. Για να έχετε την ικανότητα να εισάγετε και να επεξεργάζεστε χαρακτήρες multibyte, η Συλλογή των Ports του &os; διαθέτει προγράμματα για κάθε γλώσσα. Δείτε την τεκμηρίωση για το I18N στο αντίστοιχο Port του &os;. Ειδικότερα, ο χρήστης χρειάζεται να διαβάσει την τεκμηρίωση της εφαρμογής, για να αποφασίσει πως πρέπει να τη ρυθμίσει σωστά ή πως να περάσει τις σωστές τιμές στο configure, το Makefile ή τον μεταγλωττιστή. Θα πρέπει να έχετε κατά νου κάποια πράγματα: Σετ χαρακτήρων που εξαρτώνται από τη γλώσσα (single C chars character set, δείτε την &man.multibyte.3;), π.χ. ISO8859-1, ISO8859-15, KOI8-R, CP437. Κωδικοποιήσεις Wide ή multibyte, π.χ. EUC, Big5. Μπορείτε να δείτε την ενεργή λίστα των σετ χαρακτήρων στο Μητρώο IANA. Το &os; χρησιμοποιεί για τις τοπικές ρυθμίσεις κωδικοποιήσεις συμβατές με το X11. Εφαρμογές I18N Στο σύστημα πακέτων και ports του &os;, οι εφαρμογές που σχετίζονται με το I18N έχουν στο όνομα τους τη λέξη I18N ώστε να αναγνωρίζονται εύκολα. Ωστόσο, μπορεί να μην υποστηρίζουν πάντοτε τη γλώσσα που χρειάζεστε. Τοπικές Ρυθμίσεις Είναι συνήθως αρκετό να γίνει export η τιμή με την ονομασία της επιθυμητής τοπικής ρύθμισης, μέσω της μεταβλητής περιβάλλοντος LANG στο κέλυφος εισόδου. Αυτό μπορεί να γίνει στο αρχείο ~/.login_conf του χρήστη, ή στο αρχείο εκκίνησης του κελύφους του χρήστη (~/.profile, ~/.bashrc, ~/.cshrc). Δεν είναι ανάγκη να θέσετε και τις υπόλοιπες μεταβλητές των τοπικών ρυθμίσεων, όπως οι LC_CTYPE, LC_CTIME. Για περισσότερες πληροφορίες, διαβάστε την τεκμηρίωση του &os; που σχετίζεται με την υποστήριξη της επιθυμητής γλώσσας. Θα πρέπει να θέσετε τις δύο παρακάτω μεταβλητές περιβάλλοντος, στα αρχεία ρυθμίσεων: POSIX Την LANG για λειτουργίες που ανήκουν στην οικογένεια &posix; &man.setlocale.3; MIME Την MM_CHARSET για το σύνολο χαρακτήρων MIME των εφαρμογών. Το παραπάνω περιλαμβάνει την ρύθμιση του κελύφους χρήστη, την ρύθμιση για μια συγκεκριμένη εφαρμογή, και τη ρύθμιση για τα X11. Μέθοδοι Αλλαγής Τοπικών Ρυθμίσεων locale login class Υπάρχουν δύο μέθοδοι για την αλλαγή των τοπικών ρυθμίσεων, τις οποίες και περιγράφουμε παρακάτω. Η πρώτη (την οποία και συνιστούμε) υλοποιείται θέτοντας τιμές στις μεταβλητές περιβάλλοντος στο login class, και η δεύτερη αλλάζοντας τις τιμές των μεταβλητών περιβάλλοντος στο αρχείο εκκίνησης του κελύφους του χρήστη. Μέθοδος Κλάσεων Εισόδου (Login Class) Η μέθοδος αυτή επιτρέπει να γίνει η ρύθμιση των μεταβλητών περιβάλλοντος μια φορά για κάθε κέλυφος, αντί να χρειάζεται να τεθούν συγκεκριμένες τιμές στο αρχείο εκκίνησης του καθενός χωριστά. Οι Ρυθμίσεις σε Επίπεδο Χρήστη μπορούν να γίνουν από τον ίδιο το χρήστη, ενώ οι Ρυθμίσεις σε Επίπεδο Διαχειριστή απαιτούν προνόμια υπερχρήστη. Ρυθμίσεις σε Επίπεδο Χρήστη Το παρακάτω απλό παράδειγμα, δείχνει ένα αρχείο .login_conf στον κατάλογο κάποιου χρήστη στο οποίο και οι δύο μεταβλητές έχουν τεθεί για κωδικοποίηση Latin-1: me:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1: Traditional ChineseBIG-5 encoding Παρακάτω βλέπετε ένα .login_conf στο οποίο οι μεταβλητές έχουν τεθεί για Παραδοσιακά Κινέζικα σε κωδικοποίηση BIG-5. Παρατηρήστε ότι έχουμε θέσει πολύ περισσότερες μεταβλητές, καθώς κάποιες εφαρμογές δεν σέβονται σωστά τις μεταβλητές για Κινέζικα, Γιαπωνέζικα και Κορεάτικα. #Users who do not wish to use monetary units or time formats #of Taiwan can manually change each variable me:\ :lang=zh_TW.Big5:\ :setenv=LC_ALL=zh_TW.Big:\ :setenv=LC_COLLATE=zh_TW.Big5:\ :setenv=LC_CTYPE=zh_TW.Big5:\ :setenv=LC_MESSAGES=zh_TW.Big5:\ :setenv=LC_MONETARY=zh_TW.Big5:\ :setenv=LC_NUMERIC=zh_TW.Big5:\ :setenv=LC_TIME=zh_TW.Big5:\ :charset=big5:\ :xmodifiers="@im=gcin": #Set gcin as the XIM Input Server Για περισσότερες πληροφορίες, δείτε τις Ρυθμίσεις σε Επίπεδο Διαχειριστή και την &man.login.conf.5;. Ρυθμίσεις σε Επίπεδο Διαχειριστή Βεβαιωθείτε ότι έχει οριστεί η σωστή γλώσσα στην κλάση του χρήστη, στο αρχείο /etc/login.conf. Στο αρχείο αυτό θα πρέπει να υπάρχουν οι παρακάτω ρυθμίσεις: language_name:accounts_title:\ :charset=MIME_charset:\ :lang=locale_name:\ :tc=default: Με βάση το προηγούμενο παράδειγμα μας που χρησιμοποιήσαμε Latin-1, το αρχείο θα μοιάζει με το παρακάτω: german:German Users Accounts:\ :charset=ISO-8859-1:\ :lang=de_DE.ISO8859-1:\ :tc=default: Πριν κάνετε αλλαγές στις Κλάσεις Εισόδου (Login Classes) των χρηστών, εκτελέστε την παρακάτω εντολή: &prompt.root; cap_mkdb /etc/login.conf ώστε να ενεργοποιηθούν στο σύστημα οι αλλαγές που κάνατε στο /etc/login.conf. Αλλαγή Κλάσεων Εισόδου μέσω της &man.vipw.8; vipw Χρησιμοποιήστε την vipw για να προσθέσετε νέους χρήστες, και κάντε την καταχώριση να μοιάζει με την παρακάτω: user:password:1111:11:language:0:0:User Name:/home/user:/bin/sh Αλλαγή Κλάσεων Εισόδου μέσω της &man.adduser.8; adduser login class Χρησιμοποιήστε την adduser για να προσθέσετε νέους χρήστες, και έπειτα ακολουθήστε τις παρακάτω οδηγίες: Θέστε το defaultclass = language στο /etc/adduser.conf. Να έχετε υπόψη σας ότι σε αυτή την περίπτωση, θα πρέπει να ορίσετε μια κλάση default για όλους τους χρήστες άλλων γλωσσών. Μια εναλλακτική λύση, είναι να απαντάτε κάθε φορά στην ερώτηση Enter login class: default []: που εμφανίζεται από την &man.adduser.8;. Ακόμα μια εναλλακτική λύση, είναι να χρησιμοποιήσετε το παρακάτω σε κάθε χρήστη που θέλετε να προσθέσετε και ο οποίος χρησιμοποιεί διαφορετική γλώσσα: &prompt.root; adduser -class language Αλλαγή Κλάσεων Εισόδου μέσω της &man.pw.8; pw Αν χρησιμοποιείτε την &man.pw.8; για να προσθέσετε νέους χρήστες, καλέστε την με τον παρακάτω τρόπο: &prompt.root; pw useradd user_name -L language Μέθοδος Αρχείων Εκκίνησης Κελύφους Η μέθοδος αυτή δεν συνίσταται, καθώς απαιτεί διαφορετικές ρυθμίσεις για κάθε διαφορετικό πρόγραμμα κελύφους που χρησιμοποιείται. Προτιμήστε καλύτερα την μέθοδο των Κλάσεων Εισόδου. MIME locale Για να προσθέσετε τις τοπικές ρυθμίσεις και το σετ χαρακτήρων MIME, ρυθμίστε απλώς τις δύο μεταβλητές περιβάλλοντος που φαίνονται παρακάτω στο αρχείο /etc/profile ή/και στο /etc/csh.login. Θα χρησιμοποιήσουμε τα Γερμανικά ως γλώσσα για το παρακάτω παράδειγμα: Στο /etc/profile: LANG=de_DE.ISO8859-1; export LANG MM_CHARSET=ISO-8859-1; export MM_CHARSET Ή στο /etc/csh.login: setenv LANG de_DE.ISO8859-1 setenv MM_CHARSET ISO-8859-1 Εναλλακτικά, μπορείτε να προσθέσετε τις παραπάνω οδηγίες στο /usr/share/skel/dot.profile (αντίστοιχα με τις οδηγίες για το /etc/profile που είδαμε παραπάνω), ή στο /usr/share/skel/dot.login (αντίστοιχα με τις οδηγίες για το /etc/csh.login που είδαμε επίσης παραπάνω). Για το X11: Στο $HOME/.xinitrc: LANG=de_DE.ISO8859-1; export LANG Ή: setenv LANG de_DE.ISO8859-1 Ανάλογα με το κέλυφος που χρησιμοποιείτε (δείτε παραπάνω). Ρυθμίσεις για την Κονσόλα Για όλα τα single C σετ χαρακτήρων, μπορείτε να θέσετε τις γραμματοσειρές της κονσόλας στο /etc/rc.conf για την επιθυμητή γλώσσα, γράφοντας: font8x16=font_name font8x14=font_name font8x8=font_name Το font_name εδώ προκύπτει από το αντίστοιχο αρχείο του καταλόγου /usr/share/syscons/fonts, αφαιρώντας την κατάληξη .fnt. sysinstall keymap screenmap - Βεβαιωθείτε επίσης ότι χρησιμοποιείτε την κατάλληλη αντιστοίχηση + Αν χρειάζεται, χρησιμοποιήστε την κατάλληλη αντιστοίχηση πληκτρολογίου (keymap) και οθόνης για το σετ χαρακτήρων single C που χρησιμοποιείτε, μέσω του - sysinstall (/stand/sysinstall - σε εκδόσεις του &os; παλιότερες από την 5.2). + sysinstall. Μόλις εκτελέσετε το sysinstall, επιλέξτε το Configure, και έπειτα το Console. Εναλλακτικά, μπορείτε να προσθέσετε το παρακάτω στο /etc/rc.conf: scrnmap=screenmap_name keymap=keymap_name keychange="fkey_number sequence" Στην περίπτωση αυτή, το screenmap_name προέρχεται από ένα αρχείο του καταλόγου /usr/share/syscons/scrnmaps, χωρίς την κατάληξη .scm. Η αντιστοίχηση οθόνης μαζί με την αντίστοιχη γραμματοσειρά, χρησιμοποιείται συνήθως για την επέκταση του 8ου bit στο 9o, για κάρτες VGA που χρησιμοποιούν μήτρα χαρακτήρων με 8 στήλες. Αν έχετε ενεργοποιημένο τον δαίμονα moused στο αρχείο /etc/rc.conf: moused_enable="YES" καλό θα είναι να εξετάσετε τις πληροφορίες σχετικά με τον δρομέα του ποντικιού που εμφανίζονται στην παρακάτω παράγραφο. moused Ο προεπιλεγμένος δρομέας του ποντικιού που χρησιμοποιείται από το πρόγραμμα οδήγησης &man.syscons.4;, καταλαμβάνει τις θέσεις 0xd0-0xd3 του συνόλου χαρακτήρων. Αν αυτή η περιοχή χαρακτήρων δεν είναι διαθέσιμη στη γλώσσα που χρησιμοποιείτε, θα πρέπει να μετακινήσετε την περιοχή του δρομέα έξω από αυτήν. Για να γίνει αυτό στο &os;, προσθέστε την ακόλουθη γραμμή στο /etc/rc.conf: mousechar_start=3 Το keymap_name προέρχεται από ένα αρχείο του καταλόγου /usr/share/syscons/keymaps, χωρίς την κατάληξη .kbd. Αν δεν είστε σίγουρος για την αντιστοίχηση πληκτρολογίου που χρειάζεται να χρησιμοποιήσετε, μπορείτε να χρησιμοποιήσετε το &man.kbdmap.1; για να κάνετε δοκιμές σε διάφορες αντιστοιχίσεις, χωρίς να χρειάζεται να κάνετε επανεκκίνηση. Η λειτουργία keychange χρησιμοποιείται συνήθως για τον προγραμματισμό των πλήκτρων λειτουργιών (function keys), ώστε να ταιριάζουν με τον επιλεγμένο τύπο τερματικού, καθώς οι ακολουθίες των πλήκτρων λειτουργιών δεν μπορούν να καθοριστούν στις αντιστοιχίσεις πληκτρολογίου. Βεβαιωθείτε επίσης ότι έχετε ρυθμίσει το σωστό τύπου τερματικού στο /etc/ttys για όλες τις καταχωρίσεις ttyv*. Τη δεδομένη στιγμή, οι προκαθορισμένες αντιστοιχίες είναι: Σετ Χαρακτήρων Τύπος Τερματικού ISO8859-1 ή ISO8859-15 cons25l1 ISO8859-2 cons25l2 ISO8859-7 cons25l7 KOI8-R cons25r KOI8-U cons25u CP437 (προεπιλεγμένο VGA) cons25 US-ASCII cons25w Για γλώσσες με χαρακτήρες wide ή multibyte, χρησιμοποιήστε το σωστό &os; port στον κατάλογο /usr/ports/language. Μερικές θύρες εμφανίζονται ως κονσόλα, ενώ το σύστημα τις βλέπει ως σειριακά vtty, και έτσι πρέπει να παρακρατήσετε αρκετά vtty, τόσο για το X11 όσο και για την ψευτό-σειριακή κονσόλα. Παρακάτω θα βρείτε μια μερικώς ενημερωμένη λίστα για χρήση άλλων γλωσσών στην κονσόλα: Γλώσσα Τοποθεσία Παραδοσιακά Κινέζικα (BIG-5) chinese/big5con Γιαπωνέζικα japanese/kon2-16dot ή japanese/mule-freewnn Κορεάτικα korean/han Ρύθμιση του X11 Αν και το X11 δεν είναι μέρος του &os; Project, θα δώσουμε εδώ κάποιες χρήσιμες πληροφορίες για όσους το χρησιμοποιούν στο &os;. Για περισσότερες πληροφορίες, δείτε την δικτυακή τοποθεσία του &xorg;, ή του εξυπηρετητή X11 που πρόκειται να χρησιμοποιήσετε. Στο αρχείο ~/.Xresources, μπορείτε επιπρόσθετα να αλλάξετε και άλλες ρυθμίσεις που σχετίζονται με το I18N (π.χ. γραμματοσειρές, μενού, κ.λ.π.). Απεικόνιση Γραμματοσειρών X11 True Type font server Εγκαταστήστε τον εξυπηρετητή &xorg; (x11-servers/xorg-server) ή τον εξυπηρετητή &xfree86; (x11-servers/XFree86-4-Server), και έπειτα εγκαταστήστε τις γραμματοσειρές &truetype; για την επιθυμητή γλώσσα. Με τις σωστές τοπικές ρυθμίσεις, θα μπορείτε να δείτε την επιλεγμένη γλώσσα στα μενού και τα μηνύματα του γραφικού περιβάλλοντος. Εισαγωγή μη-Αγγλικών Χαρακτήρων X11 Input Method (XIM) Η μέθοδος εισόδου X11 (XIM, X11 Input Method), είναι ένα νέο πρότυπο για όλους τους πελάτες X11. Όλες οι εφαρμογές του X11 θα πρέπει να γράφονται ως πελάτες του XIM, και να λαμβάνουν είσοδο από εξυπηρετητές εισόδου XIM. Υπάρχουν διαθέσιμοι διάφοροι εξυπηρετητές XIM, για διαφορετικές γλώσσες. Ρύθμιση Εκτυπωτή Κάποια σετ χαρακτήρων single C είναι συνήθως ενσωματωμένα στο ίδιο το υλικό των εκτυπωτών. Τα σετ χαρακτήρων τύπου wide ή multibyte απαιτούν ειδικές ρυθμίσεις, και συνιστούμε να χρησιμοποιήσετε το apsfilter. Μπορείτε επίσης να μετατρέψετε το έγγραφο σας σε &postscript; ή PDF, χρησιμοποιώντας εργαλεία ειδικά φτιαγμένα για τη συγκεκριμένη γλώσσα. Πυρήνας και Συστήματα Αρχείων Το σύστημα αρχείων FFS (fast filesystem) του &os; μπορεί να διαχειριστεί ονόματα αρχείων που ανήκουν σε σετ single C (είναι 8-bit clean, δείτε και το &man.multibyte.3;), αλλά δεν αποθηκεύει το σετ χαρακτήρων που χρησιμοποιείται. Με άλλα λόγια, είναι 8-bit αλλά δεν γνωρίζει τίποτα για την κωδικοποίηση των χαρακτήρων. Επίσημα, το FFS δεν υποστηρίζει ακόμα σετ χαρακτήρων wide ή multibyte. Υπάρχουν ωστόσο κάποια ανεξάρτητα patches για το FFS που υποστηρίζουν αυτές τις δυνατότητες. Πρόκειται μόνο για προσωρινές και μη μεταφέρσιμες λύσεις ή hacks, και έχουμε αποφασίσει να μην τα περιλάβουμε στο κεντρικό δέντρο πηγαίου κώδικα. Δείτε τις ιστοσελίδες των αντίστοιχων γλωσσών για περισσότερες πληροφορίες και για να ανακτήσετε τα απαραίτητα αρχεία. DOS Unicode Το σύστημα αρχείων &ms-dos; στο &os; έχει την δυνατότητα να ρυθμιστεί ώστε να μετατρέπει μεταξύ των σετ χαρακτήρων Unicode, του &ms-dos;, και του σετ χαρακτήρων που έχει επιλεγεί για το σύστημα αρχείων του &os;. Για περισσότερες λεπτομέρειες, δείτε τη σελίδα manual &man.mount.msdosfs.8;. Μεταγλώττιση Προγραμμάτων I18N Πολλά ports του &os; διαθέτουν υποστήριξη I18N. Σε μερικά από αυτά, το -I18N είναι μέρος του ονόματος τους. Τα προγράμματα αυτά, και πολλά περισσότερα, έχουν ενσωματωμένη υποστήριξη για I18N και δεν χρειάζονται άλλες ειδικές ρυθμίσεις. MySQL Ωστόσο, σε κάποιες εφαρμογές όπως η MySQL, θα πρέπει να ρυθμιστεί το Makefile με το επιθυμητό σετ χαρακτήρων. Αυτό συνήθως γίνεται περνώντας μια τιμή στο configure στον πηγαίο κώδικα, ή αλλάζοντας το ίδιο το Makefile. Τοπικές Ρυθμίσεις για Συγκεκριμένες Γλώσσες Andrey Chernov Αρχική συνεισφορά του Ρώσικη Γλώσσα (Κωδικοποίηση KOI8-R) localization Russian Για περισσότερες πληροφορίες σχετικά με την κωδικοποίηση KOI8-R, δείτε τις Αναφορές Σχετικά με το Σετ Χαρακτήρων KOIR-8 (Ρωσικό Σύνολο Χαρακτήρων). Τοπικές Ρυθμίσεις Τοποθετήστε τις ακόλουθες γραμμές στο αρχείο σας ~/.login_conf: me:My Account:\ :charset=KOI8-R:\ :lang=ru_RU.KOI8-R: Για παραδείγματα που σχετίζονται με τις Τοπικές Ρυθμίσεις, δείτε προηγούμενες ενότητες σε αυτό το κεφάλαιο. Ρύθμιση Κονσόλας Προσθέστε την ακόλουθη γραμμή στο αρχείο /etc/rc.conf: mousechar_start=3 Χρησιμοποιήστε επίσης τις παρακάτω ρυθμίσεις στο /etc/rc.conf: keymap="ru.koi8-r" scrnmap="koi8-r2cp866" font8x16="cp866b-8x16" font8x14="cp866-8x14" font8x8="cp866-8x8" Για κάθε καταχώριση ttyv* στο αρχείο /etc/ttys, χρησιμοποιήστε το cons25r ως τύπο τερματικού. Για παραδείγματα που σχετίζονται με την ρύθμιση της κονσόλας, δείτε προηγούμενες ενότητες αυτού του κεφαλαίου. Ρύθμιση Εκτυπωτή printers Καθώς οι περισσότεροι εκτυπωτές που διαθέτουν Ρωσικούς χαρακτήρες έχουν ενσωματωμένη την κωδικοσελίδα CP866, θα χρειαστείτε ειδικό φίλτρο εξόδου για να μετατρέψετε από το KOI8-R στο CP866. Το φίλτρο αυτό εγκαθίσταται από προεπιλογή στο /usr/libexec/lpr/ru/koi2alt. Η καταχώριση για ένα Ρώσικο εκτυπωτή στο /etc/printcap θα μοιάζει με την παρακάτω: lp|Russian local line printer:\ :sh:of=/usr/libexec/lpr/ru/koi2alt:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: Δείτε το &man.printcap.5; για πιο λεπτομερή περιγραφή. Σύστημα Αρχείων &ms-dos; και Ρώσικα Ονόματα Αρχείων Το παρακάτω υπόδειγμα καταχώρισης στο &man.fstab.5; ενεργοποιεί την υποστήριξη για Ρώσικα ονόματα αρχείων σε προσαρτημένα συστήματα αρχείων τύπου &ms-dos;: /dev/ad0s2 /dos/c msdos rw,-Wkoi2dos,-Lru_RU.KOI8-R 0 0 Η επιλογή επιλέγει τις τοπικές ρυθμίσεις που θα χρησιμοποιηθούν, και η ορίζει τον πίνακα μετατροπής χαρακτήρων. Για να χρησιμοποιήσετε την επιλογή βεβαιωθείτε ότι έχετε προσαρτήσει την κατάτμηση /usr πριν την κατάτμηση &ms-dos;, καθώς οι πίνακες μετατροπής βρίσκονται στο /usr/libdata/msdosfs. Για περισσότερες πληροφορίες, δείτε τη σελίδα manual του &man.mount.msdosfs.8;. Ρύθμιση X11 Εκτελέστε πρώτα τις γενικές τοπικές ρυθμίσεις που έχουμε ήδη περιγράψει. Αν χρησιμοποιείτε τον εξυπηρετητή &xorg;, εγκαταστήστε το πακέτο x11-fonts/xorg-fonts-cyrillic. Ελέγξτε την ενότητα "Files" στο αρχείο /etc/X11/xorg.conf. Θα πρέπει να προσθέσετε την παρακάτω γραμμή πριν από οποιαδήποτε άλλη καταχώριση FontPath: FontPath "/usr/local/lib/X11/fonts/cyrillic" Δείτε στην Συλλογή των Ports για περισσότερες κυριλλικές γραμματοσειρές. Για την ενεργοποίηση του Ρωσικού πληκτρολογίου, προσθέστε τις παρακάτω γραμμές στην ενότητα "Keyboard" του αρχείου xorg.conf: Option "XkbLayout" "us,ru" Option "XkbOptions" "grp:toggle" Βεβαιωθείτε επίσης ότι η γραμμή XkbDisable είναι ανενεργή (μαρκαρισμένη ως σχόλιο). Αν χρησιμοποιήσετε το grp:toggle η εναλλαγή RUS/LAT θα γίνεται με το Δεξιό Alt, ενώ αν θέσετε grp:ctrl_shift_toggle, η εναλλαγή θα γίνεται με το CtrlShift. Για grp:caps_toggle, η εναλλαγή RUS/LAT θα γίνεται με το CapsLock. Η κανονική λειτουργία του CapsLock εξακολουθεί να είναι διαθέσιμη μέσω του συνδυασμού πλήκτρων ShiftCapsLock (μόνο σε κατάσταση LAT). Το grp:caps_toggle για κάποιο άγνωστο λόγο, δεν λειτουργεί στο &xorg;. Αν το πληκτρολόγιο σας διαθέτει πλήκτρα &windows;, και έχετε παρατηρήσει ότι κάποια από τα μη-αλφαριθμητικά πλήκτρα έχουν λάθος αντιστοίχηση όταν είστε σε κατάσταση RUS, προσθέστε την παρακάτω γραμμή στο αρχείο xorg.conf: Option "XkbVariant" ",winkeys" Το Ρώσικο XKB πληκτρολόγιο ίσως δεν λειτουργεί με εφαρμογές που δεν έχουν φτιαχτεί για τις αντίστοιχες τοπικές ρυθμίσεις. Οι εφαρμογές που τηρούν τις ελάχιστες προδιαγραφές τοπικών ρυθμίσεων, θα πρέπει να καλούν από νωρίς τη συνάρτηση XtSetLanguageProc (NULL, NULL, NULL); μέσα στον κώδικα τους. Δείτε το KOI8-R για το σύστημα X Window για περισσότερες οδηγίες σχετικά με την δημιουργία εφαρμογών X11 που να χρησιμοποιούν τοπικές ρυθμίσεις. Τοπικές Ρυθμίσεις για Παραδοσιακά Κινέζικα Ταϊβάν localization Traditional Chinese Το &os;-Taiwan Project έχει δημιουργήσει ένα HOWTO για τα Κινέζικα στο &os;, το οποίο μπορείτε να βρείτε στη διεύθυνση , χρησιμοποιώντας πολλά Κινέζικα ports. Ο τρέχων συντάκτης του Κινέζικου &os; Howto είναι ο Shen Chuan-Hsing statue@freebsd.sinica.edu.tw. Ο Chuan-Hsing Shen statue@freebsd.sinica.edu.tw έχει δημιουργήσει την Κινέζικη Συλλογή &os; (CFC) χρησιμοποιώντας την κωδικοποίηση zh-L10N-tut του &os;-Ταΐβάν. Τα πακέτα και τα scripts διατίθενται στη διεύθυνση . Τοπικές Ρυθμίσεις για την Γερμανική Γλώσσα (για Όλες τις Γλώσσες που Βασίζονται στο ISO 8859-1) localization German Ο Slaven Rezic eserte@cs.tu-berlin.de έχει γράψει ένα οδηγό για την χρήση των umlauts σε ένα μηχάνημα &os;. Ο οδηγός είναι γραμμένος στα Γερμανικά και διατίθεται στην τοποθεσία . Τοπικές Ρυθμίσεις για την Ελληνική Γλώσσα localization Greek Ο &a.el.kokkalis; έχει γράψει ένα πλήρες άρθρο για την υποστήριξη της Ελληνικής γλώσσας στο &os;. Το άρθρο αυτό διατίθεται ως μέρος της επίσημης Ελληνικής τεκμηρίωσης του &os;, στην τοποθεσία http://www.freebsd.org/doc/el_GR.ISO8859-7/artilces/greek-language-support/index.html. Τοπικές Ρυθμίσεις Για Γιαπωνέζικα και Κορεάτικα localization Japanese localization Korean Για Γιαπωνέζικα, δείτε στην τοποθεσία , ενώ για Κορεάτικα, δείτε στην τοποθεσία . Τεκμηρίωση του &os; σε Γλώσσες Εκτός της Αγγλικής Κάποιοι εθελοντές του &os; έχουν μεταφράσει τμήματα της τεκμηρίωσης του σε άλλες γλώσσες. Οι μεταφράσεις αυτές διατίθενται μέσω συνδέσμων στην κύρια δικτυακή τοποθεσία του &os; ή στον κατάλογο /usr/share/doc. diff --git a/el_GR.ISO8859-7/books/handbook/ports/chapter.sgml b/el_GR.ISO8859-7/books/handbook/ports/chapter.sgml index f29a1a584a..822c0c5b69 100644 --- a/el_GR.ISO8859-7/books/handbook/ports/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/ports/chapter.sgml @@ -1,1644 +1,1642 @@ Εγκατάσταση Εφαρμογών: Πακέτα και Ports Σύνοψη ports Packages Το &os; συνοδεύεται από μία πλούσια συλλογή από προγράμματα σαν μέρος του βασικού συστήματος. Όμως, λίγα μπορεί να κάνει κάποιος πριν βρεθεί στην ανάγκη να εγκαταστήσει μια πρόσθετη εφαρμογή για να υλοποιήσει μια πραγματική εργασία. Το &os; παρέχει δυο συμπληρωματικές τεχνολογίες για να εγκαταστήσετε πρόσθετες εφαρμογές στο σύστημα σας: τη Συλλογή των Ports (Ports Collection, για εγκατάσταση από τον πηγαίο κώδικα), και τα πακέτα (packages, για εγκατάσταση από προ-μεταγλωττισμένα εκτελέσιμα πακέτα). Κάθε μία από τις δυο μεθόδους μπορεί να χρησιμοποιηθεί για να εγκαταστήσετε τις νεότερες εκδόσεις από τις αγαπημένες σας εφαρμογές, από τοπικά αποθηκευτικά μέσα ή απευθείας από το δίκτυο. Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Πως να εγκαθιστάτε προ-μεταγλωττισμένα πακέτα λογισμικού. Πως να μεταγλωττίζετε πρόσθετο λογισμικό από τον πηγαίο κώδικα χρησιμοποιώντας την Συλλογή των Ports. Πως να κάνετε απεγκατάσταση εγκαταστημένων πακέτων ή ports. Πως να αλλάζετε τις προκαθορισμένες ρυθμίσεις που χρησιμοποιεί η Συλλογή των Ports. Πως να βρίσκετε τα κατάλληλα πακέτα λογισμικού. Πως να αναβαθμίζετε τις εφαρμογές σας. Επισκόπησή της εγκατάστασης λογισμικού Αν έχετε χρησιμοποιήσει ένα &unix; σύστημα στο παρελθόν, θα γνωρίζετε ότι η συνηθισμένη διαδικασία για την εγκατάσταση πρόσθετου λογισμικού είναι περίπου η παρακάτω: Κατέβασμα του λογισμικού, που μπορεί να διανέμεται σε μορφή πηγαίου κώδικα, ή σαν εκτελέσιμο. Αποσυμπίεση του λογισμικού από την μορφή της διανομής του (συνήθως ένα tarball συμπιεσμένο με το &man.compress.1;, &man.gzip.1;, ή &man.bzip2.1;). Εντοπισμός της τεκμηρίωσης (πιθανώς ένα αρχείο INSTALL ή README ή μερικά αρχεία μέσα σε ένα υποκατάλογο doc/) και ανάγνωσή τους για το πως θα εγκατασταθεί το λογισμικό. Αν το λογισμικό διανέμεται με τη μορφή πηγαίου κώδικα, μεταγλώττιση του. Αυτό μπορεί να περιλαμβάνει την επεξεργασία ενός Makefile, ή την εκτέλεση ενός configure script, και άλλες εργασίες. Δοκιμή και εγκατάσταση του λογισμικού. Και αυτά μόνο αν όλα πάνε καλά. Αν εγκαθιστάτε ένα λογισμικό που δεν έχει μεταφερθεί στο &os; ίσως να πρέπει να τροποποιήσετε τον πηγαίο κώδικα για να δουλέψει σωστά. Αν το θέλετε, μπορείτε να συνεχίσετε να εγκαθιστάτε λογισμικό με τον παραδοσιακό τρόπο στο &os;. Όμως, το &os; παρέχει δυο τεχνολογίες που μπορούν να σας γλιτώσουν από πολύ κόπο: τα πακέτα και τα ports. Την στιγμή που γράφτηκε αυτό το κείμενο, διατίθονταν με αυτόν τον τρόπο πάνω από &os.numports; πρόσθετες εφαρμογές. Για οποιαδήποτε εφαρμογή, το αντίστοιχο &os; πακέτο της είναι ένα μοναδικό αρχείο που πρέπει εσείς να κατεβάσετε. Το πακέτο περιέχει προ-μεταγλωττισμένα αντίγραφα από όλες τις εντολές της εφαρμογής, όπως επίσης και αρχεία παραμετροποίησης ή τεκμηρίωσης. Ένα τέτοιο πακέτο σε μορφή αρχείου, μπορείτε να το χειριστείτε με τις εντολές διαχείρισής πακέτων του &os;, όπως οι &man.pkg.add.1;, &man.pkg.delete.1;, &man.pkg.info.1;, και πάει λέγοντας. Η εγκατάσταση μιας νέας εφαρμογής μπορεί να γίνει με μία μόνο εντολή. Ένα &os; port για μία εφαρμογή είναι μια συλλογή από αρχεία σχεδιασμένα για να αυτοματοποιήσουν την διαδικασία μεταγλώττισης της εφαρμογής από τον πηγαίο κώδικα. Θυμηθείτε ότι υπάρχουν μερικά βήματα που θα πρέπει λογικά να κάνετε αν μεταγλωττίσετε ένα πρόγραμμα μόνος σας (κατέβασμα, αποσυμπίεση, προσαρμογή (patching), μεταγλώττιση, εγκατάσταση). Τα αρχεία που αποτελούν ένα port περιέχουν όλες τις απαραίτητες πληροφορίες για να επιτρέψουν στο σύστημα να κάνει όλα αυτά για εσάς. Εσείς εκτελείτε μερικές απλές εντολές, και ο πηγαίος κώδικας για την εφαρμογή αυτόματα κατεβαίνει, αποσυμπιέζεται, προσαρμόζεται, μεταγλωττίζεται, και εγκαθίσταται για εσάς. Στην πραγματικότητα, το σύστημα ports μπορεί επίσης να χρησιμοποιηθεί για να δημιουργηθούν πακέτα που μπορείτε αργότερα να διαχειριστείτε με την pkg_add και τις άλλες εντολές διαχείρισής πακέτων που θα αναφερθούν σε λίγο. Τόσο τα πακέτα, όσο και τα ports κατανοούν τις εξαρτήσεις (dependencies). Ας υποθέσουμε ότι θέλετε να εγκαταστήσετε μία εφαρμογή που εξαρτάται από μία συγκεκριμένη βιβλιοθήκη για να λειτουργήσει. Τόσο η εφαρμογή, όσο και η βιβλιοθήκη διατίθενται ως πακέτα και ports του &os;. Αν χρησιμοποιήσετε την εντολή pkg_add ή το σύστημα των ports για να εγκαταστήσετε την εφαρμογή, αμφότερα θα παρατηρήσουν ότι η βιβλιοθήκη δεν είναι εγκατεστημένη, και αυτόματα θα την εγκαταστήσουν πριν από το πρόγραμμα. Έχοντας αναφέρει ότι οι δύο τεχνολογίες είναι αρκετά όμοιες, ίσως να αναρωτιέστε γιατί το &os; προσφέρει και τις δύο. Τα πακέτα και τα ports αμφότερα έχουν τα δικά τους πλεονεκτήματα, και το τι θα χρησιμοποιήσετε εξαρτάται από την δική σας προτίμηση. Πλεονεκτήματα των Πακέτων Ένα συμπιεσμένο tarball πακέτου είναι συνήθως μικρότερο από το συμπιεσμένο tarball που περιέχει τον πηγαίο κώδικα για την εφαρμογή. Τα πακέτα δεν χρειάζονται μεταγλώττιση. Για μεγάλες εφαρμογές, όπως είναι ο Mozilla, το KDE, ή το GNOME αυτό μπορεί να είναι σημαντικό, ιδιαίτερα αν βρίσκεστε σε ένα αργό μηχάνημα. Τα πακέτα δεν απαιτούν να κατανοήσετε την διαδικασία που σχετίζεται με την μεταγλώττιση λογισμικού στο &os;. Πλεονεκτήματα των Ports Τα πακέτα συνήθως είναι μεταγλωττισμένα με συντηρητικές επιλογές, επειδή πρέπει να λειτουργούν στον μέγιστο αριθμό συστημάτων. Με εγκατάσταση από το port, μπορείτε να ρυθμίσετε τις επιλογές μεταγλώττισης (για παράδειγμα) να δημιουργήσουν εκτελέσιμο κώδικα που να εκμεταλλεύεται τις ικανότητες ενός Pentium 4 ή Athlon επεξεργαστή. Μερικές εφαρμογές έχουν επιλογές μεταγλώττισης που σχετίζονται με το τι μπορούν να κάνουν και τι όχι. Για παράδειγμα, ο Apache μπορεί να μεταγλωττιστεί με ένα ευρύ φάσμα από επιλογές. Μεταγλωττίζοντας τον από το port, δεν είναι ανάγκη να δεχτείτε τις προεπιλεγμένες επιλογές, μπορείτε να κάνετε τις δικές σας. Σε μερικές περιπτώσεις, μπορεί να υπάρχουν πολλαπλά πακέτα για την ίδια εφαρμογή, με διαφορετικές ρυθμίσεις. Για παράδειγμα, το Ghostscript διατίθεται ως ένα πακέτο ghostscript και ένα πακέτο ghostscript-nox11, αναλόγως αν θα εγκαταστήσετε ή όχι έναν X11 server. Αυτού του τύπου οι ρυθμίσεις είναι δυνατές με τα πακέτα, αλλά γρήγορα γίνονται αδύνατες αν μία εφαρμογή έχει περισσότερες από μία ή δύο διαφορετικές ρυθμίσεις μεταγλώττισης. Οι συνθήκες των αδειών διανομής από μερικές διανομές λογισμικού, απαγορεύουν την διανομή εκτελέσιμου κώδικα. Πρέπει να διανεμηθούν με την μορφή πηγαίου κώδικα. Μερικά άτομα δεν εμπιστεύονται τα έτοιμα εκτελέσιμα. Τουλάχιστον με τον πηγαίο κώδικα, μπορείτε (θεωρητικά) να τον διαβάσετε και να ψάξετε για πιθανά προβλήματα μόνος σας. Αν έχετε τοπικά, δικά σας patches, θα χρειαστείτε τον πηγαίο κώδικα για να τα εφαρμόσετε. Μερικά άτομα γουστάρουν να έχουν τον πηγαίο κώδικα, ώστε να τον διαβάσουν αν βαρεθούνε, να τον αλλάξουν (hack), να δανειστούν από αυτόν (αν βέβαια το επιτρέπει η άδεια), κ.λ.π. Για να είστε ενήμερος για τα ανανεωμένα ports, εγγραφείτε στην &a.ports; και στην &a.ports-bugs;. Πριν εγκαταστήσετε οποιοδήποτε εφαρμογή, πρέπει να ελέγχετε το για θέματα ασφαλείας που σχετίζονται με την εφαρμογή σας. Μπορείτε επίσης να εγκαταστήσετε το ports-mgmt/portaudit το οποίο αυτόματα θα ελέγχει όλες τις εγκαταστημένες εφαρμογές για γνωστά τρωτά σημεία. Έλεγχος επίσης θα πραγματοποιείται πριν τη μεταγλώττιση οποιουδήποτε port. Στο ενδιάμεσο, μπορείτε να χρησιμοποιείτε την εντολή portaudit -F -a αφότου έχετε πρώτα εγκαταστήσει μερικά πακέτα. Το υπόλοιπο αυτού του κεφαλαίου εξηγεί πως να χρησιμοποιήσετε τα πακέτα και τα ports για να εγκαταστήσετε και να διαχειριστείτε πρόσθετο λογισμικό στο &os;. Βρίσκοντας την Εφαρμογή σας Πριν εγκαταστήσετε οποιαδήποτε εφαρμογή πρέπει να γνωρίζετε τι θέλετε να κάνει, και πως ονομάζεται η εφαρμογή. Η λίστα των διαθέσιμων εφαρμογών στο &os; μεγαλώνει συνεχώς. Ευτυχώς, υπάρχουν πολλοί τρόποι να βρείτε αυτό που θέλετε: Στη δικτυακή τοποθεσία του &os; θα βρείτε μια λίστα από όλες τις διαθέσιμες εφαρμογές, στο http://www.FreeBSD.org/ports/. Η λίστα αυτή ανανεώνεται συχνά, ενώ υπάρχει και δυνατότητα αναζήτησης. Τα ports είναι χωρισμένα σε κατηγορίες, και μπορείτε να αναζητήσετε μία εφαρμογή είτε με το όνομα (αν το ξέρετε), ή να δείτε όλες τις εφαρμογές που είναι διαθέσιμες σε μια κατηγορία. FreshPorts Ο Dan Langille διατηρεί το FreshPorts, στο . Το FreshPorts καταγράφει τις αλλαγές των εφαρμογών στο δέντρο των ports καθώς συμβαίνουν, επιτρέποντάς σας να παρακολουθείτε ένα ή περισσότερα ports, και μπορεί να σας στείλει email όταν αυτά ανανεώνονται. FreshMeat Αν δεν γνωρίζετε το όνομα της εφαρμογής που θέλετε, δοκιμάστε να χρησιμοποιήσετε ένα site σαν το FreshMeat () για να βρείτε μία εφαρμογή, και μετά μπορείτε να ελέγξετε ξανά το site του &os; για να δείτε αν η εφαρμογή έχει γίνει port. Αν ξέρετε το ακριβές όνομα του port, και θέλετε μόνο να βρείτε σε ποια κατηγορία είναι, μπορείτε να χρησιμοποιήσετε την εντολή &man.whereis.1;. Απλά γράψτε whereis αρχείο, όπου αρχείο είναι το πρόγραμμα που θέλετε να εγκαταστήσετε. Αν αυτό βρίσκεται στο σύστημα σας, η εντολή θα σας πει που είναι, όπως παρακάτω: &prompt.root; whereis lsof lsof: /usr/ports/sysutils/lsof Αυτό μας λέει ότι το lsof (ένα εργαλείο συστήματος) μπορεί να βρεθεί στον κατάλογο /usr/ports/sysutils/lsof. Επιπρόσθετα, μπορείτε να χρησιμοποιήσετε μια απλή εντολή &man.echo.1; για να εντοπίσετε την τοποθεσία κάποιου προγράμματος μέσα στα ports. Για παράδειγμα: &prompt.root; echo /usr/ports/*/*lsof* /usr/ports/sysutils/lsof Σημειώστε ότι το παραπάνω θα δείξει επίσης και οποιαδήποτε αρχεία έχουν κατέβει στον κατάλογο /usr/ports/distfiles εφόσον ταιριάζουν στην αναζήτηση. Ακόμη ένας τρόπος να βρείτε ένα συγκεκριμένο port, είναι χρησιμοποιώντας τον εσωτερικό μηχανισμό αναζήτησης της Συλλογής των Ports. Γα να χρησιμοποιήσετε αυτό τον τρόπο αναζήτησης, Θα χρειαστεί να βρίσκεστε στον κατάλογο /usr/ports. Όταν βρεθείτε σε αυτόν τον κατάλογο, εκτελέστε το make search name=όνομα--προγράμματος όπου όνομα--προγράμματος είναι το όνομα του προγράμματος που θέλετε να βρείτε. Για παράδειγμα, αν αναζητάτε το lsof: &prompt.root; cd /usr/ports &prompt.root; make search name=lsof Port: lsof-4.56.4 Path: /usr/ports/sysutils/lsof Info: Lists information about open files (similar to fstat(1)) Maint: obrien@FreeBSD.org Index: sysutils B-deps: R-deps: Το τμήμα της εξόδου που πρέπει να προσέξετε ιδιαίτερα είναι η γραμμή Path:, αφού αυτή σας λέει που να βρείτε το port. Οι υπόλοιπες πληροφορίες που παρέχονται δεν χρειάζονται για να εγκατασταθεί το port, για αυτό δεν θα αναλυθούν εδώ. Για πιο λεπτομερή αναζήτηση μπορείτε να χρησιμοποιήσετε επίσης make search key=φράση όπου φράση είναι κάποιο κείμενο προς αναζήτηση. Αυτό αναζητά ονόματα port, σχόλια, περιγραφές και εξαρτήσεις, και μπορεί να χρησιμοποιηθεί για να βρεθούν ports που σχετίζονται με ένα συγκεκριμένο θέμα, εάν δεν γνωρίζετε το όνομα του προγράμματος που αναζητάτε. Σε όλες τις παραπάνω περιπτώσεις, η φράση προς αναζήτηση είναι case-insensitive (δεν λαμβάνει υπόψη τις διαφορές κεφαλαίων-μικρών). Η αναζήτηση για το LSOF, θα δώσει τα ίδια αποτελέσματα με την αναζήτηση για το lsof. Chern Lee Συνεισφορά του Χρησιμοποιώντας το Σύστημα των Πακέτων Υπάρχουν διάφορα εργαλεία με τα οποία μπορείτε να διαχειριστείτε τα πακέτα στο &os;: Σε ένα σύστημα που βρίσκεται ήδη σε λειτουργία, μπορείτε να εκτελέσετε το sysinstall για να εγκαταστήσετε, να διαγράψετε, και να δείτε τις εγκατεστημένες και τις διαθέσιμες εφαρμογές. Για περισσότερες πληροφορίες, δείτε το . Τα διάφορα εργαλεία διαχείρισης μέσω της γραμμής εντολών, που αποτελούν και το αντικείμενο συζήτησης αυτής της ενότητας. Εγκαθιστώντας ένα Πακέτο packages installing pkg_add Μπορείτε να χρησιμοποιήσετε το εργαλείο &man.pkg.add.1; για να εγκαταστήσετε ένα πακέτο λογισμικού του &os; από ένα τοπικά αποθηκευμένο αρχείο ή από έναν διακομιστή στο δίκτυο. <quote>Κατέβασμα</quote> ενός πακέτου χειροκίνητα και εγκατάσταση του τοπικά &prompt.root; ftp -a ftp2.FreeBSD.org Connected to ftp2.FreeBSD.org. 220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready. 331 Guest login ok, send your email address as password. 230- 230- This machine is in Vienna, VA, USA, hosted by Verio. 230- Questions? E-mail freebsd@vienna.verio.net. 230- 230- 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd /pub/FreeBSD/ports/packages/sysutils/ 250 CWD command successful. ftp> get lsof-4.56.4.tgz local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz 200 PORT command successful. 150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes). 100% |**************************************************| 92375 00:00 ETA 226 Transfer complete. 92375 bytes received in 5.60 seconds (16.11 KB/s) ftp> exit &prompt.root; pkg_add lsof-4.56.4.tgz Εάν δεν έχετε μία τοπική πηγή πακέτων (όπως είναι ένα &os; CD-ROM set) τότε ίσως είναι ευκολότερο να χρησιμοποιήσετε την επιλογή για το &man.pkg.add.1;. Αυτή θα κάνει το εργαλείο να καθορίσει αυτόματα τη σωστή μορφή και έκδοση και έπειτα να ανακτήσει και να εγκαταστήσει το πακέτο από ένα FTP site. pkg_add &prompt.root; pkg_add -r lsof Το παραπάνω παράδειγμα θα κατεβάσει και θα εγκαταστήσει το σωστό πακέτο χωρίς περαιτέρω επέμβαση του χρήστη. Αν δεν θέλετε να χρησιμοποιήσετε το κύριο site διανομής πακέτων, μπορείτε να χρησιμοποιήσετε κάποιο mirror. Για το σκοπό αυτό, θα πρέπει να ρυθμίσετε σωστά την τιμή της PACKAGESITE, ώστε να παρακάμψετε τις προεπιλεγμένες ρυθμίσεις. Το &man.pkg.add.1; χρησιμοποιεί το &man.fetch.3; για να κατεβάσει τα αρχεία, και αυτό με τη σειρά του χρησιμοποιεί διάφορες μεταβλητές περιβάλλοντος, περιλαμβανομένων των FTP_PASSIVE_MODE, FTP_PROXY, και FTP_PASSWORD. Ίσως χρειαστεί να ρυθμίσετε μία ή περισσότερες από αυτές αν βρίσκεστε πίσω από ένα firewall, ή ίσως να χρειαστεί να χρησιμοποιήσετε έναν FTP/HTTP proxy. Δείτε το &man.fetch.3; για την πλήρη λίστα των μεταβλητών. Προσέξτε ότι στο παραπάνω παράδειγμα χρησιμοποιείται το lsof αντί του lsof-4.56.4. Όταν γίνεται απομακρυσμένη λήψη, πρέπει να αφαιρεθεί ο αριθμός έκδοσης του πακέτου. Το &man.pkg.add.1; θα κατεβάσει αυτόματα την τελευταία έκδοση της εφαρμογής. Το &man.pkg.add.1; θα κατεβάσει την τελευταία έκδοση της εφαρμογής αν χρησιμοποιείτε &os.current; ή &os.stable;. Αν τρέχετε μια -RELEASE έκδοση, θα κατεβάσει την έκδοση του πακέτου που έχει μεταγλωττιστεί με την έκδοση σας. Είναι δυνατό να το αλλάξετε αυτό, αλλάζοντας την PACKAGESITE. Για παράδειγμα, αν τρέχετε ένα σύστημα &os; 5.4-RELEASE, το &man.pkg.add.1;, από προεπιλογή, θα προσπαθήσει να κατεβάσει πακέτα από το ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.4-release/Latest/. Αν θέλετε να αναγκάσετε το &man.pkg.add.1; να κατεβάσει πακέτα του &os; 5-STABLE, θέστε την PACKAGESITE ως ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5-stable/Latest/. Τα αρχεία των πακέτων διανέμονται σε μορφές .tgz και .tbz. Μπορείτε να τα βρείτε στο , ή στα CD-ROM της διανομής του &os;. Κάθε CD στο &os; 4-CD set (και στο PowerPak, κλπ.) περιέχει πακέτα στον κατάλογο /packages. Η κατηγοριοποίηση των πακέτων ακολουθεί την δομή του δέντρου /usr/ports. Κάθε κατηγορία έχει το δικό της κατάλογο, και κάθε πακέτο μπορεί να βρεθεί στον κατάλογο All. Η δομή των καταλόγων του συστήματος πακέτων ταιριάζει με την αντίστοιχη των ports. Τα δύο συστήματα συνεργάζονται μεταξύ τους για να δημιουργήσουν το συνολικό σύστημα πακέτων/ports. Διαχείριση των Πακέτων packages managing Το &man.pkg.info.1; είναι ένα εργαλείο που παραθέτει και περιγράφει τα διάφορα πακέτα που είναι εγκαταστημένα. pkg_info &prompt.root; pkg_info cvsup-16.1 A general network file distribution system optimized for CV docbook-1.2 Meta-port for the different versions of the DocBook DTD ... Το &man.pkg.version.1; είναι ένα εργαλείο που συνοψίζει τις εκδόσεις όλων των εγκαταστημένων πακέτων. Συγκρίνει την έκδοση κάθε πακέτου, με την τρέχουσα έκδοση που βρίσκεται στο δέντρο των ports. pkg_version &prompt.root; pkg_version cvsup = docbook = ... Τα σύμβολα στην δεύτερη στήλη δηλώνουν την σχετική ηλικία μεταξύ των εγκατεστημένων εκδόσεων και των εκδόσεων που είναι διαθέσιμες στο τοπικό δέντρο των ports. Σύμβολο Σημασία = Η έκδοση του εγκατεστημένου πακέτου ταιριάζει με αυτή που είναι διαθέσιμη στο τοπικό δέντρο των ports. < Η εγκατεστημένη έκδοση είναι παλαιότερη από αυτή που είναι διαθέσιμη στο δέντρο των ports. > Η εγκατεστημένη έκδοση είναι νεότερη από αυτή που είναι διαθέσιμη στο τοπικό δέντρο των ports. (Το τοπικό δέντρο των ports είναι πιθανότατα απαρχαιωμένο.) ? Το εγκατεστημένο πακέτο δεν βρίσκεται στα περιεχόμενα των ports. (Αυτό μπορεί να συμβεί, για παράδειγμα, αν ένα εγκατεστημένο port έχει αφαιρεθεί από την Συλλογή των Ports, ή έχει μετονομαστεί.) * Υπάρχουν πολλαπλές εκδόσεις του πακέτου. ! Το εγκατεστημένο πακέτο υπάρχει στο index, αλλά για κάποιο λόγο το pkg_version δεν κατάφερε να συγκρίνει την έκδοση του εγκατεστημένου πακέτου με την αντίστοιχη καταχώρηση στο index. Αφαιρώντας ένα Πακέτο pkg_delete packages deleting Για να αφαιρέσετε ένα εγκατεστημένο πακέτο λογισμικού, χρησιμοποιήστε το εργαλείο &man.pkg.delete.1;. &prompt.root; pkg_delete xchat-1.7.1 Σημειώστε ότι το &man.pkg.delete.1; απαιτεί το πλήρες όνομα και αριθμό έκδοσης του πακέτου. Η παραπάνω εντολή δεν θα λειτουργήσει αν δώσετε απλώς xchat αντί για xchat-1.7.1. Είναι ωστόσο εύκολο να χρησιμοποιήσετε την &man.pkg.version.1; για να βρείτε την έκδοση του εγκατεστημένου πακέτου. Αντί για αυτό, μπορείτε επίσης να χρησιμοποιήσετε ένα μπαλαντέρ: &prompt.root; pkg_delete xchat\* Στην περίπτωση αυτή, θα διαγραφούν όλα τα πακέτα που τα ονόματα τους αρχίζουν με xchat. Διάφορα Όλες οι πληροφορίες για τα πακέτα είναι αποθηκευμένες στον κατάλογο /var/db/pkg. Στα αρχεία αυτού του καταλόγου, θα βρείτε τη περιγραφή κάθε πακέτου, καθώς και τη λίστα των αρχείων που εγκαθιστά. Χρησιμοποιώντας την Συλλογή των Ports Τα παρακάτω τμήματα δίνουν βασικές οδηγίες χρήσης της Συλλογής των Ports για εγκατάσταση ή διαγραφή προγραμμάτων στο σύστημα σας. Μπορείτε να βρείτε λεπτομερή περιγραφή των διαθέσιμων επιλογών του make και των μεταβλητών περιβάλλοντος στο &man.ports.7;. Ανακτώντας την Συλλογή των Ports Πριν μπορέσετε να εγκαταστήσετε προγράμματα μέσω των ports, πρέπει πρώτα να ανακτήσετε την Συλλογή των Ports. Πρόκειται ουσιαστικά για μια συλλογή από Makefiles, patches, και αρχεία περιγραφής που τοποθετούνται στο /usr/ports. Όταν εγκαταστήσατε το &os; σύστημα σας, το sysinstall σας ρώτησε αν θέλατε να εγκαταστήσετε την Συλλογή των Ports. Αν επιλέξατε όχι, μπορείτε να ακολουθήσετε αυτές τις οδηγίες για να ανακτήσετε την Συλλογή των Ports: Μέθοδος CVSup Αυτή είναι μια γρήγορη μέθοδος για να ανακτήσετε και να διατηρήσετε ένα ανανεωμένο αντίγραφο της Συλλογής των Ports, χρησιμοποιώντας το πρωτόκολλο CVSup. Αν θέλετε να μάθετε περισσότερα για το CVSup, δείτε το Χρησιμοποιώντας το CVSup. Η υλοποίηση του CVSup που περιλαμβάνεται σε ένα σύστημα &os;, ονομάζεται csup. Εμφανίστηκε για πρώτη φορά στο &os; 6.2. Οι χρήστες παλαιότερων εκδόσεων του &os;, μπορούν να το εγκαταστήσουν μέσω του πακέτου ή port net/csup. Σιγουρευθείτε ότι το /usr/ports είναι άδειο πριν εκτελέσετε το csup για πρώτη φορά! Εάν έχετε ήδη ανακτήσει τη Συλλογή των Ports μέσω κάποιας άλλης πηγής, το csup δεν θα διαγράψει patches που έχουν αφαιρεθεί στο μεταξύ. Εκτελέστε το csup: &prompt.root; csup -L 2 -h cvsup.FreeBSD.org /usr/share/examples/cvsup/ports-supfile Αλλάξτε το cvsup.FreeBSD.org με έναν κοντινό σας διακομιστή CVSup. Δείτε το CVSup Mirrors () για την πλήρη λίστα των mirror sites. Αν θέλετε, μπορείτε να χρησιμοποιήσετε το δικό σας ports-supfile, ώστε να αποφύγετε (για παράδειγμα) να δηλώσετε τον διακομιστή CVSup στην γραμμή εντολών. Σε αυτή την περίπτωση, ως root, αντιγράψτε το /usr/share/examples/cvsup/ports-supfile σε μία νέα τοποθεσία, όπως το /root ή τον δικό σας home κατάλογο. Τροποποιήστε το ports-supfile. Αλλάξτε το CHANGE_THIS.FreeBSD.org με έναν κοντινό σας διακομιστή CVSup.Δείτε το CVSup Mirrors () για την πλήρη λίστα των mirror sites. Εκτελέστε τώρα το csup, με τον ακόλουθο τρόπο: &prompt.root; csup -L 2 /root/ports-supfile Εκτελώντας την εντολή &man.csup.1; αργότερα, θα κατεβάσει και θα εφαρμόσει όλες τις πρόσφατες αλλαγές στην Συλλογή των Ports, εκτός από το να επανα-μεταγλωττίσει τα ports για το σύστημα σας. Μέθοδος Portsnap Το Portsnap είναι ένα εναλλακτικό σύστημα για την διανομή της Συλλογής των Ports. Παρακαλώ ελέγξτε το Χρησιμοποιώντας το Portsnap για μία λεπτομερή περιγραφή όλων των χαρακτηριστικών της εφαρμογής. Κατεβάστε ένα συμπιεσμένο snapshot της Συλλογής των Ports /var/db/portsnap. Αν θέλετε, μπορείτε να αποσυνδεθείτε από το Διαδίκτυο μετά από αυτό το βήμα. &prompt.root; portsnap fetch Αν εκτελείτε το Portsnap για πρώτη φορά, κάντε εξαγωγή του snapshot μέσα στο /usr/ports: &prompt.root; portsnap extract Εάν ήδη έχετε ένα γεμάτο /usr/ports και απλώς το ανανεώνετε, εκτελέστε την ακόλουθη εντολή: &prompt.root; portsnap update Μέθοδος Sysinstall Αυτή η μέθοδος χρησιμοποιεί το sysinstall για την εγκατάσταση της Συλλογής των Ports από το μέσο εγκατάστασης. Σημειώστε ότι με αυτό τον τρόπο θα εγκαταστήσετε το παλαιό αντίγραφο της Συλλογής των Ports, που αντιστοιχεί στην ημερομηνία της έκδοσης του &os; που χρησιμοποιείτε. Εάν έχετε πρόσβαση στο Διαδίκτυο, πρέπει πάντα να χρησιμοποιείτε μία από τις μεθόδους που αναφέρθηκαν πιο πάνω. Ως root, εκτελέστε το - sysinstall - (/stand/sysinstall σε εκδόσεις του &os; - πριν την 5.2) όπως φαίνεται παρακάτω: + sysinstall όπως φαίνεται παρακάτω: &prompt.root; sysinstall Επιλέξτε το Configure, και πιέστε Enter. Επιλέξτε το Distributions, και πιέστε Enter. Μετακινηθείτε στο ports, και πιέστε Space. Μετακινηθείτε στο Exit, και πιέστε Enter. Επιλέξτε το μέσο εγκατάστασης της επιθυμίας σας, όπως CDROM, FTP, και πάει λέγοντας. Μετακινηθείτε στο Exit και πιέστε Enter. Πιέστε X για να βγείτε από το sysinstall. Εγκαθιστώντας Ports ports installing Το πρώτο πράγμα που πρέπει να διευκρινιστεί σχετικά με την Συλλογή των Ports είναι η έννοια του όρου skeleton (σκελετός). Με λίγα λόγια, ένα port skeleton είναι η ελάχιστη συλλογή αρχείων που καθοδηγούν ένα σύστημα &os; ώστε να μεταγλωττίσει και να εγκαταστήσει σωστά ένα πρόγραμμα. Κάθε port skeleton περιέχει: Ένα Makefile. Το Makefile περιέχει διάφορες δηλώσεις που ορίζουν πως πρέπει να μεταγλωττιστεί η εφαρμογή και που πρέπει να εγκατασταθεί στο σύστημά σας. Ένα αρχείο distinfo. Αυτό το αρχείο περιέχει πληροφορίες για τα αρχεία που πρέπει να κατέβουν για την μεταγλώττιση του port, και τα checksums τους (χρησιμοποιώντας τις &man.md5.1; και &man.sha256.1;), για να επιβεβαιωθεί ότι τα αρχεία δεν έχουν αλλοιωθεί κατά την διάρκεια της μεταφοράς τους. Έναν κατάλογο files. Αυτός ο κατάλογος περιέχει τα patches που επιτρέπουν στο πρόγραμμα να μεταγλωττιστεί και εγκατασταθεί στο &os; σύστημα σας. Τα patches είναι μικρά αρχεία που ορίζουν αλλαγές σε συγκεκριμένα αρχεία. Είναι σε μορφή κοινού κειμένου, και βασικά λένε Αφαίρεσε την γραμμή 10 ή Μετέτρεψε τη γραμμή 26 σε αυτό .... Τα patches είναι επίσης γνωστά ως diffs επειδή δημιουργούνται με το πρόγραμμα &man.diff.1;. Αυτός ο κατάλογος μπορεί να περιέχει και άλλα αρχεία που χρησιμοποιούνται για να μεταγλωττιστεί το port. Ένα αρχείο pkg-descr. Αυτό είναι μία πιο λεπτομερής, συχνά πολλών γραμμών, περιγραφή του προγράμματος. Ένα αρχείο pkg-plist. Αυτό περιέχει μια λίστα όλων των αρχείων που θα εγκατασταθούν από το port. Επίσης καθοδηγεί το σύστημα των ports τι αρχεία να αφαιρέσει κατά την απεγκατάσταση. Μερικά ports έχουν και άλλα αρχεία, όπως το pkg-message. Το σύστημα των ports χρησιμοποιεί αυτά τα αρχεία για να χειριστεί ειδικές περιστάσεις. Αν θέλετε περισσότερες λεπτομέρειες για αυτά τα αρχεία, και τα ports γενικότερα, δείτε το &os; Porter's Handbook. Το port περιέχει οδηγίες για το πως να μεταγλωττιστεί ο πηγαίος κώδικας, αλλά δεν περιέχει τον πηγαίο κώδικα. Μπορείτε να προμηθευτείτε τον πηγαίο κώδικα από ένα CD-ROM ή από το Διαδίκτυο. Ο πηγαίος κώδικας διανέμεται με οποιοδήποτε τρόπο επιθυμεί ο δημιουργός του. Συχνά είναι ένα tarred και gzipped αρχείο, αλλά μπορεί να είναι συμπιεσμένος με κάποιο άλλο εργαλείο ή να είναι ακόμα και ασυμπίεστος. Ο πηγαίος κώδικας του προγράμματος, σε οποιαδήποτε μορφή κι αν διατίθεται, λέγεται distfile. Οι δύο μέθοδοι για να εγκαταστήσετε ένα &os; port περιγράφονται παρακάτω. Πρέπει να συνδεθείτε ως root για να εγκαταστήσετε ports. Πριν εγκαταστήσετε οποιαδήποτε port, πρέπει να σιγουρευτείτε ότι έχετε μία ανανεωμένη Συλλογή των Ports, και πρέπει να ελέγξετε το για θέματα ασφαλείας σχετικά με το port που ενδιαφέρεστε. Αν θέλετε να ελέγχετε αυτόματα για τυχόν προβλήματα ασφαλείας πριν από κάθε εγκατάσταση νέας εφαρμογής, μπορείτε να χρησιμοποιήσετε το portaudit. Θα βρείτε αυτό το εργαλείο στην Συλλογή των Ports (ports-mgmt/portaudit). Είναι καλή ιδέα να εκτελέσετε το portaudit -F πριν εγκαταστήσετε ένα νέο port, για να ανακτήσετε την τρέχουσα βάση δεδομένων προβλημάτων ασφαλείας. Αντίστοιχος έλεγχος και ανανέωση της βάσης δεδομένων εκτελείται επίσης αυτόματα κατά τον καθημερινό έλεγχο ασφαλείας του συστήματος. Για περισσότερες πληροφορίες διαβάστε τις σελίδες manual &man.portaudit.1; και &man.periodic.8;. Η Συλλογή των Ports προϋποθέτει ότι έχετε λειτουργική σύνδεση με το Διαδίκτυο. Εάν δεν έχετε, θα χρειαστεί να βάλετε μόνος σας ένα αντίγραφο του distfile μέσα στο /usr/ports/distfiles. Αρχικά, μετακινηθείτε στον κατάλογο του port που θέλετε να εγκαταστήσετε: &prompt.root; cd /usr/ports/sysutils/lsof Μόλις βρεθείτε στον κατάλογο lsof, θα δείτε τον port skeleton. Το επόμενο βήμα είναι να μεταγλωττίσετε, ή να κτίσετε (build), το port. Αυτό γίνεται απλά πληκτρολογώντας make στην γραμμή εντολών. Όταν το κάνετε, θα δείτε κάτι όπως αυτό: &prompt.root; make >> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/. >> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/. ===> Extracting for lsof-4.57 ... [extraction output snipped] ... >> Checksum OK for lsof_4.57D.freebsd.tar.gz. ===> Patching for lsof-4.57 ===> Applying FreeBSD patches for lsof-4.57 ===> Configuring for lsof-4.57 ... [configure output snipped] ... ===> Building for lsof-4.57 ... [compilation output snipped] ... &prompt.root; Προσέξτε ότι μόλις η μεταγλώττιση ολοκληρωθεί θα επιστρέψετε στην γραμμή εντολών. Το επόμενο βήμα είναι να εγκαταστήσετε το port. Για να το εγκαταστήσετε, χρειάζεται απλώς να προσθέσετε μια λέξη στην εντολή make, και αυτή η λέξη είναι install: &prompt.root; make install ===> Installing for lsof-4.57 ... [installation output snipped] ... ===> Generating temporary packing list ===> Compressing manual pages for lsof-4.57 ===> Registering installation for lsof-4.57 ===> SECURITY NOTE: This port has installed the following binaries which execute with increased privileges. &prompt.root; Μόλις επιστρέψετε στην γραμμή εντολών, θα πρέπει να μπορείτε να εκτελέσετε την εφαρμογή που μόλις εγκαταστήσατε. Θα δείτε μια προειδοποίηση ασφαλείας, επειδή το lsof είναι ένα πρόγραμμα που τρέχει με αυξημένα προνόμια. Κατά την μεταγλώττιση και εγκατάσταση των ports, θα πρέπει να προσέχετε οποιαδήποτε προειδοποίηση εμφανιστεί. Μια καλή ιδέα, είναι να διαγράψετε τον υποκατάλογο που περιέχει όλα τα προσωρινά αρχεία που χρησιμοποιήθηκαν κατά την μεταγλώττιση. Όχι μόνο καταναλώνουν πολύτιμο χώρο, άλλα μπορεί να προκαλέσουν προβλήματα αργότερα όταν θα θελήσετε να εγκαταστήσετε μια νεότερη έκδοση του port. &prompt.root; make clean ===> Cleaning for lsof-4.57 &prompt.root; Μπορείτε να γλιτώσετε δύο πρόσθετα βήματα απλώς εκτελώντας make install clean αντί για make, make install και make clean ως τρία ξεχωριστά βήματα. Μερικά κελύφη κρατάνε μια λίστα από τις εντολές που βρίσκονται διαθέσιμες στους καταλόγους που αναφέρονται στην μεταβλητή περιβάλλοντος PATH, για να επιταχύνουν τις αναζητήσεις για τα εκτελέσιμα αρχεία αυτών των εντολών. Αν χρησιμοποιείτε ένα από αυτά τα κελύφη, θα πρέπει να χρησιμοποιήσετε την εντολή rehash μετά την εγκατάσταση ενός port, πριν μπορέσετε να χρησιμοποιήσετε τις νέες εντολές. Αυτή η εντολή λειτουργεί σε κελύφη όπως το tcsh. Χρησιμοποιήστε την εντολή hash -r για κελύφη όπως το sh. Δείτε την τεκμηρίωση του κελύφους σας για περισσότερες πληροφορίες. Μερικά προϊόντα τρίτων κατασκευαστών σε DVD-ROM, όπως το &os; Toolkit από το &os; Mall, περιέχουν distfiles. Αυτά μπορούν να χρησιμοποιηθούν με την Συλλογή των Ports. Προσαρτήστε το DVD-ROM στο /cdrom. Αν χρησιμοποιείτε κάποιο διαφορετικό σημείο προσάρτησης, ρυθμίστε την μεταβλητή CD_MOUNTPTS του make. Τα αναγκαία distfiles θα χρησιμοποιηθούν αυτόματα αν υπάρχουν στο δισκάκι. Πρέπει να γνωρίζετε ότι οι άδειες μερικών ports δεν επιτρέπουν την διανομή τους σε CD-ROM. Αυτό μπορεί να οφείλεται π.χ. στο ότι πρέπει να συμπληρώσετε μια φόρμα εγγραφής πριν κατεβάσετε την εφαρμογή, ή στο ότι δεν επιτρέπεται η επαναδιανομή, ή σε κάποιο άλλο λόγο. Εάν θέλετε να εγκαταστήσετε ένα port που δεν περιλαμβάνεται στο CD-ROM, θα χρειαστεί να είστε συνδεδεμένος στο Διαδίκτυο για να το επιτύχετε. Το σύστημα των ports χρησιμοποιεί το &man.fetch.3; για να κατεβάσει τα αρχεία. Το &man.fetch.3; χρησιμοποιεί διάφορες μεταβλητές περιβάλλοντος, περιλαμβανομένων των FTP_PASSIVE_MODE, FTP_PROXY, και FTP_PASSWORD. Ίσως χρειαστεί να ρυθμίσετε μία ή περισσότερες αν βρίσκεστε πίσω από ένα firewall, ή ίσως να χρειαστεί να χρησιμοποιήσετε έναν FTP/HTTP proxy. Δείτε το &man.fetch.3; για μια πλήρη λίστα των μεταβλητών αυτών. Για χρήστες που δεν μπορούν να είναι συνδεδεμένοι όλη την ώρα, διατίθεται η επιλογή make fetch. Απλώς εκτελέστε την εντολή στον κατάλογο (/usr/ports) και τα απαραίτητα αρχεία θα κατέβουν για εσάς. Η εντολή αυτή θα λειτουργήσει και σε υποκαταλόγους, όπως για παράδειγμα: /usr/ports/net. Προσέξτε ότι αν ένα port εξαρτάται από βιβλιοθήκες ή άλλα ports, η εντολή αυτή δεν θα ανακτήσει τα distfiles τους. Αντικαταστήστε το fetch με το fetch-recursive αν θέλετε μαζί με το port να ανακτήσετε και όλες τις εξαρτήσεις του. Μπορείτε να μεταγλωττίσετε όλα τα ports σε μία κατηγορία ή ακόμα και σε όλες, εκτελώντας το make στον αρχικό κατάλογο, όπως με την προαναφερθείσα make fetch μέθοδο. Αυτό όμως είναι επικίνδυνο, γιατί μερικά ports δεν μπορούν να συνυπάρχουν. Σε άλλες περιπτώσεις, μερικά ports μπορεί να εγκαταστήσουν δυο διαφορετικά αρχεία με το με το ίδιο όνομα. Σε μερικές σπάνιες περιπτώσεις, οι χρήστες μπορεί να χρειάζεται να ανακτήσουν τα tarballs από ένα site διαφορετικό από τα MASTER_SITES (η τοποθεσία από όπου κατεβαίνουν τα αρχεία). Μπορείτε να αλλάξετε την επιλογή MASTER_SITES με την ακόλουθη εντολή: &prompt.root; cd /usr/ports/directory &prompt.root; make MASTER_SITE_OVERRIDE= \ ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch Σε αυτό το παράδειγμα αλλάξαμε την επιλογή MASTER_SITES σε ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/. Μερικά ports επιτρέπουν (ή απαιτούν) να δώσετε επιλογές μεταγλώττισης που μπορούν να ενεργοποιήσουν/απενεργοποιήσουν τμήματα της εφαρμογής που είναι αχρείαστα, συγκεκριμένες επιλογές ασφαλείας, και άλλες τροποποιήσεις. Κοινά παραδείγματα τέτοιων ports είναι τα www/mozilla, security/gpgme, και το mail/sylpheed-claws. Όταν υπάρχουν διαθέσιμες τέτοιες επιλογές, θα εμφανιστεί στην οθόνη σας σχετικό μήνυμα. Παρακάμπτοντας τους Προεπιλεγμένους Καταλόγους των Ports Μερικές φορές είναι χρήσιμο (ή επιτακτικό) να χρησιμοποιήσετε ένα διαφορετικό κατάλογο εργασίας και εγκατάστασης. Οι μεταβλητές WRKDIRPREFIX και PREFIX μπορούν να παρακάμψουν τους προεπιλεγμένους καταλόγους. Για παράδειγμα, η εντολή: &prompt.root; make WRKDIRPREFIX=/usr/home/example/ports install θα μεταγλωττίσει το port στο /usr/home/example/ports και θα εγκαταστήσει τα πάντα στο /usr/local, ενώ η εντολή: &prompt.root; make PREFIX=/usr/home/example/local install θα μεταγλωττίσει το port στο /usr/ports και θα το εγκαταστήσει στο /usr/home/example/local. Και φυσικά η εντολή: &prompt.root; make WRKDIRPREFIX=../ports PREFIX=../local install θα συνδυάσει και τα δυο (είναι πολύ μεγάλη για να την δείξουμε εδώ, άλλα πρέπει να πήρατε την γενική ιδέα). Εναλλακτικά, αυτές οι μεταβλητές μπορούν να ρυθμιστούν ως μέρος του περιβάλλοντος σας. Διαβάστε την σελίδα manual για το κέλυφος σας, για να βρείτε τις σχετικές οδηγίες. Αντιμετωπίζοντας το <command>imake</command> Μερικά ports που χρησιμοποιούν το imake (μέρος του X Window System) δεν συνεργάζονται σωστά με το PREFIX, και επιμένουν να εγκατασταθούν στο /usr/X11R6. Όμοια, μερικά Perl ports αγνοούν το PREFIX και εγκαθίστανται στο δέντρο Perl. Το να κάνετε αυτά τα ports να σέβονται το PREFIX είναι μία δύσκολη ή αδύνατη δουλειά. Επαναρύθμιση Επιλογών Ports Όταν μεταγλωττίζετε κάποια ports, μπορεί να εμφανιστεί στην οθόνη σας ένα μενού επιλογών (βασισμένο σε ncurses) το οποίο να σας επιτρέπει να αλλάξετε διάφορες επιλογές μεταγλώττισης. Δεν είναι σπάνιο κάποιοι χρήστες να θέλουν να επισκεφτούν ξανά αυτό το μενού, για να προσθέσουν, να αφαιρέσουν ή να αλλάξουν κάποιες επιλογές, μετά την μεταγλώττιση του port. Μια επιλογή είναι να μετακινηθείτε στον κατάλογο του port και να γράψετε make config, με το οποίο θα εμφανιστεί ξανά το μενού με τις προηγούμενες ρυθμίσεις σας ήδη επιλεγμένες. Μια άλλη δυνατότητα, είναι να χρησιμοποιήσετε την εντολή make showconfig, με την οποία θα δείτε όλες τις επιλεγμένες ρυθμίσεις του port. Τέλος, μια ακόμα επιλογή είναι να εκτελέσετε την εντολή make rmconfig η οποία θα αφαιρέσει όλες τις αποθηκευμένες επιλογές και θα σας επιτρέψει να ξεκινήσετε ξανά από την αρχή. Όλες αυτές οι επιλογές, και ακόμα περισσότερες, εξηγούνται στη σελίδα manual του &man.ports.7;. Αφαιρώντας Εγκατεστημένα Ports ports removing Τώρα που γνωρίσατε πως να εγκαθιστάτε ports, πιθανώς θα αναρωτιέστε πως αφαιρούνται, στην περίπτωση που εγκαταστήσατε ένα και αργότερα αποφασίσατε ότι εγκαταστήσατε το λάθος port. Θα αφαιρέσουμε το προηγούμενο παράδειγμα (που ήταν το lsof για όσους δεν το πρόσεξαν). Τα ports αφαιρούνται όπως και τα πακέτα (το αναλύσαμε στην ενότητα Χρησιμοποιώντας το Σύστημα των Πακέτων), χρησιμοποιώντας την εντολή &man.pkg.delete.1;: &prompt.root; pkg_delete lsof-4.57 Αναβαθμίζοντας τα Ports ports upgrading Αρχικά, δείτε τα παρωχημένα ports για τα οποία υπάρχουν διαθέσιμες νεότερες εκδόσεις στην Συλλογή των Ports, με την εντολή &man.pkg.version.1;: &prompt.root; pkg_version -v <filename>/usr/ports/UPDATING</filename> Μόλις ανανεώσετε την Συλλογή των Ports, πρέπει να ελέγξετε το αρχείο /usr/ports/UPDATING, πριν επιχειρήσετε την αναβάθμιση ενός port. Αυτό το αρχείο περιγράφει διάφορα πιθανά προβλήματα, καθώς και ενδεχόμενα πρόσθετα βήματα που πρέπει να εκτελέσετε όταν ανανεώνετε ένα port. Παραδείγματα των παραπάνω, είναι η αλλαγή μορφής κάποιων αρχείων, αλλαγή στην τοποθεσία των αρχείων ρυθμίσεων, ή άλλες ασυμβατότητες με παλαιότερες εκδόσεις. Αν το UPDATING αναιρεί κάτι που διαβάσατε εδώ, θεωρήστε ότι ισχύει το UPDATING. Αναβαθμίζοντας Ports με το Portupgrade portupgrade Το εργαλείο portupgrade είναι σχεδιασμένο για να αναβαθμίζει εύκολα εγκατεστημένα ports. Διατίθεται από το ports-mgmt/portupgrade port. Εγκαταστήστε το όπως κάθε port, χρησιμοποιώντας την εντολή make install clean: &prompt.root; cd /usr/ports/ports-mgmt/portupgrade &prompt.root; make install clean Η εντολή pkgdb -F θα διαβάσει και θα διορθώσει όλες τις ασυνέπειες που ίσως υπάρχουν στη λίστα των εγκατεστημένων ports. Είναι καλή ιδέα είναι να την εκτελείτε συχνά, ενδεχομένως πριν από κάθε αναβάθμιση. Όταν εκτελείτε το portupgrade -a, το portupgrade θα αρχίσει να αναβαθμίζει όλα τα παρωχημένα ports που είναι εγκατεστημένα στο σύστημα σας. Χρησιμοποιήστε την επιλογή αν θέλετε να σας ρωτά για επιβεβαίωση για κάθε ξεχωριστή αναβάθμιση. &prompt.root; portupgrade -ai Αν θέλετε να αναβαθμίσετε μόνο μία συγκεκριμένη εφαρμογή, και όχι όλα τα διαθέσιμα ports, χρησιμοποιήστε το portupgrade pkgname. Συμπεριλάβετε την επιλογή αν το portupgrade πρέπει πρώτα να αναβαθμίσει όλα τα ports που απαιτούνται για την συγκεκριμένη εφαρμογή. &prompt.root; portupgrade -R firefox Για να χρησιμοποιήσετε πακέτα αντί για ports στην εγκατάσταση, δώστε την επιλογή . Με αυτή την επιλογή το portupgrade αναζητά τους τοπικούς καταλόγους που ορίζονται στο PKG_PATH, ή ανακτά τα πακέτα από απομακρυσμένα sites εάν δεν βρεθούν τοπικά. Αν τα πακέτα δεν μπορούν να ανακτηθούν με τους παραπάνω τρόπους, το portupgrade θα χρησιμοποιήσει τα ports. Για να αποφύγετε εντελώς την χρήση των ports, καθορίστε την επιλογή . &prompt.root; portupgrade -PR gnome2 Για να ανακτήσετε απλώς τα distfiles (ή τα πακέτα, αν έχετε ορίσει την επιλογή ) χωρίς να μεταγλωττίσετε ή να εγκαταστήσετε τίποτα, χρησιμοποιήστε το . Για περισσότερες πληροφορίες, δείτε το &man.portupgrade.1;. Αναβαθμίζοντας Ports με το Portmanager portmanager Το Portmanager είναι ένα ακόμα εργαλείο για εύκολη αναβάθμιση εγκατεστημένων ports. Διατίθεται από το ports-mgmt/portmanager port: &prompt.root; cd /usr/ports/ports-mgmt/portmanager &prompt.root; make install clean Όλα τα εγκατεστημένα ports μπορούν να αναβαθμιστούν χρησιμοποιώντας αυτή την απλή εντολή: &prompt.root; portmanager -u Μπορείτε να προσθέσετε την επιλογή για να ερωτηθείτε να επιβεβαιώσετε κάθε βήμα που θα εκτελέσει το Portmanager. Το Portmanager μπορεί επίσης να χρησιμοποιηθεί για να εγκαταστήσετε νέα ports στο σύστημα. Σε αντίθεση με την εντολή make install clean, το Portmanager θα αναβαθμίσει όλες τις εξαρτήσεις πριν την μεταγλώττιση και εγκατάσταση του επιλεγμένου port. &prompt.root; portmanager x11/gnome2 Αν υπάρχουν προβλήματα που σχετίζονται με τις εξαρτήσεις ενός επιλεγμένου port, μπορείτε να χρησιμοποιήσετε το Portmanager για να τις επανα-μεταγλωττίσει όλες με την σωστή σειρά. Μόλις τελειώσει με τις εξαρτήσεις, θα επανα-μεταγλωττίσει και το προβληματικό port. &prompt.root; portmanager graphics/gimp -f Για περισσότερες πληροφορίες δείτε τη σελίδα manual &man.portmanager.1;. Αναβαθμίζοντας τα Ports μέσω του Portmaster portmaster Το Portmaster είναι ένα ακόμα εργαλείο για την αναβάθμιση των εγκατεστημένων ports. Το Portmaster σχεδιάστηκε ώστε να χρησιμοποιεί τα εργαλεία που παρέχει το βασικό σύστημα (δεν εξαρτάται από άλλα ports) και χρησιμοποιεί τις πληροφορίες του /var/db/pkg για να καθορίσει ποια ports θα αναβαθμίσει. Είναι διαθέσιμο μέσω του port ports-mgmt/portmaster: &prompt.root; cd /usr/ports/ports-mgmt/portmaster &prompt.root; make install clean Το Portmaster ομαδοποιεί τα ports σε τέσσερις κατηγορίες: Root ports (δεν εξαρτώνται από άλλα, και ούτε άλλα εξαρτώνται από αυτά) Trunk ports (δεν εξαρτώνται από άλλα, ωστόσο κάποια πακέτα εξαρτώνται από αυτά) Branch ports (έχουν εξαρτήσεις και προς τις δύο κατευθύνσεις) Leaf ports (εξαρτώνται από άλλα, αλλά όχι το αντίθετο) Μπορείτε να δείτε μια λίστα όλων των εγκατεστημένων ports και να ψάξετε για ενημερωμένες εκδόσεις, χρησιμοποιώντας την επιλογή : &prompt.root; portmaster -L ===>>> Root ports (No dependencies, not depended on) ===>>> ispell-3.2.06_18 ===>>> screen-4.0.3 ===>>> New version available: screen-4.0.3_1 ===>>> tcpflow-0.21_1 ===>>> 7 root ports ... ===>>> Branch ports (Have dependencies, are depended on) ===>>> apache-2.2.3 ===>>> New version available: apache-2.2.8 ... ===>>> Leaf ports (Have dependencies, not depended on) ===>>> automake-1.9.6_2 ===>>> bash-3.1.17 ===>>> New version available: bash-3.2.33 ... ===>>> 32 leaf ports ===>>> 137 total installed ports ===>>> 83 have new versions available Μπορείτε να αναβαθμίσετε όλα τα εγκατεστημένα ports με την παρακάτω απλή εντολή: &prompt.root; portmaster -a Από προεπιλογή, το Portmaster θα δημιουργήσει αντίγραφο ασφαλείας του εγκατεστημένου πακέτου πριν το διαγράψει. Αν η εγκατάσταση της νέας έκδοσης είναι επιτυχής, το Portmaster θα σβήσει το αντίγραφο αυτό. Αν χρησιμοποιήσετε την επιλογή , το Portmaster δεν θα σβήσει αυτόματα το αντίγραφο. Αν χρησιμοποιήσετε την επιλογή , θα θέσετε το Portmaster σε διαδραστική λειτουργία, όπου θα σας ζητάει επιβεβαίωση πριν την αναβάθμιση κάθε port. Αν αντιμετωπίσετε λάθη κατά τη διαδικασία της αναβάθμισης, μπορείτε να χρησιμοποιήσετε την επιλογή για να αναβαθμίσετε και να μεταγλωττίσετε ξανά όλα τα ports: &prompt.root; portmaster -af Μπορείτε επίσης να χρησιμοποιήσετε το Portmaster για να εγκαταστήσετε νέα ports στο σύστημα σας, αναβαθμίζοντας και όλες τις εξαρτήσεις τους πριν τη μεταγλώττιση και εγκατάσταση τους: &prompt.root; portmaster shells/bash Παρακαλούμε δείτε τη σελίδα manual του &man.portmaster.8; για περισσότερες πληροφορίες. Ports και Αποθηκευτικός Χώρος ports disk-space Η Συλλογή των Ports καταναλώνει διαθέσιμο χώρο στο δίσκο με την πάροδο του χρόνου. Μετά την μεταγλώττιση και εγκατάσταση λογισμικού από τα ports, πρέπει πάντα να θυμάστε να καθαρίζετε τους προσωρινούς καταλόγους work χρησιμοποιώντας την εντολή make clean. Mπορείτε να καθαρίσετε όλη την Συλλογή των Ports με την ακόλουθη εντολή: &prompt.root; portsclean -C Με την πάροδο του χρόνου, θα συσσωρευτούν πολλά αρχεία διανομής πηγαίου κώδικα στον κατάλογο distfiles. Μπορείτε να τα αφαιρέσετε χειροκίνητα, ή μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή για να διαγράψετε όλα τα distfiles που δεν σχετίζονται πλέον με κανένα port: &prompt.root; portsclean -D Ή για να αφαιρέσετε όλα τα distfiles που δεν σχετίζονται με κανένα port που βρίσκεται εγκατεστημένο στο σύστημα σας: &prompt.root; portsclean -DD Το εργαλείο portsclean εγκαθίσταται ως μέρος του portupgrade. Μην ξεχνάτε να αφαιρείτε τα εγκατεστημένα ports όταν δεν τα χρειάζεστε πλέον. Ένα καλό εργαλείο για να αυτοματοποιηθεί αυτή η εργασία, είναι το port ports-mgmt/pkg_cutleaves. Ενέργειες μετά την Εγκατάσταση Μετά την εγκατάσταση μιας νέας εφαρμογής, λογικά θα θέλετε να διαβάσετε ότι τεκμηρίωση υπάρχει, να τροποποιήσετε τα αρχεία ρυθμίσεων που χρειάζεται, να βεβαιωθείτε ότι η εφαρμογή ξεκινάει κατά την εκκίνηση (αν είναι daemon), κ.λ.π. Τα ακριβή βήματα που θα χρειαστούν για να ρυθμίσετε κάθε εφαρμογή, θα είναι προφανώς διαφορετικά. Όμως, αν μόλις εγκαταστήσατε μια νέα εφαρμογή και αναρωτιέστε Τώρα τι; οι παρακάτω συμβουλές μπορεί να σας βοηθήσουν: Χρησιμοποιήστε το &man.pkg.info.1; για να δείτε τι αρχεία εγκαταστάθηκαν, και που. Για παράδειγμα, αν μόλις εγκαταστήσατε το FooPackage version 1.0.0, τότε η εντολή: &prompt.root; pkg_info -L foopackage-1.0.0 | less θα σας δείξει όλα τα αρχεία που εγκαταστάθηκαν από αυτό το πακέτο. Προσέξτε τα αρχεία στον κατάλογο man/, που θα είναι σελίδες manual, τους κατάλογους etc/, όπου θα είναι τα αρχεία ρυθμίσεων, και το doc/, όπου θα βρίσκεται πιο περιεκτική τεκμηρίωση. Αν δεν είστε σίγουρος ποια έκδοση της εφαρμογής εγκαταστήσατε, μια εντολή όπως αυτή: &prompt.root; pkg_info | grep -i foopackage θα βρει όλα τα εγκατεστημένα πακέτα που έχουν το foopackage στο όνομα του πακέτου. Αντικαταστήστε το foopackage στην γραμμή εντολών με το πακέτο που αναζητάτε. Μόλις δείτε που βρίσκονται τα manual pages της εφαρμογής, δείτε τα με την &man.man.1;. Όμοια, δείτε τα παραδείγματα των αρχείων ρύθμισης, και όποια άλλη πρόσθετη τεκμηρίωση διατίθεται. Αν υπάρχει web site για την εφαρμογή, ελέγξτε το για πρόσθετη τεκμηρίωση, συχνές ερωτήσεις (FAQ), και άλλα. Αν δεν είστε σίγουρος για την διεύθυνσή του web site, ίσως το βρείτε στην έξοδο της εντολής: &prompt.root; pkg_info foopackage-1.0.0 Αν υπάρχει γραμμή WWW:, θα πρέπει να έχει το URL για το web site της εφαρμογής. Ports που πρέπει να ξεκινούν κατά την εκκίνηση (όπως διακομιστές Internet) συνήθως εγκαθιστούν ένα script στο /usr/local/etc/rc.d. Πρέπει να ελέγξετε το script για την ορθότητα του και να το τροποποιήσετε ή να το μετονομάσετε αν χρειάζεται. Δείτε το Εκκινώντας Υπηρεσίες για περισσότερες πληροφορίες. Αντιμετωπίζοντας Χαλασμένα Ports Αν έρθετε αντιμέτωπος με ένα port το οποίο δεν λειτουργεί, υπάρχουν κάποια πράγματα που μπορείτε να κάνετε: Δείτε αν εκκρεμεί κάποια διόρθωση για το port στο Problem Report database. Εάν ναι, μπορείτε να χρησιμοποιήσετε τη προτεινόμενη διόρθωση. Ζητήστε βοήθεια από τον συντηρητή του port. Πληκτρολογήστε make maintainer ή διαβάστε το Makefile για να βρείτε την διεύθυνση email του συντηρητή. Στο μήνυμα σας, θυμηθείτε να συμπεριλάβετε το όνομα και την έκδοση του port (στείλτε τη γραμμή $&os;: από το Makefile) καθώς και την έξοδο του σφάλματος. Μερικά ports δεν συντηρούνται από κάποιο συγκεκριμένο άτομο, αλλά από κάποια mailing list. Πολλές, αν όχι όλες, από αυτές τις διευθύνσεις έχουν την μορφή freebsd-listname@FreeBSD.org. Παρακαλούμε να το έχετε υπόψη σας κατά τη διατύπωση των ερωτήσεων σας. Συγκεκριμένα, τα ports που φαίνονται ότι συντηρούνται από το ports@FreeBSD.org, δεν συντηρούνται από κανέναν στην πραγματικότητα. Διορθώσεις και υποστήριξη, αν υπάρχουν, έρχονται γενικά από την κοινότητα που συμμετέχει στην συγκεκριμένη mailing list. Χρειαζόμαστε πάντοτε περισσότερους εθελοντές! Αν δεν λάβετε απάντηση, μπορείτε να χρησιμοποιήσετε το &man.send-pr.1; για να στείλετε μια αναφορά σφάλματος (δείτε το Γράφοντας Αναφορές Σφάλματος για το &os;). Διορθώστε το! Το Porter's Handbook περιέχει λεπτομερείς πληροφορίες για την υποδομή των Ports ώστε να μπορείτε να διορθώσετε το περιστασιακό προβληματικό port ή ακόμα και να δημιουργήσετε ένα δικό σας port! Ανακτήστε το πακέτο από ένα κοντινό σας FTP site. Η κύρια συλλογή πακέτων βρίσκεται στο ftp.FreeBSD.org, στον κατάλογο πακέτων. Πριν τη χρησιμοποιήσετε, ελέγξτε πρώτα το τοπικό σας mirror. Τα πακέτα είναι πιο σίγουρο ότι θα λειτουργήσουν, από το να προσπαθείτε να μεταγλωττίσετε τον πηγαίο κώδικα, και η διαδικασία τελειώνει πιο γρήγορα. Χρησιμοποιήστε το πρόγραμμα &man.pkg.add.1; για να εγκαταστήσετε το πακέτο στο σύστημα σας. diff --git a/el_GR.ISO8859-7/books/handbook/x11/chapter.sgml b/el_GR.ISO8859-7/books/handbook/x11/chapter.sgml index 8b3da5b820..7d5df77835 100644 --- a/el_GR.ISO8859-7/books/handbook/x11/chapter.sgml +++ b/el_GR.ISO8859-7/books/handbook/x11/chapter.sgml @@ -1,1895 +1,1826 @@ Ken Tom Ανανεώθηκε για τον X11 server του X.Org από τον Marc Fonvieille Το Σύστημα X Window Σύνοψη Το &os; χρησιμοποιεί το X11 για να παρέχει στους χρήστες ένα ισχυρό γραφικό περιβάλλον εργασίας. Το περιβάλλον X11 είναι μια υλοποίηση ανοικτού κώδικα του συστήματος X Window που περιλαμβάνει τόσο το &xorg; όσο και το &xfree86; (καθώς και άλλο λογισμικό που δεν περιγράφεται εδώ). Οι εκδόσεις του &os; μέχρι και την &os; 5.2.1-RELEASE διαθέτουν στην προεπιλεγμένη εγκατάσταση το &xfree86;, τον X11 server από The &xfree86; Project, Inc. Από το &os; 5.3-RELEASE και έπειτα, η προεπιλεγμένη και επίσημη διανομή του X11 άλλαξε στο &xorg;, τον X11 server που αναπτύχθηκε από το X.Org Foundation με άδεια χρήσης αρκετά όμοια με αυτή που χρησιμοποιείται από το &os;. Υπάρχουν επίσης διαθέσιμοι εμπορικοί X servers για το &os;. Αυτό το κεφάλαιο θα καλύψει την εγκατάσταση και ρύθμιση των X11 με έμφαση στην έκδοση &xorg.version; του &xorg;. Για πληροφορίες σχετικά με την ρύθμιση του &xfree86; (π.χ. σε παλιότερες εκδόσεις του &os; όπου το &xfree86; ήταν η προεπιλεγμένη διανομή X11), μπορείτε πάντα να ανατρέξετε στις αρχειοθετημένες εκδόσεις του &os; Handbook στο . Για περισσότερες πληροφορίες που σχετίζονται με τις κάρτες γραφικών που υποστηρίζονται από το περιβάλλον X11, δείτε την δικτυακή τοποθεσία &xorg;. Αφού διαβάσετε αυτό το κεφάλαιο, θα ξέρετε: Τα διάφορα τμήματα του συστήματος X Window, και πως συνεργάζονται μεταξύ τους. Πως να εγκαταστήσετε και να ρυθμίσετε το περιβάλλον X11. Πως να εγκαταστήσετε και να ρυθμίσετε διαφορετικούς διαχειριστές παραθύρων (window managers). Πως να χρησιμοποιήσετε &truetype; γραμματοσειρές στο X11. Πως να ρυθμίσετε το σύστημα σας για σύνδεση (login) μέσω γραφικού περιβάλλοντος (XDM). Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει: Να ξέρετε πως να εγκαταστήσετε πρόσθετο λογισμικό τρίτου κατασκευαστή (). Κατανόηση του περιβάλλοντος X11 Η χρήση του περιβάλλοντος X11 για πρώτη φορά μπορεί να προκαλέσει μια μικρή ταραχή σε όποιον έχει συνηθίσει σε άλλα γραφικά περιβάλλοντα, όπως τα µsoft.windows; ή το &macos;. Γενικά, δεν είναι απαραίτητο να καταλαβαίνετε με κάθε λεπτομέρεια των διαφόρων τμημάτων του X11 και πώς αλληλεπιδρούν μεταξύ τους. Κάποιες βασικές γνώσεις όμως, είναι χρήσιμες και βοηθούν στο να εκμεταλλευτείτε καλύτερα τις δυνατότητες του X11. Γιατί λέγεται X11 το περιβάλλον εργασίας; Το X δεν είναι το πρώτο περιβάλλον εργασίας που γράφτηκε για συστήματα &unix;, αλλά είναι σήμερα το πιο δημοφιλές. Η αρχική ομάδα ανάπτυξης του X είχε δουλέψει σε ένα άλλο σύστημα πριν γράψει το X. Το όνομα του παλιότερου συστήματος ήταν W (από την Αγγλική λέξη window). Το γράμμα X ήταν απλά το επόμενο γράμμα στο Λατινικό αλφάβητο. Μπορείτε να αναφέρεσθε στο X με τα ονόματα X, X Window System, X11, καθώς και με μερικούς άλλους όρους. Προσοχή όμως: κάποιοι άνθρωποι θεωρούν προσβλητικό τον όρο X Windows. Για περισσότερες πληροφορίες σχετικά με αυτό, δείτε τη σελίδα manual &man.X.7;. Το Μοντέλο Πελάτη/Διακομιστή των X11 Το περιβάλλον X11 έχει σχεδιαστεί από την αρχή έτσι ώστε να έχει εγγενή δικτυακή υποστήριξη, με βάση ένα μοντέλο πελάτη-διακομιστή. Στο μοντέλο λειτουργίας του X11, ο διακομιστής X εκτελείται στον υπολογιστή στον οποίο έχει συνδεθεί το πληκτρολόγιο, η οθόνη και το ποντίκι. Ο διακομιστής X είναι υπεύθυνος για τη διαχείριση της οθόνης, της εισόδου από το πληκτρολόγιο, το ποντίκι, κλπ. Κάθε εφαρμογή X (π.χ. το XTerm ή το &netscape;) είναι ένας πελάτης. Ένας πελάτης στέλνει μηνύματα στον διακομιστή όπως Παρακαλώ σχεδίασε ένα παράθυρο σε αυτές τις συντεταγμένες, και ο διακομιστής στέλνει πίσω μηνύματα όπως Ο χρήστης μόλις πάτησε το πλήκτρο OK. Σε ένα σπίτι ή ένα μικρό γραφείο, ο διακομιστής και οι πελάτες X συχνά εκτελούνται στον ίδιο υπολογιστή. Όμως, είναι απόλυτα εφικτό να εκτελείται ο διακομιστής X σε έναν λιγότερο ισχυρό επιτραπέζιο υπολογιστή, και να εκτελούνται οι εφαρμογές X (οι πελάτες) σε ένα, ας πούμε, ισχυρό και ακριβό μηχάνημα που εξυπηρετεί το γραφείο. Σε αυτό το σενάριο η επικοινωνία μεταξύ των πελατών X και του διακομιστή γίνεται μέσω δικτύου. Αυτό προκαλεί σύγχυση σε ορισμένους, επειδή η ορολογία του X είναι ακριβώς αντίθετη από ότι περίμεναν. Οι χρήστες συνήθως περιμένουν ο διακομιστής X να είναι ένα μεγάλο ισχυρό μηχάνημα σε ένα δωμάτιο και ο πελάτης X να είναι το μηχάνημα του γραφείου τους. Είναι σημαντικό να θυμάστε ότι ο διακομιστής X είναι το μηχάνημα με την οθόνη και το πληκτρολόγιο, και οι πελάτες X είναι τα προγράμματα που εμφανίζουν τα παράθυρα. Δεν υπάρχει τίποτα στο πρωτόκολλο που να αναγκάζει τα μηχανήματα των πελατών και του διακομιστή να εκτελούνται στο ίδιο λειτουργικό σύστημα, ή ακόμη να εκτελούνται στον ίδιο τύπο υπολογιστή. Είναι απόλυτα εφικτό να εκτελείται ένας διακομιστής X στα µsoft.windows; ή στο &macos; της Apple, και υπάρχουν διαθέσιμες διάφορες ελεύθερες και εμπορικές εφαρμογές που κάνουν ακριβώς αυτό. Ο Διαχειριστής Παραθύρων Η φιλοσοφία σχεδιασμού του X μοιάζει πολύ με την φιλοσοφία σχεδιασμού του &unix;, εργαλεία, όχι πολιτική. Αυτό σημαίνει ότι το X δεν προσπαθεί να υπαγορεύσει πως θα υλοποιηθεί μια εργασία. Αντίθετα, παρέχονται εργαλεία στον χρήστη, και είναι δική του ευθύνη να αποφασίσει πως θα τα χρησιμοποιήσει. Αυτή η φιλοσοφία επεκτείνεται στο ότι το X δεν υπαγορεύει πως πρέπει να εμφανίζονται τα παράθυρα στην οθόνη, πως θα μετακινηθούν με το ποντίκι, τι συνδυασμοί πλήκτρων πρέπει να χρησιμοποιηθούν για να μετακινηθούμε μεταξύ των παραθύρων (π.χ., Alt Tab , στην περίπτωση των µsoft.windows;), πώς πρέπει να μοιάζουν οι μπάρες τίτλων σε κάθε παράθυρο, αν θα έχουν ή όχι πλήκτρα κλεισίματος πάνω τους, κ.o.κ. Αντίθετα, το X αναθέτει αυτήν την ευθύνη σε μία εφαρμογή που ονομάζεται Διαχειριστής Παραθύρων. Υπάρχουν πάρα πολλοί διαχειριστές παραθύρων διαθέσιμοι για το περιβάλλον X. Ορισμένοι από αυτούς είναι οι: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker, και πολλοί άλλοι. Κάθε ένας από αυτούς τους διαχειριστές παραθύρων έχει διαφορετική αίσθηση και εμφάνιση. Μερικοί από αυτούς υποστηρίζουν εικονικές επιφάνειες εργασίας, μερικοί επιτρέπουν προσαρμοσμένους συνδυασμούς πλήκτρων για την διαχείριση της επιφάνειας εργασίας, μερικοί έχουν ένα πλήκτρο Start ή κάτι παρόμοιο, μερικοί υποστηρίζουν θέματα (themes), επιτρέποντας την ολοκληρωτική αλλαγή εμφάνισης με την εφαρμογή ενός νέου θέματος. Οι διαχειριστές παραθύρων που έχουμε αναφέρει ως τώρα, και πολλοί άλλοι, είναι διαθέσιμοι στην κατηγορία x11-wm της συλλογής των Ports. Επιπλέον, τα δύο πιο δημοφιλή ολοκληρωμένα περιβάλλοντα εργασίας, το KDE και το GNOME, έχουν τον δικό τους διαχειριστή παραθύρων που είναι ενσωματωμένος με το υπόλοιπο περιβάλλον εργασίας. Κάθε διαχειριστής παραθύρων έχει επίσης και διαφορετικό μηχανισμό ρύθμισης: μερικοί ρυθμίζονται συμπληρώνοντας με χειροκίνητο τρόπο ένα αρχείο ρυθμίσεων, άλλοι διαθέτουν γραφικά εργαλεία για τις περισσότερες ρυθμίσεις. Υπάρχει ακόμα κι ένας (Sawfish) που έχει αρχείο ρυθμίσεων γραμμένο σε μια διάλεκτο της γλώσσας Lisp. Πολιτική Εστίασης Άλλο ένα θέμα για το οποίο είναι υπεύθυνος ο διαχειριστής παραθύρων είναι η πολιτική εστίασης του ποντικιού. Κάθε σύστημα παραθύρων χρειάζεται κάποιο τρόπο επιλογής του παραθύρου που θα δέχεται αυτά που πληκτρολογούνται, και θα πρέπει να φαίνεται κάπως ότι αυτό το παράθυρο είναι ενεργό. Μία γνωστή πολιτική εστίασης λέγεται click-to-focus. Αυτό το μοντέλο χρησιμοποιείται στα µsoft.windows;, όπου ένα παράθυρο γίνεται ενεργό αν δεχτεί ένα πάτημα του ποντικιού. Το X δεν υποστηρίζει καμία συγκεκριμένη πολιτική εστίασης. Αντίθετα, ο διαχειριστής παραθύρων ελέγχει ποίο παράθυρο έχει εστιαστεί κάθε στιγμή. Διαφορετικοί διαχειριστές παραθύρων υποστηρίζουν διαφορετικές μεθόδους εστίασης. Όλοι τους υποστηρίζουν την μέθοδο click to focus, και οι περισσότεροι από αυτούς υποστηρίζουν και αρκετές άλλες. Οι πιο δημοφιλείς μέθοδοι εστίασης είναι: focus-follows-mouse Το παράθυρο που βρίσκεται κάτω από τον δείκτη του ποντικιού είναι το παράθυρο που έχει την εστίαση. Το ενεργό παράθυρο δεν είναι απαραίτητο να είναι αυτό που βρίσκεται πάνω από όλα τα άλλα. Η εστίαση αλλάζει με την στόχευση ενός άλλου παραθύρου, χωρίς να είναι απαραίτητο το κλικ πάνω του. sloppy-focus Αυτή η πολιτική είναι μια μικρή επέκταση του focus-follows-mouse. Με την πολιτική εστίασης focus-follows-mouse, αν το ποντίκι βρεθεί πάνω από το αρχικό (root) παράθυρο (ή το παρασκήνιο) δεν υπάρχει εστίαση σε κανένα παράθυρο, και ότι πληκτρολογείται απλώς χάνεται. Με τη sloppy-focus, η εστίαση αλλάζει μόνο αν ο δείκτης βρεθεί πάνω από ένα νέο παράθυρο, και όχι όταν φεύγει από το τρέχον παράθυρο. click-to-focus Το ενεργό παράθυρο επιλέγεται με κλικ του ποντικιού. Το παράθυρο τότε ανασηκώνεται, και εμφανίζεται μπροστά από όλα τα άλλα παράθυρα. Ότι πληκτρολογηθεί θα οδηγηθεί σε αυτό το παράθυρο, ακόμα και αν ο δείκτης μετακινηθεί σε άλλο παράθυρο. Πολλοί διαχειριστές παραθύρων υποστηρίζουν ακόμα πιο εξωτικές πολιτικές εστίασης, καθώς και παραλλαγές των παραπάνω. Συμβουλευθείτε την τεκμηρίωση του εκάστοτε διαχειριστή παραθύρων για περισσότερες λεπτομέρειες. Γραφικά Στοιχεία Διεπαφής (Widgets) Η προσέγγιση του X να διαθέτει εργαλεία και όχι να υπαγορεύει τον τρόπο χρήσης τους, διευρύνεται και στα γραφικά στοιχεία διεπαφής (widgets) που φαίνονται στην οθόνη σε κάθε εφαρμογή. Τα widgets είναι ένας όρος για όλα τα αντικείμενα στο περιβάλλον του χρήστη που μπορεί κάποιος να κάνει κλικ ή να τα χειριστεί με κάποιον τρόπο: πλήκτρα, πλαίσια επιλογής, πλήκτρα εναλλαγής, εικονίδια, λίστες, και άλλα. Τα µsoft.windows; τα ονομάζουν controls (χειριστήρια). Τα µsoft.windows; και το &macos; της Apple έχουν και τα δύο πολύ αυστηρή πολιτική γραφικών στοιχείων διεπαφής. Οι προγραμματιστές εφαρμογών πρέπει υποτίθεται να εξασφαλίσουν ότι οι εφαρμογές τους θα έχουν κοινή αίσθηση και εμφάνιση (look and feel). Στο X, δεν θεωρήθηκε απαραίτητο να γίνει επιβολή ενός συγκεκριμένου στυλ γραφικών, ή να τεθούν κάποια υποχρεωτικά γραφικά στοιχεία διεπαφής. Σαν αποτέλεσμα, μην περιμένετε τις εφαρμογές για X να έχουν κοινή εμφάνιση. Υπάρχουν διάφορες δημοφιλείς συλλογές γραφικών στοιχείων διεπαφής και παραλλαγές τους, συμπεριλαμβανομένης και της αυθεντικής Athena συλλογής γραφικών στοιχείων διεπαφής του MIT, &motif; (παραλλαγή της οποίας είναι και η συλλογή γραφικών στοιχείων διεπαφής των µsoft.windows;, με λοξές γωνίες και τρεις διαβαθμίσεις του γκρι), το OpenLook, και άλλα. Οι περισσότερες νέες X εφαρμογές σήμερα χρησιμοποιούν μια συλλογή γραφικών στοιχείων διεπαφής με μοντέρνα εμφάνιση, είτε το Qt, που χρησιμοποιείται από το KDE, είτε το GTK+, που χρησιμοποιείται από το GNOME. Από αυτή την άποψη, υπάρχει κάποια σύγκλιση στην εμφάνιση του &unix; desktop, το οποίο οπωσδήποτε κάνει τα πράγματα ευκολότερα για τον νέο χρήστη. Εγκατάσταση του X11 Το &xorg; είναι η προεπιλεγμένη υλοποίηση X11 για το &os;. Το &xorg; είναι ο διακομιστής Χ της υλοποίησης X Window System του X.Org Foundation, και είναι ανοικτού κώδικα. Ο &xorg; είναι βασισμένος στον κώδικα του &xfree86 4.4RC2 και του X11R6.6. Η έκδοση του &xorg; που διατίθεται από την συλλογή των Ports του &os; είναι η &xorg.version;. Για να μεταγλωττίσετε και να εγκαταστήσετε το &xorg; από την συλλογή των Ports: &prompt.root; cd /usr/ports/x11/xorg &prompt.root; make install clean Για να μεταγλωττίσετε ολόκληρο το &xorg; σιγουρευθείτε ότι έχετε το λιγότερο 4 GB ελεύθερο χώρο διαθέσιμο. Εναλλακτικά, το X11 μπορεί να εγκατασταθεί άμεσα από πακέτα. Υπάρχουν διαθέσιμα έτοιμα πακέτα του Χ11 για χρήση με το εργαλείο &man.pkg.add.1;. Αν χρησιμοποιήσετε τη δυνατότητα του &man.pkg.add.1; για λήψη μέσω δικτύου, δεν θα πρέπει στην γραμμή εντολών να δώσετε τον αριθμό έκδοσης (version number) του πακέτου. Το &man.pkg.add.1; θα κατεβάσει αυτόματα την τελευταία έκδοση της εφαρμογής. Έτσι, για να γίνει η λήψη και η εγκατάσταση του &xorg;, απλώς εκτελέστε: &prompt.root; pkg_add -r xorg Τα παραπάνω παραδείγματα θα εγκαταστήσουν ολόκληρη την διανομή X11 που περιλαμβάνει διακομιστές, πελάτες, γραμματοσειρές κλπ. Διατίθενται επίσης ξεχωριστά, τμηματικά πακέτα και ports για το X11. Το υπόλοιπο του κεφαλαίου θα σας εξηγήσει πως ρυθμίζεται το X11, και πως να στήσετε ένα παραγωγικό desktop περιβάλλον. Christopher Shumway Συνεισφορά του Ρύθμιση του X11 &xorg; X11 Πριν ξεκινήσετε Πριν την ρύθμιση του X11 χρειάζονται οι ακόλουθες πληροφορίες για το σύστημα: Προδιαγραφές της οθόνης Chipset της κάρτας γραφικών Μνήμη της κάρτας γραφικών οριζόντιος ρυθμός ανανέωσης κατακόρυφος ρυθμός ανανέωσης Οι προδιαγραφές της οθόνης χρησιμοποιούνται από το X11 για να ορισθεί η ανάλυση και ο ρυθμός ανανέωσης στο οποίο θα λειτουργήσει. Οι προδιαγραφές αυτές βρίσκονται συνήθως στην τεκμηρίωση που συνοδεύει την οθόνη ή στην ιστοσελίδα του κατασκευαστή. Χρειάζονται δύο σειρές αριθμών, ο οριζόντιος ρυθμός ανανέωσης και ο κατακόρυφος ρυθμός ανανέωσης. Το chipset (ολοκληρωμένο κύκλωμα) της κάρτας γραφικών ορίζει ποίος οδηγός συσκευής θα χρησιμοποιηθεί από το X11 για την επικοινωνία με την κάρτα γραφικών. Για τα περισσότερα chipset, αυτό μπορεί να ανιχνευθεί αυτόματα, αλλά είναι χρήσιμο να το γνωρίζετε σε περίπτωση που δεν πετύχει η αυτόματη ανίχνευση. Η μνήμη της κάρτας γραφικών καθορίζει την ανάλυση και το βάθος χρώματος στο οποίο μπορεί να δουλέψει το σύστημα. Αυτό είναι σημαντικό ώστε να γνωρίζει ο χρήστης τα όρια του συστήματος. Ρύθμιση του X11 Από την έκδοση 7.3 και μετά, το &xorg; μπορεί συχνά να λειτουργήσει χωρίς κανένα αρχείο ρυθμίσεων, γράφοντας απλώς στη γραμμή εντολών: &prompt.user; startx Από την έκδοση 7.4 και μετά, το &xorg; έχει τη δυνατότητα να χρησιμοποιεί το HAL για την αυτόματη ανίχνευση του πληκτρολογίου και του ποντικιού. Τα ports sysutils/hal και devel/dbus εγκαθίστανται ως εξαρτήσεις του x11/xorg, αλλά θα πρέπει να ενεργοποιηθούν με τις ακόλουθες εγγραφές στο /etc/rc.conf: hald_enable="YES" dbus_enable="YES" Θα πρέπει να ξεκινήσετε τις υπηρεσίες αυτές (είτε χειροκίνητα, είτε κάνοντας επανεκκίνηση) πριν συνεχίσετε με τη ρύθμιση του &xorg;. Σε κάποιες περιπτώσεις, η αυτόματη ρύθμιση μπορεί να μη λειτουργήσει σωστά, ή να μη ρυθμίσει τις συσκευές ακριβώς όπως επιθυμείτε. Στις περιπτώσεις αυτές, θα χρειαστεί να κάνετε χειροκίνητες ρυθμίσεις. Κάποια γραφικά περιβάλλοντα, όπως το GNOME το KDE ή το XFCE, διαθέτουν εργαλεία που επιτρέπουν στο χρήστη να ρυθμίσει με εύκολο τρόπο διάφορες παραμέτρους της οθόνης, όπως η ανάλυση. Αν η προεπιλεγμένη ρύθμιση δεν είναι αποδεκτή, και σκοπεύετε να εγκαταστήσετε κάποιο από αυτά τα περιβάλλοντα, μπορείτε να συνεχίσετε με την εγκατάσταση του, και να ολοκληρώσετε τις ρυθμίσεις σας χρησιμοποιώντας το κατάλληλο γραφικό εργαλείο. Το πρώτο βήμα είναι η δημιουργία ενός αρχικού αρχείου ρυθμίσεων. Ως root, απλώς εκτελέστε: &prompt.root; Xorg -configure Αυτό θα δημιουργήσει ένα πρότυπο αρχείο ρυθμίσεων του X11 στον κατάλογο /root με το όνομα xorg.conf.new (είτε χρησιμοποιήσετε το &man.su.1; είτε συνδεθείτε απευθείας, η μεταβλητή καταλόγου $HOME αλλάζει δείχνοντας τον κατάλογο του root). Το X11 θα προσπαθήσει να ανιχνεύσει το υποσύστημα γραφικών του συστήματος και να δημιουργήσει ένα αρχείο ρυθμίσεων που θα φορτώνει τους σωστούς οδηγούς συσκευών για το υλικό που ανιχνεύθηκε στο σύστημα σας. Το επόμενο βήμα είναι ο έλεγχος των υπάρχοντων ρυθμίσεων για να επιβεβαιώσετε ότι το &xorg; λειτουργεί με το υποσύστημα γραφικών του συστήματος σας. Για εκδόσεις του &xorg; μέχρι το 7.3, πληκτρολογήστε: &prompt.root; Xorg -config xorg.conf.new Από το &xorg; 7.4 και μετά, το παραπάνω τεστ δείχνει μια μαύρη οθόνη η οποία κάνει δύσκολη τη διάγνωση καλής λειτουργίας του X11. Χρησιμοποιήστε την επιλογή για να αποκαταστήσετε την παλιότερη συμπεριφορά: &prompt.root; Xorg -config xorg.conf.new -retro Εάν εμφανιστεί ένα μαύρο και γκρι πλέγμα και ένας δείκτης ποντικιού με μορφή X, η ρύθμιση ήταν επιτυχής. Για να τερματίσετε τη δοκιμή, μεταβείτε στην εικονική κονσόλα από την οποία την ξεκινήσατε, πιέζοντας Ctrl Alt Fn (F1 για την πρώτη εικονική κονσόλα) και πιέστε Ctrl C . Στις εκδόσεις του &xorg; πριν την 7.3, μπορούσε να χρησιμοποιηθεί ο συνδυασμός πλήκτρων Ctrl Alt Backspace για τον τερματισμό του προγράμματος. Για να τον ενεργοποιήσετε από την έκδοση 7.4 και μετά, μπορείτε να δώσετε την παρακάτω εντολή σε κάποιο τερματικό του X: &prompt.user; setxkbmap -option terminate:ctrl_alt_bksp Εναλλακτικά, δημιουργήστε ένα αρχείο ρυθμίσεων πληκτρολογίου για το hald με την ονομασία x11-input.fdi και αποθηκεύστε το στον κατάλογο /usr/local/etc/hal/fdi/policy. Το αρχείο αυτό θα πρέπει να περιέχει τις παρακάτω γραμμές: <?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.keyboard"> <merge key="input.x11_options.XkbOptions" type="string">terminate:ctrl_alt_bksp</merge> </match> </device> </deviceinfo> Θα χρειαστεί να επανεκκινήσετε το μηχάνημα σας για να εξαναγκάσετε το hald να διαβάσει αυτό το αρχείο. Θα πρέπει επίσης να προσθέσετε την παρακάτω γραμμή στο αρχείο xorg.conf.new, στην ενότητα ServerLayout ή ServerFlags: Option "DontZap" "off" Αν το ποντίκι δεν λειτουργεί, θα χρειαστεί να το ρυθμίσετε πριν συνεχίσετε. Δείτε το στο κεφάλαιο εγκατάστασης του &os;. Επιπρόσθετα, από την έκδοση 7.4 και μετά, οι ενότητες InputDevice στο xorg.conf αγνοούνται καθώς γίνεται χρήση των συσκευών που ανιχνεύθηκαν αυτόματα. Για να επαναφέρετε την παλιά συμπεριφορά, προσθέστε την παρακάτω γραμμή στην ενότητα ServerLayout ή ServerFlags του αρχείου ρυθμίσεων: Option "AutoAddDevices" "false" Θα μπορείτε έπειτα να ρυθμίσετε τις συσκευές εισόδου όπως στις προηγούμενες εκδόσεις του &xorg;, χρησιμοποιώντας και όποιες άλλες επιλογές χρειάζεστε (π.χ. εναλλαγή πληκτρολογίου). Όπως εξηγήσαμε και προηγουμένως, από την έκδοση 7.4 και μετά ο δαίμονας hald αναλαμβάνει να ανιχνεύσει αυτόματα το πληκτρολόγιο σας. Υπάρχει περίπτωση να μην γίνει σωστή ανίχνευση του μοντέλου ή της διάταξης, ωστόσο κάποια γραφικά περιβάλλοντα όπως το GNOME το KDE και το Xfce παρέχουν τα δικά τους εργαλεία για τη ρύθμιση του. Μπορείτε όμως να ρυθμίσετε τις ιδιότητες του πληκτρολογίου και απευθείας, είτε μέσω του βοηθητικού προγράμματος &man.setxkbmap.1; είτε με την προσθήκη ενός κανόνα στο hald. Για παράδειγμα, αν κάποιος θέλει να χρησιμοποιήσει ένα πληκτρολόγιο 102 πλήκτρων με γαλλική διάταξη, θα πρέπει να δημιουργήσει ένα αρχείο ρυθμίσεων για το hald με το όνομα x11-input.fdi και να το αποθηκεύσει στον κατάλογο /usr/local/etc/hal/fdi/policy. Το αρχείο αυτό θα περιέχει τις παρακάτω γραμμές: <?xml version="1.0" encoding="ISO-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.keyboard"> <merge key="input.x11_options.XkbModel" type="string">pc102</merge> <merge key="input.x11_options.XkbLayout" type="string">fr</merge> </match> </device> </deviceinfo> Αν το αρχείο αυτό υπάρχει ήδη, απλώς αντιγράψτε τις παραπάνω γραμμές μέσα στο υπάρχον περιεχόμενο. Θα πρέπει να επανεκκινήσετε το μηχάνημα σας για να εξαναγκάσετε το hald να διαβάσει το αρχείο. Μπορείτε επίσης να κάνετε την ίδια ρύθμιση μέσα από ένα τερματικό στα Χ ή ακόμα και από ένα script, εκτελώντας την παρακάτω εντολή: &prompt.user; setxkbmap -model pc102 -layout fr Μπορείτε να βρείτε τις διαθέσιμες επιλογές πληκτρολογίων και διατάξεων στο αρχείο /usr/local/share/X11/xkb/rules/base.lst. Ρύθμιση του X11 Έπειτα, προσαρμόστε το αρχείο ρυθμίσεων xorg.conf.new στις προτιμήσεις σας. Ανοίξτε το με έναν συντάκτη κειμένου όπως ο &man.emacs.1; ή ο &man.ee.1;. Πρώτα, προσθέστε τις συχνότητες της οθόνης. Συνήθως αναφέρονται ως οριζόντιοι και κατακόρυφοι ρυθμοί συγχρονισμού. Αυτές οι τιμές τοποθετούνται στο αρχείο xorg.conf.new στο Section "Monitor": Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection Οι μεταβλητές HorizSync και VertRefresh μπορεί να μην υπάρχουν στο αρχείο ρυθμίσεων. Αν δεν υπάρχουν, πρέπει να προστεθούν, με τον σωστό οριζόντιο ρυθμό συγχρονισμού μετά την λέξη HorizSync και τον κατακόρυφο ρυθμό συγχρονισμού μετά την λέξη VertRefresh. Στο παραπάνω παράδειγμα, προσθέσαμε τους αντίστοιχους ρυθμούς ανανέωσης της οθόνης μας. Το X επιτρέπει τη χρήση των δυνατοτήτων DPMS (Energy Star) σε οθόνες που υποστηρίζουν την αντίστοιχη λειτουργία. Το πρόγραμμα &man.xset.1; ελέγχει τους χρόνους και μπορεί να επιβάλλει τις καταστάσεις standby, suspend, ή off. Αν θέλετε να ενεργοποιήσετε τις δυνατότητες DPMS της οθόνης σας, πρέπει να προσθέσετε την ακόλουθη γραμμή στο Section monitor: Option "DPMS" xorg.conf Όσο το αρχείο ρυθμίσεων xorg.conf.new είναι ακόμα ανοικτό σε έναν συντάκτη κειμένου, επιλέξτε την ανάλυση και το βάθος χρωμάτων που επιθυμείτε. Αυτό καθορίζεται στο Section "Screen": Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection EndSection Η μεταβλητή DefaultDepth ορίζει το προεπιλεγμένο βάθος χρώματος που θα χρησιμοποιηθεί. Μπορείτε να την παρακάμψετε με τον διακόπτη στη γραμμή εντολών του &man.Xorg.1;. Η επιλογή Modes ορίζει την ανάλυση με την οποία θα λειτουργεί η οθόνη σε ένα συγκεκριμένο βάθος χρωμάτων. Προσέξτε ότι υποστηρίζονται μόνο κανονικές καταστάσεις VESA, όπως ορίζονται από το υποσύστημα γραφικών του συστήματος. Στο παραπάνω παράδειγμα, το καθορισμένο βάθος χρωμάτων είναι εικοσιτέσσερα bits ανά pixel. Σε αυτό το βάθος χρωμάτων, η αποδεκτή ανάλυση είναι 1024Χ768 pixels. Τέλος, αποθηκεύστε το αρχείο ρυθμίσεων και ελέγξτε το με την μέθοδο ελέγχου που εξηγήσαμε παραπάνω. Ένα από τα εργαλεία που μπορεί να σας βοηθήσουν κατά την διαδικασία επίλυσης προβλημάτων, είναι τα αρχεία X11 log, που περιέχουν πληροφορίες για κάθε συσκευή που επικοινωνεί με τον διακομιστή X11. Τα αρχεία &xorg; log ονομάζονται με την μορφή /var/log/Xorg.0.log. Το ακριβές όνομα ενός log μπορεί να είναι Xorg.0.log έως Xorg.8.log και πάει λέγοντας. Αν όλα είναι καλά, το αρχείο ρυθμίσεων πρέπει να τοποθετηθεί σε μια κοινή τοποθεσία ώστε να εντοπίζεται από το &man.Xorg.1;. Αυτή συνήθως είναι η /etc/X11/xorg.conf ή /usr/local/etc/X11/xorg.conf. &prompt.root; cp xorg.conf.new /etc/X11/xorg.conf Η διαδικασία ρύθμισης του X11 έχει τώρα ολοκληρωθεί Το &xorg; μπορείτε να το ξεκινήσετε με το βοηθητικό πρόγραμμα &man.startx.1;. Ο διακομιστής X11 μπορεί επίσης να εκκινήσει με τη βοήθεια του &man.xdm.1;. Εξειδικευμένα Θέματα Ρυθμίσεων Ρυθμίσεις για τα &intel; i810 Graphics Chipsets Intel i810 graphic chipset Για να χρησιμοποιήσετε κάρτα βασισμένη στα &intel; i810 integrated chipsets, απαιτείται το agpgart, η διεπαφή προγραμματισμού των X11 για το AGP. Δείτε την σελίδα manual του προγράμματος οδήγησης &man.agp.4; για περισσότερες πληροφορίες. Mε αυτό τον τρόπο, η ρύθμιση του υλικού σας θα μπορεί να γίνει όπως και σε κάθε άλλη κάρτα γραφικών. Προσοχή, σε συστήματα χωρίς ενσωματωμένο τον οδηγό &man.agp.4;, ο οδηγός δεν θα φορτωθεί με την εντολή &man.kldload.8;. Ο οδηγός αυτός πρέπει να βρίσκεται στον πυρήνα κατά την εκκίνηση, είτε στατικά μεταγλωττισμένος, είτε με χρήση του /boot/loader.conf. Προσθέτοντας μια Widescreen Επίπεδη Οθόνη Ρύθμιση widescreen επίπεδης οθόνης Αυτό το τμήμα προϋποθέτει μερικές γνώσεις εξειδικευμένων ρυθμίσεων. Αν οι προσπάθειες με τα συνήθη εργαλεία ρυθμίσεων δεν καταλήξουν σε μια ρύθμιση που να λειτουργεί, υπάρχουν αρκετές πληροφορίες στα αρχεία log που μπορούν να σας βοηθήσουν. Ωστόσο, είναι απαραίτητη η χρήση ενός συντάκτη κειμένου. Οι τρέχουσες αναλύσεις widescreen (WSXGA, WSXGA+, WUXGA, WXGA, WXGA+, κ.α.) υποστηρίζουν formats και aspect ratios (αναλογίες) 16:10 και 16:9 που μπορεί να δημιουργήσουν προβλήματα. Παραδείγματα μερικών κοινών αναλύσεων για αναλογία 16:10 είναι τα: 2560x1600 1920x1200 1680x1050 1440x900 1280x800 Κάποια στιγμή, η ρύθμιση θα γίνεται πολύ απλά προσθέτοντας την ανάλυση ως ένα πιθανό Mode στο Section "Screen" όπως εδώ: Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1680x1050" EndSubSection EndSection Το &xorg; είναι αρκετά έξυπνο ώστε να ανακτήσει τις πληροφορίες της ανάλυσης της widescreen οθόνης μέσω των πληροφοριών I2C/DDC, γνωρίζοντας έτσι τι μπορεί να χειριστεί η οθόνη όσο αφορά τις συχνότητες και τις αναλύσεις. Αν αυτές οι ModeLines δεν υπάρχουν στους οδηγούς, μπορεί να χρειαστεί να τις δώσετε εσείς στο &xorg;. Χρησιμοποιώντας το /var/log/Xorg.0.log μπορείτε να ανακτήσετε αρκετές πληροφορίες ώστε να δημιουργήσετε μόνοι σας ένα ModeLine που να λειτουργεί. Απλώς αναζητήστε πληροφορίες που θα μοιάζουν με αυτό: (II) MGA(0): Supported additional Video Mode: (II) MGA(0): clock: 146.2 MHz Image Size: 433 x 271 mm (II) MGA(0): h_active: 1680 h_sync: 1784 h_sync_end 1960 h_blank_end 2240 h_border: 0 (II) MGA(0): v_active: 1050 v_sync: 1053 v_sync_end 1059 v_blanking: 1089 v_border: 0 (II) MGA(0): Ranges: V min: 48 V max: 85 Hz, H min: 30 H max: 94 kHz, PixClock max 170 MHz Αυτές ονομάζονται πληροφορίες EDID. Η δημιουργία ενός ModeLine από αυτές, γίνεται βάζοντας απλώς τους αριθμούς στη σωστή σειρά: ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings> Τελικά, το ModeLine στο Section "Monitor" στο παράδειγμα μας θα μοιάζει με αυτό: Section "Monitor" Identifier "Monitor1" VendorName "Bigname" ModelName "BestModel" ModeLine "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089 Option "DPMS" EndSection Τώρα που έχετε τελειώσει με αυτά τα απλά βήματα, το X θα πρέπει να λειτουργήσει στη νέα widescreen οθόνη σας. Murray Stokely Συνεισφορά του Χρήση Γραμματοσειρών στο X11 Γραμματοσειρές τύπου Type1 Οι προκαθορισμένες γραμματοσειρές που συνοδεύουν το X11 δεν είναι ιδανικές για εφαρμογές επιτραπέζιας τυπογραφίας. Οι μεγάλες γραμματοσειρές παρουσίασης φαίνονται οδοντωτές και ερασιτεχνικές, και οι μικρές γραμματοσειρές στο &netscape; είναι σχεδόν ακατάληπτες. Ευτυχώς όμως, υπάρχουν διαθέσιμες αρκετές, υψηλής ποιότητας γραμματοσειρές Type1 (&postscript;) που μπορούν να χρησιμοποιηθούν άμεσα από το X11. Για παράδειγμα, η συλλογή γραμματοσειρών URW (x11-fonts/urwfonts) περιέχει εκδόσεις υψηλής ποιότητας των συνηθισμένων type1 γραμματοσειρών (Times Roman, Helvetica, Palatino και άλλες). Η συλλογή Freefonts (x11-fonts/freefonts) περιέχει πολλές περισσότερες γραμματοσειρές, αλλά οι περισσότερες από αυτές είναι για λογισμικό γραφικών όπως το Gimp, και δεν είναι κατάλληλες για γραμματοσειρές οθόνης. Ακόμη, το X11 μπορεί με ελάχιστο κόπο να ρυθμιστεί ώστε να χρησιμοποιεί &truetype; γραμματοσειρές. Για περισσότερες λεπτομέρειες, δείτε την σελίδα manual &man.X.7; ή το τμήμα σχετικά με τις γραμματοσειρές &truetype;. Για να εγκαταστήσετε τις παραπάνω συλλογές γραμματοσειρών Type1 από την συλλογή των ports, εκτελέστε τις παρακάτω εντολές: &prompt.root; cd /usr/ports/x11-fonts/urwfonts &prompt.root; make install clean Με παρόμοιο τρόπο μπορείτε να εγκαταστήσετε και την freefont ή άλλες συλλογές. Για να ανιχνεύσει ο X server αυτές τις γραμματοσειρές, προσθέστε την κατάλληλη γραμμή στο αρχείο ρυθμίσεων του (/etc/X11/xorg.conf): FontPath "/usr/local/lib/X11/fonts/URW/" Εναλλακτικά, εκτελέστε στην γραμμή εντολών μιας συνόδου X: &prompt.user; xset fp+ /usr/local/lib/X11/fonts/URW &prompt.user; xset fp rehash Αυτό θα λειτουργήσει, αλλά όταν τερματίσει η σύνοδος X, οι ρυθμίσεις θα χαθούν, εκτός αν προστεθούν στο αρχείο εκκίνησης (το ~/.xinitrc για μία συνηθισμένη σύνοδο μέσω startx, η το ~/.xsession αν συνδέεστε μέσω ενός γραφικού διαχειριστή σύνδεσης όπως ο XDM). Ένας ακόμη τρόπος είναι να χρησιμοποιήσετε το αρχείο /usr/local/etc/fonts/local.conf: δείτε το τμήμα anti-aliasing (εξομάλυνσης). Γραμματοσειρές &truetype; Γραμματοσειρές TrueType γραμματοσειρές TrueType Το &xorg; έχει ενσωματωμένη υποστήριξη απεικόνισης γραμματοσειρών &truetype;. Υπάρχουν δύο διαφορετικά modules (αρθρώματα) που μπορούν να ενεργοποιήσουν αυτήν την λειτουργία. Σε αυτό το παράδειγμα χρησιμοποιείται το freetype module επειδή είναι πιο συνεργάσιμο με τα άλλα back-ends απεικόνισης γραμματοσειρών. Για να ενεργοποιήσετε το freetype module, απλώς προσθέστε την παρακάτω γραμμή στο τμήμα "Module" του αρχείου /etc/X11/xorg.conf. Load "freetype" Τώρα, δημιουργήστε έναν κατάλογο για τις γραμματοσειρές &truetype; (για παράδειγμα, /usr/local/lib/X11/fonts/TrueType) και αντιγράψτε όλες τις γραμματοσειρές &truetype; σε αυτόν. Προσέξτε ότι οι γραμματοσειρές &truetype; δεν μπορούν να είναι από ένα σύστημα &macintosh; πρέπει να είναι σε μορφή &unix;/&ms-dos;/&windows; για να λειτουργούν στο X11. Μόλις αντιγραφούν τα αρχεία στον κατάλογο, χρησιμοποιήστε το ttmkfdir για να δημιουργήσετε το αρχείο fonts.dir, ώστε ο X font renderer να γνωρίζει την ύπαρξη των νέων αυτών αρχείων. Το ttmkfdir διατίθεται από την συλλογή ports του &os; ως x11-fonts/ttmkfdir. &prompt.root; cd /usr/local/lib/X11/fonts/TrueType &prompt.root; ttmkfdir -o fonts.dir Τώρα, πρoσθέστε τον κατάλογο &truetype; στη διαδρομή των fonts. Αυτό γίνεται με τον ίδιο τρόπο που περιγράψαμε παραπάνω στις Type1 γραμματοσειρές, χρησιμοποιώντας το &prompt.user; xset fp+ /usr/local/lib/X11/fonts/TrueType &prompt.user; xset fp rehash ή απλά προσθέστε μια γραμμή FontPath στο αρχείο xorg.conf. Αυτό ήταν. Τώρα ο &netscape;, το Gimp, το &staroffice;, και όλες οι άλλες εφαρμογές X πρέπει να αναγνωρίζουν τις εγκαταστημένες &truetype; γραμματοσειρές. Πολύ μικρές γραμματοσειρές (όπως αυτές που φαίνονται στο κείμενο μιας ιστοσελίδας σε υψηλή ανάλυση) και πολύ μεγάλες γραμματοσειρές (στο &staroffice;) θα φαίνονται τώρα πολύ καλύτερα. Joe Marcus Clarke Ανανεώθηκε από τον Anti-Aliased Γραμματοσειρές anti-aliased γραμματοσειρές γραμματοσειρές anti-aliased - Το anti-aliasing (εξομάλυνση γραμματοσειρών) διατίθεται στο X11 - ήδη από το &xfree86; 4.0.2. Όμως, ή - ρύθμιση των γραμματοσειρών ήταν δύσκολη πριν το - &xfree86; 4.3.0. - Από το &xfree86; 4.3.0 και μετά, όλες οι - γραμματοσειρές X11 που βρίσκονται στο + Όλες οι γραμματοσειρές X11 που βρίσκονται στο /usr/local/lib/X11/fonts/ και το - ~/.fonts/ είναι έτοιμες για anti-aliasing σε - Xft-aware εφαρμογές. Δεν είναι όλες οι εφαρμογές Xft-aware, αλλά - πολλές υποστηρίζουν το Xft. Παραδείγματα Xft-aware εφαρμογών είναι - το Qt από την έκδοση 2.3 και μετά (πρόκειται για το toolkit του - KDE), το GTK+ από την έκδοση 2.0 και μετά - (πρόκειται για το toolkit του GNOME), και ο - Mozilla από την έκδοση 1.2 και μετά. + ~/.fonts/ είναι αυτόματα διαθέσιμες για + anti-aliasing σε εφαρμογές Xft-aware, συμπεριλαμβανομένων + του KDE, GNOME και Firefox. Για να ελέγξετε ποίες γραμματοσειρές είναι anti-aliased, ή να ρυθμίσετε τις ιδιότητες του anti-aliasing, δημιουργήστε (ή τροποποιήστε, αν ήδη υπάρχει) το αρχείο /usr/local/etc/fonts/local.conf. Μέσω αυτού του αρχείου μπορούν να ρυθμιστούν αρκετά εξειδικευμένα χαρακτηριστικά του συστήματος γραμματοσειρών Xft. Αυτό το τμήμα περιγράφει μόνο μερικές απλές δυνατότητες. Για περισσότερες λεπτομέρειες, δείτε το &man.fonts-conf.5;. XML Το αρχείο αυτό πρέπει να είναι μορφής XML. Δώστε μεγάλη προσοχή στα πεζά / κεφαλαία, και σιγουρευθείτε ότι όλα τα tags έχουν κλείσει σωστά. Το αρχείο ξεκινά με την συνηθισμένη επικεφαλίδα XML και ένα ορισμό DOCTYPE, και έπειτα ακολουθεί το <fontconfig> tag: <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> Όπως είπαμε προηγουμένως, όλες οι γραμματοσειρές στο /usr/local/lib/X11/fonts/ όπως και στο ~/.fonts/ διατίθενται ήδη σε Xft-aware εφαρμογές. Αν θέλετε να προσθέσετε και άλλους καταλόγους εκτός από αυτούς τους δύο, προσθέστε μια γραμμή παρόμοια με αυτή που ακολουθεί στο /usr/local/etc/fonts/local.conf: <dir>/path/to/my/fonts</dir> Αφού προσθέσετε νέες γραμματοσειρές, και ειδικότερα νέους καταλόγους γραμματοσειρών, πρέπει να εκτελέσετε την ακόλουθη εντολή για να αναδημιουργήσετε την cache γραμματοσειρών: &prompt.root; fc-cache -f Το anti-aliasing κάνει τα άκρα ελαφρώς συγκεχυμένα, κάνοντας έτσι τα πολύ μικρά γράμματα πιο αναγνώσιμα, και αφαιρεί τις κλίμακες (σκαλοπάτια) από τα μεγάλα γράμματα, αλλά μπορεί να προκαλέσει ενοχλήσεις στα μάτια αν χρησιμοποιηθεί σε κανονικά μεγέθη. Για να εξαιρέσετε από το anti-aliasing μεγέθη γραμματοσειρών μικρότερα από 14 point, προσθέστε αυτές τις γραμμές: <match target="font"> <test name="size" compare="less"> <double>14</double> </test> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match> <match target="font"> <test name="pixelsize" compare="less" qual="any"> <double>14</double> </test> <edit mode="assign" name="antialias"> <bool>false</bool> </edit> </match> γραμματοσειρές spacing Το spacing (διαστήματα) σε μερικές monospaced γραμματοσειρές μπορεί επίσης να είναι ακατάλληλο όταν χρησιμοποιείται anti-aliasing. Αυτό φαίνεται να αποτελεί ιδιαίτερο πρόβλημα με το KDE. Μια διόρθωση για αυτό, είναι να επιβάλλετε στο spacing την τιμή 100 για αυτές τις γραμματοσειρές. Προσθέστε τις ακόλουθες γραμμές: <match target="pattern" name="family"> <test qual="any" name="family"> <string>fixed</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> <match target="pattern" name="family"> <test qual="any" name="family"> <string>console</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> (αυτό μετονομάζει τα άλλα κοινά ονόματα των fixed γραμματοσειρών ως "mono"), και έπειτα προσθέστε: <match target="pattern" name="family"> <test qual="any" name="family"> <string>mono</string> </test> <edit name="spacing" mode="assign"> <int>100</int> </edit> </match> Συγκεκριμένες γραμματοσειρές, όπως οι Helvetica, μπορεί να εμφανίζουν πρόβλημα όταν είναι anti-aliased. Το πρόβλημα συχνά εκδηλώνεται ως μία γραμματοσειρά κομμένη κάθετα στην μέση. Στην - χειρότερη περίπτωση, μπορεί να κάνει εφαρμογές όπως ο - Mozilla να καταρρεύσουν. Για να το - αποφύγετε αυτό, μπορείτε να προσθέσετε το ακόλουθο στο - local.conf: + χειρότερη περίπτωση, μπορεί να κάνει κάποιες εφαρμογές να + καταρρεύσουν. Για να το αποφύγετε αυτό, μπορείτε να προσθέσετε το + ακόλουθο στο local.conf: <match target="pattern" name="family"> <test qual="any" name="family"> <string>Helvetica</string> </test> <edit name="family" mode="assign"> <string>sans-serif</string> </edit> </match> Μόλις τελειώσετε την μετατροπή του local.conf σιγουρευθείτε ότι κλείσατε το αρχείο με το </fontconfig> tag. Αν δεν το κάνετε, οι αλλαγές σας θα αγνοηθούν. - Η συλλογή γραμματοσειρών που συνοδεύει το X11 δεν είναι ιδιαίτερα - καλή όσο αφορά το anti-aliasing. Μπορείτε να βρείτε μια πολύ - καλύτερη συλλογή προεπιλεγμένων γραμματοσειρών στο port - x11-fonts/bitstream-vera - Αυτό το port θα εγκαταστήσει το αρχείο - /usr/local/etc/fonts/local.conf αν δεν υπάρχει - ήδη. Αν το αρχείο υπάρχει, το port θα δημιουργήσει ένα αρχείο - /usr/local/etc/fonts/local.conf-vera. - Συγχωνεύστε τα περιεχόμενα αυτού του αρχείου με το - /usr/local/etc/fonts/local.conf, και οι - γραμματοσειρές Bitstream θα αντικαταστήσουν αυτόματα τις αρχικές - X11 Serif, Sans Serif, και Monospaced. - Τέλος, οι χρήστες μπορούν να προσθέσουν τις δικές τους ρυθμίσεις μέσω των προσωπικών τους αρχείων .fonts.conf. Για να γίνει αυτό, κάθε χρήστης πρέπει απλώς να δημιουργήσει ένα ~/.fonts.conf. Αυτό το αρχείο πρέπει να είναι επίσης XML μορφής. LCD οθόνη γραμματοσειρές LCD screen Κάτι τελευταίο: σε μία LCD οθόνη, μπορεί να είναι επιθυμητός ο δειγματισμός sub-pixel. Ο δειγματισμός χειρίζεται χωριστά τα (οριζόντια διαχωρισμένα) κόκκινα, πράσινα και μπλε στοιχεία ώστε να βελτιώσει την οριζόντια ανάλυση. Τα αποτελέσματα μπορεί να είναι δραματικά καλύτερα. Για να τον ενεργοποιήσετε, προσθέστε την παρακάτω γραμμή κάπου στο αρχείο local.conf: <match target="font"> <test qual="all" name="rgba"> <const>unknown</const> </test> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match> Ανάλογα με τον τύπο της οθόνης, το rgb μπορεί να χρειαστεί να αλλάξει σε bgr, vrgb ή vbgr: πειραματιστείτε και δείτε ποίο λειτουργεί καλύτερα. - - - Mozilla - κατάργηση των anti-aliased γραμματοσειρών - - - Το anti-aliasing θα πρέπει να ενεργοποιηθεί στην επόμενη - εκκίνηση του διακομιστή X. Όμως, τα προγράμματα πρέπει να γνωρίζουν - πώς να το εκμεταλλευθούν. Τη δεδομένη στιγμή, το Qt toolkit το - γνωρίζει, έτσι όλο το περιβάλλον KDE - μπορεί να χρησιμοποιήσει anti-aliased γραμματοσειρές. Το GTK+ και - το GNOME μπορούν επίσης να - χρησιμοποιήσουν το anti-aliasing μέσω του Font - capplet (δείτε το για - λεπτομέρειες). Εξ ορισμού, ο Mozilla - από την έκδοση 1.2 και μετά χρησιμοποιεί αυτόματα το - anti-aliasing. Για να το απενεργοποιήσετε, αναμεταγλωττίστε τον - Mozilla με την επιλογή - -DWITHOUT_XFT. Seth Kingsley Συνεισφορά του Ο X Display Manager Εισαγωγή X Display Manager Ο X Display Manager (XDM) είναι ένα προαιρετικό μέρος του συστήματος X Windows που χρησιμοποιείται για διαχείριση συνδέσεων (logins). Αυτό είναι χρήσιμο σε πολλές περιπτώσεις, όπως σε απλά X Terminals, σε desktop μηχανήματα, καθώς και σε διακομιστές μεγάλων δικτύων. Αφού το σύστημα X Windows είναι ανεξάρτητο πρωτοκόλλων και δικτύων, υπάρχει μεγάλο εύρος πιθανών ρυθμίσεων για την λειτουργία X πελατών και διακομιστών σε διαφορετικά μηχανήματα συνδεδεμένα σε ένα δίκτυο. Ο XDM παρέχει ένα γραφικό περιβάλλον για την επιλογή του διακομιστή με τον οποίο θα γίνει η σύνδεση, και για την είσοδο πληροφοριών πιστοποίησης όπως του ονόματος χρήστη και του κωδικού πρόσβασης. Σκεφθείτε τον XDM ως μια εφαρμογή που παρέχει τις ίδιες δυνατότητες στον χρήστη με το εργαλείο &man.getty.8; (δείτε το για λεπτομέρειες). Το XDM εκτελεί συνδέσεις (logins) στον διακομιστή και έπειτα εκτελεί ένα διαχειριστή συνεδρίας (session manager, συνήθως έναν X διαχειριστή παραθύρων, window manager) για λογαριασμό του χρήστη. Ο XDM έπειτα περιμένει να τερματίσει αυτό το πρόγραμμα, που σηματοδοτεί ότι ο χρήστης τελείωσε και πρέπει να αποσυνδεθεί. Σε αυτό το σημείο, ο XDM μπορεί να εμφανίσει ξανά την οθόνη εισόδου (login) και την οθόνη επιλογής γραφικής σύνδεσης ώστε να συνδεθεί ένας άλλος χρήστης. Χρήση του XDM Για να ξεκινήσετε να χρησιμοποιείτε το XDM, εγκαταστήστε το port x11/xdm (δεν εγκαθίσταται από προεπιλογή στις πρόσφατες εκδόσεις του &xorg;). Μπορείτε έπειτα να βρείτε τον δαίμονα XDM στο /usr/local/bin/xdm. Αυτό το πρόγραμμα μπορεί να εκτελεστεί οποιαδήποτε στιγμή ως root και θα ξεκινήσει να διαχειρίζεται την οθόνη του X στο τοπικό μηχάνημα. Αν ο XDM πρέπει να εκτελείται κάθε φορά που εκκινείται το μηχάνημα, ένας βολικός τρόπος είναι η προσθήκη μιας γραμμής στο /etc/ttys. Για περισσότερες πληροφορίες σχετικά με την μορφή και την χρήση αυτού του αρχείου, δείτε το . Υπάρχει μία γραμμή στο αρχικό /etc/ttys αρχείο για την εκτέλεση του XDM σε ένα εικονικό τερματικό: ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure Αρχικά αυτή η λειτουργία είναι απενεργοποιημένη — για να την ενεργοποιήσετε αλλάξτε το πεδίο 5 από off σε on και επαννεκίνηστε το &man.init.8; χρησιμοποιώντας τις οδηγίες του . Το πρώτο πεδίο, το όνομα του τερματικού που θα διαχειρίζεται το πρόγραμμα, είναι το ttyv8. Αυτό σημαίνει ότι ο XDM θα εκτελείται στο 9ο εικονικό τερματικό. Ρύθμιση του XDM Ο κατάλογος ρυθμίσεων του XDM βρίσκεται στο /usr/local/lib/X11/xdm. Σε αυτόν τον κατάλογο υπάρχουν πολλά αρχεία που χρησιμοποιούνται για να αλλάξουν την συμπεριφορά και εμφάνιση του XDM. Τυπικά, θα βρείτε τα παρακάτω αρχεία: Αρχείο Περιγραφή Xaccess Κανόνες πιστοποίησης πελατών. Xresources Προκαθορισμένες τιμές X resource. Xservers Λίστα απομακρυσμένων και τοπικών οθονών (Χ displays) στις οποίες θα γίνεται διαχείριση. Xsession Προεπιλεγμένο script συνόδων για logins. Xsetup_* Script για την εκτέλεση εντολών πριν την εμφάνιση του περιβάλλοντος σύνδεσης (login screen). xdm-config Ρυθμίσεις για όλες τις απεικονίσεις (displays) που εκτελούνται σε αυτό το μηχάνημα. xdm-errors Λάθη που δημιουργούνται από το πρόγραμμα. xdm-pid Το ID της διεργασίας του τρέχοντος XDM. Επίσης σε αυτόν τον κατάλογο υπάρχουν μερικά scripts και προγράμματα που χρησιμοποιούνται για να ρυθμίσουν την επιφάνεια εργασίας όταν εκτελείται το XDM. Θα περιγράψουμε περιληπτικά το σκοπό καθενός από αυτά τα αρχεία. Η ακριβής σύνταξη και χρήση όλων αυτών των αρχείων περιγράφεται στο &man.xdm.1;. Η προκαθορισμένη ρύθμιση είναι ένα απλό ορθογώνιο παράθυρο σύνδεσης με το όνομα του μηχανήματος να φαίνεται στην κορυφή με μεγάλα γράμματα και τις προτροπές Login: και Password: από κάτω. Αυτό είναι ένα καλό σημείο εκκίνησης για να αλλάξετε την εμφάνιση του XDM. Xaccess Το πρωτόκολλο για σύνδεση με απεικονίσεις που ελέγχονται από το XDM ονομάζεται X Display Manager Connection Protocol (XDMCP). Το αρχείο αυτό είναι ένα σύνολο κανόνων για των έλεγχο των συνδέσεων XDMCP από απομακρυσμένα μηχανήματα. Αγνοείται, εκτός και αν το xdm-config έχει ρυθμιστεί ώστε να δέχεται εισερχόμενες συνδέσεις. Η προεπιλογή είναι να μην επιτρέπεται σε κανένα πελάτη να συνδεθεί. Xresources Πρόκειται για το αρχείο προκαθορισμένων τιμών για τις εφαρμογές εμφάνισης του παράθυρου σύνδεσης (login) και επιλογέα απεικόνισης (display chooser). Μέσα από αυτό μπορεί να τροποποιηθεί η εμφάνιση του προγράμματος login. Η μορφή του είναι ίδια με το αρχείο app-defaults που περιγράφεται στην τεκμηρίωση του X11. Xservers Αυτή είναι μια λίστα των απομακρυσμένων σταθμών που πρέπει να εμφανίζονται ως επιλογές στο πρόγραμμα (chooser). Xsession Αυτό είναι το προκαθορισμένο session script που εκτελεί το XDM μετά τη σύνδεση κάποιου χρήστη. Κανονικά, κάθε χρήστης θα έχει ένα τροποποιημένο, δικό του, session script στο ~/.xsession που θα παρακάμπτει αυτό το script. Xsetup_* Τα αρχεία αυτά εκτελούνται αυτόματα πριν την εμφάνιση των παραθύρων επιλογής ή σύνδεσης. Υπάρχει ένα script για κάθε display που χρησιμοποιείται, που ονομάζεται Xsetup_ με το νούμερο του display στο τέλος (για παράδειγμα Xsetup_0). Κανονικά αυτά τα scripts θα εκτελούν ένα ή δυο προγράμματα στο παρασκήνιο όπως π.χ. το xconsole. xdm-config Το αρχείο αυτό περιέχει ρυθμίσεις στην μορφή των app-defaults, που εφαρμόζονται σε κάθε display που διαχειρίζεται η συγκεκριμένη εγκατάσταση. xdm-errors Το αρχείο αυτό περιέχει την έξοδο των διακομιστών X που προσπαθεί να εκτελέσει το XDM. Αν ένα display που προσπαθεί να εκκινήσει o XDM κολλήσει για κάποιο λόγο, καλό είναι να αναζητήσετε εδώ τυχόν μηνύματα σφαλμάτων. Τα μηνύματα αυτά καταγράφονται και στα αρχεία χρηστών ~/.xsession-errors. Διατηρώντας έναν Διακομιστή Απομακρυσμένων Συνδέσεων Για να συνδέονται και άλλοι πελάτες στον διακομιστή οθόνης, τροποποιήστε τους κανόνες ελέγχου πρόσβασης, και ενεργοποιήστε τις εισερχόμενες συνδέσεις. Τα παραπάνω είναι, από προεπιλογή ρυθμισμένα σε συντηρητικές τιμές. Για να κάνετε το XDM να δέχεται συνδέσεις, αρχικά μετατρέψτε σε σχόλιο την παρακάτω γραμμή στο αρχείο xdm-config: ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort: 0 και μετά επανεκκινήστε τον XDM. Να έχετε υπόψιν σας ότι τα σχόλια στα αρχεία app-defaults ξεκινούν με τον χαρακτήρα !, και όχι τον συνήθη #. Μπορεί να επιθυμείτε πιο αυστηρούς κανόνες ελέγχου πρόσβασης. Δείτε τα παραδείγματα στο Xaccess, και συμβουλευθείτε τη σελίδα manual του &man.xdm.1;. Αντικαταστάτες του XDM Υπάρχουν αρκετοί αντικαταστάτες για το πρόγραμμα XDM. Ένας από αυτούς, ο kdm (έρχεται με το KDE) αναλύεται αργότερα σε αυτό το κεφάλαιο. Ο kdm display manager προσφέρει πολλά προτερήματα στα γραφικά και διακοσμητικά στοιχεία, όπως επίσης και την δυνατότητα να επιλέγουν οι χρήστες τον επιθυμητό διαχειριστή παραθύρων την στιγμή της σύνδεσης. Valentino Vaschetto Συνεισφορά του Γραφικά Περιβάλλοντα Αυτό το τμήμα περιγράφει μερικά γραφικά περιβάλλοντα που διατίθενται για το X στο &os;. Η έννοια γραφικό περιβάλλον μπορεί να σημαίνει οτιδήποτε, από έναν απλό διαχειριστή παραθύρων μέχρι ένα ολοκληρωμένα πακέτο desktop εφαρμογών, όπως το KDE ή το GNOME. GNOME Σχετικά με το GNOME GNOME Το GNOME είναι ένα φιλικό προς τον χρήστη γραφικό περιβάλλον που επιτρέπει στους χρήστες να χρησιμοποιούν και να ρυθμίζουν εύκολα τους υπολογιστές τους. Το GNOME διαθέτει ένα panel (για την εκκίνηση εφαρμογών και την προβολή κατάστασης), επιφάνεια εργασίας (όπου εμφανίζονται δεδομένα και εφαρμογές), ένα πλήθος από διαδεδομένα εργαλεία και εφαρμογές, καθώς και ένα σύνολο τυποποιήσεων που επιτρέπει στις εφαρμογές να συνεργάζονται μεταξύ τους και να δείχνουν ένα συνεπές περιβάλλον εργασίας. Οι χρήστες άλλων λειτουργικών συστημάτων ή περιβάλλoντων θα αισθάνονται σαν στο σπίτι τους χρησιμοποιώντας το πανίσχυρο γραφικό περιβάλλον που παρέχει το GNOME. Περισσότερες πληροφορίες σχετικά με το GNOME στο &os; μπορούν να βρεθούν στο διαδικτυακό τόπο του &os; GNOME Project. Η τοποθεσία περιέχει επίσης και αναλυτικά FAQs σχετικά με την εγκατάσταση, την ρύθμιση, και την διαχείριση του GNOME. Εγκατάσταση του GNOME Το GNOME μπορεί να εγκατασταθεί εύκολα από πακέτα ή από την συλλογή των ports: Για να εγκαταστήσετε το έτοιμο πακέτο του GNOME από το δίκτυο, απλώς πληκτρολογήστε: &prompt.root; pkg_add -r gnome2 Για να μεταγλωττίσετε το GNOME από τον πηγαίο κώδικα, χρησιμοποιήστε την συλλογή των ports: &prompt.root; cd /usr/ports/x11/gnome2 &prompt.root; make install clean Μόλις εγκατασταθεί το GNOME, θα πρέπει να ρυθμιστεί ο διακομιστής X ώστε να εκκινεί το GNOME αντί για τον προκαθορισμένο διαχειριστή παραθύρων. Ο ευκολότερος τρόπος για να εκκινήσετε το GNOME είναι με το GDM, τον GNOME Display Manager. Το GDM, που εγκαθίσταται ως μέρος του GNOME (αλλά είναι ανενεργό αρχικά), μπορεί να ενεργοποιηθεί με την προσθήκη του gdm_enable="YES" στο /etc/rc.conf. Μόλις κάνετε επανεκκίνηση, το GDM θα ξεκινήσει αυτόματα. Επιπρόσθετα, για να ενεργοποιήσετε όλες τις υπηρεσίες του GNOME ταυτόχρονα με την εκκίνηση του GDM, προσθέστε τη γραμμή gnome_enable="YES" στο αρχείο /etc/rc.conf. Το GNOME μπορεί επίσης να ξεκινήσει από την γραμμή εντολών ρυθμίζοντας κατάλληλα το αρχείο .xinitrc. Αν υπάρχει ήδη το αρχείο .xinitrc, απλώς αντικαταστήστε την γραμμή που εκκινεί τον τρέχοντα διαχειριστή παραθύρων με μία που να εκκινεί το /usr/local/bin/gnome-session. Αν δεν θέλετε να κάνετε περισσότερες ρυθμίσεις στο αρχείο, χρειάζεται απλά να γράψετε: &prompt.user; echo "/usr/local/bin/gnome-session" > ~/.xinitrc Έπειτα, πληκτρολογήστε startx, και θα ξεκινήσει το γραφικό περιβάλλον του GNOME Αν χρησιμοποιείτε κάποιο παλαιότερο display manager, όπως το XDM, το παραπάνω δεν θα λειτουργήσει. Στην περίπτωση αυτή, δημιουργήστε ένα εκτελέσιμο αρχείο .xsession το οποίο να περιέχει την ίδια εντολή. Τροποποιήστε το αρχείο .xsession και αντικαταστήστε την εντολή του τρέχοντος διαχειριστή παραθύρων με το /usr/local/bin/gnome-session: &prompt.user; echo "#!/bin/sh" > ~/.xsession &prompt.user; echo "/usr/local/bin/gnome-session" >> ~/.xsession &prompt.user; chmod +x ~/.xsession Άλλη μια επιλογή είναι να ρυθμιστεί ο display manager ώστε να επιτρέπει την επιλογή του διαχειριστή παραθύρων κατά την σύνδεση. Το τμήμα Λεπτομέρειες KDE εξηγεί πως μπορεί να γίνει αυτό μέσω του kdm, του display manager του KDE. - - - Anti-aliased Γραμματοσειρές στο GNOME - - - GNOME - anti-aliased γραμματοσειρές - - - Το X11 επιτρέπει το anti-aliasing μέσω της επέκτασης - RENDER. Το GTK+ 2.0 (η βιβλιοθήκη που χρησιμοποιεί - το GNOME) ή μεταγενέστερο μπορεί να - χρησιμοποιήσει αυτή την δυνατότητα. Η ρύθμιση του anti-aliasing - περιγράφεται στο . Έτσι, με ανανεωμένο - λογισμικό, είναι εφικτό το anti-aliasing στο περιβάλλον του - GNOME. Απλώς πηγαίνετε στο - - Applications - Desktop Preferences - Font, και επιλέξτε είτε το - Best shapes, - Best contrast, είτε το - Subpixel smoothing (LCDs). Για κάποια - εφαρμογή GTK+ που δεν ανήκει στο GNOME, - θέστε την μεταβλητή περιβάλλοντος GDK_USE_XFT σε - 1 πριν την ξεκινήσετε. - KDE KDE Σχετικά με το KDE Το KDE είναι ένα σύγχρονο, εύκολο στη χρήση, γραφικό περιβάλλον. Μερικά πράγματα που προσφέρει το KDE στον χρήστη είναι: Ένα όμορφο σύγχρονο περιβάλλον Ένα περιβάλλον με πλήρη δικτυακή διαφάνεια Ένα ενσωματωμένο σύστημα βοήθειας που επιτρέπει εύκολη, συνεπή πρόσβαση στην βοήθεια για την χρήση του KDE και των εφαρμογών του Συνεπής εμφάνιση και συμπεριφορά όλων των εφαρμογών του KDE Τυποποιημένα menu και γραμμές εργαλείων (toolbars), συνδυασμοί πλήκτρων, χρωματικοί συνδυασμοί, κλπ. Διεθνείς ρυθμίσεις: το KDE διατίθεται σε περισσότερες από 40 γλώσσες Κεντρικό και συνεπές σύστημα ρυθμίσεων βασισμένο σε διαλόγους Μεγάλο αριθμό χρήσιμων εφαρμογών, σχεδιασμένων ειδικά για το KDE Το KDE συνοδεύεται από έναν περιηγητή (browser) που ονομάζεται Konqueror, και ανταγωνίζεται σοβαρά τους άλλους περιηγητές των συστημάτων &unix;. Περισσότερες πληροφορίες για το KDE μπορείτε να βρείτε στο KDE website. Για πληροφορίες σχετικές με το &os; και το KDE, συμβουλευθείτε τον διαδικτυακό τόπο του FreeBSD-KDE team. Υπάρχουν διαθέσιμες δύο εκδόσεις του KDE για το &os;. Η Έκδοση 3, κυκλοφορεί αρκετό καιρό και θεωρείται γενικά ώριμη. Στη Συλλογή των Ports θα βρείτε επίσης την Έκδοση 4 από τη νεότερη γενιά. Οι δύο αυτές εκδόσεις μπορούν μάλιστα να συνυπάρχουν στον ίδιο υπολογιστή. Εγκατάσταση του KDE Όπως και με το GNOME ή κάθε άλλο γραφικό περιβάλλον, το λογισμικό μπορεί να εγκατασταθεί εύκολα μέσω πακέτων ή από την συλλογή των Ports: Για να εγκαταστήσετε το KDE3 μέσω πακέτων από το δίκτυο, απλώς πληκτρολογήστε: &prompt.root; pkg_add -r kde Για να εγκαταστήσετε το KDE4 μέσω πακέτων από το δίκτυο, απλώς πληκτρολογήστε: &prompt.root; pkg_add -r kde4 Το &man.pkg.add.1; θα ανακτήσει αυτόματα την τελευταία έκδοση της εφαρμογής. Για να μεταγλωττίσετε το KDE3 από τον πηγαίο κώδικα, χρησιμοποιήστε τη Συλλογή των Ports: &prompt.root; cd /usr/ports/x11/kde3 &prompt.root; make install clean Για να μεταγλωττίσετε το KDE4 από τον πηγαίο κώδικα, χρησιμοποιήστε τη Συλλογή των Ports: &prompt.root; cd /usr/ports/x11/kde4 &prompt.root; make install clean Αφού εγκατασταθεί το KDE, θα πρέπει να ρυθμιστεί ο διακομιστής X ώστε να το εκκινεί αντί για τον προκαθορισμένο διαχειριστή παραθύρων. Αυτό γίνεται με την αλλαγή του αρχείου .xinitrc: Για το KDE3: &prompt.user; echo "exec startkde" > ~/.xinitrc Για το KDE4: &prompt.user; echo "exec /usr/local/kde4/bin/startkde" > ~/.xinitrc Τώρα, όποτε το X Window System εκκινείται μέσω του startx, το γραφικό περιβάλλον θα είναι το KDE. Αν χρησιμοποιείτε κάποιο display manager όπως το XDM, η ρύθμιση είναι λίγο διαφορετική. Θα πρέπει αντί για το .xinitrc να τροποποιήσετε το .xsession. Οδηγίες για το kdm δίνονται αργότερα στο κεφάλαιο αυτό. Περισσότερες Λεπτομέρειες για το KDE Τώρα που το KDE έχει εγκατασταθεί στο σύστημα, μπορείτε να ανακαλύψετε τις περισσότερες λειτουργίες μέσω των σελίδων βοήθειας ή δοκιμάζοντας μενού και επιλογές. Οι χρήστες των &windows; η του &mac; θα αισθάνονται σαν στο σπίτι τους. Η καλύτερη βοήθεια για το KDE είναι η on-line τεκμηρίωση. Το KDE συνοδεύεται από τον δικό του περιηγητή, τον Konqueror, πολλές χρήσιμες εφαρμογές, και αναλυτική τεκμηρίωση. Το υπόλοιπο αυτής της ενότητας συζητά τεχνικά θέματα που είναι δύσκολο να ανακαλυφθούν με δοκιμές. Ο KDE Display Manager KDE display manager Ο διαχειριστής ενός πολυχρηστικού συστήματος θέλει ενδεχομένως η σύνδεση των χρηστών να γίνεται μέσω γραφικού περιβάλλοντος. Όπως περιγράψαμε πρίν, μπορεί να χρησιμοποιηθεί το XDM. Όμως, το KDE περιέχει μια εναλλακτική επιλογή, το kdm, το οποίο έχει σχεδιαστεί να είναι ποίο ελκυστικό και παρέχει περισσότερες επιλογές κατά τη σύνδεση. Συγκεκριμένα, οι χρήστες μπορούν εύκολα να επιλέξουν (μέσω μενού) ποίο γραφικό περιβάλλον (KDE, GNOME, ή κάποιο άλλο) θα εκτελεστεί μετά την σύνδεση τους. Για να ενεργοποιήσετε το kdm, θα πρέπει να αλλάξετε το ttyv8 στο /etc/ttys. Η γραμμή θα μοιάζει με την παρακάτω: Για το KDE3: ttyv8 "/usr/local/bin/kdm -nodaemon" xterm on secure Για το KDE4: ttyv8 "/usr/local/kde4/bin/kdm -nodaemon" xterm on secure Xfce Σχετικά με το Xfce Το Xfce είναι ένα γραφικό περιβάλλον που στηρίζεται στην βιβλιοθήκη GTK+ που χρησιμοποιείται και από το GNOME, αλλά είναι πολύ πιο ελαφρύ και προορίζεται για όσους θέλουν ένα απλό, αποτελεσματικό γραφικό περιβάλλον που είναι εύκολο να χρησιμοποιηθεί και να ρυθμιστεί. Οπτικά, μοιάζει πολύ με το CDE, που συναντάται σε εμπορικά συστήματα &unix;. Μερικά από τα χαρακτηριστικά του Xfce είναι: Ένα απλό, εύκολο στην χρήση γραφικό περιβάλλον Πλήρως παραμετροποιήσιμο με το ποντίκι, με drag and drop, κλπ. Κεντρικό panel παρόμοιο με του CDE, με μενού, μικρο-εφαρμογές και πλήκτρα εκκίνησης εφαρμογών Ολοκληρωμένος διαχειριστής παραθύρων, διαχειριστής αρχείων, διαχειριστής ήχου, συμβατότητα με το GNOME, και άλλα Δυνατότητα χρήσης θεμάτων (themes, αφού χρησιμοποιεί το GTK+) Γρήγορο, ελαφρύ και αποτελεσματικό: ιδανικό για παλαιότερα/πιο αργά μηχανήματα ή μηχανήματα με λίγη μνήμη Περισσότερες πληροφορίες για το Xfce μπορείτε να βρείτε στη δικτυακή τοποθεσία του Xfce. Εγκατάσταση του Xfce Υπάρχει (την ώρα που γράφονται αυτές οι γραμμές) έτοιμο πακέτο για το Xfce. Για να το εγκαταστήσετε, απλώς πληκτρολογήστε: &prompt.root; pkg_add -r xfce4 Εναλλακτικά, για να το μεταγλωττίσετε από τον πηγαίο κώδικα, χρησιμοποιήστε την συλλογή των ports: &prompt.root; cd /usr/ports/x11-wm/xfce4 &prompt.root; make install clean Τώρα, πείτε στον διακομιστή X να εκκινήσει το Xfce την επόμενη φορά που θα γίνει εκκίνηση του γραφικού περιβάλλοντος. Απλώς πληκτρολογήστε το παρακάτω: &prompt.user; echo "/usr/local/bin/startxfce4" > ~/.xinitrc Την επόμενη φορά που θα εκκινήσετε το Χ, θα εμφανιστεί το Xfce. Όπως και προηγουμένως, αν χρησιμοποιείτε κάποιο display manager όπως το XDM, δημιουργήστε ένα αρχείο .xsession, όπως περιγράφεται στην παράγραφο του GNOME, αλλά με την εντολή /usr/local/bin/startxfce4, ή ρυθμίστε τον display manager να επιτρέπει την επιλογή γραφικού περιβάλλοντος, όπως περιγράφεται στην παράγραφο σχετικά με το kdm.