Τετάρτη 30 Μαρτίου 2011

Virtual USB Analyzer


Για όσους γράφουν ή φιλοδοξούν να γράψουν USB drivers για το Linux, ένα από τα βασικά εργαλεία είναι το usbmon, δηλαδή το υποσύστημα του πυρήνα που παρακολουθεί τα πακέτα που μεταφέρονται μεταξύ drivers και controller. Με αυτό μπορούμε να υλοποιήσουμε το αντίστοιχο του tcpdump για usb, αλλά μόλις πάρουμε ένα τεράστιο log τι γίνεται;

Τρίτη 29 Μαρτίου 2011

openssh-server και reverse DNS

Αν ο openssh server αργεί αδικαιολόγητα να σας δείξει το password prompt
σε local μηχάνημα ή Virtual Machine (debian ή ubuntu), προσθέστε στο /etc/ssh/sshd_config:
UseDNS no
και το πρόβλημα θα διορθωθεί.

Παντελής

"Καταλαμβάνοντας" απενεργοποιημένους windows υπολογιστές μέσω PXE και WoL

Ας πούμε ότι είστε σε ένα περιβάλλον όπου υπάρχουν αρκετοί υπολογιστές οι οποίοι είναι κλειστοί. Ως αυθεντικό geek, θα θέλατε να τους χρησιμοποιήσετε όλους εσείς (distcc κανείς?) αλλά το πρόβλημα είναι ότι το μόνο λειτουργικό που έχουν εγκατεστημένο είναι τα windows και αυτοί που τους χρησιμοποιούν κανονικά θα θύμωναν ιδιαίτερα αν αλλάζατε με οποιοδήποτε τρόπο το δίσκο τους (π.χ., αν εγκαθιστούσατε Linux, έστω και dual-boot).

Ή έστω ότι έχετε εγκαταστήσει Linux σαν dual-boot σε όλους αλλά θέλετε να μην (χρειάζεται να) το γνωρίζει αυτό κανείς άλλος, δηλαδή το default boot selection να είναι τα windows αλλά παρόλα αυτά να μπορείτε να τους έχετε όλους στη διάθεσή σας χωρίς να χρειάζεται να σηκωθείτε από τη θέση σας.

Η λύση είναι να χρησιμοποιήσουμε μια σειρά από χαρακτηριστικά που έρχονται προεγκατεστημένα στα σύγχρονα desktop: Wake on LAN και PXE.

Μετατροπή desktop μηχανήματος σε headless server στα γρήγορα με ubuntu και FreeNX

Ας υποθέσουμε ότι έχετε στο γραφείο σας ένα (σχετικά ισχυρό και αθόρυβο) laptop και ένα αρκετά ισχυρότερο αλλά θορυβώδες desktop. Θα μπορούσατε να ασχοληθείτε ώστε να κάνετε το desktop (αρκετά πιο) αθόρυβο αλλά αυτό κοστίζει και χρόνο και χρήμα. Η εύκολη και γρήγορη λύση σε πολλές περιπτώσεις είναι να το απομακρύνετε απλά από το χώρο σας μετατρέποντάς στο σε headless server.

ReactOS 0.3.13 και υποστήριξη για ελληνικά!


Αρκετοί από εμάς γνωρίζουν το project ReactOS το οποίο προσπαθεί να προσφέρει στην κοινότητα ένα ελεύθερο λειτουργικό σύστημα 100% binary compatible με τα Windows.

Πρόσφατα (22 Μαρτίου, ακριβώς πάνω στα γενέθλιά μου, δεν είναι υπέροχο να είναι κανείς μέλος της κοινότητας του OSS; Παίρνεις δώρα όλη την ώρα :) ) το project δημοσίευσε την έκδοση 0.3.13 με αρκετές βελτιώσεις και σταθερότητας αλλά και λειτουργικότητας (π.χ., το skype 4 δουλεύει τώρα).

Δευτέρα 28 Μαρτίου 2011

Βίντεο διαλέξεων από MIT, Stanford και Berkeley

Πανεπιστήμια όπως το MIT, το Stanford και το Berkeley έχουν κατά καιρούς φιλοξενήσει μερικούς από τους καλύτερους καθηγητές του κόσμου στον τομέα τους. Είναι λοιπόν πολύ ευχάριστο ότι έχουν αποφασίσει να μοιραστούν με τον υπόλοιπο κόσμο βιντεοσκοπημένες διαλέξεις αυτών των καθηγητών.

Κυριακή 27 Μαρτίου 2011

Git get all branches

Πολλές φορές ένα remote git repository έχει πολλά branches και θέλουμε να τα κάνουμε track όλα. Στην περίπτωση αυτή μπορούμε να έχουμε ένα μικρό σκριπτάκι που κάνει το ακόλουθο:
#!/bin/bash
set -e

url="${1}"
git clone "${url}"
cd "${url##*/}"
for branch in $(git branch -a | grep remotes | grep -v "HEAD\|master"); do
git branch --track "${branch##*/}" "${branch}"
done
git fetch --all
git pull --all

Μπορείτε να το ονομάσετε gitall και να το καλείτε ως gitall <url>

Παντελής

Αντιγράφοντας 1 terabyte ...

Ένα από τα οικιακά μου projects αυτό το σαββατοκύριακο ήταν η αντιγραφή 1TB δεδομένων (virtual machine images, κώδικας, datafiles από πειράματα κλπ κλπ κλπ, πάνω από 200000 αρχεία στο σύνολο) από ένα (αναξιόπιστο πλέον λόγω hardware) usb εξωτερικό δίσκο σε μία ελαφρά πιο αξιόπιστη λύση (usb εξωτερικό case με θήκη για 2 δίσκους τους οποίους έχω κάνει software RAID-1 μέσω md, να 'ναι καλά το Linuxάκι).

Τώρα που επιτέλους η αντιγραφή τελείωσε, ορισμένα σχόλια, για όσους θα θελήσουν να κάνουν κάτι παρόμοιο:
  1. Χρησιμοποιήστε ξεχωριστό υπολογιστή, κατά προτίμηση σε άλλο δωμάτιο κλπ. Η αντιγραφή θα κρατήσει 2-3 μέρες με τις τυπικές ταχύτητες (USB 2.0 περίπου 20MB/s) και επειδή σε αρκετά σημεία ο ένας από τους 2 δίσκους θα "σκάσει" (δεν εννοώ ολική καταστροφή, απλά κάτι θα γίνει, π.χ., θα πέσει το ρεύμα και θα χαθεί o δίσκος από τα devices απότομα). Άρα δε θέλετε να έχετε το θόρυβο κλπ από τον υπολογιστή αυτόν στο κεφάλι σας όλο αυτό τον καιρό.
  2. Χρησιμοποιήστε rsync -avh --progress αντί για copy, αφού με αυτό τον τρόπο κάθε φορά που το copy θα "σκάει" θα μπορείτε να κάνετε resume και να πηγαίνει λίγο παραπέρα από την προηγούμενη φορά. Έτσι μπορείτε να είστε σχετικά βέβαιοι ότι αν ο ένας από τους 2 δίσκους δε σκάσει τελείως, το copy θα τελειώσει κάποτε ...
  3. Επειδή όπως είπαμε κανείς δε θέλει να κάθεται να νταντεύει ένα copy, η απλή λύση (don't you love unix) είναι rsync -avh --progress bla/ blo/ || mplayer metallica.mp3 και το volume στο full. Ο λόγος που δε βάζουμε απλά το rsync μέσα σε ένα endless loop είναι ότι συνήθως όταν σκάει το copy χρειάζεται ανθρώπινη επέμβαση στο hardware (aka βάλε - βγάλε το δίσκο στο USB port) για να μπορεί να συνεχίσει
Θα ήθελα να παρατηρήσω εδώ αυτό που λένε κάποιοι χρήστες των windows ότι "το linux είναι μόνο για servers". Καθώς η τεχνολογία προχωράει, όλο και περισσότερες εργασίες που παλιότερα θα χρειαζόταν να γίνουν μόνο σε high end servers / datacenters γίνονται πλέον σπίτι μας (π.χ., το να παίζουμε με terabytes δεδομένων).

Σε αυτές τις περιπτώσεις όσοι χρησιμοποιούμε linux έχουμε πάντα δίπλα μας τα δοκιμασμένα και πιστά command-line tools για να "βγάλουμε το φίδι απ' την τρύπα" :)

Παντελής

Ubuntu administration: metapackages

Μετά από reinstall ή όταν φτιάχνουμε μια καινούργια debian/ubuntu-based εικονική μηχανή ή LiveCD/LiveDVD/chroot για κάποιο συγκεκριμένο σκοπό, χρειαζόμαστε ένα σύνολο από πακέτα εγκατεστημένα. Το να εγκατασταθούν αυτά τα πακέτα ένα-ένα με το χέρι είναι κάτι πολύ βαρετό, γι αυτό το debian συμπεριέλαβε από πολύ νωρίς την ιδέα των "metapackages". Πακέτα δηλαδή που δεν εγκαθιστούν αρχεία, αλλά είναι απλά ένα σύνολο από εξαρτήσεις (dependencies) προς τα πακέτα που θέλουμε να εγκαταστήσουμε.

Ο μικρός Παντελής μαθαίνει blogging :P

Το ομολογώ, οι ικανότητές μου αυτή τη στιγμή τείνουν στο μηδέν, αλλά θα μάθω σιγά-σιγά :P

Θα παραθέσω λοιπόν μερικά χρήσιμα links για δικό μου όφελος και αν κάποιος δει ποτέ αυτό το post μπορείτε να γράψετε και τα δικά σας tips/links :)

  • Google Analytics Τι καλύτερος τρόπος να σκοτώσει κάποιος την ώρα του από το να βλέπει τα στατιστικά για τα page views :P
  • Source Code Formatter Είμαι προγραμματιστής / sysadmin, οπότε λογικό είναι τα posts μου να περιέχουν κώδικα :)
Παντελής

Δημιουργία chroot για development

Αν ο κώδικας που γράφει κάποιος δεν έχει ιδιαίτερες απαιτήσεις (π.χ., βιβλιοθήκες ή εργαλεία) ούτε reverse dependencies (π.χ., αν γράφουμε λύσεις για τα προβλήματα στο project euler) τότε το να γίνει η ανάπτυξη στο ίδιο περιβάλλον που γίνονται και οι υπόλοιπες δουλειές στον υπολογιστή (π.χ., browsing, συγγραφή κειμένων) δεν δημιουργεί κανένα πρόβλημα.

Αν όμως οι φιλοδοξίες μας είναι μεγαλύτερες (π.χ., αλλαγές στο window manager ή στο office suite ή ακόμα και σε κάτι πιο θεμελιώδες όπως ο kernel ή ο boot loader) τότε κάποια μορφή "απομόνωσης" του περιβάλλοντος ανάπτυξης είναι απαραίτητη, για 2 κυρίως λόγους.

Σάββατο 26 Μαρτίου 2011

Editing your scripts in $PATH easily

Ένα μικρό αλλά χρήσιμο κολπάκι που χρησιμοποιώ συχνά στα "οικιακά" μου shell scripts είναι το παρακάτω. Στην αρχή του script μπορούμε να προσθέσουμε τον κώδικα:

if [ "x${1}" = "x-e" ]; then
${EDITOR:-editor} $0
exit 0
fi

Αυτό θα έχει ως συνέπεια να μπορούμε να κάνουμε edit κάθε script foo στο PATH (δηλαδή κάθε script που μπορούμε να τρέξουμε γράφοντας απλά το όνομά του) γράφοντας απλά "foo -e" αντί για "foo" και χωρίς να μας ενδιαφέρει το πού ακριβώς βρίσκεται το "foo".

Επειδή χρησιμοποιούμε το ${EDITOR:-editor} δίνουμε τη μεγαλύτερη δυνατή ευελιξία στο χρήστη. Μπορεί ή να χρησιμοποιήσει το default της εγκατάστασης (από τα alternatives) ή την προτίμησή του (π.χ., σκεφτείτε ένα server με πολλούς χρήστες που σε κάθε έναν αρέσει άλλος editor) μέσω του environment variable $EDITOR.

To /usr/bin/editor symlink είναι "debianism" βέβαια αν θυμάμαι καλά, οπότε μπορείτε να το αντικαταστήσετε με το όνομα του editor που προτιμάτε ή με αντίστοιχο μηχανισμό σε άλλες διανομές.

Παντελής

Αλουμινόχαρτο

Το πρόβλημα: σας έχει χαλάσει το mp3 player (δεν κάνει επαφή το jack του ακουστικού) ή δεν κάνει επαφή η μπαταρία στο mouse γιατί έχει χαλαρώσει το ελατήριο.

Η λύση: αλουμινόχαρτο :P

Debian administration: apt-cacher-ng

Αν έχετε περισσότερα από ένα μηχανήματα με debian/ubuntu στο σπίτι ή στο γραφείο, ή αν ασχολείστε ενεργά με την ανάπτυξη / συντήρηση / δοκιμή εφαρμογών και επομένως χρειάζεστε να μπορείτε να φτιάχνετε γρήγορα chroots ή εικονικές μηχανές με συγκεκριμμένα debian πακέτα και εκδόσεις, θα έχετε παρατηρήσει ότι ακόμα και με μια γρήγορη σύνδεση, το "κατέβασμα" των πακέτων κάθε φορά είναι η κύρια αιτία καθυστέρησης (bottleneck).

Η λύση στο πρόβλημα, είναι ένας τοπικός caching proxy για debian πακέτα. Μόλις δηλαδή τα πακέτα κατέβουν μία φορά, παραμένουν στο δίσκο σας και τις επόμενες φορές που θα ζητηθούν δε θα χρειαστεί να τα πάρετε από το internet.

Μέχρι και πριν από 1-2 χρόνια, οι λύσεις που κυκλοφορούσαν στα επίσημα αποθετήρια (apt-cacher γραμμένο σε python, apt-cacher-ng σε C, approx σε Ocaml) παρουσίαζαν διάφορα προβλήματα ειδικά κάτω από συνθήκες μεγάλου traffic ή αναξιόπιστης σύνδεσης με το internet.

Αυτά όμως πλέον ανήκουν στο παρελθόν και ο apt-cacher-ng προτείνεται πια ανεπιφύλακτα σε όλους όσους έχουν αρκετό χώρο στο δίσκο και θέλουν να μειώσουν σημαντικά το χρόνο αναμονής τους. Ενδεικτικά, ο χρόνος για το "χτίσιμο" ενός ubuntu maverick virtual machine για Qemu/KVM μέσω του ubuntu-vm-builder πέφτει από τα ~30 στα ~3 λεπτά σε ένα σχετικά γρήγορο σύστημα με "ζεστή" cache!!

Η εγκατάσταση του apt-cacher-ng είναι επίσης πανεύκολη (2 εντολές):

sudo apt-get install apt-cacher-ng
echo 'Acquire::http { Proxy "http://127.0.0.1:3142" ; };' |
sudo tee -a /etc/apt/apt.conf.d/98aptcacher

Αν έχετε εικονικές μηχανές, chroot, άλλα μηχανήματα στο δίκτυο κλπ το μόνο που χρειάζεται να κάνετε σε αυτά είναι

echo 'Acquire::http { Proxy "http://192.168.1.1:3142" ; }; |
sudo tee -a /etc/apt/apt.conf.d/98aptcacher

Όπου αντί για 192.168.1.1 βάζετε το κατάλληλο IP (ή hostname αν έχετε κάνει τις κατάλληλες ρυθμίσεις) του μηχανήματος που "τρέχει" το apt-cacher-ng και φροντίζετε το port 3142 να είναι ανοιχτό από το firewall σε αυτό το μηχάνημα.

Δυστυχώς δεν έχω βρει ακόμα κάτι αντίστοιχα κομψό για Fedora (όχι, το squid
δεν το θεωρώ κομψή λύση). Αν γνωρίζετε κάποιο τέτοιο proxy για .rpm
θα ενδιαφερόμουν πολύ να το μάθω :)

Παντελής

Δευτέρα 21 Μαρτίου 2011

Software RAID-1

Για να μην το ξεχνάω, τα βήματα για ένα καινούργιο
RAID-1 array (όχι primary) από command-line
σε debian:

  1. cfdisk /dev/sda (set partition type to "fd" linux RAID autodetect)
  2. apt-get install mdadm
  3. sfdisk -d /dev/sda | sfdisk /dev/sdb (copy over the partition table)
  4. mdadm --create /dev/md0 --chunk=4 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
  5. mdadm -Es | grep md0 >> /etc/mdadm/mdadm.conf
  6. update-initramfs -k all -u
  7. watch cat /proc/mdstat (περιμένουμε να συγχρονίσει)
  8. mkfs.ext4 /dev/md0 -L store (ή setup LVM)
  9. Setup fstab to mount /media/store on boot
  10. done!

Τετάρτη 16 Μαρτίου 2011

Wine και ελληνικά Fonts

Αν τρέχετε κάποια windows εφαρμογή στην οποία τα ελληνικά φαίνονται
περίεργα, μπορεί να φταίει το γεγονός ότι πολλές windows εφαρμογές
ζητούν τη γραμματοσειρά Tahoma explicitly by name ή ακόμα και by file(!).

Για να το αντιμετωπίσει αυτό το wine έρχεται με τη δική του 100% metric
compatible εκδοχή, δηλαδή όλοι οι χαρακτήρες σε όλα τα "point sizes"
έχουν το ίδιο μέγεθος σε pixels με αυτούς της Tahoma των Windows.

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

Η ιδανική λύση θα ήταν κάποιος να προσθέσει ελληνικούς χαρακτήρες
στην Tahoma του wine μέσω fontforge. Δυστυχώς κανείς δεν έχει προσφερθεί
μέχρι στιγμής ...

Ως τότε τα workarounds που γνωρίζω (σε Ubuntu 10.10 / debian testing)
είναι τα εξής:

1. Η απλή / αλλά μη συμβατή με το πνεύμα του Ελ. Λογισμικού λύση:
απλά εγκαθιστούμε την Tahoma των windows

wget http://www.kegel.com/wine/winetricks
sh winetricks tahoma


2. Η "brute force" λύση.
edit ~/.wine/system.reg

εκεί που λέει: Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes
προσθέτουμε τη γραμμή
"Tahoma"="Liberation Sans"
Αυτό μπορεί να γίνει και με wine regedit

Επίσης μετακινούμε τα αρχεία tahoma.ttf και tahomabd.ttf σε άλλο φάκελο
και λέμε στο dpkg να μην τα επαναφέρει όταν αναβαθμίσουμε το wine:

sudo mkdir /usr/share/fonts-noel
sudo dpkg-divert --divert /usr/share/fonts-noel/tahoma.ttf \
--rename /usr/share/wine/fonts/tahoma.ttf
sudo dpkg-divert --divert /usr/share/fonts-noel/tahomabd.ttf \
--rename /usr/share/wine/fonts/tahomabd.ttf

με αυτό τον τρόπο το wine θα αναγκαστεί να χρησιμοποιήσει τα system fonts του
Linux στα οποία τα ελληνικά φαίνονται σωστά.


Σημείωση: ίσως υπάρχει δυνατότητα επίλυσης και μέσω του

Software\\Microsoft\\Windows NT\\CurrentVersion\\FontLink\\SystemLink

κλειδιού στη "registry" του wine, αυτός ο τρόπος όμως μπορεί να κάνει το κείμενο
να φαίνεται αταίριαστο μεταξύ ελληνικών και αγγλικών (αφού έτσι τα ελληνικά
θα τα παίρνει από το system font και τα αγγλικά από την ενσωματωμένη Tahoma).

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





Δευτέρα 14 Μαρτίου 2011

LibreOffice vs OpenOffice σημειώσατε 1!

Πριν από 2 χρόνια, το καλοκαίρι του 2009, στα πλαίσια του
coding camp που διοργάνωσε τότε ο Chania Lug είχαμε
υλοποιήσει μεταξύ άλλων και ένα patch για το OpenOffice
για την υποστήριξη ελληνικού συστήματος αρίθμησης
στις λίστες.

Για την υποβολή του στο OpenOffice ακολουθήσαμε την
καθιερωμένη διαδικασία (attach στο bug, mark ως patch)
και υπήρξαν και ενθαρρυντικά σχόλια από έλληνες χρήστες
που είχαν ζητήσει αυτό το χαρακτηριστικό. Αποτέλεσμα;

Μετά από 1 χρόνο (!) μου στάλθηκε το copyright assignment
form (SCA). Και ενώ το υπέγραψα σχετικά άμεσα (εντός 3 ημερών)
έχει περάσει περίπου 1 χρόνος ακόμα και κανένα σχόλιο δεν
έχει γίνει από τους maintainers για αποδοχή ή απόρριψη ...

Αντίθετα, στο LibreOffice για το ίδιο ακριβώς κώδικα δε
χρειάστηκε καμμία γραφειοκρατική διατύπωση (το μόνο που
ζήτησαν είναι άδεια MPL/LGPLv3+ για το patch πράγμα εντελώς
λογικό) και το χαρακτηριστικό έγινε μέρος του LibreOffice εντός
3 ημερών από την υποβολή του patch!

Εσείς σε ποιο Opensource Office Suite θα διαλέγατε να συνεισφέρετε;





Κυριακή 13 Μαρτίου 2011

Μετατροπή σε mp4 για PSP

Καθώς στο στρατό το PSP κάνει θραύση, το πιο συνηθισμένο
αίτημα που είχα ως φαντάρος από συναδέλφους ήταν για μετατροπή
ταινίας από mpeg-2 σε mp4.

Ο τρόπος που δούλεψε για μένα (μια και δεν είχα και internet και
άρα μόνο τα ήδη εγκατεστημένα προγράμματα του Linux μπορούσα
να χρησιμοποιήσω):

mencoder -sws 9 -vf scale -zoom -xy 480 -ovc x264 -oac faac \
-faacopts br=64:mpeg=4:object=2:raw -channels 2 \
-srate 24000 \
-x264encopts crf=26:me=umh:me_range=16:subq=6:trellis=2:global_header:level_idc=30 \
-of lavf -lavfopts format=psp \
-info name="$NAME" $FNAME.mpg -o $FNAME.mp4
Όπου NAME ο τίτλος της ταινίας και FNAME το όνομα του αρχείου
χωρίς την κατάληξη. Δυστυχώς το παραπάνω δεν είναι εγγυημένο ότι
θα δουλέψει και για εσάς γιατί διαφορετικά PSP μοντέλα χρειάζονται
διαφορετικές ρυθμίσεις, αλλά με λίγο πειραματισμό με τις διαστάσεις
της οθόνης κλπ υπάρχουν καλές πιθανότητες να βγει κάτι που δουλεύει ...