Sunday, October 26, 2008

XFCE Automounting & άλλα annoyances ;)

Το FreeBSD είναι γνωστό ότι χρειάζεται αρκετές "χειροκίνητες" ρυθμίσεις για να γίνει ένα συνηθισμένο desktop. Σε πολλούς αυτό φαίνεται ως χάσιμο χρόνου, όμως σε όσους ασχολούνται είναι απλώς μια ευκαιρία για μάθηση και βαθύτερη κατανόηση του συστήματος τους.
Οι περισσότεροι χρήστες θεωρούν δεδομένο ότι μόλις συνδέσουν το usb flash drive τους, θα προσαρτηθεί αυτόματα και θα εμφανιστεί το σχετικό εικονίδιο στην επιφάνεια εργασίας τους.
Το παραπάνω σχετίζεται με μια σειρά αυτοματισμών που θα πρέπει να ρυθμίσετε στο FreeBSD με τον παραδοσιακό τρόπο (ρύθμιση conf αρχείων). Εδώ εξετάζουμε πως μπορεί να γίνει στο γραφικό περιβάλλον του XFCE4, αν και αντίστοιχες ρυθμίσεις θα χρειαστούν και για άλλα γραφικά περιβάλλοντα.

Βήμα 1ο: Επιτρέψτε το mounting από κανονικούς χρήστες


Οι παρακάτω πληροφορίες υπάρχουν στο FreeBSD Handbook και το FAQ. Τις αναδημοσιεύουμε εδώ στα ελληνικά, καθώς η μετάφραση των κεφαλαίων αυτών δεν έχει ολοκληρωθεί ακόμα.
Για να μπορεί ένας απλός χρήστης να προσαρτήσει συστήματα αρχείων από CD/DVD και flash drives, θα πρέπει:
  • Να γίνει ρύθμιση του πυρήνα με ένα κατάλληλο sysctl

  • Να δοθούν τα κατάλληλα permissions στις αντίστοιχες συσκευές, στον κατάλογο /dev. Αυτό είναι αρκετά απλό για συσκευές που υπάρχουν στο σύστημα ήδη από την εκκίνηση (CD-ROM) αλλά είναι ελαφρά πιο σύνθετο για συσκευές που προσθαφαιρούνται δυναμικά (USB drives).

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

Ρύθμιση του Πυρήνα


Αρκετά εύκολο. Εκτελέστε την εντολή:

# sysctl vfs.usermount=1

Προσθέστε επίσης την παρακάτω γραμμή στο /etc/sysctl.conf ώστε να ενεργοποιείται σε κάθε εκκίνηση:

vfs.usermount=1

Η ρύθμιση του πυρήνα έχει ολοκληρωθεί.

Ρύθμιση των συσκευών (/dev)


Για να μπορεί κάποιος χρήστης να χρησιμοποιεί τις συσκευές που δημιουργούνται όταν συνδέουμε κάποιο usb flash drive, θα πρέπει να έχει δικαιώματα σε αυτές. Οι συσκευές αυτές στο FreeBSD φαίνονται ως scsi, με ονόματα του τύπου /dev/daX. Θα πρέπει λοιπόν να δώσουμε τις κατάλληλες οδηγίες στο devfs ώστε οι συσκευές να δημιουργούνται με τα κατάλληλα permissions. Προσθέτουμε την παρακάτω γραμμή στο /etc/devfs.rules:

[localrules=5]
add path 'da*' mode 0660 group operator


Θα πρέπει να ενεργοποιήσουμε αυτούς τους κανόνες, προσθέτοντας το παρακάτω στο /etc/rc.conf:

devfs_system_ruleset="localrules"


Μια και είμαστε εδώ, ας κάνουμε το ίδιο και για το CD-ROM drive. Τυπικά το CD-ROM δεν είναι αφαιρούμενη συσκευή σε ένα σύστημα (εκτός αν είναι USB, αλλά τότε καλύπτεται από τους παραπάνω κανόνες). Χρειάζεται να προσθέσουμε τις παρακάτω γραμμές στο /etc/devfs.conf το οποίο αφορά την εκκίνηση του συστήματος:

own /dev/acd0 root:operator
perm /dev/acd0 0660


Αν η συσκευή CD-ROM έχει άλλο όνομα, προσαρμόστε κατάλληλα τις παραπάνω γραμμές. Αν έχετε παραπάνω από μια συσκευή CD-ROM, θα έχετε και /dev/acd1. Τέλος αν χρησιμοποιείτε το atapicam module, θα έχετε και συσκευές τύπου /dev/cd0 (SCSI).

Αν προσέξετε τις παραπάνω οδηγίες, έχουμε δώσει δικαιώματα στο operator group. Αν ο λογαριασμός σας δεν ανήκει στο operator group, θα πρέπει να τον προσθέσετε:

# pw groupmod operator -m myusername


Προσάρτηση


Η ρύθμιση έχει ολοκληρωθεί. Αν δημιουργήσετε π.χ. τον κατάλογο mymount στο home σας (οπότε σίγουρα θα είστε ιδιοκτήτης) θα μπορείτε να προσαρτήσετε κάποιο CD-ROM γράφοντας:

$ mount -t cd9660 /dev/acd0 ~/mymount

και κάποιο USB flash drive, με κάτι σαν:

$ mount -t msdosfs /dev/da0s1 ~/mymount

Μην ξεχάσετε να αποπροσαρτήσετε το USB flash πριν το αφαιρέσετε! Αλλιώς θα έχετε πραγματικά δυσάρεστες συνέπειες...

Βήμα 2ο: Ρυθμίστε το XFCE


Εδώ οι ρυθμίσεις είναι πολύ απλές. Θα χρειαστεί να προσθέσετε τις παρακάτω γραμμές στο /usr/local/etc/PolicyKit/PolicyKit.conf:

<match action="org.freedesktop.hal.storage.mount-removable">
<return result="yes" />
</match>


Μπορείτε να κάνετε τους κανόνες πιο περιοριστικούς, βάζοντας γύρω από το παραπάνω ένα <match user="myusername"> ... </match> ώστε να περιρρίσετε τη δυνατότητα σε ένα συγκεκριμένο λογαριασμό.

Για να μπορείτε να ρυθμίσετε το automount του XFCE, εγκαταστήστε το πακέτο thunar-volman-plugin:

# cd /usr/ports/sysutils/thunar-volman-plugin
# make install clean


Στα XFCE settings θα έχετε πλέον και επιλογή "Removable Drives and Media" από την οποία μπορείτε να ορίσετε τι και αν θα γίνεται auto-mount.

Σημείωση: Από προεπιλογή ο Thunar (file manager) του XFCE στο FreeBSD δεν περιέχει στις ρυθμίσεις του το FAM (File Alteration Monitor). Αυτό σημαίνει π.χ. ότι αν δημιουργήσετε σε ένα terminal ένα κατάλογο στο Desktop, δεν θα εμφανιστεί μέχρι να πάτε στο Desktop και να πιέσετε το F5. Αυτό φυσικά είναι χαζό: εμείς θέλουμε το Desktop μας να ανανεώνεται αυτόματα. Μεταγλωττίστε λοιπόν ξανά το Thunar, αυτή τη φορά με FAM support:

# cd /usr/ports/x11-fm/thunar
# make deinstall
# make config
(επιλέξτε το FAM στο διάλογο)
# make install clean


Τελειώσατε! Τι; Φάγατε όλο το απόγευμα; Ήταν δημιουργικό όμως ;)

Περαιτέρω Διάβασμα: FreeBSD Handbook: Storage (Αγγλικά, για την ώρα :) )

Tuesday, October 21, 2008

Η χαρά του make release :)

"Ανακάλυψα" σήμερα το make release. Τα εισαγωγικά σημαίνουν ότι ήξερα την ύπαρξη του:

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

αλλά δεν το είχα δοκιμάσει ποτέ.

Με απλά λόγια, το make release θα σας επιτρέψει να φτιάξετε το δικό σας FreeBSD release, από τα sources που έχετε ήδη στο δίσκο σας (ή που πρόκειται να κατεβάσετε). Θα σας φτιάξει μάλιστα και ένα ωραίο iso, έτοιμο για να το γράψετε σε CD και να το εγκαταστήσετε όπου θέλετε.

Δεν είναι καθόλου περίεργο που το documentation του FreeBSD περιέχει και man page σχετικό με το release:

$ man release

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

# make release

Ωστόσο, πρέπει να διαβάσετε τι χρειάζεται από πριν:


  • Πρέπει να έχετε κάνει make buildworld στο σύστημα σας. Αυτό φυσικά προυποθέτει ότι έχετε όλα τα system sources. Αλλά σαν σωστός BSDer, πάντα τα έχετε, έτσι δεν είναι;

  • Χρειάζεστε αντίγραφο του CVS repository του FreeBSD. Προσοχή: δεν εννοούμε checkout μιας συγκεκριμένης έκδοσης / tag. Μιλάμε για πλήρες αντίγραφο του CVS (ναι αυτό με τα ",v" αρχεία) το οποίο φυσικά είναι τεράστιο. Αλλά παρακάτω θα σας πω πως να το αποφύγετε, αν το μόνο που θέλετε είναι να κάνετε release τα sources που έχετε ήδη εγκατεστημένα.

  • Ένα ευχάριστο βροχερό απόγευμα για να βλέπετε τον compiler να γεμίζει γραμμές το terminal...



Το σύστημα μου αυτή τη στιγμή έχει 7.1-PRERELEASE. Μετά από μια γρήγορη ματιά στο παράδειγμα του man page κατέληξα σε αυτό:

# cd /usr/src
# make buildworld
# cd release
# make release CHROOTDIR=/data/release \
BUILDNAME=7.1-PRERELEASE \
CVSROOT=/data/ncvs \
EXTSRCDIR=/usr/src \
-DNODOC -DNOPORTS \
-DNO_FLOPPIES \
-DMAKE_ISOS


To CVSROOT που βλέπετε είναι ψεύτικο! Στην πραγματικότητα τα sources για το build θα αντιγραφούν απευθείας από το EXTSRCDIR. Αν όμως δεν βάλετε το CVSROOT η make release αρχνείται να ξεκινήσει. Το make buildworld δεν είναι απαραίτητο αν έχετε ήδη κάνει τα sources buid στο παρελθόν. Στην πραγματικότητα το make release θα κάνει make installworld από το σύστημα σας σε ένα περιβάλλον chroot, και μέσα σε αυτό θα κάνει build τα sources που δώσατε (είτε μέσω του EXTSRCDIR, είτε μέσω του CVS). Όλα αυτά αναλύονται πολύ καλά στο man page του release. Έχετε τη δυνατότητα να περιλάβετε doc και ports στο δικό σας release, κάτι που απέφυγα αφού θέλω μόνο το βασικό σύστημα.

Αν επιλέξετε τη μέθοδο του CVS θα μπορείτε να κάνετε build όποια έκδοση του FreeBSD θέλετε - και φυσικά το CURRENT. Το μόνο κακό είναι ότι με τόσα χρόνια ιστορίας που έχει το CVS repository του FreeBSD και με την ταχύτητα της γραμμής μου, μέχρι να τελειώσει η cvsup, μάλλον θα έχει βγει και το 8.0-RELEASE...

Sunday, October 19, 2008

Ελληνικό Εγχειρίδιο του FreeBSD σε PDF!

Μετά από αρκετή ώρα επεξεργασίας (και κολλημάτων...) στο openoffice.org writer, για πρώτη φορά το Εγχειρίδιο του FreeBSD (Handbook) στα Ελληνικά σε PDF:

Περισσότερες πληροφορίες στην ιστοσελίδα της Ελληνικής Ομάδας Τεκμηρίωσης

Tuesday, October 14, 2008

Χρήση του FreeBSD ως Internet Gateway

Με αρχική έμπνευση αυτό το ποστ στη λίστα freebsd-questions, σκέφτηκα να εξερευνήσω πιθανούς τρόπους δημιουργίας ενός gateway μέσω του FreeBSD. Πρόκειται τελικά για μια απλή διαδικασία.

Προυποθέσεις


Χρειάζεστε δύο κάρτες δικτύου. Η πρώτη συνδέεται στο Internet (ενδεχομένως μέσω εκείνου του φτηνιάρικου ADSL router που πήρατε μαζί με τη σύνδεση σας). Η δεύτερη συνδέεται στο τοπικό σας δίκτυο. Κατά πάσα πιθανότητα συνδέεται σε μια θύρα ενός switch στο οποίο είναι συνδεμένο και το υπόλοιπο τοπικό σας δίκτυο. Παρακάτω φαίνεται ένα απόσπασμα (με σχόλια) από το γνωστό αρχείο ρυθμίσεων /etc/rc.conf:


# rl0 : Σύνδεση στο internet (μέσω ADSL router)
ifconfig_rl0="inet 192.168.0.100 netmask 255.255.255.0"
# rl1 : Σύνδεση στο τοπικό δίκτυο
ifconfig_rl1="inet 192.168.1.100 netmask 255.255.255.0"
# defaultrouter: Το IP του φτηνιάρικου ADSL router :)
defaultrouter="192.168.0.250"


Εννοείτε ότι στο /etc/resolv.conf θα υπάρχει ο σχετικός DNS server (συνήθως του παροχέα σας):

nameserver 195.170.0.1
nameserver 195.170.2.1


Με ρυθμίσεις αντίστοιχες με τις παραπάνω, το FreeBSD σύστημα σας θα έχει Internet μέσω της κάρτας δικτύου rl0.

Ενεργοποίηση του PF Firewall


Το FreeBSD έχει επιλογές στα Firewalls! Το PF firewall προέρχεται από το OpenBSD και είναι πολύ ισχυρό. Ενεργοποιήστε το με τις ακόλουθες καταχωρήσεις στο /etc/rc.conf:


pf_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
pf_rules="/etc/pf.conf"
pf_flags=""


Προφανώς μπορείτε να αλλάξετε τις σχετικές ρυθμίσεις flags διαβάζοντας τη σχετική σελίδα στο man. Το αρχείο /etc/pf.conf φυσιολογικά έχει τις ρυθμίσεις σας για το firewall.

Για να λειτουργήσει το FreeBSD ως gateway, θα πρέπει να προσθέσετε επίσης την παρακάτω γραμμή στο /etc/rc.conf:


gateway_enable="YES"


Για να λειτουργήσει αυτή η ρύθμιση (αν δεν θέλετε να κάνετε επανεκκίνηση), θα πρέπει να δώσετε τις εντολές:


# sysctl net.inet.ip.forwarding=1
# /etc/rc.d/routing restart


Προφανώς μπορείτε να αλλάξετε τις σχετικές ρυθμίσεις flags διαβάζοντας τη σχετική σελίδα στο man. Το αρχείο /etc/pf.conf φυσιολογικά έχει τις ρυθμίσεις σας για το firewall. Θα χρειαστεί να προσθέσετε τον παρακάτω κανόνα για να ενεργοποιήσετε το NAT:


nat pass on rl0 from rl1:network to any -> rl0


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

pass in quick on rl1 proto { tcp, udp, icmp } from any to any keep state


Σημείωση: Στο αρχείο /etc/pf.conf, οι κανόνες για Translation (nat pass) τοποθετούνται ακριβώς πριν τους κανόνες για filtering. Συνήθως οι κανόνες filtering ξεκινάνε με κάποιο firewall policy, π.χ.:

# The default firewall policy is to block everything.
block in log all
block out log all


Έχοντας ολοκληρώσει τις παραπάνω ρυθμίσεις, μπορείτε να κάνετε επανεκκίνηση ή να ξεκινήσετε / επανεκκινήσετε χειροκίνητα τις αντίστοιχες υπηρεσίες:


# /etc/rc.d/netif restart
# /etc/rc.d/routing restart
# /etc/rc.d/pf restart


Η ρύθμιση έχει ολοκληρωθεί!
Φυσικά, αυτός δεν είναι ο μοναδικός τρόπος ρύθμισης. Αν για παράδειγμα χρησιμοποιείτε το IPFW firewall, θα βρείτε πολύ καλές οδηγίες στην αντίστοιχη ενότητα του FreeBSD Handbook.