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, September 1, 2012

Παιχνίδια σε Python & Pygame - Το Βιβλίο

Η ιδέα για αυτό το βιβλίο ξεκίνησε κοντά στις γιορτές Χριστουγέννων του 2011. Είχα αναλάβει το μάθημα "Εφαρμογές Πολυμέσων" της Γ' τάξης των ΕΠΑΛ και ήθελα να κάνω κάτι αρκετά διαφορετικό από τα καθιερωμένα. Τι νόημα έχει ένα τέτοιο μάθημα αν δεν φτιάξεις πραγματικά μια πολυμεσική εφαρμογή; Και τι καλύτερο από ένα παιχνίδι - κίνηση, γραφικά, ήχος, συνδυάζει όλα τα στοιχεία πολυμέσων.

Μετά τα πρώτα μαθήματα - όπου πάντα διδάσκουμε στοιχεία πολυμέσων, είδη αρχείων εικόνας, ήχου κλπ - μεσολαβούσαν οι διακοπές των Χριστουγέννων. Σκέφτηκα ότι θα ήταν μια ευκαιρία να γράψω μια σειρά μαθημάτων για δημιουργία παιχνιδιών σε Python & Pygame και να αρχίσω να τη χρησιμοποιώ αμέσως μετά τις γιορτές.

Καθώς επεξεργαζόμουν την ιδέα, ο Χρήστος Βαρελάς, εκδότης του deltaHacker αναζητούσε ιδέες για νέα άρθρα. Συμφωνήσαμε λοιπόν να γίνει το Python Game Programming μια σειρά άρθρων στο περιοδικό (αλλά και στο site του περιοδικού) και να κυκλοφορήσει σε free ebook με την ολοκλήρωση της.

Η σειρά πράγματι ξεκίνησε στο τεύχος Φλεβάρη 2012 και ολοκληρώθηκε στο τεύχος Αυγούστου 2012. Ταυτόχρονα γίνονταν και η μεταφορά της στο XeLaTeX για τη δημιουργία του βιβλίου. Να συμπληρώσω εδώ ότι η εργασία παρουσιάστηκε και στην Έκθεση Μαθητικής Δημιουργίας στα Χανιά όπου και είχε μεγάλη απήχηση!

Για την υποστήριξη του βιβλίου και τη διανομή των προγραμμάτων και των αρχείων υποστήριξης έχει δημιουργηθεί ο ιστότοπος pygamegr.wordpress.com. Για τους βιαστικούς δίνουμε παρακάτω απευθείας τους πιο βασικούς συνδέσμους:

Στο βιβλίο παρέχονται επίσης και άλλα μικρότερα προγράμματα και παραλλαγές των παραπάνω και είναι κατάλληλο για (αυτο)διδασκαλία τόσο μαθητών όσο και ενηλίκων στον προγραμματισμό με ευχάριστο τρόπο!

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

Saturday, August 18, 2012

Python Game Programming

Pygame Invaders

Με την ολοκλήρωση της σειράς Python Game Programming στο περιοδικό deltaHacker μπορείτε πλέον να κατεβάσετε στη πλήρη του μορφή και το τελευταίο παιχνίδι που δημιουργήσαμε για τη σειρά, γνωστό ως Pygame Invaders.


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

Παιχνίδια σε Python και Pygame

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

Εννοείται φυσικά ότι τα παιχνίδια τρέχουν σε οποιοδήποτε λειτουργικό, Windows, OSX, Linux, BSD αρκεί να έχετε Python 2.7 και Pygame εγκατεστημένα. Οδηγίες για τα περισσότερα λειτουργικά θα βρείτε στο pygame.org.

Καλή διασκέδαση και καλά ξενύχτια! (στον κώδικα πάντα).

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!

Thursday, April 26, 2012

Python Game Programming

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

Με βάση το παραπάνω και καθώς φέτος διδάσκω το μάθημα Εφαρμογές Πολυμέσων, σκέφτηκα ότι είναι πράγματι ευκαιρία να φτιάξουμε κάτι αληθινά ενδιαφέρον αντί για τις χαζές παρουσιάσεις σε Powerpoint ή (μη χειρότερα) Flash που κάνουν συνήθως σε αυτό το μάθημα. Αν σκεφτείτε μάλιστα ότι το εργαστήριο μου τρέχει FreeBSD, ένας λόγος παραπάνω :)

Ταυτόχρονα σκέφτηκα ότι θα ήταν ενδιαφέρον να δημοσιευτεί μια σειρά άρθρων προγραμματισμού για αρχαρίους που να βασίζεται στη δημιουργία παιχνιδιών - όπως δηλ. μάθαμε και εμείς προγραμματισμό πριν (πολλά) χρόνια στους οικιακούς μας υπολογιστές. Δυστυχώς στο μεταξύ η αμεσότητα των πρώτων αυτών υπολογιστών χάθηκε μέσα σε διάφορες γλώσσες προγραμματισμού, λειτουργικά, API, OpenGL, DirectX και δεν ξέρω και εγώ τι άλλο.  Η αρχική δυνατότητα να γράψεις ένα προγραμματάκι 20 γραμμές που να κινεί μια μπάλα ή ένα διαστημοπλοιάκι στην οθόνη και να δίνει τη χαρά της δημιουργίας φαίνεται ότι είχε περάσει ανεπιστρεπτί.

Ευτυχώς δεν είναι ακριβώς έτσι: Η python και η βιβλιοθήκη pygame δίνουν αυτή ακριβώς τη δυνατότητα προσαρμόσμενη στα σύγχρονα δεδομένα αλλά πάντα με αρκετή ευκολία ώστε ο αρχάριος να μην απογοητευτεί αλλά αντίθετα να κολλήσει στο αντικείμενο!  Η σειρά άρθρων για το pygame δημοσιεύεται στο περιοδικό deltaHacker.  Με την ολοκλήρωση της θα γίνει και η δημοσίευση των άρθρων σε μορφή βιβλίου που θα μπορείτε να κατεβάσετε και να χρησιμοποιήσετε στη διδασκαλία.

Για την ώρα μπορείτε να κατεβάσετε τα προγράμματα από το site που έχει δημιουργηθεί για την υποστήριξη του μαθήματος:


Μην παραλείψετε επίσης να επισκεφτείτε την ιστοσελίδα του περιοδικού deltaHacker όπου θα βρείτε και κάποια συμπληρωματικά - βοηθητικά άρθρα.

Το όλο εγχείρημα θα παρουσιάστει επίσης στις 11 Μαίου στην Έκθεση Μαθητικής Δημιουργίας Μαθητών Πληροφορικής που θα πραγματοποιηθεί στα Χανιά, στο Κέντρο Αρχιτεκτονικής Μεσογείου.

Tuesday, April 24, 2012

Το Υλικό του Υπολογιστή... με εικόνες!

Θέλετε να διδάξετε το υλικό του υπολογιστή με απλά λόγια; Έχετε ξεμείνει μήπως με κάποιο από τα αρχαιολογικά βιβλία "Συντήρηση Η/Υ" που δίνονται στα ΕΠΑΛ; Είναι δύσκολο να μιλάει κανείς για Windows... 98 το 2012. Για να μην πούμε ότι δεν είναι δυνατόν να διδάξετε συντήρηση λογισμικού (στο οποίο ουσιαστικά αναφέρεται το μάθημα) χωρίς να διδάξετε πρώτα το το υλικό του υπολογιστή. Καθώς το αντίστοιχο μάθημα καταργήθηκε μαζί με τα ΤΕΕ, αναγκαστικά η ύλη του συνδυάζεται με αυτή του μαθήματος της συντήρησης.
Σε κάθε περίπτωση όμως, αν θέλετε ένα οδηγό στα εσωτερικά του PC - και μάλιστα γραμμένο με ενδιαφέροντα και γλαφυρό τρόπο - κατεβάστε την πρώτη έκδοση του φυλλαδίου:

To Υλικό του Υπολογιστή με Εικόνες

Μελλοντικά το κείμενο θα εμπλουτιστεί με:

  • Πως λειτουργεί - Αρχές λειτουργίας των βασικών εξαρτημάτων του Η/Υ
  • Εγκατάσταση και Συντήρηση Λογισμικού

Το κείμενο διατίθεται φυσικά με άδεια Creative Commons και αν θέλετε να το τροποποιήσετε μπορείτε να το κατεβάσετε σε μορφή odt από εδώ.


Thursday, April 19, 2012

Τεχνικοί Ορισμοί

Γράψτε Σωστούς Τεχνικούς Ορισμούς!


Πολλές φορές παρατηρώ τους μαθητές μου να κατανοούν μια έννοια και να μην μπορούν να την εκφράσουν σωστά. Αν και οι λόγοι είναι πολλοί (δυστυχώς ένας από αυτούς είναι η κακή γνώση της γλώσσας) είναι γεγονός ότι πολλές φορές ζητάμε να μας περιγράψουν τεχνικές έννοιες χωρίς να έχουν διδαχθεί τα βασικά στοιχεία ενός καλού τεχνικού ορισμού. Στην πραγματικότητα είναι μια σχετικά απλή διαδικασία αν ακολουθήσουμε ορισμένα απλά βήματα και κατανοήσουμε τα διάφορα τμήματα ενός ορισμού.

Στο φυλλάδιο που μπορείτε να κατεβάσετε από τον παρακάτω σύνδεσμο θα βρείτε γενικές οδηγίες για τη συγγραφή τεχνικών ορισμών καθώς και μερικές ασκήσεις που μπορείτε να δοκιμάσετε ή να δώσετε σε μαθητές σας. Είναι σίγουρο ότι θα σας βοηθήσουν σε μαθήματα τα οποία έχουν ιδιαίτερο θεωρητικό περιεχόμενο (π.χ. Δίκτυα Υπολογιστών) και όπου πολλές φορές ζητούνται ορισμοί και σε επίπεδο Πανελλαδικών Εξετάσεων.


Γράφοντας Επιτυχημένους Τεχνικούς Ορισμούς

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 κατά τις ανάγκες σας.