Evaggelos Balaskas's logs

My 127.0.0.1 on the web

Hibernation

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

Αλλά τι είναι το hibernation και τι κάνει;

Το λειτουργικό σύστημα και οι εφαρμογές μας όταν τρέχουν χρειάζονται να διαβάζουν/γράφουν και να επεξεργάζονται δεδομένα. Τα δεδομένα αυτά, τα αποθηκεύονται προσωρινά στην μνήμη RAM του υπολογιστή μας. Η μνήμη RAM είναι εξαιρετικά γρήγορη σε διαβάσματα/γραψίματα αλλά έχει δύο σημαντικούς περιορισμούς. Ο πρώτος είναι το μέγεθος σε Mb (ή πλέον Gb) και το δεύτερο πιο σημαντικό είναι ότι δεν μπορεί να αποθηκεύσει τα δεδομένα. Εάν δεν υπάρχει ρεύμα είναι κενή (άδεια) σε αντίθεση με τον σκληρό δίσκο που ακόμα κι εάν είναι σβηστός ο υπολογιστής τα δεδομένα δεν χάνονται.

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

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

Αυτό το ΚΑΠΟΥ συνήθως είναι δύο πράγματα: ένα αρχείο ή η κατάτμηση swap.
Υπάρχουν φυσικά κι άλλοι τρόποι όπως και διαδικασίες ώστε οι πληροφορίες αυτές να κρυπτογραφούνται. Ένα μειονέκτημα του swap partition είναι ότι επειδή είναι δίσκος όταν είναι κλειστός ο υπολογιστής έχει δεδομένα, γεγονός που θεωρείτε ως μειονέκτημα από πλευράς ασφάλειας.

Η διαδικασία είναι πλέον εξαιρετικά απλή και στο archlinux που χρησιμοποιώ δουλεύει σχεδόν 100% σωστά!

Χρειάζεται να εγκαταστήσουμε το πρόγραμμα pm-utils και να κάνουμε δύο τροποποιήσεις.

Η είναι στο εξής αρχείο: /etc/mkinitcpio.conf
και να προσθέσουμε στα HOOKS το resume

Δείτε πως είναι το δικό μου:

HOOKS="base udev autodetect pata scsi sata resume filesystems"

Μόλις το κάνουμε αυτό πρέπει να πληκτρολογήσουμε την εξής εντολή:

mkinitcpio -p kernel26

ώστε η εικόνα του πυρήνα μας να ενημερωθεί με το νέο HOOK

Η αλλαγή που πρέπει να κάνουμε είναι στο εξής αρχείο: /boot/grub/menu.lst
ώστε να ενημερώσουμε τον πυρήνα μας, την επόμενη φορά που θα boot-άρει να διαβάσει από την κατάτμηση swap όλες τις απαραίτητες πληροφορίες ώστε να επαναφέρει τον υπολογιστή μας στην προηγούμενη κατάσταση πριν κλείσει.

Εάν για παράδειγμα η κατάτμηση swap είναι η : /dev/sda2
τότε πρέπει να προσθέσουμε το εξής: resume=/dev/sda2

Δείτε πως είναι το δικό μου:

kernel /boot/vmlinuz26 root=/dev/sda1 resume=/dev/sda2 ro

Αυτό ήταν όλο!

Τώρα από την γραμμή εντολών μπορούμε να πληκτρολογήσουμε την εξής εντολή:
pm-hibernate και να κλείσει ο υπολογιστής μας, αποθηκεύοντας τα πάντα στην κατάτμηση swap.

Δοκιμάστε το και πείτε μου τις εντυπώσεις σας.

Add a comment(8 views)




Openfest 2010

Μην ξεχάσω αυτό το ΣαββατοΚύριακο (13 & 14 Μαρτίου) είναι το ΟπενFest 2010 στο ΤΕΙ Πειραιά.

Εάν δεν ξέρω πως τα πάω: http://openfest.teipir.gr/how-to-come/
Εάν έχω κάτι άλλο να κάνω: ΠΡΕΠΕΙ να το ακυρώσω!

Αλλά το πιο σημαντικό από όλα είναι να μην το ΞΕΧΑΣΩ!

1 comment(28 views)




Contribution from a programmer’s point of view

Πριν από αρκετό καιρό έγραψα ένα προγραμματάκι μόλις 17 γραμμών σε python με σκοπό να συγχρονίζει δεδομένα μεταξύ δύο διαφορετικών καταλόγων σε δύο διαφορετικά συστήματα κάνοντας χρήση της δυνατότητας του πυρήνα να καταγράφει τα inode events.

Ήταν (και είναι ακόμα) το πρώτο και μοναδικό μου πρόγραμμα σε python! Χρησιμοποίησα python γιατί βρήκα την καλύτερη τεκμηρίωση και υλοποίηση του inotify σε python κι ήταν αφορμή να δω αυτή την scripting γλώσσα που οι περισσότεροι γνωστοί μου, μου παρουσίαζαν ως την καλύτερη scripting γλώσσα προγραμματισμού.

Στην αρχή τα πράγματα φάνηκαν αρκετά απλά, έγραψα το πρόγραμμα που έκανε την δουλειά που ήθελα κι άρχισα να το εμπλουτίζω σιγά,σιγά. Χωρίς πολλές φανφάρες το δημοσίευσα μέσω του πλανήτη κι έπειτα από λίγο καιρό σκέφτηκα να το διαφημίσω και μέσω του freshmeat.

Η συνέχεια με εξέπληξε πολύ ευχάριστα. Κοιτώντας από τα στατιστικά μου διαπίστωσα πως αρκετός κόσμος το έχει ήδη κατεβάσει (φυσικά δεν αναφέρομαι σε bots) και τουλάχιστον 13 άτομα παρακολουθούν πότε βγάζω νέα έκδοση! Κι αυτό δεν ήταν τίποτα σε σχέση με την πρώτη φορά που πήρα feedback για το προγραμματάκι, που πλέον μεγάλωνε σε γραμμές και λειτουργίες. Κι ύστερα ήρθαν τα πρώτα requests κι έπειτα τα πρώτα patches!!

Το προγραμματάκι που μέχρι πριν από λίγο καιρό έγραφα μόνος μου κι εξυπηρετούσε μόνο εμένα, αυτή την στιγμή λειτουργεί σε production υποδομές εξυπηρετώντας κι άλλους. Μάλιστα έχω φτάσει στο σημείο να κάνω πλέον review σε patches για να προσθέτω νέες λειτουργίες. Οι τελευταίες δύο εκδόσεις του PIrsyncD είναι βασισμένες σε patches και οι προσθήκες που έχω κάνει εγώ είναι μόνο για error handling κυρίως και διορθώσεις των patches ώστε να ακολουθούν την KISS φιλοσοφία.

Από 17 γραμμές έχει φτάσει τις 302. Κι εάν εδώ ακούσω κάποιον να λέει: σιγά τις πολλές γραμμές, να αναφέρω ότι είναι 17φορές περισσότερες από το αρχικό κι ο σκοπός ύπαρξής του είναι υπερβολικά συγκεκριμένος. Να συγχρονίζει καταλόγους χωρίς την ύπαρξη κάποιου cron script ή κάποιας άλλης εξωτερικής παρέμβασης!

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

Εν κατακλείδι:

- Μην διστάζετε να υλοποιείται και να δημοσιεύετε τις ιδέες σας. Ακόμα κι εάν δεν είστε προγραμματιστής (όπως εγώ!) ή εάν δεν πιστεύετε ότι γράφετε ποιοτικό κώδικα. Ανήκουμε σε μία ευρύτερη κοινότητα, αυτή του ανοιχτού κώδικα, του ελεύθερου λογισμικού και η συνεισφορά μας μπορεί να μας φαίνεται μικρή για την ώρα αλλά σαν τσουνάμι μπορεί να φτάσει στην google και να μας αγοράσει (”δανεισμένο” από φίλο εκ πατρών).

Add a comment(79 views)




PIrsyncD new version: 20100310

PIrsyncD stands for: Python Inotify Rsync Daemon.

Description:
This is an attempt of writing a daemon to watch a directory for kernel’s inotify events and then execute an rsync command to synchronize two different directories (local or remote). This is a poor man’s mirroring or an alternative (not so) real data replication mechanism and it is based on Pyinotify.

PIrsyncD

A lot of changes over the past couple releases

From ChangeLog:

  • Added functionality to run multiple instances of PIrsyncD (Based on Jeff Templon & Jan Just Keijser’s patch)
  • Added functionality to rsync over a destination rsync server (Based on Jeff Templon & Jan Just Keijser’s patch)
  • Added python regular expression module (import re), for argument validation.
  • Fallback solution if rsync functionality is failed
  • Changed –host argument from IP value to hostname
  • TODO file Reviewed
  • Better examples
  • Better usage message

Thanks Jeff Templon < templon AT nikhef DOT nl > and Jan Just Keijser < janjust AT nikhef DOT nl > for your feedback on PIrsyncD.

plz try ./PIrsyncD –help to see more

Get the latest version of PIrsyncD v20100310

Add a comment(20 views)




Download files with aria2

Σε προηγούμενο post είχα αναφέρει την υλοποίηση του aria2 στο πρόγραμμα powerpill.

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

Υποστηρίζει τα εξής πρωτόκολλα:

γεγονός που το κάνει απαραίτητο εργαλείο στην διανομή μας.

Η χρήση του είναι εξαιρετικά απλή: usage examples.

Για παράδειγμα μπορείτε να κατεβάσετε torrent χωρίς την χρήση άλλων προγραμμάτων.

aria2c ftp://ftp.archlinux.org/iso/2009.08/archlinux-2009.08-netinstall-i686.iso.torrent

Add a comment(509 views)