Showing posts with label FreeBSD. Show all posts
Showing posts with label FreeBSD. Show all posts

Friday, January 2, 2015

FreeBSD on an Intel Bay Trail Motherboard

Recently, I acquired an Asrock Q1900b-ITX motherboard, featuring an onboard Celeron J1900 CPU. Unlike previous iterations of Atom motherboards, the latest Bay Trail generation is an excellent performer while consuming very little power (about 10Watts).

This motherboard will be used in the Aiolos Project and so it has to run FreeBSD. Sound and graphics are not required for this specific use, but of course I set out to find whether the board is usable for a FreeBSD desktop.

Before purchasing the motherboard, I searched the Internet on FreeBSD and Bay Trail. And sure enough, I found a post of someone that has successfully installed FreeBSD on the very similar Q1900-ITX. And while FreeBSD 9.2-RELEASE needed extra patches to work with it, it seemed 10.1-RELEASE would need no extra work.

After performing the initial base install (without a hitch), I tried playing an mp3 file with mplayer. The sound card was recognized by the system:

cat /dev/sndstat
Installed devices:
pcm0: <Realtek ALC662 (Analog)> (play/rec) default
pcm1: <Realtek ALC662 (Analog)> (play/rec)
pcm2: <Realtek ALC662 (Front Analog Headphones)> (play)
pcm3: <Intel (0x2882) (HDMI/DP 8ch)> (play)


However, mplayer would not play:

Audio device got stuck!

I tried changing the default sound device from pcm0 to pcm1 and pcm2 to no avail. But then I discovered this post with an interesting sysctl:

dev.hdac.0.polling=1

For sound to work, the following two commands have to be executed (as root):

sysctl dev.hdac.0.polling=1
sysctl hw.snd.default_unit=1 

For the settings to persist across reboots, enter the following lines in /etc/sysctl.conf:

dev.hdac.0.polling=1
hw.snd.default_unit=1

This solves the sound problem once and for all!

Xorg Configuration

 

No matter what I tried, Xorg will only run in VESA mode. Using the current Intel driver (xf86-video-intel-2.21.15_5) in xorg.conf will give you a blank screen and unresponsive system. Running startx without a pre-generated xorg.conf file will use the VESA driver. I hope this will be fixed with a later version of the driver. Current linux distros have no problems with either sound or video on this board. And since you may ask, both Windows 7 and Windows 8.1 perform very well on the Q1900b-ITX.

Happy New Year and happy FreeBSDing too!

Friday, December 5, 2014

The Aiolos Cluster Project

To Aiolos Cluster Project είναι ένα σχολικό Beowulf Cluster (compute cluster), ένας υπερυπολογιστής που αποτελείται από αρκετά συνδεδεμένα μεταξύ τους κοινά μηχανήματα (PC). Για τη δημιουργία του θα χρησιμοποιηθούν μητρικές mini ITΧ (Atom - Pentium G - Celeron). Φυσικά θα τρέχει FreeBSD και θα χρησιμοποιεί την βιβλιοθήκη OpenMPI. Το ακόμα πιο εντυπωσιακό είναι ότι θα φτιαχτεί ως μια σχολική εργασία!
 Για περισσότερες λεπτομέρειες δείτε την Επίσημη Ιστοσελίδα του Aiolos Project.

Friday, November 14, 2014

FreeBSD 10.1-RELEASE LXDE VirtualBox Image

FreeBSD 10.1-RELEASE will be soon officially announced. Here is your chance to give it a quick and effortless try. Download a VirtualBox image file:

FreeBSD 10.1-RELEASE LXDE VirtualBox Image

Unzip it, and use the "Import Appliance" option of VirtualBox to add the contained .ova file. This image contains a standard FreeBSD 10.1-RELEASE install with an LXDE desktop, Chromium, mplayer, vlc and the slim login manager. Everything has been installed using pkg and the standard FreeBSD pkgng repository. You may continue adding more packages as you wish.

There are two accounts, root and user, both with a password of 1234 (which, you are of course, advised to change). And you should only use the user account to login to the GUI. User may also use sudo (already installed and configured).

Enjoy!

Tuesday, June 3, 2014

FreeBSD 10.0-RELEASE Desktop Installation Guide

Here is a quick guide to installing a FreeBSD Desktop - No prior knowledge required!

Have you always wanted to experiment with FreeBSD? Do you need a guide to get quick results? Download our new FreeBSD 10.0-RELEASE desktop installation ebook and you will soon be up and running! Includes the following topics:

  • Installing the Base System: Complete step by step installation with images
  • Updating the Base System: Use freebsd-update to get the latest fixes
  • Configuring pkg: Use packages of the new pkgng system to install software
  • Installing Basic Command Line Tools: Install and configure bash, sudo and other tools
  • Installing and Configuring the Xorg Server
  • Installing and Configuring the XFCE Desktop Environment
  • Installing Applications: Firefox, Chromium, Mplayer, Vlc, LibreOffice
  • Installing and Configuring Java and Flash plugins

Many other settings and configuration examples are provided. Some configuration files are available for download to avoid lengthy and error prone editing.

Download PDF: FreeBSD 10.0-RELEASE: Base System to Desktop Environment

The LaTeX source of the guide is also available.

I'll be more than happy to receive your comments and questions.

Happy FreeBSDing!

Sunday, February 16, 2014

FreeBSD 10.0-RELEASE with Custom XFCE Packages

FreeBSD 10.0-RELEASE has been released a while ago, and it is about time I get my custom version out to the wild! FreeBSD 10 brings on a whole new set of features, among them the new pkgng as the default packaging system. The custom ISO (download links below) will allow you to install an XFCE based desktop that includes lots of goodies for productivity, multimedia and Internet browsing:

The complete list of top level ports used in this compilation is available in the README-PKGNG file of the DVD, along with more detailed installation instructions. A VirtualBox image is also available.

Happy (desktop) FreeBSDing!

Sunday, October 13, 2013

FreeBSD 9.2-RELEASE with Custom XFCE pkgng-style Packages

Few years ago, I started a small (and now defunct) project to build Custom FreeBSD installation media with my own selection of mostly desktop packages. The purpose was twofold:
  • To create packages not normally provided by the FreeBSD Project in the installation DVD, such as the XFCE desktop environment
  • To create updated packages and installation media that could be used long after the initial official release and still be up to date.

This project was using the somewhat aged packaging system (commands like pkg_add, pkg_info etc) and the release process would integrate the custom packages to the sysinstall system of the installation DVD. You could then install them like the official packages, during the main installation.

From the beginning this project was plagued with several problems: the release process was lengthy and error prone. Sometimes the packages would fail to integrate properly with sysinstall (the system installer at that time). Testing was tedious and time consuming and package errors meant the whole build would have to be repeated, usually from scratch. Combine this with a rather modest build system, this whole thing was taking huge amounts of time while its output was rather low.

Fast forward to today: 9.2-RELEASE has pkgng, a whole new packaging system (although the older system is still the default). The new installer, bsdinstall only installs the base system and does not interfere with packages in any way (a good thing IMHO). Building packages for pkgng is a lot easier, using the ports-mgmt/poudriere tool. And I do have a little monster now: an i5 with 32GB of RAM that allows me to run ZFS on memory disk and complete both 32 and 64 bit build in a single day, with time to spare. Since the packages do not have to be integrated to the installer, as long as there are no build errors in poudriere, they will work without problems. Testing is a lot faster and easier.

Custom releases are back! Starting today with a DVD containing 9.2-RELEASE and a selection of packages for XFCE, desktop productivity, browsers, Xorg and much more:

The complete list of top level ports used in this compilation is available in the README-PKGNG file of the DVD, along with more detailed installation instructions. A preconfigured VirtualBox image is also available.

Happy (desktop) FreeBSDing!

Monday, October 7, 2013

Ανακοίνωση Κυκλοφορίας: FreeBSD 9.2-RELEASE


Στις 30/09/2013, το FreeBSD Project ανακοίνωσε επίσημα την κυκλοφορία της έκδοσης 9.2-RELEASE. Το 9.2-RELEASE αποτελεί την πιο πρόσφατη έκδοση της πετυχημένης σειράς 9.Χ. Μπορείτε να διαβάσετε περισσότερα χαρακτηριστικά του στην ανακοίνωση έκδοσης:

FreeBSD 9.2 Release Announcement

Μπορείτε να κατεβάσετε οποιαδήποτε διαθέσιμη έκδοση του FreeBSD από κάποιο από τα πολλά mirror sites. To 9.2-RELEASE έχει ήδη εμφανιστεί στους FTP servers μεγάλων ελληνικών ISPs. Μπορείτε για παράδειγμα να το κατεβάσετε από την Otenet.

Διαβάστε άρθρα σχετικά με το λειτουργικό από το site του περιοδικού deltaHacker. Σύντομα θα διαθέσουμε και custom DVD εγκατάστασης με πακέτα τύπου pkgng για ένα πλήρως λειτουργικό XFCE desktop. Stay tuned!

Μπορείτε επίσης να επισκεφθείτε την Δικτυακή Τοποθεσία της Ελληνικής Κοινότητας FreeBSD

Kαλή εγκατάσταση!

Sunday, January 6, 2013

Windows Rants και ένα εργαστήριο με FreeBSD Samba Server

Κάθε χρόνο στις γιορτές έχω το χρόνο να ασχοληθώ και να συντηρήσω το εργαστήριο και τους υπολογιστές της γραμματείας του παραρτήματος Χανίων του ΚΕΚ ΔΕΛΤΑ. Έτσι και φέτος, ξεκίνησα με μια απόφαση: να αποσύρω τον Windows 2003 Server και να τον αντικαταστήσω με ένα Samba server σε FreeBSD 9.1-RELEASE. Οι ανάγκες του συγκεκριμένου δικτύου άνετα καλύπτονται πλέον με Samba σε domain controller configuration και τα επιπλέον licenses που χρειαζόμαστε για το 2003 είναι πεταμένα λεφτά...

Ιστορικά στοιχεία

Ξεκίνησα να συντηρώ το παράρτημα της συγκεκριμένης σχολής από τις πρώτες μέρες της λειτουργίας της στα Χανιά, κάπου το 1995-96. Την εποχή εκείνη τα μηχανήματα τους ήταν παλιά (τα είχαν φέρει από άλλο παράρτημα) και είχαν διάφορα προβλήματα. Όταν μετακόμισαν κάπου το 1999-2000 στο νέο τους κτήριο, ανέλαβα να τους φτιάξω από την αρχή ένα δίκτυο με νέα μηχανήματα και εξοπλισμό. Το αρχικό εκείνο δίκτυο βασίστηκε σε:

  • Windows 2000 Server
  • Windows 2000 Professional για τους σταθμούς εργασίας
  • Λίγα παλιά μηχανήματα με Windows 98 (!)

Την εποχή εκείνη είχα ήδη καλή επαφή με το Linux, ωστόσο μετά από πολλές δοκιμές κατέληξα στο συμπέρασμα ότι το συγκεκριμένο δίκτυο θα εξυπηρετούνταν πολύ καλύτερα από ένα Windows Server. Και πράγματι, ο 2000 Server (που αργότερα αντικαταστάθηκε από το 2003) είχε πολλά πλεονεκτήματα: αναφέρω για παράδειγμα τη δυνατότητα assign και publish εφαρμογών - αρχεία msi και mst - για αυτόματη εγκατάσταση τους στους σταθμούς εργασίας.

Το αρχικό εκείνο δίκτυο είχε καλά μηχανήματα για την εποχή τους - Pentium III 866Mhz. Υπήρχαν δύο εργαστήρια και συνολικά περίπου 30 μηχανήματα μαζί με τα γραμματειακά.

Ο καιρός όμως πέρναγε, τα μηχανήματα πάλιωναν, τα 2000 Professional έπαψαν να καλύπτουν τις ανάγκες (μετά από πολύ καιρό είναι αλήθεια) και κάποιες δοκιμές με XP δεν ήταν ιδιαίτερα... ενθαρρυντικές στο υπάρχον hardware. Καθώς διάφορα PC χάλαγαν και δεν μπορούσαν να επισκευαστούν, τα αντικαθιστούσαμε με πιο νέα μηχανήματα. Η ομοιογένεια του υλικού και του λογισμικού της αρχικής εγκατάστασης είχε πάει περίπατο.

To 2012 λήφθηκε η απόφαση για τη δημιουργία νέου εργαστηρίου 20 υπολογιστών με σύγχρονο λογισμικό. Τα παλιά μηχανήματα - όσα ήταν ακόμα λειτουργικά - θα μεταφέρονταν σε δεύτερο βοηθητικό εργαστήριο, με την προυπόθεση να μπορούν να τρέξουν XP. Το νέο εργαστήριο θα βασίζονταν σε Windows 7 64bit. Και εδώ αρχίζουν τα προβλήματα.

  • Τα Windows 2000 ήταν δύο εκδόσεις: Η Professional που έχει τα πάντα για ένα σταθμό εργασίας και ο Server που προορίζεται για... server. Τα Windows 7 είναι σε αρκετές εκδόσεις, αυτές δε που συμφέρουν είναι τεχνητά περιορισμένες να μην έχουν βασικές δυνατότητες. Για παράδειγμα η έκδοση Home Premium δεν υποστηρίζει σύνδεση μέσω remote desktop και φυσικά δεν υποστηρίζει domain logins.
  • Όπως αποκαλύφθηκε, εν έτει 2012 υπάρχει ακόμα πλήθος εφαρμογών που δεν μπορούν να εκτελεστούν με δικαιώματα χρήστη, απαιτώντας Administrator access. Μέσος χρόνος ζωής μηχανήματος με administrator access χωρίς κάποιο πρόγραμμα τύπου deep freeze: Μισή ώρα.
  • Δεν θέλω καν να μπω στη διαδικασία των ενεργοποιήσεων, ελέγχων κλπ που είναι ένα μαρτύριο που τραβάνε μόνο οι χρήστες που έχουν πληρώσει: οι υπόλοιποι τρέχουν τα έτσι και αλλιώς πειρατικά τους προγράμματα και γελάνε με την MS.

Το νέο εργαστήριο

Για λόγους κόστους (είναι περίεργες οι εποχές) αποφασίστηκε να χρησιμοποιηθούν τα Windows 7 Home Premium 64 bit. Χάνουμε έτσι το domain login (το οποίο όμως παραμένει στα παλιότερα μηχανήματα με XP) αλλά αυτό έτσι και αλλιώς δεν ήταν πολύ χρήσιμο στα εκπαιδευτικά μηχανήματα. Το μόνο που χρειάζεται πρακτικά είναι καθένα από αυτά να κάνει autologin με ένα διαφορετικό λογαριασμό και το home directory να γίνεται map από το server στην εκκίνηση του περιβάλλοντος. Αυτό είναι πολύ εύκολο και δεν αποτελεί πρόβλημα: όσο τα user credentials ταιριάζουν στο μηχάνημα και το server, η πρόσβαση στα shares γίνεται χωρίς πρόβλημα.

Μετά το αρχικό στήσιμο του εργαστηρίου, τα Windows 7 συνδέθηκαν με αυτό τον τρόπο στον 2003 Server ενώ το παλιότερο εργαστήριο XP παρέμεινε στο domain. Καθώς ο ρόλος του 2003 server ήταν πλέον πολύ πιο περιορισμένος, συμφωνήσαμε κάποια στιγμή να αλλαχθεί με ελεύθερο λογισμικό. Εξάλλου είχαμε ήδη ξεπεράσει τα αρχικά CALs. Και όπως πάντα, τέτοιες μαζικές αλλαγές γίνονται στις γιορτές, όπου και εγώ έχω χρόνο και η σχολή είναι κλειστή.

Η Αντικατάσταση του Server

Υπήρχε ήδη ένας FreeBSD Server στη σχολή! Τον είχα εγκαταστήσει αρκετά παλιά για να κρατάει backup στα δεδομένα του 2003 και να μπορεί να αναλάβει βασικές λειτουργίες σε περίπτωση σοβαρής βλάβης του 2003. Τόσο ο 2003 όσο και ο υπάρχον FreeBSD server λειτουργούσαν με mirror. To mirror του FreeBSD παρέδωσε πνεύμα (ο ένας δίσκος) κάπου το Νοέμβρη. Συνέχιζε να λειτουργεί με τον ένα δίσκο φυσικά, αλλά σκοπός ήταν στη διάρκεια της συντήρησης να βρεθεί κάπου ένας δίσκος αντίστοιχης χωρητικότητας και τεχνολογίας (το μηχάνημα είναι Pentium III!) για να αντικατασταθεί. Αυτό πράγματι επιτεύχθηκε την πρώτη μέρα της συντήρησης.

Αντίθετα, το hardware του 2003 Server είναι επαρκώς σύγχρονο (Core2Duo) με SATA δίσκους και Intel Network Card. Στο μηχάνημα αυτό εγκαταστάθηκε το FreeBSD 9.1-RELEASE 64bit. Στην εγκατάσταση του χρησιμοποιήθηκαν τα παρακάτω:

Για ευκολία, η εγκατάσταση έγινε αρχικά στο σπίτι σε VMWare και αφού ρυθμίστηκε σύμφωνα με τις βασικές ρυθμίσεις του 2003 που θα αντικαθιστούσε (και δοκιμάστηκε φυσικά σε άλλο virtual client), έγινε dump και restore στο πραγματικό μηχάνημα. Έτσι χρειάστηκε πολύ λίγος χρόνος για επιπλέον παραμετροποίηση (πρακτικά μόνο η δημιουργία λογαριασμών χρηστών/μηχανημάτων.

Αφού έγινε backup ο παλιός server σε ένα atomaki που κουβαλάω μαζί μου για τέτοιες περιπτώσεις, έσβησα τα πάντα, έκανα restore από το dump, βασικές ρυθμίσεις και αντιγραφή ξανά των δεδομένων.

Δημιουργήθηκαν έπειτα οι χρήστες του εργαστηρίου και έγιναν map τα κατάλληλα shares σε κάθε υπολογιστή. Στο παλιό εργαστήριο, τα μηχανήματα βγήκαν από το παλιό domain και συνδέθηκαν στο νέο χωρίς κανένα πρόβλημα.

Όχι ένας, αλλά δύο!

Δύο FreeBSD servers φυσικά! Γιατί υπάρχει και ο παλιός Pentium III o οποίος πλέον:

  • Έχει ρόλο δεύτερου DNS σαν slave του κύριου server.
  • Παίρνει backup τα δεδομένα μέσω rsync.
  • Μπορεί ξανά να παρέχει βασικές υπηρεσίες και πρόσβαση στα δεδομένα της γραμματείας σε περίπτωση βλάβης του κύριου server.

Φωτογραφικό υλικό

Ακολουθεί φωτογραφικό υλικό απο τα μηχανήματα και τη διαδικασία.

Δοκιμαστικό restore του atlantis στο atom για να ελεχθεί το dump.

Πολύ ευχαριστημένος, ο phoenix με καινούριο δίσκο στο mirror και το gmirror να αναφέρει "complete".

O atlantis λίγο μετά το καθάρισμα του hardware από τη σκόνη και λίγο πριν το "καθάρισμα" του 2003 Server από τους δίσκους!

Δημιουργία των partitions με το gpart, λίγο πριν το restore. Η διαδικασία έγινε με τη λειτουργία Live CD που παρέχει το FreeBSD 9.X

To atomακι με το ενσωματωμένο τροφοδοτικό να έχει παραδώσει το πνεύμα. Για άλλη μια φορά.

Αν δεν θέλετε να φάτε όλη τη μέρα αντιγράφοντας δεδομένα, βγάλτε το καλώδιο δικτύου από το πάνω switch και βάλτε το στο κάτω :)

Μικρός και μεγάλος δαίμονας σε δράση! Atlantis και Phoenix στις τελικές τους θέσεις.

ΟΚ, το τερματίσαμε!

Καλή Χρονιά!

Monday, December 31, 2012

Ανακοίνωση Κυκλοφορίας: FreeBSD 9.1-RELEASE


Στις 30/12/2012, το FreeBSD Project ανακοίνωσε επίσημα την κυκλοφορία της έκδοσης 9.1-RELEASE. Το 9.1-RELEASE έρχεται να βελτιώσει με διορθώσεις και νέα χαρακτηριστικά το πολύ καλό 9.0-RELEASE. Mπορείτε να δείτε τα νέα χαρακτηριστικά του στη σχετική ανακοίνωση:

FreeBSD 9.1 Release Announcement

Μπορείτε να κατεβάσετε οποιαδήποτε διαθέσιμη έκδοση του FreeBSD από κάποιο από τα πολλά mirror sites. To 9.1-RELEASE έχει ήδη εμφανιστεί στους FTP servers μεγάλων ελληνικών ISPs.

Διαβάστε άρθρα σχετικά με το λειτουργικό ή κατεβάστε έτοιμο VirtualBox image με xfce desktop από το site του περιοδικού deltaHacker.

Τέλος, μην παραλείψετε να επισκεφθείτε την Δικτυακή Τοποθεσία της Ελληνικής Κοινότητας FreeBSD

Kαλή εγκατάσταση!

Friday, December 28, 2012

DHCP και Dynamic DNS Updates

Σε παλιότερο μας άρθρο είχαμε συζητήσει τη δημιουργία ενός DHCP server για την απόδοση διευθύνσεων και ρυθμίσεων δικτύου στα client μηχανήματα του δικτύου μας. Σε άλλο μας άρθρο είχαμε συζητήσει τη δημιουργία ενός DNS Server κατάλληλο για σχολικά εργαστήρια - αλλά γιατί όχι και για το οικιακό ή εταιρικό σας δίκτυο. Μάλιστα του είχαμε φτιάξει και μια ωραία... μαύρη τρύπα για να κόψουμε κάποιες διευθύνσεις.

Αν τώρα καταφέρουμε τον DHCP server μας να ενημερώνει το DNS κάθε φορά που αποδίδει μια νέα διεύθυνση (δημιουργεί / τροποποιεί ένα lease) θα έχουμε πετύχει το τέλειο. Πάμε να δούμε πως!

Το Σενάριο

Σε ένα δίκτυο έχετε ένα FreeBSD server με υπηρεσίες DHCP & DNS. Τα client μηχανήματα παίρνουν δυναμικές διευθύνσεις (και λοιπές ρυθμίσεις δικτύου) από τον DHCP server. Θέλετε να μπορείτε ανά πάσα στιγμή να έχετε πρόσβαση στα μηχανήματα αυτά από οποιοδήποτε άλλο μηχάνημα χρησιμοποιώντας το όνομα τους και όχι το IP τους - που έτσι και αλλιώς δεν ξέρετε.

Παράδειγμα: Το μηχάνημα workstation01.lab1.local πήρε χθες δυναμική IP 192.168.0.33. Μια βδομάδα μετά, πήρε την 192.168.0.24. Οι διευθύνσεις είναι αδιάφορες: Θέλουμε να μπορούμε να αναφερθούμε σε αυτό γράφοντας κάτι σαν:

# ping workstation01.lab1.local

Είναι φανερό, ότι ο DHCP server θα πρέπει να ενημερώνει τον DNS: Να δημιουργεί εγγραφές για νέα μηχανήματα της ζώνης αλλά και να ανανεώνει υπάρχουσες. Καλώς ήλθατε στα dynamic DNS updates! Για το παράδειγμα μας θα υποθέσουμε οτι ο DNS/DHCP server εκτελούνται στο ίδιο μηχάνημα με IP 192.168.0.1

Γενικές γνώσεις

Αν ψάξετε λίγο το αρχείο σας /etc/named.conf, θα βρείτε κάτι σαν το παρακάτω για τις ζώνες σας:

zone "lab1.local" {
        type master;
        file "/etc/namedb/master/lab1.local.db";
};

zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/namedb/master/0.168.192.in-addr.arpa";
};

Παρατηρήστε ότι τα αρχεία αυτά βρίσκονται στον υποκατάλογο master στον οποίο ο χρήστης bind (με τα δικαιώματα του οποίου εκτελείται ο DNS server στο FreeBSD) δεν έχει δικαιώματα εγγραφής. Άρα ακόμα και αν στείλετε με κάποιο τρόπο μήνυμα "update" στον server, δεν θα μπορέσει να γράψει κάτι σε αυτό τον κατάλογο.

Μη βιαστείτε να αλλάξετε τα δικαιώματα: Αν αλλάξετε το χρήστη/group του καταλόγου σε bind:wheel, το bind θα τα αλλάξει ξανά στην επόμενη εκκίνηση της υπηρεσίας και θα δείτε και το παρακάτω μήνυμα:

Stopping named.
Waiting for PIDS: 6707.
etc/namedb/master changed
 user expected 0 found 53 modified
Starting named.

Το οποίο σε απλά ελληνικά σημαίνει: "μη πειράζετε τα δικαιώματα σε αυτό τον κατάλογο!". Και τι πρέπει να κάνουμε; Μα πολύ απλά. Θα μεταφέρετε τα αρχεία στον κατάλογο dynamic. Γιατί εκεί θα γίνονται οι δυναμικές ανανεώσεις και o bind έχει την κατάλληλη πρόσβαση.

# service named stop
# cd /etc/namedb/master
# mv lab1.local.db   ../dynamic
# mv 0.168.192.in-addr.arpa   ../dynamic

Και πριν επανεκκίνησετε, φυσικά θα αλλάξετε και τις καταχωρίσεις ώστε να δείχνουν στον κατάλογο dynamic:

zone "lab1.local" {
        type master;
        file "/etc/namedb/dynamic/lab1.local.db";
};

zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/namedb/dynamic/0.168.192.in-addr.arpa";
};

Μπορείτε τώρα να επανεκκινήσετε την υπηρεσία όση ώρα θα ψάχνετε πως γίνεται το dynamic DNS update από τον DHCP server. Όχι τίποτα, άλλο μη γκρινιάζουν και οι χρήστες που δεν θα έχουν δίκτυο στο μεταξύ :)

# service named start

Δημιουργία... μυστικών

Για να γίνεται το DNS update, θα πρέπει ο DHCP server να στέλνει το κατάλληλο μήνυμα στον DNS κάθε φορά που απαιτείται να δημιουργηθεί ή να τροποποιηθεί μια εγγραφή. Όμως δεν μπορούμε να αφήσουμε τον DNS να δέχεται updates από παντού. Οι εποχές είναι πονηρές! Πρέπει να δημιουργήσουμε ένα μυστικό κλειδί που θα γνωρίζουν ο DNS και ο DHCP για να συννενοούνται:

# dnssec-keygen -a hmac-md5 -b 128 -n USER dhcpupdatekey
Kdhcpupdatekey.+157+10817

Δείτε το περιεχόμενο του αρχείου με κατάληξη .key που δημιουργήθηκε:

# more Kdhcpupdatekey.+157+10817.key 
dhcpupdatekey. IN KEY 0 3 157 dw5akl5zJw8Rc/8za61TLA==

Το κλειδί που θέλετε είναι αυτό το τελευταίο πεδίο:

dw5akl5zJw8Rc/8za61TLA==

Τροποποιήστε το /etc/named.conf όπως φαίνεται παρακάτω:

key "dhcpupdatekey" {
  algorithm hmac-md5;
  secret "dw5akl5zJw8Rc/8za61TLA==";
};

zone "lab1.local" {
        type master;
        file "/etc/namedb/dynamic/lab1.local.db";
        allow-update { key "dhcpupdatekey"; };
};

zone "0.168.192.in-addr.arpa" {
       type master;
       file "/etc/namedb/dynamic/0.168.192.in-addr.arpa";
       allow-update { key "dhcpupdatekey"; };
};

Κάντε restart το bind και για να πείσετε τον εαυτό σας ότι το dynamic update λειτουργεί, δοκιμάστε να του στείλετε ένα update χειροκίνητα. Επιλέξτε μια διεύθυνση που γνωρίζετε και περάστε την:

# service named restart
# nsupdate
> server 192.168.0.1
> key dhcpupdatekey dw5akl5zJw8Rc/8za61TLA==
> zone lab1.local
> update add workstation01.lab1.local. 600 IN A 192.168.0.24
> send
> quit

Δεν θα πρέπει να δείτε κανένα μήνυμα μετά το send. Μπορείτε να επιβεβαιώσετε την εγγραφή τρέχοντας την nslookup:

# nslookup
> workstation01.lab1.local

Server:  192.168.0.1
Address: 192.168.0.1#53

Name:  workstation01.lab1.local
Address: 192.168.0.24
> exit

Αφού λειτουργεί, δεν μένει παρά να βάλουμε τον DHCP να κάνει τη δουλειά που κάναμε εμείς χειροκίνητα! Πάμε λοιπόν να επεξεργαστούμε το /usr/local/etc/dhcpd.conf

Αλλαγή του dhcpd.conf

Και εδώ πρόκειται για πολύ απλές και αναμενόμενες αλλαγές. Προσθέτουμε το ίδιο μυστικό κλειδί (προσέξτε εδώ χωρίς εισαγωγικά!):

key dhcpupdatekey {
  algorithm hmac-md5;
  secret dw5akl5zJw8Rc/8za61TLA==;
}

Προσθέτουμε τη γραμμή που ενημερώνει το DHCP server ότι θα κάνει πλέον dynamic dns updates:

ddns-update-style interim;

Και τέλος τα στοιχεία για τις ζώνες που θα ενημερώνονται:

zone lab1.local. {
  primary 192.168.0.1;
  key dhcpupdatekey;
}

zone 0.168.192.in-addr.arpa. {
  primary 192.168.0.1;
  key dhcpupdatekey;
}

Κάντε και μια επανεκκίνηση το DHCP σας και είμαστε έτοιμοι:

# service isc-dhcpd restart

Μπορείτε να διαβάσετε και αυτό το σχετικό άρθρο με το οποίο ξεκινήσαμε και εμείς τις αναζητήσεις μας.

Ελπίζουμε να περάσετε ένα ευχάριστο χειμωνιάτικο απόγευμα. Καλές γιορτές!

Saturday, May 12, 2012

Εγκαταστήστε το FreeBSD 9.0 χωρίς το bsdinstall

Έχει περάσει κάποιο διάστημα από το FreeBSD 9.0-RELEASE και μάλλον ήρθε η
ώρα να δούμε πως μπορούμε να το εγκαταστήσουμε χωρίς την βοήθεια του
installer. Για όποιον έχει χάσει επεισόδια, το FreeBSD 9.0 έρχεται με τον
νέο installer, bsdinstall. Η αλήθεια είναι ότι δεν μας ξετρέλανε κιόλας όταν
τον είδαμε, αλλά δεν πειράζει: η λογική του ευχάριστου απογεύματος είναι να
δούμε πως θα τον παρακάμψουμε για να κάνουμε μια χειροκίνητη εγκατάσταση.


Η γενική ιδέα είναι εύκολη, θέλουμε όμως να εκμεταλλευτούμε και το νέο
σύστημα partitioning, το GPT. Βλέπετε, το bsdinstall το υποστηρίζει και δεν
θέλουμε η δική μας λύση να είναι κατώτερη. Αν μάθουμε να κάνουμε GPT
partitioning χειροκίνητα, θα μπορούμε επίσης να χρησιμοποιήσουμε την
λειτουργία LiveCD του FreeBSD 9.0 και με άλλους τρόπους (π.χ. να κάνουμε
partitioning και να ρίξουμε κάποιο έτοιμο dump που έχουμε χωρίς να κάνουμε
νέα εγκατάσταση).


Ο Warren Block, FreeBSD Doc committer, έχει γράψει ένα μικρό αλλά πολύ
κατατοπιστικό οδηγό για το GPT που ουσιαστικά περιγράφει ότι θέλουμε να
κάνουμε όσο αφορά το partitioning. Για να ξεκινήσουμε, χρησιμοποιήστε το
FreeBSD 9.0-RELEASE CD (ή DVD) για να εκκινήσετε το μηχάνημα σας.
Στο παράθυρο Welcome επιλέξτε LiveCD και κάντε login ως root.


Βήμα 1ο - Διαγράψτε τα πάντα και δημιουργήστε GPT Scheme


Προσοχή: Σε αυτό το σημείο θα διαγράψουμε όλα τα περιεχόμενα του δίσκου!
Υποθέτουμε ότι ο δίσκος μας είναι ο ada0 αλλά μπορείτε να διαπιστώσετε στο
δικό σας μηχάνημα με ένα ls /dev/ad*


# gpart destroy -F ada0

ada0 destroyed

# gpart create -s gpt ada0

ada0 created


Βήμα 2ο: Δημιουργία freebsd-boot partition και εγκατάσταση GPT bootcode


Το boot partition θα κρατήσει το loader. Το φτιάχνουμε σε μέγεθος 128Κ το
οποίο μάλιστα περισσεύει - αλλά αν αργότερα κάνουμε ZFS boot θα μας
χρειαστεί.


# gpart add -t freebsd-boot -l gpboot -s 128K ada0

ada0p1 added

# gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0

bootcode written to ada0


Βήμα 3ο: Δημιουργία UFS filesystem για το root partition


Δημιουργούμε το partition για το /. Ξεκινάει στο 1Μ boundary για να έχουμε
σωστή ευθυγράμμιση τομέων σε δίσκους με μέγεθος τομέα 4Κ. Εφ'όσον όλα τα
μεγέθη partition που θα ακολουθήσουν θα είναι σε ζυγό μέγεθος, η ευθυγράμμιση
θα παραμείνει σωστή. Στο παράδειγμα μας, θα βάλουμε 8Gb root filesystem.
Παρατηρήστε ότι δίνουμε και ετικέτες (labels) στα partitions. Οι ετικέτες
αυτές θα εμφανίζονται στο /dev/gpt και μας επιτρέπουν να προσαρτήσουμε το
σύστημα αρχείων χωρίς να αναφερθούμε στη συσκευή δίσκου.


# gpart add -t freebsd-ufs -l gproot -b 1M -s 8G ada0

ada0p2 added


Μπορούμε να το διαμορφώσουμε και άμεσα, χρησιμοποιώντας μάλιστα και το νέο
soft updates journaling:


# newfs -j /dev/gpt/gproot

...αριθμοί sectors που μόνο ο McKusick καταλαβαίνει...
newfs: soft updates journaling set


Βήμα 4ο: Δημιουργία filesystem για το home partition


Είναι προφανώς καλή ιδέα να φτιάξουμε ένα χωριστό partition για τα δεδομένα
των χρηστών. Θα βάλουμε εδώ άλλα 8G σαν παράδειγμα.


# gpart add -t freebsd-ufs -l gphome -s 8G ada0

ada0p3 added

# newfs -j /dev/gpt/gphome
...
newfs: soft updates journaling set


Βήμα 5ο: Δημιουργία swap partition


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


# gpart add -t freebsd-swap -l gpswap ada0

ada0p4 added


Βήμα 6ο: Προσάρτηση του νέου root filesystem και αποσυμπίεση αρχείων


Μπορούμε τώρα να προσαρτήσουμε το νέο σύστημα αρχείων root σε ένα προσωρινό
χώρο και να αποσυμπιέσουμε τα αρχεία εγκατάστασης από το CD. Τα ελάχιστα που
χρειαζόμαστε είναι τα kernel.txz και base.txz:


# mount /dev/gpt/gproot /media
# cd /media
# xz -dc /usr/freebsd-dist/kernel.txz | tar xvpf -
# xz -dc /usr/freebsd-dist/base.txz | tar xvpf -


Προαιρετικά, μπορείτε να κάνετε το ίδιο και για τα games.txz, doc.txz, src.txz και ports.txz.


Βήμα 7ο: Δημιουργία του fstab


Θα χρειαστεί να φτιάξουμε ενα fstab για το νέο σύστημα ώστε να γίνει δυνατή
η εκκίνηση του. Αυτό όμως είναι αρκετά εύκολο γιατί έχουμε τα labels:


# cd /media/etc
# vi fstab


Γράψτε τα παρακάτω:


#Device         Mountpoint      FStype   Options  Dump Pass#
/dev/gpt/gproot /               ufs      rw       1    1
/dev/gpt/gphome /usr/home       ufs      rw       1    2
/dev/gpt/gpswap none            swap     sw       0    0

Θα προσαρτήσουμε το home στο παραδοσιακό /usr/home του FreeBSD, οπότε μην
παραλείψετε να δημιουργήσετε τον κατάλογο:


# mkdir -p /media/usr/home

Βήμα 8ο: Επανεκκίνηση και ολοκλήρωση


Αποπροσαρτήστε το σύστημα αρχείων και επανεκκινήστε:


# cd /
# umount /media
# shutdown -r now


Βγάλτε το CD και αφήστε το σύστημα σας να εκκινήσει κανονικά. Μετά την
επανεκκίνηση, κάντε login ως root και:


  • Δημιουργήστε root password γιατί είναι κενό!
  • Εκτελέστε ln -s /usr/home /home
  • Φτιάξτε κατάλληλο rc.conf (Εντάξει, αντιγράψτε το από την άλλη σας εγκατάσταση)
  • Προσθέστε χρήστες, λογισμικό και οτιδήποτε άλλο θα γεμίσει ευχάριστα το μουντό σας απόγευμα
  • Χορέψτε το χορό της νίκης που απαλλαγήκατε μια για πάντα από το bsdinstall!

Sunday, October 23, 2011

Αναβάθμιση σε FreeBSD 9.0-RC1

Σήμερα το πρωί, το 9.0-RC1 έγινε διαθέσιμο μέσω του freebsd-update. Υπάρχουν όμως συγκεκριμένες οδηγίες, καθώς το ίδιο το πρόγραμμα freebsd-update χρειάζεται αλλαγές για να λειτουργήσει με το νέο packaging του FreeBSD 9.0. Μπορείτε να διαβάσετε την πλήρη ανακοίνωση εδώ. Ξεκίνησα λοιπόν την αναβάθμιση του pegasus, ενός από τα βασικά μου desktop μηχανήματα με (ευτυχώς) επαρκή επεξεργαστική ισχύ.

Προετοιμασία


Ο pegasus χρησιμοποιούσε 8.2-RELEASE-p4 64bit. Πριν την εκκίνηση του upgrade αποφάσισα να σβήσω όλα τα πακέτα - μετά από μια αναβάθμιση σε major έκδοση συνήθως απαιτείται να γίνουν rebuild τα πάντα (το γνωστό portupgrade -af το οποίο αλλάζει το κλίμα του πλανήτη). Αντί για αυτό - και καθώς τα πακέτα ήταν ήδη παλιά - αποφάσισα να τα σβήσω όλα και να βάλω νέα μετά την αναβάθμιση.

Το σβήσιμο των πακέτων μπορεί να γίνει με pkg_delete -a αλλά αυτό αργεί. Τη στιγμή που θέλουμε να τα σβήσουμε όλα, είναι προτιμότερο να διαγράψουμε όλο το /usr/local (αφού κρατήσουμε backup το /usr/local/etc) και να διαγράψουμε επίσης τα περιεχόμενα του /var/db/pkg. Όλα (σχεδόν) τα ports εγκαθιστούνται στο /usr/local και τους υποκαταλόγους του, οπότε αυτή είναι μια γρήγορη μέθοδος να τα... ξεφορτωθούμε. Μια εξαίρεση είναι το linux_base το οποίο αν το έχετε εγκατεστημένο, καλό θα είναι να το βγάλετε με τον παραδοσιακό τρόπο (pkg_delete) πριν συνεχίσετε.

Αν χρησιμοποιείται σαν default shell το bash, μη ξεχάσετε να το αλλάξετε σε ένα από τα shell που ανήκουν στο βασικό σύστημα (π.χ. csh):

chsh -s csh
Password:


Κάντε logout - login για να ενεργοποιηθεί. Έπειτα σβήστε τα πάντα αφού κρατήσετε backup το /usr/local/etc. Εννοείται φυσικά ότι θα κλείσετε το γραφικό περιβάλλον και τα προγράμματα που χρησιμοποιείτε πριν αρχίσετε το σβήσιμο!

# cd /usr/
# mv local/etc .
# rm -rf local
# mkdir local
# mv etc local
# cd /var/db
# rm -rf pkg
# mkdir pkg


Αυτό ήταν! Εκτελώντας pkg_info θα διαπιστώσετε ότι δεν έχετε κανένα εγκατεστημένο πακέτο. Μπορείτε τώρα να συνεχίσετε με το upgrade.

Το upgrade


Κάνουμε πρώτα την ενημέρωση του freebsd-update όπως αναγράφεται στο announcement:

# sed -i '' -e 's/=_/=%@_/' /usr/sbin/freebsd-update

και έπειτα εκτελούμε:

# freebsd-update -r 9.0-RC1 upgrade

Διαβάζουμε τα μηνύματα, εκτελούμε το merge των αρχείων όπου ζητείται και εκτελούμε:

# freebsd-update install

Κάνουμε επανεκκίνηση με το νέο πυρήνα (αν χρησιμοποιούσατε custom πυρήνα, βεβαιωθείτε ότι έχετε βάλει κατάλληλα αρθρώματα στο /boot/loader.conf για να λειτουργήσετε με το GENERIC), και εκτελούμε ξανά:

# freebsd-update install

Με αυτό το δεύτερο install γίνεται η εγκατάσταση του userland. Αν σας ζητήσει να κάνετε rebuild όλα τα ports και να το ξανατρέξετε, μπορείτε να το κάνετε απευθείας. Μη ξεχνάτε, δεν έχετε ports εγκατεστημένα!

# freebsd-update install

Εγκατάσταση του Source


Λόγω της αλλαγής packaging στο FreeBSD 9.0, το freebsd-update δεν αναβαθμίζει τον πηγαίο κώδικα στο /usr/src αν τον έχετε εγκατεστημένο (και φυσικά τον έχετε, γιατί δεν νοείται FreeBSD χωρίς source). Αντίθετα, τον σβήνει! Ελέγξτε αν έχει μείνει κάτι μέσα στο /usr/src που χρειάζεστε ή έχετε αλλάξει (κάποιο ξεχασμένο kernel configuration file ίσως; Είναι κακή ιδέα να τα αποθηκεύετε εκεί). Διαγράψτε τυχόν υπολείμματα και πάμε να εγκαταστήσουμε το νέο source:

# cd /usr
# rm -rf src
# mkdir src
# cd src
# fetch ftp://ftp.otenet.gr/pub/FreeBSD/releases/amd64/amd64/9.0-RC1/src.txz
# cd /
# tar xvpzf /usr/src/src.txz
# rm /usr/src/src.txz


Αυτό ήταν. Μπορείτε τώρα να δημιουργήσετε ξανά προσαρμοσμένο πυρήνα και να αρχίσετε να εγκαθιστάτε ξανά τις εφαρμογές σας. Καλό απόγευμα (και ξενύχτι) :)

Friday, October 21, 2011

Ελληνικά στην Κονσόλα του FreeBSD 9.X

Αν δεν το καταλάβατε από το προηγούμενο post μας, θα το καταλάβετε μόλις δοκιμάσετε μια εγκατάσταση του FreeBSD 9 (RC1 αυτή τη στιγμή). Το νέο bsdinstall παραλείπει κάποια βήματα ρυθμίσεων που υπήρχαν στο sysinstall. Μια "παρενέργεια" που δημιουργείται είναι να μην μπορούμε να γράψουμε Ελληνικά στην κονσόλα μας. Να θιυμίσουμε εδώ ότι για να γράψετε Ελληνικά στην κονσόλα θα πρέπει να ρυθμίσετε την κωδικοποίηση σε ISO8859-7. Αν σκοπεύετε να χρησιμοποιήσετε το σύστημα σας μόνο μέσα από X (ή έστω μέσω ssh από xterm) δεν χρειάζεστε τίποτα από τα παρακάτω και είναι καλύτερα να ρυθμίσετε την κωδικοποίηση σε UTF-8.

Αρχικές Ρυθμίσεις


Αν κατά τη διάρκεια της εγκατάστασης επιλέξατε το Ελληνικό πληκτρολόγιο των 101 πλήκτρων, θα έχετε την παρακάτω γραμμή στο /etc/rc.conf:

keymap="gr.us101.acc"

Καθώς καταλαβαίνετε το παραπάνω από μόνο του δεν επαρκεί για να έχετε Ελληνικά. Χρειάζεστε ακόμα τα παρακάτω:
  • Fonts που να μπορούν να δείξουν Ελληνικά στην κονσόλα. Το sysinstall είχε την αντίστοιχη ερώτηση, το bsdinstall όχι.
  • Terminal type στο /etc/ttys κατάλληλο για Ελληνικά. Είναι το cons25l7. Προσέξτε, είναι το Αγγλικό γράμμα "l" και όχι ο αριθμός "1". Και εδώ, το sysinstall είχε την αντίστοιχη ερώτηση και έκανε τη ρύθμιση, το bsdinstall όχι.
  • Να θέσετε τη μεταβλητή περιβάλλοντος LANG σε el_GR.ISO8859-7. Αυτή είναι μια ρύθμιση που πρέπει να κάνετε στα αρχεία ρυθμίσεων του κελύφους σας. Το σημείο αυτό δεν αλλάζει από πριν.

Ρυθμίσεις Fonts


Το sysinstall υπάρχει ακόμα στο βασικό σύστημα! Αν θέλετε μπορείτε να το εκτελέσετε ως root και να επιλέξετε configure - console - font και ISO8859-7. Αλλά δεν χρειάζεται να το κάνετε στα αλήθεια. Απλά προσθέστε τις παρακάτω γραμμές στο /etc/rc.conf:

font8x8="iso07-8x8"
font8x14="iso07-8x14"
font8x16="iso07-8x16"


Terminal Type


Ίσως σκεφτείτε να εκτελέσετε το sysinstall και να επιλέξετε το terminal type. Μην το κάνετε, γιατί αν και το sysinstall δεν θα διαμαρτυρηθεί, δεν πρόκειται να αλλάξει το /etc/ttys. Θα πρέπει να το επεξεργαστείτε χειροκίνητα και να αλλάξετε το xterm με cons25l7. Θα πρέπει να κάνετε την αλλαγή στο ttyv0 και σε οποιαδήποτε άλλο virtual terminal θέλετε. Παρακάτω βλέπετε ένα παράδειγμα για ttyv0:

ttyv0 "/usr/libexec/getty Pc" cons25l7 on secure


Ρύθμιση Environment Variable


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

export LANG=el_GR.ISO8859-7

για κελύφη όπως το bash ή

setenv LANG el_GR.ISO8859-7

για κελύφη όπως το csh. Η γραμμή θα πρέπει να μπει στο κατάλληλο αρχείο ρυθμίσεων του κελύφους σας (π.χ. το .profile).

Έλεγχος Λειτουργίας


Αφού κάνετε τα παραπάνω, μπορείτε να δοκιμάσετε τα Ελληνικά στην κονσόλα. Είτε επανεκκνίνηστε το μηχάνημα σας, είτε την υπηρεσία syscons:

# service syscons restart

Μη ξεχάσετε να κάνετε logout-login (η ενδεχομένως source το .profile) για να ενεργοποιηθεί η μεταβλητή περιβάλλοντος. Τα Ελληνικά στην κονσόλα αλλάζουν με ALT+SPACE. Καλή τύχη!

Sunday, October 16, 2011

bsdinstall: τα καλά, τα κακά, τα άσχημα

Όχι το FreeBSD 9.0 δεν έχει κυκλοφορήσει ακόμα. Γι'αυτό και δεν γράφει 9.0-RELEASE o τίτλος. Ωστόσο είμαστε στο BETA3 (και σύντομα στο RC1) και νομίζω είναι ευκαιρία να δούμε λίγο το νέο installer που αντικαθιστά το "αγαπημένο μας" sysinstall και μερικές ακόμα διαφορές που υπάρχουν στην εγκατάσταση. Στο FreeBSD 9, το νέο πρόγραμμα εγκατάστασης λέγεται bsdinstall. Στην πραγματικότητα το bsdinstall είναι μια σειρά από scripts και δεν έχει εξαρτήσεις πέρα από το βασικό σύστημα. Μπορείτε να διαβάσετε το πλήρες κεφάλαιο εγκατάστασης του FreeBSD 9 στο Ελληνικό Εγχειρίδιο του FreeBSD. Δεν θα μιλήσουμε εδώ για τη διαδικασία της εγκατάστασης - αφού το Εγχειρίδιο την περιγράφει μια χαρά. Θα δούμε όμως τι μας αρέσει (και τι όχι) στο νέο installer.

Tα Kαλά

Όχι δεν είναι κάποιος fancy installer, μη φαντάζεστε. Το bsdinstall εξακολουθεί να είναι text mode με τους γνωστούς διαλόγους από το libdialog. Τι καλό όμως έχει σε σχέση με το sysinstall;

  • Η διαδικασία προχωράει σειριακά: Δεν υπάρχει το γνωστό πρόβλημα του αρχάριου χρήστη που εγκλωβίστηκε να κάνει κύκλους στο sysinstall.
  • Υπάρχει η δυνατότητα χρήσης του μέσου εγκατάστασης ως Live CD. Μη φανταστείτε γραφικό περιβάλλον βέβαια αλλά Live console με πλήρεις δυνατότητες (full multiuser σύστημα με πλήρες base).
  • Το bsdinstall μπορεί να δημιουργήσει και να χρησιμοποιήσει κατατμήσεις gpart και όχι μόνο το παλιό κακό MBR. Επίσης το προεπιλεγμένο σύστημα αρχείων είναι το UFS2 με SoftUpdates Journaling. (SU-J). To SU-J είναι ένα νέο χαρακτηριστικό στο FreeBSD 9. Να θυμίσουμε ότι το journaling υπάρχει ήδη στο FreeBSD, αλλά μέχρι και τη σειρά 8 που έχουμε τώρα, δεν περιορίζεται στα SoftUpdates αλλά ενεργεί σε όλα τα δεδομένα. Αυτό το κάνει αισθητά πιο αργό από το νέο SU+J - και χρειάζονταν και αρκετά βήματα για τη χρήση του. Φαίνεται επίσης ότι το bsdinstall θα μπορεί να κάνει εγκατάσταση και σε ZFS (yes!)
  • Το bsdinstall δίνει δυνατότητα ρύθμισης και ασύρματου δικτύου με τη βοήθεια απλών διαλόγων.
  • Το bsdinstall είναι modular και scriptable.

Tα κακά

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

Τώρα, αν θέλαμε να είμαστε φιλικοί προς το χρήστη θα έπρεπε για παράδειγμα να υπάρχει drop-down επιλογή για τα filesystems. Πως μπορώ εγώ να μαντέψω τι filesystems είναι δεκτά σε αυτό το ωραίο πεδίο "Type:"; Βέβαια υπάρχει μια γραμμή βοήθειας με την προτροπή e.g freebsd-ufs, freebsd-swap. Αλλά αυτό υπονοεί ότι μάλλον υπάρχουν και άλλα δεκτά filesystems. Π.χ. freebsd-zfs. Η μόνη λύση είναι το trial and error.

Κάποιοι άλλοι διάλογοι, είναι λιγότερο φιλικοί και από το αρχικό sysinstall. Για παράδειγμα, αν απαντήσετε yes στο παρακάτω:

θα βρεθείτε να εκτελείτε το adduser script από την κονσόλα. Όχι ότι δεν μας αρέσει το adduser αλλά θα φαίνεται σαν κινέζικα στον αρχάριο εγκαταστάτη (αν και εξηγείται μια χαρά στο FreeBSD Handbook). Επίσης δεν παρέχεται πλέον η δυνατότητα να προσθέσουμε ομάδες (groups) αν και αυτό μάλλον δεν είναι πολύ σημαντικό.

Τη δεδομένη στιγμή δεν γνωρίζω αν το bsdinstall θα αποκτήσει και κάποια διαχείριση πακέτων όπως το sysinstall. Καθώς ξέρετε τα BETA μέσα εγκατάστασης δεν έχουν έτσι και αλλιώς έτοιμα πακέτα. Δεν φαίνεται πάντως να υπάρχει κάποια τέτοια δυνατότητα στο παρόν bsdinstall.

Τα Άσχημα


Το να βλέπω διαλόγους φτιαγμένους με συν (+) πλην (-) και κάθετες μπάρες (|) το 2011, μου φαίνεται κάπως. Maybe it's just me :)

Tuesday, May 3, 2011

Ένας DNS Server για Σχολικά Εργαστήρια - Μέρος ΙΙ

Στο προηγούμενο άρθρο μας ρυθμίσαμε ένα FreeBSD Server στο ρόλο του DNS ενός σχολικού εργαστηρίου (αλλά και γενικότερα της σχολικής μονάδας). Επανερχόμαστε τώρα για να δούμε πως μπορούμε να χρησιμοποιήσουμε τις δυνατότητες που μας παρέχει για να "φιλτράρουμε" κάποιες διευθύνσεις.


Το φιλτράρισμα σε πολλές περιπτώσεις είναι επιβεβλημένο καθώς (δυστυχώς) η χρήση του Internet γίνεται γενικά χωρίς μέτρο στα σχολεία και το αποτέλεσμα είναι πλήρης απώλεια ελέγχου της κατάστασης. Ειδικά η χρήση site όπως το facebook είναι από μόνη της αρκετή για να διαταράξει κάθε εργαστηριακό μάθημα. Πέρα από αυτό βέβαια υπάρχουν και άλλα sites που ενδεχομένως θέλετε να φιλτράρετε, είτε γιατί το περιεχόμενο είναι ακατάλληλο, είτε γιατί περιέχουν κακόβουλα προγράμματα. Γενικά όμως αυτά αποτελούν μικρότερο πρόβλημα.

DNS Blackhole



Καθώς ετοιμαζόμουν να γράψω το πρώτο άρθρο, ο hakmem σε ένα tweet αναφέρθηκε σε άρθρο δημιουργίας DNS blackhole με χρήση του FreeBSD. To DNS blackhole χρησιμοποιεί το δικό μας DNS server για να "βραχυκυκλώσει" ουσιαστικά ένα site, κατευθύνοντας το προς μια ανύπαρκτη διεύθυνση ή σελίδα (π.χ. 127.0.0.1) ή σε μια σελίδα που έχουμε δημιουργήσει εμείς και εξηγεί γιατί δεν επιτρέπεται η πρόσβαση στο site. Το άρθρο είναι πολύ καλό και μπορείτε να το χρησιμοποιήσετε αυτούσιο αν θέλετε. Για τη δική μας περίπτωση ωστόσο, προτιμήσαμε να φτιάξουμε μια λύση που να υλοποιεί το DNS blackhole με βάση μια δική μας λίστα και μάλιστα να μπορεί να ανανεώνεται και κάτα κάποιο τρόπο αυτόματα.

DNS Blackhole - Απόπειρα 1



Προφανώς είναι αρκετά εύκολο να προσθέσουμε μια καταχώριση στο /etc/namedb/named.conf και να κλείσουμε ένα site όπως το facebook. Για παράδειγμα αυτό θα ήταν αρκετό:

zone "facebook.com" {
type master;
file "/etc/namedb/master/voidurls.db";
};


όπου φυσικά το /etc/namedb/master/voidurls.db θα είναι κάτι σαν το παρακάτω:

$TTL 3h
@ IN SOA aquarius64.lab1.local. sonicy.otenet.gr. (
2008081501 ; Serial - increment everytime something changes
1d ; Refresh
2h ; Retry
1000h ; Expire
2d ) ; Minimum

IN NS 10.14.28.10.
IN A 10.14.28.251
www IN A 10.14.28.251
localhost IN A 127.0.0.1 ; just in case


Στην περίπτωση μας, ο 10.14.28.251 είναι ο δεύτερος μας server και περιέχει επίσης μια σελίδα που απλά εξηγεί ότι απαγορεύεται η πρόσβαση. Το σύστημα αυτό λειτουργεί μια χαρά - φυσικά μέχρι όλοι οι μαθητές να ανακαλύψουν ότι υπάρχουν χιλιάδες site που αναλαμβάνουν να κάνουν unlock / unblock το facebook. Και είναι απλά αδύνατον να τα προσθέσουμε με το χέρι ένα-ένα. Μπορούμε όμως να χρησιμοποιήσουμε ένα απλό script το οποίο να διαβάζει το query-log του DNS, να βρίσκει τις ανεπιθύμητες διευθύνσεις και να τις προσθέτει αυτόματα. Μπορείτε να το κατεβάσετε από εδώ. Ακολουθεί μια μικρή ανάλυση.

Ένα Script για την... Μαύρη Τρύπα



Η παρακάτω γραμμή ορίζει το αρχείο καταγραφής του DNS που θα αναλύει το script:

INFILES="/etc/namedb/logs/query-log"


Αν θέλουμε περισσότερα από ένα αρχεία, μπορούμε να βάλουμε όλα τα ονόματα σε αυτή τη γραμμή, χωρισμένα με κενά. Την πρώτη φορά που θα το τρέξουμε πιθανόν έχει νόημα να αναλύσουμε όλα τα query-log που υπάρχουν ήδη.

Τα πρώτα αποτελέσματα που βγάζει το script αποθηκεύονται σε αυτό το αρχείο:

OUTFILE=/etc/namedb/logs/outfile.log


Ενώ το ταξινομημένο αρχείο εξόδου και backup:

SORTFILE=/etc/namedb/logs/sorted.log
SORTFILEBAK=/etc/namedb/logs/sorted.log.bak


Το τελικό αρχείο που παράγεται για το BIND:

ADDBLOCKFILE=/etc/namedb/addblock.conf
ADDBLOCKFILEBAK=/etc/namedb/addblock.conf.bak


To αρχείο που περιέχει τις "απαγορευμένες" λέξεις:

WORDLISTFILE=/home/sonic/blockwords


το οποίο σε μας περιέχει:

unblock
unlock
facebook
googleearth
miniclip
minigames.com


Αν θέλουμε κάποια domains να αγνοούνται ακόμα και αν περιέχουν μέσα τους τις απαγορευμένες λέξεις, τα βάζουμε εδώ και χωρίζονται με "|":

IGNORELIST="lab1.local|chan.sch.gr|.newlab|.lan"


Το αρχείο addblock.conf παράγεται μόνο αν η νέα εκτέλεση του script δημιούργησε νέα αποτελέσματα σε σχέση με την προηγούμενη. Στην περίπτωση αυτή γίνεται και η απαραίτητη επαναφόρτωση της ζώνης με την εντολή:

rndc reload


Σε κάθε περίπτωση, υπάρχει πάντα backup του προηγούμενου addblock.conf ώστε αν η ζώνη αποτύχει να φορτωθεί για κάποιο λόγο, χρησιμοποιείται το backup. Αυτό εξασφαλίζει ότι δεν θα μείνουμε χωρίς DNS.

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

include "/etc/namedb/addblock.conf";


Λογικά, θα πρέπει να δημιουργήσετε μια καταχώριση στο /etc/crontab ώστε το script να εκτελείται αυτόματα σε τακτά διαστήματα (π.χ. ανά πέντε λεπτά). Αυτό δεν δημιουργεί πρόβλημα, καθώς δεν γίνεται επαναφόρτωση της ζώνης αν δεν υπάρχουν νέες καταχωρίσεις και έτσι ο DNS server λειτουργεί απρόσκοπτα. Φυσικά μπορείτε να βελτιώσετε και να τροποποιήσετε το script κατά τις ανάγκες σας.

Tuesday, April 26, 2011

Ένας DNS Server για Σχολικά Εργαστήρια - Μέρος Ι

Στη δική μου περίπτωση βέβαια, πρόκειται για δύο DNS servers. Καλό είναι να υπάρχει και ένα backup DNS, ειδικά όταν στηρίζει όλο το δίκτυο του σχολείου και όχι μόνο ένα σχολικό εργαστήριο. Αλλά ας πάρουμε τα πράγματα από την αρχή.



Σε τι χρησιμεύει ένας DNS Server; Αν ρωτήσετε ένα μαθητή της Γ' Τάξης του τομέα Πληροφορικής ΕΠΑΛ (και είστε τυχερός) θα σας πει ότι ο DNS απαντάει σε ερωτήματα του τύπου "Ποιο είναι το IP του www.freebsd.org" και "ποιος υπολογιστής έχει την διεύθυνση 10.14.28.10". Καθώς καταλαβαίνετε βέβαια δεν είναι δυνατόν ένα μηχάνημα να γνωρίζει τις διευθύνσεις όλου του διαδικτύου - αν και φυσιολογικά θα ξέρει και θα ανταποκρίνεται αυτόνομα στα ερωτήματα που αφορούν το εσωτερικό μας δίκτυο. Σε κάθε άλλη περίπτωση θα επικοινωνεί με άλλους DNS server για να ανακτήσει την απάντηση.



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




  • Μπορούμε να τον χρησιμοποιήσουμε για τα μηχανήματα του εσωτερικού μας δικτύου

  • Μπορούμε να είμαστε ανεξάρτητοι από την υπηρεσία DNS του παροχέα

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



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

Ρύθμιση του BIND



Το BIND έρχεται ως μέρος του base system στο FreeBSD. Η ενεργοποίηση του είναι απλή υπόθεση. Στο /etc/rc.conf προσθέστε τις γραμμές:

named_enable="YES"

Το βασικό αρχείο ρυθμίσεων του BIND είναι το /etc/namedb/named.conf. Ας δούμε τι προσθήκες έχουμε κάνει σε σχέση με το αρχικό που έρχεται με το FreeBSD 8.2-RELEASE:

logging {
channel query-log {
file "/etc/namedb/logs/query-log" versions 3 size 1m;
};
category queries { query-log; };
};


Εδώ ενεργοποιούμε το logging. Έτσι γίνεται καταγραφή των διευθύνσεων που ζητούνται από τον BIND. Θα το χρειαστούμε αυτό για το φιλτράρισμα.

Αλλάζουμε τη γραμμή listen για να περιέχει και την IP διεύθυνση του server που εκτελεί το BIND (εκτός από το local loopback). O δικός μας έχει την διεύθυνση 10.14.28.10:

listen-on { 10.14.28.10; 127.0.0.1; };


Δηλώνουμε τα αρχεία που αφορούν τις ζώνες του τοπικού μας δικτύου:


zone "lab1.local" {
type master;
file "/etc/namedb/master/lab1.db";
also-notify { 10.14.28.251; };
};

zone "newlab" {
type slave;
file "/etc/namedb/slave/newlab.db";
masters {
10.14.28.251;
};
};


Όπως ανέφερα παραπάνω, διαθέτουμε δύο DNS servers και τυπικά καθένας εξυπηρετεί ένα εργαστήριο (ο πρώτος εξυπηρετεί και το υπόλοιπο σχολείο). Ο δεύτερος DNS είναι στη διεύθυνση 10.14.28.251. Για backup, καθένας από τους δύο διαθέτει και την ζώνη του άλλου. Πιστεύω ότι είναι αρκετά κατανοητός ο τρόπος που επιτυγχάνεται αυτό (hint: master, slave, masters, also-notify). Για ένα μόνο DNS server και ένα εσωτερικό domain θα αρκούσε αυτό:


zone "lab1.local" {
type master;
file "/etc/namedb/master/lab1.db";
};


Η υπόθεση μας είναι ότι το εσωτερικό μας domain ονομάζεται lab1.local και φυσικά θα χρειαστεί να φτιάξουμε το αρχείο /etc/namedb/master/lab1.db. Mοιάζει με το παρακάτω:


$TTL 3h
@ IN SOA aquarius64.lab1.local. sonicy.otenet.gr. (
2008081511 ; Serial - increment everytime something changes
1d ; Refresh
2h ; Retry
1000h ; Expire
2d ) ; Minimum

IN NS 10.14.28.10.
aquarius64 IN A 10.14.28.10
localhost IN A 127.0.0.1 ; just in case
PC1 IN A 10.14.28.11
PC2 IN A 10.14.28.12
PC3 IN A 10.14.28.13


Προσθέτουμε σε αυτό όλα τα μηχανήματα του εργαστηρίου μας. Στη συγκεκριμένη περίπτωση βέβαια έχουμε στατικές διευθύνσεις οπότε ξέρουμε ότι δεν θα γίνει κάποια αλλαγή (Ο DHCP server που επίσης εκτελείται δίνει άλλες περιοχές διευθύνσεων).

Ενεργοποίηση και Δοκιμή



Έχοντας κάνει όλα τα παραπάνω, ενεργοποιούμε το BIND:



# service named start
Starting named.


Για να χρησιμοποιεί ο server μας τον... εαυτό του ως DNS για τα δικά του ερωτήματα, βεβαιωνόμαστε ότι το /etc/resolv.conf περιέχει κάτι σαν αυτό:



domain lab1.local
nameserver 10.14.28.10
#Μπορεί να χρησιμοποιηθεί και το local loopback
#nameserver 127.0.0.1
#Αν έχουμε και άλλο DNS
#nameserver 10.14.28.251


To domain είναι προαιρετικό (αλλά χρήσιμο). Μπορείτε να δείτε περισσότερες λεπτομέρειες στο man resolv.conf. H δοκιμή είναι απλή:



$ nslookup
> www.freebsd.org
Server: 10.14.28.10
Address: 10.14.28.10#53

Non-authoritative answer:
www.freebsd.org canonical name = red.freebsd.org.
Name: red.freebsd.org
Address: 69.147.83.34
> PC1.lab1.local
Server: 10.14.28.10
Address: 10.14.28.10#53

Name: PC1.lab1.local
Address: 10.14.28.11
> exit


Το μόνο που μένει είναι να δηλώσετε το 10.14.28.10 ως DNS server σε όλα τα μηχανήματα του δικτύου σας (ή να το στείλετε μέσω DHCP αν έχετε δυναμικές διευθύνσεις). Φαντάζομαι ξέρετε πως να βάλετε DNS στα Windows ;) Για τα UNIXοειδή μηχανήματα ρυθμίστε απλώς το /etc/resolv.conf όπως παραπάνω ή χρησιμοποιήστε τον (brrrrr....) Network Manager.



Στο επόμενο άρθρο θα δούμε πως να χρησιμοποιήσουμε το DNS για φιλτράρισμα ανεπιθύμητων διευθύνσεων.



Friday, April 15, 2011

DHCP και άλλες ιστορίες!

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

Μια γρήγορη κλήση στο ΠΛΗΝΕΤ προκειμένου να δούμε πόσο γρήγορα μπορούμε να κάνουμε κάτι για αυτό χωρίς να χρειαστεί να αγοράσουμε router. Ευτυχώς, μάθαμε ότι μπορούμε να χρησιμοποιήσουμε ένα κοινό router και το λογαριασμό του σχολείου για username/pass (τα Cisco προγραμματίζονται από την υπηρεσία υποστήριξης του ΠΣΔ και έχουν άλλους, άγνωστους σε μας κωδικούς). Γρήγορα εντόπισα το μικρό speedtouch που μας είχε αφήσει ο ΟΤΕ και οι ρυθμίσεις έγιναν, ουσιαστικά όμοιες με το Cisco.

Τα σχολικά routers έχουν τυπικά ενεργοποιημένο DHCP server και ορισμένες φορές αυτό δημιουργεί πρόβλημα σε μας που θέλουμε να... σκαλίσουμε το δίκτυο μας! Από την άλλη βέβαια είναι εύχρηστο να μπορεί καθένας να συνδέει ένα μηχάνημα και να μη μπλέκει με άλλες ρυθμίσεις. Το θέμα λοιπόν δεν είναι να απενεργοποιήσουμε το DHCP, αλλά να το φέρουμε στα μέτρα μας.

Ενας DHCP Server, αλλά ποιος;



Οι DHCP servers που ενσωματώνονται στα routers είναι υπερβολικά απλοί και με λίγες επιλογές. Μετά τη γρήγορη δοκιμή, αποφάσισα ότι μπορεί αυτή η λειτουργία να μεταφερθεί στο FreeBSD server μας. Έτσι θα έχουμε τα εξής πλεονεκτήματα:


  • Πολύ περισσότερες επιλογές ρυθμίσεων

  • Δυνατότητα να στείλουμε και άλλες χρήσιμες προσαρμοσμένες ρυθμίσεις (DNS, gateway κλπ)

  • Δυνατότητα αποστολή συγκεκριμένων ρυθμίσεων σε ειδικά μηχανήματα με βάση το MAC address



Τα παραπάνω είναι αρκετά εύκολα:

- Εγκαθιστούμε το port net/isc-dhcp41-server

- Χρησιμοποιούμε ένα αρχείο ρυθμίσεων όπως το παρακάτω:

option domain-name "lab1.local";
option domain-name-servers 10.14.28.10, 10.14.28.251;

default-lease-time 3600;
max-lease-time 86400;

authoritative;

ddns-update-style none;

subnet 10.14.28.0 netmask 255.255.255.0 {
range 10.14.28.129 10.14.28.250;
option routers 10.14.28.1;
}

host debian12 {
hardware ethernet 00:0e:a6:0a:d3:87;
fixed-address 10.14.28.128;
option routers 10.14.28.1;
}


To debian12 είναι σημαντικό να έχει πάντοτε την ίδια διεύθυνση. Αυτό επιτυγχάνεται με την οδηγία fixed-address και η αναγνώριση του μηχανήματος μέσω του MAC address, μέσω της oδηγίας hardware ethernet.

Το αρχείο ρυθμίσεων ορίζει δύο DNS servers, τον 10.14.28.10 και τον 10.14.28.251. Πρόκειται φυσικά για τους δύο FreeBSD servers του σχολείου που μεταξύ άλλων εκτελούν και το BIND.

Το αρχείο ρυθμίσεων αποθηκεύεται στη θέση:

/usr/local/etc/dhcpd.conf

Τα leases που παρέχει ο DHCP server μπορούμε να τα δούμε στον κατάλογο:

/var/db/dhcpd/

Το μόνο που χρειάζεται για να ενεργοποιήσουμε τον DHCP server είναι να προσθέσουμε τις παρακάτω γραμμές στο /etc/rc.conf:

dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="ale0"


Χρησιμοποιώντας φυσικά το σωστό για την περίπτωση μας όνομα interface (εδώ βέβαια το ale0). Τέλος ενεργοποιούμε την υπηρεσία:


# service isc-dhcpd start


και συνεχίζουμε να ψάχνουμε για άλλα ενδιαφέροντα πράγματα για τα επόμενα απογεύματα μας!

Sunday, October 24, 2010

FreeBSD Samba Domain Controller!

Εδώ και αρκετό καιρό είχα αποφασίσει να ξεφορτωθώ το Windows 2003 Server του δεύτερου σχολικού μας εργαστηρίου. Ο λόγος αρκετά απλός: είναι ένα μηχάνημα με οθόνη, πληκτρολόγιο το οποίο αν και παρέχει τις υπηρεσίες του στο δίκτυο των Windows του εργαστηρίου χρησιμοποιείται επίσης και ως κανονικός σταθμός εργασίας, συνήθως από τον όποιο καθηγητή διδάσκει, με όλα τα προβλήματα που συνεπάγεται κάτι τέτοιο.


Το συγκεκριμένο εργαστήριο είχε και ένα debian server σε εντελώς γυμνή μορφή (motherboard, τροφοδοτικό, δίσκος μέσα στο rack με τα δικτυακά). Το συγκεκριμένο μηχάνημα εξυπηρετούσε το debian το οποίο ήταν dual boot στο εργαστήριο, ως NIS/NFS server. Με την φετινή επανεγκατάσταση του εργαστηρίου, τα μηχανήματα δεν είναι πλέον dual boot (αν και έχει μείνει χώρος στους δίσκους αν θελήσουμε να το κάνουμε αργότερα). Όλα τα μαθήματα που σχετίζονται με *NIX διδάσκονται στο FreeBSD XDMCP εργαστήριο μας. Το μηχάνημα αυτό λοιπόν περισσεύει και θα μπορούσε να γίνει άριστος Domain Controller.


Θα μπορούσα φυσικά να εγκαταστήσω τον (αγορασμένο) Windows 2003 Server σε αυτό το μηχάνημα, αλλά γιατί; Σκέφτηκα ότι δεν έχει κάτι ιδιαίτερο να μου προσφέρει: το μόνο που χρειάζομαι είναι SMB file sharing, Domain login και roaming profiles. Κάτι το οποίο μπορεί να γίνει με το γνωστό μας Samba. Διαβάστε λοιπόν πως να κάνετε το FreeBSD Server σας Windows Domain Controller!



Εγκατάσταση Samba


Πολύ απλή ιστορία: Απλά εγκαταστήστε το port net/samba34. Χρησιμοποίησα τις παρακάτω επιλογές κατά τη μεταγλώττιση (επιλογή στο διάλογο config που εμφανίζεται):

WITHOUT_LDAP=true
WITHOUT_ADS=true
WITHOUT_CUPS=true
WITH_WINBIND=true
WITHOUT_SWAT=true
WITHOUT_ACL_SUPPORT=true
WITHOUT_AIO_SUPPORT=true
WITHOUT_FAM_SUPPORT=true
WITHOUT_SYSLOG=true
WITHOUT_QUOTAS=true
WITHOUT_UTMP=true
WITHOUT_PAM_SMBPASS=true
WITHOUT_DNSUPDATE=true
WITHOUT_AVAHI=true
WITHOUT_EXP_MODULES=true
WITH_POPT=true
WITHOUT_MAX_DEBUG=true
WITHOUT_SMBTORTURE=true


Δεν έχω ανάγκη για LDAP και ούτε για CUPS καθώς το εργαστήριο δεν έχει εκτυπωτή. Αντίθετα ενεργοποίησα το Winbind (WINS server) γιατί σε προηγούμενες εμπειρίες μου με αντίστοιχα πειράματα είχα προβλήματα όταν έλειπε. Με την εγκατάσταση του Samba server χρειάζεται να προσθέσουμε στο /etc/rc.conf:

samba_enable="YES"
winbindd_enable="YES"


Ένα απλό αρχείο για το configuration είναι το παρακάτω. Αποθηκεύστε το στο /usr/local/etc/smb.conf:

#======================= Global Settings =====================================
[global]
workgroup = THEDOMAIN
server string = THESERVER (SMB)
security = user
log file = /var/log/samba34/log.%m
max log size = 50
passdb backend = tdbsam
os level = 35
domain master = yes
preferred master = yes
domain logons = yes
logon path = \\%L\Profiles\%U
logon drive = H:
wins support = yes


#============================ Share Definitions ==============================
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
map hidden = yes
create mask = 0755

[netlogon]
comment = Network Logon Service
path = /usr/local/samba/lib/netlogon
guest ok = yes
admin users = root, sonic
writable = no

[Profiles]
path = /usr/local/samba/profiles
read only = no
browseable = no
guest ok = yes


Ξεκινήστε την υπηρεσία δίνοντας:

# /usr/local/etc/rc.d/samba start


Δημιουργία Χρηστών


Για να προσθέσετε ένα χρήστη στο Samba server, θα πρέπει να διαθέτει UNIX account. Χρησιμοποιήστε το adduser script (ή την pw αν προτιμάτε) για να προσθέσετε έναν. Στο παράδειγμα μας, έστω ότι έχουμε προσθέσει το χρήστη student. Μπορείτε να του δώσετε ως shell το nologin. Για να τον προσθέσετε στο Samba server, δώστε:

# pdbedit -a -u student


Προσθέστε το χρήστη root καθώς και το δικό σας λογαριασμό στο Samba server:

# pdbedit -a -u root
# pdbedit -a -u sonic


Για όλους αυτούς τους λογαριασμούς θα χρειαστεί να δώσετε password. Δεν είναι απαραίτητο να είναι ίδιος με το UNIX password.

Δημιουργήστε ένα group ntadmins στο οποίο θα βάλετε το δικό σας account και το root. Έτσι θα μπορείτε να διαχειρίζεστε ως domain admin τα μηχανήματα. Δημιουργήστε επίσης ένα group users στο οποίο θα προσθέσετε όλους τους απλούς χρήστες των windows. Μπορείτε να χρησιμοποιήσετε την εντολή pw ή το sysinstall για να προσθέσετε αυτά τα groups εύκολα. Αμέσως μετά:

# pw groupmod ntadmins -m sonic,root
# pw groupmod users -m student


Και τώρα το σημαντικό: Θα πρέπει το group ntadmins να αντιστοιχισθεί στους Domain Admins του Windows network. Αντίστοιχα, θα πρέπει να γίνει αντιστοίχιση του group users στους Domain Users:

# net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d
# net groupmap add ntgroup="Domain Users" unixgroup=users rid=513 type=d


Τέλος, δημιουργήστε τους καταλόγους που απαιτούνται για τα logon scripts και τα profiles των χρηστών:

# mkdir -p /usr/local/samba/lib/netlogon/scripts
# mkdir -p /usr/local/samba/profiles


Δημιουργία Λογαριασμών Μηχανημάτων


Δημιουργήστε το group machines μέσω του pw ή του sysinstall. Θα πρέπει να δημιουργήσετε ένα λογαριασμό για κάθε μηχάνημα που θα ανήκει στο domain. Παρακάτω δείχνουμε ένα παράδειγμα μέσω του adduser, όπου προσθέτουμε το μηχάνημα PC1:

# adduser

Username: PC1$
Full name: Workstation 1
Uid (Leave empty for default):
Login group [PC1$]: machines
Login group is machines. Invite PC1$ into other groups? []:
Login class [default]:
Shell (sh csh tcsh bash rbash nologin) [sh]: nologin
Home directory [/home/PC1$]: /dev/null
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]: yes
Lock out the account after creation? [no]:
Username : PC1$
Password :
Full Name : Workstation 1
Uid : 2038
Class :
Groups : machines
Home : /dev/null
Home Mode :
Shell : /usr/sbin/nologin
Locked : no
OK? (yes/no): yes


Καθώς βλέπετε, στο λογαριασμό του μηχανήματος πρέπει να προσθέσουμε στο όνομα ένα $. Έπειτα προσθέτουμε το λογαριασμό αυτό στη βάση δεδομένων του Samba server, αλλά εδώ χωρίς το $:

# pdbedit -a -m PC1


Τελικές ρυθμίσεις


Στον κατάλογο profiles, δημιουργήστε τον κατάλογο που θα αποθηκεύσει τις ρυθμίσεις του λογαριασμού student:

# mkdir -p /usr/local/samba/profiles/student
# chown -R student:users /usr/local/samba/profiles/student


Στο μηχάνημα Windows (PC1 στο παράδειγμα μας), κάντε login ως τοπικός administrator και χρησιμοποιήστε την τυπική διαδικασία για να δηλώσετε το μηχάνημα ως μέλος του domain. Συνίσταται επίσης να ενεργοποιήσετε το Wins resolution από τις ρυθμίσεις δικτύου και να δηλώσετε ως wins server το IP του server σας. Μια καλή ιδέα είναι επίσης να ενεργοποιήσετε το DNS και να ρυθμίσετε το FreeBSD σας και ως DNS server.

Μετά την επιτυχή είσοδο του μηχανήματος στο domain, κάντε login ως student. Το προφίλ του λογαριασμού θα αποθηκευθεί στο /usr/local/samba/profiles/student. Μετά την επιτυχή πρώτη είσοδο και ρύθμιση του προφίλ, μπορείτε να το κλειδώσετε αν θέλετε (mandatory profile):

# cd /usr/local/samba/profiles/student
# mv NTUSER.DAT NTUSER.MAN


Χρησιμοποιήστε την ίδια διαδικασία για να προσθέσετε όσα άλλα μηχανήματα και χρήστες χρειάζεστε. Συγχαρητήρια, έχετε ένα Windows Domain Controller χωρίς ιούς! Τυχαίο;

Saturday, October 23, 2010

Σειριακό Τερματικό και Σειριακή Κονσόλα στο FreeBSD


Ίσως με πείτε και αναχρονιστικό, αλλά είχα πολλά χρόνια να ασχοληθώ με σειριακές επικοινωνίες! Θα μου πείτε ποιος χρειάζεται σήμερα σειριακά τερματικά; Ακόμα και αν έχουμε headless μηχανήματα υπάρχει πάντα η δυνατότητα του ssh. Βέβαια μια κανονική σειριακή κονσόλα - και όχι απλό τερματικό - μας δίνει τη δυνατότητα να έχουμε όλα τα μυνήματα ήδη από την εκκίνηση του μηχανήματος καθώς και single user mode. Έτσι μπορούμε πραγματικά να αποσυνδέσουμε το πληκτρολόγιο και οθόνη από το server μας γνωρίζοντας ότι μπορούμε να κάνουμε τα πάντα από την σειριακή κονσόλα.

Ωστόσο το παραπάνω μίνι project είχε στη δική μας περίπτωση ένα άλλο πιο προφανή σκοπό: καθώς τα σειριακά ή "κουτά" τερματικά αναφέρονται ήδη στην ύλη του μαθήματος "Δίκτυα Υπολογιστών" των ΕΠΑΛ, είναι μια καλή ευκαιρία να δουν και οι μαθητές πως λειτουργεί στην πράξη κάτι τέτοιο και τι δυνατότητες και περιορισμούς έχει. Όπως βλέπετε και στη φωτογραφία, εγκαταστήσαμε το τερματικό μας σε μια γωνιά του Εργαστηρίου (το οποίο είναι ήδη βασισμένο σε FreeBSD) και αναρτήσαμε και μια αρκετά καλή περιγραφή για το τι είναι και πως λειτουργεί. Και φυσικά κάθε μαθητής μπορεί να το δοκιμάσει μόνος του!


Σειριακό Τερματικό


Είναι αρκετά απλό στην πραγματικότητα. Χρειάζεται το κεντρικό σας μηχάνημα να διαθέτει σειριακή θύρα. Σε πολλά καινούρια μηχανήματα η θύρα αυτή απουσιάζει. Ρίξτε ωστόσο μια ματιά στην μητρική: είναι αρκετά πιθανό να διαθέτει κάποιο header στο οποίο να μπορεί να συνδεθεί η αντίστοιχη καλωδιοταινία που καταλήγει στο γνωστό μας βύσμα DB9 (που στην πραγματικότητα λέγεται DE9). Για τερματικό μπορείτε να χρησιμοποιήσετε πρακτικά ένα οσοδήποτε παλιό μηχάνημα: στην πιο απλή περίπτωση, μπορείτε σε αυτό να εκτελέσετε το παλιό (κακό) DOS - ακόμα και από δισκέτα - και ένα πρόγραμμα σειριακής επικοινωνίας / εξομοίωσης τερματικου. Στη δική μας περίπτωση κάναμε ακριβώς αυτό: χρησιμοποιήσαμε το telix, πρόγραμμα για DOS. Το μηχάνημα που χρησιμοποιήσαμε για τερματικό είναι ένα Pentium 200Mhz (αρκετά ισχυρό για αυτή τη χρήση!) αλλά εύκολα μπορείτε να βάλετε ακόμα και... 8088. Φτιάξαμε ένα συνηθισμένο καλώδιο τύπου null modem και ακολουθήσαμε τις απλές οδηγίες στο FreeBSD Handbook:

http://www.freebsd.org/doc/el/books/handbook/term.html

Για μια απλή σειριακή κονσόλα, το μόνο που χρειάζεται είναι η παρακάτω γραμμή στο /etc/ttys:

ttyu0    "/usr/libexec/getty std.115200"    vt100    on  secure


Αν είστε λίγο παρανοικός ίσως θέλετε να μετατρέψετε το "secure" σε "insecure" ώστε να μην επιτρέπεται το root login μέσω της σειριακής ;)

Προσέξτε ότι σε FreeBSD 8.x η πρώτη σειριακή θύρα (η γνωστή μας COM1) θα είναι ttyu0 ενώ σε 7.χ θα είναι ttyd0. To 115200 δίνει την ταχύτητα της σύνδεσης. Αν χρησιμοποιείτε ένα πραγματικά παλιό μηχάνημα σαν τερματικό το πιθανότερο είναι να μην μπορέσετε να ανεβείτε τόσο ψηλά και να πρέπει να περιοριστείτε στα 9600 bps. Αμέσως μετά, το μόνο που χρειάζεται να κάνετε είναι:

# kill -HUP 1

ώστε η init να ξαναδιαβάσει το /etc/ttys και να ξεκινήσει η getty να εκτελείται στη σειριακή θύρα. Από τη μεριά του τερματικού, έχοντας συνδέσει το σειριακό καλώδιο μπορούμε να ρυθμίσουμε την επικοινωνία μας:

Ταχύτητα: 115200 (ή όσο βάλαμε στη γραμμή παραπάνω)
Data bits: 8
Parity: None
Stop bits: 1

το γνωστό δηλ. στους παλιούς 115200,8,Ν,1 ;) Η ρύθμιση γίνεται στο πρόγραμμα σειριακής επικοινωνίας που έχουμε εγκαταστήσει. Αν για κάποιο λόγο τρέχετε Windows (περαστικά σας) μπορείτε να χρησιμοποιήσετε το hyperterminal.

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

Σειριακή Κονσόλα



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

http://www.freebsd.org/doc/el/books/handbook/serialconsole-setup.html

Η διαδικασία γίνεται προσθέτοντας τις παρακάτω γραμμές στο αρχείο /boot/loader.conf:

boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
console="comconsole,vidconsole"


Με αυτές τις επιλογές ενεργοποιείται ταυτόχρονα τόσο η σειριακή όσο και η κανονική κονσόλα (multicons), στο επόμενο boot φυσικά. Προσέξτε την επιλογή comconsole_speed που καθορίζει προσαρμοσμένη ταχύτητα 115200. Αν δεν τη βάλετε, η ταχύτητα σας θα μείνει στην προεπιλεγμένη των 9600 bps.

Βέβαια και εμείς που τη βάλαμε δεν έγινε τίποτα: Η σειριακή κονσόλα πεισματικά παρέμεινε στα 9600 bps. Δοκιμάσαμε και με FreeBSD 7.X για να σιγουρευτούμε ότι δεν πρόκειται για κάποιο bug/feature του 8.X, αλλά δεν άλλαξε τίποτα. Τελικά καταλήξαμε στην εναλλακτική λύση που περιγράφεται στο Handbook, δηλ. την επαναμεταγλώττιση και εγκατάσταση των boot blocks:

# cd /usr/src/sys/boot/
# make clean
# make BOOT_COMCONSOLE_SPEED=115200
# make install


Μετά από αυτό, το serial console λειτούργησε υπέροχα στα 115200 bps. Μπορείτε να δείτε το ταυτόχρονο boot (vidconsole,comconsole) στο δοκιμαστικό μηχάνημα μου:


Saturday, July 3, 2010

Dual Boot Win7 + FreeBSD και χαζοί περιορισμοί της MS

Όχι δεν αλλαξοπίστησα για τα Windows 7! Απλώς θα χρειαστώ ένα μηχάνημα σχετικά φορητό αυτές τις μέρες για να καθαρίσω μερικούς ιούς από άλλα μηχανήματα (συνδέοντας πάνω τους δίσκους τους). Έχω ένα ωραίο atom σε mini-itx κουτί, το οποίο πραγματικά περισσεύει και έτσι είναι για πειράματα και τέτοιους είδους εργασίες. Χωράει άνετα στο backpack μου και μεταφέρεται παντού.
Το μηχάνημα αυτό είχε μέχρι στιγμής FreeBSD (τι παράξενο...) και αποφάσισα ότι είναι το κατάλληλο να βάλω windows για τον παραπάνω σκοπό.

Ξεκίνησα το FreeBSD σε single user mode, προσάρτησα τον εξωτερικό μου δίσκο:

mount /dev/da0s2d /mnt

και μερικά γρήγορα dumps αποθήκευσαν το σύστημα μου:

cd /mnt
dump -0 -au -h0 -f rootfs.dump /
dump -0 -au -h0 -f varfs.dump /var
dump -0 -au -h0 -f usrfs.dump /usr

So far so good. Έσβησα τα πάντα, εγκατέστησα τα windows, χωριστό partition για το λειτουργικό και για τα δεδομένα (που δεν πρόκειται να υπάρξουν ποτέ, αλλά δεν πειράζει) και εγκατέστησα ότι θα χρειαστώ. Όταν έμεινα ικανοποιημένος από την εγκατάσταση, αποφάσισα να ξαναβάλω και το FreeBSD στον υπόλοιπο δίσκο (τεράστιος για πειράματα, 500Gb).

To θέμα είναι πως θα επιλέγω μεταξύ λειτουργικών. Παλιότερα (στα Vista) είχα χρησιμοποιήσει σε αντίστοιχες περιπτώσεις με μεγάλη επιτυχία το πρόγραμμα EasyBCD. Αλλά σήμερα αποφάσισα να ακολουθήσω μια άλλη τακτική: Θα χρησιμοποιούσα το fdisk στο FreeBSD και το Computer Management / Disk Administrator από τα Windows για να κάνω κάθε φορά active το partition του λειτουργικού που επιθυμώ. Όπως είναι γνωστό τα Windows θα χρησιμοποιήσουν το MBR ενώ στο FreeBSD μπορώ σίγουρα να πω να μην το πειράξει. Μια χαρά μέχρι εδώ.

Boot λοιπόν με το LiveFS του FreeBSD, δημιουργία του slice από το fdisk του sysinstall με Leave the MBR untouched και έξοδος στο fixit. Εδώ φτιάχνω τα partitions με την bsdlabel:

bsdlabel -w /dev/ad4s4

Επεξεργασία με το χέρι:

bsdlabel -e /dev/ad4s4

Εγκατάσταση boot blocks:

bsdlabel -B /dev/ad4s4

Newfs στα partitions:

newfs /dev/ad4s4a
newfs -U /dev/ad4s4d
newfs -U /dev/ad4s4e
newfs -U /dev/ad4s4f

Mount στον εξωτερικό δίσκο:

mkdir /disk
mount /dev/da0s2d /disk

Και restore τα partitions:
mount /dev/ad4s4a /mnt
cd /mnt
TMPDIR=/mnt restore -rvf /disk/rootfs.dump

Πριν την αποπροσάρτηση, χρειάζεται μια μικρή διόρθωση στο /mnt/etc/fstab καθώς το slice έχει αλλάξει. Αυτό έγινε με το vi.

cd /
umount /mnt
mount /dev/ad4s4d /mnt
cd /mnt
TMPDIR=/mnt restore -rvf /disk/varfs.dump
cd /
umount /mnt
mount /dev/ad4s4f /mnt
cd /mnt
TMPDIR=/mnt restore -rvf /disk/usrfs.dump

Με την ολοκλήρωση της διαδικασίας, το slice του FreeBSD είναι ήδη active (από την fdisk του sysinstall), οπότε έξοδος από το fixit, επανεκκίνηση και σύντομα θα είμαστε στην κονσόλα του FreeBSD. Πρέπει μόνο να θυμηθούμε να φτιάξουμε το sticky bit στο /tmp και /var/tmp:

chmod -R 1777 /tmp /var/tmp

Ωρα να ξεκινήσουμε ξανά τα Windows. Χρησιμοποιούμε την fdisk για να αλλάξουμε το active partition στο 1.

sysctl kern.geom.debugflags=16
fdisk -a /dev/ad4

Επανεκκίνηση και είμαστε στα Windows. Είμαστε έτοιμοι να κάνουμε ξανά την αλλαγή του active partition για να γυρίσουμε στο FreeBSD. Control Panel, Computer Management, Administrative Tool, Disk Administrator - με δεξί κλικ και Run as Administrator για να είμαστε σίγουροι ότι δεν θα πεταχτεί κανένα UAC από πουθενά. Και να η εικόνα που θα δούμε:



Όλα καλά θα πείτε. Για δοκιμάστε όμως να κάνετε ενεργό το partition του FreeBSD:



Healthy, primary partition, αλλά όχι κύριε δεν θα το κάνετε active. Οι εντολές είναι ανενεργές. Γιατί φοβόμαστε ότι δεν ξέρετε τι κάνετε αν και το εργαλείο βρίσκεται στα Administrative Tools. Και για να παραφράσω, αγαπητή MS αν πιστεύεις ότι τα εργαλεία διαχείρισης είναι για χαζούς Administrators, μόνο χαζοί Administrators θα τα χρησιμοποιούν. Ή μάλλον, μόνο χαζοί γενικώς.

Και για να είστε σίγουροι ότι το εργαλείο είναι επίτηδες crippled, το παραπάνω γίνεται μια χαρά από τη γραμμή εντολών. All Programs -> Accessories -> Command prompt (δεξί κλικ, Run as Administrator):

diskpart

DISKPART> select disk=0
Disk 0 is now the selected disk
DISKPART> list partition
(...list of partitions... το FreeBSD είναι το 4)
DISKPART> select partition=4
Partition 4 is now the selected partition
DISKPART> active
DiskPart marked the current partition as active

Reboot, και είμαστε πίσω στο FreeBSD. Τουλάχιστον εκεί δεν γράφεις 100 εντολές για να κάνεις active ένα slice. Και το σύστημα δεν θεωρεί τους administrators ηλίθιους!