commit 8ec8e9bee29ecf1febbaa2b549067ab2bf6f0220 Author: infl00p Date: Wed Mar 23 20:14:33 2022 +0200 Πρώτο commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9af535a --- /dev/null +++ b/.gitignore @@ -0,0 +1,38 @@ +# generated files by hugo +/public/ +/resources/_gen/ + +# executable may be added to repository +hugo.exe +hugo.darwin +hugo.linux + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history diff --git a/archetypes/default.md b/archetypes/default.md new file mode 100644 index 0000000..00e77bd --- /dev/null +++ b/archetypes/default.md @@ -0,0 +1,6 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +date: {{ .Date }} +draft: true +--- + diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..467ad3d --- /dev/null +++ b/config.toml @@ -0,0 +1,16 @@ +baseURL = 'https://magaz.hellug.gr/' +languageCode = 'el-GR' +defaultContentLanguage = "el" +title = 'Magaz' +theme = 'archie-hellug' +timeZone = 'Europe/Athens' + +paginate=3 # articles per page + +[params] + mode="auto" # color-mode → light,dark,toggle or auto + useCDN=false # don't use CDNs for fonts and icons, instead serve them locally. + subtitle = "The Greek Linux magazine" + +[taxonomies] + issue = 'issue' diff --git a/content/articles/01/01_editorial.md b/content/articles/01/01_editorial.md new file mode 100644 index 0000000..02ca9b4 --- /dev/null +++ b/content/articles/01/01_editorial.md @@ -0,0 +1,40 @@ ++++ +title = 'Editorial' +date = '1998-01-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 01'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz**, το πρώτο (νομίζουμε) ελληνικό *on-line* Linux περιοδικό.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτό δεν είναι ένα γράμμα του εκδότη, γιατί αυτό το περιοδικό δεν έχει εκδότη :-) Είναι μία αναφορά, μία πρόκληση - πρόσκληση. Ας τα πιάσουμε όμως με τη σειρά: + +- Αρκετοί στο παρελθόν έκαναν πολλές προσπάθειες για χρήση ελληνικών στην κονσόλα και στα X-Windows. Ξέρω ότι είναι πάνω από 5 τα άτομα που ασχολήθηκαν με + αυτό, και γι\' αυτό δεν θα αναφέρω ονόματα, από το φόβο μην ξεχάσω ή/και υποβιβάσω κανέναν. +- Στις αρχές του 1997, δημιουργήθηκε η linux-greek-users στο [argeas.argos.hol.gr](http://argeas.argos.hol.gr). από τον [Ι. Ιωάννου](mailto:roryt@hol.gr). Μία + mailing list με σκοπό να μαζέψει τους Έλληνες χρήστες του Linux σε μία κοινότητα. Μία κοινότητα που ο ένας θα βοηθούσε τον άλλο και όλοι μαζί θα + προσπαθούσαν να λύσουν κοινά (ή όχι και τόσο κοινά) προβλήματα. Με τη βοήθεια των παλαιοτέρων και αυτών που είχαν περισσότερες γνώσεις, πολλοί από μας + καταφέραμε να δούμε ότι το Linux δεν είναι απάνθρωπο, και ο χρήστης του Linux δεν είναι απομονωμένος. +- Το καλοκαίρι του 1997 ξεκίνησε η μετάφραση του Linux-FAQ και πολλών HOWTOs στα ελληνικά, με συντονιστή το [Φώτη Γεωργάτο](mailto:gef@ceid.upatras.gr). +- Κάπου στις αρχές του χειμώνα ξεκίνησε, από τον [Παναγιώτη Βρυώνη](mailto:vrypan@hol.gr) η ελληνικοποίηση του KDE, ενός γραφικού περιβάλλοντος για Linux. + Παρουσίασή του θα υπάρχει σε ένα από τα υπόλοιπα τεύχη. +- Το Δεκέμβριο του 1997, δημιουργήθηκε το [Linux.gr](http://www.linux.gr) ένα website το οποίο θα παρουσίαζε τα Linux-related resources στην Ελλάδα. + Ευκολότερη πρόσβαση στον αρχάριο. Ευκολότερο να βρεις τη σελίδα, παρά τη mailing list. +- Τώρα, ήρθε ο καιρός για ένα περιοδικό. Ένα newsletter με νέα, ειδήσεις, αναλύσεις, συμβουλές, χιούμορ και ότι άλλο χωράει στην ιδέα ενός περιοδικού + \"παρέας\". Το περιοδικό που διαβάζετε τώρα, δεν έχει αρθρογράφους, δεν έχει εκδότες, δεν έχει έσοδα και έξοδα, δεν έχει σκοπιμότητες. Είναι μία κατάθεση + ψυχής, μία πίεση του ελεύθερου χρόνου, όποιου ενδιαφέρεται να βοηθήσει στην ιδέα του Linux. + +Η ιδέα γεννήθηκε μέσα στη λίστα, και σταθεροποιήθηκε σε ένα cafe στην Αθήνα. Μέσα από το περιοδικό θα παρουσιαστούν εν καιρώ όλες οι προσπάθειες για \"Ελληνικό +Linux\". Όλες αυτές οι αξιόλογες προσπάθειες, οι οποίες αποδόσανε, άλλες περισσότερο και άλλες λιγότερο, όλες όμως βάλανε το λιθαράκι τους στην ανάπτυξη του +Linux. Σας προκαλούμε - προσκαλούμε, όλους, να βοηθήσετε όσο μπορείτε, στην ανάπτυξη του περιοδικού, καθώς και σε όλες τις άλλες προσπάθειες που γίνονται για +την ανάπτυξη και διάδοση του Linux. Συχνά πυκνά θα βλέπετε μέσα στις \"σελίδες\" του περιοδικού, προσκλήσεις βοήθειας σε διάφορα on-going projects. Μην τις +αγνοήσετε. Όλα ξεκίνησαν από χόμπυ και φιλότιμο. Αν χαθούν αυτά θα χαθεί και η ουσία. Θα μας ξαναδιαβάσετε, και ελπίζουμε να σας διαβάσουμε και εμείς, σε ένα +από τα επόμενα τεύχη. + +Δεχόμαστε παρατηρήσεις, άρθρα, σχέδια, ιδέες, κριτική (αλλά μόνο καλόπιστη) και ότι άλλο έρθει στο μυαλό σας, στην ηλεκτρονική διεύθυνση του +**[Magaz](mailto:magaz@linux.gr)**. diff --git a/content/articles/01/02_hellas.md b/content/articles/01/02_hellas.md new file mode 100644 index 0000000..4dcfee5 --- /dev/null +++ b/content/articles/01/02_hellas.md @@ -0,0 +1,90 @@ ++++ +title = '\Ελληνες και Linux' +date = '1998-01-01T00:00:00Z' +description = '' +author = 'Γεωργάτος Φώτης gef@ceid.upatras.gr(mailto:gef@ceid.upatras.gr?subject=LINUX-MAGAZ)' +issue = ['Magaz 01'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το 1997 είναι αναμφισβήτητα η χρονιά που το Linux κέρδισε τους \'Ελληνες. Η χρονιά που έφυγε, μας αφήνει με σημαντικές προόδους στην ελληνική υποστήριξη του +Λ.Σ., αναλυτική τεκμηρίωση στην Ελληνική γλώσσα, πληθώρα σελίδων στο Δίκτυο και ένα σύνολο από ένθερμους Linuxάδες που από ότι φαίνεται θα τραγανίσουν +οποιοδήποτε πρόβλημα παρουσιαστεί στους \'Ελληνες το 1998.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ας δούμε αναλυτικά την κατάσταση. + +Αυτή την στιγμή η ελληνική Linux κοινότητα έχει περί τα 200 μέλη. Τα κυριότερα προβλήματα σε σχέση με τα Ελληνικά έχουν επιλυθεί μέσα από διάφορα πακέτα και +καταγραφεί σε κείμενα. Το σύνολο της δουλειάς αυτής που έχει γίνει ή θα γίνει είναι η [ελληνική τεκμηρίωση του +Linux](ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/translations/el/) + +Τόσο το παρόν άρθρο, όσο και τα κείμενα και λογισμικό που αναφέρονται σε αυτό επιδέχονται βελτιώσεων. Εάν έχετε υπ\' όψιν σας κάτι που μας διαφεύγει ή δεν είναι +ακριβές μην διστάσετε να ενημερώσετε το αντίστοιχο άτομο σχετικά. Ας μην ξεχνάμε ότι πάνω σε αυτή την φιλοσοφία είναι χτισμένο όλο το Linux. Παρ\' όλα αυτά, +**σεβαστείτε τον χρόνο των εθελοντών** που είναι έτσι και αλλιώς πιεσμένος, και μην τους κάνετε ερωτήσεις χωρίς να έχετε διαβάσει τα HOWTO, FAQ, INFO-SHEET, τις +οδηγίες, κλπ προσεχτικά. Για οτιδήποτε χρειαστείτε η Ελληνική Linux Κοινότητα είναι στη διάθεσή σας. + +**1. Πακέτα εξελληνισμού του Linux** +------------------------------------------------------------- + +**2. Ελληνική τεκμηρίωση** +--------------------------------------------------- + +**3. Ελληνικό Linux στο Internet** +----------------------------------------------------------- + + +### [1. Πακέτα εξελληνισμού του Linux]{#s1} + +- [grISOXkbd-1.1](ftp://argeas.argos.hol.gr/pub/unix/linux/GREEK/grISOXKb-1.1.tar.gz) (Δημήτρης Μπούρας και Λευτέρης Τσιντζέλης). Είναι το σημαντικότερο + πακέτο για εξελληνισμό του Linux σε γραφικό περιβάλλον. Είναι αρκετά πλήρες, μόνο μειονέκτημα είναι η δυσκολία εγκατάστασής του για αρχάριους. Μην ξεχάσετε + να βάλετε και [γραμματοσειρές](ftp://argeas.argos.hol.gr/pub/unix/linux/GREEK/fonts) πρώτα! +- greek12 (Αλέξιος Κουκούλας). Μάλλον είναι το πρώτο πακέτο που κυκλοφόρησε ευρέως για εξελληνισμό του Linux. Έχει πλέον ξεπεραστεί και αντικαθίσταται από το + επόμενο: +- [greek-console](ftp://argeas.argos.hol.gr/pub/unix/linux/GREEK/greek-console-1.0.0-2.i386.tar.gz) (Κεραμίδας Γιώργος). Είναι εύκολο στην εγκατάσταση ακόμη + και για αρχάριους, (υπάρχει και σε [rpm](ftp://argeas.argos.hol.gr/pub/unix/linux/GREEK/greek-console-1.0.0-2.i386.rpm) ) και δίνει ελληνικά 737 και 928 σε + περιβάλλον κονσόλας. +- Υπάρχουν επίσης τα εξής στον [Αργέα](ftp://argeas.argos.hol.gr/pub/unix/linux/GREEK/): **greekXfonts-full-1.1.tgz** (\'Αγγελος Χαρίτσης), **XgreekFonts** + (Μωραϊτάκης Κωνσταντίνος), **X11greek** (Παναγιώτης Χρηστιάς), **a2ps** (Μανώλης Λουράκης και Γιάννης Μουζάκης), **ispell** (Γιάννης Καβακλής), **minicom** + (Γιάννης Ιωάννου), **moreH** (Μανώλης Λουράκης). + + +### [2. Ελληνική τεκμηρίωση]{#s2} + +Τα κείμενα που βρίσκονται αυτή τη στιγμή στο στάδιο της ολοκλήρωσής τους είναι: + +- [Linux-Hellenic-FAQ](http://students.ceid.upatras.gr/~gef/linux/docs/FAQ/). Συντηρείται από το Γεωργάτο Φώτη. Αυτό το κείμενο είναι η απευθείας μετάφραση + του αγγλικού Linux-FAQ. Το περιεχόμενο του είναι **τυπικές ερωτήσεις** σχετικά με το Linux. +- [Hellenic-HOWTO](http://students.ceid.upatras.gr/~gef/linux/docs/HOWTO/). Συντηρείται από το Γεωργάτο Φώτη. Αυτό το κείμενο έχει οτιδήποτε αφορά + αποκλειστικά έναν Έλληνα, και στο μεγαλύτερο μέρος του ασχολείται με την σωστή **ρύθμιση των Ελληνικών** στο σύστημα. +- [Hellenic-INFO-SHEET](http://students.ceid.upatras.gr/~keramida/linux/doc/INFO-SHEET/). Συντηρείται από τον Κεραμίδα Γιώργο. Αυτό το κείμενο έχει ουσιαστικά + τις **προδιαγραφές του Linux**, και είναι, επίσης, μετάφραση του αγγλικού INFO-SHEET. Περιέχει συνοπτικά όλες τις τεχνικές λεπτομέρειες και δυνατότητες που + έχει το λειτουργικό. + + +### [3. Ελληνικό Linux στο Internet]{#s3} + +Εκτός από την τεκμηρίωση μπορεί να κανείς να βρεί στο Internet τα εξής. + +- Κόμβος [www.linux.gr](http://www.linux.gr/) Συντηρείται από το Γεωργάτο Φώτη και (φιλοδοξεί να) είναι το εστιακό σημείο για το Linux στην Ελλάδα. Περιέχει + κυρίως τις τελευταίες εκδόσεις της ελληνικής τεκμηρίωσης και συνδέσμους σε άλλες σχετικές σελίδες στο Internet όπως τα παρακάτω. +- Κόμβος [ftp.linux.gr](ftp://ftp.linux.gr) Συντηρείται από τον Γιώργο Κουλογιάννη και έχει μέχρι και 9GB λογισμικό για το Linux. Εκεί θα βρείτε τα τελευταία + distributions, πυρήνες, κλπ. +- Κανάλι IRC: [\#linux-gr](http://www.co.umist.ac.uk/~vp/irc/). Συντηρείται από το Βάϊο Παπαϊωάννου και είναι κατάλληλο για άμεσες ερωτήσεις και κουβέντα\... +- Η ελληνική λίστα συζητήσεων [linux-greek-users](http://argeas.argos.hol.gr/linux-greek-users). Συντηρείται από το Γιάννη Ιωάννου και είναι ο σπόρος που τα + γέννησε όλα :-). Μία πύλη προς [ομάδα συζητήσεων (news gateway)](news://edessa.topo.auth.gr/local.linux.greek.users), έχει στηθεί από τον Χρήστο Ρικούδη και + Κώστα Λιαλιαμπή. Εάν θέλετε να γραφτείτε, στείλτε email στο , με τη γραμμή \"subscribe linux-greek-users\" στο σώμα του + μηνύματος. +- Κόμβος ftp [argeas.argos.hol.gr](ftp://argeas.argos.hol.gr/pub/unix/linux/GREEK/). Συντηρείται από το Γιάννη Ιωάννου και είναι ο βασικός κόμβος για αρχεία + που έχουν σχέση με εξελληνισμό. Όλα τα προγράμματα που έχουν σχέση με ελληνικά θα τα βρείτε εδώ, συγκεντρωμένα. +- Το νέο μας on-line περιοδικό [magaz](http://www.linux.gr/magaz). Συντηρείται από το Μιχάλη Καμπριάνη, Παναγιώτη Βρυώνη, Γεωργάτο Φώτη. +- Πρόσθετες σελίδες - που θα βρείτε και στο www.linux.gr - έχουν γράψει και άλλοι, αναφέρω όμως τα ονόματά τους: Αντώνης Παπαγεωργίου (Hellenic Linux + Resources), Κώστας Βλάσσης (HELLUG), Βούλα Σανιδά, Θαλής Καλφιγόπουλος, Νίκος Αράχωβας. Ο Νίκος Αράχωβας έχει φτιάξει επίσης τον πιγκουίνο με την ελληνική + σημαία, που φαίνεται σε πολλές ελληνικές σελίδες του Linux. Τρία ακόμα σημαντικά μέλη της ενεργής Ελληνικής Linux Κοινότητας είναι ο Αντώνης Καβαρνός, ο + Λάμπρος Π. Ρορρής και ο Ευθύμιος Μαυρογεωργιάδης. Ο τελευταίος έχει αναλάβει και την συντήρηση της λίστας ελληνικής ορολογίας, μίας φιλόδοξης προσπάθειας να + έχουμε έναν τυποποιημένο τρόπο για μετάφραση των αγγλικών όρων. Οι Τάσος Κάπιος, Κοξαράς Άρης, Σωτήρης Τσιμπόνης, Παπαδημητρίου Σπύρος, Γιάννης Μήτσος, + Σακαλής Γιώργος, Μάματας Λευτέρης έχουν βοηθήσει σημαντικά στην ελληνική τεκμηρίωση. Ο Παναγιώτης Βρυώνης έχει αναλάβει τον [εξελληνισμό του + KDE](http://users.hol.gr/~vrypan/cactus/kde.html), ενός πολλά υποσχόμενου γραφικού περιβάλλοντος για Unix. + diff --git a/content/articles/01/03_free-software.md b/content/articles/01/03_free-software.md new file mode 100644 index 0000000..a3863be --- /dev/null +++ b/content/articles/01/03_free-software.md @@ -0,0 +1,138 @@ ++++ +title = 'Περί ελεύθερου (τζάμπα) λογισμικού.' +date = '1997-01-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 01'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αφού εφυγα από την συνάντηση που είχαμε με τους υπόλοιπους linux-άδες, πηγα να συναντήσω την κοπέλα μου. Εντάξει, είχα αργήσει, αλλά αυτό που δεν μπορουσε να +καταλάβει είναι γιατί κάποιος θα μπορούσε να διαθέτει τόσο μεγάλο μέρος του χρόνου του χωρίς να πληρώνεται. Όταν μαλιστα της εξηγησα ότι δεν είμαι μόνο εγώ ο +\"τρελός\" αλλά οτι υπάρχουν εκατομύρια άλλοι (μάλλον πιο τρελαμένοι) τότε το μυστήριο έγινε μεγαλύτερο\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θυμάμαι και τις δικές μου πρώτες σκέψεις όταν βρέθηκα στον κόσμο του linux. Γιατί όλοι αυτοί οι άνθρωποι να προσφέρουν πόρους για να δημιουργηθεί κάτι το οποίο +δεν θα τους αποφέρει οικονομικά οφέλη; Ακόμη και αν αυτό γίνεται, πώς είναι δυνατό κάτι τόσο πολύπλοκο όσο ένα ολόκληρο λειτουργικό σύστημα να δημιουργηθεί από +εκατοντάδες ή χιλιάδες hackers που ο καθένας βάζει ένα λιθαράκι; Και για να πάω ένα βήμα παρακάτω, πως είναι δυνατόν το αποτέλεσμα αυτό να είναι ίδιας ποιότητας +και σταθερότητας με το αποτέλεσμα μιας καλά οργανωμένης και στελεχωμένης ομάδας ειδικών που πληρώνεται πλουσιοπάροχα από μία εταιρεία; + +**1. Τι κερδίζει ο προγραμματιστής;** +--------------------------------------------------------------------- + +**2. Πώς μπορεί το αποτέλεσμα να είναι ποιοτικό;** +---------------------------------------------------------------------------------- + +**3. Επιγραμματικά** +---------------------------------------------------- + + +### [1. Τι κερδίζει ο προγραμματιστής;]{#s1} + +Ας πάρουμε τα πράγματα με την σειρά και ας προσπαθήσουμε να ρίξουμε λίγο φώς στο \"γιατί\". Αν και δεν είναι δυνατό να προσδιορίσουμε τα ακριβή κίνητρα του κάθε +προγραμματιστή που χωρίς να πληρώνεται κάθεται και συνεισφέρει σε μία ομάδα τον χρόνο του, τις ικανότητές του, τις γνώσεις του καθώς και το μηχάνημά του (εκεί +δουλεύει), μπορούμε να σκιαγραφήσουμε κάποια από αυτά. + +Είναι δεδομένο ότι όποιος ασχολείται με τον προγραμματισμό χωρίς να πληρώνεται το κάνει γιατί του αρέσει. Είναι το χόμπι του. Όπως κάποιος άλλος μπορεί να +διέθετε όλο το Σαββατοκύριακό του για να φτιάξει μία βιβλιοθήκη στο δωμάτιό του ή ακόμη περισσότερο, θα πήγαινε να βοηθήσει ένα φίλο του που μαστορεύει και +ζήτησε την βοήθειά του, έτσι και ο προγραμματιστής μας, διαθέτει τον χρόνο του για να γράψει ένα driver ή μία εφαρμογούλα ή να προσφέρει βελτιώσεις στην +εφαρμογή που έγραψε κάποιος άλλος, ή ακόμη και να γράψει τα εγχειρίδια μίας εφαρμογής. + +Βλέποντας τα πράγματα από την παραπάνω οπτική γωνία, μπορεί κανείς να καταλάβει ότι και μόνο η ικανοποίηση της ενασχόλησης με κάτι το οποίο θεωρούμε ενδιαφέρον +είναι μια ουσιαστική ανταμοιβή. Υπάρχει όμως και μία ακόμη σημαντικότερη κατά την γνώμη μου: η δόξα και η αναγνώριση. Ένα καλό πρόγραμμα σημαίνει για τον ή τους +δημιουργούς του αναγνώριση από ένα σωρό κόσμο (που στον χώρο του linux κατά κανόνα είναι και γνώστες του αντικειμένου). Μπορεί να μην δέχεται ο προγραμματιστής +λεφτά για τις υπηρεσίες του, γίνεται όμως αποδέκτης αυτού που οι περισσότεροι θα ψάξουν να αγοράσουν με τα λευτά που κερδίζουν από την δουλειά τους: αναγνώριση. +(Δεν είμαι εναντίον της αγοράς εργασίας, μην με παρεξηγήσετε, σκεφθείτε όμως σε μία καταναλωτική κοινωνία με ποιό βασικό κριτήριο ξοδεύουμε το μεγαλύτερο μέρος +των χρημάτων μας.) Άλλωστε, η αναγνώριση και η φήμη μπορεί στο μέλλον να σας προσφέρουν μία πολύ καλη δουλειά\... + +Δεν πρέπει να παραγνωρίσουμε και ένα ακόμη παράγοντα που οδηγεί κάποιον στο να γράψει (ή να συνεισφέρει ιδέες και κώδικα σε κάποιους που γράφουν) προγράμματα: +την επίλυση ενός προβλήματος που αντιμετωπίζει ο ίδιος. + +Ας πούμε για παράδειγμα ότι χρησιμοποιείτε ένα απλό διευθυνσιογράφο που βρήκατε χωρίς χρέωση στο Internet. Όλα καλά, αλλά θα σας βόλευε πάρα πολύ να μπορείτε να +τυπώνετε καρτέλες με τις διευθύνσεις για να τις κολλάτε σε φακέλους. Επειδή όμως έχετε το σαράκι του προγραμματισμού κοιτάτε τον πηγαίο κώδικα (source code) και +κάνετε μερικές προσθήκες που σαν αποτέλεσμα έχουν την ζητούμενη δυνατότητα. Από το σημείο αυτό κι έπειτα έχετε δύο επιλογές. + +Η μία είναι να κρατήσετε τις αλλαγές για τον εαυτό σας θεωρώντας οτι είναι άδικο να επωφεληθεί κάποιος άλλος από τον δικό σας κόπο (αν και εσείς χρησιμοποιείτε +το πρόγραμμα που προσφέρει κάποιος δωρεάν). + +Η άλλη επιλογή είναι να στείλετε τις αλλαγές στον δημιουργό του προγράμματος. Αν αυτός θεωρεί ότι πρέπει να ενσωματωθούν στο πρόγραμμα του, θα το κάνει στην +επόμενη έκδοση. Στην έκδοση αυτή θα δείτε και το όνομά σας ανάμεσα σε αυτούς που βοήθησαν και ίσως μετά από αρκετό καιρό να διαβάσετε σε ένα περιοδικό ότι το +πρόγραμμα αυτό έχει εξελιχθεί σε ένα από τα πιο δυνατά προγράμματα της κατηγορίας του! + +Εσείς τί θα επιλέγατε; + +Οι λόγοι που ανέφερα μέχρι στιγμής δεν είναι βέβαια οι μοναδικοί. Σε αυτούς μπορούμε να συμπεριλάβουμε τον πειραματισμό με αντικείμενα που ένας συγκεκριμένος +προγραμματιστής να μην έχει την δυνατότητα να ασχοληθεί στην εργασία του, την ανάπτυξη λογισμικού από μη κερδοσκοπικούς οργανισμούς και/ή πανεπιστήμια καθώς και +τις περιπτώσεις που ένα πρόγραμμα ξεκιναέι σαν εμπορικό αλλά οι δημιουργοί/χρηματοδότες του χάνουν το ενδιαφέρον τους σε αυτό και αντί να το θάψουν το δίνουν +στο ευρύ κοινό να κάνει ότι νομίζει καλύτερο με αυτό. + + +### [2. Πώς μπορεί το αποτέλεσμα να είναι ποιοτικό;]{#s2} + +Ας εξετάσουμε τώρα το ερώτημα πώς μπορεί ένα τόσο μεγάλο project όπως ένα λειτουργικό σύστημα να αναπτυχθεί τζάμπα και μάλιστα το αποτέλεσμα να είναι ποιοτικό. + +Για να καταλάβουμε την απάντηση πρέπει πρώτα να δούμε τί είναι το GPL. Το GPL (GNU General Public Licence ή αλλιώς copyleft) είναι ένας τρόπος έκδοσης και +διανομής προγραμμάτων που διασφαλίζει την ελευθερία στο λογισμικό. Όπως αναφέρει και το κείμενο που περιγράφει το GPL, όταν λέμε ελευθερία δεν εννοούμε μόνο +χωρίς χρέωση, αλλά την ελευθερία να διανέμει κανείς το χωρίς χρέωση λογισμικό (και να πληρώνεται για αυτό αν το επιθυμεί) την δυνατότητα να δει τον πηγαίο +κώδικα, να τον αλλάξει ή και να χρησιμοποιήσει τμήματά του σε άλλα προγράμματα και όλα αυτά τα δικαιώματα να είναι κατοχυρωμένα από τον νόμο. + +Το Linux για παράδειγμα είναι κατοχυρωμένο με το GPL. Ο αρχικός δημιουργός του, ο Linus Torvalds, λειτουργεί περισσότερο σαν μάνατζερ του όλου εγχειρήματος: +είναι αυτός που δέχεται τις τροποποιήσεις και τις νέες δυνατότητες, τις ενσωματώνει ή τις απορίπτει και εκδίδει την νέα έκδοση του κυρίως μέρους του Linux, του +πυρήνα όπως λέγεται. Ο πηγαίος κώδικας (που από το GPL ορίζεται ως η μορφή στην οποία μπορούν να γίνουν ευκολότερα αλλαγές στο πρόγραμμα) είναι διαθέσιμη σε +όποιον ενδιαφέρεται να την δει και να την τροποποιήσει. + +Ο περισσότερος κόσμος θεωρεί ότι για να γίνει ένα καλό πρόγραμμα χρειάζεται κάποιος, ή έστω μία μικρή ομάδα, που θα είναι αρκετά ευφυής για να συλλάβει την +αρχική ιδέα και να την υλοποιήσει χωρίς λάθη. Αυτή η αντίληψη όμως απέχει πολύ από την πραγματικότητα. Μερικοί από τους λόγους; + +- Ένα καλό πρόγραμμα έχει ανάγκη από χρήστες και μόνο αυτοί μπορούν να προσδιορίσουν με ακρίβεια τις ανάγκες τους. +- Όταν μιλάμε για μεγάλα προγράμματα, δεν είναι δυνατό η υλοποίηση να γίνει χωρίς λάθη (bugs), είτε στην λογική (στον αλγόριθμο) είτε στην συγραφή του + προγράμματος. Λυπηρό ίσως, αλλά ΔΕΝ ΥΠΑΡΧΕΙ ΤΕΛΕΙΟ ΠΡΟΓΡΑΜΜΑ !!! +- Ένα καλό πρόγραμμα πρέπει να συνοδεύεται από κατατοπιστικά εγχειρίδια που θα βοηθήσουν τους χρήστες του. +- Πρέπει να μπορεί να προσαρμόζεται με νέες εκδόσεις στα δεδομένα που επικρατούν στον χώρο και τα οποία αλλάζουν κάθε τόσο. + +Η αντιμετώπιση όλων των παραπάνω στον χώρο του Linux, με την βοήθεια του GPL είναι πραγματικά εντυπωσιακή. + +Η πολιτική του ελεύθερου λογισμικού και της αναγνώρισης όσων βοηθούν με τον ένα ή τον άλλο τρόπο κάνουν πολλούς από τους χρήστες να αισθάνονται ότι είναι και +μέρος της ομάδας ανάπτυξης του προγράμματος. Έτσι διασφαλίζεται μία συνεχής ροή παρατηρήσεων, εντοπισμού λαθών τροποποιήσεων και ιδεών προς τους +προγραμματιστές. Τα bugs εντοπίζονται πολύ γρήγορα και συχνά η αναφορά για αυτά συνοδεύεται και από τον προσδιορισμό του κοματιού του πηγαίου κώδικα που είναι +ελλατωματικός καθώς και από την προτεινόμενη διόρθωση (βλέπετε ο πηγαίος κώδικας δεν είναι επτασφράγιστο μυστικό όπως στην περίπτωση των εμπορικών +προγραμμάτων!). Όπως λέει και ο Eric S. Raymond στο άρθρο του The Cathedral and the Bazzar , *\"Δοθέντων +αρκετών ματιών, όλα τα bugs είναι ρηχά\"*. Το παράδειγμα του Linux είναι αρκετό για να πείσει και τον πιο δύσπιστο: Θεωρείται από τα πιο σταθερά λειτουργικά +συστήματα! + +Νομίζω ότι ενδιαφέρον είναι και αυτό που απάντησε σε μία σχετική ερώτηση ο ίδιος ο Linus ( [σε μια συνέντευξή +του.](http://students.ceid.upatras.gr/~keramida/linux/doc/linus.html)) *\"Όταν μιλάμε για λογισμικό προτιμώ σαφώς το ελεύθερο λογισμικό γιατί πολύ σπάνια έχω +δεί ένα πρόγραμμα που να δουλεύει αρκετά καλά για τις ανάγκες μου και το να έχεις τον πηγαίο κώδικα μπορεί να σε γλιτώσει.\"* + +Ένα άλλο θέμα είναι η ταχύτητα με την οποία αναπτύσεται μία εφαρμογή. Ειδικά στα εμπορικά προγράμματα, είναι δεδομένο ότι η επιτυχία ενός προγράμματος μπορεί να +κριθεί από το αν βγήκε στην διανομή έγκαιρα, που σημαίνει ότι η ταχύτητα με την οποία το πρόγραμμα θα αναπτυχθεί είναι κρίσιμος παράγοντας. Στην περίπτωση του +ελεύθερου λογισμικού (GPL) οι προγραμματιστές έχουν ένα ακόμη πλεονέκτημα: μπορούν να χρησιμοποιήσουν κώδικα που είναν γράψει άλλοι! Όπως λένε, οι καλοί +προγραμματιστές ξέρουν τί να γράψουν, οι μεγάλοι προγραμματιστές ξέρουν τί να ξαναγράψουν (και να ξανα χρησιμοποιήσουν). + +Η ελεύθερη πρόσβαση στον πηγαίο κώδικα, η εύκολη και άμμεση επικοινωνία με τους προγραμματιστές καθώς και το κλίμα αλληλοβοήθειας που επικρατεί στον χώρο του +ελέυθερου λογισμικού επιτρέπουν και οδηγούν πολλούς από τους χρήστες να γράψουν εγχειρίδια χρήσης και άλλα βοηθητικά κείμενα σχετικά με το πρόγραμμα. Όποιος +έχει αμφιβολία για αυτό, ας ρίξει μία ματιά στο για να δει το πλήθος και ποιότητα των κειμένων σχετικά με την χρήση και εγκατάσταση +του Linux. + +Ο κώδικας που γράφεται στο πλαίσιο του ελεύθερου λογισμικού είναι κατά μέσο όρο πολύ υψηλών προδιαγραφών. Ο λόγος είναι ότι οι προγραμματιστές χρειάζονται (αφού +συνήθως θέλουν να καλύψουν κάποια δικιά τους ανάγκη) και αγαπούν τον κώδικα που γράφουν (κάτι που δεν ισχύει πάντα στην περίπτωση εμπορικού κώδικα που γράφεται +γιατί πρέπει να καλύψει την ανάγκη κάποιου πελάτη). + +Τέλος, καθώς ο χώρος αλλάζει, κάποιοι θα χρειαστούν μία νέα δυνατότητα που ή θα ζητήσουν από τους προγραμματιστές που αρχικά ανέπτυξαν την εφαρμογή ή θα την +προσθέσουν μόνοι τους, άν γνωρίζουν προγραμματισμό. Ανακοινώσεις της μορφής *\"Ο τάδε πρότεινε αυτή την δυνατότητα, υπάρχει κάποιος που ενδιαφέρεται να την +υλοποιήσει\"* είναι πολύ συχνές σε χώρους που αναπτύσεται ελεύθερο λογισμικό. Το πρόγραμμα θα συνεχίσει να εξελίσεται και να προσαρμόζεται όσο οι +χρήστες-προγραμματιστές του το θεωρούν χρήσιμο. Ακόμη και αν ο αρχικός προγραμματιστής κάποια στιγμή αποφασίσει να αποτραβηχθεί, πολύ συχνά θα το \"υιοθετήσει\" + +### [3. Επιγραμματικά]{#s3} + +Προσπάθησα μέσα από αυτό το άρθρο να εξηγήσω πώς δουλεύει ο κόσμος του ελεύθερου λογισμικού, ένας κόσμος που σε εμάς που έχουμε μάθει να λειτουργούμε με τους +κανόνες της αγοράς μπορεί να φαίνεται παράλογος. + +Άν ενδιαφέρεστε να μάθετε περισσότερα, επισκευθείτε τις διευθύνσεις: + +- +- και + diff --git a/content/articles/01/04_coffee-howto.md b/content/articles/01/04_coffee-howto.md new file mode 100644 index 0000000..cc6cc26 --- /dev/null +++ b/content/articles/01/04_coffee-howto.md @@ -0,0 +1,336 @@ ++++ +title = 'Πώς φτιάχνεται ένας γκαϊφές' +date = '1998-01-01T00:00:00Z' +description = '' +author = 'Γεωργάτος Φώτης gef@ceid.upatras.gr(mailto:gef@ceid.upatras.gr?subject=COFFEE-HOWTO)' +issue = ['Magaz 01'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία από τις πιο ενοχλητικές ερωτήσεις που έχω ακούσει για λογισμικό είναι εάν φτιάχνει καφέ. Ε, ναι λοιπόν, φτιάχνει. Και καλό καφέ.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Επί μακρόν την ανθρωπότητα την εβασάνιζε το πώς θα ημπορούσε να χρησιμοποιήσει τον υπολογιστή, ώστε να παράγει καφέ. Τον καφέ τον χρειαζόμαστε για καθόμαστε +στον υπολογιστή με τις ώρες χωρίς να νυστάζουμε, διότι ως γνωστόν την νύχτα γράφεται ο καλύτερος κώδικας. + +Το κυριότερο πρόβλημα είναι να συνδέσουμε την καφετιέρα με τον υπολογιστή και να την ελέγχουμε μέσω λογισμικού. Αυτό συνήθως ανάγεται σε ένα κύκλωμα διακόπτη +ON/OFF, που ελέγχει την τροφοδοσία της καφετιέρας. + +**1. Είδη καφέ** +----------------------------------------------- + +- [1.1 Ελληνικός](#ss1.1) +- [1.2 Γαλλικός](#ss1.2) +- [1.3 Nescaffe](#ss1.3) +- [1.4 frappe](#ss1.4) +- [1.5 freddo](#ss1.5) +- [1.6 cappuccino](#ss1.6) +- [1.7 espresso](#ss1.7) + +**2. Κυκλώματα σύνδεσης της καφετιέρας** +----------------------------------------------------------------------- + +- [2.1 Οδήγηση με 0-5V από τον υπολογιστή](#ss2.1) +- [2.2 \'Ελεγχος με Relay](#ss2.2) +- [2.3 \'Ελεγχος με TRIAC \#1](#ss2.3) +- [2.4 \'Ελεγχος με TRIAC \#2](#ss2.4) + +**3. Λογισμικό** +----------------------------------------------- + +- [3.1 Πρόγραμμα σε C](#ss3.1) +- [3.2 Σαν device driver](#ss3.2) +- [3.3 Διασύνδεση με Internet](#ss3.3) + +**4. Συμπτώματα υπερδοσολογίας** +--------------------------------------------------------------- + +**5. Επεκτάσεις** +------------------------------------------------ + +**6. Αναφορές** +---------------------------------------------- + + +### [1. Είδη καφέ]{#s1} + +### [1.1 Ελληνικός]{#ss1.1} + +Είναι επίσης γνωστός και ως τούρκικος, αλλά είναι παραλλαγή του. Παλιά είχαν για σηματάκι τον παπαγάλο, αλλά τώρα χρησιμοποιούν τον πιγκουίνο. Χαρακτηριστικό +του καφέ αυτού είναι το κατακάθι στον πάτο του ποτηριού, που μπορεί να χρησιμεύσει για να μαντέψετε την ατυχία σας. + +Αναμιγνύουμε καφέ και ζάχαρη στη σωστή αναλογία, με ποσότητα νερού αντιστοίχου του φλιτζανίου. Παραδοσιακά παρασκευάζεται σε ζεσεοδοχείο (μπρίκι) με γκαζιέρα, +αλλά απουσία φτηνών εξαρτημάτων για τον έλεγχο του αερίου, θα χρησιμοποιήσουμε ένα απλό μάτι. (εεε! της κουζίνας) + +Οι κατηγορίες του ελληνικού καφέ είναι: (κουταλιές) + +- Γλυκός: 1 καφέ, 2 ζάχαρη +- Βαρύ γλυκός: 2 καφέ, 3 ζάχαρη +- Γλυκύβραστος: 1/2 καφέ, 1 ζάχαρη +- Μέτριος: 1 καφέ, 1 ζάχαρη +- Σκέτος (Πικρός): 1 καφέ +- Πολλά βαρύς και όχι: 2 καφέ, συνοδεύεται με ναργιλέ + +Ανακατεύουμε συνεχώς μέχρι το μίγμα να αρχίσει να ξεχειλίζει, οπότε με γρήγορες κινήσεις το παίρνουμε από τη φωτιά. Αργείς-χάνεις, απλή λογική. Το βήμα αυτό +συζητείται να υλοποιηθεί με robot. + +### [1.2 Γαλλικός]{#ss1.2} + +Δημοφιλής καφές για προγραμματιστές μιας και δεν χρειάζεται προσοχή. Η ανάρπαστη γεύση του έχει εμπνεύσει χιλιάδες προγραμματιστών σε έργα λογισμικού αμύθητης +τελειότητας, υλοποιημένα άγρια χαράματα. Τα Windows για παράδειγμα είναι γραμμένα 5:00 το πρωί, με τα νεύρα ΝΑ. Εγγυημένο αποτέλεσμα. + +### [1.3 Nescaffe]{#ss1.3} + +Το κουνάς πριν + +### [1.4 frappe]{#ss1.4} + +Το κουνάς μετά + +### [1.5 freddo]{#ss1.5} + +Δύσκολος καφές. + +Μην τον ζητήσετε από τον τύπο στο Πάρκο της Ειρήνης/Πανεπιστήμιο Πάτρας + +### [1.6 cappuccino]{#ss1.6} + +### [1.7 espresso]{#ss1.7} + + +### [2. Κυκλώματα σύνδεσης της καφετιέρας]{#s2} + +Το σχηματικό είναι κάπως έτσι: + +**ΣΗΜΕΙΩΣΗ: \'Εχει παρατηρηθεί ότι μερικά σχήματα δεν φαίνονται σωστά. Σε τέτοια περίπτωση, δείτε τα με \"View-\>Document source\".** + +> --------- 0-5V --------- ~220V ----------- +> | Η/Υ |===>===|Ελεγχος|========|Καφετιέρα| +> --------- --------- ----------- + +Η γενική ιδέα είναι ότι παίρνουμε μία τάση ελέγχου από τον υπολογιστή, ο οποία οδηγεί ένα κύκλωμα με απομόνωση (OPTOTRIAC ή RELAY). + +Εάν η καφετιέρα είναι μεγάλη (πχ περισσότερο από 200W), χρησιμοποιείστε οπωσδήποτε RELAY, αλλιώς μπορείτε να βάλετε TRIAC. Εάν δεν κάνετε ακριβώς αυτό, απλά θα +πετάξετε τα λεφτά σας με τον ή με τον άλλο τρόπο. + +Σημειώστε ότι τα κυκλώματα που έχουμε παρακάτω, είναι όλα τουλάχιστον μια φορά δοκιμασμένα, αλλά η διασύνδεση με τον υπολογιστή γίνεται με ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ. Εάν +δεν έχετε εμπειρία με ηλεκτρονικά, καλόν θα είναι να μην την αποκτήσετε με αυτά τα κυκλώματα, γιατί θα είναι κακή μάλλον\... + +Να είστε πολύ προσεχτικοί στους πειραματισμούς με τα 220V, και δεν θα είναι πολυτέλεια να χρησιμοποιήσετε ασφάλεια ανάλογη του φορτίου σας\... + +### [2.1 Οδήγηση με 0-5V από τον υπολογιστή]{#ss2.1} + +Εδώ είναι ένα απλό παράδειγμα για το πώς θα πάρετε μια απλή τάση 0-5V από τον υπολογιστή, μέσω της παράλληλης θύρας. + +> Back View ----- Pin 10 - ACK +> Male DB-25 | | Pin 9 - D7 +> Connector | | Pin 2 - D0 +> v v v Pin 1 - +> ~Strobe +> ____________________________________________________________ +> / \ +> \ 13 12 11 10 9 8 7 6 5 4 3 2 1 / +> \ / +> \ 25 24 23 22 21 20 19 18 17 16 15 14 / +> \______________________________________________________/ + +Ο ακροδέκτης 1 είναι το Strobe( αρνητικής λογικής) + +Οι ακροδέκτες 2-9 είναι τα σήματα του DATA BUS, όπως αυτά διαμορφώνονται, έπειτα από μία εντολή τύπου OUT στην παράλληλη θύρα. + +Ο ακροδέκτης 10 είναι το ACK, δηλαδή τον ελέγχετε εσείς, παράγοντας interrupt. + +Τα 18-25 είναι βραχυκυκλωμένα και είναι η γείωση. + +Πιο αναλυτικά: + +> <= in DB25 Cent Name of Reg +> => out pin pin Signal Bit Function Notes +> ------ ---- ---- -------- --- ----------------------------- +> => 1 1 -Strobe C0- Set Low pulse >0.5 us to send +> => 2 2 Data 0 D0 Set to least significant data +> => 3 3 Data 1 D1 ... +> => 4 4 Data 2 D2 ... +> => 5 5 Data 3 D3 ... +> => 6 6 Data 4 D4 ... +> => 7 7 Data 5 D5 ... +> => 8 8 Data 6 D6 ... +> => 9 9 Data 7 D7 Set to most significant data +> <= 10 10 -Ack S6+ IRQ Low Pulse ~ 5 uS, after accept +> <= 11 11 +Busy S7- High for Busy/Offline/Error +> <= 12 12 +PaperEnd S5+ High for out of paper +> <= 13 13 +SelectIn S4+ High for printer selected +> => 14 14 -AutoFd C1- Set Low to autofeed one line +> <= 15 32 -Error S3+ Low for Error/Offline/PaperEnd +> => 16 31 -Init C2+ Set Low pulse > 50uS to init +> => 17 36 -Select C3- Set Low to select printer +> == 18-25 19-30, Ground + +### [2.2 \'Ελεγχος με Relay]{#ss2.2} + +Το πιο απλό κύκλωμα που μπορεί να φτιάξει κανείς είναι το εξής: + +> Vcc +> | +> +------+ +> | __|__ +> Relay /^\ Diode 1N4002 +> Coil /---\ +> | | +> +------+ +> | +> | / +> 4.7K B |/ C +> parallel port >-\/\/\/\/---| NPN Transistor: BC547A or 2N2222A +> data pi |\ E +> | V +> | +> parallel port >--------------+ +> ground pin | +> Ground + +Συνδέστε το Vcc με τάση αντίστοιχη με τον τύπο του relay που έχετε βρει (5 ή 12V). Προφανώς το relay πρέπει να διαλέξετε να είναι επαρκές για την καφετιέρα σας. +Αυτό ίσως εξηγεί τους κακούς καφέδες: Οι barmen συχνά κάνουν το λάθος να βάζουν το relay αντί στον συλλέκτη (C), στον εκπομπό (E) του τρανζίστορ, πολώνοντάς το +έτσι με λάθος τρόπο. Η δίοδος 1N4002 είναι για να προστατεύει το τρανζίστορ από τα ανάστροφα ρεύματα του Relay, όταν το ρεύμα σε αυτό αλλάζει. Εάν δεν την +βάλετε, λογικά το τρανζίστορ θα γίνει πιο μαύρο και θα μυρίζει. + +### [2.3 \'Ελεγχος με TRIAC \#1]{#ss2.3} + +Εάν θέλετε ένα απλό κύκλωμα μπορείτε να χρησιμοποιήσετε ένα Motorola MOC301\[012\] (οδηγός για TRIAC), μαζί με ένα γενικής χρήσης TRIAC όπως το SC141D. Το +πλεονέκτημα αυτού του κυκλώματος είναι ότι δεν χρειάζεται τάση τροφοδοσίας. + +Για μη επαγωγικό φορτίο το κύκλωμα είναι ως εξής: + +> 270 1 +-------+ 6 180 +> +5v -VAVAVA-----+ +----VAVAVA-----+-------------- Line Hot +> 2 | MOC | | +> TTL in ---------+ 3012 +nc VA SC141D +> | | 4 / | +> nc+ +------------/ | +> +-------+ +----\/\/\/---- Line Neutral +> LOAD + +Εάν πρόκειται να δουλέψετε με 220V, προτιμήστε ένα 3021. Εάν έχετε επαγωγικό φορτίο ενδείκνυται να βάλετε bypass πυκνωτές, δείτε σχετικά Motorola Application +Note AN-780. Οι καφετιέρες είναι κυρίως ωμικά φορτία (το θερμαντικό νήμα) και όχι επαγωγικά (όπως είναι πχ ένα μοτέρ) αλλά επειδή ποιος ξέρει τι καφετιέρα +έχετε\... + +### [2.4 \'Ελεγχος με TRIAC \#2]{#ss2.4} + +> +5VDC +> | 180 180 2.2k +> +---/\/\/\----+-----+ +----/\/\/-+--/\/\/\---+-------> 120V +> | 1| |6 | | Hot +> | +=====+ | | MT1 +> | | MC | TRIAC | +-+ +> | | 3032| Driver | G | | TRIAC +> | +=====+ | /| | +> \ 2| |4 | / +-+ +> 2N3904 |----+ | | | | MT2 +> / | +--------- | -------+ | +> V \ | | | +> | / | \ | +> | \ 43 .01u --- 10k / | +> | / 500V --- \ | +> | | | / | +> +------+ | | | Neutral +> | +--------+--+---o o--> 120V +> / load +> >-/\/\--| 2N3904 +> \ +> V +> | +> --- +> /// +> You should change resistors accordingly for 220V. + +Περιγραφή κυκλώματος: + +Το MC3032 είναι ένας οπτοαπομονωτής, κατάλληλος για οδήγηση TRIAC. Η αντίσταση των 180Ω ρυθμίξει το ρεύμα για τον εκπέμπον LED του οπτοαπομονωτή. Εάν +χρειάζεται, αλλάξτε την τιμή της αντίστασης για να πάρετε μία λογική τιμή ρεύματος (πχ 15 mA). + +Δώστε σημασία στην ένδειξη 500V για τον πυκνωτή των .01μF. Σημειώσατε ότι δεν μπορείτε να ελέγξετε αυτό το κύκλωμα δίχως φορτίο. Το TRIAC δεν θα αλλάξει +αγωγιμότητα παρά μόνον εάν συνδεθεί με την πηγή παροχής εναλλασόμενου ρεύματος (δίκτυο) και με το φορτίο. Προσέξτε το φορτίο να μην είστε ΕΣΕΙΣ. + + +### [3. Λογισμικό]{#s3} + +\'Εφτασεεεε\... + +### [3.1 Πρόγραμμα σε C]{#ss3.1} + +Φτιάξτε ένα εκτελέσιμο, που θα κάνει χοντρικά τα εξής: + +- Θα παίρνει τα κατάλληλα δικαιώματα για την διεύθυνση I/O, με αίτηση στον πυρήνα, μέσω της ioperm: πχ ioperm( BASE, range ,1); +- θα εκτελεί το κατάλληλο out request, για να επιβάλει την σωστή τάση στην παράλληλη θύρα. πχ outb( 1, BASE ); +- Θα περιμένει κατάλληλο χρονικό διάστημα για να ψηθεί ο καφές, ( καλόν θα είναι αυτό να το διαβάζει από την γραμμή εντολών ) +- στην συνέχεια θα κλείνει την καφετιέρα. outb( 0 , BASE ); +- Προαιρετικά, θα δίνει πίσω την θύρα με ioperm( BASE, range, 0); + +Όπου BASE = 0x3bc για /dev/lp0, 0x378 για /dev/lp1, και 0x278 για /dev/lp2, range=8. + +Καλόν θα είναι να το κάνετε setuid, για να μπορεί όλος ο κόσμος να φτιάχνει καφέ. + +### [3.2 Σαν device driver]{#ss3.2} + +Δεν έχετε παρά να διαβάσετε το kernel hacker\'s guide, να υλοποιήσετε έναν device driver (μπορεί να είναι και user space). Πλιιζ, κάνετέ το module, να μην +κάνουμε compile όλη την ώρα. Μετά θα γράφετε: + + echo baryglykos >/dev/coffee + +Και θα έχετε ζεστό καφέ σε 1 λεπτό. Θυμηθείτε να δώσετε τα σωστά permission στο /dev/coffee, ανάλογα με το εάν θέλετε να φτιάχνει καφέ μόνο ο root ή όχι. + +Το πλεονέκτημα αυτής της μεθόδου είναι ότι επιτρέπει να χρησιμοποιηθεί το ACK της παράλληλης θύρας, ώστε οι \"έξυπνες\" καφετιέρες να μπορούν να παράγουν +interrupt. + +Αφήνεται σαν άσκηση. + +### [3.3 Διασύνδεση με Internet]{#ss3.3} + +Αφού έχετε υλοποιήσει το πρόγραμμα σε C (βλέπε παραπάνω), δεν έχετε παρά να φτιάξετε ένα cgi τσι σειράς (ας είναι και β\' διαλογής), που θα καλεί το +προγραμματάκι για να φτιάξει τον καφέ. Τι web server? apache φυσικά\... + + +### [4. Συμπτώματα υπερδοσολογίας]{#s4} + +- ευεξία +- νευρικότητα +- ταχυκαρδία ή καρδιακή αρυθμία +- τέντωμα μυών +- δυσκοιλιότητα :-( + + +### [5. Επεκτάσεις]{#s5} + +Αυτές είναι μερικές ιδέες που είχαμε: + +- Με λίγη προσπάθεια η ηλεκτρονική καφετιέρα μπορεί να επεκταθεί ώστε να υποστηρίζει τοστ, παστίτσιο, κουραμπιέδες κλπ. +- Cluster με 8 καφετιέρες. Αυτό θα επιτρέπει να έχετε καφέ ακόμη και όταν \"πέφτει\" η μία καφετιέρα, με αντίστοιχη μείωση της απόδοσης. Η παράλληλη + ανυσματική καφετιέρα είναι στα υπ\' όψιν. +- Εάν θέλουμε πλήρη αυτοματοποίηση χρειαζόμαστε επιπρόσθετα κυκλώματα και αισθητήρες, ώστε να ελέγχουμε την ροή του νερού, την θερμοκρασία του, την ποσότητα + του καφέ κλπ. +- Στο μέλλον σκεφτόμαστε να υλοποιήσουμε και SNMP. Α μα πια, αυτές οι καφετιέρες να μην έχουν έθερνετ ιντερφέις\... +- Σειριακή καφετιέρα στα 115Kbps. + + +### [6. Αναφορές]{#s6} + +- [Χριστόφορος Κολόμβος](http://sunsite.unc.edu/expo/1492.exhibit/c-Columbus/columbus.html). Το πραγματικό του όνομα είναι Cristobal Colon. \'Εφερε πρώτος τον + καφέ από την Αμερική, την οποία πρώτος (από τους Ευρωπαίους) ανακάλυψε το 1492. +- Το απόλυτο κείμενο σχετικά με τον καφέ. Βασικά, είναι το coffee-FAQ από το Internet. +- Πολλά κυκλώματα σε ASCII, ανάμεσά τους και με έλεγχο από παράλληλη +- \'Οτι θέλατε να μάθετε για την παράλληλη θύρα και δεν τολμούσατε να ρωτήσετε. +- Προγραμματισμός I/O θυρών σε Linux. +- Πώς να γράψετε τους δικούς device drivers. Εμπρός λοιπόν, τι κάθεστε; +- Ας το θέσουμε έτσι: εάν ασχολείστε με ηλεκτρονικά, οι σελίδες του Tomi Engdahl είναι + must. +- Καφετιέρες on-line. Δυστυχώς, + δεν έχει συγκριτικά test. +- Η εν λόγω συσκευή προσφέρει μόνο cappuccino. \'Αντε αναβαθμίστε το, ρε παιδιά. +- Ζεστός ολλανδικός καφές +- http://circe.chinalake.navy.mil/cgi-bin/spion/snapit.cgi +- http://www.cl.cam.ac.uk/coffee/coffee.html +- http://www.menet.umn.edu/coffeecam/ + diff --git a/content/articles/01/05_realworld.md b/content/articles/01/05_realworld.md new file mode 100644 index 0000000..c56b2c4 --- /dev/null +++ b/content/articles/01/05_realworld.md @@ -0,0 +1,34 @@ ++++ +title = 'Ορισμένοι το παίρνουν σοβαρά - CISCO Systems' +date = '1997-01-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 01'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Πολλές μεγάλες επιχειρήσεις και οργανισμοί ανά τον κόσμο χρησιμοποιούν το Linux. Αυτό τον μήνα παρουσιάζουμε την CISCO Systems.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η CISCO Systems είναι μία εταιρεία κολλοσός στον χώρο της δικτύωσης για το Internet. Πουλάει τα προϊόντα της (High-end Routers, WAN switches, LAN switches, Hubs +κ.λ.) σε 90 χώρες μέσω ενός δικτύου απ\'ευθείας πωλήσεων, αντιπροσώπων, μεταπωλητών και systems integrators. Εκτός από τα κεντρικά γραφεία της στο San Joze της +Καλιφόρνιας, έχει 200 ακόμη γραφεία πωλήσεων και υποστήριξης σε 54 χώρες. Ο ημερήσιος τζίρος της είναι πάνω από 6 εκατομμύρια δολάρια και το οικονομικό έτος +1997 ανήλθε συνολικά στα 6,44 δισ. δολάρια!!! (βλ. ) + +Πριν από δύο χρόνια είχαν ένα τεράστιο πρόβλημα με την διαχείρηση των εκτυπωτών τους (1600 εκτυπωτές που χρησιμοποιούνται από 10.000 ανθρώπους σε όλο τον +κόσμο!). Ήταν αδύνατο να ξέρουν κάθε στιγμή την κατάσταση ενός εκτυπωτή στο δύκτιο, αφού εκατοντάδες χρήστες σε δεκάδες συστήματα μπορούσαν να στέλουν +εκτυπώσεις σε αυτόν. + +Ο υπεύθυνος διαχειριστής συστήματος για τους εκτυπωτές, σχεδίασε ένα σύστημα στο οποίο όλες οι εκτυπώσεις για ένα συγκεκριμένο εκτυπωτή θα περνούσαν από ένα +μηχάνημα που θα λειτουργούσε ως spooler. Οι spoolers αυτοί θα έπρεπε όμως να μπορούν να επικοινωνούν με κάθε λογής \"πελάτες\" (Windows, NT, Unix, Novell κ.λ.). +Έπρεπε να είναι αρκετά φθηνοί ώστε να μπορούν να αγοραστούν εκατοντάδες από αυτούς. Τέλος, έπρεπε να μπορεί κανείς να βασιστεί σε αυτούς, από τεχνικής απόψεως. + +Σήμερα, όλοι αυτοί οι 10.000 άνθρωποι ανά τον κόσμο μπορούν να εκτυπώνουν σε οποιονδήποτε από τους 1600 εκτυπωτές. Και όλες αυτές οι εκτυπώσεις περνάνε μέσα από +μηχανήματα που τρέχουν Linux. + +Η ιστορία αυτή αναφέρεται στο *Linux Journal (Dec 1997/Issue 44, σελ.35)* . + +Ακόμη, στο αναφέρεται ότι η CISCO χρησιμοποιεί Linux μηχανήματα σαν Network file servers, για συγγραφή κειμένων +(με ApplixWare), για σύνδεση με το Internet (Netscape Navigator, e-mail) καθώς και για software development\... diff --git a/content/articles/01/06_redhatinst.md b/content/articles/01/06_redhatinst.md new file mode 100644 index 0000000..347d591 --- /dev/null +++ b/content/articles/01/06_redhatinst.md @@ -0,0 +1,47 @@ ++++ +title = 'Πώς να εγκαταστήσετε το Redhat Linux από το Internet' +date = '1998-01-01T00:00:00Z' +description = '' +author = 'Γεωργάτος Φώτης gef@ceid.upatras.gr(mailto:gef@ceid.upatras.gr?subject=LINUX-MAGAZ) Κεραμίδας Γιώργος' +issue = ['Magaz 01'] +issue_weight = 6 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Από τους μεγαλύτερους πονοκέφαλους στο Linux είναι η εγκατάστασή του, γιατί συνήθως είναι χρονοβόρα και εάν \"σκαλώσει\" σε κάποιο πρόβλημα, θέλει κάποια +εμπειρία για να καταλάβει κανείς τι είναι καλύτερο να κάνει και πώς. Η κατάσταση αυτή αλλάζει σιγά-σιγά, καθώς η εγκατάστασή του γίνεται όλο και πιο εύκολη.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τελευταία, δοκιμάσαμε μία διανομή του Linux, που φάνηκε πολύ εύκολη στην εγκατάσταση ακόμη και για αρχάριους: το Redhat 5.0. Επιπρόσθετα, εάν κανείς είναι +συνδεδεμένος με καλή ταχύτητα στο Internet (\>100Kbps, όχι modem!), το μόνο που απαιτεί είναι να φτιάξει κανείς δυο δισκέτες, και να κάνει εκκίνηση με αυτές. + +Η εγκατάσταση έγινε με χαρακτηριστική ευκολία, καθώς οι πιο πολλές ρυθμίσεις έγιναν αυτόματα. Οι σημαντικότερες πληροφορίες που έπρεπε να παρέχουμε εμείς ήταν η +διεύθυνση IP, το domainname, ο εξυπηρέτης DNS, ο ftp server που είχε το Linux σε μορφή εγκατάστασης (πχ ftp.linux.gr), και η διαδρομή μέσα σε αυτον +(/pub/redhat/redhat-5.0/i386/). Επίσης ενημερώσαμε στο πρόγραμμα εγκατάστασης το λογισμικό (πακέτα) που θέλαμε. + +Από την στιγμή που πατήσαμε το τελευταίο ENTER, για 2 ώρες η εγκατάσταση προχώρησε ομαλότατα, ξεπερνώντας τις δυσκολίες ενός πολύ ασταθούς δικτυακού +περιβάλλοντος, όπως είναι ένα υπολογιστικό κέντρο σχολής Η/Υ, που την συγκεκριμένη στιγμή ήταν και εξαιρετικά φορτωμένο. Υποθέτουμε ότι με μία καλή σύνδεση και +επιλέγοντας ώρα που το δίκτυο δεν είναι φορτωμένο, μπορεί να γίνει σε 20\'. + +Αφού τελείωσε η εγκατάσταση, μπήκαμε στο νέο σύστημα και διαπιστώσαμε ότι η RedHat έχει κάνει πολλές επιλογές και αυτοματισμούς για λογαριασμό ενός νέου χρήστη, +που αυξάνουν σημαντικά την ευχρηστία του Linux. Χαρακτηριστικό είναι το περιβάλλον του fvwm-95, που δίνει την αίσθηση που έχει κανείς σε άλλα δημοφιλή γραφικά +περιβάλλοντα. Μεγάλη ευκολία είναι ο Redhat Package Manager (RPM), που δίνει μεγάλη ευκολία στην (απ)εγκατάσταση εφαρμογών. Δεν χρειάστηκε kernel compile, καθώς +όλες οι ρυθμίσεις έγιναν αυτόματα. + +Εμείς δοκιμάσαμε και στήσαμε και το KDE-beta2, το οποίο αν και beta δείχνει αρκετά όμορφο και σχετικά σταθερό. Σας συνιστούμε τουλάχιστον να το δείτε: + + +Το Redhat 5.0, το βρήκαμε και στα εξής μέρη στην Ελλάδα: ( Επιλέξτε αυτό που είναι πιο γρήγορο σε εσάς ) + +- +- [ftp://ftp.csi.forth.gr/sunsite/linux/sunsite\_archive/ + distributions/redhat/redhat-5.0/i386/](ftp://ftp.csi.forth.gr/sunsite/linux/sunsite_archive/distributions/redhat/redhat-5.0/i386/) +- + +Στον υποκατάλογο images θα βρείτε τα boot.img, supp.img που είναι οι 2 δισκέτες για την εκκίνηση, που θα φτιάξετε χρησιμοποιώντας το ./dosutils/rawrite.exe. +Στον ίδιο κατάλογο υπάρχει το fips, ένα εργαλείο για να \"κόψετε\" τον σκληρό σας δίσκο σε partitions, διατηρώντας τα δεδομένα που ήδη έχει. + +Να έχετε υπ\' όψιν σας ότι η εγκατάσταση του Redhat 5.0 μπορεί να γίνει και από τα ανάλογα bootable CD της Redhat. Επίσης, ενημερωθήκαμε ότι τέλος Ιανουαρίου θα +κυκλοφορήσει το [Linux Developer\'s Resource](http://www.infomagic.com/infomagic/2linux.html) της Infomagic (6CD, περιλαμβάνει το Redhat). diff --git a/content/articles/01/07_kerncomp.md b/content/articles/01/07_kerncomp.md new file mode 100644 index 0000000..9d259ee --- /dev/null +++ b/content/articles/01/07_kerncomp.md @@ -0,0 +1,84 @@ ++++ +title = 'Επιτάχυνση της κατασκευής πυρήνα μέσω NFS' +date = '1998-01-01T00:00:00Z' +description = '' +author = 'Γεωργάτος Φώτης gef@ceid.upatras.gr(mailto:gef@ceid.upatras.gr?subject=LINUX-MAGAZ)' +issue = ['Magaz 01'] +issue_weight = 7 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Από τις πιο εντυπωσιακές διαφορές του Linux από τα άλλα λειτουργικά συστήματα, είναι η μεταγλώττιση του πυρήνα (kernel).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Όταν πρωτοστήνει κανείς ένα Linux σύστημα, συνήθως παίρνει ένα πυρήνα που να δουλεύει, αλλά σπάνια αυτός αντιστοιχεί στις πραγματικές ανάγκες ενός χρήστη, άρα η +κατασκευή ενός νέου είναι επιβεβλημένη. Η διαδικασία αυτή είναι μάλλον διασκεδαστική - γιατί αφήνει την αίσθηση του πλήρη ελέγχου στον Η/Υ - αλλά και λίγο +χρονοβόρα, συνήθως είναι υπόθεση 15 λεπτών. + +Θα σας δείξω, τώρα, πώς χάρις στην μεγάλη ευελιξία του Unix (άρα και του Linux), κατάφερα να μειώσω στο 1/20, τον χρόνο μεταγλώττισης, χρησιμοποιώντας την +ταχύτητα και μνήμη ενός γρήγορου συστήματος, που δούλευε για λογαριασμό ενός αργού. + +Είχα ένα τοπικό δίκτυο ethernet με δύο Linux Η/Υ, έναν 386SX-20, 6MB RAM, 340MB HDD (Πόρος), και έναν 486DX-100, 20MB RAM, 1.2GB HDD (Κατελειός). + + |----*---------------*------| + | | + -------- ----------- + |ΠΟΡΟΣ | |ΚΑΤΕΛΕΙΟΣ| + |386-20| | 486-100 | + -------- ----------- + +Ο 486-100 ήθελε γύρω στα 30 λεπτά, αλλά ο 386-20 ήταν απαράδεκτα αργός στην κατασκευή πυρήνα γιατί ήθελε 17 ώρες (1 προς 34). + +Την πρώτη φορά που έκανα το compile στον 386, νόμιζα ότι είχε κολήσει γιατί δούλευε όλη την ώρα στον δίσκο (swapfile). Αιτία ήταν ότι το compile, και ειδικά του +πυρήνα, απαιτεί μεγάλες ποσότητες μνήμης τις οποίες ο 386 με 6MB τις παρείχε σαν ιδεατή μνήμη (virtual memory). Δεν ήμουν σίγουρος για το τι συμβαίνει και έτσι +διέκοψα την μεταγλώττιση (απλά με control-c). Λίγες μέρες αργότερα τον έβαλα να φτιάξει πυρήνα και μέτρησα περίπου 17 ώρες. + +Κάποια στιγμή χρειάστηκε ο Πόρος νέο πυρήνα οπωσδήποτε, αλλά δεν ήμουν πρόθυμος να τον περιμένω 17 ώρες\... Το να φτιάξω πυρήνα στον 486 μέσα σε ένα μισάωρο, +και να τον αντιγράψω δεν έστεκε σαν λύση, γιατί το compile εκτός από το 1 αρχείο που φτιάχνει και είναι ο πυρήνας (zImage), κάνει πολυάριθμα άλλα πράγματα όπως +τα modules και κάποιες ρυθμίσεις στο /boot και στα include αρχεία, νομίζω. Κοντολογίς, θα έφτιαχνα \"μισό\" πυρήνα και θα χάλαγα ενδεχομένως τον 486 στις +ρυθμίσεις του. + +Ιδού λοιπόν η λύση: Κάνω **export** το / (root filesystem) του Πόρου, + + echo "/ kateleios(rw,no_root_squash)" >>/etc/exports + kill -HUP `pidof rpc.nfsd rpc.mountd` + +και το προσαρτώ στον 486 σε έναν υποκατάλογο του: + + mount poros/ /mnt. + +Αυτό το σύστημα λέγεται **NFS** (Network FileSystem), και είναι η τυπική μέθοδος για την διανομή αρχείων μεταξύ Unix συστημάτων. + +Στην συνέχεια εκτελώ την εντολή **chroot** στον Κατελειό, ως root: + + chroot /mnt sh + +Αυτή η εντολή λέει στον πυρήνα ότι η διεργασία sh (που τρέχει στον Κατελειό) και τα παιδιά της, αλλάζει το root directory και όταν θα αναφέρεται στο +/usr/local/src ας πούμε, θα εννοεί το /mnt/usr/local/src. Τι σύμπτωση, εκεί είναι ο πηγαίος κώδικας του πυρήνα του Πόρου\... Ότι κάνουμε από εδώ και στο εξής, +\"τρέχει\" σαν διεργασία στον Κατελειό αλλά φορτώνει και δουλεύει από τον δίσκο του Πόρου. + +Αρχίζουμε λοιπόν, μέσα από το \"περίεργο\" shell: + + cd /usr/src/linux + make config + make dep + make clean + make zImage + +Σε ένα 40λεπτο ο πυρήνας είναι έτοιμος, χρησιμοποιώντας την άπλετη μνήμη και υπολογιστική ισχύ του 486. Δεν τελειώσαμε όμως: + + make modules + make modules_install + +Ο νέος πυρήνας υπάρχει στο /usr/src/linux/arch/i386, αλλά δεν είναι ακόμα ενήμερο το LILO στον Πόρο. Όχι!!! μην γράψετε lilo στο shell αυτό, γιατί μόνο το MBR +του 486 είναι ορατό στο lilo. Απλά, βγήκα από το shell και έκανα telnet poros, μπήκα σαν root, αντέγραψα τον πυρήνα στο /zImage (εγώ τον τοποθετώ εκεί) και +εκτέλεσα lilo. Το σύστημα ενημερώθηκε για την αλλαγή του πυρήνα και στο επόμενο reboot δούλεψε μια χαρά. + +Υποδείξεις: + +- Το όταν παίξετε με τη chroot, δοκιμάστε με το directory /bin, ώστε να μπορείτε να κάνετε ls. +- Το read-write export του /, πιθανόν να είναι πρόβλημα ασφάλειας για το σύστημά σας. Εάν το τοπικό δίκτυό σας το παραμονεύει κανένας cracker, θα έπρεπε να + προσέχετε. +- Τα νέα συστήματα (πχ PPro-200,32MB) κάνουν την κατασκευή πυρήνα μέσα σε 5 λεπτά, σχεδόν interactive\... +- Ο τελευταίος πυρήνας υπάρχει στο , και είναι ο linux-2.0.33 (31-12-97). diff --git a/content/articles/02/01_editorial.md b/content/articles/02/01_editorial.md new file mode 100644 index 0000000..edd8063 --- /dev/null +++ b/content/articles/02/01_editorial.md @@ -0,0 +1,54 @@ ++++ +title = 'Editorial' +date = '1998-02-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 02'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Τι έγινε ρε παιδιά; Aλλη δουλειά δεν είχατε, το *Magaz* επισκεπτόσασταν; Αλήθεια, **800** άτομα; Καλά, το δέχομαι, οι 25 επισκέψεις είναι δικές μου, οπότε +φαντάζομαι ότι γύρω στις 50 - 100 είναι από τους συντελεστές του περιοδικού. Αλλά αυτό δεν αλλοιώνει την πραγματικότητα. Η προσέλευση του κόσμου ξεπέρασε τις +προσδοκίες μας.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Επειδή ίσως να μην ξέρετε τι σημαίνει αυτό, θα σας πω τα εξής: στο [Linux counter](http://leangen.uninett.no:29659), είναι καταχωρημένοι περίπου 250 Έλληνες +χρήστες του Linux. Αλήθεια, εσείς από το Ηράκλειο, συντονιστείτε. Έχει τουλάχιστον 5 ή 6 κατηγορίες, με το Ηράκλειο Κρήτης να γράφεται με κάθε δυνατό συνδυασμό +αγγλικών χαρακτήρων! Στην λίστα linux-greek-users είναι 150 άτομα. Αν υποθέσουμε ότι τα 100 άτομα είναι κοινά, μας κάνουν σύνολο 300 άτομα. Μάλλον μικρό νούμερο +σε σχέση με τα 800. Τελικά είμαστε περισσότεροι Έλληνες χρήστες Linux απ\' ότι φανταζόμασταν. Oι υπόλοιποι, δεν περνάτε μια βόλτα από το [Linux +counter](http://leangen.uninett.no:29659), να γραφτείτε; Έτσι, για να ξέρουμε τελικά τι μας γίνεται. + +Επίσης καλό θα ήταν να γραφτείτε και στη λίστα. Στείλτε ένα mail στο γράφοντας απλώς στο κείμενο του μηνύματος subscribe +linux-greek-users. + +Τον Παναγιώτη Βρυώνη τον πήρανε φαντάρο (όχι, δεν είναι σχήμα λόγου, αλήθεια είναι). Βασικά οχι φαντάρο, ναύτη απ\' ότι ξέρω. Του ευχόμαστε καλή θητεία, και εκ +μέρους σας :-) Ο Παναγιώτης υποσχέθηκε να \"στείλει αγωνιστικούς χαιρετισμούς, μόλις βρει σύνδεση\". Τον βλέπω να ξεκινάει στήλη \"Ανταπόκριση από το μέτωπο: +Πως πείστηκε ο Ελληνικός στρατός να χρησιμοποιήσει Linux για τα μηχανήματά του\" (Παναγιώτη πιστεύω -και περιμένω- ότι μπορείς να το κάνεις. Εμείς πάντως +είμαστε μαζί σου). Μια που ο Παναγιώτης δεν θα μπορεί να βοηθήσει για μερικά τεύχη, να σας πληροφορήσω ότι \"ορφάνεψε\" η στήλη RealWorld. Ζητείται\... πατέρας. +(Ευχάριστο περιβάλλον εργασίας, υψηλός μισθός και ιδιαιτέρα γραμματέας, δεν παρέχονται\...) + +Επίσης, να επαναλάβω για άλλη μία φορά, ότι το *Magaz* δεν είναι κλειστό περιοδικό. Aρθρα (και κάθε είδους βοήθεια γενικά) δεν είναι απλώς καλοδεχούμενα. Είναι +μία προϋπόθεση για να έχει το περιοδικό μία συνέχεια και ένα υψηλό επίπεδο. Σκεφτείτε το σαν να γράφετε μία έκθεση με \"ελεύθερο θέμα\". Εξάλλου, κάποτε διάβασα +σε ένα βιβλίο του Καζαντζάκη, ότι ένας άντρας πρέπει να κάνει τρία πράγματα στη ζωή του: Να γεννήσει παιδί, να φυτέψει ένα δέντρο και να γράψει ένα βιβλίο. Ε, +φαντάζομαι ότι τα άρθρα σε ένα τέτοιο περιοδικό θα μπορούσαν να θεωρηθούν βιβλίο. Και για να μην κατηγορηθώ για φαλλοκράτης, πιστεύω ότι και μία γυναίκα πρέπει +να κάνει αυτά τα τρία (ο Καζαντζάκης πάλι, δεν το πίστευε απ\' ότι φαίνεται\...) + +Θα θέλαμε να σας ευχαριστήσουμε για τα γράμματα που πήραμε. Το οποίο μου θυμίζει να σας προτείνω να κοιτάξετε τη νέα στήλη, αυτή της αλληλογραφίας.\ +Σε αυτό το τεύχος, εκτός από τη νέα στήλη της αλληλογραφίας, έχουμε και μερικές από τις παλιές.\ +Το Editorial, το οποίο και διαβάζετε.\ +Η πάντα καλή στήλη του Παναγιώτη Βρυώνη, \"Μερικοί το παίρνουν σοβαρά\", έχει μία πολύ κατατοπιστική συνέντευξη με τον Reinhold Schoeb από την Daimler-Benz (πιο +γνωστή ίσως ως Mercedes).\ +Η ανάλυση αυτού του τεύχους, ασχολείται με το τι έχει να αντιμετωπίσει το Linux.\ +Τα μαστορέματα έχουν να κάνουν με το γνωστό σε όλους πρόγραμμα Samba. + +Ελπίζουμε να μας συγχωρέσετε για το \"φτωχό\" αυτού του τεύχους. Κάτι οι εξετάσεις των Πανεπιστημίων, κάτι ο στρατός, κάτι η έλλειψη (ακόμα) οργάνωσης, και όπως +πάντα η έλλειψη ελεύθερου χρόνου, συνέβαλαν σε αυτό. Δεν θεωρώ ότι το τεύχος αυτό υπολείπεται του πρώτου. Απλά \"φαίνεται\" λιγότερο. + +Για τα επόμενα τεύχη, θέλουμε να προσθέσουμε μια - δυο στήλες ακόμη. Θα τα καταφέρουμε αν μας βοηθήσετε. Έχουμε ήδη ορισμένους υπ\' όψη μας οι οποίοι εξέφρασαν +την πρόθεση να βοηθήσουν, καθώς έχουμε και θέματα να προσφέρουμε σε \"εθελοντές αρθρογράφους\". Δείτε και τη στήλη Νέα - Ανακοινώσεις αυτού του τεύχους να +καταλάβετε για τι βοήθεια μιλάμε. Για να τελειώνω αυτό τον κουραστικό μονόλογο, νας σας πω ότι ο,τιδήποτε έχει να κάνει με Linux (και ειδικά Linux και Ελλάδα), +έχει χώρο στο περιοδικό. Η δική σας στήλη σας περιμένει. + +Aντε και το φάγαμε το Linux Journal!!! diff --git a/content/articles/02/02_managers.md b/content/articles/02/02_managers.md new file mode 100644 index 0000000..bfa082a --- /dev/null +++ b/content/articles/02/02_managers.md @@ -0,0 +1,165 @@ ++++ +title = 'Η μάχη της αγοράς' +date = '1998-02-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 02'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένα από τα θέματα που απασχολούν πολλούς στην κοινότητα του Linux, είναι η διασπορά του στην ελεύθερη αγορά. Αν είναι το Linux έτοιμο να κυριαρχήσει ως το +λειτουργικό του μέλλοντος, και αν ναι, τι το κρατάει. Αν όχι, τι πρέπει να γίνει για να φτάσουμε σε αυτό το σημείο.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Ιστορικά στοιχεία** +--------------------------------------------------- + +**2. Η πραγματική μορφή της κατάστασης** +------------------------------------------------------------------- + +**3. Δηλαδή υπάρχουν άνθρωποι που το χρησιμοποιούν, πέρα από τους φοιτητές;** +-------------------------------------------------------------------------------------------------------- + +**4. Το στοίχημα των managers** +---------------------------------------------------------- + +**5. Και τι μπορούμε να κάνουμε;** +------------------------------------------------------------- + + +### [1. Ιστορικά στοιχεία]{#s1} + +Πριν από όχι πολλά χρόνια, το 1993 συγκεκριμένα, ο Bill Gates και η Microsoft βγάλανε τα Windows 3.1, την πιο ώριμη έκδοση του GUI αυτού, το οποίο έτρεχε πάνω +από το DOS, βγάζοντας έξω από το παιχνίδι δύο ισχυρούς ανταγωνιστές. + +Την Digital Research, η οποία με το DRDOS 6.0 είχε τραβήξει πολύ κόσμο από το MSDOS 5.0, την πολέμησε με ένα πολύ απλό κόλπο του marketing. Τα Windows 3.1 δεν +δούλευαν με το DRDOS 6.0 αλλά μόνο με το MSDOS 5.0, λόγω ασυμβατότητας στον memory manager, το γνωστό HIMEM.SYS. Η αλήθεια είναι βέβαια λίγο διαφορετική, και +όσοι τότε το είχαν καταλάβει, κατάλαβαν και το παιχνίδι του κ. Gates. Αν κάποιος άλλαζε το όνομα του memory manager του DRDOS 6.0 και από HIDOS.SYS το έκανε +HIMEM.SYS, τα Windows 3.1 δούλευαν κανονικότατα!!! Αυτό βέβαια ήταν μάλλον ένα κόλπο για τους \"μυημένους\", και πάλι υπήρχε η αμφιβολία: \"Μα δεν μπορεί να +είναι τόσο απλό!!!\". Κι όμως ήταν τόσο απλό. Και όποιος το δοκίμασε, μεταξύ αυτών και ο υπογράφων, μπορεί να σας διαβεβαιώσει ότι δεν είχε ποτέ κανένα +πρόβλημα. + +Την IBM, η οποία τότε είχε βάλει όλες τις δυνάμεις της στην παραγωγή (από κοινού με την Microsoft) ενός νέου λειτουργικού συστήματος, του OS/2, έπρεπε να την +πολεμήσει με άλλους τρόπους. Έτσι, ο κ. Gates, \"άφησε\" τα Windows 3.1 να αντιγράφονται ελεύθερα, φέρνοντάς τα έτσι σε κάθε σπίτι. Παρανόμως, αλλά ποιος έδινε +σημασία; Τα Windows 3.1 ήταν εκεί και δωρεάν. Ομοίως και το Office (μήπως είναι τυχαίο ότι το πρώτο προιόν της Microsoft το οποίο ΠΡΑΓΜΑΤΙΚΑ χρειάζεται serial +number για να λειτουργησει είναι το Office 97;) Το OS/2 αργούσε ακόμα. Όταν τέλος βγήκε το OS/2 (η έκδοση 3.0-Warp), ένα σταθερό και πολύ αξιόλογο (συγκριτικά +με τα \"αντίστοιχα\" της Microsoft) λειτουργικό σύστημα, ήταν ήδη πολύ αργά. Τα Windows 95 δεν ήταν εκεί, αλλά υπήρχε το \"φάντασμα\" της ασυμβατότητας με τα +Windows 3.1. Βλέπετε, όταν ο κ. Gates αποχώρησε από την ανάπτυξη του OS/2, πήρε από την ΙΒΜ και το δικαίωμα να χρησιμοποιεί κώδικα των Windows 3.1 στο +λειτουργικό που ετοίμαζε. + +H Apple με τη σειρά της, φρόντισε η ίδια να μείνει έξω από το παιχνίδι, δίνοντας το λειτουργικό της μόνο στα συστήματά της (τα οποία ήταν και πολύ ακριβά). Έτσι +ο κ.Gates έμεινε χωρίς αντίπαλο στη μάχη των λειτουργικών. Η αλήθεια βέβαια είναι ότι το πρώτο λειτουργικό που έβγαλε η Microsoft ήταν τα Windows NT 3.1, τα +οποία ήταν επιεικώς απαράδεκτα ως λειτουργικό. Τα Windows NT 4.0 ήταν η πρώτη αρκετά σταθερή έκδοση που μπορούσε να χαρακτηριστεί αξιόπιστο λειτουργικό. Αν +συγκρίνουμε όμως τα Windows NT 4.0 με οποιοδήποτε άλλο λειτουργικό ίδιας κλάσης (OS/2, Linux κλπ) θα δούμε ότι η όποια διάδοσή του στηρίζεται σε αυτή ακριβώς τη +συμβατότητα (με τα Windows 95 εν προκειμένω). Τελικά αυτό που έχει γίνει, είναι να έχουν φτάσει τα Windows95 σε κάθε σπίτι, επειδή υπάρχει software \"δωρεάν\" +διαθέσιμο. Όχι, δεν είναι δωρεάν, πειρατικό είναι, αλλά με τις \"ευλογίες\" (άτυπες βέβαια) του ίδιου του κατασκευαστή. + + +### [2. Η πραγματική μορφή της κατάστασης]{#s2} + +Από την άλλη μεριά, υπάρχει ένα λειτουργικό το οποίο είναι πραγματικά, και όχι ως κόλπο του marketing, δωρεάν. Το Linux, ένα σταθερό Unixοειδές λειτουργικό για +φτηνούς Η/Υ (δηλ. τεχνολογίας x86). Το Linux αναπτύσσεται από ερασιτέχνες. Δεν θα αναλύσω την ιστορία του Linux, η οποία είναι λίγο πολύ γνωστή. Θα αναφέρω μόνο +τα θετικά και αρνητικά σημεία που αυτό έχει, όχι από τεχνική σκοπιά, αλλά από marketίστικη. Το Linux αναπτύσσεται παράλληλα από πάρα πολλούς ανθρώπους σε όλο +τον κόσμο. Αυτό σημαίνει δύο πράγματα. + +- Πρώτον, ότι είναι μπροστά στις εξελίξεις, είναι ευέλικτο και, όσο περνάει ο καιρός και ασχολείται όλο και πιο πολύς κόσμος με την ανάπτυξή του, θα γίνει (αν + δεν είναι ήδη) ένα λειτουργικό το οποίο βρίσκεται στην κορυφή της τεχνολογίας. +- Δεύτερον, ότι δεν υπάρχει υποστήριξη. Ένα κακογραμμένο κομμάτι κώδικα μπορεί να δημιουργήσει αρκετά προβλήματα. Αυτό όμως ισχύει κυρίως για τα προγράμματα, + και όχι για μέρη του λειτουργικού. + +Τα πράγματα είναι απλά τώρα πια. Οι συγκρίσεις είναι μάλλον αστείες. Το Linux, χωρίς την οικονομική στήριξη του Redmond, χωρίς λεφτά να πληρώσει ένα σωρό +(καλούς ή κακούς) προγραμματιστές, βρίσκεται ήδη σε πάρα πολύ καλό δρόμο. Ας δούμε ορισμένα στοιχεία: + +- Αν και ξεκίνησε για να τρέχει σε i386 επεξεργαστές, τώρα τρέχει σε Alpha, Sparc, Mips, PowerPC, 680x0 και μάλλον και άλλους τους οποίους δεν θυμάμαι. + Δηλαδή, είναι αυτή τη στιγμή το μόνο λειτουργικό το οποίο \"τρέχει\" σε οποιοδήποτε σχεδόν hardware. +- Αναπτύσσεται ακολουθώντας την τεχνολογία στην πληροφορική. To ΑΤΜ, αυτό που από πολλούς θεωρειται το μέλλον σε τοπικά και ευρείας περιφέρειας δίκτυα, ήδη + υποστηρίζεται από το Linux (αλλά και από τα Windows 98. Το θέμα είναι το πιο από τα δύο θα δουλεύει). Το Corba, ένα project της ΕΟΚ για τηλεπικοινωνίες, + υποστηρίζεται από το Linux. Και άλλα πολλά τέτοια τα οποία θα ήταν αδύνατο να απαριθμήσω. +- Υπάρχουν εταιρείες λογισμικού οι οποίες \"στηρίζουν\" το Linux. Και δεν μιλάμε μόνο για εμπορικές εταιρείες (οι οποίες έχουν την ευφυία να διαθέτουν τα + προιόντα τους για Linux σε χαμηλότερες τιμές απ\' ότι για τα άλλα λειτουργικά) όπως η Corel (με την πρόσφατα εξαγορασμένη Wordperfect), η Netscape, πρόσφατα + άκουσα και η Informix, αλλά και για εταιρείες οι οποίες πουλάνε τα προγράμματά τους στους άλλους και τα δίνουν δωρεάν στους χρήστες Linux (όπως η + StarDivision με το πολύ καλό StarOffice). Υπάρχει και η Applixware, με το γνωστό σε όλους Applix, μία σουίτα προγραμμάτων πολύ αξιόλογη. + +Το Linux έχει \"κληρονομήσει\" τα καλά του Unix, και έχει αποβάλλει πολλά από τα κακά. Στα καλά που έχει κληρονομήσει, να βάλουμε την σταθερότητα ως λειτουργικό +σύστημα, την ασφάλεια και την πληθώρα freeware λογισμικού. Στα άσχημα που έχει αποβάλλει, να αναφέρουμε ότι το Linux, είναι το πρώτο Unixοειδές λειτουργικό +σύστημα το οποίο μπορεί να χρησιμοποιηθεί για desktop εφαρμογές (Office βασικά). Μόλις πρόσφατα η Sun υπέγραψε μία συμφωνία με την StarDivision για να γίνει +port το StarOffice σε Solaris. Μέχρι πρότινος δεν υπήρχε εύχρηστο Office πακέτο για Unix. Υπήρχαν βέβαια όλα αυτά τα οποία χαρακτήριζαν και χαρακτηρίζουν ένα +Workstation (π.χ. Latex).\ +Συγκρίσεις με άλλα Unices δεν μπορούν να γίνουν. Το Linux είναι καθαρό Unix, με όλα τα καλά (όπως είπαμε και προηγουμένως) των Unix, αλλά ένα ακόμα: είναι +δωρεάν. + + +### [3. Δηλαδή υπάρχουν άνθρωποι που το χρησιμοποιούν, πέρα από τους φοιτητές;]{#s3} + +Αν υπάρχουν λέει; Διαβάστε τη στήλη \"Ορισμένοι το παίρνουν σοβαρά\" του Παναγιώτη Βρυώνη, και θα καταλάβετε. Στο προηγούμενο τεύχος μας είπε για την Cisco. Σε +αυτό το τεύχος μας λέει για την Daimler-Benz. Να σας πω εγώ επίσης για την Byte (εκδοτικός οργανισμός) και την Corel Corporation (το καινούριο τους Network +Computer στηρίζεται σε μία μορφή Linux). Να σας θυμίσω επίσης (ή να ενημερώσω όσους δεν ξέρουν την ταινία \"Τιτανικός\" (πού φτιάχτηκε με Alpha επεξεργαστές που +έτρεχαν Linux). Πιστέψτε με, αυτά που σας λέω είναι ένα μικρό μόνο δείγμα. Ένα άλλο στοιχείο το οποίο δεν πρέπει να παραβλέπουμε, είναι η τρομερή διάδοση του +Linux στο Internet. Πάρα πολλοί servers (κυρίως ISPs) τρέχουν Linux. Στην δε Ελλαδίτσα μας, το Linux είναι το πιο διαδεδομένο λειτουργικό σύστημα για ISPs (ΕΕΧΙ +και Matrix-Kapatel είναι δύο μόνο παραδείγματα). Αλήθεια, μία έρευνα των ISP\'s για το τι λειτουργικό χρησιμοποιούν θα ήταν πολύ χρήσιμη. Έχει χρόνο κανείς; + +Το Linux έχει μπει εξίσου δυναμικά στην αγορά των Servers, σε αυτή των Workstation αλλά και σε αυτή των Desktop μηχανημάτων (γραμματειακή υποστήριξη). Και αν +ακόμα ορισμένες εταιρείες οι οποίες βγάζουν αξιόλογα προιόντα αρνούνται να παραγάγουν λογισμικό για Linux (π.χ. Adobe) υπάρχει η δυναμική κοινότητα του Linux η +οποία μπορεί και δημιουργεί ΔΩΡΕΑΝ κυρίως, τουλάχιστον ισάξια προγράμματα (Gimp, σε αντιπαράθεση με το Photoshop). + +Βλέπουμε λοιπόν ότι και σε επίπεδο servers, workstations αλλά και σε επίπεδο desktop, το Linux, αν δεν υπερέχει, \"χτυπάει το παιχνίδι στα ίσια\". Τι μας μένει + +### [4. Το στοίχημα των managers]{#s4} + +Σε κάθε μεγάλη εταιρεία, υπάρχουν οι δευθυντές, μερικοί διευθυντές, προιστάμενοι κλπ, κλπ. Η δουλειά του καθενός είναι να διαμοιράζει τις ευθύνες στους +υφισταμένους του, να μαζεύει δεδομένα από αυτούς και να τα παρουσιάζει στους προισταμένους του. Η διοίκηση μίας επιχείρησης, όσο μεγάλη και αν είναι αυτή, δεν +είναι και τόσο δύσκολη υπόθεση, αν έχεις πολλά διοικητικά στελέχη. Τουλάχιστον τόσα ώστε να μπορεί κάθε στέλεχος να λαμβάνει μία απόφαση κάθε εβδομάδα (και να +μην χρειάζεται η εταιρεία συχνότερες αποφάσεις). Παράξενο; Ναι, πολύ. Αλλά είναι η πραγματικότητα. Αν κάποιος για παράδειγμα, ως προιστάμενος υπηρεσίας +μηχανογράφησης, αν και άσχετος από Η/Υ, αναθέσει την έρευνα αγοράς για λειτουργικό σύστημα σε έναν υφιστάμενό του (κατά προτίμηση έμπειρο χρήστη Η/Υ), την +έρευνα αγοράς για την βάση δεδομένων σε έναν άλλο (κατά προτίμηση ένα αναλυτή με ειδικότητα στις βάσεις δεδομένων), την έρευνα αγοράς για το hardware σε έναν +άλλο (κατά προτίμηση μηχανικό Η/Υ), και αν αυτοί μπορέσουν να \"σπάσουν\" αυτές τις πληροφορίες έτσι ώστε να μπορέσουν να βάλουν άλλους να τις μαζέψουν, τότε το +μόνο που έχει να κάνει ο καθένας τους είναι να \"συνθέσει\" τα δεδομένα που του έρχονται \"από κάτω\" και να τα προωθήσει \"προς τα πάνω\". + +Για να μην παρεξηγηθώ, δεν υποβιβάζω τους managers. Αυτή η δουλειά όπως την παρουσίασα είναι από μόνη της πολύ δύσκολη, άσε δε που προυποθέτει ΠΟΛΥ ΚΑΛΗ επιλογή +προσωπικού. Αυτό όμως δεν αλλάζει τα δεδομένα. Ο κάθε manager έχει μία ευθύνη την οποία πρέπει να μοιράσει, και τελικά, αυτό που κάνει για να λειτουργήσει +αποδοτικά, είναι να κρατάει μόνο τα πολύ σοβαρά κομμάτια ευθύνης πάνω του. + +Ας έρθουμε τώρα στην Ελλάδα. Πόσες εταιρείες έχουν ικανοποιητικό αριθμό managers για να μπορέσουν να μοιράσουν τις δουλειές; Μάλλον καμμία. Το αποτέλεσμα +γνωστό. Η ευθύνη πάλι διασπάται, αλλά αυτή τη φορά βγαίνει και έξω από την εταιρεία. Τι τον νοιάζει τον Α manager αν το Linux (π.χ.) είναι πιο σταθερό από τα +Windows (π.χ.). Τίποτα. Αυτό που τον νοιάzει, είναι, αν κάτι πάει στραβά, να υπάρχει κάποιος άλλος να πάρει την ευθύνη. Πίσω από το Linux υπάρχουν \"ένα μάτσο +φοιτητές\" ενώ πίσω από τα Windows υπάρχει \"μία ολόκληρη εταιρεία\". Είναι καθαρά θέμα ευθυνών. Και όχι, κανένας manager στην Ελλάδα δεν πληρώνεται τόσο καλά, +ώστε να αποφασίσει να \"ρισκάρει\" τη θέση του, κάνοντας έναν απλό συλλογισμό: Τι εναλλακτικές λύσεις έχουμε; + +1. Εμπιστευόμαστε μία μεγάλη εταιρεία, τους πληρώνουμε αδρά για μία τεχνική υποστήριξη (η οποία μπορεί και να μην είναι και τόσο αποδοτική αλλά, υπάρχει εκεί + ένας προιστάμενος να πάρει το φταίξιμο), αγοράζουμε το προιόν τους το οποίο έχει διάρκεια ζωής 5 (π.χ.) χρόνια, πληρώνουμε κάθε μερική αναβάθμιση που θα + χρειαστούμε (ακόμα και το διόρθωμα των bugs το οποίο βγαίνει ως άλλη έκδοση του ίδιου προιόντος), και σε αυτά τα 5 χρόνια θα χρειαστώ άλλο ένα τέτοιο ποσό + για αναπλήρωση - αναβάθμιση. Συνολικό ποσό στα 5 χρόνια (οπότε θα έχει λήξει η \"περίοδος απόσβεσης\" 20.000.000 δραχμές). + + **Υπάρχει κάποιος να πάρει την ευθύνη, αν κάτι δεν πάει καλά.** + +2. Εμπιστευόμαστε ένα ελεύθερο (και ελεύθερα αναπτυσσόμενο) λειτουργικό σύστημα, δεν πληρώνουμε τίποτα σε καμμία εταιρεία για τεχνική υποστήριξη, δεν + πληρώνουμε τίποτα σε κανέναν για αναβαθμίσεις, προσλαμβάνουμε ένα - δύο - πέντε άτομα (ανάλογα με το μέγεθος της επιχείρησης και τον όγκο δουλειάς) τα οποία + ασχολούνται με αυτό μόνο το πράγμα, και δεν θα χρειαστώ ποτέ ποσό για αναπλήρωση - αναβάθμιση. Συνολικό ποσό στα 5 χρόνια (για μέτρο σύγκρισης και μόνο, και + χάριν του παραδείγματος, 10.000.000 δραχμές). + + **Η ευθύνη είναι όλη πάνω μας.** + +Δεν χρειάζεται να το συζητήσουμε. Η απόφαση του Έλληνα manager είναι ξεκάθαρη. Δεν τον απασχολεί το κόστος για την εταιρεία, όσο αυτός μπορεί να παρουσιάσει +έργο και *να μην κατηγορηθεί ποτέ για λάθος απόφαση.*\ +Στην Γερμανία, από την άλλη μεριά, και την Αμερική, υπάρχουν εταιρείες οι οποίες πουλάνε Η/Υ με προεγκατεστημένο Linux ως κύριο λειτουργικό. Εκεί είναι πολύ +διαφορετικά τα πράγματα. Οι managers, εκτός από άλλη παιδεία, έχουν και άλλη ελευθερία κινήσεων. Έχουν και καλύτερους μισθούς. Έχουν και την υποστήριξη των +προισταμένων τους σε θέματα μείωσης του κόστους. Το αποτέλεσμα γνωστό. Δεν υπάρχει μεγάλη παραδοσιακή εταιρεία στην Ελλάδα που να χρησιμοποιεί Linux (και μακάρι +να έχω άγνοια και να υπάρχουν). Μόνο οι ISPs οι οποίοι ξεκινούν ως \"παρέα\" και λογικά μόλις πάψουν να είναι παρέες και αρχίζουν να γίνονται επιχειρήσεις, που +ο καθένας πρέπει κάπου να λογοδοτήσει, αλλάζουν οι συσχετισμοί. Πρόσφατο παράδειγμα το Acropolis Net το οποίο από Linux γύρισε σε Windows NT. Ξέρετε τι +φαντάζομαι πως έγινε; (Το φαντάζομαι, δεν ξέρω αν είναι σωστό): + +Όχι, δεν πίστεψε κανείς ότι είναι τόσο πιο καλά τα NT ώστε να υποχρεώσουν μία εταιρεία να προβεί σε τέτοιο κόστος αντικατάστασης (προσωπικά δεν πιστεύω ότι +είναι πιο καλά τα ΝΤ, τελεία). Απλά μπήκαν στο \"κύκλωμα\" άνθρωποι οι οποίοι δεν έχουν σχέση με Η/Υ. Καθαροί managers\... + + +### [5. Και τι μπορούμε να κάνουμε;]{#s5} + +Τελικά αυτό που λείπει από την Ελλάδα είναι μία εταιρεία (ή δύο, ή και τρεις) τεχνικής υποστήριξης του Linux (και επαγελματικό προσανατολισμό το magaz?). Μία +εταιρεία η οποία θα παρέχει τις υπηρεσίες της σε κόστος το οποίο σίγουρα θα είναι ανταγωνιστικό προς τις μεγάλες εταιρείες, μια που το μόνο που χρειάζεται είναι +μία γραμμή προς το Internet, και δυο-τρεις Η/Υ. Μία εταιρεία που με τις κατάλληλες κινήσεις θα πείσει τον κόσμο να εμπιστευτεί το Linux. Όχι, δεν χρειάζεται +κανείς να πείσει τον κόσμο ότι το Linux είναι καλύτερο. Αυτό θα γίνει στην πορεία. Αυτό που χρειάζεται είναι να πειστούν οι μεγάλες εταιρείες να του δώσουν μια +ευκαιρία\... + diff --git a/content/articles/02/03_realworld.md b/content/articles/02/03_realworld.md new file mode 100644 index 0000000..0fca404 --- /dev/null +++ b/content/articles/02/03_realworld.md @@ -0,0 +1,64 @@ ++++ +title = 'Ορισμένοι το παίρνουν σοβαρά - Daimler-Benz AG' +date = '1998-01-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 02'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Πολλές μεγάλες επιχειρήσεις και οργανισμοί ανά τον κόσμο χρησιμοποιούν το Linux. Αυτό τον μήνα παρουσιάζουμε την Daimler-Benz.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτό τον μήνα θα δούμε πώς η Daimler-Benz AG (η γνωστή μας Mercedes), χρησιμοποιεί το Linux. Στο e-mail που του έστειλα, ο Reinhold Schoeb απάντησε σχεδόν +αμέσως, με τον ενθουσιασμό που χαρακτηρίζει την κοινότητα του Linux. + +Η ανταλλαγή e-mail κατέληξε τελικά με μία μικρή συνέντευξη που σας παραθέτω: + +*MAGAZ:Γράφω ένα άρθρο για το πρώτο τεύχος (τελικά για το δεύτερο\...) ενός ελληνικού περιοδικού για το Linux, που θα ονομάζεται MAGAZ. Θα γράφω μία στήλη που +θα λέγεται \"Το Linux στον πραγματικό κόσμο\" (έγινε \"Ορισμένοι το παίρνουν σοβαρά\").* + +R: Ωραία! Είμαι αναγνώστης των αμερικάνικων και γερμανικών περιοδικών για το Linux από τα πρώτα τους τεύχη. + +*MAGAZ: Έμαθα από το LINUX-BIZ ότι η Mercedes-Benz AG χρησιμοποιεί Linux. Θα εκτιμούσα πάρα πολύ αν θα μπορούσατε να απαντήσετε σε μερικές ερωτήσεις σχετικά με +τον τρόπο που η εταιρεία σας χρησιμοποιεί το λειτουργικό αυτό.* + +R: Βεβαίως. Αλλά πρώτα θα πρέπει να σου πω ότι η Mercedes-Benz ονομάζεται πλέον Daimler-Benz. Μόνο τα αυτοκίνητά μας έχουν τώρα πια το όνομα Mercedes. + +*MAGAZ: Πόσα \"κουτιά\" με Linux έχετε;* + +R: Επειδή η Daimler-Benz έχει περισσότερους από 300.000 υπαλλήλους κάτι τέτοιο είναι δύσκολο να σου το απαντήσω. Γνωρίζω για περίπου 50 συστήματα με Linux. Στην +ομάδα μου έχουμε περίπου 15. + +*MAGAZ: Αντικατέστησαν συστήματα που έτρεχαν κάποιο άλλο λειτουργικό;* + +R: Ναι, στην δικιά μου ομάδα πήγαμε από συστήματα Windows σε workstations της Sun με Solaris και όλο και περισσότερο σε PCs με Linux. + +*MAGAZ: Γιατί;* + +R: Ο λόγος ήταν οτι δεν είμασταν ικανοποιημένοι από την σταθερότητα των Windows. + +*MAGAZ: Σε ποιά τμήματα της εταιρείας χρησιμοποιείτε Linux;* + +R: Στα τμήματα έρευνας και ανάπτυξης. + +*MAGAZ: Τί είδους προγράμματα χρησιμοποιείτε με το Linux;* + +R: Τα πάντα, αλλά κυρίως Matlab/Simulink για γρήγορη ανάπτυξη πρωτοτύπων (rapid prototyping) και από την άλλη πλευρά το StarOffice στην θέση του Microsoft +Office. + +*MAGAZ: Ποιά είναι η γενική εντύπωση που έχετε για το Linux; Είστε ικανοποιημένοι;* + +R: Είμαστε πολύ ικανοποιημένοι. Το Linux είναι σταθερό σαν το Solaris, πολύ φθηνότερο και μπορεί κανείς να βρει κάθε είδος προγράμματος. + +*MAGAZ: Δηλαδή σκοπεύετε να χρησιμοποιήσετε περισσότερα συστήματα Linux στο μέλλον;* + +R: Ναι, νομίζουμε πως μπορούμε να αντικαταστήσουμε όλους τους σταθμούς εργασίας της Sun με συστήματα Linux στο μέλλον. Ο μόνος τομέας που δεν χρησιμοποιούμε +Linux είναι για τα συστήματα πραγματικού χρόνου (real time systems). Εκεί χρησιμοποιούμε το LynxOS, ένα εμπορικό real time Unix. Ο λόγος είναι ότι λόγω του +υπόλοιπου περιβάλλοντος στα αυτοκίνητα δοκιμών δεν μπορούμε να χρησιμοποιήσουμε επεξεργαστές Intel (χρησιμοποιούμε Motorola PowerPC). + +*MAGAZ: Σας ευχαριστώ.* + +R: Ελπίζω να βοήθησα. Καλή τύχη με το περιοδικό σας. diff --git a/content/articles/02/04_smbconf.md b/content/articles/02/04_smbconf.md new file mode 100644 index 0000000..c651545 --- /dev/null +++ b/content/articles/02/04_smbconf.md @@ -0,0 +1,171 @@ ++++ +title = 'SAMBA made easy\...' +date = '1998-02-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 02'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Για αυτό το δεύτερο τεύχος του Magaz σας ετοίμασα ένα case study. Πως μπορεί το Linux box που προφανώς έχετε, να επικοινωνήσει με τα Win 95 που έχουν οι +συνάδελφοι / φίλοι σας στον ίδιο χώρο (και προφανώς στο ίδιο ethernet).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ας μην μπερδευτούμε. Αυτό δεν είναι ένα HOW-TO (εξάλλου υπάρχει πολύ documentation για το SAMBA, σε αυτό θα αναφερθώ). Αυτό θέλω να είναι ένα dummy\'s guide. +Όχι, δεν θεωρώ κανένα dummy. Μόνο εμένα που πολλά από αυτά που γράφω με δυσκόλεψαν :-) Μία λύση είναι να στήσετε το πρωτόκολλο TCP/IP και στα Win95. Μετά με τα +γνωστά (Telnet, Ftp) μπορείτε να έχετε την ίδια σύνδεση με τα Win95 όπως και με τα άλλα Linux/Unix μηχανήματα. Για να κάνετε όμως mount τους δίσκους τους (και +να κάνουν αυτοί mount τους δικούς σας), χρειάζεται NFS. NFS server καθώς και NFS client έχετε στο Linuxακι σας. Τα ίδια προγράμματα για Win95 δεν υπάρχουν παρά +μόνο Shareware. Και η χρήση τους προϋποθέτει ρυθμίσεις στα μηχανήματα με Win95. Επειδή όμως εσείς είστε οι ειδήμονες και όχι οι Win95 users, ας δούμε πως +μπορείτε να έχετε σύνδεση, χωρίς πολλές παράξενες ρυθμίσεις στα Win95. Μπορείτε λοιπόν να χρησιμοποιήσετε το πρωτόκολλο για Peer-to-Peer σύνδεση που έχουν τα +Win95. Αυτό \"χρησιμοποιεί\" τις λέξεις SMB, NETBeui και NETBIOS. Το τι είναι τι, είναι λίγο μπερδεμένο. Όπως λέει το documentation του Samba, το NETBeui είναι +ένα low-level πρωτόκολλο, και το NetBIOS είναι ένα high-level πρωτόκολλο, που μπορεί να δουλέψει είτε πάνω από TCP/IP, ή πάνω από NETBeui, ή ακόμα και πάνω από +IPX/SPX. Η υλοποίηση που θα δούμε, χρησιμοποιεί το TCP/IP ως underlaying layer. Το πρόγραμμα που σας δίνει αυτή τη δυνατότητα λέγεται +[Samba](http://www.dlr.de/fresh/linux/src/samba-1.9.18.tar.gz). Οι ρυθμίσεις του είναι εύκολες, αν γίνουν με τη σωστή σειρά. (Εδώ υποθέτουμε ότι έχουν ρυθμιστεί +σωστά τα TCP/IP στο Linux και στα Windows 95). + +Στο σημείο αυτό θα ήθελα να ευχαριστήσω το [Χρήστο Ρικούδη](mailto:ricudis@paiko.gr), ο οποίος μου έλυσε πολλές απορίες κατά τη διάρκεια μιας αντιπαράθεσης που +είχαμε πρόσφατα στην linux-greek-users λίστα. Χρήστο ευχαριστώ, ελπίζω να τα κατάλαβα επιτέλους :-) + +**1. Στάδια εγκατάστασης\...** +-------------------------------------------------------- + +**2. Έλεγχος σωστής λειτουργίας\...** +--------------------------------------------------------------- + +**3. Χρήση** +-------------------------------------- + + +### [1. Στάδια εγκατάστασης\...]{#s1} + +- Θα χρειαστεί να ξαναδημιουργήσουμε τον πυρήνα (recompile του kernel), ενεργοποποιώντας στα Filesystems, τα SMB support και SMB Win95 bug workaround. Καλό θα + ήταν επίσης να ενεργοποιηθεί το Win95 vfat. Αυτό δεν είναι για να δούνε τα Win95 μηχανήματα τους δίσκους μας, αλλά για να δούμε εμείς τους δικούς τους. Θα + επανέλθουμε σε αυτό αργοτερα. +- Κάνουμε extract το [Samba](http://www.dlr.de/fresh/linux/src/samba-1.9.18.tar.gz) στο \"smbtar\" directory. Στο Makefile που βρίσκεται στο directory + \"smbtar\"/source πρέπει (αν θέλουμε να μην κάνουμε πολλές ρυθμίσεις αργότερα) να δηλώσουμε ως workgroup αυτό στο οποίο θέλουμε να ανήκουμε (δηλαδή αυτό στο + οποίο ανήκουν οι πιο συχνά χρησιμοποιούμενοι PC). Επίσης ορίζουμε το default guest account, το οποίο εξ ορισμού είναι το nobody (μάλλον όχι και τόσο καλή + ιδέα, όπως λέει και το ίδιο το Makefile, αφού αυτό το account στα Unix μηχανήματα δεν έχει δυνατότητα εκτύπωσης). Το default guest account είναι αυτό που + χρησιμοποιείται όταν κάποιος συνδεθεί στο μηχάνημά μας χωρίς username και password. Προσοχή, πρέπει να υπάρχει αυτό το account στο μηχάνημά μας (ένας + έλεγχος στο /etc/passwd θα σας επιβεβαιώσει την ύπαρξή του ή όχι). +- Οι υπόλοιπες ρυθμίσεις στο Makefile (directories, compiler κλπ) είναι θέμα του κάθε μηχανήματος. Έστω ότι ορίζουμε εγκατάσταση στο \"smbinst\" directory. +- Μετά τα (τυπικά) make, make install, έχουμε τα αρχεία που χρειαζόμαστε στο directory που ορίσαμε, εκτός από το smb.conf, το οποίο δεν υπάρχει και πρέπει να + δημιουργήσουμε. Για αρχή, είναι αρκετό να αντιγράψουμε το smb.conf από το directory \"smbtar\"/examples/simple στο \"smbinst\"/lib, και να αλλάξουμε το + guest account (το οποίο έχει ένα όνομα pcguest), σε αυτό που δηλώσαμε στο Makefile. +- Από το \"smbinst\"/bin, εκτελούμε to testparm, το οποίο ελέγχει το \"smbinst\"/lib/smb.conf για λάθη. Φυσιολογικά δεν πρέπει να υπάρχουν λάθη, οπότε + μπορούμε να συνεχίσουμε. Αν υπάρχουν όμως λάθη, μπορούμε απλά να κάνουμε comment τις γραμμές που μας δημιουργούν πρόβλημα. Αν χρειαζόμαστε όμως αυτές τις + υπηρεσίες, πρέπει να βρούμε που είναι το λάθος. + + +### [2. Έλεγχος σωστής λειτουργίας\...]{#s2} + +- Στο directory \"smbinst\"/bin υπάρχουν τα αρχεία nmbd και smbd. Αυτά είναι οι servers. Το μεν nmbd είναι ο NETBios Name server ενώ το smbd είναι ο SMB + server. Αυτοί οι servers, πρέπει να αρχίζουν όποτε καλούνται για να έχουμε πάντα σύνδεση. Συνεπώς πρέπει να τους προσθέσουμε στο γνωστό /etc/inetd.conf, + όπου ήδη υπάρχουν (ως comments) οι απαραίτητες γραμμές. Αν δεν υπάρχουν, είναι οι εξής: + + netbios-ssn stream tcp nowait root "smbinst"/bin/smbd smbd + netbios-ns dgram udp wait root "smbinst"/bin/nmbd nmbd + +- Καιρός να δοκιμάσουμε άλλη μία εντολή από το \"smbinst\"/bin. Γράφουμε + + nmblookup -B __SAMBA__ + + Το αποτέλεσμα πρέπει να είναι η IP διεύθυνση του μηχανήματος. + + π.χ. 192.168.0.2 __SAMBA__ + + Αν δεν πάρουμε αυτή την απάντηση, κάτι δεν πάει καλά με το nmbd (NETBios nameserver). Aν οι αναφορές στο inetd.conf είναι όπως γράφονται παραπάνω, δεν + πρέπει να έχουμε πρόβλημα. Ένα συνηθισμένο πρόβλημα είναι ότι το port 137 είναι κατηλειμμένο. Ας το εξακριβώσουμε. Με την εντολή netstat -a \| grep netbios + μπορούμε να ελέγξουμε ότι πράγματι το netbios-ssn είναι σε LISTEN mode, καθώς και ότι τα netbios-ns και netbios-dgm είναι ενεργοποιημένα (αυτά δεν πρέπει να + είναι σε LISTEN mode). + + tcp 0 0 *:netbios-ssn *:* LISTEN + udp 0 0 *:netbios-ns *:* + udp 0 0 *:netbios-dgm *:* + + Αν κάποια γραμμή από τις παραπάνω λείπει, πράγματι μία από τις υπηρεσίες δεν λειτουργεί. Γι\' αυτό ελέγχουμε το αρχείο /etc/services στο οποίο πρέπει να + υπάρχουν δηλωμένα τα sockets στα οποία ακούν αυτοί οι daemons. + + netbios-ns 137/tcp # NETBIOS Name Service + netbios-ns 137/udp + netbios-dgm 138/tcp # NETBIOS Datagram Service + netbios-dgm 138/udp + netbios-ssn 139/tcp # NETBIOS session service + netbios-ssn 139/udp + + Με ένα kill -HUP \"pid-of-inetd\" υποχρεώνουμε τον inetd να διαβάσει ότι αλλαγές κάναμε στα /etc/inetd.conf και /etc/services. Αν δοκιμάσουμε τώρα να + γράψουμε + + nmblookup -B "win95-pc" '*' + + πρέπει να δούμε την IP διεύθυνση του WIN95 μηχανήματος. + + π.χ. 192.168.0.1 * + +Tip \#1: Αν όλα τα παραπάνω πήγαν καλά, είμαστε σίγουροι ότι το nmdb (Netbios name-server) δουλεύει σωστά. Αν δεν δουλεύει σωστά, θα μπορούμε πάλι να +χρησιμοποιήσουμε το SMB αλλά με κάποιους περιορισμούς (στη χρήση των ονομάτων των μηχανημάτων). Εν ολίγοις, αν πρόκειται να δουλέψετε μόνο με IP διευθύνσεις, +δεν το χρειάζεστε. + +Tip \#2: Αν κάνετε accounts στο Linux, με username τα ονόματα των Win95 μηχανημάτων, το SMB θα ζητάει και password (το password του account) για τη σύνδεση από +τα Win95 στο Linux. To εύκολο σε αυτό είναι ότι ο χρήστης μπορεί να κάνει login στα Windows95 με το username του account που έχει στο Linux. + +Tip \#3: Δεν θα ήταν άσχημο εδώ, να ρίξουμε μια ματιά στο /etc/hosts.allow για να μην κάνουμε διαθέσιμους τους δίσκους μας σε όλο το Internet :-) + +### [3. Χρήση]{#s3} + +- Τώρα που έχουμε σωστά στημένους τους daemons, καιρός να δούμε πως θα χρησιμοποιήσουμε την υπηρεσία αυτή. Ένα άλλο αρχείο που υπάρχει στο \"smbinst\"/bin + είναι το smbclient, το οποίο μας δίνει τα shares που υπάρχουν σε συγκεκριμένο host. Η σύνταξή του στην απλή της μορφή είναι smbclient -L \"hostname\" και οι + πληροφορίες που δίνει είναι αρκετές: Domain, OS, Server, User, Workgroup, Shares, όλα στα χέρια μας. Η αλήθεια είναι ότι ήδη ξέρουμε τα Domain, OS, Server, + User και Workgroup (αφού εμείς τα ορίσαμε) αλλά είναι καλό να δίνονται αυτές οι πληροφορίες για troubleshooting. Τα shares τα οποία αναφέρονται είναι μία + καινούρια πληροφορία, η οποία έρχεται από το αρχείο \"smbinst\"/lib/smb.conf. Ήρθε λοιπόν η ώρα να \"πειράξουμε\" το αρχείο αυτό.Αυτό το αρχείο αποτελείται + από δηλώσεις, χωρισμένες σε sections. Το section \"global\" έχει τις επιλογές:\ + browsable = {yes/no} αν θα μπορεί κάποιος να δει το PC μας από το Network Neighborhood. Για να δουλέψει αυτό, πρέπει να δουλεύει σωστά το nmbd.\ + printing = {sysv/bsd/aix} ανάλογα με το πως έχουμε στήσει την υπηρεσία printing στο μηχάνημά μας (για Linux με ή χωρίς /etc/printcap, η επιλογή είναι bsd, + εκτός αν έχετε εσείς αλλάξει κάτι).\ + printcap name = {/etc/printcap} μόνο για bsd, το full path για το αρχείο printcap.\ + load printers = {yes/no} αν θα υπάρχει υπηρεσία εκτύπωσης από τα Win95 μηχανήματα.\ + guest account = {guest} Το account που δηλώσαμε στο Makefile (στάδιο 2), το οποίο ανταποκρίνεται σε οποιονδήποτε συνδέεται στο PC μας χωρίς account. Πρέπει + αυτό το account να υπάρχει στο μηχάνημα (συνήθως χωρίς δυνατότητα login και με πολύ λίγα δικαιώματα).\ + log file = {\"smbinst\"/log.%m} μία επιλογή για να γίνεται διαφορετικό logging για κάθε μηχάνημα που συνδέεται (%m).\ + lock directory = {\...} share modes = yes Αυτά τα δύο πρέπει να οριστούν αν θέλετε πολλοι χρήστες να χρησιμοποιούν τα ίδια αρχεία. Το lock directory πρέπει + να είναι world readable.\ + Το section \"Homes\" έχει τις επιλογές:\ + comment = {\...} Το όνομα με το οποίο θα εμφανίζεται το home directory του κάθε χρήστη στον υπολογιστή του (στο Network Neghborhood).\ + browsable = {yes/no} Όπως και στο section global. Μπορεί να γίνει και comment, για να χρησιμοποιηθούν οι ρυθμίσεις του global\ + read only = {yes/no} Αυτονόητο\ + create mode = {\...} Default Mask για νέα αρχεία (όχι umask, όπως σε standard Unix)\ + Το section \"printers\" έχει τις επιλογές\ + comment = {\...} Όπως ανωτέρω\ + browsable = {yes/no} Όπως ανωτέρω\ + printable = {yes/no} Δυνατότητα εκτύπωσης\ + public = {yes/no} αν θα μπορούν να έχουν δυνατότητα και guests (εκτός από normal users).\ + Για τα ανωτέρω sections, υπάρχουν και άλλες επιλογές, λιγότερο συχνά χρησιμοποιούμενες. Η ανάλυσή τους θα ήθελε πολύ χρόνο, οπότε\... man smb.conf Επίσης, + καλό θα ήταν να προστεθεί ένα section \"tmp\" για άτομα χωρίς account. + + "tmp" + comment = Temporary file space + path = /tmp + read only = yes + public = yes + + To νέο smb.conf θα διαβαστεί την επόμενη φορά που θα ξεκινήσει ο smbd. + +- Το εκτελέσιμο \"smbinst\"/bin/smbstatus μας δίνει τις \"ανοιχτές\" συνδέσεις Το εκτελέσιμο \"smbinst\"/bin/smbrun χρησιμοποιείται από το smbd. Το εκτελέσιμο + \"smbinst\"/bin/smbtar έχει ακριβώς την ίδια χρήση όπως το tar, αλλά για SMB shares. + +- Για να κάνετε και εσείς mount τα shares (δίσκους ή directories από Win95) θα χρειαστείτε το πακέτο + [smbfs](ftp://ftp.gwdg.de/pub/linux/misc/smbfs/smbfs.tgz), ενώ για να τυπώσετε σε SMB shared printer, θα χρειαστείτε το \"smbinst\"/bin/smbprint. Με το + πακέτο smbfs, τα πράγματα είναι απλά. Αυτό, μετά το compile θα σας δώσει δύο αρχεία: smbmount και smbumount. Η χρήση τους είναι η αυτονόητη: + + smbmount (smbumount) //"win95"/"share" "mount-point" [options] + + Συνήθως δεν χρειάζονται options, αλλά ένα smbmount -h θα σας δείξει τις πιθανές επιλογές. Το smbprint ωστόσο, δεν είναι εκτελέσιμο αλλά ένα script το οποίο + πρέπει εμείς να φτιάξουμε σύμφωνα με το δίκτυό μας. Νομίζω ότι οι οδηγίες που δίνονται στο αρχείο (ως comments) είναι πολύ κατατοπιστικές, οπότε δεν θα + ασχοληθώ μια που το καλύτερο που μπορώ να κάνω είναι μια\... μετάφραση. + +Σίγουρα υπάρχουν πολλά ακόμα πράγματα σχετικά με το Samba. Αυτό που προσπάθησα να κάνω είναι να δείξω πως \"στήνουμε και τρέχουμε\" ένα Samba server-client στο +Linuxάκι μας. Το σημαντικό βημα όμως, το οποίο θα πρέπει να κάνετε μόνοι σας, είναι το γνωστό \"finetuning\". Βελτιστοποίηση της λειτουργίας (και ασφάλειας) +αυτού του server. Καλή τύχη. + diff --git a/content/articles/02/05_news.md b/content/articles/02/05_news.md new file mode 100644 index 0000000..8fd462e --- /dev/null +++ b/content/articles/02/05_news.md @@ -0,0 +1,61 @@ ++++ +title = 'Νέα - Ανακοινώσεις' +date = '1998-02-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 02'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το magaz από αυτό το μήνα εγκαινιάζει μία νέα στήλη. Η στήλη των νέων και των ανακοινώσεων, θα είναι μία πολύ σύντομη στήλη, και θα υπάρχει μόνο όταν έχουμε +κάτι να πούμε. Δεν είναι η στήλη των νέων, γενικά. Είναι η στήλη των νέων των συντακτών του magaz.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +1. Νέες στήλες + + Το magaz χρειάζεται συνεργάτες. Αυτό που σκεφτόμαστε, είναι να προσθέσουμε ΠΟΛΛΕΣ νέες στήλες. Για ξεκίνημα προτείνουμε (και περιμένουμε το O.K. από αυτούς + τους οποίους θέλουμε για αρθρογράφους): + + - Web resources από τον [Αντώνη Παπαγεωργίου](mailto:silent@ath.forthnet.gr). + - Θέματα προγραμματισμού από τον [Αγγελο Σταύρου](mailto:astavrou@ee.upatras.gr). + - Χιούμορ από την [Βούλα Σανιδά](mailto:voulariba@rocketmail.com) + - Νέα από το διεθνή χώρο (Θέση κενή) + - Ότι άλλο σκεφτείτε, από αυτόν που θα το σκεφτεί :-) + +2. Νέα μορφή + + Η ιδέα του Παναγιώτη Βρυώνη ήταν να υπάρχει μία όσο το δυνατόν κεντρική δομή του περιοδικού, ούτως ώστε να εξυπηρετεί το browsing παλιών τευχών και το + mirroring, σε περίπτωση που κάποιος θελήσει να κάνει mirror το περιοδικό. Μία κεντρική δομή με ένα τεύχος θα φάνταζε παράξενη, γι αυτό και περιμέναμε να + φτάσουμε στο δεύτερο για να την εφαρμόσουμε. Ελπίζουμε να σας αρέσει, ενώ προτάσεις βελτίωσεις είναι πάντα ευπρόσδεκτες στην ηλεκτρονική διεύθυνση του + [magaz](mailto:magaz@linux.gr).\ + Εκτός από τις νέες στήλες, υπάρχουν και κάποιες \"μορφολογικές αλλαγές\" τις οποίες θα χρειαστεί το magaz, για να γίνει ανταγωνιστικό προς τα \"παλαιότερα\" + περιοδικά του χώρου και, γιατί όχι, και προς τα έντυπα περιοδικά. Αυτά που σκεφτόμαστε είναι τα εξής: + + - Μεταφραστής για μετάφραση των άρθρων από ελληνικά σε αγγλικά, ώστε το περιοδικό να γίνει δίγλωσσο για να έχουμε και επισκέψεις από το εξωτερικό. + - Επιμελητής κειμένων για ορφθογραφικές και συντακτικές διορθώσεις. Αυτό ειδικά είναι απαραίτητο γιατί τα άρθρα γράφονται συνήθως \"γρήγορα\" και δεν + υπάρχει χρόνος για πολλούς ελέγχους. Υπάρχει γενικώς πρόβλημα με τους τόνους, αφού τα άρθρα γράφονται κάτω από Linux (Δημήτρη Μπούρα, τι κάνουμε λάθος + και δεν έχουμε πάντα τόνους;) + - Προγραμματιστής Java και Javascript για την πρώτη (βασικά) σελίδα του περιοδικού. Αυτό που σκεφτόμαστε είναι ένα drop-down menu το οποίο να οδηγεί στα + υπόλοιπα τεύχη - άρθρα (όχι, δεν θέlουμε να πάρουμε ένα έτοιμο shareware java applet που να λέει \"copyright Sausage inc\" ή κάτι τέτοιο). + +3. Σας τα φορτώσαμε όλα; + + Όχι, δεν σας τα φορτώσαμε όλα. Η στήλη \"Ορισμένοι το παίρνουν σοβαρά\" παραμένει στον Παναγιώτη Βρυώνη, η στήλη \"Ελλάδα και Linux\" με νέα από την + ανάπτυξη του Linux στην Ελλάδα, στατιστικά στοιχεία κ.ά. παραμένει στον Φώτη Γεωργάτο, η στήλη \"Ανάλυση\" με απόψεις και θέσεις για διάφορα θέματα και η + στήλη \"Μαστορέματα\" παραμένουν στους ήδη υπάρχοντες αρθρογράφους. Η μορφοποίηση του περιοδικού παραμένει στον Μιχάλη Καμπριάνη (αν και την ξεκίνησε ο + Παναγιώτης Βρυώνης, λόγω στρατιωτικής θητείας του τελευταίου πέρασε σε άλλα χέρια). Επίσης στους τρεις προαναφερόμενους παραμένει και η δημοσιοποίηση του + περιοδικού. Η οποία, έχει ήδη αρχίσει να αποδίδει. Εξάλλου, αυτό το περιοδικό το ξεκινήσαμε με σκοπό να το συντηρούμε και όχι να το γράφουμε μόνοι μας. Η + βοήθειά σας είναι απαραίτητη. + +4. Μας ξέρουν + + Με την \"έκδοση\" του πρώτου τεύχους, προσπαθήσαμε να κάνουμε το magaz γνωστό και σε άλλους εκτός από τους γνωστούς μας. Ήδη το magaz αναφέρεται στο Linux + WebWatcher, στο Altavista, ενώ το περιοδικό Chip, στο τεύχος του Νο 3/98 (29 Ιανουαρίου 1998) είχε την ευγένεια να δημοσιεύσει το γράμμα μας με την + \"αναγγελία γέννησης\" του περιοδικού, μαζί με ένα screenshot από την πρώτη σελίδα του πρώτου τεύχους του magaz. Ελπίζουμε ότι αυτό το μήνα θα ανταποκριθούν + και άλλα περιοδικά και search engines στην αναγγελία μας, ενώ η προσπάθεια δημοσιοποίησης παραμένει. Αν τα καταφέρουμε να κάνουμε το περιοδικό δίγλωσσο, θα + μπούμε και στο Linux Webring, και γενικώς θα είναι πιο εύκολο να το προωθήσουμε. Κάτι το οποίο μας έκανε εντύπωση είναι η αθρόα προσέλευση στο πρώτο τεύχος. + Αν η προσέλευση αυτή συνεχιστεί και στο δεύτερο, θα μπορούμε να μιλάμε ασφαλώς για πρωτοφανή επιτυχία περιοδικού. Γι\' αυτό, ενημερώστε γνωστούς και φίλους + για την ύπαρξη του περιοδικού. (Όχι, μην πηγαίνετε ο καθένας 10 ή και παραπάνω φορές στο περιοδικό. Αυτό δεν έχει νόημα. Δεν είμαστε εμπορική εταιρεία να + παρουσιάζουμε πολλά hits για διαφημιστικούς ή άλλους λόγους. Θέλουμε να ενημερώσουμε πολλούς για το Linux). diff --git a/content/articles/02/06_dianomes.md b/content/articles/02/06_dianomes.md new file mode 100644 index 0000000..28f65c2 --- /dev/null +++ b/content/articles/02/06_dianomes.md @@ -0,0 +1,105 @@ ++++ +title = 'Διανομές του Linux' +date = '1998-01-01T00:00:00Z' +description = '' +author = 'Φώτης Γεωργάτος(mailto:gef@ceid.upatras.gr) and Γιώργος Κεραμίδας(mailto:keramida@ceid.upatras.gr)' +issue = ['Magaz 02'] +issue_weight = 6 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Υπάρχουν πάνω από 20 διαφορετικές διανομές του Linux, που η καθεμία προσφέρει λίγο πολύ τα ίδια πράγματα όσον αφορά το περιβάλλον των υπηρεσιών του Λ.Σ., αλλά +με αρκετά διαφορετικά χαρακτηριστικά στο (γραφικό) περιβάλλον του χρήστη, και στον τρόπο που γίνεται η εγκατάσταση/αναβάθμιση του λογισμικού. Καμία από αυτές +δεν είναι απαραίτητα καλύτερη από τις άλλες, και η σωστή επιλογή είναι καθαρά θέμα αναγκών. Εμείς, θα ξεδιαλύνουμε εδώ την κατάσταση παρουσιάζοντάς σας τις +κυριότερες δυνατές επιλογές και τα χαρακτηριστικά τους. Να έχετε υπ\' όψιν ότι ανακοινώσεις για την διαθεσιμότητα αυτών στην Ελλάδα θα γίνεται από την λίστα +[linux-greek-users](news://edessa.topo.auth.gr/local.linux.greek.users).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το κατανεμημένο μοντέλο ανάπτυξης του Linux είναι η αιτία για την ύπαρξη πολλών διαφορετικών μορφών του λειτουργικού συστήματος σε συνδυασμό με τις εφαρμογές +του. Το γεγονός αυτό συχνά μπερδεύει τους νέους χρήστες, καθώς βρίσκονται αντιμέτωποι με πολλές διανομές και δεν ξέρουν τι να διαλέξουν. + +Υπάρχουν για παράδειγμα πάνω από 20 διαφορετικές διανομές του Linux, που η καθεμία προσφέρει λίγο πολύ τα ίδια πράγματα όσον αφορά το περιβάλλον των υπηρεσιών +του Λ.Σ., αλλά με αρκετά διαφορετικά χαρακτηριστικά στο (γραφικό) περιβάλλον του χρήστη, και στον τρόπο που γίνεται η εγκατάσταση/αναβάθμιση του λογισμικού. +Καμία από αυτές δεν είναι απαραίτητα καλύτερη από τις άλλες, και η σωστή επιλογή είναι καθαρά θέμα αναγκών. Εμείς, θα ξεδιαλύνουμε εδώ την κατάσταση +παρουσιάζοντάς σας τις κυριότερες δυνατές επιλογές και τα χαρακτηριστικά τους. + +**1. Slackware (v3.4)** +-------------------------------------------------- + +**2. RedHat Linux (v5.0)** +----------------------------------------------------- + +**3. Debian Linux (v1.3)** +----------------------------------------------------- + +**4. Linux Developer\'s Resource (Feb. 98)** +----------------------------------------------------------------------- + +**5. Suse Linux (v5.1)** +--------------------------------------------------- + +**6. OpenLinux από την Caldera** +----------------------------------------------------------- + + +### [1. Slackware (v3.4)]{#s1} + +Το Slackware Linux είναι η πιο UNIXοειδής διανομή που κυκλοφορεί. Είναι ιδιαίτερα δημοφιλής, αλλά χρειάζεται μια σημαντική εμπειρία σε UNIX συστήματα για να +επιλύει κανείς γρήγορα τα προβλήματα και ανάγκες που παρουσιάζονται. Η εγκατάστασή του έχει κάποιον σημαντικό βαθμό δυσκολίας για αρχάριο, αλλά η στενή του +σχέση με το UNIX είναι σίγουρα ο λόγος που οι πιο έμπειροι χρήστες του Linux το προτιμούν. Το Slackware φτιάχνει ο Patrick Volkerding, και η εταιρία Walnut +Creek το πακετάρει σε CD μαζί με το sunsite και tsx-11 (4 δίσκοι), με κόστος κοντά στις 6.500 δρχ. + + +### [2. RedHat Linux (v5.0)]{#s2} + +Το RedHat Linux έχει υλοποιηθεί από την ομώνυμη εταιρία στην Αμερική. Είναι μία πολύ εύκολη στην εγκατάσταση διανομή, με μεγάλη έμφαση στην υποστήριξη του +αρχάριου που δοκιμάζει την εγκατάσταση του Linux, χωρίς να έχει κάποιον δίπλα του για βοήθεια. Ειδικά η έκδοση 5.0 που δοκιμάσαμε είναι εξαιρετικά φιλική προς +τον χρήστη, δεν χρειάζεται πουθενά χειρισμό από την γραμμή εντολών για την εγκατάσταση και βγάζει κατευθείαν στον Window Manager fvwm-95, που θυμίζει άλλα +γνωστά περιβάλλοντα εργασίας. Το RedHat κυκλοφορεί από την εταιρία του σε συσκευασία των 2 CD, που περιλαμβάνει και βιβλίο, σε μία τιμή κοντά στις 14.000 δρχ. + + +### [3. Debian Linux (v1.3)]{#s3} + +Το Debian Linux είναι μια διανομή που φτιάχνεται από το GNU project δίνοντας του άδεια χρήσης GPL, όπως ακριβώς και το μεγαλύτερο ποσοστό του Free Software. +Είναι και αυτό όπως το Slackware πολύ κοντά στην δομή του παραδοσιακού UNIX (ιδιαίτερα του system V), και θα χρειαστεί σε αρκετές περιπτώσεις να καταφύγετε στο +command line για να πετύχετε αυτό που θέλετε. + +Η εγκατάσταση γίνεται κι εδώ με τρόπο πολύ εύκολο, πιο εύχρηστο από αυτόν του Slackware, αλλά σχετικά πιο δύσχρηστο από αυτόν του RedHat, τουλάχιστον για τον +αρχάριο χρήστη. + +Το μεγάλο ατού του Debian όμως είναι ότι φτιάχνεται αποκλειστικά από εθελοντές που συνεργάζονται μέσω του Internet, και διανέμεται κάτω από την άδεια χρήσης της +GNU. Αυτό σημαίνει ότι το Debian δεν μπορεί ποτέ να γίνει εμπορικό. Μάλιστα, ένα ποσοστό από τα κέρδη του Debian δίνεται στο [project +Gutenberg](http://www.gutenberg.net/), το οποίο ασχολείται με την μεταφορά κλασσικών λογοτεχνικών έργων σε ηλεκτρονική μορφή. + + +### [4. Linux Developer\'s Resource (Feb. 98)]{#s4} + +Αυτό δεν είναι ακριβώς διανομή, αλλά συλλογή (package) από διανομές μαζί με αντίγραφα άλλου υλικού που κυκλοφορεί στο Internet σχετικά με το Linux, τοποθετημένα +σε 6 CD, με κόστος γύρω στις 8000 δρχ. Περιέχει το Slackware, RedHat, Debian, το κάθε ένα σε δικό του CD, 2 CD με λογισμικό από το sunsite και tsx-11, και ένα +ακόμα CD που περιλαμβάνει υποστήριξη για την Ιαπωνική γλώσσα και ένα πλήρες αντίγραφο του Linux Documentation Project (LDP), που περιέχει εκτενή ηλεκτρονική +τεκμηρίωση σχετικά με το Linux. Το Linux Developer\'s Resource (LDR), είναι το πιο δημοφιλές CD σε πωλήσεις στην Ελλάδα, με ιδιαίτερη προτίμηση στην διανομή +Slackware. Η νέα έκδοση αναμένεται να κυκλοφορήσει στην Ελλάδα το Φεβρουάρη. Γνώμη του γράφοντος είναι ότι αξίζει να περιμένετε μέχρι τότε, για να πάρετε ότι +πιο τελευταίο υπάρχει. Επίσης προτείνουμε για πρώτη φορά να βάλετε το RedHat 5.0. + + +### [5. Suse Linux (v5.1)]{#s5} + +Η έκδοση αυτή έρχεται από την Γερμανία και είναι μια από τις πρώτες \"καθαρά Ευρωπαϊκές\" διανομές του Linux. Η έκδοση του Suse Linux, από την αντίστοιχη +εταιρία, γίνεται και στα αγγλικά και στα γερμανικά, με κόστος περίπου \$ 50. Η διανομή Suse, δεν κυκλοφορεί στην Ελλάδα (μόνο με παραγγελία), αλλά παρουσιάζει +ενδιαφέρον γιατί είναι ιδιαίτερα πρόσφορη για μεταγλώττιση στα Ελληνικά, καθώς χρησιμοποιεί KDE γραφικό περιβάλλον, (για το οποίο ήδη έχει γίνει κάποια +μετάφραση), HTML σελίδες για βοήθεια στα προγράμματα και rpm για την εγκατάσταση πακέτων λογισμικού. + + +### [6. OpenLinux από την Caldera]{#s6} + +Εκτός από κώδικα στο \"κεντρικό\" kernel, όμως, η Caldera έχει φτιάξει, βασισμένη στο Linux, και μια δική της διανομή, το OpenLinux. Το OpenLinux έχει φτιαχθεί +για να συνδέει ανομοιογενή μεταξύ τους περιβάλλοντα, όπως Unix, Windows (95 ή NT) με Silicon Graphics, Digital Alpha, ή οτιδήποτε άλλο χρησιμοποιείται σε ένα +σύγχρονο περιβάλλον εργασίας. Το OpenLinux έρχεται σε τρεις εκδόσεις: την Lite, την Basic και την Standard, οι οποίες έχουν ίδια δομή αλλά διαβαθμίσεις στην +τιμή και άρα στα περιεχόμενα της έκδοσης. Η Lite έκδοση διατίθεται ως απλό περιβάλλον χρήστη. Η Basic έκδοση έχει το Netscape (client) ενώ η Standard έχει και +το server. Αναμένονται αλλαγές σε αυτές τις κατηγορίες, επειδή η Netscape έχει αλλάξει την πολιτική της για τα δικά της προϊόντα. + +Η Caldera είναι μια από τις επιχειρήσεις που προσφέρουν πολλά πράγματα στην ανάπτυξη και διάδοση του Linux. Για παράδειγμα ο κώδικας του Linux kernel για +υποστήριξη SLIP & PPP συνδέσεων έχει φτιαχθεί από την Caldera. + diff --git a/content/articles/02/07_fromwtol.md b/content/articles/02/07_fromwtol.md new file mode 100644 index 0000000..d3c7142 --- /dev/null +++ b/content/articles/02/07_fromwtol.md @@ -0,0 +1,55 @@ ++++ +title = 'Από τον κόσμο των Windows στον κόσμο του Linux' +date = '1998-02-01T00:00:00Z' +description = '' +author = 'Γιάννης Εξηνταρίδης' +issue = ['Magaz 02'] +issue_weight = 7 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Εχοντας την τύχη, την χαρά και την ευτυχία να αποκτήσω ένα δεύτερο σκληρό δίσκο στο PC μου και έχοντας πλέον βαρεθεί να βλέπω τα animated icons των Windows που +το μόνο καλό που προσφέρουν είναι σπατάλη των resources του συστήματος αποφάσισα να εγκαταστήσω το Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πρώτα από όλα να αναφέρω ότι ασχολούμαι με DOS + WIN αρκετά χρόνια, και ως τώρα η επαφή μου με UNIX ήταν μάλλον αμυδρή. (Το να ξέρει κάποιος τις βασικές και +απλές εντολές δεν νομίζω ότι θεωρείται εμπειρία ). Από την άλλη οι αλλαγές δεν με τρομάζουν ( μάλιστα μου αρέσουν ). Ετσι και έγινε λοιπόν. Τα Win +\"μετακομίσανε¨ στο νέο σκληρό (3.2 GB) και το Linux θα πήγαινε στον παλιό (1 GB). Αγόρασα λοιπόν το Red Hat 5.0 και προχώρησα στην εγκατάσταση. + +Πρώτο θετικό στοιχείο είναι ότι το Red Hat απαιτεί ένα ελεύθερο partition στον δίσκο. Δεν έχει σημασία αν θα είναι ένας φυσικός δίσκος ή όχι, ούτε αν θα είναι +active ή όχι. Η εγκατάσταση ξεκινά από την boot δισκέτα που περιέχεται στον πακέτο. Αμέσως μετά από 1 ή 2 πλαίσια διαλόγου το Red Hat σου δίνει την δυνατότητα +να διαλέξεις ποιο πρόγραμμα θα διαμορφώσει το partition. Χωρίς δεύτερη σκέψη προτείνω σε όλους όσους σκέφτονται να κάνουν τα ίδια, το **Disk Druid** . Ειναι ένα +καταπληκτικό interactive προγραμματάκι το οποίο δεν σε αφήνει να κάνεις μοιραία λάθη και σε ενημερώνει ανά πάσα στιγμή για το τι συμβαίνει. + +Ακολουθεί η επιλογή των πακέτων και προγραμμάτων. Εδώ υπάρχει ένα ευχάριστος προβληματισμός για το τι να εγκαταστήσεις και τι όχι. Σίγουρα η ποικιλία είναι πολύ +μεγάλη και θα ικανοποιήσει και τον πιο απαιτητικό. Αφού γίνει η επιλογή, το επόμενο πλαίσιο διαλόγου σε πληροφορεί για την πρόοδο της εγκατάστσης ( και μάλιστα +με μεγάλη λεπτομέρεια ). οπως ήδη καταλαβαίνεται το Red Hat έχει ένα πολύ καλύ installation μηχανισμό. οπως αργότερα πληροφορήθηκα κάτι τέτοια δεν υπήρχαν ούτε +κατά διάνοια σε παλιότερες εκδόσεις, ούτε στο Slackware. + +Στο τέλος ρωτήθηκα αν θα εγκαθιστούσα τον LILO. Προτίμησα να μην τον βάλω επειδή είχα ακούσει ότι είναι λίγο παράξενος και μπορεί να είχα προβλήματα. Φυσικά +όταν έγινε reboot το σύστημα δεν μπήκε στο Linux. Για αυτόν τον λόγο χρησιμοποίησα το **Loadlin** ( που περιέχεται στο CD του Red Hat ) και περιλαμβάνει ένα +πολύ καλό documentation για την χρήση του η οποία είναι απλή. νομίζω ότι αυτή είναι και η καλύτερη λύση για κάποιον που θέλει να έχει και τα δύο λειτουργικά +στον υπολογιστή του. Η χρήση του Loadlin ενθαρρύνεται πάρα πολύ σε τέτοιες περιπτώσεις. + +Χρησιμοποιώντας το παραπάνω τελικά μπήκα στο Linux και βρέθηκα σε κάτι που μερικοί ίσως το έχουν ξεχάσει πως υπάρχει. Η λιτή αλλά πανίσχυρη command line. +Χρησιμοποιώντας τις απλές εντολές του UNIX που ήξερα, κατάφερα να βγάλω άκρη και να φορτώσω τα X Windows. Η ρύθμιση τους για την ομαλή συνεργασία τους με την +κάρτα γραφικών και την οθόνη θα τελειώσει επιτυχημένα με έναν μόνο όρο: Η κάρτα γραφικών να είναι επώνυμη ( γνωστή ) και όχι τελευταίας τεχνολογίας. με την +δικιά μου ( Diamond Stealth ) δεν υπήρξε πρόβλημα αφού υποστηρίζεται απόλυτα από το λειτουργικό. + +Το παραθυρικό περιβάλλον του Red Hat είναι καταπληκτικό, αρκετά φιλικό και ισχυρό. Υπάρχει άμεση πρόσβαση σε ένα σωρό από utilities, applications, games και +screensavers ( ναι υπάρχουν και αυτά !!! ). Κάτι στο οποίο χρειάζεται να γίνει ιδιαίτερη μνεία είναι ο ΕξοΧοΣ μηχανισμός **Red Hat Package Management (RPM)**. +Δεν είναι τίποτα παραπάνω από ένα installation utility το οποίο έχει τρομερές δυνατότητες. Το πρόγραμμα κάνει verification στις ήδη υπάρχουσες εγκατεστημένες +εφαρμογές, install και φυσικά uninstall, queries , και εξετάζει τα dependencies μεταξύ των διαφόρων modules και libraries των εφαρμογών. Ειδικά το τελευταίο με +άφησε άναυδο. Δεν θυμάμαι να έχω ξαναδεί τέτοιο αξιόπιστο και σταθερό installation πρόγραμμα. Προσωπικά βοηθήθηκα πολύ και είμαι σίγουρος ότι θα βοηθήσει +πολλούς ακόμα. Καλός και ο Midnight Commander. ( Τι θα θυμήσει σε πολλούς !! ). Δυστυχώς το Linux δεν υποστηρίζει την κάρτα ήχου μου, ( τι είπαμε προηγουμένως, +περί επωνυμίας ) και αργότερα διαπίστωσα ότι βρίσκεται όντως στην λίστα των unsupported με μελλοντική υποστήριξη. + +Χρειάζεται βέβαια να συμπληρώσω ότι πολύτιμη βοήθεια σε περαιτέρω ενέργειες μου στάθηκα τα πολυάριθμα και άκρως κατατοπιστικά README\'s και FAQ\'s που υπάρχουν +διάσπαρτα στο CD του Red Hat. Είναι σίγουρο ότι όποιος θέλει να εγκαταστήσει το Red Hat θα πρέπει να ρίξει τουλάχιστον μια ματιά. Αρκετά καλό είναι και το +Installation Guide που περιέχεται στην συσκεασία του Red Hat. + +Το συμπέρασμα που βγαίνει από τα παραπάνω είναι ότι η Red Hat έχει κάνει πολύ καλή δουλειά και στον τομέα της λειτουργικότητας αλλά και φιλικότητας προς τον +χρήστη. Η εγκατάσταση δεν παρουσιάζει πρόβλημα και δεν χρειάζεται \"παράξενες\" ρυθμίσεις και τεχνάσματα. Τώρα κλείνω περίπου ένα μήνα χρήσης του Linux και αφού +έχω αρχίσει να καταλαβαίνω τον τρόπο λειτουργίας του μπορώ να πω ότι είμαι ικανοποιημένος. Συμβουλή μου: οποιος θέλει να προχωρήσει στο Red Hat ας το κάνει και +δεν θα χάσει. diff --git a/content/articles/02/08_mailbox.md b/content/articles/02/08_mailbox.md new file mode 100644 index 0000000..20501a3 --- /dev/null +++ b/content/articles/02/08_mailbox.md @@ -0,0 +1,49 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-02-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 02'] +issue_weight = 8 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Με μεγάλη χαρά βλέπουμε οτι το MAGAZ έχει απήχηση. Από αυτή την στήλη θα παρουσιάζουμε και θα απαντούμε στα μυνήματα που δεχόμαστε.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. File systems.** +---------------------------------------------- + + +### [1. File systems.]{#s1} + +Θα ήθελα να μου πείτε πως μπορώ να δω τα περιεχόμενα μίας δισκέτας η οποία έχει filesystem το οποίο δεν υποστηρίζεται από το linuz και συγκεκριμένα το FAT\... +και επίσης πώς μπορώ -αν μπορώ- να κάνω ορατούς από το linux άλλους δίσκους ή άλλα partitions \...που χρησιμοποιούν FAT. ** + +Πρώτα απ\'όλα, το Linux είναι ίσως το πιο ευέλικτο λειτουργικό σύστημα, όσο αφορά την επικοινωνία και την χρήση πόρων από άλλα λειτουργικά. + +Στο συγκεκριμένο ζήτημα του FAT (φαντάζομαι ότι εννοείς MS-DOS FAT). Εάν ο πυρήνας σου (kernel) υποστηρίζει FAT, το μόνο που έχεις να κάνεις είναι να φτιάξεις +ένα κενό directory κάπου στον δίσκο σου, (π.χ. /mnt/floppy ) και μετά να δώσεις + + # mount -tmsdos /dev/fd0 /mnt/floppy + +(υποθέτοντας ότι το floppy disk drive είναι το device /dev/fd0). Από το σημείο αυτό και μετά τα περιεχόμενα της δισκέτας θα είναι στο συγκεκριμένο directory. +Μπορείς να γραψεις και να διαβάσεις σαν να ήταν κανονικά στον δίσκο σου. Ρίξε μία ματιά στα man pages του mount (man mount) για περισσότερες πληροφορίες. +Σημείωσε εδώ ότι αν αντί για το /dev/fd0 βάλεις ένα partition του σκληρού σου δίσκου (π.χ. /dev/hda1 για το πρώτο partition του πρώτου σκληρού IDE δίσκου του +συστήματός σου) θα έχεις ανάλογα αποτελέσματα. + +Αν χρησιμοποιείς Windows95 που έχουν VFAT, για να βλέπεις κανονικά τα ονόματα των αρχείων (long filenames) δοκίμασε αντί για -tmsdos, -tvfat. + +Αν ο πυρήνας σου δεν υποστηρίζει MS-DOS FAT partitions, έχεις δύο επιλογές: + +- να ξαναχτίσεις τον πυρήνα προσθέτοντας υποστήριξη για FAT. Διάβασε το Kernel-HOWTO και ρίξε μία ματιά στο άρθρο του Ιανουαρίου σχετικά με την επιτάχυνση + κατασκευής πυρήνα. Είναι μια εύκολη διαδικασία. +- να χρησιμοποιήσεις τα mtools που είναι ένα πακέτο που κάνει αυτό ακριβώς που χρειάζεσαι. + +Θα σου πρότεινα την πρώτη λύση αφού δεν θα χρειαστεί να μάθεις ένα ακόμη πακέτο και στην περίπτωση που θα ασχοληθείς με την κατασκευή πυρήνα για πρώτη φορά, η +εμπειρία σου αυτή θα είναι χρήσιμη πολλές φορές στο μέλλον. + +*Παναγιώτης Βρυώνης * + diff --git a/content/articles/03/01_editorial.md b/content/articles/03/01_editorial.md new file mode 100644 index 0000000..2a581c0 --- /dev/null +++ b/content/articles/03/01_editorial.md @@ -0,0 +1,53 @@ ++++ +title = 'Editorial' +date = '1998-03-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 03'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Φτάσαμε αισίως και στο τρίτο τεύχος\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δεν ξέρω για σας, ή για τους άλλους συνεργάτες του περιοδικού, αλλά αυτό για μένα αποτελεί μία δικαίωση. Όσο περνάει ο καιρός, βγαίνουν καινούρια τεύχη του +Magaz, και η προσέλευση διατηρείται σε υψηλά επίπεδα (αυτό κατόπιν υπολογισμών και όχι με βάση υπαρκτά στοιχεία), αποδεικνύεται, τουλάχιστον σε εμένα, ότι το +Magaz \"γεννήθηκε\" τη στιγμή που κάτι τέτοιο έλειπε από τον ελληνικό χώρο. Ελπίζω βέβαια το Magaz να συνεχίσει να προσφέρει αυτά που ζητά ο Ελληνας χρήστης +Linux από ένα μηνιαίο newsletter. Είναι θετικό ότι βρίσκουμε συνεργάτες, πρόθυμους εθελοντές, οι οποίοι έχουν όλη την καλή διάθεση να βοηθήσουν στην ανάπτυξη +του Magaz, η οποία όπως έχουμε ξαναπεί, δεν είναι και εύκολο πράγμα. Σιγά σιγά θέλω να πιστεύω ότι θα φτάσουμε κάποτε στο σημείο, να μην προλαβαίνουμε να +ετοιμάζουμε άρθρα για το τεύχος, λόγω πληθώρας άρθρων και όχι λόγω χρόνου (όπως συμβαίνει τώρα :-). Και πιστεύω ότι αυτή η κατάσταση δεν είναι και πολύ μακρινή, +αν αναλογιστεί κανείς το πόσοι Έλληνες χρήστες Linux υπάρχουν. + +Όπως προφανώς θα παρατηρήσατε, ένα τεχνικό πρόβλημα μας κράτησε χωρίς μετρητή για τις πρώτες 20 μέρες κυκλοφορίας του τέυχους. Να ζητήσουμε συγνώμη για αυτό, +αλλά σε ένα νέο περιοδικό, όταν συμβαίνει κάτι απρόβλεπτο, είναι δύσκολο να διορθώνεται άμεσα. Σταδιακά και αυτό θα αλλάξει. Τα προβλήματα θα λύνονται +ευκολότερα, και, το κυριώτερο, γρηγορότερα. + +Ελλείψει μετρητή, δεν είμαστε σε θέση να ξέρουμε αν η προσέλευση του πρώτου τεύχους ήταν ένα γεγονός περιστασιακό ή όχι. Η αλήθεια είναι, ότι θέλω να πιστεύω +ότι τα νούμερα τα οποία εμφανίστηκαν μετά την επαναλειτουργία του μετρητή δείχνουν ότι και αυτό το τεύχος το διάβασαν πολλοί άνθρωποι. Πιο σίγουρα στοιχεία +όμως, και όχι εκτιμήσεις, θα ξέρουμε με βάση το τεύχος που διαβάζετε. Τα ίδια στοιχεία τα βλέπετε και εσείς μόλις μπείτε στην κεντρική σελίδα, αλλά θα +προσπαθήσουμε από εδώ και στο εξής να κρατάμε στατιστικά στοιχεία, τα οποία κάποτε θα παρουσιάσουμε και μέσα από το περιοδικό. + +Ένα άλλο θέμα το οποίο θα ήθελα να αναφέρω εδώ, είναι το θέμα της ευθύνης. Κάθε αρθρογράφος φέρει ακέραια την ευθύνη για αυτά που γράφει και υποστηρίζει. Όλα τα +άρθρα αποτελούν προσωπικές απόψεις ή εμπειρίες ή πληροφορίες. Και τα αναφέρω αυτά θέλοντας να ζητήσω συγνώμη για ένα λάθος που έκανα στο τεύχος 2, στο άρθρο +\"Ανάλυση - Το στοίχημα των managers\" το οποίο παρουσιάστηκε τις τρεις πρώτες μέρες να αναφέρει ότι το Pathfinder χρησιμοποιούσε Linux. Ευτυχώς ο Φώτης +Γεωργάτος μου επισήμανε ότι Linux χρησιμοποιούσε ένα άλλο πρόγραμμα (υδροπονικό) της NASA και όχι το Pathfinder, οπότε και το σχετικό σημείο διεγράφη από το +άρθρο αμέσως, τουλάχιστον μέχρι να ξαναθυμηθώ που το είχα δει (και αν πράγματι αυτό που είδα μιλούσε για το Pathfinder). Δεν έχει νόημα να απολογηθώ γιατί δεν +το έκανα επίτηδες :-) ελπίζω όμως ότι όσοι το διάβασαν τις τρεις πρώτες μέρες είχαν καλύτερη πληροφόρηση από μένα οπότε και θα αγνόησαν την συγκεκριμένη λάθος +πληροφορία. + +Για αυτό το τεύχος, έχουμε νέα στήλη, τη στήλη του \"γιατρού\", φιλικά παραχωρημένη από φίλους και συνLinuxάδες, της ΕΕΕΑ. Ο Παναγιώτης Βρυώνης δεν απολύθηκε +ακόμα, έχει μάλιστα μόλις φτάσει την άδεια ορκωμοσίας (κουράγιο Παναγιώτη), αυτό όμως δεν τον εμπόδισε να γράψει ένα άρθρο για το KDE το οποίο αισίως βρίσκεται +στην τρίτη beta έκδοση. Η beta-3 του KDE βγήκε το πρώτο δεκαήμερο του Φεβρουαρίου, οπότε μπορούμε με ασφάλεια να πούμε ότι είμαστε μέσα στην επικαιρότητα. Μέσα +στην επικαιρότητα βρισκόμαστε και σε άλλα θέματα. Συγκεκριμένα το παρόν τεύχος φιλοξενεί και το πρώτο μέρος μίας παρουσίασης του StarOffice, του πολύ καλού +αυτού WYSIWYG Office προγράμματος από την StarDivision που βγήκε στις 2 Φεβρουαρίου, μαζί με τα απαραίτητα tips για τα Ελληνικά. Δεν λείπει βέβαια και η στήλη +της αλληλογραφίας.\ +Είναι λογικό για κανένα εξάμηνο ακόμα να πειραματιζόμαστε με τις στήλες, μέχρι να βρούμε τελικά τι είναι αυτό που θα ενδιέφερε τους χρήστες να διαβάζουν και πως +ακριβώς θα το υλοποιήσουμε, οπότε θα χρειαστούμε την υπομονή σας και σε αυτό. Ήδη έχουμε κάποιες προτάσεις, οι οποίες μελετώνται, αλλά θα μας ενδιέφερε πολύ να +έχουμε feedback από εσάς. Οι ιδέες είναι δωρεάν, και, τουλάχιστον σε αυτό το περιοδικό, λαμβάνονται σοβαρά υπόψιν. + +Να σας ενημερώσουμε και ότι το περιοδικό \"Ο Κόσμος του Ίντερνετ\" στο τεύχος 31 (Φεβρουάριος 1998) έχει την αναγγελία ίδρυσης του Magaz, μαζί με ένα screenshot +από το δεύτερο τεύχος. + +Να σας ευχηθώ καλή ανάγνωση, ελπίζοντας ότι και αυτό το τεύχος ανταποκρίνεται στις προσδοκίες σας. diff --git a/content/articles/03/02_kde.md b/content/articles/03/02_kde.md new file mode 100644 index 0000000..69581bf --- /dev/null +++ b/content/articles/03/02_kde.md @@ -0,0 +1,84 @@ ++++ +title = 'Ευκολία και Λειτουργικότητα στην Επιφάνεια Εργασίας = KDE' +date = '1998-03-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 03'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το K Desktop Environment (KDE) προσφέρει στον απλό χρήστη ένα σύνολο προγραμμάτων και εργαλείων που κάνουν την χρήση του Linux παιχνίδι\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κακά τα ψέματα: σχεδόν όλοι μας έχουμε ξεκινήσει την επαφή μας με τους υπολογιστές με τα Windows, οι παλιότεροι με τα 3.χ και οι νεότεροι με τα 95, άντε και +μερικοί με Mac OS. Καλά, μην διαμαρτύρεστε οι παλαιότεροι, ναι θυμάμαι τον Spectrum, το C-64 και τον CPC-464 αλλά τα πράγματα ήταν πολύ απλά τότε. Αυτό που θέλω +να πω είναι ότι οι περισσότεροι, πριν το Linux είχαν συνηθίσει ένα γραφικό περιβάλλον που έκανε την ζωή τους ευκολότερη (προσοχή, δεν είπα εύκολη!). + +Ας μην κρυβόμαστε πίσω από το δάκτυλό μας. Το Linux είναι ισχυρό, σταθερό, οικονομικό και έχει πληθώρα αρετών αλλά ο αρχάριος χρήστης θα τα βρει σκούρα στην +αρχή. Ο λόγος είναι ότι σχεδόν τα πάντα ρυθμίζονται με scripts και configuration files που το κάθε ένα έχει την δικιά του σύνταξη. Για πολλά πράγματα υπάρχουν +γραφικά front-ends αλλά και εκεί επικρατεί ένα μικρό χάος. Πρώτον πρέπει κανείς να τα βρει και να τα εγκαταστήσει και δεύτερον το κάθε ένα από αυτά έχει +διαφορετική εμφάνιση και υφή (look\'n\'feel) κάτι που ξενίζει στον πρώην χρήστη Windows ή Mac. + +Και εκεί που \"όλα τα \'σκιαζε η φοβέρα και τα πλάκωνε η σκλαβιά\" (των εμπορικών γραφικών περιβαλλόντων) εμφανίζεται το KDE. Το KDE ( ) +είναι ένα σύνολο προγραμμάτων που κάνουν την χρήση του Linux (του Unix γενικά) πολύ φιλική. Είναι \"χτισμένο\" πάνω στην Qt library, ένα \"πλαίσιο εργασίας\" +(framework) για την ανάπτυξη γραφικών εφαρμογών σε C++. Η εταιρεία που το ανέπτυξε, η Troll Tech AS ( ) επιτρέπει την ελεύθερη χρήση του +για εφαρμογές που διανέμονται σαν \"Ελεύθερο Λογισμικό\" (δείτε το τεύχος του Ιανουαρίου για περισσότερες πληροφορίες). Μια και το KDE ικανοποιεί αυτή την +απαίτηση, δεν θα χρειαστεί να πληρώσετε τίποτα για να το χρησιμοποιήσετε. + +Σύμφωνα με τους κατασκευαστές του, *το KDE δημιουργεί ένα ένα σταθερό look and feel για τις εφαρμογές, ορίζοντας ένα τυποποιημένο GUI toolkit και βιβιλιοθήκες +υποστήριξης που όλες οι KDE-εφαρμογές χρησιμοποιούν, καθώς και ένα Οδηγό Μορφής (Style Guide) που οι προγραμματιστές ενθαρύνονται να χρησιμοποιήσουν*. Όλες οι +εφαρμογές που υιοθετούν το KDE παρέχουν βοήθεια με την μορφή HTML και ρυθμίσεις μέσα από γραφικό περιβάλλον. Οι περισσότερες είναι \"δυκτιακές\" με την έννοια +ότι παρέχουν στον χρήστη διαφανή (transparent) πρόσβαση σε δικτυακούς πόρους προσπελάσιμους με τα προτόκολα ftp και http. + +Ας έρθουμε όμως στην ουσία. Τί ακριβώς περιλαμβάνει το KDE; Κατέβασα την τελευταία έκδοση του KDE (Beta3) καθώς και την Qt library v1.32 με μορφή RPM (σχεδόν +9ΜΒ όλα τα πακέτα του distribution μαζί) μιας και έχω RedHat που το υποστηρίζει. Τα πακέτα υπάρχουν και σε tgz μορφή και η εγκατάστασή τους είναι ΠΑΝΕΥΚΟΛΗ +ακόμη και για τον νέο χρήστη, αν όμως έχετε RedHat ή γενικότερα υποστήριξη για RPM σας συμβουλεύω να την χρησιμοποιήσετε. + +Μετά την επιτυχή εγκατάσταση, το μόνο που χρειάζεται να κάνετε είναι να προσθέσετε την γραμμή + + startkde + +στο + + .Xclients + +που βρίσκεται στο home directory σας. Αν έχετε προβλήματα γιατί το .Xclients περιέχει άλλες γραμμές και δεν ξέρετε τι να σβήσετε, μετονομάστε το παλιό .Xclients +σε .Xclients.old και φτιάξτε ένα νέο με τις εξής γραμμές: + + #!/bin/bash + startkde + +Δίνετε startx ή κανετε login από τον xdm και βρήσκεστε σε ένα πολύ καλαίσθητο desktop. Αν είσαστε εξοικιωμένοι με τα Windows95 δεν θα δυσκολευτείτε να +καταλάβετε πώς λειτουργεί η οριζόντια μπάρα στο κάτω μέρος ης οθόνης. Το κουμπί με το κεφαλαίο \"K\" εμφανίζει ένα μενού με υπομενού που οδηγούν στα διάφορα +εγκατεστημένα KDE προγράμματα. + +Σε αυτά περιλαμβάνονται ένας πολύ βολικός editor, διάφοροι viewers για γραφικά (PS, dvi, gif κ.λ.), το kppp που κάνει την ρύθμιση και σύνδεση του υπολογιστή σας +με Internet Providers πανεύκολη, ένας mail client, news client, διάφορα προγραμματάκια που ρυθμίζουν τα Settings του desktop, calculator και μία ακόμη πληθώρα +από πολύ χρήσιμα utilities. + +Σημειώστε ότι ο kfm, ο file manager του KDE, είναι ταυτόχρονα και HTML browser (με μόνο μειονέκτημα το ότι δεν μπορείτε ακόμη να ρυθμίσετε την γραμματοσειρά που +θα χρησιμοποιεί με αποτέλεσμα οι ελληνικές σελίδες να εμφανίζονται με \"κινέζικα\" πολλές φορές) και ftp client. Μπορείτε να ανοίξετε μια ftp διεύθυνση (π.χ. +ftp://ftp.linux.gr) και να κάνετε drag\'n\'drop ή copy-paste αρχεία στο desktop. Κάντε διπλό κλικ σε ένα αρχείο κειμένου και θα ανοιχτεί στον editor, σε ένα +γραφικών και θα το δείτε με το σωστό viewer και ούτο καθεξής. Αν πάλι ένα e-mail που διαβάζετε με το kmail περιέχει μία url, κάνετε κλικ απάνω της και ανοίγει +στον kfm. + +Πέρα από την ευκολία χρήσης και τον τρόπο με τον οποίο συνεργάζονται τα προγράμματα του KDE θα πρέπε να σταθούμε σε μερικά σημεία της όλης αρχιτεκτονικής που +παρουσιάζουν ιδιαίτερο ενδιαφέρον. + +Πρώτον στο ότι όλα ακολουθούν ένα κοινό look\'n\'feel που κάνει την ζωή του χρήστη πιο εύκολη και πιο παραγωγική. Σε όσες εφαρμογές αυτό έχει νόημα, θα βρείτε +μία οριζόντια μπάρα πάνω πάνω που θα περιλαμβάνει τα γνωστά File, Edit και Help καθώς και άλλα υπομενού που έχουν να κάνουν με χαρακτηριστικά της συγκεκριμένης +εφαρμογής. Ναι, κάτω κάτω στο File θα βρείτε το Exit και δεξιά στην άκτη θα είναι το Help. Η επιλογή γραμματοσειρών και αρχείων (καθώς και πολλές άλλες +συνηθισμένες λειτουργίες) γίνεται με τα ίδια widgets μέσα από όλες τις εφαρμογές. + +Μία ακόμη έκπληξη: όλα τα μηνύματα και τα μενού μπορούν να εμφανιστούν στην γλώσσα που επιθυμείτε! Αρκεί να διαλέξετε την γλώσσα από το +Settings-\>Desktop-\>Language. Βέβαια, βασική προϋπόθεση για κάτι τέτοιο είναι να υπάρχουν οι απαιτούμενες μεταφράσεις. Για τα ελληνικά μία πρώτη προσπάθεια για +μερικές εφαρμογές έγινε από εμένα και ακολούθησε με σοβαρότερη διάθεση ο Φώτης Ανδριτσόπουλος. Η διαδικασία τη μετάφρασης είναι εξαιρετικά απλή και προτρέπω +όποιον ενδιαφέρεται να επισκευθεί την για περισσότερες πληροφορίες. + +Πιστεύω ότι σύντομα το KDE θα αναδειχθεί σε ένα από τα σημαντικότερα desktops. Στο mailing list των developers συζητιέται η ανάπτυξη εφαρμογών γραφείου, όπως +spreadsheet και personal information manager που αν ολοκληρωθούν θα έχουν δυνατότητες και ευκολία χρήσης εφάμιλες των αντίστοιχων εμπορικών. Ακόμα και τώρα +όμως, με τις υπάρχουσες δυνατότητες και προγράμματα το KDE αποτελεί την καλύτερη κατά την γνώμη μου λύση για το desktop σας στον χώρο των \"ελεύθερων +προγραμμάτων\". Αν είσαστε ο \"απλός χρήστης\" εγκαταστήστε το για να κάνετε ευκολότερη την ζωή σας. Αν είσαστε προγραμματιστής, ίσως να σας γοητεύσει και να +ενταχθείτε και εσείς στην οικογένεια των KDE developers\... diff --git a/content/articles/03/03_soffice.md b/content/articles/03/03_soffice.md new file mode 100644 index 0000000..751d705 --- /dev/null +++ b/content/articles/03/03_soffice.md @@ -0,0 +1,200 @@ ++++ +title = 'StarOffice 4.0' +date = '1998-03-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης <' +issue = ['Magaz 03'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Στις 2 Φεβρουαρίου, τοποθετήθηκε στον FTP server της Stardivision η τελική έκδοση του StarOffice 4.0 για Linux, το οποίο διατίθεται δωρεάν για προσωπική χρήση. +Υπάρχει μία παράξενη τακτική της Stardivision και της Caldera (συνεργάτης της Stardivision στην έκδοση του Staroffice για Linux), η οποία επιτρέπει το download +από το server της Stardivision (και μερικά ακόμα mirrors) αλλά δεν επιτρέπει το upload του προγράμματος σε άλλους ftp servers. Πρόσφατα διάβασα στο site τους +ότι μπορεί κάποιος να τοποθετήσει το πρόγραμμα σε servers εκπαιδευτικών ιδρυμάτων, αρκεί να έχουν πρόσβαση εκεί μόνο τα μέλη του ιδρύματος. Τέλος πάντων, αν +κάποιος ξεπεράσει αυτές τις παραξενιές και αποφασίσει να το κατεβάσει, να τι θα βρει:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Διαφορές από την προηγούμενη έκδοση** +-------------------------------------------------------------------- + +**2. Τι μας φέρνει** +---------------------------------------------- + +**3. Modules γραφείου** +------------------------------------------------- + +**4. Γραμματοσειρές** +----------------------------------------------- + +**5. Modules για Internet** +----------------------------------------------------- + + +### [1. Διαφορές από την προηγούμενη έκδοση]{#s1} + +Το StarOffice 4.0 έχει επιτέλους ξεπεράσει ένα τουλάχιστον τρομερό πρόβλημα που είχε, και μιλάω βέβαια για το πρόβλημα το οποίο αναφέρεται στο 50% των postings +στα σχετικά newsgroups: την εγκατάσταση του StarOffice 3.1. Η ιδιομορφία της ήταν ότι για να καταφέρει κάποιος να το εγκαταστήσει έπρεπε να έχει master στην C +και διδακτορικό στο administration. Επίσης έπρεπε να έχει πολλή τύχη και μπάρμπα στην Κορώνη (αν και το τελευταίο ελέγχεται ως ανακριβές). Με το StarOffice 4.0 +αυτά όλα είναι πια παρελθόν. Η εγκατάστασή του είναι από εύκολη μέχρι τυφλοσούρτης (κάτι από Windows 95 και MS Office μου θύμισε για να πω την αλήθεια, αλλά +αυτό το παραβλέπω). Ένα παράπονο μόνο. Χάριν της ευκολίας, χάθηκε η δυνατότητα παραμετροποίησης. Εν ολίγοις, δεν έχεις και πολλές επιλογές κατά την εγκατάσταση +(μήπως τα θέλω όλα δικά μου;) Έχει επίσης ξεπεράσει την ανάγκη ύπαρξης των Motif libraries (εναλλακτικά μπορούσε κάποιος να βάλει την προηγούμενη έκδοση +statically compiled, η οποία όμως ήταν πολύ πιο αργή). + +Αυτό που δεν έχει ξεπεράσει, είναι το ότι παραμένει ένα ΤΡΟΜΕΡΑ βαρύ πρόγραμμα. Για να γίνω πιο σαφής, σε ένα Cyrix 6x86 P120+ με 32Mb μνήμης και 80Mb swap +partition, το StarOffice θέλει πιο πολύ χρόνο να φορτώσει απ\' ότι τα X-Windows με KDE ως Window Manager. + +Δεν έχει ξεπεράσει επίσης, το θέμα το οποίο απασχολεί το υπόλοιπο 50% των postings στα σχετικά newsgroups: Το πρόβλημα με τις γραμματοσειρές. Δεν ξέρω πόσο +ικανοποιημένος θα ήταν ένα Αμερικανός με τις γραμματοσειρές που διατίθενται με το StarOffice, εγώ όμως ως Έλληνας έχω τρομερά παράπονα. Πρακτικά είναι σχεδόν +αδύνατο να προσθέσεις γραμματοσειρές. Λεπτομέρειες σε επόμενο κεφάλαιο. + + +### [2. Τι μας φέρνει]{#s2} + +Το StarOffice 4.0 έχει εντελώς διαφορετική νοοτροπία απ\' ότι το StarOffice 3.1. Δεν είναι πια μία σουίτα (sic) προγραμμάτων, αλλά ένα πρόγραμμα με πολλά +modules, τα οποία μπορούν να χωριστούν σε δύο κατηγορίες: Τα modules γραφείου και τα modules για Internet.Όλα αυτά τα καλούδια μπορεί κάποιος να τα διαχειριστεί +μέσα από τον πολύ εύχρηστο file-program manager (ο οποίος ονομάζεται explorer). Ο file-program manager αυτός θα θυμίσει σε πολλούς Windows95, μια που έχει τα +δικά του Workspace, desktop, μέχρι και Recycle bin! Δεν είναι παράξενο αυτό, μια που το StarOffice βγαίνει για Linux, Windows95, OS/2 και Solaris. Αυτή τη +στιγμή υπάρχουν δύο εκδόσεις. Η αγγλική και η γερμανική. Δεν ξέρω αν η γερμανική έχει localized διαλόγους ή μόνο γερμανικό συλλαβισμό, αλλά, εφ\' όσον η +StarDivision είναι γερμανική εταιρεία φαντάζομαι ότι θα είναι πλήρως γερμανοποιημένο. + +Υπάρχει μέχρι και η δυνατότητα επέμβασης στα μενού (αν και δεν βρήκα πως ακριβώς δουλεύει!), και του customization των toolbars. Είναι πολύ θετικό ότι το +StarOffice συνεργάζεται άψογα με το grISOXkbd, και συνεπώς γράφει ελληνικά χωρίς καμία τροποποίηση. Η ερώτηση: το χρησιμοποίησε κανείς; Η απάντηση: ναι, εγώ +όταν έφτιαξα ένα βιογραφικό και μία αίτηση στον κειμενογράφο, με πίνακες, tabs, πλάγια και έντονα γράμματα, με διάφορα διάστιχα κλπ. Ναι, είναι πολύ καλό και +εξυπηρετικό να έχει κάποιος ένα τέτοιο πρόγραμμα στον Υπολογιστή του. + +Σε αυτό το τεύχος, θα ασχοληθούμε με τα Modules γραφείου και με το φλέγον θέμα των γραμματοσειρών: + + +### [3. Modules γραφείου]{#s3} + +**Γενικά**\ +Όλα τα modules, έχουν τα λεγόμενα \"autoformat\" τα οποία σε άλλα προγράμματα ονομάζονται wizards, και είναι πολύ εξυπηρετικά για ανθρώπους που θέλουν να κάνουν +γρήγορα και εύκολα κάποια δουλειά την οποία δεν ξέρουν καλά (όχι, εγώ δεν τα χρησιμοποιώ, ακόμα και για δουλειές που δεν έχω ξανακάνει, αλλά αυτό είναι άλλο +θέμα). Σε όσα modules υπάρχει η έννοια του κειμένου (και εννοούμε κείμενο και όχι λεζάντα ή τίτλος μόνο) υπάρχει spell checking (ναι, καλά καταλάβατε, μόνο στα +αγγλικά ή μόνο στα γερμανικά, ανάλογα με το ποια έκδοση κατέβασε κανείς), autocorrect και autotext. + +- **Κειμενογράφος**\ + Ο Κειμενογράφος του StarOffice, απόγονος του StarWriter, είναι ότι θα περίμενε κανείς από έναν μοντέρνο WYSIWYG κειμενογράφο, και ίσως περισσότερα. Δεν + μπορώ να μην κάνω συνειρμικές συγκρίσεις με το Office 95 το οποίο και είμαι αναγκασμένος να δουλεύω πολύ. Έχει αυτό που λέμε \"τα πάντα\". Γραμματοσειρές, + σε διάφορα μεγέθη, στυλ (Bold, Italics, Bold-Italics, Underline, Strikethrough, Shadow, Outline), με επιλογές ως προς την τοποθέτησή τους (subscript, + superscript οριζόμενα), χρώματα, ελέγχο της απόστασης των γραμμάτων μεταξύ τους (normal, condensed, extended, με τα δύο τελευταία να είναι οριζόμενα), και + τυπογραφικά εφέ (καπιταλάκια ή πεζοκεφαλαία ή κεφαλαιάκια ή όπως αλλιώς τα λέει καθένας, όλοι εννοούν τα Small Caps), με δυνατότητα ελέγχου της παραγράφου + από το διάστιχο μεταξύ των γραμμών (αυτά τα κλασσικά και ακατανόητα από τα Windows 95, μονό, εναμισάρι, διπλό, και ευτυχώς και το πιο normal οριζόμενο), την + κλασική στοίχιση (τρελλό δεξιά, τρελλό αριστερά, κεντραρισμένο, στοιχισμένο και τετραγωνισμένο), τον έλεγχο διάκενου μεταξύ των παραγράφων, με αρχίγραμμα, + και πολλά άλλα που πρέπει κάποιος να ασχολείται με τη σελιδοποίηση για να τα εκτιμήσει.\ + Με ρύθμιση σελίδων (μέγεθος, χρώμα, περιθώρια γύρω-γύρω, headers και footers, αρίθμηση, μονές ή αντικρυστές), με ρύθμιση στηλών (και με άνισα πλάτη) με + ορισμό για υποσημειώσεις.\ + Όλα αυτά δένονται πάρα πολύ ωραία με την δυνατότητα δημιουργίας προκαθορισμένων styles τα οποία μπορεί κανείς να εφαρμόσει και μετά το γράψιμο του κειμένου. + Υπάρχει ακόμα η δυνατότητα εισαγωγής, εκτός από αντικείμενα τα οποία προέρχονται (η δημιουργούνται εκείνη τη στιγμή) από άλλα modules, των κλασικών fields. + Το πρόγραμμα εισάγει αρχεία από σχεδόν κάθε είδους πηγή: Αρχεία γραφικών σε πολλά και γνωστά format, αρχεία κειμένου από Word 6/95, Dos text, Ansi text, Mac + text, Plain text, Rich Text Format, Lotus 1-2-3, Excel 4, 5/95, και άλλα. Ένα πράγμα παράξενο ωστόσο: δεν εισάγει αρχεία από Wordperfect, ούτε από Applix + (τουλάχιστον έτσι λέει, δεν έχω κανένα τέτοιο αρχείο να το δοκιμάσω). Περίμενα ότι αυτές οι χαζές κόντρες που υπάρχουν μεταξύ κατασκευαστών Software για τα + Windows 95 δεν θα πέρναγαν και στο Linux, αλλά\... Αν κάποιος εισάγει μία εικόνα, μπορεί ακόμα να ορίσει και το ποια θα είναι η θέση της σε σχέση με το + κείμενο (το γνωστό wrapping). Γενικά είναι ένα ολοκληρωμένο πρόγραμμα επεξεργασίας κειμένου, το οποίο αντικαθιστά άνετα το οποιοδήποτε άλλο μπορεί να + χρησιμοποιούσατε μέχρι τώρα. +- **Υπολογιστικό φύλλο (spreadsheet κοινώς)**\ + Ένα spreadsheet δεν περιμένει κάποιος να είναι αναγκαστικά όμορφο, ή ακόμα και εύχρηστο. Θέλει όμως να είναι λειτουργικό. Η μόδα θέλει όλα αυτά να + συνυπάρχουν. Έτσι και εδώ, είναι και όμορφο, και εύχρηστο και λειτουργικό. Με το δεδομένο ότι το ίδιο πακέτο απευθύνεται και σε Win95 χρήστες, έχουμε τον + άμεσο ανταγωνιστή του Excel. Ένα spreadsheet με 255 στήλες και 32.000 γραμμές (αν και δεν νομίζω να έχει κανείς ούτε τόσο ισχυρό μηχάνημα ούτε τόσο υψηλές + απαιτήσεις για να το χρησιμοποιήσει) με πολλαπλά worksheets (και δυστυχώς δεν ξέρω αν είναι τρισδιάστατα ή όχι). Με λειτουργίες από sorting μέχρι και goal + seek, scenarios (όχι όμως έτσι όπως θα τα περίμενε κανείς, είναι πολύ user-dependent) και μαθηματικές, οικονομικές και στατιστικές μεταξύ άλλων συναρτήσεις. + Είναι προφανές βέβαια ότι υποστηρίζει τη δημιουργία σχεδιαγραμμάτων αφού μπορεί κάποιος ανά πάσα στιγμή να καλέσει το σχετικό module και να του δώσει τα + στοιχεία από το spreadsheet ως δεδομένα. Το κείμενο στα κελιά μπορεί να τοποθετηθεί οριζόντια ή κάθετα, σε normal, bold, italic, bolditalic και underline, + να στοιχισθεί δεξιά, αριστερά ή στο κέντρο. Υπάρχει η δυνατότητα χρωματισμού των κελιών και των γραμμάτων. +- **Πρόγραμμα παρουσιάσεων (Presentation)**\ + Δεν έχω χρησιμοποιήσει ποτέ ανάλογο πρόγραμμα, αλλά πιστεύω ότι δεν του λείπουν και πολλά. Προσπάθησα να δημιουργήσω ένα slide-show και παρατήρησα ότι + μπορούσα να χρησιμοποιήσω κλειστά σχήματα με ευθείες γραμμές, με καμπύλες γραμμές, ανοιχτά σχήματα με ευθείες γραμμές, με βέλη στις άκρες, τρισδιάστατα + σχήματα, κείμενο αυτόνομο, κείμενο σε μπλοκ. Υπάρχουν πολλά δείγματα για να διαλέξει κανείς ως templates, πράγμα το οποίο είναι πολύ σημαντικό για κάποιον + χωρίς πολλές πολλές γνώσεις που θέλει να κάνει μία παρουσίαση γρήγορα. Υπάρχει βέβαια και η επιλογή τοποθέτησης φόντου στα slides, τα οποία μπορεί να είναι + σε διάφορα μεγέθη. Όταν κάποιος τελειώσει το σχεδιασμό, μπορεί να αλλάξει τη σειρά με την οποία θα παρουσιάζονται τα slides. Η παρουσίαση τέλος μπορεί να + είναι αυτόματη ή interactive. Μπορούμε προφάνως να εισάγουμε κάποιο chart που φτιάξαμε ή ακόμα και να το φτιάξουμε εκείνη τη στιγμή. Εν τέλει, όπως είπα και + προηγουμένως, δεν ξέρω τι χρειάζεται κάποιος που κάνει παρουσιάσεις, αλλά εμένα σίγουρα δεν μου έλειψε τίποτα! +- **Σχεδιαστικό πρόγραμμα**\ + Αυτή τη νέα μόδα σε σχεδιαστικά προγράμματα, η οποία προσπαθεί να συνδυάσει τα vector-based με τα bitmapped-based γραφικά, δεν την βρίσκω και πολύ καλή. Για + να γίνω πιο συγκεκριμένος, υπάρχουν δύο ειδών γραφικά: Πρώτα είναι τα vector γραφικά τα οποία είναι σχήματα που μπορούν να περιγραφούν με συντεταγμένες + (όχι, δεν είναι και τόσο απλή η διαδικασία). Χαρακτηριστικά προγράμματα που παράγουν τέτοια γραφικά είναι (από τον κόσμο των Windows και των Macintosh) το + CorelDraw, το AdobeIllustrator, αλλά ακόμα και το Autocad και άλλα πολλά. Στον κόσμο του Linux υπάρχει σίγουρα το CorelDraw (από την Caldera και αυτό) και + σίγουρα θα υπάρχουν και άλλα που δεν ξέρω. Μετά ήρθαν τα bitmapped γραφικά, όπου κάθε pixel ορίζεται ως προς το χρώμα του. Αντιπροσωπευτικά προγράμματα που + δημιουργούν τέτοια γραφικά είναι το Photoshop και το Photopaint, ενώ για το Linux υπάρχει το πολύ καλό Gimp. Πρόσφατα λοιπόν βγήκαν κάποια προγράμματα τα + οποία είναι για vector γραφικά αλλά μπορούν να επέμβουν (σε πολύ βασικά πράγματα όμως) και σε bitmapped γραφικά, ή ακόμα και να δημιουργήσουν bitmapped + γραφικά. Το πιο γνωστό τέτοιο πρόγραμμα είναι το CorelXara. Μεγάλη εισαγωγή για να πω τελικά ένα και μόνο πράγμα: Προτιμήστε προγράμματα που να κάνουν μία + δουλειά (και καλά). Το module του StarOffice ασχολείται και με τα δύο. Δεν τίθεται βέβαια θέμα σύγκρισης με το Gimp ας πούμε όσον αφορά στα bitmapped + γραφικά. Ούτε τίθεται θέμα σύγκρισης με το CorelDraw για τα vector γραφικά. Συνεπώς αν έχετε μεγάλη ανάγκη για αυτό το module, μάλλον την έχετε άσχημα. + Επειδή όμως βλέπω πολλά προγράμματα Office τα οποία έχουν τέτοια modules με τις ίδιες (απειροελάχιστες) δυνατότητες, φαντάζομαι ότι κάποιος με κάποιο τρόπο + θα τα χρησιμοποιεί. Τέλος πάντων, δεν έχει τίποτα να ζηλέψει από το Kpaint (paint για το KDE) ή το MSpaint των Windows95. Αντιθέτως έχει ορισμένες ωραίες + λειτουργίες, όπως γκρουπάρισμα pixels με το ίδιο χρώμα, αφαίρεση θορύβου και άλλα τέτοια καλούδια, που το κάνουν να μην ντροπιάζει το υπόλοιπο πακέτο. + Μάλλον ο λόγος ύπαρξής του είναι η δημιουργία κάποιου σχήματος πιο πολύπλοκου από μία απλή γραμμή και πιο απλού από δύο τεμνόμενα τρισδιάστατα αντικείμενα! +- **Πρόγραμμα σχεδιαγραμμάτων (Charts)**\ + Εδώ έχουμε ένα module το οποίο δημιουργεί δισδιάστατα και τρισδιάστατα σχεδιαγράμματα. Μπορεί κανείς να διαλέξει μεταξύ 37 δισδιάστατων από 7 διαφορετικές + κατηγορίες και 13 τρισδιάστατων από 5 κατηγορίες. Η αλήθεια είναι ότι όλα αυτά τα έβρισκα ανέκαθεν λίγο πολύ υπερβολικά. Δεν νομίζω ότι χρειάζεται κανείς + πάνω από 10 το πολύ διαφορετικές μορφές σχεδιαγραμμάτων. Βέβαια είναι καλό το ότι υπάρχουν αυτές οι επιλογές. Θεωρείται αυτονόητο ότι τα χρώματα των + σχεδιαγραμμάτων είναι απολύτως οριζόμενα. Μπορεί κάποιος να χρησιμοποιήσει δεδομένα από το spreadsheet για τα σχεδιαγράμματα, ή να τα εισάγει εκείνη τη + στιγμή. Μπορεί να έχει καμβά (grid) οριζόντιο, κατακόρυφο ή και τα δύο. Μπορεί το σχεδιάγραμμα να έχει φόντο. Ένα ωραίο πράγμα, το οποίο χρειάζεται αν + κάποιος θέλει τα σχεδιαγράμματά του τυπωμένα αλλά δεν έχει έγχρωμο εκτυπωτή, είναι ότι τα μέρη του σχεδιαγράμματος (και αυτό βέβαια ισχύει μόνο για τα + bar-charts και τα pie-charts) μπορούν αντί για διαφορετικά χρωματισμένα να είναι διαφορετικά σκιαγραφημένα. Υπάρχουν 9 διαφορετικές διαγραμμίσεις για να + διαλέξει κανείς. Θεωρώ ότι αυτή η δυνατότητα είναι πολύ σημαντική. +- **Equation Editor**\ + Όχι, δεν διάβασα το help-file και έτσι δεν ξέρω πως δουλεύει. Μπορείς να γράψεις κλάσματα, τετραγωνικές ρίζες, ολοκληρώματα, διανύσματα και άλλα πολλά, + αρκεί να βρεις τον τρόπο. Σίγουρα δεν είναι το ευκολότερο πρόγραμμα για να χρησιμοποιήσει κανείς, αλλά από την άλλη μεριά, δεν περιμένει κανείς και + ευχρηστία από ένα τέτοιο πρόγραμμα. Νομίζω ότι όσοι χρειάζονται equations, θα το βρουν αρκετά χρήσιμο, αλλά πάλι αυτό μένει να διευκρινιστεί. Δυστυχώς, και + για αυτό το module, ισχύει ότι ισχύει και για πολλά άλλα modules αυτής της παρουσίασης. Αν δεν έχεις πραγματική ανάγκη χρήσης του, δεν μπορείς να κάνεις + καλή εκτίμηση των δυνατοτήτων του (ή αν κάτι λείπει). +- **Ένα address book**\ + Αυτό τώρα είναι παράξενο. Εγώ σαν Address book θα ονόμαζα ένα rolodex, έναν απλό πίνακα με όνομα, τηλέφωνο, fax, e-mail, διεύθυνση και κάνα δυο άλλα + πράγματα που θα μπορούσε να σκεφτεί το τμήμα marketing της StarDivision. Αντ\' αυτού βρήκα forms, queries, reports και tables! Η πραγματική του χρήση βέβαια + όπως πολύ σωστά υποννοεί η StarDivision είναι για AdressBooks, πολύ παραμετροποιήσιμα όμως. Είμαι σίγουρος ότι με λίγη προσπάθεια θα μπορούσε κάποιος να + φτιάξει μια απλή DataBase, αλλά πάλι και το AdressBook μια DataBase είναι! Είναι καλό πάντως να βλέπεις ότι μπορείς να τροποποιήσεις τόσο πολύ αυτό το + AdressBook ώστε να μην μοιάζει καν με κάτι τέτοιο! Εύχρηστο, με τα κλασικά wizards, σίγουρα δεν είναι η Access αλλά ούτε θέλει να γίνει. Υπάρχουν πιο + εξειδικευμένα προγράμματα για εφαρμογές βάσεων δεδομένων. + + +### [4. Γραμματοσειρές]{#s4} + +Μόνιμο πρόβλημα με το StarOffice ήταν το θέμα των γραμματοσειρών. Θεωρητικά μπορούσε κάποιος να προσθέσει γραμματοσειρές στο StarOffice, αρκεί αυτές οι +γραμματοσειρές να ακολουθούν κάποια πρότυπα. Όχι διεθνώς αναγνωρισμένα πρότυπα, αλλά πρότυπα από την StarDivision. Οι γραμματοσειρές πρέπει να είναι Type1, να +έχουν .pfb και .afm αρχεία, και να μπορούν τα .afm αρχεία να διαβαστούν από το StarOffice. Η διαδικασία, αφού βέβαια έχουμε τις γραμματοσειρές σωστά ορισμένες +να δουλεύουν στα X-Windows, έχει ως εξής: + +1. βάζουμε τα αρχεία .pfb στο directory {office-installation}/xp3/pssoftfonts +2. βάζουμε τα αρχεία .afm στο directory {office-installation}/xp3/fontmetrics/afm +3. ενημερώνουμε το αρχείο {office-installation}/xp3/psstd.fonts με τις γραμματοσειρές που προσθέσαμε, με βάση το αρχείο fonts.scale που υπάρχει στο directory + με τις γραμματοσειρές, αντικαθιστώντας το .pfb στο τέλος κάθε αρχείου με ένα κόμμα (,) και αντικαθιστώντας την σειρά 0-0-0-0 που εμφανίζεται στην περιγραφή + του κάθε αρχείου με την σειρά %d-%d-%d-%d. Μία ματιά στο αρχείο αυτό θα λύσει τυχόν απορίες που δημιουργήθηκαν από το όχι και τόσο κατατοπιστικό αυτό + κείμενο. Ειδικά για τα ελληνικά, βρήκα ότι εμφανίζονται πολύ καλύτερα στην οθόνη αν τα δηλώσω ως 8859-1 αντί για το σωστό 8859-7 +4. εκτελούμε το perl-script που έχει φτιάξει ο Thomas Bartshies στα .afm αρχεία που έχουμε, και αντικαθιστούμε τα πρωτότυπα με τα καινούργια. Θεωρητικά, μετά + από όλα αυτά πρέπει να δουλεύουν οι γραμματοσειρές μας. + +Πραγματικά, να τι έγινε για μένα:\ +α. Γραμματοσειρές από τον Άγγελο Χαρίτση (του 1995) με arial, times και courier, βλέπω κανονικά στην οθόνη τα times, και μπορώ και τυπώνω και τις τρεις +γραμματοσειρές. Τα arial και τα courier δεν μπορώ να τα δω στην οθόνη.\ +β. Γραμματοσειρές από την GR-Soft, με αρχεία .pfb και .pfm (που τα γύρισα σε .afm με το πρόγραμμα afm2pfm) δεν μπόρεσα να τις κάνω καθόλου να δουλέψουν. +Συγκεκριμένα δεν δείχνουν τίποτα!\ +γ. Γραμματοσειρές από την UniBrain με αρχεία .pfb και .afm δεν μπόρεσα να τις κάνω καθόλου να δουλέψουν. Συγκεκριμένα δεν δείχνουν τίποτα!\ +δ. Γραμματoσειρές Bitstream από ένα Solaris 2.5.1 με αρχεία .pfa και .afm δεν μπόρεσα καθόλου να τις κάνω να δουλέψουν. Συγκεκριμένα μόλις τις επιλέξω κλείνουν +το StarOffice.\ +ε. Γραμματοσειρές BH και Monotype από ένα Solaris 2.6 με αρχεία .pfb και .afm, οι μισές δεν δείχουν τίποτα και οι άλλες μισές δεν δείχνουν ελληνικά στην οθόνη, +ούτε και τυπώνουν ελληνικά. + +Τις γραμματοσειρές του Χαρίτση θα τις βρείτε στο ftp.linux.gr, όπως και τα \"πειραγμένα\" .afm αρχεία για το StarOffice, μαζί με το script afm.pl (perl-5.004). +Ελπίζω κάποιος να καταφέρει κάτι και με άλλες γραμματοσειρές και να μας ενημερώσει.\ +Να παρατηρήσουμε ωστόσο ότι τουλάχιστον ένα module (το presentation) δέχεται όλες τις γραμματοσειρές των X-Windows, οπότε εκεί δεν θα έπρεπε να υπάρχει +πρόβλημα. Παρ\' όλα αυτά, όταν δοκίμασα να χρησιμοποιήσω άλλη γραμματοσειρά από την times, η απεικόνιση στην οθόνη είχε πολύ παράξενο kerning. Μάλλον είναι θέμα +πειραματισμού, οπότε αν καταφέρω κάτι σε αυτό θα σας ενημερώσω στο επόμενο τεύχος :-) + + +### [5. Modules για Internet]{#s5} + +- WEB Browser\ + Περιμένετε για το επόμενο τεύχος\... +- HTML Editor\ + Περιμένετε για το επόμενο τεύχος\... +- E-mail (POP & IMAP) client\ + Περιμένετε για το επόμενο τεύχος\... +- FTP client\ + Περιμένετε για το επόμενο τεύχος\... +- News client\ + Περιμένετε για το επόμενο τεύχος\... + diff --git a/content/articles/03/04_heybilly.md b/content/articles/03/04_heybilly.md new file mode 100644 index 0000000..3b449b1 --- /dev/null +++ b/content/articles/03/04_heybilly.md @@ -0,0 +1,60 @@ ++++ +title = 'Billy τσάκω ένα γιαούρτι' +date = '1998-03-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας' +issue = ['Magaz 03'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Επικίνδυνη αποστολή: Ο Γιατρός στις Βρυξέλλες για το γιαούρτωμα του Bill Gates.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Επικίνδυνη αποστολή: Ο Γιατρός στις Βρυξέλλες για το γιαούρτωμα του Bill Gates.** + +Ειναι γνωστό πως ο Bill Gates το είχε παρακάνει. Κόντρα με την Netscape, κόντρα με τη SUN, κόντρα με την Apple, κόντρα με την Αμερικάνικη Νομοθεσία. Ο κομάντο +μας εστάλθηκε σε αποστολή αυτοκτονίας. Αν τον πιάνανε θα αρνιόταν τα πάντα. Ηταν μόνος του. Αυτός και η Κρέπα Σαντιγύ. Και τα κατάφερε\... + +Μετά από τα σχετικά συμβάντα, η ΕΕΕΑ (Ελληνική Εταιρεία Ευρωπαικών Αναλήψεων) με κυρίως έδρα τις Βρυξέλλες επειγόντως συκάλεσε έκτακτο διοικητικό συμβούλιο και +όπως αποφασίστηκε την άλλη μέρα, ο Γιατρός με πλαστό διαβατήριο και μεταμφίεση έσπευσε επι τόπου. + +Σκοπός μας ήταν η ζωντανή συνέντευξη με το μελλοντικό επίτιμο μέλος μας που έριξε την τούρτα. Δυστυχώς παρόλες τις προσπάθειες κατέστη αδύνατη η συνάντηση καθώς +δεν μπορούσε να χορηγηθεί επισκεπτήριο στο κρατητήριο. Παρόλα αυτά, για να θυμούνται πλεον οι παλαιοί και να μαθαίνουν οι νεότεροι ακολουθούν τα ντοκουμέντα: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +![](/03/img/gates.gif) + +Το οδοιπορικό της κρέπας (να διευκρινιστεί εδώ πως το υλικό που κοσμεί τον Βασίλη δεν είναι γιαούρτι αλλά μια μεγάλη κρέπα / τάρτα με σαντιγύ). + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +![](/03/img/gates.jpg) + +We are Microsoft! You\'ll be eliminated! + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +![](/03/img/gates_ap.jpg) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Where do you want to go tomorrow, Bill? + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Και τέλος. Αφιέρωμα στον Άνθρωπο Θρύλο! Το Επίτιμο Πλέον Μέλος της ΕΕΕΑ! + +![](/03/img/godin2.jpg) + +Η κρέπα κόκκαλα δεν έχει και κόκκαλα τσακίζει. + +**MISSION ACCOMPLISHED** diff --git a/content/articles/03/05_cd.md b/content/articles/03/05_cd.md new file mode 100644 index 0000000..9f5d305 --- /dev/null +++ b/content/articles/03/05_cd.md @@ -0,0 +1,65 @@ ++++ +title = 'CD-ROM ελληνικό? Παρεξηγήσεις και διευκρινήσεις' +date = '1998-03-01T00:00:00Z' +description = '' +author = 'Συντακτική ομάδα του Magaz Magaz(mailto:magaz@linux.gr)' +issue = ['Magaz 03'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Πρόσφατα δημοσιεύτηκε στο CHIP ένα e-mail που τους έστειλα, εκ μέρους του Magaz, για την πρόθεση δημιουργίας CD με Linux και όσο πιο πολλά ελληνικά προγράμματα +ήταν δυνατό. Το κείμενο το οποίο ακολουθεί δεν είναι τίποτα άλλο από μία ψυχρή παράθεση δεδομένων και προθέσεων. Υπάρχει λόγος που είναι έτσι: δίνει την +πραγματική διάσταση του γεγονότος.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για να εξηγήσουμε τι ήταν αυτή η βόμβα που έσκασε στην ελληνική Linux κοινότητα, γιατί εγώ προσωπικά έτσι το βλέπω, πρέπει να αναπτύξουμε το σκεπτικό μας. Οι +αρχική ιδέα υπήρξε στην παρουσίαση της Amtech όπου είχαμε μία συνάντηση. Δυστυχώς βρεθήκαμε μόνο συμμετέχοντες στο magaz, και επειδή είχαμε το καλό προηγούμενο +με το Chip αποφασίσαμε να κάνουμε τις επαφές ως Magaz. Έχουμε λοιπόν και λέμε: + +1. Μία γνωστή distribution, εύκολη στην εγκατάσταση, ως βάση. Λύσεις 2, RedHat και Caldera OpenLinux +2. Ένας ή και δύο εύκολοι και όμορφοι Window Manager (π.χ. KDE, Enlightenment) μαζί βέβαια και με τον γνωστό TWM για ελαφριά περιβάλλοντα +3. Γνωστά προγράμματα, τα οποία δεν περιλαμβάνονται σε όλες τις distributions, και τα οποία καλύπτουν τους εξής τομείς: (Τα παραδείγματα είναι μόνο ιδέες, όχι + αποφάσεις). + - Δίκτυο (Xisp, Netscape, XFMail, Xagent, samba) + - Δουλειά γραφείου, δηλαδή ένα πακέτο Office όπως έχει συνηθιστεί να λέγονται (StarOffice ή Papyrus κλπ) +4. Ελληνικές μεταφράσεις από το LDP (Linuc Documentation Project) δηλαδή τα FAQ, HOW-TO κλπ. +5. Προγράμματα υποστήριξης ελληνικών σε κονσόλα και X-Windows, μαζί με τις αντίστοιχες γραμματοσειρές. + +Αυτή λίγο πολύ ήταν ή πρόβλεψη. Εκτός αυτού είχαμε και τα δεδομένα: + +- Καμία μικρή ομάδα ατόμων (όπως π.χ. είναι αυτή που αποτελεί τον πυρήνα του Magaz) δεν μπορεί να κάνει κάτι τέτοιο ΜΕ ΑΠΟΛΥΤΗ ΕΠΙΤΥΧΙΑ. +- Καμία μη επιχειρηματική ομάδα ατόμων (όπως η ελληνική Linux κοινότητα, το www.linux.gr ή το Magaz) δεν μπορεί να αναλάβει το κόστος παραγωγής CD-ROM σε + πολλά αντίτυπα. +- Η ελληνική κοινότητα του Linux, έχει δείξει όποτε χρειάστηκε ότι μπορεί και συνεργάζεται (π.χ. συνεργασία Μπούρα και Τσιντζέλη για ΕΝΑ πακέτο Ελληνικών στα + X). +- Η ελληνική κοινότητα του Linux έχει τους πόρους (σε ανθρώπινο δυναμικό και ανθρωποώρες) να δημιουργήσει ένα πρότυπο CD (με αυτά τα οποία αναφέρονται + παραπάνω), μία μήτρα δηλαδή, χωρίς να μπει στην οικονομικά δυσάρεστη διαδικασία παραγωγής αντιτύπων. +- Ένα γνωστό περιοδικό το οποίο ΔΙΕΘΝΩΣ έχει δείξει συμπάθεια προς το Linux (το extra τεύχος του Γερμανικού CHIP στην αρχή του χρόνου κυκλοφόρησε με Linux + distribution και KDE), μπορεί να αναλάβει το κόστος αναπαραγωγής του πρότυπου CD και τη διανομή του. +- Το Linux στην Ελλάδα μπορεί να εξαπλωθεί κι άλλο, αρκεί να γίνει πιο προσιτό σε τρία θέματα: + 1. Ευκολία εγκατάστασης + 2. Υποστήριξη ελληνικών + 3. Πληρότητα Software. + +Είναι νομίζω αυτονόητη τώρα πια η κίνησή μας να στείλουμε αυτό το μήνυμα στο Chip. Να σας πληροφορήσουμε όμως ότι ΔΕΝ ΠΗΡΑΜΕ απάντηση. Την απάντηση τη διαβάσαμε +από τις σελίδες του CHIP, και σίγουρα ποτέ δεν είχαμε σκοπό να γνωστοποιηθεί κάτι τέτοιο από άτομα εκτός ελληνικής Linux κοινότητας. Είχαμε σκοπό, σε περίπτωση +που οι \"διαπραγματεύσεις\" είχαν αίσιο τέλος, να ενημερώσουμε τη λίστα (linux-greek-users) και μέσα από αυτήν και το Magaz να καλέσουμε σε συστράτευση για ένα +αξιόλογο αποτέλεσμα. + +Στην παρούσα φάση, υπάρχουν δύο λύσεις:\ +α) Προχωράμε χωρίς την υποστήριξη του Chip μόνοι μας, δημιουργούμε το CD-image και το τοποθετούμε στο ftp.linux.gr ούτως ώστε όποιος θέλει και μπορεί, να το +κατεβάσει και να το γράψει σε CD για προσωπική του χρήση, οπότε χάνουμε το πλεονέκτημα του να μάθουν και άλλοι για το Linux.\ +β) Συνεχίζουμε τις επαφές με το CHIP και ελπίζουμε σε κάποιο αποτέλεσμα. + +Οι δύο παραπάνω λύσεις δεν αποκλείουν η μία την άλλη. Αντιθέτως, μπορούν να συνυπάρξουν. Δηλαδή να δημιουργείται το Image και αν δεχτεί το CHIP να αναλάβει την +παραγωγή τους το δίνουμε, αλλιώς το αφήνουμε εκεί που είναι. + +Τέλος, να διευκρινήσουμε ότι σε καμία περίπτωση δεν υπήρξε η διάθεση δημιουργίας \"Ελληνικής distribution\", τουλάχιστον όχι με τη στενή έννοια του όρου. +Κανένας μας δεν μίλησε για εξελληνισμό κανενός προγράμματος (πλην του KDE το οποίο έρχεται από μόνο του με υποστήριξη ελληνικών μηνυμάτων), λειτουργικού, file +system, ή άλλα τέτοια τα οποία προσωπικά θεωρώ ευτράπελα, και πιστεύω ότι την ίδια άποψη έχουν και οι υπόλοιποι συντελεστές του Magaz. + +Αν και δεν είχαμε σκοπό να λέμε αερολογίες (και πριν πάρουμε απάντηση από το Chip αυτά ΕΙΝΑΙ αερολογίες) θα θέλαμε τις απόψεις όλων για το θέμα ώστε να +ξεκινήσει αυτή η προσπάθεια. Το magaz μπορεί να αναλάβει εργασία συντονισμού, αλλά εξελίξεις ελληνικών προγραμμάτων θα πρέπει να τις αναλάβουν οι +προγραμματιστές που τα έφτιαξαν. Περιμένουμε mails από εθελοντές, για να οργανωθούμε!!! diff --git a/content/articles/03/06_mailbox.md b/content/articles/03/06_mailbox.md new file mode 100644 index 0000000..e71c1d4 --- /dev/null +++ b/content/articles/03/06_mailbox.md @@ -0,0 +1,426 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-03-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 03'] +issue_weight = 6 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Και αυτό το μήνα είχαμε \"ηλεκτρονικά γράμματα\" από αναγνώστες του περιοδικού, κυρίως με ερωτήσεις. Επίτηδες παρελήφθησαν ορισμένα e-mails τα οποία +απαντήθηκαν μεν, αλλά ήταν πολύ ειδικές λύσεις προβλημάτων και θα κούραζαν. Επίσης παρελήφθησαν (όχι επίτηδες) όσα e-mails \"χάθηκαν\" κατά το τελευταίο crash +ενός δίσκου :-(* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. FTP πρόσβαση στο περιοδικό.** +------------------------------------------------------------ + +**2. Ερωτήσεις, πολλές ερωτήσεις\...** +---------------------------------------------------------------- + +**3. Γράμματα σε συνέχειες\...** +---------------------------------------------------------- + +**4. Περιοδικό έντυπο** +------------------------------------------------- + +**5. Πρόβλημα με ελληνικά στη Web page σας.** +----------------------------------------------------------------------- + +**6. Μικρή ερώτηση (που έγινε μεγάλη).** +------------------------------------------------------------------ + +**7. Linux Distributions** +---------------------------------------------------- + +**8. SOS- help me** +--------------------------------------------- + +**9. Συνεργασία** +------------------------------------------- + +**10. Συγχαρητήρια για το περιοδικό σας!** +---------------------------------------------------------------------- + + +### [1. FTP πρόσβαση στο περιοδικό.]{#s1} + +Από : [Μαιστρέλη Κώστα](mailto:fm94@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Νομίζω πως καλή ιδέα θα ήταν να υπάρχουν τα html και οι εικόνες του περιοδικού σε κάποιο συμπιεσμένο αρχείο (κατά προτίμηση στο ftp) έτσι ώστε να μπορούμε να το +κατεβάσουμε ολόκληρο και να το αρχειοθετήσουμε.. Επίσης το ftp νομίζω ότι είναι καλύτερη θέση για ένα τέτοιου είδους αρχείο μιας και είναι διαθέσιμο σε +περισσότερους ανθρώπους και είναι πιο μόνιμη θέση από μια http διεύθυνση. + +*Όπως ίσως θα είδες, στην πρώτη σελίδα του περιοδικού, υπάρχει η δυνατότητα download ενός συμπιεσμένου αρχείου, το οποίο περιέχει τα τρία πρώτα τεύχη. Θα +ακολουθήσει η \"διάθεση\" των τευχών και κατ\' αυτή τη μορφή. Επί τη ευκαιρεία, να σας πληροφορήσουμε ότι το περιοδικό είναι (κατά την πάγια φιλοσοφία του +Linux) copyleft! Αν κάποιος θέλει, μπορεί να το βάλει (εν είδει mirror) στο site του. Είναι τέτοια η δομή των αρχείων, ώστε να μην χρειάζεται καμία αλλαγή! Μία +παράκληση μόνο, αν κάποιος κάνει κάτι τέτοιο, να μας ενημερώσει ούτως ώστε να αναφέρουμε κάπου και τα mirrors.*\ +*Επίσης, θα θέλαμε να μην γίνονται αλλαγές στα πιθανά mirrors, αλλά αντ\' αυτού οι προτεινόμενες αλλαγές να στέλνονται σε εμάς με e-mail.* + + +### [2. Ερωτήσεις, πολλές ερωτήσεις\...]{#s2} + +Από : [Μπισογιάννη Αλέξη](mailto:biso@otenet.gr) + +Απάντηση : [Φώτης Γεωργάτος](mailto:gef@ceid.upatras.gr) + +Γειά σας και εύγε γιά το περιοδικό!!!\ +Λοιπόν είμαι ένας υπερnew user του Linux και όπως καταλαβαίνετε έχω μεγάλη ανάγκη απο help :(((((((((((((((( + +*Χτύπησες την σωστή πόρτα. :-)* + +Έχω το Red Hat 5.0 στο σκληρό αλλά και το Slackware 3,2 και το MCC 1,0, και το Debian 1,2,13 σε CD. Από τα τελευταία είχα βάλει μόνο το Slackware. Από ότι +διάβασα -και είδα- το Red Hat είναι το πιο εύκολο και το συνιστώ σε όλους τους newbies. Έχω όμως πρόβλημα με το CD-ROM drive. Πώς μπορώ να το κάνω να κάνει +mount στο boot ?? Και αφού το κάνω mount με το χέρι μετά δεν κάνει eject.\'Η μάλλον γενικά δεν κάνει eject στο Linux. Απο ότι έχω καταλάβει όμως το CD-ROM δεν +μπορεί να κάνει mount-unmount αυτόματα, έτσι δεν είναι ?? + +*Αυτά που ζητάς είναι εφικτά, αλλά πρέπει να ξέρεις τα εξής:\ +Κατ\' αρχήν το Linux όταν του βάζεις ένα cdrom, πρέπει να το κάνεις εσύ mount εκτός και εάν έχεις έναν automounter daemon (amd). Ξέρω ότι αρκετοί έχουν λύσει το +πρόβλημα αυτό έτσι, αλλά έχω την εντύπωση ότι δεν αξίζει τον κόπο, καθώς μέσα από το γραφικό περιβάλλον συνήθως μπορείς να κάνεις εύκολα mount/umount. Επίσης +στο Linux όταν κάνεις mount ένα cdrom (πχ mount /dev/hdc /cdrom -t iso9660), το λειτουργικό κλειδώνει (lock) την μονάδα του οπτικού δίσκου, για αυτό δεν μπορείς +να το βγάλεις. Η άποψή μου είναι ότι αυτό είναι πολύ λογικό, όσο λογικό είναι ότι δεν βγάζεις τον σκληρό δίσκο την ώρα που δουλεύει ο Η/Υ. Για να αλλάξεις το +δισκάκι, απλά κάνε umount. Αντίστοιχο φαινόμενο εμφανίζεται με το floppy όπου εάν βγάλεις την δισκέτα και δεν έχει γίνει umount προηγουμένως, το λειτουργικό +μπερδεύεται στην χρήση της δισκέτας.* + +Δεύτερη ερώτηση. Ποιά είναι η διαφορά των files /X11, /XFree86. (Δεν ξέρω άν τα έγραψα σωστά). + +*Στον δίσκο σου πρέπει να έχεις ένα ή παραπάνω directories από τα: /usr/X11, /usr/X11R6, /var/X11. Αν μιλάς για αυτά, τότε όλα είναι το ίδιο (βασικά το ένα +είναι directory και τα άλλα symlinks, ή shortrcuts για τους Win95 users. Αν τώρα μιλά γενικά, το X11 είναι το X Window περιβάλλον από το X Consortium, ενώ το +Xfree86 είναι η υλοποίηση του X11 για i386 συμβατούς υπολογιστές.* + +Ερώτηση 3. Ρε παιδιά εγώ είμαι ένας κακόμοιρος Windoze user. Όπως όλοι του είδους μας είμαστε καλομαθημένοι με τα αυτόματα install και configuration utilities. +Για παράδειγμα πώς μπορώ να εγκαταστήσω ένα προγραμμα απο το CD σε περιβάλλον Χ??? + +*RPM, είναι η μαγική λέξη που πρέπει να ψάχνεις. Είναι μια ειδική δομή αρχείου εγκατάστασης, που κάνει την εγκατάσταση πακέτων παιχνιδάκι. Δυστυχώς μόνο το +RedHat, Caldera και Suse Linux, υποστηρίζουν εγγενώς το rpm (στα άλλα γίνεται με λίγη δουλίτσα και όχι απαραίτητα με τον καλύτερο τρόπο). Ψάχνε πάντα για το +πακέτο που σε ενδιαφέρει σε rpm μορφή. Νομίζω ένας λογικός τρόπος για να το ψάξεις είναι να πας στην σελίδα του προγράμματος που σε ενδιαφέρει, να βρεις το +ακριβές όνομα του πιο πρόσφατου rpm, και να το ψάξεις στο , πρώτα στην Ελλάδα και μετά στο εξωτερικό. Ακόμα η εμπειρία μας με τα rpm +δεν είναι μεγάλη, όμως αργά ή γρήγορα θα δείς ένα αρθράκι στο magaz.* + +Ή πώς μπορώ να κάνω ένα \"shortcut\" ενός προγράμματος στο \"desktop\"?? Όπως βλέπετε αυτό που ζητάω είναι να έχω τα καλά των Windoze με τη σταθερότητα και την +ταχύτητα του Linux (πρέπει να το δείτε να τρέχει τον Pentium II που έχω!!!!!!!!!!!!!! :)))) + +*Εάν έχεις KDE είναι απλό (κάνε δεξί κλικ στο πρόγραμμα που σε ενδιαφέρει), εάν έχεις Redhat με fvwm-95 νομίζω δεν είναι απλό :-(. Το θέμα είναι πολύ μεγάλο για +να το καλύψει κανείς εδώ και εν συντομία σου λέω τα εξής:\ +H ιδέα του shortcut στα UNIX-like (άρα και στο Linux) λειτουργικά υλοποιείται σε επίπεδο filesystem, με τους συνδέσμους (links). (πχ γράψε ln -s /home/ftp/pub +/spiti, ls -las /, cd /spiti). Οι σύνδεσμοι του UNIX παρέχουν πολλές ευκολίες για την διαχείριση του συστήματος και λύνουν πολλά προβλήματα με κομψό τρόπο.* + +Ερώτηση quattro (έχω σπουδάσει στη Ιταλία βλέπετε). Οι window managers είναι μία έκδοση των Χ σαν το MetroX που περιέχεται το RH 5?? + +*Ο Xserver (Xfree86, AcceratedX, MetroX) είναι το πρόγραμμα που παρέχει τις δυνατότητες της κάρτας γραφικών για υψηλές αναλύσεις, και άρα η βάση του γραφικού +περιβάλλοντος. Οι δυο τελευταίοι που ανέφερα είναι εμπορικοί αλλά τείνουν να είναι και πιο γρήγοροι, υποστηρίζοντας πολύ μοντέρνες κάρτες. Οι window managers +είναι η πρώτη εφαρμογή που τρέχει στο γραφικό περιβάλλον για να μπορεί ο χρήστης να ζητήσει τις υπόλοιπες υπηρεσίες και εφαρμογές, όπως περίπου είναι το +λειτουργικό σύστημα για τον υπολογιστή. Ο window manager (twm, kde, fvwm, fvwm-95, ovwm κλπ) είναι ουσιαστικά ένα απλό πρόγραμμα και υπάρχουν κατάστάσεις που +λείπει παντελώς και στην θέση του είναι για παράδειγμα ένα xterm (παράθυρο με shell για να γράφεις εντολές). Εάν γράψεις απλά X (κεφαλαίο), λογικά θα δεις ένα +άδειο dekstop (xserver χωρίς window manager) που μπορείς να \"σκοτώσεις\" με ctrl+alt+backspace (πρόσεξε: backspace).* + +Ερώτηση 5 (cinque). Επειδή το WWW το χρησιμοποιώ κατα κόρον πείτε μου σας παρακαλώ πώς να κάνω το πιγκουϊνάκι να κάνει dial up. Απο ότι διάβασα υπάρχει ένα +προγραμματάκι που κάνει αυτή τη δουλειά, έτσι δεν είναι? + +*Το Redhat υποθέτω έχει το δικό του εργαλείο. Εάν έχεις KDE είναι πολύ απλό να μπεις στο Internet μέσα από το Kppp (για να μην πω πιο εύκολο από τα windows, +ιδιαίτερα στο scripting). Υπάρχει και το XISP του Δημήτρη Μπούρα που χρησιμοποιεί πολύς κόσμος και στο εξωτερικό, χρήσιμο ειδικά αν στήσεις slackware.* + +Ερώτηση 6. Υπάρχει κάτι που αντιστοιχεί στο defrag των Windoze?? Aν χρειάζεται βέβαια ;) + +*Όχι δεν χρειάζεται, γιατί το filesystem ext2, είναι ειδικά σχεδιασμένο για να έχει ελάχιστο fragmentation, και αυτόματο έλεγχο λογικών λαθών (αυτό που αργεί +μερικές φορές στην εκκίνηση, σπαστικό μεν σωτήριο δε).* + +Ερώτηση sette, εφτά, ευτά (7). Μπορώ να κάνω install διάφορα προγράμματα εκεί που θέλω εγώ και όχι στα διάφορα /bin, /etc, /usr, και τα λοιπά? Αυτό το λέω γιατί +εκει πέρα έχει τόσα πολλά που χάνει η μάνα το παιδί και το παιδί τη μάνα. + +*Μάλλον όχι και δεν θα πρέπει και να σε ενδιαφέρει. Συνήθως μπορείς να επιλέξεις να βάζεις τα δικά σου προγράμματα στο /usr/local. Εκεί έχει θέσεις για τα πάντα +πχ bin,lib,man,src κλπ και εάν χρειαστεί μπαίνει και κάνα netscape :-). Να αφήνεις τα υπόλοιπα σημεία του λειτουργικού ανέγγιχτα για να έχεις έλεγχο της +κατάστασης, εκτός και εάν ξέρεις τι κάνεις.* + +Ερώτηση 8. Ρε παιδιά γίνεται να μας πείτε μερικά προγράμματα γενικής χρήσεως όπως editors κ.λ.π και πώς τα χρισιμοποιούμε γιατί έχω μπλέξει τα μπούτια μου?? + +*Λοιπόν προτείνω να δεις αυτά:* + +- Netscape, Nedit (editor), +- http://members.xoom.com/tucols/main.html +- KDE, KDE, KDE (αντί να κάθεσαι να στήνεις προγραμματάκια, πάρε αυτό και φτιάξε το περιβάλλον σου μια και έξω) + +Question 9. Τί θα πεί custom Kernel?? Αντιστοιχεί στο Autoexec και στο config?? (sorry για την αντιπαράθεση αλλά όπως εξήγησα είμαι τελείως γκάγκα με τα non +Bill OS). + +*Στο Linux το λειτουργικό είναι ο πυρήνας, και για αλλάξεις τις ρυθμίσεις του ξαναφτιάχνεις πυρήνα (καλά στον Pentium II, θα θέλει κάνα 3λεπτο\... ). Αυτό +χρειάζεται συνήθως όταν αλλάζεις κάρτα ήχου, γραφικών, ή θες να κάνεις κάτι εξεζητημένο στο λειτουργικό. Στο Redhat Linux πολλά πράγματα γίνονται αυτόματα και +μάλλον δεν χρειάζεται να φτιάξεις πυρήνα αρχικά, αλλά σίγουρα κάποια στιγμή θα σου χρειαστεί. Η διαδικασία είναι πολύ συγκεκριμένη αλλά μεγάλη και θα αναλυθεί +κάποια στιγμή από στήλη του περιοδικού.* + +10\. Με το Wine τί γίνεται? Όχι τίποτα άλλο αλλά θα ήθελα να παίζω και κανένα game;) + +*Μην βασίζεσαι και πολύ σε αυτό ακόμα. Υπάρχει και το Wabi, που τρέχει αρκετά win 3.11 apps, αλλά εάν με ερωτήσεις, η κατάσταση στα windows είναι τόσο κλειστής +αρχιτεκτονικής (doc: τι έχει μέσα το doc?), που πρέπει να είμαστε σκεπτικοί απέναντι τους. Απεναντίας μπορείς να βασίζεσαι στο DOSEMU, που -το έχω ξαναπεί- +τρέχει πολύ DOS λογισμικό: μου έχουν τρέξει κάτι ελληνικές εφαρμογές γραμμένες σε clipper που δεν τρέχαν κάτω από win95 dos box! Επίσης κάτω από αυτό έχουν +τρέξει πολλά δύσκολα παιχνίδια όπως το Doom (τότε).* + +Προς το παρόν αυτά (χεχεχεχεχεχεχεχε satanik γέλιο) και θα ήθελα να προτείνω κάτι. Θα μπορούσα να βοηθήσω ώς πηγή ερωτήσεων νέων χρηστών. Δηλαδή να σας στέλνω +ερωτήσεις και να τις \"δημοσιεύετε\" σε μία στήλη. Σαν να λέμε ένα F.A.Q. αλλά για τους πολυυυυυυυ άσχετους. Θα μπορούσε δηλαδή η στήλη να λέει τί είναι και πώς +χρησιμοποιήται το fdisk (το ξέρω ότι υπάρχει man για αυτό αλλά πάλι πως βλέπω τις man pages??). Καταλάβατε τι εννοώ? Αυτό το λέω γιατί υπάρχουν χρήστες οι +οποίοι ναι μεν θέλουν Linux αλλά δέν μπορούν λόγω γνώσεων ή χρόνου να το ψάξουν τόσο πολύ. + +*Φίλε μου καλώς ήρθες. Υπάρχει μεγάλη ανάγκη από άτομα που μπορούν να βοηθήσουν με όποιο τρόπο μπορούν και σίγουρα η απάντηση εδώ είναι θετική. Γράψου στην +linux-howto, και δήλωσε παρών και άνεργος.* + +Ευχαριστώ για το χρόνο και την υπομονή σας. (κλάψ, λύγμ) + +*Πσσσσσσσσσσσσσ. Αυτό είναι.\ +Φιλικά\ +Γεωργάτος Φώτης* + + +### [3. Γράμματα σε συνέχειες\...]{#s3} + +Από : [THE MAGE](mailto:mage@acropolis.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Γεια σας.\ +Τελικά κατέληξα μετά από αρκετή σκέψη στο redhat, αφού σύμφωνα με τις πιο πολλές απόψεις είναι το πιο εύχρηστο για έναν αρχάριο στο linux. Μετά από καμιά +δεκαριά αποτυχημένες εγκαταστάσεις του ( :))) τελικά κατάφερα να το κάνω να δουλέψει.Παρόλα αυτά όμως, δεν ξέρω πως να φτιάξω μια dial-up σύνδεση στο internet. +Έχω σύνδεση στην acropolis και μετά μάλλον θα πάρω στη hol η στη kapatel.Μπορείτε να βοηθήσετε? + +*Acropolis, έχω σύνδεση και εγώ και είναι πανεύκολο. Αυτό που χρειάζεσαι είναι το πακετάκι XISP το οποίο ή θα το έχουν τα CD της REDHAT, ή θα το βρεις από το +. Όταν το πάρεις επικοινώνησε πάλι μαζί μας να σου πούμε τις ρυθμίσεις σύνδεσης.* + +Ακόμα,δεν μπορώ να χρησιμοποιήσω τους dos-emulators για το shell η τα X-windows, ενώ τα έχω installarei. Όταν είμαι στο shell και γράφω dos μου βγάζει κάτι +μηνύματα του στυλ ERROR in module /usr/f60 ή κάπως έτσι. Έχετε καμιά ιδέα για το που οφείλονται αυτά? + +*Από dos emulator δεν έχω ιδέα. Sorry* + +Τέλος, θα ήθελα να σας ρωτήσω πως μπορω να δω τα περιεχόμενα μιας δισκέτας,του cd-rom, καθώς και το πόσο χώρο καταλαμβάνει κάθε αρχείο στο δίσκο, πως μπορώ να +διαβάσω ένα δίσκο με FAT32 Η FAT16 μέσα από linux? Τέλος, πως μπορώ να αλλάξω το default λειτουργικό, από το οποίο ξεκινά το lilo?? + +*Περιεχόμενα με ls αφού το έχεις κάνει mount.\ +man mount\ +man ls\ +Το πόσο χώρο πιάνει στο δίσκο, ls -l\ +Για το lilo, μια ματιά στο /etc/lilo.conf θα σου λύσει την απορία.* + +Θα ήθελα ακόμα να πω ότι μια καλή ιδέα για άρθρο θα ήταν να μας παρουσιάσετε τους εαυτούς σας :)) Πόσοι είστε, πως σκεφτήκατε να κάνετε το περιοδικό, κτλ. +Αλήθεια,στο irc έρχεστε? + +*Η παρουσίαση των αρθρογράφων είναι άσχετη με το περιοδικό, αλλά αν γίνουμε διάσημοι θα το μάθετε:-)\ +Εγώ δεν μπαίνω στο irc (έλλειψη χρόνου) αλλά άλλοι μπαίνουν. Το linux-gr δενξέρω σε ποιο δίκτυο είναι, αλλά το βρίσκεις στον server irc.forthnet.gr* + +Υ.Γ. Όλο λέτε για τα windows και τα αποκαλείτε winbloze όμως ξεχνάτε ότι και το linux έχει τα x-windows :)) + +*Ναι αλλά το ένα είναι λειτουργικό ενώ το άλλο gui.* + +Υ.Γ.2 Τελικά στις mailing-lists πως μπορώ να εγγραφώ? + +*Στείλε mail στο majordomo\@argeas.argos.hol.gr και στο body γράψε:\ +subscribe linux-greek-users* + +Eπειδή σκέφτομαι να ξαναπεράσω το linux για να του δώσω πιο πολύ χώρο στο δίσκο (εχω 1gb και θα του δωσω 400mb),τι partitions με συμβουλεύετε να φτιάξω και πόσα +mb το καθένα? (έχω 64mb ram,αν έχει κάποια σημασία). + +*Με τόση Ram, 50 Mb swap πρέπει να είναι και περισσευούμενη (εγώ έχω 32 Mb Ram και 80 swap και δεν εχω ΠΟΤΕ πρόβλημα - ούτε όταν δεν είχα καθόλου swap είχα +πρόβλημα, αλλά σε ένα compilation ενός ΤΡΟΜΕΡΑ απαιτητικού προγράμματος μου χτύπησε με ένα message \"virtual memory exhausted\" και τα πήρα στο κρανίο που λέμε, +οπότε\...)\ +Partitions:\ +/ (root) ας είναι και 30 Mb\ +/var (το var) ας είναι και 30 Mb\ +/usr (to usr)\ +/opt (τα προγράμματα που δεν μπαίνουν στο usr)\ +Στα δύο τελευταία χώρισε 60 (usr) - 40 (opt) τον εναπομείναντα χώρο.* + +Κατάφερα να σετάρω το linux και είμαι για αρκετό διάστημα στο internet. Τώρα το πρόβλημά μου είναι ότι στο web δεν μπορώ να δω ελληνικά παρόλο που στον +comunicator 4.04 του βάζω επιλογή για greek enconding. + +*Και έχεις εγκαταστήσει τα [greek fonts](ftp://ftp.ntua.gr/pub/fonts/) του NTUA πιστεύω???\ +Αν θέλεις βοήθεια για το πως να στήσεις τα fonts, στείλε ξανά mail.* + + +### [4. Περιοδικό έντυπο]{#s4} + +Από : [Σταύρο Μαραγκουδάκη](mailto:elhellas@delta1.elea.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Καλημέρα σας,\ +Θέλω να ρωτήσω εάν το περιοδικό του Linux κυκλοφορεί στα περίπτερα ή από που θα μπορούσα να το προμηθευτώ. + +*Όχι, λυπάμαι αλλά το περιοδικό \"κυκλοφορεί\" μόνο στο Internet. Βλέπετε, συντηρείται από ερασιτέχνες και δεν έχει οικονομικούς πόρους, οπότε μια έντυπη έκδοση +θα ήταν αδύνατη (λόγο κόστους και χρόnου μόνο. Η τεχνογνωσία υπάρχει).* + + +### [5. Πρόβλημα με ελληνικά στη Web page σας.]{#s5} + +Από : [Νικόλαο Φώτη](mailto:webmasterxl@dolnet.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Βρε παιδιά, προσπαθώ να διαβασω τα magazines σας, αλλά δεν μπορώ (μόνο το index του 1ου τεύχους μπορώ να διαβάσω) Μήπως τα\' χετε βγάλει σε IBM 437 ?? Ναι, έχω +Elot-928 fonts\... + +*Δεδομένα:* + +- Ελληνικά fonts έχεις +- Είναι και 928. +- Σε όλους εμάς τα ελληνικά δουλεύουν με το \"Greek Encoding\" του Navigator kai tou Communicator. + +*Απορία:\ +Εσύ χρησιμοποιείς \"Greek\" document encoding, ή \"English\".?\ +Δοκίμασε να επιλέξεις \" View \| Document Encoding \| Greek (iso-8859-7) \" και μάλλον θα δεις ελληνικά\...* + + +### [6. Μικρή ερώτηση (που έγινε μεγάλη).]{#s6} + +Από : [Χαζάπη Α.](mailto:hazapis@csd.uch.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Πραγματικά αξίζετε συγχαρητήρια για την φοβερή σας δουλειά. + +*Ε, μην υπερβάλλουμε κιόλας (άκου φοβερή), αλλά ευχαριστούμε :-)* + +Γράφω αυτό το mail καθώς είμαι αρχάριος στο Linux και έχω αρκετές απορίες, αλλά η σημαντικότερη παραμένει αναπάντητη\ +Πως στο διάλο θα συνδεθώ στο Internet?\ +Πραγματικά έχω φάει τον κόσμο να το καταφέρω, έχω κατεβάσει άπειρα προγράμματα που υπόσχονται άμεση σύνδεση με ευκολία, αλλά και έχω διαβάσει αρκετές σελίδες +που λένε πως γίνεται με διάφορα scripts κτλ και δεν γίνεται τίποτα. Το μόνο που έχω καταφέρει είναι να συνδεθώ με το modem, αλλά και πάλι (εκτός του ότι το +minicom για κάποιο ηλίθιο λόγο σέρνεται) ούτε login και password μπορώ να δώσω. + +*Βασικά δεν βοηθάς και πολύ.\ +a) Aς τα πάρουμε από την αρχή: μιλάς για σύνδεση από κονσόλα ή από X-windows?\ +b) Τι πρωτόκολλο authentication χρησιμοποιεί ο Internet provider που έχεις?\ +c) Ποια προγράμματα δοκίμασες, και τι εννοείς όταν λες δεν δουλέψανε\ +d) Ποια προγράμματα έχει τώρα στον H/Y σου (μήπως και βολευτούμε με αυτά)\ +* + +Προτείνω μια στήλη στο magaz για τον αρχάριο στο Linux. Θα ήμουν και ευγνώμων αν είχα μια απάντηση καθώς και mail έχω στείλει σε διάφορους αλλά απάντηση δεν έχω +λάβει καμία. + +*Καλή ιδέα, μας το έχουν ξαναπεί, αλλά ακόμα δεν ξέρουμε. Θα το δούμε για το μεθεπόμενο τεύχος ίσως :-)* + +Ευχαριστώ πολύ\ +Antony + +*Any time\ +Magaz* + + +### [7. Linux Distributions]{#s7} + +Από : [Χριστοδουλάκη Αλέξανδρο](mailto:A.HRISTODOULAKIS@telestet.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Γειά σας,\ +Λέγομαι Χριστοδουλάκης Αλέξανδρος από το Ηράκλειο Κρήτης και αρχάριος στο Linux. Όταν διαbασα το άρθρο σας στο Linuxmag αποφάσισα να προμηθευτώ το LDR Linux. Το +μεγάλο μου πρόβλημα είναι ότι δεν το βρίσκω. + +*Το LDR Linux που λες είναι το \"Linux Developers Resource\" της Infomagic. Αυτό είναι μια συλλογή από 6 CD, που έχει μέσα αρκετά distributions (συνήθως 4 +διαφορετικά distributions υπάρχουν εκεί μέσα), και mirrors σε CD από τα δύο πιο σημσντικά ftp-sites του Linux, το \"sunsite.unc.edu\" και το \"tsx-11.mit.edu\". +Αν περιμένεις λιγάκι ακόμα, θα αρχίσει να κυκλοφορεί η έκδοση του Φεβρουαρίου 1998, γιατί μόλις αυτή την Δευτέρα άρχισε η Infomagic να κάνει \"shipping\" τα +δισκάκια. Αυτή η έκδοση έχει μέσα τα εξής (όπως φαίνονται και στις σελίδες της [Infomagic](http://www.infomagic.com/)* + +Red Hat 5.0 for Intel (installs kernel 2.0.32) + +Slackware 3.4 (installs kernel 2.0.30) + +SuSE 5.1 (installs kernel 2.0.33) + +Metro X-Server from MetroLink (version 4.1 complete commercial version - NOT a demo!) + +Kernel source trees include up to 2.0.33 (stable sources) and up to 2.1.79 (beta sources) + +XFree86 3.3.1(X-Windows) Binaries and sources included with all distributions + +RedHat\'s Powertools 5.0 (with sources) + +Linux archives from tsx-11.mit.edu and sunsite.unc.edu + +### [8. SOS- help me]{#s8} + +Από : [Μιχάλη Μπάχα](mailto:patmosa@hol.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Γεια χαρά.\ +Είμαι σε ένα μικρό νησί της Δωδεκανήσου την Πάτμο και αποφάσισα να ασχοληθώ με το linux. Όπως καταλαβαίνετε βοήθεια δεν υπάρχει από πουθενά\.... + +*Στην Πάτμο δεν ξέρω, αλλά στο δίκτυο, κι ειδικότερα στα \*.linux.gr θα βρεις πολλή βοήθεια :)* + +Έχω κατεβάσει από το ftp σας το redhat το 5.0 (ολόκληρο 237mb) και έχω ένα πρόβλημα με την εγκατάστασή του. Το p.c μου έχει δύο σκληρούς δίσκους. Το linux +βρίσκεται σε αυτόν που τρέχει win95, έχω κάνει τα απαραίτητα partition στον άλλο δίσκο και μου ζητάει να δηλώσω που βρίσκονται τα αρχεία από όπου θα γίνει η +εγκατάσταση\... ότι και αν δοκίμασα απέτυχε (π.χ. /dev/hda1/i386/redhat και άλλα). Τι να κάνω έχω κολλήσει. + +*Στο redhat από ότι θυμάμαι υπάρχει μία επιλογή για \"mounted partition\". Αυτό σημαίνει ότι πρέπει να κάνεις \"mount\" το partition που έχει τα install +αρχειάκια του RedHat. Για να κάνεις mount ένα partition (π.χ. το /dev/hda1) πρέπει να υπάρχει ένα directory που θα το κολλήσεις πάνω του, (π.χ. /win95)\... έτσι +κάνεις:\ +root:darkstar: \# mkdir /win95\ +root\@darkstar: \# mount -t vfat /dev/hda1 /win95\ +και τότε το /dev/hda1 το βλέπεις σαν ένα directory του συστήματός σου (συγκεκριμένα το /win95). Οπότε αν κάνεις, π.χ.:\ +root\@darkstar: \# ls -F /win95\ +θα δείς: total ???\ +. .. Program\\ Files/ My\\ Documents/\ +Μετά από όλα αυτά, στο RedHat δίνεις σαν source directory του installation σου ένα \"mounted partition\" και όταν σου πει για τα directory δίνεις το +\"/win95/RedHat/\" (ή ότι άλλο, ανάλογα με το που έγραψες τα αρχεία του RedHat με το FTP).* + +Θέλω να ξέρεις ότι θέλω να το στήσω σαν webserver, είναι κάτι άλλο που πρέπει να κάνω αργότερα; + +*Πρέπει να εγκαταστήσεις και να \"φτιάξεις\" λιγάκι ένα web-server. Επειδή του δείχνει προτίμηση πάνω από το μισό Internet, και είναι και τσάμπα, θα σου +προτείνω τον [Apache](http://www.apache.org). Και βέβαια στείλε μου mail με ό,τι θέλεις να ρωτήσεις (με Cc: στο magaz\@linux.gr βέβαια).* + +Σε ευχαριστώ πολύ\ +Μιχάλης Μπάχας - Πάτμος + +*Παρακαλώ, κι ό,τι άλλο θελήσεις μην διστάσεις να ρωτήσεις. Εμείς οι σχετικά παλιοί γι\' αυτό είμαστε εδώ πέρα :)))* + + +### [9. Συνεργασία]{#s9} + +Από : [Προκόπη Προκοπίδη](mailto:pproko@essex.ac.uk) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Γεια σας + +Γράφετε στο δεύτερο τεύχος ότι το περιοδικό θέλει μεταφραστή και διορθωτή - επιμελητή. Κάνω ένα master στη γλωσσολογία στην Αγγλία. Αν σας ενδιαφέρει, +φαντάζομαι ότι μπορώ να μεταφράζω κάποιο/α άρθρο/α από κάθε τεύχος και να κοιτάω τα κείμενα που θέλετε για λάθη. Για να κατοχυρώση αυτή την επίζηλη θέση θα +μεταχειριστώ και πλάγια μέσα, δηλαδή τη γνωριμία μου με τη Σανιδά και τον Παπακώστα. Ρωτήστε τον τελευταίο να σας πει για την καταχώριση, για την καταχώρηση, το +καταχωρίζω και το καταχωρώ :-) Δεν ξέρω αν θα αποτελέσει πρόβλημα ότι τώρα τελευταία ασχολήθηκα με Linux. Ως εκ τούτου δεν έχω ακόμη καταφέρει να γράψω ελληνικά +στα X ή στην κονσόλα, αν και βλέπω, π.χ. στο Netscape. Πιστεύω να το φτιάξω κι αυτό.\ +Χαιρετισμούς.\ +Προκόπης. + +Από : [Ευθύμιο Μαυρογεωργιάδη](mailto:emav@enl.auth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Φοβερό το περιοδικό, παιδιά! Πολύ \*με\* άρεσε! ;-)\ +Είδα λοιπόν, πως χρειάζεστε βοήθεια με τη μετάφραση των σελίδων και είπα να lend you a hand. Θα χαιρόμουν, λοιπόν, να βοηθήσω αλλά\... με το μαλακό, ε! Έχω και +ένα διδακτορικό να φροντίσω, καμιά 50αριά παιδιά που με κυνηγάνε στο φροντιστήριο και ανά τη Θεσσαλονίκη, τη λίστα με τους κομπιουτερολινουξάδικους όρους που +πρέπει να μεταφράσω από τα αγγλικά στα ελληνικά και που δεν έχει προχωρήσει και αυτή πολύ πέρα από την πρώτη της έκδοση, κλπ. κλπ. ;-)\ +Τα λέμε. + +*Κύριοι, παιδιά, magez, ή ότι προτιμάτε ως προσφώνηση, ευχαριστούμε πολύ για την προσφορά. Πράγματι είναι θετικό για μας να βλέπουμε τόσο σύντομη απάντηση (και +μάλιστα από δύο άτομα, όχι από ένα ή κανένα όπως περιμέναμε). Σας έχουμε στα υπόψην, όταν το περιοδικό γίνει (αν γίνει κάποτε) δίγλωσσο (ή και τρίγλωσσο, όλα +παίζουν αν έχεις τρέλλα) θα επικοινωνήσουμε μαζί σας για τις λεπτομέρειες. Πιστεύω ότι τρία άτομα φτάνουν για αυτή τη δουλειά της μετάφρασης, οπότε με λίγη +βοήθεια και από μας δεν θα είναι ιδιαίτερα δύσκολο.\ +Παρά ταύτα, σκεφτήκαμε ότι δεν έχει έρθει ακόμα η ώρα για κάτι τέτοιο. Αντ\' αυτού όμως, εφόσον υπάρχει από σας διάθεση βοήθειας, θα μπορούσατε να βοηθήσετε +στην μετάφραση των FAQs, ΗΟWΤΟs και λοιπών documents, από τα ελληνικά στα αγγλικά. Λεπτομέρειες στη λίστα greek-howto\@argeas.argos.hol.gr.\ +Και πάλι ευχαριστούμε για την προσφορά.* + + +### [10. Συγχαρητήρια για το περιοδικό σας!]{#s10} + +Από : [pestilence](mailto:pestilence_7@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Τυχαία λοιπόν αποφάσισα να κάνω ένα web search για linux στην Ελλάδα και να σου τα πρώτα αποτελέσματα. Μετά από μια αρκετά εκτενή ματιά βλέπω ότι το περιοδικό +σας είναι πολύ καλά στημένο με περιεχόμενο και φιλικότητα προς όλες τις ομάδες χρηστών του Linux. Εύχομαι χάρις σε εσάς ο αριθμός users του Linux στην Ελλάδα να +μεγαλώσει και άλλο, και να μάθει επιτέλους ο κόσμος τις δυνατότητες αυτού του φοβερού λειτουργικού :-)\ +Πολλά χαιρετίσματα!\ +Pestilence + +*Ευχαριστούμε για τα καλά λόγια. Ελπίζουμε να βοηθάμε και να ενημερώνουμε όλες τις ομάδες χρηστών, όπως πολύ σωστά αναφέρετε. Χαιρετίσματα και από μας* + diff --git a/content/articles/04/01_editorial.md b/content/articles/04/01_editorial.md new file mode 100644 index 0000000..5f7543b --- /dev/null +++ b/content/articles/04/01_editorial.md @@ -0,0 +1,37 @@ ++++ +title = 'Editorial' +date = '1998-04-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 04'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Και να το τέταρτο τεύχος\... Παρά τα πολλά προβλήματα τα οποία καθυστέρησαν το τρίτο τεύχος, να που αποδεικνύουμε ότι \"είμαστε ακόμα ζωντανοί\".* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Και αυτό δεν το κάνουμε μόνοι μας. Σε αυτό το τεύχος \"φιλοξενούμε\" τρία άρθρα από φίλους συνLinuxάδες. Έτσι γίνεται πραγματικότητα αυτό που λέγαμε από την +αρχή. Το περιοδικό δεν είναι εδώ για να το γράφουμε εμείς. Το περιοδικό είναι εδώ για να γράφουν όλοι τις απόψεις τους, αρκεί να είναι σχετικές με Linux. + +Τι σας έχουμε για αυτό το τεύχος; Ας τα πιάσουμε από την αρχή. Ο ακάβλητος από τον ελληνικό στρατό Παναγιώτης Βρυώνης, ξεκινάει μία νέα στήλη, την [Linux +Zone](02_zone.html)\... Μία στήλη που βοηθάει σε διάφορα κοινά και μη προβλήματα. Μία στήλη η οποία κινείται προς τον αρχάριο. Τι σημαίνει αυτό; Άλλη μία +πρόσκληση από εμάς. Βρήκατε κάτι που σας ταλαιπώρησε όταν πρωτοβάλατε το Linux, και τελικά το ξεπεράσατε; Γράψτε μας τις εμπειρίες σας. Θα θέλαμε πολύ να τις +διαβάσουμε, και σίγουρα πολλοί αρχάριοι (και όχι μόνο) θα εκτιμήσουν αυτή τη βοήθεια. + +Πολλή κουβέντα είχε πέσει πρόσφατα στην λίστα linux-greek-users σχετικά με το θέμα των ελληνικών στο LaTeX. Για να μαθαίνουμε αυτοί οι οποίοι δεν ξέρουμε τίποτα +για αυτό, και να λύνονται οι τυχόν απορίες αυτών που ξέρουν, ο Απόστολος Συρόπουλος μας έστειλε ένα [ωραίο άρθρο](05_babel.html) για το πακέτο babel του LaTeX. + +Ο Νίκος Καραμανώλης μας έγραψε κάποιες [σκέψεις για το Linux](06_skepseis.html). Μία ανάλυση της θέσης του Linux αυτή τη στιγμή, και κάποιες ιδέες για το τι +πρέπει να γίνει ώστε να βελτιωθεί ακόμα περισσότερο αυτή η θέση\... Διαβάστε το και προβληματιστείτε μαζί μας\... + +Δεν είναι όλα όμως τόσο σοβαρά\... Υπάρχει και η αστεία πλευρά του θέματος, την οποία αναλαμβάνουν οι φίλοι μας Ευριπίδης και Βούλα να μας υπενθυμίσουν, από τη +[στήλη του\... γιατρού](03_ios.html). Ή μήπως είναι και αυτό σοβαρό; Μμμμ, τα συμπεράσματα δικά σας. + +Τι άλλο έχουμε; Ε, ένα άρθρο είχαμε αφήσει στη μέση στο τεύχος 3. Το άρθρο για το StarOffice. Όπως περιμένατε, η συνέχειά του βρίσκεται [εδώ](04_soffice1.html). + +Δεν θα μπορούσε βέβαια να λείπει και η [στήλη της αλληλογραφίας](07_mailbox.html), έτσι; Σε λίγο αυτή η στήλη θα φτάσει να είναι η μεγαλύτερη στήλη του τεύχους. +Τα e-mails που λαμβάνουμε μας δίνουν κουράγιο να συνεχίσουμε\... + +Σας ευχόμαστε, καλό διάβασμα και, λόγω των ημερών, καλό Πάσχα. Θα τα ξαναπούμε σύντομα\.... diff --git a/content/articles/04/02_zone.md b/content/articles/04/02_zone.md new file mode 100644 index 0000000..6e10e80 --- /dev/null +++ b/content/articles/04/02_zone.md @@ -0,0 +1,66 @@ ++++ +title = 'Linux Zone' +date = '1998-04-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 04'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το Linux Zone είναι μία στήλη που σκοπό της έχει να παρουσιάζει μερικές από τις εμπειρίες μου στον χώρο του Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πριν από λίγο καιρό αποφάσισα να αντικαταστήσω τον παλιό μου εκτυπωτή, έναν Epson Stylus 800. Οι λόγοι ήταν δύο: πρώτον ο Epson έδειχνε να \"έχει φάει τα ψωμιά +του\" μετά από τις ατελείωτες δοκιμασίες που είχε περάσει μαζί μου τα τελευταία τρία χρόνια και δεύτερον η αδελφή μου που χρησιμοποιεί τον υπολογιστή για +computer graphics ήθελε έναν έγχρωμο εκτυπωτή. Λόγω του ότι με κάλεσαν να παρουσιαστώ στο ναυτικό δεν είχα πολύ χρόνο για να ψάξω το θέμα και έτσι γρήγορα, +γρήγορα κατέληξα να αγοράζω τον Hewlett-Packard Deskjet 720C. + +Ο HP συνδέθηκε, οι σχετικοί drivers για τα Windows95 εγκαταστάθηκαν και πραγματικά το αποτέλεσμα μου έρεσε: οι μαυρόασπρες εκτυπώσεις ήταν ταχύτατες και οι +έγχρωμες εντυπωσιακές. + +Αφού λοιπόν η αδελφή μου μπορούσε να δουλεύει στα Windows ήταν ώρα να δω τί ρυθμίσεις θα χρειαζόντουσαν να γίνουν για να μπορώ να εκτυπώνω από το RedHat Linux +που χρησιμοποιώ σχεδόν αποκλειστικά. Το RedHat παρέχει ένα πολύ βολικό εργαλείο, το printtool, που απολοποιεί την διαδικασία \"εγκατάστασης\" νέων εκτυπωτών στο +σύστημα. Επιλογή για \"HP Deskjet 720C\" δεν υπήρχε και αποφάσισα να δοκιμάσω κάποιες άλλες που έμοιαζαν κοντινές. Δοκίμασα \"cdj550\", \"cdeskjet\", +\"deskjet\" και γενικά ό,τι έμοιαζε να έχει κάποια πιθανότητα να δουλέψει άλλά μάταια. Το αποτέλεσμα σε όλες τις περιπτώσεις ήταν το ίδιο: ο HP δεν αντιδρούσε, +λες και δεν δέχονταν δεδομένα. + +Ευτυχώς ο Epson υπήρχε ακόμη. Το συνέδεσα και πάλι για να βεβαιωθώ ότι ο lpd δουλεύει κανονικά και όντως δεν υπήρχε κανένα πρόβλημα. Άρα, αυτό που θα έπρεπε να +φταίει είναι ότι τα δεδομένα που έστελνα στον HP δεν είχαν την μορφή που θα έπρεπε\... + +Εκείνη την περίοδο φτάνει ένα e-mail στο magaz από τον Νίκο Παπαγρηγορίου που αντιμετώπιζε το ίδιο πρόβλημα. Μόνο που έχει παρατηρήσει κάτι που εμένα μου έχει +διαφύγει: το κουτί του εκτυπωτή λέει \"Windows Printer\"!!! Καλά είναι δυνατόν να υπάρχει κάτι τέτοιο; Οι επισκέψεις στο www site της HP καθώς και τα e-mail +στην RedHat, ενισχύουν την άποψη αυτή. Οι αναζητήσεις συνεχίζονται σε news groups και διάφορα sites, αλλά μάταια\... + +Την λύση θα μου δώσει και πάλι ο Νίκος . Πράγματι, εκεί βρήκα πολλές πληροφορίες. Κατ\' αρχήν, ο HP Deskjet +720C χρησιμοποιεί ένα \"πρωτόκολλο\" επικοινωνίας που η HP ονομάζει PPA αλλά τις λεπτομέρειες τις κρατάει μυστικές. Κατά συνέπεια, μόνο αυτή μπορεί να φτιάξει +drivers (και δεν έχει από ό,τι φαίνεται κανένα ενδιαφέρον να τους μεταφέρει στο Linux\...). + +Αν και τα πράγματα έδειχναν μαύρα, δεν ήταν και τόσο. Ο συγγραφέας των παραπάνω σελίδων, ονόματι Tim Norman, είχε καθήσει με υπομονή και προσπάθησε να +αποκωδικοποιήσει τις εκτυπώσεις που έπαιρνε από τα Windows. Σιγά, σιγά άρχισε να καταλαβαίνει το PPA και αυτό του επέτρεψε να γράψει ένα προγραμματάκι που να +μετατρέπει pbm αρχεία (αυτό είναι ένα format που μπορεί να παράγει και το ghostscript) σε μορφή κατανοητή από τον 720C! + +Download λοιπόν τα σχετικά αρχεία, διάβασμα των README και INSTALL, compilation και η πρώτη εκτύπωση από το Linux μου είναι γεγονός!!! Βέβαια, υπάρχουν κάποια +\"προβληματάκια\" (πολύ μικρή ταχύτητα, μόνο μαύρο-άσπρο) αλλά ο Tim υποστηρίζει ότι δεν θα αργήσουν να λυθούν. + +Ενημέρωσα και τον Νίκο, ο οποίος μου απάντησε ότι δεν έχει καταφέρει να καταλάβει πώς θα χρησιμοποιήσει τα executables που παράγονται από το compilation. Δεν +έχει και άδικο - αν δεν ξέρεις πώς δουλεύει ο lpd θα χρειαστεί πρώτα λίγο διάβασμα (βλ. Printing-HOWTO κ.λ.). Γιατί να μην απλοποιήσω λίγο την διαδικασία; + +Το πρώτο βήμα ήταν να δώ πώς θα προσθέσω τον 720C στους εκτυπωτές που υποστηρίζει το printtool. Ε, αν και το συγκεκριμένο εργαλείο είναι δουλειά της RedHat, ο +κώδικας είναι σε Perl, τα στοιχεία διαβάζονται από ASCII files και διανέμεται σύμφωνα με το CPL. Λίγο ψάξιμο λοιπόν στο source code, μερικοί πειραματισμοί και +το printtool υποστήριζε και Deskjet 720C. + +Το επόμενο βήμα ήταν να φτιάξω ένα RPM που να αυτοματοποιεί την εγκατάσταση. Αν και έχω μία καλή εμπειρία με τα διάφορα εργαλεία που χρησιμοποιούνται για την +αυτοματοποιήση της διαδικασίας του compile και της εγκατάστασης όπως make, autoconf και automake ποτέ μου δεν είχα κάτσει να ασχοληθώ με τον τρόπο που +κατασκευάζονται τα RPMs, αν και πάντα με ενδιέφερε. + +Αυτή ήταν μία καλή ευκαιρία. Επισκεύθηκα το , διάβασα ό,τι μου φαινότανε απαραίτητο και μετά από ένα απόγευμα ευχάριστης ταλαιπωρίας +εγκατέστησα για πρώτη φορά το ppa-0.8.2-1.rpm στο συστημά μου. (Μέχρι να γραψω το άρθρο έχουμε φτάσει στο 8.4 που είναι και σαφώς ταχύτερο\...) Έστειλα την +δουλειά μου στον Tim Norman για να την αξιοποιήσει όπως νομίζει καλύτερα. + +Τώρα; Ε, τώρα περιμένω νέα versions του ppa με περισσότερες δυνατότητες. Ίσως να μπορούσε να γραφτεί και ένα προγραμματάκι για X-Windows (KDE?) αντίστοιχο με το +πρόγραμμα της HP για τα Windows95 που να επιτρέπει την επιλογή της ποιότητας εκτύπωσης κ.λ. Πάντως τώρα που έμαθα πως δουλεύει το rpm σκοπεύω να φτιάξω ένα για +το grISOXkb (νομίζω ότι θα βοηθήσει πολύ κόσμο). + +Περισσότερα από το Linux Zone στο επόμενο τεύχος του magaz! diff --git a/content/articles/04/03_ios.md b/content/articles/04/03_ios.md new file mode 100644 index 0000000..4a0a103 --- /dev/null +++ b/content/articles/04/03_ios.md @@ -0,0 +1,61 @@ ++++ +title = 'Η στήλη του\... Γιατρού' +date = '1998-04-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας' +issue = ['Magaz 04'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Nομίζατε ότι ο Ιός Microsoft ΔΕΝ θεραπεύεται; Κάνετε λάθος\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**ΣΟΥΗΔΟΣ ΕΡΕΥΝΗΤΗΣ**\ +**ΑΝΑΚΑΛΥΠΤΕΙ ΤΟ ΦΑΡΜΑΚΟ ΚΑΤΑ ΤΟΥ ΙΟΥ MICROSOFT !!!** + +Η γνωστή μάστιγα που ταλαιπωρούσε χιλιάδες ανά τον κόσμο δαμάστηκε επιτέλους από τον **Linus Torvalds** μετά από μακροχρόνια έρευνα. + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ + **ΠΑΡΑΔΕΙΓΜΑ 1** + + ![](/04/img/msv2sm.jpg) ![](/04/img/linv2sm.jpg) + + Οπως βλέπουμε, η θήλυ ασθενής ήδη προσβεβλημένη πολύ καιρό από την ασθένεια των Τώρα η ασθενής έχει αποθεραπευτεί πλήρως και μετατραπεί σε καλονή, σύμβολο του + NT, είχε γυρίσει στο στάδιο του πρωτογονισμού. Εκανε κακάκια της παρουσία sex + ξένων, έτρωγε ακαθαρσίες και ήταν γενικά χάλια μαύρα. + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +\>code\> + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ + **ΠΑΡΑΔΕΙΓΜΑ 2** + + ![](/04/img/mse4sm.jpg) ![](/04/img/line2sm.jpg) + + Άμοιρος υπάλληλος-προγραμματιστής προσβεβλημένος από τον ιό, γελάει βλακωδώς Στη φώτο 2 είναι άνετος, cool, προκαλεί το θαυμασμό των γυναικών οι οποίες + και χειροκροτάει τα windows που τον έφεραν στην κατάσταση αυτή. Το ντύσιμο υγραίνονται αυτομάτως από το άρωμα LINUX που φοράει (2 σταγόνες). + έρχεται σε πολύ προχωρημένο στάδιο των εταιρειών δικτύων Μicrosoft. + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Ο γιατρός σας απαντά : Εσείς μας ρωτάτε, εμείς σας γράφουμε. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/04/img/giatr1sm.jpg) + + ΤΟ LINUX είναι το φάρμακο που θα αλλάξει την ιστορία. Ατυχώς, ο κόσμος δεν έχει επίγνωση της σοβαρότητας της ασθένειάς του. Η επιτυχία του φαρμάκου αυτού + συνίσταται στη μοναδική του ικανότητα να κάνει τη δουλειά για την οποία δημιουργήθηκε. + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/content/articles/04/04_soffice1.md b/content/articles/04/04_soffice1.md new file mode 100644 index 0000000..9888dc9 --- /dev/null +++ b/content/articles/04/04_soffice1.md @@ -0,0 +1,72 @@ ++++ +title = 'StarOffice 4.0' +date = '1998-04-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 04'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Στο τεύχος Μαρτίου [(Magaz \#3)](http://www.linux.gr/magaz/03) είχαμε το πρώτο μέρος της παρουσίασης του StarOffice 4.0 για Linux, η οποία αφορούσε στα modules +γραφείου που έρχονται με αυτό το πρόγραμμα. Σε αυτό το τεύχος θα ασχοληθούμε με τα modules για Internet. Σε αυτό το τέυχος, έχουμε επιτέλους και το περιβόητο +link για τα [ελληνικά που δουλεύουν με το StarOffice](../files/g-fonts.tgz).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Modules για Internet + +- WEB Browser\ + Ένας WEB Browser δεν θεωρείται σήμερα απαραίτητο κομμάτι ενός μικτού προγράμματος. Αντιθέτως, μάλλον δινεται σαν \"έξτρα\", και τελικά λίγοι το + χρησιμοποιούμε. Με αυτό ως δεδομένο, μάλλον δεν περιμένει κανένας τίποτα ιδιαίτερο. Και όμως, η StarDivision για άλλη μία φορά μας εκπλήσσει ευχάριστα. Ο + Web Browser που έχει είναι τουλάχιστον ικανοποιητικός. Δείχνει πάρα πολύ καλά την πρώτη σελίδα του Magaz :-) αλλά δεν πάει στις επόμενες. Δεν δουλεύει το + Javascript. Αυτό είναι λάθος δικό μας όμως και όχι του StarOffice, αφού σχεδιάστηκε η πρώτη σελίδα με βάση το Netscape (δημοφιλέστερος browser για Linux). + Σύντομα θα αλλάξει πάλι η πρώτη σελίδα, με σκοπό να είναι λίγο - πολύ browser-independent.\ + Κατά τα άλλα, μπορεί να σώσει σελίδες από το Internet \"μιμούμενος\" Netscape 3 ή 4, Internet Explorer 3.01, Standard HTML 3.2, ή, τέλος, σε μία μορφή που + να την διαβάζει (πολύ άνετα) το StarWrite. Έχει επιλογή για Caching, accepting cookies, ορισμούς για διάφορα file types. Έχει επιλογή για ορισμό των μεγεθών + των γραμμάτων, αλλά όχι της οικογένειας. Αυτο σημαίνει ότι αν στη σελίδα δεν αναφέρεται γραμματοσειρά, όπως την αναφέρει ο χρήστης στο σύστημά του, δεν + μπορεί να δει ελληνικά (αυτό μας πειράζει, έτσι;). Σε διάφορες δοκιμές που έκανα, είδα ότι αν ονομάσω τις γραμματοσειρές μου Arial, Times New Roman και + Courier, δεν είχα πρόβλημα να δω ελληνικά, τουλάχιστον στις σελίδες του Magaz (όπου και δοκιμάστηκε η γραμματοσειρά Arial). Το πρόβλημα βέβαια υπάρχει αν + έχω άλλα ονόματα, για παράδειγμα GR-Arial, GRHelv, GR-Times ή άλλα τέτοια που προτιμάω να χρησιμοποιώ, ή αν η σελίδα δεν αναφέρει γραμματοσειρά, οπότε + πρέπει να ελεγχθεί, τι θεωρεί το StarOffice ως default γραμματοσειρά.\ + Το μεγαλύτερο πρόβλημα όμως του WEB Browser, είναι ότι κολλάει. Έχει μία εντελώς απρόβλεπτη συμπεριφορά. Κατά τη διάρκεια των δοκιμών για να γράψω αυτό το + άρθρο είδα ότι κολλάει σχεδόν πάντα στα local documents, ενώ και όταν \"σερφάρεις\", αν αποφασίσεις να μην ακολουθήσεις ένα link, αλλά να γράψεις την + διεύθυνση που θέλεις να δεις, πρέπει να κάνεις ολόκληρη διαδικασία (File-open) με απρόβλεπτα αποτελέσματα. Μάλλον είναι ένα κομμάτι, το οποίο χρειάζεται + βελτίωση. +- HTML Editor\ + Εν αντιθέσει με τον WEB Browser, ο HTML editor θεωρείται λίγο - πολύ στάνταρ κομμάτι του \"πολυπρογράμματος\". Συνεπώς και οι απαιτήσεις μας είναι + διαφορετικές. Σαν HTML editor, έχει δυνατότητα να σχεδιάσει frames, είναι βέβαια WYSIWYG editor, με όλα τα καλούδια που περιμένει κάποιος. Με χρώματα, + backgrounds, links, frames, anchors, αλλά και άλλα που δεν περιμένει κανείς (controls όπως check box, combo κλπ). Ελάττωμα: ένα και μεγάλο, δεν δουλεύει με + τα ελληνικά. Ακόμα χειρότερα: δουλεύει με τα ελληνικά, κάνεις μια χαρά τη δουλειά σου, αλλά όταν έρθει η ώρα να το σώσεις, βλέπεις ότι την έχεις πατήσει\... + Οτιδήποτε ελληνικό, βγαίνει ως ερωτηματικό (κάτι από FrontPage 97 μου θυμίζει). Για αγγλικές σελίδες, συνιστάται ανεπιφύλακτα. Για ελληνικές όμως, vi και + πάλι vi\.... +- E-mail (POP & IMAP) client\ + Ένας mail client, απλός και κατανοητός. Threaded, με φίλτρα, με attachments, με αυτόματο update, τι άλλο θέλει κανείς από έναν mail client? Σταθερότητα. + Όταν έχασα καμιά 20αριά e-mails επειδή στα καλά καθούμενα αποφάσισε να πεθάνει, είδα ότι θα προτιμούσα να έχανα κάτι από την \"ασφάλεια\" που μου παρέχει + και να είχα τα αρχεία με τα mails σε plain-text files. Συμβουλή μου είναι, αν τον χρησιμοποιήσετε (και γιατι όχι άλλωστε, είναι πολύ καλός και όμορφος), ΜΗΝ + σβήνετε τα mail από τον server\... +- FTP client\ + Γι\' αυτό τώρα τι να πω; Ένας Windows Explorer χωρίς καμία αλλαγή μέσα στο Linuxάκι μας; Και όμως. Οι άνθρωποι της Stardivision σκέφτηκαν ότι θα το + εκτιμήσουμε ιδιαίτερα (!!) και μας βάλανε έναν Windows Explorer μέσα στο πακέτο τους, με την προκάλυψη του ftp client. Τέλος πάντων, ας μην γίνομαι κακός. + Αρκετά βολικός και πολύ λίγο παραμετροποιήσιμος. Περίμενα ότι αν πείραζα τα associations των αρχείων, θα μπορούσα να ανοίξω ενα .zip αρχείο (με το KZIP) + αντί να το κατεβάσω, όταν του κάνω διπλό κλικ, αλλά αυτό πέρα βρέχει. Εν ολίγοις, είναι καλός σαν client, αλλά λίγο μεγαλύτερη παραμετροποίηση θα την ήθελα + (όπως παράδειγμα την επιλογή να μην βλέπω τα αρχεία και τα directories με εκείνα τα τεράστια εικονίδια, αλλά μόνο σαν κείμενο). +- News client\ + Ε, καλά, τίποτα το ιδιαίτερο. Απλά ο mail client, με τις κατάλληλες μετατροπές για να διαβάζει News. Με φίλτρα, threads, επιλογή να αποθηκεύονται locally ή + όχι τα news. Βασικά δεν έχω τίποτα άλλο να παρατηρήσω, εκτός βέβαια από το ότι δύσκολα θα τον έλεγα offline newsreader, αν και κινείται προς αυτή την + κατεύθυνση. +- Συμπερασματικά:\ + Δύσκολα τα πράγματα όταν φτάνεις στο στάδιο των συμπερασμάτων. Η αλήθεια είναι ότι το Linux πάσχει από πακέτα όπως WordProcessor, Spreadsheet, Presentation, + WYSIWYG HTML editor, threaded news client, threaded mail client, που να είναι ταυτόχρονα ελκυστικά προς το νέο χρήστη, και λειτουργικά. Το StarOffice + καταφέρνει να δώσει όλα αυτά πολύ όμορφα και ελκυστικά. Μπράβο στους ανθρώπους της StarDivision που κάνανε τόσο καλή δουλειά. Σίγουρα σε κάθε εγκατάσταση + Linux που θα κάνω, από τα δέκα πρώτα πρόγραμματα που θα μπαίνουν, ένα θα είναι το StarOffice. Από την άλλη μεριά όμως, προτιμώ να χρησιμοποιώ το XFmail από + το Mail της StarOffice, προτιμώ το Netscape από τον Browser της StarOffice, δεν χρειάζομαι Equation Editor, δεν χρειάζομαι news reader κλπ. κλπ.\ + Εδώ έπεσα θέμα της Microsoftικής νοοτροπίας. Θα ήθελα να έχω τη δυνατότητα να εγκαταστήσω ΜΟΝΟ τα προγράμματα που θέλω να χρησιμοποιήσω, αλλά ειμαι + υποχρεωμένος να τα εγκαταστήσω όλα\.... Επίσης, ένα άλλο που με δυσαρέστησε (τελικά μήπως είμαι παράξενος;) είναι ότι όλες οι ρυθμίσεις που γίνονται στο + πρόγραμμα, γίνονται μέσω μενού. Τι το κακό έχει αυτό; θα μου πείτε. Ε, λοιπόν, ένα πράγμα που μου αρέσει πάρα πολύ από το Linux, είναι ότι μπορώ να το κόβω + και να το ράβω στα μέτρα μου. Μπορεί να θέλω πενήντα μέρες να βρω άκρη με αυτά τα ακατανόητα για μένα .κάτιrc αρχεία, αλλά το θέλω, το συνήθισα, και δεν + θέλω να το αποχωριστώ. Δεν θα γκρίνιαζα βέβαια, αν μπορούσα να κάνω ΟΤΙ ΘΕΛΩ μέσω μενού. Το κακό είναι ότι μπορώ να κάνω ΟΤΙ ΘΕΛΕΙ Η STARDIVISION μέσω + μενού. Συγνώμμη, αλλά αυτό δεν μου αρέσει. Δεν θα παραβλέψω την τρομερή κατά τη γνώμη μου συνεισφορά της StarDivision στη διάδοση του Linux. Οτιδήποτε + φέρνει το Linux κοντά στον τελικό χρήστη, το θεωρώ καλό. Θα προτιμούσα όμως να μην είχε τόσο Winows ικη νοοτροπία, πράγμα το οποίο απορρέει από την κοινή + ανάπτυξη του προγράμματος για πολλές πλατφόρμες. Θα το χρησιμοποιήσω; Παρά τη γκρίνια μου, ναι!!! Και μόνο ο υπέροχος κειμενογράφος που έχει, θα άξιζε και + να το αγοράσω ακόμα\... diff --git a/content/articles/04/05_babel.md b/content/articles/04/05_babel.md new file mode 100644 index 0000000..2c2df90 --- /dev/null +++ b/content/articles/04/05_babel.md @@ -0,0 +1,180 @@ ++++ +title = 'Η ελληνική επιλογή του πακέτου babel του LaTeX' +date = '1998-04-01T00:00:00Z' +description = '' +author = 'Απόστολος Συρόπουλος' +issue = ['Magaz 04'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σύλλογος Ελλήνων Φίλων του TeX. 28ης Οκτωβρίου 366, 671 00 Ξάνθη, [apostolo\@obelix.ee.duth.gr](mailto:apostolo@obelix.ee.duth.gr?Subject=Magaz-article).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +--------------------------------------- + +**2. Πώς φτάσαμε στην ελληνική επιλογή?** +----------------------------------------------------------------- + +**3. Η χρήση της ελληνικής επιλογής** +------------------------------------------------------------- + +**4. Τα πακέτα των grtools** +---------------------------------------------------- + +**5. Το βιβλιογραφικό στυλ hellas** +----------------------------------------------------------- + +**6. Το μέλλον** +---------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Το πακέτο babel, του συστήματος προετοιμασίας εγγράφων LaTeX, είναι η πιο σημαντική προσπάθεια στην καθιέρωση ενός μηχανισμού πολυγλωσσικής επεξεργασίας με +αυτό. Το πακέτο babel, το οποίο σχεδιάστηκε από τον Ολλανδό Johannes Braams, δίνει τη δυνατότητα στο χρήστη του LaTeX να γράφει κείμενο σε όλες σχεδόν τις +ευρωπαϊκές γλώσσες, μεταξύ των οποίων τα ελληνικά και τα ρωσικά. Το LaTeX, πνευματικό παιδί του Leslie Lamport, είναι μια φόρμα του TeX, του πασίγνωστου +συστήματος ψηφιακής στοιχειοθεσίας του Donald Knuth. + +Εδώ και δύο, τουλάχιστον, δεκαετίες το TeX είναι εκείνο το σύστημα που χρησιμοποιείται περισσότερο από οποιοδήποτε άλλο για την προετοιμασία επιστημονικών, +κυρίως, κειμένων αλλά και κειμένων όπου η ποιότητα εμφάνισης αποτελεί βασικό ζητούμενο. Με την εμφάνιση της γλώσσας προγραμματισμού εκτυπωτών PostScript της +Adobe, οι φανατικοί φίλοι του TeX βρήκαν τρόπους συνεργασίας των δύο γλωσσών, με αποτέλεσμα τη δημιουργία ενός πανίσχυρου συνδυασμού εργαλείων. Με την εμφάνιση +της έκδοσης 3 του TeX έγινε δυνατή η ταυτόχρονη επεξεργασία κειμένου σε 256 διαφορετικές γλώσσες. Αυτή η ιδιαίτερη δυνατότητα του TeX αποτέλεσε τη βάση για +πολλές προσπάθειες ενσωμάτωσης κάποιας μορφής πολυγλωσσικής επεξεργασίας στο LaTeX, της πιο γνωστής μορφής του TeX. Η πιο ολοκληρωμένη προσπάθεια, η οποία έγινε +αμέσως δημοφιλής, είναι το πακέτο babel. Βέβαια αξίζει να τονισθεί ότι ούτε το TeX, κατά συνέπεια και το babel, επιτρέπουν τη στοιχειοθεσία κειμένων σε γλώσσες +όπως τα αραβικά, εβραϊκά, μογγολικά, κινέζικά, κλπ. Για τέτοιες γλώσσες θα πρέπει κανείς να χρησιμοποιήσει το **Ω** των Γιάννη Χαραλάμπους και John Plaice. + +Ομως τι ακριβώς κάνει πακέτο babel? Φορτώνει τους κανόνες συλλαβισμού της τρέχουσας γλώσσας εργασίας, έτσι ώστε να γίνεται σωστά ο συλλαβισμός των λέξεων. +Επιπλέον, εξασφαλίζει ότι όλες οι λέξεις-κλειδιά, όπως κεφάλαιο, θεώρημα, κτλ, θα εμφανίζονται στην τρέχουσα γλώσσα εργασίας. Τέλος, λαμβάνει υπ\' όψη του τις +διάφορες στοιχειοθετικές ιδιαιτερότητες της τρέχουσας γλώσσας εργασίας. + + +### [2. Πώς φτάσαμε στην ελληνική επιλογή?]{#s2} + +Στις αρχές του 1995 ο συγγραφέας αγόρασε το LaTeX Companion, το μόνο βιβλίο της εποχής που περιέγραφε τα περισσότερα πακέτα ή/και συστήματα που ήταν διαθέσιμα +για χρήση με το LaTeX. Μεταξύ των άλλων το βιβλίο αναφερόταν στην πολύγλωσση επεξεργασία και φυσικά στο πακέτο babel. Προς έκπληξή του διαπίστωσε πως +υποστηρίζονταν γλώσσες όπως τα βασκικά ή τα τουρκικά, ενώ δεν υποστηρίζονταν τα ελληνικά! (Σας θυμίζω ότι το όνομα TeX προέρχεται από την ελληνική ρίζα +**τεχ**\...) Ομως κάθε τι που αφορά το TeX προέρχεται από την αφιλοκερδή συνεισφορά των χρηστών του συστήματος σε όλο τον κόσμο. Φαίνεται λοιπόν ό,τι είτε οι +Ελληνες δεν χρησιμοποιούσαν το TeX, είτε το χρησιμοποιούσαν μόνο για μη-ελληνικά κείμενα. Τα γεγονότα δείξανε ότι η δεύτερη περίπτωση ήταν αυτή που +ανταποκρίνονταν στην αλήθεια. + +Είναι αλήθεια ότι ο Κωστής Δρυλλεράκης αλλά και ο Γιάννης Μοσχοβάκης δημιουργήσανε συστήματα για την επεξεργασία ελληνικού κειμένου, καμία όμως από αυτές τις +προσπάθειες δεν ήταν δυνατό να χρησιμοποιηθεί εύκολα σε εγκαταστάσεις του TeX εκτός Ελλάδος\... Βέβαια αυτό δεν ήταν το πιο σημαντικό τους μειονέκτημα το οποίο +ήταν η μη-δυνατότητα συνεργασίας με την νέα έκδοση του LaTeX: το LaTeX2ε. Αυτό το γεγονός μαζί με τα παραπάνω αποτέλεσαν το έρεισμα για την μετέπειτα δουλειά +στην ελληνική επιλογή του πακέτου babel. + +Αρχικά χρησιμοποιήθηκε μία συλλογή ανομοιογενών γραμματοσειρών, έτσι ώστε να έχει κανείς στη διάθεσή του όλες τις δυνατότητες LaTeX, ενώ υπήρχε πρόνοια μόνο για +μονοτονικό κείμενο. Μετά την θερμή υποδοχή που επιφύλαξαν οι χρήστες στην όλη προσπάθεια, άρχισε και ο αγώνας για την βελτίωση του συστήματος. Το πρώτο +σημαντικό βήμα έγινε με τις γραμματοσειρές του Claudio Beccari, ο οποίος σε συνεργασία με το συγγραφέα πρόσθεσε χαρακτήρες και βελτίωσε κάποια τεχνικά +χαρακτηριστικά αυτών. Η συνέχεια αποτελεί μια προσπάθεια του συγγραφέα με την τεχνική αρωγή του Johannes Braams. + + +### [3. Η χρήση της ελληνικής επιλογής]{#s3} + +Για να μπορέσει κανείς να γράψει ελληνικά χρησιμοποιώντας την ελληνική επιλογή του πακέτου babel θα πρέπει να βάλει την παρακάτω εντολή στον πρόλογο του κώδικά +του την παρακάτω εντολή: + +> \usepackage[greek]{babel} + +Ενώ αν θέλει να γράψει ελληνικά αλλά και π.χ. ιταλικά θα πρέπει να βάλει την εντολή + +> \usepackage[greek,italian]{babel} + +δηλ. οι γλώσσες εργασίας γράφονται με ένα κόμμα μεταξύ των. Όταν οι γλώσσες εργασίας είναι παραπάνω από μία, τότε διαλέγουμε την τρέχουσα γλώσσα εργασίας με την +εντολή + +> \selectlanguage{greek} + +Σημειώστε ότι η τελευταία γλώσσα που γράφουμε ως όρισμα της εντολής `\usepackage`, είναι η γλώσσα που θεωρεί το LaTeX ως γλώσσα εργασίας αμέσως μετά την εντολή +`\begin{document}`. + +Υπάρχουν δύο τρόποι με τους οποίους μπορεί κανείς να γράψει το ελληνικό του κείμενο: + +- είτε γράφοντας ελληνικά χρησιμοποιώντας το αγγλικό αλφάβητο, όπως για παράδειγμα γινόταν και γίνεται με το ηλεκτρονικό ταχυδρομείο, +- είτε γράφοντας απ\' ευθείας ελληνικά iso8859-7. + +Στη δεύτερη περίπτωση θα πρέπει να χρησιμοποιήσουμε το πακέτο `inputenc` με ενεργή την επιλογή `iso-8859-7`, δηλ.: + +> \usepackage[iso-8859-7]{inputenc} + +Στην πρώτη περίπτωση θα πρέπει να γνωρίζουμε την αντιστοιχία που υπάρχει: + +> α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ σ ς τ υ φ χ ψ ω +> a b g d e z h j i k l m n x o p r s c t u f q y w + +Ο τονισμός των γραμμάτων γίνεται βάζοντας το τονικό σύμβολο πριν από το φωνήεν, π.χ., η λέξη νερό θα πρέπει να γραφεί ως `ner'o`. Όμως η ελληνική επιλογή +επιτρέπει τη συγγραφή και πολυτονικού κειμένου. Οι συμβάσεις που αφορούν τη συγγραφή πολυτονικού κειμένου είναι οι εξής: `` "`" `` (βαρεία), `"~"` +(περισπωμένη), `"<"` (δασεία), `">"` (ψιλή) και `"|"` (υπογράμμιση). Αν θέλετε να γράψετε πολυτονικό κείμενο γράφοντας σε `iso8859-7`, θα πρέπει να βάζετε τα +πνεύματα ή τα άλλα τονικά σύμβολα σαν να γράφατε ελληνικά με αγγλικούς χαρακτήρες, π.χ., `<ένας`, κτλ. + +Ένα άλλο χαρακτηριστικό αποτελούν τα διάφορα σύμβολα στίξης, τα οποία είναι τα ίδια με αυτά που χρησιμοποιούνται στην αγγλική γλώσσα. Έτσι το `;` αντιστοιχεί +στην άνω τελεία, το `?` στο ερωτηματικό, κτλ. Τα εισαγωγικά σημειώνονται ως δύο παρενθέσεις: δεξιές ή αριστερές. Για παράδειγμα το σύμβολο `«` παράγεται από τα +σύμβολα `((`. + +Όταν χρησιμοποιούμε την ελληνική επιλογή, τότε αυτόματα αλλάζει ο τρόπος που γίνεται η αρίθμηση σε παραρτήματα, υποσημειώσεις σελίδας-νάνου, κτλ. Σε όλες αυτές +τις περιπτώσεις χρησιμοποιείται το ελληνικό αλφαβητικό σύστημα αρίθμησης, δηλ. α\', β\', γ\', κτλ. Επιπλέον, παρέχονται οι εντολές `\Greeknumeral` και +`\greeknumeral` οι οποίες δέχονται ως όρισμα ένα ακέραιο αριθμό και παράγουν τον αντίστοιχο ελληνικό αλφαβητικό αριθμό σε κεφαλαία και πεζή μορφή αντίστοιχα. +Έτσι για παράδειγμα η εντολή `\greeknumeral{12}` παράγει τον αριθμό `ιβ'`. Ως γνωστό στην ελληνική τυπογραφία η πρώτη λέξη που ακολουθεί μια επικεφαλίδα +γράφεται πιο μέσα όπως στην αλλαγή παραγράφου. Όμως αυτό δεν ισχύει στην αμερικανική τυπογραφία. Έτσι αν θέλετε το κείμενο σας να στοιχειοθετηθεί κατά τον +ελληνικό τρόπο, θα πρέπει να χρησιμοποιήσετε το πακέτο `indentfisrt`, δηλαδή θα πρέπει να βάλετε στον πρόλογο του κώδικα σας την παρακάτω εντολή: + +> \usepackage{indentfirst} + + +### [4. Τα πακέτα των grtools]{#s4} + +Τα πακέτα της σειράς εργαλείων grtools προσφέρουν επιπλέον λειτουργικότητα στην ελληνική επιλογή. Τα πακέτα αυτά είναι: το athnum, το grmath και το grsymb. Το +πρώτο παρέχει την εντολή `\athenianumeral` η οποία λειτουργεί όπως η εντολή `\greeknumeral` και παράγει τον αντίστοιχο αθηναϊκό αριθμό. (Οι αθηναϊκοί αριθμοί +είναι το σύστημα αρίθμησης που χρησιμοποιούνταν στις αρχαίες Αθήνες και το οποίο έμοιαζε με το ρωμαϊκό σύστημα αρίθμησης. Για περισσότερες πληροφορίες ο +ενδιαφερόμενος μπορεί να μελετήσει τον κώδικα του πακέτου, δηλ. το αρχείο `athnum.dtx`.) + +Ως γνωστό, σε κατάσταση μαθηματικού κειμένου υπάρχουν ορισμένες εντολές οι οποίες στοιχειοθετούν σωστά το όνομα διαφόρων συναρτήσεων, όπως του λογαρίθμου (log), +κτλ. Στην ελληνική βιβλιογραφία για αρκετές από αυτές τις συναρτήσεις , χρησιμοποιούμε ελληνικά ονόματα, π.χ., λογ αντί για log, κτλ. Το πακέτο `grmath` αλλάζει +την προκαθορισμένη συμπεριφορά αρκετών εντολών ονομάτων συναρτήσεων, με αποτέλεσμα αυτές να παράγουν το ελληνικό όνομα της συνάρτησης αντί του αγγλικού. Οι +εντολές ονόματα συναρτήσεων που ορίζονται εκ νέου είναι: `\sin`, `\cos`, `\tan`, `\arcsin`, `\arccos`, `\arctan`, `\cot`, `\sec`, `\csc`, `\log`, `\ln`, `\gcd` +και `\lcm`. Σημειώστε ότι η εντολή `\lcm` (ελάχιστο κοινό πολλαπλάσιο) είναι νέα εντολή. Έτσι αν δώσουμε την εντολή +`$\cos \pi=-1$` το στοιχειοθετημένο αποτέλεσμα θα είναι: **συν π = -1**. + +Η ελληνική επιλογή του πακέτου babel χρησιμοποιεί τις γραμματοσειρές του Claudio Beccari οι οποίες εκτός από τα γράμματα της ελληνικής περιέχουν και αρκετά +σύμβολα της ελληνικής γλώσσας όπως για παράδειγμα το σύμβολο για το κόππα (χρησιμοποιείται στην ελληνική αλφαβητική αρίθμηση). Παράλληλα παρέχει και ορισμένα +σύμβολα όπως το επί τοις χιλίοις, το σύμβολο του ευρώ (του νέου νομίσματος της Ευρώπης), κ.ά. Εντολές που στοιχειοθετούν τα τρία σύμβολα που χρησιμοποιούνται +στην ελληνική αλφαβητική αρίθμηση παρέχει η ελληνική επιλογή του πακέτου babel. Οι δε εντολές που παράγουν τα σύμβολα αυτά είναι: `\sampi`, `\qoppa` και +`\stigma`. Αν όμως κάποιος θέλει να χρησιμοποιήσει τα επιπρόσθετα σύμβολα, θα πρέπει να χρησιμοποιεί το πακέτο `grsymb`, το οποίο ορίζει τις εξής εντολές: +`\Digamma`, `\ddigamma`, `\Qoppa`, `\varqoppa`, `\Sampi`, `\vardigamma`, `\Stigma`, `\VarQoppa`, `\euro`, `\permill`. Τέλος θα πρέπει να σημειώσουμε ό,τι τα +διάφορα πακέτα της παρούσας ενότητας θα πρέπει να χρησιμοποιούνται μόνο σε συνδυασμό με την ελληνική επιλογή του πακέτου babel. + + +### [5. Το βιβλιογραφικό στυλ hellas]{#s5} + +Ο μέσος χρήστης του LaTeX ετοιμάζει την βιβλιογραφία του κειμένου του χρησιμοποιώντας το πρόγραμμα BibTeX. Δυστυχώς μέχρι πριν από λίγο καιρό αυτό δεν ήταν +δυνατό, αφού δεν υπήρχε κανένα βιβλιογραφικό στυλ το οποίο να μπορεί να χειριστεί σωστά μεικτές ή μόνο ελληνικές βιβλιογραφικές αναφορές. Το πρόβλημα αυτό έλυσε +η εμφάνιση του βιβλιογραφικού στυλ **hellas**, το οποίο σχεδίασε ο συγγραφέας του παρόντος. + +Η φιλοσοφία σχεδιασμού του στυλ αυτού, το οποίο βασίζεται στο βιβλιογραφικό στυλ **plain**, στηρίζεται στον χωρισμό των βιβλιογραφικών φακέλων σε δύο είδη: +*ελληνικούς* και *μη-ελληνικούς*. Η λειτουργικότητα του στυλ για μη-ελληνικούς φακέλους είναι ίδια με αυτή βιβλιογραφικό στυλ plain, με τη διαφορά ότι οι +διάφορες λέξεις-κλειδιά, όπως **επιμελητής**, κτλ, εμφανίζονται στα ελληνικά, ενώ τα ονόματα, τίτλοι, κτλ, με λατινικούς χαρακτήρες. Τα ονόματα των διαφόρων +μη-ελληνικών βιβλιογραφικών φακέλων, αλλά και των πεδίων είναι τα ίδια με αυτά του βιβλιογραφικού στυλ plain. Όσον αφορά τους ελληνικούς φακέλους θα πρέπει να +πούμε ότι τα ονόματα τους ξεκινάνε με το πρόθεμα `gr-`, π.χ., `gr-article`, κτλ. Επιπλέον, δεν υπάρχουν όλα τα είδη βιβλιογραφικών φακέλων, π.χ., προς το παρόν +τουλάχιστον δεν έχει νόημα βιβλιογραφικός φάκελος για διατριβή **Master** ή για τεχνική αναφορά (**technical report**). Ένα άλλο χαρακτηριστικό του +βιβλιογραφικού στυλ hellas αποτελεί η εισαγωγή ορισμένων νέων πεδίων όπως το `original-title` και το `original-author` τα οποία χρησιμοποιούνται όταν ένα +έγγραφο είναι μεν γραμμένο στα ελληνικά, αποτελεί δε μετάφραση ξένου κειμένου. Στο πρώτο πεδίο σημειώνουμε τον πρωτότυπο τίτλο και στο δεύτερο το όνομα του +συγγραφέα, ενώ το όνομα του μεταφραστή σημειώνεται ως τιμή του πεδίου translator. Ειδικά στην περίπτωση που έχουμε αδημοσίευτο κείμενο, αν ο συγγραφέας είναι +ξένος, τότε ο συγγραφέας και ο τίτλος σημειώνονται ως `foreign-author` και `foreign-title` αντίστοιχα. Αυτό γίνεται επειδή δεν υπάρχει φάκελος με όνομα +`gr-unpublished`. + +Ένα πρόβλημα που δυστυχώς δεν λύνει το βιβλιογραφικό στυλ hellas είναι αυτό της σωστής ταξινόμησης των εγγραφών σύμφωνα με το όνομα των συγγραφέων. Αυτό βέβαια +οφείλεται στο τρόπο με τον οποίο είναι σχεδιασμένο το πρόγραμμα BibTeX. (Ίσως αν χρησιμοποιήσετε μια 8-bit έκδοση ή κάποιος σχεδιάσει μια έκδοση 16-bit τα +προβλήματα εξαφανιστούν.) Έτσι θα πρέπει σε κάθε ελληνική αναφορά να σημειώνουμε και το πεδίο `key` με ανάλογη τιμή. (Για παράδειγμα μια ιδέα μπορεί να είναι να +γράφουμε το όνομα του συγγραφέα με λατινικούς χαρακτήρες, κτλ.) Ένα άλλο πρόβλημα προέρχεται από το σύμβολο `~` το οποίο για το BibTeX σημαίνει κενό διάστημα +χωρίς αλλαγή γραμμής. Λόγω αυτού του προβλήματος το βιβλιογραφικό στυλ hellas, δυστυχώς, δεν μπορεί να χρησιμοποιήσει τις ευκολίες που συνεπάγεται η χρήση του. + +### [6. Το μέλλον]{#s6} + +Η προσπάθεια για την βελτίωση του τρόπου στοιχειοθεσίας ελληνικού κειμένου με το LaTeX δεν τελειώνει εδώ. Ηδη έχει ετοιμασθεί η επόμενη έκδοση της ελληνικής +επιλογής του πακέτου babel στην οποία υπάρχει διαχωρισμός μονοτονικού και πολυτονικού κειμένου. Παράλληλα, γίνεται προσπάθεια από διάφορους για τον σχεδιασμό +νέων γραμματοσειρών. Αξίζει να αναφέρουμε τη δουλειά που γίνεται στο Πανεπιστήμιο Ιωαννίνων υπό την επίβλεψη του Στράτου Πάσχου, αλλά και τις ελληνικές +γραμματοσειρές του Γιάννη Χαραλάμπους για το **Ω**. Τέλος, γίνονται προσπάθειες για την σωστή παραγωγή ευρετηρίου ελληνικού και μεικτού. + diff --git a/content/articles/04/06_skepseis.md b/content/articles/04/06_skepseis.md new file mode 100644 index 0000000..dda89da --- /dev/null +++ b/content/articles/04/06_skepseis.md @@ -0,0 +1,64 @@ ++++ +title = 'Μερικές σκέψεις για το Linux' +date = '1998-04-01T00:00:00Z' +description = '' +author = 'Καραμανώλης Νίκος nikosk@studiofm1.cs.teiher.gr(mailto:nikosk@studiofm1.cs.teiher.gr?subject=Magaz-Article)' +issue = ['Magaz 04'] +issue_weight = 6 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Είναι αναμφισβήτητο γεγονός ότι το Linux είναι ένα πολύ σταθερό λειτουργικό με πολλές (σχεδόν απεριόριστες) δυνατότητες, απίστευτη ευελιξία, μεγάλη ποικιλία +λογισμικού και (το μεγαλύτερο ίσως πλεονέκτημα) είναι δωρεάν. Επειδή πολύ συζήτηση γίνετε τελευταία στην λίστα των Ελλήνων Χρηστών Linux, περί προώθησής του +στην ευρύτερη αγορά, τόσο ιδιωτική, όσο και επαγγελματική θα ήθελα να πω μερικές σκέψεις που περνούν απο το μυαλό μου όταν διαβάζω αυτά τα mail.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θυμάμαι, πολύ προτού αυτό το διαολεμένο πρώην GUI και νύν OS που το ονομά του δεν τολμώ να πώ, όταν έλεγες σε κάποιον, ειδικά στην επαρχία όπου μεγάλωσα, ότι +κάτι ξέρεις απο Η/Υ τις περισσότερες φορές δεν ήξερε για ποιό πράγμα μιλάς. Απο τότε μέχρι σήμερα πολλά έχουν αλλάξει. Σίγουρα βέβαια θα υπήρχαν αλλαγές αλλά +κανείς δεν περίμενε να γινόταν αυτό που συμβαίνει τα τελευταία 3-4 χρόνια. Όλο και περισσότερος κόσμος ασχολείται με τους Η/Υ. Οι αγορές μηχανών αυξάνονται απο +εξάμηνο σε εξάμηνο, και ο Η/Υ μπαίνει ολοένα και σε περισσότερα σπίτια. Σε αυτό, σημαντικό ρόλο έπαιξε η εξέλιξη του προαναφερθέντος OS. Πιό φιλικό (αμα έχεις +τέτοιους φίλους\...), πιό κατανοητό (μα πριν 5 λεπτά δούλευε\...), έκανε τους απλησίαστους, ακαταλαβίστικους \"Ηλεκτρονικούς εγκέφαλους\" μέρος της καθημερινής +ζωής της Ελληνικής οικογένειας.Πόσο όμως απο αυτά που \"νομίζει\" ο πολύς κόσμος είναι;\... Την απάντηση φυσικά την ξέρετε, δεν χρειάζεται να την πω εγώ. Και +εδώ είναι που έρχεται το Linux\... + +Πως όμως θα μπορέσει να πείσει τον απλό χρήστη, τον επαγγελματία, όλους γενικότερα, ότι είναι η λύση; Για το πως θα γίνει αυτό σε σχέση με τους επαγγελματίες +(επιχειρήσεις) έχει αναφερθεί στο περιοδικό \"magaz\" στην διεύθυνση . Τι γίνετε όμως με τους απλούς χρήστες; + +Θα πειστεί ένας απλός χρήστης (όπως είμαι και εγώ) αν όχι να εγκαταλείψει το αγαπημένο του (γκρρρ\...) OS, τουλάχιστον να δοκιμάσει το Linux; Επιτρέψτε μου να +αμφιβάλω. Μπορεί απο αυτά που ακούει στο περιοδικό και στο να του φανεί καλή ιδέα, και το δοκιμάζει. Είναι σίγουρο ότι (επαναλαμβάνω: ο +απλός χρήστης) μόλις δεί-διαβάσει την διαδικασία εγκατάστασης θα απογοητευτεί, τουλάχιστον. Αν δε, τολμήσει να την δοκιμάσει μετά την ολοκλήρωσή της, είμαι +βέβαιος, ότι θα επακολουθήσει ένα μεγαλοπρεπές Fdisk για την διαγραφή της Linux κατάτμησης και επαναφορά του FAT, με την προυπόθεση όμως ότι ξέρει και αυτό να +το κάνει (είπαμε είναι ΑΠΛΟΣ χρήστης). Μερικοί θα αποφασίσουν να κρατήσουν το σύστημα, άλλωστε τόσο κόπο έκαναν να το εγκαταστήσουν. Και βέβαια, όλοι αυτοί θα +θελήσουν κάπποια στιγμή να γράψουν και να διαβάσουν Ελληνικά\... \"Τι;;; δεν έχει Ελληνικά και πρέπει να τα εγκαταστήσω;;;\"\... Φυσιολογική ερώτηση για κάποιον +που έχει καλομάθει απο τα \...μπρρρρ θεέ μου φύλαγε\.... \"Ας είναι, ας τα εγκαταστήσω\... Πού είναι το Setup.exe;;;\" Και άλλη απογοήτευση\... Και πού να δείς +τα δύσκολα θα λένε μερικοί\... + +Μα είναι δυνατόν να πιστεύουν μερκοί ότι θα μπορέσουν να πείσουν αυτούς τους απλούς χρήστες, να χρησιμοποιήσουν το Linux;;; Με ποιό επιχείρημα; Ότι είναι +σταθερό, ή το ότι είναι τσάμπα; Και τα (είπαμε δεν την πίανω στο στόμα μου αυτή τη λέξη) τσάμπα είναι (πρακτικά). Μπορεί να μην είναι σταθερά αλλά τουλάχιστον +είναι εύκολα. Εγκαθιστούνται εύκολα, αυτά και όλα τα προγράμματα σε αυτά βρίσκεις εύκολα πως να κάνεις αυτό που θές και γενικά είναι ότι καλύτερο για έναν +άπειρο (απλό) χρήστη. Ξέρετε δεν έχουν πολλοί την \"τρέλα\" που κουβαλάνε πολλοί απο εμάς. Δεν έχουν την διάθεση όλοι να διαβάζουν 10-20 σελίδες HOWTO, και μετά +άλλες 2-3 οδηγίες εγκατάστασης, και οταν κάτι να μην δουλεύει τελικά μετά από όλα αυτά, να το ψάχνουν λιγάκι. Είναι ανόητο να πιστεύουμε ότι μπορούμε να +πείσουμε ανθρώπους άλλους από αυτούς που θέλουν να μάθουν κάτι παραπάνω και όχι να χρησιμοποιούν τον Η/Υ σαν παιχνιδομηχανή ή σαν μέσο σύνδεσης με το Internet, +ή για την διασκέδασή τους, ότι είναι καλύτερο το Linux επειδή είναι σταθερότερο\... Στο κάτω - κάτω, τι πολύτιμο τρέχουν στον υπολογιστή τους και δεν μπορούν να +ανεχτούν ένα απλό crashακι πότε - πότε. + +Αντίθετα, ξέρετε πόσοι είναι αυτοί, οι απλοί χρήστες που με θεωρούν τρελό που κάθομαι και ασχολούμαι με κάτι άχρηστο, για αυτούς, τόσες ώρες; Και βέβαια δεν το +λένε μόνο για μένα. Όλοι αυτοί βρίσκουν το Linux και γενικότερα το Unix απαράδεκτο. Δεν θα πρέπει να τους αγνοήσουμε, γιατί έχουν δίκιο. Για κάποιον που το μόνο +που θέλει είναι να κάνει την βόλτα του στο Inet είναι υπεραρκετά τα Windows. Γιατί να μπλέξει με την εγκατάσταση, την ρύθμιση, την αναβάθμιση αυτό τον απέραντο +λαβύρινθο των File Systems του Linux; Γιατί να χάνεται κάθε λίγο και στο τέλος να μην ξέρει που βρίσκεται και πού θέλει να πάει; + +Πρέπει λοιπόν να αλλάξουν πολλά στο Linux για να γίνει αποδεκτό από τον πολύ τον κόσμο. Δεν αρκούν (σχετικά) απλοποιημένες διαδικασίες εγκατάστασης, ένα όμορφο +περιβάλλον εργασίας (με πολλές δύσκολες ρυθμίσεις και όχι πλήρη εκμετάλευση των δυνατοτήτων του μηχανήματος\*), θέλει πολύ περισσότερη δουλειά. Αλλά και +οργάνωση. Αλλού έχει η μία distribution κάποια αρχεία, αλλού η άλλη. Κάποιες υποστηρίζουν εύκολες εγκαταστάσεις, άλλες όχι. Καλύτερη βοήθεια, χωρίς αυτή να +είναι πλέον για τους ειδικούς ή να απαιτεί εκ των προτέρων κάποιες γνώσεις. Περισσότερες επαγγελματικές εφαρμογές. Να πειστούν επιτέλους οι εταιρείες που +παράγουν τα πολύ δημοφιλή πακέτα εφαρμογών να βγάλουν και μια έκδοσή τους για Linux (και εμείς θα την αντιγράψουμε\..... εγκαταστήσουμε, εννοώ, αμέσως). + +Έτσι πιστεύω ότι το Linux θα γίνει πιό δημοφιλές και εύχρηστο. Μπορεί δηλαδή να γίνει έτσι ώστε να είναι εύκολο για αυτούς που το θέλουν εύκολο αλλά και δύσκολο +και πολύπλοκο για αυτούς που το προτιμούν έτσι. Σχεδόν όλα αυτά που αναφέρονται παραπάνω υλοποιούνται ήδη. Δεν τα σκέφτηκα εγώ πρώτος. Η διεθνής κοινότητα του +Linux ξέρει πολύ καλά τι να κάνει για να γίνει το Linux το κυρίαρχο σύστημα. Δεν ξέρω πόσα από αυτά είναι εφικτά καθώς το Linux δεν παύει να είναι ένα +Unixοειδές σύστημα. Δεν ξέρω επίσης το πόσο εύκολα θα άφηνε κάποιος τα \.....(διαγράφεται)\.... ειδικότερα εδώ στην Ελλάδα. Εδώ η κυριαρχία των ΜΠΛΙΑΧ είναι +καθολική καθώς η διανομή των προγραμμάτων για αυτά είναι \...σχεδόν ελεύθερη. Αυτό δεν σημαίνει όμως ότι δεν πρέπει να προσπαθήσει κανείς. + +\* Όταν οι περισσότεροι απο τους Servers τρέχουν στα 256 χρώμματα ενώ άλλοι είναι ανύπαρκτοι τότε ποιος ο λόγος α) να βάλουν Linux β) να αγοράσουν καλή +κάρτα\... Μήπως έχει κανείς τίποτα για την Mystique ; diff --git a/content/articles/04/07_mailbox.md b/content/articles/04/07_mailbox.md new file mode 100644 index 0000000..b5568fb --- /dev/null +++ b/content/articles/04/07_mailbox.md @@ -0,0 +1,507 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-04-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 04'] +issue_weight = 7 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Και αυτό το μήνα είχαμε \"ηλεκτρονικά γράμματα\" από αναγνώστες του περιοδικού. Γράμματα με παρατηρήσεις για κάποια λάθη - ελλείψεις του περιοδικού, γράμματα +συμπαράστασης και πρόθεσης βοήθειας για το CD, και τέλος, ως συνήθως, γράμματα με ερωτήσεις. Τα γράμματα για λάθη - ελλείψεις του τεύχους 3, καθώς και αυτά που +αναφέρονται ΜΟΝΟ στο CD, παραλείπονται\... Ας δούμε τι μας ρωτήσατε και τι σας απαντήσαμε\... (Σας απαντήσαμε; αν όχι, ξαναγράψτε. Που θα πάει η σκασμένη η +οργάνωση, θα βρεθεί κάποτε\....)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Linux. Unix shell\...** +------------------------------------------------------ + +**2. Help Linux\... Περί compilation.** +----------------------------------------------------------------- + +**3. Help Linux\... Περί compilation.** +----------------------------------------------------------------- + +**4. Help Linux\... Περί compilation, συνέχεια\...** +------------------------------------------------------------------------------ + +**5. Printing in Linux** +-------------------------------------------------- + +**6. Χώρος στο δίσκο.** +------------------------------------------------- + +**7. Ελληνικά και Netscape\...** +---------------------------------------------------------- + +**8. Ευχαριστούμε\...** +------------------------------------------------- + + +### [1. Linux. Unix shell\...]{#s1} + +Από : [Ανώνυμος](mailto:robotaki@usa.net) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Γεια σας. Θα ήθελα (τι άλλο;;) την βοήθειά σας πάνω σε ένα θέμα που με απασχολεί εδώ και πολύ καιρό, έχω ακούσει για το unix shell, το οποίο θα ήθελα να +αποκτήσω. Θα ήθελα να μου πείτε περισσότερες πληροφορίες πάνω σε αυτό.\ +Ευχαριστώ. + +*Χαίρομαι που μπορώ να βοηθήσω χωρίς να κάνω \*τίποτα\*!!!\ +Το έχεις το UNIX shell, απλά το ξέρεις με άλλο όνομα\...\ +Τα αρχεία:* + + /bin/bash + /bin/tcsh + /bin/csh + /bin/ash + /bin/ksh + +*κι ότι άλλο στο directory /bin τελειώνει σε \`sh\' είναι shells, δηλαδή μικρά προγράμματα, αντίστοιχα του COMMAND.COM στο DOS, που σου δίνουν την δυνατότητα να +\"τρέχεις\" εντολές στο UNIX σύστημά σου και να βλέπεις την έξοδό τους στο τερματικό σου.\ +Βέβαια, στο UNIX (αντίθετα με το DOS που το shell είναι ένα και μοναδικό) υπάρχουν πολλά τέτοια προγράμματα που προσφερουν εκτός από το απλό \"τρέξιμο\" των +εντολών και κάποια δικά του features το καθένα.\ +Για περισσότερα περίμενε λίιιγο ακόμα, μέχρι τον Μάιο που στο Magaz θα γράψω ένα άρθρο με τίτλο: \"Το UNIX Shell\", ok?\ +Χαιρετάω προς το παρόν\...* + + +### [2. Help Linux\... Περί compilation.]{#s2} + +Από : [NIGHTSTALKER](mailto:night@lar.forthnet.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Είμαι ένας τυχερός που ανακάλυψε έγκαιρα τη δύναμη του Linux και σταμάτησε να ασχολείται με σκουπίδια του τύπου WIN 95\...\... + +*Έλα\... ας μην είμαστε υπερβολικοί. Όπως αρέσει σε όσους ασχολούντια με Artificial Intelligence να λένε συνέχεια: \"Κάθε πρόγραμμα έχει ένα σκοπό σε αυτή τη +ζωή.\" Και τα Windows έχουν ένα σκοπό\... να εκπαιδεύουν χρήστες στην χρήση απλών προγραμμάτων, μέχρι αυτοί να μάθουν αρκετά πράγματα για να στήσουν Linux +(χεχε).* + +Έχω το DEBIAN V.1.3.1 με KERNEL 2.0.30 και έχω μερικές ερωτήσεις: Όταν κάνω make για να εγκαταστήσω μερικά utilities για linux που κατεβάζω από το net σχεδόν +πάντα μου βγαίνει το μήνυμα: + + ',needed by xxx.. stop XXXX.c + +*Συγγνώμη που δεν μπορώ να σε βοηθήσω, αλλά οι πληροφορίες που μας έστειλες δεν είναι αρκετές. Και για να γίνω πιο σαφής:* + +1. *Ποια utilities σου βγάζουν αυτό το λάθος.* +2. *Ποιο είναι το ακριβές (ολόκληρο, κι όχι κομμένο) μήνυμα που βλέπεις στην οθόνη σου.* + +*Αν έχεις προβλήματα να σώσεις τα μηνύματα, χρησιμοποίησε την εντολή script(1) πριν κάνεις το compile, που ανοίγει ένα shell, του οποίου \*όλα\* τα μηνύματα +καταγράφονται στο αρχείο \"./typescript\". Τότε κάνε:* + + hades!keramida:~$ script + hades!keramida:~$ make + ... mnvumata scrollarouv edw sav trella ... + hades!keramida:~$ exit # bgaiveis apo to shell tou `script' + +*τότε παίρνεις το αρχείο \"./typescript\", και το στέλνεις mail για να δούμε ακριβώς ποιο είναι το πρόβλημα.* + +εννοείται ότι είμαι στον κατάλογο που έχω κάνει untar το πρόγραμμα και ότι υπάρχει makefile\... έχω το GNU make και δεν ξέρω τι γίνεται\... άλλες φορές όταν +κάνω compile ένα πρόγραμμα σε c με το gcc + + + π.χ.. gcc ***.c -o **** + +μου βγαίνει: UNDEFINED REFERENCE TO \....\ +το πρόγραμμα αυτό έχει και άλλα αρχεία μέσα τύπου \*.O Τι γίνεται;;; Τι φταίει\... Αν μπορείτε απαντήστε. + +*Και πάλι δεν είναι αρκετά όσα μας γράφεις για να καταλάβουμε ακριβώς τι είναι το πρόβλημα, αλλά θα προσπαθήσω να σου δώσω μερικές χρήσιμες συμβουλές που για +εμένα έχουν δουλέψει τα τελευταία 3 χρόνια που ασχολούμαι με Unix και τον τελευταίο 1,5 χρόνο που ασχολούμαι με Linux, μια χαρά.* + +- *Δεν κάνεις ποτέ compile τα προγράμματα με:* + + hades!keramida$ gcc *.c -o kati.exe + + *γιατί μερικά χρειάζονται ειδικά flags στον GCC, άλλα θέλουν βιβλιοθήκες, οπότε πρέπει να γράψεις κάτι σαν:* + + hades!keramida$ gcc *.c -o kati.exe -lm -lz -lrpm /lib/librpm.a + + *κι αυτό είναι σχετικά μικρό command-line. Έχω δει και χειρότερα (ουπς) μεγαλύτερα ήθελα να πω :)))* + +- *Για να εγκαταστήσεις προγράμματα να χρησιμοποιείς \*πάντα\*, \*ΠΑΝΤΑ\* τα Makefiles που έρχονται μαζί με τα προγράμματα. Εμένα στο 99% των εγκαταστάσεων + που έχω κάνει μου δουλεύει πάντα η εξής διαδικασία:* + 1. *Διαβάζω το README.TXT για να δω ό,τι γενικές πληροφορίες θέλει ο προγραμματιστής του πακέτου να διαβάσω. Αυτό είναι σημαντικό και σχεδόν ποτέ δεν έχει + αποβεί άχρηστη ενέργεια, ειδικά όταν στήνω μεγάλα πακέτα (βλ. compilers, βιβλιοθήκες κτλ.)* + + 2. *Διαβάζω το INSTALL.TXT για να δω αν το πρόγραμμα θέλει τίποτα \"περίεργες\" ρυθμίσεις για να στηθεί. Συνήθως, εδώ πέρα γράφει να κάνεις ότι λένε τα + παρακάτω βήματα.* + + 3. *Τρέχω (αν υπάρχει) το script που κάνει το αυτόματο configuration του πακέτου (./configure) με την παράμετρο \--help για να δω αν τίποτα features + (παράμετροι \--enable-something ή μερικές φορές \--with-something, \--without-something) μου αρέσουν σαν defaults ή όχι.* + + hades!keramida$ ./configure --help + + 4. *Τρέχω το script ./configure με τις παραμέτρους που μου άρεσαν.* + + hades!keramida$ ./configure --with-auto --without-ekeivo + + 5. *Και τότε το Makefile είναι έτοιμο να κάνει τα πάντα.* + + hades!keramida$ make + hades!keramida$ make install + +*Μεγάλη και χρονοβόρα διαδικασία, σε σχέση με το απλό ( Start \| Control Panel \| Add/Remove Programs \| Add Program\...) των Windows, αλλά έτσι έχεις και τον +πλήρη έλεγχο του τι θα στηθεί, που θα στηθεί, πως θα το βγάλεις αν θέλεις κάποια στιγμή \... κοκ. πράγματα που {IMHO} μέχρι τώρα μόνο το Unix προσφέρει σε +ικανοποιητικό βαθμό.\ +Τέλος πάντων, άρχισα πάλι να μακρυγορώ και θα σταματήσω εδώ. Ελπίζω να βοήθησα κάπως, τουλάχιστον για τις μελλοντικές εγκαταστάσεις που θα κάνεις.\ +Adios\...*\-- + + +### [3. Help Linux\... Περί compilation.]{#s3} + +Από : [xx](mailto:babylon51@ibm.net) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Καταρχήν συγχαρητήρια για την πολύ καλή δουλειά που κάνετε. + +*Ευχαριστούμε για τα καλά σου λόγια, κι ελπίζουμε σύντομα να μπορείς κι εσύ να βοηθήσεις να κάνουμε ακόμα καλύτερη και πιο πολλή δουλειά :)))* + +\... θα ήθελα τη βοήθεια σας σε μερικά πράγματα.\ +1) Εγκατέστησα το RedHat Linux 5.0 στο δεύτερο σκληρό μου, στον οποίο υπάρχει και ένα partition όπου βρίσκονται τα προγράμματα που κάνω download από το internet +με τα win95. Έχω κατεβάσει τον Communicator για Linux εκεί. Πως θα μπορέσω να δω το partition από linux ώστε να κάνω εγκατάσταση τον Communicator; Και πως +γίνεται η εγκατάσταση του μέσα από X-Windows; + +*Ας πάρουμε τα πράγματα από την αρχή. Τα partitions του δίσκου σου ξέρεις υποθέτω ποια είναι. Επειδή εγώ δεν ξέρω θα υποθέσω ότι το /dev/hda1 είναι το partition +των Windows, και το /dev/hda2 το partition του Linux. Εσύ όταν διαβάζεις το γράμμα, αντικατέστησε τα partitions με τα πραγματικά partitions του δίσκου σου, ok?\ +Στο Unix (άρα και στο Linux) δεν υπάρχουν drive-letters, όπως στα λειτουργικά που βασίζονται στο DOS. Αυτό που κάνει όμως κάθε καλός Unix administrator για να +\`\`δει\'\' ένα partition του είναι να το \`\`κολλήσει\'\' σε κάποιο directory του συστήματος του με την εντολή \`\`mount\'\'. Για να μην ξεχνιόμαστε και για τι +μιλάμε, ας πούμε ότι εσύ θέλεις να κολλήσεις το partition /dev/hda1 στον κατάλογο /windows του Linux σου. Μπορείς να το κάνεις με την εντολή:* + + bash# mount -t vfat /dev/hda1 /windows + +*αφού πρώτα φτιάξεις, βέβαια, τον κατάλογο /windows στο σύστημά σου.* + +2\) Πως μπορώ να ρυθμίσω την κάρτα ήχου μου; Έχω μια Sound Blaster 16 Value.\ +3) Πως κάνω dial up; Ο dialer που βρίσκεται για να τον τρέξω; + +*Για να συνδεθείς υπάρχουν πολλά προγράμματα, αλλά το καλύτερο είναι σαφώς το Xisp, που θα το βρείς στον FTP server του Argea (argeas.argos.hol.gr) στον +κατάλογο /pub/unix\...\ +Ο dialer δεν ξέρω αν υπάρχει, αλλά υπάρχει η επιλογή στο control Pan el του RedHat 5.0 να βάλεις ένα PPP interface. Νομίζω ότι είναι ένα γενικό σύστημα για +\"dial-up\". Δοκίμασέ το, γράψε τις εντυπώσεις σου και τυχόν Tips \'n tricks που θα ανακαλύψεις, και περιμένουμε άρθρο :-)* + +4\) Έχω το cd RedHat Powertools. Πως μπορώ να τα κάνω εγκατάσταση; + +*Δεν έχω RedHat, οπότε δεν μπορώ να σε βοηθήσω, αλλά για να δεις το cdrom, στα RedHat αρκεί συνήθως να βάλεις το δισκάκι στο drive και να κάνεις:* + + bash# mount /mnt/cdrom + +*από τον λογαριασμό του root.*\ +*(Για τα Powertools, βάζεις το CD στο CD-player, το κάνεις mount, διαλέγεις ποια θα εγκαταστήσεις (έχει ένα αρχείο contents) και ξεκινάς την γνωστή διαδικασία, +δηλαδή rpm -i package-name.rpm).* + +5\) Μπορώ να κάνω εγκατάσταση προγράμματα άλλων εκδόσεων Linux; Για παράδειγμα το Star Office είναι για το Open Linux μπορώ να το εγκαταστήσω στο σύστημα μου +αφού έχω το RedHat Linux; + +*Γενικά ναι\... μπορείς.\ +Ειδικά το Star Office, εγώ το έχω στήσει σε Slackware και μου έπαιξε μια χαρά. Πιστεύω ότι και στο RedHat θα σου παίξει αμέσως αν διαβάσεις το INSTALL.TXT που +έχει και κάνεις ότι λέει :)\ +Το StarOffice εγκαθίσταται στο RedHat 5.0 αρκεί να έχει τη libc.5.4.33. Οδηγίες θα βρεις στο [dejanews](http://www.dejanews.com) αν βάλεις να σου βρει άρθρα +σχετικά με StarOffice και RedHat. Εκεί θα βρεις μία σελίδα με κάτι σαν Wahldenn στον τίτλο, και εκεί υπάρχουν αναλυτικές οδηγίες (επαναλαμβάνω ότι χρειάζεσαι +libc.5.4.33 και όχι libc.5.4.38 όπως λέει σ\' αυτήν τη σελίδα).* + +Όσο για το θέμα με το cd καλύτερα να μην περιμένετε βοήθεια ούτε υποστήριξη από κανένα περιοδικό, γιατί για τα περισσότερα περιοδικά δεν υπάρχει τίποτα πέρα από +τα windows 95. + +*Δεν πειράζει\... εμείς δεν κολλάμε. Θα το φτιάξουμε το CD έστω και μόνοι μας. Κι όσο για το τι λειτουργικά υπάρχουν, αναφέρω ενδεικτικά ποια έχουν περάσει από +το ταπεινό μου PC στο σπίτι:* + +- Linux (από την έκδοση 0.99pl7 και μετά) +- FreeBSD 2.0.0 +- MS-DOS (μέχρι την έκδοση 6.22 που το παράτησα για το Linux) +- Windows 3.0, 3.1, 3.11, 95 (κι ευτυχώς όχι NT). +- Minix +- GNU Hurd 0.2 + +*κι όταν βγει το BeOS, θα το στήσω κι αυτό έτσι για πλάκα. Κι όπως έχω πει, σέβομαι μόνο τα λειτουργικά που με αντέχουν για πάνω από μισή ώρα χωρίς να +κολλήσουν. Για την ιστορία, αναφέρω τους χρόνους που έχουν πιάσει τα πιο \"δημοφιλή\" λειτουργικά:* + +- Windows 3.x (περίπου 3 λεπτά) +- Windows 95 (περίπου 5 λεπτά) +- FreeBSD (γύρω στις 4 ώρες) +- Linux (πάνω κάτω 5 ώρες) +- Windows NT (στο πανεπιστήμιο) (1 λεπτό) + +Συγνώμη για τις πολλές ερωτήσεις αλλά δυστυχώς θα υπάρξουν και άλλες. Αν ξέρετε κάποιο βιβλιο για πολύ άσχετους στο Linux πείτε το μου για να το προμηθευτώ και +να μην σας ζαλίζω με τις γελοίες ερωτήσεις μου. + +*Γενικά για UNIX, πολύ καλό είναι το βιβλίο \"The Unix Programming Environment\" του Kernighan. Για Linux, πολύ καλό είναι το \"Linux, Installation and Getting +Started Guide\" του Matt Welsh, που υπάρχει σε όλα τα distributions του Linux στον κατάλογο του LDP (Linux Documentation Project).* + +Με εκτίμηση\ +Θοδωρής Βερτόπουλος + +*Φιλικά,\ +Γιώργος Κεραμίδας* + + +### [4. Help Linux\... Περί compilation, συνέχεια\...]{#s4} + +Από : [NIGHTSTALKER](mailto:night@lar.forthnet.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Ευχαριστώ που μου απάντησες. Για το make άκου: Προσπαθώ να στήσω το john the ripper (passwd cracker για linux). Έχει makefile.. γράφω make και μου βγάζει : + + ', needed by 'default'. Stop.et' + +τι είναι αυτό;;;; + +*Το \`John the Ripper\' είναι λιγάκι δύσκολο να το στήσεις χωρίς να διαβασεις πρώτα τις οδηγίες εγκατάστασής του. Κάποτε που το είχα βάλει δοκιμαστικά στο σπίτι +μου με είχε βασανίσει λίγο. Στείλε μου όμως το συγκεκριμένο .tar.gz που προσπαθείς να εγκαταστήσεις και σου υπόσχομαι να το ψάξω πως στήνεται και να σου στείλω +νεώτερα σύντομα :)* + +Τώρα όταν κάνω GCC σε μερικά utilities μου βγάζει: + + phobia.c:1300 : 'AWK' undeclared (first use this function) + +Αν ξέρεις πές μου\... + +*Αυτό είνα ένα μήνυμα που είναι πολύ χαρακτηριστικό του GCC. Σημαίνει:* + + Παρουσιάστηκε λάθος μεταγλώττισης στο αρχείο `phobia.c' + η γραμμή στην οποία ο GCC κατάλαβε το λάθος είναι η 1300 + +*σε αυτή τη γραμμή χρησιμοοοποιείται (σε κάποια πράξη συνήθως) το όνομα \`AWK\' το οποίο ο GCC μέχρι εκείνη τη στιγμή δεν έχει ξανασυναντήσει και δεν ξέρει ούτε +τον τύπο του, ούτε τι υποτίθεται ότι αποηθκεύεται σε αυτό.\ +Αυτό τις πιο πολλές φορές είναι κάποιο σύμβολο που πρέπει να έχει γίνει πιο πριν \#define σε κάτι που βγάζει νόημα για τον GCC, π.χ. μια σταθερά, ένα macro, +κ.τ.λ.* + +Τώρα θα ήθελα να σε ρωτήσω αν ξέρεις πως μπορώ να κάνω configure το monitor μου, SONY CPD 100SFT 15\" κάτω από τα X για να μπορώ να ανεβαζω ανάλυση 1024X768 85 +HZ. Υπάρχει κανένα utility; + +*Αν έχεις τα XFree86 3.3.2 (ή νεώτερα) απλά τρέξε το πρόγραμμα \`XF86Setup\' που είναι μία έκδοση του παλιού \`xf86config\' με γραφικά, menus, και πολλή καλή +υποστήριξη για τις κάρτες και οθόνες που υποστηρίζουν τα XFree86.* + +Δουλεύω σε 800X600 100hz αλλά αφού μπορεί τόσο το monitor όσο και η κάρτα γραφικών να ανεβάσει 1024X768 γιατί να μην το κάνω; + +*Κάντο μεγάλε, γιατί κι εγώ σε 1024x768 δουλεύω το GIMP σπίτι μου και έχω κατενθουσιαστεί με τα καινούρια μου X-windows :)))* + +thanx anyway\ +Nightstalker + +*Παρακαλώ, τίποτα\ +Γιώργος Κεραμίδας* + + +### [5. Printing in Linux]{#s5} + +Από : [Παπαγρηγορίου Νίκο](mailto:papanikos@usa.net) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hol.gr) + +Γεια σας,\ +Με λένε Νίκο και σχετικά πρόσφατα άρχισα να ασχολούμε με LINUX. Όμως επίσης πρόσφατα έκανα το λάθος να αγοράσω έναν σχετικά καινούριο εκτυπωτή. Τον HP720C.\ +Τελικά δεν μπορούσα να εκτυπώσω στο Linux και διαπίστωσα ότι εκτός του ότι ο driver δεν υπήρχε (RedHat 5.0) κάπου διάβασα ότι οι εκτυπωτές με την ένδειξη στο +κουτί \"for Windows\" εκτυπώνουν μόνο μέσω του \"windows printing system\".\ +Λοιπόν, τί πρέπει να κάνω; Να αλλάξω εκτυπωτή; Να περιμένω μήκως κάποιος φτιάξει τον driver για το Linux; Να τον πετάξω από το παράθυρο;\ +Ευχαριστώ προκαταβολικά,\ +Νίκος Π. + +*Έχω και εγώ το ίδιο πρόβλημα Νίκο. Έχω στείλει σχετικό e-mail στην RedHat και ψάχνω και μόνος μου να βρω κάτι που θα μου λύσει το πρόβλημα\... Είμαι σίγουρος +πως κάτι θα βρεθεί και θα σε ενημερώσω.\ +Παναγιώτης Βρυώνης.* + +*Κάτι βρέθηκε. Για ρίξε μια [ματιά\...](02_zone.html).* + + +### [6. Χώρος στο δίσκο.]{#s6} + +Από : [Γουβαλή Αλκιβιάδη](mailto:alkisg@egnatia.ee.auth.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hol.gr) + +Μια πολύ πολύ απλή ερώτηση: πως βρίσκω πόσο χώρο έχω ελεύθερο στο σκληρό δίσκο;\ +Φιλικά, Άλκης + +*\-\-\--Βλέπε την εντολή df.\ +Παναγιώτης.* + + +### [7. Ελληνικά και Netscape\...]{#s7} + +Από : [Τάσος](mailto:tas07klm@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@auadec.aua.gr) + +Γεια χαρά στο Linux magaz,\ +Μήπως μπορείτε να βοηθήσετε;\ +Χρησιμοποιώ Win3.11 και Netscape 3.0. Με αυτά βλέπω κανονικά τις περισσότερες www σελίδες με ελληνικούς χαρακτήρες (όπως π.χ. την πρώτη σελίδα του www.linux.gr) +εκτός ελαχίστων εξαιρέσεων. Δυστυχώς σ\' αυτές τις εξαιρέσεις περιλαμβάνονται όλες οι σελίδες του magaz μετά την πρώτη. (Κανονικά φαίνονται μόνο οι λέξεις +\"Τεύχος\" μέσα στο παράθυρο επιλογής και η λέξη \"Επιλογή\" στο κουμπί Επιλογή/Selection.). Καμιά αλλαγή στα options του Netscape δεν φαίνεται να λειτουργεί. +Αν αντιγράψω ένα κομμάτι κειμένου από τα μη εμφανιζόμενα μέσα π.χ. στο Notepad, οι ελληνικοί χαρακτήρες εμφανίζονται κανονικά.\ +Μπορεί να γίνει τίποτα;\ +Ευχαριστώ\ +Τάσος + +*Εχω το ίδιο πρόλβημα με Windows NT και Netscape 3.01. Δεν έχω ιδέα γιατί συμβαίνει, αλλά το Netscape σε W95 και Linux μου τα δείχνει κανονικά (όπως και ο +Explorer σε W95). Αν έχει κάποιος καμιά ιδέα, ας την πει. Θα ψάξω και εγώ μήπως βρω από τον HTML κωδικα των σελίδων καμιά διαφορά.* + + +### [8. Ευχαριστούμε\...]{#s8} + +Απάντηση : [Magaz](mailto:magaz@linux.gr) + +Από : [Γιάννη Γιαννακούρα](mailto:ggiannis@vol.forthnet.gr) + +Πολλή καλή προσπάθεια. Μπράβο. + +*Ευχαριστούμε, περιμένουμε και τη δική σου συνεισφορά.* + +Από : [Χρήστο Αθανασόπουλο](mailto:axrst@otenet.gr) + +Παιδιά, συγχαρητήρια για τη δουλειά σας στο περιοδικό. Οσον αφορά το CD ένα θα σας πώ: Θα ήταν το όνειρό μου αν πραγματοποιόταν. Απο τη μεριά μου είμαι +διαθέσιμος για κάθε ταπεινή βοήθεια προς αυτό τον σκοπό.\ +Χρήστος Αθανασόπουλος, υπεύθυνος σπουδών FUTUREKIDS Αμαλιάδας. + +*Ευχαριστούμε. Μακάρι να το καταφέρουμε το CD. Σε μετράμε στους συνεργάτες.* + +Από : [CaptainF](mailto:bytefox@spark.net.gr) + +Γεια σας παιδιά και συγχαρητήρια για την πολύ καλή δουλειά που κάνετε γενικά με το www.linux.gr και ειδικότερα με το magaz. Παίρνω πολύ μεγάλη απόλαυση κάθε +φορά που διαβάζω το περιοδικό σας. Εννοείται ότι μαθαίνω πολλά κάθε φορά μέσα από αυτό γιατί είμαι ένας πολύ καινούριος χρήστης Linux. Η τρίτη μου προσπάθεια +κατά τη διάρκεια του τελευταίου χρόνου να στήσω ένα Linux box όπως το λέτε που να συναγωνίζεται συγκεκριμμένα τα Windows 95 ειδικά στον τομέα της ευχρηστίας και +του \"look and feel\" ήταν και η πιο πετυχημένη. Πριν από μια εβδομάδα έστησα το Red Hat 5.0 και αρχικά το KDE beta 2 και μετά το beta 3. Όλα αυτά μετά από +προσεκτικό διάβασμα των διάφορων άρθρων σας αλλά και της επιστολογραφίας. Είμαι ενθουσιασμένος από το αποτέλεσμα. Το μόνο που δεν έχω στήσει ακόμα είναι τα +Ελληνικά γι αυτό αυτή τη στιγμή σας γράφω μέσα από τα Windows 95. Όλα τα άλλα (κάρτα ήχου, Internet κ.λ.π) δουλεύουν τέλεια και φυσικά συνεχίζω να ψάχνω το +περιβάλλον.\ +Ομολογογώ ότι αφορμή γι αυτό το mail στάθηκε η προσπάθεια μου να κατεβάσω τοπικά και να ξεφυλίσω το magaz Μαρτίου αλλά και τα δύο link της σελίδας δεν βρίσκουν +το directory ftp.linux.gr/pub/magaz. Αυτό συμβαίνει τώρα Σάββατο 21/3 στις 12:30 μεσημέρι.Φυσικά θα συνεχίσω το ξεφύλισμα on-line, απλά το ανέφερα :) + +*Πράγματι ήταν ένα πρόβλημα. Διορθώθηκε μετά τα μηνύματά σας. Αυτή τη στιγμή μπορείτε να κατεβάσετε και όλα τα τεύχη, και μόνο το τέταρτο τεύχος. Διαλέγετε και +παίρνετε :-)* + +Και μιά που σας γράφω θα ήθελα να κάνω δύο ερωτήσεις για το KDE. Δεν ξέρω αν εδώ είναι το σωστό σημείο γιατί δεν τσέκαρα αν δίνετε διαφορετική διεύθυνση e-mail +στην επιστολογραφία του magaz. Ελπίζω να μην υπάρχει πρόβλημα.\ +1) Όταν κάνω minimize ένα παράθυρο αφήνει σκουπίδια στο desktop background, δηλαδή pixels που δεν έχουν ζωγραφιστεί σωστά. Όχι πολλά αλλά σίγουρα φαίνονται. +Παρατήρησα ότι αν από κάτω από το παράθυρο που κάνω minimize υπάρχει άλλο παράθυρο εφαρμογής εκείνο κάνει τον εαυτό του redraw σωστά, μόνο το κομμάτι του +background δεν καταφέρνει να ζωγραφιστεί σωστά. Είναι αυτό γνωστό bug ? Μήπως έχει να κάνει με τα εφφέ της ζωγραφικής των παραθύρων ?\ +2) Πιο σοβαρό αλλά ξεπερνιέται. Καμμιά φορά δείχνει να πεθαίνει ο kfm. Δεν έχω καταλάβει ακριβώς κάτω από ποιες συνθήκες. Το σύμπτωμα είναι το εξής : Σταματάει +το desktop να δέχεται επιλογές από τα μενού κάτω αριστερά καί από όλα τα icons που έχω βάλει μόνος μου στο panel. Πατιούνται αλλά δεν γίνεται τίποτα . Αν τρέξω +ξανά τον kfm (από κονσόλα ας πούμε) το σύστημα επανέρχεται. Μου θυμίζει ανάλογη συμπεριφορά που έχουν τα Windows 95 με τον explorer. Είναι πραγματικό πρόβλημα +αυτό ή μπορώ να κάνω κάτι για να το λύσω μια και καλή ?\ +Αυτά για τώρα. Συγνώμη για το μακροσκελές e-mail μια και καταλαβαίνω ότι ο χρόνος σας είναι πολύ περιορισμένος. Εύχομαι να έχετε τη δύναμη να συνεχίζετε την +πολλή καλή δουλειά που κάνετε. Προς το παρόν απο τη μεριά μου \"πρήζω\" συνεχώς όλους τους φίλους και γνωστούς για το Linux. :)\ +Με αληθινή εκτίμηση Φώτης Καπετανιάς + +*Φώτη θα επανέλθουμε για τις ερωτήσεις αυτές. Συγνώμμη που δεν απαντήσαμε αλλά έπεσε φόρτος\...* + +Από : [Αλέξανδρο Χριστοδουλάκη](mailto:A.HRISTODOULAKIS@telestet.gr) + +Hi σας,\ +είμαι ένας νέος στο Linux (άσχετος από το λειτουρικό, κοινώς) που παρακολουθεί τη λίστα στον Αργέα και το Magaz σιωπηλά μεν, ανελλειπώς δε.\ +Γνώμη μου είναι, όσον αφορά το CD, ότι σημαντικό βήμα θα είναι η δημιουργία του πρότυπου CD (μήτρας όπως αναφέρεται στο άρθρο σας) σε κάποιον server. Έτσι +αφενός θα φανεί ότι υπάρχει θέληση και όρεξη (πιο εύκολα θα βοηθήσουν και οι υπόλοιποι χρήστες), αφετέρου δε, όταν με το καλό προχωρήσουν τα πράγματα, θα +υπάρχει η βάση έτοιμη (που το θεωρώ προυπόθεση για ένα επιτυχημένο ξεκίνημα.\ +Φιλικά\ +Αλέξανδρος + +Υ.Γ.:Συμφωνώ ότι η ιδέα ενός CD σε κάποιο περιοδικό θα φέρει περισσότερους κοντά μας, όμως και με το CD αυτό σε κάποιον server πιστεύω ότι η διαφήμιση και +προώθηση θα είναι τέτοια που αξίζει κάθε προσπάθεια. + +*Φίλε Αλέξανδρε, ούτως ή άλλως, μετά την περίτεχνη άρνηση του Chip, προς αυτή την κατεύθυνση κινούμαστε. Υπάρχει βέβαια το πολύ σοβαρό θέμα, ότι δεν μπορεί ο +καθένας να κατεβάσει ένα αρχείο image 600 Mb, έτσι; Πάντως εμείς θα το φτιάξουμε, και μετά βλέπουμε και το θέμα της διανομής.* + +Από : [Μανώλη Τάβλα](mailto:axon@agn.forthnet.gr) + +Γεια και χαρά!\ +Είμαι ένας 15χρονος μαθητής Λυκείου από τον Άγιο Νικόλαο Κρήτης. Στο σχολείο μου (Ε.Π.Λ.) έχουμε linux. Εκεί το πρωτοείδα και το σύγκρινα με τα windows 95 που +βρίσκονται σε άλλους υπολογιστές παρά δίπλα\... Πολυ καλύτερα φαίνονται \...Snarf! Δυστυχώς έχω windows 95 (OSR2, πάλι καλά\...) αλλά όπου νάναι θα βαλω linux +αν το βρω.\ +Είμαι κατενθουσιασμένος με το περιοδικό. Ωραίες στήλες, καλαίσθητα γραφικά, βοήθεια για τον αρχάριο χρήστη. Όλα πολύ ωραία είναι αν και μπορούν να γίνουν +καλύτερα! Σκέφτομαι να βάλω. + +Αν μπορείτε να βοηθήσετε + +Γεια σας!\ +Εγώ είμαι πάλι\... Λοιπόν επειδή αποφάσισα να κατεβάσω το red hat linux 5 από το ftp του ntua, μπορείτε να μου πείτε τι πρέπει να κατεβάσω από εκεί για να +εγκαταστησω μετά από 2o σκληρό το LINUX ?\ +Φιλικά\ +Μανώλης Τάβλας + +*Φίλε Μανώλη. Ναι, για το RedHat θα σου πούμε. Λόγω Πάσχα είχαμε πρεμούρα να βγει το τεύχος και αμελήσαμε λίγο την αλληλογραφία μας. Από το πρώτο mail βέβαια, +όπως βλέπεις, δεν καταλαβαίνουμε τι ζητάς. Αν δεν σου κάνει κόπο, θα σου ζητούσαμε να περιμένεις λίγο ακόμα\...* + +Από : [Χρήστο Βαρελά](mailto:cvar@math.auth.gr) + +Συνάδελφοι Linux-άδες, φίλοι και φίλες, γεια και χαρά σας!\ +Πραγματικά δεν βρίσκω λόγια για να σας περιγράψω τη χαρά και την έκπληξη που αισθάνθηκα όταν \"σκόνταψα\" στις ιστοσελίδες του περιοδικού σας! Πιστεύω ότι κάτι +τέτοιο χρειαζόταν εδώ και καιρό στο χώρο των Ελλήνων χρηστών του Linux. Εγώ από τη μεριά μου είμαι χρήστης του Linux (τώρα χρησιμοποιώ το RedHat 5.0) εδώ και +δύο περίπου χρόνια και - needless to say - είμαι απόλυτα ικανοποιημένος και συνεχώς μαγεμένος από τη δύναμη, την αξιοπιστία και τα τόσα άλλα εκπληκτικά +χαρακτηριστικά του. Το συστήνω ανεπιφύλακτα σε νέους χρήστες ή σ\' αυτούς που σκέπτονται (ακόμα;) να το εγκαταστήσουν.\ +Όσον αφορά το περιοδικό σας, είμαι προθυμότατος να βοηθήσω με οποιονδήποτε τρόπο μπορώ. Αυτό τον καιρό ασχολούμαι με την εκμάθηση και κατανόηση του Λογικού +Προγραμματισμού με χρήση ProLog (κάτω από Linux βέβαια). Ίσως αργότερα θα μπορούσα να σας στείλω ένα άρθρο-εισαγωγή στο θέμα καθώς και μια περιγραφή του πακέτου +που χρησιμοποιώ\...\ +Keep up the good work!\ +Χρήστος Βαρελάς,\ +Πτυχιούχος (άνεργος) Μαθηματικός,\ +Υποψήφιος Διδάκτωρ Επιστήμης Υ/Η,\ +Αριστοτέλειο Πανεπιστήμιο Θεσσαλονίκης. + +*Ουπς, σου έχουμε απαντήσει; Αν όχι, συγχώρεσέ μας για την καθυστέρηση. Οσον αφορά στην πρόταση για βοήθεια, να σε ενημερώσουμε ότι το περιοδικό είναι ανοιχτό +σε ΚΑΘΕ βοήθεια. Αρκεί το άρθρο να είναι σχετικό με το Linux.\ +Περιμένουμε νέα σου.* + +Από : [Αριστείδη Κοντογεώργη](mailto:kontogar@talos.cc.uch.gr) + +Γεια χαρά,\ +χρησιμοποιώ text browser (lynx) ο οποίος έχει πρόβλημα στο να δει παραπάνω από την πρώτη σελίδα του περιοδικού σας. Βέβαια μπορώ να διαβασω τον html κώδικα και +να δώσω τη διεύθυνση του τεύχους, αλλά ίσως θα ήταν χρήσιμο να γίνει και μια text page στην αρχή.\ +Συγχαρητήρια για την δουλειά σας.\ +Αριστείδης + +*Αριστείδη, χίλια συγνώμμη. Εχεις απόλυτο δίκιο, έπρεπε να το σκεφτούμε νωρίτερα. Λίγη υπομονή όμως, γιατί αυτή την περίοδο είμαστε πολύ πιεσμένοι. Υπάρχουν δύο +λύσεις. Περιμένεις να την φτιάξουμε (ελπίζω στο τεύχος 1- Ιουνίου), ή την φτιάχνεις εσύ και μας την στέλνεις :-)* + +Από : [Λεωνίδα Τζίμη](mailto:gnx@cha.forthnet.gr) + +Μπράβο!!!\ +Περιμένω το GrLinux CD με αγωνία. Ανυπομονώ να δοκιμάσω το Linux. Δεν αγοράζω ακόμα τα 6 CD από Παπασωτηρίου. Θα περιμένω εσάς. Μπράβο, μπράβο, μπράβο\ +Υ.Γ. αλλά μπορεί να αγοράσω και τα CD από τον Παπασωτηρίου αν αργήσετε + +*ΑΝ ΑΡΓΗΣΟΥΜΕ; Ακόμα δεν ξεκινήσαμε. Μην το υπολογίζεις σε λιγότερο από 3 μήνες (και πολύ αισιόδοξος μου φαίνομαι). Επίσης, το CD που λέμε δεν θα μπορείς να το +αγοράσεις, αλλά μόνο να το κατεβάσεις (αρχικά), οπότε αν μιλάς για dial-up, μάλλον ξέχνα το\... Θα πρέπει να περιμένεις να καταδεχτεί ένα περιοδικό να το +παράγει. Οπότε άλλους 3 μήνες. Κάθε βοήθεια όμως για να βγει το CD νωρίτερα, ευπρόσδεκτη (hint, hint)\ +Υ.Γ. Νέα δεδομένα μιλάνε ίσως για δυνατότητα του HELLUG, αν δημιουργηθεί, να μπορεί και να το διανείμει. Τίποτα σίγουρο ακόμη, μόνο ιδέες.* + +Από : [Νίκο Μαυρογιαννόπουλο](mailto:nmav@freemail.gr) + +Γεια, είδα το άρθρο στο magaz για το staroffice. Πολύ καλό αν και τελικώς δεν κατάφερα να βάλω ελληνικά fonts. Εκανα ότι έλεγε (copy τα files , αλλαγη του +pssd.fonts) αλλά δεν κατάφερα να βρω το perl-script που έλεγες για τα afm αρχεία (τι ακριβώς κάνει αυτό;) Έψαξα για .pl αρχεία αλλά τζίφος. Μπορείτε μήπως να +μου πείτε που / ποιο είναι αυτό το perl script?\ +Ευχαριστώ\.... + +*Ουπς, συγνώμμη, αλλά το αρχείο με τα ελληνικά fonts για το StarOffice είχε την ίδια τύχη με το gzipped αρχείο - ΑΡΧΕΙΟ (αυτό σημαίνει αρχείο από το file και +ΑΑΡΧΕΙΟ από το αρχειοθέτηση). Από αυτό το τευχος θα υπάρχει link στο άρθρο που θα τραβαει ένα αρχείο από τον webserver. Το αρχείο αυτό θα έχει μέσα το afm.pl, +το οποίο είναι το perl-script που μετατρέπει τα afm αρχεία των fonts, σε μορφή που να καταλαβαίνει το StarOffice. Θα έχει μέσα επίσης τα ελληνικά του Χαρίτση, +με \"πειραγμένα\" afm αρχεία.. Αν καταφέρεις τίποτα με άλλες ελληνικές γραμματοσειρές, θα θέλαμε να το ξέρουμε.\ +Happy hacking :-)* + +btw. για το ελληνικό distibution είμαι πρόθυμος να βοηθήσω σε ότι μπορώ\... + +*Ένα mail στη λίστα (linux-greek-users\@argeas.argos.hol.gr) θα ήταν ότι πρέπει, μια που απ\' ότι φαίνεται ο συντονισμός φεύγει από το Magaz και πάει στο +HELLUG\...* + +Από : [Σαράντη Πασχάλη](mailto:paskalis@di.uoa.gr) + +Γεια σας,\ +Κατ\' αρχήν συγχαρητήρια για το περιοδικό που βγαίνει. Πολύ καλό. Δύο σχόλια για το ftp downloading. Το URL για ftp για το magaz στην αρχικη σελίδα είναι + + http://ftp.linux/gr/pub/magaz + +και προφανώς δεν δουλεύει.\ +Όμως ούτε directory /pub/magaz υπάρχει στο ftp.linux.gr + +*Ευχαριστούμε, το διορθώσαμε.* + +Από : [Σηφαλακη Μανώλη](mailto:msifa@ariadne-t.gr) + +Θα ήθελα να ενημερώσω ότι το ftp link δεν λειτουργεί, και στον ftp.linux.gr δεν φαίνεται να υπάρχει magaz directory. + +*Τα links, διορθώθηκαν. Το directory δεν υπάρχει, τα downloads, τελικά γίνονται από τον webserver.* + diff --git a/content/articles/05/01_editorial.md b/content/articles/05/01_editorial.md new file mode 100644 index 0000000..7549d8b --- /dev/null +++ b/content/articles/05/01_editorial.md @@ -0,0 +1,39 @@ ++++ +title = 'Editorial' +date = '1998-06-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 05'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αυτό κι αν είναι έκπληξη, ε; Αναγκαστήκαμε να βγάλουμε το 5ο τεύχος τώρα, καθυστερημένο όπως φαίνεται. Λάθος υπολογισμός, κακό timing, όταν ήρθαν τα άρθρα +υπήρχαν πολλές δουλειές κλπ κλπ.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μάλλον το Magaz θα αλλάξει μορφή. Μία σκέψη είναι να μην είναι σταθερά περιοδικό (μήπως και έχουμε καταφέρει να το βγάλουμε ποτέ στην ώρα του;) αλλά να +ανανεώνεται κάθε φορά που έρχεται ένα άρθρο. Αυτό βέβαια ξεφεύγει από τον αρχικό μας σχεδιασμό, αλλά ίσως να είναι ο μόνος τρόπος να επιβιώσει. + +Σε αυτό το τεύχος, έχουμε πολλά άρθρα για τους νέους χρήστες. Είδαμε ότι υπάρχει \"ζήτηση\" και αποφασίσαμε να την ικανοποιήσουμε: Έχουμε λοιπόν, μία παρουσίαση +του SuSE Linux από τον Φώτη Γεωργάτο. Το SuSE Linux είναι μία γερμανική προσπάθεια για ένα Linux το οποίο θα έιναι εύκολο στην εγκατάσταση και ταυτόχρονα +μπροστά στην τεχνολογια. + +Έχουμε και ένα άρθρο για τις ρυθμίσεις του X-ISP, του πολύ καλού προγράμματος του Δημήτρη Μπούρα για dialup σύνδεση με έναν ISP. Θεωρείται, το καλυτερο +πρόγραμμα για εύκολη συνδεση στο Internet, αφήστε δε που είναι και ελληνικό!!! + +Ο Παναγιώτης Βρυώνης, μετά το άρθρο του στο RAM, επιστρέφει και στο Magaz με το γνωστό Linux Zone 2. + +Ο Ευριπίδης Παπακώστας και η Βούλα Σανιδά, ξέκλεψαν λίγο χρόνο από τα της ίδρυσης του Hellug και μας έστειλαν οδηγίες για το IP Masquerading. Πολύ καλό και +χρήσιμο άρθρο\... + +Έχουμε τέλος και το σταθερό πλέον άρθρο από τον φίλο μας το \"γιατρό\", + +Υπάρχει όπως πάντα βέβαια και η [στήλη της αλληλογραφίας](07_mailbox.html), αρκετά περιορισμένη και αυτή, λόγω του χρόνου που λέγαμε στην αρχή, και για άλλους +λόγους που θα διαβάσετε εκεί\... + +Μετά από πολλά παράπονα (δικαιολογημένα όλα), η αρχική σελίδα πλέον είναι εύκολα αναγνώσιμη και από text-browsers (lynx). Συγνώμμη για την καθυστέρηση αυτού, +πιαστήκαμε λίγο αδιάβαστοι. + +Ζητάμε για άλλη μία φορά συγνώμμη για την καθυστέρηση, και ευχόμαστε καλη ανάγνωση\... diff --git a/content/articles/05/02_lz2.md b/content/articles/05/02_lz2.md new file mode 100644 index 0000000..2fef484 --- /dev/null +++ b/content/articles/05/02_lz2.md @@ -0,0 +1,56 @@ ++++ +title = 'Linux Zone' +date = '1998-06-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 05'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το Linux Zone είναι μία στήλη που σκοπό της έχει να παρουσιάζει μερικές από τις εμπειρίες μου στον χώρο του Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Όσοι διαβάσατε το προηγούμενο LZ θα θυμάστε ότι άλλαξα τον εκτυπωτή μου και αντιμετώπισα μερικά \"προβληματάκια\" μέχρι να τον κάνω να δουλέψει\... Τώρα όμως +που ο Deskjet 720C μου τυπώνει μια χαρά (αν και μόνο μαυρόασπρα για την ώρα) ήταν καιρός να κάνω τις απαραίτητες ρυθμίσεις για να τυπώνω και ελληνικά. + +Εδώ είπα για μία ακόμη φορά, \"ευτυχώς που μοιράστηκα τις εμπειρίες μου με τον υπόλοιπο κόσμο και δεν τις κράτησα για τον εαυτό μου\". Ο λόγος είναι απλός. Πριν +από αρκετό καιρό είχα κάτσει και είχα βρει τί χρειάζεται να γίνει για να τυπώνει το ghostscript με ελληνικές γραμματοσειρές. Μάλιστα, με βάση αυτά που έμαθα +πρόσθεσα και εγώ το λιθαράκι μου στο [Hellenic-Linux-HOWTO](http://www.linux.gr/docs/HOWTO), γράφοντας το κεφάλαιο των εκτυπώσεων. Αυτό ήταν πριν από αρκετούς +μήνες. Από τότε, πολλά πράγματα έχουν συμβεί στο κακόμοιρο το μηχάνημά μου περιλαμβανομένου και ενός πλήρους format του δίσκου (αουτς\...) Όλες οι σημειώσεις +μου επι του θέματος είχαν εξαφανιστεί και δεν θυμόμουν και πολλά. Ε, όχι και ΟΛΕΣ. Μία ανάγνωση του HOWTO και το πρόβλημα λύθηκε. + +Το [άρθρο](../04/05_babel.html) του Απόστολου Συρόπουλου στο προηγούμενο τεύχος του magaz μου θύμισε πόσο με είχε ενθουσιάσει η πρώτη μου επαφή με το TeX και το +LaTeX. Δυστυχώς, σοβαρή υποστήριξη για ελληνικά δεν υπήρχε, με αποτέλεσμα μετά από κάποιο διάστημα να απομακρυνθώ από αυτό\... Διαβάζοντας το άρθρο λοιπόν, πήρα +νέο κουράγιο και με λίγο κόπο (ε, θέλει μια μικρή ταλαιπωρία\...) εγκατέστησα τα ελληνικά στο TeTeX που περιέχεται στο RedHat Linux 5.0. Επιτέλους! + +Για όσους δεν είχαν κάποια επαφή με τα TeX/LaTeX, πρόκειται για δύο πακέτα στοιχειοθεσίας. Κάτι αντίστοιχο με έναν επεξεργαστή κειμένου, αλλά διαφορετικό! Η +διαφορά δεν έγκειται στις δυνατότητες (αυτές είναι πραγματικά εντυπωσιακές) αλλά στην επικοινωνία με το πρόγραμμα. Με τα πακέτα αυτά, γράφετε το κείμενό σας σε +έναν από text editor. Στο κείμενο, περιλαμβάνονται και ειδικές \"κωδικές\" λέξεις (για όσους γνωρίζουν, κάπως σαν να γράφαμε σε HTML). Το κείμενο το \"περνάμε\" +από το tex ή το latex και πέρνουμε το αποτέλεσμα σε PostScript μορφή. + +Είναι γεγονός ότι τα δύο αυτά πακέτα απαιτούν περισσότερο χρόνο για την εκμάθησή τους από ένα παραδοσιακό WYSIWYG επεξεργαστή κειμένου. Από ένα σημείο και μετά +όμως δεν θα μπορείτε να κάνετε χωρίς αυτά. Ειδικά αν γράφετε κείμενα με πολλά μαθηματικά. Ξεχάστε τα άπειρα κλικ με το ποντίκι για να γράψετε μία απλή +μαθηματική έκφραση. Στα TeX/LaTeX θα γράφετε κάπως έτσι: `\int_0^x f(y)dy = \sum_{i=1}^n {(x_i)^2}^{2i}` για να πάρετε ΑΨΟΓΑ +εκτυπωμένη την εξίσωση [αυτή](/05/img/latexeq.png)!!! Όποιος έχει προσπαθήσει να γράψει έστω και μία μικρή εργασία μαθηματικών στο Word, είμαι σίγουρος ότι θα +εκτιμήσει αυτή την προσέγγιση. + +Μια και μιλάμε για το TeX, αξίζει νομίζω να αναφέρω ένα βιβλίο που θεωρώ ότι είναι (εκτός από ευαγγέλιο για όλους τους TeX-users) ένα υπόδειγμα συγγραφής +τεχνικών βιβλίων. Γραμμένο από τον \"μεγάλο\" Donald Knuth, το `The TeXbook`, εκδόσεις Addison-Wesley, ISBN 0-201-13447-0 και +0-201-13448-9 (για μαλακό εξώφυλλο), καταφέρνει να κάνει συναρπαστική την ανάγνωση ενός manual με πολύ δύσκολο αντικείμενο. Δεν ξέρω άν κυκλοφορεί στην Ελλάδα, +πιστεύω όμως ότι θα σας το φέρουν άμα το ζητήσετε. + +Αφού \"ξεμπέρδεψα\" με το LaTeX, κατέβασα την Beta4 του KDE και την εγκατέστησα. Βελτιώσεις υπάρχουν πολλές, αλλά όχι εντυπωσιακές. Αυτό που με εντυπωσίασε +είναι δύο προγράμματα, το KLyX (υπάρχει μία συγγένεια με το LaTeX, τα ονόματα δεν είναι τυχαία\...) και το KCalendar. Και τα δύο προγράμματα βρίσκονται στο +ξεκίνημά τους (κυρίως το δεύτερο), αλλά μπορείτε να διακρίνετε ένα εντυπωσιακό μέλλον - μιλάμε για σοβαρά και μεγάλα προγράμματα που λείπουν από τον χώρο του +Open Software. Θα τα βρείτε στο /pub/unstable directory του ftp.kde.org, αλλά και σε όλα τα mirror sites (προτιμήστε το κοντινό μας +. + +Αν σας παραξένεψε ο όρος Open Software (αφού μέχρι τώρα χρησιμοποιούσα τον Free Software) διαβάστε το άρθρο . +Αναφέρεται στην απόφαση της Netscape να δώσει στο κοινό τον source code του Communicator 5.0 (και των μελλονικών εκδόσεων). Είναι σίγουρα μία μεγάλη απόφαση που +θα μας επιρρεάσει όλους όσους ασχολούμαστε με το Linux και το Open Software αλλά και όλο τον κόσμο των υπολογιστών. Απορρώ πώς και δεν έχει παρουσιαστεί στον +σχετικό τύπο (διαβάσατε κανένα σχετικό άρθρο σε κάποιο ελληνικό περιοδικό;) + +Κλείνοντας το άρθρο αυτού του μήνα και μία και αναφέρθηκα σε περιοδικά. Στις 14 Απριλίου πήγα στοn Παπασωτηρίου και ζήτησα το Jinux Journal του Απριλίου. Είχε +τελειώσει! Εγω το αγόρασα όμως από το περίπτερο λίγο παρακάτω!!! Έχουμε αρχίσει να γινόμαστε τοσοι πολλοί; Το ελπίζω! diff --git a/content/articles/05/03_suse.md b/content/articles/05/03_suse.md new file mode 100644 index 0000000..eb34e29 --- /dev/null +++ b/content/articles/05/03_suse.md @@ -0,0 +1,170 @@ ++++ +title = 'Suse Linux 5.2' +date = '1998-06-01T00:00:00Z' +description = '' +author = 'Γεωργάτος Φώτης gef@ceid.upatras.gr(mailto:gef@ceid.upatras.gr?subject=SUSE-LINUX)' +issue = ['Magaz 05'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*\'Εχοντας περάσει από Slackware, RedHat, Caldera OpenLinux κλπ βρήκα μία διανομή που δείχνει μια αυστηρά επαγγελματική εικόνα και με άφησε ικανοποιημένο τόσο +από την σοβαρή επιμέλεια της διανομής όσο και του συνοδευτικού εγχειριδίου.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το Suse ( σούσε, ή σούζι ) Linux έρχεται σε κουτί που περιλαμβάνει 4 CDROM, 1 δισκέτα και το 400 σελίδων εγχειρίδιο. Από αυτά η δισκέτα σας είναι πρακτικά +άχρηστη εάν ο υπολογιστής σας υποστηριζει εκκίνηση από CDROM, το 1 CD είναι για την βασική εγκατάσταση (bootable), άλλα 2 CD με πακέτα σε rpm μορφή, και άλλο +ένα CD με το live filesystem, που θα δείτε παρακάτω που χρησιμεύει. Το εγχειρίδιο είναι πολύ καλογραμμένο και περιεκτικότατο, καθώς θα βοηθήσει έμπειρους και +άπειρους χρήστες να φτάσουν γρήγορα στην λύση του προβλήματός τους. Υποθέτω είναι από τα πλέον περιποιημένα εγχειρίδια που συνοδεύουν λειτουργικά συστήματα. + +**1. Εγκατάσταση** +----------------------------------------- + +**2. Λογισμικό** +--------------------------------------- + +**3. \'Αλλα χαρακτηριστικά του Suse: yast, susewm, sdb** +------------------------------------------------------------------------------- + +**4. Live filesystem** +--------------------------------------------- + +**5. Γιατί Suse και όχι κάτι άλλο;** +----------------------------------------------------------- + +- [5.1 Suse vs Slackware](#ss5.1) +- [5.2 Suse vs RedHat](#ss5.2) +- [5.3 Suse vs OpenLinux Caldera](#ss5.3) + +**6. Επίλογος** +-------------------------------------- + + +### [1. Εγκατάσταση]{#s1} + +Η εγκατάστασή του Suse είναι ιδιαίτερα εύκολη, καθώς μπορεί να επιλέξει κανείς έναν έτοιμο σύνολο πακέτων (preconfigured settings: πχ Base, Standard + Xwindows, +Everything, Network Server, Network Client και πάει λέγοντας). Τυπικά, ο γράφων επιλέγει ένα συνδιασμό από τις έτοιμες εγκαταστάσεις και στην συνέχεια +προσθαφαιρεί πακέτα για να φτάσει σε μία επιθυμητή λύση. Το πόσο εύκολα στήνει πχ κανείς ένα Netware (Compatible) Server είναι χαρακτηριστικό - ενώ σε άλλες +διανομές τυπικά κάνουμε μεταγλώττιση ή εγκατάσταση με binaries με το χέρι. Μετά εγκαθιστά κανείς τα πακέτα και το μόνο που χρειάζεται είναι αλλάξει τα CD (3 cd +που έχουν περίπου 1450 πακέτα rpm). + +Η ανανέωση του λειτουργικού με πρόσθετο λογισμικό (σε rpm) είναι παιχνιδάκι. Επίσης, κάπου πρόσεξα ότι μπορείς να κάνεις αυτόματα ανανέωση (update) το σύστημα, +παίρνοντας τις αλλαγές μέσω του Internet από Γερμανία: Αυτό και εάν σώζει χρόνο! + +Ακόμη, έχει κάποια έτοιμη λογική για να στήσει κανείς firewalls, masquerading, Xterminals, www/ftp servers, nfs server, smb server (windows compatible file +sharing), Netware server και άλλα αντίστοιχα συστήματα. + + +### [2. Λογισμικό]{#s2} + +Το Suse 5.2 περιέχει ενδεικτικά τα εξής:\ +XFree86 3.3.2 (X11R6.3 \"Broadway\"), KDE beta3, qt-1.32, netscape communicator 4.04, gimp 0.99.18, samba 1.9.18p3, apache 1.2.5, cd-roast 0.96, xrpm, sane κλπ. + +Περιέχει αρκετούς (14) Window Managers (θυμάμαι τους: Kde, fvwm2, fvwm95, olwm, afterstep, enlightenment, cde\_sim, ctwm, qvwm ), εάν προσπαθήσετε να τους +στήσετε σε slackware θα χρειαστείτε πάνω από μια μέρα. + +Ανάμεσα στα άλλα είδαμε και τα εξής: + +- povray ( περίφημος 3d renderer), +- xanim ( παίζει mov, fli, multimedia αρχεία γενικά) +- snns (για νευρωνικά δίκτυα), +- simcity (το γνωστό παιχνίδι - τρέχει μόνο σε 8bit χρώμα), +- TeX ( typesetting - στοιχειοθεσία ), +- postgres95 (βάση δεδομένων) + +και demos των Maple V ( μαθηματικά++ ), ac3d (πακέτο για δημιουργία εικόνων με 3d αντικείμενα), Flagship (clipper,dbase superset++), Wordperfect, xess (excel +clone). + +Το Suse περιέχει το **applixware** office suite, δηλαδή σουίτα γραφείου που περιλαμβάνει επεξεργαστή κειμένου, λογιστικά φύλλα εργασίας, επεξεργαστή HTML +σελίδων κλπ. Η έκδοση του applixare που συνοδεύει το Suse Linux 5.2 είναι δοκιμαστική και θα εκτελείται μέχρι τις 30 Ιουνίου του 1998. + +Ενδιαφέρον έχουν και οι εξωμειωτές (Emulators) που ουσιαστικά τους στήνεις και δουλεύουν με την πρώτη: **DOSEMU, Atari ST, C64, C128, VIC20, PET, ZX Spectrum, +Gameboy** κλπ. + + +### [3. \'Αλλα χαρακτηριστικά του Suse: yast, susewm, sdb]{#s3} + +Το **yast** (yet another setup tool, μόνο αυτό δεν είναι) είναι το βασικό εργαλείο με το οποίο κάνουμε ρυθμίσεις στο σύστημα ως διαχειριστές. Με αυτό το +εργαλείο εγκαθίστανται και τα rpm ή tgz πακέτα. Ορίζει εύκολα χρήστες, ομάδες, τρόπο εισόδου στο σύστημα, και μύριες ακόμα λεπτομέρειες που μέχρι τώρα γινόνταν +με το χέρι και μετά από αρκετό διάβασμα. *Μεγάλο σχεδιαστικό πλεονέκτημα έναντι του αντίστοιχου εργαλείου του RedHat, είναι ότι δεν σου απαγορεύει να κάνεις και +με το χέρι επεμβάσεις στα αρχεία ρυθμίσεων του συστήματος στο /etc, αλλά και το ότι ΔΕΝ είναι γραφικό ( ΣΩΣΤΟ - έτσι μπορεί κανείς να ρυθμίσει το σύστημα χωρίς +να σηκώσει γραφικό περιβάλλον ή μέσα από telnet παράθυρο).* Θυμάμαι κάτι ιστορίες, όπου έπρεπε να στήσεις το γραφικό περιβάλλον για τρέξεις κάτι σαν Xyast, αλλά +το γραφικό περιβάλλον ήθελε νέο Xserver που έπρεπε να φέρεις από το Internet, άρα έπρεπε να στήσεις την dialup σύνδεση που ήθελε κάτι σαν Xyast ή κάπως έτσι. Το +yast του Suse Linux 5.2 με την ευκαιρία, είδα ότι υποστηρίζει ρύθμιση των dialup παραμέτρων από εκεί. Επιτέλους! Ήταν ανάγκη δηλαδή να μάθουμε το dip ή τον ppp +δαίμονα για να μπούμε στο Internet; + +Ο **susewm** είναι ένα εργαλειάκι που τρέχει σχεδόν αυτόματα και σκοπός του είναι να φτιάχνει τα menu του γραφικού περιβάλλοντος, ξεχωριστά για κάθε window +manager, ανάλογα με το λογισμικό που βάζουμε στο σύστημα. + +Το **sdb** είναι μια βάση δεδομένων με συχνές ερωτήσεις και απαντήσεις γύρω από το Suse. Είναι κάτι σαν FAQ, αλλά είναι τόσο μεγάλο, που εκ των πραγμάτων έγινε +βάση δεδομένων. + + +### [4. Live filesystem]{#s4} + +Εντυπωσιακό ιδιαίτερα είναι το Live filesystem όπου είναι ένα δισκάκι σε rockridge format (αντίστοιχο του ISO, αλλά για Unix), που περιέχει μία έτοιμη +εγκατάσταση στημένη. Αυτό μπορεί να χρησιμεύσει στις εξής δύο περιπτώσεις: + +1. Να τρέξει κανείς το Linux χωρίς να το έχει εγκαταστήσει στο δίσκο, τρέχοντας το μόνο από το CD και έχοντας το root filesystem σε ramdisk - με πιο απλά (;;;) + λόγια έχει την πληροφορία της ριζικής δομής του Unix υλοποιημένη στην κύρια μνήμη και το υπόλοιπο φορτώνει από το CD. Ίσως εάν δεν το δείτε δεν θα το + καταλάβετε. +2. Να αποφύγει να εγκαταστήσει κανείς όλο το Suse Linux, αλλά να βάλει μια μινιμαλιστική εγκατάσταση στο δίσκο και στη συνέχεια να κάνει \"integrate with live + filesystem\" και να τρέχει τα πιο πολλά πακέτα από το CD. Αρκετά ενδιαφέρουσα περίπτωση, ειδικά εάν υπάρχει σοβαρό πρόβλημα χώρου, ή υπάρχει δεύτερο CDROM + drive στον υπολογιστή. Περιττόν ότι δεσμεύεται έτσι το CDROM drive. + +Λέτε να δούμε σύντομα το Linux να τρέχει από CD και να μπαίνουν μόνο τα updates στο δίσκο; ΑΥΤΟ πάει να πει έξυπνα σχεδιασμένο λειτουργικό. + + +### [5. Γιατί Suse και όχι κάτι άλλο;]{#s5} + +### [5.1 Suse vs Slackware]{#ss5.1} + +Μπορεί το slackware να τα ξεκίνησε όλα, όμως δεν παύει να είναι δύσχρηστο για έναν αρχάριο στην φιλοσοφία του Unix. To Suse είναι πολύ εύχρηστο και εύκολα +πετυχαίνει κανείς αυτό που θέλει, είτε θέλει να στήσει έναν εξυπηρέτη είτε θέλει να φτιάξει ένα σύστημα για προσωπική χρήση. Χαρακτηριστικό είναι ότι έχω δει σε +ένα μήνα όλα τα πακέτα που είχα δουλέψει μέχρι τώρα, και πάνω από 100 νέα χωρίς να χρειαστεί ούτε ένα compile (εύγε rpm). Ο μόνος λόγος για να επιλέξει κανείς +το Slackware είναι γιατί είναι φανατικός Unixάς, δεν μπορεί και δεν χρειάζεται την μεγάλη ευχρηστία του γραφικού περιβάλλοντος ή απλά βαριέται να κοιτάξει το +Suse. + +### [5.2 Suse vs RedHat]{#ss5.2} + +Το RedHat είναι και αυτό αρκετά εύχρηστο, αλλά πολλές φορές οι επιλογές που έχουν κάνει οι σχεδιαστές της διανομής αυτής είναι άβολες για κάποιον που θέλει τον +πλήρη έλεγχο του συστήματός του. Το Suse παρέχει το εργαλείο yast για τον έλεγχο του συστήματος αλλά αντίθετα με το RedHat δεν σου απαγορεύει την επιλογή +παραμέτρων με το χέρι (με το vi πχ). + +Εκτός αυτού το RedHat μάς έρχεται από την Αμερική ενώ το Suse από την Γερμανία με άμεσες συνέπειες ως προς το Internationalization ( διεθνοποίηση) του +συστήματος: Το Suse υποστηρίζει ορισμό γλώσσας κατά χρήστη (πολύ βασικό για ένα σύστημα στην Ελλάδα που θα έχει ταυτόχρονα Ελληνόφωνους, \'Αγγλόφωνους, +Γερμανόφωνους κλπ). Τα πακέτα του αναμένεται να είναι σχεδόν όλα 8bit clean (βλέπε σχετικά το Hellenic-HOWTO), ενώ στο RedHat ισχύει περισσότερο η λογική: Δεν +σου δουλεύει; Έχεις τον πηγαίο κώδικα, φτιάξτο. + +Πλεονέκτημα υπέρ του RedHat είναι ότι είναι ΌΛΟ GPLed (General Public License), ενώ το Suse όχι ( όχι όλο - γύρω στο 95%, πιο συγκεκριμένα το yast αντιγράφεται +υπό όρους, και καμιά δεκαριά ακόμα εφαρμογές υποφέρουν από τις μη ελεύθερες άδειες χρήσης τους με πιο σημαντική την σουίτα γραφείου applixware). + +### [5.3 Suse vs OpenLinux Caldera]{#ss5.3} + +Απλά το OpenLinux της Caldera μου φάνηκε ότι θυσίασε την κομψότητα του Linux ως περιβάλλοντος εργασίας για να δώσει σε κάποιο (μάλλον επαγγελματικό) κόσμο ένα +εύχρηστο περιβάλλον. Το Suse μου φάνηκε πιο καλόσχεδιασμένο σε αυτά τα σημεία, και ειδικότερα οι επιλογές των Γερμανών σχεδιαστών του Suse εμένα μου φαίνονται +πιο ορθολογιστικές σε σχέση με αυτές του Caldera (βέβαια από ένα σημείο και μετά είναι θέμα προσωπικών προτιμήσεων). + + +### [6. Επίλογος]{#s6} + +Εν κατακλείδι, το Suse είναι ένας καλός υποψήφιος για το περιβάλλον εργασίας κάποιου τελικού χρήστη ή μία εγκατάσταση σε επαγγελματικό χώρο, αλλά και για το +επερχόμενο δωρεάν CD (Ελληνικό Linux) που θα φτιάξει η ελληνική Linux κοινότητα. Προτείνω σε όλους τους έλληνες χρήστες να το δοκιμάσουν γιατί έτσι θα βοηθήσουν +στην επιλογή. Είναι εξαιρετικά φιλικό προς τον χρόνο του διαχειριστή του συστήματος, καθώς δεν τον υποχρεώνει σε δραστηριότητες που τον αποσπούν από την βασική +εργασία του. + +Τι δεν μας άρεσε: Το γεγονός ότι ξαφνικά εκεί που πετάγεται ένα μύνημα, το διαβάζεις και διαπιστώνεις ότι είναι γερμανικά. Ειδικά η μανία του KDM να έχει ερήμην +επιλογή τα γερμανικά μας έχει \* τα \*. Τουλάχιστον βελτίωσα τα γερμανικά μου. Σημαντικό μειονέκτημα είναι και το ότι αυτή την στιγμή δεν είναι μελετημένα τα +τυχόν προβλήματα με τα ελληνικά, κάτι που μάλλον θα απασχολήσει και τον γράφοντα του άρθρου σύντομα, για να δωθούν έτοιμες λύσεις. + +ΥΓ: Μιας και δεν πληρώνομαι για να παρέχω ή να προωθώ το Suse Linux, θα παρακαλούσα να μην ζητήσετε τεχνική υποστήριξη κατ\' ιδίαν, αλλά μόνο μέσα από την +λίστα. Εάν υπάρχει η διαθεσιμότητα για απάντηση στην ερώτηση θα το διαπιστώσετε μόνοι σας. Επίσης, το παρόν άρθρο εκφράζει κατ\' ανάγκην μόνο την γνώμη του +συγγραφέα του, οπότε ας μην αρχίσουν οι αντιδικίες για το ποια διανομή είναι καλύτερη. + +Το Suse στοιχίζει περίπου 13.000 και θα το βρείτε στην Ελλάδα, στην εταιρία STEP (Πειραιάς, +30 14 18 12 39), στην εταιρία YEP (Θεσσαλονίκη, +30 31 42 45 12) +και στο τεχνικό βιβλιοπωλείο [Παπασωτηρίου](http://www.papasotiriou.gr) (Αθήνα, Πάτρα, Θεσσαλονίκη). + +Δείτε σχετικά: και , + diff --git a/content/articles/05/04_giatros.md b/content/articles/05/04_giatros.md new file mode 100644 index 0000000..e6da0a3 --- /dev/null +++ b/content/articles/05/04_giatros.md @@ -0,0 +1,41 @@ ++++ +title = 'Στρατολογία' +date = '1998-06-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας' +issue = ['Magaz 05'] +issue_weight = 4 ++++ +**ΠΡΟΠΑΓΑΝΔΙΣΤΙΚΟ ΥΛΙΚΟ** + +**Η ΔΙΑΔΙΚΑΣΙΑ ΙΔΡΥΣΗΣ ΤΟΥ HELLUG (Ενωση Χρηστών και Φίλων Linux Ελλάδος) ΞΕΚΙΝΗΣΕ.** + +Η **ΕΕΕΑ** διέθεσε ένα από τα άσπρα ιδιωτικά της αεροπλάνα στον ΙΕΡΟ ΣΚΟΠΟ:\ +Την στρατολόγηση όλων των απανταχού ανά την Ελλάδα Linuxαδων. + +Σε περίπτωση που δεν έχουμε στρατολογήσει ακόμα κάποιον, μπορεί να προσφερθεί εθελοντικά μόνος του. + +Ο σύλλογος αυτός θα αποτελεί την επίσημη φωνή και δραστηριοποίηση των μέχρι τώρα διεσπαρμένων ελλήνων χρηστών Linux. Θα σας κάνει ανθρώπους! Θα σας φτιάξει +ελληνικά! Θα σας φτιάξει distributions! Θα έχει παρουσία σε εκθέσεις! Θα δίνει λύσεις! Θα προωθήσει το Linux όπου μπορεί! Θα κάνει ημερίδες, εκδηλώσεις, +σεμινάρια! Θα σας φτιάξουμε ποτάμια! + +Οσοι μέχρι τώρα δεν το ξέρατε διαβάστε το μέχρι τώρα [καταστατικό του συλλόγου](http://linux.metro.gr/grlinux/060598a.html) (ακόμα δεν είναι οριστικό). + +**ΜΗΝ ΤΟΛΜΗΣΕΙ ΚΑΝΕΙΣ ΟΤΑΝ ΙΔΡΥΘΕΙ Ο ΣΥΛΛΟΓΟΣ ΚΑΙ ΔΕΝ ΓΙΝΕΙ ΜΕΛΟΣ** + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ ![](/05/img/kala2.jpg) + ![](/05/img/kala1.jpg) + + *Αποβιβαση Στελεχους Νο 1* *Αποβιβαση Στελεχους Νο 2* + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Στις παραπάνω φωτό, ο Γιατρός και η Μεξικάνα Βοηθός Voulariba αποβιβάζονται κάπου έξω από τα Καλάβρυτα, όπου χιλιάδες πιστών περιμένουν ανυπόμονα να +στρατολογηθούν στο HELLUG. Η τουρνέ θα συνεχιστεί σε όλα τα μήκη και τα πλάτη της Ελλάδας. + +Μικροί έντρομοι χρήστες windows θα φτάσουμε και στα δικά σας μέρη. Όπου και να πάτε. Είναι πλέον θέμα χρόνου. + +Με αγωνιστικούς χαιρετισμούς\ +ΕΕΕΑ. diff --git a/content/articles/05/05_ipmasq.md b/content/articles/05/05_ipmasq.md new file mode 100644 index 0000000..74a3ab3 --- /dev/null +++ b/content/articles/05/05_ipmasq.md @@ -0,0 +1,119 @@ ++++ +title = 'IP Masquerading' +date = '1998-06-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας' +issue = ['Magaz 05'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Είχαμε την παρακάτω απορία. Διαβάσαμε ένα παλιό Linux Journal, ρωτήσαμε και ένα δύο φίλους και την λύσαμε* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +- Εχω μόνο ένα account/connection (είτε dialup, είτε permanent) σε κάποιον Internet provider. +- Εχω πάνω από ένα PCs και θέλω όλα να έχουν πρόσβαση στο Internet (ξαδέρφια, συνάδελφοι, το αφεντικό). +- Θέλω επίσης, είτε επειδή δεν μου δίνουν τόσα legal IPs, είτε γιατί θέλω αυξημένο security τα PCs αυτά να έχουν dummy IPs (π.χ 10.0.0.x). + +**Τι χρειάζομαι:** + +- Ενα Linux Box.με kernel κάπως πρόσφατο = 2.0.30 μας κάνει σίγουρα.. +- Μια κάρτα δικτύου προς το εσωτερικό μου δίκτυο και άρα έστω το IP της 10.0.0.1. +- Σε περίπτωση dialup connection, ένα modem. IP θα πάρω δυναμικά (έστω ότι η σύνδεση είναι dynamic IP) και φυσικά να ξέρω να συνδέομαι με τον provider μέσω + Linux. +- Σε περίπτωση permanent connection, μια κάρτα δικτύου προς το εξωτερικό υποδίκτυο (που πάει στον router) και άρα με ένα legal IP που μου δίνει ο provider. + Εστω 195.175.200.1 το IP αυτό. + +**Τι κάνω:** + +Για nameserver στο linux (αν δεν το\'χουμε λυσει αυτο το θεμα αλλοιως) βαζουμε του provider.\ +π.χ. το /etc/resolv.conf μας ειναι\ +search nini.gr\ +nameserver 127.0.0.1 (εμεις οι ιδιοι)\ +nameserver 195.170.0.2 (η ΟΤΕΝΕΤ). + +- Για default gateway πρέπει να έχουμε το internet gateway (ειτε modem ειτε η δευτερη καρτα δικτυου μας). Θα μπορούσαμε και χειροκίνητα π.χ. για την δεύτερη + κάρτα να δώσουμε:\ + route add default eth1 (eth0=1η καρτα, eth1=2η καρτα).\ +- Στην περιπτωση του dialup connection ο τροπος συνδεσης σας, λογικα θετει ως default gateway to ppp0. +- Μαλλον τα default options που έχει ο precompiled kernel μας κάνουν, αλλά όπως και να\'χει αυτά θα χρειαστείτε (αν όχι όλα, να το θέσουμε έτσι: εμάς με αυτά + δουλεύει άψογα):\ + \ + Loadable Module Support\ + Loadable module support = YES\ + Version Information on all symbols = YES\ + Kernel demon support = NO (αυτό παίζεται και αν το θέλετε)\ + \ + \ + Networking Options\ + Network Firewalls = YES\ + Network Aliasing = YES\ + TCP/IP Networking = YES\ + IP: forwarding = YES\ + IP: multicastiong = YES\ + IP: syn cookies = YES\ + IP: rst cookies = YES\ + IP: firewalling = YES\ + IP : packet logging = YES\ + IP : masq = YES\ + \ + Protocol Specific masq modules\ + IP: ipautofw masq = YES\ + IP: ICMP masq = YES\ + IP: transparent proxy support = YES\ + IP: always defrag = YES\ + IP : accounting = YES\ + IP : optimize as router = YES\ + \ + +**ΟΚ. Τώρα τι κάνω:** + +Αν είναι να το ξεκινήσω χειροκίνητα, γράφω τα εξής: + +- ipfwadm -F -p deny (δηλαδή δεν πρόκειται να προωθούμε πακέτα πλεόν με διαφορετικές διευθύνσεις δικτύων από αυτές που έχει το μηχάνημά μας) +- ipfwadm -F -a m -S 10.0.0.0/0 -D 0.0.0.0/0 (εδώ τι λέμε: Θα κάνω modification στα forwarding rules που μέχρι τώρα όρισα, δηλάδη μόνο την παραπάνω εντολή και + θα επιτρέψω το forwarding πακέτων από το εσωτερικό μου υποδίκτυο 10.0.0.0 και για όλα τα 255 IPs 10.0.0.1 - 10.0.0.255 προς οπουδήποτε θέλουν να πάνε. + Επειδή δεν έχω πάνω από δυο κάρτες δεν θέλω τιποτα άλλο) + +Αν θελω το κανω και scriptακι να ξεκινάει αυτοματα: + + #!/bin/sh + PATH=/usr/local/bin; export PATH + # Αυτο το θέλω γιατι εκει ειναι το δικό μου ipfwadm. + #Εσεις κάντε whereis ipfwadm και βάλτε το δικο σας + ipfwadm -F -p deny + ipfwadm -F -a m -S 10.0.0.0/0 -D 0.0.0.0/0 + +Το σώζω σαν π.χ. /etc/rc.d/rc.masq\_rules (αντε και chmod 755 /etc/rc.d/rc.masq\_rules) + +και μετά παω π.χ. στο /etc/rc.d/rc.local και στο τέλος του προσθέτω και: + +/etc/rc.d/rc.masq\_rules + +**Στα εσωτερικά PCs, τι κάνω εκεί;** + +Εστω windows 95 PCs. Δινω IP του τύπου 10.0.0.x (2\<=x\<=254). Για DNS και δίνω το DNS μας (αν το Linux εκτελεί χρέη DNS δώστε αυτό, αλλοιώς δώστε του provider +σας.). Στο Gateway δίνω 10.0.0.1 (να φέυγουν τα πακέτα μέσω του Linux). + +Αρχικά είσαστε έτοιμοι (αν είσαστε με dialup μένει να συνδεθείτε μέσω Linux όπως κάνατε πάντα) και τα PCs μπορούν επίσης να βλέπουν Internet παράλληλα με εσας. +Εντυπωσιακο, πρακτικο, λειτουργικο, κομψο και γρηγορο. Τέλος. + +**Όμως, αυτό λύνει το Internet Browser κομμάτι κλπ. Τι γίνεται με περιπτώσεις όπως το ftp?** + +Καλή ερώτηση , την περιμέναμε. Μέχρι τώρα δεν είναι αναγκαστικό να μπορούν και τα PCs να κάνουν ftp προς τον έξω κόσμο με επιτυχία. Από το Linux, δώστε + + insmod ip_masq_ftp (για ftp) + insmod ip_masq_raudio (για να ακούν και τα PCs real audio) + insmod ip_mas_irc (για να έχετε και το IRC σας, θα πέσει φωτιά να μας κάψει!) + +Για πιο σύνθετα προβλήματα, όπως να περνάει ICQ, CUSEEME κλπ. δεν υπάρχουν έτοιμα modules (τουλάχιστον όταν εμείς κοιτάγαμε αυτο το θέμα) και θα καταφύγετε στην +χρήση της εντολής ipautofw (που κάναμε πιο πάνω include στον kernel μας). Μονο που επειδή θέλει settings\...άλλη φορά. + +Το παραπανω ειναι πολυ γενικο και χοντροκομμενο. Finetunnings μπορουν να γινουν (και μερικες φορες πρεπει) στην περιπτωση που θελουμε να κανουμε forwarding μονο +σε μερος του δικτυου μας η σε συγκεκριμενα IPs, εχουμε πανω απο δυο καρτες δικτυου, θελουμε τα εσωτερικα PCs να ειναι προσπελασιμα απο τους εξω (γιατι; γιατι; +αφου ειναι επικινδυνο) κλπ. Δεν θα ασχοληθουμε, να τα βρειτε μονοι σας, αλλωστε ουτε εμεις τα ξερουμε σε μεγαλο βαθος :-) + +Επισης αν δε δουλεψει, μαλλον κατι ξεχασαμε έξω. Πειτε μας να το συμπεριλαβουμε. + +Τυφλοσουρτι για mail server, DNS server κλπ ισως ακολουθησει\... diff --git a/content/articles/05/06_xisp.md b/content/articles/05/06_xisp.md new file mode 100644 index 0000000..789c761 --- /dev/null +++ b/content/articles/05/06_xisp.md @@ -0,0 +1,53 @@ ++++ +title = 'Οδηγίες για το XISP' +date = '1998-06-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 05'] +issue_weight = 6 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Οι οδηγίες που ακολουθούν προϋποθέτουν ότι έχετε συνδέσει το modem, και λειτουργεί. Απαραίτητη είναι επίσης η υποστήριξη PPP από το λειτουργικό σύστημα, καθώς +και το πρωτόκολλο TCP/IP. Επίσης θεωρούμε ότι έχει γίνει σωστά compiled το XISP, και δεν ασχολούμαστε καθόλου με αυτό. Ασχολούμαστε μόνο με τις ρυθμίσεις που +χρειάζονται.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +![](/05/img/xisp1.png) + +Από την κεντρική οθόνη του X-ISP επιλέγετε Options - \> ISP Selection. Πατάτε το κουμπί Add και δίνετε ένα όνομα. Έτσι μπορείτε να προσθέσετε ISPs ή αλλιώς, +συνδέσεις.\ +Συμπληρώνετε τα πεδία αριθμού τηλεφώνου (Phone No(s)), κωδικού χρήστη (Account name) και κωδικού πρόσβασης (Password) με αυτά που σας δόθηκαν από τον ISP. Ως +πρωτόκολλο πιστοποίησης (Authentication protocol) επιλέξτε αυτό που σας είπαν από τον ISP που έχετε σύνδεση. + +![](/05/img/xisp2.png) + +Πατήστε Ο.Κ. Από την κεντρική οθόνη όπου επιστρέψατε, επιλέξτε Options -\> Dialing and login. Στην επιλογή χειροκίνητης σύνδεσης (Manual login) επιλέξτε το Ναι +ή Όχι (Yes ή No) ανάλογα με τον ISP σας. Αν επιλέξετε Ναι, μπορείτε να \"αυτοματοποιήσετε\" αρκετά τη σύνδεση, βάζοντας τον υπολογιστή σας να κάνει όλη τη +δουλειά, χρησιμοποιώντας τα πεδία Expect και Send για να γράψετε τα στοιχεία που στέλνει και περιμένει ο ISP από εσάς. Αν πάλι επιλέξετε Όχι, πάει να πει ότι η +σύνδεσή σας είναι ήδη αυτοματοποιημένη -)\ +Στο ISP server will call back, νομίζω ότι είναι ασφαλές να βάλετε όχι, αφού δεν ξέρω κανέναν server στην Ελλάδα που να το υποστηρίζει. + +![](/05/img/xisp3.png) + +Στην επιλογη Options -\> Communication options, βάζετε ρυθμίσεις σχετικές με το modem σας. Αν δεν ξέρετε τι να γράψετε, δώστε προσοχή τουλαχιστον στα Device, +init και Baud rate. + +![](/05/img/xisp4.png) + +Τέλος, επιλέγετε Options -\> TCP/IP Options, και συμπληρώνετε τα πεδία όπως σας είπαν πάλι από τον provider με τον οποίο έχετε σύνδεση. Αρκετά συνηθισμένες +είναι οι ακόλουθες ρυθμίσεις: + +![](/05/img/xisp5.png) + + Dynamic local address: Yes + Dynamic remote address: Yes + Add default route: Yes + Support ip-up/ip-down: Yes + Primary DNS Server: χχχ.χχχ.χχχ.χχχ + Secondary DNS Server: ΥΥΥ.ΥΥΥ.ΥΥΥ.ΥΥΥ + +Πατώντας το Ο.Κ. επιστρέφετε στην κεντρική οθόνη από την οποία μπορείτε να συνδεθείτε με το κουμπί Connect. + +Στο επόμενο τεύχος, θα προσπαθήσουμε να έχουμε \"ειδικές\" ρυθμίσεις, για κάθε έναν από τους γνωστούς providers. diff --git a/content/articles/05/07_mailbox.md b/content/articles/05/07_mailbox.md new file mode 100644 index 0000000..c88da9c --- /dev/null +++ b/content/articles/05/07_mailbox.md @@ -0,0 +1,244 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-06-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 05'] +issue_weight = 7 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Από αυτό το τεύχος, αλλάζει η τακτική της αλληλογραφίας. Δεν θα δημοσιεύονται όλα τα γράμματα. Θα δημοσιεύονται μόνο τα γράμματα που απαντήθηκαν, και η ερώτησή +τους (και η απάντηση προφανώς) μπορέί να ενδιαφέρουν και άλλους -) Αυτό γίνεται για να λυθεί το πρόβλημα χρόνου που υπάρχει (η μεταγραφή των e-mail σε ελληνικά, +καθώς και η εύρεση των e-mails μέσα από το χαμό των mailboxes είναι αρκετά χρονοβόρες διαδικασίες). Ζητάμε συγνώμμη από όσους δεν απαντήσαμε. Είτε δεν ξέραμε +την απάντηση (ε, μόνο guru που δεν θεωρούμαστε!!!), ή δεν ήμασταν σίγουροι και ήταν πολύ σοβαρό το θέμα (ο φίλος με το rm -r θα καταλάβει για τι θέμα μιλάμε), ή +τέλος, δέν είχαμε χρόνο. Προσπαθούμε πάντως να μην σας αφήνουμε παραπονεμένους -)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Cyrix και RedHat 5.0** +----------------------------------------------------- + +**2. Ελληνικοί χαρακτήρες** +----------------------------------------------------- + +**3. Απορία - προγράμματα** +----------------------------------------------------- + +**4. Πρόβλημα - X11 και S3** +------------------------------------------------------ + +**5. Linux και Fat32** +------------------------------------------------ + +**6. Δεν μπορώ να κάνω RCP** +------------------------------------------------------ + +**7. Loadlin** +---------------------------------------- + +**8. AMD K6 και Linux** +------------------------------------------------- + + +### [1. Cyrix και RedHat 5.0]{#s1} + +Από : [Ανώνυμος](mailto:vagelist@usa.net) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Η ερώτηση που έχω να κάνω,ίσως σας φανεί χαζή!  + +*Καμία ερώτηση δεν είναι χαζή. Δεν γεννιέται κανένας που να τα ξέρει όλα. Όλοι μετά μαθαίνουν\... ρωτώντας!* + +Χαζεύοντας κάποιες διανομές του LINUX σε ένα κεντρικό κατάστημα, παρατήρησα ότι σε ορισμένες έγραφε το χαρακτηριστικό INTEL. Δηλ. αυτές οι διανομές δεν τρέχουν +σε άλλο επεξεργαστή;Αν ισχύει κάτι τέτοιο ,λόγω του ότι έχω έναν CYRIX 166,μπορώ να τρέξω το RED HAT 5.0; + +*Κοίτα, το Linux είναι αυτή την στιγμή το μοναδικό ίσως λειτουργικό που τρέχει σε μια μεγάλη ποικιλία επεξεργαστών. Πληροφοριακά αναφέρω τους:* + +1. Intel x86 και συμβατούς από 386 και πάνω +2. Digital Alpha/AXP +3. MIPS +4. Sparc +5. PowerPC + +*και αν θυμάμαι καλά υπάρχει και ένα μικρό linux-like kernel που τρέχει σε 8-bit επεξεργαστές!!!\ +Αυτό που είδες, λοιπόν, ήταν ένα distribution με εκτελέσιμα προγράμματα για Intel επεξεργαστές και συμβατούς (Cyrix, AMD, κτλ.) Άρα παίρνεις αυτό το +distribution και το στήνεις χωρίς φόβο στο Cyrix σου.* + + +### [2. Ελληνικοί χαρακτήρες]{#s2} + +Από : [Αβραάμ Γεωργιάδη](mailto:avraam@cytanet.com.cy) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Αγαπητέ κύριε,\ +Όταν κάνω download τις σελίδες του περιοδικού σας, τα γράμματα που εμφανίζονται στην οθόνη του computer μου είναι ακαταλαβίστικα (δεν διαβάζονται). Πως μπορώ να +διορθώσω αυτό το λάθος; + +*Οι προϋποθέσεις για να δει κάποιος τα ελληνικά του Magaz είναι μόνο δύο και λυνονται σχετικά απλά:* + +1. Πρέπει να υπάρχουν ελληνικές γραματοσειρές στο σύστημα, και +2. Πρέπει ο WWW-browser να \"δείχνει\" ελληνικά, που το επιλέγει κανείς με τα μενού του browser συνήθως. Π.χ. στο Netscape ειναι το menu View \| Document + Encoding \| Greek (Windows 8859-7). + +*Ελληνικές γραμματοσειρές υπάρχουν για πολλά λειτουργικά συστήματα στο directory* + + ftp://ftp.ntua.gr/pub/fonts/ + + +*Εγώ στο σπίτι μου στα X-Windows γραμματοσειρές από κει έχω στησει.\ +Ελπίζω να βοήθησα κάπως\...* + + +### [3. Απορία - προγράμματα]{#s3} + +Από : [Χρήστος Κλουκίνας](mailto:kloukin@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γεια σας. Πρώτα απ\' όλα συγχαρητήρια για την προσπάθειά σας. Θα ήθελα να σας ρωτήσω μερικά πράγματα σχετικά με το Linux. μήπως γνωρίζετε εάν υποστηρίζει τα : + +1\) Internet phone + +*Το Internet phone, ως πρόγραμμα, όχι.\ +Αντίστοιχα:\ +http://www.wpi.edu/ murti/work.html Ethernet phone και\ +http://www.ssc.com/ roland/work/xztalk.html XZtalk\ +http://www.inria.fr/rodeo/fphone/ FreePhone* + +2\) Java (stand-alone programs, not applets run through Netscape, etc) + +*Enable support for Java Binaries (από τον kernel) Αν δεν το ξέρεις, είναι το μόνο O/S που υποστηρίζει απευθείας java binaries (δηλαδή δνε χρειάζεται να γράψεις +\"java myclass.class\" για να εκτελέσεις το myclass.class, αλλά μπορείς απλά να κάνεις το myclass.class executable, και να το τρέξεις. Χαρακτηριστικά +παραδείγματα τα GetRight for Java και ICQ for Java.* + +3\) DVD devices & MPEG-4 + +*Για DVD δεν ξέρω. Αν μάθεις κ\'άτι, ενημέρωσέ μας\...\ +Για mpeg3\ +http://www.mpeg3.com/programs/\ +http://adam.kaist.ac.kr/ jwj95/\ +Mpeg 4 δεν ήξερα καν ότι υπήρχε\...* + +4\) CD-RW devices + +*Και βέβαια, για το ποια υποστηρίζονται, κοίτα κοίταξε το :\ +http://gnupln8.gnuplanet.com/cdwrite/ (αν και απ\' ότι ξέρω, υποστηρίζονται και άλλα). Για software, κοίταξε και το :\ +http://www.fh-muenchen.de/rz/xcdroast.* + +5\) CD (audio) construction (δηλαδή αντιγραφή μουσικών CD\... ;) + +*cdda2wav, cdparanoia κλπ :\ +http://www.mit.edu/afs/sipb/user/xiphmont/cdparanoia/index.html* + +Αν έχετε υπόψη σας σχετικά προγράμματα, urls, κλπ θα σας ήμουν ευγνώμων εάν με ενημερώνατε. + +*Ελπίζω αυτά να σου φτάνουν. Πάντως, γενικά καλή πηγη πληροφοριών είναι το site:\ +http://www.xnet.com/ blatura* + + +### [4. Πρόβλημα - X11 και S3]{#s4} + +Από : [Μπαλαλή Χαράλαμπο](mailto:kloukin@compulink.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Έχω ένα πρόβλημα με τον xserver του linux.\ +Έχω κατεβάσει τον driver για την κάρτα γραφικών μου, την s3virge 2300 diamond αλλά ενώ την αναγνώρισε και μου φόρτωσε τελικά τα X windows σε καλύτερη ανάλυση, +μου τα φορτώνει μόνο σε μία 1600 X 1200 (virtual) και αυτό γιατί δεν έχω τα modelines της κάρτας για να τα βάλω στο αρχέίο.\ +Μήπως υπάρχει κανένας τρόπος να λυθεί αλλιώς αυτό το πρόβλημα; + +Ευχαριστώ + +*Ποια X11R6 χρησιμοποιείς;\ +Αν χρησιμοποιείς τα XFree86, ποια έκδοση είναι;\ +Γιατί στα XFree86 3.3.2 το προγραμματάκι XF86Setup που έρχεται μαζί τους είναι πολυ εύκολο στη χρήση και έχει ειδικό option για απενεργοποίηση του \"virtual\" +desktop.\ +Από την άλλη, πάντα μπορείς να πειράξεις το /etc/XF86Config αρχείο με το χέρι και να βγάλεις το \"Virtual HORIZxVERT\" από παντού, και το startx θα ξεκινάει +κανονικά στο default mode του color-depth σου.\ +Αν όλα αυτά που ακούς σου ακούγονται λίγο προς κινέζικα, διάβασε το manual του XF86Config (\`man XF86Config\'), είναι μια καλή ευκαιρία.* + + +### [5. Linux και Fat32]{#s5} + +Από : [Γιώργο Τσαρμπόπουλο](mailto:gtsar@ath.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Πολλή καλή η δουλεια που κανετε. Μια ερωτηση μονο. Υπαρχει ή προβλεπεται να υπάρξει εκδοση του linux που να υποστυριζει fat32? + +*Ευχαριστούμε για τα καλά σου λόγια. Linux που να υποστηρίζει Fat32, δεν υπάρχει ακόμα. Αυτό με την εξής έννοια: Δεν έχει βγει ακόμα kernel που να έχει +ενσωματωμένη υποστήριξη για fat32. Από τον kernel 2.0.27 και μετά, υπάρχει ένα patch, στηγ διεύθυνση \ +Επίσης, ακούγεται ότι ο kernel 2.0.34 θα το έχει ενσωματωμένο. (αλλά αυτό ακουγόταν και για τον 2.0.33, και τον 2.0.32).\ +Δεν ξέρω για τους μη σταθερούς kernels, της σειράς 2.1.xx, αλλά αν έχεις τέτοιο kernel, θα σου πρότεινα να κάνεις λίγη υπομονή. Απ\' ότι φαίνεται, σε λίγο +βγαίνει ο 2.2.0* + + +### [6. Δεν μπορώ να κάνω RCP]{#s6} + +Από : [Κωστή Μεντζελό](mailto:mentzelos@lycosmail.com) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Καλημέρα, καταρχήν διαβασα τα τευχη του magaz και τα βρήκα παρα πολύ καλά. Ειδικά το άρθρο για τον HP720. Κάποτε πούλησα έναν lexmark για τον ίδιο λόγο. Λοιπόν +το προβλημα μου είναι το εξής:\ +Δεν μπορώ με τίποτα να κάνω rcp. + + πχ: rcp lll linuxbox:/tmp/lll + permission denied. + +Οτι και να έχω κάνει, ότι και να έχω διαβάσει δεν εχω βρει λύση. Στο hosts.equiv γράφω τα εξής: + + linuxbox + +και στο hosts δηλώνω 171.0.0.1 linuxbox\ +Δηλαδή, telnet linuxbox λειτουργεί κανονικά. + +*Σε μερικά συστήματα οι administrators απενεργοποιούν τα RSH/RCP γιατί είναι πολυ εύκολο ένας αρκετά επιτήδειος χρήστης τους να εκτελέσει εντολές είτε στο +local\' είτε στο \`remote\' μηχάνημα σαν superuser\'.\ +Δοκίμασε το πιο νέο SSH/SCP που υποστηρίζει και κρυπτογραφία και το προτιμούν οι administrators. Χωρίς παρόλα αυτά και το SSH/SCP να έχει αποδειχτεί +unbreakable\'.* + + +### [7. Loadlin]{#s7} + +Από : [Ισαάκ Τσαλίκογλου](mailto:alfisti64@mailexcite.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Τι παραμέτρους πρέπει να γράψω στο loadlin για να φορτώσω το redhat 5 αν βρίσκεται στο hdb και root είναι το hdb1 ;\ +Ευχαριστώ + +*Φαντάζομαι ότι θα υπάρχει και πιο εύκολος τρόπος, αλλά εγώ αυτόν ξέρω:\ +α) Παίρνεις το FSDEXT2 από το και το εγκαθιστάς στα win95.\ +β) Κάνεις mount το /dev/hdb1 κάτω από τα windows, και αντιγράφεις το αρχείο /vmlinuz στο directory του loadlin.\ +γ) Δίνεις την εντολή (από το directory του loadlin)\ +./loadlin root=/dev/hdb1 ./vmlinuz\ +δ) Καλή τύχη.* + + +### [8. AMD K6 και Linux]{#s8} + +Από : [Wave](mailto:wave013@hempseed.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γεια σας,\ +Είμαι ένας νέος linux χρήστης και από τότε που το έβαλα (πριν 5 μέρες περίπου) δεν ξεκολάω εύκολα από το PC.\ +Εγκατέστησα το Netscape και κάθε φορά αφού το ξεκινήσω μετά από λίγο κολάει. Κολάει όταν ψάχνει ένα site και είμαι εκτός internet (δεν έχω καταφέρει να συνδεθώ +ακόμα), κολάει όταν αλλάζω κάτι στα properties και γενικά κολάει όλη την ώρα. Αυτό δεν είναι φυσιολογικό, έτσι; Ούτε τα win95 δεν κολάνε τόσο πολύ. + +*Είναι φυσιολογικό :-( Δεν ψάχνει να βρει το site, και δεν κολάει. Καθυστερεί γιατί ψάχνει να βρει τον Name server. Μετά από λίγο πρέπει να επανέλθει\...* + +Μου είπαν ότι μπορεί να είναι πρόβλημα το ότι έχω AMD K6 (200). Επίσης έσω 16MB RAM. Αληθεύει αυτό, πως δηλαδή το linux έχει πρόβλημα με τον K6 ; Υπάρχει κάτι +που μπορώ να κάνω (εκτός του να πάρω Intel) ; + +*Από ότι έχω ακούσει, ο K6 δεν έχει πρόβλημα με Linux :-)* + +P.S. Το linux δεν κολάει, μόνο το Netscape. Όταν κάνω kill στο netscape συνεχίζω κανονικά. + +*Όπως λέγαμε και πιο πάνω\...* + diff --git a/content/articles/06/01_editorial.md b/content/articles/06/01_editorial.md new file mode 100644 index 0000000..8e53be3 --- /dev/null +++ b/content/articles/06/01_editorial.md @@ -0,0 +1,30 @@ ++++ +title = 'Editorial' +date = '1998-07-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 06'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Τεύχος καλοκαιρινό αυτό\... Ελπίζουμε να σας γεμίσει \"σκέψεις\" για τις διακοπές. Κατά την παράδοση των έντυπων περιοδικών, φαίνεται αυτό το τεύχος να έχει +διπλή ημερομηνία :-)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε αυτό το τεύχος, υπάρχει η συνέχεια του άρθρου για το XISP που υπήρχε στο προηγούμενο. Έχουμε πλέον [ρυθμίσεις για τους μεγαλύτερους +providers](05_xisp2.html), ή τουλάχιστον έτσι νομίζουμε. Ρίξτε του μια ματιά και πείτε μας αν λείπει ο δικός σας. + +Υπάρχει επίσης ένα άρθρο για [τις ρυθμίσεις των modelines των monitors στα Χ](06_monitors.html). Αν μέχρι τώρα δεν βλέπατε καλά, ήρθε η ώρα αυτό να διορθωθεί. + +Η [Linux zone](02_lz3.html) είναι βέβαια εδώ, με σκοπό να σας λύσει τα προβλήματα που πιθανόν έχετε με το Laptop σας. + +Και για τα προβλήματα με τις [γραμματοσειρές](03_greekfonts.html), ε, καιρός ήταν να ασχοληθεί κάποιος σοβαρά. Το έκανε λοιπόν ο Ευθύμιος Μαυρογεωργιάδης. +Τιμητική η θέση που του προσφέρει το Magaz αυτό το μήνα, και ευχόμαστε να τον μιμηθείτε σύντομα. + +Το μάθατε ότι ήρθαν τα Windows 98; Εμείς το μάθαμε, και όχι απλώς το μάθαμε, αλλά τα δοκιμάσαμε κιόλας!!! [Ιδού τα αποτελέσματα](04_w98.html) + +Και βέβαια, δεν θα μπορούσε να λείπει η [στήλη της αλληλογραφίας](07_mailbox.html). Εσείς μας γράφετε, κι εμείς\... + +Καλή ανάγνωση, καλό καλοκαίρι και ραντεβού τον Σεπτέμβρη - Οκτώβρη. diff --git a/content/articles/06/02_lz3.md b/content/articles/06/02_lz3.md new file mode 100644 index 0000000..1f57b8e --- /dev/null +++ b/content/articles/06/02_lz3.md @@ -0,0 +1,66 @@ ++++ +title = 'Linux Zone' +date = '1998-07-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 06'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το Linux Zone είναι μία στήλη που σκοπό της έχει να παρουσιάζει μερικές από τις εμπειρίες μου στον χώρο του Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ένα από τα πράγματα που ζήλευα πάνατα ήταν οι διάφοροι τύποι που έβλεπα κατά καιρούς να γυρνάνε από δώ και από κει με έν laptop. Τα πράγματα ήρθαν βολικά και +μπόρεσα και εγώ να αποκτήσω ένα\... Μοντέλο HiNote VP717 της Digital, ένα πραγματικά πολύ ωραίο μηχάνημα. + +Με το που έκανα την πρώτη εκκίνησή του, εγκατέστησε τα Windows95, που αποφάσισα να κρατήσω σε ένα partition ώστε να μπορώ αν χρειαστεί να ανοίξω κάποια κείμενα +στο Word κ.λ. + +Το θέμα βέβαια ήταν να μπεί Linux στο μηχάνημα και την εγκατάσταση απλοποίησε λίγο το γεγονός ότι ο 2.1GB σκληρός δίσκος ήταν ήδη χωρισμένος σε 2 partitions, +στο ένα είχαν ήδη καθίσει τα Windows95 και το άλλο ήταν κενό. Έβαλα το CD του RedHat 5.1 (όχι το official, αλλά από ένα άγγλο διανομέα που ονομάζεται Genesis) +και επανεκίνησα το μηχάνημά μου\... Έκανε boot από το CD και ξεκίνησα την διαδικασία εγκατάστασης. Ένα μικρό repartitioning του δίσκου για να έχω το root +directory, το /usr/local και το swap σε διαφορετικά partitions και όλα έδειχναν να πηγαίνουν τέλεια, μέχρι που το installation με ενημέρωσε ότι θα +χρησιμοποιήσει τον XF86\_VGA16 X Server!!! + +Δεν είναι δυνατόν! Με 2MB RAM στην κάρτα γραφικών (που απέδιδε πολύ καλά στα Windows) και θα αναγκαζομουν να δουλεύω σε 640x480 και 16 χρώματα; Δεν μπορεί, κάτι +δεν κάνω σωστά, σκέφτηκα. Πίσω στον παλιό καλό 486, σύνδεση στο Internet και αναζήτηση για Linux και Neomagic (ο κατασκευαστής του chipset του συστήματος +γραφικών). Τότε ήταν που τα χρειάστηκα: το πρώτο πράγμα που βρήκα ήταν μία σελίδα που έλεγε ότι η Neomagic είναι από τις λίγες εταιρείες που δεν δίνουν στην +δημοσιότητα τις απαραίτητες λεπτομέρειες για να φτιαχθεί ένας X Server που να είναι συμβατός με το chipset της!!! Δεν ήταν δυνατόν, την είχα πατήσει τόσο +άσχημα; + +Τελικά η ιστορία επαναλαμβάνεται (βλ. HP720C στο LZ του Απριλίου). Στην διεύθυνση βρήκα ένα \"πειραγμένο\" XF86\_SVGA +που μπορεί να μην χρησιμοποιεί όλες τις δυνατότητες της κάρτας, της επιτρέπει όμως να λειτουργεί σε 800x600 με 16bit χρώμα που εμένα μου είναι ικανοποιητικό. +Δίδαγμα: πρίν αγοράσετε laptop (όπου δεν έχετε την δυνατότητα να αλλάξετε κάρτα οθόνης) επισκευθείτε το www.xfree.org και σιγουρευτείτε ότι δεν θα έχετε +παρόμοια προβλήματα! Ακόμη, ρίξτε μία ματιά στο για να δείτε αν κάποιος άλλος έχει εγκαταστήσει Linux στο +μηχάνημα που θέλετε να αγοράσετε - τα φορητά έχουν ένα σωρό ιδιορυθμίες που δεν αποκλείεται να σας δημιουργήσουν προβλήματα. + +Ευτυχώς, εγώ δεν αντιμετώπισα τίποτα άλλο ιδιέταιρο, τα πάντα πήγαν ρολόι, ακόμη και η PCMCIA κάρτα fax/modem (ActionTec DataLink 33.6Kbps) βρέθηκε αυτόματα +κατά την επανεκίνηση. Ένα rebuilt του kernel (τί γρήγορα που γίνεται στον 200MMX!) μου επέτρεψε να κλείνω το καπάκι και να μπαίνει σε suspend mode το Linux και +εγώ είμουν ένας ευτυχισμένος χρήστης\... Μόνο η κάρτα ήχου δεν παίζει, μάλλον όμως φταίω εγώ, θα το ψάξω αργότερα το θέμα. + +Αφού έβαλα και το KDE Beta4 (τώρα που γράφω το άρθρο έχει βγεί το Version1-preview) και το GNOME 0.20 (που αν και δείχνει να έχει εντυπωσιακό μέλλον βρίσκεται +πολύ πίσω από το KDE) ξεκίνησα να εγκαταστήσω ελληνικά. + +Ο Δημήτρης Μπούρας μου είχε δώσει να δω το νέο grISOXKb (version1.2). Δουλειά ολοκληρωμένη και προσεγμένη μέχρι τελευταίας λεπτομέρειας, αρκούσε ένα απλό +`make install-R6.3` και τα ελληνικά μπήκαν στα X-Windows!!! Βέβαια, χρειάστηκε να αλλάξω και το XF86Config λίγο, πάντα σύμφωνα με +τις οδηγίες που περιέχονται στο πακέτο, ήταν δεν ήταν ένα λεπτό υπόθεση. Έκλεισα τον X Server και τον ξαναανέβασα. +`xedit -fn fixedgr` για δοκιμή (ναι, έχω βάλει και ελληνικές γραμματοσειρές\...) και μπορώ να γράφω ελληνικά! Δοκιμή και στο kedit +του KDE και\... η απογοήτευση\... Όταν πατάω το alt αντί για ελληνικά, βλέπω (ή μάλλον δεν βλέπω) ΤΙΠΟΤΑ. + +Το ψάξιμο που κράτησε περίπου δύο εβδομάδες πήρε μορφή μανιώδους αναζήτησης, αφού εκτός των άλλων ο Ευριπίδης μου έστελνε απειλητικά μυνήματα ότι θα +εγκαταστήσει Windows για να προχωρήσει με την μετάφραση των HOWTOs (ο Ευριπίδης και η Βούλα το έχουν πάρει πατριωτικά το θέμα). Τελικά η λύση βρέθηκε και είχε +σχέση με την glibc που χρησιμοποιείται από την RedHat. Απλά προσθέστε στο .bashrc τις παρακάτω γραμμές: + + export LANG=gr_GR + export LC_ALL=gr_GR + _XKB_CHARSET=iso8859-7 + +Τώρα ΟΛΑ δούλευαν σωστά. Αφού μπόρεσα και κατάλαβα τα \"ενδότερα\" της εγκατάστασης που γίνεται από το grISOXKb κάθησα και προσπάθησα να φτιάξω ένα RPM. Ίσως +και να μην είναι τόσο απαραίτητο, νομίζω όμως ότι βασικά πράγματα όπως η ενεργοποίηση του ελληνικού πληκτρολογίου και μερικές ελληνικές γραμματοσειρές πρέπει να +εγκαθίστανται εντελώς αυτόματα και χωρίς καμία απαίτηση από τον χρήστη. Τα αποτελέσματα θα τα βρείτε στο το +XF-GreekKBD.noarch.rpm βάζει ελληνικά και το XF-GreekFNTS.noarch.rpm αρκετές ελληνικές γραμματοσειρές που βρήκα στο internet. Προς το παρόν, το FNTS δεν +μπορείτε να το κατεβάσετε, γιατί δεν έχω συμπεριλάβει σε αυτό τα απαραίτητα αρχεία που να δηλώνουν που βρήκα την κάθε γραμματοσειρά (και τον δημιουργό της), +κάτι που είναι απαραίτητο\... Σύντομα όμως αυτό θα διορθωθεί. Αν τα δοκιμάσετε, στείλτε μου ένα e-mail για να μου πείτε το distribution στο οποίο τα +εγκαταστήσατε καθώς και πιθανά προβλήματα που παρουσιάστηκαν. diff --git a/content/articles/06/03_greekfonts.md b/content/articles/06/03_greekfonts.md new file mode 100644 index 0000000..4565a34 --- /dev/null +++ b/content/articles/06/03_greekfonts.md @@ -0,0 +1,180 @@ ++++ +title = 'Προσθέτοντας γραμματοσειρές στο StarOffice (και όχι μόνο)' +date = '1998-07-01T00:00:00Z' +description = '' +author = 'Ευθύμιος Μαυρογεωργιάδης' +issue = ['Magaz 06'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Όταν πριν από έναν χρόνο αποφάσισα να ξεφύγω από τον κόσμο του \"General Protection Fault\" και την γνωστή τριδάχτυλη κίνηση που το ακολουθούσε, εγκατέστησα το +Linux στον υπολογιστή μου επιδιώκοντας να γλυτώσω και νεύρα και χρήμα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στην αρχή το σύστημα που ξεκίνησε ο Linus Torvalds κατελάμβανε μόνο ένα μικρό μέρος του σκληρού μου δίσκου. Αυτό που κρατούσε ακόμη το αντίπαλον δέος εν ζωή +ήταν η έλλειψη ενός εύχρηστου πακέτου επεξεργασίας κειμένου για Linux. Το τελευταίο, βέβαια, θα έπρεπε να προσφέρεται και δωρεάν. Τότε ήταν που στις αναζητήσεις +μου ανά το διαδίκτυο ανακάλυψα το StarOffice, ένα πακέτο προγραμμάτων που προσφέρεται δωρεάν για προσωπική χρήση. Η χαρά μου μετριάστηκε όμως όταν προσπάθησα να +βρω πώς θα μπορούσα να εγκαταστήσω ελληνικές και άλλες γραμματοσειρές για χρήση από το StarOffice. Απότοκος των επισκέψεών μου σε διάφορα απίθανα μέρη του +δικτύου προκειμένου να βρω τις πληροφορίες που με ενδιέφεραν είναι το παρόν αρθρίδιο (όπως λέμε υβρίδιο ;-) + +Η εγκατάσταση γραμματοσειρών στο StarOffice είναι λίγο προβληματική καθώς δεν υπάρχει κάποιο πρόγραμμα που να την αυτοματοποιεί. Επιπλέον, επειδή το StarOffice +τρέχει κάτω από περιβάλλον X-Windows και χρησιμοποιεί Ghostscript για τις εκτυπώσεις των αρχείων του, πρέπει οι γραμματοσειρές τις οποίες θέλουμε να +χρησιμοποιήσουμε να είναι διαθέσιμες όχι μόνο στο StarOffice αλλά και στα X-Windows και στη Ghostscript. Πρέπει ακόμη να σημειωθεί ότι το StafOffice μπορεί να +διαβάζει μόνο γραμματοσειρές τεχνολογίας Type-1 (.pfa και .pfb). Για να περιπλακούν μάλιστα τα πράγματα περισσότερο, οι τελευταίες μπορούν να απεικονιστούν +σωστά επί της οθόνης μόνο αν συνοδεύονται από μία ιδιάζουσα μορφή αντίστοιχου αρχείου .afm. Όσο παράξενα ακούγονται όλα αυτά, τόσο εύκολη είναι η εγκατάσταση +αυτή καθ\' αυτή ;-) Απλώς ακολουθήστε προσεκτικά τα παρακάτω βήματα έτσι ώστε οι γραμματοσειρές που θέλετε να εγκαταστήσετε να είναι διαθέσιμες και στα +X-Windows και στη Ghostscript αλλά, φυσικά, και στο StarOffice: + +**1. Προετοιμασία γραμματοσειρών για χρήση από το StarOffice** +------------------------------------------------------------------------------------------- + +**2. Εγκατάσταση των καινούριων γραμματοσειρών στα X-windows** +------------------------------------------------------------------------------------------- + +**3. Εγκατάσταση των καινούριων γραμματοσειρών στη Ghostscript** +--------------------------------------------------------------------------------------------- + +**4. Εγκατάσταση των καινούριων γραμματοσειρών στο StarOffice** +-------------------------------------------------------------------------------------------- + + +### [1. Προετοιμασία γραμματοσειρών για χρήση από το StarOffice]{#s1} + +1. Αποσυμπίεσε το αρχείο με τις καινούριες γραμματοσειρές σου σε κάποιο υποφάκελο, π.χ. /fonts/greek. + +2. Διάγραψε οποιαδήποτε παραπανίσια αρχεία υπάρχουν (π.χ. README, .afm, .ttf, και δεν ξέρω εγώ τι άλλο) αφήνοντας μόνο τα .pfb ή .pfa αρχεία που περιέχονται + στο /fonts/greek. (Δεν πειράζει αν δεν διαγράψεις τίποτε, αλλά συνήθως η πληθώρα αρχείων σε κάποιον υποφάκελο μόνο να μας μπερδέψει μπορεί). + +3. Εφόσον έχεις εγκαταστήσει Ghostscript στον υπολογιστή σου, πρέπει να έχει ήδη εγκατασταθεί και κάποιο πρόγραμμα γνωστό ως printafm (αν δεν βρίσκεις τίποτε + τέτοιο, προφανώς πρέπει να αναβαθμίσεις την Ghostscript σου στην τελευταία έκδοση). Για κάθε γραμματοσειρά στο /fonts/greek πρέπει να κάνεις: + + printafm font0.pfb > font0.afm + printafm font1.pfb > font1.afm κλπ. + + Έτσι θα δημιουργήσεις τα αρχεία .afm που πρέπει να συνοδεύουν τις γραμματοσειρές σου (αυτά που έρχονται με το συμπιεσμένο αρχείο προτιμώ να τα σβήνω και να + δημιουργώ καινούρια με αυτόν τον τρόπο). + +4. Προσοχή! Τα αρχεία που δημιούργησες δεν μπορούν να χρησιμοποιηθούν από το StafOffice ως έχουν (υπάρχει κάποιο πρόβλημα με τη σειρά με την οποία εμφανίζονται + τα διάφορα δεδομένα). [Πάρε](../files/afm.pl.gz) και αποσυμπίεσε το αρχείο που κάνει την μετατροπή, και τοποθέτησέ το στο /fonts/greek. Έπειτα δημιούργησε + καινούρια αρχεία .afm (τα οποία θα μπορούν να χρησιμοποιηθούν χωρίς πρόβλημα και από όλα τα άλλα προγράμματα που τυχόν θα τα χρειαστούν) δίνοντας τις + παρακάτω εντολές για κάθε αρχείο .afm σε αυτόν τον υποφάκελο (ελπίζω να έχεις εγκατεστημένη την perl στο σύστημά σου): + + perl ./afm.pl font0.afm + rm -f font0.afm + mv font0.afm.new font0.afm + +5. Τώρα πρέπει να δημιουργήσεις τα αρχεία Fontmap, fonts.dir, και fonts.scale. Αυτό το κάνεις με το [type1inst](../files/type1inst.tgz). Απλώς πληκτρολόγησε + type1inst μέσα στο /fonts/greek και το πρόγραμμα θα κάνει τη δουλειά του. + +6. Με κάποιον κειμενογράφο \[editor\] διόρθωσε τη γραμμή 2 των αρχείων .afm ως εξής:\ + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Διορθωμένο + Παλιό + + StartFontMetrics 2.0 StartFontMetrics 2.0 + + `FontName mgpmab__.pfb` FontName MgPolMemApla-Bold + + FullName MgPolMemApla-Bold FullName MgPolMemApla-Bold + + FamilyName MgPolMemApla FamilyName MgPolMemApla + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + + Απλώς δηλαδή αντίγραψε το FullName στη θέση του FontName.\ + Σημείωση: Το συγκεκριμένο βήμα είναι δική μου προσθήκη (δεν αναφέρεται πουθενά στο διαδίκτυο, απ\' όσο ξέρω) γι\' αυτό δοκιμάστε την εγκατάσταση με και + χωρίς αυτό. Στο δικό μου σύστημα το StarOffice, αν και απεικόνιζε σωστά τις γραμματοσειρές στην οθόνη, δεν τύπωνε σωστά. Μόνο όταν έκανα την παραπάνω αλλαγή + κατάφερα να το κάνω να εκτυπώνει και σωστά. + + +### [2. Εγκατάσταση των καινούριων γραμματοσειρών στα X-windows]{#s2} + +1. Για να βλέπεις τις καινούριες γραμματοσειρές στα X-Windows πρόσθεσε στο .xinitrc τις γραμμές: + + xset +fp /fonts/greek + xset fp rehash + + Αν είσαι super user τότε καλύτερα να προσθέσεις το /fonts/greek απευθείας στο /etc/X11/XF86Config. Ταυτόχρονα, έλεγξε τους υποφακέλους γραμματοσειρών που + υπάρχουν στο /etc/X11/XF86Config και άλλαξε τη σειρά με την οποία τους διαβάζουν τα X-Windows τοποθετώντας πρώτα αυτούς που περιέχουν κλιμακωτές + \[scalable\] (Type-1) γραμματοσειρές και έπειτα αυτούς που περιέχουν γραμματοσειρές τύπου .pcf. + + Επειδή το StarOffice ψάχνει για την κατά περίπτωση ζητούμενη γραμματοσειρά με τη σειρά που αυτές έχουν φορτωθεί, αν φορτωθούν πρώτα οι γραμματοσειρές .pcf + και ζητείται μια γραμματοσειρά η οποία είναι διαθέσιμη και σε .pcf και σε μορφή Type-1, τότε θα επιλεγεί η μη κλιμακωτή \[unscalable\] γραμματοσειρά για την + απεικόνιση του κειμένου στην οθόνη. Κάτι τέτοιο είναι τουλάχιστον αντιαισθητικό αν όχι εκνευριστικό! Πάντως, αν για κάποιο λόγο δεν θέλεις να πειράξεις τη + σειρά με την οποία φορτώνονται οι γραμματοσειρές, τότε μπορείς απλώς να προσθέσεις την ένδειξη \":unscaled\" (χωρίς τα εισαγωγικά) στο τέλος της διαδρομής + \[pathname\] του υποφακέλου όπου υπάρχουν μη κλιμακωτές γραμματοσειρές, π.χ.: + + FontPath "/usr/X11R6/lib/X11/fonts/misc/:unscaled" + FontPath "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled" + FontPath "/usr/X11R6/lib/X11/fonts/Type1/" κλπ. + + Αν οι γραμματοσειρές του συστήματός σου φορτώνονται από το αρχείο  /.xinitrc, τότε οι αντίστοιχες αλλαγές εκεί θα έμοιαζαν κάπως έτσι: + + xset +fp /usr/applic/X/lib/fonts/misc:unscaled + xset +fp /usr/applic/X/lib/fonts/75dp:unscaled + xset +fp /usr/applic/X/lib/fonts/Type1 + xset fp rehash + + Σε κάθε περίπτωση οι οποιεσδήποτε αλλαγές θα πρέπει να γίνουν και στα δύο αρχεία (/etc/X11/XF86Config και  /.xinitrc). Προσωπικώς, στον δικό μου υπολογιστή + έχω αλλάξει τη σειρά με την οποία φωρτώνονται οι γραμματοσειρές (έτσι ώστε να φορτώνονται πρώτα οι τύπου 1) και, για καλό και για κακό, έχω προσθέσει και + την ένδειξη \":unscaled\" στις διαδρομές των υποφακέλων που περιέχουν μη κλιμακωτές γραμματοσειρές. Έτσι τουλάχιστον ξέρω πως όταν τα γράμματα φαίνονται + τετράγωνα στην οθόνη μάλλον γραμματοσειρά πρέπει να αλλάξω παρά οθόνη. ;-) + + +### [3. Εγκατάσταση των καινούριων γραμματοσειρών στη Ghostscript]{#s3} + +1. Για να μπορεί η Ghostscript να χρησιμοποιεί τις καινουριές γραμματοσειρές που προσθέτεις κάνε τα ακόλουθα: + + Με έναν κειμενογράφο άνοιξε το αρχείο /fonts/greek/Fontmap. Αυτό που βλέπεις πρέπει να μοιάζει κάπως έτσι: + + MgPolMemApla-Bold (mgpmab__.pfb) ; + MgPolMemApla-BoldItalic (mgpmad__.pfb) ; + MgPolMemApla-Italic (mgpmai__.pfb) ; + MgPolMemApla-Normal (mgpman__.pfb) ; + + Πρόσθεσε ένα \"/\" (χωρίς τα εισαγωγικά) στην αρχή κάθε σειράς και συμπλήρωσε το όνομα της κάθε γραμματοσειράς με την πλήρη διαδρομή υποφακέλου \[full path + name\] του κάθε αρχείου. Έτσι πρέπει να έχεις: + + /MgPolMemApla-Bold (/fonts/greek/mgpmab__.pfb) ; + /MgPolMemApla-BoldItalic (/fonts/greek/mgpmad__.pfb) ; + /MgPolMemApla-Italic (/fonts/greek/mgpmai__.pfb) ; + /MgPolMemApla-Normal (/fonts/greek/mgpman__.pfb) ; + + Μην σώσεις το αρχείο, απλώς άνοιξε το /usr/share/ghostscript/(version-number)/Fontmap με έναν κειμενογράφο και αντίγραψε το μεταλλαγμένο αυτό + /fonts/greek/Fontmap μέσα στο Fontmap του ghostscript (ας πούμε, στην αρχή). Σώσε μόνο το Fontmap του Ghostscript, όχι το /fonts/greek/Fontmap! + + +### [4. Εγκατάσταση των καινούριων γραμματοσειρών στο StarOffice]{#s4} + +1. Το StarOffice στο σύστημά μου είναι εγκατεστημένο στον υποφάκελο /opt/Office40. Κάνοντας, λοιπόν, τις ανάλογες αλλαγές, δώσε τις πρακάτω εντολές: + + cd /opt/Office40/xp3/pssoftfonts/ + ln -s /fonts/greek/*.pfb . + cd /opt/Office40/xp3/fontmetrics/afm/ + ln -s /fonts/greek/*.afm . + +2. Με έναν κειμενογράφο άνοιξε το /fonts/greek/fonts.dir (Προσοχή! Και σε αυτή την περίπτωση θα κάνουμε μόνο αλλαγές προς αντιγραφή. Δεν πρέπει να σώσεις το + αρχείο κλείνοντάς το!). Πρέπει να φαίνεται κάπως έτσι: + + 4 + mgpmab__.pfb --mgpolmemapla-bold-r-normal--0-0-0-0-p-0-iso8859-1 + mgpmad__.pfb --mgpolmemapla-bold-i-normal--0-0-0-0-p-0-iso8859-1 + mgpmai__.pfb --mgpolmemapla-medium-i-normal--0-0-0-0-p-0-iso8859-1 + mgpman__.pfb --mgpolmemapla-medium-r-normal--0-0-0-0-p-0-iso8859-1 + + Σβήσε τον αριθμό στην αρχή του αρχείου και αντικατέστησε τα \".pfb\" με \",\" και τα \"-0-0-0-0-\" με \"-%d-%d-%d-%d-\" (φυσικά χωρίς τα εισαγωγικά). Το + έκτρωμα που θα δημιουργηθεί αντίγραψέ το στο τέλος του αρχείου /opt/Office40/xp3/psstd.fonts + +3. Βγες από τα X-Windows, ξαναμπές και τρέξε το StarOffice! Τι περιμένεις; ;-) + +Κανονικά, μετά απ\' όλ\' αυτά, τα πάντα θα πρέπει να δουλεύουν τέλεια. Θα πρέπει να μπορείς και να βλέπεις και να εκτυπώνεις με τις καινούριες γραμματοσειρές +που έχεις εγκαταστήσει. Αν όμως παρ\' ελπίδα και πάλι δεν γίνεται τίποτε, τότε αυτό μάλλον οφείλεται στο γεγονός ότι οι καινούριες (ελληνικές;) γραμματοσειρές +σου έχουν το ίδιο όνομα με κάποια άλλη (ξένη;) γραμματοσειρά (π.χ.times, arial, κλπ.) - το ότι προφανώς ανήκουν σε διαφορετικές οικογένειες δεν φαίνεται να +πολυνοιάζει το StarOffice). Σε αυτή την περίπτωση, αλλάζεις την ονομασία των γραμματοσειρών σου στα αρχεία /fonts/greek/fonts.dir, /fonts/greek/fonts.scale, και +/opt/Office40/xp3/psstd.fonts από π.χ times σε timesgr (ή κάτι τέτοιο, τέλος πάντων) και αν δεν είσαι εξαιρετικά γκαντέμης θα πρέπει επιτέλους κάτι να αρχίσει +να δουλεύει! ;-) + diff --git a/content/articles/06/04_w98.md b/content/articles/06/04_w98.md new file mode 100644 index 0000000..d3af52f --- /dev/null +++ b/content/articles/06/04_w98.md @@ -0,0 +1,26 @@ ++++ +title = 'Δοκιμάσαμε τα Windows 98' +date = '1998-07-01T00:00:00Z' +description = '' +author = 'Γεωργάτος Φώτης' +issue = ['Magaz 06'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ο συντάκτης μας δοκίμασε τα Windows 98, δεν βρήκε όμως σημαντικές διαφορές από τα Windows 95:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +![](/06/img/badday-anim.gif) + +Για να καταλάβετε καλύτερα τι έγινε δείτε εδώ: [Video\@416Kb](http://www.linux.gr/logos/misc/badday.mpg) +[Video\@5mb](http://wwwcn.cern.ch/~rigaut/badday/badday.mpg) + +Ο συντάκτης μας, αποκαμωμένος, έβριζε την Μικρομαλακή όλη νύχτα. + +Δυστυχώς, δεν ακούσαμε, ακόμα, για κανένα windows-patch που να περιλαμβάνει πληκτρολόγιο με Hardware Reset, ώστε να μην σκύβουμε τουλάχιστον. Τι θα γίνει ο +απλός χρήστης; + +Ας μην ξεχνάμε ότι η M\$ είναι η εταιρία που καθιέρωσε το RESET ως το πλέον χρήσιμο κουμπί ενός \"σύγχρονου\" ηλεκτρονικού υπολογιστή. \'Οχι τίποτα άλλο, μην +χαλάσουμε **ΚΑΙ** το hardware με τα πολλά άνοιξε κλείσε του διακόπτη\... diff --git a/content/articles/06/05_xisp2.md b/content/articles/06/05_xisp2.md new file mode 100644 index 0000000..df53ec0 --- /dev/null +++ b/content/articles/06/05_xisp2.md @@ -0,0 +1,67 @@ ++++ +title = 'Ρυθμίσεις XISP για Ελληνικούς Providers' +date = '1998-07-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 06'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Όπως είχαμε υποσχεθεί στο περασμένο τεύχος, επικοινωνήσαμε με τους περισσότερους (και μεγαλύτερους) ISPs στην Ελλάδα και φτιάξαμε έναν πίνακα με ρυθμίσεις για +να συνδεθείτε πιο εύκολα\... Αν ο δικός σας ISP λείπει από τον πίνακα, ελέγξτε πρώτα μήπως είναι από αυτούς που δεν μας απάντησαν. Αν δεν είναι σε αυτούς, απλά +στείλτε μας ένα [e-mail](mailto:mkabrian@acropolis.gr?subject=ISPs) και θα φροντίσουμε να επικοινωνήσουμε μαζί του, ούτως ώστε να προστεθεί στον πίνακα. Καλές +συνδέσεις\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Εφόσον πολλοί providers δεν μας απαντούν, κι εμείς γράφουμε από προσωπικές μας γνώσεις τις ρυθμίσεις σύνδεσης. Προσοχή: Για αυτές τις ρυθμίσεις δεν φέρει καμία +ευθύνη ο provider. + + --------------- --------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- + \ Emulation Authentication Terminal after Flow-control Software IP Primary DNS Secondary DNS + ISP protocol dialing Compression + + HellasNet PPP PAP Όχι Hardware Dynamic 212.54.192.10 212.54.192.1 + + EEXI \#1 PPP PAP Όχι Hardware Ναι Dynamic 195.167.28.4 195.167.28.3 + + EEXI \#2 Emulated PPP PAP Ναι Hardware Ναι Dynamic 195.167.28.4 195.167.28.3 + + Forthnet PPP CHAP Κατ\' επιλογή Hardware Ναι Dynamic 194.219.227.2 139.91.1.1 + + Groovy-Net PPP PAP Όχι Hardware Ναι Dynamic Αποδίδονται αυτόματα + + Hiway PPP None Ναι Hardware Όχι Dynamic 195.170.22.41 195.170.22.50 + + SparkNet PPP PAP Όχι Hardware Ναι Dynamic 195.66.98.1 195.66.98.2 + + Matrix PPP / SLIP None Όχι Hardware Ναι Dynamic 193.92.133.33 193.92.133.34 + + Otenet \#1 PPP None Ναι Hardware Ναι Dynamic Αποδίδονται αυτόματα + + Otenet \#2 PPP PAP Όχι Hardware Ναι Dynamic Αποδίδονται αυτόματα + --------------- --------------- ---------------- --------------- --------------- --------------- --------------- --------------- --------------- --------------- + +**Providers που δεν μας έχουν απαντήσει** Εγώ προσωπικά, από εδώ και κάτω τους βάζω στη **δική μου** μαύρη λίστα :-) + + ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- + \ Emulation Authentication Terminal after Flow-control Software IP Primary DNS Secondary DNS + ISP protocol dialing Compression + + HellasOnLine PPP None Κατ\' επιλογή Hardware Ναι Dynamic 194.30.220.118 194.30.220.119 + + Acropolis PPP PAP Όχι Hardware Ναι Dynamic 195.200.64.24 195.200.64.80 + + Compulink + + IBM net PPP PAP-s Dynamic 165.87.194.244 165.87.201.244 + + ΤΕΕ + + + ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- ----------------- + +Αν σε κάποιον από τους providers που αναφέρονται παραπάνω, έχει αυτοματοποιήσει κάποιος τη σύνδεση με script στο XISP, θα θέλαμε να μας το στείλει στη [γνωστή +διεύθυνση](mailto:magaz@linux.gr), αφαιρώντας βέβαια τα προσωπικά του πεδία. Θα βοηθήσει πολλούς συναδέλφους και θα έχει και την ευγνωμοσύνη μας :-)\ +Επίσης αν κάποιος έχει στοιχεία για τους providers που δεν μας απαντήσανε, πάλι θα θέλαμε να ξέρουμε τι ρυθμίσεις χρησιμοποιεί. diff --git a/content/articles/06/06_monitors.md b/content/articles/06/06_monitors.md new file mode 100644 index 0000000..4fb2799 --- /dev/null +++ b/content/articles/06/06_monitors.md @@ -0,0 +1,65 @@ ++++ +title = 'Monitor Setup Under Linux' +date = '1998-07-01T00:00:00Z' +description = '' +author = 'Γιάννης Εξηνταρίδης' +issue = ['Magaz 06'] +issue_weight = 6 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Είναι αλήθεια πως το στήσιμο του monitor σε PC είναι ένα από τα πιο απλά και εύκολα πράγματα. Τι γίνεται όμως όταν οι ανήσυχοι χρήστες θέλουν να εκμεταλλευθούν +στο έπακρο τις δυνατότητές του και να μην μείνουν στα καθιερωμένα ;* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πριν από μερικές εβδομάδες απόκτησα επιτέλους το 17άρι monitor της ΕΙΖΟ. Πιο συγκεκριμένα το F55S. Το monitor αυτό επιβεβαιώνει για μια ακόμη φορά τους λόγους +για τους οποίους η EIZO αναδεικνύεται κάθε φορά πρώτη στα αντίστοιχα συγκριτικά τέστ. Η απόδοση του στα Win είναι κορυφαία με μέγιστο refresh rate 120 Hz και +ειδικά στα 1024χ768 έχει refresh rate 100 Hz. Ολα αυτά βέβαια σε συνδυασμό με την αντίστοιχη κάρτα γραφικών. Η δικιά μου (Diamond Stealth 3D 2000 ) συνεργάζεται +άψογα με το monitor με αποτέλεσμα να έχω μια καταπληκτική και ξεκούραστη εικόνα. + +Και αφού έγιναν όλα αυτά ήρθε και η σειρά του Linux. Στο RedHat 5.0 που διαθέτω, ανάλογες ρυθμίσεις γίνονται μέσω του configX ( κάτι αντίστοιχο υπάρχει και στις +άλλες διανομές ). Δυστυχώς επειδή το μοντέλο ήταν από τα σχετικά καινούρια, δεν υπήρχαν αντίστοιχες έτοιμες ρυθμίσεις έτσι αναγκάστηκα να το δηλώσω σαν GENERIC +17\" . Πράγματι λειτούργησε αλλά\.... + +Αλλά τι; Στα 1024χ768 είχα refresh rate 85Hz και στα 1152χ864 είχα 70Hz. Αυτό ήταν αδιανόητο ! Για ποιό λόγο να μην μπορεί το Linux να εκμεταλλευθεί στο μέγιστο +το Monitor ; Προφανώς έφταιγε το GENERIC 17\". Για βέλτιστες ρυθμίσες έπρεπε να \"παίξω\" με το XMetroConfig (αντίστοιχα Xfree86config, για όποιον δεν διαθέτει +MetroX server) το αρχείο δηλαδή που είναι υπεύθυνο για τις περισσότερες και πιο ζωτικές ρυθμίσεις των X. Οι ρυθμίσεις που αφορούν το monitor περιλαμβάνονται στο +Section \"Monitor\". O ρόλος των γραμμών με τίτλο Identifier και ModelName είναι μάλλον προφανός. Τα πιο σημαντικά ακολουθούν μετά. Οι γραμμές που αρχίζουν με +τις λέξεις HorizSync, VertRefresh και ModeLine. Οι δύο πρώτες δίνουν τους ρυθμούς ανανέωσης (οριζόντιους και κάθετους) που υποστηρίζονται από το monitor ενώ το +Modeline είναι υπεύθυνο για τον ρυθμό ανανέωσης σε μια συγκεκριμένη ανάλυση. Οπότε λογικά έπρεπε να φτιάξω τα δικά μου Modelines για να έχω τα refresh rate που +θέλω. Και επειδή οι αριθμοί που ακολουθούσαν δεν μου έδιναν καμμία ένδειξη για το τι έπρεπε να κάνω (καθώς έμοιαζαν περισσότερο με κάποιο γρίφο) κατέφυγα μετά +από ψάξιμο στο αντίστοιχο HOWTO. ( Video Timings HOWTO ) + +Το HOWTΟ πράγματι εξηγεί το τι σημαίνουν αυτοί οι αριθμοί, δεν είναι όμως και το πιο εύκολο πράγμα η εξαγωγή τους, καθώς σχεδόν όλοι αφορούν ορισμένες +\"φρικτές\" τεχνικές λεπτομέρειες. (άσε που πρέπει να είναι διαιρετοί με το 8). Η αλήθεια είναι πως πρέπει να πειραματιστεί κανείς αρκετά και να έχει χρόνο στην +διάθεσή του για να πετύχει το ποθητό αποτέλεσμα. Για να μην περάσω λοιπόν μια μέρα ολόκληρη κάνοντας πολλαπλασιασμούς και διαιρέσεις αναζήτησα στο Web άλλες +πληροφορίες σχετικά. Υπάρχουν αρκετές διάσπαρτες πληροφορίες για monitor σε Χ, για Modelines τα οποία λίγο - πολύ αναφέρουν τα ίδια πράγματα αλλά \... + +\... βρήκα τελικά ένα μικρό προγραμματάκι που κάνει όλη αυτή την δουλειά δηλαδή να υπολογίζει Modelines. Ονομάζεται videogen και δέχεται σαν είσοδο την +επιθυμητή ανάλυση, το μέγιστο Horizontal και Vertical refresh rate που υποστηρίζεται από το Monitor και το dot clock rate της κάρτας γραφικών. ( Προσοχή αυτό +δεν είναι η συχνότητα του RAMDAC της κάρτας ). Σαν αποτέλεσμα το videogen σου βγάζει την μαγική γραμμή που αποτελεί το Modeline. Σίγουρα υπάρχουν και άλλα +τέτοια προγραμματάκια ή και μερικά έτοιμα scripts που κάνουν παρόμοια δουλειά. Αρκεί λίγο ψάξιμο στους γνωστούς ftp servers. Επίσης αν είστε και λίγο τυχεροί +μπορεί να βρείτε έτοιμο το Modeline της οθόνης σας. Υπάρχουν και μερικές άλλες παράμετροι που δέχεται το Modeline αλλά δεν θα αναφερθώ σε αυτές. Πληροφορίες +υπάρχουν σε man pages και απλά λέω ότι αφορύν επί μέρους τεχνικά στοιχεία του monitor. Το αποτέλεσμα των παραπάνω τελικά είναι να βλέπω το KDE σε ανάλυση +1024χ768 με refresh rate 100 Hz. + +Να θυμίσω ότι χρειάζεται ιδιαίτερη προσοχή σε ότι αφορά τα εξαγόμενα refresh rates ( είτε κάνοντας υπολογισμούς με το χέρι, είτε χρησιμοποιώντας κάποιο +πρόγραμμα όπως έκανα εγώ ). Δεν πρέπει σε καμμία περίπτωση να υπερβείτε τα specifications του Monitor γιατί το πιθανότερο θα είναι η καταστροφή του. Σε ακόμη +χειρότερη θέση βρίσκονται παλιά 14\" monitor και γενικά όλα τα ονομαζόμενα fixed - scan, που υποστηρίζουν δηλαδή μόνο ορισμένες συχνότητες και όχι ένα εύρος +συχνοτήτων σε αντίθεση με όλα τα μοντέρνα τα ονομαζόμενα Multisync ( ή Multiscan ή Flexscan ή τέλος πάντων όπως τα ονομάζει ο κάθε κατασκευαστής). Είναι κάτι +που ευτυχώς επισημαίνεται σε οτιδήποτε σχετικό με αυτό το θέμα. + +Ανάφερα παραπάνω τον όρο dot clock rate. ( Είναι ο πρώτος αριθμός στην σειρά των αριθμών που απαρτίζουν το modeline και οποίος δηλώνει τον μέγιστο αριθμό των +pixels που μπορεί να \"γραφτούν\" στην οθόνη από την κάρτα ). Δυστυχώς πολλές κάρτες γραφικών δεν το αναφέρουν στο manual τους. Μια λύση δίνουν τα Χ. Δίνοντας +την εντολή X -probeonly ανάμεσα στα άλλα επιστρέφεται το μέγιστο dot clock rate που υποστηρίζεται από την κάρτα ( χωρίς να ξεκινήσουν τα Χ ). Για την ακρίβεια +τα αποτελέσματα του probing γράφονται στο αρχείο /var/log/Xerrors. Πάντως αν δοθεί κατά λάθος μεγαλύτερο dot clock rate από το υποστηριζόμενο μην ανησυχείτε. +Απλά τα Χ δεν θα ξεκινήσουν και θα αναφέρουν σχετικό μήνυμα λάθους. + +Ισως αντιληφθήκατε ότι με τον παραπάνω τρόπο παρέχεται μια τεράστια ευελιξία σε ότι αφορά τις αναλύσεις. Πράγματι μπορεί άνετα κάποιος να χρησιμοποιήσει +οποιαδήποτε ανάλυση εκτός από τις συνηθισμένες ( 800χ600 , 1024χ768 κ.λπ ) με πάντα την απαραίτητη προϋπόθεση τα αντίστοιχα refresh rates να είναι +υποστηριζόμενα από το monitor. Αυτό είναι κάτι που δεν πρέπει να εκπλήσσει. Πράγματι αρκετά DOS-based games τρέχουν σε δικιά τους ανάλυση εκτός από τις +συνηθισμένες. Είναι ένα ευπρόσδεκτο αποτέλεσμα των low - level ρυθμίσεων. + +Τα παραπάνω ελπίζω να βοηθήσουν αρκετούς να πετύχουν το μέγιστο δυνατό αποτέλεσμα από το monitor τους πάντα με την απαραίτητη προσοχή. Τo Linux αποδεικνύεται +και σε αυτό τον τομέα αρκετά ισχυρό και ευέλικτο. diff --git a/content/articles/06/07_mailbox.md b/content/articles/06/07_mailbox.md new file mode 100644 index 0000000..826fe22 --- /dev/null +++ b/content/articles/06/07_mailbox.md @@ -0,0 +1,352 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-07-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 06'] +issue_weight = 7 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ουφ, τι πανικός ήταν από γράμματα και αυτή την φορά\... Προετοιμαζουμε μια φόρμα ερώτησης ούτως ώστε να αρχειοθετούνται πιο εύκολα τα γράμματα, και να μην +χανονται στα mailboxes. Προς αναμονή του καλύτερου, διαβάστε τι μας ρωτήσατε και τι σας απαντήσαμε αυτό το μήνα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Iomega Parallel ZIP drive** +---------------------------------------------------------- + +**2. Ρυθμίσεις modem** +------------------------------------------------ + +**3. Ελληνικές γραμματοσειρές** +--------------------------------------------------------- + +**4. Editor για την κονσόλα** +------------------------------------------------------- + +**5. Κάτι για την IP** +------------------------------------------------ + +**6. AMD K6 και Linux** +------------------------------------------------- + +**7. Προβλήματα Xisp** +------------------------------------------------ + +**8. Βιβλία** +--------------------------------------- + +**9. Uninstall Linux!!!** +--------------------------------------------------- + +**10. Πολλές ερωτήσεις** +---------------------------------------------------- + +**11. Slackware Linux** +--------------------------------------------------- + +**12. NT σε Linux** +----------------------------------------------- + +**13. Σύνδεση στο Internet** +-------------------------------------------------------- + + +### [1. Iomega Parallel ZIP drive]{#s1} + +Από : [Χρήστος Βαρελάς](mailto:cvar@startrek.csd.auth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Hi guys,\ +Does anyone of you know how to get IOMEGA Parallel ZIP Drive to work under Linux? I\'m runnin\' RedHAt Linux 5.1 with 2.0.35 kernel. What settings do I have to +make on kernel\'s configuration? + +*The only thing I know about that, is a kernel option in the scsi section for PPA (iomega parallel adapter). I do know that you can\'t operate your printer and +Zip together, so load ppa as module.* + +Thanks in advance for your time and help. + +*Sorry for not being so helpfull -(* + + +### [2. Ρυθμίσεις modem]{#s2} + +Από : [Λεωνίδας Τζίμης](mailto:tzimis@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γειά σας.\ +Εχω το REDHAT 5.0 και δεν μπορώ να το κάνω να δουλέψει με τo dialup. Το modem μου θέλει την εντολή \"atx3\" για να καθαρίσει το buffer του. Στα win και στο dos +βάζω την εντολή atx3 στις \"άλλες παράμετροι\". Στο REDHAT πως το κάνω? Παρακαλώ εαν είναι εύκολο δώστε μου λεπτομέρειες. + +*Πρώτα από όλα, να ξεκαθαρίσουμε ότι το atx3 ΔΕΝ καθαρίζει κανένα buffer, απλά λέει στο modem (μεταξύ άλλων) να μην περιμένει να ακούσει dialtone για να πάρει. +Αυτό, για τον απλούστατο λόγο ότι το dialtone του OTE δεν το καταλαβαίνουν πολλά modems.\ +Τώρα για το RedHat δεν ξέρω (μια που δεν το έχω) αλλά γενικά, αν δεις κανένα init string οπουδήποτε, βάλε του ένα x3 κάπου. Λογικά θα παίξει. Βέβαια η πιο +εύκολη λύση είναι να το γράψεις στο modem αυτό.\ +Συνδέεσαι με το minicom.* + +- Δνεις at και το modem απαντάει ok +- Δίνεις atx3 και το modem ξαναπαντάει ok +- Δίνεις at&w0 και το modem (για άλλη μια φορά) απαντάει ok + +*Αυτό που έχεις κάνει τώρα, είναι να βάλεις το atx3 στην μνήμη του modem και να το χρησιμοποιεί ως default.* + +Στο KDE πως θα βάλω τις παραμέτρους για το modem? + +*Στο kppp έχει σίγουρα την επιλογή Init string. Όπως είπαμε και πιο πάνω\...* + + +### [3. Ελληνικές γραμματοσειρές]{#s3} + +Από : [Χρήστος Βαρελάς](mailto:cvar@startrek.csd.auth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γεια σας παιδιά!\ +Αναρωτιέμαι αν υπάρχει κάποιο CD με ελληνικές γραμματοσειρές (Postscript, Type 1, κλπ) που μπορούν να εγκατασταθούν και να δουλέψουν σωστά στα X. Γνωρίζω ότι +κυκλοφορούν κάτι τέτοια CDs για Macintosh. Το θέμα είναι ότι εδώ στη Θεσσαλονίκη όσο κι αν έψαξα δεν μπόρεσα να βρω κάτι σχετικό. Γνωρίζει κάποιος από εσάς +κάτι; + +*Όχι, δεν έχω ιδέα. Εγώ προσωπικά χρησιμοποιώ τις γραμματοσειρές που βρίσκει κανένας σε οποιοδήποτε ελληνικό site (argeas, ntua, forthnet, hol κλπ)* + +Και κάτι άλλο\... χρησιμοποιώ το Netscape Navigator 4.05 κάτω από το KDE 4.0 και ενώ βλέπω κανονικά τα ελληνικά στη σελίδα σας, στην title bar όπως και σε +κάποια buttons, στη θέση των ελληνικών βλέπω κινέζικα. Κάποια ιδέα που θα έλυνε το πρόβλημα; Εγκατάσταση κάποιων γραμματοσειρών ίσως;  + +*Με την τελευταία έκδοση του KDE (1.0) βγήκε στο incoming του ένα αρχείο Communicator.ad Αυτό λέει στο Netscape να χρησιμοποιεί τα +fonts του KDE, οπότε στο Title bar (αν το έχεις ρυθμίσει έτσι το KDE) θα βλέπει ελληνικά. Για τα buttons δέν ξέρω. Θα το ψάξουμε όμως και θα ενημερώσουμε τη +λίστα αν βρούμε άκρη. Εξάλλου, γι\' αυτό και τα buttons του magaz είναι δίγλωσσα -)* + +Ευχαριστώ προκαταβολικά για το χρόνο και τη βοήθειά σας \-- συνεχίστε την πραγματικά πολύ καλή δουλειά στο Magaz!!!\ +Χρήστος Βαρελάς + +*Ευχαριστούμε για τα καλά σου λόγια\ +Για το Magaz* + + +### [4. Editor για την κονσόλα]{#s4} + +Από : [Μαγκλάρας Δημήτρης](mailto:mlf@eexi.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Το μεγαλύτερό μου πρόβλημα με το Linux είναι η μη ύπαρξη ενός εργονομικού editor (editor που να υποστηρίζει πολλαπλά παράθυρα, και όχι να αποθηκεύει διαφορετικά +κείμενα σε buffers, να ακολουθεί την Uniform SAA της ΙΒΜ, και να επιδέχεται παραμετροποιήσεως). Ιδανικό και αξεπέραστο θεωρώ τον Aurora 3.0 (for DOS).\ +Υπάρχει αντίστοιχος στο Linux? H μήπως πρέπει γιά να εργασθείς ικανοποιητικά να το αποφασίσεις ότι πρέπει να χρησιμοποιηθεί το γραφικό περιβάλλον, όπου κάποια +λύση προσφέρει ο nEdit? + +*Προσωπικά αγνοώ, και αφού δεν απάντησαν οι υπόλοιποι, θεωρώ ότι αγνοούν και αυτοί.\ +Sorry -(* + + +### [5. Κάτι για την IP]{#s5} + +Από : [Σταματόπουλος Θοδωρής](mailto:thodoris@evronet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Διάβασα το IP MASQUERADING και είχα την εξής απορία. Μπορώ άμα δεν έχω ethernet να μπωψ με dummy ip και όταν θα έιμαι π.χ. στο irc και μου κάνουν whois να +βλέπουν αυτή τη dummy ip για να ποφεύγω κολήματα; + +*Λογικά όχι, γιατί η IP του \"router\" (ας το πούμε έτσι αν και είναι πολύ λάθος η έκφραση) που είναι η IP του dial-up adapter, φαίνεται προς τον έξω κόσμο, +οπότε\...\ +Μια δοκιμή όμως θα σε πείσει (και θα μας ενημερώσεις, έτσι;)\ +Για το Magaz* + + +### [6. AMD K6 και Linux]{#s6} + +Από : [Βελέντζας Αλέξανδρος](mailto:belale@it.teithe.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Αρχικά θα ήθελα να σας πω ότι δεν έχω το linux, αλλά διαβαζοντας τους τελευταίους μήνες σε περιοδικά (κυρίως το RAM) γι αυτό, ενθουσιάστηκα και αποφάσισα να το +βάλω στο συστημά μου, γι αυτό και θα ήθελα να σας κάνω κάποιες ερωτήσεις.  + +*Ουφ, καιρός ήταν να το βάλεις. οσο για τις ερωτήσεις, ιδού οι απαντήσεις.* + +1\. Διάβασα ένα γράμμα στο τελευταίο σας τεύχος όπου γράφατε ότι δεν εχετε ακούσει το linux να έχει πρόβλημα με τον AMD K6. Υπάρχει κάποιος που να έχει +δοκιμάσει το linux με αυτόν τον επεξεργαστή και να ξέρει ότι σίγουρα δεν έχει πρόβλημα? + +*Ναι. Για περισσότερες πληροφορίες θα πας στα [archives της λίστας](http://argeas.argos.hol.gr/lists) και θα ψάξεις για AMD K6. Εκεί θα δεις τις συζητήσεις που +έχουν για αυτό το θέμα.* + +2\. Επειδή δεν θέλω να αποχωριστώ τα windows και το dos (βλ. συμβατότητα με τα προγραμματα που χρησιμοποιούν οι φίλοι μου, games diablo, starcraft, riven \... , +γνώριμο περιβάλλον κ.τ.λ.) θέλω να ρωτήσω το εξής μπορώ να εγκαταστήσω το linux σε ένα ξεχωριστό partition και να εχω και windows και linux ΧΩΡΙΣ προβλήματα? + +*Φυσικά. Εξάλλου, το 90% των χρηστών Linux, κάπου έχει και ένα partition με Windows 95 (για τους ίδιους λόγους που το θέλεις και εσύ).* + +Αυτά προς στιγμήν, ευχαριστώ για το χρόνο που διαθέσατε να διαβάσετε και να απαντήσετε (ελπίζω) το γράμμα, και συνεχίστε την καλή δουλειά. + +*Κανένα πρόβλημα.\ +Για το Magaz* + + +### [7. Προβλήματα Xisp]{#s7} + +Από : [Βαγγέλης Τσουλής](mailto:vagelist@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Παιδιά, ακόμα δεν έχω πάρει απάντηση για το προηγούμενο ερώτημα που σας είχα θέσει σχετικά με το signal 11 του compiler. Κατάφερα όμως να βρώ την λύση. Ας είναι +καλά το Dejanews.com + +*Sorry, το mail σου θα ξεχάστηκε σε κανένα από τα mailboxes!!!* + +Το προβλημα όμως με το compilation  του Xisp (μάλλον το linking τώρα) εξακολουθεί να υπάρχει με την μορφή δεκάδων!!! μυνημάτων της μορφής (xisp.o (.text+AAAAAA) +Undefined reference to \'BBBBBBBBBB\'.) οπου ΑΑΑΑΑ κάποιος αριθμός σαν τον 0χ14076 (φαντάζομαι κάποια διεύθυνση μνήμης) και ΒΒΒΒΒΒBΒ κάτι σαν το +\"fl\_add\_text\" (φαντάζομαι κάποια συνάρτηση την οποία ψάχνει να βρεί). Το Dejanews εδώ δεν κατάφερε να με βοηθήσει. Υποθέτω ότι κάπου μέσα στα RPMS του CD +του RedHat θα υπάρχει κάποια βιβλιοθήκη την οποία δεν έχω κάνει Install. Ψάχνω και δεν τη βρίσκω!. Ισως το Xisp να υπάρχει σε μορφή RPM (δέν το έχω ψάξει). Όμως +επειδή έχω πεισμώσει με το  compilation, please δώστε μου μια λύση. Εχω το RedHat τόσες μέρες και ακόμα δεν έχω κάνει σύνδεση με το Net. + +*Μάλλον για το XISP το πιο καλό θα ήταν να στείλεις ένα bug-report στον [Δημήτρη Μπούρα](mailto:dbouras@hol.gr) που το έχει γράψει, αλλά πριν το κάνεις αυτό, +δοκίμασε να κατεβάσεις από [την σελίδα του](http://users.hol.gr/~dbouras) την τελευταία έκδοση (2.5)* + + +### [8. Βιβλία]{#s8} + +Από : [Mητριτσάκης Βαλέριο Πάρις](mailto:gri@teihan.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Ονομάζομαι Βαλέριο Πάρις Mητριτσάκης και είμαι ένα από τα νέα μέλη της ελληνικής κοινότητας Linux. Δυστυχώς δυστυχώς δεν ξέρω τόσα όσα θα έπρεπε να είχα μάθει +στους 2 - 3 μήνες που έχω εγκαταστήσει το RedHat 5.0. Παρόλα αυτά η αναζήτηση πληροφοριών για το Linux από τις παραδοσιακές οδούς (βλέπε βιβλία) στα Χανιά είναι +αδύνατη. + +*Καλώς ήρθες!* + +Τέλος πάντων για να μην σας κουράζω, συγχαρητήρια για τις προσπάθειες σας. Θα ήθελα αν ειναι εύκολο να μου προτείνεται μερικά βιβλία να ξεστραβωθώ και έτσι την +επόμενη φορα να σας στειίλω email από Linux και όχι από Outlook express και Windows (ούπς!!!) + +*Ένα καλό βιβλίο είναι το Running Linux του Welsh. Δυστυχώς δεν έχα άλλα υπόψιν μου κατά τίτλο να σου πω, αλλά μπορείς να βρεις αρκετά και για πιο συγκεκριμένα +θέματα στον εκδοτικό οίκο [O\'Reilly](http://www.oreilly.com/).* + + +### [9. Uninstall Linux!!!]{#s9} + +Από : [Βαγγέλης Τσουλής](mailto:vagelist@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Παιδιά χρειάζομαι την βοήθειά σας. Εχω εγκαταστήσει το RedHat 5.0 σε ένα partition  του σκληρού μου. Πρόσφατα όμως απόκτησα και έναν δεύτερο σκληρό.Αυτό σημένει +ότι θέλω να απεγκαταστήσω το linux από το partition που είδη υπάρχει και να το εγκαταστήσω στον δεύτερο σκληρό.Από τα win βέβαια δεν μπορώ να δώ το partition +του linux, άρα δεν μπορω να το σβήσω.Πως μπορώ να κάνω το Linux partition ξανά dos partition; να ξαναδώ δηλ τα γνωστα C και D; + +*Υποθέτω ότι έχεις βάλει το Linux στο δεύτερο partition. Αν πράγματι είναι έτσι, ανάβεις τον υπολογιστή σε καθαρό dos (από το Lilo διαλέγεις την επιλογή για +windows, πατάς F8 και επιλέγεις το Command mode) και τρέχεις το Fdisk, το οποίο θα σου αναφέρει το D partition ως άγνωστο. Το κάνεις delete και ξανά create και +είσαι έτοιμος.\ +Ουυυπς, παραλίγο να το ξεχάσω. Μετά το fdisk και πριν κάνεις reboot, γράψε ένα fdisk /mbr για να σου σβήσει το LILO (μόνο αν το έχεις στο mbr)* + +κατ\'αρχήν ευχαριστώ για την γρήγορη απάντηση! Το προβλημα όμως δεν λύθηκε. Έκανα ακριβώς αυτά που μου γράψατε, αλλά δεν είχα αποτέλεσμα. το fdisk βλεπει το +linux partition  σαν extended Dos partition. Δινω Delete partition or logical dos drive και μετά Delete extended Dos Partition. Η απάντηση Cannot delete extened +dos partition while logical drives exists. Δινω Delete logical Dos Drives in the extended dos partition. Απαντηση No logical drives defined No logical dos +drives to delete. Και το κουφό!!! Δινω Display partition information και μου λέει ότι the exteneded dos partition contains logical dos drives. Do you want to +display the logical drive information? Δινω yes και απαντά νο logical drives defined.!!!!!!! ΤΑ ΝΕΥΡΑ ΜΟΥ!!!!!!!!! Εχω win 95 osr2 με FAT32. Όλα αυτά τα +δοκίμασα κάνοντας boot και με δισκέτα με προηγούμενη έκδοση του DOS. + +*Ιδέα!!! Στήσε το Linux στον δεύτερο δίσκο, τρέξε το fdisk από το Linux, άλλαξε το flag του partition του πρώτου δίσκου που έχει το (D) από linux (82 ή 83 αν +θυμάμαι καλά) σε dos (αυτό δεν το θυμάμαι καθόλου) και ξανακάνε τη διαδικασία. Αυτή τη φορά, μην κάνεις fdisk /mbr (αφού θα έχει μπει το νέο lilo που δεν θέλεις +να σβηστεί.)\ +Καλή επιτυχία.* + + +### [10. Πολλές ερωτήσεις]{#s10} + +Από : [Κώστας Καλεβράς](mailto:mkalevra@central.ntua.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γειά σας.Έχω αρκετές απορίες σχετικά με το Redhat Linux 5.0. Δεν έχω καταλάβει πως πηγαίνουν τα links για τα Χ. Καποια φορά κατα λάθος άλλαξα κάποιο απο αυτά +και απο τότε δεν μπορώ να βγάλω άκρη με τίποτα. Please help me. + +*Αν εννοείς το link του X-server, τρέξε το xf86config και θα στο φτιάξει μόνο του. Αν εννοείς άλλα links\....\ +* 2)Αν θέλω σε ασχετη στιγμή να περάσω τα Χ και οχι κατα το install πως ακριβώς μπορώ να το κάνω? + +*Πας στο CD του Redhat, στο directory RPMS και γράφεις\ +ls X\*\ +επιλέγεις τα πακέτα που θέλεις και γράφεις\ +rpm -i \"όνομα πακέτου που θέλεις\"\ +Αν τώρα τα ονόματα δεν τα βρίσκεις και πολύ κατατοπιστικά, μπορείς να πας σε αυτό το directory με το midnight commander (mc) και να \"ανοίξεις\" τα rpms να δεις +τι περιέχουν.* + +3\) Επειδή μου την έχουν δώσει τα Windows 98 μπορείται να μου πείτε πως μπορούν να μπουν πολλαπλές οθόνες στο Linux? + +*Δες το . Δεν το έχω δοκιμάσει ποτέ, αλλά\... Επίσης, η τελευταία έκδοση (4.3) του MetroX από την Metrolink +υποστηρίζει πολλές οθόνες στα X με πολλές κάρτες οθόνης, αλλά μόνο με κάρτες Matrox.* + +4\) Έχω ένα παλιό 286 με hercules και 640 Kb RAM.Θα ήθελα να ξέρω αν υπάρχει κάποιος τρόπος με PLIP ETHERNET or whatever να τον χρησιμοποιήσω ως τερματικό; Όταν +λέω τερματικό εννοώ μόνο shell prompt και τίποτα αλλο. + +*Ναι, τρέχεις ένα kermit (ή κάτι τέτοιο) και του κάνεις σύνδεση στην σειριακή θύρα. Θα χρειαστείς ένα \"null-modem\" cable. Πιο πολλές πληροφορίες στο +NET-3-HOWTO* + +5\) Πώς μπορώ με telnet ή κατι άλλο απο δίκτυο ή Internet να τρέξω τα Χ?Έχω περάσει και το ΚDE αν αυτό χρειάζεται σε τίποτα. + +*Στον client δίνεις την εντολή xhost\ +client/\> xhost + server.ip.address\ +Στέλνεις το display, από τον server στον client\ +server/\> export DISPLAY=client.ip.address:0.0\ +Γράφεις\ +server/\> xterm &\ +Έχεις το xterm του server στην οθόνη του client.* + +6)Ποιό πακέτο ελληνικών θα τρέξει στο Redhat? Κυρίως τα χρειάζομαι για τα Χ. Επίσης στο Netscape παρότι αλλάζω το encoding σε ό,τι ελληνικό έχει βλέπω πάλι +αραβικά.Υπάρχει καμια σωτηρία? + +*Από το δεύτερο ξεκινώντας, έχεις περάσει ελληνικά fonts? Αν όχι, δοκίμασε να τα πάρεις από το . Για το πρώτο, υπάρχουν 3 +υλοποιήσεις αυτή τη στιγμή: Κατά αλφαβητική σειρά, του Δημήτρη Μπούρα το grXISOkbd, στην έκδοση 1.2 beta 3, του Γιάννη Τσακίρη το grkbd, στην έκδοση 1.2, +κάποιου άλλου (sorry αλλά δεν θυμάμαι το όνομα), ένα map για το kikbd.* + +7\) Τέλος υπάρχει κανένα site για προγραμματισμό σε Χ και για Στήσιμο δικτύων (Web servers, ethernet lan\'s, IP masquerading \...)? + +*Δεν ξέρω καθόλου σελίδες με τέτοια θέματα, αλλά μπορείς να πας για αρχή στα και και από εκεί να +ακολουθήσεις τα αντίστοιχα links.* + + +### [11. Slackware Linux]{#s11} + +Από : [Βαγγέλης Βλάχος](mailto:vagous@hol.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Γεια σας,\ +μόλις άρχισα την περιήγησή μου στον κόσμο του linux και ενώ έχω αγοράσει ένα βιβλίο για το slackware linux θέλω να ρωτήσω τα εξής:\ +Πρώτον εάν μπορώ να αγοράσω το slackware σε cd  + +*Ναι, μπορείς\... βγαίνει από το Walnut Creek CD-ROM και το έχουν τα πιο πολλά καταστήματα που πουλάνε σχετικά με Linux πράγματα (π.χ. Παπασωτηρίου)* + +και δεύτερον, εαν έχουν μεγάλη διαφορά τα διάφορα είδη linux π.χ. debian, red hat  από το slackware ως προς τις εντολές ή οτιδήποτε άλλο. + +*Κοίτα, ως προς τις εντολές, \.... όχι, δεν έχουν διαφορές. Τουλάχιστον σημαντικές διαφορές που να επηρεάζουν τον απλό χρήστη. Υπάρχουν διαφορές όμως στον τρόπο +που εγκαθιστάς καινούρια πακέτα, στον τρόπο που διαχειρίζεσαι γενικότερα το σύστημά σου, πως φτιάχνεις χρήστες, κτλ. Αυτά όμως είναι που κάνουν κάποιον να +προτιμήσει το alpha distribution από το beta, και το ανάποδο\...* + + +### [12. NT σε Linux]{#s12} + +Από : [Βαγγέλης Βλάχος](mailto:vagous@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Ευχαριστώ που απαντήσατε στο προηγούμενο mail μου, πλέον έχω αποκτήσει το slackware linux αλλά θέλω και να δουλεύω και τα winNT. Θα ήθελα να μου απαντήσετε στο +πως θα μπορέω να έχω σαν κύριο OS το linux και μέσα από αυτό να τρέχω τα win NT, τα οποία βέβαια να βρίσκονται σε άλλο partition. (με εντολές linux). Ευχαριστώ +για τον χρόνο που μου αφιερώνετε + +*Μμμ, αυτό το \"με εντολές linux τι σημαίνει\"; Βασικά ψάχνεις για τρόπο να βαλεις στο Linux τα ΝΤ; Δεν υπάρχει. Το κοντινότερο που υπάρχει σε αυτό που θέλεις +είναι το BOCHS, αλλά δεν νομίζω ότι είναι για δουλειά ακόμα. Δηλαδή είναι σε alpha έκδοση κλπ κλπ κλπ συν το ότι δεν ξέρω αν δουλεύει με τα NT. Θα το βρεις στο +.* + + +### [13. Σύνδεση στο Internet]{#s13} + +Από : [Δημήτρης Τζέμος](mailto:djemo@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Εχω το RedHat 5.0 Linux. Πως μπορώ να συνδέομαι με το modem provider (TEE Τεχνικό Επιμελητήριο Ελλάδος). Πως θα δώσω το DNS και χρησιμοποιώντας ποιό εργαλείο το +Network Configuration. Στο σύστημα μου εχω dos 6.22, windows 95 και σε άλλο partition Linux.(redhat 5). + +*Κατεβάζεις το xisp από το . Διαβάζεις το άρθρο για τις ρυθμίσεις του στο [τεύχος 5](../05/06_xisp.html). Είσαι έτοιμος :-)* + diff --git a/content/articles/07/01_editorial.md b/content/articles/07/01_editorial.md new file mode 100644 index 0000000..d7fd265 --- /dev/null +++ b/content/articles/07/01_editorial.md @@ -0,0 +1,34 @@ ++++ +title = 'Editorial' +date = '1998-09-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 07'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Να και το πρώτο τεύχος του Φθινοπώρου\... Τι καλό έχουμε εδώ; Το καλύτερο. Επέκταση της συντακτικής ομάδας του Magaz.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Εκτός από τους τέσσερις που ξεκινήσαμε δηλαδή οι [Βρυώνης Παναγιώτης](mailto:vrypan@hol.gr), [Γεωργάτος Φώτης](mailto:gef@ceid.upatras.gr), [Κεραμίδας +Γιώργος](mailto:keramida@ceid.upatras.gr) και [Καμπριάνης Μιχάλης](mailto:mkabrian@acropolis.gr) και τον [Ευριπίδη Παπακώστα](mailto:epapakostas@ametro.gr) που +προστέθηκε σιωπηρά λίγο αργότερα, τώρα έχουμε δύο νέα μέλη: τους [Κόκρα Νίκο](mailto:kokni@eexi.gr) και [Παπαδογιαννάκη Βαγγέλη](mailto:papas@rocketmail.com). +Αν φτάσουμε να είμαστε πιο πολλοί εμείς που γράφουμε από εσάς που διαβάζετε, να μας το πείτε να συμμαζευτούμε :-) + +Σε αυτό το τεύχος, υπάρχει το κλασικό πλέον [Linux zone](02_lz4.html) από τον Παναγιώτη Βρυώνη. + +Υπάρχει ένα πολύ χρήσιμο άρθρο από τον Νίκο Κόκρα σχετικά με το [σύστημα αρχείων του Linux](03_fs.html) + +Ο Ευριπίδης, πάντα πολυτεχνίτης, μας βοηθάει να στήσουμε το [wacom πενάκι μας στα X-Windows](04_wacom.html). Πιο κοντά στους γραφίστες; + +Ο Βαγγέλης Παπαδογιαννάκης προσπαθεί να βρει [σε ποιους απευθυνόμαστε και πως να τους προσεγγίσουμε](05_analysi.html). Σε όλους, Βαγγέλη :-) + +Τέλος, υπάρχει και η ανανεωμένη [λίστα Ελλήνων χρηστών Linux](../glist.html). Εσείς γραφτήκατε; Αν όχι, τρέξτε\... + +Και βέβαια, δεν θα μπορούσε να λείπει η, τεράστια αυτή τη φορά, [στήλη της αλληλογραφίας](06_mailbox.html). Εσείς μας γράφετε, κι εμείς\... + +Να σας υπενθυμίσω, ότι όπως πάντα, το magaz φιλοξενεί άρθρα, από όλους τους φίλους συνlinuxάδες, ενώ έχουμε ακόμα \"ανοιχτές θέσεις\" συνεργατών\... + +Καλή ανάγνωση, και καλό φθινόπωρο. diff --git a/content/articles/07/02_lz4.md b/content/articles/07/02_lz4.md new file mode 100644 index 0000000..43d85e0 --- /dev/null +++ b/content/articles/07/02_lz4.md @@ -0,0 +1,56 @@ ++++ +title = 'Linux Zone' +date = '1998-09-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 07'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το Linux Zone είναι μία στήλη που σκοπό της έχει να παρουσιάζει μερικές από τις εμπειρίες μου στον χώρο του Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δυστυχώς, λόγω χρόνου, το LinuxZone αυτού του μήνα θα είναι λίγο μικρό. Ας ελπίσουμε κάτι καλύτερο για το επόμενο. + +Πρώτα πρώτα, σχετικά με τα XFGreekFNTS και XFGreekKBD. Χρειάστηκαν λίγη ακόμη δουλειά και τώρα πια μπορείτε να τα βρείτε και τα δύο στο + Από τα e-mails που μου έχετε στείλει, έχω καταλάβει ότι τουλάχιστον σε RedHat 5.1 δουλεύουν χωρίς κανένα ιδιαίτερο πρόβλημα. +Λέω \"ιδιαίτερο\" γιατί όταν ξεκινάτε προγράμματα στα X-Windows μπορεί να δείτε μηνύματα όπως \"unknown character set\". Νομίζω ότι ο λόγος είναι μία +ασυμβατότητα μεταξύ glibc και X-Windows, αφού στην μέν πρώτη τα ελληνικά ορίζονται με gr\_GR ενώ στα δεύτερα με el\_GR. Παρά τα μηνύματα πάντως, δεν φαίνεται να +υπάρχει κανένα ουσιαστικό πρόβλημα. Αν κάποιος ξέρει την λύση στο παραπάνω πρόβλημα, ας μου στείλει ένα e-mail\... + +Μετά από τρείς μήνες που δεν είχα μπεί στα Windows95 ούτε μία φορά, αποφάσισα να χαρίσω στο Linux και το partition των Windows95. Το φορμάρισα λοιπόν σαν ext2 +partition (με + + mkfs -t ext2 /dev/hda1 + +), αντέγραψα τα περιεχόμενα του /usr/local σε αυτό και το έκανα mount στο /usr/local. + +Ένας από τους λόγους που ήθελα επιπλέον χώρο για το linux ήταν για να κατεβάσω ολόκληρο το CVS tree του GNOME (GNU Network Object Model Environment). Το +[GNOME](http://www.gnome.org) είναι ένα desktop environment (σκεφτήτε το κάτι σαν KDE). Αν και ακόμη βρίσκεται πολύ πίσω από το KDE (το οποίο από την version 1 +είναι πια σταθερότατο, λειτουργικότατο και ολοκληρωμένο) όλα δείχνουν όμως ότι δεν θα αργήσει να το φτάσει. Με δυνατότητες όπως η υποστήριξη του CORBA και +εντυπωσιακό look, πιστεύω ότι θα αποτελέσει ένα ακόμη πόλο έλξης για χρήστες και προγραμματιστές. Το σίγουρο είναι ότι KDE και GNOME θα κάνουν όλο και πιο +ενδιαφέρον το linux. + +Μετά από αρκετές δυσκολίες (οι οποίες τελικά προέρχονταν από το γεγονός ότι δεν κατέβαζα όλα τα modules την ίδια μέρα και δεν ήταν συγχρονισμένα) κατάφερα να το +κάνω compile αλλά δυστυχώς όχι και να το τρέξω\... Όποιος δεν έχει όρεξη να ταλαιπωρηθεί λοιπόν ας περιμένει λίγο καιρό, μέχρι οι εκδόσεις να γίνουν πιο +σταθερές, αλλά ας του δώσει μία ευκαιρία να αποδείξει τί αξίζει. + +Τα καλά νέα αρχίζουν και αποκτούν μορφή χιονοστηβάδας. Μετά την Netscape που δήλωσε την αμέριστη συμπαράστασή της στο linux, την πλατφόρμα \"μας\" αποφάσισαν να +υποστηρίξουν και οι Informix, Oracle και Corel!!! Όλα αυτά δείχνουν ότι αρχίζουν και μας παίρνουν σοβαρά. + +Για εμένα όμως τα καλύτερα νέα που άκουσα τον τελευταί καιρό προέρχονται από το φιλικό μου περιβάλλον\... Ένας φίλος που μετά από πλύση εγκεφάλου αποφάσισε να +βάλει linux μου δήλωσε εντυπωσιασμένος. Το θέμα είναι πρώτον ότι ο άνθρωπος δεν είναι κανένας unix-guru, ούτε είναι φοιτητής να έχει ατελείωτες ώρες να +\"ταλαιπωρεί\" και να ταλαιπωρείται από το μηχανημά του. Απλά του έδωσα το RedHat 5.1 και με λίγη τηλεφωνική υποστήριξη από εμένα κατάφερε να το εγκαταστήσει, +να βάλει το KDE, να κάνει να δουλέψει το ZIP drive, ο εκτυπωτής κ.λ. Αυτό που είναι όμως πιο ωραίο, είναι ότι είναι εντυπωσιασμένος από μία εφαρμογή που δεν +είναι web/mail/proxy/file/οτιδήποτε server, αλλά ένα πακέτο μαθηματικών, το octave. + +Το Octave είναι ένα free implementation του matlab, συμβατό με αυτό σε εντυπωσιακό βαθμό αλλά όχι 100%. Αφού το εγκατέστησε, μου δήλωσε ότι είναι καταπληκτικό +(αυτό από ένα χρήστη του Matlab σε Windows95\...) και ότι έχει βρει πράγματα που δεν μπορούσε να κάνει στο Matlab! Εγώ από μέρους μου θα συνεχίσω να τον βοηθάω, +αλλά του έχω πει ότι ΠΡΕΠΕΙ να γράψει ένα άρθρο για το magaz που να παρουσιάζει το Octave. Μείνετε συντονισμένοι. + +Κάτι ακόμη. Από έγκυρη πηγή έμαθα ότι ένα πρόγραμμα που χρησημοποιήται από τον στρατό μεταφέρθηκε από τα ακριβα συστήματα που είχαν σε ένα Pentium 100 με 16 ΜΒ +και linux με εντυπωσιακά αποτελέσματα. Οι άνθρωποι δεν πιστεύουν στα μάτια τους! + +Τελικά όποια πέτρα και να σηκώσεις, από κάτω θα βρεις το linux. Λέτε να γινόμαστε mainstream ; diff --git a/content/articles/07/03_fs.md b/content/articles/07/03_fs.md new file mode 100644 index 0000000..46ecd2c --- /dev/null +++ b/content/articles/07/03_fs.md @@ -0,0 +1,86 @@ ++++ +title = 'The Linux filesystem standard' +date = '1998-09-01T00:00:00Z' +description = '' +author = 'Νίκος Κόκρας mailto:kokni@eexi.gr(mailto:kokni@eexi.gr)' +issue = ['Magaz 07'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Όπως όλοι γνωρίζουμε ακόμη και η πιο \"γυμνή\" εγκατάσταση του αγαπημένου μας λειτουργικού, έχει μια σειρά από directories, τα οποία δημιουργούνται αυτόματα +και είναι στην πλειονότητά τους απαραίτητα για την ορθή λειτουργία του συστήματος.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η δομή του λεγόμενου directory tree είναι πιθανώς οικεία σε όσους έχουν εμπειρία και από άλλα \*nix-οειδή λειτουργικά. Το Linux δεν αποτελεί εξαίρεση, αν και +μικροδιαφορές πάντοτε παρατηρούνται. Αυτό που ακολουθεί είναι μια \*σύντομη\* παρουσίαση του filesystem. Για όποιον ενδιαφέρεται, υπάρχει το +[FSSTND](ftp://ftp.funet.fi/pub/Linux/docs/fsstnd). Αυτό είναι ένα standard που εξηγεί πολύ κατανοητά, τι υπάρχει, που και γιατί στην δομή του Linux filesystem + +Στο root, κανονικά δεν πρέπει να υπάρχουν αρχεία, προκειμένου να διατηρείται μικρό. Τα directories που περιέχει είναι: + +- /boot Σε αυτόν το κατάλογο βρίσκουμε τα απαραίτητα αρχεία για τον boot loader. Οι πυρήνες συχνά φυλάσσονται εδώ και γενικά όποιος χαλάσει αυτόν το κατάλογο, + κατά την επανεκκίνηση θα έχει\... κάποια\...προβλήματα. Σε συνδυασμό με το /sbin σηκώνουν το λειτουργικό.\ +- /etc (κλπ) Εδώ βρίσκει κανείς το μεγαλύτερο μέρος των configuration files τα οποία είναι ειδικά για κάθε σύστημα (δεν έχει νόημα ο διαμοιρασμός του). Γενικά + απαγορεύονται ρητά τα binaries (δεν ξέρω γιατί, καμία ιδέα ?) και τα υπό-directories που περιέχει είναι συνήθως: + - ppp Configuration για το PPP(d) + - init.d, rc.d Ανάλογα με το SysV ή το BSD στύλ, εδώ έχουμε τα αρχεία εκκίνησης του συστήματος + - X11 configuration gia το X Window system, + - skel configuration για το σκελετό των αρχείων που κατασκευάζονται όταν προστίθεται ένας χρήστης. +- /bin (binaries) Εκτελέσιμα αρχεία, απαραίτητα για την εκκίνηση του λειτουργικού, τα οποία μπορούν όμως να χρησιμοποιηθούν και από κανονικούς χρήστες μετά + την εκκίνηση. Γενικά λίγα πράγματα μπαίνουν εδώ, που χρειάζονται τόσο στον root όσο και στους απλούς χρήστες. Εάν κάτι δεν χρειάζεται στον root, τότε πάει + στο /usr/bin +- /sbin (system binaries) Ομοίως, το /sbin περιέχει εκτελέσιμα αρχεία απαραίτητα για την εκκίνηση, με την διαφορά όμως ότι αυτά δεν προορίζονται για χρήση από + τους κανονικούς χρήστες. Μαζί με τα /usr/sbin και /usr/local/sbin αποτελούν το \"οπλοστάσιο\" του root και καλόν θα ήταν να ρίξετε μια ματιά στα + permissions. +- /root Προφανώς το homedir του root. Δεν ισχύει για όλα τις Linux dists αφού συχνά ο root έχει σαν homedir το /. +- /proc Αυτός ο κατάλογος δεν υπάρχει πραγματικά στον δίσκο, αλλά αντίθετα αποτελεί δημιούργημα του πυρήνα αποκλειστικά στην μνήμη του συστήματος. Περιέχει + πολύ σημαντικές πληροφορίες τόσο για το hardware όσο και για το λειτουργικό. Εξερευνήστε ελεύθερα το σύστημά σας (π.χ. cat /proc/cpuinfo). +- /dev (devices) Σε αυτό το directory περιέχονται όλα τα devices. Απολύτως απαραίτητο και ο γενικός κανόνας είναι ότι δεν θέλετε να πειράξετε τίποτε εκεί + μέσα, πλην ίσως των sumbolic links π.χ. για το modem ή το mouse (καλύτερα να χρησιμοποιείτε τα πραγματικά devices και όχι symlinks). Περιέχει φυσικά και το + περίφημο MAKEDEV, τον καλύτερο τρόπο για να εκβιάσετε το \"που\_έβαλα\_το\_cdrom\_για\_την\_εγκατάσταση\_του\_Linux\" σε περίπτωση που παίξετε μαζί του + χωρίς να κατέχετε το αντικείμενο. +- /mnt (mount) Ένα dir, στην κορυφή του filesystem, κάτω από το οποίο οι sysadmins μπορούν προσωρινά να τοποθετούν filesystems που δεν φορτώνονται αυτόματα. + Καλόν είναι όλα τα εικονικά dirs (cdrom, floppy, poly\_spania\_mounted\_fs) να βρίσκονται κάτω από το /mnt και όχι στο / για να μην μπλέκονται στα πόδια + μας. +- /home Ο κατάλογος αυτός περιέχει τους υποκαταλόγους που αποτελούν τα homedirs των χρηστών. Εκτός από αυτούς, πολλοί server του συστήματος όπως π.χ. ο fptd, + η samba, o apache χρησιμοποιούν υποκαταλόγους κάτω από το home. Από τους καταλόγους που συνηθέστερα διαμοιράζονται και προτείνεται ανεπιφύλακτα η τοποθέτησή + του σε ξεχωριστό partition +- /tmp (temporary) Όπως λέει και το όνομά του είναι το temporary (προσωρινό) μέρος για την τοποθέτηση αρχείων. καμία σχέση με το \"swap\". Πολλοί ενώνουν το + /tmp με το /var/tmp προκειμένου να υπάρχει μόνο ένα tmp στο σύστημα (ιδανικά σε δικό του partition ή στο γενικά \"βρώμικο\" partition του /var). Θυμηθείτε, + ότι εδώ έχουν rwx permissions όλοι οι χρήστες. Πολλοί τολμηροί βάζουν το /tmp στην μνήμη, ιδίως σε μικρά συστήματα. +- /lib (libraries) Εδώ θα βρούμε πολύ βασικές shared libraries, οι οποίες είναι απαραίτητες σχεδόν για τα πάντα. Ένα directory που γενικά θέλει πολύ προσοχή + όταν παίζουμε με το root account. Περιέχει τον κατάλογο modules, όπου βρίσκονται τα modules που χρειάζεται ο kernel.. +- /usr (user) Το μεγαλύτερο directory του Linux, αφού σχεδόν όλα τα αρχεία εγκαθίστανται εδώ. Πολύ συχνά διαμοιράζεται σε ένα ολόκληρο τοπικό δίκτυο. Κανονικά + δεν χρειάζεται να γράψει κανείς τίποτε όποτε το ro στο mount είναι μια πιθανή επιλογή. Τα dirs που συχνά περιέχει είναι: + - X11R6 εδώ τοποθετούνται όλα τα αρχεία του X11R6, πλην του configuration (=/etc/X11) + - X386 ομοίως για το X11R5 + - bin Όλες οι εντολές που δικαιούνται να τρέξουν οι χρήστες που δεν έχουν ειδικά προνόμια + - dict κατάλογοι λεξικών + - doc όταν σας λένε RTFM, έρχεστε εδώ + - etc αντίστοιχο του /etc αλλά για χρησιμοποιείται για το configuration ενός ολόκληρου τοπικού δικτύου + - games χμμμμ\... + - include Header files για τα διάφορα προγράμματα + - info Ο κατάλογος του GNU-Info + - lib Βιβλιοθήκες + - local εδώ τοποθετούνται διάφορα αρχεία, για \"τοπική\" χρήση. Αν το /usr γίνεται mount από nfs server τότε το /usr/local ιδανικά έχει δικό του partition + - man on-line manuals + - sbin εκτελέσιμα για την διαχείριση του συστήματος, που δεν είναι όμως ζωτικής σημασίας + - share δεδομένα που διαμοιράζονται και δεν εξαρτώνται από αρχιτεκτονική (i386, alpha κλπ) + - src εδώ τοποθετείται ο πηγαίος κώδικας +- /var (variable data) Εδώ περιέχονται μια σειρά από καταλόγους και αρχεία. Μερικοί υποκατάλογοι μπορεί να διαμοιραστούν σε περισσότερα συστήματα (π.χ. + /var/spool/mail) ενώ άλλα, όπως το /var/log ή /var/lock είναι ειδικά για κάθε σύστημα. Οι συνηθέστεροι και σημαντικότεροι υποκατάλογοι είναι: + - catman εδώ βρίσκουμε τις man pages που έχουν φορμαριστεί + - lib σε αυτόν το κατάλογο υπάρχουν πληροφορίες σχετικά με την κατάσταση των προγραμμάτων που τρέχουν + - local σε αυτόν τον κατάλογο αποθηκεύονται δεδομένα από προγράμματα του /usr/local + - lock αρχεία που υποδηλώνουν το \"κλείδωμα\" μιας συσκευής. + - log logs (ημερολόγια) που κρατούνται από όσα προγράμματα το υποστηρίζουν. + - named αρχεία του DNS, όπως παράγονται από το bind. + - nis περιέχεται η database για το nis + - preserve εδώ με λίγη τύχη θα βρείτε το υπόλοιπο της δουλείας σας, μετά από crashes. + - run εδώ βρίσκουμε αρχεία που παράγονται από προγράμματα που τρέχουν. + - spool εδώ βρίσκετε η \"ουρά\". Σε υποκαταλόγους βρίσκουμε e-mail, news, printer jobs κλπ + - tmp προσωρινά αρχεία που καταχωρούνται εδώ με σκοπό να περιοριστεί το μέγεθος του /tmp +- /opt (optional) Αυτό το directory δεν δημιουργείται πάντα από τις γνωστές διανομές και δεν περιγράφεται στο Linux Filesystem Standard. Είναι η τελευταία + μεγάλη προσθήκη στο /, και σκοπός της είναι να δωθεί η δυνατότητα σε μεγάλα commercial προγράμμα να έχουν ένα δικό τους top-level directory (ιδανικά σε + ξεχωριστό partition). Ουσιαστικά εδώ μπαίνουν προγράμματα που δεν μπορούν να πάνε στο /usr γιατί το τελευταίο έχει μεγαλώσει υπερβολικά. diff --git a/content/articles/07/04_wacom.md b/content/articles/07/04_wacom.md new file mode 100644 index 0000000..f456e51 --- /dev/null +++ b/content/articles/07/04_wacom.md @@ -0,0 +1,128 @@ ++++ +title = 'WACOM PAD and X11' +date = '1998-09-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας' +issue = ['Magaz 07'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Τι θα κάνετε το Wacom πενάκι σας τώρα που θα σβήσετε τα windows;* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**![](/07/img/wacom.png)** + +Το ότι αποφασίσατε να πετάξετε τα windows, δεν είναι λόγος να χάσετε και τις μέχρι τώρα ευκολίες που είχατε και τα λεφτά που δώσατε για να αγοράσετε τοWacom +πενάκι σας. + +Επιχειρήσαμε λοιπόν να το στήσουμε σε Linux πράγμα που τελικά αποδείχθηκε τετριμμένο. Το μόνο μας πρόβλημα είναι πως δεν μπορέσαμε να βρούμε συγκεκριμένες +οδηγίες και βοήθεια κάπου στο Internet (παρόλο που σε όλα τα sites που επισκεφθήκαμε όλοι λέγανε πως είναι πλεον πολύ εύκολο να εγκτασταθεί κλπ) και +αναγκαστήκαμε να πάμε μόνοι μας με την μέθοδο trial and error. + +Τα συστήματα που χρησιμοποιήσαμε είναι: RedHat 5.0 και RedHat 5.1 (στα distributions αυτά υπάρχει μια library - module υποστήριξης Wacom στα Χ που ονομάζεται  +xf86Wacom.so) + +**Συνδεση του WACOM PAD** + +Συνδέουμε το πενάκι μας στη δεύτερη σειριακή του υπολογιστή μας, στο δικό μας παράδειγμα είναι η ttyS1. Επειδή το δικό μας πενάκι έχει 9πινο βύσμα και στην +9πινη σειριακή είχαμε το ποντίκι, χρησιμοποιήσαμε μετατροπέα βύσματος. + +**/etc/X11/XF86Config** + + cd /etc/X11/ + + cp XF86Config XF86Config.old + +(Αυτό για backup γιατί κανείς δεν είναι τέλειος).\ +Αλλάζουμε τώρα το XF86Config :\ +Βγάζουμε από τα σχόλια ή δημιουργούμε εάν δεν υπάρχει κάτι τέτοιο, τις παρακάτω γραμμές : + + Section "Files" + + ... + +     ModulePath "/usr/X11R6/lib/modules" + + ... + + EndSection + + Section "Module" + + ... + +  Load "xf86Wacom.so" + + ... + + EndSection + + Section "Xinput" + + ... + +    SubSection "WacomStylus" + +        Port "/dev/ttyS1" + +        DeviceName "Wacom" + +    EndSubSection + +    SubSection "WacomCursor" + +        Port "/dev/ttyS1" + +    EndSubSection + +    SubSection "WacomEraser" + +        Port "/dev/ttyS1" + +    EndSubSection + + ... + + EndSection + +\ +Το σώζουμε. + +**XWindows** + +Αρχίζουμε τα X. Ακόμα τα X χρησιμοποιούν σαν συσκευή οδήγησης του κέρσορα το ποντίκι. Για να αλλάξουμε σε Wacom από ένα xterm γράφουμε: + + xsetpointer Wacom + +Αν τα πράγματα πήγαν καλά, τότε τον έλεγχο του κέρσορα αναλαμβάνει το Wacom και το ποντίκι δεν κάνει πλέον τίποτα. + +Για να ξαναδώσουμε τον έλεγχο στο ποντίκι, από ένα xterm γράφουμε: + + xsetpointer Pointer + +Σε περίπτωση που έχετε kde, μπορείτε να δώσετε τις παραπάνω εντολές πατώντας: + + Alt-F2 + +όπου θα εμφανιστεί ένα command line.\ + +**.xinitrc** + +Σε περίπτωση που θέλουμε να ξεκινάμε πάντα με pointing device το Wacom, πηγαίνουμε στο \$HOME/.xinitrc και προσθέτουμε τις γραμμές : + + xsetpointer Wacom + +αμέσως πριν τα + + if [ -f ....... + +Το σώζουμε. + +**Παρατηρήσεις** + +Αντίθετα με τα Windows, στο Linux ο κέρσορας μπορεί να ελεγχθεί από μια μόνο τη φορά συσκευή, το ποντίκι ή το Wacom (αυτό μπορεί και να μην ισχύει για κάποια +άλλη προσέγγιση, αλλά στην δική μας δεν μπορέσαμε να χρησιμοποιήσουμε ταυτόχρονα και τις δύο pointing devices). + +Αντε και καλές δημιουργίες :-) diff --git a/content/articles/07/05_analysi.md b/content/articles/07/05_analysi.md new file mode 100644 index 0000000..d33748b --- /dev/null +++ b/content/articles/07/05_analysi.md @@ -0,0 +1,78 @@ ++++ +title = 'Ποιοί έρχονται στο Linux' +date = '1998-09-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Παπαδογιαννάκης' +issue = ['Magaz 07'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Εν αρχή είναι η σκέψη\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έτσι τουλάχιστον νομίζω εγώ, και κάτι ντος και κάτι γουίντοους που υποτιμούν τη νοημοσύνη μου, τα έχω γραμμένα με ανεξίτηλη μπογιά στα παλαιότερα των υποδημάτων +μου. Δεν είμαι αναγκασμένος -τώρα πια- να έρχομαι σε επαφή με τέτοιου είδους λειτουργικά\... Χάρη στο Linuxάκι μου φυσικά, που τώρα τελευταία έχει γίνει ο +αχώριστος σύντροφός μου σε όλες τις περιηγήσεις μου στον κόσμο των πισιών. ΣΣ: Στο εξής τα γουίντοους θα αναφέρονται ως \"ακατονόμαστα\", Το ότι τα ακατονόμαστα +είναι το πλέον άχρηστο των αχρηστοτέρων λειτουργικών, είναι αυταπόδεικτο. Δεν θα ασχοληθώ με αυτό. Έχω βαρεθεί να το εξηγώ, και δεν θέλω να ξαναμπώ σε τέτοιου +είδους ψυχοφθόρα διαδικασία, μια και μόνο το να τα αναφέρω μου φέρνει αναγούλα. Όσοι θέλουν να πληροφορηθούν για τις ελλείψεις, τις κλεψιές και τις ατέλειές +τους, μπορούν να ψάξουν λίγο στο δίκτυο, και θα βρουν πολλές πηγές. Η πιο αξιόπιστη φυσικά, είναι η ίδια η μαμά τους, και φυσικά εννοώ το \"κόλλημα\" που έφαγαν +τα ακατονόμαστα 98 κατά την παρουσίασή τους. Αλλά, ο σκοπός αυτού του άρθρου, δεν είναι αυτός\... Σκοπός του είναι να αναλύσει γιατί οι περισσότεροι χρήστες δεν +στρέφονται στο Linux, αλλά προτιμούν την πλατφόρμα των ακατονόμαστων. + +ΠΡΟΣΟΧΗ!!! Εδώ, υπάρχει μια παγίδα (και αυτό είναι το λάθος που κάνουμε οι περισσότεροι προσπαθώντας να φέρουμε κόσμο στον κόσμο μας). Αρχίζοντας λοιπόν, ας +κάνουμε μερικές παραδοχές. + +1. Τα ακατονόμαστα είναι πολύ απλά (Δες και πάτα - View & click). +2. Τα ακατονόμαστα είναι (και) ελληνικά. +3. Τα ακατονόμαστα είναι γεμάτα εφαρμογές, οδηγούς για συσκευές και έχουν πολλές ευκολίες. +4. Τα ακατονόμαστα είναι πολύ καλαίσθητα. + +Μετά από όλα αυτά, ας δούμε τι θα μπορούσε να κάνει ένας χρήστης. Αλλά και εδώ υπάρχει παγίδα, γιατί χρήστης είναι ο πιτσιρικάς που αγόρασε υπολογιστή την +προηγούμενη εβδομάδα, αλλά και αυτός που θέλει το πισί για να βλέπει τσόντες στο δίκτυο. Είναι επίσης ο σχεδιαστής μακέτας, αλλά και η γραμματέας μιας +επιχείρησης που το αφεντικό της της είπε να κρατήσει ένα \"αρχείο\" με τους πελάτες. Ποίος λοιπόν από τους ανωτέρω θα κάνει χρήση Linux ;;; ΚΑΝΕΝΑΣ. Και +εξηγούμαι πάραυτα. + +- Ο μικρός που αγόρασε πισι την προηγούμενη βδομάδα, θέλει να παίξει το παιχνιδάκι του, και φυσικά θα το κάνει στα ακατονόμαστα, αφ\' ενός γιατί θα βάλει το + CD και θα παίξει αμέσως, και αφετέρου γιατί παιχνίδια θα βρει σε αυτή την πλατφόρμα κυρίως. Αλλά δεν είναι αυτοί οι μοναδικοί λόγοι που θα τον οδηγήσουν σε + αυτή την απόφαση. Που θα βρει οδηγούς για την \"βουντού ΘριΝτι\" με τα 8 μεγαβύτια που αγόρασε πρόσφατα; Και αν βρει για το Linuxάκι, πως θα τους + εγκαταστήσει; (είναι παραδεκτό ότι η υποστήριξη σε συσκευές από το Linux είναι σχετικά δύσκολη υπόθεση) Αλλά και να το εγκαταστήσει, που θα βρει παιχνίδια + να διασκεδάσει το παιδί; Aρα λοιπόν, τον ξεχνάμε\... Η μόνη λύση για αυτόν είναι να του δώσουμε να καταλάβει ότι τα παιχνίδια φτιάχτηκαν για τον υπολογιστή, + και όχι ο υπολογιστής για τα παιχνίδια. Να τον σπρώξουμε δηλαδή σε σοβαρότερα πράγματα, ώστε να μπορεί να εκτιμήσει τις αρετές του Linux. ΔΕΝ πρέπει όμως να + τον τραβήξουμε από τα \"γκέιμς\" του, τουλάχιστον στην αρχή. Όλοι κάπως έτσι ξεκινήσαμε\... Για το συγκεκριμένο χρήστη, ισχύουν οι παραδοχές (3) και (4). + Και -φυσικά- δεν έχει κανένα λόγο να χρησιμοποιήσει έτερα λειτουργικά πλην τα ακατονόμαστα. +- Επόμενη κατηγορία, ο τσοντόβιος. Και να λείπουν τα σχόλια του τύπου \"Σιγά μωρέ, και πόσοι είναι αυτοί\" γιατί αν ήταν λίγοι, το δίκτυο δεν θα ήταν μια + απέραντη τσόντα. (Aλήθεια, what a waste of bandwidth\...). Στη συγκεκριμένη περίπτωση, τον υπολογιστή χειρίζεται ένας τυπάκλας (μουστακαλής και σαπιοκοιλιάς + κατά κύριο λόγο) που (άντε και αν) ξέρει τα βασικά αγγλικά. Τι θέλει λοιπόν αυτός; Να ανοίξει τον υπολογιστή του, να πατήσει \"κονέκτ\", και να γράψει + \"www.playboy.com\". Να βάλει τον κώδικα, και να δει την πάμελα με τα πόδια ανοικτά. Πως λοιπόν να χρησιμοποιήσει Linux? Από τη μια θέλει (τουλάχιστον) μια + βδομάδα μέχρι να καταφέρει να βάλει τα ελληνικά, και άλλη μια εβδομάδα (επίσης τουλάχιστον) να καταφέρει να συνδεθεί. Και με την προυπόθεση ότι έχει + εγκαταστήσει τα Χ, γιατί, πως να το κάνουμε, θέλει να βλέπει παραθυράκια. Πάει κι αυτός!!! +- Προχωρώντας, φτάνουμε στο μακετίστα που δεν μπορεί να φτιάξει τις μακέτες του στο CorelDraw! 3.5 (το μόνο Corel για UNIX), γιατί πως θα κάνει Μπλέντ στα δύο + σχήματα; Και πώς θα κάνει όλα αυτά που κάνει το Corel8 που έχει (κλέψει) για το ακατονόμαστο λειτουργικό του? Πως θα τυπώσει χωρίς όλες αυτές τις ευκολίες + που του παρέχουν τα ακατονόμαστα; Να χρησιμοποιήσει Ghostscript; Τς-τς-τς\... Για ποιόν τον περάσατε? +- Για την γραμματέα της \"μεγαλοεπιχείρησης\" της γειτονιάς, δεν νομίζω ότι χρειάζονται αποδεικτικά. Η γυναίκα, γεννήθηκε πριν 30 χρόνια, και φυσικά δεν ξέρει + τίποτα από υπολογιστές. Το αφεντικό της όμως μέσα στην παραζάλη του για τη μηχανογράφηση της εταιρίας του (είναι πολύ τις μόδας αυτό τώρα τελευταία), της + πήρε ένα πισι, την έχωσε και σε ένα σεμινάριο να μάθει γουόρντ και εξέλ, την έκατσε σε μια καρέκλα, και της είπε: \"κάνε μου ένα αρχείο με όλους τους + πελάτες μου, και μετά γράψε αυτή την προσφορά\". Η γυναίκα λοιπόν (πολύ φυσικά) άνοιξε τον κομπιούτορα (όπως συνηθίζει να τον αποκαλεί), άναψε τσιγάρο + περιμένοντας να μπει στα ακατονόμαστα, εμφανίστηκε μπροστά της το γραφικό περιβάλλον με τα ελληνικά (μάλιστα κύριοι, ελληνικά) και άνοιξε και το γουόρντ + (πολύ πιθανόν να το είχε και στο \"Εκκίνηση\" για να φορτώνει αμέσως). Έγραψε την προσφορά, πάτησε στο κουμπί με τον εκτυπωτή, και το πήρε έτοιμο! Μετά + άνοιξε το εξέλ, έγραψε τις επικεφαλίδες, και άρχισε να γράφει τους πελάτες. Το αφεντικό της έδωσε συγχαρητήρια, και όλοι ήταν χαρούμενοι! Το καλύτερο + φυσικά, είναι ότι γυρίζοντας στο σπίτι της, η γυναίκα έβριζε τους υπολογιστές και τη νέα τεχνολογία γιατί της κάνει τη ζωή \"δύσκολη\". Αυτού του είδους + τους χρήστες ΔΕΝ ΤΟΥΣ ΘΕΛΟΥΜΕ στο Linux. + +Ποιοι λοιπόν έμειναν να χρησιμοποιήσουν το Linux; Μα φυσικά εμείς, οι χρήστες που είχαμε από το 198x υπολογιστή, που στο πανεπιστήμιο ή το ΤΕΙ μας κάναμε μάθημα +πληροφορικής σε UNIX BOXES, εμείς που έχουμε βαρεθεί να μας κολλάνε τα λειτουργικά. Εμείς που δεν μας ενδιαφέρει τόσο η καλαισθησία όσο η αποτελεσματικότητα του +λειτουργικού μας, η ασφάλεια των δεδομένων μας και η ομοιογένεια του οικοδομήματος \"Υπολογιστής\". Ο κόσμος που θα έρχεται στο Linux, θα είναι αυτός και μόνο +αυτός που έχει σιχαθεί τα σικέ σκηνικά και τα προγράμματα με τις αυτόματες ρυθμίσεις. Θα είναι τα άτομα που θέλουν το λειτουργικό τους έτσι, αλλά όχι ακριβώς +έτσι, θέλουν να υποστηρίζουν αυτό που έχουν, και όχι αυτό που θα μπορούσαν να έχουν αν είχαν λεφτά με ουρά. Θα είναι τα άτομα που δίνουν σημασία στην ανθρωπιά, +που νοιάζονται για τη γνώση. Είναι τα ίδια άτομα που δίνουν τον κώδικα του προγράμματος για χρήση ή/και αλλαγές από τον καθένα, φυσικά για τον καθένα, από άτομα +με ευρείς πνευματικούς (και κατ\' επέκταση ψυχικούς) ορίζοντες, που δεν θέλουν να πλουτίσουν από τη δουλειά που έκαναν\... Ξέρουν άλλωστε ότι η γνώση δεν +περιορίζεται σε τσέπες. Βοηθήστε τον κόσμο να έρθει κοντά στο Linux. Μην αφήνετε κανέναν να φεύγει. Ακόμα και τη γραμματέα, ακόμα και τον τσοντόβιο. Απαντάτε σε +όλες τις ερωτήσεις του κόσμου, όσο απλές και ηλίθιες και αν είναι. Δείξτε τους τι σημαίνει να είσαι άνθρωπος ελεύθερος, και σίγουρα θα το εκτιμήσουν. Μην κάνετε +το λάθος να νομίζετε ότι επειδή χρησιμοποιείτε ένα (εξελιγμένο και δύσκολο) λειτουργικό σύστημα που απαιτεί πολλές γνώσεις σε όλα τα επίπεδα των υπολογιστών +είσαστε ανώτεροι από το νεαρό που παίζει TombRaider. Βάλτε ανθρωπιά στο χώρο, και μην αντιμετωπίζετε ειρωνικά τους νέους στον χώρο. + +ΣΣ: Τα ανωτέρω αναφέρονται ως παράπονα για την αντιμετώπισή μου από κάποιους Linuxάδες\... Στην πορεία κατάλαβα ότι μέσα σε 3-4 μήνες που ασχολούμαι με το Linux +έχω μάθει πολύ περισσότερα πράγματα από αυτούς. Και πάντα θα είμαι πρόθυμος να απαντήσω (εφόσον μπορώ, μια και το επίπεδό μου δεν είναι ικανοποιητικό ακόμα) σε +όλες τις ερωτήσεις που θα μου απευθυνθούν. Όχι τίποτα άλλο, αλλά μέσα από τις απαντήσεις που δίνω, μαθαίνω περισσότερα και εγώ\... diff --git a/content/articles/07/06_mailbox.md b/content/articles/07/06_mailbox.md new file mode 100644 index 0000000..8204064 --- /dev/null +++ b/content/articles/07/06_mailbox.md @@ -0,0 +1,606 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-09-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 07'] +issue_weight = 6 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Και, για άλλη μια φορά, είχαμε τόσα πολλά γράμματα που μας δίνουν κουράγιο να συνεχίσουμε. Τόσα πολλά, που ορισμένα \"κόπηκαν\" λόγω χρόνου και πολύ +συγκεκριμένων προσωπικών θεμάτων.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δύο παρακλήσεις μόνο έχουμε να κάνουμε:\ +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής Ερώτηση περί Linux δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμιά ματιά στα περασμένα τεύχη, και εννοώ και την στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντούνται από +εκεί.\ +Τέρμα οι \"γκρίνιες\", ας διαβάσουμε τώρα τι μας ρωτήσατε και τι σας απαντήσαμε αυτό το μήνα. + +**1. Εγκατάσταση του RedHat, πρόβλημα χώρου.** +------------------------------------------------------------------------ + +**2. Γενικές ερωτήσεις για X, KDE, παιχνίδια του RedHat** +----------------------------------------------------------------------------------- + +**3. Scanner** +---------------------------------------- + +**4. Metro-X server** +----------------------------------------------- + +**5. Προβλήματα με το compilation του KDE** +--------------------------------------------------------------------- + +**6. Νίκος Πασσάς** +--------------------------------------------- + +**7. Σχετικά με κάποιες μεταβλητές περιβάλλοντος** +---------------------------------------------------------------------------- + +**8. AOL για Linux** +---------------------------------------------- + +**9. Σύνδεση OTEnet, Graphical Development tool και compilation** +------------------------------------------------------------------------------------------- + +**10. Προβλήματα με το compilation του KDE** +------------------------------------------------------------------------ + +**11. Ρυθμίσεις pppd** +-------------------------------------------------- + +**12. Χμμμ, ένα πολά βαρύ** +------------------------------------------------------- + +**13. Ερώτηση για μνήμη μεγαλύτερη από 64 Mb** +-------------------------------------------------------------------------- + +**14. PPP ρυθμίσεις, modem.** +--------------------------------------------------------- + +**15. Πολλαπλοί επεξεργαστές** +---------------------------------------------------------- + +**16. Κάρτα γραφικών και KDE** +---------------------------------------------------------- + +**17. MS Word σε html ή txt** +--------------------------------------------------------- + +**18. AMD, KDM, CDE και αναλύσεις οθόνης.** +----------------------------------------------------------------------- + + +### [1. Εγκατάσταση του RedHat, πρόβλημα χώρου.]{#s1} + +Από : [Νίκος Γιαντσίδη](mailto:nickg@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Αγαπητοί Linuxάδες γειά σας,\ +Έχοντας βαρεθεί τα Windows αγόρασα το Red hat Linux 5.0.Οι προσπάθειες για την εγκατάστασή του στον υπολογιστή μου δεν έφεραν αποτέλεσμα γι\' αυτό ζητώ την +βοήθειά σας αφού έχουν περάσει οι 30 ημέρες από την αγορά του λειτουργικού και η Red hat δεν μου δίνει βοήθεια. + +Έχω 2 σκληρούς δισκους: 2.3GΒ και 500 MB. Προσπάθησα να εγκαταστήσω το Linux στον σκληρό των 500 ΜΒ βάζοντας στο disk druid τα εξής: + + όνομα "/" hdb1 80MB Linux native + + "main" hdb5 372MB Linux native + + hdb6 66MB Linuxswap + +Αφού όρισα τι θέλω να εγκαταστήσω άρχισε η διαδικασία της μεταφοράς των δεδομένων στο σκληρό δίσκο.Ύστερα από κάποια λεπτά είδα στην οθόνη μου τα εξής μυνήματα +το ένα μετά τo άλλo: + + Rpm install of gimp failed:unpacking of archive failed on + file/s/share/gimp/0.99.12/patterns/blob.pat:-1:success + + Rpm install of gimp-develfailed:unpacking of archive failed on file + /usr/lip/lipgimp-a:-1 success + +Αφού έβγαλε κάποια μηνύματα ακόμη η εγκατάσταση σταμάτησε. Σας παρακαλώ να μου πείτε γιατί δεν εγκαταστήθηκε σωστά και τι θα πρέπει να δηλώσω στο disk druid για +να εγκαταστήσω σωστά το Linux σε ένα σκληρό 500ΜΒ.\ +Συγχαρητήρια για την προσπάθειά σας να στήσετε ένα web server για το Linux. + +*Φίλε Νίκο.\ +Αν και οι πληροφορίες που μας στέλνεις δεν είναι αρκετές, θα κάνω μία πρόβλεψη: Απ\' ότι φαίνεται, ο δίσκος σου γέμισε. Και για να γίνω πιο σαφής: Το standard +filesystem του Linux (όπως και όλων των Unix) αποτελείται από τα εξής ειδικά directories:\ +/ ή root. Κάτω από αυτό υπαρχουν όλα τα άλλα. Μπορεί να είναι αρκετά μικρό, σαν μέγεθος.\ +/usr το μεγαλύτερο directory του συστήματος. Συνήθως εκεί μπαίνουν τα προγράμματα. Το πιο προβλέψιμο directory. Το αρχικό του μέγεθος μετά την εγκατάσταση, κατά +πάσα πιθανότητα θα παραμείνει το ίδιο και μετά από πολύ καιρό.\ +/usr/local ως μέρος του /usr, καταλαβαίνεις ότι έχει και αυτό προγράμματα.Υπάρχουν κάποιες διαφορές σχετικά με το τι μπαίνει στο ένα και τι στο άλλο, αλλά +γενικά θεώρησε το το ίδιο. Όχι όμως τόσο σταθερού μεγέθους όπως το /usr.\ +/var τα logs του συστήματος, το mail, η ουρά (spool) των εκτυπωτών κλπ. Το πιο απρόβλεπτο directory του συστήματος.\ +/home τα home directories των χρηστών.\ +/opt τα optional προγράμματα. Αυτό νομίζω ότι ξεκίνησε από τα Sun αλλά υπάρχει σίγουρα και στα RedHat, Caldera, Suse.\ +Ο διαχωρισμός αυτός έχει έννοια κυρίως για μεγάλα συστήματα με πολλούς δίσκους, όπου βάζεις μερικά από αυτά τα directories σε άλλους δίσκους (οπότε και δεν +ονομάζονται πλέον directories αλλά filesystems, αφού δεν είναι στον ίδιο φυσικό δίσκο με το /).\ +Μία τυπική εγκατάσταση θέλει γύρω στα 380 Mb νομίζω για το RedHat. Το πρόβλημά σου είναι το εξής: Του έχεις δώσει μόνο 80 (αφού όπως είδες κανένα filesystem που +να το καταλαβαίνει το σύστημα δεν ονομάζεται main). Άρα πρέπει να του δώσεις πιο φυσιολογικές τιμές στα filesystems που θα φτιάξεις (ή αλλιώς, partitions). Το +main καλό είναι να μην υπάρχει καθόλου, αφού δεν νομίζω να βάλεις τελικά τίποτα εκεί μεσα :-) Για μία πρότσαη μεγέθους τρων filesystems, δες το τεύχος 3, γράμμα +3 (Γράμματα σε συνέχειες). Έχε υπόψη σου ότι αν τελικά κάνεις ένα μόνο partition (το /) δεν θα έχεις πρόβλημα, εκτός αν για κάποιο λόγο γεμίσει το var (αν ας +πούμε αρχίσει να σου πετάει ο kernel ΠΟΛΛΑ μηνύματα και δεν το πάρεις χαμπάρι, ή αν αρχίσει κόσμος να στέλνει πολλά και μεγάλα αρχεία για εκτύπωση, πολύ πιο +γρήγορα απ\' ότι μπορεί να τυπώσει ο εκτυπωτής σου).\ +Η απάντηση δεν είναι σωστή ως προς τον ορισμό των directories, filesystems, partitions, αλλά έκανα επίτηδες αυτό το \"λάθος\" για να το κάνω πιο κατανοητό. +Ελπίζω να τα κατάφερα (και να μην τα έκανα θάλασσα!).\ +Σου ευχόμαστε καλή τύχη.* + + +### [2. Γενικές ερωτήσεις για X, KDE, παιχνίδια του RedHat]{#s2} + +Από : [Νίκος Γιαντσίδη](mailto:nickg@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Ευχαριστώ πολύ για την βοήθεια .Άργησα να σου στείλω e-mail αφού δεν ήξερα οτι αν έγραφα win δίπλα από το lilo boot θα μπορούσα να μπω στα windows 95 για να +συνδεθώ στο Internet. Αλήθεια μήπως ξέρεις πως μπορώ να συνδεθώ στο Internet από το Red Hat Linux;(Ο navigator υπάρχει ήδη εγκατεστημένος) + +*Όπως έχουμε απαντήσει πολλές φορές στο Magaz, δεν μπορούμε να ξέρουμε για κάθε distribution τι χρειάζεται. Μπορούμε όμως να ξέρουμε ένα υπέροχο προγραμματάκι +που λέγεται XISP και κάνει αυτή τη δουλειά ανεξαρτήτως distribution. Λεπτομέρειες, στο τεύχος 5 του Magaz.* + +Μερικά παιγνίδια που έχω εγκαταστήσει δεν τρέχουν όταν κάνω κλίκ στο μενού. Μήπως ξέρεις τι φταίει; + +*Έλεγξε αν πράγματι υπάρχουν αυτά τα εκτελέσιμα, και αν υπάρχουν, αν το μενού δείχνει στα σωστά σημεία.* + +Από που μπορώ να δω πόσο ελεύθερο χώρο έχω στο σκληρό δίσκο όπου έχω εγκατεστημένω το linux; + +*Magaz τεύχος 4, ερώτηση 7* + +Ακόμη μπορώ να εγκαταστήσω στο σύστημά μου το KDE; Τι θα γινουν ύστερα τα x windows; Μπορώ χωρίς να έχω εγκαταστήσει το KDE να εγκαταστήσω το star office; + +*Τα X windows με το KDE δεν έχουν καμία σχέση. Το ένα είναι GUI ενώ το άλλο είναι Working Environment με έναν Window Manager που, προφανώς, δουλεύει πάνω από τα +X. Συνοπτικά: και βέβαια μπορείς να εγκαταστήσεις το KDE, οπως και το Afterstep, ή το Gnome, η το fvwm, ή όποιο άλλο Window Manager θέλεις. Το KDE και το +StarOffice, επίσης δεν έχουν καμία σχέση. Το StarOffice όμως ως γραφικό πακέτο, χρειάζεται τα X.* + +Βλέπεις έκανες μεγάλο λάθος να μου απαντήσεις την προηγούμενη φορά αφού τώρα επέστρεψα με περισσότερες απορίες . ;-) + +*Κανένα πρόβλημα να απαντάμε στις απορίες. Δύο μόνο παρατηρήσεις:\ +α) Οι ερωτήσεις αυτές να απευθύνονται στο Magaz και όχι σε εμένα προσωπικά.\ +β) Καλό θα ήταν πριν κάνεις μια ερώτηση να ελέγχεις τα παλιότερα τεύχη του Magaz για την περίπτωση που έχει απαντηθεί.\ +Βλέπεις, δυστυχώς ο χρόνος μας είναι περιορισμένος και δεν είναι το πιο ευχάριστο πράγμα να απαντάς μία ερώτηση που την έχεις ξανααπαντήσει. Σε παρακαλώ, σε +καμία περίπτωση μην πάρεις την απάντησή μου σαν επιθετική (κλασικό πρόβλημα με το e-mail, δεν βλέπεις την έκφραση του άλλου όταν σου μιλάει για να καταλάβεις με +τι ύφος σου μιλάει). Είμαστε πάντα εδώ να σου λύσουμε την οποιαδήποτε απορία.* + + +### [3. Scanner]{#s3} + +Από : [Γιώργο Κολοζώφ](mailto:gio@andromeda.kke.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γεια σας, έχω ένα scanner HP-ScanJet format A4 και δέν έχω ούτε driver για dos και ούτε για linux. Που μπορώ να βρώ drivers για scanner για linux ?! :) + +*Το πακέτο που υποστηρίζει scanners στο Linux λέγεται sane και θα το βρείς στο * + +Έχω το kernel 2.0.35 και κάτι άλλο, που μπορώ να βρω το πακέτο για Linux της CALLDERA στην Αθήνα; Έψαξα ζε όλη την Στουρνάρα και δεν το βρήκα\... :( + +*Δεν θα το βρεις, δεν το φέρνει κανένας.* + +bye byte\..... + +POWARE TO THE PEAPLE\...\... + +*Bye byte (μου άρεσε!!!)* + + +### [4. Metro-X server]{#s4} + +Από : [Χρήστος Βαρελάς](mailto:cvar@startrek.csd.auth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γεια σας παιδιά,\ +Πώς πάτε εκεί στο Magaz; Ναι, ξέρω, σαν πολλές οικειότητες, φαίνεται παραπήρα θάρρος :-)\ +Ας έρθω όμως στο θέμα του mail μου. Τρέχω το RedHat Linux 5.1 σ\' έναν Pentium 133 με μπόλικη RAM και χρησιμοποιώ το τελευταίο XFree86 πακέτο για να οδηγώ την +Diamond Stealth 3D 2000 κάρτα μου. Είμαι αρκετά ευχαριστημένος από την απόδοση του server, ωστόσο θα ήθελα κάτι γρηγορότερο, οπότε και προσανατολίζομαι στους +servers της MetroLink, συγκεκριμένα την έκδοση 4.3 \-- η τιμή τους είναι αρκετά ελκυστική και διαθέτουν υποστήριξη για την κάρτα μου. Αναρωτιέμαι όμως αν θα έχω +ένα κάποιο κέρδος στην ταχύτητα\... με τις ελληνικές γραμματοσειρές που έχω εγκαταστήσει θα υπάρχει κάποιο πρόβλημα; Κάποιο conflict με τις βιβλιοθήκες των +XFree86; Εάν δεν κάνω λάθος, με κάποια όχι πολύ παλαιότερη έκδοση των MetroX υπήρχαν κάποια προβλήματα στο RedHat, κάτι αδικαιολόγητα κολλήματα που οδηγούσαν σε +αναπόφευκτα hardware shutdowns κι έτσι\...\ +Έχει μήπως κανείς από εσάς δοκιμάσει τους νέους Metro Servers; Κάποια υπόδειξη ή συμβουλή;\ +Ευχαριστώ προκαταβολικά για το χρόνο σας,\ +take it easy and keep up the good work. + +*Ένα ένα. Πρώτον, οι servers της Metrolink δεν νομιζω ότι είναι για αύξηση ταχύτητας τόσο πολύ, όσο για τα extra features που προσφέρουν, όπως υποστήριξη +πολλαπλών οθονών (με συγκεκριμενες κάρτες οθόνης), υποστηριξη touchscreens, σταθερότητα, καλύτερη εκμετάλλευση των δυνατοτήτων της κάρτας οθόνης, πιο πολλές AGP +κάρτες κλπ. Πρόσεξε, δεν λέω ότι δεν προσφέρουν αύξηση στην ταχύτητα\...\ +Είχα την τελευταία έκδοση (4.3) για τρεις μέρες, δοκιμαστικά. Από ταχύτητα δεν είδα διαφορά (αλλά και πως να την δω; Μόνο το Xmame δοκίμασα, που σερνότανε στα +Χ, σερνότανε και στα Metro-X και σερνότανε και στο Accelarated-X. Μηπως τελικά φταιει το X-mame και όχι ο server;)\ +Είχα την έκδοση για libc γιατί το σύστημά μου είναι libc-based. Δεν είχα κανένα πρόβλημα ούτε με γραμματοσειρές, ούτε με πληκτρολόγιο (ελληνικά) ούτε με +libraries. Δεν έχω δηλαδή RedHat. Και ναι, η τιμή του είναι πολύ ελκυστική.\ +Αν θα τον αγόραζα; Σίγουρα, αν χρειαζόμουνα κάποιο τέτοιο feature, οπως πολλαπλές οθόνες. Τώρα μάλλον όχι. Αλλά με τέτοια τιμή, είναι καθαρά θέμα γούστου :-)* + + +### [5. Προβλήματα με το compilation του KDE]{#s5} + +Από : [Ανδρέας](mailto:kinetik@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Αγαπητοί φίλοι,\ +Δεδομένης της αποδοχής του site σας από την κοινότητα των χρηστών linux στην Ελλάδα, θα ήθελα και εγώ να σας μεταφέρω τα συγχαρητήρια μου και τις θερμότερες +ευχές για επέκταση και βελτίωση. Στο κάτω κάτω της γραφής, το να βοηθάς ανθρώπους που είναι άσχετοι με κάποιο θέμα, να το γνωρίσουν καλύτερα.\ +Τέλος πάντων, το περιεχόμενο είναι σαφώς σημαντικότερο από το περιτύλιγμα γι\' αυτό και προχωρώ!\ +ριν μερικούς μήνες διάβασα στο RAM για το KDE και λόγω του ότι δουλέυω 95 με τις πολλές ιδιοτροπίες τους, αποφάσισα να δοκιμάσω και κάτι διαφορετικό. Οπότε και +αγοράζω ένα set με κάποια linux distributions, RH4, Slack 3.1, Debian 1.1.1, και άλλα, και εγκαθιστώ το slack 3.1.\ +Κατεβλαζω και τα XFree86 3.3.2, τα σετάρω, φέρνω τα KDE\*1.0.tgz, το QT1.40 τα περνάω και αφού έχω περάσει το qt, το kdelibs, kdesupport και ότι άλλο πρέπει να +περαστεί πρώτα ΧΩΡΙΣ πρόβλημα, πάω να περάσω το kdebase. Εκεί, κατά το make έχω το εξής πρόβλημα. Σταματάει με το παρακάτω error message. + + /usr/i486-linux/bin/ld + + cannot open -lXau + + make[2]: ***[kde] Error 1 + + make[2]: Leaving directory /usr/src/kde/kdebase/kde + + make[1]: ***[all-recursive] Error 1 + + make[1]: Leaving directory + + make[2]: ***[all-recursive-am] Error 2 + +\ +Τι συμβαίνει; Το Xau είναι specific σε κάποια συγκεκριμένη έκδοση των X? Αν υπάρχει στα 3.3.2, τι ακριβώς πρέπει να φέρω για να περαστεί και αυτό;\ +Κάθε βοήθεια ευπρόσδεκτη + +*Γειά σου Αντρέα.\ +Πρέπει να περάσεις το XFree86-devel-static. Νομίζω ότι το Xau είναι εκεί μέσα. Αν δεν είναι εκεί, ρίξε μια ματιά με το mc σε όλα τα πακέτα Xfree86-3.3.2 που +έχεις, στο dir /usr/X11R6/lib και όταν το βρεις, εγκαθιστάς το αντίστοιχο πακέτο.\ +Ελπίζω να βοήθησα.* + + +### [6. Νίκος Πασσάς]{#s6} + +Από : [Βελέντζας Αλέξανδρος](mailto:belale@it.teithe.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Χαιρετώ, ονομάζομαι Πασσάς Νικόλαος ασχολούμαι με υπολογιστές διόμιση χρόνια από χόμπυ. Από τα windows3.1 πέρασα στα 95, σε αυτό το διάστημα έκανα +επανεγκατάσταση 11 φορές τα 3.1 και 30?? τα 95. Πρόσφατα αποφάσισα να βάλω Linux, αγόρασα το slackware 3.4 και παρόλο που δεν μπόρεσα να βρω κάποιο βιβλίο στα +ελληνικά (δεν έχω γνώση αγγκλικής) δοκίμασα να το εγκαταστήσω δυο φορές, αποτέλεσμα μηδέν, μάλλον θα περιμένω να βγη βιβλίο στα ελληνικά, στο μεταξύ ο δίσκος +απο 1Gb έχει απολέσει τα 300 και δεν ξέρω πως να αναιρέσω το fdisk. Κάθε βοήθεια δεκτή, γράψε στο kormoran\@spark.net.gr, ευχαριστώ για τον χρόνο σου. + +*Φίλε Νίκο\...\ +Το Slackware Linux είναι από τα πιο αγαπημένα μου στην εγκατάσταση, αν και δεν είναι κι από τα πιο εύκολα πράγματα που έχω κάνει στη ζωή μου!\ +Η απορία σου είναι πάντως απλή να λυθεί αν έχεις αγοράσει κάποιο από τα CD που κυκλοφορούν στο εμπόριο με το Slackware Linux. Κι αυτό γιατί όλα τα CD-ROM του +εμπορίου έρχονται, συνήθως, με κάποιο μικρό βιβλιαράκι που εξηγεί συνοπτικά την διαδικασία της εγκατάστασης.\ +Αν παρόλ\' αυτά δεν έχεις το βιβλιαράκι, γιατί έχεις κατεβάσει το Slackware από το Internet, ή γιατί απλά δεν το έχεις αγοράσει αλλά έχεις κάποιο αντίγραφο +(πράγμα καθόλου περίεργο και αρκετά συνηθισμένο, αφού έχεις κάθε δικαίωμα να το κάνεις), τότε\...\ +Τα βήματα μιας εγκατάστασης με το Slackware είναι τα εξής:* + +1. Φτιάχνεις δυο δισκέττες εκίννησης, την BOOT-disk και την ROOT-disk.\ + Αυτές τις φτιάχνεις από τα disk-images που υπάρχουν στους καταλόγους /bootdisk.144 και /rootdisk στο CD-ROM του Slackware, με το utility που υπάρχει στο + ίδιο directory και λέγεται RAWRITE.EXE\ + Πχ. αν το CD-ROM είναι στο (drive F:) κάνεις: + + F:\ROOTDSKS> RAWRITE.EXE + Enter filename: color.gz + Write to which floppy: A: + Writing.....done + + και το ίδιο με το αρχείο F:\\BOOTDSKS.144\\BARE.I (αν έχεις απλό IDE δίσκο, γιατί αν έχεις κάποιο SCSI δίσκο ή κάποιες άλλες συσκευές που δεν υποστηρίζονται + από το BARE.I διαλέγεις κάποιο άλλο image. + +2. Ξεκινάς το σύστημά σου με την BARE.I δισκέττα (γι\' αυτό και την έφτιαξες τελευταία, ώστε να μείνει στο floppy σου.\ + Από εδώ και μετά απλώς ακολουθείς τις οδηγίες στην οθόνη σου, αλλά γενικά η διαδικασία είναι:\ + α. Φτιάχνεις τα partitions με το FDISK του Linux.\ + β. Φορμάρεις τα Linux-native partitions σου.\ + γ. Διαλέγεις ποια πακέτα να εγκαταστήσεις.\ + δ. Εγκαθιστάς τα πακέτα.\ + ε. Επιλέγεις configuration options στο μενού \"CONFIGURE\"\ + ζ. Εγκαθιστάς το LILO ή φτιάχνεις δισκέττα εκίννησης\ + και είσαι έτοιμος να ξεκινήσεις. + +*Το README του Slackware που υπάρχει στον ROOT κατάλογο του CD-ROM έχει πιο πολλές λεπτομέρειες για κάθε βήμα της εγκατάστασης\...\ +Ελπίζω να βοήθησα κάπως :)* + + +### [7. Σχετικά με κάποιες μεταβλητές περιβάλλοντος]{#s7} + +Από : [Χρήστος Βαρελάς](mailto:cvar@startrek.csd.auth.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hol.gr) + +Φίλοι συν-Linux-άδες,\ +Διαβάζοντας το πρόσφατο Linux Zone στο Magaz με τις περιπέτειες του Παναγιώτη Βρυώνη με το Laptop του, πρόσεξα τις μεταβλητές περιβάλλοντος LANG και LC\_ALL. +Στο σύστημά μου χρησιμοποιώ το KDE με επιλογή για ελληνικά (φυσικά έχω εγκατεστημένες ελληνικές γραμματοσειρές). Επειδή, όμως, έχω προσέξει ότι κάποιες +εφαρμογές παραπονούνται για \"unsupported locale\" και κατά τη διάρκεια κάποιων μετταγλωτίσεων (π.χ. του lesstif) έχω ανάλογα παράπονα με τη μορφή warnings, +πρόσθεσα στο /etc/profile τη γραμμή + + export LANG=gr_GR LC_ALL=gr_GR + +Μετά από αυτή την κίνηση τα παράπονα εξαφανίστηκαν. Επίσης, όταν έδωσα σε κάποια κονσόλα \'ls -l\' παρατήρησα ελληνικά ονόματα μηνών! (αργότερα διαπίστωσα ότι +γι\' αυτό \"ευθύνεται\" η μεταβλητή LC\_ALL). Ωστόσο, αργότερα ήρθα αντιμέτωπος μ\' ένα περίεργο πρόβλημα: όταν έδινα π.χ. + + rm goddamn.file + +το bash με ρωτούσε αν θέλω να σβύσω το αρχείο, εγώ έδινα \"y\", αλλά όταν έκανα ένα \'ls\' το αρχείο ήταν εκεί! Ο μόνος τρόπος για να το σβύσω ήταν με \"rm -f +goddamn.file\"! Όταν έκανα unset την LC\_ALL το πρόβλημα έφυγε!\ +Καμιά ιδέα στο που οφείλεται αυτή η περίεργη συμπεριφορά; Έχει να κάνει μήπως με το shell; (έχω εγκατεστειμένο το bash-1.14.7-7 από το RedHat 5.1).\ +Ευχαριστώ προκαταβολικά για το χρόνο σας. + +*Λοιπόν, το προβλημά σου είναι το ότι δεν περιμένεις μερικά πραγματα από το Linux. :) Εφόσον έχεις ορίσει ότι θα χρησιμοποιείς ελληνικά (και έχεις και ένα alias +rm rm -i, ή κάνω λάθος?) στην ερώτηση remove .. η απάντηση δεν είναι y(es) αλλά ν(αι) !!! Αν δεν κάνω λάθος, η έκδοση του bash που χρησιμοποιείς δεν θα σου +επιτρέψει να γράψεις ελληνικά στο command prompt, οπότε καλό είναι να βάλεις κάποια πιο νέα (\>2.0).* + + +### [8. AOL για Linux]{#s8} + +Από : [DJ Art](mailto:arturok@usa.net) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Έχω κατεβάσει τον AOL Instant Messenger σε μορφή Java. Όμως δεν ξέρω τί να κάνω με το αρχείο, το οποίο έχει extension .sh. Χρειάζομαι οδηγίες για την +εγκατάστασή του. + +*Αν κρίνω σωστά από το extension του αρχείου, είναι ένα Bourne shell script (ένα \*batch\* αρχείο στην ορολογία του DOS). Οπότε κάνεις απλά:* + + /bin/sh MESSENGER.SH + +*και αν είμαι τυχερός (κι εσύ μαζί με μένα) το messenger θα στηθεί στο μηχάνημά σου μια χαρούλα\...* + + +### [9. Σύνδεση OTEnet, Graphical Development tool και compilation]{#s9} + +Από : [Βασίλης Βλάχος](mailto:vsvlahos@otenet.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Τρελαμένοι Linuxades,\ +Τα θερμά μου συγχαρητήρια για το περιοδικάκι σας, είναι απλά καταπληκτικό. Πιστεύω ότι θα αφήσει εποχή. Είμαι και εγώ φοιτητής πληροφορικής και τρελαμένος +computeras. Έχοντας κάποιες θεωρητικές γνώσεις στο χώρο δε μπορώ παρά να συμφωνήσω μαζί σας στο ότι το Linux είναι πράγματι ιδιαίτερα σταθερό, αποδοτικό, +ελάχιστα απαιτητικό σε πόρους του συστήματος, ασφαλές, παραμετροποιήσιμο και αλλά πολλά που έχετε πολλές φορές αναφέρει. Το πρόβλημα όμως μου είναι ότι διαβάζω +το περιοδικάκι σας από το Communicator μέσα από τα Windows, ενώ τώρα\_ σας γράφω από το Microsoft Word. Θέλω να πω δηλαδή ότι το Linux μου αποδείχτηκε ιδιαίτερα +χρήσιμο μόνο για να γράφω κάποια προγράμματα σε περιβάλλον Unix και κάποια προγράμματα που χρειάζονται ειδικά βιβλία (και πολλά λεφτά ) για να βρεθούν οι +αντίστοιχες βιβλιοθήκες και συναρτήσεις για να τρέξουν σε windows, ξέρετε sockets και τέτοια. Παρόλα αυτά το Linux μου είναι ιδιαίτερα συμπαθητικό και προσπαθώ +να το κάνω το κύριο λειτουργικό σύστημα για μένα στο μέλλον, όμως κατά τη γνώμη μου κάτι τέτοιο είναι εξαιρετικά δύσκολο αν δεν απλοποιηθούν κάποιες διαδικασίες +που για τα Windows είναι ρουτίνα. Αν δεν υπάρξει πλήρως γραφικό περιβάλλον δεν νομίζω ότι θα έχει τύχη το Linux, ίσως το KDE να αποτελέσει μια καλή λύση, +διαφορετικά δε νομίζω να πιστεύετε ότι κάποιος θα παραμείνει στην Command Line και θα ψάχνει με τις ώρες σε man pages, βιβλία και γνωστούς για να δει πως +συντάσσεται μια εντολή τι παραμέτρους παίρνει και άλλα τέτοια χαριτωμένα ενώ θα μπορούσε τσεκάροντας δύο Check Boxes στα Windows να έχει τελειώσει τη δουλειά +του. + +*Συμφωνώ, και γι\' αυτό κι εγώ είμαι φανατικός των KDE/GNOME. Αλλά επειδή είμαι πολύ παλιός στο UNIX (πριν ακόμα το Linux αρχίσει να μπουτάρει αυτόνομα σε PC), +είμαι επίσης φανατικός του command-line :) Αλλά, επειδή είμαι λίγο παλιός, και οι γέροι έχουν μια τάση να είναι παράξενοι και μονόχνωτοι (ξεροκέφαλοι, φανατικοί +κλπ κλπ) μην το αναλύσουμε πολύ το θέμα\... Μου αρέσει και το CLI (command line interface) και το GUI (graphical user interface), αλλά το CLI το αγαπάω πιο πολύ +γιατί το ξέρω χρόνια τώρα και πολύ καλύτερα:) Τεσπα\...* + +Για μένα πάντως το Linux αποτελεί μια μεγάλη πρόκληση και είμαι σίγουρος πως κάποια φορά θα καταφέρω να το δαμάσω και να το παίζω στα δάκτυλα (όπως κάτι +τρελαμένοι στο magaz ) για αυτός θα σας παρακαλέσω για τρεις απαντήσεις\ +α) Πως συνδεόμαστε στο Internet (έχω otenet και μια υπεραναλύτικη περιγραφή θα ήταν κάτι παραπάνω από χρήσιμη για μένα). + +*Σαν μη δικτυωμένος χρήστης δεν μπορώ να απαντήσω, αλλά υπάρχουν κάποια άρθρα για το πρόγραμμα Xisp σε πρόσφατα τεύχη του Magaz (5 και 6). Πιστεύω ότι εκεί θα +βρείς πιο έγκυρες πληροφορίες.* + +β) Υπάρχει κάποιο Development Tool για C/C++ σε στυλ ας πούμε Visual C++ (πλήρως γραφικό περιβάλλον ) που να κάνει το Debugging εύκολο (μη μου πείτε μόνο το +xgdb) + +*Ναι, αλλά είναι commercial, και τα πληρώνεις λίγο. Υπάρχει το Xbuilder της Sun Microsystems, που βγάζει κώδικα για Motif libraries, αλλά την τελευταία φορά που +ρώτησα έκανε γύρω στα \$200-300, που δεν είναι και πολύ φτηνό για τον \"μέσο προγραμματιστή\".* + +γ) Όταν χρησιμοποιώ μαθηματικές συναρτήσεις (πχ sqrt με τον gcc εννοείται ) αν και έχω κάνει include όλες τις απαραίτητες libraries και περνάει απ τον Compiler +κατά τη διάρκεια του Linking μου χτυπάει error. Τι να κάνω; + +*Κατ\' αρχήν \#include δεν κάνεις τις βιβλιοθήκες (libraries ελληνιστί), αλλά τα αρχεία επικεφαλίδας (header files). Και στον GCC μπορείς να δεις +compile-εντολές όπως:* + + gcc -o papari main.c papari.c -I/local/include/ncurses \ + -L/local/lib -lm -lgdk -lgtk -lX11 + +*Το \"-lm\" του λέει να βάλει την βιβλιοθήκη των μαθηματικών, και μάλλον πρέπει να την χρησιμοποιήσεις κι εσύ :)))\ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--\ +Α, και μην ξεχάσω, τις libraries τις βάζουμε \*πάντα\* \*στο\* \*τέλος\*!\ +\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\--\ +\ +Ελπίζω να βοήθησα κάπως* + +Ευχαριστώ για το χρόνο σας και να είστε έτοιμοι να δεχτείτε καλόπιστη κριτική (όχι για το περιοδικάκι σας αυτό είναι άριστο ) αλλά για το Linux που από ότι +φαίνεται το υπεραγαπάτε.\ +Φιλικά\ +Βασίλης + + +### [10. Προβλήματα με το compilation του KDE]{#s10} + +Από : [Κώστας Σακελλαρίδης](mailto:kos_sak@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Δεν λέω, πολύ ωραίο το Linux αλλά πολύ δύσκολο το άτιμο. Έφτυσα αίμα να το κάνω να δουλέψει, και αυτό μόνο για το demo! (S.u.S.E) + +*Έλα μωρέ, κάθε αρχή και δύσκολη (αν και κάτι δεν πάει καλά γιατί το SuSE είναι πάρα πολύ εύκολο).* + +και για αυτό θέλω να σας κάνω κάποιες ερωτήσεις.\ +1)Το Mouse μου είναι MouseMan αλλά δεν δουλεύει ότι και να κάνω. Μήπως φταίει το demo? + +*Άγνοια :-(. Το δήλωσες ως Mouseman?* + +2)Έχω μόνο ένα σκληρό και δεν θέλω να τον φορμάρω. Υπάρχει κάποιος ασφαλής τρόπος να χωρίσω τον σκληρό χωρίς να χάσω δεδομένα; + +*Ναι, αν δεν έχει FAT32 υπάρχει το fips. Πρέπει να υπάρχει μέσα στο SuSE, αλλιώς ψάξε στο Internet [Ftp search](http://ftpsearch.ntnu.no) για fips.* + +3\) Πόσο καλό είναι το S.u.S.E. σε σχέση με το RedHat; Γιατό ΟΛΟΙ έχουν RedHat; + +*Πολύ καλό, σχεδόν το ίδιο μόνο που (αν δεν κάνω λάθος) είναι libc-based. Έχουν όλοι RedHat γιατί\ +α) αυτό έρχεται στην ελλάδα\ +β) αυτό ξέρει ο κόσμος, αυτό προτείνει\ +γ) η RedHat είναι μεγάλη εταιρεία και μπορείς να είσαι λίγο - πολύ σίγουρος. Πάντως για το SuSe δες το σχετικό άρθρο στο τεύχος 5.* + +Συγχαρητήρια για την ωραία δουλειά που κάνατε! Σας ευχαριστώ για τη βοήθεια. + +*Any time :-)* + +ΥΓ: Δεν κατάλαβα καλά, ΜΗΠΩΣ το Magaz θα βγει σε χαρτί; Αν ναι, πότε; + +*Όχι, τα σχέδια είναι να παραμείνει ηλεκτρονικό. Αν γίνει έντυπο, θα γίνει υπό την αιγίδα του HELLUG ίσως, οπότε δεν είναι θέμα δικό μας να απαντήσουμε αλλά του +Hellug (όταν αυτό δημιουργηθεί).* + +Αν όχι πόσο δύσκολο θα ήταν αυτό; + +*Ούτε πολύ ούτε λίγο. Δυστυχώς είναι μεγάλη ιστορία να στην εξηγήσω σε μία απάντηση περιοδικού\...* + + +### [11. Ρυθμίσεις pppd]{#s11} + +Από : [Ισαάκ Τσαλίκογλου](mailto:isaakt@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Θα ήθελα να μου πείτε την σύνταξη της εντολής pppd με την οποία θα δημιουργήσω ppp σύνδεση στην HellaNet, και όποιες άλλες παρεμβάσεις σε αρχεία, έτσι ώτσε να +συνδεθώ στο Internet, καθ\' ότι είμαι αρχάριος, έχω το redhat 5 με τον metro-X server και δεν έχω το KDE. + +*Διαβάζεις το τεύχος 5 για τις [ρυθμίσεις του XISP γενικά](../05/06_xisp.html) και βρίσκεις στο τεύχος 6 τις [ειδικότερες για Hellasnet](../06/05_xisp2.html)* + + +### [12. Χμμμ, ένα πολά βαρύ]{#s12} + +Από : [Χριστίνα Γουδέλη](mailto:christina@hotmail.com) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Διάβασα το πως να συνδέσεις την καφετιέρα με τον υπολογιστή και μου άρεσε πολύ\...\..... αλλά και από της άποψης πως μπορεί να χρησιμοποιηθεί και αλλού, αλλά τι +γίνεται αν δεν ξέρεις C \...\...?????????????????? + +*Ναι, είναι πολύ ωραία ιδέα η καφετιέρα, και μάλιστα, μετά από συζητήσεις με τον Φώτη σκέφτομαι να φτιάξω το /dev/coffee για όσους δεν ξέρουν να προγραμματίσουν +σε C. Όπως και να το κάνουμε είναι δύσκολο να γράφεις C πρόγραμμα κάθε φορά που θέλεις απλά να \*πιεις\* \*ένα\* \*καφέ\*, ειδικά αν είναι πρωί και το βλέφαρο +δεν έχει ανοίξει ακόμα και πολύ καλά :)))* + +*Διαβάζω που λες το βιβλίο \"LINUX Device Drivers\" του φίλου μου του Alessandro Rubini (εκδόσεις O\' Reilly & Associates) και σύντομα ελπίζω να έχω έτοιμο έναν +οδηγό για σύνδεση καφετιέρας σε \*σειριακή\* ή \*παράλληλη\* θύρα απλού PC!* + +*Το /dev/coffee θα μπορεί να δέχεται εντολές όπως:* + + bash# echo "frappes, metrios" >/dev/coffee + bash# echo "freddo" >/dev/coffee + bash# echo "espresso" >/dev/coffee + +*ή ακόμα και το πιο μάγκικο:* + + bash# echo "polla barus" >/dev/coffee + +*Το τι θα στέλνει στην θύρα εξόδου είναι ακόμα θέμα προς συζήτηση, αφού το hardware κομμάτι δεν ξέρω ακόμα τι ακριβώς πρέπει να κάνει.* + +*Anyway, το παλεύω το πράγμα, κι άμα θέλει κάποιος να βοηθήσει, είμαι ανοικτός σε κάθε ιδέα / πρόταση\... Τι λες, αξίζει τον κόπο?* + + +### [13. Ερώτηση για μνήμη μεγαλύτερη από 64 Mb]{#s13} + +Από : [Αλέξανδρο Ναούμ](mailto:ovelix@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Χαίρεται. Πρώτα πολλά συγνώμμη για τα greeklish αλλά αδυνατώ να έχω ελληνικό πληκτρολόγιο μέσα στο KDE. Τέλος πάντων αυτό είναι μια άλλη ιστορία. Είμαι ένας +νέος σχετικά χρήστης με το linux και ψάχνοντας μου γεννήθηκε μια απορία. Το μηχάνημά μου (K6-233) διαθέτει 96MB SDRAM. Όμως το linux βλέπει και χρησιμοποιεί +μόνο τα 64MB. Γιατί αυτό και πως μπορώ να δω και τα υπόλοιπα; + +*Αυτό συμβαίνει γιατί το BIOS του μηχανήματός σου (όπως και όλων των PC αν δεν κάνω λάθος) έχει περιορισμό στο πόση μνήμη μπορεί να δεί. Για να δει όλη τη μνήμη +πρέπει να του βάλεις στο lilo την εντολή append=\"mem=96M\" ή την ώρα που φορτώνει (δηλαδή όταν βγάλει το \"lilo\", του γράφεις linux append=\"mem=96M\") ή μέσα +στο /etc/lilo.conf, ως τελευταία γραμμή των ρυθμίσεων του συγκεκριμένου kernel.* + +Ευχαριστώ πολύ και πολύ συγνώμμη για τα greeklish. + +*Χμμ, υπάρχουν διάφοροι τρόποι για ελληνικά στα Χ. Δες στα archives της linux-greek-users.* + + +### [14. PPP ρυθμίσεις, modem.]{#s14} + +Από : [Magna](mailto:magnawarez@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γεια σας, είμαι ένας 17χρονος Linux user ασχολούμαι εδώ και ένα μήνα και το βρήκα πολύ τέλειο (αλλά δύσκολο) + +*Καλώς ήρθες!!!* + +Θα ήθελα να σας ρωτήσω σχετικά με τις ρυθμίσεις της Compulink αν ξέρετε τι πρέπει να βάλω στο pppsetup. + +*Λυπάμαι, η Compulink δεν (κατα)δέχτηκε να μας απαντήσεις για ρυθμίσεις σύδεσης με Linux. Δες τα archives της linux-greek-users* + +Ακόμα θα ήθελα να ρωτήσω γιατί το modem μου δεν μπορεί να καλέσει από linux (έχω microcom 33600 office porte voice). Μήπως ξέρετε ποια strings πρέπει να +χρησιμοποιήσω; + +*Τα strings (init string κλπ) πρέπει να αναφέρονται στο manual του modem. Δυστυχώς ο μόνος που θα μπορούσε να τα ξέρει εκτός από σένα, θα ήταν κάποιος άλλος με +το ίδιο modem.* + + +### [15. Πολλαπλοί επεξεργαστές]{#s15} + +Από : [Στέρνας Στέφανος](mailto:sternas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Μετά από 5 μήνες περίπου που παρακολουθώ την υπέροχη σελίδα σας αποφάσισα και εγώ γνωρίσω το κόσμο του linux (μέχρι τώρα NT Server User) Μια και μόνο ερώτηση: +Ποια έκδοση του linux να χρησιμοποιήσω για τους δυο επεξεργαστές μου (2xPentium 200 MMX); + +*Οποιοδήποτε distribution και να βάλεις, θα μπορέσει να δει τους 2 επεξεργαστές, αρκεί να το δηλώσεις στο compilation του πυρήνα. Η επιλογή είναι η SMP και πιο +πολλές λεπτομέρειες μπορείς να βρεις στο αρχείο /usr/src/linux/Documentation/SMP.txt (αν δεν έχεις πρόσβαση σε linux, στείλε μας ένα e-mail να στο στείλουμε +αυτό το αρχείο).* + + +### [16. Κάρτα γραφικών και KDE]{#s16} + +Από : [Γαλανόπουλος Γιώργος](mailto:microgenesi@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Είμαι νέος χρήστης του Slackware και θα ήθελα να μάθω τι πρέπει να κάνω για να χρησιμοποιήσω στο maximum την κάρτα γραφικών μου και να εγκαταστήσω το KDE. Έστω +και το Βετα4 που υπάρχει στο CD. + +*Τι εννοείς να χρησιμοποιήσεις στο maximum την κάρτα γραφικών και να εγκαταστήσεις το KDE? Γίνε πιο συγκεκριμένος στα θέματα που δε καταλαβαίνεις\...* + +Ακόμα δεν ξέρω που πρέπει να στέλνω τα μεταφρασμενα howtos. + +*Μεταφρασμένα howtos στον συντηρητή και οργανωτή αυτών, [Γεωργάτο Φώτη](mailto:gef@ceid.upatras.gr)\ +Υ.Γ. Αν έχει αλλάξει ο συντηρητής, θα σε ειδοποιήσει ο ίδιος μόλις του στείλεις το πρώτο how-to :-)* + + +### [17. MS Word σε html ή txt]{#s17} + +Από : [Κολοζώφ Γιώργος](mailto:kolozofO@hermes.kke.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Ψάχνω ένα πρόγραμμα για linux που να μετατρέπει από word 6.0 σε TXT ή σε HTML, σας παρακαλώ βοηθήστε με\.... + +*Υπάρχει το [MSwordview](http://www.csn.ul.ie/~caolan/docs/MSWordView.html). Αυτό μετατρέπει Word97 αρχεία σε html.\ +Αν θέλεις μετατροπή από word 6 πρέπει να πάρεις το [laola](http://wwwwbs.cs.tu-berlin.de/~schwartz/pmh/laola.html) ή όπως αλλιώς λέγεται τώρα.\ +Έχε υπόψη σου ότι και τα δύο, έχουν πρόβλημα με τα ελληνικά, αν και αν θυμάμαι καλά, το laola το έχει διορθώσει στις τελευταίες εκδόσεις.* + + +### [18. AMD, KDM, CDE και αναλύσεις οθόνης.]{#s18} + +Από : [Θοδωρής Βερτόπουλος](mailto:babylon51@ibm.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Μόλις εγκατέστησα το SuSe Linux 5.3 και το KDE 1 και χρειάζομαι λίγη βοήθεια.\ +1) Έχω επεξεργαστή AMD k6 όταν θα κάνω compile τον kernel θα πρέπει να τον δηλώσω σαν Pentium ή σαν 486??? Ρωτάω γιατί πάντα όταν κάνω compile τον kernel μου +βγάζει 2 errors και δεν μπορώ να καταλάβω τι άλλο μπορεί να φταίει. + +*Καλή ερώτηση. Αν βρεις την απάντηση ενημέρωσέ μας :-) Εγώ τον έχω ως Pentium και μου βγάζει 4 λάθη, αλλά έχω εντοπίσει ότι δεν προέρχονται από τον επεξεργαστή +αλλά από το chipset (VIA). Αν έχεις τέτοιο chipset, πρόσεξε τα λάθη τι ακριβώς λένε. Αν δεν βγάλεις άκρη, ξαναγράψε μας. Πάντως ο kernel 2.2 λέγεται ότι θα έχει +ξεχωριστή επιλογή για AMD.* + +2)Ωραίο το KDE αλλά πως το κλείνω ώστε να βγώ σε command line??? Για να τρέξω το KDE τρέχω αναγκαστηκά το kdm γιατί με startkde μου βγάζει \" can\'t connect to +x- server\". Αφού τρέξω το kdm το kde ανοίγει κανονικά αλλά όταν θέλω να κάνω logout τρέχει πάλι το kdm και ανοίγει και ένα παράθυρο console (στο οποίο δεν +μπορώ να γράψω ούτε να το μετακινήσω) που καλύπτει όλα τα κουμπιά ( οκ, cancel, shutdown, κλπ). (Φοβάμαι ότι αυτό θα είναι μάλλον κανένα τελείως χαζό πρόβλημα.) + +*Ναι, είναι χαζό πρόβλημα, αλλά μην ανησυχείς\... Λοιπόν, όταν τρέχεις το startkde του λες να ξεκινήσει κάποια προγράμματα (του KDE μεταξύ των οποίων και ο kwm +- KDE window manager) χωρίς όμως να έχεις X-server. Οπότε η λύση είναι απλά να του πεις να ξεκινήσει το KDE γράφοντας την γραμμή startkde τελευταία στο .xinitrc +σου, και αφαιρώντας βέβαια οποιονδήποτε άλλο window - manager τρέχει από εκεί και να ξεκινήσεις κανονικά με startx. Όταν ξεκινάς το KDM (Κ Display Manager) +θεωρητικά δεν μπορείς να βγεις σε CLI (Command line interface) γιατι το KDM αναλαμβάνει να διαχειρίζεται το DISPLAY. Η λύση (αρκετά βάρβαρη) είναι να σκοτώσεις +(kill) το kdm ή τα X (δεν θυμάμαι πιο από τα δύο).* + +3\) Συγκριτικά ποιός window manager είναι καλύτερος; O KDE ή το CDE??? + +*Έλα ντε? Με δεδομένο ότι το CDE είναι εμπορικό, δεν το έχω δοκιμάσει, αλλά και να το δοκίμαζα δεν θα ήξερα διαφορά να σου πω :-)* + +4\) Πως μπορώ να έχω ανάλυση 1024x768 στο KDE?? Έχω μια Diamond 3d 2000 4MB και ότι και να κάνω η ανάλυση παραμένει 800x600, ίσως και χειρότερη!!! + +*Δεν έχει να κάνει με το KDE αυτό, αλλά με τον X-server που χρησιμοποιείς. Τρέξε το xf86config και από εκεί του δίνεις τις απαραίτητες ρυθμίσεις για κάρτα +οθόνης, μνήμη αυτής και αναλύσεις.* + diff --git a/content/articles/08/01_editorial.md b/content/articles/08/01_editorial.md new file mode 100644 index 0000000..67561b2 --- /dev/null +++ b/content/articles/08/01_editorial.md @@ -0,0 +1,44 @@ ++++ +title = 'Editorial' +date = '1998-10-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 08'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Φτάσαμε και στον Οκτώβριο, που προβλέπεται μήνας συνταρακτικός για την Ελληνική κοινότητα Linux. Μέχρι την Τρίτη 6 Οκτωβρίου υποβάλλονται υποψηφιότητες για το +πρώτο Δ.Σ. του Hellug. Τετάρτη και Πέμπτη (7 και 8 Οκτωβρίου αντίστοιχα) έχουμε την ψηφοφορία, και από Τετάρτη 14 Οκτωβρίου το πρώτο εκλεγμένο Δ.Σ. του Hellug +θα αναλάβει τα ηνία.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στα δικά μας τώρα, σε αυτό το τεύχος, έχουμε το κλασικό πλέον [Linux zone](02_lz5.html) από τον Παναγιώτη Βρυώνη. + +Υπάρχει μία πολύ σημαντική ανάλυση από τον Νίκο Κόκρα σχετικά με την ολέθρια όπως αποδεικνύεται σχέση [Windows και Linux](03_analysi.html) + +Σε αυτό επάνω να κάνω μία γρήγορη παρατήρηση. Όλοι ξέρουμε ότι το Linux δεν είναι για όλους. Προς Θεού, δεν το λέω ρατσιστικά, ταξικά ή με οποιαδήποτε άλλη +έννοια. Αυτό που εννοώ είναι απλά ότι το Linux είναι για αυτόν που το χρειάζεται, και ξέρει ΓΙΑΤΙ to χρειάζεται. Δυστυχώς τελευταία, λαμβάνουμε όλο και +περισσότερα mails στο περιοδικό, και βλέπουμε και αντίστοιχα mails στην linux-greek-users τα οποία δείχνουν ότι αυτοί που τα έγραψαν, ακολουθούν μία λάθος +προσέγγιση. Περιμένουν το linux να κάνει τα πάντα, με τον ίδιο τρόπο που τα κάνουν τα Windows. Όταν λοιπόν βλέπουν ότι δεν είναι αυτός ο τρόπος, αντί να κάτσουν +να διαβάσουν, στέλνουν mails τα οποία τελικά είναι και εκνευριστικά. Φίλοι μου, με όλη την καλή διάθεση σας το λέω, το Linux δεν είναι μόδα. Το Linux δεν είναι +αντί-Microsoft. Το Linux δεν είναι ο \"Ινδιάνος\" της υπόθεσης. Μην έρχεστε στο Linux επειδή είναι ο μικρός. Αφήστε αυτή τη νοοτροπία κατά μέρος, βρείτε ΑΝ +χρειάζεστε το Linux, διαβάστε, ξαναδιαβάστε, ψάξτε τη λύση στο πρόβλημά σας, και αν αυτά δεν βοηθήσουν ελάτε να το λύσουμε μαζί. + +Ο Ευριπίδης, αποφάσισε να μας κάνει να χάσουμε τον ύπνο μας. Έβγαλε (άκουσον άκουσον) τις φάτσες μας στη φόρα. Καλά ήμασταν μέχρι τώρα που δεν μας ξέρανε, τώρα +θα έχουμε και πληρωμένους φονιάδες να μας κυνηγούν; Γιατί αν δεν το καταλάβατε, [καταζητούμαστε](04_giafka.html) + +Ο Βαγγέλης Παπαδογιαννάκης βοηθάει σε απλές καθημερινές δουλειές. Οι νέοι χρήστες μας ζητάγανε μία στήλη ειδικά για αυτούς. Ε, να λοιπόν η ευκαιρία να δείτε +πόσο [απλή σας κάνει την ζωή το Linux](05_bash1.html) αν το ψάξετε λίγο. + +Επέστρεψε η στήλη [Πραγματικός κόσμος](06_thea.html) που για αυτό το τεύχος παρουσιάζει την ΤΗΕΑ. Και αν δεν την ξέρετε, είστε μάλλον ασυγχώρητοι. + +Ο Προκόπης Προκοπίδης και ο Αποστόλης Συρόπουλος, μας έστειλαν ευγενικά και τους υπερευχαριστούμε για αυτό, ένα άρθρο που λύνει μια και καλή το πρόβλημα με τα +[Ελληνικά στο TeX](07_GreekTeXFAQ.html). Διαβάστε το και δεν θα χάσετε. Πρέπει να θεωρηθεί ένα από τα καλύτερα άρθρα που είχε ποτέ το Magaz. + +Και βέβαια, δεν θα μπορούσε να λείπει η σταθερή [στήλη της αλληλογραφίας](08_mailbox.html). Εσείς μας γράφετε, κι εμείς\... + +Να σας υπενθυμίσω, ότι όπως πάντα, το magaz φιλοξενεί άρθρα, από όλους τους φίλους συνlinuxάδες, ενώ έχουμε ακόμα \"ανοιχτές θέσεις\" συνεργατών\... + +Καλή ανάγνωση, και καλό φθινόπωρο. diff --git a/content/articles/08/02_lz5.md b/content/articles/08/02_lz5.md new file mode 100644 index 0000000..c90bcc5 --- /dev/null +++ b/content/articles/08/02_lz5.md @@ -0,0 +1,95 @@ ++++ +title = 'Linux Zone' +date = '1998-10-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 08'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το Linux Zone είναι μία στήλη που σκοπό της έχει να παρουσιάζει μερικές από τις εμπειρίες μου στον χώρο του Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πολλά και διάφορα τα θέματα που πραγματεύεται το LZ αυτό τον μήνα, δείτε το σαν αποζημίωση για το \"σπαρτιάτικο\" LZ του προηγούμενου\... + +Πρώτα, πρώτα, να ξεκινήσουμε από ένα bug που παρατήρησα στο RedHat 5.1 όταν έκανα recompile τον kernel. Κατά την εκκίνηση, έβλεπα ένα σωρό λάθη που είχαν να +κάνουν με τα modules, αλλά και μετά, τα modules μου δεν δούλευαν σωστά. Ο λόγος ήταν ότι το /etc/rc.d/rc.sysinit δεν κοιτούσε στο σωστό directory. Η λύση +δώθηκε, με μία μικρή παρέμβαση στο εν λόγω αρχείο στις παρακάτω γραμμές: + +> if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then +> # Get ready for kerneld if module support in the kernel +> echo -n "Finding module dependencies... " +> if [ -f /lib/modules/preferred ]; then +> depmod -a preferred +> else +> depmod -a `uname -r` +> fi +> echo "done" +> fi + +Με την νέα εκκίνηση όλα πήγαν ρολόι. Ίσως να υπάρχει και αντίστοιχο patch στην RedHat, που να λύνει σωστότερα το πρόβλημα. + +Κάποιοι φίλοι με ρωτούσαν αν μπορεί κανείς να δημιουργήσει ΕΝΑ αρχείο html από το αντίστοιχο sgml, χωρίς δηλ. να σπάει το κείμενο σε τόσα αρχεία ανά κεφάλαιο. +Έ, ρε παιδιά, δώστε \"sgml2html\" χωρίς καμία παράμετρο και αρχείο και δείτε το σχετικό help. Τέλος πάντων, η λύση είναι να χρησιμοποιείτε την παράμετρο \"-s +0\" που κάνει ακριβώς το ζητούμενο. Α, και όταν θέλετε να πάρετε ascii text, μην ξεχνάτε το \"-f\" στο sgml2txt γιατί αλλιώς θα πάρετε man page. + +Α, και μιας και μιλάμε για options, ανακάλυψα (ίσως εσείς να το ξέρετε) την παράμετρο \"f\" στην εντολή `ps`. Με αυτή, βλέπετε ένα \"δεντρο\" που σχηματίζεται +από τα processes, ανάλογα με το ποιό \"σήκωσε\" πιο. Πολύ χρήσιμο. (Δοκιμάστε και `ps axf`.) + +Έκανα και μία αποτυχημένη προσπάθεια να στήσω το HylaFax ένα πρόγραμμα που αναλαμβάνει την διαχείρηση (αποστολή/λήψη) φαχ, αλλά απέτυχα. Πρέπει να ομολογήσω +όμως ότι δεν έψαξα το πράγμα αρκετά σε βάθος (και δεν είχα και δεύτερη γραμμή τηλεφώνου για να κάνω δοκιμές), υποψιάζομαι λοιπόν ότι κάπου φταίω εγώ. Από τα +κείμενα που διάβασα, το συγκεκριμένο πρόγραμμα δείχνει πολύ δυνατό, αν λοιπόν έχετε ανάγκη κάτι τέτοιο, δοκιμάστε το. + +Ξεφυλίζοντας παλιά Linux Journal έπεσα πάνω σε κάτι που ήξερα πόσο χρήσιμο είναι αλλά που ποτέ δεν χρησιμοποιούσα. Το RCS (Revision Control System) σας +επιτρέπει να \"σώζετε\" ένα αρχείο κάθε φορά που κάνετε αλλαγές σε αυτό. Αν αργότερα θελήσετε να δείτε πώς ήταν το αρχείο σε ένα παλαιότερο revision, τότε +μπορείτε να το κάνετε πολύ εύκολα. Ένα άλλο χρήσιμο χαρακτηριστικό είναι ότι μπορείτε να σώζετε και ένα σχόλειο με κάθε revision έτσι ώστε αν θελήσετε να δείτε +σε πιο συγκεκριμένο revision αλλάξατε το τάδε. + +Η χρήση του RCS μπορεί να γίνει πολύ εύκολη αν περιορισθείτε στα βασικά. Αν από την άλλη χρειαστείτε να το δουλεύετε σε ένα περιβάλλον με πολλούς χρήστες που +όλοι κάνουν αλλαγές σε ένα συγκεκριμένο αρχείο, τα πράγματα περιπλέκονται (αλλά είναι λογικό αυτό, δεν είναι;). + +Μερικές πολύ απλές συμβουλές για την χρήση του RCS. Στο directory που βρίσκεται το αρχείο με το οποίο δουλεύετε, δημιουργήστε ένα sub-directory με το όνομα RCS. +Δώστε \"ci \\" για να κάνετε check in το αρχείο. Θα σας ζητηθεί μία περιγραφή, καλό θα ήταν να την δώσετε. Αν μετά από αυτό δώσετε \"ls\" θα δείτε +ότι το αρχείο σας έχει εξαφανιστεί! Μην ανησυχείτε, βρίσκεται φυλαγμένο με μία ειδική μορφή στο RCS directory που δημιουργήσατε (\"ls RCS\"). Για να το κάνετε +check-out δώστε \"co -l \\". Αυτό, θα σας δώσει πίσω το αρχείο σας και θα το \"κλειδώσει\" έτσι ώστε μόνο εσείς να μπορείτε τα το κάνετε πάλι +check-in. Μέχρι τότε, όποιος άλλος θέλει μπορεί να το κάνει check-out αλλά όχι check-in. Με την εντολή \"rcsdiff \\" μπορείτε να δείτε την ιστορία +των αλλαγών. Για πολλές περισσότερες πληροφορίες, man rcs, man co, man ci, man rcsdiff,\... + +Ειδικά αν γράφετε προγράμματα, μετά από ένα μικρό διάστημα προσαρμογής και εξοικίωσης δεν θα διανοείστε να δουλέψετε χωρίς το RCS. + +Αφήνουμε τώρα το RCS και πάμε σε ένα πολύ σημαντικό θέμα (κατά την γνώμη μου). Τα ελληνικά στα TeX/LaTeX. Το LZ Έχει παινέσει επανηλειμένως τα συγκεκριμένα +πακέτα. Το μόνο αρνητικό είναι ότι η υποστήριξη των ελληνικών είναι κατά κάποιο τρόπο ελλειπής, κυρίως λόγω του ότι δεν υπάρχουν οδηγίες για την εγκατάστασή +τους. Άντε πάλι από την αρχή για να μπούν στο laptop\... Δεν ξέρω αν ακολούθησα σωστά βήματα, πάντως κατέβασα το TeXgreek.tag.gz από τον +[obelix](ftp://obelix.ee.duth.gr). Μέσα του βρήκα ένα σωρό αρχεία τα οποία τοποθέτησα κάτω από το /usr/lib/texmf/texmf και σε directories που είχαν αρχεία με +όμοια κατάληξη. Τέλος, έτρεξα `texconfig -rehash` και `texconfig -confall` και όλα δούλεψαν σωστά\... + +Θα ήθελα πολύ να μπορώ να μετατρέπω τα sgml files που έχουν ελληνικά (όπως τα ελληνικά HOWTOs, αλλά και τα άρθρα του magaz) σε latex, τώρα που το πακέτο +υποστηρίζει και ελληνικά, αλλά αντιμετώπισα δύο προβλήματα: + +- Το πρώτο είναι ότι πρέπει κάθε ελληνικό κομμάτι κειμένου να περικλείεται σε μία εντολή της μορφής /textgreek{}. Αυτό το έλυσα με ένα μικρό σκριπτάκι, μικρό + το κακό. +- Το δεύτερο όμως είναι ότι τα sgml-tools χρησιμοποιούν κάποια styles τα οποία δεν συνεργάζονται με το babel και άρα με τα ελληνικά. Αποτέλεσμα, ό,τι ελληνικό + γράφεται μέσα σε \, \ κ.λ. να χάνονται\... Αν υπάρχει κάποιος που να μπορεί να διορθώσει το πρόβλημμα αυτό\... + +Όσο για το σκριπτάκι, λίγο ακόμη χρειάζεται δουλειά και θα \"δωθεί στο κοινό\"\... + +Αν θυμάστε την περιπέτεια που είχα με τον X Server και την κάρτα γραφικών της NeoMagic, θα θυμάστε ότι η λύση δόθηκε από ένα \"πειραγμένο\" XF86\_SVGA server +που βρήκα στο Internet. Δεν θυμάμαι αν ειχα αναφέρει αργότερα, ότι βρήκα αυτό που χρειαζόμουν ακριβώς στο site της RedHat. Την περίοδο εκείνη, η RedHat είχε +έρθει σε συμφωνία με την εν λόγω εταιρεία ώστε να γράφει servers για τις κάρτες της και να τους διανέμει δωρεάν - όχι όμως και τα sources αφού η NeoMagic δεν +επιθυμούσε κάτι τέτοιο. Ακόμη και αυτό όμως άλλαξε! Στο θα βρείτε και τα binaries αλλά και τα sources των εν λόγο servers (και +αν δεν είναι ακόμη, θα είναι σύντομα)! + +Όπως σύντομα θα υπάρχουν και ένα σωρό πακέτα για το [GNOME](http://www.gnome.org), που από version σε version γινεται όλο και πιο εντυπωσιακό και χρήσιμο. Ήδη, +την ώρα που γράφω αυτά έχουν βγει τα βασικά πακέτα της version 0.30 και αναμένεται συνέχεια! + +Όσο για τα XFGreekKBD και XFGreekFNTS, όλο και κάποιος τα χρησιμοποιεί και χαίρομαι όταν λαμβάνω σχετικά mails\... + +Στην παγκόσμια Linux-ική σκηνή, τα νέα τα ξέρετε, αλλά αν όχι, μπορείτε να τα μάθετε σε δύο πολύ καλές διευθύνσεις: + +- (\"News for nurds. Staff that maters\")\... +- + +Εμένα πάντως μου έκανε εντύπωση ότι μετά από τις Sybase, Informix, Oracle ακούγεται και port της DB2 για Linux! (Εγώ πάντως θέλω τον SQLServer της +Microsoft\...) diff --git a/content/articles/08/03_analysi.md b/content/articles/08/03_analysi.md new file mode 100644 index 0000000..68f07fb --- /dev/null +++ b/content/articles/08/03_analysi.md @@ -0,0 +1,105 @@ ++++ +title = 'Linux και Windows' +date = '1998-10-01T00:00:00Z' +description = '' +author = 'Νίκος Κόκρας' +issue = ['Magaz 08'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Η σύγκρουση/σύγκριση μεταξύ windows και linux είναι γνωστή σε όλους μας.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ακόμα και από το περιοδικό μας έχει γίνει κάποιες φορές αρκετά εμφανής. Επίσης, καθημερινά πολλοί νέοι χρήστες έρχονται στον κόσμο του Linux. Αυτά τα δύο, αν +και φαινομενικά άσχετα, είναι όχι μόνο αλληλένδετα αλλά και αλληλοεπηρεαζόμενα. Πολύ περισσότερο, ο υπογράφων έχει λόγο να πιστεύει ότι μεταξύ των δύο υπάρχει +μια σχέση θετικής παλίνδρομης ανάδρασης ή πιο απλά όσο περισσότερο μιλάμε περι της Microsoft τόσους περισσότερους linux χρήστες θα έχουμε και παράλληλα όσους +περισσότερους νέους χρήστες έχουμε τόσο περισσότερο θα μιλάμε για την Microsoft.\ +Υπάρχει βεβαίως πρόβλημα αν η παραδοξολογία αυτή αποδειχτεί πραγματικότητα. Ναι μεν όλοι θέλουμε να διευρυνθεί η βάση χρηστών του linux, αλλά κάποια στιγμή θα +πρέπει να αναρωτηθούμε ποιοί πραγματικά έρχονται και γιατί. Ο υπογράφων πολύ φοβάται ότι τον τελευταίο καιρό εισέρχονται στην λίστα των ελλήνων χρηστών του +linux, αλεξιπτωτιστές με αμφίβολα αποτελέσματα για το καλό της κοινότητας.\ +Γιατί συμβαίνει αυτό ? Έχει άμεση σχέση με την κριτική των windows. Κατά την γνώμη του υπογράφοντος αποτελεί τεράστιο λάθος και ακόμα μεγαλύτερο όταν γίνεται σε +επίπεδο συλλογικό (από το Magaz ή το linux.gr). Μια τέτοια κριτική δυστυχώς ήταν της μοδός επί 2 χρόνια περίπου (από το 1996) και σήμερα θεωρείται πλέον cult +(sic ή ότι άλλο θέλετε). Οποιοσδήποτε θέλει να δείξει ότι γνωρίζει τα μέγιστα περί windows, αρχίζει την κριτική για τα άπειρα bugs των windows. Πολύ συχνά δεν +γνωρίζει ούτε καν την διαφορά π.χ. μεταξύ (Ε)IDE και SCSI. Αλλά κανείς δεν κάνει τον κόπο να τον ρωτήσει (πλην του υπογράφοντος). Όπως η αστυνομία πουλά ηρωίνη, +όπως οι γιατροί τα παίρνουν, έτσι και τα windows είναι \"lame\". Αντιλαμβανόμαστε όλοι ότι πρόκειται για γενικεύσεις από άτομα που κάπου, κάποτε άκουσαν κάτι +και το επαναλαμβάνουν, θέλοντας να δείξουν ότι κατέχουν τα μυστικά του σύμπαντος. Καλά βέβαια όλα αυτά, αλλά τι σχέση έχουν με το linux ? Δυστυχώς μεγάλη. Όταν +κάποιος πεφωτισμένος linuxas αρχίζει να \"ρίχνει\" τα windows και να \"ανεβάζει\" το linux, ο άμεσος συνειρμός που κάνει ο φουκαράς που τον ακούει είναι:\ +*\"Αααα, είμαι χαζός που μέχρι τώρα είχα windows. Αφού ο ειδήμονας εδώ μου λέει ότι δεν πάνε μια. Σίγουρα έχει δίκιο αφού το λέει όλος ο κόσμος. Άσε που είναι +και lame. Εγώ είμαι μάγκας (έλληνας κλπ). Θα σκίσω τα windows του \"βασιλάκη πόρτα\" και θα βάλω τα linux που είναι καλύτερα, γρηγορότερα, την έχουν πιο μεγάλη +και είναι και της μόδας\".*\ +Ναι, δυστυχώς το linux είναι της μόδας. Κάπως ξέφυγε ότι τα linux τα έχουν οι σοβαροί, οι κυριλάτοι, οι πολλοί \"έτσι\" power users και φίλοι μου τί είναι η ζωή +χωρίς πρότυπα ? Όταν μάλιστα οι επαϊοντες του χώρου, οι πεφωτισμένοι linux guru (των 2 μηνών που ανάθεμα και εάν ξέρουν τι είναι ο gcc και τι χρειάζεται) +γυρνάνε στα απανταχού φυσικά και ηλεκτρονικά στέκια χλευάζοντας τα windows και τους χρήστες τους, τότε τα πράγματα γίνονται δύσκολα. Ο ίδιος ο υπογράφων έτυχε +αντικείμενο χλευασμού από κάποιον linux guru (γκουχ γκουχ) όταν τόλμησε (!!) να μπεί στο \#linux-gr χρησιμοποιώντας τον καλύτερο irc client (Mirc-Win32). Του +συνεστήθει μάλιστα να forma-ρει άμεσα το δίσκο του και να βάλει πάραυτα linux, γιατί λέει θα serfa-ρει καλλίτερα στο Internet καθώς το linux είναι παιδί του +Internet ενώ τα windows δεν είναι. Γίνεται αντιληπτό ότι τέτοιου είδους \"προπαγάνδα\" μόνο κακό κάνει. Για πολλούς λόγους: + +- Κατ\'αρχήν το linux δεν είναι απαραίτητα καλύτερο των windows. Στις τυπικές εφαρμογές (επεξεργασία κειμένου, γραφικών, internet μέσω dial-up, gaming) τα + windows είναι έτη φωτός μπροστά από το linux από κάθε πλευρά (ταχύτητα, αξιοπιστία, ευκολία χρήσης). Μην ακούσω κανένα έξυπνο να μου εξιστορεί τα πάθη του + με τον Internet Explorer γιατί ο Communicator στο linux είναι \"ο Θεός να σε βοηθήσει\". +- Δεύτερον, για όλες τις τυπικές εφαρμογές (αλλά και τις ά-τυπες) απαιτείται διπλάσιος κόπος στο linux από ότι στα windows. Αν πρόκειται να διδάξει το + περίφημο έθνος τών linux guru UNIX σε όλα τα 17χρονα της χώρας, θα είναι μια μεγάλη συμβολή στον εξυγχρονισμό της Ελάδας. Έως τότε πρέπει να παραδεχτούμε + ότι πιο εύκολα θα δεί κανείς το www.tsonta.com μέσω Win32 παρά μέσω Linux. +- Τρίτον, ακόμα και εάν ο νεαρός μαθητευόμενος θέλει να μάθει, όταν του φορτώνουμε το κεφάλι με κάθε λογής βλακεία, είναι αναπόφευκτο να απογοητευτεί όταν δεί + το CLI (κατά το GUI) να τον περιμένει. Η ακριβής καταγραφή των πλεονεκτημάτων αλλά και των μεινεκτημάτων του Linux προσφέρει σαφώς μεγαλύτερη υπηρεσίες τόσο + στον εν λόγω νεαρό όσο και στο προφίλ του Linux. Η δε ιστορία με το KDE (αλλά και το GNOME) πρέπει να σταματήσει κάποτε. Αν είναι να πείσουμε τον κόσμο να + αφήσει τα MS-Windows για να βάλει τα γιαλαντζί GNU-Windows είμαστε όλοι για το ψυχιατρείο. (Σ.Σ. αυτά κύριοι είναι γραφικά περιβάλλοντα που δρούν + συνεπικουρικά, δεν είναι απομιμήσεις λειτουργικών συστημάτων σε 32bit χρώμα και αλλοίμονο εάν ο κόσμος αρχίζει να βάζει linux για το KDE). + +Δυστυχώς οι απαραίτητες διευκρινήσεις πρίν από το fdisk δεν δίνονται. Πολύ περισσότερο, κριτικάροντας την Microsoft και εξυμνώντας το δικό μας Linux, +συμπεριφερόμαστε σαν τους χειρότερους μπακάληδες, ασφαλιστές, product managers και άλλους τέτοιους χαριτωμένους. Αυτό που καταφέρνουμε λοιπόν είναι να +προσελκύουμε όλους τους χαζούς του ελληνικού computing που με μηδαμινές γνώσεις και καμμία όρεξη για μάθηση θέλουν απλώς να λένε στους φίλους τους ότι έχουν +linux και ως εκ τούτου είναι πολύ \"in\" τυπάδες. Και θέλουν να κάνουν compile το KDE τρομάρα τους γιατί τα binaries είναι lame (o υπογράφων έχει χλευαστεί και +για αυτό) Γιατί ενοχλούμαι από αυτήν την κοσμοσυροή ? **Πρώτον**, γιατί έρχονται και ρωτάνε τι είναι το \"ls\" ενώ είναι προφανές ότι δεν τους πέρασε καν από το +μυαλό ότι θα πρέπει να στρώσουν το κώλο τους να βρούν τι σημαίνει. **Δεύτερον** γιατί μου στερούν το βασικότερο όπλο μου (το Read The Fucking Manual), αφού δεν +ξέρουν καν τι σημαίνει και έτσι δεν προσβάλονται καν όταν το ακούνε (κάποιος μου απάντησε ότι το RTFM βγάζει \"bash: RTFM: command not found\"). **Τρίτο**, +τελευταίο και σημαντικότερο, αυτοί οι χρήστες φέρνουν και άλλους τέτοιους. Όλοι μαζί χλευάζουν την Microsoft, συνιστούν ακόμα και στον παπά της ενορίας να βάλει +linux και το βράδυ μπαίνουν από windows για να κάνουν και καμιά δουλειά.\ +Προς Θεού, δεν αντιμάχομαι την εισαγωγή νέων χρηστών. Αντίθετα την επιζητώ και όσοι γνωρίζουν τα των υπολογιστών και λειτουργικών συτημάτων καταλαβαίνουν και +γιατί. Αλλά, βλέποντας πιο μακροχρόνια, καταλήγω ότι προτιμώ έναν σοβαρό και συνηδητοποιημένο νεό χρήστη παρά 10 γελοίους που θέλουν να εντυπωσιάσουν την +γκόμενα, τον φίλο, τον εργοδότη. Αυτός που με γνώση και προσεκτικά βήματα δοκιμάζει να έρθει στο κόσμο του linux δεν θα το κάνει γιατί τα windows είναι lame. +Ούτε γιατί του είπανε ότι το linux το χρησιμοποιούν οι \"hackers\" (άλλο παιδικό τραύμα και αυτό). Αντίθετα, γιατί ο φίλος μεταξύ καφέ, τσιγάρου και περατζάδας +σε γνωστές πλατείες ανά την επικράτεια του είπε: \"ρε συ, γιατί ταλαιπωρείσαι με τα windows αφού βλέπεις ότι δεν σε καλύπτουν ? έλα σπίτι να σου δείξω την λύση +στο πρόβλημα που έχεις.\" Αυτό όμως προυποθέτει τα εξής: α) ένα πρόβλημα που δεν λύνεται nice and clean στα windows. β) έναν windows χρήστη που ψάχνει λύση γ) +ένα linux χρήστη που μπορεί να του την δείξει. Χωρίς φανφαρολογίες, χωρίς αφορισμούς και χλεύη, απλά, ήρεμα και αποτελεσματικά. Αντίθετα, πολλοί εξ υμών πάνε +σώνει και καλά να δημιουργήσουν ανάγκες: το linux έχει mail server, web server, DNS sever, samba, mamba, lamba κλπ. Θαυμάσια. Έτσι εγώ που έχω ένα υπολογιστή +σπίτι μου και μπαίνω από τον τάδε ISP ξαφνικά θα αρχίζω να τρέχω καμμια δεκαπενταριά daemons γιατί έχω linux και πρέπει να το εκμεταλευτώ. Ρώτησε λοιπόν κανείς +αυτόν τον περίφημο windows χρήστη εάν είναι ευχαριστημένος ? Πολύ περισσότερο αναρωτήθηκε κανείς εάν έχουμε το δικαίωμα (και συνταγματικά ακόμη) να διαταράσουμε +τo ευτυχές computing αυτού του ανθρώπου γιατί θέλουμε οπωσδήποτε να τον αναβαθμίσουμε ? Με πιο δικαίωμα, εσείς οι πολύ \"έτσι\" γκομενάτοι, κυριλάτοι +hackerades, guru\'s από τα γεννοφάσκια σας πάτε και ενοχλείτε τον κόσμο ? Η απάντηση είναι απλή: γιατί κανείς δεν έχει ζήσει το linux (αλλά και πολλά της +ιστορίας πλέον των υπολογιστών) σε τέτοιο βαθμό ώστε να έχει την απαραίτητη κουλτούρα. + +Ένας από τους πρώτους νόμους του Linux Advocacy είναι ότι ΠΟΤΕ δεν πάμε εμείς αλλά έρχονται αυτοί σε εμάς. Όσοι είναι περίεργοι να μάθουν τον δεύτερο είναι ο +εξής: ΔΕΝ μιλάμε ποτέ εναντίον άλλων λειτουργικών. Το δικό μας μπορεί να είναι καλύτερο. αλλά προσπαθούμε να το αποδείξουμε χωρίς να βρίζουμε τα προιόντα του +κόπου κάποιων άλλων προγραμματιστών. Πέρα από τα μυστικά του marketing η στοιχειώδης ευγένεια και συναδελφικότητα με τον \"φίλο\" προγραμματιστή της Microsoft +απαιτεί την καλοπροαίρετη κριτική με σκοπό να τον βοηθήσεις στο debugging του προγράμματός του, όπως θα σε βοηθήσει και αυτός με το δικό σου. Μεταξύ ανθρώπων +που βρίσκονται στην κορυφή μιας από τις ταχύτερα εξελισσόμενες τεχνολογίες του καιρού μας ή κάπως κοντά της (γιατί δεν γνωρίζουμε όλοι τα πάντα σε αυτόν το +μάταιο κόσμο) είναι αδιανόητο να βρίσκονται ένα μάτσο γελοίοι που συμπεριφέρονται σαν ημι-άγριοι Ελληνες computer-άδες που από το Larry και το Quake θέλουν εν +μια νυκτί να γίνουν \"και\_εγώ\_δεν\_ξέρω\_τι\_ακριβώς\" πατώντας πάνω στον ελέυθερο χρόνο σου (γιατί δεν έχουν διαβάσει ούτε καν το manual του αγαπημένου τους +Tomb Raider) και δοκιμάζοντας την υπομονή σου (\"έχω linux εδώ και 2 μήνες και το ξέρω πολύ καλά, αλλά τώρα έβαλα RedHat και έχω πρόβλημα γιατί το rpm δεν κάνει +unrpm, μπορείς να με βοηθήσεις ?) Όλα αυτά είναι σκέψεις καθαρά προσωπικές, που προβληματίζουν τον υπογράφοντα καιρό τώρα, καθώς βλέπει το linux να γίνεται σιγά +σιγά ψιλο-mainstream στην χώρα μας. Δυστυχώς τον τελυταίο καιρό, η αύξηση του linux στην Ελλάδα είναι εις βάρος της σοβαρότητας. Χαρακτηριστικό παράδειγμα +κάποιος \"linuxas\" που συμμετείχε (συμμετέχει ?) ενεργά στις δραστηριότητες ίδρυσης του HELLUG. Σε ένα meeting από τα ελάχιστα όπου είχα παρευρεθεί, +εκμηστηρεύτικε ότι δεν ξέρει και πολλά από linux αλλά έχει βαρεθεί την microsoft (fuck microsoft είχε πει) και θέλει να συμμετάσχει στον HELLUG γιατί θέλει να +πολεμήσει την Microsoft. Το περίλυπο και μάλλον ειρηνικό βλέμμα του υπογράφοντα ομολογουμένως τον απογοήτευσε. Χρειάζεται λοιπόν εγκράτεια και αυτογνωσία, υλικά +που λείπουν τόσο από την χώρα μας εν γένει αλλά και ειδικότερα από τον χώρο του ελληνικού computing. Στους επόμενους μήνες όλο και περισσότερος κόσμος θα ακούει +για το linux και τα hits του linux.gr θα ανεβαίνουν κατακόρυφα. Ελπίζω οι διαχειριστές του να δείξουν την υπευθυνότητα και την σοβαρότητα που απαιτείται. Η +λογική του \"linux everywhere\" που διακατέχει πολλούς στο μαγαζί μας, είναι όχι μόνο ουτοπική αλλά και δυνητικώς καταστροφική για το linux στην χώρα μας. +Πρέπει επιτέλους να φιλτράρουμε το λόγο μας, όχι για να αποθαρρύνουμε τους νέους χρήστες αλλά για να τους συμβουλέψουμε σωστά. Δεν πρέπει να έχουμε το complex +να συστήσουμε WindowsNT ή Windows9x ή οτιδήποτε άλλο όταν βλέπουμε ότι θα καλύψει καλύτερα τις ανάγκες κάποιου. Όσοι εξ υμών γνωρίζουν κάτι παραπάνω από τον +μέσο έλληνα χρήστη θα πρέπει να έχουν στο μυαλό τους όχι πως θα \"πουλήσουν\" περισσότερο linux αλλά πως θα \"προωθήσουν\" το linux. Ποιά η διαφορά ? Μπορεί +κανείς να προωθήσει το linux χωρίς να υπόσχεται λαγούς με πετραχήλια με την υιοθέτηση του linux και φυσικά χωρίς την γελοιότητα της κριτικής χωρίς νόημα +εναντίον της Microsoft. Αλλά με την δημιουργία ενός σοβαρού, αξιόπιστου και αποτελεσματικού πυρήνα ελλήνων χρηστών linux που ξέρει να δίνει λύσεις σε κάθε +πρόβλημα με όλα τα εργαλεία που προσφέρει ο κόσμος του linux OTAN και OΠOY ζητείται η συνδρομή του. Η αντιμετώπιση του μέσου χρήστη που θέλει να βάλει linux δεν +πρέπει να είναι σαν να πήρε το σωστό δρόμο του Θεού μακρυά από τον σατανά και τους πειρασμούς του. Εχουμε φτάσει στο σημείο να συγχαίρουμε τον νεό χρήστη που +βρήκε το δρόμο προς τον παράδεισο και μόνο \"αλληλούια\" δεν ανακράζουμε για τον αδερφό που βρήκε την σωτηρία. Αντίθετα η αντιμετώπισή μας πρέπει να είναι +σκεπτικιστική και η πρώτη ερώτησή μας να είναι ΓΙΑΤΙ θέλεις να βάλεις linux. Oι απανταχού ΑΥΤΟαποκαλούμενοι hackers και guru δεν μπορούν βέβαια να αξιολογήσουν +την απάντηση του ενδιαφερόμενου και να τον καθοδηγήσουν σωστά. Εμείς μπορούμε.\ +Ας αφήσουμε λοιπόν την Μicrosoft στην ησυχία της και ασχοληθούμε με εμάς. Σε αντίθετη περίπτωση θα μας φάνε οι κότες γιατί μαζί με την ενασχόληση με την +microsoft θα αναγκαστούμε να ασχολούμαστε και με τους πελάτες της. Είστε σίγουροι όλοι εσείς που συγκρίνετε το linux με τα windows οτι θέλετε να ασχοληθείτε με +το αντικείμενο αυτό ? + +Υ.Γ. Αντιλαμβάνομαι ότι το άρθρο σε μερικά σημεία είναι λίγο επιθετικό. Δεν περιμένω βέβαια e-mail συγχαρητηρίων. Άλλωστε η κοπέλα μου συμφώνησε απολύτως με την +γνώμη μου (αυτό μας έλλειπε να διαφωνούσε) και συνεπώς είμαι ήσυχος :-) diff --git a/content/articles/08/04_giafka.md b/content/articles/08/04_giafka.md new file mode 100644 index 0000000..1363cfa --- /dev/null +++ b/content/articles/08/04_giafka.md @@ -0,0 +1,51 @@ ++++ +title = 'GPL Licensed to kill' +date = '1998-10-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας' +issue = ['Magaz 08'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +***ΠΡΟΣΟΧΗ !!!** Τα παρακάτω άτομα καταζητούνται από την Micro\$oft ζωντανοί ή νεκροί.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Κατηγορία:** + +Σύσταση συμμορίας δωρεάν προσφερόμενων υπηρεσιών, αφιλοκερδώς, και υποκίνηση πραξικοπήματος κατά των συμφερόντων της εν λόγω εταιρείας. Στις 26/09/98 η +τρομοκρατική τους ενέργεια, επισφραγίστηκε με την επιτυχή συναρμολόγηση ενός, ιδιοχείρου κατασκευής, Linux Server. Φήμες θέλουν να ονομάζεται ***tux***.\ +Η προκλητική αυτή ενέργεια ξεπέρασε κάθε όριο ανοχής. Κάθε προσπάθεια συνετισμού απέτυχε. Ολοι οι παρακάτω εγκληματίες, εμμένουν μέχρι θανάτου στα telnet τους. +Οι άνθρωποι αυτοί είναι αδίστακτοι και αμετανόητοι. Οποιοσδήποτε έχει πλευριστεί με σκοπό την στρατολόγηση από οποιονδήποτε από αυτούς, να το αναφέρει αμέσως. +Κίνδυνος ελοχεύει να καλυφθούν οι τρομοκρατικές ενέργειες της γιάφκας κάτω από την ομπρέλλα του πανίσχυρου \"νομότυπου\" συλλόγου HELLUG. + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ ![](/08/img/georgatos.jpg) + ![](/08/img/vryonis.jpg) + + *ΠΑΝΑΓΙΩΤΗΣ ΒΡΥΩΝΗΣ: Ειδικότητα: Διάβρωση της στρατιωτικής μηχανής εκ των έσω. *ΦΩΤΗΣ ΓΕΩΡΓΑΤΟΣ: Καταζητείται από την Interpol. Συνεργασίες με αντίστοιχες + KDE serial killer.* αναρχικές ομάδες του εξωτερικού.* + + ![](/08/img/exidaridis.jpg) ![](/08/img/kabrianisbw.jpg) + + *ΓΙΑΝΝΗΣ ΕΞΗΝΤΑΡΙΔΗΣ: Έχει εγκληματίσει κατά συρροήν στην Πάτρα. Εξαπλώνεται *ΜΙΧΑΛΗΣ ΚΑΜΠΡΙΑΝΗΣ: Η νομότυπη εκπροσώπηση στα ΜΜΕ. Μεγαλοεκδότης περιοδικών.* + και στην Αθήνα.* + + ![](/08/img/maistrelis.jpg) ![](/08/img/manos.jpg) + + *ΚΩΣΤΑΣ ΜΑΙΣΤΡΕΛΗΣ: Ειδικότητα: Η πιο γρήγορη κονσόλα.* *ΚΩΣΤΑΣ ΜΑΝΟΣ: Εμφανίστηκε από το πουθενά. Ακόμα δεν εκρεμμούν κατηγορίες. + Υποπτος.* + + ![](/08/img/bolis.jpg) ![](/08/img/papakostas.jpg) + + *ΣΠΥΡΟΣ ΜΠΟΛΗΣ: Αδίστακτος αν και νεοφώτιστος* *ΕΥΡΙΠΙΔΗΣ ΠΑΠΑΚΩΣΤΑΣ: Ιδιοκτήτης της γιάφκας, του πιγκουίνου. Φέρεται ως ο + εγκέφαλος αυτής της σύναξης.* + + ![](/08/img/sanida.jpg) ![](/08/img/tsakaloglou.jpg) + + *ΒΟΥΛΑ ΣΑΝΙΔΑ: Γυναίκα Δηλητήριο. Συνιδιοκτήκτρια του πιγκουίνου. Οργάνωση.* *ΚΩΣΤΑΣ ΤΣΑΚΑΛΟΓΛΟΥ: Εχει αναπτύξει παρόμοιες δραστηριότητες και το 83. + Διαφεύγει από τότε. Ο θεωρητικός.* + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- diff --git a/content/articles/08/05_bash1.md b/content/articles/08/05_bash1.md new file mode 100644 index 0000000..d486a16 --- /dev/null +++ b/content/articles/08/05_bash1.md @@ -0,0 +1,199 @@ ++++ +title = 'Απλά μαθήματα Bash μέρος 1ο.' +date = '1998-10-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Παπαδογιαννάκης' +issue = ['Magaz 08'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Γεια και χαρά και καλό Φθινόπωρο. Πάλι ήρθε το μελαγχολικό\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Από αυτή τη στήλη, θα προσπαθούμε να μάθουμε διάφορα κολπάκια για να κάνουμε τη ζωή μας με το αγαπημένο μας λειτουργικό ακόμα καλύτερη (Χμμμ, μάλλον ευκολότερη +θα ήταν η σωστή λέξη). + +Αρχίζοντας από αυτό το μήνα, θα παρουσιάσουμε κάποια shell scripts, (σα να λέμε batch files) έτσι ώστε να αυτοματοποιήσουμε κάποιες καθημερινές ενέργειες, και +να κάνουμε ορισμένες δουλειές γρηγορότερα. Α, δεν έχετε ιδέα από shell scripts ε; Καλά, θα σας τα εξηγήσω όλα\... Ας αρχίσουμε με κάτι απλό\... + +**ΚΟΛΠΑΚΙ Νο1!!!** + +Πρώτα από όλα, να γλιτώσουμε χώρο στο δίσκο μας. Αν και με τις σημερινές χωρητικότητες δεν πιστεύω να υπάρχει τέτοιο πρόβλημα, εντούτοις μερικές φορές είναι +απαραίτητο. + +Ξέρετε πόσο πολύ χώρο πιάνει το /usr/doc μαζί με τα παρελκόμενά του; Πολύ. Για αυτό θα κάνουμε το εξής: θα συμπιέσουμε το κάθε αρχείο ξεχωριστά με το gzip, και +θα φτιάξουμε ένα shell script που θα το διαβάζει συμπιεσμένο. Με αυτό τον τρόπο γλιτώνουμε πολύ χώρο στο δίσκο μας. + +Κατ αρχάς, να τα συμπιέσουμε. Δεν νομίζω να πιστεύατε ότι θα δίδαμε την εντολή gzip για κάθε αρχείο ξεχωριστά! Και για αυτό θα χρησιμοποιήσουμε script (Μετά θα +σας πω και ένα μυστικό). Γράφουμε λοιπόν: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #!/bin/bash + DIR_NAMES=`ls -F|grep /` + for n in $DIR_NAMES + do + echo "compressing $n..." + cd `pwd`/$n;gzip *;cd .. + done + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**ΠΡΟΣΟΧΗ! (2)**: το \` που βλέπετε, είναι η βαρεία (αυτό που είναι μαζί με την περισπωμένη, δίπλα στο πλήκτρο \"1\"\...) + +1\. Δίδουμε στην μεταβλητή **DIR\_NAMES** την τιμή της εντολής **\"ls -F\|grep /\"**. Δηλαδή, τα αποτελέσματα της **ls** που περιέχουν το σύμβολο / (δηλαδή +είναι directory) + +2\. Στη συνέχεια μεταφερόμαστε σε κάθε ένα από τα directoryαυτά, και κάνουμε gzip όλα τα αρχεία (τα συμπιέζουμε δηλαδή). + +Φυσικά, αυτό θα γίνει για ένα επίπεδο directories. + +Σώστε το αρχείο με όνομα πχ **zipdir**. Κάντε το εκτελέσιμο με chmod 755 tardir, χώστε το κάπου που να είναι στο path. (πχ **/usr/bin**) + +Μετακινηθείτε στο **/usr/doc** δίνοντας + +**cd /usr/doc** + +και καλέστε το script γράφοντας το όνομα με το οποίο το έχετε σώσει. Για καθένα από τα directories, θα γίνει συμπίεση των περιεχομένων τους. + +ΚΑΛΟ? + +(Τώρα θα σας πω το μυστικό. Δεν ήταν ανάγκη να γράψετε το script αυτό, το gzip μπορεί κάνει το ίδιο πράγμα, δίνοντας του την παράμετρο **\--recurcive**. +Βρισκόμενοι δηλαδή στο **/usr/doc**, θα μπορούσαμε να γράψουμε: + +**gzip -r \*** + +Και μη με ρωτήσει κανείς γιατί το κάναμε\... Μάθαμε τα εξής, πολύ χρήσιμα, για τα **shell scripts**: + +1. Για να δώσουμε σε μια μεταβλητή το αποτέλεσμα μιας (ή και περισσότερων εντολών) χρησιμοποιούμε την/τις εντολή/ες ανάμεσα σε βαρείες\... +2. Μάθαμε την έννοια της **pipe** (\|). Με την pipe, δρομολογούμε την έξοδο της εντολής που είναι αριστερά του pipe στην εντολή που είναι δεξιά του pipe. + Δίνουμε, δηλαδή, σαν όρισμα στην εντολή grep το αποτέλεσμα της εντολής \"ls -F\". Στη συνέχεια η **grep** το \"φιλτράρει\" και, τελικά, αναθέτουμε στην + μεταβλητή DIR\_NAMES το αποτέλεσμα\... Απλό ε? +3. Στο linux, μπορούμε να \"κολλήσουμε\" διάφορα, με αποτέλεσμα το σύνολο να αποτελεί ένα όρισμα. Στην περίπτωσή μας, κολλήσαμε το αποτέλεσμα της pwd (print + working dir) με τη μεταβλητή n (αυτή που παίρνει τις διάφορες τιμές των directories), και με την cd, μεταφερόμαστε κάθε φορά μέσα και έξω από το κάθε + subdirectory του **/usr/doc.** + +Καλά όλα αυτά, αλλά έτσι και χρειαστεί να το διαβάσουμε το άτιμο αυτό το doc του τάδε πακέτου, τι κάνουμε; Να λοιπόν άλλο ένα script: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #!/bin/bash + gunzip $1 | less + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σώστε το αρχείο με όνομα πχ **showdoc**. Κάντε το εκτελέσιμο με **chmod 755 showdoc**, και στη συνέχεια χώστε το κάπου που να είναι στο path. (πχ **/usr/bin**) + +Για να δείτε ένα gziped doc, γράψτε στο directory του: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + showdoc "όνομα_του_doc_που_θέλετε_να_διαβάσετε" + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τι μάθαμε εδώ; Πως χρησιμοποιούμε τις παραμέτρους του χρήστη. Αυτό το \$1, λέει στην gunzip να αποσυμπιέσει το αρχείο στο οποίο αναφέρεται η πρώτη λέξη +(χωριζόμενη με κενά) που γράψατε μετά το κάλεσμα του script. Στη συγκεκριμένη περίπτωση, αφού έχουμε γράψει: + +**showdoc \"όνομα\_του\_doc\_που\_θέλετε\_να\_διαβάσετε\"** + +το bash θα ερμηνεύσει το \$1 με το **\"όνομα\_του\_doc\_που\_θέλετε\_να\_διαβάσετε\".** + +Φυσικά, μπορούμε να ελέγξουμε και τυχόν άλλες εισαγωγές του χρήστη, με τα \$2, \$3, \$4 κ.λπ. + +Λοιπόν, τελικά να δείτε που δεν χρειάζεται να το κάνετε ούτε αυτό\... Εννοώ να συμπιέσετε τα README. Το πολύ να γλιτώσετε 200 ΚΒ, όσα DOC και να έχετε!!! + +Μη νομίζετε όμως ότι σας δουλεύω, η μάθηση είναι πολύ πιο εύκολη όταν συνοδεύεται από παραδείγματα!! + +**ΚΟΛΠΑΚΙ Νο2!!!** + +Δοκιμάστε να δείτε τι έχετε μέσα στο /usr/bin. \'Αμα έχετε δέκα οθόνες τη μια πάνω από την άλλη (και βρείτε τρόπο να τις συνδέσετε), ίσως και να χωρέσουν τα +αρχεία που υπάρχουν εκεί μέσα. \'Ελα μου όμως που είσαστε καινούριοι στο Linux, και δεν ξέρετε τι εκτελέσιμα υπάρχουν εκεί\... (μην παρεξηγηθείτε, ούτε οι +περισσότεροι τα ξέρουν όλα). Πώς θα τα δείτε; ε; Ρωτώ λοιπόν\... Πώς; ε; Πώς;;; + +Γράψτε στη γραμμή εντολών: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ls -1 > ti_exo_edo_kai_den_to_ksero + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Να δείτε ότι θα δημιουργηθεί ένα αρχείο που θα λέγεται \"ti\_exo\_edo\_kai\_den\_to\_ksero\" και θα περιέχει τα αρχεία, όπως αυτά θα προέρχονταν από την ls -1 +(το -1 είναι για να εμφανίσει ένα αρχείο ανά γραμμή). + +Με το σύμβολο \"\>\" λοιπόν, κάνουμε **επαναδρομολόγηση** της εξόδου (Μα καλά, ώρες-ώρες οι λέξεις αυτές με συναρπάζουν\...). Εκεί που ήταν το αποτέλεσμα της +**ls -1** να τυπωθεί στην οθόνη, αυτό γράφτηκε στο αρχείο **\"ti\_exo\_edo\_kai\_den\_to\_ksero\".** + +Θα μου πείτε \"σιγά μωρέ, αυτο το κάνω και με τη **less** ή τη **e**\...\". Έχετε δίκιο λοιπόν, και για αυτό το λόγo θα σας δώσω μερικά πιο καλά +παραδείγματα\... + +**Redirect output** (έτσι λέγεται αυτό το επαναδρομολόγηση της εξόδου) μπορούμε να κάνουμε ακόμα και σε συσκευές του συστήματός μας. Πχ, η εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + echo "Look at your printer" > /dev/lp1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +θα στείλει στην lp1 (αυτό είναι, συνήθως, ο printer σας) το \"**Look at your printer\".** + +Αντίστοιχα, η εντολή + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + cat README > lp1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +θα στείλει στον Printer σας το αρχείο README (φροντίστε να είναι σε μορφή ASCII). + +Για όλα αυτά τα ωραία, πρέπει: + +1. Nα υπάρχει εκτυπωτής +2. Να είναι αναμμένος +3. Να είναι συνδεμένος στο PC +4. Να είναι ONLINE +5. Να έχει χαρτί +6. Να έχει μελάνι (αν είναι inkjet), toner (αν είναι laser), μελανοταινία (αν είναι dot-matrix) +7. Να μην είναι χαλασμένος. + +Αν δεν έχετε εκτυπωτή, μάλλον δε θα μπορέσετε να τυπώσετε, άρα μην το κάνετε. Για εσάς έχω άλλο κολπάκι\... + +**ΚΟΛΠΑΚΙ ΓΙΑ ΟΣΟΥΣ ΔΕΝ ΕΧΟΥΝ ΕΚΤΥΠΩΤΗ:** + +\'Οσοι από εσάς δεν έχουν εκτυπωτή, έχουν Μodem, διαφορετικά πως βλέπετε αυτές τις αράδες; Ε; (\'Εκτός φυσικά αν σας τα έφεραν τυπωμένα. Σε αυτή την περίπτωση +χρησιμοποιήστε των εκτυπωτή που τα τύπωσε για το προηγούμενο κολπάκι) + +Αφού μετά από όριμη σκέψη ανακαλύψαμε ότι έχετε Modem, γράψτε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + echo "ATX3DT090835398" > /dev/ttyS2 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +(ttyS0=com1, ttyS1=com2, ttyS3=com3 κ.ο.κ. ανάλογα που είναι το modem σας). + +Ο υπολογιστής σας θα καλέσει τον αριθμό 090835398 (αν υπάρχει), και θα μιλάει για σας με το μέντιουμ που βρίσκεται σε αυτή την HotLine + +(Σε αυτό το σημείο να αναφέρω ότι ο συντάκτης, αλλά και ο εκδότης του παρόντος, δεν αναλαμβάνουν οποιαδήποτε ευθύνη για κακή χρήση του κόλπου αυτού, με λίγα +λόγια δηλαδή δεν πληρώνουμε εμείς τον λογαριασμό του ΟΤΕ σας). + +Καλύτερα λοιπόν να βάλετε ένα αστικό νούμερο. Αν το δοκιμάσετε, το Modem σας θα καλέσει αυτό τον αριθμό. + +Για να κλείσετε τη γραμμή δώστε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + echo "ATΗ" > /dev/ttyS2 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +(ttyS0=com1, ttyS1=com2, ttyS3=com3 κ.ο.κ. ανάλογα που είναι το modem σας). + +Η γραμμή θα κλείσει. + +Αυτά τα ολίγα προς το παρόν\... Τον επόμενο μήνα θα έχουμε πιο προχωρημένα πράγματα\... diff --git a/content/articles/08/06_thea.md b/content/articles/08/06_thea.md new file mode 100644 index 0000000..bfa7b16 --- /dev/null +++ b/content/articles/08/06_thea.md @@ -0,0 +1,34 @@ ++++ +title = 'Thea' +date = '1998-10-01T00:00:00Z' +description = '' +author = 'Σπύρος Τριβυζάς' +issue = ['Magaz 08'] +issue_weight = 6 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Η [THEA](http://www.thea.gr) (θέα), ο πληρέστερος κατάλογος ελληνικών sites, δημιουργήθηκε πριν δύο χρόνια περίπου από την [Powernet](http://www.powernet.gr). +Στην αρχική της μορφή, ήταν ένα σετ στατικών HTML σελίδων που βρισκόντουσαν σε ένα NT (\...) PC server. Φυσικά, αυτό έπρεπε ν\' αλλάξει\... και άλλαξε.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το Μάιο του 1997, η THEA έγινε \"δυναμική\". Τα περιεχόμενά της καταχωρήθηκαν σε μια database και κατασκευάστηκε ένας μηχανισμός διαχείρισης των εισερχομένων +και ήδη υπαρχόντων καταχωρήσεων, έτσι ώστε η διαχείρηση του καταλόγου να γίνεται εύκολα και γρήγορα. Και ο NT server έγινε Sun Ultra και μετά από μερικούς μήνες +Silicon Graphics ORIGIN. + +Ωραία όλα αυτά, μπράβο στη THEA, αλλά τι σχέση έχουν με το Linux; Το Linux επιλέχτηκε από την Powernet ως το καταλληλότερο σύστημα για την ανάπτυξη της THEA και +παρόμοιων εφαρμογών. Η συμβατότητά του (ή ομοιότητα) με τα άλλα Unix συστήματα σε συνδυασμό με την ευελιξία του, κάνει το Linux ιδανικό για ανάπτυξη Internet +εφαρμογών (και όχι μόνο). Αν μιλάμε για C, ένα compilation είναι όλος ο \"κόπος\" για τη μεταφορά μιας εφαρμογής από το Linux σε άλλο Unix σύστημα. Αν μιλάμε +για Perl ή PHP3, τότε η μεταφορά είναι πιο άμεση. + +Η Powernet συνεχώς αυξάνει την εμπιστοσύνη της στο Linux. Μέσα σε λίγους μήνες έφτασε να χρησιμοποιεί τέσσερα Linux Workstations & Servers, για διάφορες χρήσεις +(ανάπτυξη εφαρμογών, σύνδεση του office-LAN με το Internet, δοκιμαστικούς servers κλπ.). + +Δεν είναι μόνο η THEA που αναπτύχθηκε σε Linux. Σχεδόν όλα τα database projects της Powernet, με αποκορύφωμα το [Zoom](http://www.zoom.gr), τον \"κυβερνοδηγό\" +διασκέδασης, αναπτύχθηκαν επίσης σε Linux. + +Αντί επιλόγου, θα αναφέρω δύο διαφορές μεταξύ Windows και Linux servers, που έγιναν άμεσα αισθητές κατά τη μετάβαση από το πρώτο στο δεύτερο: + +- Tο Linux χρειάζεται 32 Mb RAM λιγότερα\... +- Στο Linux δε χρειάζεται (σχεδόν) ποτέ reboot ! diff --git a/content/articles/08/07_GreekTeXFAQ.md b/content/articles/08/07_GreekTeXFAQ.md new file mode 100644 index 0000000..a43b057 --- /dev/null +++ b/content/articles/08/07_GreekTeXFAQ.md @@ -0,0 +1,298 @@ ++++ +title = 'Εγκατάσταση της Ελληνικής Επιλογής του Babel για LaTeX' +date = '1998-10-01T00:00:00Z' +description = '' +author = '`Προκόπης Προκοπίδης` `Απόστολος Συρόπουλος`' +issue = ['Magaz 08'] +issue_weight = 7 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αυτό το κείμενο περιγράφει τη διαδικασία εγκατάστασης της Ελληνικής επιλογής του babel, ενός πακέτου για την επεξεργασία πολυγλωσσικών κειμένων με το LaTeX.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Απαραίτητα Αρχεία** +------------------------------------------------------ + +**2. Το Βασικό Μέρος του babel.** +--------------------------------------------------------------- + +**3. Bιβλιογραφικό Στυλ, Ελληνικόs Συλλαβισμόs, και grtools** +------------------------------------------------------------------------------------------- + +**4. Γραμματοσειρές** +--------------------------------------------------- + +**5. Τελικές Ρυθμίσεις** +------------------------------------------------------ + +**6. Editors για το LaTeX και η Χρήση των Ελληνικών** +----------------------------------------------------------------------------------- + +- [6.1 Emacs](#ss6.1) +- [6.2 LyX](#ss6.2) + +**7. Ευχαριστίες** +------------------------------------------------ + + +### [1. Απαραίτητα Αρχεία]{#s1} + +Υποθέτουμε ότι μπορείτε να γράφετε Ελληνικά στο σύστημα σας. Επίσης ότι έχετε μια σωστά εγκατεστημένη έκδοση του LaTeX, μπορείτε να παράγετε π.χ. Αγγλικά +κείμενα χρησιμοποιώντας το και να τα δείτε με το Xdvi ή το ghostview. Αν κάτι από τα παραπάνω δεν ισχύει, πριν να συνεχίσετε, μπορείτε να διαβάστε τα εξής: + +> `ftp://www.linux.gr/pub/linux/HOWTO/Hellenic-HOWTO.html http://linux.forthnet.gr/LDP/HOWTO/TeTeX-HOWTO.html` + +Υποθέτουμε τέλος ότι θα έχετε την κοινή λογική να πάρετε αντίγραφα των αρχείων που θα μετατρέψετε κατά τη διαδικασία της εγκατάστασης. + +Το (La)TeX του παραδείγματός μας στήθηκε σε ένα PC από το Red Hat 5.1 κατά την εγκατάσταση όλου του Linux. Σε περίπτωση που η διάρθρωση του TeX καταλόγου είναι +διαφορετική στο σύστημά σας, μπορείτε να βρείτε τα αρχεία που περιγράφονται παρακάτω χρησιμοποιώντας τις εντολές `locate` και `find`. Ως παράδειγμα, μπορούμε να +δούμε πού τοποθετούν τις γραμματοσειρές οι διάφορες εκδόσεις του teTeX, της διανομής δηλαδή που περιέχει τα TeX, LaTeX, BibTeX, makeindex, κ.λ.π. + +> `RedHat-5.1: tetex-0.4pl8-11 /usr/lib/texmf/texmf/fonts/` + +> `RedHat Rawhide 1.0: tetex-0.9-2 /usr/share/texmf/fonts/` + +> `Open Linux: tetex-0.4pl7-2 /usr/TeX/texmf/fonts/` + +> `SuSe: tetex-0.4pl8-29 /usr/lib/teTeX/texmf/fonts/` + +Γίνετε λοιπόν root στο σύστημα σας και κατεβάστε το αρχείο + +> `ftp://obelix.ee.duth.gr/pub/TeX/TeXgreek.tar.gz` + +Ένα καλό σημείο να το τοποθετήσετε στο δίσκο σας είναι τo `/usr/local/src`. Όταν το αποσυμπιέσετε με την παρακάτω εντολή + +> gunzip xvfz TeXgreek.tar.gz + +θα δημιουργηθεί ένας κατάλογος `Texgreek` με την εξής δομή: + +> Texgreek--- +> | -- BibTeX +> | -- babel +> | -- doc +> | -- grtools +> | -- hyphenation +> | -- iso8858-7 +> | -- misc +> | -- mf +> | -- tfm + +Προαιρετικά μπορείτε να κατεβάσετε το `greek-mode.el` (από το `http://www.ics.forth.gr/~sarantos/`), δηλαδή την Ελληνική επιλογή για τον Emacs που έγραψε ο +Σαράντος Καπιδάκης. + +Προαιρετικά επίσης μπορείτε να στήσετε το LyX, που θα το κατεβάσετε σε tar.gz μορφή από το `http://www.lehigh.edu/~dlj0/LyriX.html` ή σε RPM από το +` http://rufus.w3.org/linux/RPM/contrib/hurricane/i386/lyx-0.12.0-3.i386.html` + +Λεπτομέρειες γι\' αυτά τα δύο προγράμματα στο τέλος του άρθρου. + + +### [2. Το Βασικό Μέρος του babel.]{#s2} + +Όντας στον κατάλογο `Texgreek` πηγαίνετε πρώτα στον υποκατάλογο `babel` για να εγκαταστήσετε το βασικό πακέτο. + +> cd ../babel/ +> cp lg*.fd /usr/lib/texmf/texmf/tex/generic/babel/ + +ή εναλλακτικά + +> cp lg*.fd /usr/lib/texmf/texmf/tex/latex/fd + +Ακολουθεί η εγκατάσταση του `iso8858-7.def` ώστε να μη χρειάζεται να γράφουμε σε greeklish και το TeX να καταλαβαίνει τα Ελληνικά μας κείμενα. + +> cd ../iso8858-7/ +> cp iso-8859-7.def /usr/lib/texmf/texmf/tex/latex/base + +Πλέον, μπορούμε να γράφουμε Ελληνικό LaTeX σε οποιονδήποτε editor, με την προϋπόθεση να υπάρχουν πριν από το κείμενο μας, δηλαδή πριν από την εντολή +`\begin{document}`, οι παρακάτω γραμμές + +> \usepackage[greek]{babel} +> \usepackage[iso-8859-7]{inputenc} + +Αν δεν χρησιμοποιηθεί αυτό το αρχείο, θα πρέπει να πληκτρολογούμε το κείμενο μας κάπως έτσι \... + +> mia dokimastikh grammh + +\... πράγμα που κανείς μάλλον δε θέλει. Το αποτέλεσμα πάντως θα είναι το ίδιο και στις δύο περιπτώσεις. Θυμίζουμε ότι για να έχετε Ελληνικό και ξένο κείμενο στο +ίδιο αρχείο, θα πρέπει να ακολουθήσετε τις οδηγίες στο `http://www.linux.gr/magaz/04/05_babel-3.html` ή στα αρχεία του υποκαταλόγου `doc` του `Texgreek`. + + +### [3. Bιβλιογραφικό Στυλ, Ελληνικόs Συλλαβισμόs, και grtools]{#s3} + +Πηγαίνετε πρώτα στον κατάλογο `bibtex` για να εγκαταστήσετε το Ελληνικό βιβλιογραφικό στυλ. + +> cd ../bibtex +> cp hellas.bst /usr/lib/texmf/texmf/bibtex/bst/base/ + +Παρεμπιπτόντως, ένα εύχρηστο πρόγραμμα για τη δημιουργία και τη διαχείριση της βιβλιογραφίας σας μέσα στα X είναι το bibview. Δουλεύει μια χαρά και με τα +Ελληνικά. Μπορείτε να το κατεβάσετε σε RPM από το ` http://rufus.w3.org/linux/RPM/dld/5.4/i386/RPMS/i386/bibview-2.2-1.i386.html` ή +σε tar.gz από το . + +Ακολουθεί το αρχείο για τον Ελληνικό συλλαβισμό. + +> cd ../hyphenation/ +> cp grhyph.tex /usr/lib/texmf/texmf/tex/generic/hyphen/ + +Εντοπίστε το αρχείο `hyphen.tex` στο σύστημα σας. Μπορείτε να χρησιμοποιήσετε την εντολή + +> locate hyphen.tex + +Χρησιμοποιήστε την εντολή `more` για να δείτε τι περιέχει. + +> more /usr/lib/texmf/texmf/tex/generic/config/hyphen.tex + +Αν η απάντηση που πήρατε είναι + +> \input hyphen.cfg + +το αρχείο είναι εντάξει. Αν δεν υπάρχει αυτή η γραμμή, προσθέστε την με έναν editor. Εναλλακτικά, αλλάξτε το όνομα του σε `UShyphen.tex` και δημιουργήστε ένα +αρχείο με το ίδιο όνομα, που θα περιέχει την παραπάνω γραμμή. + +Το `/usr/lib/texmf/texmf/tex/generic/config/language.dat` είναι άλλο ένα αρχείο που πρέπει να \"πειράξουμε\". Ανοίξτε το σε έναν editor και προσθέστε τη γραμμή + +> greek grhyph.tex + +ώστε το αρχείο σας να μοιάζει κάπως έτσι: + +> % File : language.dat +> % Purpose : specify which hypenation patterns to load +> % while running iniTeX +> +> % The hyphenation pattern files are in the dirctory: +> % texmf/tex/generic/hyphen +> +> +> % The US-english patterns should be loaded *always* and as *first* ones. +> american ushyph1.tex +> =USenglish +> +> % UK english, THREE LINES! +> %british ukhyph.tex +> %=UKenglish +> =english +> +> %catalan cahyph.tex +> %croatian hrhyph.tex +> %czech czhyph2e.tex +> %danish dkhyphen.tex +> %dutch nehyph1.tex +> %dutch nehyph2.tex +> %dutch nehyph3.tex +> %finnish fihyph.tex +> %french frhyph.tex frhyphex.tex +> %german ghyph31.tex +> greek grhyph.tex +> %italian ithyph.tex +> %norsk nohyph.tex +> %polish plhyph.tex +> %portuges pthyph.tex +> %romanian rohyphen.tex +> %slovene sihyph22.tex +> %spanish sphyph.tex +> %swedish sehyph.tex + +\"Τα πακέτα της σειράς εργαλείων grtools προσφέρουν επιπλέον λειτουργικότητα στην ελληνική επιλογή\" σύμφωνα με το +`http://www.linux.gr/magaz/04/05_babel-4.html` όπου και θα βρείτε περισσότερες πληροφορίες για τη χρήση τους. Για να τα εγκαταστήσετε, + +> cd ../grtools +> tex grtools.ins +> mkdir /usr/lib/texmf/texmf/tex/latex/grtools +> cp *.sty /usr/lib/texmf/texmf/tex/latex/grtools + +Επίσης, ο [Απόστολος Συρόπουλος](mailto:apostolo@obelix.ee.duth.gr) προετοιμάζει ένα πρόγραμμα, το οποίο, σε συνεργασία με το makeindex, θα δημιουργεί Ελληνικό +ευρετήριο. + + +### [4. Γραμματοσειρές]{#s4} + +Οι γραμματοσειρές αρκεί να μπούνε κάπου που το TeΧ ψάχνει για τέτοιου είδους αρχεία. Στο παράδειγμα που ακολουθεί, δημιουργείται ένας κατάλογος `cbgreek` για +τις γραμματοσειρές που έρχονται με το πακέτο. + +> cd ../mf +> mkdir /usr/lib/texmf/texmf/fonts/source/public/cbgreek +> cp *.mf /usr/lib/texmf/texmf/fonts/source/public/cbgreek + +Αντίστοιχα για τα \*.tfm αρχεία που περιγράφουν τις διαστάσεις των χαρακτήρων της κάθε γραμματοσειράς. + +> cd ../tfm +> mkdir /usr/lib/texmf/texmf/fonts/tfm/public/cbgreek +> cp *.tfm /usr/lib/texmf/texmf/fonts/tfm/public/cbgreek + +Τέλος θα πρέπει να προσθέσετε με έναν editor τις γραμμές από το αρχείο `special.map` που βρίσκεται στον κατάλογο `misc`, στο αρχείο +`/usr/lib/texmf/texmf/fontname/special.map`. Το αρχείο αυτό αφορά την θέση των \*.pk αρχείων, που είναι υπεύθυνα για τη μορφή των χαρακτήρων. + + +### [5. Τελικές Ρυθμίσεις]{#s5} + +Ενημερώστε το TeX για τις αλλαγές που κάνατε με την εντολή: + +> texhash + +Δημιουργήστε το καινούργιο αρχείο φόρμας για το LaTeX με την εντολή: + +> cd /tmp +> initex latex.ltx + +Mετά από ένα κατεβατό μηνυμάτων του TeX, θα έχετε ένα αρχείο `latex.fmt` που θα μεταφέρετε στο σωστό σημείο: + +> mv latex.fmt /usr/lib/texmf/texmf/web2c/ + +Το νέο σας LaTeX με την Ελληνική επιλογή του babel είναι έτοιμο. Στον υποκατάλογο `doc` θα βρείτε οδηγίες για τη χρήση του πακέτου. + +Για να το δοκιμάσετε, πηγαίνετε πίσω στον κατάλογο `Texgreek` και + +> cd babel +> latex test2 + +Αν όλα πήγαν καλά, μπορείτε να δείτε το `test.dvi` με τους γνωστούς τρόπους (Xdvi, Kdvi) ή να το μετατρέψετε σε postscript με το dvips και να το εξετάσετε με το +ghostview. + + +### [6. Editors για το LaTeX και η Χρήση των Ελληνικών]{#s6} + +Στο PC του παραδείγματος έχουν χρησιμοποιηθεί δύο πακέτα για Ελληνικά στα Χ, το grkbd του Γιάννη Τσακίρη, και το grISO του Δημήτρη Μπούρα στην RPM μορφή του, το +XFGreekKBD. Τον Emacs και το LyX, τις δύο εφαρμογές που χρησιμοποιούν πολλοί για να γράψουν LaTeX, μπόρεσαν να δουλέψουν μόνο με το πρώτο. Οδηγίες χρήσης για το +grkbd στο ίδιο το πακέτο που θα το κατεβάσετε από το ` ftp://argeas.argos.hol.gr/pub/unix/linux/GREEK/GRkbd-1.2.linux.tar.gz`. +Θυμίζουμε ξανά εδώ ότι και στις δύο εφαρμογές δεν αρκεί η αλλαγή γλώσσας στην οθόνη σας για το LaTeX. Θα πρέπει να δηλώνετε την αλλαγή γλώσσας με τις TeX +εντολές όπως αυτές περιγράφονται στα αρχεία του υποκαταλόγου `doc` του `Texgreek`. + +### [6.1 Emacs]{#ss6.1} + +Στον Emacs, υπάρχει η δυνατότητα Ελληνικών είτε με το grkbd είτε με ένα ειδικό mode για τον Emacs, το `greek-mode.el`. Το δεύτερο είναι προτιμότερο γιατί, καθώς +είναι φτιαγμένο ειδικά για τον Emacs, καταλαβαίνει πότε πληκτρολογείτε εντολή του LaTeX και γυρίζει αυτόματα το πληκτρολόγιο στα Αγγλικά. Για να το στήσετε +κάνετε τα εξής. Aφού φορτώσετε στον Emacs to αρχείο `greek-mode.el` θα πρέπει να το μεταγλωττίσετε δίνοντας +`Alt-x byte-compile-file` και να σώσετε το αρχείο `greek-mode.elc` που θα προκύψει στον κατάλογο `/usr/lib/emacs/site-lisp/`. +Κατόπιν, προσθέστε στο αρχείο .emacs που έχετε στον προσωπικό σας κατάλογο την παρακάτω γραμμή: + +> `(load "/usr/lib/emacs/site-lisp/greek-mode.elc")` + +Τέλος τρέξτε τον Emacs με κάποια ελληνική γραμματοσειρά ή ακόμη καλύτερα δημιουργήστε ένα script με όνομα π.χ. `gremacs` που θα περιέχει κάτι σαν το παρακάτω +και θα το τρέχετε κάθε φορά που θα θέλετε τον Emacs με Ελληνικά. + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> #! /bin/sh +> # gremacs +> +> emacs -fn -etl-fixed-medium-r-normal--0-0-100-100-c-0-iso8859-7 +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μετά από όλα αυτά τα φοβερά και τρομερά θα μπορείτε να γράφετε Ελληνικά κείμενα, LaTeX και μη. Η αλλαγή του πληκτρολογίου θα γίνεται με `alt-g`. Αξίζει τον κόπο +γιατί ο Emacs προσφέρει ένα πολύ εύχρηστο περιβάλλον για τη συγγραφή κειμένων σε (La)TeX, το TeX mode. Αυτό περιλαμβάνει έλεγχο των εντολών, διαφορετικό +χρωματισμό για τις εντολές και το κυρίως κείμενο κ.λ.π. + +### [6.2 LyX]{#ss6.2} + +Για να γράψετε ελληνικά στο LyX, θα πρέπει να πάτε στο menu `Screen Options` και να αλλάξετε το πεδίο `font-norm` από `iso8859-1` σε `iso8859-7`. Εφόσον έχετε +στήσει το grkbd, με `alt-shift` θα μπορείτε να γράφετε ελληνικά. Θα έχετε ένα σχεδόν WYSIWYG editor που θα σας βοηθήσει αρκετά στο να γράψετε κείμενα για το +LaTeX. Σίγουρα όμως, όταν θα θελήσετε κάτι πιο περίπλοκο, θα χρειαστεί να χρησιμοποιήσετε κώδικα LaTeX. Το LyX παρέχει τη δυνατότητα προεπισκόπησης του κειμένου +σας σε dvi ή postscript μορφή, copy paste και πολλά άλλα. Είναι beta εφαρμογή με ό,τι αυτό συνεπάγεται. + + +### [7. Ευχαριστίες]{#s7} + +Ευχαριστούμε τον Αντώνη Τσολομίτη για τη βοήθεια και τις πληροφορίες σχετικά με τον Emacs και το LyX + diff --git a/content/articles/08/08_mailbox.md b/content/articles/08/08_mailbox.md new file mode 100644 index 0000000..d0938c9 --- /dev/null +++ b/content/articles/08/08_mailbox.md @@ -0,0 +1,598 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-10-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 08'] +issue_weight = 8 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Συνεχίζοντας την \"κακή\" παράδοση του περασμένου τεύχους, από την αλληλογραφία κόψαμε ορισμένα mails λόγω χρόνου και πολύ συγκεκριμένων προσωπικών θεμάτων. +Επίσης, θα ξαναγράψω το κομμάτι που έγραψα και τον περασμένο μήνα, γιατί φάνηκε ότι δεν το διαβάσανε πολλοί. :-)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δύο παρακλήσεις μόνο έχουμε να κάνουμε:\ +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής Ερώτηση περί Linux δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμιά ματιά στα περασμένα τεύχη, και εννοώ και την στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-) Τέρμα οι \"γκρίνιες\", ας διαβάσουμε τώρα τι μας ρωτήσατε και +τι σας απαντήσαμε αυτό το μήνα. + +**1. K-Desktop 1.0** +---------------------------------------------- + +**2. Questions, ISP and the story** +------------------------------------------------------------- + +**3. RPM σε Slackware** +------------------------------------------------- + +**4. Pcmcia modem card σε slackware linux.** +---------------------------------------------------------------------- + +**5. Soundcard και άλλα** +--------------------------------------------------- + +**6. X-Windows και S3 virge** +------------------------------------------------------- + +**7. Proxy server για RedHat** +-------------------------------------------------------- + +**8. Εγκατάσταση KDE** +------------------------------------------------ + +**9. Περί Samba προβλήματα** +------------------------------------------------------ + +**10. KDE και Sscreen resolution** +-------------------------------------------------------------- + +**11. Πρόβλημα με το mount (fs)** +------------------------------------------------------------- + +**12. Connect από απόσταση** +-------------------------------------------------------- + +**13. Debian FTP** +---------------------------------------------- + +**14. Rendition chipset** +----------------------------------------------------- + + +### [1. K-Desktop 1.0]{#s1} + +Από : [Κυρίτση](mailto:kkyrits@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Έχω το RedHat Linux 5.0. \'Οταν προσπαθώ να εγκαταστήσω το KDE 1.0 μου βγάζει μήνυμα λάθους ότι ο C compiler (το gcc) δεν μπορεί να φτιάξει executable files. Τί +λύση προτείνετε; + +***MK:** Να ελέγξεις αν έχεις περάσει σωστά ΌΛΑ τα απαραίτητα πακέτα για να δουλέψει σωστά η GCC. Βιβλιοθήκες κλπ. To RedHat αν δεν κάνω λάθος έχει dependencies +check\...\ +**NK:** Και να μας πεις το μήνυμα λάθους. Ότι ο gcc δεν μπορεί να κάνει executable είναι λίγο γενικό.* + +1ον. Το μήνυμα λάθους είναι το εξής: + + Checking whether the C compiler (gcc ) works ... no + (στην απο κάτω γραμμη της οθόνης) + Configure: error: installation or configuration problem: C compiler cannot create executables + +2ον. Πώς θα κάνω Check αν έχω περάσει σωστά όλα τα απαραίτητα πακέτα για να δουλέψει σωστά η GCC ??? + +***NK:** rpm -V gcc από την γραμμή εντολών. Κανονικά δεν πρέπει να βγάλει τίποτα.* + +Το έκανα και σαν output δεν έβγαλε τίποτα (που σημαίνει οτι μάλλον δεν έχει πρόβλημα). Το πρόβλημα όμως με το KDE παραμένει. + +***NK:** Οκ, άρα είναι σωστά εγκατεστημένος.Δοκίμασε να δεις τώρα αν δουλεύει. Π.χ. πάρε το hello.c και δοκίμασε να το φτιάξεις (gcc -c hello.c). Βεβαιώσου ότι +ο gcc είναι στο path (/etc/profile).* + +1ον Πού θα βρώ το hello.c ??? + +***MK:** Το hello.c είναι το βασικό πρόγραμμα της C που το μόνο που κάνει είναι να γράφει hello world. Θα το βρεις σε οποιοδήποτε βιβλίο για C στις πρώτες 20 +σελίδες. Αν όμως η επαφή σου με την C δεν φτάνει ούτε στο hello.c, θα σου πρότεινα να βάζεις binary προγράμματα για κανένα μήνα, τον οποίο βέβαια θα αφιερώσεις +διαβάζοντας βασικά πράγματα για C και Make. (ούτε εγώ έχω ιδιαίτερη επαφή με την C, γι αυτό και προτιμάω binary πακέτα όποτε μπορώ να τα βρω. Παράλληλα διαβάζω +για να μπορέσω κάποτε να βρω γιατί κάποια (απλά βέβαια) πράγματα που θέλω να κάνω compile χτυπάνε).* + +2ον (Αν και λόγω του οτι είμαι αρχάριος δεν ξέρω ακόμα να βλέπω που είναι γραμμένο το path στο profile) το αρχείο profile περιέχει την εξής γραμμή: + + PATH="$PATH:/usr/X11R6/bin" + +3ον Αν η απο πάνω γραμμή είναι όντως το path, πώς μπορώ να προσθέσω και άλλα directories??? (μήπως με κόμμα??) + +***MK:** Όπως το βλέπεις, με άνω κάτω τελεία. Π.χ. PATH=\$PATH:/neo/dir/gia/path. Μετά θα χρειαστείς και export PATH. Στο /etc/profile είναι οι ρυθμίσεις για +όλους τους χρήστες, ενώ για κάθε χρήστη χωριστά, οι ρυθμίσεις είναι στο  /.profile. Αυτά σε περίπτωση που έχεις bash. Όπως φαίνεται μέχρι τώρα μάλλον δεν έχεις +εγκαταστήσει τα libraries της gcc που είναι απαραίτητα για compilation. Δες (με rpm -q -a \| grep devel) αν έχεις εγκαταστήσει τα gcc-devel και Xfree86-devel ή +όπωs αλλιώς λέγονται, και αν όχι εγκατέστησέ τα, αλλιώς δεν θα μπορέσεις να κάνεις compile τίποτα.* + + +### [2. Questions, ISP and the story]{#s2} + +Από : [DJ Art](mailto:arturok@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +1ον. Υπάρχει κάτι αντίστοιχο της εντολής find των Windows στο Linux ? (Το συγκεκριμένο μου πρόβλημα είναι οτι όταν πάω να εγκαταστήσω το XISP μου βγάζει μήνυμα +οτι δεν βρήκε το αρχείο forms.h) + +*Και βέβαια υπάρχει, και λέγεται\... find.\ +man find* + +2ον. Όταν πάω να εγκαταστήσω το KDE 1.0 (απο source) (το kdebase) μου βγάζει μήνυμα οτι δεν μπορεί να μαντέψει το HOST. (Χρησιμοποιώ RedHat 5.0). + +*Ίσως πρέπει να του δώσεις μία παράμετρο στο configure. Γράψε configure \--help να δεις τις παραμέτρους που παίρνει.* + +3ον. Για να τρέξω ένα πρόγραμμα, όπως τον Netscape Communicator απο τα X-windows, ανοίγω ένα shell και απο κει τρέχω το πρόγραμμα με ./netscape. To πρόγραμμα +φορτώνει, το shell όμως παραμένει χωρίς να βγάλει prompt μέχρι να κλείσω τον Netscape. Υπάρχει τρόπος να το αποφύγω αυτό ? + +*Ναι, \"στέλνεις\" το πρόγραμμα στο background. Ή το εκτελείς με \"netscape &\" ή μετά που θα ξεκινήσει, θα το κάνεις suspend (CTRL-Z) και θα γράψεις bg.* + +Είμαστε δυο φίλοι και συμμαθητές: ο DJ Art και ο NTG21. Μένουμε στην Αθήνα και είμαστε μαθητές στην Γ Λυκείου. Ο DJ Art (εκτός απο τη μουσική) ασχολείται με +τους υπολογιστές απο ηλικία κάτω των 7 χρόνων. 1ος υπολογιστής: AMSTRAD 6128. 2ος Η/Υ: AMSTRAD 1640 (PC). 3ος Η/Υ: ο σύγχρονος Pentium, ο οποίος τώρα πια μπορεί +να αναβαθμίζεται. Ο φίλος μου ασχολείται λιγότερα χρόνια με Η/Υ (περίπου 2 χρόνια). Απο περισι, όμως, η ζωή μας έχει αλλάξει, καθώς ασχολούμαστε με το Linux. +Τώρα λοιπόν ψάχνουμε να βρούμε προγράμματα έτσι ώστε κάποια μέρα να χρησιμοποιούμε τα Windows και το DOS μόνο για τα παιχνίδια. Ο φίλος μου ζει με την ελπίδα να +αντικατασταθούν κάποια μέρα τα Windows απο το Linux. Εγώ όμως ελπίζω να μην γίνει αυτό γιατί τώρα μόνο οι \"καλοί\" χρησιμοποιούν Linux. (Όντως, το επίπεδο των +χρηστών Linux είναι ανεβασμένο. Αντιθέτως και ο κάθε άσχετος απο Η/Υ χειρίζεται τα Windows). Το video της ενότητας \"Δοκιμάσαμε τα Windows 98\" του τεύχους 6 +είναι πολύ τέλειο. Πραγματικά γελάσαμε με την καρδιά μας. Τέλος θα ήθελα να ξέρω αν υπάρχουν τα εξής προγράμματα, ποιά είναι αυτά και που μπορώ να τα βρώ: + +1\) Πρόγραμμα FTP το οποίο να υποστηρίζει διακεκομμένο κατέβασμα.(Μήπως η λειτουργία αυτή υποστηρίζεται και από το ftp του Linux ?) + +*Για όνομα του θεού. Δεν είναι (ούτε αυτό) ανακάλυψη του κόσμου των Windows. Είναι standard στο πρωτόκολλο ftp και η εντολή λέγεται \"REGET\"\...* + +2\) MP3 player + +*Πρόσφατα στη λίστα ελλήνων χρηστών Linux κάποιος έστειλε μία διεύθυνση με πολλά προγράμματα για μουσική. Πάρτην: +* + +3\) Πρόγραμμα για εγγραφή CD-R. + +*Δες mailbox τεύχους 5 ερώτηση 3* + +4\) Προγράμματα επεξεργασίας ήχου, εικόνας, video. + +*Το παραπάνω link?* + +5\) Πρόγραμμα για αποστολή/λήψη fax. + +*Efax και hylafax. Το δεύτερο έρχεται μαζί με το RedHat.* + +Ελπίζω να μην σας κούρασα με αυτό το ολίγον μεγάλο e-mail.\ +Ευχαριστώ. + +*Παρακαλούμε* + + +### [3. RPM σε Slackware]{#s3} + +Από : [Surfer](mailto:surfer@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Έβαλα το rpm στο slack 3.5. τώρα θέλω να βάλω το xisp σε rpm. Κατέβασα το xisp-2.3p4-1.i386.rpm, δίνω rpm -i xisp-2.3p4-1.i386.rpm και παίρνω output: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + failed dependencies: + + /bin/sh required by xisp-2.3p4-1 + libm.so.5 required by xisp-2.3p4-1 + libforms.so.0.86 required by xisp-2.3p4-1 + libc.so.5 required by xisp-2.3p4-1 + libXpm.so.4 required by xisp-2.3p4-1 + libX11.so. required by xisp-2.3p4-1 + xforms >= 0.86 required by xisp-2.3p4-1 + ppp >= 2.2.0f required by xisp-2.3p4-1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Που θα βρω όλα αυτά; Έχω τα cds του slack 3.5 από το creek υπάρχουν εκεί? Ευχαριστώ και για τις προηγούμενες φορές που με βοηθήσατε. + +*Επειδή έβαλες το rpm στο Slackware, καιαυτά τα πακέτα έχουν μπει χωρίς rpm, είσαι δυστυχώς υποχρεωμένος να ελέγξεις μόνος σου ότι τα dependencies ισχύουν, και +μετά να χρησιμοποιήσεις την επιλογή \--force.\ +Π.χ. τα libm, και libc πρέπει να βρίσκονται στο /usr/lib, τα libX\* στο /usr/X11/lib και το libforms κάπου αλλού που δεν ξέρω. Όσο για τα xforms (μέρος του +οποίου είναι και η libforms) πρέπει να το κατεβάσεις (αν δεν το έχεις ήδη) γιατί είναι το toolkit που χρησιμοποιήθηκε για το GUI του xisp. Το ppp τέλος, θα το +βρεις σίγουρα στα CD του slackware, αλλά πρέπει και να κάνεις compile τον πυρήνα με ppp support.* + + +### [4. Pcmcia modem card σε slackware linux.]{#s4} + +Από : [Αντώνης Μόρτος](mailto:surfer1978@hotmail.com) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hol.gr) + +Παιδιά γεια σας,\ +καταρχήν συγχαρητήρια για το Linux Magazine Online είναι ότι καλύτερο θα μπορούσε να υπάρχει για το linux και όλους εμάς που αντιμετωπίζουμε linux probs. Λοιπόν +ας ξεκινήσω με το πρόβλημα μου. Είμαι κάτοχος ενός notebook ibm 755cx με pcmcia type3 slots 540 δίσκο dual scan screen lcd color και έχω βάλει το linux το +kernel 2.0.30. Έχω 2 pcmcia cards, η μία είναι μία ethernet η οποία είναι 3com η οποία αναγνωρίζεται κανονικά και η άλλη είναι modem της εταιρείας +[actiontech](http://www.actiontech.com). Δεν μπορώ να βρω πως θα κάνω το linux να δουλέψει το modem. Ενώ το αναφέρει στο boot όταν βρει τις pcmcia cards κάτι +για ttyS2 δεν ξέρω που θα πάω να φτιάξω την pcmcia για να δουλέψει και έτσι είμαι με δεμένα χέρια. ΕΠίσης, την αναγνωρίζει ως serial or pcmcia card, έτσι +ακριβώς. Θα σας παρακαλούσα να μου απαντήσετε αν έχετε κάτι στα υπόψιν σας διότι είμαι απελπισμένος. Drivers για linux δεν βρίσκω και έχω σοβαρό πρόβλημα αυτή +τη στιγμή. Απαντήστε αν είναι δυνατό λίγο γρήγορα. + +*Νομίζω ότι μπορείς να δουλέψεις κανονικά. Αν έχω καταλάβει σωστά, ο kernel βρίσκει το pcmcia modem και του δίνει το serial port ttyS2. Στο δικό μου μηχάνημα, ο +kernel δίνει το ttyS1 και βλέπω το modem (από προγράμματα για dial-up, π.χ. kppp) στο /dev/cua1. Υποθέτω λοιπόν ότι το δικό σου θα έιναι στο /dev/cua2 \... Αν +δεν είμαι σωστός, στείλε μου το /var/log/messages (μόνο τις γραμμές από το τελευταίο login παρακαλώ, έχουν date), για να καταλάβω καλύτερα τι γίνεται. Αν είμαι +σωστός ενημέρωσέ με !!!* + + +### [5. Soundcard και άλλα]{#s5} + +Από : [Σωτήρης Παρμάκης](mailto:paleolithic@iol.it) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Γειά !\ +Eίμαι ένας νεος χρήστης του Linux (Red Hat 5.1), εδώ και μια εβδομάδα και έχω πρόβλημα να εγκαταστήσω υποστήριξη για την κάρτα ήχου (Ultrasound PnP -AMD +InterWave-). Απ\'οτι διάβασα στο βιβλίο εγκατάστασης αλλά και το sound configuration το Red Hat υποστηρίζει μονο soundblaster. Υπάρχει κάποιος τρόπος να έχω ήχο +στο μηχάνημά μου; + +*Οχι, το RedHat δεν υποστηρίζει μόνο soyndblaster (TM). Για να είμαστε ακριβείς το RedHat υποστηρίζει ότι υποστηρίζει ο linux kernel, δηλαδή το linux. Μια ματιά +στο σχετικό [how-to](http://linux.forthnet.gr/LDP), (Linux hardware combatibility howto και linux sound howto) θα σου δείξει τι υποστηρίζεται και με πιό τρόπο +θα έχεις ήχο στο Linux.. Πιθανότατα θα χρειαστείς να ξαναφτιάξεις (recompile) τον πυρήνα (kernel) του λειτουργικού (βλ. kernel-howto). Πιθανώς αναφέρεσει όμως +στο soundconfig utility που έχει το RH5.x. Αυτό πράγματι υποστηρίζει μόνο κάρτες της Creative, και αυτό που κάνει είναι να ρυθμίζει αυτόματα τα Ι/Ο, IRQ. Για +τις υπόλοιπες κάρτες ήχου η παραδοσιακή διαδικασία είναι η σωστή δήλωση αυτών κατά το recompile του kernel και πιθανώς η χρήση του utility isa-pnp-utils για την +ρύθμιση της ίδιας της κάρτας.* + +Επίσης θέλω να συνδέομαι στο Internet με το Linux, και διάβασα στο περιοδικό για το XISP. Το πρόβλημα είναι: πού θα το βρώ; Υπάρχει σε πακέτο RPM? Στα CD του +Red Hat distribution δεν υπάρχει. Ευχαριστώ εκ των προτέρων. + +*Στο CD του RedHat δεν είναι δυνατόν να υπάρχει το σύμπαν όλο. Πολλά rpm πακέτα θα βρείς στο contrib directory του ftp της RedHat ή σε ένα +[mirror](ftp://ftp.ntua.gr/mirror/redhat) στην Ελλάδα. To contrib directory είναι ένα σημείο όπου οι διάφοροι χρήστες RedHat τοποθετούν τα rpm που φτιάξανε οι +ίδιοι (και όχι η RedHat) για να διευκολυνθούν άλλοι linuxades που μπορεί να τα χρειαστούν. Εκει θα βρείς το xisp όπως και πολλά άλλα χρήσιμα πράγματα.* + + +### [6. X-Windows και S3 virge]{#s6} + +Από : [Αντώνης Ζαμούτ](mailto:zamouta@ath.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Πριν μερικούς μήνες αγόρασα και εγκατέστησα το Slackware 3.1.0. Ωραία μεχρι εδώ, κανένα πρόβλημα στην εγκατάσταση, μέχρι που ήρθε το XF86Config. Μεσ\' στην καλή +χαρά, και αφού δεν είδα την κάρτα γραφικών μου στη λίστα των Servers του XFree86, διάλεξα τον S3. Έλα όμως που δεν δούλευει ό,τι και να κάνω και αναγκάζομαι να +δουλέψω (τι ξεφτίλα!!) σε VGA με 16 χρώματα. Σας παρακαλώ ΒΟΗΘΗΣΤΕ ΜΕ. Η κάρτα γραφικών μου είναι (μάλλον άγνωστη) συμβατη με Diamond Stelth 3d 2240, με τσιπάκι +S3 Virge 86c325 και με 2Mb. Τι πρέπει να κάνω (εάν μπορώ να κανω κάτι φυσικά) + +*Μπορείς να επιλέξεις αυτό που λέει 3325 που είναι για τσιπ S3 Virge 325.* + +Δεν υπάρχει κάτι τέτοιο να επιλέξω!!! Δεν υπάρχει ούτε server ούτε κάρτα στη database με τέτοιο όνομα. Μήπως μπορώ να κατεβάσω επιπλέον accelerated server από +κάπου; + +*Αντώνη, από την έκδοση 3.3.1 και μετά τα XFree86 έχουν υποστήριξη για S3 Virge. Αν η έκδοση των X που έχεις είναι παλαιότερη, θα πρέπει να κατεβάσεις μια +πρόσφατη (από το ftp.ntua.gr και από πολλά άλλα sites και στην Ελλάδα, μόνο που δεν τα θυμάμαι τώρα).* + + +### [7. Proxy server για RedHat]{#s7} + +Από : [Σταύρος Μαραγκουδάκης](mailto:elhellas@hol.gr) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Καλησπέρα σας, έχετε να μου προτέινετε κάποιον καλό Proxy Server για REDHAT linux; Θέλω να συνδέσω το εσωτερικό μου Lan, και αν μπορείτε να μου πείτε που θα τον +βρω; + +*Ένας πολύ καλός proxy που στήνεται σε πολλά UNIX λειτουργικά είναι ο [Squid](http://squid.nlanr.net/Squid/). Δεν τον έχω στήσει ποτέ προσωπικά αλλά έχω ακούσει +ότι είναι εύκολος στην εγκατάσταση.\ +Πιστεύω ότι δεν θα έχεις πρόβλημα αλλά και να έχεις, το [user manual του Squid](http://cache.is.co.za/squid/) είναι κατατοπιστικότατο. Καλή επιτυχία στο caching +:)))* + + +### [8. Εγκατάσταση KDE]{#s8} + +Από : [Καλαϊτσό](mailto:kalaitso@compulink.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Θα ήθελα να ρωτήσω κάτι σχετικά με το KDE Έχω κάνει εγκατάσταση τα RPM και τις αλλαγές με EDIT στο user/profile, όμως την τελευταία οδηγία δεν την κατάλαβα +σχετικά με τον να βρώ το αρχείο x.clients και να ορίσω να ξεκινά με KDE όταν γράφω startx. + +*Δημιούργησε ένα αρχείο στο home directory του root που να λέγεται .xinitrc ή .Xclients (με τελείες μπροστά). Πάνω πάνω γράψε \#!/bin/sh και από κάτω βάλε την +γραμμή που λένε οι οδηγίες του KDE (νομίζω /opt/kde/bin/startkde). Save, και μετά άλλαξε τα permissions:* + + chown root:root .Xclients (ή .xinitrc) + chmod ug+rx .Xclients (ή .xinitrc) + +*Τα αρχεία με τελεία μπροστά είναι τα \"hidden\" των windows 95* + +Πρέπει να σας πώ ότι έχω εγκαταστήσει το RedHat Linux 5.1 στόν υπολογιστή μου σε multiuser mode αλλά δεν ανήκω σε κανένα δίκτυο τον έχω για προσωπική χρήση και +μαίνω σαν root, δεν έχω ορίσει άλλους χρήστες. + +*Πολύ άσχημα κάνεις που μπαίνεις σαν root. Κάνε ένα user account και χρησιμοποιήσε αυτό. Εννοείται ότι πρέπει (στο home dir του user account που θα φτιάξεις) να +τοποθετηθούν και εκεί το .xinitrc (ή .Xclients) με τα ανάλογα permissions. Για να ισχύει για όλους τους χρήστες το KDE, πήγαινε σαν root και άλλαξε το +/etc/X11/xinit/Xclients (xwris teleia)* + + +### [9. Περί Samba προβλήματα]{#s9} + +Από : [Αλεξάκο Φώτη](mailto:damonae@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Παιδιά χαιρετώ\ +Λοιπόν είμαι ένας \"νεοφώτιστος\" στο Linux (ναι γιατρέ\... \"θεραπεύτηκα\") και σας γράφω γιατί το Samba με έχει κυριολεκτικά απελπίσει. Η κατάσταση έχει ως +εξής: Θέλω να στήσω ένα πολύ μικρό LAN που αποτελείται από :\ +a) Ένα Win-95 μηχάνημα με local IP address : 147.10.10.2 και όνομα ας πούμε \"linuxclient.mydomain.gr\" το οποίο θέλω να είναι ο Samba client.\ +b) Ένα Linux μηχάνημα με local IP address : 147.10.10.1 και όνομα π.χ. \"linuxserver.mydomain.gr\" που τρέχει το RedHat Linux 5.1 + +*Πρώτα πρώτα, το θέμα που έθιξε ο Νίκος Κόκρας. Χρησιμοποίησε ένα private space, π.χ. 192.168.0.0. ΜΗΝ χρησιμοποιείς πραγματικές διευθύνσεις. Ενδέχεται να +συμβούν πολλά (από το απλό του να μην δουλεύεις, μέχρι να έχει στήσει ο provider σου λάθος τους routers του και να κάνεις ένα Internet μπάχαλο)* + +Διαβάζω το άρθρο του Μιχάλη του Καμπριάνη στο magaz του Φλεβάρη αν θυμάμαι καλά. Κάνω τα πάντα ΑΚΡΙΒΩΣ όπως τα γράφει. Ακολουθούν τα σχετικά αποσπάσματα από το +/etc/services πρώτα: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + netbios-ns 137/tcp nbns + netbios-ns 137/udp nbns + netbios-dgm 138/tcp nbdgm + netbios-dgm 138/udp nbdgm + netbios-ssn 139/tcp nbssn + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Πολύ ωραία. Μήπως έχεις udp connection και για το netbios-ssn?* + +και το /etc/inetd.conf + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # ---- Samba + netbios-ssn stream tcp nowait root /usr/bin/smbd smbd + netbios-ns dgram udp wait root /usr/bin/nmbd nmbd + # ---- End Samba + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Και τα nmbd και smbd είναι στο /usr/bin, έτσι;* + +το /etc/hosts + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + 127.0.0.1 localhost localhost.localdomain + 147.10.10.1 linuxserver linuxserver.mydomain.gr + 147.10.10.2 linuxclient linuxclient.mydomain.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Εδώ βάλε πρώτα το FQDN, κάνε το δηλαδή:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 127.0.0.1 localhost + 147.10.10.1 linuxserver.mydomain.gr linuxserver + 147.10.10.2 linuxclient.mydomain.gr linuxclient + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το \"/etc/hosts.allow\" είναι άδειο + +*Σου χρειάζεται μόνο για τα tcp-wrappers (tcpd) Μπορείς να το αγνοήσεις προσωρινά. Αργότερα θα το χρησιμοποιήσεις για να \"κλείσεις\" την πρόσβαση στο μηχάνημά +σου.* + +Χρησιμοποιώ το default smb.conf και τα αποτελέσματα του \"netstat -a \| grep netbios\" είναι τα ακόλουθα: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + tcp 0 0 *:netbios-ssn *:* LISTEN + udp 0 0 *:netbios-ns *:* + udp 0 0 *:netbios-ns *:* + udp 0 0 *:netbios-dgm *:* + udp 0 0 linuxserver.:netbios-ns *:* + udp 0 0 linuxserver:netbios-dgm *:* + udp 0 0 linuxclient.:netbios-ns *:* + udp 0 0 linuxclient:netbios-dgm *:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και το ΤΡΕΛΛΟ output της εντολής: /etc/rc.d/init.d/smb status + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + smbd is stopped + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ας τα πάρουμε με την σειρά. Έτρεξες το testparm; Αν ναι, τι σου έβγαλε; Το smbd που κάνει stop, γιατί κάνει stop; Το /var/adm/messages δεν λέει τίποτα; ΑΛΛΑ, +αφού είναι στο /etc/inetd.conf ΔΕΝ χρειάζεσαι το /etc/rc.d/init.d/smbd.* + +nmbd (pid 2084) is running\...\ +Αν τώρα δώσω : \"smbclient -L linuxserver\" παίρνω : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + doing parameter printing = bsd + doing parameter printcap name = /etc/printcap + doing parameter load printers = yes + doing parameter interfaces = 147.10.10.1/24 147.10.10.2/24 + doing parameter bind interfaces only = True + doing parameter guest account = nobody + doing parameter log file = /var/log/samba-log.%m + doing parameter log file = /usr/local/samba/log.%m + pm_process() returned Yes + adding IPC service + load_client_codepage: filename /etc/codepages/codepage.850 does not exist. + Added interface ip=147.10.10.1 bcast=147.10.10.255 nmask=255.255.255.0 + Added interface ip=147.10.10.2 bcast=147.10.10.255 nmask=255.255.255.0 + Opening sockets + resolve_name: Attempting lmhosts lookup for name LINUXSERVER + resolve_name: Attempting host lookup for name LINUXSERVER + Connecting to 147.10.10.1 at port 139 + Connected + Session request failed (0,0) with myname=LINUXSERVER destname=LINUXSERVER + Unspecified error 0x0 + Your server software is being unfriendly + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Όπως το περιμέναμε δηλαδή εδώ. Αφού δεν τρέχει το smbd, πως να δέχεται connections? Κοίτα το προηγούμενο σχόλιο* + +Παρ\' όλα αυτά η smbmount μου κάνει mount στον δίσκο του Linux όλον τον σκληρό του μηχανήματος (client) που τρέχει Win95 !!!! + +*Ναι, γιατί στα Win 95 το αντίστοιχο του smbd τρέχει κανονικά.* + +Μπορεί κανείς να μου πει τι φταίει; + +*Ναι, το smbd. Έλεγξε αν στην θύρα που πάει να σηκωθεί (139 από default) τρέχει κάτι άλλο Κοίτα το messages καθώς και όλα τα logs του smbd. Κάπου χτυπάει, και +δεν πρέπει να είναι πολύ δύσκολο να βρεις που χτυπάει από τα logs. Αν δεν βρεις άκρη, στείλε το /etc/rc.d/init.d/smbd να του ρίξουμε μια ματιά, μαζί με το +smb.conf (αλλά προσπάθησε πρώτα μόνος σου σε παρακαλώ)* + +Είναι τόσο δύσκολο να έχω ένα Linux ως file server και μερικά Win95 μηχανήματα ως clients σ\' ένα τοπικό δίκτυο; + +*Όχι, δεν είναι :-)* + + +### [10. KDE και Sscreen resolution]{#s10} + +Από : [DJ Art](mailto:arturok@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Χρησιμοποιώ RedHat Linux 5.0 και έχω τις εξής ερωτήσεις: 1) Όταν πάω να εγκαταστήσω το kdebase1.0 μου βγάζει το εξής μήνυμα: + + Checking + for QT... configure: error: QT-1.3 (headers and libriaries) not found. + Please check your installation. + +***ΜΚ:** Χρειάζεσαι το QT (προτίμησε την v. 1.4) την οποία θα βρεις είτε από εκεί που βρήκες το KDE (προτεινόμενο) είτε από το http://www.troll.no\ +**NK:** Και σε RedHat θέλεις εκτός από το qt-1.40\*rpm και το qt-devel-1.40\*rpm για να κάνεις compile.* + +2\) Στα X-Windows μπορώ να επιλέξω ανάμεσα σε 3 αναλύσεις: 640Χ480, 800Χ600 και 1024Χ768. Όταν έχω την μεγάλη ανάλυση (1024Χ768) το desktop εμφανίζεται σε +full-screen mode, ενώ στις άλλες αναλύσεις το desktop κάνει scrolling. Πώς μπορώ να έχω full-screen mode και στις άλλες αναλύσεις; + +***MK:** Από ότι ξέρω, δεν μπορείς. Η μέγιστη ανάλυση που έχεις δηλώσει λειτουργεί ως virtual desktop size για τις μικρότερες αναλύσεις. **NK:** Από την άλλη, +θυμάμαι από τότε που χρησιμοποιούσα εκείνα τα αρχαία fvwm και fvwm95 ότι μπορείς να δηλώσεις το virtual. Δες το /etc/X11/XF86Config, στο section \"accel\" (προς +το τέλος) έχει τις αναλύσεις (πραγματικές) και 1 (μία) δήλωση για virtual (στην περίπτωσή σου 1024 Χ 800). Κάνε edit το σχετικό με αυτά που θέλεις (κρατάμε +πάντα backup: cp -a XF86Config XF86Config-OLD)* + +3\) Που μπορώ να βρώ ένα πρόγραμμα FTP για περιβάλλον X-Windows, το οποίο να είναι κάπως εύχρηστο (δηλαδή να έχει κουμπιά έτσι ώστε να μην χρειάζεται να +πληκτρολογώ ένα σωρό εντολές κάθε φορά που θέλω να κατεβάσω ένα αρχείο) ? + +***ΜΚ:** Μπορείς να δοκιμάσεις το wxftp που θα το βρείς στο και πρόσφατα είδα ένα ftp για KDE αλλά δεν είναι ακόμα έτοιμο, και δεν +θυμάμαι και URL :-(. Τέλος, μπορείς να δοκιμάσεις και τον kfm, δίνοντας εκεί που λέει file: το ftp://ftp.server.com **NK:** Filerunner\ +Xmftp\ +MC (φυσικά)\ +και πολλά άλλα\....\ +Για όλα, κάνεις ένα search στο [ftpwatcher](http://lfw.linuxhq.com)* + + +### [11. Πρόβλημα με το mount (fs)]{#s11} + +Από : [Μπαλαλής Χαράλαμπος](mailto:haribalos@hotmail.com) + +Απάντηση : [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) + +Το σύστημά μου είναι ένας Cyrix 150+ με δύο σκληρούς, έναν quantum 1.2 και έναν seagate 2.1. Το Linux το έχω στον Quantum όπως και τα 95, οπότε ο seagate +έρχεται δεύτερος στο σύτσημα μιας και παίζει ρόλο αποθηκευτικό στο λειτουργικό. Το πρόβλημά μου είναι ότι το Linux δεν τον βλέπει όταν τον κάνω mount.. Δηλαδή η +εντολή mount /dev/hdb1 -t msdos /mnt μου λέει bad fs type or superblock και τα λοιπά\.... Σκέφτηκα μήπως φταίει το ότι δεν έχει αρχεία συστήματος έτσι το linux +δεν μπορεί να δει κάποιο ίχνος του dos σε αυτόν\... Εσείς τι λέτε; + +*Το πρώτο που μου έρχεται στο νου είναι \"μήπως όντως δεν είναι msdos partition αυτό που πας να κάνεις mount?\". Δοκίμασε να κάνεις* + + fdisk -l + +*και πρέπει να δεις κάτι σαν* + + Disk /dev/hda: ?? heads, ?? sectors, ?? cylinders + Units = cylinders of 8192 * 512 bytes + + Device Boot Start End Blocks Id System + /dev/hda1 1 5 40162 82 Linux swap + /dev/hda2 6 261 2056320 83 Linux native + + Disk /dev/hdb: ?? heads, ?? sectors, ?? cylinders + Units = cylinders of 8192 * 512 bytes + + Device Boot Start End Blocks Id System + * /dev/hdb1 1 ?? ????? 06 DOS 16-bit >= 32 + /dev/hdb2 ?? ?? ????? 06 DOS 16-bit >= 32 + +*Την γραμμή που σε ενδιαφέρει την έχω σημειώσει με αστεράκι (\*). θα πρέπει να υπάρχει κάποιο partition στον δίσκο /dev/hdb που είναι τύπου \"DOS 16-bit \>= +32\" για να το δει το Linux σαν \"msdos\" τύπου partition στην mount εντολή.\ +Μπορεί, όμως, το partition να είναι δηλωμένο σαν MS-DOS στο partition table, αλλά το Linux να μην το βλέπει γιατί δεν είναι φορμαρισμένο σε FAT (απλό FAT, αυτό +που χρησιμοποιεί το DOS). Αν το partition είναι φορμαρισμένο σε Windows-95 κατά πάσα πιθανότητα είναι πιο καλό να το δεις σαν VFAT partition (οπότε θα βλέπεις +και τα μεγάλα ονόματα).\ +Γενικά οι τύποι partitions που γίνονται mount κάτω από Linux είναι πολλοί, με το FAT, VFAT και FAT-32 να είναι τα πιο κοινά χρησιμοποιούμενα σε μηχανήματα που +τρέχουν κάτι από Microsoft (όχι όπως το δικό μου που είναι pure Linux :). Άν πιστεύεις ότι ο τύπος του filesystem που έχει το εν λόγω partition, μπορείς να πας +στην σελίδα: http://www.ceid.upatras.gr/ gef/fs.html Θα βρεις πολλές όμορφες πληροφορίες για filesystems και drivers που τα υλοποιούν* + + +### [12. Connect από απόσταση]{#s12} + +Από : [Γιώργο Μαραγκουδάκη](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Καλησπέρα σας, θέλω να μου πείτε εάν υπάρχει κάποια εντολή στο Linux η οποία όταν σε ένα Network κάποιος Υπολογιστής ανοίξει τον Internet Explorer για να πάει +στο Internet αυτόματα το Linux να συνδέεται στο Internet και όταν μετά από κάποιο χ χρόνο ο χρήστης δεν κάνει τίποτα να κλείνει τη σύνδεση. Υπάρχει τίποτα +τέτοιο; + +*Περίπου. Δοκίμασε το [connect](http://www.caesium.fr/freeware/connect/index.html). Αυτό σου δίνει την δυνατότητα να ανοίγηει ο χρήστης την σύνδεση από το +workstation του. Νομίζω ότι και κάτι που λέγεται [diald](http://www.loonie.net/~eschenk/diald.html) κάνει την δουλειά που θέλεις, αλλά νομίζω ότι το connect +είναι καλύτερο. Δεν είναι τόσο διάφανο για τον χρήστη, αλλά αν κάποιος ζητήσει κάτι από το Internet που δεν έρθει σε 1 λεπτό (περίπου τόσο παίρνει σε μένα η +διαδικασία σύνδεσης με αναλογική γραμμή), μάλλον θα θεωρήσει ότι το link είναι κάτω και θα ξαναδοκιμάσει αργότερα, που η γραμμή θα έχει κοπεί, κ.ο.κ.* + + +### [13. Debian FTP]{#s13} + +Από : [Λέων Ίσαυρο](mailto:leoniv4@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@rocketmail.com) + +Γεια σας!\ +Κατ\' αρχήν \"sorry\" για τα greeklish αλλά ο υπολογιστής του Πανεπιστημίου δεν προτιμάει τα Ελληνικά (ναι M\$ τρέχει και μάλιστα NT!) + +*Kακό της κεφαλής τους, που λέμε και εδώ στην Κρήτη* + +και συγχαρητήρια για το περιοδικό σας. Μαθάινω αρκετά κάθε φορά που έρχομαι στο υπολογιστικό και εκνευρίζομαι με τα NT όλαο και περισσότερο. + +*Μην εκνευρίζεσαι, το θέμα είναι να τους κάνουμε να δούν το φως τους\...* + +Θέλω να εγκαταστήσω το Linux στον υπολογιστή μου (386sx 7MB RAM 650MB HDD) και προσπαθώ να κατεβάσω μέσω FTP την καινούργια έκδοση της Debian, εννοώ την 2.0. Το +πρόβλημά μου είναι ότι τρία αρχεία δεν τα \"δίνει\" με τίποτα. Συγκεκριμένα τα Base12-5.bin, resc1200.bin και lowmem.bin. Μήπως ξέρετε που μπορώ να τα βρω +(κάπου στην Ελλάδα έτσι ώστε να μην περιμένω ώρες); Μέχρι τώρα τρέχω το DOS και δεν μπορώ να λειτουργήσω το modem (το μόνο σύγχρονο πράγμα επάνω του - 33.6). + +*\'Ενα site στο δίκτυο που μπορείς να δεις που έχει το debian 2.0, είναι (πάντως, το έψαξα και στην Ελλάδα δεν υπάρχει +τίποτα\...)* + +Τελικά με την έκδοση 2.0 μόνο, τι μπορεί το Linux να κάνει; Είναι απλά ένα λειτουργικό όπως το DOS ή έχει μέσα και κάποια προγράμματα -επεξεργαστή κειμένου, +players ήχου κ.τ.λ.-? Θα ήτανν σωστό να βάλω αμέσως τα X windows ή να μάθω το Linux πρώτα και ύστερα;prwta kai ustera? Φαντάζομαι ότι δεν έχει καμία σχέση με το +DOS (το οποίο παρεπιμπτόντως με έχει βολέψει αρκετά) όσον αφορά τις εντολές\... + +*Η έκδοση 2.0 που αναφέρεις, είναι η έκδοση του Distribution της Debian. Το Linux έχει φτάσει (αισίως) την έκδοση 2.0.35 (σύντομα θα βγει η έκδοση 2.2) Ο +άριθμός αυτός, αναφέρεται στον πυρήνα του λειτουργικού, που ουσιαστικά κάνει όλη τη δουλειά. Όλα τα άλλα (που περιέχονται στις Distributions) είναι +προγραμματάκια που \"απλά τρέχουν\" χρησιμοποιόντας τον πυρήνα. (Μπερδεύτηκες;;) Με τον υπολογιστή που αναφέρεις, δε θα σου συνιστούσα να βάλεις Χ, (όχι ότι δε +θα τρέχουν, αλλά θα είναι πολύ αργά\...) Εξαρτάται φυσικά και από το τι θα τρέχεις, και πόση SWAP θα βάλεις\... (Swap είναι η \"εικονική\" μνήμη που ουσιαστικά +είναι χώρος στο δίσκο) Πάντως, δεν είναι απαραίτητο να μάθεις Linux (τη γραμμή εντολών του εννοώ) για να τρέξεις τα Χ. Εγώ πάντως, προσωπικά δηλαδή, θα σου το +συνιστούσα\... Εξάλλου, πολλές φορές θα χρειαστεί να κάνεις πράγματα, τα οποία είναι καλύτερα και γρηγορότερα να τα κάνεις από το Shell (το command prompt +δηλαδή) \'Οσον αφορά στους επεξεργαστές κειμένου, Players ήχου κ.λπ. που αναφέρεις, υπάρχουν τέτοια και για το SHELL και για τα Χ. Απλά (τουλάχιστον για +επεξεργαστές κειμένου) δεν είναι και τόσο εύχρηστοι\...* + +Περιμένω απάντηση με ανυπομονησία για να γραφτώ και γω μέλος στους περόφημους \"linuxάδες\" + +*Καλώς ήρθες στον κόσμο μας, και όποτε θές είμαστε στη διάθεσή σου.* + + +### [14. Rendition chipset]{#s14} + +Από : [Βαδάκης Ευθύμιος](mailto:evada@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Έχω πρόβλημα με την κάρτα γραφικών μου. Είναι μία Diamond Stealth II με chipset rendition 2100 O Xconfigurator την αναγνωρίζει σαν απλή vga16 με ελάχιστα +χρώματα. (Έχω οθόνη την sony multiscan 100es κατάφερα και την δήλωσα) και linux redhat 5.1,kde 1.0 + +*Φίλε Ευθύμιε,\ +Θα πρέπει να πας στην διεύθυνση και να κατεβάσεις τον X-server για την Rendition. Με αυτόν δουλεύει μια χαρά.* + diff --git a/content/articles/09/01_editorial.md b/content/articles/09/01_editorial.md new file mode 100644 index 0000000..0c4c3af --- /dev/null +++ b/content/articles/09/01_editorial.md @@ -0,0 +1,70 @@ ++++ +title = 'Editorial' +date = '1998-11-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 09'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Όπως λέγαμε και τον προηγούμενο μήνα, το HEL.L.U.G. έχει πλέον εκλεγμένο Δ.Σ. Αυτή τη στιγμή έχουν ανατεθεί θέσεις και αρμοδιότητες, και το HEL.L.U.G. κινείται +σε μία καλή ελπίζουμε κατεύθυνση επίτευξης του κύριου σκοπού του, που είναι η διάδοση του Linux στην Ελλάδα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το πρώτο εκλεγμένο διοικητικό συμβούλιο, αποτελείται από τους: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Όνομα** + **Θέση** + + Πρόεδρος Καμπριάνης Μιχάλης + + Αντιπρόεδρος Παπακώστας Ευρυπίδης + + Γ. Γραμματέας Βρυώνης Παναγιώτης + + Ταμίας Σανιδά Βούλα + + Έφορος Γεωργάτος Φώτης + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Όπως διαβάσατε στο [προηγούμενο τεύχος](../08/04_giafka.html), μία ομάδα κομμάντο έφτιαξε ένα μηχάνημα, το οποίο αυτή τη στιγμή φιλοξενείται από την [FORTHnet +Α.Ε.](http://www.forthnet.gr) την οποία και ευχαριστούμε. Το μηχάνημα έχει επάνω : + +- Web-server τον οποίο έχει αναλάβει ο Κρεμμύδας Κλεάνθης με τη βοήθεια των Κώστα Μπαρακίτη και Σπύρου Μπόλη, +- Listserver στον οποίο θα μεταφερθούν οι λίστες linux-greek-users, hellug και how-to, υπό την επίβλεψη των Ιωάννου Γιάννη, Κόκρα Νίκου και Μαυρογιαννόπουλου + Νίκου, +- Sendmail για υπηρεσία mail-forwarding των μελών, υπό την επίβλεψη του Νίκου Μαυρογιανόπουλου, και +- PostgreSQL server με στοιχεία για τα μέλη, τον οποίο διαχειρίζεται ο Κώστας Μαϊστρέλης. + +Στα πλάνα του συλλόγου, είναι η μεταφορά του Magaz εκεί, ενώ βέβαια, θα υπάρχει και στο linux.gr, το οποίο συνεχίζει να φιλοξενείται από την [Hellas On +Line](http://www.hol.gr). Έτσι φτάνουμε στον να υποστηρίζεται το Linux έμπρακτα, από τους δύο μεγαλύτερους ISP της Ελλάδας. + +Το Δ.Σ. έχει ήδη αρχίσει να ασχολείται με την πιθανότητα παρουσίασης του Linux σε ειδική εκδήλωση του γνωστού βιβλιοπωλείου Παπασωτηρίου, όπως και την συμμετοχή +σε εκθέσεις. + +Αρκετά είπαμε όμως για το Hellug, ας περάσουμε στην υπόλοιπη επικαιρότητα του τεύχους. + +Υπάρχει ένα άρθρο του Νίκου Μαυρογιαννόπουλου σχετικά με το [National Language Support](04_nls.html) (NLS), τι είναι, γιατί και πως να ασχοληθείτε με αυτό. + +Ο Γιώργος Κεραμίδας επανέρχεται με οδηγίες για να [γράψουμε ελληνικά στο groff](03_groff.html). + +Ο Γιάννης Εξηνταρίδης που τείνει να εξελιχθεί σε έναν από τους σταθερούς - έκτακτους αρθρογράφους, μας μιλάει για τον [Προγραμματισμό σε +C/C++](02_programing.html) + +Ο Βαγγέλης Παπαδογιαννάκης συνεχίζει να ασχολείται με το να βοηθάει σε απλές καθημερινές δουλειές. Η ειδική μας πλέον στήλη για τους νέους χρήστες, πόσο [απλή +σας κάνει την ζωή το Linux](06_bash2.html). + +Ευχαριστούμε ιδιαίτερα τον Βαγγέλη Ρόζο, για το άρθρο του [Εισαγωγή στο μαθηματικό πρόγραμμα Calc](05_calctut.html). Διαβάστε το και θα δείτε πόσες δυνατότητες +έχουν τα προγράμματα που φαίνονται εκ πρώτης όψεως απλά. + +Και βέβαια, δεν θα μπορούσε να λείπει η σταθερή [στήλη της αλληλογραφίας](07_mailbox.html). Εσείς μας γράφετε, κι εμείς\... + +Να σας υπενθυμίσω, ότι όπως πάντα, το magaz φιλοξενεί άρθρα, από όλους τους φίλους συνlinuxάδες. Στο συγκεκριμένο τεύχος μάλιστα, μας σώσανε οι φίλοι μας (αφού +η συντακτική ομάδα του Magaz συμμετέχει σχεδόν σύσσωμη στο Δ.Σ. και τις ομάδες εργασίας του Hellug). + +Καλή ανάγνωση, και καλό φθινόπωρο. diff --git a/content/articles/09/02_programing.md b/content/articles/09/02_programing.md new file mode 100644 index 0000000..793b4b2 --- /dev/null +++ b/content/articles/09/02_programing.md @@ -0,0 +1,87 @@ ++++ +title = 'Προγραμματισμός σε C/C++ στο Linux' +date = '1998-11-01T00:00:00Z' +description = '' +author = 'Γιάννης Εξηνταρίδης' +issue = ['Magaz 09'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αρκετοί που ασχολούνται με προγραμματισμό (είτε ερασιτεχνικά, είτε επαγγελματικά) και έχουν έρθει στον κόσμο του Linux, αναρωτιούνται ίσως τι γίνεται με την +ανάπτυξη εφαρμογών. Τα παρακάτω επιχειρούν να ρίξουν φως σε αυτόν τον τομέα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το Linux προσφέρει μια πληθώρα προγραμματιστικών εργαλείων και όπως αντιλαμβάνεστε είναι φυσικό η C/C++ να έχει την τιμητική της στο κόσμο του Linux μια που η +πλειοψηφία των εφαρμογών (όπως εξάλλου και το ίδιο το λειτουργικό) είναι γραμμένες σε αυτή την γλώσσα. Στο Linux κυριαρχεί το κλασικό στύλ ανάπτυξης εφαρμογών. +Δηλαδή editing του κώδικα σε ένα απλό text editor, compiling (από την γραμμή εντολής φυσικά) running και debugging. Το compiling γίνεται από τον πανίσχυρο GNU +compiler (gcc αν πρόκειται για πρόγραμμα C, g++ αν πρόκειται για πρόγραμμα C++). + +Μερικά απλά παραδείγματα θα δείξουν την χρήση του. Για να κάνουμε ένα απλό compiling αρκεί να δώοσυμε την εντολή gcc -c hello.c (όπου hello.c ο source κώδικας +μας). + +Για να κάνουμε compiling + linking θα δώοσυμε την εντολή + +**gcc -o hello hello.c** + +Να τονίσουμε ότι ΠΡΕΠΕΙ να δώσουμε όνομα στο τελικό εκτελέσιμο αρχείο που θα προκύψει. ΔΕΝ εννοείται ότι το αρχείο θα ονομαστεί hello. Αντίθετα το default είναι +να ονομαστεί a.out. + +Οι διάφορες libraries στις οποίες θα γίνει link η εφαρμογή μας δηλώνονται με -l(όνομα library χωρίς το πρόθεμα lib). Π.χ. Αν έχουμε γράψει ένα πρόγραμμα το +οποίο χρησιμοποιεί την I/O library της C++ θα πρέπει να γράψουμε + +**g++ -o hello hello.cpp -liostream** + +To αρχείο που αντιστοίχει στην library iostream είναι το libiostream.a + +Αν θέλαμε να κάνουμε link με την standard C library θα γράφαμε + +**gcc -o hello hello.c -lc** + +Oμοια το αρχείο που αντιστοίχει στην standard C library είναι το libc.a + +Από τα παραπάνω φαίνεται η λογική της διαδικασίας όταν θέλουμε να εκτελέσουμε link σε κάποια library. Στην πραγματικότητα τα παραπάνω ( δηλαδή -lc ή -liostream) +δεν χρειαζόντουσαν γιατί εξ\' ορισμού ο gcc αυτόματα εκτελεί link σε αυτές. Χρειάζεται όμως σε άλλες περιπτώσεις. + +Ο gcc δέχεται πάρα πολλές επιλογές οι οποίες δεν είναι δυνατόν να καλυφτούν σε ένα μόνο άρθρο. Η καλύτερη πηγή για αυτά αποτελεί το ίδιο το manual του (ή οι man +pages). Θα τονίσουμε απλά τις πιο σημαντικές. Κάθε προγραμματιστής που σέβεται τον εαυτό του ξέρει ότι η εφαρμογή πρέπει να είναι όσο το δυνατόν +βελτιστοποιημένη (τόσο από άποψη ταχύτητας όσο και από άποψη μεγέθους) + +Βελτιστοποίση σε ένα ορισμένα βαθμό γίνεται με την επιλογή -Ο1 Π.χ + +**gcc -O1 -o \[output\] \[input\]** + +Ακόμα περισσότερο + +**gcc -O2 -o \[output\] \[input\]** + +Μήπως θέλουμε να αναφέρονται όλα τα warnings ? Τότε αρκεί να δώσουμε ένα + +**gcc -Wall -o \[output\] \[input\]** + +Και το debugging ? Τι γίνεται με αυτό ? Ο GNU debugger είναι ο gdb. Επειδή όμως χρειαζόμαστε και debugging info προτού περάσουμε στην χρήση του χρειάζεται να +δώσουμε ένα + +**gcc -g -o \[output\] \[input\]** πρώτα και είμαστε έτοιμοι. + +Και το profiling ? Μην ανησυχείτε. Υπάρχει και αυτό. Δώστε ένα + +**gcc -pg -o \[output\] \[input\]** + +εκτελέστε την εφαρμογή, μετά δώστε ένα gprof gmon.out (όπου gmon.out το αρχείο που δημουργείται) και θα δείτε ένα σωρό χρήσιμες πληροφορίες. Οπως βλέπετε τίποτα +δεν λείπει. + +Ισως τα παραπάνω να φανούν λιγάκι απαρχαιωμένα στους μοντέρνους προγραμματιστές οι οποίοι έχουν μάθει στα (πολύ καλά ομολογουμένως) ολοκληρωμένα περιβάλλοντα, +στις σουίτες ανάπτυξης εφαρμογών κ.λπ. Η αλήθεια είναι πως είχαν και άλλοι τις ίδιες ανησυχίες, για αυτό και προχώρησαν σε κάτι ανάλογο. Υπάρχουν τέτοια +πράγματα σε Linux και τελείως ενδεικτικά θα αναφέρω το RHIDE (το οποίο στον τρόπο λειτουργίας θα θυμίσει πολύ το IDE της Borland για DOS), το xwke, τον ddd ( +Data display Debugger ), τον kdbg (K Debugger για όσους έχουν KDE στο σύστημά τους ) κ.λπ. Δεν λείπουν επίσης βιβλιοθήκες ρουτινών και συναρτήσεων. Όλα αυτά θα +τα βρείτε στο τμήμα Software/Programming του . + +Η αλήθεια είναι πάντως πως ο GNU έχει την τιμητική του και στον κόσμο του DOS. Πράγματι ο γνωστός DJGPP compiler δεν είναι τίποτα παραπάνω από ένα porting του +gcc στο DOS. Για πολλά χρόνια έχει αποτελέσει την ίσως μοναδική λύση, για 32bit εφαρμογές και φυσικά παιχνίδια στην παραπάνω πλατφόρμα. (Π.χ. το Quake, ο πολύ +γνωστός emulator MAME κ.λπ.) + +Φυσικά τα παραπάνω δεν φιλοδοξούν να καλύψουν το κεφάλαιο \"προγραμματισμός C/C++ στο Linux\". Απλά αποτελούν μια πρώτη εισαγωγή και στην πραγματικότητα μόλις +που αγγίζουν την κορυφή του παγόβουνου. Για παράδειγμα δεν αναφερθήκαμε καθόλου σε X programming ούτε και Assembly programming (Για το τελευταίο επιφυλλασόμεθα +σε μελλοντικό αρθράκι). Καλώς ήρθατε στον κόσμο του Gcc ! diff --git a/content/articles/09/03_groff.md b/content/articles/09/03_groff.md new file mode 100644 index 0000000..ba57c51 --- /dev/null +++ b/content/articles/09/03_groff.md @@ -0,0 +1,301 @@ ++++ +title = 'Γράφοντας Ελληνικά στο GROFF' +date = '1998-11-01T00:00:00Z' +description = '' +author = 'Γιώργος Κεραμίδας(mailto:keramida@ceid.upatras.gr)' +issue = ['Magaz 09'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένας από τους αρχικούς λόγους ανάπτυξης του UNIX ήταν η ανάπτυξη ενός συστήματος για την στοιχειοθεσία των κειμένων που γραφόντουσαν στα Bell Labs της `AT& T`. +Αυτό το σύστημα ονομάστηκε αρχικά roff από την φράση run off, μετά ονομάστηκε nroff όταν προσαρμόστηκε να βγάζει έξοδο για πολλά τερματικά, και τέλος troff όταν +προσαρμόστηκε ξανά για να τυπώνει typesetter. Όλα τα manual pages του UNIX γράφονται σύμφωνα με μια πολύ παλιά παράδοση σε troff, και η Free Software Foundation +δεν μπορούσε να αφήσει τους χρήστες του Free Software παραπονεμένους! Έτσι φτιάχθηκε το groff, το οποίο μπορεί κάλλιστα να χρησιμοποιηθεί για να γραφτούν +ελληνικά κείμενα. Ας δούμε όμως πως\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. ΕΙΣΑΓΩΓΗ** +--------------------------------------- + +**2. ΓΡΑΦΟΝΤΑΣ ΑΠΛΑ ΚΕΙΜΕΝΑ ΣΤΟ GROFF** +--------------------------------------------------------------- + +**3. ΕΛΛΗΝΙΚΟΙ ΧΑΡΑΚΤΗΡΕΣ** +--------------------------------------------------- + +**4. ΟΙ ΓΡΑΜΜΑΤΟΣΕΙΡΕΣ ΤΟΥ GROFF** +---------------------------------------------------------- + +**5. ΟΙ ΑΛΛΑΓΕΣ ΠΟΥ ΧΡΕΙΑΖΟΝΤΑΙ** +--------------------------------------------------------- + +**6. ΚΑΝΟΥΜΕ ΤΙΣ ΑΛΛΑΓΕΣ** +-------------------------------------------------- + +**7. ΔΟΚΙΜΑΖΟΥΜΕ ΤΑ ΕΛΛΗΝΙΚΑ** +------------------------------------------------------ + +**8. ΒΙΒΛΙΟΓΡΑΦΙΑ** +------------------------------------------- + + +### [1. ΕΙΣΑΓΩΓΗ]{#s1} + +Όταν το UNIX ήταν ακόμα σε πειραματικό στάδιο, φτιάχθηκε από τον J. F. Ossana σε assembly για PDP/11! Η αρχική έκδοση ξαναγράφτηκε αργότερα σε C από τον Brian +W. Kernighan (ναι, τον ΕΝΑ και ΜΟΝΑΔΙΚΟ Kernighan εννοώ, που έφτιαξε μαζί με τον ΑΦΘΑΣΤΟ Dennis M. Ritchie την ΤΕΛΕΙΑ γλώσσα, την C) για να τρέχει στο +\"καινούριο\" λειτουργικό σύστημα που τότε εμφανιζόταν δειλά δειλά, το UNIX. Υπάρχει μάλιστα κι ένα ανέκδοτο(;) που λέει πως όταν κάποτε η `AT& T` σκεφτόταν να +σταματήσει το project του UNIX, η τότε πρώτη μορφή του troff, που άκουγε στο όνομα roff, ήταν ο μοναδικός λόγος που δεν έσβησε το UNIX από προσώπου γης! + +Κάποιος manager του project είδε το troff, και την έξοδο που τότε έβγαζε στον θρυλικό CA/T typesetter, και ξετρελλάθηκε. Κράτησε το project του UNIX μόνο και +μόνο για να συνεχίσει να αναπτύσσεται μαζί με το UNIX και το troff, τόσο πολύ του άρεσε. Ίσως από \'κει να ξεκίνησε κι η παράδοση τα manuals του UNIX να +γράφονται σε troff. Όπως και νά \'χει πάντως το πράγμα, η αλήθεια είναι ότι η παράδοση να γράφονται τα εγχειρίδια του UNIX σε troff είναι τόσο παλιά που κανείς +πια δεν πρέπει να θυμάται πως ξεκίνησε. + +Η Free Software Foundation, με σαφή προτίμηση προς τις πιο εξελιγμένες δυνατότητες του TeX, έφτιαξε το δικό της format, με το όνομα Texinfo. Παρόλ\' αυτά, ένα +από τα καλύτερα προγράμματα της FSF είναι ο groff, που δεν είναι τίποτα άλλο από μια καινούρια έκδοση του troff με πιο πολλά (και καλύτερα πολλές φορές) macro +sets, κτλ. + +Με την γνωστή πια επεκτασιμότητα που χαρακτηρίζει τα προγράμματα της GNU, ο groff υποστηρίζει όλους τους 8-bit χαρακτήρες. Αλλά οι απλές εγκαταστάσεις του δεν +έχουν υποστήριξη 8-bit χαρακτήρων για λόγους μεταφερσιμότητας. + +Ένα από τα formats εξόδου του groff είναι και το απλό ASCII κείμενο. Εδώ θα περιγράψουμε τι μπορείτε να κάνετε σε μια απλή εγκατάσταση του groff, για να κάνετε +τον groff να \"καταλαβαίνει\" ελληνικά (κι άλλες γλώσσες), τουλάχιστον για την έξοδο απλού κειμένου. + + +### [2. ΓΡΑΦΟΝΤΑΣ ΑΠΛΑ ΚΕΙΜΕΝΑ ΣΤΟ GROFF]{#s2} + +Το να γράψει κανείς ένα κείμενο στο groff δεν είναι πολύ δύσκολο. Απλά δημιουργεί ένα αρχείο με το κείμενό του, και τρέχει το groff όταν θέλει να μορφοποιήσει +το κείμενο για να το τυπώσει ή να το δει στην οθόνη του. + +Για παράδειγμα, μπορείτε να γράψετε σε ένα αρχείο το κείμενο + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Αυτό είναι ένα μικρό κείμενο γραμμένο σε ένα επίσης μικρό αρχείο. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν σώσετε αυτό το κείμενο σε ένα αρχείο με το όνομα small.tr και τρέξετε το groff με την εντολή + + groff -Tascii small.tr + +μπορείτε να δείτε μια όμορφα στοιχισμένη μορφή του αρχικού κειμένου. Αν για κάποιο λόγο το κείμενο δεν χωράει στην οθόνη σας, και οι πρώτες γραμμές χάνονται, +γράψτε: + + groff -Tascii small.tr | less -r + +Το -Tascii είναι μια παράμετρος που λέει στο groff να μην βγάλει PostScript έξοδο που είναι το προκαθορισμένο, αλλά έξοδο απλού κειμένου. Αυτό είναι ένα μικρό +μόνο δείγμα του τι μπορεί να κάνει το groff. Για περισσότερες πληροφορίες για το groff, βλ. το τέλος αυτού του κειμένου στο τμήμα ΒΙΒΛΙΟΓΡΑΦΙΑ. + +Αν το groff σας δεν υποστηρίζει σε ascii output όλους τους 8-bit χαρακτήρες η παραπάνω εντολή θα αποτύχει βγάζοντας πολλά μηνύματα του τύπου: + + groff:small.tr:1: illegal character ` 384' + +που σημαίνει ότι το groff συνάντησε στο αρχείο εισόδου του (που αυτή τη στιγμή είναι το small.tr) στην γραμμή 1, κάποιο χαρακτήρα που δεν μπορεί να τον +\`\`αναγνωρίσει\'\'. + +Το groff όπως έρχεται από την FSF σε μορφή πηγαίου κώδικα είναι ένα πρόγραμμα που μπορεί να δεχτεί 8-bit χαρακτήρες στην είσοδό του. Διαβάζουμε στο manual του +groff\_font: + + Groff supports eight bit characters; however some + utilities has difficulties with eight bit charac­ + ters. + +δηλαδή + + Το groff υποστηρίζει 8-bit χαρακτήρες! Όμως κάποια + προγράμματα έχουν δυσκολίες με τους 8-bit + χαρακτήρες... + +Αυτός είναι κι ο λόγος που οι προκαθορισμένες γραμματοσειρές του groff δεν περιλαμβάνουν τους χαρακτήρες που βρίσκονται πάνω από τον ASCII-127 (DEL). Οι +ελληνικοί χαρακτήρες όμως βρίσκονται ακριβώς σε αυτή την περιοχή, και το groff δεν τους αναγνωρίζει. Γι\' αυτό και βγάζει τα μηνύματα \`invalid character\...\' +που είδαμε πιο πάνω. + + +### [3. ΕΛΛΗΝΙΚΟΙ ΧΑΡΑΚΤΗΡΕΣ]{#s3} + +Οι ελληνικοί χαρακτήρες βρίσκονται στην υψηλή περιοχή του extended ASCII σετ χαρακτήρων, πάνω από τον χαρακτήρα ASCII 127 (DEL). Μάλιστα το σετ χαρακτήρων του +MS-DOS ξεκινάει ακριβώς πάνω από το 127, στον χαρακτήρα 128, που αντιστοιχεί το ελληνικό κεφαλαίο \'Α\'. + +Όταν είστε σε κατάσταση κειμένου στην κονσόλα του Linux σας, το παρακάτω μικρό πρόγραμμα θα σας δείξει την γραμματοσειρά που εκείνη τη στιγμή χρησιμοποιείται αν +το τρέξετε. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + /* ascii.c - εκτύπωση του ascii character set στην κονσόλα + * ενός linux μηχανήματος + * + * Ειδική μεταχείριση γίνεται στους μη εκτυπώσιμους + * χαρακτήρες και στον escape χαρακτήρα (128+27) που + * χρησιμοποιεί ο console driver του Linux. + */ + + #include + + int main (void) + { + int i; + + for (i = 0; i < 256; i++) { + if ((i & 15) == 0) + printf("0x%02x: ", i); + printf((isprint(i) || i > 127 && i != (128+27)) ? + " %c %c" : "%03o%c", + i, ((i % 16) == 15) ? '0 : ' '); + } + return 0; + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μεταγλωττίστε το πρόγραμμα αυτό με μια εντολή όπως + + gcc ascii.c + +και τρέξτε το με την εντολή a.out + +Θα δείτε τους ελληνικούς χαρακτήρες στις θέσεις πάνω από 0x80, που είναι το extended σετ χαρακτήρων ASCII. + + +### [4. ΟΙ ΓΡΑΜΜΑΤΟΣΕΙΡΕΣ ΤΟΥ GROFF]{#s4} + +Το groff κρατάει τις γραμματοσειρές του στον κατάλογο /usr/share/groff/font (και τα macros του στον κατάλογο /usr/share/groff/tmac). + +Στον κατάλογο /usr/share/groff/font υπάρχουν υποκατάλογοι για κάθε μορφή εξόδου που υποστηρίζει το groff. Οι διάφορες μορφές εξόδου, όπως PostScript, ascii, +laser­ jet-4, κτλ. στον groff λέγονται και συσκευές εξόδου, όπως και στον troff. Γι\' αυτό και στον κατάλογο /usr/share/groff/font οι υποκατάλογοι των συσκευών +αρχίζουν με το string dev. Για παράδειγμα, ο υποκατάλογος με τις γραμματοσειρές για ascii output λέγεται devascii, ο υποκατάλογος με τις γραμματοσειρές για +PostScript output λέγεται devps, κτλ. + +Στον υποκατάλογο devascii που μας ενδιαφέρει για το ascii output, υπάρχουν τα εξής αρχεία: + +- DESC αρχείο με περιγραφή του συγκεκριμένου output device +- R το σετ χαρακτήρων της Roman γραμματοσειράς +- I το σετ χαρακτήρων της Italic γραμματοσειράς +- B το σετ χαρακτήρων της Bold γραμματοσειράς +- BI το σετ χαρακτήρων της Bold-Italic γραμματοσειράς + +Καθένα από τα αρχεία που καθορίζουν το σετ χαρακτήρων μιας γραμματοσειράς έχουν μια συγκεκριμένη μορφή, που περιγράφεται λεπτομερώς στο manual page του +groff\_font. + +Στο τέλος κάθε αρχείου υπάρχει ένας πίνακας που κάθε γραμμή του αρχείου αποτελεί μια καταχώριση στον πίνακα. Οι γραμμές έχουν την μορφή + + όνομα μετρικές τύπος κωδικός σχόλιο + +και περιγράφουν ένα χαρακτήρα του σετ η κάθε μια. + +Διαβάζοντας το manual του groff\_font βλέπουμε πως το όνομα ενός χαρακτήρα μπορεί να είναι είτε ο ίδιος ο χαρακτήρας, είτε το string \"charXXX\" όπου XXX ο +αριθμός του χαρακτήρα στο extended ASCII σετ χαρακτήρων. + +Οι μετρικές είναι για όλους τους χαρακτήρες ίδιες σε έξοδο απλού κειμένου (ο αριθμός 24 είναι το πλάτος του χαρακτήρα σε device units, την μικρότερη μονάδα +μέτρησης που υποστηρίζει το groff). + +Ο τύπος είναι επίσης ο ίδιος για όλους τους χαρακτήρες σε έξοδο απλού κειμένου. Από τους πρώτους χαρακτήρες του σετ χαρακτήρων βλέπουμε ότι η τιμή του είναι 0 +για όλες τις γραμματοσειρές του devascii. + +Ο κωδικός του χαρακτήρα είναι ο αριθμός του χαρακτήρα που θα βγάζει στην έξοδό του το groff όταν δει στην είσοδο τον χαρακτήρα με το συγκεκριμένο όνομα. Αυτό +συνήθως είναι το ίδιο με το όνομα, και μπορεί να γραφτεί είτε σαν δεκαδικός αριθμός, είτε σαν οκταδικός η δεκαεξαδικός. + + +### [5. ΟΙ ΑΛΛΑΓΕΣ ΠΟΥ ΧΡΕΙΑΖΟΝΤΑΙ]{#s5} + +Μετά από τις προηγούμενες παραγράφους, είναι φανερό πως αν στις γραμματοσειρές του groff προσθέσουμε τις γραμμές που χρειάζονται για τους 8-bit χαρακτήρες, θα +μπορούμε να δουλέψουμε στο groff, χρησιμοποιώντας τουλάχιστον το ascii output device. + +Αλλά πως είναι αυτές οι γραμμές; Στην προηγούμενη παράγραφο (Οι Γραμματοσειρές του GROFF) είδαμε ότι μπορούν να είναι της μορφής: + + charXXX 24 0 YYY + +όπου το XXX είναι ο δεκαδικός αριθμός του χαρακτήρα στο ASCII, και YYY είτε ο ίδιος ο χαρακτήρας, είτε ο αριθμός του σε οκταδικό, δεκαεξαδικό, κτλ. + +Αυτή η γραμμή πρέπει να γραφτεί για όλους τους αριθμούς χαρακτήρα, από 128 έως και 255 (που είναι το υψηλό μέρος του ASCII σετ χαρακτήρων). + +Με το μικρό Perl script που βλέπουμε παρακάτω, μπορείτε να κάνετε αυτή ακριβώς τη δουλειά, χωρίς να τρελλαθείτε στο γράψιμο και μετά να μην είστε και σίγουροι +ότι όλα δουλεύουν. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #! /usr/bin/perl -w + + ## greek.pl -- ελληνικοί χαρακτήρες για το + ## devascii device του groff + + foreach $i (128 .. 255) { + printf "char%d2400%03o0, $i, $i; + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +το οποίο αν το τρέξετε γράφει στην έξοδό του: + + char128 24 0 0200 + char129 24 0 0201 + char130 24 0 0202 + ... πολλές γραμμές ακόμα ... + char254 24 0 0376 + char255 24 0 0377 + +Οι γραμμές που δημιουργεί αυτό το script πρέπει να προστεθούν σε όλα τα αρχεία που ορίζουν το σετ χαρακτήρων του ascii device. Ας δούμε όμως πως μπορεί να γίνει +αυτό. + + +### [6. ΚΑΝΟΥΜΕ ΤΙΣ ΑΛΛΑΓΕΣ]{#s6} + +Οι αλλαγές που χρειάζεται να γίνουν στα αρχεία του καταλόγου /usr/share/groff/font/devascii είναι απλές, αλλά καλό είναι να κρατήσετε πρώτα ένα backup των +αρχείων. + +Κάντε login σαν root και τρέξτε τις εντολές: + + cd /usr/share/groff/font + tar cvf - devascii | gzip -9c -> devascii.tar.gz + +Τώρα υπάρχει ένα αρχείο με το πολύ περιγραφικό όνομα στον κατάλογο \`/usr/share/groff/font\'. Αυτό περιέχει τις αρχικές γραμματοσειρές του groff, έτσι ώστε σε +περίπτωση που κάτι πάει στραβά να μπορείτε να επαναφέρετε την εγκατάσταση του groff σας σε μια κατάσταση που δουλεύει! + +Αντιγράψτε τον κώδικα του greek.pl που φαίνεται παραπάνω σε ένα αρχείο μέσα στον κατάλογο \`/usr/share/groff/font/devascii\'. + +Τρέξτε δοκιμαστικά το script με την εντολή + + perl greek.pl + +Αν το πρόγραμμα βγάλει την αναμενόμενη έξοδο (δείτε παραπάνω) τότε μπορείτε να εκτελέσετε τις εντολές: + + perl greek.pl >> R + perl greek.pl >> I + perl greek.pl >> B + perl greek.pl >> BI + +ΠΡΟΣΕΞΤΕ ΤΟ ΔΙΠΛΟ `">>"` ΣΤΙΣ ΕΝΤΟΛΕΣ ΠΑΡΑΠΑΝΩ! + +Η έξοδος του greek.pl πρέπει να γραφτεί στο τέλος των γραμματοσειρών, κι όχι να τις κάνει overwrite! + + +### [7. ΔΟΚΙΜΑΖΟΥΜΕ ΤΑ ΕΛΛΗΝΙΚΑ]{#s7} + +Για να δοκιμάσετε τα ελληνικά στο groff σας μετά από όλα αυτά, μπορείτε να γράψετε το παράδειγμα που είδαμε στην παράγραφο 2 (ΓΡΑΦΟΝΤΑΣ ΑΠΛΑ ΚΕΙΜΕΝΑ ΣΤΟ GROFF), +ή να γράψετε οποιοδήποτε άλλο απλό κείμενο σε ελληνικά, περνώντας το ύστερα από το groff με μια εντολή όπως: + + groff -Tascii αρχείο_εισόδου | less -r + +για να δείτε αν τα ελληνικά εμφανίζονται σωστά. + +Εννοείται πως αν η κονσόλα σας δεν δείχνει σωστά τα ελληνικά γιατί δεν έχετε κατάλληλη γραμματοσειρά, δεν φταίει το groff, σωστά; Αλλά μην ανησυχείτε, μπορείτε +να στήσετε το greek-console και όχι μόνο να δείτε αλλά τα ελληνικά σας κείμενα, αλλά να γράψετε και καινούρια. + + +### [8. ΒΙΒΛΙΟΓΡΑΦΙΑ]{#s8} + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + [1] Writing Papers with GROFF using -me, Eric P. Allman, Modified for GROFF by James Clark. + + [2] Typing Documents on the UNIX System: Using the -ms Macros with Troff and Nroff. M. E. Lesk, November 3, 1978. + + [3] Troff User's Manual. Joseph F. Ossanna, Brian W. Kernighan. . + +**1. Πώς να βάλετε τα μεταφρασμένα προγράμματα στο σύστημα σας;** +--------------------------------------------------------------------------------------- + +**2. Πώς να μεταφράσετε ένα πρόγραμμα;** +-------------------------------------------------------------- + +**3. Τί μας ωφελεί το NLS αφού οι περισσότεροι ξέρουν αγγλικά;** +-------------------------------------------------------------------------------------- + +**4. Ποιος είναι υπεύθυνος για τις ελληνικές μεταφράσεις;** +--------------------------------------------------------------------------------- + + +### [1. Πώς να βάλετε τα μεταφρασμένα προγράμματα στο σύστημα σας;]{#s1} + +Προγράμματα που θα χρειαστούν: [Autoconf](ftp://prep.ai.mit.edu/pub/gnu/autoconf-2.12.tar.gz)\ +[Gettext](ftp://prep.ai.mit.edu/pub/gnu/gettext-0.10.tar.gz) + +Στο chloe υπάρχουν τα xxx-el.po αρχεία. Αυτά περιέχουν την ελληνική μετάφραση του προγράμματος, και όπως καταλαβαίνετε δεν αρκούν. Πρέπει να κατεβάσετε από +κάποιο mirror της gnu (ή από το δεύτερο cd του slackware, infomagic κλπ) το αντίστοιχο πρόγραμμα. Πχ για τα shar-utils (uuencode κλπ) το shar-utils-4.2.tar.gz. +Αφού το αποσυμπιέσετε και το βάλετε σε κάποιον κατάλογο, αντιγράψετε το shar-utils-4.2.el.po (μην ανησυχήσετε αν κάπου οι εκδόσεις δεν συμφωνούν) στον po/ +κατάλογο σαν el.po. Ανοίξτε το configure.in στον κατάλογο του sharutils και προσθέστε στο ALL\_LINGUAS το \'el\'. Αυτό ήτανε. Τρέξτε το autoconf (Ναι, δυστυχώς +πρέπει να το έχετε μαζί με το gettext, αλλά υπάρχουν σε όλα τα mirror του GNU) και συνεχίστε την διαδικασία της εγκατάστασης έχοντας στην μεταβλητή +περιβάλλοντος LINGUAS την επιλογή \'el\' ,ώστε να προστεθούν μόνο τα ελληνικά (προσοχή τα νέα binaries συνήθως πάνε στο /usr/local/bin οπότε φροντίστε να +ανανεώσετε το PATH σας). Αν τρέξετε κάποιο νέο πρόγραμμα με nls και δείτε ότι δεν \'μιλάει\' ελληνικά, μην τρομάξετε. Το nls θα ενεργοποιηθεί μόνο αν έχετε +δηλώσει την LANG ίση με el (export LANG=el για bash). + +\*Προσοχή: Η Glibc2 έχει(είχε) δύο ατέλειες. 1) Η ελληνική γλώσσα συμβολίζεται με gr αντί του el (iso639 country codes), και 2) το LC\_MESSAGES που δηλώνει τις +εκφράσεις yes-no έχει μόνο τα Ν/ν - Ο/ο (ενώ θα έπρεπε να έχει και τα y/Y - N/n). Ετσι για το πρώτο πρεπει να συνδέσετε τον κατάλογο el με τον gr στο +/usr/share/locale ή /usr/local/share/locale (ln -s /usr/share/locale/gr /usr/share/locale/el) . Για το LC\_MESSAGES μπορείτε να το αλλάξετε και μόνοι σας με +κάποιον κειμενογράφο, ή να κατεβάσετε την τελευταία έκδοση της glibc2 (+localedata) όπου έχει διορθωθεί. + + +### [2. Πώς να μεταφράσετε ένα πρόγραμμα;]{#s2} + +Γιατί εγώ; θα αναρωτιέστε μερικοί. Δικαιολογίες για να μην μεταφράσετε υπάρχουν πολλές:) Εγώ απλώς σας παροτρύνω να μην προτιμάτε το μασημένο φαϊ, προτιμήστε να +συμμετάσχετε στην εξέλιξη του λειτουργικού που επιλέξατε (και μπορείτε γιατί είναι το GNU/Linux!). Ούτε ούτε το GNU ούτε ο Stallman ούτε ο Linus μπορούν να σας +προσφέρουν το linux στα ελληνικά, μόνο εσείς μπορείτε! Δοκιμάστε. Η διαδικασία είναι απλή. Kάθε νέο GNU πρόγραμμα που περιέχει το ABOUT-NLS υποστηρίζει NLS, και +είναι απλό για κάποιον να το μεταφράσει. Αρκεί να κοιτάξει τον po/ κατάλογο. Εκεί υπάρχουν (πάλι για παράδειγμα παίρνω τα shar-utils) τα sharutils.pot fr.po +de.po κλπ\... Το sharutils.pot περιέχει όλα τα μηνύματα του προγράμματος μέσα σε ένα δήλωση msgid και έχει κενή την msgstr. Όπως θα δείτε από τα άλλα .po το +msgstr είναι το πεδίο που θα τοποθετηθεί η μετάφραση. Πχ. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #: src/chgrp.c:117 + #, c-format + msgid "group of %s changed to %s\n" + msgstr "Η ομάδα του %s άλλαξε σε %s.\n" + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Συμβουλευτήτε και τις γαλλικές μεταφράσεις (fr.po) αφού το συντακτικό τους είναι ίδιο με το ελληνικό (ή μάλλον το αντίθετο:). Οι δηλώσεις με \# αγνοούνται μόνο +όταν υπάρχει κενό μετά τον χαρακτήρα \#. Δηλαδή οι δηλώσεις που βλέπετε παραπάνω δεν μπορούν ούτε και πρέπει να αλλάξουν. Aφού το μεταφράσετε το sharutils.pot +σώστε το σαν el.po (η διαδικασία από εδώ και πέρα είναι ίδια με παραπάνω). + + +### [3. Τί μας ωφελεί το NLS αφού οι περισσότεροι ξέρουν αγγλικά;]{#s3} + +Ξέρουν; Πολλές φορές χρησιμοποιούμε αγγλικές έννοιες χωρίς να ξέρουμε τι ακριβώς σημαίνουν στα ελληνικά, δηλαδή τις χρησιμοποιούμε εμπειρικά, για παράδειγμα +proxy server, verbose mode κλπ. Ο νέος χρήστης δεν είναι ούτε τόσο έμπειρος, ούτε θέλει να ανατρέχει από λεξικό σε λεξικό για να δει τι σημαίνει το buffer. +Επίσης μην ξεχνάμε και τους μη γνώστες της αγγλικής (και δεν είναι λίγοι), γιατί πρέπει να τους αποτρέπουμε από τους υπολογιστές (εδώ από το linux); Ο +υπολογιστής πρέπει να μάθει την γλώσσα μας, όχι εμείς την δική του. + + +### [4. Ποιος είναι υπεύθυνος για τις ελληνικές μεταφράσεις;]{#s4} + +Ο [Σίμος Ξενιτέλης](mailto:simos@teiath.gr). Σε αυτόν πρέπει να στέλνετε τις μετάφρασεις GNU προγράμματων. Για οτιδήποτε άλλο μπορείτε να επικοινωνήσετε [μαζί +μου](mailto:nmav@i-net.paiko.gr). + +ΥΓ. Για τους μέλλοντες μεταφραστές: Για κάθε πρόβλημα συμβουλευτήτε το (προσχέδιο) λεξικό που υπάρχει στο + +Παραπομπές: \ + + diff --git a/content/articles/09/05_calctut.md b/content/articles/09/05_calctut.md new file mode 100644 index 0000000..daa8321 --- /dev/null +++ b/content/articles/09/05_calctut.md @@ -0,0 +1,270 @@ ++++ +title = 'Εισαγωγή στο μαθηματικό πρόγραμμα Calc' +date = '1998-11-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Ρόζος' +issue = ['Magaz 09'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το πρόγραμμα Calc πρόκειται για ένα προγραμματιζόμενο κομπιουτεράκι σε C.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Είναι γραμμένο σε C και ακολουθεί την βασική νοοτροπία του Unix δηλαδή πολλά μικρά αλληλεπιδρώντα εργαλεία για την επίλυση ενός προβλήματος. Το Calc μπορεί από +το να εκτελέσει απλούς αριθμητικούς υπολογισμούς μέχρι να επιλύσει πολλαπλά ολοκληρώματα. Για όσους έχουν προμηθευτεί το Linux από την Infomagic το πρόγραμμα +υπάρχει στο τέταρτο CD (/apps/math/calc). Επίσης το πρόγραμμα μπορεί να βρεθεί στην διεύθυνση . + +**Βασικές πράξεις** + +Με μερικά παραδείγματα θα δώσουμε μια γενική εικόνα των δυνατοτήτων του προγράμματος. Πληκτρολογώντας : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >3*(4+1) το Calc επιστρέφει + 15 + Δίνοντας τώρα: + >.*2 το Calc επιστρέφει + 30 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δηλαδή η τελεία σαν όρισμα ισοδυναμεί με το τελευταίο αποτέλεσμα (φυσικά 2\*1.2 θα μου δώσει 2.4). Χρήση μεταβλητών: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >old=.+19 + >sqrt(old) το Calc επιστρέφει + 7 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +To Calc μπορεί άνετα να χειριστεί μιγαδικούς αριθμούς: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >(2+3i)*(4-3i) το Calc επιστρέφει + 17+6i + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν δώσω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >1i*1i το Calc επιστρέφει + -1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Πίνακες** + +Τώρα μερικά παραδείγματα με πίνακες. Πρώτα δημιουργούμε τον 3\*3 πίνακα a με στοιχεία aij όπου i και j από 1 έως 3. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >mat a[1:3, 1:3] + >a το Calc επιστρέφει + [1,1] = 0 + [1,2] = 0 + [1,3] = 0 + [2,1] = 0 + [2,2] = 0 + [2,3] = 0 + [3,1] = 0 + [3,2] = 0 + [3,3] = 0 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Γέμισμα πίνακα με σταθερή τιμή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >matfill(a,1) + >a το Calc επιστρέφει + [1,1] = 1 + [1,2] = 1 + [1,3] = 1 + [2,1] = 1 + [2,2] = 1 + [2,3] = 1 + [3,1] = 1 + [3,2] = 1 + [3,3] = 1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Διαγώνιος πίνακας: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >matfill(a,0,1) + >a το Calc επιστρέφει + [1,1] = 1 + [1,2] = 0 + [1,3] = 0 + [2,1] = 0 + [2,2] = 1 + [2,3] = 0 + [3,1] = 0 + [3,2] = 0 + [3,3] = 1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δηλαδή ο μοναδιαίος πίνακας.\ +Μερικές πράξεις με πίνακες τώρα. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Ορισμός του πίνακα: + >mat b[1:3, 1:3] + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Και εισαγωγή τιμών στον πίνακα: + >b[1][1]=3.3 + >b[1][2]=2 + >b[1][3]=-1i + >b[2][1]=5.2 + >b[2][2]=2.1 + >b[2][3]=-1 + >b[3][1]=0.3 + >b[3][2]=-9 + >b[3][3]=4 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Πολλαπλασιασμός πινάκων: + >a*b το Calc επιστρέφει + mat [1:3,1:3] (9 elements, 9 nonzero): + [1,1] = 3.3 + [1,2] = 2 + [1,3] = -1i + [2,1] = 5.2 + [2,2] = 2.1 + [2,3] = -1 + [3,1] = .3 + [3,2] = -9 + [3,3] = 4 + Τον ίδιο πίνακα δηλαδή, αφού πολλαπλασιάστηκε με τον μοναδιαίο. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Αναστροφή πίνακα: + >mattrans(b) το Calc επιστρέφει + mat [1:3,1:3] (9 elements, 9 nonzero): + [1,1] = 3.3 + [1,2] = 5.2 + [1,3] = .3 + [2,1] = 2 + [2,2] = 2.1 + [2,3] = -9 + [3,1] = -1i + [3,2] = -1 + [3,3] = 4 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Αντιστροφή πίνακα: + >(b^-1)*b το Calc επιστρέφει + mat [1:3,1:3] (9 elements, 3 nonzero): + [1,1] = 1 + [1,2] = 0 + [1,3] = 0 + [2,1] = 0 + [2,2] = 1 + [2,3] = 0 + [3,1] = 0 + [3,2] = 0 + [3,3] = 1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Συναρτήσεις χρήστη** + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Μπορούμε να ορίσουμε νέες συναρτήσεις: + >define f(x)=exp(1i*x) + >f(3) το Calc επιστρέφει + ~-.98999249660044545727+~.14112000805986722210i + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Ορισμός πιο σύνθετων συναρτήσεων: + > define delta(x) + >> { + >> if (x==0) return 1; + >> return 0;} + + > delta(0) το Calc επιστρέφει + 1 + > delta(1) το Calc επιστρέφει + 0 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Προγραμματίζοντας το Calc** + +Το μεγαλύτερο όπλο του Calc είναι ότι προγραμματίζεται σε γλώσσα σχεδόν ίδια με την C. Γράφουμε το πρόγραμμα σε έναν editor και το σώζουμε με μορφή \*.cal Μετά +μπορούμε να το φορτώσουμε μέσα από το Calc με την εντολή read \"Path/όνομα προγράμματος\" Τα προγράμματα που θα χρησιμοποιηθούν στα επόμενα παραδείγματα +βρίσκονται στην διεύθυνση \ +Για πρώτο παράδειγμα θα χρησιμοποιήσουμε το πρόγραμμα integr.cal που κάνει αριθμητική ολοκλήρωση με τον τύπο του Simpson. Ξεκινώντας το Calc στο ίδιο directory +με το integr.cal δίνουμε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + > read integr το Calc επιστρέφει + 1 + 20 + integr(func string, var string, start, finish, tolerance) defined + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ας υπολογίσουμε το ολοκλήρωμα `0.399*exp(-0.5*x^2)` (που αντιστοιχεί στην συνάρτηση πυκνότητας πιθανότητας κανονικής κατανομής με μέση τιμή 0 και διασπορά 1) ως +προς x από -10 μέχρι 10 με ακρίβεια 0.001. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >integr('0.399*exp(-0.5*x^2)','x',-10,10,.001) το Calc επιστρέφει + 1.000142 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έστω ότι θέλουμε τώρα να σχεδιάσουμε την αθροιστική συνάρτηση κατανομής, δηλαδή να πλοτάρουμε όλες τις τιμές που δίνει το παραπάνω ολοκλήρωμα για άκρα +ολοκλήρωσης από -οο (στην ουσία -10) έως x ε \[-οο, +οο\]. Εδώ θα χρησιμοποιήσουμε το πρόγραμμα plotf.cal σε συνδυασμό με το gnuplot. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >read plotf + >plotf("integr('0.399*exp(-.5*x^2)','x',-5,x,.01)","x",-5,5,.5) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μέσα από το gnuplot τώρα δίνουμε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >plot [t=-10:10] 0.399*exp(-.5*t**2), 'plot.dat' using 1:4 with lines + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Συμπέρασμα** + +Πολλά αντικείμενα και ιδιότητες που έχει το Calc όπως οι λίστες, οι σχεσιακοί πίνακες, τα αντικείμενα ορισμένα από χρήστη και άλλα, δεν αναφέρονται όπως είναι +φυσικό σε αυτό το κείμενο. Νομίζω ότι ο μέσος χρήστης δεν χρειάζεται παραπάνω από τρεις μέρες για να εξοικειωθεί με το πρόγραμμα και ίσως του πάρει δύο βδομάδες +για να μάθει όλες του τις πτυχές. Σε αυτό βοηθάει το συνοπτικό help του. Σίγουρα το Calc δεν μπορεί να συγκριθεί με επαγγελματικά πακέτα όπως Mathematica ή +Matlab αλλά είναι ιδανικό σε όσους αρέσει να προγραμματίζουν σε C και θέλουν να ασχοληθούν με αριθμητική ανάλυση. diff --git a/content/articles/09/06_bash2.md b/content/articles/09/06_bash2.md new file mode 100644 index 0000000..1126fca --- /dev/null +++ b/content/articles/09/06_bash2.md @@ -0,0 +1,99 @@ ++++ +title = 'Μαθήματα bash No2' +date = '1998-11-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Παπαδογιαννάκης' +issue = ['Magaz 09'] +issue_weight = 6 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σ\' αυτό το τεύχος, θα εξετάσουμε τους ειδικούς χαρακτήρες στο Bash\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στο Bash, (γενικότερα, σε όλα τα shells) υπάρχουν διάφοροι χαρακτήρες ή ακολουθίες χαρακτήρων, που δεν είναι (άμεσα τουλάχιστον) προσπελάσιμοι από το shell. +Αυτοί είναι: + +- **\>** Επαναδρομoλόγηση εξόδου, πχ: echo \"hello root\" \> message φτιάχνει το αρχείο με όνομα message που περιέχει το hello root\ +- **\<** Επαναδρομoλόγηση εισόδου, πχ: mail root \< message, στέλνει στον root το message.\ +- **\|** Σωλήνωση πχ: ls \| more χρησιμοποιεί την more στα αποτελέσματα της ls\ +- **&** Εκτέλεση εντολής στο παρασκήνιο. Ακολουθεί εξήγηση παρακάτω\...\ +- **;** Χωρίζει εντολές στην ίδια γραμμή, πχ: clear ; ls καθαρίζει την οθόνη και δείχνει τα αρχεία του τρέχοντος καταλόγου.\ + +\ +\'Εστω οτι θέλουμε να βρούμε ένα αρχείο στο δίσκο μας. Ένας τρόπος είναι να χρησιμοποιήσουμε την εντολή find γράφοντας:\ + +find / -name filename -print + +Αυτό, είναι κάπως αργό γιατί ψάχνει όλο το σύστημα. Καλό θα ήταν να είχαμε το shell ελεύθερο για άλλη δουλειά. Γράφοντας λοιπόν: + +find / -name filename -print & + +η εντολή αυτή θα εκτελεστεί στο παρασκήνιο, και θα έχουμε ελεύθερο το shell για όποια άλλη δουλειά θέλουμε.\ +Αν βρεθεί το αρχείο, θα το εμφανίσει στην οθόνη μας. + +Έστω τώρα ότι έχουμε ανοίξει τον αγαπημένο μας editor, αλλά εκεί που γράφουμε κάτι, θέλουμε να δούμε μία διαδρομή στο δίσκο. Μπορούμε να κάνουμε suspend την +εργασία αυτή (δηλαδή το edit του αρχείου), να βρούμε αυτό που θέλουμε, και να ξαναγυρίσουμε στον editor. Πως; Στο περιβάλλον του editor πατάμε ctrl-z. Ο editor +θα σταματήσει, και θα μας βγάλει στο prompt. Εκεί μπορούμε να κάνουμε ότι θέλουμε. Για να επιστρέψουμε στον Editor, απλά γράφουμε fg.\ +Μα τι έγινε; Να σας εξηγήσω εγώ τι έγινε: Πατώντας ctrl-z, ο editor κατάληξε μια \"σταματημένη δουλειά\" (stopped job). Εξακολουθεί να υπάρχει, αλλά έχει +σταματήσει στο παρασκήνιο (background), δεν εκτελείται, και περιμένει από εσάς να τον βάλετε να συνεχίσει να δουλεύει είτε στο προσκήνιο (foreground) γράφοντας +fg είτε στο παρασκήνιο γράφοντας (πόσο ευπρόβλεπτο\...) bg. + +\ + +- Αν εκτελείτε πολές εργασίες στο παρασκήνιο, μπορείτε να τις δείτε όλες, γράφοντας jobs. +- Για να σταματήσετε για λίγο μια εργασία παρασκηνίου, γράψτε: stop n, όπου n ο αριθμός αυτής της εργασίας. +- Για να τερματίσετε μια εργασία παρασκηνίου, γράψτε kill n, όπου n ο αριθμός αυτής της εργασίας. +- Για να περιμένετε να τελειώσουν οι δουλειές παρασκηνίου, γράψτε wait.\ +- Πολλές φορές, οι εργασίες παρασκηνίου γράφουν στην οθόνη, κάτι πολύ ενοχλητικό. Για να σταματήσουν όταν πάνε να γράψουν στην οθόνη, γράψτε stty tostop + +\ +Άλλοι χαρακτήρες που το bash \"εκτιμά\" διαφορετικά είναι:\ + +- \[\]:\ + Αυτοί περικλείουν ένα εύρος τιμών, ή διάφορες τιμές. πχ η εντολές:\ + ls \[a-f\]\* εμφανίζει όλα τα αρχεία που έχουν πρώτο γράμμα από το a μέχρι το f. Οι ακολουθίες είναι σύμφωνα με τον κώδικα ASCII.\ + ls \[f\]\* εμφανίζει όλα τα αρχεία που έχουν πρώτο γράμμα a ή f.\ + \ +- \`\`:\ + Οποιαδήποτε ακολουθία μέσα στις \"βαρείες\", ερμηνεύεται από το shell σα να είναι εντολή. Δηλαδή:\ + echo \"You are in \\\"\`pwd\`\\\"\...\" θα έχει ως αποτέλεσμα να σας γράψει στην οθόνη:\ + You are in \"/usr/local/bin\...\" (αν τη στιγμή που τη γράψατε βρισκόσασταν στο /usr/local/bin, εντάξει;)\ + \ +- Είδαμε και τον χαρακτήρα \\. Αυτός, είναι ο χαρακτήρας διαφυγής, δηλαδή ΟΤΙ (μα ότι) είναι μετά από αυτόν, εμφανίζεται ώς έχει (ακόμα και ο ίδιος, γράφοντας + \\\\)\ + \ +- \"\":\ + Οτιδήποτε ανάμεσα σε δύο \", ερμηνεύεται ώς έχει, εκτός από:\ + 1. \$: στον οποίο θα γίνει αντικατάσταση με τη μεταβλητή που ακολουθεί τον χαρακτήρα \$ + 2. \`\`: ανάμεσα στους οποίους θα γίνει αντιστίχηση αποτελέσματος εντολής + 3. \\ Ο χαρακτήρας διαφυγής του οποίου τη χρησιμότητα αναφέραμε παραπάνω. + + \ +- \'\':\ + Οτιδήποτε ανάμεσα σε δύο αποστρόφους, ερμηνεύεται ώς έχει, εκτός φυσικά, από άλλη αποστροφο.\ + Και επειδή ξέρω ότι στα παραδείγματα είσαστε καλύτεροι, ορίστε μερικά:\ + \ + - echo \"Καλά, δεν είναι \\\"cool\\\";;;\"\ + Καλά, δεν είναι \"cool\";;;\ + - echo \'Καλά, δεν είναι \"cool\";;;\'\ + Καλά, δεν είναι \"cool\";;;\ + - echo \"You are in \\\" \`pwd\` \\\"\...\"\ + You are in \" /usr/local/bin \"\ + - echo \"Your \\\$PATH variable is set to: \$PATH\"\ + Your \$PATH variable is set to: /usr/bin:/bin:\...\.... (όποιο τελος πάντον είναι το PATH σας\...)\ +- ():\ + Ανάμεσα σε αυτούς τους χαρακτήρες, οι εντολές ομαδοποιούνται και είναι σα να τρέχουν σε ένα ξεχωριστό shell.\ + Δηλαδή, κατα κάποιο τρόπο γίνεται ομαδοποίηση και εξάγεται το συνολικό αποτέλεσμα. πχ:\ + (echo \"user \" ; whoami ; echo \"logged in on \";date) \>\> logfile Αυτό γράφει στο αρχείο logfile το εξής:\ + user **user** logged in on **date**, όπου **user** ο χρήστης που μπήκε στο σύστημα, και **date** η ώρα-ημερομηνία εισαγωγής. Μια τέτοια εντολή καλό θα ήταν + να υπήρχε στο /etc/profile, ώστε να κρατάμε σε ένα logfile τους επισκέπτες στο σύστημά μας ανα πάσα στιγμή. Μην φανταστείτε όμως ότι με αυτό τον τρόπο θα + προστατευτείτε από τους παρείσακτους!!!\ + Στην παραπάνω εντολή, το \>\> είναι το append to file, δηλαδή δε σβήνει το προηγούμενο logfile, αλλά γράφει ότι είναι να γράψει στο τέλος του αρχείου. Δεν + χάνουμε δηλαδή το προηγούμενο logfile.\ + \ + \ + +\ +Στο επόμενο τεύχος του Magaz, συνέχεια του Bash, και εξέταση των μεταβλητών περιβάλλοντος.\ diff --git a/content/articles/09/07_mailbox.md b/content/articles/09/07_mailbox.md new file mode 100644 index 0000000..7795b6d --- /dev/null +++ b/content/articles/09/07_mailbox.md @@ -0,0 +1,453 @@ ++++ +title = 'Αλληλογραφία' +date = '1998-11-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 09'] +issue_weight = 7 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*\"Κανόνες\" αλληλογραφίας: Από το επόμενος τεύχος (10) που το Magaz θα τοποθετηθεί στο μηχάνημα του Hellug, θα υπάρχει φόρμα καταχώρησης ερώτησης\... Μέχρι +τότε, παρακαλούμε ακολουθήστε τους κάτωθι κανόνες:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής Ερώτηση περί Linux δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμιά ματιά στα περασμένα τεύχη, και εννοώ και την στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-) + +**1. Defrag για Linux** +------------------------------------------------- + +**2. X-windows και χρώματα** +------------------------------------------------------ + +**3. Viper 330** +------------------------------------------ + +**4. KDE μόνο για το RedHat 5.0.** +------------------------------------------------------------ + +**5. Ελληνικό Πληκτρολόγιο** +------------------------------------------------------ + +**6. Ξανά πρόβλημα Debian** +----------------------------------------------------- + +**7. Εύρεση του XISP** +------------------------------------------------ + +**8. Ελληνικά στο DOSemu** +---------------------------------------------------- + +**9. Ζητείται Linux** +----------------------------------------------- + +**10. Οtenet PPP** +---------------------------------------------- + +**11. Kppp προβλήματα** +--------------------------------------------------- + +**12. Matrox Mystique** +--------------------------------------------------- + +**13. Applixware και Ελληνικά** +----------------------------------------------------------- + +**14. IP-Masquerading** +--------------------------------------------------- + +**15. PINE και ελληνικά** +----------------------------------------------------- + + +### [1. Defrag για Linux]{#s1} + +Από : [Σωτήρη Παρμάκη](mailto:paleolithic@iol.it) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Γειά (και πάλι από μένα) ;-) Υπάρχει εφαρμογή γιά defragmentation του δίσκου για το Linux? + +***MK:** Όχι, και δεν χρειάζεται. Υπάρχουν ορισμένες τέτοιου είδους εφαρμογές στο sunsite για να είμαι πιο σωστός, αλλά στην πραγματικότητα αναλαμβάνει το +λειτουργικό να κάνει κάτι τέτοιο. (όπως και στα windows NT δεν υπάρχει, αλλά εκεί δημιουργείται fragmentation και από ότι ξέρω έχουν βγει τρίτα προγράμματα, τα +οποία όμως απλά το αναφέρουν, δεν το λύνουν\...)\ +**NK:** Πράγματι στο sunsite υπάρχει ένα defrag το οποίο εδώ και 2 χρόνια είναι μεταξύ alpha και beta. Όπως καταλαβαίνεις τέτοια προγράμματα δεν σηκώνει να +είναι beta και συνεπώς δεν έχει τύχει ευρείας χρήσης. Νομίζω ότι κάπου τώρα τελευταία είδα μία νέα έκδοση του defrag (ψάξε στο +[ftpwatcher](http://lfw.linuxhq.com). Το ότι το linux δεν έχει πρόβλημα defrag δεν είναι απόλυτα ακριβές, χωρίς να είναι λάθος. Πράγματι το ext2 έχει natively +κάποια πρόβλεψη για το fragmentation αλλά κάθε πράγμα έχει τα όριά του. Σε κάθε περίπτωση όσο το fragmentation σου δεν φτάνει σε υπερβολικά νούμερα (δηλ. πάνω +από 10-15%) δεν έχεις πρόβλημα και σίγουρα δεν υπάρχει καμία σχέση με \"άλλα\" λειτουργικά. Μπορείς όμως να κάνεις και εσύ κάτι για το fragmentation: Υπάρχουν +μερικά σημεία του filesystem που είναι επιρρεπή σε fragmentation. Αυτά είναι το /tmp, το /var και το /home (εάν έχεις πολλούς χρήστες ή γράφεις / σβήνεις όλη +την ώρα). Εάν βάλεις το /tmp και το /var σε διαφορετικά partitions έχεις κάνει ότι θα έκανε το καλύτερο defrag πρόγραμμα. Συνοπτικά λοιπόν δεν σου συνιστώ να +τρέξεις το ειδικό πρόγραμμα εάν έχεις σημαντικά πράγματα στο δίσκο σου (δυστυχώς, δεν ξέρω κανένα που να το έχει τρέξει για να μας πει από πρώτο χέρι) και +αντίθετα σου προτείνω μόλις σου δοθεί η ευκαιρία να κάνεις ένα σωστό partitioning ώστε να κοντρολάρεις το fragmentation εν τη γεννέση του.* + + +### [2. X-windows και χρώματα]{#s2} + +Από : [Σωτήρη Παρμάκη](mailto:paleolithic@iol.it) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γειά,\ +Είμαι νέος χρήστης του Linux και έχω μερικά προβλήματα με τα Xwindows.\ +Έχω ένα σύστημα με Diamond Stealth 3D 2240(Virge 2Mb), 16Mb ram και Red Hat 5.1. Το πρόβλημα είναι ότι δεν μπορώ να έχω 16 ή 24bit χρώμα στα X-windows(με KDE +1.0) (ακόμη κι αν χρησιμοποιώ: startx -bpp 16)(και παρότι στο Xwindow configuration εχω ενεργοποιήσει τις:800x600x8bit, 800x600x16bit, 800x600x24bit). Υπάρχει +τρόπος να έχω περισσοτερα από 8bit χρώμα; + +*Φίλε Σωτήρη,\ +η σωστή εντολή είναι η startx \-- -bpp 16 για 16 bit χρώμα. Βέβαια, για να μπορέσεις να δεις παραπάνω χρώματα πρέπει να το υποστηρίζει και ο server που +χρησιμοποιείς, ο οποίος ΥΠΟΘΕΤΟΥΜΕ ότι τα υποστηρίζει, αλλά για να είμαστε πιο σίγουροι, κάνε ένα \"ls -l /usr/X11/bin/X\*\" για να δεις το αρχείο X που +δείχνει. Αν δείχνει στο αρχείο XF86\_VGA16 πρέπει να ξαναρυθμίσεις τα X-windows με όποιον τρόπο έχει το RedHat, ή με το standard xf86setup. Εκεί θα του δηλώσεις +ως server τον S3virge ή τον SVGA. (Πληροφοριακά, αν ΔΕΝ έχεις εγκαταστήσει αυτούς τους servers δεν θα τους εγκαταστήσει το πρόγραμμα μόνο του).* + + +### [3. Viper 330]{#s3} + +Από : [Μαλάκτα Μαλακταία](mailto:antoula@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@rocketmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Είμαι ένας νέος χρήστης του Linux (2 βδομάδες έχω ασχοληθεί με αυτό σοβαρά). Πρόσφατα αντιμετώπισα το πρόβλημα της κάρτας ήχου μου κάτω από Linux. Έχω μία Opti +c929 (Mad 16 pro -υπάρχει στο menu sound του kernel configuration). Διαβάζοντας πολλά howtos τελικά κατάφερα να την εγκαταστήσω σωστά και τη στιγμή που σας +γράγφω αυτό το γράμμα ακούω ένα CD μου :) Δυστυχώς όμως δεν είναι όλα τόσο καλά! Έχω το redhat 5.1 με πυρήνα 2.0.35. Μόλις λοιπόν έφτιαξα τον καινούργιο πυρήνα +με υποστήριξη κάρτας ήχου και έκανα compile ανακάλυψα ότι δεν μπορώ να μπω στα x windows ! Γράφω startx, η οθόνη γίνεται μαύρη και το σύστημα κολλάει. Τρέχοντας +το Xconfigurator τη στιγμή που επιλέγω probe η οθόνη γίνεται μαύρη και κολλάει πάλι το σύστημα - αντί να αναβοσβήνει μερικές φορές η οθόνη\... Ακόμα και όταν +πατάω \"dont probe\" όταν τελικά προσπαθώ να μπω στα X πάλι κολλάει το σύστημα\... Κάρτα γραφικών μου είναι η viper v330 και χρησιμοποιεί τον XFree86-SVGA +server. Κάτι όμως μέσα μου με έτρωγε και έβαλα στη θέση της την Diamond Stealth 3d 2000 pro και, αφού εγκατέστησα το σωστό server (S3) το σύστημα μπήκε κανονικά +στα X ! Δυστυχώς όμως εγώ δεν μπορώ να κρατήσω την Stealth\....Άλλωστε τσάμπα έδωσα το 20 χιλιάρικα για την viper; Μήπως μπορείτε να μου πείτε τι φταίει; Δεν +ξέρω τι πρέπει να δοκιμάσω\... ότι κάνω αποτυγχάνει. + +***ΒΠ:** Να υποθέσω οτι έψαξες στο: ;;;;; το riva128 δεν έχει η κάρτα σου ;;; (από την άλλη, δεν ξέρω αν είναι για PCI +ή AGP, και τι είδους έχεις εσύ\...)\ +Επίσης, είχε πάρει το μάτι μου κάτι για αυτή την κάρτα, που είχε σχέση με τη suse, αλλά δυστυχώς δε θυμάμαι τίποτα\... Ούτε που, ούτε τι\... sorry \...\ +Επίσης, από το dejanews:* + + ------------------------------------------------ + + > Hi ! + > + > I am having some problems to configure Linux to work with a Diamond Viper + > V330 PCI OEM video board. + > + + This card cannot share an interupt (IRQ setting) with anything else. + Maybe you need to give it a unique IRQ. + + + ------------------------------------------------ + >> Jens Johannesson writes: + + > After startx, the screen becomes dark and the machine hangs + > completely. I have a ASUS P5A motherboard, AMD K6, Diamond Viper + > V330 and use XFree86 3.3.2 as distributed with Debian 2.0. I + > upgraded the BIOS to Version 1003 as the corresponding readme + > indicated improvements regarding the NVIDIA RIVA128. + + > Any hints? + + The RIVA cards use an IRQ. Earlier servers would hang if they shared + an IRQ, but the latest one doesn't have that problem. Try downloading + the latest (pachlevel 3) SVGA server and installing that. + + ------------------------------------------------ + +*και εν πάσει περιπτώσει, κάνε ένα ψάξιμο στο : προφανώς δεν θα είσαι ο +μόνος που έχει αυτό το πρόβλημα!\ +**MK:** Με όλα αυτά που είπε ο Βαγγέλης, θυμήθηκα το εξής: στήσιμο Xfre86-3.3.2 σε μηχάνημα με PCI 3Com και AGP Nvidia Riva 128 (STB Velocity). Το πρόβλημα ήταν +τα shared IRQs. Επειδή δεν ήξερα (και δεν ξέρω) να πω στην τάδε κάρτα AGP να πάρει το τάδε συγκεκριμένο IRQ, άλλαξα τη θέση του Ethernet controller και λύθηκε +το πρόβλημα. Χρησιμοποιείς τον SVGA Server. Επίσης, αν δεν κάνω λάθος, υπάρχει και στο site της SuSE ένας ειδικός x-server για την κάρτα αυτή. Θα το βρεις στο + στο section για τους X-servers.* + + +### [4. KDE μόνο για το RedHat 5.0.]{#s4} + +Από : [Ισαάκ Τσαλίκογλου](mailto:isaakt@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@rocketmail.com) + +Γειά σας, διαβάζω ανελλιπώς το περιοδικό σας και το βρίσκω ιδιαίτερα ενδιαφέρον. + +*Ευχαριστούμε\... Μας δίνετε θάρρος για τη συνέχεια\...* + +Έχω εγκαταστήσει το RedHat 5.0 εδώ και 2 μήνες και έχω μάθει πάνω κάτω, τα εντελώς χρήσιμα (ls, more, less, minicom). Έχω καταφέρει επίσης να συνδεθώ μέσω του +Metro-X server (γιούπι) και έχω τρέξει το Netscape. Φαίνεται όμως ότι ο ΜέτροΧ έχει κάποιο bugάκι. Με τον Communicator, μετά από τρεις επισ΄κέψεις σε κάποια +σελίδα, τα γράμματα αλλάζουν χρώμα και δεν μπορώ να διαβάσω τίποτα. Ρώτησα κάποιον γνωστό μου (και γνώστη) περί αυτού του φαινομένου, και μου είπε ότι όντως +φταίει ο Metro-X. Εγώ τώρα, δεν έχω χρόνο να επανεγκαταστήσω το Λίνουξ από την αρχή χωρίς Τον ΜέτροΧ (λογική και αυτή, ε; :-)), και επειδή βρήκα στo CD του RAM +το KDE, έκανα ένα query στα rpm του και διάβασα ότι απαιτεί το REdHat 5.1, ή κατι παρόμοιο. Μπορώ να το εγκαταστήσω στο 5.0; Ή μήπως αυτή η παρατήρηση ισχύει σε +ορισμένες περιπτώσεις; + +*Λοιπόν έτσι είναι, το CD του RAM περιέχει τον KDE για το RH 5.1 μόνο, αλλά φυσικά υπάρχει και για το 5.0. Πήγαινε μια βολτίτσα από το και +κατέβασέ το αν θες (Μην ξεχάσεις να κατεβάσεις και τις Qt libs από το )\ +Πάντως, καλό θα είναι να αναβαθμίσεις το RH από 5.0 σε 5.1 (το 5.0 είναι πολύ bug-friendly :)))* + + +### [5. Ελληνικό Πληκτρολόγιο]{#s5} + +Από : [Κώστας Σαπαλίδης](mailto:kalaitso@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Εχω εγκαταστήσει RedHat Linux 5.1 και KDE τα Ελληνικά \"πακέτα\" XFGreekFNTS-1-1.noarch.rpm και XFGreekKBD-1.2-2.noarch.rpm και βλέπω κανονικά Ελληνικά. Δήλωσα +και το πληκτρολόγιο el\_US και τα λοιπά όπως λέει το readme του installation αλλά το πληκτρολόγιο παραμένει Αγγλικό όταν πατάω right+Alt. Προφανώς δεν το +αναγνωρίζει σαν δίγλωσσο. Τι μπορεί να φταίει και ποιά είναι τα αρχεία που πρέπει να ενημερώσω? + +*Την απάντηση θα βρεις στο Linux Zone, τεύχους 6 του περιοδικού. Γενικά, κάτι δεν πάει καλά με το el\_US.* + + +### [6. Ξανά πρόβλημα Debian]{#s6} + +Από : [Λέων Ίσαυρο](mailto:leoniv4@hotmail.com) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@rocketmail.com) + +Αγαπητοί φίλοι Linux-άδες Επιτέλους έκανα download από την Debian και εγκατέστησα το Linux 2.0 στον αρχαίο υπολογιστή μου,, γράφτηκα μάλιστα με χαρά στην λίστα +των Ελλήνων χρηστών του περιοδικού σας. + +***NK:** Καλά έκανες* + +Δυστυχώς στην σχέση μου με το Linux τίποτα μέχρι τώρα δεν έχει λειτουργήσει απρόσκοπτα και καταφεύγω πάλι σε σας για να λύσετε το νέο μου πρόβλημα: Ενώ η +εγκατάσταση έγινε κανονικά και όλα τα αρχεία τοποθετήθηκαν στις θέσεις τους, δεν μπορώ να δώσω καμμιά εντολή Unix στο σύστημα. Αντί για το \# έχω \$ για prompt. +Τι μπορεί να έχει πάει στραβά; + +***NK:** Τίποτα. Υπάρχει η συνήθεια ο root να έχει prompt \# και οι χρήστες \$. Αυτό μόνο για να καταλαβαίνει κανείς ότι είναι root και να **προσέχει**. Κάνε +λοιπόν ένα user account (adduser login, μετά passwd login) και παίξε από εκεί.* + +Ίσως να μην εγκαταστάθηκαν κάποια πακέτα από το dselect γιατί έχω την αίσθηση ότι τα έκανα θάλασσα\...Αλλά όταν έκανα login στο root και ξεκίνησα το dselect δεν +μου ανάφερε τόσα πακέτα όσα αμέσως μετά την πρώτη επανεκκίνηση (αμέσως μετά την εγκατάσταση). Θα ήθελα να εγκαταστήσω το TeX το Netscape Navigator και τα +XWindows αλλά πλέον δεν μου τα δείχνει ως διαθέσιμα. + +***NK:** Το dselect είναι το ΜΕΓΑΛΟ πρόβλημα της Debian. Δεν ξέρω τι εγκατάσταση έκανες και πόσο πλήρης είναι αλλά οπωσδήποτε διάβασε το manual του dselect. Για +να δεις ως διαθέσιμο π.χ. το TeX, θα πρέπει το dselect να τα \"δει\" δηλαδή είτε να τα έχεις στον δίσκο σου (και να πεις στο dselect το directory όπου τα έχεις) +είτε να στοχεύσεις το dselect σε ένα official debian ftp site. Και στις 2 περιπτώσεις πρέπει να του πεις να πάρει την λίστα των active πακέτων που υπάρχουν +διαθέσιμα (υπάρχει επιλογή στο menu του dselect).* + +Κάτι άλλο που με παραξενεύει είναι ότι δεν βλέπω το αποτέλεσμα της εντολής μου στο prompt. Έτσι για παράδειγμα αν γράψω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ cd /usr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +τελικά θα δω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +αντί για όπως περιμένω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + dev/hda1/usr>$ (ή τελοσπάντων κάτι τέτοιο) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +***NK:** Αυτό δεν είναι βέβαια το αποτέλεσμα της εντολής σου. Για να δεις το αποτέλεσμα της εντολής σου πρέπει για το παράδειγμα που έδωσες να δώσεις την εντολή +pwd. Αυτό που θέλεις είναι μια ιδιότητα του bash (customizable prompt). Ρυθμίζεται από την variable PS2 και οδηγίες θα βρεις στην man page του bash (man bash, +προς το τέλος). Συνοπτικά, θα πρέπει να βάλεις στο /etc/bashrc ή /etc/profile ή  /.bashrc μία εντολή του στυλ PS2=/x/c/s όπου x,c,s είναι switches που θα βρεις +στην manpage του bash.\ +**ΒΠ:** Για την ακρίβεια, για να δεις το path στο οποίο βρίσκεσαι ανά πάσα στιγμή, γράψε PS1=\[\\w\] (είναι κάτι αντίστοιχο με το PROMPT \$p\$g του dos). Το +PS2, είναι το prompt που βγάζει το bash όταν δεν έχεις κλείσει κάποια εισαγωγικά, δηλ. αν PS2=\[\<\] (όπως και είναι το default) και γράψεις\ +echo \"ale a yact \"ENTER\"\ +θα σου βγάλει από κάτω:\ +\<\ +για να συνεχίσεις. Θα σου το βγάζει μέχρι να κλείσεις τα εισαγωγικά. (το αποτέλεσμα της echo, θα περιέχει τα enter που πάτησες\...)* + +Δυστυχώς δεν έχω καμμιά σχέση μέχρι τώρα με Linux, Unix και παρεμφερή με αποτέλεσμα να μην μπορώ να καταλάβω τίποτα. Μάλλον δεν είναι και τόσο φιλικό όσο λένε +το Linux\... + +***NK:** Το ότι δεν έχεις καμία σχέση το καταλάβαμε :-) αλλά κανείς δεν είπε ότι είναι user-friendly το Linux (και αν το είπε κακώς έκανε). Το Linux είναι +sys-admin frendly.* + +Περιμένω την απάντησή σας με ανυπομονησία αφού είστε και η μόνη πηγή που μπορώ να απευθυνθώ. Δυστυχώς όποια άλλη πηγή του LDP και αν έψαξα δεν με κάλυψε. + +***NK:** Προφανώς δεν έψαξες καλά!!!\ +**ΒΠ:** Μάλλον καθόλου θα έλεγα αλλά καταλαβαίνς ότι ήσουνα πολύ χαμένος σε όλα αυτά, ε;;;* + +Σας χαιρετώ με απελπισία (και απογοήτευση) Υ.Γ: Αν καταφέρω να εγκαταστήσω το TeX -αλήθεια πώς γίνεται αυτό;- από που θα πείσω το σύστημα να γράψει ελληνικά; + +***NK:** Άστο αυτό για αργότερα. Ακόμα δεν έβαλες linux και θέλεις TeX ?* + + +### [7. Εύρεση του XISP]{#s7} + +Από : [Γιώργος Ρείζης](mailto:reizis@sit.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Θα σε παρακαλούσα να μου πεις από που μπορώ να προμηθευτώ το x-isp ώστε να το χρησιμοποιήσω στη σύνδεσή μου με την Forthnet. Σ.Σ. Χρησιμοποιώ το Redhat 5.1. + +*Γιώργο, το X-ISP θα το βρείς στην σελίδα του Δημήτρη Μπούρα (που το έγραψε) στο: . Για RedHat 5.1 ίσως να βρεις pre-compiled στο +* + + +### [8. Ελληνικά στο DOSemu]{#s8} + +Από : [Παναής](mailto:alexakos@csd.uch.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Παιδιά χαιρετώ και ελπίζω να είστε καλά. Έχω το εξής πρόβλημα στο RedHat Linux 5.1 : Έχω εγκαταστήσει αρκετά Ελληνικά fonts και γενικά στα X-Windows δεν έχω +πρόβλημα να \"δω\" και να γράψω Ελληνικά. Χρησιμοποιώ το grISOXKb-1.2. Το ερώτημά μου είναι: Τι γίνεται με τα ελληνικά στο DOSemu. Δηλαδή: Το DOS χρησιμοποιεί +Ελληνικά κωδικοσελίδας 737. Έχω γράψει κάποια προγράμματα για DOS τα οποία τα δουλεύω κανονικά στο DOSemu, αλλά χωρίς Ελληνικά. Το gr2gr.pl του Χαρίτση δεν +κάνει σωστή μετατροπή των Ελληνικών του DOS σε ELOT-928, αλλά και πάλι δεν θέλω να χρησιμοποιώ φίλτρα όταν μεταφέρω αρχεία κειμένου από DOS σε Linux και τ\' +ανάποδο. Με άλλα λόγια, υποθέτω ότι αν είχα στο Linux μία τουλάχιστον γραμματοσειρά σε codepage 737 δεν θα είχα πρόβλημα να ανοίξω ένα xterm -fn \"Η +γραμματοσειρά\" και εκεί να τρέξω το DOSemu και να \"βλέπω\" Ελληνικά. Πάω στο όπου λένε τα HOWTOs ότι βρίσκεις Ελληνικά σε +codepage 737, αλλά είναι μονίμως down. Anyway, υπάρχει κανείς που να έχει καμιά ιδέα για το πως θα λύσω το πρόβλημα των Ελληνικών σε DOSemu ? Σκεφτείτε πόσο +software (ΕΛΛΗΝΙΚΟ) έχει γραφτεί για DOS. Είναι κρίμα όλα αυτά να μην μπορεί να τα \"γευτεί\" ένας Linux user. + +*Όσον αφορά τα ελληνικά δεν μπορώ να σε βοηθήσω συγκεκριμένα αλλά: υπάρχει ένα πρόγραμμα (greek-console) που περιέχει ελληνικές γραμματοσειρές 737 αν δεν κάνω +λάθος (είχα δει κάποτε στο man page) και στο linux κωδικοποιεί θαυμάσια (για το dosemu δεν ξέρω). Αυτές σε συνδυασμό με το i8n του RedHat5.1 λογικά θα πρέπει να +αρκούν. Ο [Γιώργος Κεραμίδας](mailto:keramida@ceid.upatras.gr) είναι ο \"ένοχος\" για το ΠΑΡΑ - ΠΟΛΥ - ΚΑΛΟ greek-console. Δυστυχώς δεν έχω καμία εμπειρία από +DOS για να σε βοηθήσω πιο συγκεκριμένα.* + + +### [9. Ζητείται Linux]{#s9} + +Από : [Γιάννη Α.](mailto:fikip@hol.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@rocketmail.com) + +Χαιρετισμοί. Είμαι χρήστης των Windows και θέλω να ασχοληθώ με το Linux. Το πρόβλημά μου είναι οτι δεν μπορώ να το βρω στο internet και να το \"κατεβάσω\". +Εκτός αυτού άκουσα πως υπάρχουν πολλές εκδόσεις Linux (?) απο διαφορετικές εταιρίες (πχ RedHat). Τελικά τί συμβαίνει; + +*Linux είναι ένα, πολλές distrinutions υπάρχουν. Η κάθε μία έχει καλά και κακά. Όλες όμως, είναι το ίδιο πάνω-κάτω* + +Γιατί υπάρχουν τόσες εκδόσεις του Linux? + +*(distributions) Γιατί όχι;;; Σοβαρά, επειδή η κάθε εταιρία το προσφέρει μαζεύοντας διάφορα προγράμματα κατά την κρίση της, γράφοντας τα σε ένα CD, και μετά το +πουλάει. Θεωρητικά, το κόστος της αγοράς σου είναι το CD, και η δουλειά που έκαναν οι άνθρωποι να τα μαζέψουν όλα αυτά και να σου τα προσφέρουν.* + +Τι έχει να προσφέρει η κάθε μια και ποιά είναι η καλύτερη? + +*Είναι καθαρά υποκειμενικό το θέμα, αλλά για να αρχίσεις σου συνιστώ redhat ή caldera* + +Και το πιό σημαντικό, που μπορώ να προμηθευτώ το Linux? + +*Διάβασες κανα FAQ, κάνα HOWTO? Κάνε μια περασάδα από τα: distributions: + * + + +### [10. Οtenet PPP]{#s10} + +Από : [Ανδρέα Μπινέλα](mailto:andrious@rocketmail.com) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Συγχαρητήρια για το περιοδικό για το linux και να συνεχίσετε πάντα έτσι. Είμαι ένας καινούργιος φίλος του linux και έχω κάποιο πρόβλημα δεν μπορώ να κάνω +σύνδεση με τον isp που για μένα είναι η otenet. Σας παρακαλώ πείτε τι να κάνω για να μπω στο δίκτυο με linux. + +*Πρέπει να ρυθμίσεις το ppp και τον δαίμονά του. Πάρε το [XISP](http://users.hol.gr/~dbouras) εάν δεν ξέρεις πως. Αλλιώς γίνε συγκεκριμένος.* + + +### [11. Kppp προβλήματα]{#s11} + +Από : [Κώστα Σακελλαρίδη](mailto:kos_sak@otenet.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hol.gr) + +Για σας πάλι.Εχω κατι προβληματάκια με το Kppp. Πιο συγκεκριμένα μου βγάζει το μύνημα \"no dialtone\" το οποίο μου εβγαζε και στα 98 αλλα εκει το βρήκα. Ξέρετε +πως μπορώ να το φτιάξω? + +*Στο kppp :* + + Setup -> Modem -> Modem Commands -> Dial String = ATX3DT + +*Αυτό θα πρέπει να δουλέψει\...* + + +### [12. Matrox Mystique]{#s12} + +Από : [Infonorth Computer systems](mailto:xalatas@rodopi.cc.duth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Έχω ένα πρόβλημα με τα X. Δεν μπορώ να εγκαταστήσω τα X να παίζουν 800x600 με πάνω από 16 χρώματα. Έχω μια κάρτα Matrox Mistique 220 με 2MB ram και από ότι +φαίνεται δεν την βλέπει για SVGA γιατί όταν βάζω SVGA με 2MB Ram από το XF86Setup γυρνάει στο 320x200 με 256! Τι να κάνω; Υπάρχει κάποιο patch για την κάρτα +μου; Ακόμα δεν παίζει με την Matrox Millenium που έχει μία επιλογή στο menu\.... + +*Για Matrox Mystique 220 δεν ξέρω, αλλά μπορείς ίσως να δοκιμάσεις τον Server της [Suse](http://www.suse.de) για Mystique 200. Αν δουλέψει, εμνημέρωσέ μας να +ξέρουμε.* + + +### [13. Applixware και Ελληνικά]{#s13} + +Από : [David Lekic](mailto:dlekic@ee.upatras.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:mkabrian@acropolis.gr) + +Γεια σας. Είμαι ένας παλιός χρήστης στο LINUX. Εδώ και καιρό πήρα το APPLIXWARE για την εργασία μου. Παράλληλα έβαλα και ελληνικές γραμματοσειρές (Type1) και +μετά από πολλές προσπάθειες κατόρθωσα να τις εγκαταστήσω στον FONT SERVER του APPLIXWARE. Το πρόβλημα είναι πως όταν πατώ το δεξιό ALT για να γράψω ελληνικά +εμφανίζονται κάποια άσχετα πράγματα στην οθόνη, δηλαδή αντί για α εμφανίζεται \[\]. Μήπως θα μπορούσατε να μου δώσετε μία λύση; + +*Δυστυχώς όχι. Έχει να κάνει με την υλοποίηση του πληκτρολογίου από την Applix. Αν και δεν αναφέρεις ποιο οδηγό πληκτρολογίου χρησιμοποιείς, υποθέτω ότι +χρησιμοποιείς αυτόν του Δημήτρη Μπούρα (grXisokbd). Θα σου πρότεινα να δοκιμάσεις και αυτόν του Γιάννη Τσακίρη που θα τον βρεις στο +.* + + +### [14. IP-Masquerading]{#s14} + +Από : [Φώτη Αλεξάκο](mailto:alexakos@csd.uch.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Linuxάδες χαιρετώ (ξανά), Σας ξαναενοχλώ για ένα θέμα σχετικό με το IP-Masquerading. Κατ\' αρχήν να ρωτήσω για όσους έχουν το RedHat 5.1 : Έχει διαβάσει κανείς +το /usr/doc/HOWTO/mini/IP-Masquerade; Αν ναι, υπάρχει κανείς που να δοκίμασε να εφαρμόσει αυτά που γράφονται εκεί σε ένα σύστημα που αποτελείται από ένα Linux +box που \"βλέπει\" Internet μέσω PPP ενώ είναι συνδεδεμένο σε ένα LAN με Ethernet ? Γιατί εγώ δοκίμασα και απέτυχα οικτρά.\ +Περιγραφή της κατάστασης:\ +Έχω ένα Linux μηχάνημα και συνδρομή στην HOL. Το Linux \"βλέπει\" Internet μια χαρά. Στο Linux συνδέω μέσω κάρτας δικτύου NE-2000 δύο μηχανήματα που τρέχουν +Windows-95. Στο Linux έχω δώσει static IP address ακριβώς (και μάλιστα συμπτωματικά) αυτήν του παραδείγματος στο HOWTO που προανέφερα, δηλαδή 192.168.1.1, το +ένα Win-95 μηχάνημα έχει IP 192.168.1.2 και το άλλο 192.168.1.3 \.... Όλα καλά ως εδώ;\ +Το LAN δουλεύει μια χαρά, με το Linux βλέπω Internet. Εν συνεχεία, προσπαθώ να \"κάνω\" τα Win-95 μηχανάκια να βλέπουν το Internet που βλέπει το Linux. Δίνω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ipfwadm -F -p deny + ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0 + και: ppp-on /* Μπαίνω στην HOL */ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +στα Win-95 PC στις ρυθμίσεις δικτύου έχω ορίσει στο TCP/IP gateway το: 192.168.1.1 και στο DNS το DNS της HOL: 194.30.193.155 (αυτός είναι και στο +/etc.resolv.conf του Linux).\ +Σύμφωνα με τα παραπάνω θα έπρεπε όταν δίνω π.χ. από ενα Win-95 \"client\": ping 194.30.212.30 (www.hol.gr) να παίρνω απάντηση. Το LAN το βλέπουν κανονικά οι +clients (ping 192.168.1.1 και ping 192.168.1.2 και ping 192.168.1.3 βρίσκουν απάντηση).\ +Ακολούθησα επαναλαμβάνω ΠΙΣΤΑ αυτά που γράφονται στο : /usr/doc/HOWTO/mini/IP-Masquerade του RedHat 5.1 + +Ξέρει κανείς τι μπορεί να φταίει; Το ξέρω έγραψα πολλά, αλλά αν δεν περιγράψεις σωστά το πρόβλημα, δεν θα πάρεις ολοκληρωμένες πληροφορίες. + +*Πολύ καλά έκανες και είπες πολλά γιατί περιέγραψες σωστά το πρόβλημά σου. Η λύση βρίσκεται σε κάτι πολύ απλό. Αποτελεί κανόνα όλα τα unixakia που έχουν πάνω +από 2 routes να ΜΗΝ κάνουν IPforwarding για να μην γίνεται της κακομοίρας. Πήγαινε λοιπόν στο /etc/sysconfig και εκεί θα βρεις ένα αρχείο που λέγεται network. +Πάνω πάνω λέει : \"IPv4 forwarding: no\"\ +Προφανώς το αλλάζεις σε \"yes\". Κάνεις restart το nework (/etc/rc.d/init.d/network stop καιμετά start) και είσαι ok. Το /etc/sysconfig νομίζω ότι είναι το +σωστό directory. Αν όχι θα είναι κάτι εξαιρετικά παρεμφερές στο /etc directory. Θα έπρεπε να αναφέρεται στο IPmasqHOWTO , μου κάνει εντύπωση που δεν το λέει. +Κάθε φορά που ξεκινάει ο kernel λέει πολύ χαρακτηριστικά : disabling IP forwarding. Ένα cat/tail στα boot messages λογικπα θα πρέπει να στο δείξει.* + + +### [15. PINE και ελληνικά]{#s15} + +Από : [Ανώνυμο](mailto:tcup@bigfoot.com) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@eexi.gr) + +Γεια σας, έχω ένα πρόβλημα. Πως θα ρυθμίσω το pine να παίρνει και να στέλνει mail? Δεν έχω βρει καμιά επιλογή για smtp server. Sorry για τα greeklish, αλλά +είπαμε είμαι από linux και δεν έχω ελληνικά (ένα greek-console.κάτι.rpm που βρήκα από κάποιον στο \#linux-gr, δεν δουλεύει) + +*Για το pine: Main menu : other commands : setup : config : smtp server\ +Το greek console είναι εξαιρετικό πακέτο και δουλεύει σε όλους (από όσο ξέρω). Νομίζω ότι έχει man page (man chcp) ή εν πάσει περιπτώσει δώσε +/usr/local/bin/chcp χωρίς arguments και θα σου δείξει ένα πολύ κατανοητό help.* + diff --git a/content/articles/10/01_editorial.md b/content/articles/10/01_editorial.md new file mode 100644 index 0000000..29b0f90 --- /dev/null +++ b/content/articles/10/01_editorial.md @@ -0,0 +1,42 @@ ++++ +title = 'Editorial' +date = '1998-12-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 10'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Φίλοι, σας χαιρετούμε και αυτό τον σημαντικό μήνα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σημαντικός για δύο λόγους: + +- Έρχονται Χριστούγεννα, το οποίο σημαίνει για τους φοιτητές καθηγητές τουλάχιστον 10 μέρες ξεκούραση, για τους εργαζόμενους 2 συνεχόμενα 3ήμερα (βλέπετε + φέτος τα Χριστούγεννα, και η Πρωτοχρονιά πέφτουν Παρασκευή). +- Στις 19 Δεκεμβρίου, γίνεται το **ΠΡΩΤΟ** Linux happening στην Ελλάδα, διοργανωμένο από το HELLUG. Περισσότερες πληροφορίες θα βρείτε στην αντίστοιχη + [διεύθυνση](http://www.hellug.gr/happening). Σας περιμένουμε όλους εκεί. + +Εκτός από αυτά, έχουμε και άλλα νέα. + +- Το Magaz έχει πλέον 2 επίσημα sites. Ένα στο [Linux.gr](http://www.linux.gr/magaz) και ένα στο [Hellug](http://magaz.hellug.gr). +- Η λίστα των Ελλήνων χρηστών Linux με περίπου 250 \"εγγεγραμμένα μέλη\" είναι πλέον μόνιμη στήλη. +- Επίσης, αυτό που από καιρό περιμέναμε, μία [φόρμα ερώτησης](http://magaz.hellug.gr/question.html) για πιο μεγάλη ευκολία για εμάς (και όχι εσάς :-) ). + +Σε αυτήν τη φόρμα, θέλουμε να γράφετε ελληνικά. Αν δεν τα καταφέρνετε με τα ελληνικά στο Netscape, μπορείτε να διαβάσετε το [πολύ καλό άρθρο](04_grredhat.html) +του Δημήτρη Τζέμου, για να λύσετε μια και καλή αυτό το πρόβλημα. + +Και μια που μπήκαμε στα άρθρα, έχουμε επίσης ένα άρθρο του Κώστα Κοτσόκαλη, για [την χρήση TrueType γραμματοσειρών στα X-Windows](05_TTFlinux.html). + +Μία παρουσίαση της πρώτης σοβαρής ελληνικής προσπάθειας για βάση δεδομένων [Altera SQL server](02_altera.html) και ένα άρθρο σχετικά με το +[Gnome](03_gnome.html) συμπληρώνουν τα \"εξωτερικά\" άρθρα αυτού του μήνα. + +Σχετικά με την αλληλογραφία μας, που σας δημιούργησε προφανώς πρόβλημα αυτό το μήνα, ζητάμε συγνώμμη, αλλά κάποιες αναβαθμίσεις στον server (σε συνδυασμό με την +έλλειψη χρόνου) κράτησαν το magaz κλειστό για λίγο διάστημα. Με την νέα μορφή, (φόρμα ερώτησης) αυτό το πρόβλημα λύνεται. Επίσης, από αυτό το μήνα, το magaz +έχει δύο e-mails. Το και το . + +Να σας υπενθυμίσω, ότι όπως πάντα, το magaz φιλοξενεί άρθρα, από όλους τους φίλους συνlinuxάδες. + +Καλή ανάγνωση, και καλά Χριστούγεννα. diff --git a/content/articles/10/02_altera.md b/content/articles/10/02_altera.md new file mode 100644 index 0000000..7d61e8c --- /dev/null +++ b/content/articles/10/02_altera.md @@ -0,0 +1,66 @@ ++++ +title = 'Altera SQL server' +date = '1998-12-01T00:00:00Z' +description = '' +author = 'Altera Development Team' +issue = ['Magaz 10'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Δεν βρίσκει κανείς συχνά ελληνικό λογισμικό που να εξάγεται στο εξωτερικό.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ακόμη σπανιότερο είναι να βρει κανένας λογισμικό που να έχει αναπτυχθεί απο ελληνική εταιρία και μάλιστα σε τομέα που απαιτεί ιδιαίτερα υψηλή τεχνολογία, όπως +αυτός των σχεσιακών βάσεων δεδομένων. Το γεγονός αποκτά ιδιαίτερο ενδιαφέρον, αν λάβει κανείς υπόψη του οτι οι εταιρίες που δραστηριοποιούνται σε αυτό τον +τομέα, σε παγκόσμιο επίπεδο, είναι μετρημένες στα δάχτυλα, και μάλιστα σε αυτές συγκαταλέγονται μάλλον γνωστά ονόματα όπως η Microsoft και η Oracle. Είναι +λοιπόν ιδιαίτερα εντυπωσιακό όταν κανείς ανακαλύπτει ότι το ελληνικής προέλευσης προϊόν, Altera SQL Server version 2.0 , ανταγωνίζεται επι ίσοις όροις τους +πλέον αναγνωρισμένους οίκους ανάπτυξης λογισμικού. + +Ο Altera SQL Server, με την έκδοση 1.0, παρουσιάστηκε στην αγορά την άνοιξη του 1998 στην CEBIT. Η έκδοση 1.0 απευθυνόταν κατά κύριο λόγο σε ISPs και σε +προγραμματιστές που ήθελαν να αναπτύξουν απλές εφαρμογές. Ουσιαστικά η πρώτη αυτή έκδοση κάλυπτε το χώρο των χρηστών που ήθελαν επικοινωνία μιας βάσης δεδομένων +στο web. + +Η version 2.0 του Αltera SQL Server ενώ εξακολουθεί να έχει όλα τα χαρακτηριστικά της πρώτης έκδοσης, είναι στην πραγματικότητα ένα προϊόν πρωτοποριακό που +φιλοδοξεί να καλύψει τις ανάγκες όλων των κατηγοριών χρηστών, ιδιαίτερα αυτών που έχουν ιδιαίτερα υψηλές απαιτήσεις όπως οίκοι λογισμικού και εταιρίες που +διαχειρίζονται μεγάλο αριθμό βάσεων και χρηστών, απο διαφορετικές γεωγραφικές περιοχές. + +Μερικά από τα μοναδικά χαρακτηριστικά που έχει η version 2.0 του Altera SQL Server και τα οποία καθιστούν το προϊόν πραγματικά επαναστατικό είναι : + +1. Ο Altera SQL Server έχει διττή λειτουργία. Αφ\' ενός λειτουργεί σαν μία σχεσιακή βάση δεδομένων transactional και multithreaded, και αφ\' ετέρου σαν ένας + προγραμματιζόμενος web server. +2. Εκτός από όλα τα γνωστά interfaces, όπως ODBC, JDBC κ.λ.π., η βάση επικοινωνεί με τους clients μέσω HTTP πρωτοκόλλου χρησιμοποιόντας σαν interface + οποιονδήποτε από τους Internet browsers (Navigator, Internet Explorer). Συνέπεια του παραπάνω είναι, όλες οι λειτουργίες - όπως η διαχείριση της βάσης ή + ακόμη το SQL τερματικό - να εκτελούνται μέσω του Web browser. Το πλεονέκτημα αυτού του χαρακτηριστικού είναι ότι ο χρήστης αλλά και ο διαχειριστής του + συστήματος, χρησιμοποιύν ένα γνωστό interface με το οποίο είναι εξοικιωμένοι, ενώ το προϊόν ενσωματώνει και επωφελείται από την συνεχώς εξελισσόμενη + τεχνολογία των Internet browsers. +3. Ο Altera SQL Server διαθέτει ένα σύνολο built-in λειτουργιών που του επιτρέπει να διαχειρίζεται MIME-typed BLOBS, και να τις αποδίδει απευθείας στον Web + browser σαν εικόνες, videos, ήχους κ.λ.π., χωρίς την ανάγκη ειδικού προγραμματιστικού κώδικα. +4. Ο Altera SQL Server υποστηρίζει εγγενώς το Unicode. Ετσι ο χρήστης δεν αντιμετωπίζει πρόβλημα ταξινόμισης στα Ελληνικά όπως σε άλλες γνωστές βάσεις + δεδομένων. Πρόσθετα σε αυτά τα Unicode strings μπορούν να ασκηθούν όλες οι λειτουργίες που κάποιος μπορεί να εφαρμόσει και στα ASCII strings. +5. Επί του παρόντος, όλες οι μηχανές βάσεων δεδομένων (database engines), εκτελούν stored procedures χρησιμοποιόντας ιδιόκτητες proprietary προγραμματιστικές + γλώσσες - για παράδειγμα η Oracle την PL-SQL και η Microsoft την SQL-Transact Αντίθετα, ο Altera SQL Server εκτελεί store procedures σε C, C++, Java, Perl, + και Scheme (διάλεκτο της Lisp). Το πλεονέκτημα είναι φανερό αφού ο προγραμματιστής δεν χρειάζεται να μάθει κάποια νέα ιδιόκτητη γλώσσα. Πρόσθετα ο Altera + SQL Server δίνεται με AGI (Altera Gateway Interface) που επιτρέπει στον προγραμματιστή να γράψει store procedures σε οποιαδήποτε γλώσσα προγραμματισμού + θέλει χρησιμοποιώντας τον δικό του compiler. +6. Ο Αltera SQL Server είναι ιδιαίτερα φιλικός στη χρήση. Αυτό τονίζεται ακόμη περισσότερο σε ότι αφορά στους διαχειριστές συστημάτων και στους προγραμματιστές + που το χρησιμοποιύν. Για παράδειγμα ο διαχειριστής του συστήματος μπορεί με τον Altera SQL Server να ελέγχει όλες τις εργασίες και δραστηριότητες στον SQL + αλλά και στον HTTP server και βλέποντας τους πόρους που χρησιμοποιούνται να έχει την δυνατότητα να βελτιστοποιεί την απόδοση του συστήματος εύκολα και + γρήγορα. +7. Ο HTTP server του Altera SQL Server : + - υποστηρίζει server -side scripts, + - συντηρεί μόνιμες συνδέσεις (persistent connections) διατηρώντας την καταστασή τους, + - μπορεί να εκτελεί SQL και Scheme αρχεία καθώς επίσης και CGI. +8. Ο Altera SQL Server χρειάζεται λίγους πόρους : + - περίπου 2 ΜΒ ελεύθερου χώρου στο δίσκο και 100 ΚΒ για κάθε χρήστη της βάσης, + - 2 ΜΒ RAM και 150 ΚΒ για κάθε σύνδεση. + +Φυσικά εκτός από τα παραπάνω χαρακτηριστικά που ξεχωρίζουν τον Altera SQL Server 2.0 από τον ανταγωνισμό, θα πρέπει να αναφερθεί και η σημαντικά οικονομική τιμή +διάθεσής του. Το κόστος της άδειας χρήσης για πέντε χρήστες ανέρχεται στα 275 δολλάρια (περίπου 78.000 δρχ.). + +O Altera SQL Server έχει υλοποιηθεί σε αρκετά περιβάλλοντα όπως : Windows 95/98, Windows NT (Intel & Alpha chip), Solaris 2.x (Intel & SPARC ), IRIX (Silicon +Graphics), UNIX DEC (Alpha chip), UnixWare, SCO Unix, FreeBSD, Linux (Intel & Alpha). + +Για περισσότερες πληροφορίες σχετικά με τον Altera SQL Server version 2.0 μπρείτε να επισκεφθείτε το [web site της εταιρίας](http://www.altera.gr) απ\' όπου +μπορείτε να πάρετε δωρεάν το προϊόν για δοκιμαστική περίοδο δύο μηνών. diff --git a/content/articles/10/03_gnome.md b/content/articles/10/03_gnome.md new file mode 100644 index 0000000..7342137 --- /dev/null +++ b/content/articles/10/03_gnome.md @@ -0,0 +1,107 @@ ++++ +title = 'Γνωριμία με το GNOME' +date = '1998-12-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Παπαδογιαννάκης' +issue = ['Magaz 10'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Όσο περνάει ο καιρός, το Linux κερδίζει μεγαλύτερο κομμάτι της πίτας των λειτουργικών συστημάτων. Η εποχή μάλιστα που διανύουμε, μπορεί να χαρακτηριστεί ως \"Η +χρυσή εποχή του Linux\". Όλοι μιλάνε και όλοι γράφουν για αυτό. Μεγάλες εταιρίες όπως οι ORACLE, IBM, NETSCAPE, COREL τείνουν να αγκαλιάσουν το Linux, γιατί (αν +μη τι άλλο) βλέπουν μια νέα αγορά. Αλλά παρόλα αυτά, μια ομάδα από 30 άτομα, δουλεύουν για μας, ώστε να έχουμε ένα γραφικό περιβάλλων εργασίας (Graphical User +Interface, GUI)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +ΚΑΙ ΕΓΕΝΗΘΗΤΟ GNOME (GNU Network Object Model Interafce) + +Ο σκοπός δεν είναι άλλος από τη δημιουργία ενός GUI που θα είναι εύχρηστο, σταθερό, και αρκετά όμορφο. Και, ευτυχώς για εμάς, η στιγμή αυτή πλησιάζει. Και αν +αυτός είναι ο σκοπός, η ελπίδα είναι να δημιουργηθεί ένα διαπλατφορμικό GUI, τόσο για το Linux, αλλά και για τις άλλες μορφές του Unix, το οποίο θα προσφέρει +στους δημιουργούς προγραμμάτων ένα \`\`έξυπνο\'\' μέσο εργασίας, όμορφο και εύκολο στη χρήση και την κατανόηση του από τους απλούς χρήστες. + +Παρόλο που ένα τέτοιο διαπλατφορμικό GUI (αν και GUI δεν είναι η σωστή λέξη, Interface θα ήταν η σωστότερη) έχει δημιουργηθεί στο παρελθόν (OSF MOTIF) και δεν +είχε τελικά την επιτυχία που όλοι θα θέλαμε, ίσως γιατί οι ανάγκες και η εξάπλωση νέων τεχνολογιών ήταν σφοδρή, είτε γιατί η εγκατεστημένη βάση Linux ήταν πολύ +μικρή, το GNOME θέλει να τα καταφέρει, και σε πολλά σημεία αντιγράφει (στο look, όχι στα crashes) τα ακατονόμαστα. Το αποτέλεσμα είναι ένα περιβάλλον εργασίας +που δεν έχει τίποτα να ζηλέψει από τα ακατονόμαστα, και φυσικά παρέχει όλη την ελευθερία και τη σταθερότητα του Linux σε συνδυασμό με τον ελεύθερο κώδικα. Σε +κάτι βασικό, όμως, διαφέρει από τα γουίντοους, και αυτό είναι το CORBA (Common Object Request Broken Architecture) για το οποίο θα μιλήσουμε αργότερα. Για να +πάρετε μονάχα μια ιδέα, σας πληροφορώ ότι κάτι τέτοιο θα επιτρέπει την αστραπιαία δημιουργία προγραμμάτων, καθώς θα χρησιμοποιεί τις ικανότητες ενός +προγράμματος για να δημιουργήσει ένα άλλο πρόγραμμα, υπερσύνολο σε δυνατότητες του πρώτου. + +Όπως είπαμε, μια ομάδα από 30 άτομα δουλεύει στον πυρήνα του νέου GUI, ο οποίος είναι αρκετά διαδεδομένος αυτή τη στιγμή που σας γράφω όλα αυτά, και υπάρχουν +τουλάχιστον 2000 άτομα που δοκιμάζουν καθημερινά το GNOME και το κατά πόσο είναι σε θέση να προσφέρει όσα υπόσχεται. Είναι -όπως θα περιμένατε - βασισμένο σε +ελεύθερο κώδικα, αλλά όχι υπό τη μορφή των βιβλιοθηκών της TROLL, (QT libraries) όπου δεν μπορείς να δημιουργήσεις ένα πρόγραμμα που προορίζεται για το εμπόριο. +Βασίζεται αποκλειστικά στο GIMP Toolkit (Τις βιβλιοθήκες που χρησιμοποιεί το GIMP) για τη δημιουργία εφαρμογών για τα Χ Windows. + +Μεγάλοι Distributors του Linux (Red Hat, Debian) έχουν ανακοινώσει ότι στις μελλοντικές τους distributions θα συμπεριλάβουν το GNOME σαν το βασικό τους +περιβάλλον εργασίας. Και όχι μόνο αυτό, αλλά μέσα στη Red Hat έχει δημιουργηθεί μια ομάδα εργασίας, η RHAD Labs, ένα μέρος της οποίας έχει επικεντρώσει την +προσοχή της (και μιλάμε τώρα ότι δουλεύουν full time, όχι στον ελεύθερό τους χρόνο) στην ανάπτυξη του GNOME και άλλων μορφών ελεύθερου λογισμικού, όπως του GTK+ +(είπαμε, το Gimp Toolkit). + +Πολλά είπα, και μάλλον δεν ανάφερα το βασικότερο! Το Gnome, σε καμία περίπτωση δεν είναι ένας Window Manager. Είναι ένα περιβάλλον εργασίας (νομίζετε ότι είναι +πολύ λεπτή η διαχωριστική γραμμή; Μέγα λάθος!). Window Manager είναι ένα πρόγραμμα που κάθεται πάνω στα X και προσφέρει στο χρήστη τον τρόπο που θα εικονίζονται +τα desktops, τα παράθυρα, πως θα είναι ο δείκτης του ποντικιού, κοκ. Περιβάλλον εργασίας είναι ο τρόπος που φαίνονται τα κουμπιά, τα βελάκια στις ράβδους +κύλισης, τα μενού, οι μπάρες, και όλα τα χαρακτηριστικά που απαρτίζουν τα όμορφα παραθυράκια. Και δεν είναι μόνο αυτό, είναι και ο τρόπος που θα αντιδράσει το +κουμπί αν απλά περάσετε το ποντίκι από πάνω του, αν σύρετε και αφήσετε πάνω του ένα αντικείμενο και γενικότερα χίλια δυο πράγματα αδιαφανή για το χρήστη. +Πράγματα χωρίς τα οποία δεν θα γινόντουσαν τα πιο απλά πράγματα. + +Το GNOME λοιπόν, μπορεί να τρέξει πάνω από οποιονδήποτε WM, αλλά καλά θα ήταν ο WM αυτός να ξέρει για το GNOME. Με αυτό τον τρόπο θα μπορεί να επικοινωνήσει με +το GNOME και το αποτέλεσμα της συνεργασίας τους να είναι το καλύτερο για το χρήστη. + +Βιβλιοθήκες στις οποίες είναι βασισμένο το GNOME + +- GTK: Είπαμε τι είναι αυτό, αλλά μην νομίζετε ότι το επιλέχθηκε στην τύχη. Πολλά από τα χαρακτηριστικά του είναι ιδανικά για το σκοπό που επιλέχτηκε, και + ορίστε μερικά: + - Υποστήριξη για πολλές γλώσσες προγραμματισμού (C, C++, OBJ C, PERL) + - Εύκολη αλλαγή του τρόπου απεικόνισης, με λίγα λόγια μπορούμε να χρησιμοποιήσουμε διάφορα themes για να αλλάξουμε το look and feel όλων των εφαρμογών που + χρησιμοποιούν το GTK. + - Είναι εντελώς ελεύθερο λογισμικό. +- IMLIB: Είναι μία βιβλιοθήκη για διάφορα είδη εικόνων, όπως xpm, png, jpg, και πολλά άλλα, που καταργεί την ανάγκη ύπαρξης διαφορετικής βιβλιοθήκης για κάθε + διαφορετική μορφή εικόνας. +- Mesa: Είναι μια βιβλιοθήκη που επιτρέπει την εμφάνιση και δημιουργία τρισδιάστατων γραφικών στη γλώσσα OpenGL. Είναι και αυτή ελεύθερη όσον αφορά στον + κώδικα και τη χρήση αυτού. + +Θα πρέπει να αναφέρω και μερικά από τα \`\`άγνωστα\'\' χαρακτηριστικά του GNOME που χρήζουν αναφοράς: + +- Όλες οι εφαρμογές που βασίζονται στο GNOME είναι ικανές να φυλάξουν την κατάσταση πριν από το κλείσιμο (δεν νομίζω να το μετάφερα καλά στην Ελληνική, αλλά + δεν μπορούσα να βρω καλύτερη έκφραση. Η ξένη ορολογία είναι \`\`session aware\'\'). Κάτι τέτοιο σημαίνει ότι αν κλείσετε τον επεξεργαστή κειμένου σας ενώ + γράφετε ένα κείμενο, και μετά τον ανοίξετε ξανά, θα φορτωθεί το ίδιο κείμενο, και όχι μόνο αυτό, αλλά θα εμφανιστούν οι ίδιες toolbars που είχατε ανοιχτές, + και μάλιστα ο δρομέας θα πάει στο ίδιο σημείο που ήταν πριν από το κλείσιμο. Καλό;; +- Τα κείμενα το GNOME βασίζονται στην SGML, κάτι το οποίο επιτρέπει να γραφούν κείμενα σε ένα editor και να μετατραπούν σε HTML, LaTeX, Postscript κατά + βούληση και να εκτυπωθούν. +- Το GNOME υποστηρίζει 3D προγραμματισμό μέσω της OpenGL, κάτι που μας επιτρέπει να χρησιμοποιούμε τρισδιάστατα γραφικά μέσα στις εφαρμογές μας. Η βιβλιοθήκη + που χρησιμοποιεί το GNΟME είναι η Mesa, μια υλοποίηση της OpenGL με ελεύθερο κώδικα. +- Οι επικεφαλείς της δημιουργίας του GNOME, δουλεύουν για να δημιουργήσουν ένα μοντέλο αντικειμένων, το baboon, το οποίο δεν είναι τίποτα άλλο από μια + διασύνδεση ανάμεσα στις εφαρμογές (κάτι ανάλογο με το Object Linking and Embedding (OLE) της Μ\$. + +Αλλά ας δούμε επιτέλους τι είναι αυτό το CORBA που λέμε από την αρχή του κειμένου. CORBA είναι ένα interface για τη διασύνδεση προγραμμάτων. Θα μου πείτε: +\`\`Αυτό είναι όλο και όλο; Σιγά τα ωά!!\'\'. Ακούστε όμως και τη συνέχεια. CORBA, λοιπόν, είναι ένα interface για τη διασύνδεση προγραμμάτων που είναι γραμμένα +σε διαφορετικές γλώσσες, που τρέχουν σε διαφορετικούς υπολογιστές, οι οποίοι δουλεύουν σε διαφορετικά λειτουργικά και οι οποίοι είναι συνδεμένοι μεταξύ τους με +ένα οποιοδήποτε τρόπο. Πως σας φάνηκε; Καλό; + +Και λοιπόν καλά όλα αυτά, αλλά που βρίσκονται; Η κεντρική σελίδα του GNOME βρίσκεται στη διεύθυνση + +, + +από όπου μπορείτε να βρείτε βοήθεια, να κατεβάσετε το GNOME, και να δείτε τα προγραμματάκια που έχουν βασιστεί σε αυτό. Υπάρχει το software map για το GNOME και +βρίσκεται εδώ: + +. + +Α, και μην ξεχάσετε να διαβάσετε το GNOME MANIFESTO στη διεύθυνση: + + + +Ένα φοβερό screenshot μπορείτε να δείτε εδώ: + + + +Φυσικά, μην ξεχάσετε να περάσετε από το + + + +από όπου θα βρείτε την τελευταία έκδοση του GTK, πληροφορίες για αυτό, και χρήσιμα links. Όταν δείτε πόσα πολλά προγράμματα έχουν γραφτεί για το GTK θα +εκπλαγείτε!! + + diff --git a/content/articles/10/04_grredhat.md b/content/articles/10/04_grredhat.md new file mode 100644 index 0000000..864addc --- /dev/null +++ b/content/articles/10/04_grredhat.md @@ -0,0 +1,112 @@ ++++ +title = 'Ελληνικά στο RedHat 5.0' +date = '1998-12-01T00:00:00Z' +description = '' +author = 'Τζέμος Δημήτρης' +issue = ['Magaz 10'] +issue_weight = 4 ++++ +Αγαπητοί φίλοι γειά σας. Μετά απο πολλές περιπέτειες με τα ελληνικά στο RedHat 5.0 , διάβασμα των σχετικών Howto βρήκα πως βάζουμε ελληνικά ΠΑΝΤΟΥ στο RedHat +5.0 (Xwindows και console) Τα Howto έχουν μερικά λάθη με βασικότερο το locale lang=gr\_GR. + +Πρέπει να γίνουν οι παρακάτω ενέργειες: (Πρέπει να είμαστε root) + +1. απο τη γραμμή εντολών ή σε Xterm γράφουμε locale. Πρέπει να πάρουμε τα εξής: + + LANG=POSIX + LC_CTYPE="POSIX" + LC_NUMERIC="POSIX" + LC_TIME="POSIX" + LC_COLLATE="POSIX" + LC_MONETARY="POSIX" + LC_MESSAGES="POSIX" + LC_ALL= + + Πρέπει δηλαδή να ΜΗΝ έχουμε βάλει πουθενά lang=gr\_GR + + - Για Xwindows\ + Κατεβάζουμε τα αρχεία XFGreekFNTS-1-1.noarch.rpm και greekXfonts-BDF-1\_1.tgz που περιέχουν ελληνικές γραμματοσειρές καθώς και το GRkbd-1.2.linux.tar.gz + για αλλαγή πληκτρολογίου (ΟΧΙ το XFGreekKBD-1.2-2.noarch.rpm) Τα εγκαθιστούμε και στο /etc/X11/XF86Config πρέπει να προσθέσουμε το FontPath για τις + ελληνικές γραμματοσειρές του greekXfonts-BDF-1\_1.tgz Οι του XFGreekFNTS-1-1.noarch.rpm προστίθενται αυτόματα. Αντιγράφουμε το grkbd στο /usr/bin για να + είναι στο path ή δηλώνουμε το path που βρίσκεται το grkbd + - Για console κατεβάζουμε το greek-console.rpm και το εγκαθιστούμε. + +2. Δημιουργούμε το αρχείο /root/.inputrc με περιεχόμενα + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + set meta-flag on + set convert-meta off + set output-meta on + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Σημείωση: Για κάθε χρήστη του συστήματος δημιουργούμε και το αντίστοιχο  /.inputrc Π.Χ. για χρήστη nikos στο /home/nikos/ + +3. Στο /root/.Xdefaults διορθώνουμε τη γραμμή xterm\*font: fixed και xterm\_color\*font: fixed με xterm\*font: grfixed και xterm\_color\*font: grfixed + αντίστοιχα. Φυσικά μπορούμε να βάλουμε και άλλη εκτός απο την grfixed + +4. Στο /etc/bashrc δημιουργούμε τα alias προσθέτοντας τις παρακάτω γραμμές: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + alias xterm="xterm -fn grfixed" + alias rxvt="rxvt -fn grfixed" + alias joe="joe -asis" + alias ls="ls -N --color=yes" + alias less="less -r" + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +5. Για console δημιουργούμε ενα link στο chcp ως εξής: ln -s /usr/local/bin/chcp /chcp οπότε αρκει να δώσουμε /chcp win και με alt-shift εχουμε ελληνικά στη + γραμμή εντολών. Σημείωση: Στο /usr/lib/kbd/consolefonts/ υπάρχουν οι γραμματοσειρές οπότε μπορούμε να χρησιμοποιήσουμε την εντολή setfont + /usr/lib/kbd/consolefonts/γραμματοσειρά για να ορίσουμε ποιά θέλουμε. + +6. Για το Netscape + - Για να βλέπουμε όλες τις ελληνικές σελίδες στο Internet Σαν root γράφουμε + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + cd /usr/X11R6/lib/X11/fonts/greek-PCF + mkfontdir + awk '{printf "%s %s\n", $2, $2}' fonts.dir |sed -e \ + 's/iso8859-7/iso8859-1/' >>fonts.alias + awk '{printf "%s %s\n", $2, $2}' fonts.dir |sed -e \ + 's/iso8859-7/windows-1253/' >>fonts.alias + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + τα ίδια για το cd /usr/X11R6/lib/X11/fonts/greek-Type1 και τα ίδια για το /homes/ah/src/grfonts/INST/misc και το\ + /homes/ah/src/grfonts/INST/75dpi ή\ + /homes/ah/src/grfonts/INST/100dpi\ + αν έχουμε εγκαταστήσει τα greekXfonts-BDF-1\_1.tgz στο /homes/ah/src/grfonts/INST/ διαφορετικά γράφουμε cd κατάλογος που εγκαταστήσαμε τα ελληνικά + + - Για να εχουμε ελληνικά στη γραμμή που δίνουμε τις διευθύνσεις και παντού στο email. Aντιγράφουμε το αρχείο Netscape.ad απο το κατάλογο + /usr/doc/netscape-communicator-4.04-3/ στο /usr/X11R6/lib/X11/app-defaults/ και το μετονομάζουμε σε Netscape. Το ανοίγουμε με τον joe ή με άλλον + επεξεργαστή και στη γραμμή 5167 ,5168, 5169 όπου λέει adobe βάζουμε \* δηλ πρέπει να είναι + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmTextField.fontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmText.fontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmList*fontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Επίσης στη γραμμή 5200,5201,5202 αντικαθιστούμε το -\*-helvetica με -greek-helvetica και το 100 με 120 δηλαδή πρέπει να είναι + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmLGrid*fontList:\ + -greek-helvetica-medium-r-*-*-*-120-*-*-*-*-iso8859-*,\ + -greek-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*=BOLD,\ + -greek-helvetica-medium-o-*-*-*-120-*-*-*-*-iso8859-*=ITALIC + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ΤΕΛΕΙΩΣΑΜΕ + + Ξεκινάμε τον Netscape και απο το view -\>encoding επιλέγουμε το Greek (ISO-8859-7) και πάλι απο το ίδιο μενού το \"Set Default Encoding \" και στο + Εdit-\>Preferences-\>Appearance-\>fonts το \"Greek(iso-8859-7)\" και ορίζουμε ποιές γραμματοσειρές θέλουμε. Tο ίδιο κάνουμε για το \"Western(iso-8859-1)\". + +Σημείωση : Αν κάποιος θέλει να έχει ελληνικά και στο tkirc irc και στο circus irc μπορείτε να μου το πείτε για να στείλω κάποιο σχετικό email. diff --git a/content/articles/10/05_TTFlinux.md b/content/articles/10/05_TTFlinux.md new file mode 100644 index 0000000..ce65262 --- /dev/null +++ b/content/articles/10/05_TTFlinux.md @@ -0,0 +1,92 @@ ++++ +title = 'True Type Fonts σε Linux: Γιατί και πως.' +date = '1998-12-01T00:00:00Z' +description = '' +author = 'Κωνσταντίνος Κοτσόκαλης' +issue = ['Magaz 10'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένα από τα σημαντικότερα προβλήματα των χρηστών Linux έχει να κάνει με τα fonts (γραμματοσειρές) των X-Windows όσον αφορά τόσο στο localization (την δυνατότητα +δηλαδή να διαβάζουμε/γράφουμε σε πολλές διαφορετικές γλώσσες, όσο και την εμφάνιση των γραμματοσειρών στην οθόνη μας αλλά και τις εκτυπώσεις μας συχνά. Στο +κείμενο αυτό θα προσπαθήσουμε να δώσουμε κάποιες σχετικά εύκολες λύσεις στο πρόβλημα αυτό, προτείνοντας ένα τρόπο να χρησιμοποιούνται True Type fonts (τα fonts +που χρησιμοποιούν και τα MS Windows). Το ζήτημα των γραμματοσειρών, του localization, του font rendering κλπ είναι ιδιαίτερα μεγάλο και δυσεπίλυτο και εγώ δεν +έχω σημαντική γνώση επάνω σε αυτό. Ενδεχομένως στο κείμενο που ακολουθεί να υπάρχουν λάθη - ελπίζω όχι χονδροειδή -, εάν βρείτε τέτοια θα παρακαλούσα να με +ενημερώσετε με mail στη διεύθυνση .* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Υπάρχουν δύο είδη γραμματοσειρών, τα scalable και τα bitmap fonts. Τα scalable μπορούν να αλλάζουν μεγέθη ανάλογα με τις απαιτήσεις της εκάστοτε εφαρμογής χωρίς +να χάνουν την ποιότητά τους, ενώ δεν έχουν τυποποιημένα μεγέθη. Αντίθετα, τα bitmap fonts υπάρχουν σε συγκεκριμένα μεγέθη (π.χ. 8,10,12,14,16,18,20,24 κλπ +points). Εάν λοιπόν εσείς επιθυμείτε να χρησιμοποήσετε ένα bitmap font με μέγεθος για παράδειγμα 40 ενώ το μέγεθος αυτό δεν ορίζεται στη συγκεκριμένη +γραμματοσειρά, τότε το αποτέλεσμα θα είναι πολύ άσχημο. Αυτό που θα συμβεί είναι η απλή μεγέθυνση ή σμίκρυνση του αμέσως μικρότερου ή αμέσως μεγαλύτερου font +στο επιθυμητό μέγεθος και αυτό που θα δείτε στην οθόνη σας θα είναι γεμάτο \`\`σκαλάκια\'\' και καθόλου ευχάριστο οπτικά. + +Ο κόσμος του Unix γενικότερα αντιμετωπίζει αυτό το πρόβλημα. Οι γραμματοσειρές Type1 ήλθαν να το λύσουν όντας scalable fonts. Παρόλα αυτά, η ποιότητά τους δεν +είναι τόσο καλή όσο των True Type fonts τα οποία είναι επίσης scalable. Αν λοιπόν θέλετε να έχετε την καλύτερη δυνατή ποιότητα για τα fonts των εφαρμογών που +τρέχετε, ακολουθήστε τις παρακάτω συμβουλές. Πριν ξεκινήσουμε να τονίσω πως σε γενικές γραμμές τόσο οι Type1 όσο και οι TT γραμματοσειρές είναι εμπορικές - ενώ +bitmap μπορείτε να βρείτε και free. Εάν έχετε αγοράσει τα MS Windows, μπορείτε να χρησιμοποιήσετε τα fonts που έρχονται μαζί με αυτά (Κατάλογος: +\\windows\\fonts ή \\winnt\\fonts). Διαφορετικά μπορείτε να αγοράσετε TTF sets από οποιοδήποτε μαγαζί με software. + +Αυτό που πρέπει αναγκαία να έχουμε, είναι ένα truetype engine. Ένα τέτοιο που κάνει πολύ καλά τη δουλειά του και είναι freeware, είναι το freetype. +Προμηθευτείτε το από το και κάντε compile σύμφωνα με τις οδηγίες που έχει μέσα\... Είναι το κλασσικό ./configure; make; make install. +Αφού γίνει αυτό το βήμα, πρέπει να εγκαταστήσετε έναν X11 Truetype font server. Ένας τέτοιος που είναι freeware και δουλεύει τέλεια στο Redhat 5.1 σύστημά μου +είναι ο xfsft που βασίζεται στην freetype. Υπάρχει και ο xfstt που είναι ανεξάρτητος της freetype engine, αλλά δεν τον έχω δοκιμάσει ακόμα. Ο xfsft είναι αυτή +τη στιγμή σε beta version αλλά αυτό δεν πρέπει να σας προβληματίζει. Μπορείτε να τον κατεβάσετε από τη διευθυνση + - βρείτε την πιο πρόσφατη έκδοση, παρτε την και κάντε compiling. Υπάρχει και ένα precompiled binary gia +redhat 5.x (ουσιαστικα για glibc 2). Μέσα στα sources υπάρχουν και χρήσιμα readme files οπότε καλό είναι να τα έχετε κάπου και αυτά. Ένα τελευταίο που θα +χρειαστείτε είναι το ttmkfdir ή το ttinst από το . Αφού έχετε πάρει όλα τα παραπάνω ακολουθείτε τα εξής +βήματα: + +- Εγκατάσταση της freetype +- Αντιγραφή των windows truetype fonts σε κάποιο directory, π.χ. /usr/X11R6/lib/X11/fonts/TTF. **ΜΗΝ ΞΕΧΑΣΕΤΕ ΝΑ ΣΒΗΣΕΤΕ ΟΛΑ ΤΑ ΑΡΧΕΙΑ ΠΟΥ ΔΕΝ ΕΧΟΥΝ ΚΑΤΑΛΗΞΗ + .TTF (ή .ttf :-))!!!** +- Εγκατάσταση του ttmkfdir ή του ttinst. Εγώ δοκίμασα το ttmkfdir. Γίνεται compiling με gcc -o ttmkfdir ttmkfdir.c -lttf και μετά στο directory + /usr/X11R6/lib/X11/fonts/TTF τρέχετε ttmkfdir \< fonts.scale +- Εγκατάσταση του xfsft, π.χ. σαν /usr/local/bin/xfs. Πρέπει να φτιάξετε και ένα configuration file, π.χ. /usr/local/etc/xfs-conf. + +Ένα sample configuration file είναι το παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + clone-self = off + use-syslog = off + + client-limit = 20 + + # Εδώ βάλτε το directory με τα ttfs. + catalogue = /usr/X11R6/lib/X11/fonts/TTF + + error-file = /tmp/xfs.errors + + # in decipoints + default-point-size = 120 + + # x,y + default-resolutions = 100,100,75,75 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στη συνέχεια προσθέστε στο rc.local του υπολογιστή σας ώστε να εκτελείται κάθε φορά που ξεκινάει, τη γραμμή:\ +/usr/local/bin/xfs -port 7100 -config /usr/local/etc/xfs-conf &\ +όπου έχετε προσαρμόσει κατάλληλα τα paths και filenames, ενώ μπορείτε να την εκτελέσετε και αυτή τη στιγμή ώστε να μη χρειάζεται reboot μέχρι να απολαύσετε τα +αποτελέσματα :-). Εάν είστε σε περιβάλλον X εκτελέστε την εντολή\ +xset +fp tcp/localhost:7100; xset fp rehash\ +και προσθέστε και τις δύο εντολές στο .xinitrc file σας, ώστε να εκτελούνται κάθε φορά που ξεκινάτε τα X-windows: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + xset +fp tcp/localhost:7100 + xset fp rehash + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αμέσως μετά από τα παραπάνω και αν τα έχετε κάνει όλα σωστά, μπορείτε να εκτελέσετε:\ +xlsfonts \| grep microsoft\ +για να δείτε όλα τα standard windows fonts τα οποία μπορείτε να χρησιμοποιήσετε κανονικά στις Χ-εφαρμογές σας! Προφανώς μπορείτε να χρησιμοποιήσετε έτσι και +όποια άλλα fonts για windows, όπως τα ελληνικά της magenta, ή άλλα. Περιττό να πούμε ότι ο συνδυασμός TTF και ελληνικών στο Linux δίνει τεράστια ώθηση στη χρήση +του από Έλληνες. Για το πως θα γραφετε ελληνικά - ενδεχομένως εκμεταλλευόμενοι τα True Type fonts - δείτε το grkbd του Γιάννη Τσακίρη ή τα grISOxkb του Δημήτρη +Μπούρα κλπ. + +CREDITS: Στον Αλέξη Ζάβρα για τα πολύτιμα URLs και τις γενικότερες κατευθύνσεις που μου έδωσε. diff --git a/content/articles/11/01_editorial.md b/content/articles/11/01_editorial.md new file mode 100644 index 0000000..9df9fda --- /dev/null +++ b/content/articles/11/01_editorial.md @@ -0,0 +1,59 @@ ++++ +title = 'Editorial' +date = '1999-01-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 11'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένας ακόμα χρόνος πέρασε. Ένας χρόνος όμως, ο οποίος δεν ήταν σαν τους άλλους. Ένας χρόνος με Magaz, ένας χρόνος που έκανε πραγματικότητα το HELLUG.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τελικά μάλλον ήταν ένας σημαντικός χρόνος για το Linux στην Ελλάδα. + +Μία μικρή ανασκόπηση θα κάνουμε εδώ, του τι έκανε το Magaz αυτό τον ένα χρόνο.\ +Έχουμε λοιπόν: + +- 10 Τεύχη. +- 10 (προφανώς) Editorials. +- 52 Άρθρα. + - 5 Linux Zone. + - 4 Real World. + - 7 Παρουσιάσεις προγραμμάτων. + - 9 Άρθρα για Ελληνικά, γραμματοσειρές, Ελλάδα. + - 6 Χιουμοριστικά άρθρα + - 7 Αναλύσεις, σκέψεις, απόψεις. + - 14 άρθρα με ρυθμίσεις - κόλπα για προγράμματα και δίκτυα. +- 94 απαντημένες ερωτήσεις. + +Μέσα σε αυτά και \"δημοσιογραφικές επιτυχίες\" όπως η παρουσίαση του KDE και του StarOffice 4.0 πέντε μόλις μέρες μετά την επίσημη ανακοίνωσή τους. Οι ρυθμίσεις +των ISPs της Ελλάδας για το XISP. Τα άρθρα για True Type γραμματοσειρές, για πλήρη Ελληνική λύση στο Latex, για οδηγίες εγκατάστασης Type 1 γραμματοσειρών στο +StarOffice, το Ghostscript και τα X-windows. Και άλλα πολλά. + +Μέσα από το Magaz ξεκίνησε η ιδέα του Ελληνικού distribution, η οποία οδήγησε με μία παράξενη μορφή χιονοστιβάδας στην ίδρυση και δραστηριοποίηση του Hellug. + +Στο Magaz, στα 10 αυτά πρώτα τεύχη, έγραψαν οι:\ +Βρυώνης Παναγιώτης, Γεωργάτος Φώτης, Εξηνταρίδης Γιάννης, Καμπριάνης Μιχάλης, Καραμανώλης Νίκος, Κεραμίδας Γιώργος, Κόκρας Νίκος, Κοτσόκαλης Κώστας, +Μαυρογεωργιάδης Ευθύμιος, Μαυρογιαννόπουλος Νίκος, Παπαδογιαννάκης Βαγγέλης, Παπακώστας Ευριπίδης, Προκοπίδης Προκόπης, Ρόζος Βαγγέλης, Σανιδά Παρασκευή, +Συρόπουλος Απόστολος, Τζέμος Δημήτρης, Τριβυζάς Σπύρος, και το Development Team της Altera.\ +Σύνολο 19 άτομα !!! + +Το Magaz ξεκίνησε από το , και απέκτησε τρία mirrors ( , , και ένα +ακόμα στο Γ.Π.Α. το οποίο απώλεσε στα τέλη του έτους), καθώς και δεύτερο \"σπίτι\" ( ). + +Το Magaz αναφέρθηκε στα περιοδικά Chip, Ram, Net. Είναι καταχωρημένο στα εξής έγκυρα sites: [Robby](http://www.robby.gr), [Phantis](http://www.phantis.gr), +[Thea](http://www.thea.gr), [Webwatcher](http://webwatcher.org) και [Linux links](http://www.linuxlinks.com). + +Η συντακτική ομάδα του Magaz αυτή τη στιγμή, αποτελείται από τα εξής μόνιμα μέλη: Βρυώνης Παναγιώτης, Γεωργάτος Φώτης, Καμπριάνης Μιχάλης, Κεραμίδας Γιώργος, +Κόκρας Νίκος, Παπαδογιαννάκης Βαγγέλης, Παπακώστας Ευριπίδης και Σανιδά Παρασκευή. + +To Magaz τέλος, έχει φτάσει να έχει κατά μέσο όρο αυτή τη στιγμή γύρω στα 60 hits την ημέρα. Και για όσους αρέσουν τα μεγάλα νούμερα, αυτό σημαίνει ότι το Magaz +το επισκεφτήκατε 22000 φορές περίπου τον χρόνο που πέρασε!!! + +Το Magaz μπαίνει με αυτό το τεύχος στον δεύτερο χρόνο λειτουργίας του. Ελπίζουμε ότι και αυτός ο χρόνος θα είναι τόσο εποικοδομητικός, όσο και ο προηγούμενος. +Ελπίζουμε επίσης, ότι θα δούμε ακόμα περισσότερα άρθρα από εσάς τους ίδιους στα τεύχη αυτού του χρόνου. + +Σας ευχόμαστε ευτυχισμένο το 1999. Εν όψει της νέας χιλιετηρίδας, να σας φέρει ότι επιθυμείτε. diff --git a/content/articles/11/02_LUGistics.md b/content/articles/11/02_LUGistics.md new file mode 100644 index 0000000..815abf7 --- /dev/null +++ b/content/articles/11/02_LUGistics.md @@ -0,0 +1,167 @@ ++++ +title = 'LUGistics - A Short Presentation' +date = '1999-01-01T00:00:00Z' +description = '' +author = 'Panayotis Vryonis mailto:vrypan@hellug.gr(mailto:vrypan@hellug.gr) Evripidis Papakostas mailto:evris@hellug.gr(mailto:evris@hellug.gr)' +issue = ['Magaz 11'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*LUGistics is an ambitious project, aiming to simplify the overall administration needed by a LUG in order to maintain member lists, running projects, news and +events, sponsors, guestbooks, questionaries, electronic votings etc. For non-english speaking LUGs, LUGistics provides a module called LEXIS for keeping a +dictionary of any translating efforts.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Introduction** +----------------------------------------------- + +**2. Itchy** +---------------------------------------- + +**3. \...and Scratchy** +--------------------------------------------------- + +- [3.1 Deciding on the tools](#ss3.1) +- [3.2 and the name.](#ss3.2) + +**4. The outcome** +---------------------------------------------- + +- [4.1 MEMB](#ss4.1) +- [4.2 PRJ](#ss4.2) +- [4.3 SPONSORS](#ss4.3) +- [4.4 LEXIS](#ss4.4) + +**5. What has to be done.** +------------------------------------------------------- + +**6. References** +--------------------------------------------- + + +### [1. Introduction]{#s1} + +When we first founded HELLUG (Hellenic Linux Users Group) it was made clear to us that one of the most time-consuming tasks we\'d have, would be keeping our +home site up to date. Almost any LUG has to maintain a list of its members (normally, continuously increasing), to gather and present all local members\' +activities and projects, to publicaly thank its sponsors and provide a means to conduct votings. Due to our WWW administrator\'s limited time, we had to come up +with a way to automate these \'trivial\' tasks as much as possible, and securely distribute the maintenance to more than one individuals. + +Another disired goal was to uniformly present all of the above, using a consistant look-and-feel through-out our web pages. + +This is the time that we come to Eric S. Raymond\'s words; \"Every \[good\] work of software starts by scratching a developer\'s personal itch\"\... + + +### [2. Itchy]{#s2} + +It was quite clear to us that the interface should be HTML-based. This way, we would be platform independent, the same set of tools is used by both the +administrators and the public. + +All our data should be kept in an SQL database (no justification needed for such an decision) but we wanted to keep our implementation database-independent. + +We decided to de-centralize the administration, breaking it down to smaller areas of responsibilities and assigning them to different individuals. So, there +should be some kind of authentication. + +In some cases, not only administrators but users also, should be able to enter data to the database (suggestions, votes, translations etc). + +Any Project (ours included) that respects itself should have a proper name. + + +### [3. \...and Scratchy]{#s3} + +### [3.1 Deciding on the tools]{#ss3.1} + +We looked around for free (in the sence of OSS) development tools running on Linux, that would fit our needs. Here is what we ame up with: + +#### mod\_php + +We chose PHP as our development tool. The language (c-like) is quite easy to learn, supports an Object-Oriented architecture, documentation is complete and +there are lots of ready-made tools to speed up the development. + +PHP is server-parsed HTML and not CGI which is considered a bigger security risk. (At least, that is what we think\...) + +#### php\_lib + +php\_lib module provides the database independency we hoped for and all the right tools for authenticating users and assigning privileges. + +#### postgeSQL + +It\'s free, it\'s stable, there are many tools, much documentation to help someone find his way around, and is well supported by php. + +#### apache + +what else ? :-) + +### [3.2 and the name.]{#ss3.2} + +Then we had to decide how this project would be called: + +#### LUGistics + +It surely sounds pompous! It also incorporates our target (LUGs) and our hellenic origin (the ending -istics which is hellenic). We also thought that our +product would be easier to promote (eeeh ???) with a name that sounds familiar. Writing it LUGisti**X** was a temptation but we resisted! + +### [4. The outcome]{#s4} + +Though LUGistics is still at an early stage (at the time this is written, v0.45), it is quite functional and four \"modules\" are already present. In order to +create a uniform look\'n\'feel an d avoid rewritting the same code again and again, we created an API that is used by all modules. As an extra benefit from this +approach changing the look in all pages is a piece of cake. + +You may view screenshots here. + +### [4.1 MEMB]{#ss4.1} + +Using the MEMB (members) module, the administrator is able to insert, delete and update members in the database. These data include (apart from the expected +name, e-mail, homepage, occupation, etc.) a photo and a short CV. + +Users are able to query the database and get detailed results. Privacy is respected by keeping \"sensitive\" information, such as telephone numbers, unavailable +to the public. ![](/11/img/members1.jpeg) + +### [4.2 PRJ]{#ss4.2} + +Like MEMB, PRJ (projects) lets the administrator insert/update/remove data about projects. Each project has a title,description and numerous URLs and news.A URL +is considered to be any Uniform Resource Locator such as e-mails, web pages and ftp sites. Special icons are automatically assigned to each type. + +MEMB and PRJ nicelly cooperate and when you click on the e-mail url of a member, you get the full member\'s card. + +There is also a special view, where one can see the latest news from all projects. ![](/11/img/projects1.jpeg) + +### [4.3 SPONSORS]{#ss4.3} + +SPONSORS provide an easy way to administer and browse sponsor-related information. The administrator can easily add/remove/edit sponsors. It is so simple! + +### [4.4 LEXIS]{#ss4.4} + +LEXIS is quite a complicated module. The idea is to create an electronic dictionary that will be used as a reference by any translation effort (believe it or +not, there ARE non-english-speaking countries!!!). Currently, a user can search the database given an english or a greek word, suggest new ones and submit new +synonyms for existing ones. The administrator (or the responsible team), apart from inserting, deleting and editing a word\'s data can also incorporate or +reject suggestions. + +Special care has been taken to prevent uncontrolled number of suggestions that would flood the database. + + +### [5. What has to be done.]{#s5} + +Lots of things! + +First of all, we want to clean up our code. As we used PHP and phplib, we found out many things that were not obvious at the time we started writting the code. +So, older code is a bit incompatible (from a developer\'s and not a user\'s point of view). + +Then we have to introduce some kind of user and privilege management for the administrator, since right now there are only two kind of users, public and admins +(all admins have the same privileges\...) + +When the above will be done, we will release the code under GPL (of course) . + +Install LUGistics on our server (www.hellug.gr) to see if it can really do what it is built for. + +And finally, keep on developing new modules (like VOTE)\... + + +### [6. References]{#s6} + +- The home site of PHP is http://www.php.org/. +- we found phplib at http://phplib.shonline.de/ +- Information about PostgreSQL can be found at http://www.postgresql.org/ + diff --git a/content/articles/11/03_happening.md b/content/articles/11/03_happening.md new file mode 100644 index 0000000..976937d --- /dev/null +++ b/content/articles/11/03_happening.md @@ -0,0 +1,117 @@ ++++ +title = 'Χριστουγεννιάτικο Happening του HELLUG' +date = '1999-01-01T00:00:00Z' +description = '' +author = 'Βούλα Σανιδά(mailto:voulariba@hellug.gr)' +issue = ['Magaz 11'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*To HELLUG (Hellenic Linux Users Group), στις 19 Δεκέμβρη 1998 διοργάνωσε υπαίθριο Χριστουγεννιάτικο happening στη Στουρνάρη με σκοπό να μαζευτούν, να +γνωριστούν, και να ενημερωθούν οι ενδιαφερόμενοι για το Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Η γενική ιδέα** +------------------------------------------------ + +**2. Το Υλικό** +------------------------------------------- + +**3. Η ώρα της Αλήθειας** +----------------------------------------------------- + +**4. Μεθεόρτεια** +--------------------------------------------- + +**5. Τελικά \...** +---------------------------------------------- + + +### [1. Η γενική ιδέα]{#s1} + +Επιλέξαμε αυτό το μέρος γιατί η Στουρνάρη αποτελεί την μέκκα των κομπιουτεράδων και αυτή τη μέρα επειδή ήταν το τελευταιο Σάββατο πριν τα Χριστούγεννα και πολύς +κόσμος είχε κατέβει στην Αθήνα για ιερό προσκύνημα. + +Ο καιρός, παρά τις δυσοίωνες προβλέψεις, ήταν αίθριος και αυτό επιβεβαιώνει κάτι που όλοι από καιρό γνωρίζαμε : ο Θεός είναι Linuxας ;-) + + +### [2. Το Υλικό]{#s2} + +Κατά την εκδήλωση, μοιράστηκε ενημερωτικό υλικό, ερωτηματολόγια, καθώς και δωρεάν Linux CDs στους ενδιαφερόμενους. Συγκεκριμένα : + +- 200 CDs Linux +- 500 ερωτηματολόγια +- 500 ενημερωτικά φυλλάδια Linux, HELLUG +- 500 διαφημιστικά φυλλάδια SuSE +- 100 διαφημιστικά φυλλάδια RedHat +- 10 τεύχη Linux Journal +- Τσίπουρο +- Χαλβάς +- Λουκούμια + +Τα CDs που μοιράσαμε αποτελούν κατά βάση προσφορά της SuSE που φάνηκε ιδιαίτερα ευαισθητοποιημένη και πρόθυμη να συνδράμει. Μερικά ακόμα συγκεντρώθηκαν από +διάφορους Linuxάδες, οι οποίοι έχασαν το χρόνο τους κάνοντας αντίγραφα διαφόρων Linux distributions ή και δώρισαν δικά τους (παλαιότερα) Linux Distributions που +δεν χρειάζονταν. Η εταιρεία RedHat έστειλε επίσης και αυτή την βοήθεια της που εστιαζόταν κυρίως σε έντυπο υλικό, αυτοκόλλητα και ελάχιστα πακέτα Linux. + +Τα πυρομαχικά (Τσίπουρο, Χαλβάς, Λουκούμια) προσφερθηκαν από τον συνLinuxa Φωτη Γιαννούλα (εκ Βόλου), τον οποίο και ευχαριστούμε θερμά για την συμμετοχή του. + + +### [3. Η ώρα της Αλήθειας]{#s3} + +Η εκδήλωση σημείωσε αναπάντεχη επιτυχία. Εμεις (οι διοργανωτές) μαζευτήκαμε κατά τις 10 (2 ώρες πριν) ώστε να κάνουμε τις απαραίτητες ετοιμασίες (πάγκος, CDs, +πανώ, τοποθέτηση του πιγκουίνου κλπ). Από εκείνη ήδη την ώρα είχαν αρχίσει και εμφανίζονταν άτομα (κατά κύριο λόγο αποσταλμένοι τρίτων από επαρχία) που ζητούσαν +προκαταβολικά υλικό για τους φίλους/συγγενείς κλπ που δυστυχώς δεν έχουν κάποιο μεγάλο Computer Store ή βιβλιοπωλείο που να διαθέτει Linux Distribs στην περιοχή +τους. (μάλιστα τις τελευταιες μέρες είχαμε ήδη δεχθεί πάνω από 100 κλήσεις, όλες με το ίδιο θέμα : ταχυδρομική αποστολή Linux CDs και εντύπων στην επαρχία). + +Το βαρύ πυροβολικό μας για την επιτυχή έκβαση του happening αποτέλεσε ο (γιγαντο)πιγκουίνος μας (περίπου 1.20m) από χαρτοπολτό, ο οποίος συγκατοικει με δύο από +τα μέλη του HELLUG (Ευριπίδης Παπακώστας, Βούλα Σανιδά), το καπέλο πιγκουίνος του Αντιπροέδρου (φτιαγμένο από πετσέτα θαλάσσης), τα φοβερά πανώ του Θοδωρή +Σολδάτου καθώς και τα Linux related μπλουζάκια των μελών. Τέλος, η συμμετοχή του Άγιου Βασίλη (Βούλα Σανιδά) έδωσε άλλον αέρα στην ομάδα. + +![](/11/img/Hap6.jpg) + +![](/11/img/Hap8.jpg) + +![](/11/img/Hap1.jpg) + +Η σταδιακή συγκέντρωση των ενδιαφερομένων ήταν απίστευτη. Στις 12:00 που αρχίσαμε να μοιράζουμε τα υλικά, έγινε ΠΑΝΙΚΟΣ. + +![](/11/img/Hap15.jpg) + +![](/11/img/Hap10.jpg) + +Φυσικά και τα υλικά που είχαμε δεν φτάσαν για όλους (μια που υπολογίζουμε πως το κιόσκι μας πολιορκήθηκε συνολικά από περίπου 2.000 άτομα). Το θετικό της +υπόθεσης ήταν πως ο κόσμος απλά αρνιόταν να απομακρυνθεί από τον χώρο, είτε είχε πάρει CD και φυλλάδια, είτε όχι, και όλοι συζητούσαν με όλους. Ολοι επίσης ήταν +πρόθυμοι να συμπληρώσουν τα ερωτηματολόγια μας, ώστε να έχουμε μια γενική εικόνα του ποιοί και γιατί ενδιαφέρθηκαν (εμπειρία, επάγγελμα, ηλικία, υπολογιστης, +ενδιαφέρον για συμμετοχή κλπ). + + +### [4. Μεθεόρτεια]{#s4} + +Τα συμπεράσματά μας είναι τα εξής: + +- Αποτέλεσε μια πολύ καλή ευκαιρία να συναντηθούμε μεταξύ μας, μέλη HELLUG ή μη, Linuxαδες ή όχι. Διασκεδάσαμε αρκετά (βοήθησε το τσίπουρο, τα Linux gadgets + μας και το μετά-το-happening-τσιμπούσι). +- Δώθηκε η ευκαιρία σε πολλούς ανθρώπους να καταλάβουν τι ειναι το Linux, η φιλοσοφία του, πως αναπτύσσεται, σε τι θα μπορούσε να τους βοηθήσει, πως θα + μπορούσαν να βοηθήσουν. +- Το ίδιο το γεγονός και η προσέλευση του κόσμου (που για λίγο) διέκοψε ακόμα και την κυκλοφορία των αυτοκινήτων στη Στουρνάρη) αποτέλεσε μια τρανταχτή + εκδήλωση δύναμης στα γύρω μαγαζιά (και ιδιαίτερα στα \*γνωστά\* βιβλιοπωλεία της Στουρνάρη, που ειδικά για εκείνη τη μέρα έκαναν μεγάλες εκπτώσεις στα Linux + προιόντα τους). Ισως αποφασίσουν να φέρνουν πλεον ακόμα περισσότερα Linux προιόντα, δίνοντας μας έτσι ακόμα περισσοτερες επιλογές. Το θέμα καλύφθηκε και από + την τηλεόραση (ΕΤ3). +- Γνωριστήκαμε με δύο από τους αντιπροσώπους της SuSE (Αθήνας και Θεσσαλονίκης) οι οποίοι είναι πρόθυμοι να βοηθήσουν το Linux και πιθανόν να μας στηρίξουν σε + τέτοιες κινήσεις στο μέλλον. Ακόμα μιλήσαμε με μαγαζάτορες που έχουν πλέον αρχίσει να σκέφτονται την προοπτική των preinstalled Linux boxes (όπως έχουν ήδη + κάνει καιρό τώρα κάποιοι στο εξωτερικό). + + +### [5. Τελικά \...]{#s5} + +Πολλοί είναι επιφυλακτικοί για το αν τέτοιες κινήσεις πραγματικά οφελούν την πρόοδο του Linux. Η αλήθεια είναι πως από όσους το πήραν, λίγοι θα το στήσουν, +λιγότεροι θα το συμπαθήσουν, ακόμα λιγότεροι θα το μάθουν και ελάχιστοι θα βοηθήσουν με την σειρά τους την κοινότητα του Linux. Αλλά και μόνο το γεγονός πως +αυτοί οι άνθρωποι ήρθαν, περίμεναν, συζητησαν δείχνει πως έχουν κάποια όρεξη, περιέργεια και επιμονή, που είναι έτσι και αλλοιώς προαπαιτούμενα Linuxαδικα +χαρακτηριστικά. + +οι δικές μας εντυπώσεις από το happening ήταν πάντως θετικότατες, αποζημιωθήκαμε για κάθε λεπτό της προετοιμασίας μας από τη συμμετοχή και το ενδιαφέρον του +κόσμου, και αν υπάρξει μελλοντικά παρόμοια σκέψη για αντίστοιχη διοργάνωση θα χαρούμε να βοηθήσουμε\.... + diff --git a/content/articles/11/04_ote.md b/content/articles/11/04_ote.md new file mode 100644 index 0000000..f73d1be --- /dev/null +++ b/content/articles/11/04_ote.md @@ -0,0 +1,215 @@ ++++ +title = 'Ο ΟΤΕ μας ενώνει;' +date = '1999-01-01T00:00:00Z' +description = '' +author = 'Ομάδα αντίδρασης από το Hack.gr(mailto:action-ote@hack.gr)' +issue = ['Magaz 11'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το κείμενο που ακολουθεί είναι το κείμενο που συντάκτηκε από τα μέλη της λίστας [action-ote](mailto:action-ote@hack.gr)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Συνυπογράφεται από τους κάτωθι συντελεστές του Magaz (με αλφαβητική σειρά): + +- [Καμπριάνης Μιχάλης](mailto:kabrianis@hellug.gr) +- [Παπαδογιαννάκης Βαγγέλης](mailto:papas@hellug.gr) +- [Παπακώστας Ευριπίδης](mailto:evris@hellug.gr) +- [Σανιδά Παρασκευή](mailto:sanida@hellug.gr) + +**1. ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ** +------------------------------------------------------ + +**2. Η ΣΗΜΕΡΙΝΗ ΚΑΤΑΣΤΑΣΗ ΤΗΣ ΕΛΛΑΔΑΣ** +------------------------------------------------------------- + +**3. ΖΗΤΑΜΕ/ΠΡΟΤΕΙΝΟΥΜΕ** +----------------------------------------------- + + +### [1. ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΠΡΟΒΛΗΜΑΤΟΣ]{#s1} + +1. Ακριβή κοστολόγηση της πρόσβασης στο Δίκτυο + + Η ήδη ακριβή (λόγο χρονοχρέωσης) πρόσβαση στη λεωφόρο των πληροφοριών, γίνεται ακόμα πλέον σχεδόν απαγορευτική, όπως φαίνεται και στον πίνακα που ακολουθεί. + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ Ώρες αιχμής\ Ώρες μη αιχμής\ + ΚΟΣΤΟΣ ΜΙΑΣ ΩΡΑΣ (08:00-23:00) (23:00-08:00) + + Παλιά τιμολόγια (20μ. \* 13δρχ) + ΦΠΑ = 306.8 δραχμές (8μ. \* 13δρχ) + ΦΠΑ = 122.72 δραχμές + + Νέα τιμολόγια (60μ. \* 6 δρχ) + ΦΠΑ = 424.8 δραχμές (30μ. \* 6 δρχ) + ΦΠΑ = 212.4 δραχμές + + Αύξηση 118 δραχμές (38.46%) 89.68 δραχμές (73.08%) + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + + Την ίδια στιγμή που τα τιμολόγια αυξάνονται, ο ΟΤΕ παρέχει αποκλειστικά στη θυγατρική του επιχείρηση ΟΤΕnet, μέσω των ειδικών ενιαίων αριθμών κλήσης (0965 + χχχχχ) μειώσεις στην τιμή πρόσβασης: + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ Ώρες αιχμής Ώρες μη αιχμής + ΚΟΣΤΟΣ 1 ΩΡΑΣ + + Άλλοι φορείς 424.8 δραχμές 212.4 δραχμές + + ΟΤΕnet 283.2 δραχμές 70.8 δραχμές + + Διαφορά 141.6 δραχμές (+50%) 141.6 δραχμές (+200%) + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + + Επιπρόσθετα στην ΟΤΕnet οι ώρες μη αιχμής επεκτείνονται κατά μία ώρα (ισχύουν μετά τις 22:00 και όχι μετά τις 23:00). Έτσι στο διάστημα 22:00-23:00 η χρέωση + σε ΟΤΕnet/άλλους είναι 70.8/424.8 δραχμές αντίστοιχα (+500%). + +2. Επιπτώσεις στον υγιή ανταγωνισμό + + Το γεγονός αυτό είναι πιθανό να οδηγήσει σε μονοπωλιακές καταστάσεις στο χώρο της τηλεφωνικής πρόσβασης στο Internet, με δραματικές επιπτώσεις στους τομείς + + - του υγιούς ανταγωνισμού, + - της απασχόλησης εργαζομένων, + - της πραγματοποίησης επενδύσεων, + - της δυνατότητας επιλογής των καταναλωτών, + - της ποιότητας των παρεχόμενων υπηρεσιών. + + Η δυνατότητα απόκτησης του ειδικού ενιαίου αριθμού κλήσης είναι πιθανό να δοθεί και σε άλλους παροχείς, αλλά εκτός του ότι ο Οργανισμός κωλυσιεργεί (όπως + καταγγέλουν και άλλοι μεγάλοι παροχείς) και μάλιστα έχει ήδη τιμωρηθεί από την Εθνική Επιτροπή Τηλεπικοινωνιών με πρόστιμο 80 εκατομμυρίων δραχμών, αυτή η + δυνατότητα περιορίζεται μόνο σε μεγάλες εταιρείες (που πληρούν κάποια τεχνικά κριτήρια). Δηλαδή μικρές εταιρείες (όπως για παράδειγμα όλες οι επαρχιακές), + ακαδημαϊκά και ερευνητικά ιδρύματα, ινστιτούτα, μη κερδοσκοπικοί οργανισμοί, εταιρίες που προσφέρουν υπηρεσίες πρόσβασης στους εργαζόμενούς τους + αποκλείονται. + + Οι μικρές εταιρίες απειλούνται άμεσα με κλείσιμο με προφανείς συνέπειες στον τομέα της απασχόλησης, η έρευνα από πανεπιστήμια, τεχνολογικά και ερευνητικά + ιδρύματα εμποδίζεται, η τηλε-εργασία καθίσταται απαγορευτική. + +3. Επιπτώσεις στην πληροφόρηση και μόρφωση των πολιτών + + Τα ακριβά τιμολόγια, αποκλείουν από την τηλεφωνική πρόσβαση στο Δίκτυο: + + - τους κατοίκους ημιαστικών και αγροτικών κέντρων, που καλούνται να πληρώνουν υπεραστικές κλήσεις για πρόσβαση στην μεγαλύτερη σύγχρονη πηγή πληροφοριών, + - τις κοινωνικές τάξεις με χαμηλά εισοδήματα, που δεν έχουν την πολυτέλεια να πληρώνουν υπέρογκα ποσά για πρόσβαση στο Internet (πρόσβαση 2 ωρών ημερησίως + επιβαρύνει το λογαριασμό του ΟΤΕ κατά περίπου 50.976 δραχμές), + - τους φοιτητές και σπουδαστές, κυρίως αυτούς που φοιτούν μακριά από τον τόπο μόνιμης κατοικίας τους και αυτούς που χρησιμοποιούν το Internet ως κύρια + πηγή συλλογής πληροφοριών. + + Είναι άδικο αλλά και επικίνδυνο η πρόσβαση στο Διαδίκτυο να είναι προνόμιο των λίγων (\"έχοντες και κατέχνοντες\"). Κορυφαίοι μελετητές χαρακτηρίζουν όσους + δεν έχουν πρόσβαση στο Internet ως τους \"αναλφάβητους του μέλλοντος\"). Ο Nicholas Negroponte χαρακτηρίζει την πρόσβαση στο Δίκτυο \"θεμελιώδες ανθρώπινο + δικαίωμα\" και καλεί τους τηλεπικοινωνιακούς οργανισμούς να παράσχουν χρονικά ανεξάρτητη κοστολόγηση. Η Συμβουλευτική Επιτροπή Τηλεπικοινωνιών της Ιρλανδίας + ( [Advisory Commitee on Telecommunications](http://act.iol.ie/)) σε μελέτη της σημειώνει τις σημαντικές αρνητικές επιπτώσεις της χρονοχρέωσης στην ανάπτυξη + του ηλεκτρονικού εμπορίου. + + +### [2. Η ΣΗΜΕΡΙΝΗ ΚΑΤΑΣΤΑΣΗ ΤΗΣ ΕΛΛΑΔΑΣ]{#s2} + +Με βάση την πιο πρόσφατη έρευνα της ΟΤΕnet, ο αριθμός των χρηστών Internet στη χώρα μας είναι 130.000 και από αυτούς οι 90.000 (69%) είναι συνδεδεμένοι μέσω +τηλεφώνου. Ο πολύ μικρός αυτός αριθμός (ποσοστό 1,3% επί του πληθυσμού) καθιστά την Ελλάδα ουραγό στην Ευρωπαϊκή Ένωση, αλλά και πολύ πίσω σε σχέση με άλλες μη +αναπτυγμένες χώρες. Χάριν συγκρίσεως αναφέρεται ότι τα σημερινά ανάλογα ποσοστά στο Κατάρ και το Κουβέιτ κυμαίνονται ήδη μεταξύ 2,15% και 3,1%. Ούτε λόγος +βέβαια για τις ΗΠΑ και τον Καναδά, όπου ο αριθμός των χρηστών Internet με βάση μελέτη της Nielsen Media Research ξεπερνάει τα 80.000.000. + +Αξιοσημείωτο επίσης είναι ότι ο ρυθμός αύξησης των χρηστών στην Ελλάδα είναι πολύ χαμηλότερος σε σχέση με τον αντίστοιχο σε αναπτυγμένες και αναπτυσσόμενες +χώρες, και με τα νέα τιμολόγια του ΟΤΕ είναι φυσικό ο ρυθμός αυτός να ελαττωθεί ακόμα περισσότερο. + +Το κυβερνητικό σχέδιο [Η Ελλάδα στην Κοινωνία της Πληροφορίας - Στρατηγική και Δράσεις](http://www.primeminister.gr/infosoc/), Νοέμβριος 1998 επισημαίνει την +ανάγκη να διαφυλάξει η πολιτεία τον υγιή ανταγωνισμό, την παροχή υπηρεσιών υψηλής ποιότητας με το μικρότερο δυνατό κόστος, την προώθηση της τηλε-εργασίας, την +ελεύθερη πρόσβαση στα δίκτυα και την πληροφορία για όλους, χωρίς διακρίσεις και ανισότητες. Χαρακτηριστικά είναι τα ακόλουθα αποσπάσματα: + +- \"Η πολιτεία έχει σημαντικό ρυθμιστικό και κανονιστικό ρόλο στη διαμόρφωση της αγοράς στην Κοινωνία της Πληροφορίας, τον οποίο εκπληρώνει με τη δημιουργία + ενός ευέλικτου και εξελισσόμενου θεσμικού πλαισίου, καθώς και τη διαφύλαξη συνθηκών υγιούς ανταγωνισμού.\" + + *Είναι γεγονός ότι ο πανελλαδικός αριθμός κλήσης (0965) είναι ένα βήμα προς το μέλλον. Είναι μία λύση στο πρόβλημα απομόνωσης της ελληνικής επαρχίας από τα + τεκταινόμενα στην τεχνολογία. Δυστυχώς όμως, σύμφωνα με την ΕΕΤ (5/10/98), αυτό ακριβώς αποτελεί \"αθέμιτο ανταγωνισμό\" εφόσον παρέχεται μόνο στην ΟΤΕnet. + Πρέπειλοιπόν η πολιτεία να παρέμβει, και να υποχρεώσει τον ΟΤΕ να παραχωρήσει σε άλλες εταιρείες, πανεπιστήμια, ιδιώτες, ότι υπηρεσίες ζητούν και έχει ο ΟΤΕ + τα τεχνολογικά μέσα να δώσει. Για να μην μας οδηγήσει το μονοπώλιο του ΟΤΕ σε ένα εξαναγκαστικό μονοπώλιο της ΟΤΕnet.* + +- \"Στη χώρα μας σήμερα, τείνει να δημιουργηθεί ένας διαχωρισμός ανάμεσα σε λίγους (αλλά ραγδαία αυξανόμενους) χρήστες πληροφορικής ή δικτύων επικοινωνίας + όπως το Internet και σε πολλούς άλλους που αντιμετωπίζουν τις νέες τεχνολογίες στην καλύτερη περίπτωση σαν μυστήριο και στη χειρότερη σαν κίνδυνο για το + μέλλον τους.\" + + *Αυτή η διαφορά νοοτροπίας είναι σε ένα βαθμό θέμα διαφορετικών γενεών και δεδομένης της μεγαλύτερης εξοικείωσης των νέων με τις νέες τεχνολογίες με την + πάροδο του χρόνου θα εξαλειφθεί. Η πολιτεία έχει όμως σημαντικό χρέος ενημέρωσης και διαπαιδαγώγησης για τη διευκόλυνση αυτής της μεταβατικής περιόδου.\ + Και βέβαια είναι απαραίτητο να κατανοήσουν όλοι τις δυνατότητες που μας προσφέρουν οι νέες τεχνολογίες, η πληροφορική και τα δίκτυα. Μεταξύ των λύσεων που + υπάρχουν και προτείνονται, η πιο σημαντική ίσως δεν είναι τόσο η ενημέρωση, όσο ο μη αποκλεισμός κάποιων κοινωνικών ομάδων από την πληροφορική. Ήδη, με την + χρονοχρέωση, οι ώρες απασχόλησης του απλού πολίτη με το Internet έχουν μειωθεί. Ο απλός πολίτης, ο άνεργος, ο στρατευμένος, ο εργαζόμενος σε μία εταιρεία + που δεν έχει σχέση με υπολογιστές, δίκτυα και τηλεπικοινωνίες, είναι καταδικασμένος να πληρώνει τα υπερβολικά ληστρικά τιμολόγια του ΟΤΕ για την ενημέρωσή + του.* + +- \"Στη σύγχρονη ελληνική κοινωνία, η Δημόσια Διοίκηση έχει την υποχρέωση να παρέχει στους πολίτες και στις επιχειρήσεις υπηρεσίες υψηλής ποιότητας, σε + σύντομο χρόνο και με το μικρότερο δυνατό κόστος. Οι τεχνολογίες πληροφορικής και επικοινωνιών προσφέρουν τα απαραίτητα εργαλεία για την επίτευξη αυτού του + σκοπού, ενώ ταυτόχρονα διευκολύνουν τη λειτουργία της Δημόσιας Διοίκησης σε πλαίσιο διαφάνειας και δημοκρατικής συμμετοχής.\" + + *Σίγουρα, σε καμία περίπτωση δεν θα μπορούσαν τα νέα τιμολόγια του ΟΤΕ να θεωρηθούν το χασμηλότερο δυνατό κόστος, ιδιαίτερα δε για τον χρήστη του Internet. + Η εικονική μείωση τιμών με την οποία \"βομβαρδιστήκαμε\" τις τελευταίες μέρες, λόγω της μείωσης της αξίας της αστικής μονάδας χρέωσης από 13 δραχμές ανά + τρίλεπτο σε 6 δραχμές ανά λεπτό, δεν ισχύει στην περίπτωση χρήσης του Internet, εφόσον κανένας δεν συνδέεται για λιγότερο από μισή ώρα. Συνεπώς, μιλάμε για + αυξήσεις της τάξης του 38% για τις ώρε αιχμής, και 85% για τις ώρες μη αιχμής. Μείωση παρατηρείται μόνο σε χρήστες της υπηρεσίας πανελλαδικού αριθμού + κλήσης, η οποία όπως προαναφέρθηκε ΔΕΝ δίδεται σε όσους πρέπει. Και αυτή όμως η μείωση δεν είναι αρκετή.* + +- \"Οι τεχνολογίες πληροφορικής και επικοινωνίας δίνουν τη δυνατότητα σε πολλούς εργαζόμενους να εργαστούν από το σπίτι τους ή από άλλο χώρο σε απόσταση από + τον συνήθη χώρο εργασίας τους, με τη βοήθεια ενός υπολογιστή και μίας τηλεφωνικής σύνδεσης. Παρότι το ποσοστό των εργαζομένων οι οποίοι χρησιμοποιούν + παρόμοιες δυνατότητες παραμένει μικρό στη χώρα μας, η διεθνής εμπειρία δείχνει ότι ως μορφή οργάνωσης της εργασίας η τηλε-εργασία θα εξαπλωθεί. (..) + Επιπλέον, η τηλε-εργασία μπορεί να οδηγήσει σε χωροταξική αναδιανομή της αγοράς εργασίας και σε διαφοροποίηση των δραστηριοτήτων μετατοπίζοντας + δραστηριότητες σε λιγότερο ευνοημένες περιοχές.\" + + *Όπως πολύ σωστά αναφέρει η παραπάνω παράγραφος, η τηλεεργασία, θα εξαπλωθεί, αλλά με κόστος 2.880 δραχμές + Φ.Π.Α. ανά οχτάωρο (σύνολο 3.400 δραχμές, + δηλαδή 50% του ημερομισθίου), και με τα ISDN να κοστίζουν ακόμα περισσότερο (και ως συνδέσεις από τον ΟΤΕ, αλλά και με το πάγιο των 5.000 δραχμών ανά μήνα), + υπάρχει κανένας άνθρωπος που να πιστεύει ότι η τηλεεργασία θα αναπτυχθεί στην Ελλάδα; Οι δε μισθωμένες γραμμές είναι ακόμα ακριβότερες. Η διεθνής εμπειρία, + βασίζεται σε άλλα στοιχεία, όπως ότι στην Αυστραλία ΔΕΝ υπάρχει χρονοχρέωση, σε πολλές πολιτείες της Αμερικής η χρέωση είναι ΜΗΔΕΝΙΚΗ για συνδέσεις + δεδομένων, στην δε Ευρώπη, σε όλες σχεδόν τις χώρες υπάρχουν ειδικές τιμές για συνδέσεις με το Internet. Ο ΟΤΕ που μας ενώνει, αποτελεί έτσι άλλη μία φορά + τροχοπέδη στην εξέλιξη της Ελλάδας. Η λύση σε αυτό το πρόβλημα είναι η εξής απλή: δωρεάν συνδέσεις δεδομένων. Είτε αυτό σημαίνει σε πανελλαδικό αριθμό + κλήσης, ή σε τηλεφωνα που θα χορηγήσουν οι ίδιες οι εταιρείες που ενδιαφέρονται για τηλεεργασία, οι ISPs που παρέχουν εικονικά ιδιωτικά δίκτυα (VPN), οι + ανώτερες και ανώτατες σχολές. Και αυτό να ισχύσει, ανεξάρτητα της απόστασης, για να μπορέσει και ο εργαζόμενος να επιλέξει να μένει έξω από την Αθήνα, στην + επαρχία. Γιατί όπως πολύ σωστά αναφέρεται, θα δοθεί η δυνατότητα στον επιλέγοντα να εργαστεί με αυτό τον τρόπο, να μένει σε άλλα μέρη της Ελλάδας, σε νησιά, + σε πιο \"ανθρώπινες\" πόλεις από την Αθήνα.* + +- \"Η πρόσβαση στα δίκτυα και την πληροφορία θα πρέπει να είναι ελεύθερη για τους χρήστες και για όσους επιθυμούν να παρέχουν υπηρεσίες.\" + + *Και εδώ φτάνουμε στη λογική του παραλόγου, να υπάρχουν ήδη σε όλο τον κόσμο δωρεάν πληροφορίες στο διαδίκτυο, τις οποίες ο μέσος Έλληνας δεν μπορεί να + προσπελάσει, λογώ του κόστους του τηλεφωνήματος!!! Αν αυτό δεν αποτελεί πισωγύρισμα, τι ακριβώς είναι;* + +- \"Ρυθμίσεις για διασύνδεση με βάση τη διαφάνεια, την αντικειμενικότητα, τη χωρίς διακρίσεις αναλογικότητα και τη δημιουργία πολλαπλών κόμβων σε όλη την + Ελλάδα. Η τιμολόγηση της διασύνδεσης πρέπει να είναι προσανατολισμένη στο κόστος, λαμβάνοντας υπόψη τη διεθνή πρακτική.\" + + *Ήδη, έξω από την Αθήνα το κόστος της σύδεσης στο δίκτυο είναι απαγορευτικό. Το ίδιο περίπου γίνεται τώρα και για την Αθήνα. Η τιμολόγηση της διασύνδεσης + ΔΕΝ είναι προσανατολισμένη στο κόστος, αντίθετα είναι προσανατολισμένη στην αύξηση κέρδων του ήδη κερδοφόρου ΟΤΕ. Η διεθνής πρακτική δε, όπως προαναφέρθηκε, + είναι χαμηλότερες χρεώσεις για συνδέσεις δεδομένων. Μία απλή σύγκριση του μισθού του μέσου Έλληνα, και του μισθού του μέσου Ευρωπαίου, και αντίστοιχα, του + κόστους χρήσης του Internet, θα αποδείξει και στον πιο κακόπιστο, ότι τα παραπάνω αποτελούν δυστυχώς μόνο λόγια.* + +- \"Πρόσβαση για όλους σε νέες υπηρεσίες επικοινωνίας και πληροφόρησης. Η ικανότητα συμμετοχής των πολιτών στα κοινά προϋποθέτει την πρόσβαση στις πηγές + πληροφόρησης. Η διάθεση των πληροφοριών, η πρόσβαση στις πηγές πληροφόρησης είναι λειτουργική βάση μιας πλουραλιστικής δημοκρατίας, καθώς μόνο ο + πληροφορημένος πολίτης μπορεί να είναι ενεργός πολίτης. Η Κοινωνία της Πληροφορίας στοιχειοθετεί υπ\' αυτήν την έννοια τμήμα της «ανοιχτής κοινωνίας». Η + εξέλιξη της Κοινωνίας της Πληροφορίας δεν πρέπει να οδηγήσει σε ανισότητες και «αναλφαβητισμούς», σε διάκριση των πολιτών σε έχοντες πρόσβαση στη γνώση και + την πληροφόρηση και σε πληροφοριακά πληβείους.\" + + *Αυτό ακριβώς είναι και το σημείο το οποίο θίγουμε.* + + - *Απομονώνεται η επαρχία με τον εξαναγκασμό υπεραστικής χρέωσης* + - *Απομονώνονται κοινωνικές ομάδες της επαρχίας ακόμα και με τον πανελλαδικό αριθμό κλήσης (μετά τις 10 το βράδυ αστική χρέωση, που για πολλούς αυτό δεν + είναι βολικό)* + - *Απομονώνονται ταξικές ομάδες (χαμηλόμισθοι, και όχι μόνο, όταν το μήνα κοστίζει ΜΟΝΟ η τηλεφωνική σύνδεση στο Internet περί τις 20.000 δραχμές με + μετριοπαθείς προβλέψεις περί των ωρών χρήσης του Internet).* + + *Τελικά αυτές οι ανισότητες και οι \"αναλφαβητισμοί\", αντί να καταπολεμούνται ενθαρρύνονται και διατρανώνονται. Η πολιτεία οφείλει να υλοποιήσει όσα + (σωστά) επισημαίνει στο κείμενο αυτό. Είναι εμφανές ότι τα τιμολόγια του ΟΤΕ (τόσο τα ισχύοντα, όσο και ακόμη περισσότερο αυτά που θα τεθούν σε εφαρμογή από + τον Μάρτιο του 1999) κινούνται στην εντελώς αντίθετη κατεύθυνση. Είναι επιβλητική ανάγκη να ληφθούν επειγόντως μέτρα, πριν τεθούν στο περιθώριο της λεωφόρου + πληροφοριών οι πολίτες αυτής της χώρας, πριν μείνει η χώρα μας έξω από το τρένο της ανάπτυξης.* + + +### [3. ΖΗΤΑΜΕ/ΠΡΟΤΕΙΝΟΥΜΕ]{#s3} + +1. Σταθερή (χωρίς χρονονοχρέωση) σύνδεση μέσω τηλεφώνου στο Internet Αυτό μπορεί να γίνει: + - είτε μέσω ειδικών αριθμών κλήσης (0965) σε όλους τους φορείς πρόσβασης στο Internet (εταιρείες παροχής υπηρεσιών Internet, ακαδημαϊκά ιδρύματα, + εταιρείες/ιδρύματα που παρέχουν υπηρεσίες στους υπαλλήλους/μέλη τους), + - είτε μέσω δημιουργίας πακέτου τύπου \"Friends and Family\" από τον ΟΤΕ, που θα επιτρέπει σε όλους τους πελάτες του να επιλέγουν κάποιο αριθμό τηλεφώνων, + για τα οποία θα χρεώνονται με σταθερή και χρονικά ανεξάρτητη χρέωση. Οι ρυθμίσεις πρέπει να αφορούν όλους τους Έλληνες πολίτες, ανεξάρτητα του τόπου + κατοικίας τους. Είναι απαράδεκτο να χρεώνονται υπεραστικά οι κάτοικοι μικρών πόλεων και χωριών, στα οποία δεν υπάρχουν κόμβοι πρόσβασης. +2. Μείωση του Φόρου Προστιθέμενης Αξίας στους λογαριασμούς του ΟΤΕ Το ίδιο μέτρο ίσχυσε (με θετικά αποτελέσματα στη μείωση του πληθωρισμού) και στους + λογαριασμούς της ΔΕΗ. +3. Μείωση της τιμής προχωρημένων υπηρεσιών. Στην Ελλάδα οι γραμμές υψηλής ταχύτητας τιμολογούνται πολύ πιο ακριβά σε σχέση με τις υπόλοιπες Ευρωπαϊκές χώρες. + Το γεγονός αυτό συνιστά τροχοπέδη τόσο στην ανάπτυξη του Internet και των εφαρμογών του στη χώρα μας, όσο και στη βελτίωση των παρεχόμενων υπηρεσιών. +4. Επιδότηση της τηλε-εργασίας. Η επιδότηση (σε εταιρείες που παρέχουν επιλογή τηλε-εργασίας και εργαζόμενους που εργάζονται με αυτό τον τρόπο) οδηγεί σε νέες + μορφές απασχόλησης, όπως και σε άλλες αναπτυγμένες χώρες στον κόσμο. + diff --git a/content/articles/11/05_mailbox.md b/content/articles/11/05_mailbox.md new file mode 100644 index 0000000..57c72d6 --- /dev/null +++ b/content/articles/11/05_mailbox.md @@ -0,0 +1,408 @@ ++++ +title = 'Αλληλογραφία' +date = '1999-01-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 11'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Από αυτό το τεύχος, η αλληλογραφία γράφεται αυτόματα. Για οποιαδήποτε ορθογραφικά ή άλλα λάθη, ελπίζουμε να μας συγχωρήσετε. Δεν μπαίνει ανθρώπινο χέρι από εδώ +και κάτω, παρά μόνο για copy και paste.Αυτό έγινε λόγω έλλειψης χρόνου, και ελπίζουμε να έχουμε την κατανόησή σας* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\ +Παρακαλούμε ακολουθήστε τους κάτωθι κανόνες: + +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής Ερώτηση περί Linux δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμιά ματιά στα περασμένα τεύχη, και εννοώ και την στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-) + +**1. Λίστα Ελλήνων Χρηστών** +------------------------------------------------------ + +**2. Εγκατάσταση του RedHat 5.2 από το δίκτυο** +------------------------------------------------------------------------- + +**3. Θεσσαλονικη;** +--------------------------------------------- + +**4. Ελληνικά σε κονσόλα** +---------------------------------------------------- + +**5. Routing** +---------------------------------------- + +**6. AGP καρτες γραφικων** +---------------------------------------------------- + +**7. FAT32** +-------------------------------------- + +**8. Download Μagaz** +----------------------------------------------- + +**9. Compile του πηρύνα** +--------------------------------------------------- + +**10. YAMAHA OPL3** +----------------------------------------------- + +**11. Dial up connection** +------------------------------------------------------ + +**12. Ως πΟ.Τ.Ε. ?** +------------------------------------------------ + +**13. Συνδεση με Ιnternet** +------------------------------------------------------- + +**14. mirror από δική μου σελίδα** +-------------------------------------------------------------- + +**15. USENET Server** +------------------------------------------------- + +**16. search engine** +------------------------------------------------- + +**17. Πυρηνας 2.1.131** +--------------------------------------------------- + +**18. LINUX** +----------------------------------------- + +**19. HOW?..** +------------------------------------------ + +**20. startx** +------------------------------------------ + +**21. Dial-Up** +------------------------------------------- + +**22. Linux** +----------------------------------------- + +**23. Support G200 Mystique for AGP** +----------------------------------------------------------------- + + +### [1. Λίστα Ελλήνων Χρηστών]{#s1} + +Από : [DJ Art](mailto:arturok@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Πρίν από αρκετό καιρό γράφτηκα στην Λίστα με το όνομα DJ Art. Τώρα όμως δεν συμπεριλαμβάνομαι εκεί. Γιατί άραγε? Επίσης θα ήθελα να υπάρχει εκείνο το περίφημο +Download για να διαβάζουμε το Magaz offline. + +*Στην λίστα αναγράφονται όσοι έχουν δηλώσει στοιχεία. Στις τελευταίες γραμμές γράφονται και όσοι δεν θέλουν να δώσουν τα στοιχεία τους (22 άτομα). Προφανως +εντάσσεσαι εκεί, εφόσον δεν έδωσες πλήρη στοιχεία. Όσο για το link για Downloading, θα επιστρέψει στο επόμενο τεύχος, με δύο μορφές. Μία συγκεντρωτική για όλα +τα τεύχη του 1998 και μία για το τρέχον τεύχος.* + + +### [2. Εγκατάσταση του RedHat 5.2 από το δίκτυο]{#s2} + +Από : [Αμπουντώλας Κων/νος](mailto:aboud@dssl.tuc.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +*Διάβασε το magaz, τευχος 1, το αντιστοιχο άρθρο τςν Γιώργου Κεραμίδα και Φώτη Γεωργάτου.* + + +### [3. Θεσσαλονικη;]{#s3} + +Από : [Βασιλειάδης Χρύσανθος](mailto:Xrysan8os@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Πότε θα γίνει η συνάντηση των χρηστών του Linux στην Θεσσαλονίκη\....Έχοντας το Α.Π.Θ το ΠΑΜΑΚ και το ΤΕΙ μπορω να πω οτι υπαρχουν αρκετοι Linuxades\... Με +εκτίμηση, Χρύσανθος. + +*Το θέμα μάλλον δεν εχει καμία σχέση με το Magaz.* + + +### [4. Ελληνικά σε κονσόλα]{#s4} + +Από : [Σιδηρόπουλος Αθανάσιος](mailto:msx@the.forthnet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Αγαποιτοί Linuxάδες. Εγκατεστισα πριν λίγες μέρες το Red hat 5,2 και προσπάθισα να βάλω εληνικά στην κονσόλα Το πρότο που έκανα είτανε να ψάξω εδω για οδιγίες. +Βρίκα οδιγίες πίρα και τα απαρέτιτα από Τον ftp server και ξεκίνισα. Αλλά τσίφος. Το greek-consol-1.1.0-3.i386.rpm το εγκαθιστώ κανονικά Όταν κάνω chcp δεν +βρίσκει το chcp 8-(. Όταν πάω να βάλω το greek-consol-1.1.0-3.tar.gz δεν γινότανε τύποτα. 8-(. Δοκίμασα με tar -x καθός και tar -xz αλλά και αποσιμπιέζοντας το +πρότα με το gzip. Αποτέλεσμα 0. Καμιά ιδέα ? Ευχαριστώ εκ τον προτέρον και σιγνόμη για την ορθογραφία. Ειμαι ανορθόγραφος τι να κάνω 8-). Σιδηρόπουλος +Αθανάσιος. Σημίοση. Δεν είμαι εντελός άσχετος. Είχα εγκαταστίσει και πρίν λίγα χρόνια το Linux άλλα δεν έμαθα αρκετά τότες προφανος. + +*Αν έχεις εγκαταστήσει το rpm πρέπει να δουλεύει\... αν δεν το βρίσκει κάνε τα εξής:\ +1ον: πρέπει να κάνεις \`chcp win\' για να γράψεις ελληνικά.\ +2ον: το chcp πρέπει να είναι στο path σου. Είναι? Αν όχι, κάνε το εξής:\ +α. γράψεις στο prompt \`rpm -ql greek-console-1.1.0-3\'\ +(σου βγάζει λίστα με το που έχει βάλει τα αρχεία)\ +b. πας στο /usr/bin, και γράφεις \`ln -s /ekei/pou/einai/to/chcp\'\ +\ +Για να αποσυμπιέσεις αυτό που λές (το tar.gz) πρέπει να γράψεις \`tar -zxvf όνομα.tar.gz\' αν δεν το αποσυμπιέζει, ξανακατέβασέ το\... μάλλον είναι +κακοκατεβασμένο, ή μισό\...* + + +### [5. Routing]{#s5} + +Από : [Μανιάτης Δημήτρης](mailto:dmaniatis@hyundai.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Θέλω να χρησιμοπoιήσω το linux για φτηνή λύση routing, είναι αποτελεσματικό και ποια distribution να προτιμήσω + +*Φίλε Δημήτρη, μπορείς να μάθεις περισσότερα πράγματα για το Linux Router project στην διεύθυνση: * + + +### [6. AGP καρτες γραφικων]{#s6} + +Από : [Γιωργος Βρεντζος](mailto:antoula@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Συγχαρητηρια για το περιοδικο σας ! Μια απορια εχω μονο. Επειδη εχω την viper 500 (AGP) και δεν μπορω να την κανω να δουλεψει στα x-win (το Xconfigurator +βρισκει μονο 64k μνημης απο τα 16mb που εχει !) ηθελα να ρωτησω αν χρειαζεται ειδικος server και αν μπορω να κανω τιποτα για να λυσω το προβλημα. + +*Η κάρτες με viper 500 δεν υποστηρίζονται επίσημα, γιατί η viper αρνείται να δώσει τα στοιχεία του chip. Σύμφωνα με την σελίδα + υποστηρίζονται οι Viper 330 και Viper 550.* + + +### [7. FAT32]{#s7} + +Από : [Σωτήρης Παρμάκης](mailto:sotpar@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Γεια! Σας στέλνω αυτο το e-mail γιατί θα ήθελα να μάθω αν γίνεται να bootάρει το lilo σε fat32 και αν ναι πως; επίσης, πως μπορώ (αν γίνεται) να διαβάσω δίσκο +με FAT32; ευχαριστώ προκαταβολικά. + +*Για να μπουτάρει το lilo δίσκο με Fat32 δεν θέλει καμία ιδιαίτερη ρύθμιση. Είναι ακριβώς ο ίδιος τρόπος όπως και με το απλό Fat. Για να διαβάσεις δίσκο με +Fat32 πρέπει να έχεις kernel από 2.0.34 και πάνω, και να έχεις ενεργοποιήσει στον πυρήνα το NLS support.* + + +### [8. Download Μagaz]{#s8} + +Από : [Κεφάλας Απόστολος](mailto:akefalas@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Πώς μπορούμε να κάνουμε download τα τεύχη του Μαgaz ; + +*Από το επόμενο τεύχος, θα υπάρχουν δύο links, ένα για όλο το 1998 και ένα για το εκάστοτε τρέχον τεύχος.* + + +### [9. Compile του πηρύνα]{#s9} + +Από : [Νίκος Κωστής](mailto:cygnous@pat.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Πριν κάποιο καιρό έβαλα το RH 5.2. Καποια στιγμή θεώρησα ότι πρέπει να κανω δικό μου compile του πηρύνα (για υποστήριξη της κάρτας ήχου, του νέου επεξεργαστή +κα). Πάω λοιπόν στο /usr/src/linux ως root φυσικά και γράφω \"make xconfig\" ή make menuconfig ή make config ή make coffee και οτιδήποτε\... Η απάντηση είναι +παντα η ίδια: \"No rule to make \"xconfig\" (η το αντίστοιχο) \". Διάβασμα του kernel-compiling.HOWTO δεν είχε αποτέλεσμα. Ερώτηση στους λιγοστούς (2) γνωστούς +μου που γνωρίζουν κάτι ψιλά απο linux επίσης δεν είχε αποτέλεσμα. Οπότε ρωτάω και εσάς\... Ευχαριστώ\... ΥΓ. ενα μεγαλύτερο κουτί ερώτησης θα βοηθούσε πολύ\... + +*Εχω την εντύπωση, ότι δεν έχεις εγκαταστήσει τα sources του πυρήνα. Δηλαδή, στο /usr/src/linux δεν υπάρχουν τα απαραίτητα αρχεία (headers και sources) για το +compiling. Δοκιμασε να πάρεις απο το CD τα sources (πρεπει να έχει ένα όνομα όπως linuxsources2.0.36.rpm ή καπως έτσι) και ξαναδοκίμασε. Υ.Γ. Έχεις δίκιο, θα το +φροντισουμε να μεγαλωσει. Ευχαριστούμε* + + +### [10. YAMAHA OPL3]{#s10} + +Από : [MATZIRIDIS MAKIS](mailto:matziridism@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +BASIKA TO THEMA EINAI OTI EXO TIN KARTA HXOU YAMAHA OPL3 PANO STO CHIPSET TIS INTEL KAI EXO AKOMI TO RED HAT LINUX.TREXO TO SNDCONFIG GIA NA KANO CONFIG STIN +KARTA ALLA TIPOTA.O KERNEL IPOSTOIRIZEI TIN KARTA AUTI.AKOMI THA ITHELA KAI KAPOIES PLIROFORIES GIA TO PPP .. + +*Τα στοιχεία που μας δινεις είναι πολύ λιγα. Σε παρακαλουμε, γίνε λίγο πιο συγκεκριμενος. Π.Χ. Ολες οι καρτες ήχου (σχεδόν) έχουν το OPL3. Η κάρτα σου είναι pnp +ή οχι; Για το ppp τι θα ηθελες;* + + +### [11. Dial up connection]{#s11} + +Από : [ΔΗΜΗΤΡΗΣ ΔΑΜΑΛΑΣ](mailto:amapola@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Πως μπορώ να συνδεθώ μεσω MODEM + +*Δημήτρη, για όνομα του Θεού\... Δεν είμαστε μάντεις, γίνε λίγο πιο συγκεκριμένος σε παρακαλώ.* + + +### [12. Ως πΟ.Τ.Ε. ?]{#s12} + +Από : [Κώστας Δαμιανάκης](mailto:lewp@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Hail all there usin\' linux.. Re paidia exete skeftei pote na ziparete to kathe teyxos oste na ta katevazoume ston skliro mas kai na to diavazoume me tin isixia +mas? Kserete eseis\... Xoris na anisixoume gia ton logariasmo tou OTE\... Plaka plaka giati den kanoume oloi mia kinitopoiisi kata tou Ote\... As ftiaxoume ena +site, ena newsgroup, kati telos panton gia na ekfrasoume tis apopseis mas\... Ena site tetoio exei dimiourgithei apo oti ksero alla den thimamai distixos tin +url\... As kinitopoiithoume loipon.. ! + +*Κώστα, δεν υπηρχε λόγος να μας το στείλεις 3 φορές, το καταλάβαμε :) Σε ότι αφορά το συμπιεσμένο αρχείο, υπήρχε, και θα υπάρχει από το νέο τεύχος. Προσωρινά +μονο αφαιρέθηκε για λογους ευκολης μεταφοράς.* + + +### [13. Συνδεση με Ιnternet]{#s13} + +Από : [Φλαουνας Ηλιας](mailto:iliasf@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Xrisimopoiw to RedHat 5.0 Prosmathw na syndethw me to minicom apo Xwindow\...Pairnei thlefonwi kanonika, dinw username kai password alla meta tipota. (Episis +enw exei syndethei (Hxoi apo to modem e3akoulithei h antistrofh metrish gia to timeout(!) opote kai pataw cancel ) Meta apo ligh wra katalabainw oti h grammi +exei pesei. Eimai anoixtos se opoiadipote protash\... (Exw dokimasei kai me chat alla den pairnei kan thlefwno) + +*Εφόσον ΔΕΝ διευκρινίζεις ότι το κάνεις, θα υποθέσω οτι δεν το κάνεις. Ποιο; Μα το να τρέξεις pppd μετά την συνδεση. Θα σε βοηθήσουν τα messages του συστήματός +σου* + + +### [14. mirror από δική μου σελίδα]{#s14} + +Από : [Μπλέτσας Δημήτρης](mailto:mplets@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Έστειλα e-mail στο wedslave\@linux.gr αν επιθυμούν να ανεβάσω τις σελίδες σας στο δικό μου site και πήρα μήνυμα λάθους.Επιθυμώ να κάνω το ίδιο και για το +magaz.Παρακαλώ να με ενημερώσετε.Καλά Χριστούγεννα. + +*Φιλε Δημητρη, στειλε μας πιο πολλες πληροφοριες (ποιο ειναι το site σου) στο email info\@hellug.gr Ευχαριστουμε.* + + +### [15. USENET Server]{#s15} + +Από : [Panos Le Halachuck](mailto:hpan@nettaxi.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Pos mporo na sthso to linux box moy etsi oste na einai kai newsgroup server, oste oi client pcs (win95) na mporoyn na stelnoyn kai na lambanoyn topika news. +Shmeioteon: Den yparxei monimi syndesi internet (katholoy) kai to linux dist: RED HAT 5.1 + +*Η καλυτερη λύση εφόσον δεν έχεις μόνιμη σύνδεση είναι το DNEWS. Αλλά έχε υπόψη σου ότι μάλλον δεν θα σε βολεύει. Δηλαδή όλες οι ιεραρχίες που θα δηλώσεισ να +έρχονται στο Linux σου θα κατεβαίνουν μόλις συνδέεσαι, με αποτελεσμα να σου πιταρουν την γραμμή. Τέλος, πρεπει να συνεννοηθείς με τον παροχέα newsfeed για να σε +βλέπει σαν server και όχι σαν client.* + + +### [16. search engine]{#s16} + +Από : [Tripolitakis Evangelos](mailto:vtrip@grecian.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Re paidia , eimai enas dystyxos root poy 8a ton papsoune apo to programma poy exei analabei ean den brei ena wraio site search poy 8a pernei arguments sta +ELLHNIKA !\#@\$@\# . Ti na pw \... ama den ginei kati 8a to gyrisoune se NT (bliah) kai ena wraio linuxi 8a formaristei anhlews :\^( Apantaxou linuxades aderfoi +boh8hste ! + +*Καλύτερα να στείλεις την ερωτησή σου στην linuxgreekusers μια που εμείς δεν εχουμε καμία εμπειρια απο search engines.* + + +### [17. Πυρηνας 2.1.131]{#s17} + +Από : [Γιωργος Βρεντζος](mailto:antoula@hotmail.com) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +Γεια σας και συγχαρητηρια για το \"περιοδικουλι\" σας. Εχω στο συστημα μου τον πυρηνα 2.0.35 και θα ηθελα να ρωσησω ποιες οι διαφορες της γεννιας 2.0.χ με τη +γεννια πυρηνων 2.1.χ . Αν μπορειτε εξηγηστε μου αναλυτικα τι αλλαζει. + +*Οι αλλαγές είναι πολλές, αλλά γενικά όχι συνταρακτικές για ένα χρήστη που χρησιμοποιούσε το Linux χωρίς προβλήματα με περιφεριακά κ.λ. Βέβαια, ούτε εγώ έχω +δοκιμάσει τον 2.2.xx, τα συμπεράσματα τα βγάζω από το πολύ καλό άρθρο του Linux Journal (Δεκεμβρίου).\ +Σίγουρα, θα είναι πιο σταθερός και πιο γρήγορος (αυτό λέει η ως τώρα εμπειρία\...).* + + +### [18. LINUX]{#s18} + +Από : [Grigoropoulos Dimitris](mailto:dgrigoro@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Από ποιά sites Μπορώ να κατεβάσω το Linux. Φιλικά DG + +*Φίλε Δημήτρη. Μπορείς να δεις μία λίστα των FTP servers με Linux στην Ελλάδα, στο http://www.hellug.gr στο section \"D\" (εκείνο το ποδαράκι με το D στην +κορυφή)* + + +### [19. HOW?..]{#s19} + +Από : [Κωστας Πασσαδης](mailto:COMCLUB@ATH.FORTHNET.GR) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +How can i install linux on my pc? + +*Insert the CDrom and boot from it. Then follow the instructions.* + + +### [20. startx]{#s20} + +Από : [Δουμάνης Χρήστος](mailto:xdoym@hol.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +YPOSTHRIZEI TO REDHAT 5.2 AGP KARTES GRAFIKWN?EXW THN DIAMOND VIPER 550 ME 16MM SDRAM KAI OTAN TREXW STARTX MOY BGAZEI ANALYSH 320X200.TI NA KANW? EYXARISTW +KALH XRONIA + +*Σύμφωνα με τα κείμενα του xfree86 (βλέπε www.xfree86.org) το XFree863.3.3 υποστηρίζει την Diamond Viper 550 με τον server XF86\_SVGA.\ +Στο RH 5.2 περιέχεται το XFree863.3.2 για το οποίο δεν γνωρίζω\... Σε κάθε περίπτωση πάντως μπορείς να κατεβάσεις τα νέα RPMs.\ +Ρίξε και μία ματιά στο site της Diamond (www.diamondmm.com), γιατί προσπαθεί να υποστηρίξει το Linux, ίσως να βρείς κάτι χρήσιμο.* + + +### [21. Dial-Up]{#s21} + +Από : [Γιώργος Κανελλόπουλος](mailto:loutsos@usa.net) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +Γεια σας, κατ\' αρχην χρόνια πολλά και ευτυχισμένο το 1999.Στη συνέχεια θα ήθελα να κάνω μια μάλλον για εσάς \"χαζή\" ερώτηση αλλά αυτο δεν είναι κακό γιατί +είμαι \"νέος\" με το LINUX. Πριν από λίγες μέρες πήρα το REDHAT 5.2. Στην εγκατάσταση δεν αντιμετώπισα κανένα προβλημα ούτε καν στο εγκαταστήσω την RIVA TNT +αλλα ο μεγάλος μου καημός είναι πως θα κάνω dial-up σε έναν ISP αφού είτε με τον τρόπο που λέει το manual (μέσω των X-Win) είτε με κάποιο τερματικό (π.χ. +commit), από το shell, που καλώ και κανω log-on και στη συνέχεια το pppd δεν μπορώ να έχω αποτέλεσμα δηλαδή να έχω Remote connection με τον ISP. Δεν ξέρω πια τι +να κάνω νιώθω ότι πάω σε διπλανό σπίτι μέσω Ελβετίας. Ευχαριστώ πολύ ελπίζω να να είναι κατανοητά αυτά που σας περιγράφω. Πιθανόν κάνω κάπου κάποιο λάθος. Σας +Ευχαριστώ και εύχομαι ό,τι καλύτερο για το Magaz και για το Linux να έχει το 1999. + +*Ο πιο απλός τρόπος κατά την γνώμη μου είναι το linuxconf (τρέχ\' το σαν root). Από εκεί προσθέτεις ένα ppp interface, οριζεις το νούμερο που καλεί, δίνεις και +το IP του DNS.\ +Αφού βγείς από το linuxconf, δίνεις /sbin/ifup ppp0 και αν όλα πάνε καλά θα έχεις την συνδεσή σου.\ +Για να βλέπεις τι γίνεται κατά την σύνδεση, δώσε \"tail f /var/log/messages &\". Μόλις συνδεθείς, το tail θα γράψει connection established.\ +Προσοχή, ίσως χρειάζεται να βάλεις για dial string το ΑΤΧ3DT αντί του ATDT (είναι θέμα ελληνικών γραμμών τηλεφώνου).* + + +### [22. Linux]{#s22} + +Από : [Χατζόπουλος Γιώργος](mailto:honda@law.auth.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@hellug.gr) + +Πώς μπορώ να αλλάξω ανάλυση στο Xwindows. + +*Edit to /etc/X11/XF86Config Pros to telos, yparxei to section \"screen\" opou anaferetai h analysh twn X ka8ws kai h eikonikh analysh tou desktop (virtual) To +grafiko programa XF86Setup ths ekdoshs 3.3.3 (nomixw kai 3.3.2) exei sxetiko menu opou ginetai h idia douleia me pio aplo tropo Ean telos ta X einai configured +apo prin gia pollaples analyseis, mporeis na allazeis apo th mia sthn allh me to syndyasmo plhktrwn ctrl+alt kai +(syn) h -(plhn)* + + +### [23. Support G200 Mystique for AGP]{#s23} + +Από : [Ιωακείμ Τελλίδης](mailto:benettor@the.forthnet.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@hellug.gr) + +Έχω την Matrox Mystique G200 8Mb for AGP slot. Εγκατέστησα το RedHat 5.2 και τα x win. Μου τα εμφανίζει σε ανάλυση 320χ200 και δεν δεχεται τίποτε άλλο!!! +Δοκίμασα και κάρτες τις matrox για AGP που έδινε η λίστα αλλά τίποτε. Παρακαλώ βοηθήστε με όσο το δυνατο γρηγορότερα!!!! Δεν κατάφερα να το σεταρω με τιποτε! + +*Από το http://www.xfree86.org: (δες και τα σχετικά updates του RH5.2)\ +XFree86-3.3.3 is now available!\ +There are quite a few bug fixes in this release. If you are having problems with a prior release, please try XFree86-3.3.3 first before asking for help.\ +Highlights of the new release include\ +Security enhancements including several buffer overrun fixes and other changes to fix security problems reported to us. New chipsets supported including 3Dlabs, +Rendition, Weitek P9x00, Cyrix MediaGX, Matrox G100/G200,* + diff --git a/content/articles/12/01_setup.md b/content/articles/12/01_setup.md new file mode 100644 index 0000000..9216b3a --- /dev/null +++ b/content/articles/12/01_setup.md @@ -0,0 +1,256 @@ ++++ +title = 'Επιλογές Εγκατάστασης του Linux' +date = '' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης' +issue = ['Magaz 12'] +issue_weight = 1 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Επειδή πολλοί μας ρωτάτε συνεχώς για τις επιλογές εγκατάστασης του Linux, ακολουθεί μια περιγραφή της διαδικασίας με όσο γίνεται απλότερη γλώσσα. Φιλάκια!* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Αρχικές προυποθέσεις** +--------------------------------------------------- + +**2. Modules** +-------------------------------------- + +**3. Προετοιμασία συστήματος** +------------------------------------------------------ + +**4. Code maturity level options** +---------------------------------------------------------- + +**5. Loadable module support** +------------------------------------------------------ + +**6. General setup** +-------------------------------------------- + +**7. Floppy, IDE, and other block devices** +------------------------------------------------------------------- + +**8. Networking options** +------------------------------------------------- + + +### [1. Αρχικές προυποθέσεις]{#s1} + +- Έχετε Υπολογιστή με κάποιο (οποιοδήποτε) Linux. Καλά θα ήταν να έχει πυρήνα \>= 2.0.35 +- Έχετε εγκαταστήσει στο σύστημά σας την ncurses, γιατί θα χρειαστεί να κάνετε **make menuconfig** και όχι **make config**. Με αυτό τον τρόπο είναι ευκολότερο + για εσάς στην εφαρμογή, αλλά και για εμένα στην περιγραφή +- Έχετε όρεξη για διάβασμα (και όχι μόνο από αυτό το άρθρο) +- Δέχεστε οτι δεν φέρω καμία απολύτως ευθύνη για οτιδήποτε μπορεί να συμβεί κατά την πορεία (όχι οτι είναι τίποτα δύσκολο, αλλα ξέρω γω\...) +- Όταν μάθετε πως να κάνετε νέο πυρήνα, θα το διδάξετε τουλάχιστον σε ένα νεοκλή του Linux. + +Δεδομένου ότι δεχόσαστε όλα τα ανωτέρω, προχορώ στο παρασύνθημα: (και εσείς προχωρήστε πατώντας στο **Next**) + + +### [2. Modules]{#s2} + +Καλό θα είναι να εξηγήσουμε ορισμένα πράγματα που θα συναντήσουμε παρακάτω και θα είναι λίγο δύσκολα στην κατανόηση. Και πρώτα από όλα, ας πούμε τι είναι τα +modules. + +**MODULES**: Τα modules είναι (κατά κάποιο τρόπο) κομμάτια κώδικα, τα οποία δεν περιέχονται στον πυρήνα αυτόν καθε αυτόν. Μπορούμε όμως να τα φωρτόσουμε, όταν +τα χρειαστούμε, με αποτέλεσμα να παραμένει ο πυρήνας μικρός σε μέγεθος. Φυσικά, δεν είναι μόνο αυτό το καλό τους. + +Εστω πχ ότι έχουμε ένα εκτυπωτή, που μοιράζεται την παράλληλη θύρα με το ZIP DRIVE μας. Επειδή δεν μπορούμε να έχουμε και τα δύο μαζι, η μόνη λύση είναι να τα +συμπεριλάβουμε και τα δύο σαν modules και να φωρτόνομε κατα βούληση αυτό που χρειαζόμαστε. Με αυτό τον τρόπο έχουμε και την πίτα ολόκληρη, και το σκύλο χoρτάτο +(αρκει να μην τα βάλουμε μαζι είπαμε!) Για τα modules έχουμε δύο επιλογές: ή να τα φορτόνουμε εμείς μόνοι μας, αναλαμβάνοντας πλήρως την ευθύνη, ή να αφήσουμε +τον πυρήνα να κάνει αυτή τη δουλειά. Θα σας συνηστούσα τη δεύτερη λύση, αφού σίγουρα αυτός ξέρει περισσότερα από εσάς. \`Οταν λοιπόν χρειαστεί να +χρησιμοποιείσεται το ZIP, ο πυρήνας \"ξεφορτώνει\" το module του εκτυπωτή, και φορτώνει το module του ZIP DRIVE, και φυσικά το αντίθετο αν απαιτηθεί. Όταν +επίσις (πχ για την υποστήριξη του PPP) ο πυρήνας καταλάβει ότι τρέχει ένα πρόγραμμα που χρειάζεται το PPP, αμέσως το φωρτόνει. Το καλό είναι ότι αν ένα Module +παραμείνει ανενεργό για κάποιο χρονικό διάστημα, το ξεφορτώνει από τη μνήμη, ελευθερώνοντας έτσι περισσότερη. + +Γενικώς, πιστεύω ότι είναι καλή ιδέα να βάζετε ότι μπορείτε Modular. Με αυτό τον τρόπο, κρατάμε μικρό το μέγεθος του πυρήνα, και χρειάζεται λιγότερη μνήμη. +Φυσικά, η διαχείρησή της γίνεται καλύτερα, και γενικώς το σύστημα είναι ανα πάσα στιγμή κομένο και ραμένο στα μέτρα που χρειαζόμαστε. Στο δικό μου κουτί πάντως, +τα περισσότερα είναι Modular. (Βασικά ό,τι ξέρω ότι θα μου χρειαστεί, και μπορεί να μπει σαν Module φυσικά, **είναι** Module.) Δεν το συζητάω! Μπάάάάάά! + +Πιστεύω ότι μέσες - άκρες το πιάσατε το νόημα. Μπράβο σας λοιπόν, αισθάνομαι υπερήφανος, και προχωράμε στα βαθιά. + +(Πάτα στο Next τώρα!) + + +### [3. Προετοιμασία συστήματος]{#s3} + +Όχι δα και καμία φοβερή διαδικασία, απλά μεταφερθείτε στον κατάλογο που περιέχει τον κώδικα του πυρήνα, το /usr/src/linux/ που είναι συνήθως ένα link για ένα +dir της μορφής /usr/src/linux-2.0.xx, όπου (όπως θα καταλάβατε) xx είναι η έκδοση του πυρήνα. + +Αν δεν έχει τίποτα εκεί μέσα, καλά θα κάνετε να εγκαταστήσετε τον κώδικα, που **σίγουρα** υπάρχει μέσα στο δισκάκι της διανομής που έχετε. + +**cd /usr/src/linux/** λοιπόν, και όλα έτοιμα. + +Γράψτε: **make menuconfig** + +Αν δε γίνει τίποτα και έχετε κάνα παράξενο μήνυμα λάθους, εγκαταστήστε την ncurses, και ξαναπροσπαθήστε. Θα πετύχει. + +Μπροστά σας, παρουσιάζεται ένα πλούσιο μενού, με διάφορες επιλογές\... Και τώρα αρχίζει η πραγματική δουλειά. Γενικές οδηγίες για τη μετακίνηση στα Menu +υπάρχουν, άρα σε αυτό δεν θα υπάρξει πρόβλημα. Μην ξεχνάτε, ότι ανά πάσα στιγμή μπορείτε να πάτε στο HELP και να πάρετε πληροφορίες για το τι είναι και το τι +κάνει το καθέτι. **ΠΑΡΑΚΛΗΣΗ:** Χρησιμοποιείτε το κατά κόρον. + + +### [4. Code maturity level options]{#s4} + +Πατώντας σε αυτό, εμφανίζεται ένα άλλο menu που σας λέει: **Prompt for development and/or incomplete code/drivers**. Φροντίστε να το επιλέξετε. Αυτό δείχνει ότι +στη διάρκεια της επιλογής των παραμέτρων του πυρήνα, θα σας ρωτήσει για διάφορα πειραματικά - ατελή υποσυστήματα του πυρήνα, τα οποία όμως δουλεύουν μια χαρα. +Συμπεριλάβετέ το λοιπόν. + + +### [5. Loadable module support]{#s5} + +Αυτά που λέγαμε για τα Modules. Φροντίστε και αυτό να το επιλέξετε, και προχορήστε παρακάτω, λέγοντας στο Linuxάκι σας να αναλάβει αυτό την διαχείριση των +Modules. + +Επιλέξτε λοιπόν **Enable loadable module support** + +και φυσικά το **Kernel daemon support (e.g. autoload of modules)** για να διαχειρίζεται ο πυρήνας τα Modules + +Η άλλη επιλογή που έχει, το **Set version information on all symbols for modules** βοηθάει στο να μπορείτε να χρησιμοποιείσετε τα Modules αυτά ακόμα και αν +αναβαθμίσετε τον πυρήνα σε πιό νέα έκδοση. Καλό λοιπόν θα είναι να το επιλέξετε και αυτό, αφού ούτος ή άλλος δεν μεγαλώνει το μέγεθος του πυρήνα, και στο φινάλε +ρε αδερφέ, δε μας ενοχλεί και καθόλου! + + +### [6. General setup]{#s6} + +Εδώ, αρχίζουν τα ζόρικαααααα. Βάλτε λοιπόν τα γάντια σας, κλείστε μουσικές, αποτραβηχθήτε από οποιαδήποτε ενόχληση (ακόμα και από τη γυναίκα σας, όσοι τυχεροί +έχετε) και ετοιμαστείτε για βουτιές! + +- **Kernel math emulation**: Προσομοίωση του μαθηματικού συνεπεξεργαστή αν δεν έχετε (Δηλαδή το μηχάνημά σας είναι 386SX και κάτω. Και μην ακούσω σχόλιο του + τύπου *\"Τι είναι αυτό το 386SX;\"* +- **Networking support**: Βάλτε το, διαφορετικά δεν θα δουλεύουν τα Χ (\<- Η μεγαλύτερη απειλή που μπορείς να πεις σε πρωτάρη) +- **Limit memory to low 16MB**: Μερικά προβληματικά Motherboards δεν βλέπουν πάνω από 16MB. Ρίξτε μια ματιά και στο HELP που έχει, και απενεργοποιείστε το. + :))) +- **PCI bios support**: \`Εχετε PCI θύρες στο PC σας; Αν ναι, μην το παραλείψετε! Τότε θα εμφανιστεί το παρακάτω: +- **PCI bridge optimization (experimental)**: Πείτε ναι, κατα πάσα πιθανότητα θα αυξήσει λίγο την ταχύτητα επικοινωνίας του διαύλου με το PC σας. +- **System V IPC**: Αν δεν ενεργοποιείσετε αυτό, πολλά προγράμματα δεν θα μπορούν να τρέξουν. Διαβάστε και το HELP, και όπως χαρακτηριστικά αναφέρει στο τέλος + του, *\"Just say YES\"* +- **Kernel support for a.out binaries**: Στα παλιά χρόνια του UXIX, χρησιμοποιόταν αυτός ο τύπος εκτελέσιμων και βιβλιοθηκών (με λίγα λόγια). Τώρα πια, τείνει + να εξαφανιστεί, και αν τελικά αποφασίσετε να βάλετε υποστήριξη για αυτό το format, τουλάχιστον βάλτε το σαν module. Φυσικά, τίποτα δε σας απαγορεύει να το + βάλετε builtin στον πυρήνα, απλά δεν θα έχετε κανένα ουσιαστικό όφελος. **ΔΕ ΧΡΕΙΑΖΕΤΑΙ!!!** Πως να το πώ; Βάλτε το MODULAR. +- **Kernel support for ELF binaries**: Ε, ναι, παρακαλώ, αυτό αντικατέστησε το A.OUT. Αν δεν το βάλουμε και αυτό, ζήτω που καήκαμε. Καλό μάλιστα, θα ήταν να + το βάλουμε built-in στον πυρήνα, (δηλαδή όχι Module) διότι μας χρειάζεται με το που αρχίζει να φορτόνει το Linux, και ίσως να μην έχει φορτοθεί ο Autoloader + ακόμα. (Μπερδευτήκατε ε;). Πάντως δεν έχω δοκιμάσει να το βάλω Modular, συνεπώς δεν ξέρω και τις συνέπειες. \`Ισως τελικά να δουλεύει και έτσι!! +- **Kernel support for MISC binaries**: Απλά, πείτε ναι, καλό είναι, κακό δεν κάνει, ακόμα καλύτερα βάλτε το σαν Module +- **Kernel support for JAVA binaries**:Ξέρετε την Java; Την ξέρετε - δεν την ξέρετε, βάλτε το Modular. Χώρο δεν πιάνει, άστο να βρίσκεται, κ.λπ. +- **Compile kernel as ELF - if your GCC is ELF-GCC**: Μην τα ξαναλέμε, επιλέξτε το\... +- **Processor type**: Τι επεξεργαστή έχετε; Και μην απορείτε γιατί ρωτάει, ανάλογα με τον επεξεργαστή σας, θα παράγει εκτελέσιμα που θα είναι βελτιστοποιημένα + για αυτό τον επεξεργαστή. Αν δηλαδή από 486 πάτε σε Pentium, ξανακάντε ένα νέο Kernel. Μόνο χρόνο παίρνει! + + +### [7. Floppy, IDE, and other block devices]{#s7} + +Γενικές επιλογές για το τι προτόκολλα επικοινωνίας θα εγκατασταθούν για την εποικοινωνία με τις συσκευές αποθήκευσης σε δίσκους, και γενικά σε μονάδες +αποθήκευσης δεδομένων. Αχ!! Αν το ήξερα ότι θα ήταν τόσο πολλά, δεν θα το έκανα αυτό το άρθρο!!! + +- **Normal floppy disk support**: Θέλετε Floppy DiskDrive; Αν ναι πείτε ναι (ή Module). ΜΑ ΦΥΣΙΚΑ ΚΑΙ ΘΕΛΕΤΕ!!! Τι λέμε τώρα; +- **Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support**: Δεν νομίζω να είναι κανένας που θα πεί ΟΧΙ σε αυτό εδώ! Σε αντίθεση με την επόμενη ερώτηση, που δε + νομίζω κανένας να πει ΝΑΙ +- **Use old disk-only driver on primary interface**: Δεν νομίζω να είναι κανένας που θα πεί ΝΑΙ σε αυτό εδώ! Σε αντίθεση με την προηγούμενη ερώτηση, που δε + νομίζω κανένας να πει ΟΧΙ +- **Include IDE/ATAPI CDROM support**: Εδώ θα πείτε ναι αν έχετε CDROM που υπακούει σε προσταγές ATAPI, (δηλαδή το συνδέετε σε καλώδιο που είναι ίδιο με το + σκληρό σας δίσκο) (ΟΧΙ SCSI, εντάξει;). Οι περισσότεροι λέμε ΝΑΙ. +- **Include IDE/ATAPI TAPE support**: Υποστήριξη για συσκευές TAPE που ανταποκρίνονται σε ATAPI προτόκολλο. +- **Include IDE/ATAPI FLOPPY support (new)**: Υποστήριξη για συσκευές FLOPPY (Δισκέτες) που ανταποκρίνονται σε ATAPI προτόκολλο. Υπόψη, ότι αν έχετε το LS-120 + ή το ATAPI (όχι παράλληλο ή SCSI) ZIP DRIVE το θέλετε οποσδήποτε!!! +- **SCSI emulation support**: Προσομείωση του προτοκόλλου SCSI στις συσκευές ATAPI έτσι ώστε να μπορούν να χρησιμοποιειθούν οι DRIVERS από τις αντίστοιχες + SCSI συσκευές (λόγω πχ έλλειψης DRIVERS για το ATAPI). Δεν νομίζω να το χρειαστείτε\... Αλλά, εσείς ξέρετε\... +- **Support removable IDE interfaces (PCMCIA)**: PCMCIA υποστήριξη. Τι να εξηγήσω εδώ; +- **CMD640 chipset bugfix/support**: Λόγο του ότι ορισμένα MBoards είναι λίγο **εντομούχα** (Buggy) χρειάζεται μέσω software να κάνουμε κάποιες παρεμβάσεις, + ώστε να μην δημιουργήσουν προβλήματα. Κάτι τέτοιο είναι αυτό\... + - **CMD640 enhanced support**: Πιθανότατα δεν το χρειζόσαστε, το κάνει το BIOS για εσάς. Αλλά αν έχετε παλαιό BIOS, ίσως να αξίζει να το ενεργοποιείσετε. +- **RZ1000 chipset bugfix/support**: και αυτό είναι για **εντομούχο** chipset +- **Intel 82371 PIIX (Triton I/II) DMA support**: Αν το chipset σας είναι Intel 82371 PIIX (Triton I/II), τότε συμπεριλάβετε αυτή την επιλογή για καλύτερη + απόκριση του σκληρού σας δίσκου. Ρίξτε και μια ματιά στο HELP για να δείτε τι ακριβώς κάνατε. +- **Other IDE chipset support**: Εδώ πρέπει να ρίξετε πολύ διάβασμα. Καταρχάς, πατήστε το για να δείτε για ποια chipset έχουμε κάτι. Αν περιλαμβάνεται το δικό + σας, πηγαίνετε στο HELP το οποίο θα σας παραπέμψει σε ένα README. Διαβάστε το καλά πριν κάνετε κάτι +- **Loopback device support**: Αν γράφετε CD, θα σας φανεί χρήσιμο. Θα μπορείτε πχ. να βλέπετε το IMAGE ενός CDιού που θέλετε να γράψετε, σαν να ήταν + κανονικός δίσκος. +- **Multiple devices driver support**: Αν το επιλέξετε, θα μπορείτε να έχετε υποστήριξη για τα παρακάτω MODES του RAID. Το RAID είναι -χοντρικά- ένας τρόπος + διαχείρισης των δίσκων σας, η εξήγηση του οποίου δεν είναι του παρόντος. Χρησιμοποιείστε το HELP για να δείτε τι ακριβώς κάνει το κάθε ένα, και επιλέξτε αν + θέλετε κάποιο. + - **Linear (append) mode**\\ + - **RAID-0 (striping) mode**\\ + - **RAID-1 (mirroring) mode**/ Κοιτάξτε στο HELP για λεπτομέρειες στα διάφορα MODES του RAID. + - **RAID-4/RAID-5 mode**/ +- **RAM disk support**: Αυτή είναι μια επιλογή στην οποία μπορείτε να χρησιμοποιήσετε ένα κομμάτι από τη RAM σα να ήταν δίσκος, να την φορμάρετε (πολύ γρήγορο + φορμάρισμα!!) να διαβάσετε και να γράψετε σε αυτήν, και οτιδίποτε άλλο κάνετε σε ένα σκληρό δίσκο. Πιθανότατα δεν θα σας χρειαστεί. +- **XT harddisk support**: Δε νομίζω να έχετε (και να θέλετε να χρησιμοποιήσετε) δίσκο από το ΧΤ σας\... Αλλά αν έχετε (και θέλετε να τον χρησιμοποιήσετε) + αυτό είναι που χρειάζεστε! ΖΗΤΩ!!! Επιτέλους, ο 20ΜΒ σκληρός μου δίσκος ξανά προς τη δόξα τραβά!!! +- **Parallel port IDE device support**: Μερικα CD και άλλου είδους αποθηκευτικά μέσα, συνδέονται στην παράλληλη. Διαβάστε στο HELP, και αναλόγως πράξτε. + **ΠΡΟΣΟΧΗ!!! Αν έχετε ZIP DRIVE (PARALLEL) *δεν είναι τούτο \'δώ* αυτό που πρέπει να χρησιμοποιήσετε\... θα το πούμε παρακάτω για το ZIPάκι σας!!!** + + +### [8. Networking options]{#s8} + +Σε αυτό το βήμα της δημιουργίας του πυρήνα, ομολογώ ότι παρόλο που ξέρω πανω-κατω τι κάνει το καθένα, δεν έχω τις απαραίτητες γνώσεις (και φυσικά τα απαραίτητα +μέσα για να μάθω, αλλιώς θα ήξερα) για να σας κατευθύνω. Καλύτερα λοιπόν να μην βασιστείτε μόνο στα γραφόμενά μου, αλλά και σε διάβασμα τόσο της βοήθειας που +απλόχερα δίνεται σε όλο το στάδιο της προετοιμασίας του πυρήνα από το SETUP αλλά και από οτιδίποτε άλλο έχετε (Βιβλία για παράδειγμα). YOU ARE WARNED.- + +Επίσης, να αναφέρουμε ότι εκτός από μερικές επιλογές που πιθανότατα θα χρειαστεί ένας απλός χρήστης, σε αυτό το MENU περιέχονται πολλές **εξειδικευμένες** +λειτουργίες, που πιθανότατα ούτε εσείς δεν θα καταλάβετε. Μην πτοηθείτε, συνεχίστε και να θυμάστε ότι κακό δεν μπορείτε να του κάνετε!!! + +- **Network firewalls**: Το *Firewall (πυροντούβαρο!!)* είναι ένας τρόπος προστασίας από το συνολικό δύκτιο (πχ το internet) του τοπικού σας δικτύου. Όλη η + κίνηση από και πρός το δίκτυό σας, ελέγχεται από τον υπολογιστή με το Firewall πριν συνεχίσει την πορεία του. Αυξημένες απαιτήσεις ασφαλείας έχετε; + **ΔΙΑΒΑΣΤΕ ΚΑΙ ΤΟ HELP** +- **Network aliasing**: Πολλαπλές IP διευθύνσεις σε ένα μηχάνημα! +- **TCP/IP networking**: Ε, εάν θέλετε να έχετε internet, βάλτε το\... Αχρείαστο να ναι!!! χι χι χι! +- **IP: forwarding/gatewaying**: Μήπως θέλεις το Linuxάκι σου να το χρησιμοποιείς σα Router, έτσι ώστε όλο το τοπικό σας δίκτυο να έχει πρόσβαση στο internet, + και ο καθένας να παίρνει αυτά που ζήτησε, και όχι αυτά που ζήτησε ο άλλος; Θέλεις; Στηρίξου σε αυτή την επιλογή του SETUP, και μείνε ήσυχος. +- **IP: multicasting**: Διάβασε το HELP. Αν δεν καταλάβες τι λέει, μην το βάλεις. Τόσο απλά (εγώ δεν κατάλαβα πάντως\...) +- **IP: syn cookies**: **(ΑΠΟ ΤΟ HELP)**. Προστασία από ένα είδος επίθεσης, το SYN FLOODING. Θα μπορούν να συνδεθούν στο δίκτυό σου ακόμα και αν δέχεσαι τη + συγκεκριμένη επίθεση, και καπάκι σου λεει το IP του δράστη! +- **IP: firewalling**: Αν πεις ναι σε αυτό, πρέπει να πεις ναι και στην 1η επιλογή, την **Network firewalls**. Είπαμε τι είναι το firewall. Ρίξε και μια ματιά + στο HELP +- **IP: firewall packet logging**: Με αυτή την επιλογή, θα μπορείς μέσω ενός deamon να παρακολουθήσεις τι έγιναν τα πακέτα δεδομένων που διαχειρίστηκε το + firewall σου. Αν έβαλες firewall, βάλε και αυτό! +- **IP: masquerading**: masquerading είναι μια τεχνική κατά την οποία όλοι οι υπολογιστές ενός τοπικού δικτύου λαμβάνουν και στέλνουν δεδομένα στο ευρύτερο + δίκτυο, σα να τα έστελναν αυτοί (παρόλο που είναι γνωστό ότι αυτή τη δουλειά την κάνει το firewall). Το firewall θα ξέρει που να στείλει τι, και το + εξωτερικό δίκτυο θα βλέπει ότι τα έστειλε το firewall. \`Ετσι, όλοι είναι ευχαριστιμένοι! +- **IP: ipautofw masquerading (EXPERIMENTAL)**: Παιδιά, μακάρι να ξερα τι κάνουν αυτά. +- **IP: ipportfw masq & virtual server support**: Βλέπε προηγούμενη επιλογή +- **IP: ICMP masquerading**: Προσθέτει κάποιες παραπάνω λειτουργίες στον τρόπο που γίνεται το masquerading. Τόσα ξέρω - τόσα λέω +- **IP: transparent proxy support (EXPERIMENTAL)**: Αυτή η επιλογή κάνει το firewall σας να ανακατευθήνει εξερχόμενα πακέτα προς ένα διακομιστή που βρίσκεται + στο τοπικό δίκτυο, ξεγελώντας έτσι τους υπολογιστές που νομίζουν ότι μιλάνε με τον αρχικό τους στόχο. +- **IP: always defragment**: Σιγουρεύει ότι όλα τα πακέτα, πριν επαναδρομολογηθούν θα ενοθούν ξανά, μια και τα περισσότερα κόβονται κατά τη διάρκεια του + ταξιδιού τους. Αυτό από ότι λέει στο HELP είναι καλό, και αν κατάλαβα και εγώ ακριβώς τι εννοεί, είναι όντος καλό διότι υπάρχει περίπτωση να χαθούν + ορισμένες συμαντικές πληροφορίες που είναι κομμένες στη διάρκεια του ταξιδιού τους. +- **IP: accounting**: Είσαστε MANIΑC της στατιστικής και θέλετε να ξέρετε τα πάντα για την κίνηση του firewall η του router σας; Επιλέξτε το! +- **IP: optimize as router not host**: Διεργασία κατά την οποία το λειτουργικό σας βελτιστοποιείται ίνα χρησιμοποίηθεί ως ROUTER. +- **IP: tunneling**: Το tunneling είναι μια τεχνική, κατά την οποία ένα πακέτο IP κλείνεται (ενθυλακόνεται) μέσα σε ένα άλλο πακέτο IP. Παρόλο που δεν είναι + λογικό από πρώτης άποψης (και καλά, ίσως να ήταν πιο λογικό να ενθυλακόνεις ένα προτόκολλο μέσα σε ένα άλλο, θα μου πείτε), το tunneling χρησιμοποιείται + όταν πχ θέλουμε να φαίνεται ένα άλλο δίκτυο από αυτό που είμαστε, ή ένας φορητός υπολογιστής θα μπορούσε να έχει το ίδιο IP από όπου και να συνδεόταν. +- **IP: multicast routing (EXPERIMENTAL)**: Αν θέλεις ο ROUTER σου να στέλνει τα πακέτα προς πολλές κατευθύνσεις, το χρειάζεσαι. +- **IP: aliasing support**: Θα το χρειαστείς μόνο αν θές στον ίδιο υπολογιστή να λαμβάνεις πχ. δύο IP διευθύνσεις, και να στέλνεις πακέτα ανάλογα με τη + διεύθυνση που χρησιμοποίησαν για να συνδεθούν μαζί σου. Είναι αληλένδετη με τη δεύτερη επιλογή σε αυτό το MENU +- **IP: PC/TCP compatibility mode**: Σε μερικές περιπτώσεις, για να επιτευχθεί σύνδεση TELNET στον υπολογιστή σου χρειάζεται αυτό. Για περισσότερες + πληροφορίες, ρίξε μια ματιά στο HELP που περιέχει. +- **IP: Reverse ARP**: Διαβάστε το HELP, και πράξτε ανάλογα με τη συμβουλή της τελευταίας γραμμής. +- **IP: Disable Path MTU Discovery (normally enabled)**: Φαντάσου τους υπολογιστές σαν κροκόδειλους. Ταίζουμε με ένα μεγάλο κομμάτι κρέας, και αν το φάει, + έχει καλως, του ξαναδίνουμε μεγάλο. Αν όμως αρχίσει και το κόβει κομμάτια, τότε το επόμενο που θα του δώσουμε θα πρέπει να είναι μικρότερο (να μη μας + κουραστεί κιόλα). \`Ετσι κάνει και ο υπολογιστής. Στέλνει μεγάλα πακέτα, και αν τελικά αποδειχτουν μεγάλα, τα κόβει σε μικρότερα και τα στέλνει. + (Αναπροσαρμόζει δηλαδή την MTU = MAXIMUM TRANSFER UNIT). Ενεργοποιόντας αυτή την επιλογή, **ΑΠΕΝΕΡΓΟΠΟΙΟΥΜΕ** αυτή τη λειτουργία. ΜΗΝ ΤΟ ΚΑΝΕΤΕ! +- **IP: Drop source routed frames**: Υπάρχει μια επιλογή στο IP προτόκολλο, που εκτός από τον προορισμό, τα πακέτα περιέχουν και την πληροφορία για τη + διαδρομή που θα ακολουθήσει το πακέτο. Εκτός του ότι η χρησιμότητά μιας τέτοιας τακτικής είναι αμφίβολη, μερικές φορές, για λόγους ασφαλείας, είναι καλό να + \"πετάμε\" αυτή την πληροφορία, και να κάνουμε τη δρομολόγηση εμείς. +- **IP: Allow large windows (not recommended if \<16Mb of memory)**: Αν η σύνδεσή σας είναι μεγαλύτερη από 2ΜΒΙΤ, τότε ίσως να σας χρησιμεύσει. Σε αυτή την + περίπτωση, διαβάστε το HELP. +- **The IPX protocol**: Υποστήριξη για το IPX προτόκολλο, το προτόκολλο της NOVELL. Αν στο δίκτυό σας έχετε NOVELL, το θέλετε!!! +- **Appletalk DDP**: Υποστήριξη για το APPLETALK προτόκολλο, για τους υπολογιστές - μήλα. Αν στο δίκτυό σας έχετε APPLE, το θέλετε!!! +- **Amateur Radio AX.25 Level 2**: Εξειδικευμένο προτόκολλο. Δες το HELP για περισσότερες πληροφορίες +- **Amateur Radio NET/ROM**: Εξειδικευμένο προτόκολλο. Δες το HELP για περισσότερες πληροφορίες +- **Amateur Radio X.25 PLP (Rose)**: Εξειδικευμένο προτόκολλο. Δες το HELP για περισσότερες πληροφορίες +- **Bridging (EXPERIMENTAL)**: Αν θέλεις να φαίνονται στον έξω κόσμο όλες οι ETHERNET κάρτες σου σαν μια, χρησιμοποίησε αυτό. Επίσης χρησιμοποίησε το HELP για + να δεις που μπορεί να χρησιμεύσει κάτι τέτοιο. +- **Kernel/User network link driver**: Εξειδικευμένη λειτουργία, για την οποία χρειάζεται κάτι παραπάνω από τις δικές μου γνώσεις. Ρίξτε μια ματιά στο HELP, + και αν καταλάβετε τίποτα, στείλτε μου και εμένα ένα mail να μου εξηγήσετε\... :))) + +\`Οπως είπα και στην αρχή, οι περισσότερες από της επιλογές αυτού του MENU είναι αρκετά εξειδικευμένες, και αφορούν στη χρήση του Linux για σκοπούς SERVER, +PROXY, FIREWALL, και άλλες πολύπλοκες διεργασίες, πράγματα τα οποία στο 99,9% των χρηστών είναι ουσιαστικά άγνωστα (και άχρηστα). Εδώ φαίνεται και η ικανότητα +του Linux να ανταπεξέλθει σε συνθήκες σκληρής δουλειάς, και μεικτού περιβάλλοντος, και φυσικά η εγγενής δικτιακή του υποστήριξη. Καταλαβαίνουμε λοιπόν ότι οι +περισσότεροι από εμάς, δεν χρησιμοποιούν ούτε το 10% αυτού του πολύπλοκου και συνάμα σκληροτράχηλου λειτουργικού. Αντιλαμβανόμαστε επίσης γιατί το Linux είναι +τόσο δύσκολο να χρησιμοποιηθεί από κοινούς χρήστες ώστε να γίνει πλήρης εκμετάλευσή του. **ΦΙΛΑΚΙΑ!!!!** + diff --git a/content/articles/12/02_lin_for_dummies.md b/content/articles/12/02_lin_for_dummies.md new file mode 100644 index 0000000..177590a --- /dev/null +++ b/content/articles/12/02_lin_for_dummies.md @@ -0,0 +1,270 @@ ++++ +title = 'Linux για τους νοητικά ασθενείς,' +date = '' +description = '' +author = 'Κοτσιφάκης Θρασύβουλος' +issue = ['Magaz 12'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένα άρθρο γι\' όλους εμάς τους αρχάριους που ήρθαμε ουρανοκατέβατοι. Τα πρώτα βήματα στο LINUX με αρκετή δόση χιούμορ.**Strictly for beginers**. Όλοι οι +υπόλοιποι ας προσπεράσουν.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Γιατί μαμά;** +---------------------------------------------------- + +**2. Τα πρώτα του λογάκια!!.** +---------------------------------------------------------------- + +**3. Τα πρώτα μας λογάκια!!.** +---------------------------------------------------------------- + +**4. Τα πρώτα του βήματα.** +------------------------------------------------------------- + +**5. Οδηγίες για την σωστή ανατροφή του.** +---------------------------------------------------------------------------- + + +### [1. Γιατί μαμά;]{#s1} + +Πολλές φορές ακούω από συζητήσεις ότι ο τάδε έβαλε **LINUX** αλλά μετά από λίγο καιρό το παράτησε γιατί ήταν δύσκολο ή ότι ο δείνα δεν βάζει **LINUX** γιατί +φοβάται μην μπλέξει ή να μην (άκουσων άκουσων) χαλάσει τον υπολογιστή του. Η αλήθεια είναι ότι το **LINUX** δεν είναι ούτε ότι πιο εύχρηστο υπάρχει στον χώρο +των λειτουργικών συστημάτων ούτε είναι απλό στην εκμάθηση του.Χρειάζεται πολύς κόπος, χρόνος, διάβασμα και κατανάλωση φαιάς ουσίας για να το κάνει κάποιος κτήμα +του. Όμως το **LINUX** είναι ένα έξυπνο λειτουργικό σύστημα που βάζει τον χρήστη να σκεφτεί, να ψάξει και να γνωρίσει τον υπολογιστή του σε βάθος.Σίγουρα αξίζει +τον κόπο,και τα αποτελέσματα δικαιώνουν τον χρήστη που το επέλεξε σαν λειτουργικό. Ένα άρθρο λοιπόν γι\' όλους αυτούς που ήρθαν ουρανοκατέβατοι και δεν ξέρουν +την τύφλα τους. + + +### [2. Τα πρώτα του λογάκια!!.]{#s2} + +Και ας υποθέσουμε τώρα ότι πήγατε στο Happening του **HELLUG** ήπιατε το τσίπουρό σας και εφοδιαστήκατε με το ασημί δισκάκι που προσέφεραν τα παιδιά εκεί.Πήγατε +στο σπίτι σας και αντί να κάνετε το δισκάκι σουβεράκι, το βάλατε στο cd drive του κουβά,που πριν από λίγους μήνες αγοράσατε πανάκριβα για υπολογιστή, και που +τώρα η Intel τον έχει κάνει\.....το \'παμε κουβά. Αφού βάλατε που βάλατε το δισκάκι στο drive εγκαταστήστε τώρα LINUXάκι. Αυτό πια είναι εύκολο.Με τις ρουτίνες +εγκατάστασης που υπάρχουν σε κάθε distribution το σετάρισμα θυμίζει τα ακατανόμαστα (λέγε με W95). Στο τέλος της εγκατάστασης θα σας ζητηθεί ένα password, +πληκτρολογήστε το επιβεβαιώστε το και μην το ξεχάσετε. Κάποια στιγμή ,επίσης, στο τέλος θα σας ζητηθεί να κάνετε reboot,κάντε το. Την επόμενη στιγμή θα ακούτε +τον κουβά σας να αγκομαχεί στην προσπάθεια του να ξεκινήσει.Κάποια περίεργα μηνύματα θα εμφανιστούν στην οθόνη ενώ ο σκληρός δίσκος θα μαλακώνει από τις +αλλεπάλληλες επισκέψεις των κεφαλών επάνω του. Και ξάφνου σιωπή.Ένα περίεργο και ακαταλαβίστικο μήνυμα στοιχειώνει στην οθόνη . + +**Login:** + +ο κέρσορας αναβοσβήνει δίπλα του κι εσείς ατάραχοι πληκτρολογείται: + +**root** + +Αμέσως μετά κι άλλο μήνυμα έρχεται να στοιχειώσει την οθόνη σας + +**password:** + +Γράφεται το password που βάλατε κάπου στην εγκατάσταση (θυμάστε;) Ακούτε για άλλη μια φορά τον δίσκο να βογγάει και η οθόνη αλλάζει. Τώρα γράφει κάτι σαν το +παρακάτω: + +**localhost:**root\# + +\...\...\...Τώρα αρχίζουν τα δύσκολα!!. + + +### [3. Τα πρώτα μας λογάκια!!.]{#s3} + +Και τώρα τι κάνουμε; Έχουμε μπει στο **LINUX** και κοιτάμε την υπέροχη μαύρη οθόνη μας με τον κέρσορα να αναβοσβήνει απειλητικά.Εμείς όμως απτόητοι πάμε να +ανακαλύψουμε τα μυστικά του.Πως θα δούμε λοιπόν τι περιεχόμενα έχει ο υπολογιστής μας; Πληκτρολογούμε: + +**ls** + +και ως εκ θαύματος παίρνουμε μία λίστα για το τι υπάρχει μέσα στον τρέχοντα κατάλογο.!ΜΑΓΕΙΑ!.Όπως καταλαβαίνεται η εντολή **\"ls\"** είναι για να μας δείχνει +τα περιεχόμενα των καταλόγων μας.Μπορείτε να χρησιμοποιήσετε και διάφορες παραμέτρους όπως: + +- **-l** μας δίνει τα ονόματα των αρχείων,το μέγεθος,πότε άλλαξαν τελευταία φορά,και τι επιτρέπεται στον κάθε χρήστη να τα κάνει. +- **-a** μας δίνει τα ονόματα όλων των αρχείων, και των κρυφών. +- **-A** μας δίνει λίστα χωρίς τα σύμβολα \".\" και \"..\" +- **-F** χαρακτηρίζει τα περιεχόμενα \"\*\" για εκτελέσιμα \"/\" για καταλόγους \"@\" για links (κάτι ανάλογο με τα shortcuts) + +Υπάρχουν κι άλλες παράμετροι αλλά βρείτε τις μόνοι σας. + +Επόμενο βήμα να περιπλανηθούμε στο σύστημα.Τώρα γράψτε: + +**cd /** πατώντας το ENTER βλέπουμε το μήνυμα αριστερά από τον κέρσορα να αλλάζει και από: + + localhost:/root# + +να γίνεται : + +**localhost:/\#** + +Έχουμε αλλάξει πλέον κατάλογο και βρισκόμαστε στην αρχή (root) του δέντρου που σχηματίζει την μορφή των καταλόγων μας.Εάν κάνουμε **ls -F** από εδώ η έξοδος θα +δείχνει κάπως έτσι: + + etc/ mnt/ root/ var/ + bin/ home/ opt/ sbin/ + boot/ lib/ proc/ tmp/ + dev/ lost+found/ root/ usr/ + +Όπως καλά καταλάβατε το σύμβολο **/** χρησιμοποιείται για να υποδείξει καταλόγους.Ας εξηγήσουμε κάποιους απ αυτούς. + +- **bin** εδώ κρύβονται βασικές εντολές του συστήματος. +- **boot** εδώ συνήθως βρίσκονται κρίσιμα αρχεία και ο πυρήνας του λειτουργικού. +- **dev** εδώ υπάρχουν ειδικά αρχεία συσκευών (κάντε ένα ls να πάθετε κολούμπρα). +- **etc** εδώ υπάρχουν αρχεία configuration +- **home** εδώ φυλάγονται τα αρχεία του κάθε χρήστη. +- **usr** μέσα στους υποκαταλόγους του /usr συνήθως κρύβεται το χάος, ανακαλύψτε το. + +Και ένα μικρό μυστικό.*Αν θέλουμε να δούμε που βρισκόμαστε στο σύστημα γράφουμε την εντολή **pwd** (print working directory)*. + +Ωραία η εξερεύνηση ρε παιδιά αλλά ας κάνουμε και κάτι παραγωγικό. + + +### [4. Τα πρώτα του βήματα.]{#s4} + +Ας φτιάξουμε το πρώτο μας αρχειάκι.Πληκτρολογείστε: + +**vi test** + +Ο **vi** είναι ένας πανάρχαιος text editor που απαιτεί να έχεις χέρια πλοκάμια για να τον χρησιμοποιήσεις, αλλά η γνώση του είναι must στους χώρους των Unix +users. + +Πατήστε το πλήκτρο **i** (insert mode) και γράψτε: + + hello .. HELLO + auto einai ena + arxeio dokimhs + telos. + + Πατήστε τώρα το Esc (command mode). + Πατήστε το : και χωρίς να πατήσετε Enter + πατήστε χ πατήστε το Enter. + Τώρα έχετε σώσει στον τρέχοντα κατάλογο + ένα αρχείο με όνομα test + Δώστε cat test + Θα πάρετε σαν έξοδο αυτά που γράψατε στο test. + +Κάντε τα ίδια βήματα πάλι αλλά αυτή τη φορά αλλάξτε το κείμενο και oνομάστε το αρχείο *test1*. + + Δώστε: cat test1 + Θα πάρετε σαν έξοδο αυτά που γράψατε στο test1. + +Τώρα γράψτε: + + cat test test1 > test2 + και πατήστε Enter + +θα δημιουργηθεί ένα αρχείο με όνομα *test2* στο οποίο αν κάνετε **cat test2** θα δείτε τα περιεχόμενα του *test1* κάτω απ \'αυτά του *test*. **Τρομερό +ε;**.Τέλος πάντων αυτός είναι ένας τρόπος να συνδιάζουμε περιεχόμενα αρχείων.Φαίνεται άσκοπο αλλά είναι πολύ χρήσιμο. + +Άς υποθέσουμε τώρα ότι θέλουμε να αντιγράψουμε το αρχείο **test2** στον υποκατάλογο /usr/local/. + +**cp test2 /usr/local** + +Όπως θα δείτε το αρχείο υπάρχει πλέον σε δύο σημεία.Στον κατάλογο που το είχατε δημιουργήσει, και στο /usr/local/.Όμως εμείς σαν ανήσυχα μυαλά που είμαστε δεν +το θέλουμε το αρχείο στο */usr/local* αλλά κάπου αλλού π.χ. στο */home*. + +**mv /usr/local/test2 /home** + +Και ως δια μαγείας το αρχείο εξαφανίζεται από το /usr/local και διακτινίζεται στο /home. + +Ωραία τώρα ξεθαρρέψαμε,φτιάχνουμε δικά μας αρχεία,τα αντιγράφουμε,τα μεταφέρουμε και γενικώς έχομεν χάσει τον μπούσουλα. Ψάχνουμε να τα βρούμε αλλά αυτά έχουν +εξαφανιστεί. + +**find / -name \"όνομα αρχείου που θέλουμε να βρούμε\"** + +Τώρα ξέρουμε και πως να βρίσκουμε αρχεία. Πως τα σβήνουμε όμως; + +**rm \[όνομα αρχείου που θέλουμε να σβήσουμε\]** + +Ωραία λοιπόν κάναμε τα πρώτα μας βήματα στο **LINUX** είμαστε χαρούμενοι πια που δεν κοιτάμε απλώς την οθόνη αλλά της γράφουμε και κάτι απάνω, και γενικώς +ευελπιστούμε οτι μια μέρα θα γίνουμε κι εμείς **LINUX GURU** και θα κοιτάμε τους αρχάριους αφ\' υψηλού. + +Αφού γράψαμε, σβήσαμε, χάσαμε, ξαναβρήκαμε την δουλειά μας καιρός να την μεταφέρουμε κι όλας, βάζουμε την δισκέττα στο drive και ετοιμαζόμαστε να αντιγράψουμε +τα πολύτιμα αρχεία μας σ\' αυτήν.**Πώς όμως;**, το linux δεν είναι msdos εμείς έχουμε όλες μας τις δισκέττες φορμαρισμένες σε dos format τώρα τι γίνεται; + + Ευτυχώς το Linux υποστηρίζει και άλλα συστήματα αρχείων εκτός + του δικού του (ext2fs) + Μερικά απ' αυτά είναι : + a)msdos: Φυσικά μιλάμε για το γνωστό msdos με το κουλό σύστημα ονομασίας 8.3 + b)vfat: Το σύστημα αρχείων των ακατανόμαστων που υποστηρίζει long filenames + +Ουφ! Ησυχάσαμε τώρα αφού μπορούμε να χρησιμοποιήσουμε τις δισκέττες μας όπως είναι χωρίς να μπλέξουμε με φορμαρίσματα και άλλα λοιπά περίεργα.Γράφουμε λοιπόν +*a:* συνηθισμένοι από το dos αλλά δεν γίνεται τίποτα.*Πως θα διαβάσουμε και θα γράψουμε στις δισκέττες μας;*.Η λύση είναι η εντολή **mount**. Πριν πούμε όμως +γι\' αυτήν ας δούμε μια άλλη εντολή. + +**mkdir /floppy** + +Η εντολή αυτή φτιάχνει καταλόγους. Στην συγκεκριμένη περίπτωση φτιάχνει έναν κατάλογο στην αρχή του δέντρου ο οποίος ονομάζετε *floppy* . Όπως θα είδατε κατά τη +διαδικασία της εγκατάστασης οι σκληροί δίσκοι ονομάζονται με την σύντμηση τους (hd για IDE και sd για SCSI) και έναν αριθμό (0 για τον πρώτο 1 για τον δεύτερο +κ.ο.κ) έτσι και τα floppy disk (fd0, fd1 κλπ).Για να δούμε τώρα το floppy του κουβά μας πρέπει να το εντάξουμε στο σύστημα.Αυτό γίνεται με την *mount*.Βάσική +προυπόθεση να γνωρίζουμε τι format είναι οι δισκέττες μας. Ας δώσουμε λοιπόν: + +**mount -t vfat /dev/fd0 /floppy** + +Ακούμε τώρα το drive να δουλεύει και αλλάζουμε κατάλογο. + +**cd /floppy** + +**cp {αρχείο που θέλουμε να αντιγράψουμε-διαδρομή και όνομα-} /floppy** + +**ls -F** + +Βλέπουμε με περηφάνεια ότι καταφέραμε να αντιγράψουμε το αρχείο μας στο floppy και περιχαρείς ετοιμαζόμαστε να βγάλουμε τη δισκέττα απο το drive.OXI MH !! +Πρέπει πρώτα να απενεργοποιήσουμε τη συσκευή. + +**umount /dev/floppy** + +Μ\' αυτήν την εντολή απενεργοποιήσαμε το floppy .Βγάλτε τώρα τη δισκέττα και κάντε την ότι θέλετε. + +Και με το cdrom τι γίνεται; Η εντολή είναι ίδια με την διαφορά ότι εδώ δεν μας απασχολούν τα διαφορετικά format αφού το format είναι ένα το iso9660, οπότε όταν +έχετε να διαβάσετε ένα cd γράψτε: + +**mount -t iso9660 /dev/cdrom /cdrom** + +Και με τα audio cd τι γίνεται;Διαβάστε το Sound HOWTO και θα έχετε και ήχο (Ωραίο πράγμα ρε παιδί μου να ακούς τους **MOTORHEAD** από τα ηχειάκια του υπολογιστή +σου ένώ βλέπεις τις τελευταίες τσοντοφωτογραφίες της Πάμελα που κατέβασες από το internet). + +Αν δεν έχετε */cdrom* φτιάξτε το.Συνήθως οι κατάλογοι /floppy και /cdrom βρίσκονται μέσα στον κατάλογο */mnt* τροποποιείστε ανάλογα το μονοπάτι του δεύτερου +κομματιού της mount και όλα θα δουλεύουν μια χαρά. + +Μετά απ\' όλα αυτά τα εποικοδομητικά καιρός να κλείσουμε τον κουβά μας και να πάμε για ύπνο (το έτερον ήμισυ φωνάζει από το μέσα δωμάτιο ότι θα φύγει και θα +πάρει μαζί της και την kerosan) + +Έτοιμοι πια να αντιμετωπίσουμε άλλον ένα συζυγικό καυγά με θέμα το πόσες ώρες θα αφιερώνουμε σε \'κεινη και πόσες στον υπολογιστή, κατευθύνουμε το χέρι μας στο +κουμπί POWER του αγαπημένου μας(\...!) **ΠΟΤΕ ΜΑ ΠΟΤΕ** μην το κάνετε αυτό (καλά εντάξει καμμιά φορά χρειάζεται).Δώστε την εντολή: + +**shutdown -h now** + +ή την εντολή : **halt** + +Αν πάλι τελευταία στιγμή αποφασίσατε ότι ο υπολογιστής είναι καλύτερος από τη γυναίκα σας τότε δώστε : + +**shutdown -r now** + +ή την εντολή : **reboot** για να επανεκκινήσετε τον αγαπημένο σας(\...!) + +Τελευταίο αλλά καλό. Πατώντας μαζί Ctrl Alt F1 - F6 μπαίνετε σε διαφορετικές κονσόλες και μπορείτε να δουλεύετε πολλά προγράμματα μαζί (multitasking λέγεται) +αλλά αυτό το ξέρατε ε ξεφτέρια μου; + + +### [5. Οδηγίες για την σωστή ανατροφή του.]{#s5} + +Και τώρα φυσικά θα αναρωτιέστε πως τα ήξερα εγώ όλ\' αυτά ή πως όλοι αυτοί οι γκουρού του είδους γνωρίζουν τόσα πράγματα.Η απάντηση είναι απλή. +**DOCUMENTATION** τι είν\' τούτο πάλι ε; Λοιπόν το *documentation* είναι όλα αυτά που έχουν γραφτεί για το LINUX. Και αρχίζουμε: + +- **man** (εντολή) Σύντμηση της λέξης manual.Μία καλή ιδέα είναι να πάτε στο **/bin** και να κάνετε man σε κάθε αρχείο που υπάρχει εκεί μέσα. Xρήσιμες είναι + οι: +- **man ls**: Οδηγίες για την εντολή ls +- **man cp**: Οδηγίες για την εντολή cp +- **man mv**: Οδηγίες για την εντολή mv +- **man bash**: Οδηγίες για το bash (δεν ξέρετε τι είναι ε; Άντε λοιπόν τι περιμένετε). +- **HOWTO** :Οδηγίες για να κάνετε διάφορα πράγματα. Βρίσκονται συνήθως στο **/usr/doc/HOWTO** +- **Internet** :Υπάρχουν άπειρες λίστες με νέα και πληροφορίες για το LINUX .Δοκιμάστε το [www.dejanews.com](http://www.dejanews.com) που συγκεντρώνει τα + email από διάφορες λίστες και το [linuxwebwatcher.org](http://webwatcher.org) που περιέχει καταχωρίσεις για όλα τα γνωστά sites που σχετίζονται με το linux. +- **magaz** :Μα φυσικά το online περιοδικό που διαβάζετε τώρα. +- **Βιβλία** :Υπάρχουν αρκετά καλά βιβλία σχετικά με το linux (μάλιστα έχει εκδοθεί και κάποιο στα ελληνικά).Κάντε μία βόλτα στο γνωστό μεγαλοβιβλιοπωλείο και + ρίξτε μια ματιά.Τα Βιβλία πάντως που χρησιμοποιώ εγώ σαν οδηγούς είναι:a)**linux Complete Command Reference** , b)**Red Hat Linux Unleashed** (αν και + δουλεύω με SuSe) και σαν pocket guide το **Linux in a nutshell** +- **Περιοδικά** :Το **RAM** έχει αρχίσει εδώ και κάποια τεύχη να γράφει για το linux ενώ υπάρχει και το πολύ καλό **Linux journal**. + +Αυτά λοιπόν για την ώρα.Ελπίζω για αρχή να βοήθησα λίγο .Σε κάποιο μελλοντικό άρθρο ελπίζω να μιλήσουμε για τα *configuration files*. Μέχρι τότε..Αντίο και να +θυμάστε :**Linux the operating system with an attitude**. + diff --git a/content/articles/12/03_nls2.md b/content/articles/12/03_nls2.md new file mode 100644 index 0000000..4d6b4bd --- /dev/null +++ b/content/articles/12/03_nls2.md @@ -0,0 +1,370 @@ ++++ +title = 'NLS+GNU - Τι-πώς-πού-πότε-γιατί;' +date = '1999-02-01T00:00:00Z' +description = '' +author = 'Νίκος Μαυρογιαννόπουλος' +issue = ['Magaz 12'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μιας και το nls χρησιμοποιείται όλο και περισσότερο στα νέα προγράμματα (ιδιαίτερα αυτά που αποτελούν το GNU σύστημα), είναι αναγκαίο να κάνουμε μια περιγραφή +της διαδικασίας που χρειάζεται για να το ενσωματώσουμε και στα δικά μας προγράμματα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η άδεια του gettext για τα κομμάτια που θα ενσωματώσουμε στο προγραμμά μας είναι η GNU LGPL που δεν μας περιορίζει στον καθορισμό της άδειας του προγράμματός +μας. Κοιτάξτε την πάντως για να δείτε αν είστε συμβατοί(!). + +Ας προσπεράσουμε όμως τα \"τυπικά\" και ας περάσουμε στο ψητό. Τα προγράμματα που θα χρειαστούμε είναι τα GNU autoconf και gettext-0.10, και βρίσκονται στο πιο +κοντινό gnu mirror. + +\* Εδώ θα προσπαθήσουμε να προσθέσουμε υποστήριξη εθνικής/τοπικής γλώσσας (nls) σε ένα προγραμμα γραμμένο σε C. Ας δούμε ένα απλό πρόγραμμα, που τυπώνει την ώρα +στην οθόνη: + + #include + #include + + main () + { + time_t tv; + + printf( "The time is: " ); + time(&tv); + printf ( "%s",ctime(&tv) ); + + } + +\* Η ώρα όπως και το μήνυμα τυπώνεται στα αγγλικά. Επειδή η μετάφραση πρέπει να γίνει γενικά - δηλαδή το ίδιο πρόγραμμα να τρέχει και στα γερμανικά και στα +ελληνικά και σε οποιαδήποτε άλλη γλώσσα - δεν μεταφράζουμε απ\'ευθείας το κείμενο. Χρησιμοποιούμε τα localedata και την βιβλιοθήκη intl της C βιβλιοθήκης. Ας +χρησιμοποιήσουμε τα localedata (τοπικά δεδομένα) για την ώρα. + +Το ίδιο πρόγραμμα τώρα γίνεται: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + #include + #include + + main () + { + struct tm *tp; + char buf[80]; + time_t date; + + /* Θέτει το locale σύμφωνα με την μεταβλητή περιβάλλοντος LANG ή LANGUAGE + * Για τα ελληνικά πρεπει να είναι el (ISO639) */ + setlocale (LC_TIME, ""); /* Για την ώρα και μόνο */ + + printf( "The time is: " ); + + time(&date); + + /* Μετατρέπει την ώρα έκφραση που συνδέεται με την ζώνη ώρας */ + tp = localtime(&date); + strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %z %Y", tp); + + /* εκτυπώνει την ώρα */ + printf ("%s\n",buf); + + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η ώρα τώρα θα τυπωθεί στην μορφή: `Τετ Νοέ 11 22:44:29 +0200 1998` με ελληνικούς χαρακτήρες όπως βλέπετε (αν LANG=el ή gr για τις +παλιές glibc2). Γι\'αυτό ξεχάστε το ctime και ασχοληθείτε με το strftime(). + +\* Σε περίπτωση που δεν είδατε ελληνικούς χαρακτήρες ελέγξτε αν στο /usr/share/locale/el υπάρχουν τα απαραίτητα αρχεία. Αν δεν υπάρχουν προμηθευτείτε ένα νέο +localedata - συμπεριλαμβάνεται συνήθως στην libc ή εγκαταστήστε το tarball που βρίσκεται στο + + +\* Για την μετάφραση των μηνυμάτων, που είναι και η κυριότερη ιδιότητα του NLS χρησιμοποιείται ο εξής τρόπος: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + #include + #include + #include /* αρχείο της GNU libc */ + + main () + { + struct tm *tp; + char buf[80]; + time_t date; + + /* πέρα απο το LC_ALL υπάρχουν τα LC_TIME, LC_MESSAGES κλπ, τα οποία + * προσδιορίζουν επ'ακριβώς τί μεταφράσεις θα χρησιμοποιήσουμε. + */ + setlocale (LC_ALL, ""); + + bindtextdomain ("my_time", "/usr/share/locale"); + textdomain ("my_time"); + + printf( gettext("The time is: ") ); + + time(&date); + tp = localtime(&date); + strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %z %Y", tp); + + printf ("%s\n",buf); + + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οι εντολές bindtextdomain() και textdomain() αφορούν την nls βιβλιοθήκη (libintl) και την πληροφορούν ότι η μετάφραση του προγράμματος βρίσκεται στο my\_time.mo +στον κατάλογο /usr/share/locale/XX, όπου ΧΧ η γλώσσα του χρήστη (καθορίζεται απο την μεταβλητή LANG ή LANGUAGE). + +Επειδή πολλές φορές το να γράφουμε gettext(\...) είναι επίπονο για πολλά μηνύματα, χρησιμοποιούμε το: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #define _(Text) gettext(Text) /* στις επικέφαλίδες */ + + printf( _("The time is: ") ); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το πρόγραμμα δεν θα λειτουργήσει ακομη με ελληνικά. Χρειάζεται ακόμη την δημιουργία του .po αρχείου. Αυτό είναι σχετικά απλό αν γίνει με το πρόγραμμα xgettext +(από το πακέτο GNU gettext). Για το συγκεκριμένο πρόγραμμα η έξοδος του xgettext είναι: (σύνταξη \"xgettext my\_time.c\") + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # messages.po + # SOME DESCRIPTIVE TITLE. + # Copyright (C) YEAR Free Software Foundation, Inc. + # FIRST AUTHOR , YEAR. + # + #, fuzzy + msgid "" + msgstr "" + "Project-Id-Version: PACKAGE VERSION\n" + "POT-Creation-Date: 1998-11-11 22:52+0200\n" + "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" + "Last-Translator: FULL NAME \n" + "Language-Team: LANGUAGE \n" + "MIME-Version: 1.0\n" + "Content-Type: text/plain; charset=CHARSET\n" + "Content-Transfer-Encoding: ENCODING\n" + + #: c.c:16 + msgid "The time is: " + msgstr "" + + #end of messages.po + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και εδώ μετονομάζουμε το messages.po σε el.po, προσθέτοντας ταυτόχρονα στο msgstr την μετάφραση, πχ: msgstr \"Η ώρα είναι: \" + +\* Τελευταίο μέλημα του προγραμματιστή είναι να μετατρέψει αυτό το .po αρχείο σε .mo ή .gmo μορφή. Αυτό επιτυγχάνεται με το πρόγραμμα msgfmt (από το GNU gettext +πάλι). πχ msgfmt el.po -o el.gmo και μετά να αντιγραφεί στο /usr/share/locale/el/LC\_MESSAGES/ το el.gmo σαν my\_time.mo (αυτά τα τελευταία καλό είναι να γίνουν +μέσω κάποιου makefile). + +\* Autoconf Το σημαντικότερο τώρα είναι να αυτοματοποιήσουμε αυτή τη διαδικασία. Αυτό επιτυγχάνεται με το GNU autoconf. Ας φτιάξουμε ένα configure.in που θα +ελέγχει κατά πόσο υπάρχει υποστήριξη nls από την libc και καθώς και του strftime. (για καλύτερες διαμορφώσεις κοιτάξτε στο: +) + +Για να απλοποιήσουμε τα πράγματα θεωρούμε την εξής διαμόρφωση των αρχείων του προγράμματος: (έστω ότι το πρόγραμμα είναι στο /xxx) στον κατάλογο /xxx/ +configure.in: Χρειάζεται για το autoconf (δείτε παρακάτω) config.h.in : (δείτε παρακάτω) + + στον κατάλογο /xxx/src/ + my_time.c : Το πρόγραμμα + + στον κατάλογο /xxx/po/ + my_time.pot : Αυτό είναι το messages.po που δημιουργείται απο το + xgettext απλώς μετονομασμένο + el.po : Το my_time.pot μεταφρασμένο στα ελληνικά + POTFILES.in : Εδώ προσθέτετε όλα τα .c αρχεία στο src που χρησιμοποιούν + το gettext. πχ: + /xxx/src/my_time.c + +Αρκεί τώρα να αντιγράψετε απο το πακέτο gettext-0.10 τα po/Makefile.in στον κατάλογο του προγραμματός /xxx/po/ , όλο τον κατάλογο intl/ στον /xxx/intl/ και τα +ABOUT-NLS, aclocal.m4 στον /xxx . + +Πάμε τώρα στον πρωταρχικό κατάλογο του προγράμματός μας (/xxx) και ας φτιάξουμε το configure.in απο το οποίο θα προκύψει το γνωστό(;) script configure. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # configure.in for my_time.c + AC_INIT() + AC_CONFIG_HEADER(config.h) + + AC_PROG_CC + AC_PATH_PROG(MAKE,make) + AC_PROG_INSTALL + + VERSION=1.0 + PROGRAMS="my_time" + + AC_PREFIX_DEFAULT(/usr/local) + AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") + AC_DEFINE_UNQUOTED(VERSION, "$VERSION") + AC_SUBST(PACKAGE) + AC_SUBST(VERSION) + AC_SUBST(PROGRAMS) + + dnl υποστηρίζουμε ελληνικά (τό el είναι απο το iso639 που πρέπει να + dnl χρησιμοποιείται για την ένδειξη γλώσσας στις μεταφράσεις σύμφωνα με το + dnl εγχειρίδιο το gettext.) + ALL_LINGUAS="el" + + dnl Για το gettext 0.10. + ud_GNU_GETTEXT + + AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) + + AC_FUNC_STRFTIME + + AC_OUTPUT([Makefile src/Makefile intl/Makefile po/Makefile.in + [sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile]) + + #end of configure.in + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και αμέσως μετά δημιουργούμε ένα config.h.in (είναι βάση του αρχείου config.h που θα συμπεριλαμβάνεται στο πρόγραμμά μας. Η δημιουργία του config.h γίνεται απο +το script configure.) Το config.h.in θα περιέχει: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # config.h.in for my_time.c + /* Το όνομα του πακέτου (θα χρησιμοποιηθεί για το textdomain) */ + #undef PACKAGE + #undef VERSION + + /* strftime */ + #undef HAVE_STRFTIME + #undef ENABLE_NLS + + #end of config.h.in + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το Makefile.in για το πρόγραμμα (το Makefile δημιουργείται επίσης αυτόματα απο το configure), πρέπει να έχει σε γενικές γραμμές τα: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # Makefile.in + CC = @CC@ + LIBS = @LIBS@ + CCOPTS = @CFLAGS@ -I. -I.. + LN = @LN_S@ + INSTALL = @INSTALL@ + prefix = @prefix@ + exec_prefix = @prefix@ + datadir = $(prefix)/lib + bin = $(prefix)/bin + localedir = $(datadir)/locale + DEFS = -DLOCALEDIR=\"$(localedir)\" + SUBDIRS = @INTLSUB@ src @POSUB@ + MAKE = @MAKE@ + INSTALL = @INSTALL@ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\#Εάν ο κώδικας σας δεν είναι στον src/ κατάλογο χρειάζεται ορισμένες αλλαγές + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + all: + @for subdir in $(SUBDIRS); do \ + echo making all in $$subdir; \ + (cd $$subdir && $(MAKE) all) \ + || case "$(MFLAGS)" in *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" + + install: + @$(INSTALL) my_time $(bin) + @$(MAKE) -C po/ install + + # end of makefile.in + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # src/Makefile.in + # Εδώ οι επικεφαλίδες είναι περίπου ίδιες με πριν: + CC = @CC@ + LIBS = @LIBS@ + CCOPTS = @CFLAGS@ -I../intl -I. -I.. + LN = @LN_S@ + INSTALL = @INSTALL@ + prefix = @prefix@ + exec_prefix = @prefix@ + datadir = $(prefix)/lib + localedir = $(datadir)/locale + DEFS = -DLOCALEDIR=\"$(localedir)\" + + all: my_time + + my_time: my_time.o + $(CC) $(OBJECTS) -o ../my_time $(LIBDIRS) $(LIBS) + + my_time.o: my_time.c + $(CC) -c my_time.c $(CCOPTS) $(DEFS) + + #end of src/Makefile.in + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το πρόγραμμα τώρα θα γίνει: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # src/my_time.c + + #include + #include + #include /* ή "config.h" αν δεν βάλετε το -I. στο Makefile */ + + #ifdef ENABLE_NLS + #include + #endif + + main () + { + #ifdef HAVE_STRFTIME + struct tm *tp; + char buf[80]; + time_t date; + #else + time_t tv; + #endif + + + #ifdef ENABLE_NLS + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + # define _(Text) gettext(Text) + #else + # define _(Text) (Text) + #endif + + + printf( _("The time is: ") ); + + #ifdef HAVE_STRFTIME_H + time(&date); + tp = localtime(&date); + strftime(buf, sizeof buf, "%a %b %e %H:%M:%S %z %Y", tp); + printf ("%s\n",buf); + #else + time(&tv); + printf ( "%s",ctime(&tv) ); + #endif + + } + + #end of src/my_time.c + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τώρα τρέχουμε το autoconf που δημιουργεί το configure script. Aν όλα πήγαν καλά έχουμε ένα πρόγραμμα που μιλάει ξένες γλώσσες! + +\* Το παραπάνω κείμενο είναι μια εισαγωγή μόνο στο θέμα. Δεν έιναι σε καμιά περίπτωση πλήρες, αν θέλετε παραπάνω πληροφορίες συμβουλευτείτε τα εγχειρίδια των +προγραμμάτων autoconf, gettext. Περισσότερα για το gettext (και την χρήση του με το autoconf) στο: diff --git a/content/articles/12/04_opti.md b/content/articles/12/04_opti.md new file mode 100644 index 0000000..286749a --- /dev/null +++ b/content/articles/12/04_opti.md @@ -0,0 +1,240 @@ ++++ +title = 'ΕΛΛΗΝΙΚΟ OPTi931 Mini-HOWTO' +date = '1999-02-01T00:00:00Z' +description = '' +author = 'Παύλος Παρίσσης' +issue = ['Magaz 12'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το κείμενο αυτό περιγράφει την υποστήριξη του Linux για ήχο με την κάρτα ήχου OPTi82C931.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τα παρακάτω βήματα είναι αυτά που χρειάστηκαν να γίνουν ώστε η OPTi82C931 να δούλεψη κάτω από Linux. + +**1. Ο εύκολος τρόπος:** +----------------------------------------------- + +**2. Ρυθμίζοντας τον Πυρήνα:** +----------------------------------------------------- + +**3. OPTi82C931 και kernel 2.0.x ή 2.1.Χ** +----------------------------------------------------------------- + +**4. Tips** +---------------------------------- + +kernel, τρέχτε τον οδηγό και θα έχετε ήχο. Αυτή είναι μια πολύ εύκολη λύση αλλά κοστίζει \$20. Υπάρχει και μια δοκιμαστική έκδοση αυτού του οδηγού που είχα +κατεβάσει και δούλεψε τέλεια αλλά είχα ήχο μόνο για 3 ώρες σε κάθε τρέξιμο του οδηγού και επιπλέον θα έπρεπε να κατεβάζω και να ξανά κατεβάζω τον οδηγό +συνεχεία!. Επειδή είναι τρελό να δώσετε \$20 για έναν οδηγό για μια κάρτα που κοστίζει \$15 διαβάστε τα παρακάτω και σε 30 λεπτά θα έχετε ήχο για πάντα, δωρεάν +και θα εμπλουτίσετε τις γνώσεις σας. + + +### [2. Ρυθμίζοντας τον Πυρήνα:]{#s2} + +Αυτές οι οδηγίες αρμόζουν μόνο στους kernel 2.0.x για τους kernel 2.1.Χ και 2.2.X θα αναφερθώ αργότερα.\ +Πρέπει να κάνετε compile τον ήχο σαν module. Θα πρέπει να έχετε και τον [OSS Free Sound Driver](../files/ossfree38s9-linux20x_tar.gz) κατεβαστέ την τελευταία +έκδοση κάντε ότι λεει το [README](../files/ossfree38s-linux20x.README) αρχείο και ξεκινήστε την διαδικασία compile με make config(menu ή xconfig) και δώστε τις +παρακάτω σαν απαντήσεις : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + M Sound card support + + Y Generic OPL2/OPL3 FM synthesizer support + + Y MPU-401 support (NOT for SB16) + + Y Microsoft Sound System support + + Y FM synthesizer (YM3812/OPL-3) support + + 330 I/O base for MPU401 Check from manual of the card + + 5 MPU401 IRQ Check from manual of the card + + 530 MSS/WSS I/O base 530, 604, E80 or F40 + + 7 MSS/WSS IRQ 7, 9, 10 or 11 + + 0 MSS/WSS DMA 0, 1 or 3 + + 1 MSS/WSS second DMA (if possible) 0, 1 or 3 + + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Είναι χρήσιμο να πατε στο DOS/Windows και στον κατάλογο OPTI931 να τρέξετε sndinit /b έτσι θα δείτε τα IRQ μετά οποία είναι σεταρισμένη η κάρτα σας. Ακόμα αν +θέλετε να δείτε τα IRQ που δέχονται ή όχι οι συσκευές ανοίχτε το /etc/isapnp.conf αλλά είναι σχετικά απίθανο να έχει διαφορετικά από ότι πρέπει να δώσετε +σύμφωνα με τα παραπάνω. + +Μετά κάντε τα κλασσικά βήματα make dep, make clean, make zImage, make modules και make modules\_install. + +- ISAPNPTOOLS: + + Το επόμενο βήμα είναι να κατεβάσετε εάν δεν έχετε και να τρέξετε το isapnp. Μπορείτε να το κατεβάσετε τα [από εδώ](../files/isapnptools-1.17-0.1.i386.rpm). + Μόλις τελειώσετε με το setup των tools τρέχτε isapnp και έτσι θα δημιουργηθεί ένα [/etc/isapnp.conf](../files/isapnp.conf) αρχείο μετά τρέχτε pnpdump \> + isapnp.conf. + + Σε αυτό το σημείο θέλει μεγάλη προσοχή, πρέπει να τροποποιήσετε το isapnp.conf ώστε να ταιριάζει με τις τιμές που δώσατε στο compile. \'Εχω διαθέσιμο το + δικό μου isapnp.conf(κάνε το link το αρχείο) ώστε να το έχετε σαν οδηγώ. Το πιο σημαντικό από όλα είναι να προσθέστε την παρακάτω γραμμή στο isapnp.conf : + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + (CSN 1 (LD 0 (REG 2 (POKE 4)))) + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Αυτή η γραμμή απενεργοποιεί το PnP της κάρτας ώστε να μπορούμε να την ρυθμίσουμε έτσι όπως θέλουμε. Μετά τρέχτε isapnp /etc/isapnp.conf και θα πάρετε τα + παρακάτω + + Board 1 has Identity 74 ff ff ff ff 31 09 14 3e: OPT0931 Serial No + 42949672................. + +- Γράφοντας τις ρυθμίσεις στην OPTi931 : + + Πρέπει να κάνουμε compile και να τρέξουμε ένα [μικρό πρόγραμμα](../files/OPTi82C931.c). Ένα μεγάλο ευχαριστώ στον [Donald + MBurns](mailto:donald@sequel.demon.co.uk).\ + Επισκεφθείτε την [σελίδα του](http://www.sequel.demon.co.uk/opti.html) του για να μάθετε περισσότερα για το πρόγραμμα και την OPTi931. Αυτό που κάνει το + πρόγραμμα είναι να γράφει τις ρυθμίσεις της OPTi931. Εδώ είναι και η γραμμή εντολής που θέτει την OPTi931 στις ρυθμίσεις που περιγράψαμε νωρίτερα + + (MSS io-530, irq-7, dma-0, MPU-401 io-330, irq-5). + + Για να κάνετε compile το πρόγραμμα χρησιμοποιήστε τον gcc compiler ή οποίον άλλον θέλετε, εγώ χρησιμοποιώ τον gcc και κάντε compile έτσι: + + gcc -O3 OPTi82C931.c -o OPTi82C931 + + και μετά τρέχτε το : + + ./OPTi82C931 0 0x07 1 0x07 3 0x09 4 0x14 5 0x3E** 0x92 + + και θα πρέπει να δείτε τα παρακάτω : + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + MCR0 <- 07 + MCR1 <- 07 + MCR3 <- 09 + MCR4 <- 14 + MCR5 <- 3E + MCR6 <- 92 + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + \*\* Στο /usr/src/linux/Documentation/sound/Opti διάβασα ότι ο IO3 base πρέπει να είναι 0x0E0C και όχι 0x0E0E αλλά και τα δύο δουλεύουν! εγώ έχω C εάν + βάλετε E πρέπει να πάτε και στο /etc/isapnp.conf και εκεί που λεει (IO 3 (BASE 0x0E0C)) να βάλτε (IO 3 (BASE 0x0E0E)) καθώς και στην εντολή ./OPTi82C931 να + είναι E αντί C. + +- Φόρτωμα του sound module : + + Είμαστε ένα βήμα πριν να ακούσουμε μουσική, πρέπει να φορτώσουμε το module δίνοντας insmod sound και εάν έχετε ανοιχτά τα ηχεία σας θα ακούσετε ένα μικρό + ήχο. + + Δείτε το /den/sndstat με την εντολή cat /dev/sndstat \| more και επιβεβαιώστε ότι έχετε επιτυχώς φορτώσει την module. Η έξοδος θα πρέπει να είναι η παρακάτω + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + OSS/Free3.8s9-980302 (Mon Jan 25 14:08:59 GMT 1999 root, + Linux localhost.localdomain 2.0.36 #1 Sat Jan 23 00:14:33 GMT 1999 i586 unknown) + Load type: Driver loaded as a module. + Kernel: Linux localhost.localdomain 2.0.36 #1 Tue Jan 26 17:05:59 GMT 1999 i586 + Config options: 0 + + Installed drivers: + Type 10: MS Sound System + Type 27: Compaq Deskpro XL + Type 1: OPL-2/OPL-3 FM + Type 5: Roland MPU-401 + + Card config: + MS Sound System at 0x530 irq 7 drq 0,1 + Roland MPU-401 at 0x330 irq 5 drq 0 + OPL-2/OPL-3 FM at 0x388 drq 0 + + Audio devices: + 0: MSS audio codec (82C930) (DUPLEX) + + Synth devices: + 0: Yamaha OPL-3 + + Midi devices: + 0: MPU-401 0.0 Midi interface #1 + + Timers: + 0: System clock + + Mixers: + 0: MSS audio codec (82C930) + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Το πιο σημαντικό είναι να έχετε ένα device κάτω από κάθε device εάν όχι κάτι δεν έγινε σωστά. + +- Το τελευταίο βήμα + + Όσοι από εσάς κάνατε reset μετά τα παραπάνω δεν θα έχετε ήχο! Και αυτό διότι κάτι λάθος γίνετε στο /etc/rc.d/rc.sysinit. Για αυτό ανοίξτε το και σε κάποιο + σημείο θα λέει τα παρακάτω : + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # load sound modules + if ! grep -i nomodules /proc/cmdline >/dev/null ; then + if [ -n "$USEMODULES" ]; then + if grep -s "alias sound" /etc/conf.modules > /dev/null ; then + modprobe sound + if grep -s "alias midi" /etc/conf.modules > /dev/null ; then + modprobe midi + fi + fi + fi + fi + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + εσείς θα πρέπει να κάνετε τις παρακατω αλλαγές ωστε να έχετε για πάντα ήχο, κρατήστε και ένα backup κάπου για καλό και για κακό : + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # load sound modules + if ! grep -i nomodules /proc/cmdline >/dev/null ; then + if [ -n "$USEMODULES" ]; then + # if grep -s "alias sound" /etc/conf.modules > /dev/null ; then + # modprobe sound + OPTi82C931 0 0x07 1 0x07 3 0x09 4 0x14 5 0x3E** 0x92 + insmod sound + # if grep -s "alias midi" /etc/conf.modules > /dev/null ; then + # modprobe midi + # fi + # fi + fi + fi + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Μην ξεχάσετε να αντιγράψετε το OPTi82C931, όχι το OPTi82C931.c, στον κατάλογο /bin + + Αυτός ο τρόπος δούλεψε μετά απο πολύ ταλαιπωρία στο RedHat 5.1 που έχω αλλά προφανώς δουλεύει σε όλα τα άλλα. Ελπίζω με αυτό το κείμενο να γλίτωσα μερικούς + απο την ταλαιπωρία. Τελειώσαμε και καλές μουσικές αναζητήσεις:) + + +### [3. OPTi82C931 και kernel 2.0.x ή 2.1.Χ]{#s3} + +Για αυτούς που έχουν τους παραπάνω kernels δεν θα χρειάζεται να κάνουν τίποτα απο τα παραπάνω διότι η OPTi82C931 υποστηρίζετε απο αυτους. Το μόνο που πρέπει να +κάνουν είναι να διαβάσουν το Opti.txt που βρίσκετε στον κατάλογο με τα docs. + + +### [4. Tips]{#s4} + +1. Για να ακούσετε midi file με το Κmid πρέπει να πάτε στα options και midi setup και να επιλέξετε σαν midi device το Yamaha OPL-3-FM και όχι το MPU-401 0.0 + Midi interface \#1- External Midi port +2. Εάν κάτι δεν γίνει σωστά πρέπει πρώτα να κάνετε compile τον kernel χωρίς sound support και μετά πάλι από την αρχή, είναι ο πιο κουραστικός δρόμος αλλά και ο + πιο σωστός. Μην ξεχάσετε να σβήσετε το /etc/isapnp.conf και να το ξανά δημιουργήσετε με την εντολή isapnp. +3. Θέλει μεγάλη προσοχή στο τη δώσατε όταν κάνατε compile και τη έχετε στο isapnp.conf. Εάν δεν συμβαδίζουν οι ρυθμίσεις μην περίμενε να ακούσετε ήχο + +Σε αυτό το σημείο θέλω να ευχαριστήσω τον [David Rees](mailto:drees@spoke.nols.com) που με το δικό του κείμενο άκουσα ήχο στο PC μου. Το OPTi931 Mini-HOWTO που +έχει γράψει θα το βρείτε [εδώ](http://spoke.nols.com/~drees) καθώς και τα απαραίτητα αρχεία. + diff --git a/content/articles/12/05_kernel.md b/content/articles/12/05_kernel.md new file mode 100644 index 0000000..47519ad --- /dev/null +++ b/content/articles/12/05_kernel.md @@ -0,0 +1,155 @@ ++++ +title = 'KERNEL COMPILE' +date = '1999-02-01T00:00:00Z' +description = '' +author = 'Γεωργάτος Φώτης < gef@hellug.gr(mailto:gef@hellug.gr?subject=Kernel-compile)>' +issue = ['Magaz 12'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Με την άφιξη της νέας γενιάς πυρήνων 2.2.0, οι απορίες και τα προβλήματα σχετικά με τον πυρήνα του Linux πληθαίνουν. Ας δούμε μερικές βασικές γνώσεις που +πρέπει να έχει κανείς για να στήσει έναν νέο πυρήνα στο σύστημά του.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στο Linux τον πυρήνα μπορεί κανείς να τον φτιάξει ο ίδιος, με μια διαδικασία που λέγεται compile. Αν και είναι δυνατόν να δουλέψει καποιος με έναν έτοιμο, είναι +καλή ιδέα να φτιάξει έναν πυρήνα προσαρμοσμένο στο σύστημά του, ιδιαίτερα εάν θέλει εξειδικευμένες δυνατότητες. Η διαδικασία συνιστάται ιδιαίτερα σε αυτούς που +θέλουν να μπλέξουν με τα ενδότερα του λειτουργικού συστήματος. + +Υποθέτουμε ότι έχετε κάποιες στοιχειώδεις γνώσεις γύρω από τα λειτουργικά συστήματα και το Internet. Εάν όχι δείτε αυτό: +[Unix-Internet-Fundamentals-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Unix-Internet-Fundamentals-HOWTO.html). + +**1. Τι είναι ο πυρήνας;** +--------------------------------------------------- + +**2. Πώς τον εγκαθιστώ στο σύστημά μου;** +------------------------------------------------------------------ + +- [2.1 Βάλετε τον πυρήνα σε source μορφή στον δίσκο σας](#ss2.1) +- [2.2 Επιλέξτε τι θέλετε να περιλαμβάνει](#ss2.2) +- [2.3 Κάνετε την μεταγλώττισή του πυρήνα](#ss2.3) +- [2.4 Εγκαταστήστε τον και ενημερώστε το Lilo](#ss2.4) +- [2.5 Κάνετε reboot για να δείτε την διαφορά :-)](#ss2.5) + +**3. Που αλλού θα βρείτε πληροφορίες** +--------------------------------------------------------------- + +**4. Τι είναι το SIG11** +------------------------------------------------- + + +### [1. Τι είναι ο πυρήνας;]{#s1} + +Σε ένα πολυεπεξεργαστικό (multitasking) λειτουργικό σύστημα, υπάρχει ένα σημαντικό τμήμα κώδικα που λέγεται πυρήνας (kernel) και αναλαμβάνει την διανομή της +μνήμης μεταξύ των εφαρμογών (memory management) & την διανομή του χρόνου μεταξύ των διεργασιών (scheduling). Προαιρετικά μπορεί να περιλαμβάνει οδηγούς συσκευών +(device drivers) για δίσκους, κάρτες δικτύου, σειριακές θύρες κλπ, τα διάφορα πρωτόκολλα επικοινωνίας, υποστήριξη filesystems και λοιπό κώδικα για την +διαχείρησή τους. + +Ο πυρήνας στο Linux είναι το σημαντικότερο χαρακτηριστικό του, καθώς εκτός από το λειτουργικό σύστημα περιλαμβάνει και τους οδηγούς συσκευών (device drivers) +και πλήθος υλοποιήσεις πρωτοκόλλων και συστημάτων αρχείων. Αποτελείται από 700.000 γραμμές κώδικα C, γραμμένες από πολλούς προγραμματιστές και συντηρούμενες απο +μια ομάδα περίπου 200 μελών με επίβλεψη του Linus Torvalds, ο οποίος ξεκίνησε τον πυρήνα το 1991, καθώς και του Alan Cox. + +Κάθε πυρήνας ακολουθεί ένα ιδιότυπο σύστημα αρίθμησης του τύπου **x.y.z**, όπου x είναι η γενιά του (είμαστε στην 2, κάθε γενιά θέλει χρόνια για να αλλάξει), y +ο τύπος του και z η έκδοσή του. Ειδικά το y παίζει ένα πολύ σημαντικό ρόλο: δείχνει εάν είναι άρτιος πχ 2.0.z ότι ο πυρήνας είναι σταθερός, ή εάν είναι περιττός +πχ 2.1.z ότι είναι πειραματικός (όχι απαραίτητα και ασταθής βέβαια). Θα ανακαλύψετε γρήγορα ότι οι \"ασταθείς\" πυρήνες του Linux είναι κατά κανόνα πιο σταθεροί +από άλλα γνωστά λειτουργικά συστήματα, παρ\' όλα αυτά χρησιμοποιείστε τους με σύνεση. + +Αυτή την στιγμή είμαστε στον σταθερό πυρήνα 2.0.36 και στον πειραματικό 2.1.132. Από τον 2.1.132 προέκυψαν οι 2.2.0pre1-4, δηλαδή είμαστε λίγο καιρό πριν τον +2.2.0. Από τον 2.2.0 θα προκύψουν πάλι δύο κλάδοι: ο 2.2.z και ο 2.3.0 με τις γνωστές ιδιότητες. + +**ΤΕΛΕΥΤΑΙΑ ΝΕΑ: Βγήκε ήδη ο πυρήνας 2.2.0, 2.2.1 καθώς και ο 2.3.0.** Όσοι τον αλλάξετε, να έχετε υπ\' όψιν σας ότι υπάρχουν κάποιες λειτουργικές διαφορές με +την προηγούμενη ομάδα 2.0.χ, και κάποια πράγματα δεν δουλεύουν όπως πριν. Τα ελληνικά πχ (greekconsole), έχουν πρόβλημα. + +Ένα σημαντικό χαρακτηριστικό του είναι τα modules, δηλαδή τμήματα του πυρήνα δεν περιλαμβάνονται στον βασικό τμήμα του (δεν είναι statically compiled όπως +λέμε), αλλά φορτώνονται κατά απαίτηση - on demand, από ένα ειδικό process τον kerneld. Δηλαδή εάν πχ κάνετε mount το cdrom και υπάρξει ανάγκη για το iso9660 +filesystem που είναι module, αυτόματα ο kerneld το φορτώνει, τρέξτε lsmod για να το δείτε. + +Ο πυρήνας είναι προστατευμένος από ανεξέλεγκτη αντιγραφή χάρις στην άδεια GPL. Η άδεια General Public License συνοπτικά, επιτρέπει την διάδοση του κώδικα είτε +σε source είτε σε compiled μορφή, επιβάλει όμως την ίδια νομική άδεια χωρίς περιορισμούς και στα αντίγραφα, κάτι το οποίο έχει παίξει σοβαρό ρόλο στην διάδοση +του Linux. + + +### [2. Πώς τον εγκαθιστώ στο σύστημά μου;]{#s2} + +### [2.1 Βάλετε τον πυρήνα σε source μορφή στον δίσκο σας]{#ss2.1} + +Βρείτε καταρχήν τον πυρήνα που σας ενδιαφέρει σε rpm, tar.gz, ή bz2 (αυτό είναι καινούριο format, όχι ιδιαίτερα διαδεδομένο), πρέπει να έχει μέγεθος γύρω στα +10MB-15MB. Τον τελευταίο πυρήνα μπορεί κανείς να προμηθευτεί από το [www.kernel.org](http://www.kernel.org) και τα mirror sites του, στην περίπτωσή μας το +[ftp.gr.kernel.org](ftp://ftp.gr.kernel.org/pub/linux/kernel/) + +Για να μαθαίνετε ποιός είναι ο τελευταίος πυρήνας μπορείτε να ελέγχετε τακτικά το [www.linuxhq.com](http://www.linuxhq.com), το +[slashdot.org](http://slashdot.org) ή το [freshmeat.net](http://freshmeat.net). + +Ενδεχομένως, έχετε ήδη έναν πυρήνα πρόσφατο στα CD της διανομής που αγοράσατε. Εγκαταστήστε τον (θα βρίσκεται στον υποκατάλογο /usr/src/linux), πιάνει περίπου +30MB αποσυμπιεσμένος. + +### [2.2 Επιλέξτε τι θέλετε να περιλαμβάνει]{#ss2.2} + +Τρέξτε **make config** ή **make menuconfig** ή **make xconfig**, από τερματικό, κονσόλα ή Xwindows αντίστοιχα. Οι πιο πολλοί θα προτιμήσουν από κονσόλα το +menuconfig. Μπορείτε να διαλέξετε τον κώδικα θέλετε να υπάρχει στον πυρήνα σας, με τα πλήκτρα Y, N, Module, Help, δηλαδή να περιληφθεί, να μην, να γίνει module +(θα φορτώνεται δυναμικά, την στιγμή ακριβώς που χρειάζεται), και βοήθεια σχετικά με κάποια επιλογή. + +Συνήθως περιττές επιλογές δεν δημιουργούν προβλήματα, απλά ο πυρήνας είναι μεγαλύτερος και βγάζει πρόσθετα μυνήματα στην εκκίνηση. Μερικά πράγματα +περιλαμβάνονται υποχρεωτικά στατικά, πχ scsi, scsi disk support σε σύστημα με scsi bootable δίσκο (αλλιώς, θα φορτωθεί μεν ο πυρήνας, αλλά δεν θα μπορεί να +διαβάσει το filsystem και τα υπόλοιπα που χρειάζονται στην εκκίνηση). Επίσης το filesystem ext2 είναι πάντα Y, ή εάν ξέρετε γιατί το βγάζετε, άδικα διαβάζετε +αυτό το κείμενο. Εάν είναι η πρώτη φορά που φτιάχνετε πυρήνα, κάντε τις κάρτες ήχου modules ή αποφύγετε τις εντελώς, γιατί οι ιδιοτροπίες τους (irq, addresses, +dma) και το γεγονός ότι κάποιες είναι plug-n-play, κάνουν την κατάσταση πολύπλοκη. + +### [2.3 Κάνετε την μεταγλώττισή του πυρήνα]{#ss2.3} + + cd /usr/src/linux # Τρέξτε du για να δείτε πόσο χώρο πιάνει. + make config # ή make menuconfig ή make xconfig, έχει πολύ χρήσιμο help! + make dep # αυτό είναι απαραίτητο κάθε φορά που τρέχετε make config + make clean # Σβήνει τυχόν προηγούμενα compiles, υποχρεώνει το πλήρες compile + make zImage # μετά από αυτό, υπάρχει ο πυρήνας στο /usr/src/linux/arch/i386/boot/zImage + make modules # Τα modules κανονικά φτιάχνονται πριν αρχίσει η διαδικασία εγκατάστασης + +### [2.4 Εγκαταστήστε τον και ενημερώστε το Lilo]{#ss2.4} + + make modules_install # Τα modules αντιγράφονται στο /lib/modules/x.y.z/ + make install # προσοχή να υπάρχουν οι σωστές ρυθμίσεις στο /etc/lilo.conf + +Η τελευταία εντολή είναι αυτή που θα στήσει τον πυρήνα (συνήθως στο /vmlinuz), συνδέοντάς τον με τον boot loader LILO. Ένα reboot, θα βάλει τον νέο πυρήνα σε +χρήση\... (μόλις βρήκατε τον μοναδικό λόγο που κάνει κανείς reboot με linux). + +Πρέπει το αρχείο **/etc/lilo.conf**, να περιλαμβάνει την εντολή **image=/vmlinuz**, εάν τρέξετε την εντολή make install Επίσης, εάν κάνετε πρώτη φορά την +ρύθμιση αυτή, να έχετε την εντολή install=/dev/fd0 στο /etc/lilo.conf. + +### [2.5 Κάνετε reboot για να δείτε την διαφορά :-)]{#ss2.5} + +Γενικά, θα πρέπει να είναι και η μοναδική φορά που κάνετε reboot στο σύστημά σας όταν τρέχετε Linux. + +Αλλιώς μάλλον κάτι δεν πάει ή δεν κάνετε καλά: Έχετε αξιόπιστο hardware; Ή μήπως κάνετε reboot ενώ θα μπορείτε να το αποφύγετε; Πολλοί κάνουν reboot πχ μόνο και +μόνο για αλλαγές στο υποσύστημα δικτύου. Δεν είναι απαραίτητο: απλά μπείτε σε Single User mode (συνήθως init S) και ξαναβγείτε (συνήθως init 2). + + +### [3. Που αλλού θα βρείτε πληροφορίες]{#s3} + +Υπάρχουν αρκετά σχετικά HOWTO στο Linux Documentation Project: + +- [Kernel-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Kernel-HOWTO.html) +- [Kerneld-mini-HOWTO](http://metalab.unc.edu/LDP/HOWTO/mini/Kerneld.html) +- [Modules-mini-HOWTO](http://metalab.unc.edu/LDP/HOWTO/mini/Modules.html) + +Επίσης, αυτά μπορεί να είναι χρήσιμα + +- [Hardware-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Hardware-HOWTO.html): overview of supported hardware +- [Sound-HOWTO](http://metalab.unc.edu/LDP/HOWTO/Sound-HOWTO.html): sound cards and utilities +- [PCMCIA-HOWTO](http://metalab.unc.edu/LDP/HOWTO/PCMCIA-HOWTO.html): about the drivers for your notebook +- [NET-3-HOWTO](http://metalab.unc.edu/LDP/HOWTO/NET-3-HOWTO.html): networking +- [PPP-HOWTO](http://metalab.unc.edu/LDP/HOWTO/PPP-HOWTO.html): PPP networking in particular +- [ELF-HOWTO](http://metalab.unc.edu/LDP/HOWTO/ELF-HOWTO.html): ELF: what it is, converting.. +- [BogoMips mini-HOWTO](http://metalab.unc.edu/LDP/HOWTO/mini/BogoMips.html): in case you were wondering + + +### [4. Τι είναι το SIG11]{#s4} + +Το SIG11 (ή SIG13) είναι ουσιαστικά ένα σφάλμα προστασίας (Protection Fault). Είναι αρκετά πιθανό να συμβεί την ώρα που φτιάχνουμε πυρήνα και η αιτία είναι ότι +το σύστημα εκείνη την ώρα ζορίζεται. + +**ΔΗΛΑΔΗ: Πολλά και διαφορετικά SIG11 σημαίνουν κακό υλικό ή προβλήματα συμβατότητας με την μνήμη, τον επεξεργαστή, την μητρική.** + +Για περισσότερες πληροφορίες, δείτε: [http://www.bitwizard.nl/sig11](http://www.bitwizard.nl/sig11/). + diff --git a/content/articles/12/06_mailbox.md b/content/articles/12/06_mailbox.md new file mode 100644 index 0000000..0997731 --- /dev/null +++ b/content/articles/12/06_mailbox.md @@ -0,0 +1,582 @@ ++++ +title = 'Αλληλογραφία' +date = '1999-02-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 12'] +issue_weight = 6 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Από το προηγούμενο τεύχος (11), η αλληλογραφία γράφεται αυτόματα. Για οποιαδήποτε ορθογραφικά ή άλλα λάθη, ελπίζουμε να μας συγχωρήσετε. Δεν μπαίνει ανθρώπινο +χέρι από εδώ και κάτω, παρά μόνο για copy και paste.Αυτό έγινε λόγω έλλειψης χρόνου, και ελπίζουμε να έχουμε την κατανόησή σας* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\ +Παρακαλούμε ακολουθήστε τους κάτωθι κανόνες: + +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής Ερώτηση περί Linux δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμιά ματιά στα περασμένα τεύχη, και εννοώ και την στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-)\ +γ) Απαντήσεις οι οποίες δεν έχουν απαντηθεί, σημαίνει ότι μάλλον δεν ξέρουμε την απάντηση. Ερωτήσεις οι οποίες έρχονται με mail, είναι ΠΟΛΥ ΔΥΣΚΟΛΟ να +απαντηθούν. Προτιμήστε την φόρμα. + +**1. partition** +------------------------------------------ + +**2. VIDEO** +-------------------------------------- + +**3. Πρόβλημα με το X-Win και την Diamond II S220** +----------------------------------------------------------------------------- + +**4. Συμπίεση ?** +------------------------------------------- + +**5. Staroffice** +------------------------------------------- + +**6. Lilo boot** +------------------------------------------ + +**7. ΘΑ ΠΑΙΞΕΙ** +------------------------------------------ + +**8. Opti 931** +----------------------------------------- + +**9. Visual Basic και Linux** +------------------------------------------------------- + +**10. Syndesh me otenet** +----------------------------------------------------- + +**11. Internet Mail** +------------------------------------------------- + +**12. Mp3 with Linux** +-------------------------------------------------- + +**13. Σύνδεση 2 υπολογιστών** +--------------------------------------------------------- + +**14. Σύνδεση στο Internet από το Linux** +--------------------------------------------------------------------- + +**15. PPP** +--------------------------------------- + +**16. Protes erotiseis sto Linux** +-------------------------------------------------------------- + +**17. install linux -\>sco** +-------------------------------------------------------- + +**18. Diamond Monster 3D** +------------------------------------------------------ + +**19. καρτα γραφικων** +-------------------------------------------------- + +**20. Sindesi Internet** +---------------------------------------------------- + +**21. Προμήθεια Linux** +--------------------------------------------------- + +**22. Προμήθεια Linux** +--------------------------------------------------- + +**23. book** +---------------------------------------- + +**24. 2ος Σκληρος Δισκος σε RedHat 5.1** +-------------------------------------------------------------------- + +**25. Cdrecorder** +---------------------------------------------- + +**26. KDE** +--------------------------------------- + +**27. Ελληνικά στο S.u.S.E 5.3** +------------------------------------------------------------ + +**28. sendmail + dbm** +-------------------------------------------------- + +**29. PPP Login** +--------------------------------------------- + +**30. Problhma me ta ellhnika** +----------------------------------------------------------- + + +### [1. partition]{#s1} + +Από : [Makis Domakis](mailto:anama@otenet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +exo ta windows98. pos mporo na kano partition me sigouria, xoris na xaso tipota apo ta arxeia moy? + +***ΒΠ:**Δεν μπορείς με σιγουριά να κάνεις repartition του σκληρού σου, αν και η πιθανότητα να χάσεις αρχεία είναι πολύ μικρή. Φρόντισε λοιπόν να κάνεις backup. +Use PARTITION MAGIC το οποίο είναι εμπορικό πρόγραμμα. Είναι το μόνο αυτή τη στιγμή που μπορεί να χειρισθεί δίσκους με Fat32 (καθώς και EXT2(linux), HPFS(OS2), +NTFS(WinNT), και άλλα)* + +***MK:**Να συμπληρώσω στην απάντηση του Βαγγέλη, οτι μπορείς να χρησιμοποιήσεις και το FIPS v.2 το οποίο κάνει repartition ένα FAT32 partition. Το Backup +πάντως, ότι και να χρησιμοποιήσεις, κρίνεται απαραίτητο.* + + +### [2. VIDEO]{#s2} + +Από : [Κοντονάσιος Πέτρος](mailto:k_onassis%20@usa.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Συγχαρητήρια για το καλύτερο περιοδικό πληροφορικής. Εάν υπάρχουν προγράμματα εισαγωγήs και επεξεργασίας αρχείων video από κάρτες video και drivers για αυτά. Με +τιμή Πέτρος Κοντονασιος . + +*Ναι, υπάρχουν . Θα βρεις drivers για κάρτες video στον kernel 2.2.0 και προγράμματα επεξεργασίας στο * + + +### [3. Πρόβλημα με το X-Win και την Diamond II S220]{#s3} + +Από : [Παπαστεργίου Αποστόλης](mailto:paptol@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Άλλος ένας νέουκλας με το LINUX σας εύχεται συγχαριτήρια για τη δουλειά σας !!! Η προσπάθειά σας, είναι ίσως η πιό αξιόλογη στον Ελληνικό χώρο. Έτσι πέρνουμε +κουράγιο και εμείς οι νέουκλες για να ασχοληθούμε με κάτι που να αξίζει (χωρίς να κρεμάει \...) Θα σας παρακαλούσα πάρα πολύ (άμα βρείτε λίγο χρόνο!) να +ασχολειθήτε λίγο με το δικό μου προβληματάκι, γιατί εγώ έχω ήδη ΚΡΕΜΑΣΕΙ !!! Λοιπόν πρόσφατα πήρα το RedHat 5.2 και πήγα να το \"βάνω\". Διάβασα ένα τρίμα +γράμμα (άσχετος και γώ, πού να καταλάβω!) τέλος πάντων, τό \"βανα\...\" Μόλις πήγα να δώ εικονίτσες ο καημένος, τις είδα σε \"Πέντε διαστάσεις !!!\" ΑΑΑΑΑ +περίεργο είπα είναι αυτό το LINUX!!! Διάβασα κι άλλο, κι άλλο\... πάλι δεν κατάλαβα.. - Λοιπόν ας σοβαρευτώ (τρώω και τον πολύτιμο χρόνο σας.) Έχω τη Diamond II +S220 με 4ΜΒ και αντιμετωπίζω πρόβλημα με τον Χ-Server. Δοκίμασα τα περισσότερα από τα Configuration Tools αλλά δέν κατάφερα τίποτα\...Δεν μπορώ να ενεργοποιήσω +την κάρτα. Η ερώτηση είναι η εξής : Είναι δυνατόν αυτή η κάρτα να παίξει με Χ-Win ή πρέπει να πάρω άλλη κάρτα που να την υποστηρίζει το LINUX; Ευχαριστώ πάρα +πολύ για το χρόνο σας και πάλι συγχαρητήρια για την δουλειά σας. + +*Δες το [τεύχος 8, ερώτηση 14](../1998/08/08_mailbox-14.html).\ +Επίσης, για ερωτήσεις, υπάρχει ειδική φόρμα στο web, σε παρακαλούμε να προτιμάς αυτήν.* + + +### [4. Συμπίεση ?]{#s4} + +Από : [Αντώνιος Χάψας](mailto:xapsas@med.upatras.gr) + +Απάντηση : [Φώτης Γεωργάτος](mailto:gef@hellug.gr) + +Ενας ανυπόμονος ρωτάει πως αποσυμπιέζω ένα αρχείο με κατάληξη gz ή tar ή tgz και πως μπορώ να διαλέξω το directory που θα αποσυμπιεστούν ? αν γίνεται την +σύνταξη της εντολής ή ένα παράδειγμα ας πούμε. Ευχαριστώ πολύ. + +*Η εντολή είναι: cd \"directory\"; tar -zxvf \"file\" Το z στην εντολή tar σημαίνει να κάνει πρώτα αποσυμπίεση, ακριβώς σαν να εκτελούσε την εντολή gzip.* + + +### [5. Staroffice]{#s5} + +Από : [George Christofilopoulos](mailto:gchrist@diodos.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αγαπητέ φίλε βοήθα, Κατέβασα το staroffice απο το δικτυο αλλα κατα την εγκατασταση δεν εχω κωδικο για να βαλω. Στο site της staroffice οπου θα επρεπε να μου +ειχαν δωσει τον κωδικο οταν συμπληρωνω την αναλογη φορμα μου δινει κωδικο κενο δηλ δεν μου δινει καποιο συγκεκριμενο αριθμο. Αν εχετε καποιο κωδικο στειλτε τον +μου.Ευχαριστω + +*Οι κωδικοί είναι σε αντίστοιχια με τα emails. Σου προτείνω να πας στο site της StarDivision και να ξανακανεις την διαδικασία \"αιτησης\" γιατί ακόμα και να σου +δωσουμε κωδικό δεν θα μπορεις να κάνεις register και θα σου λήξει σε 60 νομίζω μέρες. Οποτε πάλι θα πρεπει να πάρεις προσωπικό σου κωδικό από την Stardivision, +αλλά τοτε θα πρέπει να το απεγκαταστήσεις και να το ξαναβάλεις, και δεν νομίζω ότι θα θελεις κάτι τέτοιο :)* + + +### [6. Lilo boot]{#s6} + +Από : [Γιωργος Γεωργοπουλος](mailto:ggeorgopoulos@iname.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Εχω ενα δισκο 4 GB με win98 και (ΠΡΟΣΟΧΗ) FAT32. Ο δισκος μου ηταν σε 2 partition απο τοτε που ηταν FAT16. Ετσι δεν ειχα προβλημα να δημιουργησω τα partition +του Linux. Εχω ομως απορια που να εγκαταστησω το Lilo Boot. Μου ειπαν οτι δεν πρεπει να το εγκαταστησω στο MBR. Ειναι σωστο αυτο; Σκεφτομουν το ενδεχομενο να +φτιαξω μια δισκετα εκκινησης που να μου βγαζει ενα A + +***ΜΚ:** Γιώργο, υπάρχουν λύσεις πολλές. Ή το βάζεις στο MBR (δεν είναι δα και τραγικό), ή το βαζεις στο root partition του linux (αν μπορεί να το βρει εκεί το +bios) ή το βαζεις σε μία δισκέτα, και μόλις κάνεις boot απο την δισκέτα θα βρεθείς σε linux. Θα σου πρότεινα το τελευταίο.* + +***ΒΠ:** Συμπληρώνοντας το Μιχάλη, και για να κάνεις τη δουλειά σου πιό εύκολη, μπορείς να το βάλεις άνετα στον MBR. Απλά, φρόντισε να έχεις μια δισκέτα boot +των Windows 98. Ακόμα και αν κάτι πάει στραβά (πράγμα το οποίο είναι λίγο απίθανο μια και οι νέες distribution έχουν πολύ κατατοπιστικές οδηγίες) κάνεις +εκκίνηση με τη δισκέτα των Win98 και γράφεις fdisk /MBR, και όλα είναι όπως πριν βάλεις το Linux (Φρόντισε στη δισκέτα αυτή να γράψεις και το fdisk!). Αν τώρα +επιλέξεις να το βάλεις στο Partition που έχε ις το Linux (πχ στο δίσκο D:, φρόντισε το BIOS σου να μπορεί να κάνει Boot και από αυτό τον δίσκο. Προσωπικά, δε θα +σου συνιστούσα τη δισκέτα, γιατί είναι πολύ ευαίσθητες\... Φιλικά, Βαγγέλης* + + +### [7. ΘΑ ΠΑΙΞΕΙ]{#s7} + +Από : [ΓΏΡΓΟΣ ΑΣΛΑΝΙΔΗΣ](mailto:grg@alico.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +ΣΚΕΦΤΟΜΑΙ ΝΑ ΕΓΚΑΤΑΣΤΗΣΩ ΤΟ LINUX ΣΕ ΙΒΜ ΦΟΡΗΤΟ ΜΕ ΝΤ 4.0. ΘΑ ΧΡΗΣΙΜΟΠΟΙΗΣΩ ΕΝΑ PARTITION ΤΟΥ ΔΙΣΚΟΥ ΚΑΙ ΒΟΟΤ ΑΠΟ ΔΙΣΚΕΤΑ. ΥΠΑΡΧΟΥΝ ΠΛΗΡΟΦΟΡΙΕΣ ΓΙΑ ΚΑΤΙ ΤΕΤΟΙΟ +? + +*Πληροφορίες γενικά; Αν αναφερεσαι σε Howto υπάρχουν στο . Αν αναφέρεσαι σε κάτι άλλο, γίνε πιο συγκεκριμένος. Μην ξεχάσεις να κοιτάξεις +και το τεύχος 8 στο άρθρο linux zone που αναφέρονται κάποιες πληροφορίες για την κάρτα γραφικών που έχουν συνήθως τα φορητά.* + + +### [8. Opti 931]{#s8} + +Από : [Αντώνιος Χάψας](mailto:hapsas@med.upatras.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Υπάρχει driver για κάρτα ήχου Opti με τι τσιπάκι 931 ? Αν υπάρχει θα ήθελα λίγη βοήθεια αν γίνεται στον τρόπο εγκατάστασης μιας και δεν είμαι έμπειρος χρήστης +στο Linux. Ευχαριστώ πολύ. + +*Ναι, υπάρχει driver. Πρώτα θα ελεγξεις τον kernel που έχεις αν εχει κάτι τετοιο (γιατί αυτά αλλάζουν συνεχεια). Αν δεν βρεις τετοιο πραγμα, θα πας στο + και θα ψάξεις για opti. Πίστεψε με, θα σου βγάλει τουλαχιστον 2 links :)* + + +### [9. Visual Basic και Linux]{#s9} + +Από : [Γιωργος Βρεντζος](mailto:antoula@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Ηθελα να ρωτησω αν υπαρχει port της visual basic -οποιαδηποτε εκδοση- στο Linux. Αν οχι υπαρχει καμια γλωσσα που να θυμιζει πολυ τη Basic και να εχει γραφικο +περιβαλλον (visual) ; + +*Υπαρχει κάτι που να μοιάζει με visual basic, τελευταία φορά που το είχα δει ήταν commercial, και δεν νομίζω ότι αξίζει τον κόπο να ασχοληθείς. Θα σου πρότεινα +να κοιταξεις προγραμματισμό σε C/C++ με QT ή GTK ή ακομα και Perl σε TCL/TK. Είναι πολύ πιο ωριμες και ισχυρές γλώσσες όλες τους (ναι, ακόμα και η perl)* + + +### [10. Syndesh me otenet]{#s10} + +Από : [Marios Logaras](mailto:marlogag@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +geia sas eimai poly kenourgios sto linux kai 8a h8ela na mou pite pws syndeome me to diktyo ths otenet giati exei kapia \"idiomorfia\" plz answer me as soon as +posible thanx + +*Μαριε οι πληροφορίες που μας στέλνεις δεν είναι καθολου κατατοπιστικές\... Γενικα, χρησιμοποίησε το xisp. Ειδικά, στείλε μας πληροφορίες για το ακριβές +προβλημα και αν ξέρουμε θα σου πούμε.* + + +### [11. Internet Mail]{#s11} + +Από : [Σταύρος Μαραγκουδάκης](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Εχω το REDHAT 5.1 και εχω καποιο προβληματακι σχετικα με το Internet Mail παρολο που μεσο του Linux μπορω και στελνω μαιλ εξω κανονικα απο τα τερματικα μου +μπορω να στελνω μαιλ μονο στους χρηστες του linux και οχι στους χρηστες του Internet τι μπορει να φτει? Υποψιν + +*Φταίνε μάλλον οι ρυθμίσεις του sendmail σου. Αλλά μπορεί και του mailserver σου. Αν δεις στο αρχείο /var/log/mail θα σου πει γιατί δεν φεύγουν mails. Μπορεί να +σε \"κόβει\" ο ξένος mailserver, επειδή δεν κάνει resolve η διεύθυνσή σου, οπότε πρέπει να φτιάξεις το DNS. Μπορεί πάλι να μην ξέρει το sendmail που να τα +στείλει, γιατί δεν έχει τέτοια πληροφορία, οπότε πρέπει να του δώσεις smart relay host. Μπορεί να μην \"φορμάρει\" κανονικά τα mails, οπότε να μην τα δέχεται ο +ξένος mailserver. Όπως βλέπεις είναι πολλοί οι πιθανοί λόγοι, συνεπώς μάλλον πρέπει να του ζητήσεις full debugging (από το syslog) και να το ψάχνεις σιγά σιγά. +Μην απογοητεύεσαι όμως, μπορεί να είναι και κάτι εντελώς απλό.* + + +### [12. Mp3 with Linux]{#s12} + +Από : [Σταύρος Μαραγκουδάκης](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Ξερετε εαν υπαρχει MP3 Player για Linux αλλα που να μην χρειαζετε να τρεχει στα X WINDOWS αλλα μονο στο Console Prompt..? + +*Ναι, υπάρχουν πολλοί. Θα τους βρεις, μαζι με άλλες ενδιαφέρουσες πληροφορίες, στη διεύθυνση : * + + +### [13. Σύνδεση 2 υπολογιστών]{#s13} + +Από : [Μιχαηλος Γιαννης](mailto:mjohn@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Εχω 2 Η/Υ με το Linux της Red Hat 5.1. Πως μπορω να τους συνδεσω μεταξύ τους διαβασα το Howto για το dhcpd αλλα δεν καταφερα και πολλα πραγματα. Αν η απαντηση +ειναι μεγαλη που μπορω να βρω τις αναγκαιες πληροφοριες? Υπαρχει τροπος Η/Υ που τρεχει win95 να \"δει\" Η/Υ που τρεχει linux και πως? Ειμαι αρκετα αρχαριος στο +Linux. Το πηρα προσφατα. + +*Το μόνο το οποίο χρειάζεσαι είναι ένα τοπικό δίκτυο. Δηλαδή δύο κάρτες δικτύου και μερικά μέτρα καλώδιο (προσέχεις βέβαια οι κάρτες να έχουν bnc βύσματα γιατί +δεν αξίζει τον κόπο για 2 υπολογιστές να πάρεις hub). Μετά, δηλώνεις IP address από τα registered private spaces (π.χ. 192.168.0.χ) και έχουν σύνδεση TCP/IP +μεταξύ τους. Αυτό σημαίνει ότι μπορείς να δουλέψεις standard δικτυακα προγραμματα που να υποστηρίζονται και από τα δύο μηχανήματα (π.χ. telnet, ftp κλπ) Για πιο +προχωρημένα πράγματα, όπως μοίρασμα δίσκων, κοινή έξοδος στο δίκτυο κλπ μπορείς να κοιτάξεις το αγαπημένο σου περιοδικό στα τεύχη 2 (samba) και 5 (ip +masquerading). Τέλος, το καλύτερο HOWto για αυτή την ιστορία, είναι το NET3HOWto, αλλά είναι σε επί πεδο \"στησίματος\" του δικτύου (ethernet, tcp/ip) οπότε +μπορεί να σου φανεί βαρύ και ίσως λίγο πολυλογάδικο.* + + +### [14. Σύνδεση στο Internet από το Linux]{#s14} + +Από : [Πολυτάρχος Ηλίας](mailto:elias13@mail.otenet.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Χρησιμοποιώ το KDE στο Linux και προσπαθώ να συνδεθώ στο Internet. Όμως,ο ΟΤΕ δεν εχει Dialtone και έτσι το dialup tool του KDE βγάζει NO DIALTONE (το ίδιο +γινόταν και από τα windows, αλλά αυτά έχουν το μαγικό κουμπάκι Wait for dialtone before dialing, οπότε λυνόταν το πρόβλημα). Υπάρχει καμία διαταγή για το modem +που να κάνει αυτή τη δουλειά; (όπως τα ATZ,ATDT,AT&F πχ) + +***ΕΠ:** Πίσω από το μαγικό κουμπάκι κρύβεται η AT command: ΑΤΧ3. Στην περίπτωσή σου για το kppp του KDE η λύση είναι στα modem settings, στο input box για το +dial string κάτι σαν : ATX3DT0955\....* + +***ΒΠ:** Μα φυσικά και υπάρχει, και είναι η ΑΤΧ3. Πιστεύω ότι ξέρεις που να το γράψεις, έτσι;* + + +### [15. PPP]{#s15} + +Από : [Panagou Ioannis](mailto:nirea@freemail.gr) + +Απάντηση : [](mailto:) + +Ehw ena provlimataki ehw egkatasthsi to redhat 5.2kai den mproro na kanw syndesi meto internet. Kanw syndesh alla me petaei synehos exo. + +*Τα στοιχεία που αναφέρεις δεν είναι και τα πιο κατατοπιστικά :-) Θεωρώ πως παίρνεις αριθμό, συνδέεται το modem, δεν σηκώνει ppp ή σηκώνει ppp αλλά παρόλα αυτά +δεν επικοινωνείς με τον \"έξω\" κόσμο. Σκέψεις: \[1\] Από ποιο πρόγραμμα κάνεις σύνδεση? Αν από kppp του KDE διάβασε τις οδηγίες (help file) που λέει να +αδειάσεις το αρχείο /etc/ppp/options. \[2\] Σαν τι χρήστης πας να μπεις? Αν οχι root θα πρέπει το ομοίως να κάνεις to pppd suid. \[3\] Μήπως επιτυγχάνεις +σύνδεση αλλά δεν μπορείς π.χ. να κάνεις ping? Γράψε route. Αν δεν δεις μια γραμμή με ppp0, δώσε route del default και route add default ppp0 \... ή δώσε +παραπάνω στοιχεία για ποιό συγκεκριμένες απαντήσεις.* + + +### [16. Protes erotiseis sto Linux]{#s16} + +Από : [Nikos Tzelvenzis](mailto:tzelve@yahoo.com) + +Απάντηση : [Ευριπίδης](mailto:evris@hellug.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Thelo na mou peite pou mporo na vro documedation gia Linux apo Net i na mou stiletai. + +***ΕΠ:** * + +***ΒΠ:** Δηλαδή να υποθέσω ότι έκανες μια βόλτα από το: πριν μας στείλεις αυτό το mail ; Kαι ότι δεν διάβασες στην ενότητα +\"Σημαντικότεροι πόροι του Internet για \'Ελληνες\" το \"Βιβλία για το Linux & Unix στο ελληνικό Διαδίκτυο: ONLINE UNIX BOOKS\" Kαι ότι δεν διάβασες στην +ενότητα \"Περιεχόμενα αυτού του κόμβου\" τα διάφορα links που έχει εκεί πέρα σε οτιδήποτε αφορά σε docs του Linux? Κάνε λοιπόν μια βόλτα από εκεί! Vagoulas.* + + +### [17. install linux -\>sco]{#s17} + +Από : [meladianos xr.](mailto:atel@otenet.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +exoume ena sco unix me 16 termatika se ena hd me 2 partition. Mporoume na to antikatasthsoume me linux xoris na xasoume to allo partition ? Ti prepei na kanoume +? Eimaste sxoleio. geia xara. + +*Γειά χαρά. Τι εννοείς με 2 partitions? Το ένα είναι free και το άλλο έχει SCO? Αν ναι \... τότε μπορείς \...(?!). Ο απλούστερος τρόπος είναι να σβήσεις το free +partition, να το κάνεις repartition σε 2 μικρότερα, ένα SWAP των 100MB και το υπόλοιπο to / tou Linux, και αν σε προβληματίζει τι θα γίνει με τον Loader +boot-αρε από δισκέττα, ή διάβασε το LILO documentation που αναφέρει συνύπαρξη με άλλα λειτουργικά (και SCO). Ενα πρόβλημα ίσως έχεις. Μάλλον είσαστε κάποιο ΤΕΛ, +και σας έχει στήσει το σύστημα η Intrasoft (σωστά;) Τι digiboard έχετε για τα τερματικά σας; Εκει πρέπει πάλι να ρίξεις λίγο διάβασμα στο Serial-HOWTO, μια που +φαντάζομαι είναι κάποια παλιά και θέλει λίγο ψάξιμο. Τι να γίνει\... η πολυτέλεια θέλει και λίγο κόπο. Στο δικό μας το ΤΕΛ πάντως, ακόμα υπάρχει SCO, και το +Linux είναι άλλο ξεχωριστό μηχάνημα\....* + + +### [18. Diamond Monster 3D]{#s18} + +Από : [Στάθης Αραποστάθης](mailto:ufo@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Που θα μπορούσα να βρω οδηγούς για την Diamond Monster 3d; + +*Θα σου πρότεινα να κοιτάξεις στο : * + + +### [19. καρτα γραφικων]{#s19} + +Από : [γιαννης](mailto:madgr@groovy.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +πως μπορω να εγκαταστησω την 3DFX banshee καρτα στο λινουξ? + +*Κάποιος προσπαθεί να γράψει software για την συγκεκριμένη κάρτα. Θα βρεις πιο πολλές πληροφορίες στο: * + + +### [20. Sindesi Internet]{#s20} + +Από : [Giannis](mailto:rattle13@hotmail.com) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@hellug.gr) + +Exo prospathisi polles fores na sinthetho sto internet me to programma minicom alla panta i sindesi mou pefti Tha ithela an mporousate na mou dosete kapoies +odigies gia to pos tha sindetho sto internet + +*Το θέμα έχει επανειλειμένα αναφερθεί (..και λυθεί) τόσο στη λίστα linux.greek.users όσο και από τις σελίδες του magaz. Συνοπτικά συνίσταται το XISP του +Δ.Μπούρα.* + + +### [21. Προμήθεια Linux]{#s21} + +Από : [Τζιώλας Θεόδωρος](mailto:tziolas@classic.diavlos.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@hellug.gr) + +Είμαι κατοικος θεσ/νίκης, που μπορώ να προμηθευτώ και πως να εγκαταστήσω τον λειτουργικό Linux. Μπορώ παράλληλα να έχω και τα windows 98; + +*Φυσικά και μπορεί το Linux να συνυπάρχει με άλλα λειτουργικά (π.χ. win9x). Περισσότερεσ λεπτομέρειεσ για αυτό στο Linux Documentation Project (θα βρείς link +στο linux.gr) Όσον αφορά το που θα βρείς το Linux, ο Παπασωτηρίου (Ε.Αμύνης) έχει. Αν δεν θέλεις να ξοδευτείς, μετά τις 25/1 θα έχω RedHat5.2 να σου δανείσω. +Συνιστώ όμως ανεπιφύλακτα την αγορά μιας Linux διανομής την πρώτη φορά. Φιλικά Kokni* + + +### [22. Προμήθεια Linux]{#s22} + +Από : [Τζιώλας Θεόδωρος](mailto:tziolas@classic.diavlos.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Είμαι κατοικος θεσ/νίκης, που μπορώ να προμηθευτώ και πως να εγκαταστήσω τον λειτουργικό Linux. Μπορώ παράλληλα να έχω και τα windows 98; + +*Σαφώς και μπορείς να έχεις και Win και Linux 98 στο σύστημα σου. Απλά βάλε πρώτα τα Windows. \`Οταν τα βάλεις, και αφού προμηθευτείς το Linux, διάβασε τις +\*απλούστατες\* οδηγίες εγκατάστασής του, και θα δεις ότι είναι πολύ εύκολο. Έχε υπόψη σου ότι δεν θα μπορείς να δεις το Partition του δίσκου σου που περιέχει +το Linux από τα Win, αλλά από το Linux θα μπορείς να δεις το Partition των Win. \`Οσο για το που θα το προμηθευτείς, η πλέον κατάλληλη πηγή είναι το +βιβλιοπωλείο του Παπασωτηρίου (Δεν ξέρω αν έχει υποκατάστημα εκεί, αλλά υποθέτω ότι μπορεί και να σου τα στείλει). Σαν νέος στο χώρο, θα σου πρότεινα να βάλεις +ή το REDHAT Linux , ή το SuSe Linux που είναι και τα πιό εύκολα στην εγκατάσταση και τη συντήρηση (κυριώς το SuSe). Στη διάθεση σου για οτιδήποτε άλλο προκύψει +στην πορεία, εαν μας υποσχεθείς ότι θα διαβάσεις και λίγο πριν ρωτήσεις. ;) Vagoylas* + + +### [23. book]{#s23} + +Από : [chris papa](mailto:sogo@gel.demokritos.gr) + +Απάντηση : [Κοτσιφάκης Θρασύβουλος](mailto:tkots@softhome.net) + +1)tha ithela na rotiso an iparxei kanena episimo vivlio gia linux red hat 5.1 + +*1. Από SAMS PUBLICATIONSQ REDHAT LINUX UNLEASHED (περίπου 20.000) για το ΡΗ5. Για το 5.1 δεν εχει βγει ακομα ( [Παπασωτηριου](http://www.papasotiriou.gr)) 2. + 3. Κανε μια βολτα στο , και θα βρεις ότι θες για το GNOME* + + +### [24. 2ος Σκληρος Δισκος σε RedHat 5.1]{#s24} + +Από : [Σταύρος Μαραγκουδάκης](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Θα ηθελα να μου πειτε πως θα μπορεσω να βαλω στο Linux RedHat 5.1 εναν δευτερο σκληρο δισκο και ποιες θα ειναι οι εντολες που θα πρεπει να τρεξω για να +λειτουργισει ο 2ος μου σκληρος δισκος, Ευχαριστω πολυ\... + +*Ο δεύτερος σκληρός δίσκος πρέπει να γίνει format σε κάποιο από τα γνωστά filesystems που αναγνωρίζει το Linux. Για παράδειγμα e2fs, οπότε γράφουμε την εντολή +mke2fs /dev/hdb1 (υποθέτουμε οτι ο όρος δεύτερος δίσκος αναφέρεται στο πρώτο prtition του slave δίσκου στον primary controler). Στη συνέχεια, αρκεί να κάνουμε +mount το /dev/hdb1 κάτω από κάποιο Mount point, π.χ. /mnt/disk2* + + +### [25. Cdrecorder]{#s25} + +Από : [Γιάννης Πανάγου](mailto:nireas@freemail.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Θα ηθελα να ρωτησο αν υπαρχει καποιο προγραμμα εγραφης για cdrom απο linux (το cdrecord που εχω ειναι ATAPI ) + +*Πρόσφατα δημιουργήθηκε στην Forthnet το: http://linuxberg.forthnet.gr το οποίο είναι κάτι αντίστοιχο με το 2cows από τον κόσμο των ακατονόμαστων. Κάνε μια +βόλτα από εκεί, θα βρείς και για Χ αλλά και για κονσόλα. Δεν θυμάμαι ακριβή URL, sorry\... :(* + + +### [26. KDE]{#s26} + +Από : [Κωνσταντίνος Λούζης](mailto:Lusis@ATH.FORTHNET.GR) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Έχω προσφάτως εγκαταστήσει σε ένα σύστημα RedHat Linux 5.1 το KDE,όμως υπάρχει ένα πρόβλημα,το οποίο είναι ότι όποτε προσπαθώ να εκκινήσω το KDE με την εντολή +startkde απο το bash shell βγάζει συνεχόμενα μηνύματα απο τα διάφορα clients που προσπαθεί να εκκινήσει ότι δεν μπορεί να συνδεθεί στον X Server (cannot connect +to X server).Πρέπει επίσης να σας πω ότι έχω μερικές απαραίτητες αλλαγές σε μερικά configuration files,όπως το να δημιουργήσω ένα αρχείο .Xclients στο home +directory του κάθε χρήστη.Θα ήθελα να με καθοδηγήσετε πάνω σε αυτό το θέμα διότι ακόμη είμαι αρχάριος στο Linux και δεν θέλω να κάνω περίεργους πειραματισμούς. + +*\`Οσον αφορά στο 1ο σκέλος της ερώτησης, θα πρέπει να εκκινείς τα Χ με το γνωστό \`\`startx\'\', αλλά αυτά θα πρέπει να ξέρουν και τον WindowManager που +χρησιμοποιείς. Για να το κάνεις αυτό, δημιουργείς ένα αρχείο \`\`.xinitrc\'\' στο home του κάθε χρήστη, και γράφεις μέσα μόνο τη γραμμή \`\`startkde\'\'. (το +ίδιο μπορεί να επιτευχθεί με το .Xclients. Στο 2ο σκέλος της ερώτησης, τι ακριβώς εννοείς αλλαγές? φυσικά ο κάθε χρήστης μπορεί να εκκινεί διαφορετικούς WM από +το .xinitrc του, ή, αντίστοιχά, το .Xclients. Αν θέλεις συγκεκριμένα σε κάτι θοήθεια, ξαναγράψε στο magaz εξηγόντας τι ακριβώς ψάχνεις,και θα χαρούμε να +απαντήσουμε. Μέχρι τότε, μη φοβάσαι, και -προς Θεού- ΚΑΝΕ περίεργους πειραματισμούς\... (Το Linux δεν χρειάζεται συνεχώς επανεγκαταστάσεις!)* + + +### [27. Ελληνικά στο S.u.S.E 5.3]{#s27} + +Από : [Νίκος Θεοδώρου](mailto:ntheo@math.auth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Διάβασα το άρθρο στο τεύχος Δεκεμβρίου για την εγκατάσταση Ελληνικών στο RedHat 5.0. Εγώ είμαι χρήστης του S.u.S.E 5.3. Ισχύουν τα ίδια ή πρέπει να κάνω κάποιες +αλλαγές ή\..... ;; + +*Γενικώς, μπορείς να θεωρησεις ότι ισχυουν τα ίδια. Ξεκίνησε την διαδικασία, και αν δεις διαφορες στα pathnames αλλαζεις και την πορεία σου. Πρόσεξε πάντως, τις +ρυθμίσεις που αφορούν σε συστήματα με glibc2. Οταν τελειώσεις, γράφεις ένα αρθρο με τις διαφορές και μας το στέλνεις :)* + + +### [28. sendmail + dbm]{#s28} + +Από : [Νικόλας Μαδωνής](mailto:madonis@physics.upatras.gr) + +Απάντηση : [Νίκος Μαυρογιαννόπουλος](mailto:nmav@hellug.gr) + +Αγαπητοί φίλοι linuxάδες, ουτήξω\" σε πιο βαθιά νερά και να φτιάξω ένα virtual mail server με βάση το linux και το sendmail. παθήσω να ξεκινήσω το sendmail, +παίρνω το μύνημα + +*υποθέτω οτι έχεις ακολουθήσει την διαδικασία βάζοντας στα αρχεία διαμόρφωσης του sendmail (cf/cf κατάλογος) πριν το κτίσιμο το: \"FEATURE(virtusertable, \`dbm +/etc/virtusertable\')dnl\" Επίσης για να κτιστεί το virtusertable χρειάζεται να τρεξει το: \"makemap dbm /etc/virtusertable \< sourcefile\" To λάθος που σου +βγάζει δεν μου έχει παρουσιαστεί σε καμιά περίπτωση, παρόμοια με την δική σου. Το sendmail που έχεις δεν είναι παλιό αλλά πρόσεξε να συμφωνεί με την έκδοση που +χρησιμοποιεί το βιβλίο που έχεις. (στην 8.9.χ υπαρχουν πολλές αλλαγές). Δοκίμασε να κάνεις compile τον κώδικα του, μήπως και η redhat άφησε μερικά features εξω. +Αν δεν λυθεί, επέστρεψε με περισσότερες πληροφορίες όμως για το τί έχεις κάνει με την διαμόρφωση του.* + + +### [29. PPP Login]{#s29} + +Από : [Σταύρος Μαραγκουδάκης](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Εχω το REDHAT πειτε μου τι ρυθμισεις θα πρεπει να κανω ωστε καποιος χρηστης που μπαινει στο Linux να μπαινει σε ppp mode ενω εχω μια συνδεση στο Internet και να +μιραστει το Internet μαζι μου? + +*Φίλε Σταύρο, διάβασε το τεύχος 5, άρθρο για το IPmasquerading του Ευριπίδη Παπακώστα.* + + +### [30. Problhma me ta ellhnika]{#s30} + +Από : [jagged](mailto:jagged@freemail.gr) + +Απάντηση : [Δημήτρης Τζέμος](mailto:djemos@agr.forthnet.gr) + +Paidia boh8eia\ +Prospa8hsa na egkatasthsw ta ellhnika sto linux sumfwna me tis odhgies tou magaz (teuxos 10 , ellhnika sto redhat linux). Afou ekana ola osa elege to ar8ro kanw +ena reboot\... kai hr8e h katastrofh!! Ti ennow: enw apo console mporousa na dw kai na grapsw ellhnika molis phgaina na treksw X me ksanapetage sthn command +line kai mou egrafe to parakatw mhnuma la8ous: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + The XKEYBOARD keymap compiler (xkbcomp) reports: + > Error: Can't find file "grouplock" for compat include + > Exiting + > Abandoning compatibility map "default" + Errors from xkbcomp are not fatal to the X server + Couldn't load XKB keymap, falling back to pre-XKB keymap + + Fatal server error: + could not open default font 'fixed' + + When reporting a problem related to a server crash, please send + the full server output, not just the last messages + + _X11TransSocketUNIXConnect: Can't connect: errno = 111 + giving up. + xinit: Connection refused (errno 111): unable to connect to X + server + xinit: No such process (errno 3): Server error. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ti ftaiei kai ti mporw na kanw gia na to dior8wsw??? + +*Απο ότι καταλαβαίνω,πρέπει να πήγες στο κατάλογο /usr/X11R6/lib/X11/fonts/misc όπου υπάρχουν οι γραμματοσειρές του συστήματος και η fixed και εκει έκανες +mkfontdir και δημιούργησες τα alias με awk κ.λ.π. Στο άρθρο αναφέρω ότι αυτο το κάνουμε όπου έχουμε τα ελληνικά fonts. Και εγώ είχα κάνει απο περιέργεια το +ίδιο,με την προϋπόθεση ότι είχα κάνει αντίγραφο του misc σε άλλο κατάλογο. Ετσι αντιγράφοντας πάλι όλα τα αρχεία στο κατάλογο misc ,διορθώθηκε το πρόβλημα. Η +λύση νομίζω ότι είναι η εξής: Πιστέυω ότι εχεις το CD με τη διανομή του RedHat. Κανεις mount το CD και αντιγράφεις απο το live/usr/X11R6/lib/fonts/misc όλα τα +αρχεία στο /usr/X11R6/lib/X11/misc. Αυτα με την προϋπόθεση οτι πείραξες όντως το κατάλογο misc.* + diff --git a/content/articles/13/01_boot.md b/content/articles/13/01_boot.md new file mode 100644 index 0000000..7b06434 --- /dev/null +++ b/content/articles/13/01_boot.md @@ -0,0 +1,74 @@ ++++ +title = 'Διαδικασία εκκίνησης του Υπολογιστή.' +date = '1999-03-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 13'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αναρωτηθήκατε ποτέ ποια διαδικασία ακολουθεί το μηχάνημα μας για να μπουτάρει, και ποια αρχεία διαβάζει κατά την διαδικασία εκκίνησης του Linux; Εγώ πάντως +αναρωτήθηκα, και βρήκα στο Internet ένα posting του [Erik Ratcliffe](mailto:erik@caldera.com) στην mailing list caldera-users όπου το αναλύει, και σκέφτηκα να +το μοιραστώ μαζί σας.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν και το κείμενο υποτίθεται ότι είναι για συστήματα με Caldera distribution, πρέπει να ισχύει το ίδιο σε όλα τα SysV λειτουργικά, δηλαδή όχι μόνο σε όλες τις +distributions του Linux, αλλά και σε Solaris, και σε άλλα. Μπορεί κάποιο distribution (π.χ. S.u.S.E.) να έχει κάποια \"ειδικά\" αρχεία, αλλά και αυτά δεν +αλλάζουν την γενική ιδέα. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Power On + | + V + BIOS (CMOS) + | + V + Boot Loader (LILO) + | + ________________V_________________ + | | | | + DOS OS/2 Whatever Linux + . . . | + . . . V + V V V Bootstrap Kernel + | + --- V + | /sbin/init is executed + | | + | V + | /etc/inittab is read + | (default runlevel is set here) + | | + | V + | /etc/rc.d/rc#.d stuff is executed + | (default runlevel scripts are here) + | | + SysV Init. --| V + | /etc/rc.d/rc.boot is executed + | | + | V + | /etc/rc.d/rc.modules is executed + | | + | V + | /etc/rc.d/rc.local is executed + | | + | V + | /bin/login is executed + --- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για να εκκινήσουμε το σύστημα σε X-Windows, απλά πειράζουμε το default runlevel στο /etc/inittab (είναι η γραμμή \"initdefault\") το οποίο μας λέει σε ποιο +runlevel θα ξεκινήσει το σύστημά μας. Στην Caldera (και αυτό είναι διαφορετικό για κάθε distribution) αν αυτό λέει 3, το σύστημα θα ξεκινήσει σε regular +multi-user mode (όχι X-based login). Αν το αλλάξουμε σε 5, θα ξεκινήσουμε στο ίδιο ακριβώς runlevel αλλά με X-based login, το οποίο αναλαμμβάνει το xdm (by +default). Για το runlevel 3, όλα τα scripts που βρίσκονται στο /etc/rc.d/init.d και έχουν ένα symbolic link στο /etc/rc.d/rc3.d θα εκτελεσθούν. Για το runlevel +5, όλα τα scripts που βρίσκονται στο /etc/rc.d/init.d και έχουν ένα symbolic link στο /etc/rc.d/rc5.d θα εκτελεσθούν. Όπως μάλλον θα καταλάβατε, το \"\#\" στο +σχέδιο πάνω (\"rc\#.d\") αντικαθίσταται με τον αριθμό του runlevel. + +To Xdm, επί τη ευκαιρεία, χρησιμοποιεί το αρχείο etc/X11/wmconfig/xsessionrc για τις ρυθμίσεις του (προσέξτε ότι αυτό είναι ένα hard link στο xinitrc, το οποίο +χρησιμοποιείται για να ξεκινήσει τις default X υπηρεσίες, όταν χρησιμοποιείτε το startx για να ξεκινήσετε τα X windows. Είναι στο ίδιο directory με το +xsessionrc. Αν αλλάξετε ένα από αυτά τα αρχεία, αυτομάτως αλλάζει και το άλλο). Ο window manager συνήθως εκτελείται στο τέλος του xsessionrc (ή, στην περίπτωση +του startx, στο τέλος του xinitrc). diff --git a/content/articles/13/02_peripeteies.md b/content/articles/13/02_peripeteies.md new file mode 100644 index 0000000..80169bf --- /dev/null +++ b/content/articles/13/02_peripeteies.md @@ -0,0 +1,73 @@ ++++ +title = 'Οι περιπέτειες του Βάγγου' +date = '1999-02-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης' +issue = ['Magaz 13'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αυτό το κείμενο περιγράφει την περιπέτεια που είχε ο ανωτέρω μνημονευόμενος κατά την επίσκεψη του στο χωριό καταγωγής του. Καμία σχέση με Linux\... \`Όσοι +θέλουν κάτι άλλο, να προσπεράσουν.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτό το μήνα δε θα διαβάσετε τίποτα που να πραγματεύεται με το **Linux**. Και αυτό γιατί πρόσφατα έφαγα άλλο ένα HD Crash, με αποτέλεσμα να μην έχω βάλει ακόμα +**Linux** στο μηχάνημα (το οποίο μια μέρα θα πετάξω από το μπαλκόνι\... δεν είναι κατάσταση αυτή: τον Νοέμβρη να καεί το τροφοδοτικό, το Δεκέμβρη να χτυπήσει ο +Fireball και το Φλεβάρη ο Caviar. Μόνο από τη SONY τη MULTISCAN έχω μείνει ευχαριστημένος τόσα χρόνια). + +Το παρόν άρθρο γράφεται σε ένα **INTERNET CAFE** στο χωριό καταγωγής του υπογράφοντα, από το οποίο θα μάθετε και τις περιπέτειες ενός γνώστη των υπολογιστών +(και που, ουσιαστικά, είναι και ο λόγος όλων των οποίων θα διαβάσετε παρακάτω, το ότι ξέρω υπολογιστές). + +Φτάνοντας λοιπόν στο χωριό, ενόψει των αποκριών, μαθαίνω ότι ένας παλιός φίλος έχει ανοίξει ένα μαγαζί με **PLAYSTATION** (ξέρετε, αυτές τις παιχνιδομηχανές της +**SONY**). Σαν παιδί και εγώ, αποφάσισα να ασχοληθώ με την αγαπημένη μου (βλέπε LARA CROFT) για τις 5 μέρες που θα έμενα εδώ, και συγκεκριμένα είπα να παίξω το +TOMB RAIDER III. Φτάνω λοιπόν, και για κακή μου τύχη, το TOMB RAIDER απουσίαζε. Βλέπω και ένα υπολογιστή, με (τι άλλο) ακατονόμαστα 98. Με πληροφόρησε λοιπόν ο +Μανόλης (ο φίλος μου που σας έλεγα) ότι διαθέτει και σύνδεση με INTERNET. Περιττό να σας πω ότι έπρεπε να πληρώνουμε υπεραστικό τηλεφώνημα με το **FORTHNET** +στο Ηράκλειο, για να μπούμε. Δε βαριέσαι, είπα, και λόγω του ότι λαμβάνω (μαζί με τους άλλους από το **magaz** τα ερωτήματά σας για το Linux, είπα να πάρω το +Mail μου. \`Έκατσα λοιπόν, και το πήρα\... Μέχρι εδώ καλά, συμφωνείτε; + +Τα προβλήματα του υπογράφοντα άρχισαν όταν κατάλαβε ότι τόσο ο Μανόλης όσο και οι περισσότεροι δεν ήξεραν ούτε καν τα βασικά από τους υπολογιστές. Και πολύ +περισσότερο δεν ήξεραν τη φιλοσοφία, και τον τρόπο που \`\`δουλεύει\'\' το **Internet** (και λειτουργούσαν **INTERNET CAFE**!!!). Και αυτό ήταν το πρώτο flash +που έφαγα\... Συνηθισμένος από τους άλλους ατσίδες φίλους που έχω στα Χανιά και ασχολούνται με υπολογιστές, δεν μπορούσα να φανταστώ με τίποτα ότι το +αντικείμενο ήταν τόσο άγνωστο σε μια μεγάλη μερίδα ανθρώπων. + +Λόγω λοιπόν και της παλαιάς φιλίας με το Μανόλη, (αλλά λόγω και του ότι πίστευα - και πιστεύω - πως οι υπολογιστές δεν είναι κάτι το \`\`δύσκολο\'\' και είναι +κρίμα να μην έχουν αυτή τη γνώση πολλοί άνθρωποι) αποφάσισα να τους δείξω τα βασικά\... \`\`Ε, γουίντοους 98 είναι\'\', είπα, \`\`ελληνικά, δες και πάτα, δεν θα +είναι δύσκολο\'\'. Κατέβασα λοιπόν από το δίκτυο τον καλύτερο (κατά τη γνώμη μου) IRC Client, το mIRC, και αφού το εγκατέστησα τους έδειξα πώς να +\`\`μπαίνουν\'\' στα διάφορα κανάλια, πώς να συνομιλούν με άλλους, και πώς να στέλνουν και να λαμβάνουν αρχεία. Περιττό να σας πω ότι το πρώτο πράγμα που +\`\`πραγματευτήκαμε\'\' ήταν - τι άλλο - τσόντες. Εξάλλου, όλοι πάντα έτσι αρχίζουν\... Και είμαι σίγουρος ότι με την πάροδο του καιρού θα καταλάβουν ότι δεν +αξίζει στο internet να είναι μια \`\`απέραντη τσόντα\'\' (Αυτό πάλι είναι άλλου παπά Ευαγγέλιο). Δεν πίστευα στα μάτια μου όταν, μετά από απουσία μου περίπου 5 +ωρών, το επίπεδό τους είχε ανέβει κατακόρυφα (το ότι ασχολούνταν ακόμα με ανταλλαγές φωτογραφιών του προσφιλούς μας περιεχομένου μέσω IRC δεν είχε καμία +σημασία). Έπρεπε να τους δείτε να χειρίζονται τον Εχπλόρερ, και ένα viewer φωτογραφιών. Το multitasking σε όλο του το μεγαλείο\... Ακόμα και directories είχαν +φτιάξει για την κατηγοριοποίηση των φωτό! Περιττό να σας πω ότι χάρηκα ιδιαίτερα\... Ακόμα και απλοί λοιπόν, άνθρωποι είναι εύκολο να μάθουν\... Αρκεί να έχουν +κάποιο ερέθισμα (τις τσόντες που λέγαμε). + +Μετά από κάνα - δυο μέρες, και αφού ο Μανόλης είχε μάθει αρκετά, αποφασίσαμε να ασχοληθούμε με πιο \`\`αποδοτικές\'\' χρήσεις του internet. \`Έδειξα λοιπόν στο +Μάνο πώς να φτιάχνει λογαριασμούς mail για τους πελάτες του, και πώς να τους φτιάχνει χρήστες στο ICQ. Προς το παρόν μόνο σε αυτό το επίπεδο έχουμε φτάσει, αλλά +τα πάμε πολύ καλά. Και ξέρετε και κάτι άλλο; Κρίμα που θα φύγω σύντομα, γιατί αυτή η έκφραση στο πρόσωπο αυτού που μαθαίνει, είναι για μένα η καλύτερη +ανταμοιβή. + +\`Όχι ότι δεν έλειψαν και τα ψιλοπροβληματάκια που αντιμετώπισα. Πχ, σήμερα, και πριν κάτσω για να γράψω αυτό το άρθρο, ήταν μια κοπέλα που κάτι προβλήματα +είχαν τα γουίντοους της, και ήθελε να ξανακάνει από πάνω εγκατάσταση τους (μάλλον αυτό πρέπει να ήθελε, δεν κατάλαβα και καλά) αλλά το CD που χρησιμοποιούσε δεν +ήταν αυτό με το οποίο είχε γίνει εγκατάσταση, με αποτέλεσμα όταν της ζητούσε τον κωδικό να μην τον δέχεται. Το σκέφτηκα λιγάκι, και φαντάστηκα ότι την +πληροφορία αυτή την περιείχε η registry. Τρέχω το regedit, και το βάζω να ψάξει για το -oem- που θυμάμαι ότι περιέχουν όλοι οι κωδικοί των ακατονόμαστων και, ω +του θαύματος, βρέθηκε. Της είπα τον τρόπο λοιπόν. Δυστυχώς, εδώ με νομίζουν ότι είμαι \`\`Ο\'\' γνώστης, και μάλλον θα μου σπάνε τα \*!:@\#\$ πολύ καιρό, και +πολλοί άνθρωποι. Δεν βαριέσαι\... + +Ηθικό δίδαγμα; Δεν υπάρχει ακριβώς ηθικό δίδαγμα, αλλά υπάρχουν οι εξής διαπιστώσεις. + +1. Το ποσοστό του πληθυσμού στο οποίο οι υπολογιστές φαντάζουν ακόμα σαν κάτι εξειδικευμένα τρομακτικά κουτιά, είναι ακόμα πολύ μεγάλο στην ωραία μας χώρα\... + και είναι κρίμα. +2. Στη ζωή ισχύει αυτό που ισχύει και στο στρατό. \`Όσο λιγότερα ξέρεις, τόσο καλύτερα για εσένα (αυτό πάντως - και δυστυχώς - δεν το εφαρμόζω εγώ προσωπικά) +3. Το internet είναι ακόμα μια απέέέέέέέέραντη τσόντα (αυτό φυσικά είναι το λιγότερο). +4. Το ελληνικό κράτος δεν κάνει τίποτα για να μάθει ο κόσμος ότι οι υπολογιστές δεν είναι παράξενα ξωτικά που κατέβηκαν από άλλο πλανήτη. Και αυτό ίσως να + είναι το χειρότερο. +5. Υπάρχουν κάτι \`\`αετονύχηδες\'\' που την έχουν δει masters of the computer, και πουλάνε στον κόσμο φύκια για μεταξωτές κορδέλες, και που δεν έχουν τα + κότσια (αφού πουλήσουν τον υπολογιστή) να βοηθήσουν τον κόσμο να καταλάβει τι κάνει αυτό το κο\#\@κουτο. \`\`Πάρε αγόρι μου\'\', λένε, \`\`και θα μπεις στο + Internet !!!\'\' + +Μέχρι τον επόμενο μήνα λοιπόν που θα έχω εγκαταστήσει το Linuxάκι μου στον (καινούριο!!!) υπολογιστή μου, βολευτείτε με ένα άρθρο άσχετο με το Linux, αλλά +σχετικό με την κατάσταση της γνώσης για τους υπολογιστές σε αυτό το άκρο της βαλκανικής χερσονήσου (που λέμε Ελλάδα) + +Φιλάκια, Βαγγούκος diff --git a/content/articles/13/03_grredhat2.md b/content/articles/13/03_grredhat2.md new file mode 100644 index 0000000..40351d3 --- /dev/null +++ b/content/articles/13/03_grredhat2.md @@ -0,0 +1,112 @@ ++++ +title = 'Ελληνικά στο RedHat 5.0' +date = '1999-03-01T00:00:00Z' +description = '' +author = 'Τζέμος Δημήτρης' +issue = ['Magaz 13'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μετά απο πολλές περιπέτειες με τα ελληνικά στο RedHat 5.0 , διάβασμα των σχετικών Howto βρήκα πως βάζουμε ελληνικά ΠΑΝΤΟΥ στο RedHat 5.0 (Xwindows και console) +Τα Howto έχουν μερικά λάθη με βασικότερο το locale lang=gr\_GR.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πρέπει να γίνουν οι παρακάτω ενέργειες: (Πρέπει να είμαστε root) + +1. απο τη γραμμή εντολών ή σε Xterm γράφουμε locale. Πρέπει να πάρουμε τα εξής: + + LANG=POSIX + LC_CTYPE="POSIX" + LC_NUMERIC="POSIX" + LC_TIME="POSIX" + LC_COLLATE="POSIX" + LC_MONETARY="POSIX" + LC_MESSAGES="POSIX" + LC_ALL= + + Πρέπει δηλαδή να ΜΗΝ έχουμε βάλει πουθενά lang=gr\_GR + + - Για Xwindows\ + Κατεβάζουμε τα αρχεία XFGreekFNTS-1-1.noarch.rpm, **X11greek\_tar.gz και greekXfonts-BDF-1\_1.tgz** που περιέχουν ελληνικές γραμματοσειρές καθώς και το + GRkbd-1.2.linux.tar.gz για αλλαγή πληκτρολογίου (ΟΧΙ το XFGreekKBD-1.2-2.noarch.rpm) **Οι τόποι, από τους οποίους μπορείτε να κατεβάσετε τα παραπάνω + αρχεία, αναφέρονται σε μορφή links στο τέλος του άρθρου.** Τα εγκαθιστούμε και στο /etc/XF86Config πρέπει να προσθέσουμε το FontPath για τις ελληνικές + γραμματοσειρές του greekXfonts-BDF-1\_1.tgz Οι του XFGreekFNTS-1-1.noarch.rpm προστίθενται αυτόματα. **Η εγκατάσταση του X11greek\_tar.gz γίνεται ως + εξής: Το αποσυμπιέζουμε και πηγαίνουμε στον κατάλογο x11greek/fonts. Αντιγράφουμε όλα τα αρχεία εκτός των fonts.alias και fonts.dir στον κατάλογο + /usr/lib/X11/fonts/misc. Μετά πηγαίνουμε στον παραπάνω κατάλογο και εκτελούμε τις εξής εντολές:1) mkfontdir 2) xset fp+/usr/lib/X11/fonts/misc 3) xset + fp rehash. Τεστάρουμε αν εγκαταστάθηκαν με την εντολή xlsfonts \| grep -i greek. Πρέπει να μας δείξει όλες τις ελληνικές γραμματοσειρές.** Αντιγράφουμε + το grkbd στο /usr/bin για να είναι στο path ή δηλώνουμε το path που βρίσκεται το grkbd + - Για console κατεβάζουμε το greek-console.rpm και το εγκαθιστούμε. + +2. Δημιουργούμε το αρχείο /root/.inputrc με περιεχόμενα + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + set meta-flag on + set convert-meta off + set output-meta on + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Σημείωση: Για κάθε χρήστη του συστήματος δημιουργούμε και το αντίστοιχο  /.inputrc Π.Χ. για χρήστη nikos στο /home/nikos/ + +3. Στο /root/.Xdefaults διορθώνουμε τη γραμμή xterm\*font: fixed και xterm\_color\*font: fixed με xterm\*font: grfixed και xterm\_color\*font: grfixed + αντίστοιχα. Φυσικά μπορούμε να βάλουμε και άλλη εκτός απο την grfixed. + +4. Στο /etc/bashrc δημιουργούμε τα alias προσθέτοντας τις παρακάτω γραμμές: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + alias xterm="xterm -fn grfixed" + alias rxvt="rxvt -fn grfixed" + alias xedit="xedit -fn grfixed" + alias joe="joe -asis" + alias ls="ls -N --color=yes" + alias less="less -r" + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +5. Για console δημιουργούμε ενα link στο chcp ως εξής: ln -s /usr/local/bin/chcp /chcp οπότε αρκει να δώσουμε /chcp 928 και με alt-shift εχουμε ελληνικά στη + γραμμή εντολών. Σημείωση: Στο /usr/lib/kbd/consolefonts/ υπάρχουν οι γραμματοσειρές οπότε μπορούμε να χρησιμοποιήσουμε την εντολή setfont + /usr/lib/kbd/consolefonts/γραμματοσειρά για να ορίσουμε ποιά θέλουμε. + +6. Για το Netscape + - Για να εχουμε ελληνικά στη γραμμή που δίνουμε τις διευθύνσεις και παντού στο email. Aντιγράφουμε το αρχείο Netscape.ad απο το κατάλογο + /usr/doc/netscape-communicator-4.0x/ **(αν ο netscape είναι εγκατεστημένος από μορφή .rpm ή από τον κατάλογο που τον εγκαταστήσατε, σε περίπτωση μορφής + .tar.gz)** στο /usr/X11R6/lib/X11/app-defaults/ και το μετονομάζουμε σε Netscape. Το ανοίγουμε με τον joe ή με άλλον επεξεργαστή και στη γραμμή 5167 + ,5168, 5169 όπου λέει adobe βάζουμε \* δηλ πρέπει να είναι + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmTextField.fontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmText.fontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmList*fontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Επίσης στη γραμμή 5200,5201,5202 αντικαθιστούμε το -\*-helvetica με -greek-helvetica και το 100 με 120 δηλαδή πρέπει να είναι + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmLGrid*fontList:\ + -greek-helvetica-medium-r-*-*-*-120-*-*-*-*-iso8859-*,\ + -greek-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*=BOLD,\ + -greek-helvetica-medium-o-*-*-*-120-*-*-*-*-iso8859-*=ITALIC + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ΤΕΛΕΙΩΣΑΜΕ + + Ξεκινάμε τον Netscape και απο το view -\>encoding επιλέγουμε το Greek (ISO-8859-7) και πάλι απο το ίδιο μενού το \"Set Default Encoding \" και στο + Εdit-\>Preferences-\>Appearance-\>fonts το \"Greek(iso-8859-7)\" και ορίζουμε ποιές γραμματοσειρές θέλουμε. **Οι καλύτερες είναι οι Courier (Greek).** Tο + ίδιο κάνουμε για το \"Western(iso-8859-1)\". + +Σημείωση : Αν κάποιος θέλει να έχει ελληνικά και στο tkirc irc και στο circus irc μπορείτε να μου το πείτε για να στείλω κάποιο σχετικό email. + +**Οι παραπάνω οδηγίες εγκατάστασης έχουν δοκιμαστεί με επιτυχία σε σύστημα RedHat 5.2 εφοδιασμένο με τον Netscape 4.07. Επίσης, η δοκιμή πέτυχε και με τον +Netscape 4.5, ενώ ως window managers χρησιμοποιήθηκαν οι: fvwm95, Afterstep, KDE 1.0, KDE 1.1.** + +**ΔΙΕΥΘΥΝΣΕΙΣ ΑΡΧΕΙΩΝ** + +**ftp://argeas.cs-net.gr/pub/unix/linux/GREEK/ ftp://argeas.cs-net.gr/pub/unix/linux/GREEK/fonts http://members.xoom.com/Vrypan** diff --git a/content/articles/13/04_lin_for_dummies2.md b/content/articles/13/04_lin_for_dummies2.md new file mode 100644 index 0000000..884508b --- /dev/null +++ b/content/articles/13/04_lin_for_dummies2.md @@ -0,0 +1,459 @@ ++++ +title = 'Linux για τους νοητικά ασθενείς part II' +date = '1999-03-01T00:00:00Z' +description = '' +author = 'Κοτσιφάκης Θρασύβουλος' +issue = ['Magaz 13'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Συνέχεια του άρθρου του προηγούμενου μήνα. Τα πρώτα σας βηματάκια στο Linux και στα τερτίπια του .**Strictly for beginers**.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Ό LI.LO. (άκου όνομα κι αυτός).** +------------------------------------------------------------------------- + +**2. Τα αρχεία συστήματος** +-------------------------------------------------------------- + +- [2.1 /etc/fstab](#ss2.1) +- [2.2 /etc/profile](#ss2.2) +- [2.3 /etc/printcap](#ss2.3) +- [2.4 /etc/rc.config](#ss2.4) +- [2.5 /etc/inittab](#ss2.5) +- [2.6 /etc/conf.modules](#ss2.6) +- [2.7 Τα αρχεία autoexec.bat και config.sys](#ss2.7) + +**3. Επίλογος (άντε γιατί βαρεθήκαμε).** +--------------------------------------------------------------------------- + + +### [1. Ό LI.LO. (άκου όνομα κι αυτός).]{#s1} + +Χαιρετώ τα πλήθη και μπαίνω κατ\' ευθείαν στο ψητό. LI.LO. εστί **Linux Loader**, και τι κάνει αυτός ε; λοιπόν αυτός φροντίζει να ξεκινήσει(σουν) το(τα) +λειτουργικό(ά) μας. Προφανώς όταν κάνατε εγκατάσταση του Linux, σας ζητήθηκε να τον εγκαταστήσετε κάπου. 'ν δεν έχετε κάποιο λειτουργικό με δικό του loader +(π.χ. OS/2) εγκαταστήστε τον στο MBR (master boot record).Φτιάξτε τα boot volumes μέσα από τις ρουτίνες που διαθέτει κάθε Distribution, δώστε τους ονομασία και +όταν ξεκινήσει ο κουβάς σας θα δείτε ένα μήνυμα μετά από την εκκίνηση του bios όπως το παρακάτω: + +**LΙLO:** + +Δώστε τώρα το όνομα που δώσατε στο boot volume του Linux και συνεχίστε με τα βήματα που διαβάσατε στο πρώτο άρθρο της σειράς για να κάνετε login. Πάμε τώρα να +βγάλουμε τα μάτια στον lilo και να μάθουμε μερικά ψιλά για το πως θα τον κάνουμε να δουλεύει όπως θέλουμε εμείς. + +Κατά την εγκατάσταση του συστήματος σας στο σημείο που εγκαταστήσατε τον lilo συνέβησαν τα εξής: + + α. Καθορίστηκαν οι εγγραφές για το τι λειτουργικά συστήματα πρέπει να είναι έτοιμος ο lilo να ξεκινήσει. + β. Καθορίστηκαν οι ονομασίες αυτών (boot labels) + γ. Καθορίστηκε η θέση τους (σε ποιο δίσκο, σε ποιο partition ) + δ. Καθορίστηκε ποιο λειτουργικό θα είναι το default. + ε. Τροποποιήθηκε το MBR + στ. Γράφτηκαν οι αλλαγές στο configuration file του LILO. + +Αυτά βέβαια με απλά λόγια διότι οι διαδικασίες αυτές είναι much much more complicated απ\' όσον ακούγονται, (διαβάστε το /usr/doc/lilo/README και θα καταλάβετε +τι εννοώ.) Πάμε τώρα να αλλάξουμε τα φώτα στον lilo. + +Μεταφερθείτε στο /etc directory και ψάξτε για ένα αρχείο με το όνομα **lilo.conf**. Ανοίξτε το με κάποιον editor (vi, pico, joe ή όποιον άλλο εσείς πλέον +χρησιμοποιείτε -συνιστώ ανεπιφύλακτα τον pico). Αυτό που θα δείτε είναι περίπου το παρακάτω : + + # LILO global section start + boot=/dev/hda + prompt + timeout=100 + vga = normal + # End LILO global section + # + # Linux bootable partition config begins + image = /boot/vmlinuz + root = /dev/hda6 + label = linux + # Linux bootable partition config ends + # + # Winblows bootable partition config begins + other = /dev/hda1 + label = w95 + table = /dev/hda + # Winblows bootable partition config ends + +Νομίζω ότι με κάποια προσεκτική ανάγνωση καταλαβαίνετε τι κάνει αυτό το αρχείο αλλά και πως το κάνει.Βέβαια εδώ δεν διαβάζουμε για να γίνουμε Πυθίες γι αυτό ας +εξηγήσουμε μερικά πράγματα. + +Προσέξτε τις εγγραφές ανάμεσα από τα σχόλια \"\#LILO global section start\" και \"\# End LILO global section\". Εδώ βρίσκονται οι γενικές (σφαιρικές) +καταχωρίσεις για την αρχική συμπεριφορά του συστήματος μας. + +**boot=\...** : Εδώ καθοδηγούμε το σύστημα για το που βρίσκεται το boot record. Συνήθως είναι /dev/hda ή /dev/sda (αν ξεκινάμε τον lilo από hard-disk ) ή και +/dev/fd0 (αν ξεκινάμε από δισκέττα -ναι, και αυτό γίνεται). + +**prompt** : Ενεργοποιείται το LILO prompt που βλέπουμε στην εκκίνηση και μας καλεί να επιλέξουμε λειτουργικό για την εκκίνηση. + +**timeout=\...tenthsofsecs** : Εδώ βάζουμε τον χρόνο που θα καθυστερήσει ο lilo στο prompt πριν ξεκινήσει το default λειτουργικό.Το 100 που έχει το lilo.conf +παραπάνω σημαίνει 10 seconds. + +**vga=\...** : Εδώ μπορούμε να χρησιμοποιήσουμε μία τιμή ανάλυσης σε χαρακτήρες για την απεικόνιση των τερματικών μας. Οι επιλογές που έχουμε είναι normal +(80x25) ext (80x50) ή ask όπου ερωτούμαστε για την ανάλυση (στο 2.2 kernel η παράμετρος ask δείχνει τον πραγματικό της εαυτό αφού μπορούμε να εκκινήσουμε σε +SVGA Mode). + +Προς στιγμήν ας αφήσουμε το global section στο οποίο θα επιστρέψουμε δριμύτεροι για να του αλλάξουμε τα φώτα, και ας ρίξουμε μία ματιά στο section **\# Linux +bootable partition config begins** + +**image=**/boot/vmlinuz : Εδώ λέμε στον lilo πού θα βρεί τον πυρήνα (vmlinuz είναι το όνομα που θα συναντήσετε και που αργότερα θα χρησιμοποιείτε κι εσείς για +την ονομασία των custom kernel που θα φτιάχνετε, π.χ. vmlinuz\_2\_0\_36 vmlinuz\_2\_2 κ.λ.π. /boot φυσικά είναι το directory όπου αποθηκεύετε τους πυρήνες σας. + +**root =**/dev/hda6 : Έδώ φυσικά καθοδηγούμε τον lilo για το που κάνουμε mount το root (/) + +**label** = linux : Έδω του λέμε τι entry να περιμένει στο prompt. Πληκτρολογώντας δηλαδή linux και πατώντας το enter θα ξεκινήσει να φορτώνει το Linux του +οποίου το loadable kernel βρίσκεται στο /boot ,ονομάζεται vmlinuz και το root directory του \"κάθεται\" στο /dev/hda6 + +Ας πειράξουμε τώρα λίγο το συγκεκριμένο αρχείο.Μπείτε σε μια άλλη κονσόλα και ανοίξτε τον editor της αρεσκείας σας. Πληκτρολογείστε ότι σας κατέβει για μήνυμα +έναρξης και σώστε το π.χ. με ένα όνομα όπως my\_welcome\_msg. Γυρίστε τώρα στο τερματικό που έχετε ανοιχτό το lilο.conf και γράψτε στο global section την εξής +εγγραφή. + +**message**=\.../my\_welcome\_msg όπου έχω τελείες εσείς βάλτε το path για το my\_welcome\_msg π.χ. /boot/my\_welcome\_msg + +Επειδή όμως εσείς είσαστε και ολίγον τί αργόστροφοι και όταν ξεκινάτε τον υπολογιστή το μυαλό σας στέλνει τις εντολές στα χέρια σας για πληκτρολόγηση με +τεράστια χρονοκαθυστέρηση, ο χρόνος των 10 δευτερολέπτων είναι λίγος. Ας βάλουμε κι εδώ 30 δευτερόλεπτα. + +**timeout=** 300 + +Επειδή όμως και αυτός ο χρόνος είναι μικρός για το επίσης μικρό και νωθρό νευρικό σας σύστημα ας ανατρέξουμε στις παρακάτω ενότητες για να αλλάξουμε και τα +labels και να τα κάνουμε μικρότερα + +**label=**l + +**label=**w + +Αλλά επειδή αν και πτωχοί τω πνεύματι είμαστε ανήσυχοι και διαβάσαμε το άρθρο του φίλου μου Βαγγέλη στο προηγούμενο τεύχος και έχουμε κάνει complile έναν kernel +τον οποίο θέλουμε να δοκιμάσουμε για να καμαρώσουμε τι ωραία και γρήγορα που (δεν) ξεκινάει το μασίνι μας αφού απαντήσαμε αρνητικά σε ότι μας ρώτησε κατά την +διάρκεια του config ας φτιάξουμε και ένα section για το δικό μας kernel που με περηφάνεια ονομάσαμε vmlinuz\_siga\_kai\_8a\_bootarei. + + + # LILO global section start + boot=/dev/hda + message=/boot/my_welcome_msg + prompt + timeout=300 + vga = normal + # End LILO global section + # + # Linux bootable partition config begins + image = /boot/vmlinuz + root = /dev/hda6 + label = l + # Linux bootable partition config ends + # + # Winblows bootable partition config begins + other = /dev/hda1 + label = w + table = /dev/hda + # Winblows bootable partition config ends + # + #to neo section me to kernel poy ftiajame jekina edw + image= /boot/vmlinuz_siga_kai_8a_bootarei #elpizw oti to antigrapsate sto /boot + root = /dev/hda6 + label = l1 #elpizw na prolauete na to plhktrologhsete + #edw teleiwnoume (ponhroulia mou!) + +Αφού κάναμε τις αλλαγές μας σώζουμε το lilo.conf και περήφανοι για την πρόοδο μας επανεκκινούμε τον κουβά μας, βλέπουμε το LILO prompt και γράφουμε **l**, +πατάμε το enter και παίρνουμε τ\' \_ \_ \_ \_ \_ια μας ,μας λέει ο lilos ότι λέει δεν υπάρχει τέτοιο πράμα. Πατάμε το Tab για να δούμε τι επιλογές έχουμε και τι +θωρούν τα μάτια μας; **linux** και **w95** μα αφού τα αλλάξαμε με τα ίδια τα χεράκια μας , και το καινούριο kernel που είναι; Well αφήστε το linux να μπουτάρει +όσο θα σας εξηγώ. + +Όταν μετατρέπουμε το αρχείο lilo.conf πρέπει να εγκαταστήσουμε τον lilo ξανά για να αλλάξουν τα settings του **/boot/map** το οποίο δεν μεταβάλλεται αν δεν +τρέξουμε το : + +**/sbin/lilo** + +Αφού τώρα το ξέρουμε πάμε να εφαρμόσουμε την γνώση μας. Tο μήνυμα που θα πάρουμε μετά από την εκτέλεση του /sbin/lilo θα είναι + + Added l* + Added w + Added l1 + +Ο αστερίσκος που βλέπετε πλάι στο **l** δείχνει ότι το l είναι το image που θα φορτώσει σε (πολύ) πιθανό timeout . Αν τώρα θέλετε να ξεκινά by default τα +**ΑΚΑΤΑΝΟΜΑΣΤΑ(c)** τότε κάντε σκάντζα το linux section με το Winblows section (το Winblows πρώτο) και ξανατρέξτε το /sbin/lilo, να πάτε τώρα τρέχοντας να +εξομολογηθείτε την αμαρτία σας σ\' ένα παπά (τον αφορισμό τον έχετε σίγουρο, μόνο ο Χριστοδου(λοπου)λος σας σώζει που αυτός όλα τα συγχωρεί). Τέλος πάντων +ξεκινήστε τον κουβά και βλέπουμε.Και τώρα όπως βλέπετε και το μηνυματάκι σας φαίνεται στην οθόνη έναρξης και το νέο kernel δεν μπουτάρει και γενικώς τα κάνατε +θάλασσα. + + +### [2. Τα αρχεία συστήματος]{#s2} + +Τα αρχεία συστήματος είναι κάτι αρχεία τα οποία διαβάζει ο κουβάς μας κατά την διαδικασία εκκίνησης του για να πάρει γενικές κατευθύνσεις και για να ξέρει τι +υπηρεσίες θα ξεκινήσει.Τα αρχεία αυτά θα τα συναντήσετε μέσα στο **/etc** και στα directories των εκάστοτε user (/root , /home/\...).Γενικά οι τροποποιήσεις +αυτών των αρχείων (ειδικά των γενικών αρχείων που βρίσκονται στο **/etc**) κρίνεται απαγορευμένη για μωρά και ηλιθίους αλλά μάλλον -με πάσα επιφύλαξη- εσείς δεν +ανήκετε σε καμμία από τις δύο παραπάνω κατηγορίες.Έχοντας υπ\' όψιν τα παραπάνω λοιπόν συνιστώ ανεπιφύλακτα να κάνετε ένα **backup** των αρχείων πριν ξεκινήσετε +να τα τσακίζετε στις αλλαγές προς το καλύτερο -κούνια που σας κούναγε. + +Αρχεία συστήματος στο **LINUX**, λοιπόν, είναι τα κάτωθι + +- **/etc/fstab** +- **/etc/profile** +- **/etc/printcap** +- **/etc/rc.config** +- **/etc/inittab** +- **/etc/conf.modules** + +Αυτά είναι τα σπουδαιότερα από τα γενικά αρχεία που και θα εξηγήσουμε διεξοδικά. Εκτός όμως από αυτά υπάρχουν και άλλα που δεν είναι του παρόντος να τα +εξηγήσουμε. Επειδή όμως εγώ είμαι καλός άνθρωπος και σας πάω θα τα αναφέρω εν περιλήψη. + +- **/etc/DIR COLORS** Αναθέτει τα χρώματα στην εντολή ls +- **/etc/XF86Config** Το configuration για το παραθυρικό περιβάλλον +- **/etc/passwd** Πληροφορίες για τους χρήστες (ονόματα, τα shell, τα user ID τους κ.λ.π.) +- **/etc/shadow** Τα passwords + +Φυσικά config file είναι και το lilo.conf αλλά και τα παρακάτω που βρίσκονται στους καταλόγους του κάθε χρήστη (συνήθως /home/{username}). + +- **.profile** το προσωπικό script του κάθε χρήστη (για το **bash**) +- **.bashrc** το configuration του bash +- **.xinitrc** Ένα script για να εκκινείτε τα Χ WINDOWS με τα δικά σας γούστα (γραμματοσειρές, προγράμματα που θα ξεκινούν, ο WINDOW MANAGER της αρεσκείας σας + κ.λ.π). + +### [2.1 /etc/fstab]{#ss2.1} + +Λοιπόν αυτό το αρχείο είναι ίσως το πιο απλό στο editing αφού διαβάζεται πανεύκολα. Ας εξηγήσουμε όμως τι κάνει. + +Με απλά λόγια **καθοδηγεί στην εκκίνηση** το linuxoboxo μας για το τι **filesystems** υπάρχουν στον κουβά μας, για το που γίνονται **mount** και τις +**διαδικασίες ελέγχου** για κάθε ένα απ\' αυτά. + +Η μορφή του είναι ως κάτω: + + Συσκευή mount-point filesystem-type mount-options dumps(backups) fschk + +- **Συσκευή** . Εδώ ορίζουμε τις συσκευές μας (hard-drives και partitions π.χ. /dev/hda6, floppy-disks π.χ./dev/fd0, cdrom π.χ. /dev/hdc) +- **mount-point**.Εδώ ορίζουμε κάτω από ποιον κατάλογο θα γίνεται mount η κάθε συσκευή (/ , /usr , /opt , /cdrom , /mnt/floppy κ.λ.π.) +- **filesystem-type**.Εδώ ορίζουμε το είδος του filesystem για την κάθε συσκευή (ext2 , msdos , vfat , iso9660 , hpfs κ.λ.π.) +- **mount-options**.Εδώ ορίζουμε με τι επιλογές θα γίνει mount το κάθε σύστημα αρχείων. Αυτό λέει στο σύστημα για το αν το filesystem είναι read-write (rw), + read-only (ro) κλπ. Συχνά θα συναντήσετε εδώ και τον ορισμό default , αυτό σημαίνει ότι κατά την εκκίνηση θα χρησιμοποιηθούν οι default επιλογές του + συστήματος για το συγκεκριμένο filesystem-type. +- **dumps**. Εδώ καλούμαστε να ορίσουμε αν θα ζητήσουμε να γίνει backup της μορφής του filesystem κατά την εκκίνηση.Οι επιλογές είναι δύο α. μηδέν(0) και β. + ένα (1) .Με μηδέν το filesystem δεν θα γίνει backup. Με ένα (1) θα αναγκάσει να γραφτεί ένα backup του συστήματος. +- **fschk**. Εδώ ορίζουμε αν θα ελέγχεται η συσκευή για λάθη. Οι επιλογές είναι τρείς. α. Μηδέν (0) δεν γίνεται έλεγχος δηλαδή β. Ένα (1) αφορά το root + filesystem **(/)** και κάνει ένα εκτεταμένο fschk . γ. Δύο (2) ένα λιγότερο thorough fschk. + +```{=markdown} +  +``` + Ας δώσουμε όμως και δύο-τρία παραδειγματάκια : +

+ Για ένα filesystem ext2 στο πρώτο partition του πρώτου IDE harddisk που θέλουμε να χρησιμοποιήσουμε σαν root οι εγγραφές στο fstab θα είναι : + + /dev/hda1 / ext2 default 1 1 + +Για το δεύτερο partition του δεύτερου δίσκου που κατά τραγική τύχη είναι Fat32 και γίνεται mount στο directory /winblows οι εγγραφές θα είναι: + + /dev/hdb2 /winblows vfat default(ή και rw) 0 0 + +Για ένα cdrom master στον δεύτερο IDE controller που θέλουμε να γίνεται αυτόματα mount στην εκκίνηση στον κατάλογο /mnt/cdrom οι εγγραφές είναι: + + /dev/hdc /mnt/cdrom iso9660 ro,auto 0 0 + +Αυτά τα ολίγα για το **fstab** και πάμε παρακάτω. + +### [2.2 /etc/profile]{#ss2.2} + +Το **profile** είναι ένα αρχείο, μα τι αρχείο.Εδώ τα πράγματα μπορεί να είναι εύκολα για τους διαβασμένους έως πολύ δύσκολα για τους αδιάβαστους (σας έστειλα +αδιάβαστους που λέμε). Το profile λοιπόν για να ξέρετε ελέγχει την γενική συμπεριφορά του κελύφους εργασίας μας (κάτι λέγαμε για bash την άλλη φορά, θυμάστε;). + +Η δομή του είναι περίπου αυτή που θα είχε και ένα πρόγραμμα της **C**. Από εδώ μέσα ορίζουμε το πως θα συμπεριφέρονται οι μεταβλητές συστήματος , ποια +directories θα είναι μόνιμα στο PATH , που βρίσκονται οι ΜΑΝ σελίδες, τι aliases θα χρησιμοποιηθούν, τι γλώσσα κ.λ.π. + +Αυτό που ακολουθεί είναι ένα μικρό δείγμα profile αρχείου . Οι εξηγήσεις για το κάθε τι βρίσκονται στα comments(\#) + + # /etc/profile + + PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin #καθορίζεται το path για τα εκτελέσιμα αρχεία + export PATH #γνωστοποιείται στο σύστημα + + export LANG=gr_GR #καθορίζεται η γλώσσα + + LC_ALL=gr_GR #αλλάζουν όλες οι ρυθμίσεις της γλώσσας και συμβολισμών σε ελληνικά (καθαρά C macro) + export LC_ALL=gr_GR #και εδώ γίνονται διαθέσιμες οι νέες ρυθμίσεις στο shell + export LC_CTYPE=iso-8859_7 #αλλάζουν και καθορίζονται οι λειτουργίες που έχουν να κάνουν με επεξεργασία χαρακτήρων + #σε κωδικοσελίδα iso 8859-7 (ελληνική) + + MANPATH=/usr/local/man:/usr/man:/usr/X11R6/man #καθορίζεται το path για το που βρίσκονται οι man σελίδες + export MANPATH #γνωστοποιείται στο σύστημα το path των man + + PS1="\t:\W\\" #καθορίζεται η πρωτεύουσα συμπεριφορά του shell prompt + PS2='> ' #καθορίζεται η δευτερεύουσα συμπεριφορά του shell prompt + export PS1 PS2 #γνωστοποιούνται στο σύστημα + + alias ls='ls -l --color=tty ' + alias dir='ls -l' + alias ll='ls -l' #Διάφορα aliases + alias la='ls -la' + alias l='ls -alF' + alias ls-l='ls -l' + + clear #καθαρίζει τον buffer από τα μηνύματα + + if [ -x /tmp/osslinux-3.7.1z/osslinux.runme ] ; then #κάνει έλεγχο για την ύπαρξη αρχείου με όνομα osslinux.runme + echo "the sound services can be initialized with **/tmp/osslinux-3.7.1z/osslinux.runme **" #ειδοποιεί για την ύπαρξη του αρχείου + else + echo "if you do not have a sound ready kernel compile one" #αν δεν υπάρχει ειδοποιεί και προτείνει + fi + + + +Μέσα στο profile μπορούν να οριστούν εκφράσεις όπως if\...then\.....else , loops και άλλα περίεργα και εντυπωσιακά για καλύτερο έλεγχο και παραμετροποίηση του +συστήματος, αυτό βέβαια απαιτεί από εσάς να μάθετε καλά το πως λειτουργεί το κέλυφος εργασίας. + +Όπως θα καταλάβατε το **profile** μπορεί να γίνει a real pain in our ass με την πολυπλοκότητα που μπορεί να λάβει. Μία προσεκτική ανάγνωση στην **man bash** θα +μας διώξει τις πολλές απορίες. Και συνεχίζουμε ακάθεκτοι. + +### [2.3 /etc/printcap]{#ss2.3} + +Α-χα! εδώ μπαίνουμε στο πιο πονεμένο θέμα για τον στραβόγιαννο χρήστη.**Ο ΕΚΤΥΠΩΤΗΣ ΜΟΥ** και πως αυτός θα δουλέψει. Μεγάλο θέμα και σηκώνει ώρες συζήτησης. +Φυσικά δέν θα σας κάνω την χάρη (εδώ είδα κι έπαθα να κάνω τον δικό μου εκτυπωτή να δουλέψει θα κάνω τον δικό σας;). + +Λοιπόν το printcap είναι το αρχείο που διαχειρίζεται τους εκτυπωτές μας. Μέσα απ\' αυτό περιγράφεται η συμπεριφορά του εκτυπωτή, η ονομασία του, το που θα +γίνονται spool τα έγγραφα προς εκτύπωση, το πώς θα μετατραπεί και θα εκτυπωθεί ένα αρχείο που δεν είναι ASCII. Η απλούστερη μορφή του είναι η παρακάτω η οποία +όμως είναι ικανή να τυπώσει μόνο ASCII κείμενο + + # epson colonas pro: # ονομασία του printer + lp:lp=/dev/lp1 # ποια συσκευή είναι + :sd=/usr/spool/lp1 #το spool directory + :sh #παράμετρος που εμποδίζει την εκτύπωση του ονόματος του + #owner των προς εκτύπωση σελίδων σαν επικεφαλίδα + +Επειδή όμως εσείς δεν θα τυπώσετε μόνο ASCII αλλά όλο και κάποια βρώμικη φωτογραφία θα προσπαθεί να βρει τον δρόμο της προς τον εκτυπωτή σας καλό είναι να +γνωρίζετε ότι υπάρχουν τα λεγόμενα φίλτρα τα οποία αναλαμβάνουν να περιγράψουν στον εκτυπωτή αυτό που του στέλνετε (γυμνή, ψηλή, ξανθιά με πλούσια προσόντα +κ.λ.π.) ώστε το αποτέλεσμα να είναι το αναμενόμενο και ουχί ακαταλαβίστικοι χαρακτήρες που γεμίζουν τις σελίδες σας.\ +Μία ματιά στην **man printcap** και στο **THE LINUX PRINTING HOWTO** θα σας διαφωτίσει για το πώς θα εγκαταστήσετε διάφορα φίλτρα εκτύπωσης. Οι περισσότερες +distributions πάντως έχουν και κάποια φίλτρα για εκτυπωτές. Η RH έχει τα redhat print filters τα οποία μπορείτε να εγκαταστήσετε μέσω του printool. Αντίστοιχα η +SUSE έχει τα apsfilters τα οποία μπορείτε να εγκαταστήσετε μέσω του yast, ενώ επίσης μπορείτε να βρείτε και commercial φίλτρα στο διαδίκτυο. + +### [2.4 /etc/rc.config]{#ss2.4} + +Εδώ έχομεν το αρχείο το οποίο είναι υπεύθυνο για την έναρξη των δαιμόνων (daemons) για την επιλογή της ρύθμισης γλώσσας, της χρησιμοποιούμενης γραμματοσειράς +για την έναρξη και το σετάρισμα των υπηρεσιών δικτύου και άλλων όμορφων και χορταστικών πραγμάτων.Ένα πολύ μικρό δείγμα rc.config είναι και το ακόλουθο + + MOUSE="/dev/psaux" #που βρίσκεται το mouse + MODEM="/dev/ttyS2" #που βρίσκεται το modem + KEYTABLE="us.map.gz"#το console map για τους χαρακτήρες + CONSOLE_FONT="8x14alt"#τίθεται το font της κονσόλας + KBD_NUMLOCK="yes"#αν το numlock θα είναι on κατά την εκκίνηση + KBD_CAPSLOCK="no"#αν το capslock θα είναι on + TIMEZONE="Europe/Athens"#ρυθμίσεις ώρας (/usr/lib/zoneinfo/localtime) + START_LOOPBACK="yes"έναρξη μίας εικονικής υπηρεσίας δικτύου (χρήσιμη για την λειτουργία εκτυπωτή) + NETCONFIG=""#configuration για LAN και δίκτυα γενικά + IPADDR_0="" + IPADDR_1="" + IPADDR_2="" + IPADDR_3="" + NETDEV_0="ppp0"#το όνομα του πρωτοκόλλου (συσκευής) δικτύου που μπορεί να ενεργοποιηθεί + NETDEV_1="eth0" + NETDEV_2="" + NETDEV_3="" + SETUPDUMMYDEV=yes#dummy net device χρειάζεται για σύνδεση με ppp (internet) + FQHOSTNAME="1.local"#το hostname (από το /etc/hosts) + NAMESERVER="193.91.1.1"το DNS του server που επιχειρεί πρώτη σύνδεση (εδώ της forthnet) + START_KERNELD="yes"#εκκίνηση του kernel daemon + START_GPM="yes"εκκίνηση του gpm για την υποστήριξη mouse σε τερματικό + GPM_PARAM=" -t ps2 -m /dev/mouse"#παράμετροι για το mouse και το gpm + START_LPD=yes#εκκίνηση του printer daemon + +Όπως καταλαβαίνετε το rc.config είναι το βασικό αρχείο συστήματος το οποίο και διαβάζουν τα scripts κατά την εκκίνηση του Linux για να πληροφορηθούν για την +μορφή που πρέπει να πάρει το σύστημα.Μην το αλλάζετε εκτός και αν ξέρετε πολύ καλά τι κάνετε. + +### [2.5 /etc/inittab]{#ss2.5} + +Είναι ένα μάλλον απλό αρχείο του οποίου η σημασία όμως είναι πολύ μεγάλη και για να καταλάβουμε πως λειτουργεί θα πρέπει να πούμε μερικά πράγματα για την +**/sbin/init** και τι κάνει. + +Λοιπόν αυτή η init καθορίζει την συμπεριφορά του μηχανήματος . Όλοι φαντάζομαι έχετε δώσει κάποια από τις εντολές reboot, halt, shutdown κλπ, λοιπόν το τί θα +κάνουν αυτές καθορίζεται από τα init scripts που βρίσκονται στο **/sbin/init.d** και τα οποία διαβάζει η init η οποία είναι και το πρώτο πράγμα που φορτώνει ο +kernel στην εκκίνηση για να ελέγξει τις processes που θα εκκινηθούν. Φαίνεται απλό ε; Ε λοιπόν δεν είναι, αφού στο Linux υπάρχουν διάφορα επίπεδα κάτω από τα +οποία μπορεί να τρέξει. Αυτά χαρακτηρίζονται από ένα αριθμό (αν παρατηρήσετε τα μηνύματα στην εκκίνηση θα δείτε που εκκινεί κάθε run-level και πιο είναι το +τελευταίο που χρησιμοποιείται ). + +Ένας πίνακας με τα run-levels παρατίθεται εδώ (με πάσα επιφύλαξη για τα του red hat) + + SUSE + 0 halt + S single user + 1 multi-user χωρίς δίκτυο + 2 multi-user με δίκτυο + 3 multi-user με δίκτυο και γραφικό login (xdm ή kdm καθορίζεται στο rc.config μαζί με τον window manager) + 6 reboot + + RED HAT + 0 halt + 1 single user + 2 multi user χωρίς network + 3 full multi-user + 5 γραφικό login όλες οι υπηρεσίες + 6 reboot + +Έσείς προφανώς με όποια distribution και αν δουλεύετε σε full multi - user περιβάλλον θα κάνετε login. + +Και φτάνουμε τώρα στο inittab το οποίο καθορίζει την συμπεριφορά της init και των ενεργειών που θα γίνουν σε κάθε runlevel. Παρακάτω ένα inittab με τα σχόλια +του. + + # /etc/inittab + id:2:initdefault: #Έδω καθορίζετε ως default runlevel το 2 (#suse multiusr+network) + + si:I:bootwait:/sbin/init.d/boot #το πρώτο script που διαβάζει (αυτό που ξεκινά τον + #kerneld για τα modules + # ενεργοποιεί το swap ,κάνει fschk κ.λ.π.) + + l0:0:wait:/sbin/init.d/rc 0 # + l1:1:wait:/sbin/init.d/rc 1 #ΕΝΤΟΛΕΣ ΓΙΑ ΚΑΘΥΣΤΕΡΗΣΗ ΣΤΗΝ ΜΕΤΑΒΑΣΗ ΤΩΝ + l2:2:wait:/sbin/init.d/rc 2 #RUN-LEVELS ΓΙΑ ΝΑ ΓΙΝΟΥΝ MOUNT ΤΑ FILESYSTEMS + l3:3:wait:/sbin/init.d/rc 3 # + l6:6:wait:/sbin/init.d/rc 6 # + + ls:S:wait:/sbin/init.d/rc S #οδηγίες για περίπτωση που θα μεταβούμε + ~~:S:respawn:/sbin/sulogin #σε single user mode (κατι ανάλογο με safe mode) + + ca::ctrlaltdel:/sbin/shutdown -r -t 4 now #η συμπεριφορά του three finger salute + #(for those about to rock We salute you) + + +Για να καταλάβετε καλύτερα πως λειτουργεί η **init** και το **inittab** καλό θα ήταν να ρίξετε μια ματιά στα script που βρίσκονται στο **/sbin/init.d** και +στους υποκαταλόγους του (rc0.d ,rc2.d κλπ) αλλά και στην **man init** + +### [2.6 /etc/conf.modules]{#ss2.6} + +Εδώ δεν έχουμε και πολλά να πούμε γιατί το αρχείο αυτό το μόνο πράγμα που περιέχει είναι οι ρυθμίσεις αυτών των κομματιών του hardware που ξεκινάνε με το +kerneld τον daemon δηλαδή που φορτώνει τα modules (ας πούμε drivers που φορτώνονται και ξεφορτώνονται δυναμικά) και επίσης aliases δηλαδή μετονομασίες των +modules π.χ. **alias ppp0 ppp** ή **alias iso9660 isofs** . Οι ρυθμίσεις τώρα που αναφέρονται στα modules έχουν να κάνουν με διευθύνσεις **io** και τα **irq**. +Ένα αρχείο λοιπόν που μάλλον δεν θα το αγγίξετε ποτέ αλλά μόνο για να διαγράψετε κάνα δυο comments από συσκευές που θέλετε να φορτώνουν αυτόματα μετά από κάποιο +επιτυχημένο (θα περάσουν χρόνια) kernel compilation που θα κάνετε. + +### [2.7 Τα αρχεία autoexec.bat και config.sys]{#ss2.7} + +Καλά μεγάλε άμα δεν τα ξέρεις αυτά τα αρχεία έπαιξες και έχασες. Μη με ρωτάς καθόλου γιατί. Θα έπρεπε να ξέρεις.Τέλος πάντων ας σας εξηγήσω λίγα πράγματα γι\' +αυτά. Είναι αρχεία που ασχολούνται με το φόρτωμα των απαιτούμενων drivers, που καθορίζουν τα path των εκτελέσιμων (στο dos) και άλλα χορταστικά .Στο **LINUX** +εμφανίζονται με ενιαία μορφή που είναι η παρακάτω. + + #autoexec.bat + #config.sys + set path=/read_my_lips/den_yparxoun_tetoia_arxeia_sto_linux_ma_ _ka/ + fi + +Αυτή η τελευταία παράγραφος αφιερώνεται σ\' αυτόν που μου ζήτησε αυτά τα αρχεία από το linuxoboxo μου γιατί λέει δεν μπορούσε να κάνει δουλειά με τα δικά του +και το linux του δεν ξεκινούσε (ήταν και γιατρός πανάθεμα τον -ψυχίατρος βέβαια). + +Ξεκαθαρίζουμε λοιπόν. **ΔΕΝ ΥΠΑΡΧΟΥΝ ΑΡΧΕΙΑ CONFIG.SYS ΚΑΙ AUTOEXEC.BAT ΣΤΟ LINUX**. 'ντε πια με τρελλάνατε. (Το παραπάνω περιστατικό είναι πέρα για πέρα +αληθινό και συνέβη αρχές Φεβρουαρίου, μάρτυς η γυναίκα μου). + + +### [3. Επίλογος (άντε γιατί βαρεθήκαμε).]{#s3} + +Και αφού διαβάσαμε εδώ για όλα αυτά τα περίεργα και μάλλον δύσκολα -για αρχάριους-, ας παινέψουμε και λίγο το linuxακι μας και την βαβούρα του.Well well τι +μπορούμε να πούμε ,τι strings μπροστά στα πόδια μας, τι παράμετροι συσκευών, τι επικοινωνία με το μηχάνημα. Πείτε μου βρε άθλιοι είδατε πουθενά στα +ΑΚΑΤΑΝΟΜΑΣΤΑ(c) τόση γνώση για τις διεργασίες και τα εσωτερικά της λειτουργίας του κουβά σας; Εδώ με το linux έχει αρχίσει το μυαλό και ξυπνάει που είχε +καταντήσει σαν την βιοχλαπάτσα με όλα αυτά τα λειτουργικά που κάτω από ένα πέπλο μυστικότητας τα έκαναν όλα. Εδώ τα πάντα είναι παραμετροποιήσημα , η +επικοινωνία με τις συσκευές διαφανής και στα χέρια του χρήστη (μέχρι καφέ μπορείτε να φτιάξετε με το linuxακι σας). + +Να θυμίσω ότι στα τεύχη [08/98](../08/05_bash1.html) και [09/98](../09/06_bash2.html) ο φίλος μου Βαγγέλης έγραψε δύο υπέροχα άρθρα (ούτε καν τα διάβασα) για το +bash και πως θα δουλέψουμε παραγωγικότερα μαζί του. Αξίζει να τους ρίξετε μία ματιά αφού μου φαίνεται πως είναι το μοναδικό documentation για το bash στα +ελληνικά. Καλό διάβασμα λοιπόν και φρόνιμα. + + Σημειώνω ότι τα scripts που δίνονται εδώ σαν παραδείγματα, δεν είναι ολοκληρωμένα ούτε, απαραίτητα, λειτουργικά. Ένα copy και paste δεν θα σας σώσει δηλαδή από την διαδικασία του scripting για να βάλετε ελληνικά ή για να κάνετε το Linux σας να αναγνωρίζει τον καινούργιο δίσκο του. + + the expression ΑΚΑΤΑΝΟΜΑΣΤΑ(c) is a copyright of Papadogiannakis Vaggelis. + diff --git a/content/articles/13/05_mailbox.md b/content/articles/13/05_mailbox.md new file mode 100644 index 0000000..685be60 --- /dev/null +++ b/content/articles/13/05_mailbox.md @@ -0,0 +1,529 @@ ++++ +title = 'Αλληλογραφία' +date = '1999-03-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 13'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Από το προπροηγούμενο τεύχος (11), η αλληλογραφία γράφεται αυτόματα. Για οποιαδήποτε ορθογραφικά ή άλλα λάθη, ελπίζουμε να μας συγχωρήσετε. Δεν μπαίνει +ανθρώπινο χέρι από εδώ και κάτω, παρά μόνο για copy και paste.Αυτό έγινε λόγω έλλειψης χρόνου, και ελπίζουμε να έχουμε την κατανόησή σας. Επίσης, ακόμα γίνεται +κάποια μελέτη σχετικά με το look του Mailbox. Δηλαδή είναι πιθανόν να αλλάξει. Παρατηρήσεις ευπρόσδεκτες.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\ +Παρακαλούμε ακολουθήστε τους κάτωθι κανόνες: + +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής Ερώτηση περί Linux δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμιά ματιά στα περασμένα τεύχη, και εννοώ και την στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-)\ +γ) Απαντήσεις οι οποίες δεν έχουν απαντηθεί, σημαίνει ότι μάλλον δεν ξέρουμε την απάντηση. Ερωτήσεις οι οποίες έρχονται με mail, είναι ΠΟΛΥ ΔΥΣΚΟΛΟ να +απαντηθούν. Προτιμήστε την φόρμα. + +**1. yamaha opl3-sax** +------------------------------------------------ + +**2. FTPD** +------------------------------------- + +**3. internet connection** +---------------------------------------------------- + +**4. Dialer και Irc** +----------------------------------------------- + +**5. Στησιμο συστηματος** +--------------------------------------------------- + +**6. REDHAT 5.2** +------------------------------------------- + +**7. Installation** +--------------------------------------------- + +**8. Installation Problem** +----------------------------------------------------- + +**9. ppp-on** +--------------------------------------- + +**10. Drop down menu stin selida sas** +------------------------------------------------------------------ + +**11. partitioning** +------------------------------------------------ + +**12. modem -\>No Carrier** +------------------------------------------------------- + +**13. FAT32 (2)** +--------------------------------------------- + +**14. PPP Script** +---------------------------------------------- + +**15. ΠΩΣ ΘΑ ΕΓΚΑΤΑΣΤΗΣΩ ΤΟ LINUX?** +---------------------------------------------------------------- + +**16. egkatastash linux** +----------------------------------------------------- + +**17. partition** +--------------------------------------------- + +**18. Ελληνικα** +-------------------------------------------- + +**19. Locale** +------------------------------------------ + +**20. WindowMaker και Ελληνικα\...** +---------------------------------------------------------------- + +**21. Cuseeme through ipfwadm** +----------------------------------------------------------- + +**22. NTFS file system** +---------------------------------------------------- + +**23. partitioning** +------------------------------------------------ + +**24. Dial up connection** +------------------------------------------------------ + +**25. O pppd πεθαίνει** +--------------------------------------------------- + +**26. Πυρήνας 2.2.1** +------------------------------------------------- + + +### [1. yamaha opl3-sax]{#s1} + +Από : [matziridis makis](mailto:matziridism@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +hello.exo ena poli megalo provlima.exo tin karta ixou yamaha opl3-sax ensomatomeni sto tsipaki tis intel.. otan kano omos sound config den paizei i karta. + +*Sound config? Από που? Εννοείς απο τον kernel? Υπάρχουν ειδικές οδηγίες στην σελιδα http://www.bright.net/ dlphilp/linux\_soundapps.html Αν εννοείς κάποιο άλλο +πρόγραμμα, δες τις οδηγίες του προγραμματος.* + + +### [2. FTPD]{#s2} + +Από : [Giorgio Kolosof](mailto:902@mail.902.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +help!!! prin apo 3 kronia se kapio server linux eika settari to user account stp FTP gia na min sgenoune exo apo to shell tou otan kanune ftp alla den fimame +pos to eika kani mipos xerete pos ginete?! bye byte\... + +*Στο wuftpd έχει οδηγίες στο αρχειο NOTES του source. Στον ProFTPd έχει οδηγιες στο documentation. Η γενική ιδέα είναι οτι φτιάχνεις ειδικα accounts που +θεωρουνται ως guests και μπαινουν σε chrooted ftp shell.* + + +### [3. internet connection]{#s3} + +Από : [Χρήστος Ηλιάδης](mailto:heliad@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Θα ήθελα αν είναι δυνατόν να μου δώσετε κάποια υπόδειξη για τη σύνδεση στο internet η οποία δεν θέλει μάλλον να υπακούσει παρ΄ολες τις προσπάθειες.Εχω φτιάξει +τον kernel να υποστηρίζει ppp και εχω γράψει στο /etc/resolv.conf + +*Μάλλον το πρόβλημα είναι το routing. Πρέπει να υπάρχει μία επιλογή Set default route ή κάπως έτσι στο προγραμμα που χρησιμοποιείς. Για να δεις τι routing table +έχεις, γράψε την εντολή route rn* + + +### [4. Dialer και Irc]{#s4} + +Από : [Τζουμάκης Βασίλειος](mailto:bilt@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +1\. Ποιός είναι ο dialer και πως θα το τρέξω? (S.u.S.E. 6.0) νομίζω πως εχω εγκαταστήσει όλα τα υπόλοιπα απαιτούμενα. Δεν μπορω να βρω πως θα καλεσω για να κανω +login στον otenet. Πρωτη φορα ασχολουμαι με Linux. 2. Τι πρεπει να καταχωρησω στο mIRC32 ωστε να εχω επαφη με το \#linux-gr + +*1. Διάβασε τo http://magaz.hellug.gr/1998/05/xisp.html και το archive της λίστας http://lists.hellug.gr ψαχνοντας για XISP. 2. Μάλλον /join \#linuxgr αλλά δεν +ξέρω απο IRC, οπότε\...* + + +### [5. Στησιμο συστηματος]{#s5} + +Από : [Κωστας Καρινιωτακης](mailto:kmkarin@mrpost.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +1.Ποια ειναι η σειρα των εργασιων για να στηση κανεις ενα συστημα εξ αρχης. 2.Ποια αρχεια να κατευασω κατ αρχας. Αυτα προς το παρον. Ευχαριστω.. + +*1) Αγοράζει ένα distribution, και όλα εχουν οδηγίες. 2) Τα πιο πολλά είναι στο distribution, τα υπόλοιπα ανάλογα με το τι χρειάζεσαι.* + + +### [6. REDHAT 5.2]{#s6} + +Από : [Θεωδορος Παπαδοπουλος](mailto:webgallery@grecian.net) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Ξερετε τη πυρηνα εχει το REDHAT 5.2? + +*Από την μάνα του : 2.0.36, αν αμφιβάλεις για οποιονδήποτε λόγο : uname -a* + + +### [7. Installation]{#s7} + +Από : [Λώλης Αλέξανδρος](mailto:Crash-O@ath.forthnet.gr) + +Απάντηση : [Φώτης Γεωργάτος](mailto:gef@hellug.gr) + +\'Εχω φτιάξει τα partitions και μολις ξεκινάω το Installation αφου ρυθμίσω τα partitions ,μου έχει ένα πινακάκι και μου λέω να βάλω το \"Mount Point\" που θέλω +και επίσης λέει ότι αυτό που θα γράψω πρέπει να αρχίζει με / .Εγώ δεν ξέρω τι΄είναι αυτό το mount point και τι πρέπει να βάλω και για αυτό ζητάω απεγνωσμένα +βοήθεια.Σας παρακαλώ αν γίνεται να μου στείλεται μια απάντηση σχετικά με το προβλημά μου και άμα δεν ξέρετε ούτε εσεις την λύση θα ήθελα πάλι να με ενημερώσετε +για να μην περιμένω άδικα.Σας ευχαριστώ πολυ. ΥΓ + +*Φίλε Αλέξανδρε, δεν ξέρω τι είναι το πινακάκι που βλέπεις αλλά μάλλον δεν θα χρειάζεται να συμπληρώσεις τίποτα. Λίγη θεωρία: Όλα τα UNIX συστήματα, +συμπεριλαμβανομένου και του Linux έχουν μια διαφορετική φιλοσοφία από ότι αυτήν των drives A:, B:, C:, D: κλπ. Συγκεκριμένα, υπάρχουν τα mount points δηλαδή +σημεία του συστήματος αρχείων στα οποία \"προσαρτώνται\" τα partitions των δίσκων σου (πχ το βασικό filesystem είναι στο /, υπάρχουν επίσης το /mnt, το /cdrom, +άλλες φορές φτιάχνει κανείς δικά του, πχ /diskC, /floppyA κλπ). Δες αυτό το παράδειγμα: mount -t iso9660 /dev/hdc /cdrom Η εντολή αυτή λέει, πάρε την συσκευή +hdc (1ος δίσκος στον secondary controller), και \"κόλλησέ\" την στο mountpoint /cdrom. Εάν όλα αυτά σου φαίνονται περίεργα και δεν μπορείς να καταλάβεις τι +γίνεται, σου προτείνω να αρχίσεις να διαβάζεις τα HOWTO. Καλή επιτυχία* + + +### [8. Installation Problem]{#s8} + +Από : [Λώλης Αλέξανδρος](mailto:Crash-O@ath.forthnet.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +Το προβλημα που έχω είναι το εξής + +*Για να τα πάρουμε με την σειρά: Α. Από όσο ξέρω, δεν μπορείς να τρέχεις το Linux από το CD ROM της RedHat. Το CD αυτό είναι για εγκατάσταση. Β. Άν +δημιουργήσεις μόνο ένα partition για το Linux, αυτό θα είναι αναγκαστικά το root partition, δηλ. θα έχει για mount point το \"/\" (χωρίς τα εισαγωγικά +βέβαια\...).* + + +### [9. ppp-on]{#s9} + +Από : [Georgiadis Petio](mailto:petio@mail.otenet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Den boro na sindetho meso tis linux sto internet.thelo na mou pite pos mporo na to petixo. + +*\`\`Το αυτοκίνητο μου δεν μπορεί να πάρει μπροστά\... Θέλω να μου πεις πως να το βάλω\...\'\' Συγγνώμη για το μπλάκ χιούμορ, αλλά δεν μας δίνεις άλλα +περιθώρια, και η ερώτησή σου στα αυτιά μας ακούγεταί όπως η παραπάνω στα δικά σου. Αν θέλεις να γίνεις λίγο πιο συγκεκριμένος, θα προσπαθήσουμε να σε +βοηθήσουμε. Μπορείς να μας γράψεις: α. Πώς προσπάθησες να συνδεθείς β. Με ποιον provider θες να συνδεθείς Και εκτός αυτών, πιστεύω να απαντήσεις καταφατικά στην +ερώτηση: \"ΔΙΑΒΑΣΕΣ ΚΑΝΕΝΑ HOW-TO?\" \`Αντε φιλάκια, και χωρίς παρεξηγήσεις σε παρακαλώ ΟΚ? Βαγγελούκος* + + +### [10. Drop down menu stin selida sas]{#s10} + +Από : [Giannis Chronakis](mailto:vamp71@freemail.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Pragmati exw problima (elpizw prosorina) na grapsw ellinika sto netscape kai zitw sygnwmi pou grafw greeklish. Exw mia apli erwtish. Einai logiko to drop down +menu kai to button sto aristero frame tis selidas tou periodikou sas na fainetai sto netscape 4.5 me tin morfi (kinezika/agglika) i einai diko mou problima? Mia +monolektiki apantisi mou einai arketi. Eyxaristw prolatabolika Giannis P.S. Molis blepw oti to submit button autis tis selidas einai kai auto sta agglika. + +*Αν γράφεις (ή όχι) ελληνικά στις άλλες εφαρμογές, βλέπεις (ή οχι) ελληνικά στο netscape και δεν γράφεις στο mailer του, στις φόρμες ή δεν βλέπεις στα submit +buttons, τότε μια επίσκεψη στο : [../10/04\_grredhat.html](../10/04_grredhat.html) ίσως σου φανεί διαφωτιστική.* + + +### [11. partitioning]{#s11} + +Από : [Sotiris Parmakis](mailto:sotpar@geocities.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Έχω εγατεστημένο το RedHat 5.1 σε ένα ενιαίο partition 700MB (+75MB swap partition). Τώρα θα ήθελα να το χωρίσω σε μικρότερα partition. Θα ήθελα να μου πείτε σε +ποιά directory θα πρέπει να κάνω ξεχωριστά partition και πόσο μέγεθος(περίπου) να τους διαθέσω, με την προυπόθεση πώς στο σύστημά μου δεν υπάρχουν άλλοι +χρήστες, εκτός από εμένα και δεν χρησιμοποιείται για δίκτυο. + +*Πρώτο και κυριότερο, να ξέρεις ότι το να χωρίσεις το δίσκο σου ώστε σε διαφορετικά partitions να βρίσκονται διαφορετικά directories, δεν σε προφυλάσσει από +τίποτα, (ούτε από HD failure), εκτός ίσως από το fragmentation του σκληρού σου δίσκου. Να σημειωθεί ότι το ext2 filesystem, είναι σχεδιασμένο ώστε να μην +χρειάζεται defrag, γιαυτό και δεν υπάρχουν τέτοιου είδους προγράμματα για linux. Επίσης, καλό θα ήταν να ήξερες τι σκοπό εξυπηρετεί το κάθε directory. Υπάρχει +ένα πολύ καλό άρθρο του Ν. Κόκρα στο θέμα, και μπορείς να το βρεις στο Magaz, τεύχος 7, δηλαδή εδώ: http://magaz.hellug.gr/1998/07/fs.html Ρίξε του μια γερή +ματιά πριν κάνεις τίποτα. Δεδομένου ότι ισχύουν αυτά που αναφέρεις, ότι δηλαδή δεν το χρησιμοποιούν άλλοι χρήστες, και εφόσων δεν έχεις αυξημένες απαιτήσεις +ασφάλειας δεδομένων (ώστε να κρατάς τα αρχεία σου σε ξεχωριστό partition), θα σου πρότεινα να μην περιπλέξεις τα πράγματα\... Κράτα όλο το Linux σε ένα +partition. Αν πάλι επιμένεις να δοκιμάσεις κάτι τέτοιο, δοκίμασε το εξής:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + -------------------- + 1. / (root) 250 MB + 2. /usr 400 MB + 4. /home 50 MB + -------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*ΠΡΟΣΟΧΗ! Αν στο σύστημα σου υπάρξει το /opt directory, ίσως (μάλλoν) θα χρειαστείς περισσότερο χώρο στο / (κόψε από το /usr λίγο και από το / μπόλικο), δηλαδή +κάντα κάπως έτσι:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + -------------------- + 1. / (root) 100 MB + 2. /usr 350 MB + 4. /home 50 MB + 5. /opt 200 MB + -------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σε μια τέτοια αναλογία τα έχω στο δικό μου μηχάνημα, τα είχα δηλαδή, μέχρι το crash toy HD :(((.* + + +### [12. modem -\>No Carrier]{#s12} + +Από : [Δημητρης Κοσικιδης](mailto:fanatic_gr@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αγαπητοί φίλοι και χρήστες του Linux\... Ευχαριστώ που διαβάζεται το e-mail μου και για τον χρόνο σας. Καταρχήν έχω δύο ερωτήματα + +*Δημήτρη, το περιοδικό δεν κυκλοφορεί σε περίπτερα. Μόνο στο Internet. Όσο για το modem, θα πρέπει πρώτα να κανεις authenticate και μετά να τρέξεις το pppd, αν +είσαι σε καποιον provider που να χρησιμοποιεί τέτοιου είδους authentication, αλλιώς να βάλεις το XISP να σου λύσει τα προβλήματα. Δες τα τεύχη 5 και 6 του 1998 +για πληροφορίες σχετικά με το XISP.* + + +### [13. FAT32 (2)]{#s13} + +Από : [Σωτήρης Παρμάκης](mailto:sotpar@geocities.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Σε προηγούμενη ερώτησή μου για το πως γίνεται απο Linux να διαβάσω δισκο με FAT32 μου είπατε πως πρέπει να έχω kernel από 2.0.34 και πάνω και NLS support στον +πυρήνα. Εκανα λοιπόν ξανά compile στον πυρήνα για να βάλω την πολυπόθητη υποστήριξη για fat32. Το πρόβλημα είναι ότι δεν βρήκα το NLS. Πού βρίσκεται; και πως +μπορώ να το εγκαταστήσω; Και το σημαντικότερο (μιας και είμαι αρχάριος χρήστης) πώς θα αντιστοιχίσω ένα directory του linux στο partition με fat32; (το +partition me to vfat το είχα αντιστ οιχίσει κατά την διάρκεια της εγκατάστασης) Το σύστημά μου + +*Το NLS και το FAT32 βρίσκονται εκεί που λέει filesystems. Θα δεις τον δίσκο με το γνωστό mount. Δες για λεπτομέρειες το +http://magaz.hellug.gr/1998/08/mailbox-11.html Τέλος, ο επεξεργαστής σου δηλώνεται σαν Pentium.* + + +### [14. PPP Script]{#s14} + +Από : [Stavros Maragoudakis](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Θελω να συνδεθω στον proviter μου και θελω να μου δωσετε ενα pppscript που να καλει να δεινει userid & password και να μπενει με τα ετοιμα που εχει το redhat +5.1 δεν εχω καταφερει να κανω connect\... βοηθηστε με\... Ευχαριστω + +*Προτείνουμε να βάλεις το XISP για αυτή τη δουλειά. Άσε δε που καθε provider θέλει και άλλο script. Δες και τα http://magaz.hellug.gr/1998/05/xisp.html και +http://magaz.hellug.gr/1998/06/xisp2.html* + + +### [15. ΠΩΣ ΘΑ ΕΓΚΑΤΑΣΤΗΣΩ ΤΟ LINUX?]{#s15} + +Από : [ΤΟΥΤΟΥΔΑΚΗΣ ΚΩΣΤΑΣ](mailto:yamansa@smartnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +ΓΕΙΑ ΣΑΣ ΕΧΩ ΤΟ LINUX2-2-1.TAR.GZ ΚΑΙ ΘΑ ΘΕΛΑ ΝΑ ΤΟ ΕΓΚΑΤΑΣΤΙΣΩ ΚΑΙ ΔΕΝ ΞΕΡΩ ΠΩΣ.ΜΠΟΡΩ ΝΑ ΚΡΑΤΙΣΩ ΤΟ DOS 6.22 KAI TA WINDOWS98?ΠΡΕΠΕΙ ΝΑ ΤΟ ΞΕΣΙΜΠΙΕΣΩ ΑΠΟ ΤΑ +WINDOWS. ΣΑΣ ΕΥΧΑΡΙΣΤΩ. ΤΟΥΤΟΥΔΑΚΗΣ ΚΩΣΤΑΣ + +*Αυτό που έχεις ειναί μόνο ο kernel. Πήγαινε να αγοράσεις (α) ένα βιβλίο (πολυ σημαντικό) και (β) ένα distribution.* + + +### [16. egkatastash linux]{#s16} + +Από : [mixelios vaggelis](mailto:kmvea@otenet.gr) + +Απάντηση : [](mailto:) + +exv ena pentium h/y me sklhro 2.1gb me mia kai monadiki partition opoy exo ta windows95. 1) pos ginete na egkatastiso to linux 2.3 xwris na xaso dedomena. TO +ypoloipo toy diskoy moy einai 1 GB 2) Einai protimotero na agoraso neo disko kai ti partitions prepei na dimioyrgiso? efxaristo ek tvn protervn + +*1) \"Μαζεύεις\" το partition των Windows (δες το http://magaz.hellug.gr/12/mailbox-1.html) και βάζεις το Linux στο νεο partition. ΠΑΝΤΑ ΣΥΝΙΣΤΑΤΑΙ Backup!!! 2) +Ναι, είναι προτιμότερο για θέμα χώρου. Για τα partitions δες τα http://magaz.hellug.gr/1998/07/fs.html και http://magaz.hellug.gr/1998/03/mailbox-3.html* + + +### [17. partition]{#s17} + +Από : [Makis Domakis](mailto:anama@otenet.gr) + +Απάντηση : [Νίκος Κόκρας](mailto:kokni@hellug.gr) + +exo ta windows98. pos mporo na kano partition me sigouria, xoris na xaso tipota apo ta arxeia moy? + +*Με σιγουριά δεν μπορείς :-) Κατά τα άλλα, τόσο το fips όσο και το γνωστό partition magic, συνήθως έχουν καλά αποτελέσματα και το re-partitioning δουλεύει +επιτυχώς. Αν όμως δεν κάνεις ένα backup πρώτα, τότε πας γυρεύοντας. φιλικά kokni* + + +### [18. Ελληνικα]{#s18} + +Από : [Χρήστος Ηλιάδης](mailto:heliad@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Μήπως ξέρετε αν το Wordperfect 8 το οποίο έστησα και το βρήκα εξαιρετικό αν λειτουργεί μόνο με τις δικές του γραμματοσειρές η γενικά με όλες των Χ;Πρόβλημα έχω +και με το StarOffice το οποίο επίσης δεν παίζεται..Απαντήστε μου όποτε μπορείτε γιατί η έλλειψη χρόνου από μέρους σας είναι κάτι που πρέπει να +σεβόμαστε..(χρησιμοποιω το linux εδω και 8 μήνες και δεν εχω εμφανιστεί στο σύλλογο)πάντως παιδιά συγχαρητήρια,γεια χαρά. + +*Για το StarOffice θα βρεις οδηγίες στο http://magaz.hellug.gr/1998/06/greekfonts.html Για το wordperfect θα κατεβάσεις τον font installer από το +ftp://mk.aua.gr/pub/xwpfi.tar.gz και αφού το αποσυμπιέσεις στο /opt/wp8 (ή όπου έχεις βάλει το wordperfect) θα τρέξεις το xwpfi και θα εγκαταστήσεις όποιες +γραμματοσειρές θέλεις.* + + +### [19. Locale]{#s19} + +Από : [Μιχαηλος Γιαννης](mailto:mjohn@compulink.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +Πως μπορω να αλλαξω τις Locale ρυθμισεις ? Θελω να βαλω το LANG=gr\_GR. Εχω το Red Hat 5.1. A! Υπαρχει τροπος να γραφω ελληνικα σε προγραμματα οπως το xisp ή το +pgaccess(front end της postgress)? + +*Στο .bashrc που βρίσκεται στο home directory σου προσθέτεις την εντολή: export LANG=gr\_GR.* + + +### [20. WindowMaker και Ελληνικα\...]{#s20} + +Από : [Γιωργος Βρεντζος](mailto:antoula@hotmail.com) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +Γεια σας για αλλη μια φορα, τελικα θα το καθιερωσω ετσι οπως το παω σε μια απορια το μηνα ! Οπως και να\'χει, ευχαριστω που απαντατε σε ολα μου τα ερωτηματα +-και οχι μονο στα δικα μου αλλα και σε αυτα δεκαδων αλλων αναγνωστων του Magaz-. Το προβλημα μου λοιπον ειναι ,γι\'αυτο το μηνα ;-), το εξης αφου εγκατεστησα τα +ελληνικα στο shell,ακολουθωντας τις οδηγιες σας αλλα και αυτες του Ram, ειπα να βαλω κι ελληνικα στο Xfree\... Το προβλημα ειναι οτι απο την στιγμη που +εγκαθιστω το πακετο XFGreekFNTS\_noarh.rpm (ή καπως ετσι), δεν μπορω να ξεκινησω τον WindowMaker -το KDE που δοκιμασα δουλευει κανονικα αλλα προτιμω τον WM-. +Συγκεκριμενα λαμβανω,η μαλλον ελαμβανα, μυνημα οτι δεν υπαρχουν τα καταλληλα fonts.Διαβαζοντας αναλυτικα τις οδηγιες του WM\_Readme, εκανα απο την αρχη +εγκατασταση με υποστηριξη για ξενες γλωσσες και τελικα, αφου προσθεσα στο αρχειο .xinitrc την γραμμη EXPORT LANG; LANG=el ,καταφερα να κανω τον WindowMaker να +δουλεψει \"κανονικα\". Και λεω \"κανονικα\" γιατι προσφατα ανακαλυψα οτι ενω ολα τα προγραμματα λειτουργουν,και με σχεδον αριστη υποστηριξη ελληνικων,το +προγραμμα Wprefs -βασικο και ακρως απαραιτητο- δεν λεει να τρεξει. Μαλιστα στο readme file υπαρχει ειδικο section στο troubleshooting το οποιο με προτρεπει να +αλλαξω ορισμενες γραμμες απο αρχεια του windowmaker.Ε λοιπον,τις αλλαξα και οριστε τι μυνημα παιρνω καθε φορα που προσπαθω να τρεξω το WPrefs ./WPrefs Warning : +Could not load font set : -\*-\*-medium-r-normal-\*-12-\*-\*-\*-\*-\*-\*- Trying fixed Could not load fixed font. Could not load any fonts. Make sure your font +installation and locale settings are correct. Fatal error κλπ\...\..... Το θεμα ειναι οτι εγω δεν εχω πειραξει τιποτα απολυτως απο τους καταλογους των fonts, +ενω ολα τα fonts folders ειναι δηλωμενα στο σωστο αρχειο -χμμ\...ξεχασα και το ονομα του τωρα !-. Στο αρχειο βοηθειας του WindowMaker λεει οτι πρεπει να +\...\"unset the LANG enviroment variable before starting wmaker\" ,δηλαδη πρεπει να βγαλω απο το .xinitrc την γραμμη EXPORT LANG;LANG=el ;;;Μα τοτε δεν θα +ξεκινα καθολου ο WindowMaker !! Γι\'αυτο στελνω αυτο το e-mail απελπισιας ,μπας και καποιος απο σας εχει παρατηρησει αυτο το προβλημα και εχει βρει τη λυση +του.. CLAiRVOYANT + +*Με την εγκατάσταση του XFGreekKBD έχει δημιουργηθεί ένα αρχείο (/etc/profile.d/XF-Greek.sh) που κάνει set τα διάφορα locales (ή μάλλον τις τιμές των +μεταβλητών). Αυτό το αρχείο \"τρέχει\" κάθε φορά που σηκώνεις το bash. Άρα, όταν τρέχεις το .Xclients τα LC\_LANG, LC\_ALL κ.λ. έχουν τιμές και δεν είναι κενα. +Αν θέλεις να τα \"μηδενίσεις\" δώσε unset LANG; unset LC\_ALL Βέβαια, το παραπάνω θα έχει σαν αποτέλεσμα να μην παίζουν καθόλου τα ελληνικά. Δοκίμασε και export +LC\_CTYPE=gr\_GR μετά τα unset. Ίσως να λυθούν όλα τα προβλήματά σου.* + + +### [21. Cuseeme through ipfwadm]{#s21} + +Από : [George Goufas](mailto:ggoufas@lexis.gr) + +Απάντηση : [Φώτης Γεωργάτος](mailto:gef@hellug.gr) + +Γειά σας Έχω ενα προβλημα σχετικα με το cuseeme μεσω ipfwadm Απο ενα εικονικό δυκτιο 10.χ.χ.χ επικοινωνω με ενα meeting point server που λειτουργει κάπου στο +ΝΕΤ και ειναι ΟΚ.Πέρνω την λίστα με τα κανάλια που εχει και οταν φτάνει η ώρα να πάρω video stream πάπαλα,ακομα περιμένω\.....Εδώ πρέπει να σημειώσω οτιεχω +ανεβάσει τα modules για το cuseeme kai vdolive kai irc .Ακομα και αν ανεβάσω τα modules me insmod ip\_masq\_cuseeme port=24032 (ειναι η πόρτα για το stream που +στέλνει ο server για τα data video προς τα clients) πάλι τα ιδια.Αυτο που με τρελενει είναι οτι διολου απιθανο είναι να μην ξερω σωστες πορτες η να μην κάνω +τιποτα σωστά.Επεισης επιχείρησα να ανοιξω τα φιλτρα του ipfwadm για τις συγκεκριμένες πορτες χωρίς επιτυχία. Αν ξέρετε τιποτα παρακαλώ απαντηστε\.... Ευχαριστω +για το χρόνο σας Γιώργος Γκούφας + +*Σύνηθες πρόβλημα στα προγράμματα αυτού του τύπου (εγώ το είδα στο Netmeeting της Microsoft) είναι ότι δίνουν οι clients το IP τους, ως αναγνωριστικό στο +server, ο οποίος με την σειρά του το χρησιμοποιεί για τα πακέτα που στέλνει πίσω. Αναμενόμενο αποτέλεσμα είναι ότι τα πακέτα αυτά ποτέ δεν βρίσκουν το προορισμό +τους εάν είναι της μορφής 192.168.x.y, 10.x.y.z κλπ. Μάλιστα σε μια συγκεκριμένη περίπτωση είδα το εξής: το stream δεδομένων audio/video από το μηχάνημα πίσω +από το firewall έφτανε στο άλλο άκ ρο, αλλά χωρίς να συμβαίνει το αντίθετο! Δεν ξέρω ακριβώς πως λειτουργεί το cuseemee, αλλά ίσως αυτό να είναι το πρόβλημα. +Καλή επιτυχία σε κάθε περίπτωση.* + + +### [22. NTFS file system]{#s22} + +Από : [Μουστάκας Δημήτρης](mailto:dmoustas@otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Στον υπολογιστή έχω ntfs partision πως μπορώ να το δώ απο το linux. + +*Στον kernel 2.2 συμπεριλαμβάνεται στις επιλογές για τα filesystems. Για παλαιότερους kernels πρέπει να κατεβάσεις το εξωτρικό module από το +http://www.informatik.hu-berlin.de/ loewis/ntfs/ Και στις δύο περιπτώσεις είναι Readonly.* + + +### [23. partitioning]{#s23} + +Από : [Δομακής Μάκης](mailto:anama@otenet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Απάντηση : [evris\@hellug.gr](mailto:) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Help! Λύσσαξα να περάσω στο linux. Ελα όμως που κίνησε ο Εβραίος για δουλειά και ήταν μέρα Σάββατο! Πήρα ένα βιβλίο με το redhat και στρώθηκα στη δουλειά. Ακόμη +και εγώ ο άσχετος κατάλαβα ότι έπρεπε να κάνω πρώτα partiotioning. Για να κάνω όμως partitioning πρέπει πρώτα να κάνω FULL defragmentation. Ελα όμως που και το +σχετικό πρόγραμμα των Win98 αφήνει υπολείμματα στο τέλος του σκληρού (swapfile, image κτλ). Δοκίμασα το speedisc του norton. Τίποτα. 3 μέρες παιδεύομαι. Το fips +δεν μπορεί να δουλέψει χωρίς ΠΛΗΡΗ αποκερματισμό. Δεν θέλω να φορμάρω το δίσκο με τα win98. Θα είναι σαν να παραδέχομαι την παντοδυναμία τους!!!! Βοηθήστε με. +Μήπως υπάρχει κανένα άλλο προγραμμα για αποκερματισμο? Ευχαριστώ πολύ. + +***ΒΠ:** Δοκίμασε να απενεργοποιήσεις την εικονική μνήμη, κάνε restart, και ξαναπροσπάθησε. Εννοείται ότι έχεις τουλάχιστον 32 ΜΒ Μνήμη\... Αν δε σε αφήνει, +βάλε στα Min και στο Max (της εικονικής μνήμης) την ίδια τιμή, θα το φτιάξει σταθερού μεγέθους το swap, και ΔΕΝ θα το βάλει στο τέλος του δίσκου\... Φιλικά, για +το Magaz\... Βάγγουλας* + +***ΕΠ:** Ναι, ευχαρίστως να σε βοηθήσουμε, αλλά δεν βλέπω που άπτεται του Linux το πρόβλημα σου. Απλά θέλεις να κάνεις χώρο σε ένα μηχάνημα win και κάταλαβες +πως ούτε αυτό δεν γίνεται. Με λίγα λόγια πάλι πρόβλημα σου δημιουργείται ακόμα και κατά την απομάκρυνση των windows! ή κατά το defrag τους! ή κατά την +συρρίκνωσή τους (ώστε μετά φαντάζομαι θα χρησιμοποιούσες το fips). Κατ\'εμέ, αντί να παρακολουθήσεις σεμινάριο \"howto defrag windows in 2 days for experienced +win administrators\", ή \"Τhat\'s the way we shrink a win partition to a desired volume size with TheMSPartitioner patch lever 3.2b, twelve illustrated +full-sized images inlcuded\" παραδέξου λοιπόν (που ομολογώ πως δεν κατάλαβα γιατί) την παντοδυναμία τους και βγάλτα εντελώς, να ησυχάσεις μια για πάντα. Σε +τέτοια περίπτωση, μπορώ να σου δώσω μια Linux related βοήθεια, για \<\<\<ριζικούς\>\>\> αποκερματισμούς bootαρε με CD Linux και δώσε fdisk /dev/hda και μετά d 1 +d 2 d 3 d 4 w θα κάνει το PC σου πιο καθαρό και μαζεμένο από ποτέ. Μετά θα\'ναι πάντα Κυριακή\....* + +***ΜΚ:** Φίλε Μάκη, οποιοδήποτε πρόγραμμα και να χρησιμοποιήσεις για το partitioning θα πρέπει να μεταφέρεις όλα τα δεδομένα του δίσκου σου μπροστά. Πρέπει +λογικά να έχουν οδηγίες τα Win98 για το πως το κάνεις αυτό, αλλά αν δεν βρεις άκρη, περίμενε μέχρι να κάνεις το επόμενο format στον δίσκο των W98. Λογικά δεν θα +πρέπει να περάσει πάνω από μήνας :)* + + +### [24. Dial up connection]{#s24} + +Από : [Sotiris Ganouris](mailto:kotsman@usa.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +pos mporo na syndetho ston isp mou meso linux (x-windows i console) gia net surfing meso netscape communicator? + +*Καλή ερώτηση\... Διάβασες κανα HOWTO? Όχι τίποτα άλλο, αλλά είναι τόσοι πολλοί οι τρόποι, που μας είναι δύσκολο να σου απαντήσουμε! Αν θες πές μας τι +χρησιμοποιείς (πχ. KDE ή fvwm στα X), που έχεις το modem σου, (σε ποιά σειριακή εννοώ), και ίσως (αν είσαι αρκετά σαφής) να σου απαντήσει κάποιος. Εναλλακτικά, +πάρε το XISP, διάβασε τις οδηγίες, και θα τα καταφέρεις και μόνος σου\... Προσπάθησε φίλε Σωτήρη, και θα δεις ότι όλα είναι πιο απλά από ότι νομίζεις\....* + + +### [25. O pppd πεθαίνει]{#s25} + +Από : [Πολυτάρχος Ηλίας](mailto:elias13@mail.otenet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Απάντηση : [evripidis papakostas](mailto:evris@hellug.gr) + +Εχω το RedHat Linux 5.2 με τα KDE εγκατεστιμένα. Αφού συνδεθώ με τον isp μέσω του dialup εργαλείου του kde ο pppd πεθαίνει\... Τι γίνεται; + +***ΕΠ:** Κατι μου λέει πως δεν πάτησες το help στο kppp , να πας στο FAQ να δεις για το λάθος \"pppd has died \...\". Η απάντηση είναι εκεί: \"αν εχετε redhat +πηγαίνετε στο /etc/pppd/ και στο αρχείο options διαγράψτε τα περιεχόμενα του (όχι το αρχείο) αφήνοντάς το εντελώς κενό. Εκτός πια και αν δεν μπαίνεις ως root, +αλλά ως κοινός χρήστης και δεν έχεις δικαίωμα να ξεκινήσεις pppd. Τότε ή άλλαξε τα perms (setuid) ή μπες στο pppd group* + +***ΒΠ:** Και εκτός από αυτά που σου αναφέρει ο evris, τα οποία είναι και σωστότατα, είσαι σίγουρος ότι στον πυρήνα έχεις υποστήριξη για ppp? Επίσης αν το έχεις +βάλει modular, φορτώνεις το κατάλληλο module (ppp)?* + + +### [26. Πυρήνας 2.2.1]{#s26} + +Από : [Αγγέλης Κώστας](mailto:kangelis@altavista.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Κατ΄αρχάς αισθάνομαι την υποχρέωση να σας συγχαρώ για την αξιόλογη προσπάθειά σας και για τους νέους \"δρόμους\" που μας ανοίγετε.Είμαι παλαιός με τους Η/Υ(από +το 1985)για το LINUX έμαθα απο σας και πριν μερικές ημέρες αγόρασα το πακέτο της INFOMAGIC καθώς επίσης και το βιβλίο \"Running Linux\".Εγκατάσταση και UPDATE +του πυρήνα σε 2.2.1.Πρόβλημα 1ο + +*Η διαδικασία \"φορτωματος\" είναι πολύ σημαντική. Γενικά, θα το δεις από τα messages που βγαινουν, αλλά υπόσχομαι να ψάξω κάπου και να βρω αυτές τις +πληροφορίες, και να γράψω ένα έρθρο. Η παραμετροποίηση σε θέματα δικτύου, έχει αρκετά καλο documentation. Αν δεν τα κατάλαβες, πάει να πει ότι μάλλον δεν ξέρεις +τι σημαίνουν (no offence) οπότε μάλλον δεν τα χρειάζεσαι. Είναι εξάλλου λογικό να μην καταλαβαίνεις πολλά κομμάτια, εκτός αν έχεις κάποιο πτυχίο στα δίκτυα. +Ίσως το modprobe να μην είναι εκεί που πε ριμένει το συστημά σου να το βρει. Δες το script από το οποίο καλείται και βάλε το full path. Για τα maps που δεν +βρίσκει, κάνε του ένα depmod a και μάλλον θα συνέλθει.* + diff --git a/content/articles/14/01_enlightenment.md b/content/articles/14/01_enlightenment.md new file mode 100644 index 0000000..711b559 --- /dev/null +++ b/content/articles/14/01_enlightenment.md @@ -0,0 +1,371 @@ ++++ +title = 'Ένας ιδιαίτερος Window Manager' +date = '1999-03-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης' +issue = ['Magaz 14'] +issue_weight = 1 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Για πάμε\... Ας περιηγηθούμε μαζί σε έναν πολύ διαφορετικό αλλά και πολύ όμορφο διαχειριστή παραθύρων. Φανατικοί της κονσόλας, ώρα να την αφήσετε (αστειεύομαι, +φυσικά, αφού και ο ίδιος δύσκολα την αφήνω\...)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή.** +------------------------------------------------ + +**2. Απαραίτητες διευκρινήσεις και τα γνωστά\...** +---------------------------------------------------------------------------------- + +**3. Εγκατάσταση** +-------------------------------------------------- + +- [3.1 Πού θα τον βρώ;](#ss3.1) +- [3.2 Τι άλλο πρέπει να εγκαταστήσω;](#ss3.2) +- [3.3 Και πως τα περνάω όλα αυτά μέσα στο κουτί μου;](#ss3.3) + +**4. Ωραία, και τώρα που τον έβαλα, τι κάνω;** +------------------------------------------------------------------------------ + +- [4.1 Προετοιμασία δική μας.](#ss4.1) +- [4.2 Συνεχίζοντας\...](#ss4.2) +- [4.3 Επέμβαση στα .cfg αρχεία του enlightenment.](#ss4.3) +- [4.4 (Ξανα)συνεχίζοντας](#ss4.4) + +**5. Συμπεράσματα πρώτης επαφής** +----------------------------------------------------------------- + +**6. Themes** +--------------------------------------------- + +- [6.1 actionclasses](#ss6.1) +- [6.2 borders](#ss6.2) +- [6.3 buttons](#ss6.3) +- [6.4 cursors](#ss6.4) +- [6.5 desktops](#ss6.5) +- [6.6 imageclasses](#ss6.6) +- [6.7 menustyles](#ss6.7) +- [6.8 slideouts](#ss6.8) +- [6.9 sound](#ss6.9) +- [6.10 textclasses](#ss6.10) +- [6.11 tooltips](#ss6.11) +- [6.12 windowmatches](#ss6.12) + +**7. Επίλογος 1ου άρθρου.** +----------------------------------------------------------- + +**8. READ ME FIRST (έτσι, για αλλαγή βρίσκεται στο τέλος)** +------------------------------------------------------------------------------------------- + + +### [1. Εισαγωγή.]{#s1} + +Επιτέλους, μετά από πολύ - πολύ καιρό, η εποχή της ωριμότητας έφτασε\... Η έκδοση 0.15 (και κάτι ψιλά) του πιο φαντεζί και παραμετροποιήσιμου window manager +είναι εδώ\... + +Για όλους τους τυπάκλες με τους ισχυρούς επεξεργαστές και τα \>=64ΜΒ τους που δεν είχαν τί να τα κάνουν εκτός από το να τα χαραμίζουν σε ακατονόμαστα +λειτουργικά, να η ευκαιρία! + +Αλλά και για όλους εσάς που θέλετε να δείτε την τελευταία λέξη της τεχνολογίας στα γραφικά περιβάλλοντα του Linux, ο \"Οπτικά υπέροχος\" enlightenment είναι ένα +**must have**. + + +### [2. Απαραίτητες διευκρινήσεις και τα γνωστά\...]{#s2} + +Ξεκινώντας, και για να μην την πάθω όπως και στο άρθρο για το **Gnome**, να εξηγηθώ από τώρα ότι τόσο ο **enlightment** όσο και μερικές από τις βιβλιοθήκες που +απαιτεί, είναι \"βαριές\" (μερικές φορές ασήκωτες) και πολύ bugούχες. + +Επίσης, το σύνολο του wm αυτού είναι λίγο αργό, κυρίως λόγω του ότι είναι τόσο, μα **τόσο** παραμετροποιήσιμος, που πρέπει να λάβει πολλά πράγματα υπόψιν +του\... + +Γενικώς, αυτό που τον καθυστερεί πολύ είναι η διαχείριση των γραφικών από την (πολύ καλή) imlib. Πάντως, αν έχετε (πχ) acceleratedX, θα σας πάει σφαίρα!! Και +σίγουρα θα το χαρείτε\... + +Μην αργείτε λοιπόν! + + +### [3. Εγκατάσταση]{#s3} + +Πάμε μαζί;;; + +### [3.1 Πού θα τον βρώ;]{#ss3.1} + +Τον enlightenment μπορείτε να τον βρείτε στο σπίτι του όπου θα βρείτε και πολλές πληροφορίες για αυτόν, στο +[linuxberg](http://linuxberg.forthnet.gr) στο μέρος που ασχολούνται με τα themes του όπου θα βρείτε και πολλά themes αλλά και την τρέχουσα +development version (cvs), αλλά και σε πολλά άλλα σημεία που ίσως για εσάς να είναι πιο γρήγορα στο κατέβασμα. + +Για περισσότερες πληροφορίες ρίξτε μια ματιά στα mirrors που βρίσκονται στην + +### [3.2 Τι άλλο πρέπει να εγκαταστήσω;]{#ss3.2} + +\`Ενα απλό Query στο RPM του enlightenment 0.15.2 μου απήντησε ότι χρειάζεται τα εξής πακέτα. + +- shlibs-99.1.14-0 +- fnlib-0.4-1 +- xshared-3.3.3.1-1 +- imlib-1.9.4-1 +- libaudiofile-0.1.6-1 +- esound-0.2.8-2 +- libjpeg-6b-5 +- libpng-2.1.0.3-1 +- libtiff-3.4.final-8 +- freetype-1.1-32 +- libungif-3.0-3 +- libz-1.1.3-10 + +Κατά πάσα πιθανότητα, μερικά τα έχετε. \`Οσα δεν έχετε, ψάξτε τα. Τώρα, αν εσείς βρείτε πιο καινούρια πακέτα, δεν πειράζει να τα κατεβάσετε. + +Επειδή, ναι μεν σας αγαπώ αλλά να μπω στον (τρομερό) κόπο της αναζήτησης πακέτων στο δίκτυο δεν το κάνω για κανέναν, θα σας δώσω μια διεύθυνση να τα βρείτε όλα. +Είναι η πολύ δημοφιλής του γνωστού σε όλους μας **linux ftp watcher** όπου και μπορείτε να αναζητήσετε και να βρείτε ό,τι τραβά η ψυχή +σας. + +**TIP:** Καλύτερα, αν δεν βρείτε κάτι, ρίξτε και μια ματιά μέσω [ftpsearch](http://ftpsearch.lycos.com) γιατί εκεί ψάχνει σε όλους τους ftp servers, και όχι +μόνο σε όσους ασχολούνται με linux όπως κάνει ο filewatcher. + +### [3.3 Και πως τα περνάω όλα αυτά μέσα στο κουτί μου;]{#ss3.3} + +Αν ξέρετε πως να τα εγκαταστήσετε, προχωρήστε χωρίς να διαβάσετε παρακάτω, μη μου θιχτείτε κιόλα :))) + +Αν δεν ξέρετε πως να τα περάσετε όλα αυτά, κάντε το εξής: + +- Αν τα έχετε σε μορφή TAR.GZ: Αποσυμπιέστε τα και διαβάστε στο README και INSTALL του κάθε πακέτου. +- Αν τα έχετε σε μορφή RPM: πηγαίνετε σε κονσόλα και γράψτε **man rpm**. + +**\`Ετσι, για να σας θυμίζω ότι χρειάζεται και το διάβασμα λιγουλάκι!!!** + + +### [4. Ωραία, και τώρα που τον έβαλα, τι κάνω;]{#s4} + +Έλα μου ντε\... + +### [4.1 Προετοιμασία δική μας.]{#ss4.1} + +Αρχίζουμε με μια ωραία τούμπα από τα αριστερά, στη συνέχεια βαδίζουμε στις μύτες των ποδιών μας, καταλήγοντας σε μια πιρουέτα. Επειδή όμως ξέρω ότι δεν ξέρετε +να κάνετε τούμπες, (ενώ ξέρετε πιρουέτες) μπορούμε να κάνουμε το εξής: + +Βάζουμε στο .xinitrc στο home directory του χρήστη που θέλουμε το **enlightenment** (το οποίο φροντίζουμε να είναι στο path μας) και γράφουμε **startx**. + +Φυσικά και υπάρχουν και άλλοι τρόποι να ξεκινήσει κανείς τον **e**, αλλά δεν είναι του παρόντος η ανάλυσή τους. Γι αυτό, όσοι ξέρουν και θέλουν να το κάνουν +αλλιώς, ας το κάνουν όπως γουστάρουν. + +\`Οσοι δεν ξέρουν, ας βολευτούν με τον τρόπο που περιγράφω. Αν και πάλι δεν τα καταφέρουν, τότε καλύτερα να μάθουν να κάνουν τούμπες, πιρουέτες, και να +περπατάνε στις μύτες των ποδιών τους. + +### [4.2 Συνεχίζοντας\...]{#ss4.2} + +Ξεκινώντας, ο **e** σας δείχνει μια εντυπωσιακή αρχική οθόνη με μια progress bar καθώς φορτώνει. Με το που τελειώσει το φόρτωμα, η οθόνη \"ανοίγει\" +παρουσιάζοντάς σας το νέο περιβάλλον εργασίας σας. Περιττό να σας πω ότι ακόμα δεν έχω ξεπεράσει το σοκ που έπαθα όταν \"άνοιξε\" η οθόνη μου. Έμεινα με τα +μάτια γουρλωμένα και το στόμα ανοιχτό! + +Μάάάιστα! Καλό φαίνεται. Πάνω στην οθόνη βρίσκεται μια μπάρα (**dragbar** η λεγόμενη) που έχει αριστερά και δεξιά της κάτι βελάκια. Αν αφήσετε το ποντίκι για +κάνα-δύο δεπτερόλεπτα πάνω από αυτά, θα εμφανιστούν tooltips! Αλλά τι tooltips! (Αυτά ήταν το 2ο σοκ, μετά την εισαγωγική οθόνη). + +Στη δεξιά μεριά, επίσης, θα δείτε και κάτι άλλα βελάκια, που δυστυχώς δεν δουλεύουν (ακόμα, γιατί παρακάτω θα σας εξηγήσω πως να τα κάνετε να δουλέψουν). Αυτά +είναι για την πλοήγηση ανάμεσα στα desktops, τα οποία έχουν διαφορετική \"φιλοσοφία\" από ότι στους περισσότερους window managers. Θα σας εξηγήσω, αφού πρώτα +κάνουμε μια μικρή \"επέμβαση\" ώστε να μπορούμε να τα δούμε. + +Στη δεξιά μεριά υπάρχουν και κάτι εικονίδια. Τι κάνουν αυτά; Ανάλογα με τα κουμπιά του ποντικιού με τα οποία θα πατηθούν, κάνουν μια ενέργεια ή τρέχουν ένα +πρόγραμμα. Τα tooltips θα σας βοηθήσουν ξανά\... + +Τα εικονίδια που υπάρχουν κάτω δεξιά, εκτελούν κάποιες εργασίες, όπως καθάρισμα (redraw) της οθόνης, τρέχει το help του enlightenment, κλείνει τον **e** ή κάνει +restart. + +Αυτή είναι η πρώτη οθόνη του enlightenment. + +Χρησιμοποιώντας το μεσαίο πλήκτρο του ποντικού σας, εμφανίζεται το menu του **e** που περιέχει μερικές λειτουργίες, μερικά προγράμματα, και (αυτό που περιμένετε +πως και πως οι περισσότεροι) τα themes που έρχονται μαζί με την έκδοση του **e** που κατεβάσατε. + +Ελεύθερα παίξτε, πατήστε τα κουμπάκια του πόντικά σας στο desktop, στην dragbar, σύρτε την dragbar στις πλευρές της οθόνης, στην κάτω μεριά, δοκιμάστε και +κανένα άλλο theme (αν έρχεται κανένα μαζί με την έκδοση που κατεβάσατε) τρέξτε κάνα τερματικό, και παίξτε με τα borders του (κάνοντας δεξί κλικ πάνω στην μπάρα +του παραθύρου, επιλέγετε διάφορες ιδιότητες για το παράθυρο). Προς το παρόν αποφύγετε το **borderless** και **fixed size**, όχι ότι θα γίνει τίποτα φοβερό, αλλά +δεν θα υπάρχουν controls του παραθύρου (για resize και τέτοια). + +Πριν συνεχίσουμε όμως\... + +### [4.3 Επέμβαση στα .cfg αρχεία του enlightenment.]{#ss4.3} + +Λοιπόν, ελπίζω να είσαστε έτοιμοι για μια μικρή επέμβαση. Μέσα στο directory που εγκαταστήσατε τον **e**, υπάρχει ένα άλλο directory που λέγεται **config**. +Μέσα σε αυτό, θα βρείτε το αρχειάκι **control.cfg** + +Πάρτε το με τον αγαπημένο σας editor, και κάπου εκεί έχει μια γραμμή που λέει: + +`__NUMBER_OF_DESKTOPS 1(<-μπορεί να είναι κάτι άλλο, ανάλογα με την έκδοση που έχετε)` + +Σβήστε λοιπόν τον αριθμό που ακολουθεί αυτή την περιγραφή και βάλτε στη θέση του τον αριθμό των desktops που εσείς θέλετε να έχετε. + +Επίσης, κάπου λέει (γράφει δηλαδή, αλλά τέλος πάντων\...): + +`__DESKTOP_AREA_SIZE 2 2` + +Αυτό, καλύτερα κάντε το **1 1**\... (είναι τα **virtual desktops**). Όχι ότι δεν μπορείτε να το κρατήσετε ως έχει, αλλά θα σας πετάει από το ένα **virtual +desktop** στο άλλο, και δεν νομίζω να το εκτιμήσετε\... + +**ΠΡΟΣΟΧΗ!** Πριν ξεκινήσετε ξανά τον e, πηγαίνετε στο **home/.enlightenment** directory του κάθε χρήστη, και σβήστε όλα τα αρχεία που αρχίζουν από . (όλα τα +κρυφά δηλαδή). Αυτό γίνεται ώστε ο **e** να αναγκαστεί να ξαναδιαβάσει το **control.cfg**. + +Τώρα ο **e** σας πρέπει να ξεκινήσει κανονικά, και μάλιστα να έχει και τα πολλά desktops. Για να σιγουρευτείτε, δοκιμάστε να κάνετε δεξί κλικ στην dragbar. Θα +σας βγάλει ένα menu με όλα τα desktops, και με όλα τα προγράμματα που υπάρχουν στο καθένα από αυτά. + +### [4.4 (Ξανα)συνεχίζοντας]{#ss4.4} + +Όπως είσαστε τώρα, δοκιμάστε να παίξετε με τα κουμπάκια που πάνε πάνω-κάτω, και να σύρετε την dragbar. + +Για να μεταφέρετε ένα παράθυρο από το ένα desktop στο άλλο, απλά σύρτε το\... (Φοβερή λογική ε;) + +Μήπως σας ενοχλούν αυτά τα εικονιδιάκια? **CTRL+B** και έφυγαν τα εικονιδιάκια, ή **CTRL+A** και εξαφανίστηκε και η dragbar! (τα επαναφέρετε με τα ίδια +πλήκτρα). + +Αυτή τη στιγμή, πιστεύω ότι θα ήταν καλό να διαβάζατε το HELP που έχει ο **e**. Θα σας βοηθήσει σε ορισμένα shortcuts του πληκτρολογίου, που πραγματικά +χρειάζονται. Επίσης, θα μάθετε πως να κινείστε καλύτερα μέσα στο νέο σας περιβάλλον, και επίσης (δεύτερο επίσης) δεν θα είμαι αναγκασμένος να τα λέω (γράφω) όλα +εγώ! + + +### [5. Συμπεράσματα πρώτης επαφής]{#s5} + +Όπως μάλλον θα καταλάβατε, ο **enlightenment** είναι ένας πολύ απαιτητικός window manager. Απαιτητικός τόσο σε επεξεργαστική ισχύ, όσο και σε πόρους του +συστήματος. + +Αυτό μοιραία τον κάνει να έρχεται σε άμεση αντιπαράθεση με κάτι ακατονόμαστα λειτουργικά, μόνο που ακόμα και αυτός απέναντί τους έχει ένα αριθμό πλεονεκτημάτων. + +Μερικά από αυτά είναι: + +- Σταθερότητα (\*nix είναι αυτό!) +- Παραμετροποίηση (Παρακάτω θα καταλάβετε τι μπορείτε να αλλάξετε σε αυτόν!) +- Ομορφιά (Βασικό, από τη στιγμή που έχουμε τα μέσα, γιατί να μην τα εκμεταλλευτούμε;) +- Ελεύθερο λογισμικό (Αν μη τι άλλο) +- Φανατικό κοινό (Ναι, ανήκω σε αυτούς, όπως φανατικός είμαι και του [gtk](http://www.gtk.org).) + +Με μια πρώτη σκέψη, αυτά μου έρχονται στο νου. Φαντάζομαι ότι αν το σκεφτόμουν λίγο ακόμα, θα εύρισκα πολλά περισσότερα, αλλά με πιέζει ο χρόνος\... Πρέπει να +κλείσω το άρθρο\... + +Πιστεύω ότι μετά από την πρώτη αυτή επαφή, είσαστε και εσείς το ίδιο εθισμένοι σε αυτό το υπέροχο δημιούργημα του rasterman , στον +οποίο έχω ήδη στείλει τα συγχαρητήριά μου, πράγμα που πιστεύω ότι πρέπει να το κάνουμε όλοι. + + +### [6. Themes]{#s6} + +Και φτάνουμε στο χαρακτηριστικό του e που τον έκανε τόσο γνωστό και τον κατέταξε στους κορυφαίους wm που κυκλοφορούν. Ο e είναι μακρά ο πιο παραμετροποιήσιμος, +και οι δυνατότητες που μας παρέχει σε αυτόν τον τομέα είναι απεριόριστες. Κυριολεκτικά, μπορούμε να τον κάνουμε να μοιάζει με οτιδήποτε μας έρθει στο νου και να +του ενσωματώσουμε χαρακτηριστικά που δεν πρόκειται ποτέ να βρούμε σε άλλα περιβάλλοντα εργασίας. + +Όχι κύριοι, δεν υπερβάλλω καθόλου. Και για του λόγου το αληθές, ορίστε μερικά από τα πράγματα που μπορείτε να αλλάξετε: + +- Η background image +- Το πως θα γίνεται το focus (click to focus, sloppy, κ.λπ). +- To πως θα μετακινούνται τα παράθυρα (opaque, με συντεταγμένες, κ.λπ.). +- Πως θα γίνεται η αλλαγή μεγέθους παραθύρων (opaque, με συντεταγμένες, κ.λπ.). +- Πόσα desktops θα έχετε. +- Πόσα εικονικά desktops θα έχετε. +- Αν θα φαίνονται τα ελαχιστοποιημένα παράθυρα. +- Αν θα γίνονται αυτόματα focus όλα τα νέα παράθυρα. +- Αν θα εμφανίζονται (και μετά από πόση ώρα ακινησίας του ποντικιού) tooltips +- Αν θα τοποθετούνται αυτόματα τα παράθυρα στην οθόνη σας, ή αν θα τα τοποθετείτε εσείς όπου θέλετε + +Αργά το πράγμα ε; Αυτά λίγο-πολύ τα κάνουν όλοι οι wm, δίκιο έχετε. Αυτά που δεν κάνουν όμως είναι τα περισσότερα από τα παρακάτω. Για διαβάστε και μην +βιαστείτε να βγάλετε συμπεράσματα πριν σας εξηγήσω και τι είναι όλα αυτά. + +- actionclasses +- borders +- buttons +- cursors +- desktops +- imageclasses +- menustyles +- slideouts +- sound +- textclasses +- tooltips +- windowmatches + +\`Ολα τα παραπάνω έχουν από ένα .cfg αρχείο που περιγράφει τη συμπεριφορά τους. + +Πριν να συνεχίσω, να σας εξηγηθώ ότι σε αυτό το τεύχος του Magaz, διαβάσατε το πρώτο κομμάτι που αφορά στα **themes**. Στο επόμενο τεύχος του περιοδικού μας, θα +διαβάσετε το πως να \"φτιάξετε\" τα δικά σας. Αυτό γίνεται γιατί για άλλο ξεκίνησα (μια απλή παρουσίαση του **enlightenment**) και αλλού κατέληξα (ολική +παρουσίαση και ανάλυση των αρχείων ρυθμίσεων) με αυτό το άρθρο. Αποτέλεσμα; Με πιέζει ο χρόνος και δεν προλαβαίνω να το γράψω όλο, συνεπώς πάμε για δύο +συνέχειες. + +Για αυτό το λόγο, η αναφορά στα cfg αρχεία ήταν απλή, μικρής γενικά έκτασης. Επιφυλάσσομαι όμως στο επόμενο τεύχος να σας γράψω πολλές-πολλές λεπτομέρειες για +να κάνετε τον enlightenment όπως ακριβώς θέλετε! + +### [6.1 actionclasses]{#ss6.1} + +Αυτό το αρχείο ελέγχει (και καθορίζει κατ\' επέκταση) **ο,τιδήποτε** συμβαίνει με τον **enlightenment**. Από το να εκτελούνται νέες εφαρμογές, μέχρι το +καθάρισμα του Desktop, το να γίνεται shade ένα παράθυρο, κλπ. Αν θέλουμε **κάτι** να κάνει **ο,τιδήποτε** πρέπει να το συνδέσουμε με μια actionclass (πχ, το +συνδέουμε με ένα κουμπί, το οποίο περιγράφουμε στο **buttons.cfg**. + +### [6.2 borders]{#ss6.2} + +Σε αυτό το αρχείο περιέχονται όλα όσα απαιτούνται για την επιτυχία (ή αποτυχία) ενός **theme**. Περιέχονται όλες οι ρυθμίσεις που έχουν να κάνουν με τα +*περιθώρια* των παραθύρων σας, το πώς θα σκιάζονται, τί γράμματα θα χρησιμοποιούν, τί **pixmaps** θα χρησιμοποιούνται στις μπάρες τους, ακόμα και το τί κουμπιά +(και σε ποιο σημείο) θα χρησιμοποιούνται και τι θα κάνουν. + +### [6.3 buttons]{#ss6.3} + +Εδώ **περιγράφονται** όλα τα κουμπιά που μπορούν να υπάρξουν στο **theme** σας, και εννοώ τα minimize, maximize, shade, close, και ότι άλλο θα μπορούσε να κάνει +μια δουλειά. Τι δουλειά; Ορίστε μερικά παραδείγματα: Μεγιστοποίηση κατά πλάτος, κατά ύψος, make windows sticky (αυτά που φαίνονται σε όλα τα **desktops** ναι, +τα σπαστικά\...), και γενικά ό,τιδήποτε θα μπορούσαμε να συνδέσουμε με ένα **action** (βλέπε και **actionclasses.cfg**) + +### [6.4 cursors]{#ss6.4} + +Το λέει και ο τίτλος του, εδώ περιγράφονται οι **cursors**, πως θα λέγονται, καθώς και τι εικονίδιο θα χρησιμοποιούν. + +### [6.5 desktops]{#ss6.5} + +Εδώ περιέχονται οι υλοποιήσεις για διάφορα **backgrounds** τα οποία μπορούμε να χρησιμοποιήσουμε στα **desktops** μας, και η αντιστοίχησή τους σε διάφορα +**backgrounds**. + +### [6.6 imageclasses]{#ss6.6} + +Σε αυτό το αρχείο περιέχονται όλες οι **αντιστοιχίες** των ονομάτων που καταλαβαίνει ο **enlightenment** με τα αρχεία γραφικών που έχουμε επιλέξει. + +### [6.7 menustyles]{#ss6.7} + +Τα στυλ που θα έχουν τα διάφορα **menu** του **enlightenment**. Θα το αναλύσουμε περισσότερο στο επόμενο τεύχος. + +### [6.8 slideouts]{#ss6.8} + +Για αυτό θα συζητήσουμε στο επόμενο τεύχος, μια και σαν οντότητα είναι σχετικά πολύπλοκη, και θα ήταν κρίμα να σας μπερδέψω από τώρα. + +### [6.9 sound]{#ss6.9} + +Οι ήχοι του συστήματος, τι θα παίζει και σε ποιες στιγμές (πχ, στην έναρξη, όταν γίνεται κάποιο λάθος, κλπ). + +### [6.10 textclasses]{#ss6.10} + +Να και το αρχείο που καθορίζει πως θα ονομάζονται οι κλάσεις γραμματοαπεικονίσεων (ε, είμαι και γλωσσοπλάστης) και τι χαρακτηριστικά θα έχει η κάθε μία, ώστε να +είναι έτοιμος ο **enlightenment** να τις χρησιμοποιήσει σε borders, menus, και άλλα. + +### [6.11 tooltips]{#ss6.11} + +Αυτό το αρχείο είναι υπεύθυνο για την υλοποίηση αυτών των πανέμορφων tooltips (που έρχονται μαζί με τον **enlightenment**, όχι των δικών σας\...). Περιγράφει +ποια αρχεία γραφικών θα χρησιμοποιούνται για τα συννεφάκια, ποιο εικονίδιο και τί στυλ γραμμάτων θα χρησιμοποιείται. + +### [6.12 windowmatches]{#ss6.12} + +Θα το συζητήσουμε διεξοδικά στο επόμενο τεύχος. Πάντως χοντρικά κάνει μερικές αντιστοιχίες, δηλαδή σαν να του λέμε: + +`"Σε παρακαλώ κύριε enlightenment, όλα τα παραθυράκια που έχουν τίτλο The GIMP να έχουν εξ' ορισμού border που να λέγεται SIDE" USE_BORDER_FOR_CLIENT_WITH_TITLE("The GIMP", "SIDE")` + + +### [7. Επίλογος 1ου άρθρου.]{#s7} + +Αυτά τα ολίγα προς το παρόν για τον αγαπημένο μου window manager. Στο επόμενο τεύχος (πρώτα ο Θεός) σας υπόσχομαι να σας μπάσω βαθιά (πολύ βαθιά) στο themeing. + +Μέχρι τότε, σας εύχομαι καλά μπάνια (Τι;; ακόμα δεν αρχίσατε; Κρίμα!). + +**Επί του πιεστηρίου:** ΑΣ ΕΛΠΙΣΟΥΜΕ ΝΑ ΜΗΝ ΕΜΠΛΑΚΟΥΜΕ ΣΕ ΚΑΝΑ ΠΟΛΕΜΟ ΤΩΡΑ, ΓΙΑΤΙ ΔΕ ΓΟΥΣΤΑΡΩ ΚΑΘΟΛΟΥ. ΑΣΕ ΠΟΥ ΜΟΛΙΣ ΑΠΟΛΥΘΗΚΑ\... + + +### [8. READ ME FIRST (έτσι, για αλλαγή βρίσκεται στο τέλος)]{#s8} + +Παράκληση: + +*Θα το εκτιμούσα αν οποιεσδήποτε πληροφορίες που αναφέρονται σε αυτό το άρθρο δεν αναδημοσιεύονταν, ή σε αυτή την περίπτωση να γίνεται μια αναφορά στο +[hellug](http://www.hellug.gr) και στο [magaz](http://magaz.hellug.gr).* + +*Για ό,τι σχόλια έχετε, για τυχόν παρατηρήσεις και ερωτήσεις σχετικά με τον e, στείλτε μου mail στο . Να ξέρετε ότι ίσως να δημοσιευτεί στο +[magaz](http://magaz.hellug.gr).* + diff --git a/content/articles/14/02_slrn.md b/content/articles/14/02_slrn.md new file mode 100644 index 0000000..968153a --- /dev/null +++ b/content/articles/14/02_slrn.md @@ -0,0 +1,195 @@ ++++ +title = 'Παραμετροποιώντας τον slrn' +date = '1999-03-01T00:00:00Z' +description = '' +author = 'Κώστας Κωτσοκάλης(mailto:C.Kotsokalis@ece.ntua.gr)' +issue = ['Magaz 14'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Εισαγωγικά: Ο slrn είναι ένας news (usenet) reader. \'Αλλοι news readers που ενδεχομένως έχετε υπόψη και χρησιμοποιείτε είναι το γνωστό module του Netscape +Communicator, ο knews, ο krn του KDE, ο tin, ο nn, ο News Peruser και άλλοι. Ο slrn ανήκει στον κατηγορία των text-based news readers, δηλαδή μπορείτε να τον +χρησιμοποιείτε στην κονσόλα ή σε κάποιο xterm. Παρ\'όλο που αυτό εκ πρώτης όψεως είναι απωθητικό στον σημερινό everything-should-be-graphical κόσμο των +υπολογιστών, στην πραγματικότητα ο slrn είναι εξαιρετικά εργονομικός και χρησιμοποιεί menus τα οποία δεν θα πρέπει να δυσκολέψουν κανέναν. Ο slrn είναι η +συνήθως η επιλογή των linux users που θέλουν έναν ελαφρύ σε απαιτήσεις news reader, με όλη τη λειτουργικότητα που μπορεί να απαιτεί κανείς αλλά χωρίς τα +\`\`bells and whistles\'\' των περισσότερων γραφικών news readers. Είναι προφανές πως κάποιοι δεν θα θέλουν να αφήσουν τον γραφικό news reader τους, όμως μια +δοκιμή νομίζω πως θα τους πείσει ότι ο slrn είναι όλα όσα χρειάζονται.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Κάτι ακόμα\...** +-------------------------------------------- + +**2. Λειτουργία offline** +------------------------------------------------ + +**3. Πολλαπλοί servers** +----------------------------------------------- + +**4. Κλείνοντας** +---------------------------------------- + + +### [1. Κάτι ακόμα\...]{#s1} + +Στο άρθρο αυτό πρόκειται να μιλήσουμε για το πώς θα κάνουμε τον slrn να υποστηρίζει offline reading \-- πράγμα αναγκαίο με τα εξωφρενικά τιμολόγια του (π)ΟΤΕ +\-- και επιπλέον πως θα υποστηρίζει πολλαπλούς news servers. Ακόμα θα δώσουμε κάποια hints για την πιο αποδοτική χρήση του και μερικά configuration directives. + +Για να χρησιμοποιήσετε τον slrn κατ\'αυτόν τον τρόπο θα πρέπει να πάρετε και να κάνετε compile τον slrn καθώς και μια αναγκαία βιβλιοθήκη, την slang. Αυτά +έρχονται μαζί με τα περισσότερα distributions, αλλά στη RedHat τουλάχιστον που χρησιμοποιώ εγώ λείπουν αναγκαία πράγματα, ενώ οι εκδόσεις του slrn και της slang +που περιέχονται είναι σχετικά παλιές. + +Τον πηγαίο κώδικα για αυτά τα δύο θα βρείτε στα: + +1. ή +2. ή + + +### [2. Λειτουργία offline]{#s2} + +Για να διαβάσετε τα newsgroups που σας ενδιαφέρουν offline, πρέπει να εγκαταστήσετε και το slrnpull που συνοδεύει τον slrn (τα sources του βρίσκονται στο ίδιο +αρχείο με αυτά του slrn). Αφού κάνετε compile και εγκαταστήσετε την slang, τον slrn και το slrnpull (οδηγίες για αυτά θα βρείτε στα READMEs, INSTALLs κλπ που +συνοδεύουν τον πηγαίο κώδικα), πρέπει να κάνετε τα παρακάτω. + +Έστω ότι έχετε ένα μόνο news server από τον οποίο διαβάζετε άρθρα. Τότε, φτιάχνετε τον κατάλογο /var/spool/slrnpull και μέσα σε αυτόν φτιάχνετε ένα αρχείο με +όνομα slrnpull.conf με την παρακάτω μορφή: + + # default: katebase ews 2000 articles apo ton news server, krathse + # ta 30 meres prin to expire. + default 2000 30 + + # newsgroup entries + newsgroup1 + newsgroup2 + newsgroup3 + +\...όπου αντί για newsgroup\[1,2,3\] βάζετε τα ονόματα των newsgroups που σας ενδιαφέρουν, π.χ. comp.os.linux.kernel, comp.lang.c, soc.culture.greek, +comp.unix.programmer κ.ο.κ. Στη συνέχεια φτιάχνετε στο home directory σας ένα αρχείο με το όνομα .slrnrc στο οποίο βάζετε τις εξής επιλογές: + + set spool_inn_root "/var/spool/slrnpull" + set spool_root "/var/spool/slrnpull/news" + set spool_nov_root "/var/spool/slrnpull/news" + set use_slrnpull 1 + set read_active 1 + set server_object "spool" + +Αυτά δεν είναι τα μόνα options που μπορείτε να βάλετε στο .slrnrc σας, υπάρχουν πάρα πολλά ακόμα που ρυθμίζουν την συμπεριφορά του slrn σχεδόν όσο εσείς θέλετε. +Στη συνέχεια του άρθρου θα δώσουμε κάποια τέτοια options που ο υπογράφων έχει βρει χρήσιμα. + +Αν έχετε κάνει τα παραπάνω, τρέξτε + + slrnpull -d /var/spool/slrnpull -h {news_server} + +, όπου {news\_server} το hostname του news server σας. Τότε θα έρθουν για πρώτη φορά όλα τα άρθρα που περιλαμβάνονται στα newsgroups που ορίσατε στο +slrnpull.conf, ενώ από εκεί και πέρα κάθε φορά που θα δίνετε την παραπάνω εντολή θα έρχονται μόνο τα καινούργια άρθρα. Μην ξεχνάτε που και που να τρέχετε την +εντολή ` slrnpull -d /var/spool/slrnpull --expire` που αναλαμβάνει να σβήσει τα άρθρα που είναι παλαιότερα από τον αριθμό των ημερών +που έχετε ορίσει στο slrnpull.conf. Αφού τρέξετε το slrnpull, δώστε \`\`slrn -create\'\' και μετά \`\`slrn -C\'\' και θαυμάστε τα αποτελέσματα. + +Προτείνουμε να διαβάσετε και λίγο παρακάτω πριν τρέξετε τον slrn, για να δείτε τι άλλες επιλογές μπορείτε να βάλετε στο .slrnrc και επομένως να τον +χρησιμοποιήσετε από τον αρχή με όλη του τη λειτουργικότητα. + + +### [3. Πολλαπλοί servers]{#s3} + +Για να διαβάζετε από πολλούς news servers πρέπει να κάνετε τα εξής: + +1. Αντί για ένα μόνο directory κάτω από το /var/spool φτιάχνετε ένα για κάθε news server. Έτσι θα πρέπει να έχετε τα directories /var/spool/newsserver1, + /var/spool/newsserver2, κλπ, όπου αντί για newsserver1, newsserver2 μπορείτε να βάλετε τα ονόματα που θέλετε. +2. Σε κάθε ένα από αυτά τα directories φτιάχνετε ένα slrnpull.conf αρχείο όπως πιο πάνω, με τα groups που θέλετε κάθε φορά και ανάλογα με τον news server στον + οποίο αντιστοιχεί το configuration file. +3. Φτιάχνετε περισσότερα από ένα .slrnrc αρχεία στο home direstory σας, π.χ. .slrnrc.ns1, .slrnrc.ns2, κλπ, οπού και πάλι αντί για ns1, ns2,\... μπορείτε να + έχετε όποιο όνομα επιθυμείτε (για μνημονικούς λόγους). Σε κάθε ένα από αυτά αλλάζετε μόνο τα spool\_inn\_root, spool\_root και spool\_nov\_root ανάλογα με + τον news server στον οποίο αντιστοιχεί το configuration file. Επίσης φτιάχνετε κενά αρχεία με ονόματα .jnewsrc.ns1, .jnewsrc.ns2, κοκ. +4. Εάν επιθυμείτε και για λόγους ταχύτητας φτιάχνετε aliases όπως τα παρακάτω: + 1. `alias sp "slrnpull -d /var/spool/newsserver1 -h news_server1_hostname; slrnpull -d /var/spool/newsserver2 -h news_server2_hostname"` + (προφανώς βάζετε ένα entry για κάθε news server, οπότε δίνοντας απλά \`\`sp\'\' έρχονται τα νέα άρθρα από όλους τους news servers σας\... Εναλλακτικά + μπορείτε να φτιάξετε και κάποιο script για αυτή τη δουλειά). + 2. `alias ns1 "cd $HOME; \cp .slrnrc.ns1 .slrnrc; \cp .jnewsrc.ns1 .jnewsrc; slrn -C; \cp .jnewsrc .jnewsrc.ns1"` + 3. `alias ns2 "cd $HOME; \cp .slrnrc.ns2 .slrnrc; \cp .jnewsrc.ns2 .jnewsrc; slrn -C; \cp .jnewsrc .jnewsrc.ns2"` + 4. `alias ns3 "cd $HOME; \cp .slrnrc.ns3 .slrnrc; \cp .jnewsrc.ns3 .jnewsrc; slrn -C; \cp .jnewsrc .jnewsrc.ns3"` + + Στη συνέχεια, δίνοντας τα παραπάνω aliases, έχετε κάτι σαν \`\`έναν slrn για κάθε news server\'\'. + + +### [4. Κλείνοντας]{#s4} + +Έχοντας κάνει τα παραπάνω θα πρέπει να έχετε τον slrn παραμετροποιημένο για offline reading και πολλαπλούς news servers. Ακόμα όμως και αν δεν σας ενδιαφέρουν +αυτά τα δύο (leased line? direct internet connection?), μπορείτε να χρησιμοποιήσετε τον slrn για να διαβάζετε news. Απλά φτιάχτε ένα .slrnrc file και τρέξτε +slrn. + +Έτσι ή αλλιώς, θα χρειαστείτε κάποια επιπλέον configuration options στο .slrnrc σας. Κάποια τέτοια είναι τα παρακάτω: + + # Oi parakatw tesseris grammes einai gia na orisete to onoma sas kai na + # mhn fainetai san root@localhost.localdomain + hostname "ece.ntua.gr" + set username "C.Kotsokalis" + set replyto "C.Kotsokalis@ece.ntua.gr" + set realname "Constantinos A. Kotsokalis" + + # O xairetismos sta follow-ups + set followup "On %d, %r wrote:" + + # Oi browsers pou tha anoigoun analoga me to pws trexete + # ton slrn. Gia ta deite ta URLs pou periexontai se ena + # article, patate ``U'' (kefalaio). + set Xbrowser "netscape -remote 'openURL(%s)' &" + set non_Xbrowser "lynx %s" + + # Apo poy erxeste... + set organization "National Technical University of Athens" + + # Opws prin, gia offline reading. An den to xrhsimopoieite, + # oi epomenes 6 grammes mporoun na fygoun apo edw. + set spool_inn_root "/var/spool/slrnpull" + set spool_root "/var/spool/slrnpull/news" + set spool_nov_root "/var/spool/slrnpull/news" + set use_slrnpull 1 + set read_active 1 + set server_object "spool" + + # MIME & swsta charsets + set use_mime 1 + set mime_charset "iso-8859-7" + + # Gia na epitrepei na stelnete articles me grammes pou exoun + # perissoteres apo 80 sthles + set reject_long_lines 2 + + # Gia na mhn baraei synexeia to bell alla na kanei flash + set beep 2 + + # Gia na deixnei belos anti gia mpara + set display_cursor_bar 0 + + # Gia na mhn sas rwtaei gia OTI pate na kanete + set confirm_actions 0 + + # Sorting method: Prwta kanei to threading twn articles, + # kai meta ta ta3inomei me bash thn hmeromhnia apostolhs, + # to pio palio paei prwto sth lista. + set sorting_method 11 + + # Gia na mhn rwtaei posa arthra na ferei, an o ari8mos tous + # 3epernaei to noumero pou orizete edw. An orisete otidhpote + # ektos apo 0, estw X, kai ta nea ar8ra se kapoio group einai + # perissotera apo X, tha sas rwthsei posa na ferei (me default + # X). Bazontas 0 fernei ola ta nea ar8ra, osa kai an einai. + set query_read_group_cutoff 0 + + # Automath xrhsh tou metamail otan xreiazetai, prepei + # na to exete egkatasthsei. + set use_metamail 1 + + # An diabazete news ws root, prepei na balete thn parakatw + # grammh gia na trexei to metamail swsta. + set metamail_command "metamail -r" + +Υπάρχουν ακόμα πάρα πολλά options που μπορείτε να χρησιμοποιήσετε, και θα τα βρείτε στα sample files που συνοδεύουν τον slrn. Για παράδειγμα, μπορείτε να +ορίσετε ότι χρώματα θέλετε, όπως επίσης και τον τρόπο με τον οποίο ο slrn κάνει scoring στα άρθρα που διαβάζει. Το scoring είναι μια μέθοδος για να +κατηγοριοποιεί τα άρθρα ανάλογα με τη σημασία τους, και με βάση διάφορα κριτήρια που εσείς ορίζετε. Πρόκειται για ένα από τα πιο δυνατά σημεία του slrn, το +οποίο όμως είναι κάπως πιο προχωρημένο. Όταν με το καλό εντρυφήσετε στα υπόλοιπα, ρίχτε του μια ματιά. + +Καλή ανάγνωση!!! + diff --git a/content/articles/14/03_sig11.md b/content/articles/14/03_sig11.md new file mode 100644 index 0000000..7f83b71 --- /dev/null +++ b/content/articles/14/03_sig11.md @@ -0,0 +1,146 @@ ++++ +title = 'Signal11 και άλλα διάφορα' +date = '' +description = '' +author = 'Κοτσιφάκης Θρασύβουλος' +issue = ['Magaz 14'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Λίγα λόγια για αυτούς που πόνεσαν και έκλαψαν προσπαθώντας (ή που προσπαθούν ακόμα) να κάνουν compile έναν kernel αλλά χωρίς ποτέ να το πετυχαίνουν τρώγοντας +στην μάπα ένα περίεργο internal compiler error \...\.....fatal signal11. Πολύ light άρθρο μια και με έχει πιάσει μια βαρεμάρα άλλο πράγμα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Τι είναι το signal11;** +---------------------------------------------------- + +**2. Οι \"Βασικοί Ύποπτοι\".** +------------------------------------------------------ + +- [2.1 Η μνήμη.](#ss2.1) +- [2.2 Ο Επεξεργαστής.](#ss2.2) +- [2.3 Ο σκληρός δίσκος](#ss2.3) + + +### [1. Τι είναι το signal11;]{#s1} + +\.....Και αφού κάνατε όλο αυτό το configuration που χρειάζεται στον κατακαίνουργιο kernel που κατεβάσατε από το internet (αμ πουλάκια μου δεν σας κάνει το ήδη +υπάρχον kernel της distribution σας !) γράφετε τις απίστευτα ερωτικές λέξεις make zImage και περιμένετε να γίνει compile o kernel. Εκεί απάνω που εσείς +κοντεύετε να φτάσετε σε οργασμό να \'σου και τρώτε στη μάπα ένα μήνυμα : + +**\"gcc: Internal compiler error: program cc1 got fatal signal 11\"** + +Καλά τώρα τι έγινε; Μας την πέσαν οι τούρκοι; (ναι και το πρώτο πράγμα που έκαναν είναι να υπονομεύσουν τον υπολογιστή σας, ε τι να σας πω τώρα).Ε λοιπόν δεν +έγινε τίποτα σπουδαίο. Ετοιμαστείτε να αλλάξετε **HARDWARE**.Γιατί ρε άνθρωπε μου καλέ; -θα αναρωτιέστε- να αλλάξω HARWARE; Μόλις τώρα τα ακούμπησα για να το +αναβαθμίσω το παλιόκουτο. + +Λοιπόν όταν ο υπολογιστής σας βγάζει sig11 errors κατά την διάρκεια του kernel compiling τότε 99% έχετε πρόβλημα στο hardware και πιο συγκεκριμένα ή στη μνήμη ή +στον επεξεργαστή ή στον σκληρό σας δίσκο + +Α ! Μια και μιλάμε για το sig11 να ξεκαθαρίσουμε κάτι. Το **signal11** όπως ξεκαθαρίζεται και στα επίσημα \"τεφτέρια\" (faqs) δεν είναι \"linux specific\" +-δανείζομαι την έκφραση από το επίσημο faq- δηλαδή δεν είναι κάτι που αφορά το αγαπημένο μας λειτουργικό (σαν πυρήνα) **αλλά είναι κάτι που μπορεί να σας +παρουσιαστεί και σε WINDOWS (NT ή 9Χ) και σε όποια πλατφόρμα χρησιμοποιείτε** όταν αυτή κληθεί να χρησιμοποιήσει στα μέγιστα τον εξοπλισμό σας, απλά αντί να σας +πει \...fatal error signal11 θα σας ειδοποιήσει με κάποιο άλλο μήνυμα (λέγε με General Protection Fault ). + +Δύο άλλα πραγματάκια που θα πρέπει να γνωρίζουμε είναι ότι το signal11 εμφανίζεται και σε compilation άλλων εφαρμογών οι οποίες είναι μεγάλες σε όγκο (δοκιμάστε +να κάνετε compile τον KDE με κάποιο ελαττωματικό περιφερειακό από τα παρακάτω που αναφέρονται και θα καταλάβετε τι εννοώ) και επίσης ότι προβλήματα τύπου +signall11 είναι και τα παρακάτω + + free_one_pmd: bad directory entry 00000008 + EXT2-fs warning (device 08:14) ext_2_free_blocks bit already cleared for block ...... + Segmentation fault + crc error (εφόσον βέβαια ο kernel σας είναι μικρούλης και μέχρι την στιγμή εκείνη κατά το + boot -με τον συγκεκριμένο kernel- γινόταν μια χαρά) + αλλά και άλλα πολλά που σας εύχομαι να μην δείτε ποτέ μπροστά σας. + + +### [2. Οι \"Βασικοί Ύποπτοι\".]{#s2} + +Το signal11 οφείλεται κυρίως στην λεγόμενη **\"αστοχία υλικού\"** δηλαδή στην ύπαρξη ελαττωματικού υλικού που το ελάττωμά του δεν εμφανίζεται με την πρώτη +\"ματιά\". Τι σημαίνει αυτό τώρα . Ότι πολύ απλά κάτι που έχετε στον υπολογιστή σας δεν λειτουργεί σωστά και αυτό φαίνεται στις ευαίσθητες και \"βαριές\" +εργασίες που απαιτούν όλη την υπολογιστική του ισχύ και που το κάθε του εξάρτημα πρέπει να δουλεύει άψογα. Ας αναλύσουμε όμως σιγά - σιγά τις πιο σοβαρές +πιθανότητες + +### [2.1 Η μνήμη.]{#ss2.1} + +Η μνήμη του υπολογιστή σας είναι ο νούμερο ένα ύποπτος για πιθανά sig11.Αν δείτε signal11 στο μηχάνημα σας τότε: + + a: Πηγαίνετε στο bios και αυξήστε τα Memory Wait States + b: Κοιτάξτε το documentation της μητρικής σας. Μήπως σας έχουν βάλει μνήμες πιο αργές + από αυτές που χρειάζεται για να εργαστεί με τον επεξεργαστή που έχετε; (στο δικό μου + board -SOYO 5TF5- με τον επεξεργαστή που έχω -CYRIX 166+ - βάζοντας μνήμες 70ns + παίρνω ατελείωτα μηνύματα λάθους, απαιτεί από την μνήμη να είναι 60ns) + +Αν ανιχνευθούν τα σφάλματα εκεί τότε έχει καλώς, αν όμως με τα παραπάνω δεν γίνει τίποτα τότε : + + Το πρόβλημα ίσως να είναι κάποιο χαλασμένο τσιπ μνήμης (καθόλου απίθανο) το οποίο σε + ένα ζευγάρι μνημών μπορεί να μην ανιχνεύετε υπό κανονικές συνθήκες αλλά μόνο κάτω από + έντονη πίεση. + +Βρείτε ένα φίλο σας λινουξά που έχει κάνει compile με τις μνήμες του και δανειστείτε ένα ζευγάρι μνήμες. Βάλτε τις στο μηχάνημα σας και δείτε την συμπεριφορά +του. Αν κάνει κανονικά compile τον kernel σας τότε το πρόβλημα σας είναι τα ολοκληρωμένα της μνήμης. Φυσικά και θα επιστρέψετε τις μνήμες πίσω στο παλικάρι που +σας εξυπηρέτησε και θα πάτε να αγοράσετε ένα σετάκι δικές σας (τι δεν έχετε λεφτά γιατί αγοράσατε χρυσό δακτυλίδι στη κοπέλα σας ; Να το πάρετε πίσω και να το +πουλήσετε για να πάρετε μνήμες) + +Δεν υπάρχει φίλος λινουξάς κοντά σας αφού εσείς μένετε μόνος σε μία βραχονησίδα κοντά στα Ίμια. Για να βλέπετε αυτή τη σελίδα θα πρέπει να έχετε τηλέφωνο και +internet. Πηγαίνετε και κατεβάστε το [memtest](http://www.bitwizard.nl/sig11/memtest.tar.gz) Ένα προγραμματάκι που έφτιαξε το παλικάρι που συντηρεί το faq για +το sig11 ελέγξτε τις μνήμες σας με αυτό. Τις περισσότερες φορές βρίσκει τα σφάλματα (αν και απ\' ότι είδα με μια ματιά στο νέο faq δεν το αναφέρει καθόλου +μάλλον γιατί τελικά αποτυγχάνει πιο συχνά από όσο νόμιζε στην αρχή). + +Αν πάντως το πρόβλημα συνεχίσει μην απελπίζεστε συνεχίστε τον έλεγχο πιάνοντας τώρα την **cache memory**.Εδώ τα πράγματα είναι λίγο πιο εύκολα στον έλεγχο αφού +πηγαίνοντας στο bios απενεργοποιείτε την cache και προσπαθείτε να κάνετε compile. Αν φάτε πάλι πόρτα τότε δεν είναι ούτε η cache. Προχωρήστε στην επόμενη +ενότητα. + +### [2.2 Ο Επεξεργαστής.]{#ss2.2} + +**CYRIX** + +Τι; Έχετε κι εσείς έναν απ\' αυτούς τους παμπάλαιους CYRIX P+ ; Ατυχήσατε. Γιατί ; Μα φυσικά γιατί αφ\' ενός δεν θα μπορείτε να δείτε τη Lara σε υψηλή ανάλυση +και αφ\' ετέρου γιατί ο curixούλης ζεσταίνεται και ζεσταίνεται πολύ πάρα πολύ. Τι θα κάνετε λοιπόν. + + Πρώτη κίνηση να ξηλώσετε το φαν που έχει βάλει ο συναρμολογητής του μηχανήματος + (οι περισσότεροι συναρμολογητές βάζουν κάτι ελεεινά ανεμιστηράκια).Ψάξτε να βρείτε ένα + ανεμιστηράκι για CYRIX P+ (ναι υπάρχουν, δεν ξέρω όμως αν κυκλοφορούν ακόμα). + Δεύτερη κίνηση (αν δεν δουλέψει με την πρώτη -όπως συνέβη και με 'μένα-) να ρίξετε + λίγο τη συχνότητα του επεξεργαστή σας, αν π.χ. βάλετε έναν CYRIX 166+ που χρονίζει σε + 2Χ66=132 δηλ.133Mhz στα 2Χ50=100Μhz τότε το πιο πιθανό είναι να κάνετε τη δουλειά σας. + +Μία ακόμα λύση είναι να βρείτε τα πακέτα της gcc και g++ για Cyrix τα οποία έδινε η Red Hat με τα powertools, μία ματιά που έριξα πριν λίγο πάντως στο [ftp +της](ftp://ftp.redhat.com)αλλά και στο mirror του στην [Ελλάδα](ftp://ftp.linux.gr/pub/redhat) η RedHat δεν τα προσφέρει πια αφού μάλλον κακό κάνανε παρά καλό +(δεν νομίζω να υπάρχουν πολλοί που να κατάφεραν να κάνουν compile μ\' αυτούς τους compilers) κι εγώ πάντως φέτος το φθινόπωρο που τους δοκίμασα δεν κατάφερα να +κάνω compile ούτε τον kernel ούτε και τον kde. + +Λύση τελευταίας στιγμής. Βρείτε κάποιον άσχετο πιτσιρικά και μοσχοπουλήστε του τον υπερσύγχρονο CYRIX επεξεργαστή σας λέγοντας του ότι αγοράζει κελεπούρι αφού +σας τον έφερε ο θειός σας κατευθείαν από το εργοστάσιο -πριν ακόμα βγει στην αγορά. Με τα λεφτά που θα βγάλετε από τον πιτσιρικά τρέξτε και αγοράστε καινούργιο +επεξεργαστή και εισιτήριο για Βραζιλία για σας και τον υπολογιστή σας μια που άμα σας πιάσει στα χέρια του ο μπαμπάς του πιτσιρικά, μετά την ανακάλυψη της +απάτης, θα σας κάνει με τα κρεμμυδάκια (μπετατζής γαρ ο μπαμπάς και δεν τα σηκώνει αυτά). + +**INTEL** + +Ρε \'σεις ποιός σας είπε ότι ο P200 μουμουεξ μπορεί να δουλέψει στα 500Mhz; Σας παρακαλώ γυρίστε τον σε κάποια λογική συχνότητα (άντε το πολύ 233) και θα δείτε +ότι εργάζεται μια χαρά, βάλτε του και ένα καλό fan και είσαστε έτοιμοι. + +**AMD** + +Μάλλον ισχύουν όσα έγραψα πιο πάνω για τους INTEL αφού οι K6 έχουν βγει αρκετά καλοί (είμαι ερωτευμένος με ένα Κ6 300 3D) αλλά και οι Κ5 αν και λίγο κουλοί σε +επιδόσεις δουλεύουν μια χαρά (έχω δει Κ5 120 να δουλεύει μέσα σε δωμάτιο που βρισκόταν δίπλα στα καζάνια ατμού πλοίου χωρίς να κρασάρει -σε αντίθεση με \'μας- +ούτε μία φορά και πιστέψτε με δούλευε συνεχώς αφού φιλοξενούσε όλη την γραφειοκρατική κίνηση του πλοίου συν ένα RH 4.2 για να περνάω την ώρα μου μαθαίνοντας). + +### [2.3 Ο σκληρός δίσκος]{#ss2.3} + +Εδώ συνήθως έχουμε να κάνουμε με προβλήματα μεταφοράς των δεδομένων από τον δίσκο προς τη μνήμη. Κάντε το εξής απλό: + + Γράψτε σε ένα τερματικό την παρακάτω εντολή + dd if=/dev/hda(ή sda) of=/dev/null bs=1024 count=XX + Όπου count= θα βάλετε το μέγεθος της μνήμης σας σε MB (16, 32 κλπ). + +Αν μετά απ\' αυτό κάνετε πάλι make και ο compiler σταματήσει στο ίδιο σημείο που σταμάτησε και προηγουμένως τότε μάλλον το πρόβλημα είναι το software (η version +του compiler που χρησιμοποιείτε) Αν όμως και με την προϋπόθεση ότι έχουν αποκλειστεί όλα τα παραπάνω περί cpu και μνήμης καταφέρετε να κάνετε compile τον +πολυπόθητο kernel τότε νάτο που το βρήκατε και μπράβο σας. + +Αν παρ\' ολ\' αυτά δεν τα καταφέρετε και συνεχίζετε να παίρνετε sig11 τότε καλά θα κάνετε να ξεχάσετε αυτό το γενικό άρθρο και να αναζητήσετε λύση στο [faq για +το siq11](http://www.bitwizard.nl/sig11) που υπάρχει και αρχείο με αναφορές για άλλες πιθανές αιτίες signal11. Άντε και καλές -λινουξικές- περιπέτειες. + diff --git a/content/articles/14/04_rpm.md b/content/articles/14/04_rpm.md new file mode 100644 index 0000000..e490421 --- /dev/null +++ b/content/articles/14/04_rpm.md @@ -0,0 +1,211 @@ ++++ +title = 'RPM και ο κόσμος του.' +date = '1999-04-01T00:00:00Z' +description = '' +author = 'Παύλος Παρίσσης(mailto:surfking@ath.forthnet.gr)' +issue = ['Magaz 14'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το παρόν άρθρο έχει σαν σκοπό να δώσει συμβουλές και ιδέες για την αντιμετώπιση μερικών προβλημάτων με την εγκατάσταση προγραμμάτων με το Red Hat Package +Manager γνωστό σε όλους σαν rpm.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Προβλήματα\...και \...Λύσεις** +--------------------------------------------------------- + +**2. Τι είναι τα Dependencies** +----------------------------------------------------- + +**3. Tips** +--------------------------------- + +**4. Πηγή νέων rpms και πληροφοριών.** +------------------------------------------------------------ + +**5. Επίλογος** +------------------------------------- + + +### [1. Προβλήματα\...και \...Λύσεις]{#s1} + +Λοιπόν μόλις κατεβάσατε την νέα έκδοση του αγαπημένου σας προγράμματος και τρέχετε να την βάλετε. Αλλά δεν μπορείτε διότι δεν έχετε την νέα έκδοση της Ζ +βιβλιοθήκης και το πρόγραμμα την ζητάει επίμονα βγάζοντας σας το μήνυμα: \"failed dependencies Ζlib is needed by Υ-program.i386.rpm\". \"Ε, θα πάω κατεβάσω την +νέα έκδοση και τέλος\" λέτε. Αμ δε, μόλις πάτε να την βάλετε ένα σωρό προγράμματα φωνάζουν λέγοντας σας ότι αυτά τρέχουν μόνο με την ήδη υπάρχουσα έκδοση της +περιβόητης βιβλιοθήκης βγάζοντας σας το μύνημα:\"Ζlib.1 is needed by control-panel-3.7-4\". \'Ετσι μένετε χωρίς την νέα έκδοση και με ένα πρόβλημα να +προστίθεται στην λίστα μαζί με τα άλλα. Αλλά το Linux δεν αφήνει κανέναν παραπονεμένο και σας δίνει την λύση. Για να γίνω πιο κατανοητός θα περιγράψω την λύση +με ένα παράδειγμα. \'Εχουμε και λέμε, το Υ-program.i386.rpm πακέτο για να δουλέψει θέλει την Ζlib-1.1.5 βιβλιοθήκη και εσείς έχετε την Zlib-1.0.2 και όταν πάτε +να βάλετε την νέα βιβλιοθήκη πολλά άλλα πακέτα αρχίζουν να ουρλιάζουν, τι κάνουμε τώρα;\ +Μια εύκολη λύση είναι να κατεβάσουμε το source του Υ-program.i386.rpm,θα είναι της μορφής Υ-program.src.rpm., και να \"κτίσουμε\" στην έκδοση της βιβλιοθήκης +που είδη έχουμε. Το \"κτίσιμο \" γίνετε με τα παρακάτω βήματα: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + rpm --rebuild Υ-program.src.rpm + cd /usr/src/redhat/RPMS/i386 + rpm -Uvh Υ-program.i386.rpm + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για να γίνει το κτίσιμο ΠΡΕΠΕΙ να έχετε το devel πακέτο της \"Ζlib\" εάν θέλει μια μόνο βιβλιοθήκη εάν θέλει πάνω από μία τότε ΠΡΕΠΕΙ να έχετε τα devel πακέτα +των βιβλιοθηκών αυτών. Επιπλέον ΠΡΕΠΕΙ να έχετε το \"patch-2.5-4.i386.rpm\" ή νεώτερη έκδοση. O παραπάνω τρόπος δούλεψε στο \"licq-0.60-3.i386.rpm\" το οποίο +θέλει την \"libstdc++2.9.0\" βιβλιοθήκη και εγώ είχα την \"libstdc++2.8.0\", έτσι κατέβασα το \"licq-0.60-3.src.rpm\" και το έκανα rebuild χωρίς να βάλω την +\"libstdc++2.9.0\" βιβλιοθήκη. Δυστυχώς αυτός ο τρόπος δεν δουλεύει σε όλες τις περιπτώσεις. Πιο συγκεκριμένα, εάν ένα πρόγραμμα θέλει την Ζ-1.2lib και εσείς +έχετε την Ζ-1.0lib το κτίσιμο δεν πρόκειται να γίνει διότι το πρόγραμμα τρέχει με functions ή άλλα σημαντικά στοιχεία που περιέχονται μόνο στην νέα βιβλιοθήκη. +π.χ. το \"gftp-1.12.i386.rpm\" θέλει την 1.1.13 έκδοση των gtk+ και glib βιβλιοθηκών και εγώ είχα την 1.0.6 και όταν πήγα να βάλω τις νέες βιβλιοθήκες φώναζαν +3-4 πακέτα. Επιπλέον το rebuild με τις υπάρχουσες βιβλιοθήκες δεν έδινε λύση. Σε αυτή τη περίπτωση έκανα τα παρακάτω: + +1. Απεγκατάσταση των πακέτων που φώναζαν όταν προσπάθησα να βάλω τις νέες βιβλιοθήκες + + "rpm -e paketo" + +2. Απεγκατάσταση των βιβλιοθηκών που είχα ήδη στο σύστημα μου, είναι σίγουρο ότι θα πρέπει να δώσετε \"\--nodeps\" + + "rpm -e --nodeps paketo" + +3. Εγκατάσταση των νέων βιβλιοθηκών + + "rpm -ivh paketo" + +4. rebuild των source(καλύτερα είναι να βρείτε τις νέες εκδόσεις των source) πακέτων που φώναζαν και εγκατάσταση των binary που δημιουργούνται. + +5. Εγκατάσταση του προγράμματος που για χάρη του έκανα τα παραπάνω + + "rpm -ivh paketo" + +Αυτός είναι ένας \"γενικός\" τρόπος ΑΛΛΑ για τις νέες gtk+ και glib βιβλιοθήκες χρειάστηκε ειδική μεταχείριση. Εάν θέλετε πληροφορίες σχετικά με αυτές τις +βιβλιοθήκες mail me. Εμένα τα gimp-1.0.1, nessus, usermode, usernet, control-panel και imlib μου έλεγαν ότι τρέχουν μόνο με την υπάρχουσες εκδόσεις των +βιβλιοθηκών ΑΛΛΑ παρατήρησα ότι το gimp και nessus τρέχουν με την νέα βιβλιοθήκη χωρίς να τα κάνω rebuild και ούτε να τα βγάλω. Τα άλλα όμως δεν το γλίτωσαν την +απομάκρυνση τους και κτίσιμο τους με τις νέες βιβλιοθήκες. \'Αρα, πρώτα δοκιμάζουμε να κάνουμε κτίσιμο με τις υπάρχουσες βιβλιοθήκες και μετά τον 2ο τρόπο. +Διότι είναι και χρονοβόρος αλλά και μπορεί να ΜΗΝ δουλέψει για αυτό αναλογιστείτε εάν το ένα και μοναδικό νέο πρόγραμμα που θέλετε αξίζει την φασαρία. Το +\"gftp\" δεν την άξιζε αλλά εγώ το έκανα επειδή είχα πεισμώσει να βρω την λύση. + + +### [2. Τι είναι τα Dependencies]{#s2} + +Σε αυτό το σημείο θα προσπαθήσω να εξηγήσω τι ακριβώς είναι το \"failed dependencies\" και σε ποιες περιπτώσεις εμφανίζεται. Δυστυχώς η εμφάνιση του μηνύματος +αυτού δεν σημαίνει πάντα ότι έχουμε το ίδιο πρόβλημα άρα και την ίδια αντιμετώπιση. Μερικές φορές υπάρχει διαφορετική εξήγηση και αντιμετώπιση για την κάθε +εμφάνιση του μηνύματος \"failed dependencies\".\ +Λοιπόν αρχίζουμε. Ο κάθε κατασκευαστής πακέτων rpm μέσα στο spec αρχείο του έχει και μία γραμμή + + "Requires: files..." + +έτσι κάθε πακέτο που έχει αυτή την γραμμή πριν γίνει το install ενεργοποιείτε ένας εσωτερικός αλγόριθμος που ψάχνει να βρει τα αρχεία αυτά στην βάση δεδομένων +του rpm. πχ το πακέτο Υ-program.i386.rpm έχει στο spec αρχείο την γραμμή\ + + "Requires: perl imlib.so.1 /bin/sh" + +έτσι για να γίνει η εγκατάσταση πρέπει να βρεθούν τα αρχεία αυτά στην βάση δεδομένων του rpm.Τα μήνυμα που παίρνουμε σε αυτές τις περιπτώσεις είναι το ακόλουθο: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + "failed dependencies: + imlib.so.1 is needed by Υ-program.i386.rpm" + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ο ίδιος αλγόριθμος ενεργοποιείτε όταν πάμε να βγάλουμε ή να αναβαθμίσουμε ένα πακέτο στο οποίο βασίζεται ένα άλλο, γίνετε ένας έλεγχος στην βάση δεδομένων για +να δει εάν με την απομάκρυνση ή την αναβάθμιση του πακέτου θα υπάρξει παραβίαση των dependencies εάν κάποιο άλλο πακέτο απαιτεί κάποια αρχεία που υπάρχουν μόνο +στο πακέτο που προσπαθούμε να απομακρύνουμε ή να αναβαθμίσουμε. Το μήνυμα που παίρνουμε όταν πάμε να βγάλουμε ή να αναβαθμίσουμε το \"Fsail-1.2\" πακέτο που +περιέχει το \"Fsail.so.1\" αρχείο το οποίο το χεριάζετε ένα άλλο πακέτο για να δουλέψει είναι το:\ + + "Fsail.so.1 is need by Gdesk-1.1" + +Το μήνυμα \"failed dependencies Ζlib is needed by Υ-program.i386.rpm\" δεν σημαίνει απαραίτητα ότι δεν έχετε την συγκεκριμένη βιβλιοθήκη αλλά ότι έχετε μια πιο +νέα/παλιά βιβλιοθήκη από την οποία το πακέτο κτίστηκε και για αυτό το κτίσιμο με τις υπάρχουσες βιβλιοθήκες δίνει μερικές φορές την λύση. Διότι μπορούμε να +κτίσουμε το πακέτο έναντι των βιβλιοθηκών που ήδη έχουμε και το πακέτο να μπορεί να δουλεύει με αυτές.\ +Για παράδειγμα όταν πήγα να βάλω ένα πακέτο και μου έλεγε ότι θέλει π.χ. \"libkdecore.so.1\" έδινα ένα \"rpm -qp \--requires paketo\" και μου έλεγε \"kdelibs +=1.0 και libkdecore.so.1\...\...\.....\" Το \"libkdecore.so.1\" αρχείο περιέχεται μέσα στο \"kdelibs-1.0\" και εγώ είχα \"kdelibs-1.1\" και φυσικά το +\"libkdecore.so.2\" και όχι το \"libkdecore.so.1\" έτσι δεν δούλευε το πακέτο , ούτε το \--nodeps έδινε λύση. Η λύση δόθηκε κάνοντας rebuild το πακέτο. Για αυτό +το πρόβλημα υπάρχει εξήγηση, όπως σε όλα τα προβλήματα:) Το ότι το spec αρχείο λεει \"kdelibs =1.0\" μπορεί να σημαίνει ότι ο packager έχει το KDE 1.0 στο +σύστημα του και με αποτέλεσμα να αναφέρετε σε αυτή την έκδοση της βιβλιοθήκης το spec αρχείο. Διότι το RPM κάνει \"link\" στις υπάρχουσες βιβλιοθήκες που +υπάρχουν στο σύστημα όταν το πακέτο κτίζετε, Θυμάστε για το \"licq\" και την \"libstdc++ 2.9.0\" βιβλιοθήκη που όπως αποδείχθηκε δεν χρειαζόταν; Προφανώς το +licq κτίστηκε σε σύστημα με την 2.9.0 έκδοση της \"libstdc++\" βιβλιοθήκης. Επιπλέον πολλές φορές νέες εκδόσεις βιβλιοθηκών είναι ασύμβατες προς στις πίσω +εκδόσεις πχ η \"Gtk+\" βιβλιοθήκη ειδικά η 1.2 έκδοση στην οποία έχουν διαγράψει μερικές λειτουργίες δεν είναι συμβατή με την 1.0 έκδοση, έτσι το rpm επίτηδες +δημιουργεί \"links\" με ένα συγκεκριμένο πακέτο διότι δουλεύει μόνο με αυτήν την έκδοση του πακέτου, θυμάστε το \"gftp\" και την \"gtk+1.13\" βιβλιοθήκη που με +τις υπάρχουσες βιβλιοθήκες δεν έδινε λύση το κτίσιμο; + +Πολλές φορές το \"failed dependencies\" είναι \"false alarm\". Τι θέλω να πω, όπως αποδείχθηκε δύο πακέτα δουλεύουν χωρίς προβλήματα με τις νέες βιβλιοθήκες +παρόλο ότι έλεγαν το αντίθετο. Για παράδειγμα, το \"XFGreekFNTS-1.1.noarch.rpm\" όταν πάμε να το εγκαταστήσουμε με \"-ivh\" σε S.u.S.E. 5.3 & 6.0 λεει ότι θέλει +το \"XFree86 3.3.1\" αλλά εάν δώσουμε \"-ivh \--nodeps\" δουλεύει μια χαρά. Με απλά λόγια κάντε ένα \"rpm -Uvh \--nodeps paketo\" πριν κάνετε οτιδήποτε μπορεί +το πρόγραμμα να δουλέψει, ΠΡΟΣΟΧΗ μόνο σε προγράμματα και ΟΧΙ σε βιβλιοθήκες και άλλα σημαντικά πακέτα πχ modutils, initscripts κλπ. \'Αλλωστε το \"\--nodeps\" +το χρησιμοποιούμε σπάνια διότι αγνοεί τα dependencies ενός πακέτου και είναι 99% σίγουρο ότι το πακέτο ΔΕΝ θα δουλέψει:(. Η συγκεκριμένη περίπτωση μπορεί να +έχει την εξήγηση της στο γεγονός ότι το rpm μερικές φορές δεν κάνει σωστά τις συγκρίσεις με τις εκδόσεις τα \>,\< και = μερικές φορές δεν τα αντιλαμβάνεται +σωστά. + +Όλα αυτά είναι τεχνικά θέματα που εμάς τους απλούς θνητούς μας μπερδεύουν και σε τελική ανάλυση δεν θέλουμε να μας απασχολούν. Για αυτό υπάρχουν άνθρωποι σαν +τον Ryan Weaver πού λύνουν τέτοιου είδους προβλήματα. Μια βόλτα από και θα δείτε τις δουλείες του. + + +### [3. Tips]{#s3} + +- Όταν κατεβάζετε ένα πακέτο και πριν το κάνετε εγκατάσταση δώστε\ + + "rpm -K --nopgp paketo " + + \ + και πρέπει να πάρετε \"size md5 OK\" εάν πάρετε διάφορα errors ΞΑΝΑ κατεβάστε το από άλλον ftp server διότι το πακέτο έχει αλλοιωθεί και ΔΕΝ πρόκειται να + δουλέψει σωστά. + +- Πριν κάνετε εγκατάσταση ή αναβάθμιση ή διαγραφή ενός πακέτο δώστε\ + + "rpm -ivh --test onoma_paketou" ή + "rpm -Uvh --test onoma_paketou" ή + "rpm -e --test onoma_paketou" + + \ + εάν δεν βγάλει τίποτα τα σκυλιά είναι δεμένα και προχωράτε άφοβα στην εγκατάσταση ή αναβάθμιση ή διαγραφή. + +- Όταν κάνετε διάφορα κόλπα με βιβλιοθήκες ΝΑ ΕΧΕΤΕ ΠΑΝΤΑ τις υπάρχουσες εκδόσεις σε μια γωνία. + +- Εάν θέλετε κατεβάστε το purp (πρέπει να έχετε τα ncurses) δουλεύει σε φιλικό γραφικό περιβάλλον και έχει δύο χαρακτηριστικά που είναι ιδιαίτερα χρήσιμα + 1. μπορείς και βλέπεις τα script που εκτελούνται πριν την εγκατάσταση και μετά την απομάκρυνση του πακέτου. + 2. βλέπεις τα dependencies ενός πακέτου. + + τα παραπάνω γίνονται και με εντολές \"rpm -q \--provides \--requires \--scripts paketo\" αλλά είναι πολύ χρήσιμο όταν θέλετε να \"ρωτήσετε\" και δείτε πολλά + διαφορετικά πακέτα χωρίς να είστε υποχρεωμένοι να θυμάστε το ακριβές όνομα τους. ΠΡΟΣΟΧΗ ΜΗΝ ΚΑΝΕΤΕ INSTALL, UPGRADE ΚΑΙ ERASE από το purp διότι αγνοεί τα + dependencies ενός πακέτου. + +- Όταν κάντε εγκατάσταση ενός πακέτου να δίνετε \"-Uvh\", ξέρω\...ξέρω το \"-U\" είναι για αναβάθμιση αλλά εάν δώσετε \"-i\" αντί \"-U\" θα δημιουργηθεί + πρόβλημα όταν έχετε την προηγούμενη έκδοση του πακέτου εγκαταστημένη. Για αυτό δίνετε ΠΑΝΤΑ \"-U\" έχετε δεν έχετε το προηγούμενης έκδοσης πακέτο το νέο θα + μπει κανονικά. Εγώ όταν πήγα να βάλω την νέα έκδοση του \"ghostscript\" έδωσα \"-i\" αντί \"-U\" και η \"gs\" εντολή δεν δούλευε καθόλου. + +- Μην κατεβάζετε σαν τρελοί ότι νέο βγει. Να βάζετε νέα πακέτα μόνο και όταν οι εφαρμογές σας το απαιτούν ή οι νέες έχουν bug fixes. Αναφέρομαι σε βιβλιοθήκες + OXI σε προγράμματα. + +- Αν αντιμετωπίζετε προβλήματα με πακέτα ρίξτε ένα mail στο κατασκευαστή του rpm διότι πολλές φορές έχουν bugs, με \"rpm -qip paketo\" βλέπουμε τις + πληροφορίες ενός πακέτου που ΔΕΝ έχουμε κάνει εγκατάσταση. + +- Πολλές φορές κάποια πακέτα θα χρειάζονται ειδική μεταχείριση όπως XFree86, Gnome, KDE, βιβλιοθήκες κλπ. για αυτό είναι καλό πριν κάνετε κάτι να διαβάζετε τα + docs που είδη υπάρχουν στο σύστημα σας ή εάν δεν υπάρχουν στις σχετικές σελίδες των πακέτων αυτών. + +- \'Οταν ένα πακέτο Α απαιτεί το Β και το Β με την σειρά του απαιτεί το Α ο σωστός τρόπος εγκατάστασης είναι να δώσετε \"rpm -ivh \*.rpm\" μέσα σε ένα + κατάλογο που έχετε ΜΟΝΟ αυτά τα δύο πακέτα. Με \"\*\" το rpm ψάχνει στον κατάλογο και λύνει τα dependencies που υπάρχουν μεταξύ των πακέτων αυτών. + +- Διαβάστε το manual του rpm για περισσότερα. + +**Ο 2ος ΤΡΟΠΟΣ ΔΟΥΛΕΨΕ ΣΤΟ ΣΥΣΤΗΜΑ ΜΟΥ (REDHAT 5.1) ΔΕΝ ΕΓΓΥΩΜΑΙ ΟΤΙ ΘΑ ΔΟΥΛΕΨΕΙ ΣΕ ΟΛΑ ΤΑ DISTRIBUTIONS** + + +### [4. Πηγή νέων rpms και πληροφοριών.]{#s4} + +Το rpmfind.net είναι μία καλή πηγή νέων rpm η οποία διαφέρει από τους άλλους τόπους επειδή σου λεει το κάθε πακέτο τι αρχεία παρέχει και τι απαιτεί και εάν δεν +έχεις ένα αρχείο που το απαιτεί το πακέτο που θέλετε να κατεβάσετε, κάνοντας κλικ σε αυτό σε πάει στο πακέτο που το έχει! Επιπλέον τα πακέτα είναι και σε +αλφαβητική σειρά κάτι που ελαττώνει το χρόνο της αναζήτησης ενός συγκεκριμένου πακέτου. Πριν κατεβάσετε πακέτα \>1.5-2ΜΒ κάντε μία αναζήτηση στο + είναι σχεδόν σίγούρο ότι θα τα βρείτε σε έναν \"κοντινό\" ftp server. Η RedHat έχει μια λίστα για rpm στην οποία μπορείτε να βρείτε +σημαντικές πληροφορίες για rpm πακέτα Τέλος το είναι ένα καλό σημείο να ξεκινήσετε για να βρείτε πακέτα και +πληροφορίες. + + +### [5. Επίλογος]{#s5} + +Ελπίζω να ξεδιάλυνα μερικά πράγματα σχετικά με τα dependencies και να έδωσα μερικές ιδέες για την σωστή εγκατάσταση των πακέτων rpm. Πάντως όταν παίζετε με +βγάλε-βάλε βιβλιοθηκών να είστε ιδιαίτερα προσεκτικοί για να μην κάνετε καμία ζημία. Εγώ έκανα αρκετές αλλά ήμουν τυχερός και τα κόλπα πού έκανα δούλεψαν και +κατάφερα να επαναφέρω το σύστημα στην σωστή κατάσταση. Αλλά δεν είναι κάθε μέρα Κυριακή:) + +Πριν κλείσω αυτό το άρθρο θέλω να ευχαριστήσω τον Γιάννη Γαλανομάτη για τις σημαντικές παρατηρήσεις του και τον Troy Engel για τις πολύτιμες συμβουλές που μου +έδωσε. + diff --git a/content/articles/14/05_glimpse.md b/content/articles/14/05_glimpse.md new file mode 100644 index 0000000..f1ebe1b --- /dev/null +++ b/content/articles/14/05_glimpse.md @@ -0,0 +1,66 @@ ++++ +title = 'Ελληνικά στο webglimpse/glimpse' +date = '1999-04-01T00:00:00Z' +description = '' +author = 'Νίκος Μαυρογιαννόπουλος(mailto:nmav@hellug.gr)' +issue = ['Magaz 14'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Τα προγράμματα glimpse/webglimpse αποτελούν τον πυρήνα μιας μηχανής αναζήτησης. Τo glimpseindex αναλαμβάνει το ρόλο της ταξινόμησης και δημιουργίας των αρχείων +δεικτών (index files), ενώ το glimpse, την αναζήτηση σε αυτά. Το webglimpse είναι μια σειρά από scripts σε perl με σκοπό την εύκολη αναζήτηση από web. Η +εγκατάσταση είναι σχετικά απλή αν ακολουθηθούν οι οδηγίες που περιέχονται στα πακέτα glimpse και webglimpse. (οι πιο πρόσφατες εκδόσεις βρίσκονται στο + και * + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +To Glimpse σχεδιάστηκε και υλοποιήθηκε από τους Udi Manber, Sun Wu, και Burra Gopal στο πανεπιστήμιο της Αριζόνα, τμήμα πληροφορικής. Δεν είναι ελεύθερο +λογισμικό αλλά η διανομή του για μη κερδοσκοπικούς σκοπούς επιτρέπεται. Για περισσότερες πληροφορίες κοιτάξτε το αρχείο COPYRIGHT μέσα στα tarball του glimpse. + +Η υποστήριξη ελληνικών κατά την δημιουργία των αρχείων δεικτών καθώς και κατά την αναζήτηση παρ\' όλο που δεν αναφέρεται πουθενά, υπάρχει. Για να την +ενεργοποιήσουμε πρέπει να αλλάξουμε στο Makefile κατά την μεταγλώττιση του glimpse την μεταβλητή ISO\_CHAR\_SET από 0 σε 1. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Δηλαδή την σειρά: + ISO_CHAR_SET = 0 + σε + ISO_CHAR_SET = 1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η υποστήριξη αυτή βασίζεται στην δυνατότητα της libc να διαχωρίζει τους χαρακτήρες σύμφωνα με την χώρα που έχει δηλωθεί. Η δήλωση αυτή γίνεται μέσω της +μεταβλητής περιβάλλοντος LC\_COLLATE (ή και LANG). Αρκεί λοιπόν πριν τρέξουμε τα glimpseindex και glimpse να θέσουμε LC\_COLLATE=el (ή gr\_GR για την libc5). Αν +όλα πήγαν καλά στο αρχείο .glimpse\_index υπάρχουν και ελληνικοί χαρακτήρες-λέξεις. + +Το webglimpse χρειάζεται επίσης μερικές αλλαγές για να μπορέσει να δεχτεί ελληνικούς χαρακτήρες χωρίς να τους απορρίψει. Αρχικά αλλάζουμε το αρχείο webglimpse +στον cgi-bin κατάλογο. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Αναζητούμε την σειρά: + $ENV{'PATH'} = '/bin:/usr/bin'; + και προσθέτουμε πριν από αυτήν: + $ENV{'LC_COLLATE'} = 'el'; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Προσοχή όχι + + {'LANG'}= 'el'; + +γιατί με αυτόν τον τρόπο αλλάζουνεκαι οι ημερομηνίες που χρησιμοποιεί το webglimpse σε ελληνικά, με αποτέλεσμα να μην λειτουργεί καθόλου.\ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Τώρα στο ίδιο αρχείο αναζητούμε την σειρά: + &err_badquery if !$highlight; + και την αλλάζουμε σε: + #&err_badquery if !$highlight; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +δηλαδή την βγάζουμε έξω τελείως, αφού αυτή δεν επιτρέπει την εισαγωγή ελληνικών στα πεδία. Επειδή δεν ξέρω perl δεν μπορώ να γνωρίζω τί ακριβώς έκανε αυτή η +γραμμή. Αν κάποιος γνωρίζει καλό θα ήταν να μας διαφωτίσει.\ +Έτσι από το επόμενο query το webglimpse θα αναγνωρίσει και ελληνικούς χαρακτήρες χωρίς κανένα πρόβλημα! diff --git a/content/articles/14/06_mailbox.md b/content/articles/14/06_mailbox.md new file mode 100644 index 0000000..db5013f --- /dev/null +++ b/content/articles/14/06_mailbox.md @@ -0,0 +1,612 @@ ++++ +title = 'Αλληλογραφία' +date = '1999-04-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 14'] +issue_weight = 6 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Παρακαλούμε ακολουθήστε τους κάτωθι κανόνες: + +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής \"Ερώτηση περί Linux\" δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμμιά ματιά στα περασμένα τεύχη, και εννοώ και τη στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντιούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-)\ +γ) Απαντήσεις οι οποίες δεν έχουν απαντηθεί, σημαίνει ότι μάλλον δεν ξέρουμε την απάντηση. Ερωτήσεις οι οποίες έρχονται με mail, είναι ΠΟΛΥ ΔΥΣΚΟΛΟ να +απαντηθούν. Προτιμήστε την φόρμα. + +**1. ΕΤΟΣ 2000** +------------------------------------------ + +**2. Αρχάριος** +----------------------------------------- + +**3. Αρχάριο Linux** +---------------------------------------------- + +**4. CD LINUX** +----------------------------------------- + +**5. ppp-on** +--------------------------------------- + +**6. REDHAT 5.2** +------------------------------------------- + +**7. Μπέρδεμα** +----------------------------------------- + +**8. Αρχάριος LINUX** +----------------------------------------------- + +**9. Αρχάριος LINUX** +----------------------------------------------- + +**10. Linux** +----------------------------------------- + +**11. Issue 11** +-------------------------------------------- + +**12. LINUX** +----------------------------------------- + +**13. RED HAT 5.1 και CDROM Πρόβλημα** +------------------------------------------------------------------ + +**14. προβλήματα με τον kernel** +------------------------------------------------------------ + +**15. ΡΑΜ ΜΕΓΑΛΗ ΚΑΙ ΛΙΝΟΥΞ** +--------------------------------------------------------- + +**16. Wordstar 5.0** +------------------------------------------------ + +**17. compile** +------------------------------------------- + +**18. compile** +------------------------------------------- + +**19. elinika?** +-------------------------------------------- + +**20. ρυθμίσεις** +--------------------------------------------- + +**21. xisp** +---------------------------------------- + +**22. ΠΕΡΙ MODEM** +---------------------------------------------- + +**23. Crasharisma tou XServer** +----------------------------------------------------------- + +**24. Κάρτα ήχου** +---------------------------------------------- + +**25. Partition a disk with Linux** +--------------------------------------------------------------- + +**26. remove file** +----------------------------------------------- + +**27. natscape for linux** +------------------------------------------------------ + +**28. x-isp** +----------------------------------------- + +**29. Ελληνικά στην Oracle** +-------------------------------------------------------- + +**30. linux vs PII(INTEL)** +------------------------------------------------------- + +**31. Ελληνικά στον εκτυπωτή** +---------------------------------------------------------- + +**32. MOTD** +---------------------------------------- + + +### [1. ΕΤΟΣ 2000]{#s1} + +Από : [ΚΑΤΙΜΕΡΤΖΗΣ ΜΑΚΗΣ](mailto:admin@veterin.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Ποιά από τις διάφορες παραλλαγές του Linux έχει λύσει το bug του 2000, και ποιά έκδοση; Ευχαριστώ. + +***MK:** Καμμία distribution του Linux δεν έχει πρόβλημα με το bug του 2000. Συγκεκριμένα προγράμματα μπορεί να έχουν, αλλά αυτά είναι ασχέτως distribution. Για +περισσότερες πληροφορίες, μπορείς να δεις το * + +***ΕΠ:** Τι bug έχει το 2000; Πως μπορεί ένα PC να αλλάξει τον χωροχρόνο;* + + +### [2. Αρχάριος]{#s2} + +Από : [Νίκος Σούλας](mailto:spady@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Πως τρέχει ένα πρόγραμμα, παιχνίδι στο Linux; Ποιά είναι η εντολή; Πως κάνω install σε ένα πακέτο ή ένα παιχνίδι; Με την εντολή mount μόνο μπορείς να δεις τα +περίεχόμενα ενός cd και του floppy; Ποιά είναι τα εκτελέσιμα αρχεία στο Linux; Εχω το red hat 5.2 και είμαι εντελώς νέος με το unix, επίσης βαρέθηκα τα windows +και θέλω να ξεφύγω. Please help. Ευχαριστώ. + +*Φίλε Νίκο. Τα executables έχουν το execute bit ορισμένο. Για να κάνεις install θα πρέπει να χρησιμοποιήσεις το rpm (man rpm) για πακέτα τα οποία έρχονται σε +rpm μορφή, ή τις οδηγίες που έχει κάθε πακέτο αν αυτό έρχεται σε tar.gz μορφή. Και τέλος, για να δεις ένα cd ή ένα floppy πρέπει να το κάνεις mount. Αν και +φαντάζομαι ότι τα παραπάνω σου φαίνονται παράξενα, είμαι σίγουρος ότι αν διαβάσεις λίγο θα τα καταφέρεις να βρεις άκρη.* + + +### [3. Αρχάριο Linux]{#s3} + +Από : [Nikos Soulas](mailto:spady@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αν και το mount το κατάλαβα και κατάφερα να δω το cd μου δεν κατάφερα ακόμη να τρέξω ένα πρόγραμμα από την κονσόλα Π.χ. έχω ένα παιχνίδι που λέγεται monop, ποια +είναι η εντολή να το τρέξω ; \`Οταν κάνω man monop στο synopsis το μόνο που μου λέει είναι να γράψω monop για να τρέξει το πρόγραμμα !!!!!!! Τι να κάνω ; Ακόμη +αν μπορείς πες μου γιατί όταν μπαίνω σαν user με δικό μου login και όχι του root δεν κάνει shutdown και αναγκάζομαι να πατάω alt+ctrl+del ; Θα με βοηθούσες πολύ +αν με απαντούσες . Και ευχαριστώ πολύ που με απάντησες . \`Ολα για το LINUX. + +*Να υποθέσω ότι δεν του είπες monop, έτσι; Όπως λέει, η εντολή για να τρέξει είναι η monop (καλό είναι να βάλεις το πλήρες path, γιατί μπορεί να μην είναι στο +path σου). Επί τη ευκαιρία, που το βρήκες το monop? Shutdown δεν κάνει, γιατί ο απλός χρήστης δεν έχει δικαίωμα να κάνει shutdown. Πρέπει να γίνεις root (με την +εντολή su) και σαν root πλέον να του δώσεις shutdown.* + + +### [4. CD LINUX]{#s4} + +Από : [Σωτηρίου Δημήτρης](mailto:cricket@ath.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Με ποιόν τρόπο μπορώ να προμηθευτώ το CD του LINUX στην Αθήνα\...\ +Ευχαριστώ + +*Βιβλιοπωλείο Παπασωτηρίου και βιβλιοπωλείο Κλειδάριθμος, στην οδό Στουρνάρη. Εταιρεία [Step](http://www.step.gr) στον Πειραιά* + + +### [5. ppp-on]{#s5} + +Από : [Georgiadis Petio](mailto:petio@mail.otenet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Γεια σας. \`Εχω ένα πρόβλημα να συνδεθώ στο Internet μέσω του ppp-on. Μόλις συμπληρώσω τα στοιχεία μου και πάω να το ξεκινήσω μου βγάζει του εξής μήνυμα: +\"Sorry - This system lacks ppp kernel support\". Θέλω να μου πείτε τι πρέπει να κάνω για να συνδεθώ. + +*Να προσθέσεις ppp support στον kernel, ή, αν το έχει ως module, να το φορτώσεις (με modprobe ppp).* + + +### [6. REDHAT 5.2]{#s6} + +Από : [Θεωδορος Παπαδοπουλος](mailto:webgallery@grecian.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Ξέρετε τη πυρήνα εχει το REDHAT 5.2? + +*Οχι ρε γαμώτο, όσο και να προσπαθήσω να καταλάβω δεν μπορώ\... Αν βρεις θα μου πεις και εμένα?* + + +### [7. Μπέρδεμα]{#s7} + +Από : [Nikos Soulas](mailto:spady@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Γειά σας. \`Εχω να κάνω μια ερώτηση. \`Εχω κατεβάσει από το Interner το KDE. Αλλά το έχω κατεβάσει από τα windows. Μπορείτε να μου πείτε: 1. Πώς μπορώ από το +Linux να αντιγράψω κάτι από τον σκληρό του DOS ; 2. Αν το αντιγράψω αυτό θα κάνει extract τα αρχείο από το tar ή επειδή είναι από το dos δεν θα το αναγνωρίζει ; +Ευχαριστώ . + +*Για να αντιγράψεις ή να δεις από το Linux ένα partition (ή δίσκο) με filesystem άλλο από e2fs, απλά το κάνεις mount με την κατάλληλη παράμετρο για το FStype. +Για να δουλέψει αυτό, πρέπει το μηχάνημά σου να έχει επιλογή για αυτό το filesystem, κάτι που μπορείς να δεις από το αρχείο /proc/filesystems. Αρχεία τα οποία +έχουν κατέβει ως binary από το Internet, γίνονται extract κανονικά. Αρχεία τα οποία ΔΕΝ κατέβηκαν ως binary δεν θα κάνουν extract. Είναι θέμα (και) του Web +browser που χρησιμοποιείς.* + + +### [8. Αρχάριος LINUX]{#s8} + +Από : [Nikos Soulas](mailto:spady@compulink.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Sorry είμαι ξανά εγώ ο Νίκος. Το monop είναι στο path /usr/games/ και έκανα αυτό που μου είπες αλλά τίποτα. Η εντολή που το έτρεξα ήταν monop /usr/games/ αν +μπορείς μου γράφεις σε παρακαλώ τι θα έγραφες για να το τρέξεις; Ακόμα όταν κάνω ls -F το monop μου το βγάζει με \* αυτό δεν θα πει ότι είναι εκτελέσιμο αρχείο +; Και όσο για το shutdown μου αρνείται να μου το κλείσει ακόμα και όταν πηγαίνω στο root με την εντολή su. \`Οσο για το monop ευχαρίστως να σου το έστελνα αλλά +δεν ξέρω πως να το βγάλω από το LINUX. Πες μου τον τρόπο. Ευχαριστώ ξανά που με απάντησες . Ζήτω το LINUX. + +*γράψε:* + + cd /usr/games + ./monop + +*ναι, το αστεράκι (\*) σημαίνει ότι είναι εκτελέσιμο\...* + + +### [9. Αρχάριος LINUX]{#s9} + +Από : [Nikos Soulas](mailto:spady@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Γειά σας. Λοιπόν κατάφερα επιτέλους να τρέξω ένα πρόγραμμα!! Αλλά όσο μπαίνω πιο βαθειά στον κόσμο του LINUX τόσο πιο πολλά ερωτήματα έχω. Λοιπόν κατάφερα να +εγκαταστήσω το GNOME και δεν ξέρω πώς να τρέχω τα X WINDOWS και πώς το GNOME να είναι το DEFAULT; Ακόμη από X WINDOWS πως μπορώ να δώ τα περιεχόμενα ενός CD ή +μιας δισκέτας; (\`Εχω το NEXTSTEP αν αυτό σας βοηθάει). Και κάτι άλλο, μήπως μπορείτε να μου πείτε πώς αλλάζω τον παλαιό μου τον πυρήνα ( 2.0.35 ) με τον +καινούργιο ( 2.2.0 ) ; ( Αν είναι πολλά δεν πειράζει έχω χρόνο να διαβάσω ). Ευχαριστώ πολύ. \`Ολα για το LINUX. + +*Συγγνώμη αλλά, το πως θα ξεκινήσεις το Gnome αναφέρεται στα αρχεία του Gnome, το πως θα δεις τα περιεχόμενα ενός CD ή δισκέττας το αναφέραμε σε προηγούμενή σου +ερώτηση, το Nextstep αποκλείεται να το έχεις γιατί δεν τρέχει σε Linux (και μάλλον εννοείς το AfterStep) και η αναβάθμιση του πυρήνα, είναι μία ολόκληρη +διαδικασία που αναφέρεται αναλυτικά στο . Επίσης, το περιοδικό είναι για να λύνει απορίες και όχι για να μαθαίνει στον κόσμο Linux. Μην +το πάρεις στραβά, αλλά έχουμε και άλλες δουλειές να κάνουμε, και πρώτα πρώτα τις δουλειές μας που μας ζούνε (γιατί προφανώς δεν ζούμε από το Linux). Το Linux +καλώς η κακώς θέλει πολλή δουλειά από τον χρήστη του, και υπάρχουν οι λίστες και τα περιοδικά να βοηθάνε ΜΟΝΟ αν ο χρήστης φτάσει σε αδιέξοδο εφόσον έχει +διαβάσει πρώτα. Φιλικά Μιχάλης* + + +### [10. Linux]{#s10} + +Από : [Μάριος Καρμέλλος](mailto:kvakis@cytanet.com.cy) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Τι μας προσφέρει το Linux; + +*Μια πολύ καλή ερώτηση, που μπορεί να λάβει πολλές απαντήσεις. Για τον καθένα κάτι διαφορετικό. α) Εμένα, που είμαι λάτρης του (ο,τιδήποτε) διαφορετικού, με +εκστασιάζει. Γιατί ποτέ δεν μπορείς να το \`\`μάθεις\'\' όπως γίνεται με τα ακατονόμαστα. Γιατί είναι δομημένο με ένα τρόπο που προκαλεί τη σκέψη μου, και ως εκ +τούτου δεν γίνομαι ένας παθητικός χρήστης υπολογιστή. β) Του ξαδέρφου μου του Μιχάλη, του προσφέρει λεφτά (αυτή είναι η δουλειά του), λεφτά που ούτε τα ΝΤ (που +ξέρει να τα δουλεύει ο Μιχαλάκης) δεν του προσφέρουν. γ) Στο ΚΤΕΛ Χανίων - Ρεθύμνης προσφέρει σταθερότητα και απαράμιλλη δικτυακή υποστήριξη. δ) Του κάθε +πιτσιρικά χρήστη των γουίντοους, προσφέρει την απαραίτητη \"Μαγκιά\" στην παρέα του \"Μα καλά, ακόμα 98 έχεις\"* + + +### [11. Issue 11]{#s11} + +Από : [Theodore Patsiouras](mailto:tnpats@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Δεν υπάρχει αρχείο για download του 11ου τεύχους; Ευχαριστώ πολύ. + +*Δοκίμασε το [http://magaz.hellug.gr/files/magaz.11.tgz](http://magaz.hellug.gr/files/magaz11.tgz)* + + +### [12. LINUX]{#s12} + +Από : [ΝΙΚΟΣ ΠΑΝΑΓΙΩΤΑΚΟΠΟΥΛΟΣ](mailto:gsiout@rodopi.cc.duth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Τι είναι το Linux, τι μπορεί να μου προσφέρει περισσότερο από τα windows και τέλος -επειδή είμαι πολιτικός μηχανικός - υπάρχουν σχεδιαστικά προγράμματα για +LINUX; + +*Το Linux είναι λειτουργικό σύστημα. Σε σχέση με τα Windows μπορεί να σου προσφέρει σταθερότητα και καλύτερη χρήση του hardware. Τέλος, ναι, υπάρχουν +σχεδιαστικά προγράμματα για linux, άλλα δωρεάν, άλλα Open Source και άλλα εμπορικά. Αν το βάλεις, ξαναστείλε mail να σου πούμε URL.* + + +### [13. RED HAT 5.1 και CDROM Πρόβλημα]{#s13} + +Από : [Panos Le Halachuck](mailto:hpan@nettaxi.com) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Γεια σας\... Είμαι ο (γνωστός) Panos Le Halachuck, και δυστυχώς έχω ένα Linuxικό πρόβλημα. Έκανα εγκατάσταση το CD της RED HAT διανομής 5.1 σε ένα δίσκο MAXTOR +1.3 Γίγα. Η εγκατάσταση πήγε καλά, αλλά όταν έκανα επανεκκίνηση, ήθελα να προσθέσω μερικά rpm\'s από το CD. Έκανα λοιπόν την γνωστή εντολή mount -t iso9660 +/dev/cdrom /mnt/cdrom για να ενεργοποιήσω το cd αλλά αντί αυτού έλαβα το εξής μήνυμα: ISO9660 is not supported by this kernel. Σημειωτέον ότι το kernel είναι +αυτό που έδινε η RED HAT στο CD τής (δεν θυμάμαι το build). Κοιτάω το αρχείο fstab αλλά δεν βλέπω το cd. Επίσης πρέπει να σας πω ότι έχω 2 σκληρούς δίσκους στον +υπολογιστή μου, ένα 4,3 GB χωρισμένο σε δύο partition (hda) και τον παραπάνω (hdc) για το Linux. Ο δίσκος hdc έχει ένα dos Fat16 partition το οποίο είναι το D:. +Βασικά στο Τι πρέπει να γίνει; + +*Γιατί δεν δοκιμάζεις πριν κάνεις mount, να δώσεις: modprobe isofs* + + +### [14. προβλήματα με τον kernel]{#s14} + +Από : [Βαγγέλης Τσιμπινός](mailto:ktsib@tee.gr) + +Απάντηση : [Κοτσιφάκης Θρασυβουλος](mailto:tkots@SoftHome.net) + +Έχω ένα πρόβλημα με το Linux.Συγκεκριμένα δεν μπορώ να εγκαταστήσω την υποστήριξη FAT και τα ppp protocols στον kernel. Έχω το REDHAT 5.2 με τον μητρικό του +kernel.Το πρόβλημα δημιουργείται όταν κάνω make dep και make zImage αφού μου εμφανίζει μερικά errors.Μπορείτε να με βοηθήσετε; Ευχαριστώ + +*Απ\' όσον γνωρίζω το RED HAT στο default Kernel έχει έτοιμη την υποστήριξη για dos fs (8.3) και VFAT σε read-write mode. Απλά το μόνο που έχεις να κάνεις είναι +να βάλεις στο /etc/fstab μία καταχώριση με το device name, το directory στο οποίο θα γίνεται mount το filesystem κλπ -αλλά τι σου τα λέω όλα αυτά; Αν κοιτάξεις +το magaz του Μαρτίου θα τα βρεις σε άρθρο-. Τα πρωτόκολλα που αναφέρεις (μάλλον TCP/IP) υπάρχουν επίσης και αυτά στον πυρήνα που εγκαθιστά το RH 5.2 (2.0.36). +Οπότε αν το πρόβλημα σου είναι μόνο αυτά τα δύο δεν χρειάζεται ούτε καν να κάνεις compile νέο kernel. -Εάν τώρα όλ\' αυτά τα ξέρεις και απλά το πρόβλημα σου +είναι ότι θες να κάνεις compile έναν νέο kernel με υποστήριξη των παραπάνω τότε καλύτερα θα ήταν να μας στείλεις με ένα άλλο mail τα μηνύματα λάθους που +παίρνεις γιατί δεν νομίζω ότι κανείς μας κατάλαβε τι ακριβώς συμβαίνει με τον πυρήνα σου (μάλλον -την φράση μυρίζω τα νύχια μου και το βρίσκω την ξέρεις ε;- ο +πυρήνας δεν γίνεται καν compile). Πάντως και για το compilation του kernel υπάρχουν άφθονα άρθρα στο τεύχος Φεβρουαρίου.* + + +### [15. ΡΑΜ ΜΕΓΑΛΗ ΚΑΙ ΛΙΝΟΥΞ]{#s15} + +Από : [ΦΡΑΓΚΟΣ ΠΑΝΑΓΙΩΤΗΣ](mailto:newt@internet-bg.net) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Καταρχήν μπράβο. Με έχετε βοηθήσει αφάνταστα, όπως και άλλους φαντάζομαι. \`Αλλη μια φορά όμως δεν βλάπτει:). \`Εχω μητρική PC100 M747. Επίσης σέλερον στα 350 +και έβαλα 3 sdram κανονικές δηλαδή όχι pc100. Οι δυο είναι από 65 ΜΒ και η αλλη 32ΜΒ. Σύνολο 163 περίπου. Κλασσικά το slack που έχω (3.6) βλέπει μόνο τα 63ΜΒ. +Διάβασα όσα how to μπόρεσα να βρω σχετικά με το θέμα αλλά όλα μιλάνε για το lilo.conf αρχείο και την εντολή append = \"mem=160M\" που πρέπει να τοποθετήσω εκεί +σαν τελευταία γραμμή .Το έκανα μα τίποτα. Στα ακατονόμαστα την βλέπει όλη τη μνήμη. Δεν ξέρω τι να κάνω. Μήπως φταίει η μητρική ή οι sdrams που εχω? Αν έχετε +ιδέα για το τι μπορεί να είναι η τι μπορώ να αλλάξω η τέλος πάντων πως θα γίνει κάντε κάτι :) \`Εχω καταφέρει να βρω πως διάολο λειτουργεί το xwin with sis agp +αν θέλετε μπορώ να σας διαθέσω αυτές τις πληροφορίες γιατί πολλοί θα παιδευτούν αρκετά όπως ε γώ . + +*Η γραμμή είναι ακριβώς όπως την γράφεις, αλλά το lilo το έτρεξες μετά την αλλαγή; Επειδή δεν θυμάμαι που μπαίνει αυτή η γραμμή, δοκίμασε στην αρχή, όπως και +μετά από το boot section. Βέβαια, αν ο kernel σου είναι 2.0.36 ή 2.2.x (uname a) τότε θα έπρεπε να το βλέπει μόνο του, οπότε μάλλον κάτι δεν πάει καλά με τις +μνήμες. Συνεπώς, αν δεν βρεις άκρη, δοκίμασε να αναβαθμίσεις kernel* + + +### [16. Wordstar 5.0]{#s16} + +Από : [Linakis A. Antonis](mailto:krom10@hotmail.com) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Θα ήθελα να ρωτήσω αν μέσω του SuSE Linux v6.0 και του προγράμματος Wordstar v5.0 μπορώ να ανοίξω αρχεία σωσμένα με το Microsoft Office 97 και Microsoft Office +v.7.0 καθώς επίσης και με το Excel. Θα το εκτιμούσα πάρα πολύ αν μπορείτε να μου στείλετε την απάντηση μέσω email, διότι είναι φοιτητής στην Αγγλία και δεν +μπορώ να αποκτήσω το περιοδικό. Ευχαριστώ για το χρόνο σας. + +*Προφανώς εννοείς StarOffice 5.0 .Η απάντηση είναι ναι . Μπορείς να ανοίξεις κάποιο έγγραφο του MS Office όπως επίσης και να αποθηκεύσεις κάποιο αρχείο σαν +αρχείο .doc για office 97 ή 7.0 έτσι ώστε να το διαβάσεις από τα WIN.* + + +### [17. compile]{#s17} + +Από : [Τσιμπινός Βαγγέλης](mailto:ktsib@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +Λοιπόν \..... Τα errors που μου βγαίνουν στο τέλος του make zImage ειναι: make\[1\]: as86 :Command not found make\[1\]: \*\*\*\[bootsect.o\] Error 127 . . make: +\*\*\*\[zImage\] Error 2 Θα σας είμαι ευγνώμων αν με βοηθήσετε\...\.... (Το ότι παραλείπω το γλείψιμο στην αρχή δεν πάει να πει ότι δεν κάνετε φοβερή +δουλειά\...\....) Ευχαριστώ, Τσιμπινός Βαγγέλης + +***MK:** Φίλε Βαγγελη, Χρειάζεσαι το πακέτο bin86 το οποίο περιεχει το as86. Πρέπει σιγουρα να υπάρχει στο CD του distribution σου.* + +***ΠΒ:** Αν έχεις RedHat 5.2 εγκατάστησε το πακέτο bin86-0.4-5.i386.rpm που περιλαμβάνεται στο CD της Red Hat.* + + +### [18. compile]{#s18} + +Από : [Τσιμπινός Βαγγέλης](mailto:ktsib@tee.gr) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +To bin86 το εγκατέστησα αλλά μου βγάζει πλέον και άλλα errors\... Αυτά είναι + +*Λογικά δεν έχεις εγκαταστήσει τα headers της libc (ή glibc, ανάλογα με το σύστημά σου). Αν έχεις σύστημα με rpm (RedHat, SuSE, Caldera,\...) εγκατάστησε ένα +πακέτο που ονομάζεται libc-devel ή glibc-devel.\ +Στο RedHat 5.2 είναι το glibc-devel-2.0.7-29.i386.rpm* + + +### [19. elinika?]{#s19} + +Από : [Ανώνυμος](mailto:c_tolis@hotmail.com) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Ελληνικά ρε παιδιά πώς βάζω μωρέ; heeeeeeeeeeeeeeelp + +*Η ερώτηση αυτή έχει απαντηθεί πολλές φορές. Μία ματιά στο \"τεύχος\" Μαρτίου (13) θα σου λύσει τις απορίες (όχι μόνον αν έχεις Red Hat όπως λέει ο τίτλος του +άρθρου). Υπάρχουν επίσης άρθρα για τα ελληνικά σε παλιότερα τεύχη (1998) του magaz τα οποία σε καθοδηγούν για να εγκαταστήσεις ελληνικά σε διάφορες εφαρμογές +(staroffice TeX κλπ) Διάβασε τα σχετικά HOWTO και ψάξε στο αρχείο της λίστας Ελλήνων Χρηστών . Η εγκατάσταση είναι πανεύκολη +αρκεί να κάτσεις να διαβάσεις ένα HOWTO και ένα άρθρο στο magaz. Πάντως μέχρι και το RAM έχει γράψει γι\' αυτό το θέμα οπότε μάλλον αδικαιολόγητος να κάνεις +τέτοιες ερωτήσεις .* + + +### [20. ρυθμίσεις]{#s20} + +Από : [Χατζηραλλης Στρατης](mailto:inforpoject@the.forthnet.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +θα ήθελα να μάθω αν μπορώ να εγκαταστήσω τα x-windows ΑΠΟ ΤΗΝ ΑΡΧΙΚΗ εγκατάσταση. Περιέχονται στα 2 cd της RedHat; Αν όχι τι κάνω μετά; Ευχαριστώ προκαταβολικά. +Στρατης Χατζηραλλης ΥΓ . ΕΙΜΑΙ ΕΝΘΕΡΜΟΣ ΥΠΟΣΤΗΡΙΚΤΗΣ ΤΗΣ ΙΔΕΑΣ ΤΟΥ \'ΕΝΑΛΛΑΚΤΙΚΟΥ \' Λ.Σ. ΑΝ ΚΑΙ ΕΧΩ ΕΠΕΝΔΥΣΕΙ ΠΑΡΑ ΠΟΛΛΑ ΣΤΑ MS-WINDOWS ΕΝΤΟΥΤΟΙΣ ΔΕΝ ΣΥΜΦΩΝΩ +ΚΑΘΟΛΟΥ ΣΤΗ ΔΙΚΤΑΤΟΡΙΑ ΠΟΥ ΘΕΛΟΥΝ ΝΑ ΕΠΙΒΑΛΛΟΥΝ. + +*Φυσικά και περιέχονται στα cd της RED HAT. Για την ακρίβεια τα εκτελέσιμα βρίσκονται στο πρώτο cd ενώ ο κώδικας στο δεύτερο. Αν τώρα θέλεις την νεότερη έκδοση +των Χ για την διανομή σου ρίξε μία ματιά στο ftp.redhat.com και στο mirror του στην Ελλάδα (ftp.linux.gr/pub/redhat) Δεν καταλαβαίνω τι εννοείς \"\...από την +αρχική εγκατάσταση\". Πάντως σε κάθε περίπτωση -είτε σε ένα νέο σύστημα είτε σε κάποιο με το linux ήδη εγκατεστημένο- μπορείς να βάλεις Χ-WINDOWS. Σε ένα νέο +από την ρουτίνα εγκατάστασης και σε ένα ήδη υπάρχον εγκαθιστώντας τα rpm -αφού μιλάμε για RH-(xf86, τους servers κλπ).* + + +### [21. xisp]{#s21} + +Από : [Τσιμπινός Βαγγέλης](mailto:ktsib@tee.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Μήπως μπορείτε να μου πείτε που θα βρω το X-ISP και πως θα το εγκαταστήσω;;;;;;; Eυχαριστώ + +*Θα το βρεις στο site του Δ. Βούρα για το X-ISP, στο : (από εκεί βέβαια θα πάρεις πληροφορίες για τους ftp servers +που το φιλοξενούν) Υπάρχει επίσης σαν binary rpm (v 2.3p7-1.i386.rpm) στο : για libc5 σύστημα. +Ενώ για glibc2 binary (v 2.5p4) στο : Για να το εγκαταστήσεις θα πρέπει να εγκαταστήσεις X +(μάλλον τα έχεις ήδη στο κουτί σου) και τα πακέτα xforms 0.88 και ppp 2.2 .0 και πάνω. Για να το ρυθμίσεις θα διαβάσεις στην σελίδα που αναφέρω πιο πάνω και στα +τεύχη του magaz, 5/98 (Ρυθμίσεις για το X-ISP) και 6/98(Συνδεθείτε με το X-ISP) Υπάρχει επίσης άρθρο για το πως θα συντηρείς πολλαπλά accounts (setup, +maintenance, security) με X-Isp στο τεύχος 56/Δεκεμβρίου 98 του Linux Journal.* + + +### [22. ΠΕΡΙ MODEM]{#s22} + +Από : [ΠΟΛΛΑΤΟΣ ΓΕΡΑΣΙΜΟΣ](mailto:stud1148@di.uoa.gr) + +Απάντηση : [Κοτσιφάκης Θρασύβουλος](mailto:tkots@SoftHome.net) + +Μέχρι πρότινος είχα τη διανομή της Slackware και το modem μου αναγνωριζόταν κανονικα. Τώρα με τη διανομή της Redhat δεν μπορώ να δω το modem μου.(Χρησιμοποιώ το +minicom). + +*Μήπως (λέω τώρα) έχεις αλλάξει τα settings της σειριακής που έχεις το modem ; Μήπως το έχεις δηλώσει σαν /dev/modem και δεν έχεις κάνει το link ώστε το +/dev/modem/ να δείχνει στην σειριακή που έχεις το modem; Μήπως το modem σου είναι plug and play και θέλει να το βάλεις στο /etc/isapnp.conf ; Πάντως μία πιο +ξεκάθαρη ερώτηση θα έδινε και πιο ξεκάθαρη απάντηση* + + +### [23. Crasharisma tou XServer]{#s23} + +Από : [Παπαμάρκος Γιωργος(Papamarcos Giorgos)](mailto:el97060@central.ntua.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Έχω το to SUSE 5.3 και από τότε που έβαλα καινούργια κάρτα γραφικών, μία Diamond Stealth II S220, και αφού μετά πολλών κόπων και βασάνων μπόρεσα να τρέξω τα +XWindows (δεν είχε τους οδηγούς το Linux) και μάλιστα στα 8bpp (αν και η κάρτα υποστηρίζει στα 16bpp), κάθε φορά σχεδόν (90%) που σηκώνω τον server το σύστημα +κρασάρει. Και όχι μόνο αυτό: μόλις αλλάζω το χρώμα στα 16bpp (είτε μέσω του XF86Setup είτε μέσω του xf86config) το φαινόμενο επαναλαμβάνεται και καταλαβαίνετε +τον εκνευρισμό μου. ΤΙ ΜΠΟΡΩ ΝΑ ΚΑΝΩ ΑΣ ΜΕ ΒΟΗΘΗΣΕΙ ΚΑΠΟΙΟΣ ΤΟ ΣΥΝΤΟΜΟΤΕΡΟ ΓΙΑΤΙ ΕΙΜΑΙ ΔΕΜΕΝΟΣ ΧΕΙΡΟΠΟΔΑΡΑ ΚΑΙ ΔΕΝ ΜΠΟΡΩ ΝΑ ΚΑΝΩ ΚΑΜΜΙΑ ΣΟΒΑΡΗ ΔΟΥΛΕΙΑ. ΘΑ +ΕΙΘΥΜΟΥΣΑ ΕΝΑ ΠΡΟΣΩΠΙΚΟ ΚΑΙ ΑΝΑΛΥΤΙΚΟ MA IL ΓΙΑΤΙ ΕΙΜΑΙ ΣΧΕΤΙΚΑ ΠΡΩΤΑΡΗΣ ΣΤΟ LINUX. ΕΥΧΑΡΙΣΤΩ + +*Το SUSE 5.3 έχει server για την κάρτα σου (x\_permidia x\_verite ή κάτι τέτοιο στο όνομα) ο οποίος είναι λίγο buggy αλλά όχι και τόσο όσο περιγράφεις. Κατέβασε +αν θες τον νέο XFREE86 (3.3.3)και τον XSVGA Server ο οποίος σηκώνει πλέον και την κάρτα σου. Θα τα βρεις στα updates της SUSE* + + +### [24. Κάρτα ήχου]{#s24} + +Από : [Αδριανός Παπαμάρκου](mailto:adrian@arafin.gr) + +Απάντηση : [Κοτσιφάκης Θρασύβουλος](mailto:tkots@SoftHome.net) + +Έχω μια κάρτα ήχου Philips PCA761W η οποία δεν έχει drivers για LINUX και δεν υποστηρίζεται από το RedHat 5.0. Υπάρχει κάποιος τρόπος που μπορώ να την +χρησιμοποιήσω σαν κάρτα ήχου ή synthesizer ή MIDI-Joystic port; (Σύμφωνα με το manual είναι συμβατή με sound blaster) + +*Το Red Hat δεν μπορεί να αποφασίσει αν η κάρτα ήχου σου υποστηρίζεται από το linux αφού το linux είναι ο πυρήνας και αυτός αποφασίζει. Αν η κάρτα σου είναι +100% sb συμβατή και όχι κάποια software συμβατή τότε μπορείς κάνοντας recompile τον πυρήνα να την εγκαταστήσεις σαν soundblaster Διάβασε πριν κάνεις οτιδήποτε +το sound ΗΟWΤΟ για να μάθεις τι πρέπει να γνωρίζεις γι\' αυτήν πριν κάνεις recompile τον κώδικα του πυρήνα.* + + +### [25. Partition a disk with Linux]{#s25} + +Από : [Αντώνιος Χάψας](mailto:hapsas@med.upatras.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Υπάρχει πρόγραμμα που να κάνει re-partitioning σαν το partition magic σε ένα δίσκο με Linux ? Δοκίμασα να αλλάξω το μέγεθος του Partition του linux με το +partition magic 4,0 αλλά όταν έκανα reboot κόλλαγε στο LI.. δοκίμασα να το επισκευάσω αλλά τίποτα. + +*-Όχι τέτοιο πρόγραμμα δεν υπάρχει. Το πρόβλημα σου είναι σχετικά εύκολο στην επίλυση του αρκεί να έχεις πρόχειρη μία linux boot disk ή έναν kernel και το +loadlin για να bootάρεις από dos. To partition magic κατά την διάρκεια του re-sizing του partition που εσύ έκανες στο / (root ) κατέστησε το partition +unbootable για τον lilo. Έλεγξε το partition table όπως το έκανες με το partition magic, εκκίνησε σε linux με την boot disk ή μέσω loadlin και διόρθωσε τις +καταχωρίσεις στο /etc/fstab και στο /etc/ lilo.conf (αν χρειάζεται) και τρέξε το /sbin/lilo Στο επόμενο boot λογικά το μηχάνημα σου θα λειτουργεί κανονικά. Το +partition magic έχει κατηγορηθεί ότι δεν τα πάει καλά με τα ext2 partitions.Η έκδοση 4.2.02 λένε ότι διορθώνει κάπως τα προβλήματα* + + +### [26. remove file]{#s26} + +Από : [Χρηστος](mailto:propelas@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Γιατί δεν μπορώ να σβήσω ένα αρχείο που έχω κάνει upload, ή αν γίνεται πως πρέπει να το κάνω? Χρήστος + +*Ορίστε? τι να κάνεις? Να σβήσεις ένα αρχείο που έχεις κάνει upload?* + +- Που το έχεις κάνει upload? +- Γιατί να το σβήσεις? +- Γιατί το ανέβασες? + +*Σοβαρά τώρα, τι εννοείς?\ +Αν θες να γίνεις πιο συγκεκριμένος, ίσως να μπορέσουμε να σε βοηθήσουμε.\ +Φιλικά, Βαγγέλης* + + +### [27. natscape for linux]{#s27} + +Από : [Georgiadis Xristos](mailto:petio@mail.otenet.gr) + +Απάντηση : [](mailto:) + +Θέλω να ρωτησω αν μπορώ να βρω πουθενά στην Ελλάδα το Netscape για Linux. + +*Εννοείς να το αγοράσεις σε CD σα να λέμε;\ +\`Οχι τίποτα άλλο, αλλά δε βρίσκω άλλο λόγο να το θες μόνο από Ελλάδα.\ +Αν όντως είναι έτσι, μπορείς να το βρεις στον Παπασωτηρίου.\ +Αν πάλι το θες από το internet μπορείς να δοκιμάσεις να το βρεις στο [ftp.linux.gr](ftp://ftp.linux.gr), κάπου εκεί πρέπει να είναι.* + + +### [28. x-isp]{#s28} + +Από : [Τσιμπινός Βαγγέλης](mailto:ktsib@tee.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Μπορείτε να μου πείτε την ακριβή διαδικασία εγκατάστασης του X-isp???? Έχω κατεβάσει το binary και δεν ξέρω μετ;a τι να κάνω\.... Ευχαριστώ + +*Νομίζω ότι απάντηση θα πάρεις αν διαβάσεις τις σελίδες που αναφέρομαι σε προηγούμενο mail σου (Αλήθεια το README που υπάρχει στο πακέτο μήπως είναι +διακοσμητικό στοιχείο; -μάλλον όχι).* + + +### [29. Ελληνικά στην Oracle]{#s29} + +Από : [Πάνος Βατικιώτης](mailto:panos@cybex.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Κατά την εγκατάσταση της ORACLE 8 βάζω την γραμματοσειρά EL8ISO8859P7. Μέσα στο sqlplus οτιδήποτε ελληνικό εμφανίζεται με ερωτηματικά. Αν μπορεί κάποιος να +βοηθήσει. Ευχαριστώ. + +*Δυστυχώς, δεν έχω απάντηση στην ερώτησή σου, αλλά σε παρακαλώ, πες μου\... Δουλεύει καλά (κατά τα άλλα) η ORACLE 8??* + + +### [30. linux vs PII(INTEL)]{#s30} + +Από : [misa 1999](mailto:misa_1998@hotmail.com) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Είμαι τεχνικός Η/Υ στην Θεσσαλονίκη και από το περασμένο καλοκαίρι αγόρασα το REDhat 5.1 για να μπω στην λίμνη του Linux. Πρόσφατα πήρα μέσω του RAM το S.U.S.E +6.0. Mέχρι σήμερα δεν κατάφερα πολλά πράγματα λόγω του λιγοστού χρόνου που έχω ελεύθερο. Θα ήθελα να μου πείτε αγαπητοί συνάδελφοι αν ξαναεγκαταστήσω το Linux +σε PII 333Α Celeron θα εκμεταλλευτεί στο έπακρο τις δυνατότητες του ? Θα ήθελα ακόμη να μου πείτε που θα μπορούσα να βρω ελληνικά Howto για να μπορέσω να +κολυμπήσω αν όχι στο καλύτερο λειτουργικό γιατί είναι φτιαγμένο από μας για μας(Προσωπικά δεν έχω προσφέρει τίποτα ακόμη). Γεια χαρά σε όλους. ;)) Υ.Γ. \`Οσοι +θέλετε στείλτε μου email. + +*Η απάντηση είναι σίγουρα ναι. Ειδικά στους νεότερους πυρήνες (2.2.Χ) υπάρχουν ειδικά optimizations για κάθε είδους επεξεργαστή (και για τον δικό σου που +ουσιαστικά είναι ένας PII χωρίς την L2 cache του PII). Ελληνικά HOWTO θα βρεις στο εκεί θα βρεις και faq στην ελληνική. Σχετικά +με το SUSE 6 του RAM . H κόπια αυτή δεν τρέχει γιατί στο cd έχουν μετατραπεί όλα τα γράμματα στις ονομασίες των αρχείων σε κεφαλαία (ως γνωστόν το LINUX είναι +case sensitive) επικοινώνησε με την τοπική σου L.U.G. [theLUG](http://hal.csd.auth.gr/thelug) και πιστεύω ότι κάποιος θα το έχει για να στο δώσει.* + + +### [31. Ελληνικά στον εκτυπωτή]{#s31} + +Από : [DJ Art](mailto:arturok@usa.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Γεια σας!!!. \`Εχω έναν Epson Stylus Color 600 και προσπαθώ να τον κάνω να γράψει ελληνικά. Έχω δοκιμάσει τις οδηγίες των How-To και τις οδηγίες που είχαν +δημοσιευθεί στο τεύχος 121 του RAM. Δεν τα κατάφερα, όμως. Μήπως έχετε καμιά ιδέα; Υπόψιν ότι ο εκτυπωτής εκτυπώνει ελληνικά σε \"καθαρό\" DOS και ότι είναι +σωστά εγκατεστημένος σε RedHat 5.2. Ως default γραμματοσειρά του εκτυπωτή είναι η 737. + +*Δυστυχώς, κι εγώ το ίδιο πρόβλημα έχω με τον 740. Σε παρακαλώ, αν βγάλεις άκρη, στείλε μου κι εμένα ένα mail!\ +Φιλικά,\ +Βαγγέλης* + + +### [32. MOTD]{#s32} + +Από : [Τσαλίκογλου Ισαάκ](mailto:tcup@bigfoot.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Τι τροποποιήσεις πρέπει να κάνω και σε ποια αρχεία έτσι ώστε όταν κάνω login να μου βγάζει ένα text?\ +ΥΓ. Το έχω δει σε ένα γνωστό μου :-)\ +ΥΓ2. Θένξ σε αντβάνς ;) + +***MK:** Κατά πρώτον, χρειάζεσαι το \"πακέτο\" fortune το οποίο βγάζει τυχαία μηνύματα. Κατά δεύτερον, πρέπει να το εκτελείς. Αν θέλεις αυτό να ισχύει για όλους +τους χρήστες, βάζεις το fortune να εκτελείται στο /etc/profile ως τελευταία γραμμή. Αν θέλεις να ισχύει μόνο για σένα, το βάζεις στο δικό σου .profile ή .login +ανάλογα με το shell που έχεις.* + +***ΘΚ:** Και για να συμπληρώσω λίγο τον φίλο μου Μιχάλη μπορείς επίσης για να είναι το μήνυμα σου πιο προσωπικό να φτιάξεις ένα μήνυμα με κάποιον text editor +στο /home directory σου και μετά να βάζεις το \$HOME/.profile να διαβάζει το μήνυμα αυτό με την εντολή cat\ +π.χ. αν το text αρχείο λέγεται greeting βάλε την εντολή στο /HOME/.profile cat /home/\/greeting\ +Μπορείς βέβαια να την βάλεις στο γενικότερο, /etc/profile ώστε να εμφανίζεται σε όλους τους χρήστες που κάνουν login\ +Επίσης μπορείς να φτιάξεις ένα script μέσα στο /etc/profile που να συλλέγει πληροφορίες για τον χρήστη που κάνει login και να του εμφανίζει ένα πιο προσωπικό +μήνυμα (π.χ. ένα welcome με το όνομα του δίπλα).\ +Μία ιδέα για το πως λειτουργεί το scripting θα πάρεις αν διαβάσεις τα άρθρα του Β. Παπαδογιαννάκη (απλά μαθήματα bash) στα τεύχη 8/98 και 9/98 και στην man bash +και στα tips HOWTO* + diff --git a/content/articles/15/01_kdevelop.md b/content/articles/15/01_kdevelop.md new file mode 100644 index 0000000..de40dd9 --- /dev/null +++ b/content/articles/15/01_kdevelop.md @@ -0,0 +1,169 @@ ++++ +title = 'KDevelop' +date = '1999-04-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 15'] +issue_weight = 1 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το [Kdevelop](http://www.cs.uni-potsdam.de/~smeier/kdevelop/index.html), είναι ένα Intergrated Development Environment που τρέχει σε Linux μηχανήματα με τις +KDE libraries και την QT και έχει την δυνατότητα να παράγει C++ προγράμματα, τα οποία είτε στηρίζονται σε KDE, ή σε QT, ή τέλος απλά προγράμματα κονσόλας.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εμφάνιση** +------------------------------------------ + +- [1.1 Το αριστερό τμήμα](#ss1.1) +- [1.2 Το δεξί τμήμα](#ss1.2) +- [1.3 Το κάτω τμήμα](#ss1.3) +- [1.4 Τα toolbars](#ss1.4) +- [1.5 Το menu bar](#ss1.5) + +**2. Λειτουργία - Ευκολίες.** +-------------------------------------------------------- + +- [2.1 Application Wizard](#ss2.1) +- [2.2 Documentation](#ss2.2) +- [2.3 Tools](#ss2.3) + +**3. Visual** +---------------------------------------- + +**4. Τι λείπει\...** +----------------------------------------------- + +**5. Επίλογος** +------------------------------------------ + + +### [1. Εμφάνιση]{#s1} + +Το κεντρικό παράθυρο του Kdevelop χωρίζεται σε τρία επιμέρους παράθυρα. Επίσης έχει δύο toolbars, και βέβαια μία σειρά από μενού. Ας ξεκινήσουμε με τα +υποπαράθυρα. + +### [1.1 Το αριστερό τμήμα]{#ss1.1} + +Το αριστερό τμήμα, έχει 4 ταμπέλες, με ονόματα CV (Class Viewer), LFV (Logical File Viewer), RFV (Real File Viewer) και DOC (Documentation Tree). + +Στο **Class Viewer** βλέπουμε ιεραρχικά τις classes που έχει το πρόγραμμά μας, μαζί με τα elements της κάθε class, όπως constructor, destructor, functions που +έχουμε φτιάξει εμείς, αλλά και τα δεδομένα. Έτσι έχουμε μία περιληπτική εικόνα μίας class που έχουμε δημιουργήσει, η οποία μπορεί να δημιουργεί τελικά 500-600 +γραμμές κώδικα (constructor, functions κλπ). Το Application Wizard του Kdevelop έχει αναλάβει να μας φτιάξει τον ορισμό της Class σε ένα .h αρχείο, και την +υλοποίηση σε ένα .cpp. Με ένα απλό κλικ πάνω σε ένα από τα elements, θα μεταφερθούμε στο δεξί παράθυρο, στο element αυτό. Αν κάνουμε κλικ πάνω σε ένα Class, ή +σε μία μεταβλητή του class θα μεταφερθούμε στο header αρχείο, ενώ αν κάνουμε κλικ πάνω σε μία function θα μεταφερθούμε στο source αρχείο. Επίσης στο Class +Viewer εμφανίζονται και οι global variables, functions και structures. + +Στο **Logical File Viewer** βλέπουμε τα αρχεία που αποτελούν το project μας, χωρισμένα \"θεματικά\". Δηλαδή χωριστά τα sources, χωριστά τα headers, χωριστά το +Documentation. Πάλι πατώντας σε κάποιο αρχείο, μεταφερόμαστε στο δεξί παράθυρο σε αυτό το αρχείο. + +Στο **Real File Viewer** βλέπουμε όλα τα αρχεία όπως θα τα βλέπαμε από ένα File Manager, δηλαδή με το directory structure που είναι στον δίσκο μας. + +Τέλος, στο **Documentation Tree** έχουμε το manual και το tutorial του Kdevelop, το documentation της QT-Library και των KDE-Classes, ένα C/C++ Reference και +(φυσικά) το documentation του δικού μας project. Για να τα δούμε όλα αυτά βέβαια, πρέπει να έχουμε εγκαταστήσει και τα απαραίτητα αρχεία. Αντίστοιχα με όσα +είδαμε προηγουμένως, ένα κλικ σε κάποιο στοιχείο, μας μεταφέρει στο δεξί παράθυρο, στο στοιχείο αυτό. + +Το τμήμα αυτό ενεργοποιείται με τον συνδυασμό πλήκτρων *Ctrl-T* + +### [1.2 Το δεξί τμήμα]{#ss1.2} + +Το δεξί τμήμα έχει επίσης 4 ταμπέλες, με ονόματα Header/Resource Fles, C/C++ Files, Documentation-Browser και Tools. + +Ανάλογα με το τι έχουμε επιλέξει από το αριστερό παράθυρο, μεταφερόμαστε στο σχετικό τμήμα του δεξιού. Αν δηλαδή επιλέξουμε κάτι που πρέπει να μας στείλει σε +ένα header θα βρεθούμε στο Header/Resource File τμήμα, ενώ αν επιλέξουμε μία Function, θα βρεθούμε στο C/C++ Files τμήμα. Τα δύο αυτά τμήματα είναι editable, +ενώ το Documentation-Browser και το Tools είναι \"Read-Only\". Στο μεν Documentation-Browser βλέπουμε (όπως λέει και το όνομα) documentation, ενώ το Tools +φαίνεται να είναι ένα Virtual παράθυρο, στο οποίο ανοίγουν κάποια εξωτερικά προγράμματα (πιο πολλά για αυτό παρακάτω). + +Το τμήμα αυτό είναι πάντα ορατό και δεν μπορεί να απενεργοποιηθεί. + +### [1.3 Το κάτω τμήμα]{#ss1.3} + +Τέλος, το τρίτο μέρος (το κάτω), έχει τρεις ταμπέλες με ονόματα STDIN, STDERR και STDOUT. Όπως καταλαβαίνετε και από τα ονόματα, είναι η είσοδος, έξοδος και +error του προγράμματός μας (και από το λίγο που είδα, δεν κάνουν αυτόματο redirect αν το κάνουμε εμείς από το πρόγραμμα). + +Το τμήμα αυτό ενεργοποιείται με τον συνδυασμό πλήκτρων *Ctrl-G* + +### [1.4 Τα toolbars]{#ss1.4} + +Εξ ορισμού το Kdevelop ανοίγει με δύο toolbars, με το ένα να έχει τα κλασικά File Open, File Save, Open Project, Print File, Undo, Redo, Cut, Copy, Paste, και +τα πιο ειδικά, Compile file, Make, Rebuild, Debug, Run και Context-sensitive Help. Όλα αυτά παρέχονται για ευκολία, αφού οι ίδιες επιλογές (και περισσότερες +όπως θα περιμέναμε) παρέχονται στο menu-bar. + +Το δεύτερο toolbar είναι πιο ειδικό, αφού παρέχει μία αντίστοιχη λειτουργία με το Class Viewer του αριστερού τμήματος της οθόνης. + +### [1.5 Το menu bar]{#ss1.5} + +Στα menus θα βρούμε τις επιλογές για να καλέσουμε τον Application Wizard, να προσθέσουμε ένα νέο αρχείο στο project μας, να δημιουργήσουμε μία νέα class, επίσης +να \"τρέξουμε\" το autoconf, το configure ή να κάνουμε ένα απλό distclean, να δώσουμε execution arguments στο project μας, και τέλος να δημιουργήσουμε +documentation. Υπάρχουν βέβαια όσες λειτουργίες υπάρχουν και στο πρώτο toolbar που αναφέραμε παραπάνω, καθώς και τα search, goto-line, configure (kdevelop, +editor, printer, tools). + + +### [2. Λειτουργία - Ευκολίες.]{#s2} + +### [2.1 Application Wizard]{#ss2.1} + +Πρόκειται για ένα interactive tool, το οποίο μας επιτρέπει μέσα από 6 βήματα, να δημιουργήσουμε τον σκελετό για την εφαρμογή μας. Οι επιλογές είναι Full KDE +Application (με menu bar και toolbar), KDE mini-application (χωρίς menu bar και toolbar, μόνο τα βασικά Widgets του KDE για τη δημιουργία παραθυρικού +περιβάλλοντος), QT application (με menu bar και toolbar, φτιαγμένα από Widgets της QT) και τέλος C/C++ application (καθόλου παραθυρικό interface). + +Σε κάθε περίπτωση, ο Application Wizard δημιουργεί τη standard δομή αρχείων για την εφαρμογή μας, ένα main window αν πρόκειται για παραθυρική εφαρμογή, και +\"κανονίζει\" τα autoconf, automake κλπ ούτως ώστε μόλις η εφαρμογή μας είναι έτοιμη να μπορεί να γίνει ένα tar.gz όπως όλες οι εφαρμογές για KDE που βλέπουμε +και να μπορεί να διανεμηθεί. + +Δίνοντάς του τα στοιχεία μας (ονοματεπώνυμο, e-mail, όνομα εφαρμογής, version εφαρμογής), μπορεί επίσης να μας δημιουργήσει templates, με ένα κάποιο standard +κείμενο στην αρχή (το οποίο εμείς ορίζουμε), για τα sources και τα headers της εφαρμογής. + +Επίσης δημιουργεί κάποια τυπικά αρχεία τα οποία περιέχονται (ή πρέπει να περιέχονται) σε κάθε εφαρμογή, όπως το README, ένα .lsm αρχείο, ένα changelog, ένα todo +και ένα authors. Μόλις ο Application Wizard τελειώσει την δουλειά του, έχουμε και το Documentation του προγράμματός μας σχεδόν έτοιμο, εφόσον δημιουργεί και τον +κορμό για αυτό. + +### [2.2 Documentation]{#ss2.2} + +Σε περίπτωση που κατεβάσουμε το QT documentaion, τα KDE-libs και το c/c++ reference που υπάρχει στην σελίδα του Kdevelop, το Kdevelop τα βρίσκει (είτε αυτόματα, +ή με λίγη βοήθεια από εμάς και το configuration) και μας παρέχει τη δυνατότητα να έχουμε στα χέρια μας ένα πολύ ισχυρό εργαλείο, αφού έχουμε το documentation +μέσα στην ίδια την εφαρμογή. Αν δε δεν βαριόμαστε και κατεβάσουμε και το glimpse, φτάνουμε στο σημείο να έχουμε και ένα real-time searching του documentation +για λέξεις - κλειδιά, με την απλή επιλογή lookup που παρέχεται στο δεξί πλήκτρο του ποντικιού μας. Όλο το documentation είναι σε HTML format, με hyperlinks που +παραπέμπουν στις αντίστοιχες κλάσεις και functions. Η χρησιμότητα αυτού είναι βέβαια εμφανής, και θα πάψει να είναι τόσο χρήσιμο μόνο για όσους έχουν ένα βιβλίο +reference της QT. + +### [2.3 Tools]{#ss2.3} + +Το Kdevelop συνεργάζεται άψογα με τα Kdbg, Kiconedit, Kdialog και Κdoc, σε περίπτωση βέβαια που τα έχουμε στον υπολογιστή μας εγκατεστημένα. Όλα αυτά τα +εργαλεία μπορούν να κληθούν από το menu-bar, αφού πρώτα οριστούν από ένα Tools-configuration menu-item, και εφόσον κληθούν εκτελούνται στο τμήμα Tools του +δεξιού παραθύρου της εφαρμογής. Το Kdbg που το δοκίμασα εκτενώς με ικανοποίησε απόλυτα, και σε ότι αφορά τις debugging λειτουργίες του (front-end για το gdb) +αλλά και σε ότι αφορά το integration με το Kdevelop. Δοκίμασα επίσης το Kdialog, το οποίο είναι ο \"visual dialog editor\" για το KDE. Δεν ξέρω αν έκανα εγώ +κάποιο λάθος (αρκετά πιθανό) αλλά το Kdialog μου φάνηκε \"λίγο\" για dialog editor. Οι επιλογές του είναι πολύ λίγες (δηλαδή τα widgets που παρέχει), αλλά πολύ +promising. Έχει μόλις 7 QΤ-widgets, αλλά έχει property editor, και auto-generation του source code. Αν θυμηθούμε βέβαια ότι το Kdevelop είναι ακόμα σε Alpha +έκδοση, και το KDialog παρέχεται μόνο στα snapshots (και όχι στην alpha-release) τα παραπάνω φαίνονται λίγο - πολύ λογικά. + + +### [3. Visual]{#s3} + +Όχι, το KDevelop δεν είναι visual IDE, τουλάχιστον όχι όπως το έμαθα εγώ με την Visual Basic 1.0 του 1992 (το μόνο Visual κάτι που έχω δουλέψει, άρα το μόνο με +το οποίο μπορώ να συγκρίνω). Αν περιμένετε drag and drop δημιουργία dialogs, θα χρειαστεί να περιμένετε μέχρι τουλάχιστον μία beta έκδοση. Από την άλλη μεριά, +για πολύ \"μπερδεμένα\" dialogs μπορείτε να χρησιμοποιήσετε το QTarchitect, και για πολύ απλά, η QT είναι τόσο εύκολη, που μπορείτε να τα φτιάξετε με το +χέρι\... + + +### [4. Τι λείπει\...]{#s4} + +Η μόνη σοβαρή παράλειξη που βρήκα, ήταν ένα CVS τύπου σύστημα, ενσωματωμένο μέσα στο Kdevelop. Πιστεύω ότι σε μετέπειτα εκδόσεις αυτό θα είναι διαθέσιμο, μια +που είναι πολύ σημαντικό εργαλείο για όποιον γράφει κώδικα. + + +### [5. Επίλογος]{#s5} + +Το 1992 δοκίμασα την τότε Visual Basic έκδοση 1.0 Αν και ήξερα δυο τρία πράγματα από Basic, πρέπει να παραδεχτώ ότι είχα χάσει τον μπούσουλα. Ναι μεν έγραφα +προγράμματα, ναι μεν εγώ (νόμιζα ότι) έγραφα τον κώδικα, αλλά και για την παραμικρή αλλαγή έπρεπε να ανοίξω την Visual Basic γιατί δεν καταλάβαινα τι και από +που έπρεπε να το πειράξω\... Με λίγα λόγια, μη γνωρίζοντας όσα έπρεπε για προγραμματισμό, κατάφερα να γράψω έναν file-manager!!! Έτσι, ποτέ δεν ήμουνα υπέρ των +\"Visual κάτι\", γιατί πίστευα ότι \"χαλάνε\" την πιάτσα (και τους μισθούς) των προγραμματιστών (όχι, εγώ ΔΕΝ είμαι προγραμματιστής), δίνοντας την δυνατότητα +στον κάθε άσχετο (όπως εγώ τότε) να φτιάξει κάτι. Αυτό όμως που παρέχει το Kdevelop το εκτίμησα, επειδή απλά μου γλύτωσε 2-3 ώρες που θα έπρεπε να φάω, για να +φτιάξω τα standard αρχεία, τα templates κλπ. Μου \"οργάνωσε\" την δουλειά μου, κάτι πολύ χρήσιμο, τουλάχιστον για μένα!!! Επίσης, μου έδωσε τη δυνατότητα να +μπορώ να ανατρέξω στο documentation της QT εύκολα και γρήγορα, απαιτώντας από εκεί και πέρα από εμένα, να καταλάβω τι είναι αυτά που διαβάζω\... Με λίγα λόγια, +το Kdevelop είναι για προγραμματιστές, ή για όσους σκαμπάζουν δυο-τρία πράγματα. ΔΕΝ είναι για να το πιάσει ένα παιδάκι και να \"γράψει\" μία εφαρμογή. Αν και +πιστεύω ότι στις τελικές εκδόσεις θα φτάσει να είναι ένα τέτοιο πράγμα, (επαναλαμβάνω, δυστυχώς κατ\' εμέ), πάλι θα είναι ένα ισχυρότατο εργαλείο για +προγραμματιστές. Το προτείνω ανεπιφύλακτα στους απανταχού KDE-QT προγραμματιστές, με όσο βάρος μπορεί να έχει η γνώμη ενός hobbίστα προγραμματιστή. + diff --git a/content/articles/15/02_5oTEE.md b/content/articles/15/02_5oTEE.md new file mode 100644 index 0000000..de6facb --- /dev/null +++ b/content/articles/15/02_5oTEE.md @@ -0,0 +1,138 @@ ++++ +title = 'Linux σε σχολεία' +date = '1999-04-01T00:00:00Z' +description = '' +author = 'Βούλα Σανιδά(mailto:voulariba@hellug.gr)' +issue = ['Magaz 15'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Πρόκειται για μια προσπάθεια που έγινε τον Απρίλιο του 1999 από μερικούς linuxάδες να εγκαταστήσουν Linux σε δημόσιο σχολείο με σκοπό να γνωρίσουν οι μαθητές +αυτό το λειτουργικό, το οποίο θεωρούμε ότι είναι το πιο κατάλληλο για εκπαιδευτικούς σκοπούς.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +--------------------------------------- + +**2. Το 5ο ΤΕΕ** +---------------------------------------- + +**3. Συμπεράσματα** +------------------------------------------- + +**4. Υπότιτλοι** +---------------------------------------- + +- [4.1 Το εργαστήριο του σχολείου :](#ss4.1) +- [4.2 Linuxαδες (Μέλη HELLUG και καθηγητές του σχολείου) :](#ss4.2) +- [4.3 Κάποιοι τολμηροί νεοφώτιστοι του 5ου ΤΕΕ:](#ss4.3) + + +### [1. Εισαγωγή]{#s1} + +Τα Τεχνικά Επαγγελματικά Εκπαιδευτήρια (ΤΕΕ) Πληροφορικής, καλύπτουν μέσω των μαθημάτων τους και τομείς όπως : + +- Λειτουργικά Συστήματα (Unix, DOS, Σηματοφορείς, processes, έννοιες περί multi-user, multitasking κλπ) +- Δίκτυα Υπολογιστών +- Internet (ftp, mail, telnet, proxy, firewall, HTML κλπ) +- Γλώσσες (Cobol, Pascal, Basic) +- Εργαστηριακή πρακτική σε όλα τα παραπάνω +- Ανάγκη για σύνδεση με το Internet για εξάσκηση και εξοικείωση των μαθητών. + +Οπως είναι φυσικό, δεδομένου πως τα κονδύλια για τέτοιου τύπου εξοπλισμό είναι ελάχιστα έως και ανύπαρκτα, τα σχολεία υπολειτουργούν και ακόμα και αυτό +θεωρείται επιτυχία των διδασκόντων και του συλλόγου γονέων και κηδεμόνων. Μερικά μαθήματα γίνονται μόνο θεωρητικά ή και καθόλου. + +Για να μπορέσει το σχολείο να αντεπεξέλθει στις απαιτήσεις των μαθημάτων θα πρέπει να επιλέξει γενικά μεταξύ δύο στρατηγικών: + +Κλέβουμε μερικά Windows licenses, NT licenses, ζητάμε από τον Σύλλογο Γονέων και Κηδεμόνων, Δήμο κλπ 300.000 το κεφάλι για αναβάθμιση των PCs ώστε να τρέχουν +Win95 και NT και Visual C++ και Word, Excel, Ppoint και proxy και firewall και Exchange Server και FrontPage και ξεχνάμε έννοιες όπως το telnet, processes. +Πετάμε επίσης παλιά PCs 8086,286, με μια δισκέτα ή δύο που αποτελεί σημαντικό μέρος του εξοπλισμού ενός σχολείου, μια που δεν μπορούμε πια να τον +εκμεταλλευτούμε. Ζητιανεύουμε από εταιρείες να μας \*κάνουν μια τιμή\*, να μας δώσουν τίποτα παλιά τους μηχανήματα, κουτσουρεύουμε και τα μαθήματα, λέμε σε +κανένα μαθητή αν έχει τίποτα κλεψιμαίικα προγραμματάκια \... + +Εξετάζουμε την λύση Linux. Εκμεταλλευόμαστε ότι μηχάνημα υπάρχει, καλύπτουμε όλα τα παραπάνω μαθήματα σε όποιο επίπεδο θέλουμε, βάζουμε επιλεκτικά γραφικά σε +όσα αντέχουν, υποστηρίζουμε Internet για όσα και όποια παιδιά θέλουμε μέσω απλής dial up συνδρομής. Δεν παρακαλούμε, δεν κλέβουμε. Τα ίδια τα παιδιά έχουν μια +ευκαιρία να πειραματιστούν, να μάθουν κάτι ουσιαστικότερο. Η διαχείριση των Η/Υ είναι απλούστερη, μια που δεν αναγκάζονται οι καθηγητές να στήνουν ΚΑΘΕ ΜΕΡΑ όλα +τα PCs που κάποιος μαθητής έσβησε ηθελημένα ή μη. Τα παιδιά που σκοπός είναι να αποφοιτήσουν σαν power users των Η/Υ, γνωρίζουν τις εναλλακτικές λύσεις, τις +διάφορες πλατφόρμες αποκτώντας σφαιρικότερη αντίληψη του χώρου της Πληροφορικής και παύουν να θεωρούν πως Πληροφορική είναι η αποκλειστική ενασχόληση με τον +συνδετήρα του Word. + +Φυσικά, μια τέτοια λύση, όσο ιδανική και να φαίνεται δεν είναι άμεσα εφαρμόσιμη, μια που προϋποθέτει προσωπική ενασχόληση των καθηγητών, αλλαγή πολλών μαθημάτων +(προς το ουσιαστικότερο), \*ταλαιπωρία\* τουλάχιστον στην αρχή, για τους μαθητές, χρόνος για installations, configurations κλπ. Συνεπώς η προσπάθεια αρχικά θα +πρέπει να επικεντρώνεται στην γνωριμία με το Linux, την απενοχοποίησή του (από καθηγητές και μαθητές), στην χρήση του σε τομείς που μέχρι τώρα δεν μπορούσαν να +καλυφθούν καθόλου (λόγω αδυναμίας λοιπών λύσεων, εξοπλισμού) και που δεν υπάρχει εναλλακτική λύση άλλου τύπου και, αν αυτό είναι δυνατό, στην παρότρυνση των +μαθητών να πειραματιστούν σπίτι τους μεταξύ των ατελείωτων ωρών που χάνουν με Lara, Quake (εγκατάσταση Quake Server στο σχολείο έρχεται σε πολύ προχωρημένο +στάδιο) + + +### [2. Το 5ο ΤΕΕ]{#s2} + +Εδώ τα πράγματα ήταν σχετικά έτοιμα μια που το έδαφος είχε προετοιμαστεί κατάλληλα. Το σχολείο Linuxοκρατείται από άποψη καθηγητών (δύο μέλη HELLUG, ένας τρίτος +Linux user και ιδιαίτερα Linux friendly) που είχαν φροντίσει να κάνουν την (γνωστή σε όλους) ιδιαίτερα επίμονη, ψυχοκαταναγκαστική, πλύση εγκεφάλου περί Linux +στους μαθητές. + +Ετσι, μερικά από τα παιδιά του 5ου ΤΕΛ Χαλανδρίου αποφάσισαν **\"εθελοντικά\"** να κουβαλήσουν Σαββατιάτικα τα PCs τους μέσα στην βροχή, στο σχολείο, στον χώρο +του εργαστηρίου Πληροφορικής. Σκοπός ήταν η γνωριμία με το Linux. Το εργαστήριο προσέφερε την αναγκαία υλικοτεχνική υποδομή (πάγκους, ρεύμα, οθόνες, καφές, +πληκτρολόγια, θέρμανση(???) κλπ). + +Από πλευράς μας υπήρχαν 5 Linuxαδες για να βοηθήσουμε στο στήσιμο των Η/Υ επιστρατεύοντας γνώσεις, όρεξη και τα Linux CDs μας. + +Σημείωση: Στο σχολείο έχει ήδη εγκατασταθεί στον κεντρικό server, ένα ακόμα Linux για την υποστήριξη του μαθήματος Internet (σύνδεση και παροχή WWW σελίδων μέσω +του proxy), Δικτύων (telnet, ftp κλπ), Unix (σε περίπτωση που επεκταθεί και σε αυτό το εργαστήριο, μια που το εργαστηριακό μάθημα καλύπτεται σε άλλο εργαστήριο +με -προς το παρόν- SCO). + + +### [3. Συμπεράσματα]{#s3} + +- Ηταν μια καλή περίπτωση για εμάς να μαζευτούμε, να πιούμε έναν καφέ, να στήσουμε μερικά Linuxια και μετά να πάμε για φαγητό. Δηλαδή μια πλήρης μέρα. +- Δεν ξέρουμε πραγματικά τι θα κάνουν με το Linux, αλλά ελπίζουμε να εθιστούν σε αυτό. Στην καλύτερη περίπτωση θα το κρατήσουν και θα ασχοληθούν + συστηματικότερα με αυτό, σε μια μέση περίπτωση θα παίξουν λίγο και θα ευνοηθούν μόνο από πλευράς ευχέρειας σε κάποια μαθήματα, στην χειρότερη θα το + ξεστήσουν αμέσως. Πάντως σίγουρα μάθανε πως υπάρχει μια εναλλακτική λύση. +- Είχαμε συμμετοχή 2 κοριτσιών και μιας μαμάς (ανησυχητικό μια που καταρρέει και ένα από τα τελευταία ανδρικά προπύργια). +- Σαν προκαταρκτικό στάδιο μιας μελλοντικής εκδήλωσης ήταν πολύ χρήσιμο από πλευράς εμπειρίας και συμπερασμάτων. Η οργάνωση ενός installation fest μεγαλύτερης + κλίμακας θέλει ΜΕΓΑΛΗ προετοιμασία (ήδη στα 10 PCs οι πόροι μας σε αριθμό Linux CDs, τελευταίων εκδόσεων X, KDE, gnome, StarOffice κλπ ίσα που μας κάλυψαν + οριακά). +- Η προσπάθεια ήταν πραγματικά εντυπωσιακή μια που δείχνει ότι πολλές φορές τα παιδιά με την κατάλληλη παρότρυνση θέλουν να δοκιμάζουν νέα πράγματα καθώς και + γιατί δημόσια σχολεία με χαμηλό budget και τεχνογνωσία μπορούν να πρωτοπορούν αν υπάρχει θέληση και όρεξη. Ελπίζουμε να βρεθούν μιμητές τόσο από αυτό το + σχολείο και να το επαναλάβουμε, όσο και από άλλα. +- Ελπίζουμε επίσης, ο σύλλογος `HELLUG` να αναλάβει επίσημα δράση στον τομέα αυτό, γιατί εκτός από την τρομακτική εξοικονόμηση κονδυλιών (που τα σχολεία δεν + διαθέτουν) που εξασφαλίζει η δωρεάν φύση του Linux, είναι και το πλέον κατάλληλο Λ.Σ. για εκπαιδευτικούς σκοπούς (Unix, Internet, Γλώσσες, Δίκτυα). + + +### [4. Υπότιτλοι]{#s4} + +Οπως σε όλες τις μεγάλες παραγωγές, ακολουθεί trailer με τα ονόματα των συμμετεχόντων, φωτογραφίες από τα παρασκήνια, και όλες αυτές οι μικρές συλλεκτικές +πληροφορίες. + +### [4.1 Το εργαστήριο του σχολείου :]{#ss4.1} + +![](/15/img/ergastirio.jpg) + +### [4.2 Linuxαδες (Μέλη HELLUG και καθηγητές του σχολείου) :]{#ss4.2} + + ------------------------------- ------------------------------- -------------------------------- ------------------------------- ------------------------------- + \ ![](/15/img/evris_sm.jpg) ![](/15/img/papaioannou_sm.jpg) ![](/15/img/kabrianis_sm.jpg) ![](/15/img/panos_sm.jpg) + ![](/15/img/voula_sm.jpg) + + [Βούλα Σανιδά](/15/img/voula.jpg) [Παπακώστας [Παπαϊωάννου [Καμπριάνης [Παναγιώτης + Ευριπίδης](/15/img/evris.jpg) Δημήτρης](/15/img/papaioannou.jpg) Μιχάλης](/15/img/kabrianis.jpg) Βρυώνης](/15/img/panos.jpg) + ------------------------------- ------------------------------- -------------------------------- ------------------------------- ------------------------------- + +### [4.3 Κάποιοι τολμηροί νεοφώτιστοι του 5ου ΤΕΕ:]{#ss4.3} + + ------------------------------- ------------------------------- ------------------------------- -------------------------------- ------------------------------- + \ ![](/15/img/karla_sm.jpg) ![](/15/img/mama_sm.jpg) ![](/15/img/stavroulakis_sm.jpg) ![](/15/img/pavloudis_sm.jpg) + ![](/15/img/tsiounis_sm.jpg) + + [Τσιούνης (και καθηγητής [Kάρλα Γεωργία](/15/img/karla.jpg) [Mαμά Κάρλας](/15/img/mama.jpg) [Σταυρουλάκης [Παυλούδης + του)](/15/img/tsiounis.jpg) Γιώργος](/15/img/stavroulakis.jpg) Γιώργος](/15/img/pavloudis.jpg) + + ![](/15/img/xristina_sm.jpg) ![](/15/img/martinos_sm.jpg) ![](/15/img/arvanitidis_sm.jpg) ![](/15/img/prothimos_sm.jpg) ![](/15/img/some1_sm.jpg) + + [Σείχ Ουιντάτ [Μαρτίνος [Αρβανιτίδης [Προσοχή τι γράφει η [Μερικοί](/15/img/some1.jpg) + Χριστίνα](/15/img/xristina.jpg) Αλέξανδρος](/15/img/martinos.jpg) Φώτης](/15/img/arvanitidis.jpg) καρέκλα](/15/img/prothimos.jpg) + ------------------------------- ------------------------------- ------------------------------- -------------------------------- ------------------------------- + diff --git a/content/articles/15/03_digital2000.md b/content/articles/15/03_digital2000.md new file mode 100644 index 0000000..57a58cb --- /dev/null +++ b/content/articles/15/03_digital2000.md @@ -0,0 +1,839 @@ ++++ +title = 'ΕΞΕΛΙΞΗ PRO-2000' +date = '1999-04-01T00:00:00Z' +description = '' +author = 'DIGITAL SYSTEMS LTD(mailto:dsm2000@usa.net)' +issue = ['Magaz 15'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Παρουσίαση του εμπορικού προγράμματος ΕΞΕΛΙΞΗ PRO-2000 της DIGITAL SYSTEMS LTD* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**ΠΡΟΓΡΑΜΜΑΤΑ DIGITAL SYSTEMS** + +**Εμπορικό πρόγραμμα\ +ΕΞΕΛΙΞΗ ΕΜΠΟΡΙΟ (Βασικό πακέτο)** + +Πλήρες εμπορικό πρόγραμμα της DIGITAL SYSTEMS που περιλαμβάνει: Διαχείριση Πελατών, Παραγγελίες και Παραστατικά Πωλήσεων, Αξιόγραφα Πελατών, Στατιστικά +Πωλήσεων, Διαχείριση Προμηθευτών, Παραγγελίες και Παραστατικά Προμηθευτών, Αξιόγραφα Προμηθευτών, Εμπορικές Αποθήκες, Report Generation, Γενικά και Βοηθητικά +Προγράμματα. + +**Βιομηχανικό πρόγραμμα\ +ΕΞΕΛΙΞΗ ΒΙΟΜΗΧΑΝΙΑ (Βασικό πακέτο)** + +Πλήρες βιομηχανικό πρόγραμμα της DIGITAL SYSTEMS που περιλαμβάνει: Διαχείριση Πελατών, Παραγγελίες και Παραστατικά Πωλήσεων, Αξιόγραφα Πελατών, Στατιστικά +Πωλήσεων, Διαχείριση Προμηθευτών, Παραγγελίες και Παραστατικά Προμηθευτών, Αξιόγραφα Προμηθευτών, Εμπορικές, Αναλυτικές και Συγκεντρωτικές Αποθήκες, Report +Generation, Γενικά και Βοηθητικά Προγράμματα. + +**Λογιστικό Πρόγραμμα\ +ΕΞΕΛΙΞΗ Λογιστική** + +Πλήρες λογιστικό πρόγραμμα της DIGITAL SYSTEMS που περιλαμβάνει: Γενική Λογιστική, Κατάσταση Φ.Π.Α, Ισολογισμός, Report Generation. + +**Αναλυτική Λογιστική\ +ΕΞΕΛΙΞΗ Αναλυτική Λογιστική** + +Βιομηχανικό πρόγραμμα διαχείρισης της ομάδας 9 του λογιστικού σχεδίου, της DIGITAL SYSTEMS που περιλαμβάνει: Αναλυτική Λογιστική, Διαχείριση Παγίων, Ειδικά +Προγράμματα, Report Generation. + +**Μισθοδοσία ΕΞΕΛΙΞΗ\ +Αυτόματη Μισθοδοσία** + +Πλήρες πρόγραμμα μισθοδοσίας της DIGITAL SYSTEMS που περιλαμβάνει: Μισθοδοσία, Διαχείριση Προσωπικού, Μηχανογραφικό Ι.Κ.Α., Report Generation. + +**Στατιστικά και Γραφήματα\ +DS Graphs Plus** + +Πρόγραμμα της DIGITAL SYSTEMS που περιλαμβάνει: Στατιστικά-Γραφήματα Λογαριασμών Γενικής Λογιστικής, Ειδών Αποθήκης και Παραστατικών Πωλήσεων, Γενικά +Προγράμματα, Συνθηματικά. + +**Χρηματοοικονομικό Πρόγραμμα\ +DS Cash Flow** + +Εύκολη αλλά ουσιαστική διαχείριση οικονομικών. Προβλέπει τα διαθέσιμά σας και σας προειδοποιεί πότε και ποιες δοσοληψίες πρέπει να γίνουν. Προαιρετική σύνδεση +με εμπορικά προγράμματα. + +**Τουριστικό Πρόγραμμα\ +DS Travel** + +Τουριστικό Πρόγραμμα για ταξιδιωτικά γραφεία, εισερχόμενου και εξερχόμενου τουρισμού\ +Διαχειρίζεται εύκολα τις προσφορές που δημιουργούν τα τουριστικά γραφεία και τις υπηρεσίες που τους παρέχουν οι προμηθευτές τους + +**ΤΕΧΝΙΚΕΣ ΠΡΟΔΙΑΓΡΑΦΕΣ ΕΞΕΛΙΞΗ PRO** + +**1. Το πρόγραμμα:** +-------------------------------------------------- + +**2. Πωλήσεις** +--------------------------------------------- + +- [2.1 ΠΕΛΑΤΕΣ](#ss2.1) +- [2.2 ΠΑΡΑΓΓΕΛΙΟΛΗΨΙΑ (ΧΟΝΔΡΙΚΗ - ΛΙΑΝΙΚΗ) ΠΑΡΑΣΤΑΤΙΚΑ](#ss2.2) +- [2.3 ΔΙΑΧΕΙΡΙΣΗ ΑΞΙΟΓΡΑΦΩΝ](#ss2.3) +- [2.4 ΣΤΑΤΙΣΤΙΚΗ ΠΩΛΗΣΕΩΝ](#ss2.4) +- [2.5 ΑΛΛΗΛΟΓΡΑΦΙΑ ΠΕΛΑΤΩΝ](#ss2.5) + +**3. Αγορές** +------------------------------------------- + +- [3.1 ΠΡΟΜΗΘΕΥΤΕΣ](#ss3.1) +- [3.2 ΠΑΡΑΓΓΕΛΙΟΔΟΣΙΑ - ΠΑΡΑΣΤΑΤΙΚΑ](#ss3.2) + +**4. Αποθήκες** +--------------------------------------------- + +- [4.1 ΔΙΑΧΕΙΡΙΣΗ ΑΠΟΘΗΚΩΝ](#ss4.1) +- [4.2 ΣΥΓΚΕΝΤΡΩΤΙΚΕΣ ΑΠΟΘΗΚΕΣ](#ss4.2) +- [4.3 ΠΑΡΑΓΩΓΗ](#ss4.3) +- [4.4 ΑΠΟΓΡΑΦΗ](#ss4.4) + +**5. Μισθοδοσία και Προσωπικό** +------------------------------------------------------------- + +- [5.1 ΜΙΣΘΟΔΟΣΙΑ](#ss5.1) +- [5.2 ΜΗΧΑΝΟΓΡΑΦΙΚΟ ΙΚΑ](#ss5.2) +- [5.3 ΔΙΑΧΕΙΡΙΣΗ ΠΡΟΣΩΠΙΚΟΥ](#ss5.3) +- [5.4 ΕΞΟΜΕΙΩΤΕΣ ΜΗΧΑΝΗΜΑΤΩΝ ΩΡΟΜΕΤΡΗΣΗΣ](#ss5.4) + +**6. Λογιστική** +---------------------------------------------- + +- [6.1 ΓΕΝΙΚΗ ΛΟΓΙΣΤΙΚΗ](#ss6.1) +- [6.2 ΛΟΓΙΣΤΙΚΗ ΕΣΟΔΩΝ-ΕΞΟΔΩΝ](#ss6.2) +- [6.3 ΔΙΑΧΕΙΡΙΣΗ ΠΑΓΙΩΝ](#ss6.3) +- [6.4 ΑΝΑΛΥΤΙΚΗ ΛΟΓΙΣΤΙΚΗ](#ss6.4) + +**7. Γενικά** +------------------------------------------- + +- [7.1 ΣΥΝΘΗΜΑΤΙΚΑ](#ss7.1) +- [7.2 ΕΜΠΟΡΙΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ](#ss7.2) +- [7.3 ΔΙΑΧΕΙΡΙΣΤΗΣ ΚΑΤΑΣΤΑΣΕΩΝ](#ss7.3) +- [7.4 DS Travel](#ss7.4) +- [7.5 DS Cash Flow](#ss7.5) +- [7.6 DS Ασφάλειες - Πραγματογνωμοσύνες](#ss7.6) + +**8. Ενδεικτικές Τιμές** +------------------------------------------------------ + +**9. Επικοινωνία** +------------------------------------------------ + + +### [1. Το πρόγραμμα:]{#s1} + +1. Διαχειρίζεται πολλαπλές εταιρίες, αποθήκες, λογιστικά σχέδια, νομίσματα, φόρους, λειτουργεί σε πολλά λειτουργικά συστήματα, σε πολλαπλές οθόνες, εκτυπωτές, + με πολλαπλές δικλείδες ασφάλειας και είναι σχεδιασμένο για να χρησιμοποιείται από πολλούς χρήστες. +2. Διαχειρίζεται μέχρι εικοσιτέσσερις (24) λογιστικές χρήσεις (δύο ταυτόχρονες). +3. Είναι απλούστατο στη χρήση παρά το μέγεθός του (Ο χειρισμός του γίνεται μόνο από οκτώ πλήκτρα και κάθε φορά φαίνονται μόνο τα κατάλληλα) +4. Αποτελείται από ανεξάρτητα και συνεργαζόμενα συστήματα προγραμμάτων (έτσι μπορείτε να ξεκινήσετε με τα απολύτως απαραίτητα). +5. Προφυλάσσει από λάθη με πολλαπλές δικλείδες ασφάλειας (συνθηματικά χρηστών) και αυτόματους ελέγχους λαθών. +6. Είναι on line - real time. +7. Λειτουργεί σε διαφορετικά λειτουργικά συστήματα χωρίς να απαιτείται η γνώση τους από τους χειριστές του Η/Υ, γιατί εμπεριέχει εντολές του εκάστοτε + λειτουργικού στα Ελληνικά. +8. Ορίζει αυτόματα τα αρχεία που απαιτούνται και τα φροντίζει μόνο του. +9. Αξιοποιεί πλήρως τις δυνατότητες του υπολογιστή σας και έτσι δεν χρειάζεται να σπαταλήσετε μια περιουσία σε hardware. +10. Ο σχεδιασμός των εντύπων των παραστατικών σας είναι παραμετρικός και έτσι μπορείτε να τυπώσετε σε πολλά και διαφορετικά έντυπα (ακόμα και σε εκείνα του + προηγούμενου προγράμματός σας). +11. Αναγνωρίζει αυτόματα οποιαδήποτε οθόνη και εκτυπωτή (χρώματα, μεγέθη κλπ). +12. Προεκτυπώνει στην οθόνη ή τυπώνει, σε εκτυπωτή της αρεσκείας σας. +13. Έχει συμπληρωματικές κωδικοποιήσεις για εύκολη και γρήγορη αναζήτηση πληροφοριών, μέσω ειδικών \"παραθύρων\" βοήθειας (help windows). +14. Συνεργάζεται και με άλλα δημοφιλή προγράμματα μέσω σταθερών προδιαγραφών (ASCII). +15. Απόλυτα σύμφωνο με τον νέο ΚΒΣ. +16. Μεταφέρει αρχεία μεταξύ λειτουργικών συστημάτων UNIX σε WINDOWS. +17. Αποστέλλει με FAX όλες τις εκτυπώσεις σας. +18. Προσφέρει ενσωματωμένα συστήματα Αλληλογραφίας (Μελλοντικών πελατών, Επιστολογράφος, Ετικετογράφος) και ανά σύστημα Διαχειριστή καταστάσεων (Report Handler) + για εκτύπωση ή επίδειξη καταστάσεων δικών σας επιλογών. +19. Ενημερώνεται και εξελίσσεται συνεχώς από τους άριστους τεχνικούς επιστήμονες της Digital Systems. +20. Κατάλληλο για διαφορετικές επιχειρήσεις, επιπλέον ΕΠΙΔΕΧΕΤΑΙ αλλαγές για να έρθει 100% στα μέτρα της δικής σας επιχείρησης. +21. Διαθέτει οδηγό χειρισμού (User\'s Guide) και επιπλέον την εγγύηση της Digital Systems. + + +### [2. Πωλήσεις]{#s2} + +### [2.1 ΠΕΛΑΤΕΣ]{#ss2.1} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί λογιστικά και όχι μόνο, τους πελάτες μιας επιχείρησης. + +**Βασικές δυνατότητες του είναι:** + +: - Διαχειρίζεται τους πελάτες μιας ή περισσοτέρων εταιριών. + - Κωδικός πελάτη με 4 ψηφία και συμπληρωματικά έως και 10 κωδικούς αναζήτησης. + - Τήρηση πλήθους στοιχείων κάθε πελάτη π.χ. Επωνυμίες, Α.Φ.Μ, Διευθύνσεις, τηλέφωνα, fax, πλήρη στοιχεία υποκαταστημάτων, σχόλια με δυνατότητα να τυπωθούν + στα παραστατικά κλπ. + - Αναζήτηση πελάτη ή πελατών με κωδικούς, επωνυμίες, ή ομαδοποιήσεις με ταυτόχρονη εμφάνιση ισοζυγίου επιλεγμένων. + - Δυνατότητα παγώματος και επαναφοράς καρτέλας. + - Δυνατότητα παραμετρικού ορισμού των κινήσεων των πελατών και καθορισμού της τιμολογιακής πολιτικής. + - Ισοζύγια αναλυτικά και συνοπτικά, με πολλαπλές αναζητήσεις σε οποιεσδήποτε χρονικές περιόδους, με δυνατότητα εξαίρεσης πελατών με μηδενικό υπόλοιπο. + - Ημερολόγια κίνησης σε οποιαδήποτε χρονική περίοδο. + - Αυτόματη αντιστοίχηση χρεώσεων πιστώσεων (open item) με κινητή ημερομηνία αναφοράς, που ορίζει ο χρήστης. + - Τήρηση υποκαταστημάτων με ξεχωριστές ή μη καρτέλες. + - Αναλυτικά καθολικά με πολλαπλές αναζητήσεις σε οποιεσδήποτε χρονικές περιόδους, με δυνατότητα εξαίρεσης πελατών χωρίς κίνηση. + - Αναλυτικό καθολικό open item με πολλαπλές αναζητήσεις με δυνατότητα εξαίρεσης πελατών χωρίς κίνηση. + - Ενηλικίωση υπόλοιπου σε μεταβλητές χρονικές περιόδους με όλα τα ανοικτά τιμολόγια, τις άληκτες συναλλαγματικές και τις μεταχρονολογημένες επιταγές. + - Χρηματοδότηση πελατών και τοκισμός υπόλοιπου με πλήθος κριτηρίων σε οποιεσδήποτε χρονικές περιόδους. + +**Ακόμα :** + +: - Παράλληλη χρήση δύο ετών. + - Επίδειξη αναλυτικά των παραστατικών ενώ βλέπετε την καρτέλα πελάτη. + - Στατιστική πωλήσεων διάφορων χρονικών περιόδων με πλήθος κριτηρίων επιλογής. + - Απόλυτα σύμφωνο με τον νέο Κ.Β.Σ. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα π.χ. Αξιόγραφα, Γενική Λογιστική, Στατιστική Πωλήσεων, Αλληλογραφία. + - Ενσωματωμένος πανίσχυρος επεξεργαστής καταστάσεων (report handler) για να δημιουργήσετε οποιαδήποτε κατάσταση δεν αναφέραμε. + +**'λλες διαθέσιμες πληροφορίες :** + +: - Τρέχον υπόλοιπο, Χρεώσεις Πιστώσεις σε περιόδους ή προοδευτικά, Πωλήσεις, Κόστος Πωληθέντων, Προμήθειες, Μικτό κέρδος πωληθέντων σε χρονικές περιόδους. + - Χρεώσεις - πιστώσεις - υπόλοιπα απογραφής, μήνα, έτους, προοδευτικά. + - Τελευταίες ημερομηνίες πώλησης και πληρωμής + - Επιστροφές - εκπτώσεις κλπ. + +### [2.2 ΠΑΡΑΓΓΕΛΙΟΛΗΨΙΑ (ΧΟΝΔΡΙΚΗ - ΛΙΑΝΙΚΗ) ΠΑΡΑΣΤΑΤΙΚΑ]{#ss2.2} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί γρήγορα, εύκολα και φιλικά την παρακολούθηση των παραγγελιών, την έκδοση μηχανογραφημένων παραστατικών και την +εύκολη καταχώρηση χειρόγραφων παραστατικών. + +**Βασικές δυνατότητες του συστήματος είναι:** + +: - Εύκολη διαχείριση παραγγελιών και έκδοση οποιουδήποτε παραστατικού. π.χ. Τιμολόγιο, Δελτίο Αποστολής, Παραγγελία, Αποδείξεις Λιανικής, Προτιμολόγιο, + Προσφορά κλπ. + - Αυτόματος μετασχηματισμός μιας ή περισσότερων παραγγελιών σε οποιοδήποτε παραστατικό. + - Δυνατότητα Τιμολόγησης κατά την λήψη της παραγγελίας ή αργότερα. + - Επιπλέον συγκέντρωση παραστατικών, π.χ. Δελτίων Αποστολής σε ένα Τιμολόγιο, με σύγχρονη αναπροσαρμογή των τιμών και του ορίου πίστωσης. + - Μαζική ή ομαδική εκτύπωση παραστατικών με κριτήρια δρομολόγησης και με επί πλέον δυνατότητα από Δελτία Αποστολής εκτύπωσης Τιμολογίων ή Δελτίων Λιανικής + Πώλησης κ.τ.λ. + - Δυνατότητα εισαγωγής χειρόγραφων παραστατικών με σύγχρονη επέμβαση στις αξίες. + - Δυνατότητα επιλογής της εκπτωτικής πολιτικής σας μεταξύ των έξι διαφορετικών τιμών είδους, της κλιμάκωσης τιμών και εκπτώσεων βάσει ποσοτήτων κατηγορίας + πελάτη και κατηγορίας είδους και της έκπτωσης (δραχμικής ή ποσοστιαίας) τη στιγμή της τιμολόγησης. + - Δυνατότητα αυτόματης καταχώρησης απόδειξης είσπραξης στην καρτέλα του πελάτη. + - Διαρκής παρακολούθηση του ορίου πίστωσης και του υπόλοιπου του πελάτη τη στιγμή της τιμολόγησης. + - Σκοπός διακίνησης, τόπος αποστολής, τόπος παράδοσης. + - Διαχείριση υποκαταστημάτων με πλήρη στοιχεία, εναλλακτική διεύθυνση παράδοσης. + - Επίδειξη χονδρικής τιμής και μικτού κέρδους ανά είδος, την στιγμή καταχώρησης της παραγγελίας. + - Αυτόματη προειδοποίηση σε περίπτωση που οι διαθέσιμες ποσότητες δεν επαρκούν ή υπολείπονται του ορίου ασφάλειας αποθέματος, με σύγχρονη δέσμευση του + υπόλοιπου. + - Δυνατότητα καταχώρησης νέου πελάτη ή είδους και επίδειξη της κίνησής τους τη στιγμή της έκδοσης παραστατικών. + - Διαχείριση ειδών σαν φόρους και χαρτόσημα. + - Ακυρωτικό παραστατικό ΚΒΣ. + - Ημερολόγια πωλήσεων και πωλητών σε οποιαδήποτε χρονική περίοδο με επιλογή του είδους του παραστατικού. + +**Ακόμα:** + +: - Κάλυψη του Φ.Π.Α ή άλλων φόρων σε όλες τις περιπτώσεις πωλήσεων (Χονδρική/Λιανική με ή χωρίς φόρο, Φ.Π.Α. νήσων, ΤΑΤ, ειδικούς φόρους κλπ). + - Παραμετρικές εκτυπώσεις παραστατικών σε έναν ή περισσότερους εκτυπωτές και σε ίδιες ή διαφορετικές φόρμες (σχήμα ή γραμμογράφηση). + - Δυνατότητα εκτύπωσης παραστατικών με πολλαπλές σειρές έκδοσης και σε πολλαπλές σελίδες, με σελιδοποίηση. + - Fast entry λιανικής πώλησης + - Συσκευασίες με αυτόματο υπολογισμό. + - Αναζήτηση παραστατικών ανά πελάτη, είδος ή πωλητή για οποιαδήποτε χρονική περίοδο. + - Πλήθος άλλες εκτυπώσεις συγκεντρωτικές ή αναλυτικές με πολλούς τρόπους αναζήτησης των παραστατικών. + - Τιμολόγηση με bar-codes. + - Επανεκτύπωση παραστατικών. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα όπως : Διαχείριση Πελατών, Διαχείριση Προμηθευτών, Αποθήκες, Στατιστική Πωλήσεων, Γενική + Λογιστική. + - Ελεύθερη εισαγωγή κειμένου σε οποιοδήποτε παραστατικό. + +### [2.3 ΔΙΑΧΕΙΡΙΣΗ ΑΞΙΟΓΡΑΦΩΝ]{#ss2.3} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί γρήγορα, εύκολα και φιλικά τις μεταχρονολογημένες επιταγές και τις συναλλαγματικές μιας επιχείρησης. + +Χωρίζεται σε δύο τμήματα Πελατών και Προμηθευτών που διαχειρίζονται τα εισπρακτέα και τα πληρωτέα αντίστοιχα. + +**Βασικές δυνατότητες του είναι:** + +: - Αυτόματη ενημέρωση της καρτέλας των πελατών ή των προμηθευτών στα αντίστοιχα συστήματα τους. + - Κινήσεις αξιόγραφων σε προμηθευτές, τράπεζες κλπ. με ημερομηνία μεταβίβασης καθώς και δραχμική παρακολούθηση εξόδων (δικά μας ή όχι). + - Αναλυτικά ληξιάρια με πλήθος κριτηρίων σε ορισμένο χρονικό διάστημα. + - Ημερολόγια κίνησης αξιόγραφων. + - Συνοπτικό ληξιάριο με ανάλυση του δωδεκαμήνου. + - Αναλυτικό ληξιάριο πελατών σε ορισμένο χρονικό διάστημα. + - Εκτύπωση βιβλίου επιταγών και συναλλαγματικών. + - Εύκολη αναζήτηση αξιόγραφων βάσει της κατάστασης τους και των μεταβιβάσεων του. π.χ. ανεξόφλητα στο χαρτοφυλάκιο, σε τράπεζα για εγγύηση, διαμαρτυρημένα + κλπ. + +**Ακόμα:** + +: - Ταυτόχρονη τήρηση δύο χρήσεων. + - Πλήρη στοιχεία αξιόγραφου π.χ. ημερομηνίες έκδοσης, λήξης, στοιχεία τράπεζας, στοιχεία πελάτη ή προμηθευτή και στοιχεία εκδότη κλπ. + - Για κάθε κίνηση αξιόγραφων ημερομηνία, αιτιολογία, έξοδα κλπ. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα όπως: Διαχείριση Πελατών και Διαχείριση Προμηθευτών. + - Ενσωματωμένος πανίσχυρος επεξεργαστής καταστάσεων (report handler) για να δημιουργήσετε οποιαδήποτε κατάσταση δεν αναφέραμε. + +### [2.4 ΣΤΑΤΙΣΤΙΚΗ ΠΩΛΗΣΕΩΝ]{#ss2.4} + +Το σύστημα αυτό σχεδιάστηκε για τις επιχειρήσεις που θέλουν γρήγορα, εύκολα, φιλικά και αξιόπιστα να παίρνουν σωστές αποφάσεις για τους μελλοντικούς στόχους +τους. + +**Βασικές δυνατότητες του είναι:** + +: - Πλήρης αναλυτική τήρηση των Πωλήσεων τους τελευταίους 25 μήνες. + - Ανάλυση πωλήσεων ανά πελάτη σε ποσότητα και αξία (ειδών ή ομάδων ειδών) για οποιαδήποτε χρονική περίοδο στο τρέχον έτος και αυτόματη σύγκριση με την + αντίστοιχη περυσινή περίοδο. (συγκεντρωτικά και αναλυτικά). + - Ανάλυση πωλήσεων ανά είδος ή ομάδα ειδών, σε ποσότητα και αξία για οποιαδήποτε χρονική περίοδο στο τρέχον έτος και αυτόματη σύγκριση με την αντίστοιχη + περυσινή περίοδο. + - Πωλήσεις του τελευταίου δωδεκαμήνου σε ποσότητες και αξίες. + - Αξιολόγηση ειδών με βάση τις πωλήσεις του τρέχοντος έτους και αυτόματη σύγκριση - απόκλιση με πέρυσι. + - Αξιολόγηση πελατών με βάση τον παραμετρικά οριζόμενο τζίρο για οποιαδήποτε χρονική περίοδο στο τρέχον έτος και αυτόματη σύγκριση - απόκλιση με την + περυσινή. + - Αξιολόγηση ομάδων ειδών με βάση τις παραμετρικά οριζόμενες πωλήσεις για οποιαδήποτε χρονική περίοδο στο τρέχον έτος και αυτόματη σύγκριση - απόκλιση με + την περυσινή. + +**Ακόμα:** + +: - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση από άλλα συστήματα όπως: Διαχείριση Πελατών, Αποθήκες, Παραγγελιοληψία Παραστατικά. + +### [2.5 ΑΛΛΗΛΟΓΡΑΦΙΑ ΠΕΛΑΤΩΝ]{#ss2.5} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί την συγγραφή και την αποστολή επιστολών στους πελάτες μας. + +- Αυτόματη προετοιμασία και εκτύπωση υπενθυμιστικών και άλλων επιστολών στους πελάτες. +- Πλήθος κριτηρίων επιλογής των πελατών. +- Συγχώνευση πληροφοριών τη στιγμή της εκτύπωσης τους (mail merge). +- Εκτύπωση αυτοκόλλητων ετικετών με οριζόμενες διαστάσεις από τον χρήστη. +- Συνεργάζεται με το σύστημα Πελατών. + + +### [3. Αγορές]{#s3} + +### [3.1 ΠΡΟΜΗΘΕΥΤΕΣ]{#ss3.1} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί λογιστικά και όχι μόνο τους προμηθευτές μιας επιχείρησης. + +**Βασικές δυνατότητες του είναι:** + +: - Διαχειρίζεται τους προμηθευτές μιας ή περισσότερων εταιριών. + - Κωδικός προμηθευτή με 4 ψηφία και συμπληρωματικά έως και 10 κωδικούς αναζήτησης. + - Τήρηση πλήθους στοιχείων κάθε προμηθευτή π.χ. Επωνυμίες, Α.Φ.Μ, Διευθύνσεις, τηλέφωνα, fax κλπ. + - Αναζήτηση προμηθευτή ή προμηθευτών με κωδικούς, επωνυμίες, ή ομαδοποιήσεις με ταυτόχρονη εμφάνιση ισοζυγίου επιλεγμένων. + - Δυνατότητα παγώματος και επαναφοράς καρτέλας + - Δυνατότητα παραμετρικού ορισμού των κινήσεων των προμηθευτών. + - Ισοζύγια αναλυτικά και συνοπτικά, με πολλαπλές αναζητήσεις σε οποιεσδήποτε χρονικές περιόδους, με δυνατότητα εξαίρεσης προμηθευτών με μηδενικό υπόλοιπο. + - Ημερολόγια κίνησης σε οποιαδήποτε χρονική περίοδο. + - Αυτόματη αντιστοίχηση χρεώσεων πιστώσεων (open item) με κινητή ημερομηνία αναφοράς, που ορίζει ο χρήστης. + - Αναλυτικά καθολικά με πολλαπλές αναζητήσεις σε οποιεσδήποτε χρονικές περιόδους, με δυνατότητα εξαίρεσης προμηθευτών χωρίς κίνηση. + - Αναλυτικό καθολικό open item με πολλαπλές αναζητήσεις με δυνατότητα εξαίρεσης προμηθευτών χωρίς κίνηση. + - Τήρηση υποκαταστημάτων με ξεχωριστές ή μη καρτέλες. + - Ενηλικίωση υπόλοιπου σε μεταβλητές χρονικές περιόδους με όλα τα ανοικτά τιμολόγια, τις άληκτες συναλλαγματικές και τις μεταχρονολογημένες επιταγές. + - Χρηματοδότηση από τους προμηθευτές και τοκισμός υπόλοιπου με πλήθος κριτηρίων σε οποιεσδήποτε χρονικές περιόδους. + +**Ακόμα :** + +: - Παράλληλη χρήση δύο ετών. + - Επίδειξη αναλυτικά των παραστατικών ενώ βλέπετε την καρτέλα προμηθευτή. + - Στατιστική πωλήσεων διαφόρων χρονικών περιόδων με πλήθος κριτηρίων επιλογής. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα π.χ. Αξιόγραφα, Γενική Λογιστική. + - Ενσωματωμένος πανίσχυρος επεξεργαστής καταστάσεων (report handler) για να δημιουργήσετε οποιαδήποτε κατάσταση δεν αναφέραμε. + +**'λλες διαθέσιμες πληροφορίες:** + +: - Τρέχον υπόλοιπο, Χρεώσεις Πιστώσεις σε περιόδους ή προοδευτικά, Αγορές, σε χρονικές περιόδους. + +### [3.2 ΠΑΡΑΓΓΕΛΙΟΔΟΣΙΑ - ΠΑΡΑΣΤΑΤΙΚΑ]{#ss3.2} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί γρήγορα, εύκολα και φιλικά την καταχώρηση χειρόγραφων παραστατικών. + +**Βασικές δυνατότητες του συστήματος είναι:** + +: - Εύκολη καταχώρηση οποιουδήποτε παραστατικού, π.χ. Τιμολόγιο, Δελτίο Αποστολής, Παραγγελία κλπ. με σύγχρονη επέμβαση στις αξίες. + - Επιπλέον συγκέντρωση παραστατικών, π.χ. Δελτίων Αποστολής σε ένα Τιμολόγιο, με σύγχρονη αναπροσαρμογή των τιμών. + - Δυνατότητα αυτόματης καταχώρησης απόδειξης είσπραξης στην καρτέλα του προμηθευτή. + - Διαρκής παρακολούθηση του ορίου πίστωσης του προμηθευτή τη στιγμή της τιμολόγησης. + - Δυνατότητα καταχώρησης νέου προμηθευτή ή είδους και επίδειξη της κίνησής τους τη στιγμή της έκδοσης παραστατικών. + - Διαχείριση ειδών σαν φόρους, χαρτόσημα και εξόδων με Φ.Π.Α μη εκπιπτόμενο. + - Ακυρωτικά σημειώματα ΚΒΣ + - Ημερολόγια αγορών σε οποιαδήποτε χρονική περίοδο με επιλογή του είδους του παραστατικού. + +**Ακόμα:** + +: - Κάλυψη του Φ.Π.Α ή άλλων φόρων σε όλες τις περιπτώσεις αγορών (με ή χωρίς φόρο, Φ.Π.Α. νήσων κλπ). + - Παραμετρικές εκτυπώσεις παραστατικών σε έναν ή περισσότερους εκτυπωτές και σε ίδιες ή διαφορετικές φόρμες (σχήμα ή γραμμογράφηση). + - Δυνατότητα εκτύπωσης παραστατικών με πολλαπλές σειρές έκδοσης και σε πολλαπλές σελίδες, με σελιδοποίηση. + - Αναζήτηση παραστατικών ανά προμηθευτή, είδος για οποιαδήποτε χρονική περίοδο. + - Πλήθος άλλες εκτυπώσεις συγκεντρωτικές ή αναλυτικές με πολλούς τρόπους αναζήτησης των παραστατικών. + - Επανεκτύπωση παραστατικών. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα όπως : Διαχείριση Προμηθευτών, Αποθήκες, Γενική Λογιστική. + - Ελεύθερη εισαγωγή κειμένου σε οποιοδήποτε παραστατικό. + + +### [4. Αποθήκες]{#s4} + +### [4.1 ΔΙΑΧΕΙΡΙΣΗ ΑΠΟΘΗΚΩΝ]{#ss4.1} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί γρήγορα, εύκολα και φιλικά τα αποθεματικά υπόλοιπα για έτοιμα, πρώτες και βοηθητικές ύλες, υλικά συσκευασίας κλπ +σε πολλαπλούς αποθηκευτικούς χώρους και με πλήθος αποτιμήσεων. + +**Βασικές δυνατότητες του συστήματος είναι:** + +: - Διαχειρίζεται πολλαπλές αποθήκες μιας ή περισσότερων εταιριών. + - Κωδικός είδους με ελεύθερη δόμηση 1 με 15 ψηφία, και συμπληρωματικά 6 κωδικούς. + - Τήρηση πλήθους στοιχείων για κάθε είδος, π.χ. περιγραφή (45 χαρ.) προέλευση, συμπληρωματικές πληροφορίες, διάφορες ημερομηνίες, τιμές κλπ. + - Πολλαπλές ομαδοποιήσεις των ειδών σε κατηγορίες, υποκατηγορίες και ομάδες + - Αναζήτηση είδους ή ειδών με κωδικούς, περιγραφές, ομαδοποιήσεις ή μάσκα για ανεύρεση παρεμφερών ειδών, με ταυτόχρονη εμφάνιση ισοζυγίου διαθέσιμων των + επιλεγμένων. + - Δυνατότητα παγώματος και επαναφοράς, καρτέλας ειδών. + - Εύκολος και παραμετρικός ορισμός κινήσεων και του τρόπου ενημέρωσης των αρχείων, με μόνη την διάκρισή τους σε κατηγορίες. π.χ. Αγορές Πωλήσεις, + Εσωτερικές Διακινήσεις, Λογιστικές κινήσεις κλπ. + - Αποτίμηση των ειδών με πέντε (5) διαφορετικούς τρόπους (τελευταία τιμή κτήσης, μέσο σταθμικό κόστος, τιμή αντικατάστασης, FIFO και LIFO) οριζόμενους από + τον χρήστη. + - Ισοζύγια, αναλυτικά και συνοπτικά, αποθηκών με πολλαπλές αναζητήσεις σε οποιεσδήποτε χρονικές περιόδους, με ταυτόχρονη αποτίμηση και με δυνατότητα + εξαίρεσης ειδών με μηδενικό υπόλοιπο. + - Ημερολόγια κίνησης σε οποιαδήποτε χρονική περίοδο και με ελευθερία επιλογής Αγορών, Πωλήσεων, Εσωτερικής Διακίνησης αποθηκών. + - Αναλυτικά καθολικά με πολλαπλές αναζητήσεις σε οποιεσδήποτε χρονικές περιόδους, με ταυτόχρονη αποτίμηση ποσοτήτων και με δυνατότητα εξαίρεσης ειδών + χωρίς κίνηση. + - Απόθεμα ασφάλειας αυτόματα και προειδοποίηση για χαμηλό απόθεμα στα είδη. + - Δυνατότητα και αξιοποίηση Φ.Π.Α. ή τυχόν άλλων φόρων. + - Δυνατότητα επιλογής της εκπτωτικής πολιτικής σας μεταξύ των έξι (6) διαφορετικών τιμών είδους, της κλιμάκωσης τιμών και εκπτώσεων βάσει ποσοτήτων, + κατηγορίας πελάτη και κατηγορίας είδους και της έκπτωσης τη στιγμή της τιμολόγησης. + - Ποσότητα τιμολόγησης και ποσότητα συσκευασίας, αυτόματα υπολογίσιμη και προσαρμόσιμη τη στιγμή της τιμολόγησης. + +**Ακόμα:** + +: - Τιμοκατάλογοι αποθηκών με πλήθος κριτηρίων επιλογής. + - Παράλληλη χρήση δύο ετών. + - Στατιστική πωλήσεων διάφορων χρονικών περιόδων με πλήθος κριτηρίων επιλογής. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα π.χ. Γενική Λογιστική, Παραγγελίες, Στατιστική Πωλήσεων. + - Ενσωματωμένος πανίσχυρος επεξεργαστής καταστάσεων (report handler) για να δημιουργήσετε οποιαδήποτε κατάσταση δεν αναφέραμε. + +**'λλες πληροφορίες** + +: - Εισαγωγές - Εξαγωγές σε περιόδους ή προοδευτικά. + - Πωλήσεις, Κόστος Πωληθέντων, Προμήθειες, Μικτό κέρδος πωληθέντων σε χρονικές περιόδους. + - Τελευταία τιμή πώλησης, αγοράςκλπ. + +### [4.2 ΣΥΓΚΕΝΤΡΩΤΙΚΕΣ ΑΠΟΘΗΚΕΣ]{#ss4.2} + +Το σύστημα αυτό σχεδιάστηκε για να συγκεντρώσει στοιχεία από τις αναλυτικές αποθήκες και να τα μεταφέρει στις συγκεντρωτικές. Οι δυνατότητες αυτού του +συστήματος είναι ίδιες με τις δυνατότητες των αναλυτικών αποθηκών. + +### [4.3 ΠΑΡΑΓΩΓΗ]{#ss4.3} + +Το σύστημα αυτό σχεδιάστηκε για να παρακολουθήσετε και να προγραμματίσετε την παραγωγή των προϊόντων σας. + +- Τεχνικές προδιαγραφές - Συνταγολόγια. +- Εκτυπώσεις παραγγελιών και εντολών παραγωγής. +- Ισοζύγια παραγγελιών - εντολών παραγωγής, αναλώσεων, υπόλοιπων και διαφορών τους. +- Αυτόματες αναλώσεις Α\' και Β\' υλών. +- Μεταβλητά ψηφία οδηγών, σχεδίων, χρώματος, υλικού, μεγέθους κλπ + +### [4.4 ΑΠΟΓΡΑΦΗ]{#ss4.4} + +Το σύστημα αυτό σχεδιάστηκε για να μηχανογραφήσει όλη την διαδικασία της απογραφής που αρχίζει από την εκτύπωση κατάστασης απογραφής και τελειώνει με τις +ενημερώσεις των αποθηκών. + +- Εύκολη καταχώρηση και διαχείριση των φυσικών μετρήσεων σε καταστάσεις απογραφής, που προτυπώνονται. +- Ισοζύγιο με αποτίμηση, των διαφορών μεταξύ φυσικών μετρήσεων και υπόλοιπου με πολλούς τρόπους αναζήτησης. +- Αυτόματη ενημέρωση των αποθηκών με τις διαφορές. + + +### [5. Μισθοδοσία και Προσωπικό]{#s5} + +### [5.1 ΜΙΣΘΟΔΟΣΙΑ]{#ss5.1} + +Το σύστημα αυτό σχεδιάστηκε για να εκδώσει με τον πιο εύκολο και φιλικό τρόπο τις μισθοδοσίες υπαλλήλων και εργατών της επιχείρησής σας. + +**Βασικές δυνατότητες του είναι:** + +: - Πλήρης διαχείριση μισθοδοσίας μίας ή περισσότερων εταιριών με ή χωρίς υποκαταστήματα. + - Κωδικός εργαζόμενου 4ψήφιος με συμπληρωματική κωδικοποίηση έως 10 κωδικούς. + - Πλήρη στοιχεία εργαζόμενου π.χ. όνομα, επώνυμο, κέντρο κόστους, τμήμα κλπ. + - Πολλαπλά και παραμετρικά οριζόμενα επιδόματα Παιδιών, Πολυετιών, Γάμου, Σπουδών κλπ. + - Παραμετρικά οριζόμενοι κλάδοι Ι.Κ.Α. π.χ. Μικτά, Μικτά-ΤΕΑΜ κλπ. + - Παραμετρικά οριζόμενα τέσσερα επικουρικά ταμεία ανά εργαζόμενο π.χ. ΤΕΑΥΕΚ, Μετάλλου, ΤΣΜΔΕ, κλπ. + - Πολλαπλές και παραμετρικά οριζόμενες μεταβολές μισθοδοσιών Τακτικής, Αδείας, Ασθένειας, Δώρων κλπ. + - Δυνατότητα έκδοσης μισθοδοσίας κατά φορέα ευθύνης π.χ. εργοστάσιο, κέντρο κόστους ή επιλεκτικά για εργαζομένους. + - Δυνατότητα επαναφοράς (διαγραφής) μισθοδοσίας ενός ή περισσότερων εργαζομένων. + - Αυτόματες μεταβολές σε περιπτώσεις σταθερής μισθοδοσίας. + - Πλήρης παρακολούθηση προκαταβολών εργαζομένων, με καταστάσεις προκαταβολών κλπ. + - Πλήρης παρακολούθηση δανείων εργαζομένων, με σταθερές και μεταβλητές δόσεις. + - Παραμετρικά δοσμένες φορολογικές κλίμακες και απαλλαγές (φόρου ή εισοδήματος) και ειδικές απαλλαγές για εργαζόμενους. + - Υπολογισμός φόρου βάσει κλίμακας με επιλογή του τρόπου υπολογισμού του, π.χ. εξομάλυνση ή εκκαθάριση φόρου. + - Αποδείξεις πληρωμής εργαζόμενου σε φακέλους ή σε μηχανογραφικό έντυπο. + - Αποδείξεις προκαταβολών εργαζομένων σε φακέλους ή σε μηχανογραφικό έντυπο. + - Μισθοδοτικές καταστάσεις με πλήρη στοιχεία μισθοδοσιών με πλήθος κριτηρίων και σε προηγούμενους μήνες. + - Αντίστροφος υπολογισμός μισθοδοσίας εργαζομένων. + - Αυτόματος υπολογισμός Δώρων Πάσχα και Χριστουγέννων. + +**Ακόμα:** + +: - Αναζήτηση εργαζόμενων με κωδικούς, επωνυμίες, ή ομαδοποιήσεις. + - Δυνατότητα παγώματος και επαναφοράς, καρτέλας εργαζόμενου. + - Πλήρης τήρηση ιστορικού αρχείου μισθοδοσιών για οποιοδήποτε έτος. + - Στατιστικά στοιχεία για κάθε εργαζόμενο, όπως αποδοχές, κρατήσεις, μέρες απασχόλησης, ώρες υπερωριών, κόστος εταιρίας κλπ. + - Εκτύπωση καταστάσεων εισφορών ΙΚΑ και επικουρικών ταμείων. + - Εκτύπωση βεβαιώσεων ΦΜΥ εργαζομένων και συγκεντρωτικής κατάστασης αποδοχών με πλήθος κριτηρίων επιλογής και υπολογισμός διαφορών. + - Ανάλυση ενσήμων ταμείων. + - Στρογγυλοποίηση πληρωτέου και εισφορών ταμείων. + - Υπολογισμός φόρου για επιχειρηματίες + - Ενσωματωμένος πανίσχυρος επεξεργαστής καταστάσεων (report handler) για να δημιουργήσετε οποιαδήποτε κατάσταση δεν αναφέραμε. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα όπως: Διαχείριση Προσωπικού κλπ. + - Τριμηνιαία κατάσταση για απόδοση φόρων (ΦΜΥ, χαρτόσημο κλπ.). + +### [5.2 ΜΗΧΑΝΟΓΡΑΦΙΚΟ ΙΚΑ]{#ss5.2} + +- Πλήρης υποστήριξη του μηχανογραφικού κυκλώματος ΙΚΑ ανά τρίμηνο, ώστε να μην ασχολείστε πλέον με ένσημα. +- Αρχείο πλήρες συμβατό με το ΙΚΑ. +- Συγκεντρωτικές και αναλυτικές καταστάσεις σύμφωνες με το ΙΚΑ + +### [5.3 ΔΙΑΧΕΙΡΙΣΗ ΠΡΟΣΩΠΙΚΟΥ]{#ss5.3} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί εύκολα και φιλικά τις μηχανές ωρομέτρησης προσωπικού και να ενημερώσει την μισθοδοσία οποιασδήποτε επιχείρησης. + +**Βασικές δυνατότητες του είναι:** + +: - Πλήρης κάλυψη μισθωτών και ημερομισθίων, ημερών εργασίας με όλες τις ειδικές περιπτώσεις π.χ. εξαήμερη εργασία σε μισθωτούς, πενθήμερη με Σάββατα, ρεπό + κλπ. + - Αρχείο προσωπικού με νόμιμο, συμβατικό ωράριο και άλλα στοιχεία. + - Ιστορικό αρχείο μεταβολών που περιλαμβάνει μεταβολές σε σταθερά στοιχεία, μεταθέσεις, προαγωγές. αξιολογήσεις, ποινές, δάνεια, ενισχύσεις, απουσίες, + πολυετίες, μισθολογικές εξελίξεις και άλλα. + - Εύκολη διαχείριση αυτών των στοιχείων με δυνατότητα εξαγωγής συμπερασμάτων για τμήματα, κέντρα κόστους και εργαζόμενους. + - Υποστηρίζονται πλήρως οι Υπερωρίες με πλήρη κλίμακα, τα Νυχτερινά, οι Αργίες κλπ. + - Δυνατότητα εκτύπωσης ημερήσιας κατάστασης απουσιών προσωπικού. + - Ημερήσιες και μηνιαίες καταστάσεις παρουσίας προσωπικού. + - Καταστάσεις ελέγχου μηχανής παρουσιών. + - Διαχείριση πολλαπλών μηχανών ωρομέτρησης. + - Αυτόματη ενημέρωση της μισθοδοσίας με μεταβολές που ο υπολογισμός τους καθορίζεται από τον χρήστη. + +**Ακόμα:** + +: - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με την Μισθοδοσία και άλλα συστήματα. + +### [5.4 ΕΞΟΜΕΙΩΤΕΣ ΜΗΧΑΝΗΜΑΤΩΝ ΩΡΟΜΕΤΡΗΣΗΣ]{#ss5.4} + +Τα προγράμματα αυτά σχεδιάστηκαν για να εξομοιώνουν μια ή και δυο μηχανές ωρομέτρησης και χρειάζονται έναν H/Y συμβατό με IBM-PC με μονάδα δισκέτας. + +**Βασική δυνατότητα του είναι:** + +: - Εύκολη διασύνδεση με τον H\\Y και τα μηχανήματα ανάγνωσης καρτών. + - Συνθηματικό πρόσβασης. + - Αρχείο κίνησης συμβατό με SAHO. + +**Ακόμα:** + +: - Αυτόματη αναγνώριση σύνδεση με τη Μισθοδοσίακαιτο Προσωπικό. + + +### [6. Λογιστική]{#s6} + +### [6.1 ΓΕΝΙΚΗ ΛΟΓΙΣΤΙΚΗ]{#ss6.1} + +Το σύστημα αυτό σχεδιάστηκε για να καλύψει τις ανάγκες οποιασδήποτε επιχείρησης με βιβλία τρίτης κατηγορίας και να ενημερώσει γρήγορα, εύκολα και φιλικά τον +λογιστή και τον επιχειρηματία για την οικονομική κατάσταση της εταιρίας. + +**Βασικές δυνατότητες του συστήματος είναι:** + +: - Διαχείριση πολλαπλών λογιστικών σχεδίων και εταιριών. + - Ελεύθερη δόμηση ψηφίων λογαριασμών ανά βαθμίδα και υποστήριξη οποιουδήποτε λογιστικού σχεδίου (ενιαίου ή όχι). + - Ανάλυση, μέχρι πεμπτοβάθμια, του λογιστικού σχεδίου μόνο στον βαθμό που θέλετε για κάθε λογαριασμό. + - Διπλογραφικό σύστημα καταχώρησης εγγραφών / παραστατικών με ελέγχους ορθότητας για ισοσκελισμένα ισοζύγια. + - Αναζήτηση λογαριασμών με κωδικούς, περιγραφές, ομαδοποιήσεις ή μάσκες για ανεύρεση παρεμφερών λογαριασμών. + - Ενημερώσεις στην κατώτερη βαθμίδα με αυτόματη ενημέρωση από το σύστημα όλων των ανωτέρων. + - Πολλαπλές, αυτόματες και παραμετρικά οριζόμενες αντιμεταβαλλόμενες εγγραφές, με δυνατότητα αυτόματου μερισμού. + - Ισοζύγια οποιασδήποτε βαθμίδας λογαριασμών σε ελεύθερες χρονικές περιόδους για επιλεγμένους λογαριασμούς, με δυνατότητα εξαίρεσης των λογαριασμών που + δεν έχουν κίνηση. + - Αναλυτικά καθολικά σε ελεύθερες χρονικές περιόδους για επιλεγμένους λογαριασμούς. + - Γενικά καθολικά σε ελεύθερες χρονικές περιόδους για επιλεγμένους λογαριασμούς. + - Ημερολόγια Ταμείου, Διαφόρων Πράξεων ή Συγκεντρωτικού ή άλλων, με ενσωματωμένους ελέγχους καλής καταχώρησης, καθορισμένα από το χρήστη. + - Εκτύπωση φύλλου εγγραφών (φίσας) για εύκολη αρχειοθέτηση των παραστατικών. + - Αυτόματη ενημέρωση λογιστικής από τα επιμέρους συστήματα με επιλογή αναλυτικής ή συγκεντρωτικής κίνησης. + +**Ακόμα:** + +: - Ευρετήρια λογιστικών σχεδίων. + - Ταυτόχρονη λειτουργία σε περισσότερες από δύο χρήσεις με την πρώτη υπερδωδεκάμηνη. + - Διαχείριση ξένων νομισμάτων. + - Αυτόματη μεταφορά υπολοίπων τέλος χρόνου. + - Δυνατότητα δημιουργίας καταστάσεων Ισολογισμού, Φ.Π.Α, Φ.Μ.Υ, χρηματοοικονομικών δεικτών κλπ. και εκτύπωσης τους οποτεδήποτε. + - Συγκεντρώσεις λογαριασμών με διαφορετικές μορφές εκτός κωδικού λογαριασμών. + - Δυνατότητα μεταφοράς πληροφοριών σε άλλα προγράμματα. + - Δυνατότητα αντιγραφής του λογιστικού σχεδίου από μια εταιρία σε μια άλλη. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα όπως: Διαχείριση Πελατών, Διαχείριση Προμηθευτών, Αποθήκες, Παραγγελιοληψία Παραστατικά, + Μισθοδοσία, Αξιόγραφα, Αναλυτική Λογιστική κλπ. + - Δημιουργία δισκέτας Ισυζυγίου ESKORT. + +### [6.2 ΛΟΓΙΣΤΙΚΗ ΕΣΟΔΩΝ-ΕΞΟΔΩΝ]{#ss6.2} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί εύκολα, γρήγορα και φιλικά τα βιβλία Α\' και Β\' κατηγορίας. Είναι κατάλληλο και για λογιστικά γραφεία. + +**Βασικές δυνατότητες του συστήματος είναι:** + +: - Διαχείριση πολλαπλών εταιριών ταυτόχρονα, με διαφορετικά ή ίδια βιβλία. + - Παραμετρικά οριζόμενες κινήσεις π.χ. Τιμολόγια (αγορών πωλήσεων), Αποδείξεις λιανικής, Παροχή υπηρεσιών, διάφορα έξοδα, μισθοδοσίες κλπ. + - Η γραμμογράφηση των βιβλίων (στήλες εκτύπωσης και περιεχόμενα στηλών) είναι εντελώς παραμετρική. + - Ακόμα και τα βιβλία δημιουργούνται παραμετρικά σύμφωνα με τις ανάγκες και τις ιδιαιτερότητες κάθε εταιρίας. + - Καταχωρήσεις σε ευμετάβλητη μορφή, με ενσωματωμένους ελέγχους ορθότητας. + - Εμπεριέχει οικονομικούς δείκτες επιχείρησης. + - Περιοδική εκτύπωση Φ.Π.Α. με υπολογισμούς ή χωρίς. + - Αυτόματη ενημέρωση από τα επιμέρους συστήματα του εμπορικού. + +**Ακόμα:** + +: - Συγκεντρωτική εκτύπωση Φ.Π.Α. με υπολογισμούς ή χωρίς. + - Φ.Π.Α. σε οποιαδήποτε χρονική περίοδο με υπολογισμούς ή χωρίς. + - Οποτεδήποτε συγκεντρωτική εκτύπωση τιμολογίων και πιστωτικών σημειωμάτων. + - Κάλυψη του Φ.Π.Α. ή άλλων φόρων σε όλες τις περιπτώσεις πωλήσεων (Χονδρική/Λιανική με ή χωρίς φόρο, Φ.Π.Α. νήσων κλπ). + - Φύλαξη κινήσεων ή διαγραφή τους (για λιγότερο χώρο) ανάλογα με τη χωρητικότητα του υπολογιστή σας. + +### [6.3 ΔΙΑΧΕΙΡΙΣΗ ΠΑΓΙΩΝ]{#ss6.3} + +Το σύστημα αυτό σχεδιάστηκε για να διαχειριστεί γρήγορα, εύκολα και φιλικά τα πάγια. + +**Βασικές δυνατότητες του συστήματος είναι:** + +: - Κωδικός παγίου με ελεύθερη δόμηση 1 με 15 ψηφία, και συμπληρωματικά 6 κωδικούς. + - Τήρηση πλήθους στοιχείων για κάθε πάγιο, π.χ. περιγραφή (45 χαρ.) προέλευση, συμπληρωματικές πληροφορίες, διάφορες ημερομηνίες, κανονική και πρόσθετη + απόσβεση, ωφέλιμος χρόνος κλπ. + - Πολλαπλές ομαδοποιήσεις των παγίων σε κατηγορίες, υποκατηγορίες και ομάδες + - Αναζήτηση πάγιου ή παγίων με κωδικούς, περιγραφές, ομαδοποιήσεις ή μάσκα για ανεύρεση παρεμφερών παγίων. + - Δυνατότητα παγώματος και επαναφοράς, καρτέλας παγίων. + - Αποσβέσεις παγίων με δύο τρόπους: α) σταθερή και β) φθίνουσα. + - Ισοζύγια, αναλυτικά και συνοπτικά, παγίων με πολλαπλές αναζητήσεις σε οποιεσδήποτε χρονικές περιόδους. + +**Ακόμα:** + +: - Παράλληλη χρήση δύο ετών. + - Αυτόματη αναγνώριση, σύνδεση και ενημέρωση με άλλα συστήματα π.χ. Γενική Λογιστική. + - Ενσωματωμένος πανίσχυρος επεξεργαστής καταστάσεων (report handler) για να δημιουργήσετε οποιαδήποτε κατάσταση δεν αναφέραμε. + +### [6.4 ΑΝΑΛΥΤΙΚΗ ΛΟΓΙΣΤΙΚΗ]{#ss6.4} + +Το σύστημα αυτό σχεδιάστηκε για να καλύψει τις ανάγκες των βιομηχανιών και των εμπορικών επιχειρήσεων που θέλουν ακριβή προσδιορισμό των οικονομικών +αποτελεσμάτων τους, αύξηση της παραγωγικότητάς τους και σωστή λήψη αποφάσεων. + +**Βασικές δυνατότητες του συστήματος είναι:** + +: - Ελεύθερη δόμηση ψηφίων λογαριασμών ανά βαθμίδα και υποστήριξη οποιουδήποτε λογιστικού σχεδίου (ενιαίου ή όχι). + - Ανάλυση, μέχρι πεμπτοβάθμια, του λογιστικού σχεδίου μόνο στον βαθμό που θέλετε για κάθε λογαριασμό. + - Αυτόματες εγγραφές με επιμερισμούς ανά ποσοστό / βάρος ποσοστού κ.λ.π. από Γενική Λογιστική, Αποθήκη, Πάγια κ.λ.π. παραμετρικά ελεγχόμενες. + - Αυτόματες εγγραφές κοστολόγησης με επιμερισμούς ανά ποσοστό / βάρος ποσοστού κ.λ.π. σε Αποθήκες. + - Αυτόματος προσδιορισμός αποτελεσμάτων. + - Διπλογραφικό σύστημα καταχώρησης εγγραφών / παραστατικών με ελέγχους ορθότητας για ισοσκελισμένα ισοζύγια. + - Αναζήτηση λογαριασμών με κωδικούς, περιγραφές, ομαδοποιήσεις ή μάσκες για ανεύρεση παρεμφερών λογαριασμών. + - Ενημερώσεις στην κατώτερη βαθμίδα με αυτόματη ενημέρωση από το σύστημα όλων των ανωτέρων. + - Ισοζύγια οποιασδήποτε βαθμίδας λογαριασμών σε ελεύθερες χρονικές περιόδους για επιλεγμένους λογαριασμούς, με δυνατότητα εξαίρεσης των λογαριασμών που + δεν έχουν κίνηση. + - Αναλυτικά καθολικά σε ελεύθερες χρονικές περιόδους για επιλεγμένους λογαριασμούς. + - Γενικά καθολικά σε ελεύθερες χρονικές περιόδους για επιλεγμένους λογαριασμούς. + - Ημερολόγια Αναλυτικής με ενσωματωμένους ελέγχους καλής καταχώρησης, καθορισμένα από το χρήστη. + - Αυτόματη και παραμετρικότατη ενημέρωση Αναλυτικής Λογιστικής από Αποθήκη, Πάγια, Μισθοδοσία, Γενική Λογιστική, αντίστροφη ενημέρωση της Αποθήκης και της + Γενικής Λογιστικής με αυτόματους επιμερισμούς. + +**Ακόμα:** + +: - Ευρετήρια λογιστικών σχεδίων. + - Ταυτόχρονη λειτουργία σε περισσότερες από δύο χρήσεις με την πρώτη υπερδωδεκάμηνη. + - Αυτόματη μεταφορά υπολοίπων τέλος χρόνου. + - Δυνατότητα μεταφοράς πληροφοριών σε άλλα προγράμματα. + - Δυνατότητα αντιγραφής του λογιστικού σχεδίου από μια εταιρία σε μια άλλη. + + +### [7. Γενικά]{#s7} + +### [7.1 ΣΥΝΘΗΜΑΤΙΚΑ]{#ss7.1} + +Το σύστημα αυτό σχεδιάστηκε για να προστατέψει, εύκολα και φιλικά τις πληροφορίες σας με συνθηματικούς κωδικούς. + +- Ιεράρχηση συνθηματικών σε δομή καταλόγου (master-slave). +- 'πειρα συνθηματικά. +- Συνθηματικά ανά χρήστη. +- Προστασία των πληροφοριών ανά εταιρία. +- Προστασία ανά υποπρόγραμμα. + +### [7.2 ΕΜΠΟΡΙΚΗ ΑΛΛΗΛΟΓΡΑΦΙΑ]{#ss7.2} + +Το σύστημα αυτό σχεδιάστηκε για να γράψετε και να στείλετε επιστολές στους μελλοντικούς πελάτες σας, αλλά και σε άλλους π.χ. συνδρομητές κλπ. + +- Διαχείριση αρχείου μελλοντικών πελατών. +- Ενσωματωμένος τηλεφωνικός κατάλογος με αλφαβητική σειρά (πρώτα Λατινικό και μετά Ελληνικό αλφάβητο). +- Πλήρης ενσωματωμένος επιστολογράφος για συγγραφή και αποστολή επιστολών (mail merge), με δυνατότητα επανάκτησης, διόρθωσης, ή διαγραφής της επιστολής. +- Εκτύπωση αυτοκόλλητων ετικετών με διαστάσεις οριζόμενες από τον χρήστη. +- Απεριόριστος αριθμός επιστολών. + +### [7.3 ΔΙΑΧΕΙΡΙΣΤΗΣ ΚΑΤΑΣΤΑΣΕΩΝ]{#ss7.3} + +Το σύστημα αυτό που εμπεριέχεται στο σύστημα προγραμμάτων ΕΞΕΛΙΞΗ σχεδιάστηκε για να δημιουργήσετε και να τυπώσετε, εύκολα όποια κατάσταση θέλετε από ένα +αρχείο. + +- Μέχρι 99 καταστάσεις ανά αρχείο. +- Στήλες υπολογισμών. +- Σύνολα και υποσύνολα ομάδων. +- Ταξινομήσεις ελεύθερες. +- Καταστάσεις συνόλων. +- Κριτήρια από - μέχρι για οποιοδήποτε πεδίο, ακόμα και για υπολογισμό +- Επιλογή εκτύπωσης αριθμών, ποσοστών, ημερομηνιών κλπ. +- Δημιουργία αρχείων σταθερών προδιαγραφών (ASCII delimited) για μεταφορά στοιχείων σε άλλα πακέτα (DBASE, CLIPPER, LOTUS 123, FRAMEWORK, AMIPRO κλπ) + +### [7.4 DS Travel]{#ss7.4} + +Τουριστικό Πρόγραμμα για ταξιδιωτικά γραφεία, εισερχόμενου και εξερχόμενου τουρισμού\ +Διαχειρίζεται εύκολα τις προσφορές που δημιουργούν τα τουριστικά γραφεία και τις υπηρεσίες που τους παρέχουν οι προμηθευτές τους + +**Xαρακτηριστικά** + +: - Δημιουργία και διαχείριση προσφορών πριν και μετά την επικύρωσή τους + - Διαχείριση Actual status (επικυρωμένη προσφορά) + - Διαχείριση εισιτηρίων για non-IATA γραφεία + - Αυτόματη κατασκευή Proforma, Τιμολογίων, Vouchers, Reservation Notes, Rooming Lists, Allotments + - Δημιουργία και επεξεργασία προγραμμάτων εκδρομών + - Διαχείριση ημερησίου προγράμματος πλοίων, αεροπλάνων, τρένων κλπ. + - Αυτόματη αποστολή FAX των τιμολογίων, των προσφορών, Vouchers, Reservation Notes, Rooming Lists, Allotments, των προγραμμάτων εκδρομών κλπ σε πελάτες, + προμηθευτές + +**Μεταβλητότητα** + +: - Δυνατότητα αλλαγής στοιχείων ανά πάσα στιγμή με αυτόματη αναπροσαρμογή των τιμών + - Διαχειρίζεται πολλαπλές εταιρίες και σε περιβάλλον πολλών χρηστών με συνθηματικά πρόσβασης, προεκτύπωση στην οθόνη και πολλαπλούς εκτυπωτές κλπ + +**Περιλαμβάνει** + +: - Απεριόριστο αριθμό πελατών με τις κινήσεις τους + - Απεριόριστο αριθμό προμηθευτών οποιασδήποτε κατηγορίας (ξενοδοχεία, ταξί, λεωφορεία, ξεναγοί κλπ) + - Απεριόριστο αριθμό υπηρεσιών ανά προμηθευτή + - Απεριόριστο αριθμό περιόδων ανά υπηρεσία + - Απεριόριστο αριθμό τιμών ανά περίοδο + - Απεριόριστο αριθμό νομισμάτων + - Πλήρες κύκλωμα εκτυπώσεων + +**ακόμα και πολλά άλλα, όπως :** + +: - Πλήκτρο άμεσης βοήθειας, επεξεργαστή κειμένου, αριθμητήρα, μακροεντολές, ημερολόγιο, διαδικασίες φύλαξης - επαναφοράς (backup - restore) + +**Συμβατότητα με** + +: - Οποιοδήποτε λειτουργικό σύστημα ενός ή πολλών χρηστών (DOS, UNIX, WINDOWS, LINUX, NOVELL κλπ) + - Συνεργάζεται με άλλα δημοφιλή προγράμματα μέσω σταθερών προδιαγραφών (ASCII STANDARDS) + - Ασφαλές, αξιόπιστο, On-line, Real-time, εφαρμογή μοντέλου Client - Server + +**Ελάχιστες απαιτήσεις** + +: - Προσωπικός υπολογιστής με επεξεργαστή τύπου 386, λειτουργικό σύστημα DOS έκδοσης 5.0 + - Μνήμη RAM 2ΜΒ + - Ελεύθερος δίσκος 15MB + +### [7.5 DS Cash Flow]{#ss7.5} + +Εύκολη αλλά ουσιαστική διαχείριση οικονομικών.\ +Προβλέπει τα διαθέσιμά σας και σας προειδοποιεί πότε και ποιες δοσοληψίες πρέπει να γίνουν + +**Xαρακτηριστικά** + +: - Διαχειρίζεται τα μπλοκ των επιταγών σας, με ιδιαίτερη ευκολία και σας προειδοποιεί πότε πρέπει να κάνετε κατάθεση + - Διαχειρίζεται τις επιταγές των πελατών σας και σας υπενθυμίζει πότε πρέπει να εισπραχθούν + - Προτείνει ημερομηνίες και ποσά επιταγών βάσει τιμολογίων προμηθευτή, ανάλογα με τον συμφωνημένο τρόπο πληρωμής + - Υπολογίζει τους μηνιαίους τόκους για συναλλαγματικές και δόσεις δανείων + - Με μια κίνηση σας πληροφορεί αν θα έχετε διαθέσιμα για να προχωρήσετε στην επένδυση που στοχεύετε + - Σας πληροφορεί, όποτε το ζητήσετε, για τα υπόλοιπα των λογαριασμών που διαθέτετε και σας προφυλάσσει ελέγχοντας από τυχόν λάθη + - Διαχειρίζεται τα αρχεία σας και σε μια μόνο δισκέτα + +**Μεταβλητότητα** + +: - Δυνατότητα αλλαγής στοιχείων ανά πάσα στιγμή με αυτόματο υπολογισμό + - Διαχειρίζεται πολλαπλές εταιρίες και σε περιβάλλον πολλών χρηστών με συνθηματικά πρόσβασης, προεκτύπωση στην οθόνη και πολλαπλούς εκτυπωτές + +**Περιλαμβάνει** + +: - Ροή διαθεσίμων χρονικής περιόδου + - Ανάλυση των παραπάνω διαθεσίμων ανά ημέρα + - Καρτέλα λογαριασμών και ομάδων + - Ημερολόγιο υποχρεώσεων δοσοληψιών + - Αυτόματο έλεγχο υπολοίπων των λογαριασμών + - Ομαδοποίηση των λογαριασμών + - Υποθετικά σενάρια ροής με πιθανότητες δοσοληψιών + - Γραφικές παραστάσεις + - Απεριόριστο αριθμό λογαριασμών, όπως όψεως, ταμιευτηρίου, πιστωτικές κάρτες κλπ + - Απεριόριστο αριθμό κατηγοριών δοσοληψιών όπως εισπράξεις, πληρωμές, αναλήψεις κλπ + +**ακόμα και πολλά άλλα, όπως :** + +: - Πλήκτρο άμεσης βοήθειας, επεξεργαστή κειμένου, αριθμητήρα, μακροεντολές, ημερολόγιο, διαδικασίες φύλαξης - επαναφοράς (backup - restore) + +**Συμβατότητα με** + +: - Οποιοδήποτε λειτουργικό σύστημα ενός ή πολλών χρηστών (DOS, UNIX, WINDOWS, WINDOWS 95, WINDOWS NT, LINUX, NOVELL κλπ) + - Συνεργάζεται με άλλα δημοφιλή προγράμματα μέσω σταθερών προδιαγραφών (ASCII STANDARDS) + - Ασφαλές, αξιόπιστο, On-line, Real-time, εφαρμογή μοντέλου Client - Server + +**Ελάχιστες απαιτήσεις** + +: - Προσωπικός υπολογιστής με επεξεργαστή τύπου 386, λειτουργικό σύστημα DOS έκδοσης 5.0 + - Μνήμη RAM 1ΜΒ + - Δισκέτα 1.44MB + +### [7.6 DS Ασφάλειες - Πραγματογνωμοσύνες]{#ss7.6} + +Διαχειρίζεται εύκολα και ουσιαστικά συμβόλαια ασφαλειών και πραγματογνωμοσύνες. + +**Xαρακτηριστικά** + +: - Διαχειρίζεται ταυτόχρονα πολλές ασφαλιστικές εταιρίες + - Διαχειρίζεται εν ισχύ και ακυρωμένα συμβόλαια πολλαπλών ασφαλιστικών εταιριών + - Διαχειρίζεται και τυπώνει πραγματογνωμοσύνες + - Σας πληροφορεί για οφειλές σε οποιαδήποτε ασφαλιστική εταιρία σε χρονική περίοδο της επιλογής σας + - Διαχειρίζεται χρεώσεις / πιστώσεις ασφαλισμένων (καρτέλα ασφαλισμένου) + +**Μεταβλητότητα** + +: - Δυνατότητα αλλαγής στοιχείων ανά πάσα στιγμή με αυτόματο υπολογισμό + - Διαχειρίζεται πολλαπλές εταιρίες και σε περιβάλλον πολλών χρηστών με συνθηματικά πρόσβασης, προεκτύπωση στην οθόνη και πολλαπλούς εκτυπωτές + +**Περιλαμβάνει** + +: - Πραγματογνωμοσύνες + - Ασφαλιστικά συμβόλαια + - Ακυρωμένα συμβόλαια + - Ασφαλισμένους + - Οφειλές ανά ασφαλιστική εταιρία + - Υπόλοιπα ασφαλισμένων + - Τηλεφωνικό κατάλογο + - Bonus Malus + +**ακόμα και πολλά άλλα, όπως :** + +: - Πλήκτρο άμεσης βοήθειας, επεξεργαστή κειμένου, αριθμητήρα, ημερολόγιο, διαδικασίες φύλαξης - επαναφοράς (backup - restore) + +**Συμβατότητα με** + +: - Λειτουργικό σύστημα ενός ή πολλών χρηστών (WINDOWS, WINDOWS NT κλπ) + - Ασφαλές, αξιόπιστο, On-line, Real-time, εφαρμογή μοντέλου Client - Server + +**Ελάχιστες απαιτήσεις** + +: - Προσωπικός υπολογιστής με επεξεργαστή τύπου 386, λειτουργικό σύστημα Windows 95 + + +### [8. Ενδεικτικές Τιμές]{#s8} + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ 900.000 + ΕΞΕΛΙΞΗ ΕΜΠΟΡΙΟ + + ΕΞΕΛΙΞΗ ΕΜΠΟΡΙΟ ΚΑΙ ΑΝΑΛΥΤΙΚΗ ΛΟΓΙΣΤΙΚΗ 1.500.000 + + ΕΞΕΛΙΞΗ ΒΙΟΜΗΧΑΝΙΑ 1.600.000 + + ΕΞΕΛΙΞΗ ΒΙΟΜΗΧΑΝΙΑ ΚΑΙ ΑΝΑΛΥΤΙΚΗ ΛΟΓΙΣΤΙΚΗ 2.300.000 + + ΕΞΕΛΙΞΗ ΜΙΣΘΟΔΟΣΙΑ 350.000 + + DS TRAVEL 350.000 + + DS CASH FLOW 200.000 + + DS GRAPH PLUS 300.000 + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Οι απαιτήσεις των προγραμμάτων (Hardware) κάτω από το λειτουργικό Linux (2.0.x kernel) είναι 386 με 8MB RAM και 80MB HDD + + +### [9. Επικοινωνία]{#s9} + +**DIGITAL SYSTEMS LTD.**\ +Σαρανταπόρου 6, 15342 Αγ.Παρασκευή,\ +τηλ.6003408 fax 6003409\ +[e-mail:Dsm\@beryl.kapatel.gr](mailto:Dsm@beryl.kapatel.gr) + diff --git a/content/articles/15/04_opti.md b/content/articles/15/04_opti.md new file mode 100644 index 0000000..ca53867 --- /dev/null +++ b/content/articles/15/04_opti.md @@ -0,0 +1,133 @@ ++++ +title = 'OPTi82C931 Κάρτα ήχου και 2.2.x kernel.' +date = '' +description = '' +author = 'Παύλος Παρίσσης(mailto:surferpaul@yahoo.com)' +issue = ['Magaz 15'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο μου στο magaz 12 έλεγε ότι για τους νέους kernels το μόνο που χρειάζεται να κάνει κάποιος για να έχει ήχο με την ασήμαντη OPTi82C931 κάρτα ήχου είναι +να διαβάσει το σχετικό αρχείο στο Documentaion/sound κατάλογο. Αυτό όμως δεν είναι αρκετό, έτσι διαβάστε τα παρακάτω για να έχετε ήχο με την OPTi82C931.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ας αρχίσουμε από τα απλά , στο /etc/isapnp.conf δεν αλλάζει τίποτα έκτος από την αλλαγή που βλέπετε στο παρακάτώ κομμάτι του : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # Multiple choice time, choose one only ! + + # Start dependent functions: priority acceptable + + # Logical device decodes 16 bit IO address lines + + # Minimum IO base address 0x0534 + + # Maximum IO base address 0x0608 + + # IO base alignment 4 bytes + + # Number of IO addresses required: 4 + + (IO 0 (BASE 0x0530)) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +στους 2.0.x kernels είχαμε 534 ενώ τώρα έχουμε 530, μικρό το κακό. Για να σετάρετε την κάρτα με τα isapnp tools διαβάστε το άρθρο στο magaz 12. + +Μετά κάνουμε compile τον kernel με τα κλασικά βήματα έχοντας μόνο τις παρακάτω επιλογές σαν module στο sound section: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + CONFIG_SOUND=m (Sound card support) + CONFIG_SOUND_OSS=m (OSS sound modules) + CONFIG_SOUND_ADLIB=m (Generic OPL2/OPL3 FM synthesizer support) + CONFIG_SOUND_MPU401=m (MPU-401 support (NOT for SB16)) + CONFIG_SOUND_MSS=m (Microsoft Sound System support) + CONFIG_SOUND_MAD16=m (Support for OPTi MAD16 and/or Mozart based cards) + CONFIG_SOUND_YM3812=m (FM synthesizer (YM3812/OPL-3) support) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κάνουμε ότι κάνουμε για να τελειώσει το compile, μην ξεχάσετε να δώσετε + + depmod -a + +μετά το τέλος του compile και το make modules\_install.. + +Μετά γράφουμε τις απαραίτητες ρυθμίσεις στο /etc/conf.modules με την σειρά που τις έχω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + alias char-major-14 mad16 + + options sb mad16=1 + + options mad16 io=0x530 irq=7 dma=0 dma16=1 mpu_io=0x330 mpu_irq=5 + + options opl3 io=0x388 + + post-install ad1848 /sbin/modprobe "-k" "opl3" + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**ΠΡΟΣΟΧΗ** τα options **ΠΡΕΠΕΙ** να είναι ίδια με αυτά που έχουμε στο isapnp.conf εάν δεν είναι ίδια μουσική δεν ακούσετε όσο και αν θέλετε. + +Και τελειώνουμε φορτώνοντας τις sound modules στο startup script /etc/rc.d/rc.sysinit, το κομμάτι για το Sound πρέπει να γίνει έτσι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # load sound modules + if ! grep -i nomodules /proc/cmdline >/dev/null ; then + if [ -n "$USEMODULES" ]; then + # if grep -s "alias sound" /etc/conf.modules > /dev/null ; then + modprobe mad16 + modprobe opl3 + modprobe mpu401 + # OPTi82C931 0 0x07 1 0x07 3 0x09 4 0x14 5 0x3C 6 0x92 + # insmod sound + # if grep -s "alias midi" /etc/conf.modules > /dev/null ; then + # modprobe midi + # fi + # fi + fi + fi + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +μπορείτε να φορτώνετε μόνο την mad16 module για να έχετε ήχο αλλά δεν θα είστε σε θέση να ακούσετε κάποιου τύπου sound αρχείων. Επειδή δεν έχω βρει ακόμα ποιοι +είναι αυτοί εσείς να φορτώνετε και τις τρεις για να μην μου φωνάζετε μετά. + +Επιπλέον το cat /dev/sndstat δίνει διαφορετικά στοιχεία από ότι με τους 2.0.x kernels, πρέπει να λεει τα παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + OSS/Free:3.8s2++-971130 + Load type: Driver loaded as a module + Kernel: Linux localhost.localdomain 2.2.6 #4 Sat May 1 16:55:18 EEST 1999 i586 + Config options: 0 + + Installed drivers: + + Card config: + + Audio devices: + 0: MAD16 WSS (82C930) (DUPLEX) + + Synth devices: + + Midi devices: + 0: Mad16/Mozart + + Timers: + 0: System clock + + Mixers: + 0: MAD16 WSS (82C930) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Εάν έχουν πάει όλα καλά μετά τα παραπάνω θα ακούτε μουσική στο LinuxBox σας. Εάν όχι, ξαναδιαβάστε τα πάντα και όλα τα manual για modules και τα πάντα στον +/usr/src/linux/Documentation/sound κατάλογο και μην μου στέλνετε mails διότι εγώ σε 10 μέρες είμαι θα είμαι ναύτης:)χαχαχαχαχαχα diff --git a/content/articles/15/05_mailbox.md b/content/articles/15/05_mailbox.md new file mode 100644 index 0000000..578e0bb --- /dev/null +++ b/content/articles/15/05_mailbox.md @@ -0,0 +1,712 @@ ++++ +title = 'Αλληλογραφία' +date = '1999-04-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 15'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Παρακαλούμε ακολουθήστε τους κάτωθι κανόνες: + +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής \"Ερώτηση περί Linux\" δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμμιά ματιά στα περασμένα τεύχη, και εννοώ και τη στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντιούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-)\ +γ) Απαντήσεις οι οποίες δεν έχουν απαντηθεί, σημαίνει ότι μάλλον δεν ξέρουμε την απάντηση. Ερωτήσεις οι οποίες έρχονται με mail, είναι ΠΟΛΥ ΔΥΣΚΟΛΟ να +απαντηθούν. Προτιμήστε την φόρμα. + +**1. Time\....** +------------------------------------------ + +**2. Γενικά** +--------------------------------------- + +**3. GRkbd** +-------------------------------------- + +**4. Kernel h Suse** +---------------------------------------------- + +**5. Apegatastasi Linux 6.0** +------------------------------------------------------- + +**6. Εκτύπωση σε Lexmark 1000 color jetprinter** +-------------------------------------------------------------------------- + +**7. Α και κάτι άλλο όσο αφορά το KDE 1.0** +--------------------------------------------------------------------- + +**8. Egkatastsh tou Linux** +----------------------------------------------------- + +**9. Προγραμματισμός Linux** +------------------------------------------------------ + +**10. Clock** +----------------------------------------- + +**11. PPP ERROR** +--------------------------------------------- + +**12. compile kernel gia ppp** +---------------------------------------------------------- + +**13. soundblaster menuconfig etc** +--------------------------------------------------------------- + +**14. LINUX + ΑΠΟΡΙΕΣ** +--------------------------------------------------- + +**15. Τι γίνεται με την μνήμη μου στο Linux** +------------------------------------------------------------------------- + +**16. Redhat 5.2 Ή Suse 6.0** +--------------------------------------------------------- + +**17. Ποιος Window Manager?** +--------------------------------------------------------- + +**18. LILO.CONF** +--------------------------------------------- + +**19. LILO.CONF** +--------------------------------------------- + +**20. dial-up networking** +------------------------------------------------------ + +**21. driver** +------------------------------------------ + +**22. SUSE** +---------------------------------------- + +**23. POP mail** +-------------------------------------------- + +**24. X11** +--------------------------------------- + +**25. script** +------------------------------------------ + +**26. Greek** +----------------------------------------- + +**27. NT and SuSe Boot** +---------------------------------------------------- + +**28. τι γίνεται με 2 δίσκους και ΝΤ;** +------------------------------------------------------------------- + +**29. Περί Window Manager και Desktop (2)** +----------------------------------------------------------------------- + +**30. Pou einai to XFGreekFNTS?** +------------------------------------------------------------- + +**31. Συμβατότητα Word, Ελληνικά** +-------------------------------------------------------------- + +**32. Συμβατότητα Word, Ελληνικά** +-------------------------------------------------------------- + +**33. Red Hat & SuSE** +-------------------------------------------------- + +**34. Πρόβλημα με το mouse** +-------------------------------------------------------- + +**35. Προβλήματα με το ποντίκι (2)** +---------------------------------------------------------------- + +**36. kppp** +---------------------------------------- + + +### [1. Time\....]{#s1} + +Από : [Αναστάσης Νάνος](mailto:ravenlord@freemail.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Έχω ένα ΠΟΛΥ ΣΟΒΑΡΟ ΠΡΟΒΛΗΜΑ\.... ΔΕΝ ΕΧΩ ΧΡΟΝΟ ΓΙΑ ΝΑ ΑΣΧΟΛΗΘΩ ΜΕ ΤΟ LINUX\.....Υπάρχει καμιά λύση? Λοιπόν.. και κάτι άλλο\....η ταχύτητα σύνδεσης στο Internet +με τα ακατονόμαστα είναι πολύ ανώτερη από αυτή στο linux\... με kde, suse 5.2 kai kernel 2.2.0 και 2.0.33\... ακόμα ψάχνομαι\.... + +**ΒΠ :***Αγόρασε ένα πολλαπλασιαστή χρόνου!!! Πολύ πιθανόν να είναι ανώτερη\... Ποιος σου είπε ότι θα βλέπεις μεγαλύτερες ταχύτητες στο linux?? Χμμμ, από εμάς +τι ακριβώς θες???\ +φιλικά, Ευάγγελος. :)))* + +**ΕΠ :***Οντως έχεις ένα πολύ σοβαρό πρόβλημα :-D Περαστικά.* + + +### [2. Γενικά]{#s2} + +Από : [Τσαλίκογλου Ισαάκ](mailto:tcup@bigfoot.com) + +Απάντηση : [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) + +Γεια σας. Θα ήθελα να σας ευχαριστήσω για την τελευταία απάντησή σας. Τώρα έχω το fortune και με καλωσορίζει με ένα quote κάθε φορά που κάνω Login. Είμαι +πραγματικά ενθουσιασμένος με την προσαρμοστικότητα του Linux. Ασχολούμαι από πέρσι τέτοια εποχή, αλλά εδώ και δυο μήνες έχω αρχίσει να ασχολούμαι σοβαρά. \'Εχω +τώρα τον Afterstep και σκέφτομαι να εγκαταστήσω το KDE. Μετά από την εγκατάσταση του KDE, θα μπορώ να γυρνάω σε Afterstep; Επίσης, δοκίμασα να εγκαταστήσω το +WP7 από το bonus cd της redhat 5.2 που έχω και μου έβγαλε λάθος, αφήνοντάς μου 50 ΜΒ άχρηστων αρχείων στο σκληρό, σε διάφορα directories. Πώς γίνεται να πάω στο +parent directory και να σβήσω όλα τα subdirectories χωρίς κάθε φορά να σβήνω πρώτα τα αρχεία και μετά να δίνω rmdir; Πώς γίνεται να κάνω mount το extended DOS +partition μου, το οποίο αντιστοιχεί σε\... + +***AfterStep**: Ναι, θα μπορείς να επιλέγεις τον Window Manager που σου αρέσει. Σίγουρα αυτό μπορεί να γίνει ανά login, δηλ. για να αλλάξεις Window Manager θα +βγαίνεις από τον ένα και θα ξανακάνεις login. Αν το ψάξεις λίγο περισσότερο, είναι δυνατό να γίνει κάτι τέτοιο και χωρίς να \"βγεις\", αλλά θα έχεις το πρόβλημα +ότι ο AfterStep δεν είναι KDE-aware (έτσι νομίζω) οπότε πολλές από τις εφαρμογές του KDE θα σου παρουσιάζουν προβλήματα όταν τις τρέχεις με αυτόν. Καλή ιδέα +είναι να κατεβάσεις τον τελευταίο [WindowMaker](http://www.windowmaker.org) που μοιάζει πολύ με τον AfterStep και είναι KDE-compliant.* + +***WodrPerfect** rpm -e xwp ή απεγκατάσταση από το glint είναι το ίδιο πράγμα. Και στις δύο περιπτώσεις σαν root.* + +*Εννοείς \"rm -rf /opt/xwp\" ? Αφού έχεις εγκαταστήσει το RPM καλό είναι να κάνεις την απεγκατάσταση όπως λέω παραπάνω. Και προσοχή!!! Το rm -rf είναι ΠΟΛΥ +ΕΠΙΚΥΝΔΥΝΟ!!! (μπορείς να δώσεις λάθος directory και να σβήσεις ΤΑ ΠΑΝΤΑ!!!)\ +**DOS Partition**: \"mount -t vfat /dev/hda1 /mnt/dos\", αν υποθέσουμε ότι είναι στο πρώτο partition του πρώτου δίσκου και υπάρχει το directory /mnt/dos* + + +### [3. GRkbd]{#s3} + +Από : [Αβράμης Χρ. Γεωργιάδης](mailto:avraam@cytanet.com.cy) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +\'Εχω εγκαταστήσει το GRkbd-1.2-1.i386.rpm και την γραμματοσειρά GRArialType 1.0.5-1.noarch.rpm. Μπορώ και διαβάζω ελληνικά στο Διαδίκτυον μέσω του +Netscape-communicator 4.08 αλλά δεν μπορώ να γράψω ελληνικούς χαρακτήρες. Αυτό το μήνυμα σας το στέλλω μέσω την windows. \'Ετρεξα την εντολή : rpm -ql GRkbd και +μου έβγαλε την λίστα πού έβαλε τα αρχεία. Δοκίμασα να ανοίξω το αρχείο README με τον joe αλλά τα γράμματα δεν διαβάζονταν, ήταν ακαταλαβίστικα. Η ερώτηση μου +είναι: Με αυτά που έχω εγκαταστήσει μπορώ να γράφω ελληνικά; Πώς; Ευχαριστώ για την βοήθεια. + +*Magaz τεύχος Μαρτίου 13 Magaz τεύχη 1998 τεύχη 6, 10. HELLENIC HOWTO* + + +### [4. Kernel h Suse]{#s4} + +Από : [Dimitris fasoulakhs](mailto:dimitris1@usa.net) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Λοιπόν παιδιά αγόρασα προχθές το RAM και είχε μέσα το CD με το Kernel και το Suse, δεν είμαι σίγουρος αν είναι καλά γι αυτό θέλω να μου πεις εσύ\... ποιο μου +προτείνετε να εγκαταστήσω; + +*Ούτε το ένα ούτε το άλλο.\ +Α. Το Suse που έχει το RAM δεν τρέχει (ρίξε μία ματιά στο http://www.step.gr/ )\ +Β. Το kernel παίζει αλλά χωρίς SUSE ή κάποια άλλη διανομή με προγράμματα για linux δεν κάνει τίποτα αφού ένας μόνος πυρήνας δεν φέρνει την άνοιξη.* + + +### [5. Apegatastasi Linux 6.0]{#s5} + +Από : [Nikos Papachristos](mailto:pap01@hotmail.com) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Εγκατέστησα το SuSE Linux 6.0. Στην προσπάθειά μου όμως να το απεγκαταστήσω και αφού έκανα format από το DOS, και FDISK και επέλεξα \"delete Non-DOS Partition\" +είδα ότι όταν το dos έκανε boot, μου έβγαζε το μήνυμα: \"LI\" και κόλλαγε. Το \"LI\" είναι το αρχικό από το LILO boot που σημαίνει ότι κάπου μέσα στο δίσκο μου +έχει μείνει ένα τμήμα του Linux. Πώς μπορώ να το απεγκαταστήσω εντελώς και να κάνω boot από το dos? Παρακαλώ απαντήστε μου με e-mail. Ευχαριστώ για το χρόνο +σας. + +**ΘΚ :***Κάνε και ένα :\ +fdisk /mbr\ +για να έλθει το master boot record στα ίσια του.* + +**ΕΠ :***kane fdisk /MBR apo to DOS na figei to LInux LOader apo to Master Boot Record tou sklirou sou (ekei tora pou tha vgaleis to linux einai o xoros pou +bainoun oi ioi gia MS windows).* + + +### [6. Εκτύπωση σε Lexmark 1000 color jetprinter]{#s6} + +Από : [Χρήστος Τόλης](mailto:c_tolis@hotmail.com) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Έχω τη διανομή Linux slackware 3.6 Τι πρέπει να κάνω για να μπορέσω να εκτυπώσω στον Lexmark 1000? έχω διαβάσει το How-To από το Cd με το slackware αλλά τίποτα. +Πως μπορώ να αγοράσω το SuSE Linux 6 ? Ευχαριστώ . + +*Μία βόλτα μου στο dejanews μου έδωσε την εξής απάντηση:\ +\"it appears that this printer is not supported under linux. It\'s hardware along the same principle as a winmodem.\"\ +Όπως φαίνεται \...ατύχησες , έχεις printer που δουλεύει μόνο σε WINDOWS (GDI printers μου φαίνεται ότι τους λένε)\ +SUSE 6.0\ +Τώρα θες να ασχοληθούμε και με την \"γκρίζα διαφήμιση\" Τέλος πάντων \... πήγαινε στο: [\.....Για την ευγενή προσφορά του δίσκου του server μας, και την +γενικότερη βοήθεια προς το HELLUG\.....](http://server.hellug.gr/LUGistics/el/pub/SPONSORS_main.php.3). Κλικ στο URL και νάτο το SUSE 6.0* + + +### [7. Α και κάτι άλλο όσο αφορά το KDE 1.0]{#s7} + +Από : [Χρήστος Τόλης](mailto:c_tolis@hotmail.com) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Το KDE 1.0 όταν πάω σε ένα site με τον Netscape Communicator πάει απελπιστικά αργά ! και ο σκληρός δίσκος δουλεύει σαν τρελός. Τι γίνεται ? γιατί έτσι ρε +γαμώτο? Τι απαιτήσεις τελικά έχει αυτό το KDE ? έχω 32mbytes RAM. αν θέλεις ρίξε μια απάντηση. + +*Αμ δεν τον βοηθάς και \'συ. Σπρώξτον λίγο να πάει πιο γρήγορα ! Μήπως δεν έχεις σετάρει καλά το modem σου και την σειριακή ; Ο σκληρός σου δεν είναι μάλλον +πολύ σκληρός \...για να πεθάνει. \`Ανοιξε ένα παραθυράκι με το xosview για να δεις , μήπως το swap σου φορτώνεται όταν δουλεύει ο Νetscape ;\ +Απαιτήσεις ο KDE ; Καμμία παραπάνω από των WIN 9X. Αλλά δεν καταλαβαίνω , γιατί παραπονιέσαι; Αν θες γραφικό περιβάλλον και διάφορα όμορφα και χρωματιστά +παραθυροπρογραμματάκια πρέπει να πληρώσεις και το ανάλογο τίμημα -αυτό της αναμονής-. Βλέπεις τώρα γιατί οι περισσότεροι από \'μας επιμένουν \"κονσολικά\"; (Αν +και τώρα που γράφω αυτή την απάντηση το κάνω από ένα παραθύρι του Kfm -πάει σφαίρα ο kde μου- ) Έχεις 32MB ram. Kαι κάρτα γραφικών; Kαι επεξεργαστή ; Kαι +VERSION του ΧSERVER ;* + + +### [8. Egkatastsh tou Linux]{#s8} + +Από : [G. Sarantopoulos](mailto:3gymn@acropolis.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Exw ena ypologisti P75 me 2 diskous enan 6.4 kai ena 1.2 . Ston 6.4 exw 2 partitions me ta win95 .Thelw na egkatastiso to Linux sto disko ton deutereuonta +(1.2Gb). Diabazw oti thelw 2 partitions alla pws tha kanw egkatastash xoris na xalasw tipota sto disko me ta \"95\" kai pws tha toy pw na egkatastisei to LILO +kai se poio disko tha ginei ayto Eyxaristo ek ton proteron gia to xrono sas. G. Sarantopoulos + +*Κάνε format στον 1.2, βάλε στο CDROM το distribution σου, κάνε boot, και όταν σε ρωτήσει που να το εγκαταστήσει, (το linux) πέστου στον:* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + hdb\ +και στις σελίδες support του isp.* + + +### [12. compile kernel gia ppp]{#s12} + +Από : [Sotiris Ganouris](mailto:kotsman@usa.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +hi\... μετά από πολλές προσπάθειες κατάφερα να μη μου βγάζει το μήνυμα ότι ο daemon πέθανε και να συνδέεται κανονικά (τo kppp) (πολλές φορές μου βγάζει timeout +errors όμως γιατί) αλλά όμως να μην υπάρχει επικοινωνία με το πρωτόκολλο (μάλλον) δηλαδή να μην στέλνονται ή να λαμβάνονται δεδομένα. Διάβασα σε ένα faq ότι +πρέπει να κάνω compile τον kernel να υποστηρίζει ppp. Πιστεύω πως κατάφερα κάτι τέτοιο αφού έχω κάνει compile (make menuconfig dep clean zImage zlilo) πολλές +φορές. Αλλά πάλι στο dmesg δεν μου βγάζει τίποτα μηνύματα ότι υποστηρίζεται το PPP και μάλλον αυτό φταίει. Χρησιμοποιώ το suse linux 6.0. Σωτήρης. p.s. Δεν +υπάρχει ο netscape σε αυτό το πακέτο;(suse 6.0) + +*Σου βγάζει timeout errors γιατί το timeout είναι μικρό. Αύξησέ το από το **setup-Device-Modem Timeout**.\ +Για τα δεδομένα που λες, μάλλον παίρνει αλλά δεν έχεις βάλει τους DNS (Domain Name Servers) στο kppp. Κάπου στο **setup-account-edit** βάλε τους DNS του παροχέα +σου.\ +Το netscape (και όχι \`\`ο\'\' Νetscape όπως \`\`o\'\' M\$ internet eksp10rer) υπάρχει μέσα σε ένα από τα CD του suse.\ +\`Αντε, αν και οι απαντήσεις σου έχουν απαντηθεί όλες σε προηγούμενα τεύχη του magaz, σήμερα με βρήκες στις καλές μου\...* + + +### [13. soundblaster menuconfig etc]{#s13} + +Από : [Τσικλίδης Γρηγόρης](mailto:grtsik@groovy.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Γεια σας Είπα και γω να μπω στο θαυμαστό κόσμο του Linux και πλάκωσαν τα προβλήματα. Απόκτησα την έκδοση 6.0 του SuSE Linux και είπα να κάνω εγκατάσταση σε +άδειο δίσκο 3,2 GB. Παρουσιάστηκαν όμως αρκετά προβλήματα, αν και έχω ανατρέξει στα manual, τα HOW-TO\'s και άλλες οδηγίες από το on line magazine σας. Θα +εκτιμούσα πολύ αν διαθέτατε λίγο από τον ελεύθερο χρόνο σας για τα εξής: 1) Soundblaster 16 (original).Δεν μπορώ να τη στήσω με τίποτα. Δοκιμάζω από το +/usr/src/linux την εντολή make menuconfig και μου βγάζει μήνυμα \"gcc: command not found\" και άλλα πολλά. 2) PPP σύνδεση σε ρυθμό κειμένου. Μπαίνω κανονικά στη +groovynet και αφού δώσω login και password ξεκινά η σύνδεση με dynamic PPP. Και μετά τι γίνεται; Πώς εργαζόμαστε (μήπως υπάρχει κάποιο σαν εκείνο το άγιο +προγραμματάκι που λεγόταν Procomm Plus για Dos;) 3) PPP σύνδεση + +*Η soundblaster είναι plug&play? Αν όχι βάλτην στον πυρήνα, θα δουλέψει 100%. Αν είναι, ψάξε στα isapnptools που περιέχονται στο suse6. Διάβασε το help τους, +και αν δεν τα καταφέρεις, ξαναστείλε mail.\ +Σε \"ρυθμό κειμένου\" (λέγε το κονσόλα άλλη φορά, ok?) προφανώς δεν έχεις βάλει τους DNS. Βάλε στο αρχείο /etc/resolv.conf τη γραμμή +**`"nameserver xxx.xxx.xxx.xxx"`** όπου xxx.xxx.xxx.xxx είναι ο DNS του παροχέα σου.\ +Δεν μπόρεσα να δω την τρίτη ερώτησή σου. Ξαναστείλε τη.\ +φιλικά, vagelis* + + +### [14. LINUX + ΑΠΟΡΙΕΣ]{#s14} + +Από : [ΣΑΡΙΔΑΚΗΣ ΜΑΝ](mailto:logica@agn.forthnet.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +1.ΑΝ ΜΠΟΡΕΙ ΝΑ ΓΙΝΕΙ ΕΓΚΑΤΑΣΤΑΣΗ SERVER Η/Υ PENT.II 400mHZ 2.ΑΝ ΥΠΟΣΤΙΡΙΖΕΙ MULTI SERIAL PORTS ΚΑΙ ΠΟΙΑ 3.ΑΝ ΜΠΟΡΕΙ ΝΑ ΣΥΝΔΕΘΕΙ ΠΑΝΩ ΣΤΟΝ SERVER ΤΕΡΜΑΤΙΚΟ WYSE. +4.ΠΩΣ ΠΡΕΠΕΙ ΝΑ ΕΙΝΑΙ ΦΤΙΑΓΜΕΝΑ ΤΑ ΚΑΛΩΔΙΑ ΑΠΟ ΤΙΣ ΑΚΡΕΣ (SERVER-ΤΕΡΜΑΤΙΚΑ) 5.ΑΝ ΜΠΟΡΟΥΜΕ ΝΑ ΧΡΗΣΙΜΟΠΟΙΗΣΟΥΜΕ ΚΑΡΤΕΣ ΔΥΚΤΙΟΥ 16bit Ή PCI ΚΑΛΩΔΙΟ CAT-5 ΚΑΙ HUB. + +*1. Ναι με Linux μπορείς να έχεις και εσύ έναν αληθινό server σε Pentium.\ +2. Ναι. Αλλωστε αν δεν υποστηρίζονται από Unix που αλλού μένει να χρησιμοποιηθούν (Win 98 terminals/ winmodem access servers); Στα σίγουρα Digi, Cyclades, \... +κοίτα το serial howto για περισσότερες λεπτομέρειες, ή το compatibility list της κάθε Linux διανομής για λεπτομέρειες.\ +3. Ναι αν είναι ένα κοινό τερματικό (vt100,110,200,220,\...)\ +4. Κοίτα το manual του τερματικού σου. Αλλα θέλουν καλώδιο με αντεστραμμένο send/receive ζεύγος (π.χ. το VISA) άλλα όχι (π.χ. τα HP). Πάντως δεν έχει καμμία +διαφορά από το να το συνδέσεις σε οποιοδήποτε άλλο Unix (είτε κατευθείαν στην serial του Η/Υ ή στην multiserial συσκευή). Αν βαριέσαι βρεις τα καλώδια εσύ που +να δεις εμείς.* + + +### [15. Τι γίνεται με την μνήμη μου στο Linux]{#s15} + +Από : [Χρήστος Τόλης](mailto:c_tolis@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Όταν γράφω την εντολή free μου δείχνει ότι έχω μόνο 1 - 2mbytes free. Η υπόλοιπη τι γίνεται? Το KDE πάει σαν Κόταααααααααααααααα - έλεγξα αυτά που μου είπες +αλλά τίποτα - και λέω μήπως φταίει η γ\...\.... η μνήμη , άσε που μου γράφει ότι υπάρχει πρόβλημα με τις βιβλιοθήκες (jpeg!) Έβαλα ελληνικά αλλά στο Netscape +Navigator το μέγεθος των γραμματοσειρών είναι μικρό. Αυτά τα ολίγα - ευχαριστώ - . + +*Η υπόλοιπη μνήμη είναι cashed, και για αυτό η free σου αναφέρει λίγη. Do not worry, αν το μηχάνημά σου τη χρειαστεί, θα την πάρει\...\ +Δεν ξέρω/θυμάμαι τι σου είπαν/είπα, αλλά έλεγξε αν φορτώνεις πολλά από τα kdoειδή προγράμματα τα οποία να μην χρειάζεσαι.\ +Για την βιβλιοθήκη jpg, απλά πάρε το πιο καινούριο πακέτο. Παντού υπάρχει\... λέγεται libjpg αλλά δεν θυμάμαι σε τι έκδοση βρίσκεται :)))\ +Για τα fonts στο netscape, μεγάλωσέ τα από το **edit-preferences-fonts** για τα encodings iso-8859-1 και iso-8859-7.\ +Φιλικά και καλό Πάσχα, Βαγγέλης.* + + +### [16. Redhat 5.2 Ή Suse 6.0]{#s16} + +Από : [Βασιλειάδης Χρύσανθος](mailto:vasilias@enl.auth.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Αυτόν τον μήνα των γιορτών το RAM δίνει δώρο το Suse 60\....προχθές εγώ όμως πήρα σε cd to Redhat 5.2\....τελικά τι με συμφέρει να εγκαταστήσω και γιατί? +παλιότερα είχα τα slackware kai redhat 5.0 από τα οποία το redhat μου άρεσε αφάνταστα!!!! Ευχαριστώ\....φιλικά\...Χρύσανθος + +*Βάλε RedHat, όχι για κανένα άλλο λόγο, αλλά γιατί το CD του RAM δεν δουλεύει\... :)))\ +Φιλικά, Βαγγέλης.* + + +### [17. Ποιος Window Manager?]{#s17} + +Από : [Σωτήρης Παρμάκης](mailto:sotpar@geocities.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Ποιος θεωρείται τώρα ο καλύτερος window manager για Linux? Προς το παρόν έχω KDE αλλά τώρα σκέφτομαί να βάλω Gnome + +*Αν διαβάσεις ένα άρθρο στο [magaz](http://magaz.hellug.gr) που βρίσκεται [εδώ](../10/03_gnome.html), θα δεις ότι το Gnome δεν είναι window manager!\ +Πάντως, είναι πολύ καλό, βάλτο.\ +Να θυμάσαι, ότι wm καλός είναι ο ελαφρύς wm. Θα σου συνιστούσα να βάλεις τον icewm (αν είσαι νέος στο linux θα τον εκτιμήσεις ιδιαίτερα) ή τον windowmaker.\ +Εμείς πέρα από προτάσεις δεν μπορούμε να σου πούμε τίποτα άλλο\... Περί ορέξεως, **κολοκυθόπιτα** :)))\ +Φιλικά, Βαγγέλης* + + +### [18. LILO.CONF]{#s18} + +Από : [Νταής Γιώργος](mailto:Ackroyd_2@Hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Έχω εγκαταστήσει το Linux RedHat 5.2. Το πρόβλημα είναι ότι ό,τι και αν αλλάξω στο αρχείο /etc/lilo.conf (π.χ. χρησιμοποιώντας τον vi editor), το lilo δεν +αλλάζει τη συμπεριφορά του. Για παράδειγμα άλλαξα το timeout από 50 σε 20, αλλά μάταια. Το πιο σπουδαίο είναι ότι δεν μπορώ να αλλάξω το path για το νέο kernel +που εγκαθιστώ! Το αρχείο lilo.conf, ως αρχείο, αλλάζει, αλλά το lilo δεν ενδιαφέρεται για τις αλλαγές. Έλεγξα τα permissions, δεν υπάρχει πρόβλημα για + +### [19. LILO.CONF]{#s19} + +Από : [Νταής Γιώργος](mailto:Ackroyd_2@Hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Έχω εγκαταστήσει το Linux RedHat 5.2. Το πρόβλημα είναι ότι ό,τι και αν αλλάξω στο αρχείο /etc/lilo.conf (π.χ. χρησιμοποιώντας τον vi editor), το lilo δεν +αλλάζει τη συμπεριφορά του. Για παράδειγμα άλλαξα το timeout από 50 σε 20, αλλά μάταια. Το πιο σπουδαίο είναι ότι δεν μπορώ να αλλάξω το path για το νέο kernel +που εγκαθιστώ! Το αρχείο lilo.conf, ως αρχείο, αλλάζει, αλλά το lilo δεν ενδιαφέρεται για τις αλλαγές. Έλεγξα τα permissions, δεν υπάρχει πρόβλημα για το αρχείο +lilo.conf. Τι να κάνω; + +*Γιώργο, για να ενεργοποιηθούν οι αλλαγές, πρέπει να ξανατρέξεις το lilo ώστε να ενημερωθεί. Δηλαδή, μετά από κάθε αλλαγή που κανείς, τρέξε το /sbin/lilo. Για +πιο πολλές πληροφορίες, man lilo.* + + +### [20. dial-up networking]{#s20} + +Από : [Λαζαρίδης Κωστας](mailto:kostalfi@med.auth.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Είμαι καινούριος χρηστής του Λινουξ. Για την ακρίβεια αγόρασα ένα πακέτο suse 6.0 Το εγκατέστησα χωρίς προβλήματα με μόνη εξαίρεση ότι δεν μπορώ να κάνω dial up +networking στο ΑΠΘ oπου δεν υπάρχει πλέον unix server αλλά dial-up server win95/98.τι setup πρέπει να κάνω στο κppp ώστε να γίνει η σύνδεση; ακόμα δεν βρήκα πως +ρυθμίζουμε τον kernel στα απλά X-windows eνω to βρήκα στα win95-like!! + +*Φίλε Κώστα, [Πήγαινε εδώ](http://www.linux-howto.com/ptHOWTO/PPP-HOWTO) να ρίξεις μια ματιά\... Το ότι το ΑΠΘ δεν έχει unix δεν έχει καμία σχέση με το αν εσύ +μπορείς να συνδεθείς ή όχι\...\ +Φιλικά, Βαγγέλης.* + + +### [21. driver]{#s21} + +Από : [παχνης Κώστας](mailto:kpachnis@yahoo.com) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Μήπως υπάρχει driver για την creative 3d blaster banshee για Linux? Εχω το s.u.s.e linux 6.0 και δεν μου την αναγνωρίζει ΕΥΧΑΡΙΣΤΩ! + +*Πραγματικά ευχή μου να ρίχνατε όλοι εσείς που στέλνετε τέτοιου είδους mail μία ματιά στα sites των distribution σας.\ +Φίλε μου η **SUSE** έχει βγάλει με τα updates για το 6.0 και **SERVER** για τις banshee κατέβασέ τον διάβασε το documentation και σέταρέ την.* + + +### [22. SUSE]{#s22} + +Από : [Τσιμπινός Βαγγελης](mailto:ktsib@tee.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Mπορείτε μήπως να μου πείτε πια είναι η διαφορά ανάμεσα στα distributions Redahat, Slackware , SUSE ??????? (Kαι φυσικά ποια είναι η καλύτερη από όλες τις +απόψεις) Ευχαριστώ + +*Η βασική διαφορά είναι στον τρόπο εγκατάστασης των πακέτων και στο administration του συστήματος. Το Red Hat 5.0 χρησιμοποιεί για administration το linuxconf +και GLINT Το SuSe το YAST Το Slackware το δικό του setup Τα δύο πρώτα εγκαθιστούν rpm πακέτα ενώ το Slack .tgz (tar gzipped)\ +Ποια είναι η καλύτερη; Εγώ έχω SuSe,ο Βαγγέλης προτιμά Red Hat, κάποιος άλλος Caldera open και κάποιος άλλος Slack. Βάλε όποια θες. Όλες Linux είναι.* + + +### [23. POP mail]{#s23} + +Από : [Kossikidis Dimitris](mailto:fanatic_gr@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αγαπητοί συντάκτες του ηλεκτρονικού περιοδικού. Έχω εγκατεστημένο το RedHat 5.2 και θέλω να μάθω αν μπορώ, και πώς, να κάνω το linuxάκι μου να είναι POP server, +έτσι ώστε τις ώρες που είμαι on line να μπορώ να παίρνω mail. Προς το παρόν μόνο στέλνω\... :-) + +*Δεν θέλεις να κάνεις το μηχάνημα σου POP server. Θέλεις απλά έναν pop client όπως το pine, το elm (για κονσόλα), το netscape ή το xfmail (για X-windows). Οι +ρυθμίσεις του δε, δεν έχουν καμμία σχέση με το Linux, αλλά εξαρτώνται από τον εκάστοτε client που θα επιλέξεις.* + + +### [24. X11]{#s24} + +Από : [Τσιμπινός Βαγγέλης](mailto:ktsib@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Θα ήθελα να ρωτήσω τι ακριβώς είναι τα Χ11 libraries and headers\..... καθώς επίσης που μπορώ να τα βρω Ευχαριστώ + +*Είναι, όπως λεει και το όνομα τους, libraries και headers. Αν δεν ξέρεις τι είναι αυτά, μην ασχολείσαι. Θα τα βρεις στο CD από όπου εγκατέστησες το Linux.* + + +### [25. script]{#s25} + +Από : [Tσιμπινός Βαγγέλης](mailto:ktsib@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Θα ήθελα επίσης να ρωτήσω πως θα ήταν δυνατόν να δημιουργήσω ένα εκτελέσιμο αρχείο από το linux και να μπορεί να τρέχει σε περιβάλλον windows??????????? +Ευχαριστώ + +**ΜΚ :***Να το κάνεις compile με τρόπο που να καταλαβαίνουν τα Windows. Αν δεν είσαι προγραμματιστής, ξέχασε το. Αν είσαι προγραμματιστής, πρέπει να το ξέρεις +καλύτερα από εμάς που δεν είμαστε.* + +**ΕΠ :** *Αν μπορούσαν τα windows να τρέχουν natively τα binaries του Linux γιατί να έμπαινες στον κόπο να βάλεις Linux; Το αντίθετο πάντως μπορείς υπό +προϋποθέσεις να το κάνεις.* + + +### [26. Greek]{#s26} + +Από : [Manolis Hourdakis](mailto:aqua@her.forthnet.gr) + +Απάντηση : [Θρασύβουλος Κοτσιφάκης](mailto:tkots@softhome.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Γεια σας. Εδώ και καιρό προσπαθώ να εγκαταστήσω ελληνικές γραμματοσειρές στα Χ και συγκεκριμένα στο netscape. Ακολούθησα τις οδηγίες και τα ta links στο +www.linux.gr (Εγκατάσταση Ελληνικών) αλλά καμμιά από αυτές δεν λειτουργούσε. Σας παρακαλώ να ξανανεβάσετε αυτά τα αρχεία. Φιλικά, Μανώλης \'MMXGN\' Χουρδάκης. + +**ΘΚ :***Κοίταξε στο τεύχος 13 του magaz το άρθρο \"Ελληνικά στο Red Hat 5.0\" Τα link που καλoύν τον argea δεν ισχύουν. Κοίτα στο τέλος του παραπάνω άρθρου για +τις διευθύνσεις που σε ενδιαφέρουν.* + +**ΒΠ :***Ρε φιλαράκο, καλά όλα αυτά, στο magaz έψαξες? Στο προτελευταίο τεύχος ( [δηλαδή εδώ](../13/03_grredhat2.html)), υπάρχει ένα άρθρο για το πως να βάλεις +ελληνικά και στο netscape αλλά και στα Χ, αλλά και στην κονσόλα. Η διαδικασία είναι απλούστατη\...\ +φιλικά, Vagoulas.* + + +### [27. NT and SuSe Boot]{#s27} + +Από : [Κώστας Καρακοντάκης](mailto:kokar@poboxes.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Εχω στο σύστημα μου win98,win NT και SuSe Linux.Τα δύο στο 1ο μου δίσκο και το linux στο δεύτερο. Πώς θα έχω την δυνατότητα να προσθέσω στο boot των ΝΤ την +επιλογή για linux? Ο πρώτος μου δίσκος έχει ένα partition FAT16 200mb,ενα partition NTFS 800mb και ένα FAT32 4gb.Ο δεύτερος ένα linux ext2 1.5gb (logical) και +ένα FAT32 1.5gb Προσπάθησα να χρησιμοποιήσω το bootpart αλλά χωρίς αποτέλεσμα. Δώστε μου τα φώτα σας pleassse. + +*emeis gia linux mporoume na sou dosoume apantisi, oxi gia ta NT\...* + + +### [28. τι γίνεται με 2 δίσκους και ΝΤ;]{#s28} + +Από : [Δημήτρης Στραντζιας](mailto:athina@netfiles.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Αγαπητοί φίλοι, Είμαι παλιός φίλος των υπολογιστών, και προγραμματίζω σε C++ σε περιβάλλον ms Windows.Πρώτη φορά σκέφθηκα για το Linux πριν από δύο χρόνια +περίπου όταν ξεκίνησα να γίνω ISP . Απογοητεύθηκα. Δεν μπόρεσα να κάνω εγκατάσταση. Τώρα εγκατέλειψα, έκλεισα τον κόμβο που είχα και βρήκα περισσότερο ελεύθερο +χρόνο, ώστε να ασχοληθώ πάλι με προγραμματισμό. Ευκαιρία. Ένας φίλος και συνεργάτης, άκουσε για το Linux και σκέφθηκε ότι πιθανώς να χρειαστεί να μεταφέρει το +software που έφτιαξε και πουλάει σε πλατφόρμα ms windows - σχεδιαστικό πακέτο γραμμένο εξ ολοκλήρου σε C++ - σε περιβάλλον Unix - Linux. Πριν από 20-25 μέρες, +ένας φίλος με έδωσε το βιβλίο \"Βίβλος του Linux\" έκδοση 95 ή 96.Πρώτη φορά άρχισα να ασχολούμαι με Unix clone. Πήρα το Redhat 5.1, το εγκατέστησα σε ένα +σκληρό δίσκο όπου είχα και τα windows NT v.4.00, έκανα ότι μου έλεγε το manual και από τις επιλογές του boot.ini των ΝΤ, διάλεγα ΝΤ ή Linux. Πήρα κατόπιν το +SuSe 6.00 και φαίνεται ή ότι οι οδηγίες δεν ήταν κατάλληλα γραμμένες ή έκανα κάποιο λάθος. Αποτέλεσμα. Μπερδεμένα πράγματα. Το νέο kernel (2.0.36) δεν έκανε +καλό compilation και ένα σωρό μηνύματα λάθους στην εκκίνηση του lilo? ls-loader?. Σβήνω τα partition, προσπαθώ να κάνω νέα με το SuSe δεν καταφέρνω να κάνω swap +partition. Πάλι από την αρχή με το Redhat, κάνω partition το εγκαθιστώ, και αρχίζω με το SuSe ( αυθεντική έκδοση από Παπασωτηρίου) με επιλογή install from +scratch. Τώρα βλέπει το swap,κάνει ότι κάνει και τέλος με ρωτάει. Θέλεις LILO? θέλω του λέω. -Master Boot Manager or boot record in your partition? -Boot record +του λέω. Πάω μετά να ξεκινήσω το μηχανάκι, και αρχίζει να φορτώνει LILO. Μπουτάρω με dos δισκέτα, βλέπω στο C:\\ και βλέπω φορτωμένα αρχεία του linux και +πουθενά το boot.ini των ΝΤ. Λέω λάθος, πάω να φορτώσω τα ΝΤ σε ένα σημείο κάνει επανεκκίνηση το μηχανάκι και μπροστά μου πάλι LILO.. Κάνω fdisk, format πάλι +lilo. - εκ των υστέρων έμαθα ότι χρειάζεται fdisk/MBR αλλά πολύ αργότερα. Αλλάζω σειρά τους δίσκους κάνω τον master - slave και τουναπάλιν και εγκαθιστώ στον +master τα ΝΤ και σε partition του slave το SuSe v.6.00. Τώρα πλέον όλα λειτουργούν κανονικά, με μια μικρή λεπτομέρεια. Μπουτάρω στο linux από δισκέτα. Το \#dd +if=/dev/hdan of=/bootsect.lnx bs=512 count=1 και η πρόσθεση του Bootsect.lnx στον boot δίσκο και η ανάλογη εγγραφή στο boot.ini των ΝΤ, έχουν αποτέλεσμα μόνο αν +τα δυο λειτουργικά τρέχουν στον ίδιο σκληρό. Δεν ξέρω τι να κάνω τώρα. Αυτά για πρώτη φορά και ένα μεγάλο συγνώμη για τον χρόνο που σας απασχολώ. Ευχαριστώ +Στράντζιας Δημήτρης + +*Για NT, Win, DOS, Linux κλπ στον ίδιο δίσκο να πας στο http://www.hellug.gr/gr/howto/howto/pub/html/index-4.html κάτι ίσως να βρεις εκεί που να σε +βοηθήσει\...* + + +### [29. Περί Window Manager και Desktop (2)]{#s29} + +Από : [Σωτήρης Παρμάκης](mailto:sotpar@geocities.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Επανέρχομαι στο θέμα window manager και desktop. Είδα στο Linuxberg πως ένας πολύ καλός συνδυασμός winow manager και desktop είναι το fvwm2gnome. +(http://fvwm2gnome.fluid.cx/) Όμως έχω ακούσει πως το fvwm2 βασίζεται σε εμπορικές -όχι GPL- libraries. (όπως άλλωστε και το KDE)(κάτι που είναι αντίθετο με τη +φιλοσοφία του gnome) Και κάτι άλλο. Μιας και είμαι αρχάριος χρήστης του Linux θα ήθελα να μου προτείνετε ένα βιβλίο ώστε να μη με πιάνει πονοκέφαλος κάθε φορά +που booτάρω σε Linux, (να μάθω να το χρησιμοποιώ) και να απαλλαγώ απ\'τα ακατονόμαστα. + +*Την ερώτηση για τους window managers δεν την κατάλαβα. Ήταν ερώτηση ή παρατήρηση; Για τα βιβλία, μια βόλτα στον Παπασωτηρίου θα σου λύσει τις απορίες.* + + +### [30. Pou einai to XFGreekFNTS?]{#s30} + +Από : [Tsalicoglou Isaac](mailto:tcup@bigfoot.com) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Γεια σας, διάβασα τις οδηγίες σας για την εγκατάσταση ελληνικών παντού στο linux. Έχω ήδη βάλει ελληνικά εδώ και καιρό, αλλά τα ελληνικά για Χ δεν μπορώ να τα +βάλω. Στις οδηγίες λετε να κατεβάσω το XFGreekFNTS-1-1.noarch.rpm από το argeas.cs-net.gr. Είναι το μοναδικό αρχείο από αυτά που λετε που δεν βρήκα. Πού μπορώ +να το βρω; Sorry gia ta greeklish, alla de mpaino windoze 98 pia - ekei pou exo ellinika, an kai ta g\...\.... den typonoun ellinika ;-) TIA Isaac + +*πήγαινε στο members.xoom.com/Vrypan και θα βρεις αρκετά πράγματα εκεί.* + + +### [31. Συμβατότητα Word, Ελληνικά]{#s31} + +Από : [Τάκης Άλβας](mailto:alvas@freemail.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + + +### [32. Συμβατότητα Word, Ελληνικά]{#s32} + +Από : [Τάκης Άλβας](mailto:alvas@freemail.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Κάτι που με προβληματίζει στο Linux είναι αν υπάρχει δυνατότητα ανταλλαγής εγγράφων MS-Word των Windows με Ελληνικά, π.χ. σε μορφή RTF. Υπάρχουν ή αναμένονται +εφαρμογές για το Linux με τέτοια δυνατότητα; Χωρίς αυτό δεν μπορώ να ξεφορτωθώ τα Windows, επειδή δεν θα μπορώ να δουλέψω. Ποιες διανομές του Linux και ποιες +εφαρμογές είναι καλύτερες στο θέμα της συμβατότητας με τις πιο συνηθισμένες μορφές αρχείων, ή δείχνουν να έχουν προοπτικές; + +*Μπορείτε να δοκιμάσετε τα StarOffice 5.0 και WordPerfect 8.0 που έχουν ειδικά φίλτρα για αρχεία Word. Σχετικά δε με τα ελληνικά, το θέμα έχει συζητηθεί +επανειλημμένως στη λίστα linux-greek-users και στο Magaz.* + + +### [33. Red Hat & SuSE]{#s33} + +Από : [Γιάννης Χούκλης](mailto:isole@freemail.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αυτές οι δύο εκδόσεις του Linux τι διαφορετικό έχουν και ποιο συμφέρει να αγοράσει κανείς προκειμένου να εκμεταλλευτεί πλήρως της δυνατότητες δικτύου και +σύνδεσης στο Internet? Ευχαριστώ εκ\' των προτέρων. Με εκτίμηση Γιάννης, Isole, Χούκλης 18άχρονος Power User + +*Οι διαφορές τους είναι θέμα γούστου, και δεν υπάρχει καμία διαφορά σε δικτυακές δυνατότητες.* + + +### [34. Πρόβλημα με το mouse]{#s34} + +Από : [Σωτήρης Παρμάκης](mailto:sotpar@geocities.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Εχω ένα mouse Logitech Trackman Marble FX, σε θύρα PS/2. Το πρόβλημα είναι ότι ορίζοντας το, ως PS/2 mouse, δεν δουλεύει. Μόλις προσπαθήσω να τρέξω Xwindows μου +βγάζει μήνυμα: Fatal server error Cannot open mouse (operation not supported by device) Δοκίμασα και άλλες επιλογές όπως logitech mouseman, αλλά συνεχίζει να +μην δουλεύει. (Πριν το παλιό μου σειραϊκό mouse λειτουργούσε μια χαρά.) Υπάρχει τρόπος να το κάνω να δουλέψει; Κάτω από dos δουλεύει και με τον driver του +παλιού μου σειραϊκου ποντικιού(από ενόν Quest 386sx) Ευχαριστώ προκαταβολικά. + +*Να υποθέσω ότι δεν αχείς δήλωση χωστά το device? Διάβασε το /usr/src/linux/Documentation/devices.txt* + + +### [35. Προβλήματα με το ποντίκι (2)]{#s35} + +Από : [Σωτήρης Παρμάκης](mailto:sotpar@geocities.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Εχω ένα mouse Logitech Trackman Marble FX, σε θύρα PS/2. και Redhat 5.1 kernel 2.0.35 Το πρόβλημα είναι ότι ορίζοντας το, ως PS/2 mouse, δεν δουλεύει. Μόλις +προσπαθήσω να τρέξω Xwindows μου βγάζει μήνυμα: Fatal server error Cannot open mouse (operation not supported by device) (Πριν το παλιό μου σειραϊκό mouse +λειτουργούσε μια χαρά.) Το ποντίκι το όρισα με το mouseconfig. Έκανα και ξανά compile στον πυρήνα γιατί δεν ήξερα αν είχα υποστήριξη για PS/2, και όρισα πάλι το +ποντίκι τρέχοντας το mouseconfig. Πάλι τίποτα. Υπάρχει τρόπος να το κάνω να δουλέψει; + +*Στις 29 Απριλίου είχαμε απαντήσει στην ίδια ερώτηση για το device, αλλά δεν μας διευκρινίζεις πάλι, σε ποιο device είναι ορισμένο το ποντίκι σου; Αν δεν μας +πεις αυτό το στοιχείο δεν μπορούμε να βοηθήσουμε.* + + +### [36. kppp]{#s36} + +Από : [Τσιμπινός Βαγγέλης](mailto:ktsib@tee.gr) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Έχω ένα πρόβλημα με το kppp. Πολύ απλά μου λέει ότι το pppd πεθαίνει αμέσως μετά την απάντηση του modem του ISP. Έχω κάνει τον kernel support με PPP και εχω +δημιουργήσει ένα interface ppp0 με το yast.(εχω SuSE 6.0) Τι πρέπει να κάνω???????? Ευχαριστώ + +*Στο kppp υπάρχει ένα help me FAQ. Εκεί αναφέρεται και το πρόβλημα σου και δίνει και κάποιες πιθανές αιτίες και λύσεις (όπως π.χ. η απομάκρυνση της γραμμής lock +κλπ.) Διάβασε το, πιθανώς θα σε διαφωτίσει.* + diff --git a/content/articles/16/01_editorial.md b/content/articles/16/01_editorial.md new file mode 100644 index 0000000..fbaf89a --- /dev/null +++ b/content/articles/16/01_editorial.md @@ -0,0 +1,119 @@ ++++ +title = 'Editorial' +date = '1999-08-01T00:00:00Z' +description = '' +author = 'Michalis Kabrianis(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 16'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία μικρή ιστορική αναδρομή του περιοδικού, γιατί αυτό το τεύχος άργησε, και γιατί επανήλθε το εditorial\....* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στις 21 Νοεμβρίου 1997, στη λίστα συζητήσεων για τις ελληνικές μεταφράσεις (Howto) και λίγο μετά την ανακοίνωση του ως νέο μόνιμο +\"σπίτι\" των μεταφρασμένων Howtos, από τον τότε συντηρητή και συντονιστή των μεταφράσεων [Φώτη Γεωργάτο](mailto:gef@hellug.gr), κάποιος [Παναγιώτης +Βρυώνης](mailto:vrypan@hellug.gr) (που είχε αρχίσει το localization του KDE) έκανε σχόλια για την εμφάνιση του site και έγραφε το εξής: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Yparxoun arketoi endiaferomenoi gia thn synta3h enos ellhnikou linux + on-line magazine ? 8a mporouse na stegastei sto www.linux.gr ? + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ξεκίνησε μία διαδικασία/κουβέντα στην λίστα Howto η οποία είχε ως αποτέλεσμα τη συνάντηση, στις 27 Δεκεμβρίου 1997, στη \"γνωστή - άγνωστη\" καφετέρια των +Εξαρχείων, των προαναφερθέντων, εμένα και του [Γιώργου Κουλογιάννη](mailto:gkoul@linux.gr), ενός από τους πρώτους Linuxάδες στην Ελλάδα, και \"ιδιοκτήτη\" του +domain linux.gr. + +Η συνέχεια; + + Subject: Magaz: ellhniko periodiko gia to Linux + From: Georgatos Photis (gef@ceid.upatras.gr) + Date: Wed 31 Dec 1997 - 20:57:49 EET + + Hello All! + + Opws hdh diabasate kai sto subject, to neo + on-line ellhniko periodiko gia to Linux + einai gegonos. + + H 1h toy ekdosh brisketai sto + http://www.linux.gr/magaz + Exei poikila themata pou diamorfwnontai, + alla anamenetai na statheropoihthei to + Sabbatokyriako... + + Peraste na mas peite thn gnwmh sas, + na mpeite sto pneyma toy kai ean thelete na + syneisferete kiolas sto epomeno teyxos toy. + + Kalh prwtoxronia + + Mixalhs Kabrianis + Gewrgatos Photis + Panagiwths Vrywnis + +Το [πρώτο τεύχος](http://magaz.hellug.gr/01/index.html), είχε 6 άρθρα και το Editorial-αναγγελία γέννησης. Τα άρθρα υπέγραφαν οι [Φώτης +Γεωργάτος](mailto:gef@hellug.gr), [Κεραμίδας Γιώργος](mailto:keramida@hellug.gr), [Βρυώνης Παναγιώτης](mailto:vrypan@hellug.gr) και [Καμπριάνης +Μιχάλης](mailto:kabrianis@hellug.gr). Σημείωσε δε ανέλπιστη επιτυχία, αφού η πρώτη σελίδα του είχε 800 hits(!!!), γεγονός το οποίο σχολιάσαμε στο [δεύτερο +τεύχος](http://magaz.hellug.gr/02/index.html), το οποίο βγήκε (όπως αναμενόταν) ένα μήνα αργότερα.\ +Μέσα στο 1998 το περιοδικό έβγαλε 10 τεύχη. Λεπτομέρειες περί αυτού, στο [Editorial του πρώτου τεύχους του 1999 +(11)](http://magaz.hellug.gr/11/).\ +Αυτή τη στιγμή, περνάμε μία φάση ανασυγκρότησης. Αν σας ξενίζει, να σας πληροφορήσω ότι την ίδια φάση είχαμε περάσει και πέρυσι το καλοκαίρι. Η διαφορά όμως +είναι αισθητή. Πέρυσι το καλοκαίρι ήμασταν 5 άτομα, και λόγω εξετάσεων (Φώτης, Γιώργος) στρατού (Παναγιώτης) φόρτου εργασίας (εγώ και ο Ευριπίδης) το περιοδικό +πέρασε μία περίοδο χειμέριας νάρκης \"εκτός εποχής\" (γιατί πως αλλιώς θα μπορούσε να είναι χειμέρια νάρκη Ιούλιο μήνα;). Φέτος το καλοκαίρι, λόγω κούρασης, +έλλειψης ιδεών, αδειών, φόρτου εργασίας, απουσίας από την Ελλάδα, άλλων υποχρεώσεων, όλα σχεδόν τα στελέχη του Magaz (που τώρα πια δεν είναι τα ίδια 5) +υποχρεωθήκαμε να το αφήσουμε σε δεύτερη μοίρα. Αυτό βέβαια δεν σημαίνει τίποτα. Το περιοδικό έχει γράψει ιστορία, και θα συνεχίζει να γράφει. Όπως στο παρελθόν +μας \"έσωσαν\" από πολύ δύσκολη θέση οι φίλοι (θα τους διαβάσετε όλους πάλι στο Editorial του πρώτου τεύχους του 1999) έτσι και τώρα ελπίζουμε ότι θα μας +βοηθήσετε εσείς να ξεπεράσουμε αυτόν το σκόπελο. Αν σας φαίνεται παράξενος ο όρος κούραση, να σας πούμε ότι 3 από τους σταθερούς αρθρογράφους του Magaz +συμμετείχαν από το Σεπτέμβριο (και λίγο νωρίτερα) μέχρι το Φεβρουάριο στη διαδικασία ίδρυσης και δυναμικού ξεκινήματος του Hellug. Από τότε, άλλοι (οι +περισσότεροι) αλλάξαμε δουλειά, άλλοι άρχισαν να αρθρογραφούν σε έντυπα περιοδικά, βοηθώντας έτσι περισσότερο το Linux, άλλοι παντρεύτηκαν/αρραβωνιάστηκαν. +Επιστρέψαμε όμως, και θα συνεχίσουμε το Magaz πλουσιώτερο, δυνατότερο, ομορφότερο και πλέον ωριμότερο, για εσάς, και μαζί με εσάς. Γιατί οι 3500 επισκέψεις το +μήνα (τώρα τόσες έχουν φτάσει) μας γέμισαν υποχρεώσεις, μας άγχωσαν και δεν μας επιτρέπουν να κάνουμε πίσω. Ξυπνήσαμε τον κοιμώμενο γίγαντα που λέγεται Ελληνική +Linux κοινότητα με αποτέλεσμα την ίδρυση του Hellug (όχι, δεν το οικοιοπούματε, απλά \"δεχόμαστε\" ότι βάλαμε το λιθαράκι μας για το ξεκίνημα) και μέσω και των +λιστών του αφανούς ήρωα Γιάννη Ιωάννου, που μας βοήθησαν να δεχόμαστε τα σχόλιά σας, να μας γνωρίσετε και να σας γνωρίσουμε, συνεισφέραμε στο να αναγνωρίζεται +αυτή τη στιγμή το Linux ΚΑΙ στην Ελλάδα ως σοβαρή και καλύτερη εναλλακτική πρόταση για \"άλλα\" λειτουργικά. Τι περιμένουμε από εσάς; Πολύ απλά, τον λίγο χρόνο +σας. Έχουμε να σας προτείνουμε άρθρα για να συνεισφέρετε, και βέβαια, ότι μπορείτε να φανταστείτε και δεν βρίσκεται στις προτάσεις, είναι ευπρόσδεκτο. Παρακαλώ +μόνο, ΠΡΙΝ τη συγγραφή, επικοινωνήστε [μαζί μας](mailto:magaz@hellug.gr) για να \"κατοχυρώσετε\" το θέμα ούτως ώστε να μην γράφουν δύο άνθρωποι το ίδιο πράγμα. + + Θέματα: + + Κατηγορία Howto + Callback στο Linux + Στήσιμο scanner στο linux και προγράμματα για scanning + Προγραμματισμός σε QT, GTK, GNOME + Infrared communication + SGML και LINUXDOC tutorial + Κατηγορία αναλύσεις + Linux και POSIX + Το Linux σαν router + CVS. Τι είναι τι κάνει, πως το κάνει + Κατηγορία παρουσιάσεις + Παρουσίαση του Koffice + Παρουσίαση του Mozilla + Παρουσιάσεις νέων Distributions + Παρουσιάσεις Window managers (Fvwm, Window maker, GvWM κλπ) + Κατηγορία updates παλαιότερων άρθρων + Update για Samba v2 και kernel 2.2 (τεύχος 2/1998) + Update StarOffice για v5.1 (teyxos 3,4/1998) + Update για KDE v. 1.1.1 ή και 2.0 (τεύχος 3/1998) + Update για IP Masq σε kernel 2.2 και ipchains (τεύχος 5/1998) + +Αυτό το τεύχος έχει τις εξής αλλαγές: + +- Επιστρέφει το editorial μετά από απουσία 5 τευχών. **Εμένα** μου έλειψε ένα βήμα για να αναπτύσσω τις απόψεις μου. Ελπίζω και σε σας. +- Για πρώτη φορά στα \"χρονικά\" του Magaz, ενημερώνεται παλαιότερη σελίδα, και συγκεκριμένα η σελίδα με τις [ρυθμίσεις του Xisp για τους + providers](http://magaz.hellug.gr/06/05_xisp2.html), μετά από αίτηση (και απάντηση στην ερώτησή μας) της OteNet. +- Για πρώτη φορά έχουμε άρθρο γραμμένο στα Αγγλικά, μια που θα πρέπει να μπορεί να το διαβάσει και ένας που δεν μιλάει ελληνικά. Μιλάμε για το άρθρο που είναι + αφιερωμένο στο August, έναν html editor, τον οποίο ο δημιουργός του, [Johan Bengtsson](mailto:johanb@lls.se) μας άφησε να το τροποποιήσουμε για να το + χρησιμοποιήσουμε στο Magaz. + +Άλλα άρθρα που θα βρείτε σε αυτό το τεύχος είναι οδηγίες εγκατάστασης του τροποποιημένου August, και, για άλλη μία φορά, οδηγίες εγκατάστασης ελληνικών στο +Linux, από τον [DJ Art](mailto:djart@hellug.gr), ένα άρθρο για τον προγραμματισμό σε Gtk από τον [Γιώργο Κεραμίδα](mailto:keramida@hellug.gr), την ανανεωμένη με +372 πλέον διακριτά μέλη, λίστα των Ελλήνων χρηστών linux, και φυσικά το τεράστιο πλέον Mailbox. Καλή ανάγνωση, και καλές διακοπές, για όσους θα φύγουν από δω +και πέρα. + +Υ.Γ. Το τεύχος αυτό δεν έχει περάσει από ορθογραφικές διορθώσεις. Συγχωρήστε με αλλά φταίω εγώ που δεν τα έστειλα στον διορθωτή. Ελπίζω να μην έχουμε πολλά +λάθη. diff --git a/content/articles/16/02_grlinux.md b/content/articles/16/02_grlinux.md new file mode 100644 index 0000000..9b62e83 --- /dev/null +++ b/content/articles/16/02_grlinux.md @@ -0,0 +1,112 @@ ++++ +title = 'Ελληνικά στο Linux' +date = '1999-08-01T00:00:00Z' +description = '' +author = 'DJ Art' +issue = ['Magaz 16'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Οι (ακόμα) νεώτερες οδηγίες για την εγκατάσταση Ελληνικών στο Linux, για την κονσόλα και για X-Windows.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αγαπητοί φίλοι γειά σας. Αυτές είναι οι πιο καινούριες οδηγίες εγκατάστασης των ελληνικών στα X και στην κονσόλα. Θα χρειαστείτε τρία το πολύ πακέτα. Αυτά είναι +οι γραμματοσειρες του **Graphis**, ένα πρόγραμμα αλλαγής πληκτρολογίου στα X-Windows και ένα πακέτο για τα ελληνικά στην κονσόλα. + +Το **Graphis** είναι ένα project του **Hellug**, το οποίο έχει σαν στόχο την ομαδοποίηση των ήδη υπαρχόντων πακέτων γραμματοσειρών, αλλά και την επίλυση αρκετών +προβλημάτων τους. Η διεύθυνση του **Graphis** στο Internet είναι ή εναλλακτικά . Απο εκεί μπορείτε να +κατεβάσετε τις γραμματοσειρές σε .rpm πακέτο ή σε source μορφή (.tar.gz). + +Για να εγκατασταθούν τα ελληνικά στο σύστημά σας πρέπει να γίνουν οι παρακάτω ενέργειες: (Πρέπει να είμαστε root) + +- Εγκαθιστούμε το πακέτο Graphis (rpm -ivh xfntgr-xx-x.noarch.rpm). Αν το σύστημά σας δεν υποστηρίζει rpm πακέτα, τότε θα πρέπει να κάνετε την εγκατάσταση + μόνοι σας: Για να γίνει η εγκατάσταση αυτόματα είναι απαραίτητη η ύπαρξη της perl (γλώσσα προγραμματισμού). Αρχικά πρέπει να αποσυμπιέσeτε το αρχείο + xfntgr-full-xx-xx.tar.gz, κάτι που μάλλον ήδη έχετε κάνει. Ως αποτέλεσμα θα πρέπει να έχετε ένα φάκελλο με όνομα \"hellas\" καθώς και πολλά αρχεία και + υποφακέλους μέσα σε αυτόν. Αυτόν τον κατάλογο θα πρέπει να τον μεταφέρετε όπως είναι στη θέση \"/usr/X11R6/lib/X11/fonts/\". Δηλαδή θα πρέπει να υπάρχει ως + \"/usr/X11R6/lib/X11/fonts/hellas/\". Στον φάκελο \"hellas/bin\" θα βρείτε τα εξής αρχεία σχετικά με την εγκατάσταση (μαζί με άλλα): + + install-Type1 : αν έχετε κατεβάσει το αρχείο με τις Type1 γραμματοσειρές install-PCF : αν έχετε κατεβάσει το αρχείο με τις PCF γραμματοσειρές. + + Σε περίπτωση που έχετε κατεβάσει το ολοκληρωμένο πακέτο θα πρέπει να βρείτε και τα δύο αρχεία. Για να εγκαταστήσετε τις γραμματοσειρές εκτελέστε το + αντίστοιχο αρχείο/αρχεία, γράφοντας π.χ. \"**./install-Type1**\" χωρίς εισαγωγικά. Πρέπει να είστε στο ίδιο κατάλογο με τα προγράμματα αυτά φυσικά!. Ως + πρόγραμμα αλλαγής πληκτρολογίου μπορείτε να χρησιμοποιήσετε το **GRKbd** (θα το βρείτε στην ) ή αν + χρησιμοποιείτε **KDE** το **kikbd**, το οποίο έρχεται με την έκδοση **1.1.1** και άνω του **KDE**. + +- Δημιουργούμε το αρχείο **/root/.inputrc** με περιεχόμενα: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + set meta-flag on + set convert-meta off + set output-meta on + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Σημείωση: Για κάθε χρήστη του συστήματος δημιουργούμε και το αντίστοιχο /.inputrc στο home directory του. Επίσης δημιουργούμε το ίδιο .inputrc στο /etc/skel + για να αντιγράφεται στο home directory του κάθε καινούριου χρήστη του συστήματος. + +- Στο **/root/.Xdefaults** διορθώνουμε τη γραμμή **xterm\*font: fixed** και **xterm\_color\*font: fixed** με **xterm\*font: grfixed** και + **xterm\_color\*font: grfixed** αντίστοιχα. Φυσικά μπορούμε να βάλουμε και άλλη εκτός απο την grfixed. + +- Στο **/etc/bashrc** δημιουργούμε τα alias προσθέτοντας τις παρακάτω γραμμές: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + alias xterm="xterm -fn grfixed" + alias rxvt="rxvt -fn grfixed" + alias xedit="xedit -fn grfixed" + alias joe="joe -asis" + alias ls="ls -N --color=yes" + alias less="less -r" + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Φυσικά, για χρήστες με tcsh θα χρειαστούν παρόμοιες επεμβάσεις και στο αρχείο /etc/csh.cshrc + +- Για console κατεβάζουμε το **greek-console.rpm** και το εγκαθιστούμε (θα το βρείτε στην εξής διεύθυνση ). Μετά + τρέχουμε την εντολή **/usr/local/bin/./chcp 928**. Σημείωση: Στο **/usr/lib/kbd/consolefonts/** υπάρχουν οι γραμματοσειρές οπότε μπορούμε να + χρησιμοποιήσουμε την εντολή setfont **/usr/lib/kbd/consolefonts/γραμματοσειρά** για να ορίσουμε ποιά θέλουμε. + +- Για το Netscape: + + Για να εχουμε ελληνικά στη γραμμή που δίνουμε τις διευθύνσεις και παντού στο email, αντιγράφουμε το αρχείο **Netscape.ad** απο τον κατάλογο + **/usr/doc/netscape-communicator-4.0x/** (αν ο netscape είναι εγκατεστημένος από μορφή .rpm ή από τον κατάλογο που τον εγκαταστήσατε, σε περίπτωση μορφής + .tar.gz) στο **/usr/X11R6/lib/X11/app-defaults/** και το μετονομάζουμε σε **Netscape**. Το ανοίγουμε με τον joe ή με άλλον επεξεργαστή και στη γραμμή 5167 + ,5168, 5169 όπου λέει adobe βάζουμε \* δηλ πρέπει να είναι: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmTextField.fontList: + -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmText.fontlist: + -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmList*fontlist: + -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Επίσης, στη γραμμή 5200,5201,5202 αντικαθιστούμε το -\*-helvetica με -greek-helvetica και το 100 με 120 δηλαδή πρέπει να είναι: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmLGrid*fontList:\ + -greek-helvetica-medium-r-*-*-*-120-*-*-*-*-iso8859-*,\ + -greek-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*=BOLD,\ + -greek-helvetica-medium-o-*-*-*-120-*-*-*-*-iso8859-*=ITALIC + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +ΤΕΛΕΙΩΣΑΜΕ + +Ξεκινάμε τον Netscape και απο το view -\>encoding επιλέγουμε το Greek (ISO-8859-7) και πάλι απο το ίδιο μενού το \"Set Default Encoding \" και στο +Εdit-\>Preferences-\>Appearance-\>fonts το \"Greek(iso-8859-7)\" και ορίζουμε ποιές γραμματοσειρές θέλουμε. Οι καλύτερες είναι οι Courier (Greek). Tο ίδιο +κάνουμε για το \"Western(iso-8859-1)\" έτσι ώστε να μπορούμε να γράψουμε ελληνικά στις φόρμες και στο mail τύπου text/plain. + +Οι παραπάνω οδηγίες εγκατάστασης έχουν δοκιμαστεί με επιτυχία σε σύστημα RedHat εφοδιασμένο με τον Netscape 4.07 και πάνω. Επίσης η δοκιμή πέτυχε με window +managers τους: fvwm95, Afterstep, KDE, Gnome. + +**ΒΙΒΛΙΟΓΡΑΦΙΑ**\ +Το άρθρο αυτό δεν θα γραφόταν αν δεν υπήρχαν τα Greek-HowTos, το πολυτιμότατο project του Hellug, το **Graphis** και τα παιδιά που δουλεύουν σ\' αυτό, αλλά και +το άρθρο του Δ.Τζέμου που δημοσιεύτηκε στο 10ο τεύχος του Magaz. diff --git a/content/articles/16/03_august.md b/content/articles/16/03_august.md new file mode 100644 index 0000000..e2eb082 --- /dev/null +++ b/content/articles/16/03_august.md @@ -0,0 +1,163 @@ ++++ +title = 'August HTML/SGML editor' +date = '1999-08-01T00:00:00Z' +description = '' +author = 'Michalis Kabrianis(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 16'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*August is an HTML editor, coded by [Johan Bengtsson](mailto:johanb@lls.se). As August is under GPL, we (Magaz team that is) decided to modify it in order to +use it as an SGML editor.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Why?** +------------------------------------ + +**2. August** +-------------------------------------- + +**3. SGML** +------------------------------------ + +**4. Modifications** +--------------------------------------------- + +**5. Feedback** +---------------------------------------- + + +### [1. Why?]{#s1} + +As everybody (!!!) knows, Magaz is written entirely in SGML, and then converted to HTML with sgml-tools and [Panagiotis Vryonis\'](mailto:vrypan@hellug.gr) +especially-modified-for-magaz mapping. Although that decision was made to make the creation of Magaz easier, it looks like most of Greek Linux users wishing to +submit - contribute an article had a problem coping with SGML. So, we decided to provide an easy way, for SGML authoring. Instead of writing an article, +explaining the SGML concepts, we found out that everybody finally learns what SGML is, and the problem is only the editor. So, Johans\' perfect HTML editor, +named [August](http://www.lls.se/~johanb/august/), was used as a base for \"our\" SGML editor. + + +### [2. August]{#s2} + +August can be found at . It is a complete, non-wisiwyg HTML editor, coded in Tcl/Tk version 8.0. It provides buttons for the +most common HTML tags, such as bold, italics, preformatted, listing, underline, alignment, font color and size etc. Most advanced tags, such as tables, +column/row span, basic structure, form/script elements, are also supported. Of course, link/anchor creation is easy, through (you guessed it) a button-click, +while image inserting and, finally, previewing through netscape, is as easy as pushing the right button.\ +Other features include the standard open, close, save, copy, cut, paste buttons, commenting, special character inserting, template creation, more than one open +windows, options\' settings, uppercase/lowercase letter transformation.\ +Some of the features apply to selected text (for example bold text), so pushing that button with no text selected will have no effect at all, while some others, +such as new paragraph, have no restrictions of that type. That was expected, as not all the tags are the same. Although, the fact that August works that way, +really reveals that Johan knows HTML tags (and Tcl/Tk programming) very well. + + +### [3. SGML]{#s3} + +Sgml is a Markup Language. That means nothing to the most of you, but I\'ll try to explain that. Markup languages, add special tags to text, so that when that +text is parsed through a specific program, the tags get a meaning, relative to the appearance of the text. The most well-known and broadly-used markup language +is HTML (which, by the way means Hyper Text Markup Language). Others, not so broadly known, are Math ML and XML. All of these (with the exeption of XML) are +actually subsets of SGML. SGML, through a DTD (Definition) file, may be converted (with use of sgml-tools, aka linuxdoc) to html, txt, ps, dvi, tex, info, rtf +etc. + +If some sgml-tags have no similar tag for the resulting form, they are ignored. So, that\'s the way SGML works. No, it\'s not difficult. It\'s just different +(if you already know HTML). + + +### [4. Modifications]{#s4} + +The modifications, where made against August version 0.30. We hope, if we can find more SGML tags, to make an option, so that August may be used either as SGML +or HTML editor.\ +In order to modify the August, somebody would have to know SGML and Tcl/Tk as good as Johan knows HTML and Tcl/Tk respectively. Unfortunately, I\'m not the one +:-( I only know some of the tags we use in Magaz, and, as I have found no documentation at all regarding SGML, I have to admit that my knowledge won\'t get any +broader. Although, if anybody knows of a SGML tag not used in modified August, and the equivalent to HTML just let [us](mailto:magaz@hellug.gr) know. + +![](/16/img/toolbar.jpg) + +You may see the Toolbar on the figure above. From these, we have: + + --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- + \ **Nr - Row** **Meaning** **Modified** + + 1 First Exit No need + + 2 First Close file No need + + 3 First New file No need + + 4 First Open file No need + + 5 First Save No need + + 6 First Save As No need + + 7 First Cut No need + + 8 First Copy No need + + 9 First Paste No need + + 10 First Bold Yes + + 11 First Italics Yes + + 12 First Underline No + + 13 First Teletype Yes + + 14 First Preformatted Yes + + 15 First Paragraph Yes + + 16 First Linebreak Yes + + 17 First Comment No + + 18 First Help No need + + 1 Second Color No + + 2 Second Font No + + 3 Second Image Sort of\... + + 4 Second Link/anchor Yes/Yes + + 5 Second Mailto Yes + + 6 Second Numbered list Yes + + 7 Second Bullet list Yes + + 8 Second Definition list Yes + + 9 Second List item/definition Yes/Yes + + 10 Second Left align No + + 11 Second Centered No + + 12 Second Right align No + + 13 Second Basic structure Yes + + 14 Second Table Yes + + 15 Second Rowspan No + + 16 Second Columnspan No + + 17 Second Background color No + + 18 Second Netscape preview No + + + --------------------------------------- --------------------------------------- --------------------------------------- --------------------------------------- + + +### [5. Feedback]{#s5} + +While August as a program is quite stable, modified August for SGML lacks a lot of functionality. All those form elements, tags, and other stuff missing, could +be there, if we get your feedback. You may get modified august from [Magaz\'s server](../files/sgml-edit.gz), try it and then send us your feedback. Together we +can make it better. + diff --git a/content/articles/16/04_sgmledit.md b/content/articles/16/04_sgmledit.md new file mode 100644 index 0000000..0783abe --- /dev/null +++ b/content/articles/16/04_sgmledit.md @@ -0,0 +1,106 @@ ++++ +title = 'Παρουσίαση του Sgml-editor' +date = '1999-08-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 16'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το sgml-edit είναι μια παραλλαγή του προγράμματος August, ειδικά διαμορφωμένη για το Magaz. Το κανονικό πρόγραμμα είναι html editor. Το sgml-edit είναι editor +για sgml αρχεία, μπορεί όμως να επεξεργαστεί κανείς με αυτό και άλλα αρχεία, όπως html, αρκεί να μην χρησιμοποιήσει τα κουμπιά, αφού αυτά είναι αφιερωμένα στoν +κώδικα του sgml. Να σημειώσω εδώ ότι το sgml-editor συνεργάζεται τέλεια με τα ελληνικά και αποτελεί πρωτεύον εργαλείο για τη συγγραφική ομάδα του Magaz. Επίσης, +είναι editor για τον κώδικα sgml και όχι WYSIWYG (what you see is what you get) editor, όπως για παράδειγμα είναι ο html editor του StarOffice)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Προετοιμασία για την εκτέλεση** +--------------------------------------------------------------- + +**2. Περιγραφή των κουμπιών** +-------------------------------------------------------- + +**3. Sgml Tools** +-------------------------------------------- + +**4. Ευχαριστίες** +--------------------------------------------- + + +### [1. Προετοιμασία για την εκτέλεση]{#s1} + +To πρόγραμμα αυτό μπορείτε να το βρείτε στη διεύθυνση . Αφού το αποσυμπιέσετε με **gzip -d sgml-edit.gz** θα έχετε +ένα αρχείο sgml-edit, το οποίο θα πρέπει να το προσαρμόσετε στο σύστημά σας. + +1. Κατ\'αρχήν θα πρέπει να το κάνετε εκτελέσιμο. Αυτό γίνεται με **chmod 755 sgml-edit**. +2. Το sgml-edit είναι γραμμένο σε Tcl/Tk, οπότε θα πρέπει να την έχετε εγκατεστημένη στο σύστημά σας για να μπορέσετε να τρέξετε το πρόγραμμα. Πληκτρολογήστε + στην γραμμή εντολών **which wish**. Αν έχετε εγκαταστήσει σωστά την Tcl/Tk, τότε η εντολή που πληκτρολογήσατε θα σας επιστρέψει το path του wish. Κρατήστε + αυτό το path γιατί θα σας χρειαστεί. +3. Ανοίξτε το αρχείο sgml-edit με έναν επεξεργαστή κειμένου. Στην πρώτη γραμμή θα δείτε γραμμένο κάτι σαν κι αυτό: **\#!/usr/bin/wish**. Αντικαταστήστε το path + αυτό (μετά το θαυμαστικό) με το path που πήρατε όταν γράψατε **which wish**. +4. Αν τώρα θέλετε να ρυθμίσετε το sgml-edit να μπορεί να γράφει ελληνικά, ανοίξτε το πάλι μέ έναν επεξεργαστή κειμένου και στην γραμμή 1314, στο τέλος, αλλάξτε + το fixed με τη γραμματοσειρά που θέλετε να χρησιμοποιήσετε (π.χ. grfixed). (Σημείωση: Αν δεν μπορείτε να βρείτε τη γραμμή 1314, ψάξτε για μία παράγραφο με + την ονομασία **\# Set up frame for text edit**. Στο τέλος αυτής της παραγράφου προσθέστε μια έκφραση όπως αυτή: **word -font fixedgr**. + +Αυτό ήταν !! Τώρα μπορείτε να τρέξετε το πρόγραμμα και να αρχίσετε να γράφετε άρθρα για το Magaz :-) + + +### [2. Περιγραφή των κουμπιών]{#s2} + +Η παρακάτω εικόνα παριστάνει (χάρη στο Image Magick) τα κουμπιά του sgml-edit: + +![](/16/img/buttons.jpg) + +Ας δούμε όμως τί ακριβώς κάνει το κάθε κουμπί: + +- Τα 9 πρώτα κουμπιά είναι τα συνηθισμένα κουμπιά που υπάρχουν σε όλα τα προγράμματα σε όλα τα λειτουργικά που υπήρξαν ποτέ. Αναφέρω τι κάνει το καθένα (η + σειρά από τα αριστερά προς τα δεξιά). Το 1ο μας βγάζει από το πρόγραμμα. Το 2ο κλείνει το ανοιχτό μας έγγραφο. Το 3ο ανοίγει ένα νέο έγγραφο. Το 4ο είναι το + Open, το 5ο Save, το 6ο Save As. Το 7ο (ψαλίδι) είναι το Cut, το 8ο Copy και το 9ο το Paste. +- Τα 2 επόμενα κουμπιά, το **Bold** και το **Italic**, για να δουλέψουν θα πρέπει πρώτα να μαρκάρετε το τμήμα του κειμένου που θέλετε να φαίνεται σαν bold ή + italic και μετά να τα πατήσετε. Το κουμπί **Underline** δεν δουλεύει. Τα κουμπιά **TT** και **PRE** δουλεύουν ακριβώς όπως και τα **Bold**, **Italic**: + πρέπει πρώτα να μαρκάρετε ένα τμήμα του κειμένου. Η διαφορά των δύο αυτών κουμπιών είναι ότι στην δεύτερη περίπτωση (preformatted), το κείμενο περικλείεται + από οριζόντιες γραμμές. Το κουμπί **P** εισάγει στο έγγραφό σας το tag για την αλλαγή παραγράφου, ενώ το **BR** είναι για την αλλαγή σειράς. Το επόμενο + κουμπί είναι για την εισαγωγή σχολίων μέσα στο έγγραφό σας. Τα σχόλια δεν θα φαίνονται στο html (ή σε όποιο άλλο αρχείο) στο οποίο θα μετατραπεί το έγγραφό + σας. Το τελευταίο κουμπί της 1ης γραμμής σας εμφανίζει ένα σύντομο help. +- Πάμε τώρα στη δεύτερη σειρά κουμπιών. Τα πρώτα δύο κουμπιά (το **Insert Color** και το **Font Size and Color**) δυστυχώς δεν δουλεύουν. Το 3ο κουμπί είναι + για την προσθήκη εικόνας στο έγγραφό σας (όπως εγώ πρόσθεσα την παραπάνω φωτογραφία). Πατώντας το θα σας ανοίξει ένα παράθυρο όπου μπορείτε να διαλέξετε μια + φωτογραφία (μορφής jpg ή gif). Το 4ο κουμπί είναι διπλό: κάνοντας αριστερό κλίκ πάνω του, μπορείτε να προσθέσετε ένα link σε κάποια άλλη σελίδα, ενώ με δεξί + κλίκ η λειτουργία του αναφέρεται ως **Anchor**. Το 5ο κουμπί είναι για να προσθέσετε link σε διεύθυνση e-mail. +- Τα 2 επόμενα κουμπιά είναι για την προσθήκη αριθμημένης λιστας ή μη αριθμημένης (όπως αυτή εδώ με τις βούλες). Το 8ο κουμπί προσθέτει ορισμό (definition) + στο έγγραφό σας, ενώ το 9ο κουμπί έχει και αυτό διπλό ρόλο: Με αριστερό κλίκ προσθέτει άλλο ένα αντικείμενο (αριθμό ή βούλα) σε μια λίστα, ενώ με δεξί κλίκ + προσθέτει ακόμα ένα tag στον ορισμό (definition). +- Τελειώνοντας, τα επόμενα 3 κουμπιά, για την στοίχιση του κειμένου αριστερά κλπ. για να δουλέψουν πρέπει παλι να μαρκάρετε πρώτα το κείμενο που θέλετε να + στοιχίσετε, ενώ το 13ο κουμπί χρησιμεύει αποκλειστικά και μόνο για τη συγγραφή άρθρων για το Magaz: Πρέπει να πατηθεί στην αρχή του άρθρου για να εισάγετε + πληροφορίες, όπως το όνομά σας, η διεύθυνσή του e-mail σας, η ημερομηνία συγγραφής του άρθρου, ο τίτλος του άρθρου και μια σύντομη περιγραφή. Το επόμενο + κουμπί χρησιμεύουν για την προσθήκη πίνακα στο έγγραφό σας. Τα **Rowspan** και **Columnspan** δεν δουλεύουν. Τα 2 τελευταία κουμπιά δεν δουλεύουν. (Το 1ο + είναι για χρώμα στο background, ενώ το άλλο αναφέρεται ως **Netcsape Preview** και δεν δουλεύει γιατί πολύ απλά ο Netscape δεν υποστηρίζει sgml !!) + + +### [3. Sgml Tools]{#s3} + +Μάλλον θα αναρωτιέστε, όσοι δεν έχετε ξανακούσει τίποτα για το sgml, \"τώρα που έφτιαξα ένα άρθρο τί γίνεται;\" ή \"τί νόημα έχει να γράφω ένα κείμενο που +περιέχει tags και κώδικα και δεν μπορεί να διαβαστεί από τρίτους;\". + +Η απάντηση στα ερωτήματα αυτά δίνεται με την αναφορά στη σημασία του sgml. Θα αναφερθώ πολύ σύντομα για να μην ξεφύγω από το θέμα. Το sgml είναι ένα έγγραφο που +μπορεί να παράγει από τον εαυτό του μια πληθώρα άλλων τύπων εγγράφων. Για παράδειγμα, ας υποθέσουμε ότι θέλετε να γράψετε ένα κείμενο και να το δώσετε σε τρίτα +πρόσωπα. Υπάρχει πιθανότητα άλλος να δουλεύει με tex, άλλος με postscript και άλλος με απλό text. Τί έχετε να κάνετε εσείς; Να γράψετε το κείμενο 3 φορές; ΟΧΙ. +Μόνο μία σε sgml. Μετά θα μπο ρέσετε να το μετατρέψετε σε άλλες μορφές χωρίς να χρειαστεί να ξαναγράψετε το κείμενο. Πώς; Με τα sgml-tools. + +Τα sgml-tools είναι απαραίτητα σε όποιον γράφει σε sgml. Κάνουν ακριβώς αυτό που σας είπα. Μετατρέπουν ένα κείμενο γραμμένο σε sgml σε άλλες μορφές (που θα τις +δούμε σε λίγο). Δυστυχώς, δεν κάνουν το αντίθετο, δηλαδή ένα κείμενο μιας άλλης μορφής σε sgml. Το πακέτο αυτό περιέχεται στα πακέτα που συνοδεύουν τις +τελευταίες διανομές του Linux. Παρόλα αυτά, για να μείνουν όλοι ευχαριστημένοι (και όχι μόνο οι κάτοχοι των τελευταίων RedHat και SuSE), ο τόπος από όπου +μπορείτε να κατεβάσετε τα sgml-tools είναι ο εξ ής: . + +Το πακέτο sgmltools περιέχει τα εξής εκτελέσιμα αρχεία:\ +sgml2html για να μπορείτε να μετατρέψετε το sgml σε html. Αυτός είναι ένας καλός τρόπος για όσους γράφουν άρθρα για το Magaz να κάνουν preview και να καταλάβουν +πως θα φαίνεται το άρθρο τους όταν βγεί το τεύχος του Magaz.\ +Επίσης, sgml2latex για μετατροπή σε tex, sgml2lyx, sgml2rtf, sgml2txt για τις αντίστοιχες μορφές εγγράφων. + + +### [4. Ευχαριστίες]{#s4} + +Οι ευχαριστίες πηγαίνουν στον [Johan Bengtsson](mailto:johanb@lls.se), τον δημιουργό του προγράμματος, για την συνεργασία του με το Magaz καθώς και τον [Μιχάλη +Καμπριάνη](mailto:kabrianis@hellug.gr) για τη μετατροπή του august σε editor για sgml και για τη βοήθειά του για τη συγγραφή αυτού του άρθρου. + diff --git a/content/articles/16/05_gtk.md b/content/articles/16/05_gtk.md new file mode 100644 index 0000000..cb5ee66 --- /dev/null +++ b/content/articles/16/05_gtk.md @@ -0,0 +1,68 @@ ++++ +title = 'Τα Πρώτα μου Πρόγραμματα με το GTK+ (1)' +date = '1999-08-01T00:00:00Z' +description = '' +author = 'Γιώργος Κεραμίδας(mailto:keramida@hellug.gr)' +issue = ['Magaz 16'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία μικρή εισαγωγή στο Toolkit GTK+ και απλές οδηγίες προγραμματισμού με τη χρήση του.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +------------------------------------- + +- [1.1 Τι είναι το GTK+;](#ss1.1) +- [1.2 Που θα Βρείτε το GTK+;](#ss1.2) + +**2. Εγκατάσταση του GTK+** +------------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Το θέμα αυτού του άρθρου είναι το GTK+, τί είναι, που θα το βρείτε, πως θα το εγκαταστήσετε, και πως θα γράψετε μικρά, απλά προγράμματα με αυτό. Δεν εμβαθύνει +σε δύσκολα θέματα προγραμματισμού με το GTK+, για πολλούς λόγους, γιατί εγώ δεν έχω ακόμα την απαραίτητη πείρα (αφού τώρα μαθαίνω να προγραμματίζω με το GTK+), +αλλά και γιατί υποτίθεται ότι απευθύνεται σε άτομα που δεν έχουν προγραμματίσει ως τώρα με το GTK+. + +Τα επόμενα άρθρα, όταν αυτά υπάρξουν, θα είναι για πιο προχωρημένα θέματα, και θα βασίζονται στην εμπειρία που έχω ως τότε αποκτήσει με το GTK+. Εννοείται ότι +για να αποκτήσω κάποια γνώση με το GTK+ διαβάζω τον κώδικα του GTK+ μανιωδώς, αλλά θα προσπαθήσω γράφοντας να αποφύγω το να πάτε εσείς που διαβάζετε τα άρθρα να +ψάχνετε κάτι μέσα στο source του GTK+. Ακόμα κι έτσι όμως, είναι καλύτερο όταν διαβάζετε τα άρθρα για να μάθετε να προγραμματίζετε με το GTK+, να έχετε και τον +κώδικα του GTK+ κάπου πρόχειρο. + +### [1.1 Τι είναι το GTK+;]{#ss1.1} + +Καλά όλα αυτά, θα πει κάποιος, αλλά τι είναι αυτό το GTK+; Λοιπόν, το GTK+ είναι μια \'εργαλειοθήκη\', μια σειρά από βιβλιοθήκες, για να χτίζει κανείς +προγράμματα που τρέχουν κάτω από τα X11. Αρχικά φτιάχθηκε για να βοηθήσει στο γράψιμο του GIMP, του GNU Image Manipulation Program, αλλά τώρα πια +χρησιμοποιείται από πολλά προγράμματα, όπως από αυτά που είναι μέρος του Gnome, του γραφικού περιβάλλοντος που βασίζεται εξ\' ολοκλήρου στο GTK+. + +Αρχικά το GTK+ εμφανισιακά έμοιαζε με μια άλλη δημοφιλή εργαλειοθήκη που χρησιμοποιείται σε Unix/X11 περιβάλλοντα, το Motif. Και ο αρχικός σκοπός δημιουργίας +του GTK+ ήταν να φτιαχθεί μια Motif-like εργαλειοθήκη, που δεν θα είχε τους περιορισμούς του Motif, τόσο στην άδεια χρήσης όσο και σε κάποια χαρακτηριστικά του +Motif που δεν άρεσαν στους δυο δημιουργούς του GTK+, τον Spencer Kimball και τον Peter Mattis. + +### [1.2 Που θα Βρείτε το GTK+;]{#ss1.2} + +Το GTK+ θα το βρείτε πρωταρχικά στις σελίδες του [http://www.gtk.org](http://www.gtk.org/) από όπου μπορείτε να βρείτε τόσο το ίδιο το GTK+ σε μορφή πηγαίου +κώδικα, όσο και πληροφορίες για προγράμματα που χρησιμοποιούν το GTK+, mailing-lists που σχετίζονται με τον προγραμματισμό σε GTK+, κτλ. + +Στις σελίδες του **http://www.gtk.org/** θα βρείτε και το GTK+ σε διάφορες μορφές, που μπορούν να εγκατασταθούν εύκολα με τον package-manager που +χρησιμοποιείτε. Δίνεται απ\' όσο ξέρω και σε μορφή `.RPM`, `.DEB` αλλά και σε `.TAR.GZ` που μπορείτε να αποσυμπιέσετε και να μεταγλωττίσετε μόνοι σας. + + +### [2. Εγκατάσταση του GTK+]{#s2} + +Ανάλογα με τι μορφή θα έχει το GTK+ που θα κατεβάσετε από το είναι και διαφορετική η διαδικασία εγκατάστασης. Εδώ θα διακρίνουμε τις τρείς +περιπτώσεις: + +- Να έχετε κατεβάσει το GTK+ σε μορφή `.rpm`, οπότε κάνετε την εγκατάσταση με τον RedHat Package Manager (aka RPM). Αυτός ο τρόπος εγκατάστασης μπορεί να + χρησιμοποιηθεί σε όλα τα distributions που χρησιμοποιούν τον RPM, τόσο σε RedHat όσο και σε SuSE. + +- Να έχετε κατεβάσει το `.deb` μορφή το GTK+, που είναι το συνηθισμένο για Debian διανομές. + +- Να έχετε κατεβάσει τον πηγαίο κώδικα σε `.tar.gz` μορφή, που μπορεί να εγκατασταθεί σε όλα τα Linux distributions, αλλά και σε άλλα λειτουργικά (αρκεί να + έχουν μια έκδοση των X11 κι ένα compiler που να υποστηρίζει τα features που χρησιμοποιεί το GTK+). + diff --git a/content/articles/16/06_mailbox.md b/content/articles/16/06_mailbox.md new file mode 100644 index 0000000..9bc16d2 --- /dev/null +++ b/content/articles/16/06_mailbox.md @@ -0,0 +1,1080 @@ ++++ +title = 'Αλληλογραφία' +date = '1999-08-01T00:00:00Z' +description = '' +author = '' +issue = ['Magaz 16'] +issue_weight = 6 ++++ + +Παρακαλούμε ακολουθήστε τους κάτωθι κανόνες: + +α) Να βάζετε ένα θέμα σχετικό με την ερώτηση στο mail σας. Ένα θέμα της μορφής \"Ερώτηση περί Linux\" δεν βοηθάει ιδιαίτερα.\ +β) Να ρίχνετε και καμμιά ματιά στα περασμένα τεύχη, και εννοώ και τη στήλη της αλληλογραφίας, αλλά και τα άρθρα. Ίσως κάποιες ερωτήσεις να απαντιούνται από +εκεί.\ +Επίσης, παρακαλούμε γράφετε στα ελληνικά. Αν το outlook σας δεν βλέπει ελληνικά, βάλτε linux :-)\ +γ) Απαντήσεις οι οποίες δεν έχουν απαντηθεί, σημαίνει ότι μάλλον δεν ξέρουμε την απάντηση. Ερωτήσεις οι οποίες έρχονται με mail, είναι ΠΟΛΥ ΔΥΣΚΟΛΟ να +απαντηθούν. Προτιμήστε την φόρμα. + +**1. ΑΛΛΑ UNIX** +------------------------------------------ + +**2. Πρώτο Login** +-------------------------------------------- + +**3. Magaz** +-------------------------------------- + +**4. Macromedia flash σε apache** +----------------------------------------------------------- + +**5. Routing??** +------------------------------------------ + +**6. ΒΟΟΜ** +------------------------------------- + +**7. GNOME ???** +------------------------------------------ + +**8. gia linux ftp** +---------------------------------------------- + +**9. ΛΙΝΟΥΞ-ΚΠΠΠ** +-------------------------------------------- + +**10. Installation** +------------------------------------------------ + +**11. Kde ή Gnome ?** +------------------------------------------------- + +**12. ellinika sto suse** +----------------------------------------------------- + +**13. greek for debian linux** +---------------------------------------------------------- + +**14. Modem!** +------------------------------------------ + +**15. Άϊντε πάλι ένας αρχάριος\...** +---------------------------------------------------------------- + +**16. x-server** +-------------------------------------------- + +**17. Single User** +----------------------------------------------- + +**18. Linux + Viper 550** +----------------------------------------------------- + +**19. Πρόσβαση Στο Ιντερνετ** +--------------------------------------------------------- + +**20. Linux and Unix** +-------------------------------------------------- + +**21. Modem problem 2** +--------------------------------------------------- + +**22. Modem!!!** +-------------------------------------------- + +**23. Ποια πορτ πρεπει να κλισω στο σουσε 6!!!???** +------------------------------------------------------------------------------- + +**24. SBLive for Kernel 2.2.5-15?** +--------------------------------------------------------------- + +**25. μια παρατηρηση για τους γκουρου** +------------------------------------------------------------------- + +**26. Antivirus** +--------------------------------------------- + +**27. port του linux** +-------------------------------------------------- + +**28. clock** +----------------------------------------- + +**29. καρτα ηχου ΟΡΤΙ 931** +------------------------------------------------------- + +**30. ΛΙΝ0ΥΞ η ΓΟΥΙΝΤΟΟΣ?** +------------------------------------------------------- + +**31. password sto apache** +------------------------------------------------------- + +**32. PROTASH** +------------------------------------------- + +**33. make module** +----------------------------------------------- + +**34. SB live kai LINUX** +----------------------------------------------------- + +**35. 2 cdrom sto linux** +----------------------------------------------------- + +**36. Το Προβλημα με το CD του RAM !!!** +-------------------------------------------------------------------- + +**37. Kernel 2.2.5** +------------------------------------------------ + +**38. internet** +-------------------------------------------- + +**39. Γλώσσα C** +-------------------------------------------- + +**40. internet** +-------------------------------------------- + +**41. internet** +-------------------------------------------- + +**42. Ellhnika sto Star Office 5.0** +---------------------------------------------------------------- + +**43. MP3 player για κονσόλα** +---------------------------------------------------------- + +**44. Poia ekdosh Linux?** +------------------------------------------------------ + +**45. PPP connection: Oi alloi xrhstes?** +--------------------------------------------------------------------- + +**46. ISDN** +---------------------------------------- + +**47. προβλημᨨ** +---------------------------------------------- + +**48. Internet Chat, CD Burning & Linux** +--------------------------------------------------------------------- + +**49. Syndesi PPP.** +------------------------------------------------ + +**50. Printers** +-------------------------------------------- + +**51. X-windows** +--------------------------------------------- + +**52. startup disk** +------------------------------------------------ + +**53. Σύνδεση Ιντερνετ** +---------------------------------------------------- + +**54. Creative TNT Graphics Card** +-------------------------------------------------------------- + +**55. Linux-nt Tests** +-------------------------------------------------- + +**56. news server** +----------------------------------------------- + +**57. AGP?** +---------------------------------------- + +**58. Γενικα για Linux** +---------------------------------------------------- + + +### [1. ΑΛΛΑ UNIX]{#s1} + +Από : [ΑΛΕΞΑΝΔΡΟΣ ΓΑΛΑΖΙΟΣ](mailto:agalaz@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +ΣΤΟ REDHAT 6.0 ΔΕΝ ΠΕΡΙΕΧΕΤΑΙ ΤΟ IBCS ΤΟ ΚΑΤΕΒΑΣΑ ΤΟ ΑΠΟ ΤΟ INTERNET, ΑΛΛΑ ΠΑΡΟΤΙ ΔΕΙΧΝΕΙ ΝΑ ΕΧΕΙ ΕΓΚΑΤΑΣΤΑΘΕΙ ΣΩΣΤΑ ΔΕΝ ΤΡΕΧΕΙ ΠΡΟΓΡΑΜΜΑΤΑ ΑΠΟ ΑΛΛΑ UNIX (SCO) +ΣΤΟ RH 5.2 ME KERNEL 2.0.36 ΔΕΝ ΥΠΗΡΧΕ ΠΡΟΒΛΗΜΑ ΥΠΑΡΧΕΙ ΚΑΠΟΙΑ ΛΥΣΗ? ΕΝΑ ΑΛΛΟ ΕΡΩΤΗΜΑ ΕΙΝΑΙ: ΜΠΟΡΕΙ ΚΑΠΟΙΟΣ ΧΡΗΣΙΜΟΠΟΙΩΝΤΑΣ ΤΟ ΣΥΣΗΜΑ ΑΝΑΠΤΥΞΗΣ ΤΟΥ LINUX ΝΑ +ΔΗΜΙΟΥΡΓΗΣΕΙ ΚΩΔΙΚΑ ΠΟΥ ΝΑ ΤΡΕΧΕΙ ΚΑΙ ΣΕ ΑΛΛΑ INTEL-BASED UNIX (SCO)? + +*Δυστυχώς δεν είσαι σαφής. Τι μηνύματα σου βγάζει και σε ποιο στάδιο? Το module γίνεται inserted κανονικά? Έχεις κατεβάσει την σωστή έκδοση για τον πυρήνα σου? +Οποιοσδήποτε κώδικας γράψεις, αν τον γράψεις για να είναι portable, θα είναι portable, και θα χρειάζεται μικρές (σχετικά) αλλαγές για να γίνει compile σε άλλα +παρόμοια συστήματα.* + + +### [2. Πρώτο Login]{#s2} + +Από : [Μάριος Καραγεωργίου](mailto:mariosk1@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Για σας , είμαι μεγάλος θαυμαστής του Linux και αντιBillGates και θα ήθελα να ρωτήσω όταν τελειώνω με το install και βάζω Login και Password τι εντολές εκτελώ +για να μπώ μέσα; + +*Αν σου έχει βγάλει prompt, είσαι έτοιμος να κάνεις ότι θέλεις. Αν σου ξαναζητάει username μάλλον τα έχεις γράψει λάθος.* + + +### [3. Magaz]{#s3} + +Από : [Stavros Maragoudakis](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Pite mou giati stamatise to Magaz na kiklofori meso internet? Tha epanakikloforisi? Apantiste mas parakalo + +*Δεν σταμάτησε, απλά αναπαύεται για λίγο. Θα ξανακυκλοφορήσει προς το τέλος Ιουλίου* + + +### [4. Macromedia flash σε apache]{#s4} + +Από : [Ξυνός Παναγιώτης](mailto:darksun@grupmulti.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Για σας, Δεν μπορώ να βάλω .swf αρχεία να παίζουν στον Apache. Η Μacromedia λεει οτι πρέπει να αλλαχτει κάτι στο configuration του Apache που έχει σχέση με τα +ΜΙΜΕ types. H Εντολή Addtype καθώς και η AddHandler εχουν σχέση με τα MIME αλλά δεν ξέρω ποιά directive φορτώνει αρχεία χώρις να τα επεξεργάζεται ο server. To +kernel μου είναι 2.0.36 distribution RedHat 5.1 και ο Apache o 1.3v Ευχαριστώ περιμένω απάντηση σας + +*Φίλε Παναγιώτη, η ερώτησή σου είναι εντελώς άσχετη με Linux, αλλά μια και ξέρω την απάντηση\...\ +Στο αρχείο mime.types βάλε τη γραμμή* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + application/x-shockwave-flash swf + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*και κάνε restart τον server\ +* + + +### [5. Routing??]{#s5} + +Από : [Mihailos John](mailto:mjohn@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Θα ηθελα να κανω μια ισως περιεργη ερωτηση. Εχω 2 Η/Υ με Linux συνδεμενους μεταξύ τους. Ο ένας \"βλέπει\" τον αλλον και μπορω να κανω telnet ή να δω NFS +volumes. Στον ενα εχω modem και μπορω να συνδεθω στο Internet. Μπορω απο τον αλλο να δω διευθυνσεις του Internet, αφου έχω ηδη συνδεθει με τον πρωτο Η/Υ? Εκανα +διαφορα πειραματα με το route μα το μονο που καταφερα ηταν να δω τον Η/Υ που εχει το modem με δυο διαφορετικες IP addresses. Την IP του τοπικου Lan και την IP +που μου εδωσε ο ISP. Στον Η/Υ με το modem εχω δωσει την IP 10.0.0.1 και στον αλλον 10.0.0.2. Αν δεν μπορεις να μου απαντησεις, πες μου αν ξερεις που μπορω να +βρω πληροφοριες. Ευχαριστω. + +*Αυτό που χρειάζεσαι είναι το IP masquerading. Λεπτομέρειες για αυτο, και για πυρήνα 2.0.χ θα βρεις στο τεύχος 5 του 1998 του περιοδικού μας. Αν έχεις πυρήνα +2.2.χ θα χρειαστούν κάποιες αλλαγές.* + + +### [6. ΒΟΟΜ]{#s6} + +Από : [ΑΝΔΡΕΑΔΗΣ ΚΩΣΤΑΣ](mailto:writer@xtreme.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +πος θα φτάσω στο τέλος του προγράματος? + +*Με τα πόδια? Καλά είναι?* + + +### [7. GNOME ???]{#s7} + +Από : [FREZOULIS CONSTANTINOS](mailto:freco@x-treme.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Εχω το SUSE LINUX 6.1 εδώ και 2 μέρες και δουλεύει άψογα. Το KDE το είχα δει και από το CD του RAM με το SUSE 6.0. Τώρα στο 6.1 εγκατέστησα και το GNOME. Πως +μπορώ να το τρέξω. Η επαφή μου με το LINUX είναι περίπου δύο εβδομάδων. Θα ήθελα την βοήθειά σας. Ευχαριστώ εκ των προτέρων + +***ΝΤΙΣΚΛΕΙΜΕΡ**. ΑΝ ΔΙΑΒΑΣΕΙΣ ΑΥΤΟ ΤΟ MAIL ΔΕΧΕΣΑΙ ΑΥΤΟΜΑΤΑ ΚΑΙ ΑΔΙΑΜΑΡΤΗΡΗΤΑ ΤΟΥΣ ΚΑΤΟΘΙ ΟΡΟΥΣ.\ +Α. ΔΕΝ ΘΑ ΞΑΝΑΣΤΕΙΛΩ ΕΡΩΤΗΣΗ ΑΝ ΔΕΝ ΔΙΑΒΑΣΩ ΠΡΩΤΑ ΤΟ ΧΕΛΠ ΦΑ\`Ι\`Λ, ΓΙΑΤΙ ΤΑ ΠΑΙΔΙΑ ΣΤΟ ΜΑΓΚΑΣ ΔΕΝ ΜΠΟΡΟΥΝ ΝΑ ΑΣΧΟΛΟΥΝΤΑΙ ΣΥΝΕΧΩΣ ΜΕ ΠΡΑΓΜΑΤΑ ΠΟΥ ΘΑ ΕΠΡΕΠΕ ΝΑ +ΗΞΕΡΑ.\ +Β. ΔΕΝ ΘΑ ΞΑΝΑΣΤΕΙΛΩ ΕΡΩΤΗΣΗ ΑΝ ΔΕΝ ΔΙΑΒΑΣΩ ΠΡΩΤΑ \*ΟΛΑ\* ΤΑ ΤΕΥΧΗ ΤΟΥ ΥΠΕΡΟΧΟΥ ΑΥΤΟΥ ΠΕΡΙΟΔΙΚΟΥ ΠΟΥ ΛΕΓΕΤΑΙ MAGAZ, ΚΑΙ ΒΡΙΣΚΕΤΑΙ ΣΤΗ ΔΙΕΥΘΥΝΣΗ +MAGAZ.HELLUG.GR., ΓΙΑΤΙ ΤΑ ΠΑΙΔΙΑ ΣΤΟ ΜΑΓΚΑΣ ΔΕΝ ΜΠΟΡΟΥΝ ΝΑ ΑΠΑΝΤΟΥΝ ΣΥΝΕΧΩΣ ΣΤΙΣ ΙΔΙΕΣ ΕΡΩΤΗΣΕΙΣ.\ +Γ. ΠΟΛΛΕΣ - ΠΟΛΛΕΣ ΑΠΑΙΤΗΣΕΙΣ ΠΟΥ ΔΙΚΑΙΟΛΟΓΗΜΕΝΑ ΕΧΟΥΝ ΤΑ ΠΑΙΔΙΑ ΣΤΟ MAGAZ.\ +ΑΝ ΣΥΜΦΩΝΕΙΣ ΜΕ ΤΑ ΠΑΡΑΠΑΝΩ, Η ΑΠΑΝΤΗΣΗ ΕΙΝΑΙ:\ +ΒΑΛΕ ΣΤΟ .xinitrc ΤΗ ΓΡΑΜΜΗ gnome-session ΠΡΙΝ ΤΗΝ ΕΚΚΙΝΗΣΗ ΤΟΥ WINDOW MANAGER.\ +ΕΥΧΑΡΙΣΤΩ ΕΚ ΤΩΝ ΠΡΟΤΕΡΩΝ, ΚΑΙ ΚΑΛΑ ΝΑ ΠΑΘΩ.\ +* + + +### [8. gia linux ftp]{#s8} + +Από : [nikos kontos](mailto:spady@compulink.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Geia sas prospatho edo kai kati meres na mpo sto ftp linux.gr alla me bgazei minima \<\< login incorrect \>\> re paidia ti prepei na kano? + +*Φίλε Νίκο, πρέπει να μιλήσεις με τον ftpadmin\@linux.gr (αν και τώρα που το επισήμανες, θα του μιλήσουμε κι εμείς.)* + + +### [9. ΛΙΝΟΥΞ-ΚΠΠΠ]{#s9} + +Από : [ΚΟΝΤΕΛΛΗΣ ΣΤΡΑΤΗΣ](mailto:kstratos17@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Γειά σας παιδιά Ονομάζομαι Κοντέλλης Στρατής και σας στέλνω αυτό το e-mail απο την Μυτιλήνη. Εδω και 3 περίπου μήνες ασχολούμαι με το Linux έχοντας αγοράσει την +αυθεντική έκδοση SUSE 6.1 με τα 5 CD και το manual.Το πρόβλημά μου είναι κυρίως στην σύνδεση με το Inernet μέσω του Linux, και μέσω του προγράμματος kppp του +περιβάλοντος ΚDE. Συγκεκριμένα ενώ έχω επιτύχει connection κανονικά με το τερματικό (ανάλογο με αυτό των Windows98, login,password,κλπ) όταν ανοίγω τον Netscape +αυτός δεν μπορεί να επικοινωνήσει με τον server του provider. Κατά την προσωπική μου γνώμη πρέπει να φταίει οτι δεν εχω δηλώσει το IP του Dns του server στο +αντίστοιχο πεδίο. Internet Provider στην περίπτωσή μου είναι (α)Otenet, (β)Πανεπιστήμιο Αιγαίου, (γ)Χ-treme. + +*Συνδέσου στον κάθε provider από τα ακατονόμαστα, άνοιξε ένα παράθυρο dos, και γράψε \`\`ipconfig /all\'\'. Εκεί θα σου γράψει ποιός είναι ο ντιενες (!!) για +τον αντίστοιχο provider.* + + +### [10. Installation]{#s10} + +Από : [Trifon Scandalis](mailto:tscandalis@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Moy einai adynato na egatastisw to Caldera openlinux 2.2. Ftanw se ena shmeio poy moy zhta na prosdiorisw to plhres path katw apo to \'/mnt\' poy briskode ta : +\'bin\',\'data\',\'install\'. Opws kai katw apo to \'install\' prepei na briskodai ta akoloutha :\'RPMS\',\'basis1\',\'network1\' & \'etc\'. Tha eimai +ypoxreomenos an yparxei kapoia bohtheia wste na ksekolhsw apo ayto to problhma. + +*Σε παρακαλούμε γίνε λίγο πιο σαφής σχετικά με το πως (από που) προσπαθείς να κάνεις εγκατάσταση. Όπως φαίνεται από όσα λες, δεν μπορεί να δει το +installation-media* + + +### [11. Kde ή Gnome ?]{#s11} + +Από : [Ανδριόπουλος Ν.](mailto:gna@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Ειμαι ενας κλασσικός Window-ακιας, και θέλοντας να αλλαξω το γεγονος αυτό, είμαι ετοιμος να εγκαταστήσω Linux. Παρόλα αυτά, θα ήθελα να γνωρίζω αν διαφέρει στην +απόδοση το Linux οταν χρησιμοποιείται KDE ή Gnome, καθώς και εαν είναι δυνατον αυτά τα δυο να συνυπάρχουν στο ίδιο σύστημα. Ευχαριστώ. + +*Ναι, ειναι δυνατόν να συνυπάρξουν τα KDE και Gnome, και βέβαια υπάρχει μεγάλη διαφορά στην αποδοση όταν τα χρησιμοποιείς. Όπως καταλαβαινεις, όσο περισσότερα +προγράμματα τρέχεις, τόσο περισσότερο επιβαρύνεις το μηχάνημα, και εφόσον το KDE και το Gnome είναι περιβάλλοντα εργασιας (πολλές εφαρμογές με ίδιο look, +daemons για την μεταξύ τους επικοινωνία corba κλπ ) μειώνουν την απόδοση. Σε καμία περίπτωση βέβαια, αυτή η μείωμενη απόδοση δεν συγκρίνεται με την \"μη +μειωμένη\" απόδοση των Windows.* + + +### [12. ellinika sto suse]{#s12} + +Από : [Microgenesis](mailto:microgenesis@yahoo.com) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +re paidia pos xanomai.pos tha balo ellinika sto suse.den exo allo leitoy rgiko gia na do tis selides kai den katalabaino tipota.mipos yparxoyn poythena +plirofories gia ta ellinika sta agglika? eyxaristo + +*grafo greeklish giati alloios den tha ta diavaseis iparxoun plirofories gia polla pragmata gia ellinika (sta ellinika) alla merikei exoun frontisei kai gia sas +dinontas sas ta idia kai sta greeklish. sto www tou hellug sto HOWTOs session, iparxei to Hellenic HOWTO tou photi tou georgatou kai se greeklish version. isos +afto se voithisei. kata ta alla boreis na dokimaseis tin tixi sou diavazontas ta archives tis listas linux-greek-users i kai na eggrafeis se aftin opos lene oi +odigies stin antistoixi selida tou server tou hellug.* + + +### [13. greek for debian linux]{#s13} + +Από : [Σωτηριάδης Φίλιππος](mailto:phil@wcl.ee.upatras.gr) + +Απάντηση : [](mailto:) + +Θα ήθελα να ρωτήσω τη διαδικασία εγκατάστασης ελληνικών για LINUX της DEBIAN και RED HAT 5.2? Παρακαλώ θα ήθελα ΠΟΛΥ ΛΕΠΤΟΜΕΡΕΙΣ, οδηγίες διότι είμαι Αρχάριος +σε αυτό το λειτουργικό! Ευχαριστώ εκ των προτέρων! + +*Δες στο magaz, αριθμός τεύχους 13* + + +### [14. Modem!]{#s14} + +Από : [E. Souglakos](mailto:esouglakos@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Giati sto kpp den briskei to modem oute sthn cua1,2. Kanonika ua eprepe na htan sthn cua2 afou sta win98 einai sthn com3. Xrhsimopoiw Redhat 5.2 kai me to +modemtool to exw dhlvsei sthn cua2 Exw to e3wteriko supra 33.6 Ta idia moukanei kai sto suse 6.1 pou dokimasa. Auto ginetai apo tote pou alla3a mitrikh. Exw +3anagrapsei kai mou eipate na dhlwsw me setserial /dev/cua2\.... ta io,UART,irq opws einai sta 98 alla tipota. Ti einai auto to MODEM DEVICE LOCKED? + +*Αν σου βγάζει αυτό το μύνημα, τότε βρίσκει το modem, αλλά είναι locked.\ +Διάβασε το help του kppp για το πως θα το ξεκλειδώσεις (δεν θυμάμαι)\...* + + +### [15. Άϊντε πάλι ένας αρχάριος\...]{#s15} + +Από : [Κώστας Κουρούνης](mailto:kour@tee.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Χωρίς να θέλω να κουράσω τους προχωρημένους, η ερώτηση είναι: Πώς μπορεί κάποιος ΑΗΔΙΑΣΜΕΝΟΣ (και κουρασμένος) από τα Μ\$-παράθυρα να φτάσει σε ένα καλό επίπεδο +σε LINUX; Χωρίς να χρειαστεί να φτάσω κι εγώ στα ίδια αδιέξοδα με τους παλιώτερους. Δεν μπορεί (λέω τώρα\...) θα υπάρχει κάποια βιβλιογραφία ή επιλεγμένα +news-groups ή URLs γιά να μην ξανα-ανακαλύπτουν και οι νεώτεροι users τον τροχό. Αυτό που με απασχολεί είναι οτι δεν ξέρω χριστό από Unix. Είναι καθοριστικός +παράγοντας τούτο; Γειά κι ευχαριστώ \_ + +*Μπορείς πολύ απλά, να διαβάζεις τα how-tos (http://www.hellug.gr/gr/howto) για κάθε θέμα που σου παρουσιάζεται, μετά τα man pages (man εντολή), και τέλος τα +archives της λίστας (http://lists.hellug.gr). Δεν θα γίνεις ειδήμονας, αλλά θα αποφύγεις τις χαζές ερωτήσεις, πράγμα το οποίο θα αποβεί υπέρ σου , μια που σε +καποια σοβαρή ερωτηση και με όχι τόσο προφανή απάντηση, όλο και κάποιον θα βρεις να σου απαντήσει. Το ότι δεν ξερεις unix δεν είναι τραγικο, αρκεί να έχεις +ανοιχτο μυαλό (π.χ. δεν είναι ανάγκη να τελειώνουν τα αρχεία σε .exe για να ειναι εκτελέσιμα. Άλλοι είναι οι κανόνες του παιχνιδιού), και να διαβάσεις κι ένα +βιβλίο πιο πρώτα. Θα σου πρότεινα το Running Linux. Ειμαστε πάντα εδώ για οποιαδήποτε ΠΡΑΓΜΑΤΙΚΗ ερώτηση θέλεις.* + + +### [16. x-server]{#s16} + +Από : [Peios Nikos](mailto:peios@csd.uch.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Mhpws mporeite na mou peite pou mporw na brw ton x-server ths kartas creative riva tnt ,wste na mporesw epeitelous na seikwsw paratheira sto red-hat linux. Enas +kainourgios fanatikos opados tou Linux\...\... + +*Πριν από δυο τρεις μέρες, η Nvidia ανακοίνωσε drivers για Linux. Περισσότερες πληροφορίες στο +http://www.nvidia.com/Products.nsf/htmlmedia/software\_drivers.html* + + +### [17. Single User]{#s17} + +Από : [Γιώργος Νταής](mailto:Ackroyd_2@Hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Χρησιμοποιώ το RedHat Linux 5.2. Με ανησυχεί το γεγονός ότι υπάρχει η δυνατότητα σε κάποιον που δεν είναι ο root να εκκινήσει το Linux σε Single User Mode και +να έχει πρόσβασει στα αρχεία ρυθμίσεων και στον κατάλογο /root όπου και έχω τα αρχεία μου. Σε Single User Mode μπορώ να κάνω σχεδόν ό,τι κάνω και όταν κάνω +login ως root. Δεν είναι αυτό ένα security problem στο Linux? Τουλάχιστο θα έπρεπε να υπήρχε κάποιο password. Τι να κάνω; + +*Μπορείς να βάλεις password στο lilo ουτως ώστε να μην μπορείς να του ζητήσεις κάποιο ξεχωριστό image ή runlevel από το default, χωρίς password. Αλλά αν υπάρχει +φυσική πρόσβαση στο μηχάνημα, κάποιος μπορεί να το ανοίξει και με δισκέτα και να κάνει το ίδιο πράγμα. Συνεπώς, αν το μηχάνημα περιέχει ευαίσθητα δεδομένα, το +καλύτερο που έχεις να κάνεις είναι να το βάλεις σε προστατευμένο χώρο.* + + +### [18. Linux + Viper 550]{#s18} + +Από : [Θωμάς Δολιανίδης](mailto:ein-zerocool@geocities.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Sas parakalo an itan dinaton na apantoysate stin erotisi moy an einai dinaton na litoyrgisei to RED HAT 5.2 me eggatestime karta grafikwn tin Diamond Viper 550 +kai na doylepsony ta Xwindows kai to KDE Xriazome kapia arxeia mipos Eyxaristo gia ton xrono sas YG. Apantiste sas parakalo to sintomotero dinaton meso email + +*Η ερώτησή σου έχει απαντηθεί.* + + +### [19. Πρόσβαση Στο Ιντερνετ]{#s19} + +Από : [Γιώρος Σταματίου](mailto:methana@hotmail.com) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Θα ήθελα σας παρακαλώ να με βοηθήσετε οσον αφορά την σύνδεση μου στο ίντερνετ.Εχω το KDE και με το πρόγραμμα kppp προσπαθώ να συνδεθώ αλλα οτι script κι αν έχω +δοκιμάσει (terminal based,PAP ,CHAP) μου βγάζει συνεχώς pppd daemon died unexpectually κάτι τέτοιο.Εχω βάλει μπροστά απο το αρχείο /etc/ppp/options το \# στο +lock. Θα πρέπει να σας πω οτι όταν με βγάζει σε terminal screen του provider δίνω κανονικά το username,password και όταν πατάω to continue μου βγάζει αυτο το +error message.Δεν ξέρω αν πρέπει να κάνω κάποιες ρυθμίσεις απο το YaST η απο το ιδιο το kppp. Σας Ευχαριστώ πολύ. + +*Αν πατήσεις το Help στο Kppp τότε θα δεις πως πρέπει να πας στο /etc/ppp/ και να διαγράψεις μια γραμμή που λέει lock.* + + +### [20. Linux and Unix]{#s20} + +Από : [Μιχαλης](mailto:elfiness@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Γεια παιδια, εχω να κανω \"μια\" ερωτηση\... Απο οτι ξερω το Λινουξι δεν ανηκει επισημως στα Unices για διαφορους λογους τυποποιησης, και αλλες παραμετρους.. +περα απο τη θεωρητικη/νομικη διαφορα, υπαρχει μια καθαρη διαφορα στην πραξη;; Δηλαδη, τι παραπανω εχει το λινουξ που δεν εχουν τα αλλα;; Τι εχει δικο του +εισαγει στο χωρο; Τι διαφορα εχει στη \"δομη\" του; ελπιζω τωρα να γινω σοφοτερος\... + +*Θα απαντηθεί σε άρθρο εν καιρώ. Είναι πολύ μεγαλη ιστορία για ένα mail.* + + +### [21. Modem problem 2]{#s21} + +Από : [Vangelis Souglakos](mailto:esouglakos@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Ti prepei na grapsw \"akrivws\"meta apo setserial /dev/cuaXYZ gia na exw io=03E8, UART= NS 165550AN (etsi to lene ta 98), IRQ 05 + +*setserial /dev/ttySx port 0x3e8 uart 16550AN irq 5 όπως λέει πολύ αναλυτικά και το manual του. (man setserial).* + + +### [22. Modem!!!]{#s22} + +Από : [Ευάγγελος Σουγλάκος](mailto:esouglakos@hotmail.com) + +Απάντηση : [Ευριπίδης Παπακώστας](mailto:evris@hellug.gr) + +Έχω ένα modem Diamond Supra 33.6 Internal το οποίο δουλευε μια χαρά στο RedHat Linux 5.2. και ήταν εγκατεστημένο στην COM3 \--\> cua2. Πρόσφατα αγόρασα μια +μητρική Gigabytes GA-5AX. Από τότε το Linux δεν το βρίσκει πουθενά. Προσπαθώ να συνδεθώ με το kppp. Όταν το δηλωνω στο /dev/modem λέει ότι \"cant open modem\" +στην cua2 \"Sorry the modem is busy\" στην cua0 κολάνε τα X windows αφού εκει έχω δηλώσει το mouse, στην cua1 το kppp κολάει. Όταν κολήσει βγαίνω απο τα Χ και +ξαναμπαίνω. Αλλά τώρα στο kppp γράφει (όταν το βάλω στην cua2) Modem is locked. Ακόμη στο minicom γράφει. WARNING: configuration file not found, using defauls +Cannot open /dev/modem No such file or directory Το παράξενο είναι ότι με το Supra 56 Pro External δουλεύουν όλα μια χαρά. Έχω δοκιμάσει και με το SUSE 6.0 και +με το RedHat 5.2 αλλά τίποτα. Υποψιάζομαι ότι φταίει το mouse (ειναι στην Παράλληλη 1). Το έβαλα στην 2 αλλά τίποτα. + +*Σκέψη: μπας και δεν ταιριάζουν πια τα irqs,io,UART types για το εσωτερικό σου modem? Αν κοιτάξεις στα win τις αντίστοιχες πληροφορίες μπορείς να δοκιμάσεις +μετά στο Linux την εντολή setserial /dev/cuaXYZ με παραμέτρους τα io, uart, irq που λένε τα windows. Αν σου δουλέψει, βάλε την εντολή αυτή π.χ. στο +/etc/rc.d/rc.local βάζοντας το πλήρες path της setserial (δώσε whereis setserial να το δεις) ώστε να ισχύει για κάθε φορά που θα bootάρεις Linux. Δεν χάνεις +τίποτα να δοκιμάσεις\...\ +Οσο για το mouse στην παράλληλη 1 \... :-)* + + +### [23. Ποια πορτ πρεπει να κλισω στο σουσε 6!!!???]{#s23} + +Από : [george++](mailto:linux_r@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Θέλω να εχω πορτ ανοιχτα που δεν έχουν ρίσκο\... διλαδι αυτά που πρεπει να έχει ενας κλίεντ\... και ποια ,μπορω να εχω ανοιχτα χωρίς ρίσκο??? πχ:80??? +ευχαριστό!!!.. + +*Αν εννοείς τα ports του inetd, δεν χρειάζεσαι κανένα απολύτως. Χρειάζεσαι τα μεγαλύτερα απο 1024 μόνο, για να γίνονται established τα connections, τα οποια αν +δεν τα κόψεις με κάποιο firewall, είναι από μόνα τους ανοιχτά.* + + +### [24. SBLive for Kernel 2.2.5-15?]{#s24} + +Από : [Παπαδόπουλος Μιχάλης](mailto:mpapad@bigfoot.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Κατέβασα πρόσφατα την έκδοση 6 του RedHat Linux (1 1/2 μέρα μπρρρ!) Επίσης πήρα και απο το site της Creative τον driver για την κάρτα ήχου SBLive. Τον +εγκατέστησα αλλα δεν δουλεύeι. Λέει οτι θέλει Kernel 2.2.5 ενώ εγω έχω το 2.2.5-15. Υπάρχει τρόπος να του αλλάξω γνώμη??? (Το αρχείο έχει την ονομασία sblive.o) + +*Φίλε Μιχάλη, γίνε σε παρακαλούμε πιο συγκεκριμένος. Του λες δηλαδη modprobe sblive και σου βγάζει κάποιο μήνυμα? Ο πυρήνας που έχεις πάντως είναι 2.2.5 και +λογικά θα έπρεπε να δουλεύει. Γι\' αυτό γράψε μας όλη τη διαδικασία που ακολουθείς, για να δούμε που μπορει να είναι το λάθος* + + +### [25. μια παρατηρηση για τους γκουρου]{#s25} + +Από : [Γιλδωρας (καλλιτεχνικο ειναι :-))](mailto:elfiness@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αγαπητοι μας φιλοι\... Ειμαι και γω αλλος ενας νεος χρηστης του Λινουξ.. αφου σας συγχαρω για την προσπαθεια και το εργο που επιτελειτε (:-)) θα ηθελα να κανω +μια παρατηρηση: Παρατηρω λοιπον οτι οι εκαστοτε \"γκουρου\" του λινουξ ΣΥΝΗΘΩΣ αποφευγουν επιδεικτικα να απαντουν στις ερωτησεις των \"νοητικα καθυστερημενων\" +(sic), δινοντας τις ευκολες απαντησεις\... πχ. \"πως κανω το ταδε πραγμα με το gcc?\" \"μα\... η λυση ειναι man gcc!! RTFM RTFM RTFM!!!\" Συμφωνω οτι, οπως +εχετε οι ιδιοι πει, εχετε και αλλες δουλειες να κανετε απο το να απαντατε σε ερωτησεις που συνηθως εχουν ξαναπαντηθει.. ΑΛΛΑ εχετε σκεφτει αν ο αρχαριος 16αρης +αρτιως παραθυρας καταλαβαινει τις man pages;; Προσωπικα εγω ΔΕΝ καταλαβαινω διαφορα + +*Μια που το mail σου κόπηκε (μάλλον κάποιο λαθος μου στο script) να σου απαντήσω για αυτό που λες: Είσαι σίγουρος οτι πριν κάνει ο αρχάριος την ερώτηση, εχει +διαβάσει το man? Γιατί η εμπειρία μας από τις ερωτήσεις που δεχόμαστε, μας λέει ότι όλοι ψάχνουνε για την εύκολη λύση, την γρήγορη απάντηση, χωρίς να το ψάξουν +πρώτα μόνοι τους. Και, πίστεψε με, φαίνεται\... Εν πάσει περιπτωσει, αν υπάρχει και ερώτηση, pls repost και συγνώμμη για το λάθος.* + + +### [26. Antivirus]{#s26} + +Από : [Chrisanthakopoulos Costas](mailto:KACECHR@HOTMAIL.COM) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Yparxei kapoio antivirus programma pou na ypostirizei to Linux? + +*Έχεις κάποιον ιό; Αν ναι, πως πιστεύεις ότι τον κόλλησες; Τι ακριβώς θέλεις να κάνεις; Ο λόγος που τα ρωτάω όλα αυτά, είναι ότι, γενικά μιλώντας, δεν υπαρχουν +ιοί για Unix, συνεπώς δεν μπορώ να καταλάβω τη χρησιμότητα ενός τέτοιου προγράμματος.* + + +### [27. port του linux]{#s27} + +Από : [Γιώργος++](mailto:Linux_r@yahoo.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Γιά σας \... Θα ήθελα να ρωτήσω για τα πορτ του λινουξ\... ποια πορτ πρεπει να ειναι παντα ανοιχτα ποια πρεπει να κλεισουμε? ή δεν πρεπεινα κανουμε τιποτα και +ειναι ολα τα πορτ οκ απο μονα τους??!! Σας ευχαριστώ εκ των προτερών\... + +*Ανάλογα με το πια ports θέλεις εσύ να έχεις ανοιχτά\... Για να έχουν HTTP access στο PC σου, πρέπει να είναι ανοιχτό το 80.\ +Κάθε εφαρμογή TCP/IP (ftp, telnet, gopher) που βρίσκεται στο application layer (και όχι μόνο) του OSI model, απαιτεί και την δική της πόρτα (μερικές απαιτούν +και 2 πόρτες).\ +Για να δεις ποιές πόρτες ανοίγουν για οποιαδήποτε από τις υπηρεσίες, άνοιξε το **/etc/inetd.conf**. Εκεί μέσα τα έχει όλα\...\ +Μην ξεχνάς, ότι δεν είναι όλες οι πόρτες απαραίτητες για τη λειτουργία του υπολογιστή σου, μερικές από αυτές μάλιστα είναι ρίσκο να τις έχεις ανοιχτές.\ +Για να απενεργοποιήσεις μια πόρτα, απλά βάλε της το σημάδι σχολίου (\#) μπροστά από την εγγραφή της στο **/etc/inetd.conf**\ +Τα ports που είναι ανοιχτά από μόνα τους, είναι ανάλογα με το distribution που έχεις.* + + +### [28. clock]{#s28} + +Από : [X Καραγιάννης](mailto:chrkar@agr.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αλλάζω την date και παράτηρώ ότι η ώρα είναι πάντα 3 ώρες πίσω οπότε συμπαιρένω ότι μετατρέπει σε GMT ώρα. Ακόμη και έτσι όμως να είναι γιατί πριν κλείσω το PC +μου συμεχίζει να μου δείχνει την ώρα που έβαλα και όταν το ανοίξω ξανά τότε κάνει την μετατροπή ? Έχω red hat. ευχαριστώ πολύ. + +*Μάλλον πρέπει να του ορίσεις τη σωστή ώρα από το BIOS. Δυστυχώς, απ\' ότι ξέρω, και μπορει να κάνω και λάθος, αυτό είναι ένα πρόβλημα που δεν ξεπερνιεται +εύκολα αλλιώς. Για να ξεπεραστει γενικότερα, θα ήθελε το σωστό TIMEZONE, φτιαγμένο από τον Δημήτρη Μπούρα, στο ftp.cs-net.gr με όνομα tzhellas, και +synchronization με έναν NTP server.* + + +### [29. καρτα ηχου ΟΡΤΙ 931]{#s29} + +Από : [giorgos ramatias](mailto:froggie@hellasnet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Υπαρχουν νεοι οδηγοι? + +*Νέοι οδηγοί\... Αχ\... πονεμένη ιστορία, προχτές που κατέβαινα τη Συγγρού, ήταν τουλάχιστον 10 νέοι οδηγοί, και πήγαιναν πολύ σιγά. \`Ενας μάλιστα, ήταν και +νέος οδηγός, αλλά και νέος άνθρωπος, δηλαδή δυό φορές νέος. Ασε που νομίζω ότι ήταν και φαντάρος, στον 3ο μήνα, και οπως καταλαβαίνεις, ήταν και εκεί νέος, +δηλαδή 3 φορές νέος. νέος-νέος-νέος. Δηλαδή Νεότερος νεαρότερος.\ +Αποτέλεσμα των τόσο (και τόσων) νέων οδηγών ήταν ότι τελικά παραλίγο να με σκοτώσουν και μου έσπασαν τα νεύρα (αν και τώρα τελευταία πολλοί μου σπάνε τα +νεύρα\...)\ +Tράβα τώρα διάβασε το magaz 15. Και μην μας ξαναστείλεις mail αν δεν διαβάσεις όλα τα τεύχη του Magaz και σιγουρευτείς ότι η ερώτησή σου δεν έχει απάντηθεί ή +καλυφθεί.\ +* + + +### [30. ΛΙΝ0ΥΞ η ΓΟΥΙΝΤΟΟΣ?]{#s30} + +Από : [ΦΩΤΗΣ Τ.](mailto:fotis_tret@hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +ΓΕΙΑ ΣΑΣ ΕΙΜΑΙ Ο ΦΩΤΗΣ, ΚΑΙ ΕΙΜΑΙ ΛΙΓΟ ΚΑΙΝΟΥΡΓΙΟΣ ΣΤΟΝ ΚΟΣΜΟ ΤΟΝ PC. ΑΥΤΟ ΠΟΥ ΘΑ ΗΘΕΛΑ ΝΑ ΡΩΤΗΣΩ ΕΙΝΑΙ ΟΤΙ ΕΠΕΙΔΗ ΞΕΚΙΝΑΩ ΝΑ ΑΓΟΡΑΣΩ ΥΠΟΛΟΓΙΣΤΗ,ΚΑΙ ΞΕΡΟΝΤΑΣ +ΑΡΚΕΤΑ ΚΑΛΑ ΓΟΥΙΝΤΟΟΣ(WINDOWS),ΕΙΝΑΙ ΚΑΛΥΤΕΡΑ ΝΑ ΕΓΚΑΤΑΣΤΗΣΩ ΕΞ΄ΑΡΧΗΣ ΛΙΝΟΥΞ? ΚΑΙ ΟΧΙ ΓΟΥΙΝΤΟΟΣ? Η ΚΑΛΥΤΕΡΑ ΚΑΙ ΤΑ ΔΥΟ? - ΚΑΙ ΕΠΙΣΗΣ ΠΟΥ ΘΑ ΒΡΩ ΒΙΒΛΙΑ ΚΑΙ +ΑΝΑΦΟΡΕΣ ΓΥΡΩ ΑΠΟ ΤΟ ΛΙΝΟΥΞ ΑΝ ΥΠΑΡΧΟΥΝ ΣΤΑ ΕΛΛΗΝΙΚΑ. ΕΥΧΑΡΙΣΤΩ. ΠΕΡΙΜΕΝΩ!!! + +*Βάλε windows, μάθε τα καλύτερα, μάθε τι είναι οι παράλληλες, οι σειριακές, οι κάρτες οθόνης, ήχου, πως (περίπου) είναι δομημένος ο υπολογιστής σου, και σε +παρακαλώ συνειδητοποίησε ότι το linux είναι ένα εργαλείο δουλειάς (ή εγκατέστησε linux αν έχεις μια σχετικά μαζοχιστική τάση).\ +Δεν θα μπορείς να παίζεις παιχνίδια\...\ +Διάβασε προηγούμενα τεύχη του magaz, και στη στήλη της αλληλογραφίας, αλλά και στα [-=7=-](http://magaz.hellug.gr/1998/07/index07.html) και +[-=8=-](http://magaz.hellug.gr/1998/08/index08.html).\ +Αυτάααααααα\...\...* + + +### [31. password sto apache]{#s31} + +Από : [Xristos Pelekis](mailto:blueice@email.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +thelo na asxolitho me tin rithmisi toy apache web server. Me endiaferei kapoio directory na blepontai mono me password kathos kai na dimioyrgiso directory se +filoys moy ta opoia na mporoyn na ta diaxeirizontai oi idioi me ena ftp programma (p.x. CuteFtp). Tha ithela na me boithisei kapoios na kano aytes tis +rithmiseis. Yparxei kanena biblio poy me APLO tropo kai katanoiti glosa mporei na me boithisei? Sas eyxaristo ek ton proteron Christos Pelekis + +*\<Δεν ξέρω αν σε βοηθήσω, αλλά υπάρχει ένα online περιοδικό, το [www.apacheweek.com](http://www.apacheweek.com) που έχει πληροφορίες για τον apache. Ψάξε εκεί +να βρείς ότι θες. Εμείς, έχουμε εξειδίκευση (τρομάρα μας) σε θέματα που άπτονται του linux ως λειτουργικού, και δεν ξέρουμε όλα τα προγράμματα που τρέχουν σε +αυτό!\ +\`Οσο για το πως θα κάνεις αυτό με το ftp, δεν έχει καμία σχέση ο **apache**, αλλά πως θα ρυθμίσεις το δαίμονα (!!) του ftp. Για περισσότερες πληροφορίες, **man +ftp** (και φυσικά man όλα τα αρχεία που χρησιμοποιεί).\ +Για βιβλίο, μια βόλτα από τον Παπασωτηρίου, θα σε βοηθήσει. Εκεί θα βρείς βιβλίο για τον apache, θα σου συνιστούσα να πάρεις κανένα για αρχάριους (αυτά γράφουν +σε κατανοητή γλώσσα).\ +Φιλικά, και καλή επιτυχία\...* + + +### [32. PROTASH]{#s32} + +Από : [FRAGOS PANAGIOTIS](mailto:newt@internet-bg.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Exw na sas kanw mia endiaferoysa prwtash poy 8a kanei kai th dikh sas doylia pio eykolh alla kai th dikh mas .A n einai efykto na ginei mia lista boh8ias sto +periodiko me onomata kai prosfora boh8eias se problhmata .Alla 8a exei katalogo paradigmatos xarin:(Xwin kai apo kato e-mail pou mporoun na parasxoun boh8eia +gia to sygkrimeno 8ema twn x win kai mono.) kai outoka8exis etsi o ka8enas pou 8elei parapanw dieykriniseis den 8a apey8hnete sto periodiko 10 fores me idies +erwthseis ,alla se sygekrimena atoma poy asxolounte mono me 8emata poy exoun sxesh me to problhma toy . filika Panos + +*Σαν ιδέα, είναι πολύ καλή, και μακάρι να μπορούσε να γίνει κάτι τέτοιο, αλλά το linux είναι τόσο περίπλοκο, που ποτέ κανένας δεν μπορεί να ξέρει τα πάντα (πχ) +για τα Xwindows.\ +Γιαυτό το λόγο και δεν έχουμε αναθέσει συγκεκριμένες αρμοδιότητες σε συγκεκριμένα άτομα. Εξάλλου, δεν έχεις ακούσει για την \`\`ισχύ εν τη ενώσει\'\'?* + + +### [33. make module]{#s33} + +Από : [FRAGOS PANAGIOTIS](mailto:newt@internet-bg.net) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Den grafei ellhnika me tipota edw:) loipon: meta to make config ,make dep, make bzlilo kanw restart. Exigiste mou pies einai oi kaliteres epiloges kai giati sto +make config gia ta modules ,ti akrivos einai ta modules pou xrhsimeyoun ,kai an xriazete na katebasw to modules -x.y.ztar.gz kai apo poy kai pio na katevasw gia +ton kernel 2.2.8 kai se ti xrhsimeyei.Giati otan kanw insmod \*.o (px insmod sound.o)meta apo restart me lsmod exei exafanistei? ayta kai sorry gia tous +aglikous xarakthres FILIKA PANOS. + +*\`Οταν κάνεις config τον νέο σου πυρήνα, αν πατήσεις στο help καμιά φορά, σου λέει. \`\`if you want to install it as a module, (kati-diafora) press \`m\' here +and read \"POLY/KALO/ONOMA/ARXEIOU/NA/DIABASEIS\"\'\'\ +Εκεί, λέει τι είναι αυτά τα modules, πως εισάγονται, τι κάνουν, και μάλιστα πολύ καλύτερα από ότι εμείς θα μπορούσαμε να σου εξηγήσουμε.\ +Στο restart εξαφανίζονται, γιατί προφανώς δεν χρειάζονται εκείνη τη στιγμή.* + + +### [34. SB live kai LINUX]{#s34} + +Από : [Gousios Georgios](mailto:cs98011@icsd.aegean.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +H Sound Blaster Live yposthrizetai sto linux? An nai pos? Thelei compile o Kernel? + +*Πήγαινε στο site της CREATIVE\... Μην τα θές και όλα έτοιμα!* + + +### [35. 2 cdrom sto linux]{#s35} + +Από : [Gousios Giorgos](mailto:cs98011@icsd.aegean.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Pos mporo na exo taytoxrona 2 cdrom sto linux kai to KDE? Kia ta dyo einai ATAPI + +*Κάνε τα και τα δύο maount (σε διαφορετικό mount point το καθένα, εννοείται!)* + + +### [36. Το Προβλημα με το CD του RAM !!!]{#s36} + +Από : [Μανος Γκουμας](mailto:locrian@freemail.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Γεια χαρα παιδια ,αυτο που εχω να πω ειναι ενα μεγαλο ΜΠΡΑΒΟ για την πολυ καλη προσπαθεια.Τωρα οσο αναφορα το CD του RAM με το SuSE 6.0 ειναι πλεον γνωστο οτι +το RAM τα εκανε μανταρα\...,Παρολα αυτα ομως υπαρχει τροπος να εγκατασταθει. Απλα εαν υπαρχει χωρος σε καποιο partition αντιγραφουμε το CD και το τρεχουμε +,σημαντικο επισης ειναι να διαλεξουμε ως γλωσσα εγκαταστασης English και οχι Ελληνικη..Μετα τα βηματα ειναι οπως τα περιγραφει το RAM ,με την μονη διαφορα οτι +στο σημειο Start installation επιλεγουμε ως μεσω εγκαταστασης Hard disk και δινουμε το σημειο προσαρτησης που αντιστιχει στον δισκο με το Suse Π.χ. /dev/hda1 +,καθως και το σημειο προσαρτησης . Π.χ. /cdrom εαν εχουμε αντιγραψει το CD μεσα σε ενα φακελο με το ονομα cdrom.Μετα ολα πανε ρολοι\... Πιστευω να εδωσα μια +μικρη βοηθεια σε οποιον δοκιμασει να εγκαταστηση το SuSE 6.0 απο το CD του RAM. Τελειωνοντας θα ηθελα να ρωτησω εαν υπαρχει driver για την SB Live. Εχω ηδη +δοκιμασει να την σεταρω σαν!! SB 16 combatible ολα πανε καλα με compile του kernel και λοιπα\.... αλλα δυστυχως οταν επανεκκινω ,το Linux δεν μπορει να +αναγνωρησει την καρτα. Ευχαριστω\.... + +*Για δοκίμασε στο site της CREATIVE\... Θα εκπλαγείς\...* + + +### [37. Kernel 2.2.5]{#s37} + +Από : [Γιώργος Νταής](mailto:Ackroyd_2@Hotmail.com) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Πρόσφατα εγκατέστησα το Kernel 2.2.5 και παρουσιάστηκαν κάποια μικροπροβλήματα:\ +1. Κάθε φορά που τερματίζω των X-Server (χρησιμοποιώ το KDE 1.1 ως Window Manager), εμφανίζεται το μήνυμα: ttyS0\_c: process 193 (gmp): \...update software to +use /dev/ttyS0 instead of /dev/cua0.\ +2. Όταν καλώ το pppd, εμφανίζεται το μήνυμα: Kernel lacks ppp support και δεν έχω πρόσβαση στο Internet. Το παράδοξο είναι (για μένα τουλάχιστο) ότι επέλεξα +κατά το compilation του Kernel network support (TCP/IP,\...). Επίσης, όταν κάνω boot το παλίο Kernel 2.0.36, το pppd λειτουργεί κανονικά στο ίδιο σύστημα. Τι να +κάνω; Έχω το RedHat 5.2 + +*Στην έκδοση 2.2 του πυρήνα, έχουν διαφοροποιηθεί λίγο τα πράγματα\... \`Ενα από αυτά είναι και η ονοματολογία των σειριακών, που τώρα ονομάζονται αποκλειστικά +**ttyX** Πρέπει, άρα, να αλλάξεις οποιαδήποτε αναφορά σε **cuaX** υπάρχει σε όλα σου τα scripts, άλλα και στο link **/dev/modem/**. Αν δεν ξέρεις πως να κάνεις +ένα link, γράψε **man ln** ή χρησιμοποίησε το script που έχει η REDHAT για αυτό (νομίζω λέγεται **mousecofig**). Υπάρχει βέβαια και η περίπτωση να είναι +δηλωμένο στο **/etc/XF86Config** αρχείο σου σαν **cua0**. Σε αυτή την περίπτωση άλλαξε το με ένα editor από **cua0** σε **ttyS0** (**ΠΡΟΣΟΧΗ!** ΣΤΟ **ttyS0** ΤΟ +S ΕΙΝΑΙ ΚΕΦΑΛΑΙΟ!). \`Αλλαξε όμως και το **/dev/modem*** + + +### [38. internet]{#s38} + +Από : [kafetzis theodoros](mailto:kaftheod@otenet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +eyxaristo gia thn apantisi sto proigoumeno erotima moy poy aforouse tin sindesi sto internet me ton kde tora to pc mou kanei tin syndesi alla meta tin +oloklirosi tis to parathiro syndeseis kai log den kleinoun. o metritis metra kanonika xrono syndeseis alla den anoigoun oi selides pou thelo me minima kati gia +dns den exo bali kanena script einai aparetito? meta thn oloklirosi tis sindeseis xriazete na patiso kapoin sindiasmo koumpion sto pliktologio? eyxaristo ek ton +proteron kafetzis theodoros + +*DNS χρειάζεσαι οποσδήποτε. Ρώτα τον Provider σου ποιος είναι, συμπλήρωσε τον στο αντίστοιχο πεδίο του kppp, και **τότε** οι σελίδες σου θα εμφανιστούν.\ +Δεν υπάρχει κάποιος συνδιασμός για αυτό που λές, και αν δε βάλεις script τότε βάλε το account να είναι TERMINAL-BASED ώστε να γράψεις το username και το +password σου.\ +Αν πάλι έχεις απορίες διάβασε το help του kppp. Εκεί τα λέει όλα αυτά που σου γράφω (Καρφί μπας και ανοίξεις το help :)) ).* + + +### [39. Γλώσσα C]{#s39} + +Από : [Χρήστος Καραγιάννης](mailto:chrkar@agr.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αγαπητοί φίλοι, στην προσπάθεια μου να τρέξω το πρωτο μου hello world πρόγραμμα σε γλώσσα C δημιούργησα με gcc το a.out το οποίο έβαλα στην command line και +πατώντας το enter πηρα το ακόλουθο μήνυμα: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + bash:a.out: unknown command (ή κάτι τέτοιο) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έχω το red hat 5.2 Γιατί δεν τρέχει το πρόγραμμα μου ? Ευχαριστώ εκ των προτέρων + +*Φίλε Χρήστο, υποθέτω ότι δεν το έβρισκε, επειδή τρέχεις το πρόγραμμα σαν root, και το directory στο οποίο ήταν το a.out δεν ειναι στο path (ποτέ το current +directory δεν πρεπει να είναι στο path του root). Για να το εκτελέσεις, δοκίμασε να γραψεις το full path, δηλαδη ./a.out* + + +### [40. internet]{#s40} + +Από : [kafetzis theodoros](mailto:kaftheod@otenet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +den exo katorthosi akomi na syndetho sto internet me ton kde to minima poy deixnei einai \"no: dialtone\" kai ixos tis klisis einai statheros kao oxi autos ti +syndesis. euxaristo ek ton proter on ean einai dinaton na moy stilete tin apantisi kai oxi na kataxorithi sto magazine + +*Λοιπον\... No dialtone εε;\ +Κάπου στο kppp, στη ρύθμιση του modem σου, υπάρχει μια επιλογή που λέει modem commands ή κάτι τέτοιο, δεν θυμάμαι. Πήγαινε εκεί και βάλε στο dial string ATX3DT +(ή ATX3DP αν το τηλέφωνό σου είναι αναλογικό).* + + +### [41. internet]{#s41} + +Από : [kafetzis theodoros](mailto:kaftheod@otenet.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +den exo katorthosi akomi na syndetho sto internet me ton kde to minima poy deixnei einai \"no: dialtone\" kai ixos tis klisis einai statheros kao oxi autos ti +syndesis. euxaristo ek ton proter on ean einai dinaton na moy stilete tin apantisi kai oxi na kataxorithi sto magazine + +*Αν μπορείς ξαναστείλε την ερώτησή σου χωρίς να βάλεις τους χαρακτήρες \`\`μικρότερο\'\' και \`\`μεγαλύτερο\'\' Τα κόβει το script μαζί με ότι υπάρχει ανάμεσά +τους.\ +H ερώτησή σου όμως πρέπει να δημοσιευτεί (έτσι πιστεύω εγώ τουλάχιστον), όχι για κανένα άλλο λόγο, αλλά γιατί μπορεί και κάποιος άλλος να βοηθηθεί. Μπορεί να +έχει το ίδιο πρόβλημα, και για μας τουλάχιστον δεν είναι ότι καλύτερο να απαντάμε στις ίδιες ερωτήσεις 10-15 φορές.\ +Επίσης, ελπίζω να διάβασες τα mailbox από τα προηγούμενα magaz, μήπως έχει ήδη απαντηθεί η ερώτησή σου (απ\' ότι θυμάμαι, υπύρχαν πολλές τέτοιου είδους).* + + +### [42. Ellhnika sto Star Office 5.0]{#s42} + +Από : [Nikos Georgopoulos](mailto:duke@diktyocafe.g,) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Antimetwpizw to e3hs problhma sto Star Office 5.0 Den mporw na plhktrologhsw ka8olou ellhnika \... Xrhsimpoiw to grkbd stis alles efarmoges mou ,alla otan pataw +Alt+Shift sto Star Office to plhktrologio den antapokrinetai ka8olou sto pathma twn plhktrwn\... Parakalw an 3erete kamia lysh voh8hste me \... (epishs me to +Star Office 5.0 den katafera na \"dw\" arxeia tou Word97 - tou Word 6.0 fainontai kanonika) Euxaristw Duke Nukem duke\@diktyocafe.gr + +*Αυτό για το StarOffice, πρώτη φορά το ακούω - συναντάω. Μήπως έχεις κρατήσει τον συνδευασμό πλήκτρων μέσα από το StarOffice το ίδιο (επιλογή keyboard στο menu +Options αν θυμαμαι καλά). Σχετικά δε με τα αρχεία του Word 97, μιλάμε για όλα τα αρχεία που δοκίμασες ή για ένα δύο? Γιατί αν πρόκειται για ένα - δύο, τότε +μάλλον έχουν πολλά features. Εγώ πάντως, τα βλέπω κανονικά\...* + + +### [43. MP3 player για κονσόλα]{#s43} + +Από : [Ισαάκ Τσαλίκογλου](mailto:tcup@bigfoot.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Γειά σας. Θα ήθελα να ρωτήσω αν υπάρχει κάποιο προγραμμα για παίξιμο MP3, το οποίο να δουλεύει από κονσόλα και αν υπάρχει (που θα υπάρχει ;-))))))), που μπορώ +να το βρω. + +*Υπάρχει το mpg123, το οποίο θα το βρεις στο freshmeat.net* + + +### [44. Poia ekdosh Linux?]{#s44} + +Από : [Xrhstos Grhgoropoylos](mailto:grigorop@hol.gr) + +Απάντηση : [Βαγγέλης Παπαδογιαννάκης](mailto:papas@hellug.gr) + +Eimai enas aplos xrhsths ypologistvn, me thn ennoia oti den asxoloymai epaggelmatika me toys ypologistes, kai oyte jerv na programmatizv se kamia glvssa. +M\'aresei, omvs, na \"caxnv\" tis efarmoges poy fortvnv ston sklhro moy, kai na asxoloymai arketes vres me aytes, eite giati tis xreiazomai gia eppagelmatikoys +skopoys, eite gia prosvpikoys, eite gia na\... perasei h vra. Edv kai poly kairo, otan spoydaza sto Edimboyrgo kai emena me dyo Ellhnes poy spoydazan Computer +Science, emaua gia to Linux kai omologv pvs enypvsiasthka, kyrivs giati eixame th dynatothta na exoyme ena systhma paromoio me UNIX se enan aplo PC, kai oxi +aparaithta sta yperoxa, alla panakriba kai dyseyreta, SPARCstations, DECstations kai INDIGOs toy panepisthmioy. Apofashsa pvs kapoia mera ua ebaza kai gv ston +ypologisth moy, apla gia na ejoikhvuv me to periballon toy LINUX, kai emmesa toy UNIX, mias kai, poios jerei, kapoia mera mporei na to brv mprosta moy. Omvs +ayth th stigmh briskomai se adiejodo, kai gi\'ayto ua kanv merikes aples ervthseis: (1) Ajizei na asxolhuv me LINUX an den me endiaferei amesa gia th douleia +moy, h prokeitai gia ena leitoyrgiko me to opoio prepei oposdhpote na asxolhueis sobara? (2) An nomizete pvs ua ajize na asxolhuv me to LINUX, poia ekdosh ua +htan h kalyterh, kai ayth me tis perissoteres efarmoges? (3) Me thn yposthrijh hardware ti ginetai? Den ua huela na jekinhsv thn egkatastash kai jafnika na +anakalycv pvs h karta ouonhs, h hxoy, h to CD-ROM h o ektypvths de doyleyoyn. Elpizv oi apanthseis poy ua moy dvsete na me bohuhsoyn na apofasisv, giat +pragmatika den jerv ti na kanv. Ena einai to sigoyro: ta MS Windows den soy lynoyn pragmatika ta xeria, kai to monopolio ths Microsoft den einai o,ti kalytero +gia thn agora tvn ypologistvn. + +*\`Ενα - ένα\...\ +Καταρχάς, αυτό που είναι σίγουρο είναι ότι δεν χρειάζεται να έχεις ανάγκη το linux στη δουλειά σου για να το εγκαταστήσεις. \`Ισα - ίσα, το linux περισσότερο το +στήνεις για την δική σου ευχαρίστηση, επειδή γουστάρεις τους υπολογιστές. Αυτό γιατί ούτως ή άλλως οι περισσότεροι στη δουλειά τους (εκτός αν είναι ειδικής +φύσεως) χρησιμοποιούν τα ακατονόμαστα και όχι το linux. Συνεπώς, δεν είναι ανάγκη να σε ενδιαφέρει άμεσα για τη δουλειά σου όπως λές για να το εγκαταστήσεις. +Πάντως, ναι, το linux πρέπει να το πάρεις στα σοβαρά γιατί αλλιώς δεν νομίζω να σου πολυαρέσει\... ;)\ +Πιστεύω λοιπόν ότι αξίζει να ασχοληθείς με το linux.\ +Καλύτερη δεν είναι καμία, όπως και δεν είναι καμία χειρότερη. Είναι εντελώς προσωπικό θέμα η επιλογή της ΔΙΑΝΟΜΗΣ* + + +### [45. PPP connection: Oi alloi xrhstes?]{#s45} + +Από : [Konstantinos Karakoulas](mailto:carakoul@med.auth.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Parakalo tha hthela bohtheia gia to parakato problhma: Exontas rythmisei kata to dynato sosta ton pppd mporesa na exo dialup syndesi san root, xrhsimopoiontas +to wvdial. Dinontas permissions kai sous allos xrhstes se wvdial.config, wvdial kai ttyso mporesa na syndetho kai san aplos user. Dinontas san aplos user +nslookup perno ta parakato: can\`t find name server \...: no response from server & default servers are not anailable Fysika to problima ayto den yparxei ston +root. Tha hthela tin symboylh sas gia ti paromoio thema den brhka sto Linux magaz. Eyxaristo ek ton proteron Konstantinos Karakoulas + +*Φαίνεται ότι το wvdial δεν σηκώνει το interface. Δοκίμασε /sbin/ifconfig -a και /usr/sbin/route -n και αν μετά το πρώτο δεις ένα interface ppp0 και μετά το +δεύτερο δεις μία γραμμή 0.0.0.0 xxx xxx xxx xxx ppp0, διάβασε τα παλιότερα τεύχη/mailboxes για routing και DNS.* + + +### [46. ISDN]{#s46} + +Από : [Stavros Maragoudakis](mailto:elhellas@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Exo ISDN grammi kai exo apo ton OTE to NETMOD to opoio pezi to rolo tou MODEM , otan kalo ston proviter mou stis grammes tou gia isdn (exo sindromi isdn) mou +bgazi to parakato error sto linux kai meta apo 10 lepta ite serfaro eite oxi klini i sindesi ti mpori na ftei? + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ---Log File--- + Jul 25 16:35:10 localhost pppd[880]: pppd 2.3.5 started by root, uid 0 + Jul 25 16:35:13 localhost pppd[880]: Serial connection established. + Jul 25 16:35:14 localhost pppd[880]: Using interface ppp0 + Jul 25 16:35:14 localhost pppd[880]: Connect: ppp0 <--> /dev/cua0 + Jul 25 16:35:14 localhost pppd[880]: Received bad configure-nak/rej: 12 02 17 04 00 00 + Jul 25 16:35:17 localhost pppd[880]: Remote message: + Jul 25 16:35:17 localhost pppd[880]: local IP address xxx.xxx.xxx.xxx + Jul 25 16:35:17 localhost pppd[880]: remote IP address xxx.xxx.xxx.xxx + Jul 25 16:47:26 localhost pppd[880]: Hangup (SIGHUP) + Jul 25 16:47:26 localhost pppd[880]: Modem hangup + Jul 25 16:47:26 localhost pppd[880]: Connection terminated. + Jul 25 16:47:27 localhost pppd[880]: Exit. + --- Log File--- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Sas euxaristo perimeno kapoia apantisi gia to ti mpori na ftei kai ti mou protinete na kano! Thank you Kalo Kalokairi se olous sas + +*Sorry, no ISDN here :-(* + + +### [47. προβλημᨨ]{#s47} + +Από : [ελευθεριος γρηγ.](mailto:maleace@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +ειμαι ενας νεος χρηστης του ΄λαιν που προσπαθει να τα περασει σε ενα πεντιουμ 2 350 μ.με μια ιντελ 740 και 1 μβ χωρο μα δυστυ χως ενω εχο κανει ρεεβοοτ την +βερσιον5 ρεντ χαταλλα δεν την τρεχει.φλοπυ ειναι οκ. θα ηθελα αν ηταν δυνατο μια μικρη βοηθεια¨) + +*Δεν κατάλαβα τίποτα. Sorry.* + + +### [48. Internet Chat, CD Burning & Linux]{#s48} + +Από : [Ανδριόπουλος Νίκος](mailto:gna@hol.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Ένας βασικός λόγος για την συνδρομή καποιου στο Internet, ειναι και το chatting. Ηθελα να μου πείτε τι chat προγράμματα υπάρχουν για Linux, και αν υπάρχει +κανένα συμβατό με ICQ (Windows εκδοση). Ακόμα, ήθελα να ρωτήσω τι προγράμματα υπάρχουν για CD-R στο Linux, και που θα μπορούσα να τα βρω. Ευχαριστώ εκ των +προτέρων, ΝΓΑ + +*Θα σου πρότεινα να κοιτάξεις στο Linuxberg στα αντίστοιχα sections, και / ή να διαβάσεις το RAM Απριλίου.* + + +### [49. Syndesi PPP.]{#s49} + +Από : [Lefkaditis Nikos](mailto:myth00s@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Geia sas , Legomai Lefkaditis Nikos kai tha ithela na sas kano mia erotisi sxetika me to pos mporo na dimiourgiso sindesi me ton ISP mou, meso grammis dial-up. +Exo idi apokatastisei mia sindesi meso tou programmatos kppp ,alla tha ithela na matho pos ginetai apo ena \"command line\" (fenetai oti den me ikanopoioun ta +eukola :-) ). + +*Διάβασε τα σχετικά How-tos και τα man pages των pppd και chat. Δεν είναι πολύ δύσκολο πάντως* + + +### [50. Printers]{#s50} + +Από : [George Blathras](mailto:gbl@ee.teiath.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Telika elusa to problhma me ton printer. Oloi oi HP printers typwnoun by default se codepage 737 kai oxi iso-8859-7 (928) pou douleyei to Linux. Prepei loipon +na toy alla3eis to codepage gia na doulepsei. H lush einai h e3hs : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gia codepage 737 to escape code einai + (12G + kai gia to 928 + (12N + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +-akribws opws ta blepete-. to `` einai ctrl+p+esc sto DOS. Ftiaxnoume ena arxeio pou periexei to string gia to code page pou 8eleoume kai to typwnoume. An +ola einai ok o printer den prepei na typwsei tipota. H ru8mish einai permanent - den allazei molis kleisoume ton ektypwth. Douleuei gia HP +DJ540,DJ660C,DJ600,DJ690C,DJ710,DJ720C,DJ895,DJ695,DJ880. Thanks again \... GBl + +*Ευχαριστούμε και δημοσιεύουμε προς γνώση των υπολοίπων.* + + +### [51. X-windows]{#s51} + +Από : [Λευτερης Ντανωλας](mailto:ntanolas@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Ειμαι ενας καινουργιος χρηστης του Linux , για την ακριβεια μολις χθες εγκατεστησα το Red Hat Linux 5.1 . Αν και η εγκατασταση ολοκληρωθηκε χωρις προβληματα και +εκανα login μολις παω να τρεξω τα x-windows με την εντολη startx μου βγαζει μηνυμα λαθους 11 . Παρατηρηση οτι εχω εγκαταστησει τα X-Windows . Παρακαλω βοηθηστε +με . Επειγομαι . + +*Ή δεν έχεις ρυθμίσει σωστά την κάρτα οθόνης/οθόνη, ή κάτι δεν πάει καλα με τις γραμματοσειρές σου. Ξανατρέξε το xf86config πιο προσεκτικά.* + + +### [52. startup disk]{#s52} + +Από : [Xρήστος Καραγιάννης](mailto:chrkar@agr.forthnet.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Αγαπητοί φίλοι, θα ήθελα να σας ρωτήσω πώς μπορώ να δημιουργήσω startup disk για το red hat linux μου. Έχω βέβαια μία αλλά θέλω και δεύτερο αντίγραφο. Πώς μπορώ +να την αντιγράψω? Επίσης, υπάρχει τελικά ένα howto που να περιγράφει με ακρίβεια πως θα γίνει η σύνδεση ppp με τον ISP μου? Ευχαριστώ + +*Αντιγράφεται με dd (man dd) ή, ακόμα πιο απλά, από το ίδιο το CD της RedHat ακολουθώντας τις οδηγίες.* + + +### [53. Σύνδεση Ιντερνετ]{#s53} + +Από : [Φρεζούλης Κων/νος](mailto:%C3%B6%C3%B1%C3%A5%C3%B8%C3%AF@%C3%B7-%C3%B4%C3%B1%C3%A5%C3%AC%C3%A5.%C3%A3%C3%B1) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Έχω το Σουσε λινουξ 6.1. Ενώ συνδέομαι κανονικά με το κπππ, με τον νετσκεϊπ ναβιγκέιτορ δεν μπορώ να δω καμία σελίδα. Μου βγάζει έρρορ για το όνομα του σέρβερ +και μου προτείνει να βάλω \$σοψκσ\_νσ. Που όμως; Δεν μου λέει. Είμαι νέος χρήστης του λινουξ και δεν μπόρεσα να βρω που. Στο ΔΝΣ εννοεί; Το έκανα αλλά τίποτα. +Ούτε με τους μέϊλ κλάϊεντς μπορώ να πάρω το μέϊλ μου. Ευχαριστώ προκαταβολικά. Κώστας + +*Δήλωσε στο kppp τους DNS του provider που χρησιμοποιείς.* + + +### [54. Creative TNT Graphics Card]{#s54} + +Από : [Leon Pakis](mailto:pakisleon@yahoo.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +How can i install Creative TNT AGP graphics card to work with X windows? + +*Δοκίμασε το www.xfree86.org να δεις αν υποστηρίζεται η κάρτα σου. Αν δεν βρεις τίποτα, δοκίμασε το σection X-servers στο www.suse.de/e* + + +### [55. Linux-nt Tests]{#s55} + +Από : + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Hi from America How is the business with Linux! They had a test Linux versus NT-4 and you know the results!! Linux needs a lot of work to catch up to Microsoft. +Gia sas pedia o \'Panathinaikos\' erxetai edo na paixi + +*Who really cares?* + + +### [56. news server]{#s56} + +Από : [Bsane](mailto:bsane@sdf.lonestar.org) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +mporei kapoios na mou pei enan news server gia na mpaino kai na mporo na kano post se newsgroups opos comp.os.linux.help ktl, giati to news.ntua.gr den +epitrepei posting :-( TIA, Bsane + +*Δοκίμασε το news.sae.gr* + + +### [57. AGP?]{#s57} + +Από : [Αντώνιος Ματσούκας](mailto:amatsoukas@hotmail.com) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Υποστηρίζει το LINUX, καρτες γραφικών AGP? + +*Ναι.* + + +### [58. Γενικα για Linux]{#s58} + +Από : [Παναγιωτης Γιαννοπουλος](mailto:panosg@x-treme.gr) + +Απάντηση : [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) + +Γεια σας Με ενδιαφέρει να σχοληθο με το linux αλλά είμαι τελείως άσχετος με αυτό το λειτουργικό Δώστε μου μια συμβουλή από που πρέπει να ξεκινήσω με ποια από +όλες τις διανομές Ευχάριστο εκ των προτέρων για τις συμβουλές Παναγιώτης Γιαννοπουλος panosg\@x-treme.gr + +*Η ερώτηση έχει ξανααπαντηθεί πολλές φορές σε παλιότερα mailboxes.* + diff --git a/content/articles/17/01_editorial.md b/content/articles/17/01_editorial.md new file mode 100644 index 0000000..6c3638a --- /dev/null +++ b/content/articles/17/01_editorial.md @@ -0,0 +1,50 @@ ++++ +title = 'Editorial' +date = '1999-09-01T00:00:00Z' +description = '' +author = 'Michalis Kabrianis(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 17'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το πρώτο φθινοπωρινό τεύχος του Magaz είναι εδώ μαζί σας.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μιλάμε πλέον για την τρίτη γενιά αρθρογράφων, στην οποία συμμετεχει ο [Θέμης Παπασσιλέκας](mailto:panzerjager@netscape.net) (γνωστός και από τα προηγούμενα +τεύχη οπότε είχε αναλάβει τις διορθώσεις), ο [DJ Art](mailto:djart@hellug.gr) και βοηθάνε σε αυτό το τεύχος (και ελπίζουμε και όχι μόνο σε αυτό) οι [Γιάννης +Γεωργιάδης](mailto:gd1@otenet.gr) και [Δημήτρης Γλυνός](mailto:glynos@dial.pipex.com) + +Μία ανάλυση του Scott Nipp που την βρήκαμε στο [Linux.com](http://www.linux.com) σχετικά με την κίνηση της [Silicon Graphics](http://www.sgi.com) να δώσει σε +OpenSource το XFS μεταφρασμένη απο τον Θέμη, είναι το κύριο άρθρο αυτού του τεύχους, λόγω της σοβαρότητας του θέματος. Ακολουθεί μία παρουσίαση των νέων +δυνατοτήτων του [RedHat 6.0](http://www.redhat.com) από τον Dj-Art και, μετά από συννενόηση με τον [John Hacking](mailto:squadron@powerup.com.au) ο φίλος [john +georgiad](mailto:gd1@otenet.gr) μετέφρασε το πολύ καλό One-Page Linux Manual (το οποίο τελικά μάλλον για 2-3 σελίδες μοιάζει :-). Ελπίζουμε να το βρείτε +χρήσιμο. + +Το τεύχος κλείνει με ένα άρθρο - παρουσίαση της Java από τον Δημήτρη Γλυνό.\ +Βέβαια, όπως εξηγήσαμε και στο προηγούμενο τεύχος, η στήλη της αλληλογραφίας εξαφανίζεται. Δεν έχει νόημα ύπαρξης. Υπάρχει όμως πάντα η υπόσχεσή μου να +προσπαθήσω να την γυρίσω σε searchable archive\... Ίδωμεν. + +Παραθέτουμε παρακάτω τα θέματα τα οποία υπάρχουν διαθέσιμα, για όποιον θέλει να συνεισφέρει: + + Κατηγορία Howto + Callback στο Linux + Στήσιμο scanner στο linux και προγράμματα για scanning + Προγραμματισμός σε QT, GTK, GNOME + Infrared communication + SGML και LINUXDOC tutorial + Κατηγορία αναλύσεις + Linux και POSIX + Το Linux σαν router + CVS. Τι είναι τι κάνει, πως το κάνει + Κατηγορία παρουσιάσεις + Παρουσίαση του Koffice + Παρουσίαση του Mozilla + Παρουσιάσεις νέων Distributions + Παρουσιάσεις Window managers (Fvwm, Window maker, GvWM κλπ) + Κατηγορία updates παλαιότερων άρθρων + Update για Samba v2 και kernel 2.2 (τεύχος 2/1998) + Update StarOffice για v5.1 (teyxos 3,4/1998) + Update για KDE v. 1.1.1 ή και 2.0 (τεύχος 3/1998) + Update για IP Masq σε kernel 2.2 και ipchains (τεύχος 5/1998) diff --git a/content/articles/17/02_linuxmangr.md b/content/articles/17/02_linuxmangr.md new file mode 100644 index 0000000..beadb6a --- /dev/null +++ b/content/articles/17/02_linuxmangr.md @@ -0,0 +1,442 @@ ++++ +title = 'Το εγχειρίδιο του Linux σε δύο σελίδες' +date = '1999-09-01T00:00:00Z' +description = '' +author = 'John Hacking(mailto:squadron@powerup.com.au) Mετάφραση: john georgiad(mailto:gd1@otenet.gr)' +issue = ['Magaz 17'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Περίληψη χρήσιμων εντολών για το Linux - Έκδοση 3.0 Μάιος 1999. Αρχικό κείμενο από τον John Hacking, στην σελίδα , τον +οποίο και ευχαριστούμε που μας έδωσε την άδεια για μετάφραση.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Πρώτη σελίδα** +------------------------------------------------ + +- [1.1 Εκκίνηση & Τερματισμός](#ss1.1) +- [1.2 Πρόσβαση & Προσάρτηση συστημάτων αρχειοθέτησης](#ss1.2) +- [1.3 Εύρεση αρχείων και κειμένου μέσα σε αρχεία](#ss1.3) +- [1.4 Το X Window](#ss1.4) +- [1.5 Μετακινώντας, αντιγράφοντας, διαγράφοντας & ανοίγοντας αρχεία](#ss1.5) +- [1.6 Εγκατάσταση λογισμικού στο Linux](#ss1.6) +- [1.7 Διαχείριση χρηστών](#ss1.7) + +**2. Δεύτερη σελίδα** +-------------------------------------------------- + +- [2.1 Κολπίνια](#ss2.1) +- [2.2 Παρτιτούρες (configuration files) και τι κάνουν](#ss2.2) +- [2.3 Δικαιώματα (permissions) αρχείων](#ss2.3) +- [2.4 Συντομεύσεις για το X window - (κυρίως για Redhat)](#ss2.4) +- [2.5 Εκτύπωση](#ss2.5) + + +### [1. Πρώτη σελίδα]{#s1} + +[Εκκίνηση & Τερματισμός](#table1)\ +[Πρόσβαση & Προσάρτηση συστημάτων αρχειοθέτησης](#table2)\ +[Εύρεση αρχείων και κειμένου μέσα σε αρχεία](#table3)\ +[Το X Window](#table4)\ +[Μετακινώντας, αντιγράφοντας, διαγράφοντας & ανοίγοντας αρχεία](#table5)\ +[Εγκατάσταση λογισμικού στο Linux](#table6)\ +[Διαχείριση χρηστών](#table7) + +### []{#table1} [1.1 Εκκίνηση & Τερματισμός]{#ss1.1} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ shutdown -h now Κλείσε το σύστημα τώρα χωρίς επανεκκίνηση + + halt Σταμάτα όλες τις διεργασίες (processes) - ίδιο με το + προηγούμενο + + shutdown -r 5 Κλείσε το σύστημα σε 5 λεπτά και επανεκκίνησε το + + shutdown -r now Κλείσε το σύστημα τώρα και επανεκκίνησε το + + reboot Σταμάτα όλες τις διεργασίες (processes) και μετά κάνε + επανεκκίνηση - όπως προηγουμένως + + startx Ξεκίνησε το γραφικό περιβάλλον Χ + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table2} [1.2 Πρόσβαση & Προσάρτηση συστημάτων αρχειοθέτησης]{#ss1.2} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ mount -t iso9660 /dev/cdrom /mnt/cdrom Προσάρτησε τη συσκευή cdrom κάτω από τον κατάλογο + /mnt και ονόμασε τη cdrom + + mount -t msdos /dev/hdd /mnt/ddrive Προσάρτησε το σκληρό δίσκο \"d\" με σύστημα + αρχειοθέτησης msdos\ + κάτω από τον κατάλογο /mnt και ονόμασε το ddrive + + umount /mnt/cdrom Απομάκρυνε το cdrom + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table3} [1.3 Εύρεση αρχείων και κειμένου μέσα σε αρχεία]{#ss1.3} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ find / -name fname Ξεκινώντας απο τον πρωταρχικό κατάλογο, ψάξε για το + αρχείο με όνομα fname + + find / -name \"\*fname\*\" Ξεκινώντας από τον πρωταρχικό κατάλογο, ψάξε για το + αρχείο που περιέχει τη σειρά χαρακτήρων fname + + locate missingfilename Εντόπισε το αρχείο με όνομα missingfilename + χρησιμοποιώντας την εντολή locate - προϋποθέτει ότι + έχει ήδη χρησιμοποιηθεί η εντολή updatedb (βλ. + παρακάτω) + + updatedb Δημίουργησε ή εκσυγχρόνισε τη βάση αρχείων σε όλα τα + συστήματα αρχειοθέτησης που είναι προσαρτημένα στον + πρωταρχικό κατάλογο του linux + + which missingfilename Εμφάνισε τον υποκατάλογο που περιέχει το εκτελούμενο + αρχείο με όνομα missingfilename + + grep textstringtofind /dir Ξεκινώντας από τον κατάλογο που ονομάζεται dir + εντόπισε και εμφάνισε όλα τα αρχεία που περιέχουν τη + σειρά χαρακτήρων textstringtofind + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table4} [1.4 Το X Window]{#ss1.4} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ xvidtune Τρέξε το γραφικό εργαλείο ρύθμισης του Χ window + + XF86Setup Τρέξε το μενού ρυθμίσεων (configuration) του X window + με αυτόματη έρευνα (auto probing) + + Xconfigurator Τρέξε ένα άλλο μενού ρυθμίσεων (configuration) του Χ + window με αυτόματη έρευνα (auto probing) + + xf86config Τρέξε ένα μή γραφικό μενού ρυθμίσεων (configuration) + του Χ window + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table5} [1.5 Μετακινώντας, αντιγράφοντας, διαγράφοντας & ανοίγοντας αρχεία]{#ss1.5} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ ls -l Εμφάνισε κυριολεκτικά τα αρχεία του τρέχοντα + καταλόγου + + ls -F Εμφάνισε τα αρχεία του τρέχοντα καταλόγου + σημειώνοντας τον τύπο του αρχείου + + ls -laC Εμφάνισε κυριολεκτικά όλα τα αρχεία του τρέχοντα + καταλόγου σε στήλες + + rm name Διάγραψε το αρχείο ονομα name + + rm -rf name Εξαφάνισε έναν ολόκληρο κατάλογο μαζί με τους + υποκαταλόγους και τα αρχεία που συμπεριλαμβάνονται + σ\' αυτόν + + cp filename /home/dirname/ Αντίγραψε το αρχείο filename στον κατάλογο + /home/dirname/ + + mv filename /home/dirname/ Μετακίνησε το αρχείο με όνομα filename στον κατάλογο + /home/dirname/ + + cat filetoview Εμφάνισε τα περιεχόμενα του αρχείου filetoview + + man -k keyword Εμφάνισε σε ποιές από τις βοηθητικές σελίδες (man + pages) υπάρχει η λέξη keyword + + more filetoview Εμφάνισε τα περιεχόμενα του αρχείου filetovie σελίδα + - σελίδα · + + head filetoview Εμφάνισε τις 10 πρώτες γραμμές του αρχείου με όνομα + filetoview + + head -20 filetoview Εμφάνισε τις 20 πρώτες γραμμές του αρχείου με όνομα + filetoview + + tail filetoview Εμφάνισε τις 10 τελευταίες γραμμές του αρχείου + filetoview + + tail -20 filetoview Εμφάνισε τις 20 τελευταίες γραμμές του αρχείου + filetoview + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table6} [1.6 Εγκατάσταση λογισμικού στο Linux]{#ss1.6} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ rpm -ivh name.rpm Εγκατάστησε το rpm πακέτο που ονομάζεται name.rpm + + rpm -Uhv name.rpm Αναβάθμισε το rpm πακέτο που ονομάζεται name.rpm + + rpm -e package Απεγκατάστησε το rpm πακέτο που ονομάζεται package + + rpm -l package Εμφάνισε τα αρχεία που περιέχονται στο πακέτο package + + rpm -ql package Εμφάνισε την έκδοση του εγκατεστημένου πακέτου + pαckage καθώς και τα αρχεία που περιέχονται σ\' αυτό + + rpm -i \--force package Επανεγκατάστησε το rpm πακέτο που ονομάζεται package, + εφόσον έχουν διαγραφεί μέρη του (όχι με την εντολή + rpm -e) + + tar -zxvf archive.tar.gz or\ Αποσυμπίεσε τα αρχεία που βρίσκονται συμπιεσμένα και + tar -zxvf archive.tgz περιέχονται στο αρχείο archive + + ./configure Εκτέλεσε το script προετοιμασίας των αρχείων + εγκατάστασης που χρειάζονται για τη μεταγλώττιση + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table7} [1.7 Διαχείριση χρηστών]{#ss1.7} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ adduser accountname Δημιούργησε ένα νέο χρήστη με όνομα αccountname + + passwd accountname Δώσε στο λογαριασμό που ονομάζεται αccountname νέο + κωδικό πρόσβασης + + su Συνδέσου ως υπερχρήστης από αυτό το τερματικό + + exit Σταμάτα να κάνεις τον υπερχρήστη, ξαναγύρισε σε + κατάσταση απλού χρήστη + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + + +### [2. Δεύτερη σελίδα]{#s2} + +[Κολπίνια](#table8)\ +[Παρτιτούρες (configuration files) και τι κάνουν](#table9)\ +[Δικαιώματα (permissions) αρχείων](#table10)\ +[Συντομεύσεις για το X window - (κυρίως για Redhat)](#table11)\ +[Εκτύπωση](#table12) + +### []{#table8} [2.1 Κολπίνια]{#ss2.1} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ ifconfig Εμφάνισε τις IP διευθύνσεις όλων των συσκευών τού + συστήματος + + apropos subject Εμφάνισε τις βοηθητικές σελίδες (man pages) που έχουν + σχέση με το subject + + usermount Εκτέλεσε τη γραφική εφαρμογή προσάρτησης και + απομάκρυνσης συστημάτων αρχειοθέτησης + + /sbin/e2fsck hda5 Χρησιμοποιήσε το εργαλείο ελέγχου συστημάτων + αρχειοθέτησης στην κατάτμηση (partition) hda5 + + fdformat /dev/fd0H1440 Διαμόρφωσε (format) τη δισκέττα στη συσκευή fd0 + + tar -cMf /dev/fd0 Δημιούργησε αντίγραφο του τρέχοντα καταλόγου και των + υποκαταλόγων του σε πολλαπλές δισκέττες + + tail -f /var/log/messages Εμφάνιζε τις 10 τελευταίες γραμμές του Ημερολογίου + + cat /var/log/dmesg Εμφάνισε το αρχείο με τα μηνύματα εκκίνησης - χρήσιμο + για εξάκριβωση μπελάδων. Εναλλακτικά χρησιμοποίηστε + την εντολή `dmesg` . + + \ **\*** Μεταχαρακτήρας - αντιπροσωπεύει τα πάντα. π.χ.\ + `cp from/* to` θα αντιγράψει όλα τα αρχεία κάτω από + τον κατάλογο from στον κατάλογο to + + **?** Μεταχαρακτήρας που αντιστοιχεί σε ένα στοιχείο. π.χ.\ + `cp config.? /configs` θα αντιγράψει όλα τα αρχεία + που ξεκινάνε με το όνομα config. και ακολουθούνται + από ένα χαρακτήρα, από τον τρέχοντα κατάλογο στον + κατάλογο /configs + + \ \[xyz\] Μεταχαρακτήρας επιλογής στοιχείων + + linux single Στο σύμβολο προτροπής `lilo:` ξεκίνησε σε λειτουργία + ενός μόνο χρήστη. Αυτό είναι χρήσιμο αν έχετε ξεχάσει + τον κωδικό πρόσβασής σας. Ξεκινήστε σ\' αυτή τη + λειτουργία και τρέξτε την εντολή `passwd` . + + \ ps Εμφάνισε τις τρέχουσες διεργασίες (processes) + + kill 123 Τερμάτισε (δώσε τέλος στη ζωή της/σκότωσε) μια + συγκεκριμένη διεργασία (process) π.χ. + `kill 123` + + revivify 123 Επανάφερε πίσω στη ζωή μια διεργασία (process) από + κατάσταση ζόμπι π.χ. `revivify 666` + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table9} [2.2 Παρτιτούρες (configuration files) και τι κάνουν]{#ss2.2} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ /etc/profile Καθολικές μεταβλητές περιβάλλοντος για όλους τους + χρήστες + + /εtc/fstab Κατάλογος συσκευών και των αντίστοιχων σημείων + προσάρτησης (mount points). Τροποποιήστε το αρχείο + για να προσθέσετε cdroms, κατατμήσεις (partitions) + DOS και οδηγούς δισκεττών κατά την εκκίνηση. + + /etc/motd Το μήνυμα που εμφανίζεται σε όλους χρήστες κατά τη + διαδικασία του login, π.χ. \"Have fun\...\", + \"Goodmorning\...\" \"Τι κάνεις πάλι τέτοια ώρα;\" + + /etc/rc.d/rc.local Bash script το οποίο εκτελείται στο τέλος της + διαδικασίας login. Όμοιο με το autoexec.bat στο DOS + + /etc/HOSTNAME Περιέχει ολόκληρο το όνομα του ξένιου Υπολογιστή + (hostname) συμπεριλαμβανομένου του πεδίου ορισμού + (dοmain) + + /etc/cron.\* Υπάρχουν 4 υποκατάλογοι που αυτομάτως εκτελούν όλα τα + σκριπτ που βρίσκονται σ\' αυτούς κατά χρονικά + διαστήματα ώρας, ημέρας, βδομάδας ή μήνα + + /etc/hosts Κατάλογος με όλες τις IP διευθύνσεις των υπολογιστών + που είναι γνωστοί στο μηχάνημα + + /etc/httpd/conf Παράμετροι για τον εξυπηρέτη Apache + + /etc/inittab Προσδιορίζει το επίπεδο (runlevel) που θα ξεκινήσει + το σύστημα + + /etc/resolv.conf Ορίζει IP διευθύνσεις για εξυπηρέτες DNS + + /etc/smb.conf Παρτιτούρα (config file) για τον εξυπηρέτη SAMBA. + Επιτρέπει διαμερισμό αρχείων και εκτυπωτών με + εξυπηρετούμενους της Microsoft + + \~/.Xdefaults Ορισμοί για μερικές εφαρμογές X window. Το σύμβολο \~ + αναφέρεται στον αρχικό κατάλογο του χρήστη (home + directory) + + /etc/X11/XF86Config Παρτιτούρα (config file) για το X window + + \~/.xinitrc Ορίζει τον διαχειριστή παραθύρων (window manager) που + θα εκτελεστεί απο το X. Το σύμβολο \~ αναφέρεται στον + αρχικό κατάλογο του χρήστη (home directory) + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table10} [2.3 Δικαιώματα (permissions) αρχείων]{#ss2.3} + +![](/17/img/perm.png) + +Με την εντολή `ls -l` , εμφανίζεται μια εκτενής λίστα αρχείων. Η πρώτη στήλη αντιστοιχεί στα δικαιώματα (permissions) που ισχύουν για το αρχείο. Αν ένα από τα +δικαιώματα για τον ιδιοκτήτη, το γκρουπ ή τους υπόλοιπους λείπει, αυτο αντιπροσωπεύεται με `-` π.χ. drwxr-x\--x + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ Δικαίωμα ανάγνωσης (read) = 4\ Τα δικαιώματα των αρχείων μεταβάλονται με την εντολή + \ `chmod` και τον ανάλογο οκταδικό αριθμό για κάθε + Δικαίωμα εγγραφής (write) = 2\ είδος χρήστη.\ + \ π.χ. η εντολή `chmod 764 filename` θα δώσει στο + Δικαίωμα εκτέλεσης (execute) = 1 αρχείο filename δικαιώματα ανάγνωσης, εγγραφής και + εκτέλεσης (r+w+x) για τον ιδιοκτήτη, ανάγνωσης και + εγγραφής (r+w) για το γκρουπ και ανάγνωσης (r) μόνο + στους υπόλοιπους. + + \ chmod 755 Πλήρη δικαιώματα στον ιδιοκτήτη, ανάγνωσης και + \ εκτέλεσης για το γκρουπ και τους υπόλοιπους + + chmod +x filename Επίτρεψε σε όλους τους χρήστες να εκτελούν το αρχείο + filename + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table11} [2.4 Συντομεύσεις για το X window - (κυρίως για Redhat)]{#ss2.4} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ Control-Alt + ή - Αύξησε ή μείωσε την ανάλυση της οθόνης, π.χ. από + 640χ480 σε 800χ600 + + Alt-escape Εμφάνισε λίστα με τα ενεργά παράθυρα + + Shift-Control F8 \'Αλλαξε το μέγεθος του επιλεγμένου παραθύρου + + Δεξί κλικ στην επιφάνεια εργασίας\ Εμφάνισε μενού επιλογών + (desktop background) + + Shift-Control Altr Φρέσκαρε την οθόνη + + Shift-Control Altx Ξεκίνησε ένα xterm + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +\ +\ + +### []{#table12} [2.5 Εκτύπωση]{#ss2.5} + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ /etc/rc.d/init.d/lpd start Ξεκίνησε το δαίμονα εκτυπώσεων (lpd daemon) + + /etc/rc.d/init.d/lpd stop Σταμάτα το δαίμονα εκτυπώσεων (lpd daemon) + + /etc/rc.d/init.d/lpd status Εμφάνισε την κατάσταση του δαίμονα εκτύπωσης + + lpq Εμφάνισε τις εργασίες που περιμένουν στην ουρά για + εκτύπωση + + lprm Αφαίρεσε εργασίες απο την ουρά αναμονής + + lpr Τύπωσε ένα αρχείο + + lpc Εργαλείο ελέγχου του εκτυπωτή + + man subject \| lpr Τύπωσε τη σελίδα του εχγειριδίου με θέμα subject ως + απλό κείμενο (plain text) + + man -t subject \| lpr Τύπωσε τη σελίδα του εγχειριδίου με θέμα subject ως + postscript + + printtool Ξεκίνησε το γραφικό εργαλείο ρύθμισης εκτυπωτών + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + diff --git a/content/articles/17/03_xfs.md b/content/articles/17/03_xfs.md new file mode 100644 index 0000000..d2fd48d --- /dev/null +++ b/content/articles/17/03_xfs.md @@ -0,0 +1,34 @@ ++++ +title = 'XFS - Τί σημαίνει για το Linux' +date = '1999-09-01T00:00:00Z' +description = '' +author = 'Scott Nipp Μετάφραση: Θέμης Παπασσιλέκας(mailto:panzerjager@netscape.net)' +issue = ['Magaz 17'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο που ακολουθεί έγραψε ο Scott Nipp για το Linux Today στις 16 Αυγούστου, μετά την ανακοίνωση της Silicon Graphics ότι θα δώσει σε GPL τον κώδικα του +XFS. Το μεταφράσαμε και σας το προσφέρουμε.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ποιος είναι ο λόγος για όλη τη φασαρία γύρω από την έκδοση του XFS από την SGI, κάτω από τη GPL; Αυτό είναι ένα ερώτημα που φαίνεται να έχουν πολλοί αυτές τις +ημέρες. Ένα άλλο ερώτημα είναι, \"Τί το ιδιαίτερο έχει ένα σύστημα αρχείων καταγραφής (Journalling FS), και πώς θα με βοηθήσει;\". Αυτά τα ερωτήματα θα +προσπαθήσω να απαντήσω. + +Το XFS είναι ένα σύστημα αρχείων \"καταγραφής\" το οποίο η SGI ανέπτυξε αρχικά για την πλατφόρμα της,το ΙRIX. Ένα σύστημα αρχείων καταγραφής είναι ένα σύστημα +αρχείων το οποίο καταγράφει τη δραστηριότητά του, κατά συνέπεια κάνοντας την επαναφορά από ένα \'κρέμασμα\' πολύ γρηγορότερη. Αυτή η καταγραφή σημαίνει ότι στην +περίπτωση διακοπής ρεύματος, το σύστημα αρχείων έχει ένα μητρώο του τί έκανε εκείνη τη στιγμή. Αυτό σημαίνει ότι το σύστημα αρχείων δεν πρέπει να κάνει ένα +μακροσκελή έλεγχο συνοχής \--στο Linux, fsck. + +Η λειτουργία καταγραφής είναι περίπου η εξής: όταν πρόκειται να συμβεί μία εγγραφή αρχείου, το σύστημα αρχείων πρώτα γράφει τη λεγόμενη \'καταχώρηση πρόθεσης +αλλαγής\' στο μητρώο του συστήματος. Έπειτα, γίνεται η καθεαυτή εγγραφή του αρχείου. Τέλος, η προηγούμενη καταχώρηση του μητρώου σημειώνεται ως πλήρης και +διαγράφεται. Αυτό εξαλείφει την ανάγκη να ελέγχεται ολόκληρο το σύστημα αρχείων στην περίπτωση διακοπής. Αντί να ελεγθεί όλο το σύστημα αρχείων, ελέγχεται μόνο +το μητρώο, και εάν βρεθεί μία καταχώρηση πρόθεσης αλλαγής που δεν έχει ολοκληρωθεί, η δομή των αρχείων γι αυτή την ενότητα (block) ελέγχεται και ρυθμίζεται, εάν +και όπου αυτό είναι απαραίτητο. + +Το XFS έχει επίσης και άλλα πλεονεκτήματα να προσφέρει στην κοινότητα του Linux. Το XFS είναι ένα 64-bit σύστημα αρχείων, κάτι που σημαίνει ότι μπορεί να +υποστηρίξει γελοιωδώς μεγάλα αρχεία (9 εκατομμύρια terabytes), και ακόμα μεγαλύτερα συστήματα αρχείων (18 εκατομμύρια terabytes). Το να αντιληφθεί κανείς την +τάξη μεγέθους, είναι κάτι το φαινομενικό. Το XFS υποστηρίζει αυτή τη χωρητικότητα και αξιοπιστία με εκπληκτική ταχύτητα. Το XFS είναι επίσης συμβατό με άλλες +δημοφιλείς υπηρεσίες που περιλαμβάνουν διάφορες λύσεις για αντίγραφα ασφαλείας, και διαμοίρασμο αρχείων μέσω NFS ή Samba. diff --git a/content/articles/17/04_redhat6.md b/content/articles/17/04_redhat6.md new file mode 100644 index 0000000..a8fc520 --- /dev/null +++ b/content/articles/17/04_redhat6.md @@ -0,0 +1,60 @@ ++++ +title = 'Τα νέα χαρακτηριστικά του RedHat 6.0' +date = '1999-09-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 17'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Λίγο καθυστερημένο βέβαια λόγω καλοκαιριού, αλλά τελικά κατάφερα να γράψω αυτό το άρθρο. Δεν θα κάνω παρουσίαση του RedHat, αλλά θα αναφερθώ στις διαφορές της +καινούριας έκδοσης, του πασίγνωστου distribution, από τις προηγούμενες εκδόσεις.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ας ξεκινήσουμε από την αρχή και ας δούμε τα νέα χαρακτηριστικά της εγκατάστασης του RedHat 6.0, αφού πρώτα πούμε ότι έρχεται με τον kernel 2.2.5-15: + +1. Από αυτήν την έκδοση του RedHat, η εγκατάσταση μπορεί να γίνει μέσω HTTP, εκτός από NFS, και είναι παρόμοια με την εγκατάσταση μέσω FTP. +2. Ο κύριος κορμός της εγκατάστασης έχει μείνει όπως ήταν στο παρελθόν. Επίσης, για δεύτερη συνεχόμενη έκδοση υπάρχουν τρείς προεπιλογές, οι Workstation και + Server, καθώς και η Custom. Η πρώτη διαφορά που συναντούμε είναι στην επιλογή των πακέτων που εγκαθιστούμε (από εδώ και στο εξής μιλάω για την Custom + προεπιλογή). Όταν διαλέξουμε να δούμε όλα τα πακέτα που περιλαμβάνει το RedHat, θα βρεθούμε σε ένα menu που τα πακέτα βρίσκονται χωρισμένα σε κατηγορίες, + όπως περίπου και στη διανομή SuSE (για παράδειγμα, υπάρχει κατηγορία Base -\> Deamons). Αφού λοιπόν διαλέξουμε τα πακέτα που επιθυμούμε και προχωρήσουμε + στην εγκατάσταση, βλέπουμε το δεύτερο καινούριο χαρακτηριστικό της εγκατάστασης, κάτι που υπήρχε από παλιά ενσωματωμένο στην εγκατάσταση του SuSE: ο έλεγχος + των dependencies. Αν επιλέξαμε να εγκαταστήσουμε ένα πρόγραμμα που χρειάζεται ένα άλλο πακέτο για να δουλέψει, το RedHat μας το γνωστοποιεί και από εκεί και + μετά μπορούμε να επιλέξουμε την αυτόματη προσθήκη του πακέτου που απαιτείται ή μπορούμε να το αγνοήσουμε (απλώς το πρόγραμμα δεν θα δουλεύει). +3. Μια και αναφέρθηκα στα πακέτα που εγκαθιστούμε, να επισημάνω ότι το RedHat 6.0 είναι η πρώτη έκδοση που περιλαμβάνει το **K-Desktop**. Βέβαια, περιλαμβάνει + την έκδοση **1.1.1 pre 2** του δημοφιλέστατου window manager, καθώς την εποχή που κυκλοφόρησε το RedHat 6.0 δεν είχε βγεί ακόμα η τελική σταθερή έκδοση + **1.1.1** του KDE. Επίσης, όπως πάντα, το RedHat παρέχει το **Gnome** συνοδευόμενο από το **Enlightenment**, ενώ παρέχει και άλλους window managers, όπως ο + **WindowMaker** και o **AfterStep**. Στα πακέτα επίσης περιέχεται και το **x11amp**, που τώρα μετονομάστηκε σε **xmms**. +4. Προχωρώντας, μόλις εγκατασταθούν τα πακέτα (και αν επιλέξαμε εγκατάσταση του X-Window system), μας εμφανίζεται το καθιερωμένο πρόγραμμα της RedHat, το + **Xconfigurator**, για την αναγνώριση των συσκευών του υπολογιστή μας έτσι, ώστε να γίνουν οι απαράιτητες ρυθμίσεις των X. Μόλις, λοιπόν, την ολοκληρώσουμε + και αφού έχουμε διαλέξει κάρτα γραφικών, το RedHat φορτώνει τον X-server που διαλέξαμε με σκοπό να δούμε αν δουλεύουν σωστά τα X. Εδώ συναντάμε κάτι + πρωτόγνωρο: Μετά το φόρτωμα του X-server και τις ερωτήσεις αν βλέπουμε σωστά το περιβάλλον των X, μας γίνεται η ερώτηση αν θέλουμε να φορτώνονται αυτόματα + τα X μετά το boot του πυρήνα (δηλαδή αν θέλουμε να ορίσουμε στο initdefault του αρχείου /etc/inittab την τιμή 5 (runlevel)). +5. Τελειώνοντας με την εγκατάσταση, το RedHat υποστηρίζει passwords του τύπου Shadow και Md5. Μετά τον ορισμό του password του root, επιλέγουμε αν θέλουμε + υποστήριξη Shadow και Md5, ενώ ένα νέο χαρακτηριστικό που προστέθηκε είναι η υποστήριξη **NIS** (**N**etwork **I**nformation **S**ervice). Σ\' αυτό το + σημείο ορίζουμε αν θέλουμε NIS Domain ή NIS Server. + +Τελείωσε λοιπόν η εγκατάσταση και προχωράμε στο boot του πυρήνα για να μπούμε στο αγαπημένο μας λειτουργικό. Εδώ παρατηρούμε ακόμα ένα νέο χαρακτηριστικό: Δίπλα +από κάθε process που ανοίγει το init αναγράφεται μέσα σε αγκύλες με πράσινο χρώμα OK ή με κόκκινο FAILED, ανάλογα με το αν το συγκεκριμένο process έτρεξε με +επιτυχία ή όχι. Για παράδειγμα δίπλα από τον deamon **apmd** γράφει \[OK\]. Ο **apmd** είναι ένας καινούριος deamon που εκμεταλλέυεται το **A**dvanced **P**ower +**M**anagment της motherboard (αν υπάρχει), για να κλείνει μόνο του το PC σε περίπτωση shutdown. \'Aλλη δουλειά που αναλαμβάνει ο **apmd** είναι να προειδοποιεί +για την κατάσταση της μπαταρίας του laptop. + +Ανοίγοντας τα διάφορα εργαλεία ρυθμίσεων του RedHat παρατηρούμε μερικές μικροαλλαγές. Για παράδειγμα, στο **sndconfig**, μετά την ρύθμιση της κάρτας ήχου +προστέθηκε και ένα MIDI sample για να ακούσουμε αν δουλέυει σωστά ο τομέας **MIDI** της κάρτας ήχου. Ανοίγοντας το γραφικό εργαλείο **printtool** που είναι για +τη ρύθμιση του printer μας και διαλέγοντας **Epson Stylus Color**, δίπλα στο **Color Depth** περιέχονται αρκετά μοντέλα της σειράς (όπως ο 600), ενώ +υποστηρίζονται πολλαπλές αναλύσεις εκτύπωσης. Αυτό σημαίνει ότι μπορούμε να εκτυπώνουμε σε καλύτερης ποιότητας χαρτιά αν επιθυμούμε. + +Ο γραφικός διαχειριστής πακέτων RPM, το **Glint**, που υπήρχε σε παλιότερες εκδόσεις, δεν υπάρχει στην έκδοση 6.0. Την θέση του την πήρε το **GnoRPM**, που +ακολουθεί το αισθητικό πρότυπο των εφαρμογών για το **Gnome**. Σε σχέση με το **Glint**, το **GnoRPM** έχει καλύτερο navigation στα πακέτα, αφού περιλαμβάνει +δύο παράθυρα. Στο αριστερό παράθυρο εμφανίζονται οι κατηγορίες των εγκατεστημένων πακέτων, σαν ξεχωριστός φάκελος η κάθε μία, ενώ όλες μαζί αποτελούν +δενδροδιάγραμμα. Στο δεξί παράθυρο εμφανίζονται τα πακέτα που περιλαμβάνει μία κατηγορία, εφόσον την επιλέξουμε. Το **GnoRPM** διαθέτει κουμπιά για +εγκατάσταση/απεγκατάσταση πακέτων, **Query**, **Verify**, ενώ διαθέτει και δύο πολύ χρήσιμα κουμπιά που δεν είχε το **Glint**: **Find** και **Web Find**. + +Να υπενθυμίσω ότι από λίγο παλιότερες εκδόσεις δεν υπάρχει στο RedHat η εφαρμογή **cabaret**, που χρησίμευε για την προσθήκη και για το mount/unmount συσκευών +και partitions. Η εφαρμογή έτρεχε σε περιβάλλον κονσόλας. Τη \"θέση\" του σε γραφικό περιβάλλον έχει πάρει το **usermount**, το οποίο όμως χρησιμεύει μόνο για +το mount/unmount των ήδη δηλωμένων συσκευών και partitions, ενώ δεν μπορεί αυτό να προσθέσει στο **/etc/fstab** συσκευές, όπως έκανε το **cabaret**. Έτσι, η +RedHat συνεχίζει να προτείνει το **linuxconf** σαν εργαλείο για τις ρυθμίσεις του συστήματος (ίσως να ανταγωνίζεται και το Y.A.S.T. της SuSE). To **linuxconf** +τρέχει τόσο σε περιβάλλον κονσόλας, όσο και σε περιβάλλον X. diff --git a/content/articles/17/05_java.md b/content/articles/17/05_java.md new file mode 100644 index 0000000..ec3eef8 --- /dev/null +++ b/content/articles/17/05_java.md @@ -0,0 +1,1048 @@ ++++ +title = 'Java και Linux' +date = '1999-09-01T00:00:00Z' +description = '' +author = 'Δημήτρης Γλυνός(mailto:glynos@dial.pipex.com)' +issue = ['Magaz 17'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καιρός να δούμε ένα είδος καφέ λιγάκι διαφορετικό από αυτόν που πίναμε ως τώρα\...την Java.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Java - Τι σόι καφές είναι αυτός; (History/Internals)** +---------------------------------------------------------------------------------- + +- [1.1 Ιστορική Αναδρομή:](#ss1.1) +- [1.2 Εσωτερική Δομή:](#ss1.2) + +**2. Χμμμ, ενδιαφέρον άρωμα\... (Features/Applications)** +-------------------------------------------------------------------------------- + +**3. Μα γιατί δε μοιάζει με αυτόν που ήπια χθες; (Minor Problems)** +------------------------------------------------------------------------------------------ + +**4. Ωραία\... και πώς τον σερβίρουμε στο Linux-άκι; (Linux Installation Notes)** +-------------------------------------------------------------------------------------------------------- + +**5. Διαβάζοντας το φλιτζάνι (Java in the (not..so..) working world)** +--------------------------------------------------------------------------------------------- + +**6. Κώδικας και άλλα** +---------------------------------------------- + + +### [1. Java - Τι σόι καφές είναι αυτός; (History/Internals)]{#s1} + +### [1.1 Ιστορική Αναδρομή:]{#ss1.1} + +Το 1991 η Sun αναλαμβάνει να φτιάξει μία πλατφόρμα εφαρμογών (σε C++) ικανή για να τρέξει εφαρμογές σε μία μεγάλη γκάμα υπολογιστικών συστημάτων. Μέσα από το +project αυτό, γεννήθηκε μία γλώσσα προγραμματισμού, ονόματι Oak. + +Το 1994, βλέποντας την ταχύτητα με την οποία αναπτύσσεται το World Wide Web, η Sun προσθέτει ορισμένα Web-extensions στην Oak και την μετονομάζει σε Java. + +Το 1995 οι Αlpha eκδόσεις της Java και της HotJava διανέμονται δωρεάν εκ του δικτύου για τις πλατφόρμες των Solaris και ΝΤ. Σύντομα γίνονται και τα ports σε +Linux και Win95. + +Στις αρχές του 1996 κυκλοφορεί η έκδοση 1.0. Τόσο το Netscape όσο και o Internet Explorer υποστηρίζουν Java, σε server και εσωτερική (browser) μορφή. Μετά από +\_αρκετά\_ bug και security fixes, η εταιρεία ανεβάζει στο Web την Βeta έκδοση της σειράς 1.1. Διαθέτει εκτός των άλλων: RMI (κλήση συναρτήσεων εξ αποστάσεως), +functions για ανταλλαγή πληροφοριών με βάσεις δεδομένων, μοντέλα για κρυπτογραφικές ρουτίνες και πολλά άλλα\... + +Η πρώτη επίσημη έκδοση της σειράς 1.1 βγαίνει το Μάρτιο του ΄97. Αυτή τη στιγμή η τελευταία σταθερή έκδοση για Linux είναι η 1.1.7v3 αν και υπάρχει έκδοση της +σειράς 1.2 (JDK 1.2 pre-v1). + +Το παρακάτω [link](http://java.sun.com/products/jdk/1.2/docs/relnotes/features.html) δίνει περισσότερες πληροφορίες για τις διαφορές από release σε release. Θα +φανεί ιδιαίτερα χρήσιμο στο προγραμματιστικό κοινό, καθώς οι αλλαγές που έχουν επέλθει από την έκδοση 1.1 στην 1.2 είναι αρκετές και θεμελιώδεις. + +### [1.2 Εσωτερική Δομή:]{#ss1.2} + +Η Java ανήκει στην κατηγορία των interpreted γλωσσών. Όταν θα τρέξουμε το πρόγραμμά μας, ο υπολογιστής δεν θα διαβάσει κατ΄ευθείαν ένα binary executable, αλλά +μια σειρά εντολών, που με τη σειρά της θα γίνει compiled την ώρα της εκτέλεσης. Εμπειρικά μπορούμε να πούμε, ότι αυτό θα κάνει το πρόγραμμά μας, 10-20 φορές πιο +αργό απ΄το αντίστοιχο πρόγραμμα,γραμμένο σε C. + +Η Java χρησιμοποιεί μία εικονική μηχανή, ένα Virtual Machine, το οποίο αναλαμβάνει να πάρει τον κώδικα σε μια semi-compiled μορφή (ονομαζόμενη [byte +code](05_java-6.html#part1a)) και κατά την εκτέλεση, να τον μετατρέψει σε machine-dependent κώδικα. Εκτός, όμως, από αυτή τη λειτουργία, το Java Virtual Machine +θα μπορούσε να χαρακτηριστεί και ως \"κουτί ασφαλείας\". Ελέγχει και προστατεύει το πρόγραμμα από τυχόν \"παράνομες\" κλήσεις, προσπαθώντας να αποτρέψει ένα +γενικότερο **κακό** (π.χ. το πρόγραμμα να απο φασίσει ξαφνικά να φάει όλα τα memory resources του λειτουργικού μας) ή τουλάχιστον να δώσει όσο περισσότερες +debugging πληροφοριές γίνεται περί του \"τι έγινε\" πριν το κακό :) + +Εφόσον είναι στην ευθύνη του JVM να φτιάξει τον κατάλληλο κώδικα για την πλατφόρμα μας\... αυτό μας επιτρέπει να κυκλοφορούμε από μηχάνημα σε μηχάνημα με τον +ίδιο :) Java semi-compiled κώδικα. Με άλλα λόγια, παίρνουμε τον πηγαίο κώδικά μας, τον κάνουμε compile με κάποιο εργαλείο (όπως το javac) που φτιάχνει +\"byte-code\" κώδικα, και το νέο αρχείο με κατάληξη \".class\" μπορούμε να το τρέξουμε κάτω από οποιοδήποτε JVM είτε αυτό βρίσκεται σε PC, είτε σε SUN-ακι είτε +σε κάποια άλλη supported πλατφόρμα\... + +Το παρακάτω σχήμα δείχνει πώς, κατά την εκτέλεση του προγράμματος, η εφαρμογή βρίσκεται \"πάνω\" σε έναν JVM, αυτός με τη σειρά του επικοινωνεί με το +λειτουργικό σύστημα που με τη σειρά του επικοινωνεί με το hardware. + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Εφαρμογή + + Java Virtual Machine + + Λειτουργικό Σύστημα + + Hardware + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + + +### [2. Χμμμ, ενδιαφέρον άρωμα\... (Features/Applications)]{#s2} + +H Java αποτελεί μία object oriented γλώσσα. Η πλειοψηφία των έτοιμων functions αποτελούν μέρος των αρμόδιων classes και έτσι ο νέος χρήστης συναντά από νωρίς +όρους, όπως το object και την τεχνική του inheritance. + +Η γλώσσα επιτρέπει σε μια δικιά μας class, να αποτελεί γόνο περισσότερων από μιας αρχέτυπων classes.Αυτό όμως δεν σημαίνει ότι η νέα class θα περιέχει τον +κώδικα τών αρχέτυπων. Απλά, εξασφαλίζει με αυτόν τον τρόπο ότι στη νέα class θα υπάρχουν όλες οι functions που υπήρχαν στις πατρικές ΟΝΟΜΑΣΤΙΚΑ. Έτσι, θα +είμαστε σίγουροι ότι μία class που κατάγεται από την Class Skylo και Class Gata, και θα νιαουρίζει και θα γαβγίζει (έχοντας γράψει και τον κατάλληλο κώδικα +φυσικά). Classes σαν τον σκύλο και τη γάτα, που λειτουργούν ως αρχέτυπα και εξασφαλίζουν ότι ένας συγκεκριμένος αριθμός από functions θα υπάρχουν σε κάθε class +που κατάγεται από αυτές, ονομάζονται interfaces και δεν περιεχουν implementation παρά μόνο function headers. Συνεπώς, σε μία function που περιμένει ως παράμετρο +ένα interface, μπορούμε να περάσουμε κάθε class που κάνει implement αυτό τo [interface](05_java-6.html#part2a) + +H Java αποτελεί μία εν γένει threaded γλώσσα. Βασικές της λειτουργίες όπως το αυτόματο garbage collection, o Audio Player, η διαχειριση των events σε γραφικό +περιβάλλον αλλά και η ίδια η function main(), αναλαμβάνονται από ξεχωριστά threads κατά την εκτέλεση του προγράμματος. Τα threads αυτά τρέχουν παράλληλα και ο +διαμερισμός του χρόνου για κάθε διεργάσια ίδιου priority προσδιορίζεται από το λειτουργικό σύστημα. + +Προσοχή θα πρέπει να δοθεί στο γεγονός ότι η Java διαβάζει και γράφει σε unicode και όχι σε ASCII. + +Aς δούμε όμως μερικά σημεία της γλώσσας που την κάνουν ιδιαίτερα επιθυμητή στο σημερινό προγραμματιστικό κοινό. + +Λόγω threading είναι ιδανική για τη συγγραφή προγραμμάτων σχετικά με δικτυακές εφαρμογές. Π.χ. σε ένα server application το πρόγραμμα μπορεί να χρησιμοποιήσει +ένα thread για να ακούει σε μια port και κάθε φορά που δέχεται ένα incomming connection, να ξεκινά ένα καινούριο [thread](05_java-6.html#part2b) για να +αναλαμβάνει τις υπηρεσιές του connection αυτού. Έτσι δεν χρειάζεται να παίζουμε με fork() και if-then-else structures ώστε να χωρίζουμε τον κώδικα μεταξύ του +αρχικού server και των forked παιδιών του (ό πως γίνεται στη C). + +Eκτός αυτού, το threading μάς επιτρέπει να δώσουμε σε βαριά προγράμματα μια νέα αρχιτεκτονική, όπου κάποιες διεργασίες θα εκτελούνται παράλληλα, επιτρέποντας +καλύτερη αξιοποίηση της υπολογιστικής δύναμης ενός multi-processor συστήματος. + +Όσον αφορά το σχεδιασμό προγραμμάτων με GUI, εκτός από την πληθώρα των classes υπεύθυνες για τέτοιες διεργασίες, δίνεται στο χρήστη η δυνατότητα να επιλέξει το +είδος των widgets που θα βγάλει στη φόρμα του. Για παράδειγμα μπορεί είτε να χρησιμοποιήσει τα default widgets του ήδη υπάρχοντος window manager είτε (για +περισσότερη ταχύτητα) τα predefined widgets του swing, που έχουν σχεδιαστεί σε java και είναι όμοια για όλες τις πλατφόρμες. + +Η εξοικείωση με το συντακτικό της γλώσσας δεν αργεί πολύ καθώς είναι παραπλήσιο με αυτό της C. H Java κρύβει από το χρήστη τα pointer semantics και έτσι το +παιχνίδι με τα objects/classes γίνεται πολύ ευκολότερο απ΄ότι στη C++. + +Έστω ότι μία function χρειάζεται ως παράμετρο την instance μιας class που δεν πρόκειται να ξαναχρησιμοποιήσουμε στο υπόλοιπο πρόγραμμα. Η Java μάς επιτρέπει να +φτιάξουμε επί τόπου μια \"anonymous inner class\" και να κάνουμε τη δουλειά μας χωρίς άλλα declarations. Ή για παράδειγμα, αν χρειαστούμε, για ένα μικρό κομμάτι +κώδικα, να κάνουμε override μια method μιας ήδη υπάρχουσας class\... :) η \"anonymous inner class\" θα μας λύσει τα [χέρια](05_java-6.html#part2c). + +Η ελαστικότητα που προσφέρεται με τα threads παρατηρείται και στο event handling. Οι λεγόμενοι adapters και event listeners μάς δίνουν τη δυνατότητα να κάνουμε +register ένα event μιας class σε περισσότερους από έναν listeners. Με αυτό τον τρόπο μπόρουμε να έχουμε ένα button στη φόρμα μας που αλλάζει times σε διάφορα +objects χωρίς να χρειάζεται explicit reference στις συγκεκριμένες instances και methods των objects αυτών (που θα αναλάβουν το event). + +Oι βιβλιοθήκες από functions είναι οργανωμένες σε μορφή πακέτων (packages). Αυτές που αρχίζουν από java (ή sun) είναι οι default που δίνονται με το jdk από τη +Sun. Γράφοντας import java.awt.\* δίνουμε στο πρόγραμμα μας πρόσβαση σε όλες τις classes του πακέτου AWT (υπεύθυνο για ρουτίνες σε γραφικό περιβάλλον). Τα +αρχεία .jar αποτελούν τον ενδεδειγμένο τρόπο συμπίεσης πακέτων. Όποτε ο java interpreter χρειαστεί μια class απο ενα τέτοιο πακέτο, θα το αποσυμπιέσει αυτόματα. +Τα περιβόητα Java Beans δεν αποτελούν τ ίποτα παραπάνω από συμπιεσμένα packages, που χρησιμοποιούνται ως components, σε εργαλεία visual προγραμματισμού όπως ο +Java Builder. + +Εκτός από την απλή σχεδίαση γραφικών, μπορεί κανείς να βρει packages υπεύθυνα για επεξεργασία αντικειμένων σε 3d, classes για φιλτράρισμα ήχου, προβολή και +επεξεργασία video, methods που απλουστεύουν τη χρήση των sockets στα networking apps, message encryption και signing (με επιλογή στους αλγόριθμους που θα +χρησιμοποιηθούν) και πολλά πολλά άλλα. + +Δεδομένου ότι η Sun ήταν η μαμά του RPC (remote procedure call), δεν θα μπορούσαν να αφήσουν απ΄έξω την RMI (remote method invocation) τεχνολογία. Σύμφωνα με το +RMI, ένα object που τρέχει σε μια Virtual Machine μπορεί να καλέσει (μέσω δικτύου) μια method ενός object που υπάρχει σε μια άλλη virtual machine. Για να γίνουν +τα πράγματα πιο λιανά, φανταστείτε ότι έχετε κάνει semi-compile ένα πρόγραμμα και το έχετε εγκαταστήσει σε ένα μηχάνημα ενός δικτύου. Χρησιμοποιώντας λιγοστά +αρχεία (που περιέχουν πληροφορίες για το πώς θα καλέσουν τις methods στο server μηχάνημα) θα μπορούσατε να κάνετε όλα τα μηχανήματα στο LAN auto +[clients](05_java-6.html#part2d) αυτού του προγράμματος (χωρίς φυσικά να αντιγράψετε ολόκληρο το software σας στο δίσκο κάθε μηχανήματος). + +Τα Java Applets αποτελούν εκτελέσιμα αρχεία της java, κατασκευασμένα για να τρέξουν από τον web-browser κάθε χρήστη που θα τα κατεβάσει από το net. Στην ουσία +καλούνται από τα {APPLET CODE=\"koko.class\"} tags της σελίδας που παρακολουθεί ο χρήστης. O web-browser πρίν τα τρέξει στη μικρή του jvm, θα τα ερευνήσει για +οποιεσδήποτε παράνομες κλήσεις (π.χ. διάβασμα από τον τοπικό σκληρό δίσκο κλπ. κλπ.). + + +### [3. Μα γιατί δε μοιάζει με αυτόν που ήπια χθες; (Minor Problems)]{#s3} + +Όσοι από μας προγραμματίζουν με :) άκρως ντετερμινιστική λογική, θα πρέπει να είναι αρκετά προσεχτικοί με την Java. Όπως προαναφέραμε, πρόκειται για μια εν +γένει Threaded γλώσσα, που αφήνει το priority scheme να το ελέγξει το λειτουργικό σύστημα. + +Συνεπώς: + +- Εάν τρέξουμε ένα πρόγραμμα 10 φορές, και του δώσουμε το ίδιο input και τις 10 φορές, αυτό ΔΕΝ ΣΗΜΑΙΝΕΙ ότι το πρόγραμμα θα τρέξει με τον ίδιο τρόπο και τις + 10 φορές. :-) +- Έστω ότι παίρνουμε το όμορφο προγραμματάκι μας (koko.java) που είναι γεμάτο με threads (και γραμμένο φυσικά κάτω από linux) και το πάμε στου φίλου μας του + Μάκη, που τρέχει winblowz98. Παρατηρούμε όμως ότι χρειάζεται να περάσουν 3-4 δευτερόλεπτα από τότε που πάτησε το κουμπάκι μέχρι να ανανεωθεί η όλη φόρμα\... + και γεμάτοι απορία αναρωτιόμαστε τι δεν πήγε καλά\... Μια πιθανή απάντηση είναι το διαφορετικό priority scheme που έχουν τα winblowz από το linux-ακι + (round-robin time-slicing isn\'t always working at its best). + +Προκειμένου να αποφύγουμε προβλήματα που προκύπτουν από την ντετερμινιστική μας λογική :) θα ήταν προτιμότερο να προγραμματίζουμε με ένα event-driven μοντελό +στο μυαλό (παρά με τον κλασικό σειριακό τρόπο : μετά από αυτό - θα κάνω αυτό). Τα threads γίνονται πολύ φιλικότερα όταν χρησιμοποιούνται σωστά :) + +Ο Java Virtual Machine κάνει μια σειρά από checks πριν τρέξει το semi-compiled κώδικα. Αυτά τα checks αφορούν τον τρόπο με τον οποίο φορτώνονται οι classes και +τα operations που εμπεριέχονται στις methods τους. Ακόμα και για πολύ απλά προγραμματάκια αυτή η διαδικασία είναι πολλές φορές επίπονη. Γι΄αυτό θα συνιστούσα σε +όποιον σκέφτεται να ασχοληθεί κατά κόρον με τον προγραμματισμό στην java, να χρησιμοποιήσει είτε compiler που βγάζει native executable είτε να ψάξει για +μηχάνημα άνω των 200mhz. + + +### [4. Ωραία\... και πώς τον σερβίρουμε στο Linux-άκι; (Linux Installation Notes)]{#s4} + +To www.blackdown.org είναι υπεύθυνο για τα ports της java σε linux. Αναλόγως με το αν έχουμε libc h\' glibc κατεβάζουμε την ανάλογη έκδοση του jdk (java +development kit) και το βάζουμε στο αγαπημένο μας directory (συνήθως /usr/lib). Εκεί τραβάμε ένα + + beast:/usr/lib # tar vxzf jdk_1.1.7-v1a-glibc-x86.tar.gz + +και είμαστε έτοιμοι :) + +Εδώ λοιπόν βλέπουμε την δενδρική δομή αυτού του directory: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + -r--r--r-- 1 505 505 101235 Nov 5 1998 CHANGES + -r--r--r-- 1 505 505 937 Nov 5 1998 COPYRIGHT + -r--r--r-- 1 505 505 5994 Nov 5 1998 LICENSE + -r--r--r-- 1 505 505 53189 Nov 5 1998 README + -rw-r--r-- 1 505 505 12631 Nov 5 1998 README.linux + -rw-r--r-- 1 505 505 7547 Nov 5 1998 README.linux.src + drwxr-xr-x 3 505 505 1024 Nov 5 1998 bin + drwxr-sr-x 4 505 505 1024 Nov 5 1998 include + -r--r--r-- 1 505 505 2500 Nov 5 1998 index.html + drwxr-xr-x 4 505 505 1024 Nov 5 1998 lib + -rw-r--r-- 1 505 505 1675875 Nov 5 1998 src.zip + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +To αρχειάκι src.zip περιέχει τα sources της java (σε περίπτωση που δεν θέλουμε να χρησιμοποιήσουμε τις ήδη υπάρχουσες compilαρισμένες εκδόσεις) και στο +README.linux.src περιέχονται οδηγίες για το compilation process. + +Στο lib βρίσκονται όλα τα απαιτούμενα .so αρχεία μαζί με ένα σημαντικότατο αρχειάκι ονόματι classes.zip που περιέχει όλες τις classes (semi-compiled morfi +.class) που έρχονται με το jdk. ΟΧΙ, ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ ΝΑ ΤΟ ΑΠΟΣΥΜΠΙΕΣΕΤΕ! :) + +Στις παλαιότερες εκδόσεις του jdk, o compiler της java απαιτούσε την ύπαρξη μιας shell variable, ονόματι \$CLASSPATH, που έδειχνε σε αυτό το αρχείο +(classes.zip) αλλά και σε οποιαδήποτε άλλα directories, τα οποία περιείχαν \".class\" αρχεία που θα χρησίμευαν στο πρόγραμμά σας. Σύμφωνα με το documentation +του jdk1.1.7 αυτή η variable δεν χρησιμοποιείται πια. Για καλό και για κακό όμως (και για όσους από εσάς έχουν τσιμπήσει παλιότερο jdk) καλό θα ήταν στο +/etc/profile να βάλετε: + + export CLASSPATH=.:/usr/lib/java117_v1a/lib/classes.zip:~/java + +Όσοι από σας χρησιμοποιούν tsch :) ας παίξουν με την setenv. + +Έτσι έχουμε στο CLASSPATH το παρόν directory εργασίας, το directory που περιέχει το classes.zip και ένα directory κάτω από το home μας με όνομα java. + +To directory bin περιέχει τα binaries του JDK. Εφόσον δεν είμαστε αρκετά τρελοί για να τα καλούμε με τα full path names, θα ήταν καλό να βάλουμε το directory +αυτό στο PATH μας (/usr/lib/java117\_v1a/bin). Έτσι θα έχουμε πρόσβαση από παντού στα παρακάτω εργαλεία: + +- javac ( Java Compiler )\ + :) Ο compiler μας\...παίρνει αρχεία με κώδικα σε java (.java) και τα μεταφράζει σε bytecode. +- java ( Java Interpreter )\ + O κύριος που αναλαμβάνει να ανεβάσει το προγραμματάκι μας πάνω στην virtual machine. Με άλλα λόγια, :) τρέχει τα προγράμματά μας. +- java\_g ( java tracer )\ + Δίνει πληροφορίες για το τί γίνεται στην Virtual Machine, κατά την εκτέλεση του προγράμματος. +- jre ( Java Runtime Interpreter )\ + Είναι μια ελαφριά έκδοση του παραπάνω. Χρησιμοποιείται κυρίως από τους κυρίους που \*απλώς θέλουν να τρέξουν το πρόγραμμα\*. +- appletviewer ( Java AppletViewer )\ + Ένα όμορφο εργαλείο για να τεστάρετε locally τα applets σας. +- jdb ( Java Debugger )\ + Ψάχνει για ζωύφια στα προγράμματά σας :) +- javap ( Class File Disassembler )\ + Aυτό το όμορφο προγραμματάκι εκτός από το ότι τραβάει τα declarations από ένα .class αρχείο (ναι, ναι, compilαρισμένο αρχείο) σας μεταφράζει και τα + byte-code περιεχόμενα αυτού του αρχείου (δηλ. τις εντολές που θα δωθούν στην virtual machine). +- javadoc ( Java Documentation Generator )\ + Τελικά είναι της μόδας αυτές τις μέρες, κάθε γλώσσα προγραμματισμού να έχει και από ένα προγραμματάκι που διαβάζει τον κώδικα και από ειδικά comments, να + παράγει μια HTML σελίδα με το documentation του προγράμματος. +- javah ( C Header and Stub File Generator )\ + To προγραμματάκι αυτό θα βοηθήσει όσους θέλουν να βάλουν εξωτερικές functions (της C) μέσα στον java κώδικά τους (για περισσότερες πληροφορίες κοιτάξτε στο + API documentation). +- jar ( Java Archive Tool )\ + Μεταξύ άλλων, μαζεύει τα .class αρχεία και τα συμπιέζει σε ένα αρχείο. Φτιάχνει κάτι σαν μία συμπιεσμένη βιβλιοθήκη από classes :) +- javakey ( Digital Signing Tool )\ + Θα χρησιμοποιηθεί από προγράμματα που χρειάζονται πιστοποίηση για την αυθεντικότητα ορισμένων κομματιών κώδικα. +- native2ascii ( Native-To-ASCII )\ + Mετατροπή από native encoding (unicode) σε ascii με τη χρήση του \\udddd escape convention. +- rmic ( Java RMI Stub Converter )\ + Χρησιμοποιείται στο RMI και φτιάχνει τα stubs που θα χρησιμοποιήσουν τα τερματικά σας :) προκειμένου να τρέξουν το πρόγραμμα του server. +- rmiregistry ( Java Remote Object Registry )\ + Χρησιμοποιείται στο RMI και συνθέτει ένα registry για τα objects που θα διαθέσει o server, στους clients. +- serialver ( Serial Version Command )\ + Επιστρέφει την έκδοση μιας class. + +Aς δούμε όμως ένα απλό παράδειγμα από compilation. Κατ΄αρχήν ορίζουμε το όνομα του πακέτου που θα γράψουμε και φτιάχνουμε ένα directory με το όνομα του κάτω από +το CLASSPATH: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + glynos@beast:~/java > pwd + /home/glynos/java + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έστω ότι το πακέτο μας λέγεται \"koko\". Φτιάχνουμαι το άναλογο directory: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + glynos@beast:~/java > mkdir koko + glynos@beast:~/java > cd koko + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +(Αν το πακέτο μας ονομαζόταν \"kati.akoma.pio.megalo\" θα έπρεπε να φτιάξουμε τα directories \"kati/akoma/pio/megalo\") + +Αποφασίζουμε την κύρια class του προγράμματος να την ονομάσουμε \"trella\". Συνεπώς φτιάχνουμε ένα αρχειάκι με όνομα \"trella.java\" και τυπώνουμε μέσα τα +παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + package koko; + + class trella { + public static void main(String argv[]){ + System.out.println("geia sou kosmakh!"); + }; + }; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αφού σώσουμε το αρχειάκι, του τραβάμε και ένα compile :) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + glynos@beast:~/java/koko > javac trella.java + glynos@beast:~/java/koko > ls -l + -rw-r--r-- 1 glynos users 474 Sep 5 12:17 trella.class + -rw-r--r-- 1 glynos users 142 Sep 5 12:03 trella.java + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Όπως βλέπουμε δημιουργήθηκε το \"trella.class\" που περιέχει σε byte-code τον κώδικα που θα τρέξει η virtual machine (συγκρίνετε το μέγεθος του αρχείου με το +μέγεθος του αντίστοιχου εκτελέσιμου της C). + +Τώρα έχοντας ορίσει σωστά το όνομα του πακέτου, του directory και του CLASSPATH, μπορούμε από οποιοδήποτε σημείο του δίσκου μας, να καλέσουμε το πρόγραμμα (το +syntax είναι java {package\_name}.{main\_class\_name}). + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + glynos@beast:/ > java koko.trella + geia sou kosmakh! + glynos@beast:/ > + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ψάχνοντας στο net, μπορεί κανείς να βρει πολλά βοηθητικά tools για προγραμματισμό σε Java κάτω από Linux. Από web-browsers για να τεστάρετε τα applets σας +(netscape, hot-java) μέχρι IDE, visual programming interfaces αλλά και decompilers (όπως ο jad που παίρνει τα .class files και τα μεταφράζει σε source code). +Εδώ θα βρείτε μία μικρή [λίστα](05_java-6.html#part4a). + +Επίσης, κυκλοφορούν αρκετοί JVMs και από τρίτες εταιρείες (όχι μόνο από την Sun) με πιο γνωστό τον [kaffe](http://www.transvirtual.com). + +Σε περίπτωση που είστε λάτρης του CLI και δεν βρίσκετε κανένα λόγο για να χρησιμοποιήσετε κάποιο εργαλείο για Visual Programming, θα σας πρότεινα να σηκώσετε +στο περιβάλλον των X, 2-3 rxvt\'s (για το γράψιμο debugging και testing του κώδικα) και ασφαλώς ένα web-browser για να διαβάζετε το API documentation του jdk. +Για όσους από εσάς ξεκινούν τώρα με την Java, υπάρχει και ένα online tutorial στο + + +### [5. Διαβάζοντας το φλιτζάνι (Java in the (not..so..) working world)]{#s5} + +Μέχρι στιγμής η Java προωθείται με σωστό τρόπο από τη Sun. Υποστηρίζεται από developers/πανεπιστήμια σε ολόκληρο τον κόσμο και όλα δείχνουν ότι μάλλον μέσα στα +επόμενα χρόνια θα γίνει το προγραμματιστικό standard στο χώρο του connectionist computing. + +Η \"προστασία\" από τις έννοιες των pointers, το εύκολο συντακτικό και οι έτοιμες ρουτίνες για γραφικά, επεξεργασία δεδομένων και δικτυακές εφαρμογές, καθιστούν +την Java ένα πανίσχυρο εργαλείο για το άτομο που ξεκινά σιγά σιγά τον προγραμματισμό στο Linux. + +Aλλά και οι πιο προχωρημένοι του είδους δεν θα μείνουν δυσαρεστημένοι. Οι pluggable αλγόριθμοι, η trusted host αρχιτεκτονική και το platform independent στυλ +της Java θα τους λύσουν πολλές φορές τα χέρια, καθώς δίνουν τη δυνατότητα να γράψει κανείς εύκολα και γρήγορα customisable software, για χρήση σε μεγάλες +(δικτυακές και μη) εφαρμογές. + +Δύο απ\'τα καλύτερα βιβλία που κυκλοφορούν στο εμπόριο, είναι: + +1. \"Java. How to program\", των Deitel & Deitel (Prentice-Hall, 2nd Ed.,1997) και +2. \"Java 1.1 Developer\'s Guide 2nd Edition\", tou Jaworski + +Για περισσότερες πληροφορίες ρίξτε μια ματιά στα:\ +\ +\ + + +Special thanx to George Glynos & Pete \"whatevah\" Blindell. + + +### [6. Κώδικας και άλλα]{#s6} + +[]{#part1a} Το Java Virtual Machine εκτελεί byte-code instructions. Για να δούμε πώς περίπου μοιάζουν αυτές ορίστε ένα παράδειγμα. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + package koko; + + class javap_example { + + public static void main(String argv[]){ + int x=1; + x = 4 + magiko(x); + System.out.println(x); + }; + + public static int magiko(int n){ + return n+1; + }; + + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Περνώντας το παραπάνω πρόγραμμα απο τον Java disassembler (javap -c) παιρνουμε τα παρακατω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Compiled from 1.java + synchronized class koko.javap_example extends java.lang.Object + /* ACC_SUPER bit set */ + { + public static void main(java.lang.String[]); + public static int magiko(int); + koko.javap_example(); + } + + Method void main(java.lang.String[]) + 0 iconst_1 # Κάθε γραμμή περιλαμβάνει και απο μια instruction + 1 istore_1 + 2 iconst_4 + 3 iload_1 + 4 invokestatic #6 + 7 iadd + 8 istore_1 + 9 getstatic #7 + 12 iload_1 + 13 invokevirtual #8 + 16 return + + Method int magiko(int) + 0 iload_0 + 1 iconst_1 + 2 iadd + 3 ireturn + + Method koko.javap_example() + 0 aload_0 + 1 invokespecial #5 + 4 return + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για περισσότερες πληροφορίες για την αρχιτεκτονική των Virtual Machines και τον ρόλο κάθε μιας απο τις instructions κοιτάξτε το Java Virtual Machine (των Meyer +& Downing). + +[]{#part2a} Προσέξτε πώς η class MyFrame κάνει implement τα interfaces ActionListener kai WindowListener. Σε όσες functions των interfaces δεν θέλouμε να +γράψουμε κώδικα (π.χ. windowClosed) τις αφήνουμε κενές. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + import java.awt.*; + import java.awt.event.*; + + class MyFrame extends Frame implements ActionListener,WindowListener + { + Button bOK,bCan; + public MyFrame(){super("MyFrame"); setup(); setVisible(true);} + public void setup() + { + add(bOK=new Button("OK"),"West"); + add(bCan=new Button("Cancel"),"East"); + bOK.addActionListener(this); + bCan.addActionListener(this); + addWindowListener(this); + pack(); + } + public void actionPerformed(ActionEvent e) + { + Object o = e.getSource(); + if (o==bOK) System.out.println("OK"); + else if (o==bCan) System.out.println("Cancel"); + } + public void windowOpened(WindowEvent e){} + public void windowClosing(WindowEvent e){System.exit(0);} + public void windowClosed(WindowEvent e){} + public void windowIconified(WindowEvent e){} + public void windowDeiconified(WindowEvent e){} + public void windowActivated(WindowEvent e){} + public void windowDeactivated(WindowEvent e){} + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +[]{#part2b} Ένας απλός echoserver με threads σε java. + +Δημιουργήστε ένα directory \"echo\" κάτω από το \$CLASSPATH και δώστε + + javac echoserver.java + java echo.EchoServer & + java echo.Client + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + package echo; + + import java.util.*; + import java.net.*; + import java.io.*; + + + class EchoServer + { + ServerSocket serverSocket=null; + public EchoServer() + { + try {serverSocket = new ServerSocket(5555);} + catch (IOException ex) {System.err.println(ex); System.exit(1);} + } + + public void run() + { + boolean listening = true; + while (listening) + { + Socket clientSocket = null; + try + { + clientSocket = serverSocket.accept(); + new ServerThread(clientSocket).start(); + } + catch (IOException ex){System.err.println(ex);} + } + try {serverSocket.close();} + catch (IOException ex) {System.err.println(ex);} + } + + public static void main(String[] args) {new EchoServer().run();} + } + + class ServerThread extends Thread + { + Socket socket; + BufferedReader br; + PrintWriter pw; + ServerThread(Socket soc) + { + super("ServerThread"); + try + { + socket = soc; + br = new BufferedReader(new InputStreamReader(soc.getInputStream())); + pw = new PrintWriter(soc.getOutputStream()); + } + catch(Exception ex){System.err.println(ex);} + } + public void run() + { + try + { + boolean listening = true; + while (listening) + { + String inputLine = br.readLine(); + pw.println("echo: "+inputLine); + pw.flush(); + } + pw.close(); + br.close(); + socket.close(); + } + catch (IOException e) {e.printStackTrace();} + } + } + + class Client extends Thread + { + PrintWriter os; + BufferedReader is,stdin; + Client(Socket soc) throws IOException + { + os = new PrintWriter(soc.getOutputStream()); + is = new BufferedReader(new InputStreamReader(soc.getInputStream())); + stdin = new BufferedReader(new InputStreamReader(System.in)); + } + + public void run() + { + boolean talking = true; + while (talking) + { + try + { + String s = stdin.readLine(); + os.println(s); + os.flush(); + String s1 = is.readLine(); + System.out.println(s1); + } + catch(Exception ex){System.err.println(ex);} + } + } + public static void main(String[] argv) + { + try + { + Socket soc = new Socket("localhost",5555); + new Client(soc).start(); + } + catch(Exception ex){System.err.println(ex); System.exit(1);} + } + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +[]{#part2c} + +Προσέξτε πως παρακάμπτουμε το print method της Χ στην Α + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + class X + { + public int x; + public X(int x1){x=x1;} + public void print(){System.out.println(""+x);} + } + + class A + { + X myXInstance = new X(4){public void print(){System.out.println("x="+x);}} + ... + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +[]{#part2d} Αν σας ενδιαφέρει ένα μικρό παράδειγμα του τί μπορεί να καταφέρει το RMI, στείλτε μου ένα mail στην διεύθυνση: για να σας +στείλω ενα παιχνιδάκι :) γραμμένο σε Java. + +[]{#part4a} + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Java Tools for Linux + + [extracted from www.blackdown.org] + + Java 1.1 compatible Web Browsers + * Netscape Communicator v4.06 and 4.5Beta + These versions of the netscape communicator support the JDK 1.1, + including Swing. Both are available at Netscape JDK1.1 Update + Support. + * HotJava(tm) 1.1.4 + HotJava web browser is written entirely in Java. You can get more + information about it at HotJava(tm) Browser Page. + + IDE's + * NetBeans Developer (commercial) + NetBeans Developer cross-platform, full-featured IDE that combines + support for all stages of application development including visual + GUI design, editing, compilation, and debugging - an industrial + strength yet intuitive development tool for development tool for + developers at all levels. A version for Java 2 is now available + for use so you can start using Java 2 on Linux as soon as the port + is available. In addition, NetBeans features: + + Sophisticated support for Swing and layout managers, allowing + quick and flexible design of highly functional GUIs. + + JavaBeans based architecture, making it highly extensible and + customizable, down to every item on the menus and toolbars. + + A consistent approach to all object types (configuration + objects, various data types, classes and their + fields/methods, beans, etc.), simplifying the learning curve + for NetBeans. + + Integrated, visual multi-threaded debugger with support for + breakpoints, watches, locales, and threads + + Source Editor with syntax coloring and advanced features like + dynamic word completion + A non-commercial version is available for free from NetBeans. + * Simplicity for Java (commercial / free trial version) + Simplicity for Java is the most powerful RAD tool available on the + Linux platform for creating Java applications and applets. By + using the Simplicity for Java IDE, developers build Java software + interactively through a visual model which is instantaneously + updated to reflect any changes made to the program's source code + without compiling. Its features include: + + Execution of Java source code on-the-fly + + Full support of all AWT and Swing Components and Layout + Managers + + Code Sourcerer writes Java statements for you + + Full JavaBeans support + + Powerful Programmer's Editor features: + + Method lookup and autocompletion via introspection + + Search and replace using Perl5 regular expressions + + Color syntax highlighting + + Printing in full color + + Unlimited undo/redo + * Cross-platform development and file formats + * All generated code is pure Java (no proprietary libraries). + * Uses any Java classes on your classpath including jar and zip + files + * Use JDK 1.1 or 1.2 (Java 2) + * View signature, methods, and fields of any class + * Double click compiler error messages to jump directly to code + * Year 2000 Compliant + + A free trial of the new version 1.1 is available from Data + Representations, Inc. + + CodeGuide (commercial / free non-commercial edition) + CodeGuide is the first IDE which really understands Java. It offers a + vast assortment of powerful programming aids: + * COMPLETE and INSTANTANEOUS error detection to show you errors as + you type. + * Prefix completion of field accesses and method invocations which + works just like the file-completion in the UNIX bash. + * Display of valid methods and fields in the code. + * Display of expected method parameters. + * Source browsing to navigate quickly within your code. + + CodeGuide also features other advanced IDE functionality: + * External compiler integration. + * Connection to external VMs. + * Syntax highlighting. + * JDK switching. + * Full Java 2 support. + + A non-commercial edition is available for free from Omnicore Software. + + StructureBuilder (commercial) + Tendril Software's StructureBuilder products are innovative UML + model-based Java component and application development tools. They are + the only visualization tools to be tightly integrated into an IDE. + StructureBuilder can currently be integrated with NetBeans Developer + and VisualCafe 3. + * StructureBuilder has synchronized source code and Class Diagram. + It supports Sequence Diagrams and Use Case Diagrams. + * StructureBuilder is the only tool that will allow a developer to + generate code from interaction diagrams. + * StructureBuilder is the only tool in its class that can recognize + 1:Many relationships when reverse engineering. + * You can generate Javadoc tags automatically and create HTML + documentation of your object model with diagram imagemaps. + * StructureBuilder allows you to visually define, verify and + generate supporting code for JavaBeans and Enterprise JavaBeans as + well as parse, identify and extend existing components. + * The product contains a comprehensive and easy to use Open API. + * StructureBuilder is certified 100% Pure Java and is supported on + the Linux platform, as well as Windows and SPARC. + + Download an evaluation version at Tendril's website. + + AnyJ (freeware with professional commercial version) + AnyJ is a cross-platform, full-featured IDE that supports all kinds of + of java applications: Servlets, Applets, Applications. Includes a Java + Beans conform Visual GUI-Builder (Swing), Debugger, integrated Version + Control and a very powerful and fast Editor. + * GUI Builder: Full support of AWT and Swing Components, JavaBeans + support, Unlimited undo/redo + * Source Code Engineering: True Intelli*ense-like parser backed code + completion, class browsers & source analysis tools, "Goto + definition" for quick navigation. + * Editor: Autocompletion (uses source parsing or .jar/.class file + scaning), auto import, Unlimited undo/redo, + Syntax Coloring of Java, Html, XML, etc.. Jump to source from + compiler error messages or Stack traces + * integrated graphical debugger (multithreaded, remote debugging, + breakpoints in inner & anonymous classes) + * integrated GUI-based Version Control & Diff-viewer, + * Servlet support (Simply Compile & Run), + * Customizable Shortcuts, Menu's, Plugin Architecture to extend AnyJ + in Java, Dependency Checker to support deployment, Commandline + interface to integrate external tools and scripts. + * Supports JDK 1.1 or 1.2 (Java 2) (WinNT: + MS-SDK) + + The Linux release is freeware. Unrestricted non-commercial versions + for Solaris and WinNT are available for free from NetComputing. + + BlueJ (free) + BlueJ is an integrated Java environment specifically designed for + introductory teaching. It was developed at Monash University for the + purpose of teaching in a first-year course and is suitable for + teachers and individuals who want to learn or use Java. Some features: + * fully integrated environment + * graphical class structure display + * graphical and textual editing + * built-in editor, compiler, virtual machine, debugger, class + browser, etc. + * easy-to-use interface, ideal for beginners + * interactive object creation + * interactive object calls and testing + * incremental application development + + Class and dependancy visualisation helps to understand object-oriented + structures and interaction facilities support very flexible + experimentation and immediate feedback. + + JDesignerPro from BulletProof (commercial / free 90 day trial + version) + JDesignerPro is a complete solution for building and deploying your + intranet/internet/extranet applications that require database + connectivity. The visual wizards make development and deployment easy + even for those who have never programmed before. Some of the features + include: + * True WYSIWYG development - build and deploy client-side + applications + * Enterprise Server - build and deploy server-side applications + * Database connection pooling + * Completely Object Oriented Structure - Import any JavaBean or + other component + * Solid User Access Control system to allow deployment to just the + right endusers + * Instant deployment to remote servers + * SQL Wizard for adhoc querying + * Wizards for Forms, Grids, Reports, Charts, Email, Paging and more + * Clients run on Netscape 3.0 or IE 3.0 or later on any platform + * Integrated HelpDesk system for your endusers + * Build over the web - Application Builder can be run over the web + to allow remote development + * Manage server side processes over the web and monitor active + endusers + + BulletProof also offers free email support and paid phone support. + Download a free trial from the BulletProof website. + + Elixir IDE (commercial/free Lite version) + Elixir IDE is a slick, lightweight programmer's editor for + professional Java developers. It was developed on Linux in 100% Java + sporting the Swing interface. Its features include: + * Pluggable architecture supporting multiple compilers (JDK 1.1, + 1.2, Jikes), scripting engine (Scheme), and version control system + (RCS); + * Powerful editor with syntax colouring for Java, HTML, Scheme, + unlimited undo-redo and collapsible code blocks; + * Powerful editor with syntax colouring for Java, HTML, Scheme, + unlimited undo-redo and collapsible code blocks; + * File and source code browser and management environment scalable + for large team development; + * Integrated HTML browser for viewing help files such as Java APIs; + and + * Runs on all JDK 1.1 and 1.2 platforms including Linux, with Swing + user interface. + + A free Lite version with 10 Java file limit is available. + + LOREx2 for Java (commercial) + LOREx2 for Java is a Java-centric, UML-based CASE tool designed for + Java developers. Developed in 100% Java, LOREx2 runs on all JDK 1.1 + platforms including Linux. Its features include: + * Support for UML diagrams with intuitive diagramming features like + an intelligent connector that auto-detects valid connection types + between 2 objects; + * Support for Java keywords like synchronized and @deprecated; + * Java code generation; + * Reverse engineers Java applications to UML diagrams: + + view class interaction and object structure; + + perform impact analysis for system maintenance; and + + no source code needed. + * Support for Java plug-ins to allow tool extension and + customization by Java developers (the Java code generator is + itself one such plug-in); and + * A design repository browser with an object database underneath to + ensure full design and view integrity. + + Super Mojo (commercial) + Penumbra's page describes Super Mojo as a "visual Java development + environment, Super Mojo offers three primary advantages to the + developer: Rapid Application Development through ease of use and a + fresh approach to the user interface. Total Application Control + through complete access to all underlying code. Maximum Code Reuse by + pushing the limits of object oriented programming ideals." + + WipeOut (freeware with professional commercial version) + softwarebuero is developing Java IDE, WipeOut, for Linux. It's not + just a frontend for the JDK, it also fronts for CVS, make, C++ + compiler and GDB. It's features include: general support of C++ and + Java, revision management / team work support, fast, incremental + source code parser, central text editor with syntax highlighting, all + components are fully integrated, nice, productive GUI (no Motif + required!) and automatic generation of makefiles. It includes a + Project/Revision Browser, a Class Browser, a Debugger Front End, and a + Text Editor. For more information Visit the WipeOut Page or download + it here. + + JForge (Commercial) + JForge is a Java Beans GUI builder, certified 100% Pure Java by Sun + Microsystems. It provides a WYSIWYG style interface for creating AWT + and JFC based Java Beans or GUI forms, saving and loading of Beans as + Java code or serialized objects, full support for the standard Layout + Managers, a Menu Builder, pluggable user menus and customizable + interface, and a feature-rich API allowing even further customization + or integration with third-party tools. JForge is sold by Tek Tools, + makers of the popular Kawa Java IDE, and is available for a free 30 + day evaluation period for either JDK 1.1.x or JDK 1.2 development + environments on all Java-enabled platforms. + + Source Navigator (free "lite" version) + SN v4 is a complete ide for Java, c/c++, Tcl, Assembly, Fortran, and + COBOL. It has a Symbol Browser, Class Browsers, Class Hierarchy + Browser, Include Browser, Cross Referencer, GUI Editor, Diff Tool, + Debugger Interface, SDK with APIs. Get your lite version while you buy + a copy for me at the Cygnus Source Navigator site. + + JACOB - The Java Commando Base for Emacs (free) + Jacob is a Java class browser and project manager for Emacs and + includes a powerful class wizard. Unlike traditional browsers the + windows are vertically aligned and the full vertical screen size is + still reserved for editing. Height of browser lists (packages, + classes, methods) can be dynamically changed. Now you can spend all + the screen real estate for your methods or classes, just as you like + it. Additionally Jacob generates a makefile to compile, run, and/or + archive (with zip and rcs) your application. JACOB can be found at + http://home.pages.de/~kclee/clemens/jacob/. + + Emacs JDE (free) + The JDE Hompage explain JDE as "an Emacs Lisp package that provides a + highly configurable Emacs wrapper for command-line Java development + tools, such as those provided in JavaSoft's JDK. The JDE provides menu + access to a Java compiler, debugger, and API doc. The Emacs/JDE + combination adds features typically missing from command-line tools, + including: syntax coloring, auto indentation, compile error to source + links, source-level debugging, source code browsing." + + Visaj (commercial) + Visaj is a rapid visual application builder for Java written + completely in Java. It fully supports JavaBeans and the Java 2 + Platform. Visaj enhances developers' productivity by providing a + point-and-click environment and advanced layout editors for rapidly + building pure Java applications. + + The rapidity and flexibility inherent in the builder shortens + development times significantly. Its many features, which include an + image editor, resource bundle constructor and live event wiring, means + even the most sophisticated of designs can be put together with ease. + + Its full support for Swing brings the power of Sun's rich Java + Foundation Classes to all Java developers and allows developers to + reuse third-party or in-house components with ease. + + Visaj and applications built with it are fully compliant with the Sun + Microsystems Java Developer's Kit v. 1.1 and JavaBeans, and will run + on ANY Java platform. + + Free evaluation copies are available for download from Imperial + Software Technology. + + Sun's Java WorkShop(tm) v2.0 (commercial/trial) + If you have the commercial or trial version, grab the patch for linux + at ftp://ftp.suse.com/pub/SuSE-Linux/suse_update/JWS2.0/. For the + trial version essentially do everything it asks except inserting the + CD. And also erase that huge JDK directory and replacing it with a + soft link to your jdk (but you shouldn't even have to do that). SuSE + distributes it commercially as well. + + Instant Basic(tm) for Java(tm) (commercial) + Instant Basic for Java (IB4J) is the first and only 100% Pure Java(tm) + certified fourth-generation language (4GL) tool. It offers an + Integrated Development Environment similar to Microsoft(R) Visual + Basic(R) that enables developers to create new Java-based applets and + applications. IB4J provides easy migration of existing Visual Basic + applications to the Java platform. Available in both a Standard and + Professional Edition. + + Sun's JavaStudio(tm) v1.0 (commercial/trial) + If you have the trial version you need to do a few funky things. You + will need the Solaris SPARC distribution and the jws.zip file from the + win32 distribution. Yes that means you must have access to an + installed trail version of JavaStudio on Windows. + * Replace Java-Studio1.0/JDK with a link to /usr/local/java or where + the JDK resides + * Remove the contents of Java-Studio1.0/JS/classes + * Inside Java-Studio1.0/JS/classes, unzip the jws zipfile + * cd to Java-Studio1.0/JS/sparc-S2/bin and apply js-linux.diff + * ./js + + FreeBuilder (free) + Still new but the next release looks VERY promising. Visit the + FreeBuilder Homepage. JIT's + * The TYA Just In Time Compiler + TYA is a ``100% inofficial'' JIT-compiler original designed as an + add-on to Randy Chapman's port of JDK 1.0.2 for Linux (x86). Later + I have added some changes in TYA code for working together with + the newer 1.1.x ports by Steve Byrne. TYA is current is a very + stable and usuable development stage. Expect to double the speed + of your java applications. You can download it from the TYA ftp + site . + * Metrowerks JIT for PowerPC + This is freely available from Kevin Buettner and Metrowerks, + thanks guys. Visit the Java for Linux on the PowerPC for more + information and to download it. + * CACAO JIT for Alpha + CACAO is 64 bit just-in-time (JIT) compiler for Java. It + translates Java byte code on demand into native code for the ALPHA + processor. The current version CACAO 0.1 supports the Alpha + processor under Linux and Digital Unix. It can be used with the + class library of the JDK 1.0.2. CACAO version 0.1 does not support + AWT, it only supports java/lang, java/io and java/util. + + Java Virtual Machines + * Sun's Java Virtual Machines + The most common is the Java Development Kit (JDK) ports to various + architectures is available at the Ports Page. Sun also has a Java + Runtime Environment (JRE). It includes a Java runtime interpreter + and all required libraries. The JRE does not include appletviewer + or compilers. The JRE is also available at the Ports Page. + * Japhar + Japhar is the Hungry Programer's Java VM. It has been built from + the ground up without consulting Sun's sources. Visit the Japhar + Homepage for more information. Downloads of the distribution are + available at: ftp://ftp.hungry.com/pub/hungry/japhar. + * Kaffe + The Kaffe Homepage says, "Kaffe is a virtual machine design to + execute Java bytecode. Unlike other virtual machines available, + this machine performs "just-in-time" code conversion from the + abstract code to the host machine's native code. This will + ultimately allow execution of Java code at the same speed as + standard compiled code but while maintaining the advantages and + flexibility of code independence. You can download Kaffe at + ftp://ftp.kaffe.org/pub/kaffe/ . + * TowerJ + TowerJ is a native Java deployment compiler and runtime + environment. It allows for the creation of optimized self + contained executables from Java bytecode for improved application + performance, manageability and security. + + Translators to Java + * Toba: A Java-to-C Translator + Toba translates Java class files into C source code. This allows + the construction of directly executable programs that avoid the + overhead of interpretation. Toba deals with stand-alone + applications, not applets, and currently support the 1.1 JDK. + * Harissa + Harissa is a Java environment that includes a compiler from Java + bytecode to C and a Java interpreter. While Harissa is aimed at + applications that are statically configured, such as the Javac + compiler, it is also designed to allow code to be dynamically + loaded in an already compiled application. This novel feature is + introduced by integrating our bytecode interpreter in the runtime + library. Data structures are compatible between the Java compiled + code and the interpreter, and data allocated by the interpreter + does not conflict with data allocated by the compiled code. + Harissa is written in C and provides an efficient and flexible + solution for the execution of Java applications. + + Compilers + * Jikes + Jikes is a fast, incremental Java byte-code compiler developed by + IBM Research. + + Decompilers + * JAD-- the fast JAva Decompiler + The JAD Page says, "Jad is a Java decompiler, i.e. program that + reads one or more Java class files and converts them into Java + source files which can be compiled again. Jad is 100% pure C++ + program and it generally works several times faster than + decompilers written in Java. Also Jad doesn't use the Java runtime + for its functioning, therefore no special setup (like changes to + CLASSPATH variable) is required." + + Other + * JStyle (free) + JStyle is a family of Java source-code styling filters, written + purely in Java. It includes JSBeautifier - a reindentation filter, + and JSFormatter - a full reformation filter. + * Instant Installer(tm) + 100% Pure Java(tm) certified Installer for developers who want to + produce a universal installer that will run on all the Java + platforms. Available from Halcyon Software. + * Instant Converter(tm) + 100% Pure Java(tm) converter. Immediate VB to Java Source Code + conversion. Available from Halcyon Software. + * YACC and Lex for Java + Modern Compiler Implementation in Java offers JLex (a lexical + analyzer generator) and CUP (a parser generator) written in Java. + * Free Tools for Java + The Free Tools for Java Page contains an Java Obfuscator, Java + based Installer, Java Assembler and more. + * Packages and Non-development Tools + Some leads are under Other Products. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + diff --git a/content/articles/18/01_editorial.md b/content/articles/18/01_editorial.md new file mode 100644 index 0000000..fbd7689 --- /dev/null +++ b/content/articles/18/01_editorial.md @@ -0,0 +1,79 @@ ++++ +title = 'Editorial' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 18'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο αλλαγμένο **Magaz**\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το σκεφτόμασταν πολύ καιρό, αλλά δεν είχαμε χρόνο να διαθέσουμε\.... Θέλαμε κάτι να αλλάξουμε, να δείξουμε διαφορετικοί, και να είμαστε διαφορετικοί (μόνο να +δείχνεις δεν έχει νόημα). Ευτυχώς ξεφορτωθήκαμε τα (τις περισσότερες φορές ατσούμπαλα) εικονάκια που ήμουν υποχρεωμένος να διαλέγω για να ταιριάξουν με τα +άρθρα.\ +Ας τα πιάσουμε όμως με τη σειρά: + +1. **Τι είχαμε μέχρι τώρα\...** + + Μέχρι το προηγούμενο τεύχος, είχαμε τα άρθρα (σε μορφή sgml) και δημιουργούσαμε ένα αρχείο, διαφορετικό για κάθε τεύχος, τo nif-file το οποίο περιείχε links + για κάθε άρθρο του τεύχους, με τα αντίστοιχα εικονάκια (η αριστερή κίτρινη μπάρα στην παλιά μορφή). Το sgml αρχείο μετατρεπόταν σε html με τα sgmltools + (τροποποιημένη έκδοση από τον [Παναγιώτη Βρυώνη](mailto:vrypan@hellug.gr), για τη μορφή του Magaz) και \"ενωνόταν\" με το nif-file. Παράλληλα, φτιάχναμε και + το index.html για κάθε τεύχος (πάλι με links και εικονάκια). Αν αυτή η διαδικασία σας φαίνεται εύκολη, να σας πληροφορήσω ότι γελιόσαστε :-) Τέλος, + φτιαχνόταν και η αρχική σελίδα προσθέτοντας απλά ένα ακόμα τεύχος στο Javascript και τα links. + +2. **Τι αλλάξαμε\...** + - *Νέα μορφή σελίδων*\ + Αυτοματοποίησαμε με κάποιο script την δημιουργία του nif-file, και με κάποιο άλλο την δημιουργία του index.html για κάθε τεύχος. Πλέον, τα sgml μόνο + αρκούν για να δημιουργηθεί το τεύχος. + - *Νέα εικονάκια*\ + Πλέον έχουμε αυτά τα ωραία εικονάκια που βλέπετε στην κορυφή (αλλά και τα νέα βελάκια καθοδήγησης) τα οποία εκτός από καλαίσθητα, είναι πιστεύουμε και + πολύ κατατοπιστικά σχετικά με τις \"εργασίες\" που επιτελούν. + - *Πληροφοριακά στοιχεία* + - Με τα νέα scripts, δημιουργείται επίσης αυτόματα, ένα αρχείο - εικόνα του περιοδικού, με αναφορά σε όλα τα τεύχη που έχουν \"εκδοθεί\" και links για + το κάθε άρθρο. + - Η λίστα Ελλήνων χρηστών Linux, επίσης θα δημιουργείται πλέον σχεδόν αυτόματα, χάρη σε ένα ακόμα script (η δημιουργία της ήταν ήδη + ημι-αυτοματοποιημένη). Η πλήρης αυτοματοποίησή της αποκλείεται, γιατί αρκετοί ακόμα γράφουν τα στοιχεία τους με λατινικούς χαρακτήρες. + - Προστέθηκε σελίδα για δημοσκοπήσεις (μπορείτε να δείτε αμέσως και τα αποτελέσματα φυσικά) + - Εφόσον δεν έχουμε χρόνο για δημιουργία FAQ, δώσαμε πλέον τη δυνατότητα αναζήτησης στα άρθρα του περιοδικού, και στην (πάλαι ποτέ πασίγνωστη) στήλη + της αλληλογραφίας. + - Έχει επίσης προστεθεί σελίδα με παρουσίαση των συντακτών - αρθρογράφων του Magaz. Οποιοσδήποτε έχει γράψει άρθρο για το Μagaz θα εμφανίζεται (αν + θέλει) εκεί. + - *Αλλαγές δομής\...* + - Εικονάκια\ + Πλέον δεν βρίσκονται όλα τα εικονάκια σε ένα directory, αλλά το κάθε τεύχος έχει το αντίστοιχο δικό του directory. Έτσι το download κάθε τεύχους + αποκλείεται να είναι λάθος (σε αυτό βοηθάει και άλλο ένα script αυτόματης δημιουργίας του αρχείου που προσφέρεται για download). Τα gif images + αποσύρθηκαν, και πλέον χρησιμοποιούμε παντού μόνο png. Τα μόνα gif που υπάρχουν τώρα πια είναι δύο animated. Και αυτό, επειδή οι σημερινοί browsers + δεν υποστηρίζουν animated png. Μόλις βγουν σωστές εκδόσεις, θα τα γυρίσουμε και αυτά. + - Links\ + Όλα εκείνα τα εικονάκια που υπήρχαν στην παλιά πρώτη σελίδα, έχουν τώρα το δικό τους σπίτι. Μία ξεχωριστή σελίδα με επιλεγμένα links είναι άμεσα + διαθέσιμη. + +3. **Τι κερδίζετε\...** + + Κερδίζετε ένα πιο όμορφο (πιστεύουμε) περιοδικό, πιο ευανάγνωστο. Κερδίζετε τη δυνατότητα αναζήτησης. Κερδίζετε μία γρήγορη ματιά σε όλη την ιστορία (και τα + άρθρα) του περιοδικού. Κερδίζετε το ότι μπορείτε πλέον να δείτε αυτούς που σας \"μιλάνε\". Κερδίζετε διασημότητα (αν γράψετε άρθρο) :-) Κερδίζετε πιο εύκολη + περιήγηση στο περιοδικό. Κερδίζετε ενημέρωση για συγκεκριμένα θέματα (δημοσκοπήσεις). Ε\... δεν φτάνουν; + +4. **Τι κερδίζουμε\...** + + Κεδίζουμε χρόνο (με τις πολλές αυτοματοποιήσεις), κερδίζουμε σε υστεροφημία, κερδίζουμε σε ικανοποίηση ότι παράγουμε κάτι όμορφο (εκτός από χρήσιμο, όπως + έχει ήδη αποδειχτεί). Κερδίζουμε γνώσεις (με όλες αυτές τις εργασίες που έπρεπε να γίνουν). + +5. **Ποιος έκανε τι\...** + - O [Παναγιώτης Βρυώνης](mailto:vrypan@hellug.gr) ανέλαβε το βάρος του συντονισμού και της περισσότερης δουλειάς για τη νέα εμφάνιση. Δικά του είναι τα + scripts που δημιουργούν το nif-file, το index.html, το contents-short.html και τέλος παράγουν τα html αρχεία του κάθε τεύχους (με τα ήδη δημιουργημένα + nif-files). Δική του ήταν η σύλληψη της νέας μορφής, και η ιδέα της σελίδας πληροφοριών για τους αρθρογράφους (info.html). + - Η [Άννα Βρυώνη](mailto:vryanna@hotmail.com), γραφίστρια, μας έφτιαξε τα πολύ όμορφα εικονάκια που βλέπετε. Η κοπέλλα έφτιαξε πάρα πολλά εικονάκια μέχρι + να καταλήξουμε στο ποια θέλουμε, και γι\' αυτό την ευχαριστούμε. + - Ο [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) έγραψε τα scripts για το σύστημα δημοσκοπήσεων (ψηφοφορίας και δημιουργίας αποτελεσμάτων) και τα + αντίστοιχα για την καταχώρηση χρηστών στην περιβόητη λίστα. Έφτιαξε το σύστημα αναζήτησης για το Μagaz και μετέτρεψε κατάλληλα τον κώδικα ούτως ώστε να + βλέπουμε ελληνικά (τόσο στα πεδία επιλογών στις αναζητήσεις, όσο και στα αποτελέσματα των δημοσκοπήσεων). + +Ελπίζουμε με όλα αυτά να έχουμε ικανοποιήσει και τον πιο απαιτητικό αναγνώστη του περιοδικού από άποψης εμφάνισης και features. Από άποψης ύλης ούτως ή άλλως +δεν είχαμε πρόβλημα :-) + +Σας ευχόμαστε καλή ανάγνωση\.... diff --git a/content/articles/18/02_infohellug99.md b/content/articles/18/02_infohellug99.md new file mode 100644 index 0000000..6363eac --- /dev/null +++ b/content/articles/18/02_infohellug99.md @@ -0,0 +1,66 @@ ++++ +title = 'Ο Hellug στην Infosystem 99' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'HEL.L.U.G.(mailto:info@hellug.gr)' +issue = ['Magaz 18'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ο Hellug στην Infosystem 99* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**[]{#greek} Ελληνικά** + +![](/18/img/logo.png) + +(press [here](#english) to see the english text) + +Ο Hellug, ο Ελληνικός Σύλλογος Φίλων του Linux, πρόκειται να συμμετάσχει στην έκθεση Infosystem 99, στη Θεσσαλονίκη, από την Πέμπτη, 7 μέχρι την Κυριακή, 10  +Οκτωβρίου 1999. Η Infosystem είναι η πιο σημαντική έκθεση πληροφορικής στην Ελλάδα και διοργανώνεται με επιτυχία τα τελευταία 13 χρόνια στα πλαίσια της Διεθνούς +Έκθεσης Θεσσαλονίκης. + +Στο περίπτερο του Hellug θα + +- παρουσιαστεί το ταχύτατα αναπτυσσόμενο λειτουργικό σύστημα που ξεκίνησε από μια μικρή ομάδα προγραμματιστών για να το αγκαλιάσουν οι χρήστες υπολογιστών από + όλο τον κόσμο +- υπάρχουν μηχανήματα στα οποία θα τρέχουν εφαρμογές για διακομιστές, σταθμούς εργασίας, και προσωπικούς υπολογιστές +- εκτεθούν η σταθερότητα και η ευελιξία του Linux σε ανθρώπους που δεν έχουν μεγάλη εμπειρία με αυτό +- απαντηθούν απορίες νέων χρηστών για την εγκατάσταση και τη χρήση του Linux από μέλη του Hellug +- παρουσιαστούν οι δυνατότητες του Linux σε διάφορα περιβάλλοντα, από το σχολείο μέχρι την επιχείρηση +- συμμετάσχουν εταιρίες που προωθούν προϊόντα σχετικά με το Linux στην Ελλάδα +- διανεμηθούν CDs με διανομές του λειτουργικού (Red Hat, Suse κλπ), αφίσσες, φυλάδια, και γενικώς υλικό που βοηθά στην εξάπλωση του Linux +- δοθεί ευκαιρία σε παλιούς και νέους χρήστες του Linux να έρθουν σε προσωπική επαφή και να ανταλλάξουν απόψεις για το αγαπημένο τους λειτουργικό + +Καλούμε όλους τους φίλους του Linux αλλά και όλους όσοι ασχολούνται με την πληροφορική να επισκεφτούν το Περίπτερο 15, Stand 12, (καθημερινά 12.00 - 21.00, +Σαββατοκύριακο 11.00 - 22.00) για να γνωριστούμε, να συζητήσουμε, να περάσουμε καλά, για να δοθεί νέα ώθηση στη διάδοση του ελεύθερου λογισμικού στην Ελλάδα. + +Για περισσότερες πληροφορίες, επισκεφτείτε τη σελίδα του Hellug, . + +**[]{#english} English** + +![](/18/img/logo.png) + +(πατήστε [εδώ](#greek) για να δείτε το ελληνικό κείμενο) + +Hellug, the Hellenic Linux Users Group, will be one of the exhibitors in the Infosystem 99 expo, in the city of Thessaloniki, Greece, from Thursday 7 to Monday +10 October 1999. Infosystem is the most important information technology show in Greece and has been organised with success for the past 13 years in the +premises of the International Trade Fair of Thessaloniki. + +In Hellug\'s stand, we will + +- present the rapidly growing operating system that began as a project of a few programmers and was adopted by millions of computer users around the world +- setup computers running applications for servers, workstations and PCs +- explain the robustness and flexibility of Linux to people who are not familiar with it +- answer new users\' questions on installing and using Linux +- elaborate on the potential use of Linux in different contexts, ranging from the academic to the corporate environment +- introduce companies that promote Linux oriented software in Greece +- give away CDs with distributions of the OS (Red Hat, Suse, etc.), posters, leaflets, and, generally, material that will help make Linux more popular +- give the chance to old and new users to meet each other and exchange views on their favorite OS + +We invite all Linux fans, as well as everyone who is interested in information technology, to visit Pavilion 15, Stand 12 (12.00 - 21.00 weekdays, 11.00 - 22.00 +during the weekend) so that we know each other better, discuss, have fun, and give fresh impetus to the dissemination of the Free Software philosophy in Greece. + +For more information, visit Hellug\'s site diff --git a/content/articles/18/03_sysrq.md b/content/articles/18/03_sysrq.md new file mode 100644 index 0000000..63ea027 --- /dev/null +++ b/content/articles/18/03_sysrq.md @@ -0,0 +1,86 @@ ++++ +title = 'Τεκμηρίωση για το μαγικό πλήκτρο SysRq, v 1.2' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'Myrdaal(mailto:jackalz@dyn.ml.org) Μετάφραση: Θέμης Παπασσιλέκας(mailto:panzerjager@netscape.net)' +issue = ['Magaz 18'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το κείμενο αυτό το έγραψε ο Μyrdaal, και αποτελεί την τεκμηρίωση του Μagic SysRQ key που έρχεται ως επιλογή στους πυρήνες της σειράς 2.2.χ* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +1. **Τί είναι το μαγικό πλήκτρο SysRQ;** + + Είναι ένας \'μαγικός\' συνδυασμός πλήκτρων στον οποίο ο πυρήνας θα ανταποκριθεί, ανεξαρτήτως του τί άλλο κάνει εκείνη τη στιγμή, εκτός κι αν είναι τελείως + κολλημένος. + +2. **Πώς ενεργοποιώ το μαγικό πλήκτρο SysRQ;** + + Χρειάζεται να απαντήσετε ΝΑΙ στο \"Magic SysRQ key (CONFIG\_MAGIC\_SYSRQ)\" όταν καθορίζετε τις ρυθμίσεις του πυρήνα. Αυτή η επιλογή υποστηρίζεται μόνο από + τον πυρήνα 2.1.x και πάνω. + +3. **Πώς χρησιμοποιώ το μαγικό πλήκτρο SysRQ;** + - Στους x86: + + Πατάτε τον συνδυασμό \'ALT-SysRQ-\<πλήκτρο εντολής\>\'.Σημείωση: Μερικά (παλαιότερα;) πληκτρολόγια μπορεί να μην έχουν πλήκτρο SysRQ. Το πλήκτρο SysRQ + είναι επίσης γνωστό ώς το πλήκτρο Print Screen. + + - Σε SPARC: + + Πατάτε \'ALT-STOP-\<πλήκτρο εντολής\>\', πιστεύω, + + - Σε άλλους: + + Εάν γνωρίζετε συνδυασμούς για άλλες αρχιτεκτονικές, παρακαλώ να μου τις γνωστοποιήσετε προκειμένου να τους προσθέσω εδώ. + +4. **Τί είναι τα πλήκτρα \'εντολών\';** + - \'r\': Κλείνει την \'καθαρή\' κατάσταση (raw mode) του πληκτρολογίου και το θέτει σε XLATE. + - \'k\': Κλείνει όλα τα προγράμματα στην τρέχουσα κονσόλα. + - \'b\': Επανεκκινεί αμέσως το σύστημα χωρίς να συγχρονίζει (sync) ή να απενεργοποιεί (unmount) τους δίσκους. + - \'ο\': Σβήνει το σύστημα μέσω του APM (εάν υποστηρίζεται κι έχει ρυθμιστεί). + - \'s\': Προσπαθεί να συχρονίσει όλα τα ενεργοποιημένα συστήματα αρχείων. + - \'u\': Προσπαθεί να επανενεργοποιήσει (remount) όλα τα ενεργοποιημένα συστήματα αρχείων σε μόνο-ανάγνωση (ro). + - \'p\': Τυπώνει τους τρέχοντες καταχωρητές και δείκτες (flags) στην κονσόλα. + - \'t\': Τυπώνει μία λίστα τρεχουσών προγραμμάτων και τις πληροφορίες τους στην κονσόλα. + - \'m\': Τυπώνει την τρέχουσα μνήμη στην κονσόλα. + - \'0\'-\'9\': Ρυθμίζει το επίπεδο ενημέρωσης του αρχείου λειτουργίας (log), ελέγχοντας ποια μηνύματα του πυρήνα θα τυπώνονται στην οθόνη (το \'0\', για + παράδειγμα θα επέτρεπε να τυπωθούν μόνο επείγοντα μηνύματα, όπως τα PANICs και τα OOPSes). + - \'e\': Στέλνει ένα SIGTERM σε όλες τις διεργασίες (processes), εκτός της init. + - \'i\': Στέλνει ένα SIGKILL σε όλες τις διεργασίες, εκτός της init. + - \'l\': Στέλνει ένα SIGKILL σε όλες τις διεργασίες, ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΗΣ της init (το σύστημα δεν θα είναι πια λειτουργικό μετά από αυτό). + +5. **Εντάξει, και σε τί μπορώ να τους χρησιμοποιήσω;** + + Βασικά, το un\'R\'aw είναι πολύ χρήσιμο όταν ο X Server ή ένα πρόγραμμα svgalib κρασάρει.\ + To sa\'K\' (system attention key - πλήκτρο προσοχής συστήματος) είναι χρήσιμο όταν θέλετε να κλείσετε ένα πρόγραμμα που δεν επιτρέπει αλλαγή κονσόλας (για + παράδειγμα, τα X ή ένα πρόγραμμα svgalib).\ + Tο re\'B\'oot είναι χρήσιμο όταν δεν γίνεται να κλείσει το σύστημα. Αλλά θα πρέπει να κάνετε επίσης \'S\'ync και \'U\'mount πρώτα.\ + Το \'S\'ync είναι σπουδαίο όταν το σύστημα έχει κολλήσει, επιτρέπει να συγχρονίσετε τους δίσκους και σίγουρα μειώνει την πιθανότητα απώλειας δεδομένων και + του fsck. Σημειώστε ότι ο συγχρονισμός δεν έχει γίνει μέχρι να δείτε το μήνυμα \'ΟΚ\' και \'DONE\' στην οθόνη σας (εάν ο πυρήνας πραγματικά αγκομαχάει, + μπορεί να μην τα δείτε ούτε και αυτά\...).\ + Το \'U\'mount είναι βασικά χρήσιμο όπως και το \'S\'ync. Γενικά κάνω \'S\'ync\', \'U\'mount και μετά \'R\'eboot όταν το σύστημά μου κολλάει. Με έχει σώσει + από πολλά fsck. Και πάλι, το unmount (remount read-only) δεν έχει γίνει μέχρι να δείτε τα μηνύματα \'ΟΚ\" και \'Done\' στην οθόνη σας.\ + Το επίπεδο καταγραφής (\'0\'-\'9\') είναι χρήσιμο όταν η κονσόλα σας γεμίζει με μηνύματα του πυρήνα που δεν θέλετε να δείτε. Το \'0\' θα τα περιορίσει στα + πλέον επείγοντα (θα συνεχίσουν να καταγράφονται, πάντως, εάν οι syslogd/klogd είναι ενεργοί).\ + Τα t\'E\'rm και k\'I\'ll είναι χρήσιμα όταν έχετε κάποια διεργασία που δεν ανταποκρίνεται και δεν μπορείτε να κλείσετε με άλλον τρόπο, ιδίως όταν παράγει + (spawn) άλλες διεργασίες. + +6. **Μερικές φορές το SysRQ μοιάζει να κολλάει κατά τη χρήση, τί να κάνω;** + + Αυτό συμβαίνει και σε μένα. Έχω βρεί ότι πατώντας shift, alt και ctrl και στις δύο πλευρές του πληκτρολογίου, και μετά πατώντας έναν αυθαίρετο συνδυασμό + SysRQ (πχ, alt-SysRQ-z) μπορεί να διορθώσει το πρόβλημα. Αλλάζοντας σε άλλη κονσόλα (Alt+Fn) και μετά πάλι πίσω επίσης βοηθάει. + +7. **Πατάω SysRQ, αλλά τίποτα δεν συμβαίνει, τί πάει στραβά;** + + Υπάρχουν μερικά πληκτρολόγια που δεν υποστηρίζουν το \'SysRQ\', μπορείτε να δοκιμάσετε να τρέξετε \'showkey -s\' και να πατήσετε το SysRQ για να δείτε εάν + επιστρέφει κάποιον κώδικα 0x54. Εάν δεν το κάνει, μπορείτε να ορίσετε το SysRQ σε κάποιο άλλο πλήκτρο. Βρείτε τους κώδικες με το showkey και αλλάξτε τον + ορισμό \'\#define SYSRQ\_KEY 0x54\' στο \[/usr/src/linux/\]include/asm/keyboard.h στον κώδικα του πλήκτρου που θέλετε να χρησιμοποιείστε, μετά ξαναχτίστε + τον πυρήνα. Παρεπιπτόντως, για να βγείτε από το showkey, μην πατήσετε τίποτα για δέκα δευτερόλεπτα. + +8. **Έχω κι άλλες ερωτήσεις, ποιον να ρωτήσω;** + + Μπορείτε να μου στείλετε email στο [mailto:mydraal\@deathsdoor.com](mailto:mydraal@deathsdoor.com), και θα απαντήσω το συντομότερο δυνατόν. Εάν αυτή η + διεύθυνση δεν λειτουργεί, δοκιμάστε στην [mailto:mydraal\@jackalz.dyn.ml.org](mailto:mydraal@jackalz.dyn.ml.org). diff --git a/content/articles/18/04_wmaker.md b/content/articles/18/04_wmaker.md new file mode 100644 index 0000000..d3da90f --- /dev/null +++ b/content/articles/18/04_wmaker.md @@ -0,0 +1,250 @@ ++++ +title = 'Παρουσίαση του Window Maker' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 18'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό έχει σκοπό να παρουσιάσει τον πασίγνωστο window manager, τον Window Maker. Επίσης, θα γνωρίσετε τα αρχεία ρυθμίσεών του, μερικά προγράμματα για +να τον φέρετε στα μέτρα σας, πώς να τον εξελληνίσετε, πώς να τον χρησιμοποιήσετε με το KDE και το GNOME και άλλα πολλά.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +---------------------------------------- + +- [1.1 Εγκατάσταση](#ss1.1) +- [1.2 Απαιτήσεις](#ss1.2) + +**2. Τα χαρακτηριστικά του Wmaker** +------------------------------------------------------------ + +**3. Προγράμματα για ρυθμίσεις** +--------------------------------------------------------- + +- [3.1 Applications Menu](#ss3.1) +- [3.2 Η εντολή wmconfig](#ss3.2) + +**4. Αρχεία ρυθμίσεων** +------------------------------------------------ + +**5. Themes** +-------------------------------------- + +**6. Ελληνικά** +---------------------------------------- + +- [6.1 Ελληνικό μενού](#ss6.1) + +**7. WMaker με KDE ή GNOME** +----------------------------------------------------- + +**8. Documentation** +--------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Ο Window Maker έχει φτάσει στην έκδοση 0.60. Είναι ένας window manager που προσφέρει πολλές δυνατότητες στον χρήστη, ενώ είναι αρκετά παραμετροποιήσημος. +Βέβαια, δεν παραμετροποιείται όσο ο enlightment, αλλά και δεν βαραίνει το σύστημά σας όσο ο enlightment. Είναι αρκετά ελαφρύς, σαν να τρέχετε τον FVWM, για +παράδειγμα. + +Κατά την προσωπική και ταπεινή μου γνώμη, αν θέλαμε να κατατάξουμε διάφορους window managers σε σχέση με το βαθμό παραμετροποίησης που μπορούν να προσφέρουν, +αλλά και με τις δυνατότητές τους, θα έβαζα στην κορυφή τα KDE και GNOME και μετά τον Window Maker να ακολουθεί τρίτος. + +### [1.1 Εγκατάσταση]{#ss1.1} + +Ο τόπος από τον οποίο μπορείτε να κατεβάσετε τον Window Maker είναι . Εκεί θα τον βρείτε σε source μορφή (tar.gz ή bz2) και θα +πρέπει να τον κάνετε compile. Αν όμως τον προτιμάτε σε RPM μορφή θα σας δώσω την εξής διεύθυνση: . Στην ίδια +διεύθυνση θα βρείτε και το χρήσιμο πρόγραμμα wmakerconf, το οποίο είναι ένα ξεχωριστό πρόγραμμα για τις ρυθμίσεις του Window Maker. Σε source μορφή μπορείτε να +το βρείτε στη διεύθυνση: . + +Για να τρέξετε τον Window Maker αρκεί να γράψετε wmaker μέσα στο αρχείο .xinitrc που βρίσκεται στο home directory σας. Ένα από τα ωραία χαρακτηριστικά του +Window Maker είναι ότι μπορεί να χρησιμοποιηθεί ως window manager στα KDE και GNOME. Θα σας εξηγήσω πως γίνεται αυτό αργότερα. + +### [1.2 Απαιτήσεις]{#ss1.2} + +Για να εγκατασταθεί o Window Maker πρέπει να εγκαταστήσετε την βιβλιοθήκη **libPropList**. Αυτήν σε source μορφή θα την βρείτε στην διεύθυνση +. Αντίθετα, την RPM έκδοσή της θα την βρείτε στο site με τα RPM που σας ανέφερα παραπάνω. + + +### [2. Τα χαρακτηριστικά του Wmaker]{#s2} + +Ίσως αναρωτιέστε: \"Μα τί είναι αυτό που κάνει τον Window Maker να ξεχωρίζει από τους υπόλοιπους;\" Δεν θα σας δώσω μία έτοιμη απάντηση εδώ, αλλά θα σας +περιγράψω το περιβάλλον του Window Maker, ώστε να ανακαλύψετε μόνοι σας τις διαφορές του από τους υπόλοιπους. + +Το πρώτο πράγμα που θα παρατηρήσετε όταν τρέξετε τον Window Maker είναι δύο εικονίδια. Το ένα που βρίσκεται πάνω αριστερά παριστάνει έναν συνδετήρα, κάπως έτσι: + +![](/18/img/wmclip.jpg) + +Η χρησιμότητά του είναι πολλαπλή: Με τα δύο βελάκια που έχει πάνω του αλλάζετε Workspace, δηλαδή επιφάνεια εργασίας. Στην κάθε επιφάνεια εργασίας μπορείτε να +έχετε ανοιχτά διαφορετικά προγράμματα. Αν τώρα κάνετε δεξί κλίκ πάνω στον συνδετήρα θα σας εμφανιστεί ένα menu με επιλογές. Μπορείτε από εκεί να δηλώσετε άλλο +όνομα για το Workspace σας και να κάνετε attract τα εικονίδια. Εξηγώ λίγο την τελευταία λειτουργία που ανέφερα: όταν κάνετε minimize ένα πρόγραμμα, τότε +εμφανίζεται ένα εικονίδιο στο κάτω μέρος της οθόνης σας. Μπορείτε να \"κολλήσετε\" το εικονίδιο αυτό δίπλα στον συνδετήρα, καθώς και ένα πλήθος από εικονίδια, +και μετά να τα μεταφέρετε όλα μαζί σε όποιο μέρος τη οθόνης σας θέλετε, σέρνοντας μόνο τον συνδετήρα. Από το menu του συνδετήρα μπορείτε να μεταφέρετε ένα +πρόγραμμα σε ένα άλλο Workspace. + +Πάνω δεξιά στην οθόνη σας υπάρχει ένα άλλο εικονίδιο που από κάτω του βρίσκονται κολλημένα εικονίδια άλλων προγραμμάτων, κάπως έτσι: + +![](/18/img/wmdock.jpg) + +Αυτό ονομάζεται DockPanel και βοηθάει στο να ανοίγετε εύκολα τα αγαπημένα σας προγράμματα. Είναι παρόμοιο με το Wharf του Afterstep. Αν σε εσάς δεν έχει τα +εικονίδια των άλλων προγραμμάτων, μην ανησυχείτε γιατί μπορείτε να προσθέσετε εκεί αυτά που εσείς θέλετε. Η διαδικασία που πρέπει να ακολουθήσετε για να +προσθέσετε εικονίδια είναι απλή, αλλά μπορεί να καταλήξει να γίνει επίπονη. Ας εξηγηθώ: Όταν ανοίγετε ένα πρόγραμμα με οποιονδήποτε τρόπο, (είτε από xterm είτε +από όπου αλλού θέλετε) εμφανίζεται ένα εικονίδιο κάτω αριστερά στην οθόνη σας. Αν σύρετε αυτό το εικονίδιο κάτω από τη στοίβα στο DockPanel, τότε αυτό θα μείνει +εκεί. (Προσοχή: για να μείνει εκεί θα πρέπει να σας βγάλει ένα άσπρο τετράγωνο στη θέση που πάτε να βάλετε το εικονίδιο. Γενικά θα πρέπει να τοποθετήσετε το +εικονίδιο ακριβώς κάτω από το τελευταίο εικονίδιο στο DockPanel). Μπορεί όμως να μή βγεί εικονίδιο όταν ανοίξετε το πρόγραμμα. Τί κάνετε τότε; Πρέπει να είστε +και λίγο τυχεροί: Για παράδειγμα, όταν τρέξετε από xterm το xisp δεν θα σας βγεί το εικονίδιο που βλέπετε στην φωτογραφία (πάνω). Πρέπει λοιπόν να προσπαθήσετε +να το βγάλετε παίζοντας με το πρόγραμμα. Για το xisp, εάν ανοίξετε κάποιο άλλο παράθυρό του, π.χ. τα διάφορα options, θα σας εμφανιστεί ως δια μαγείας το +εικονίδιο με την πριζούλα. Αμέσως τότε (πρίν σας φύγει :-)) το βάζετε στο DockPanel. Επίσης, καμμιά φορά, όταν δεν μετακινείται ένα εικονίδιο (π.χ. αν γραψετε +asclock στο xterm, δεν θα μπορείτε μετά να μετακινείσετε το ρολόι και να το βάλετε στο DockPanel) κρατήστε πατημένο το Alt και μετά σύρετέ το. + +Αν κάνετε δεξί κλίκ πάνω στα εικονίδια του DockPanel μπορείτε να πάτε μέσω ενός menu στα settings του συγκεκριμένου εικονιδίου. Εκεί μπορείτε να αλλάξετε +εικονίδιο, αλλά και την εντολή εκτέλεσης του προγράμματος. Αυτό είναι χρήσιμο για τα προγράμματα που τα τρέχετε με extra επιλογές. + +Θα παρατηρήσατε στην παραπάνω φωτογραφία ότι τα εικονίδια έχουν 3 τελείες. Όταν το πρόγραμμα είναι κλειστό (δεν τρέχει) τότε εκεί εμφανίζονται 3 τελείες. Όταν +το ανοίξετε το πρόγραμμα, εξαφανίζονται και οι 3. Όταν το κάνετε hide (με Alt+h) τότε εμφανίζεται μία τελεία για να σας πεί ότι το πρόγραμμα τρέχει και είναι +κρυμμένο στο εικονίδιό του. Αναρωτιέστε τί είναι το hide και πώς προέκυψε; Διαβάστε παρακάτω. + +Κάθε πρόγραμμα έχει μία titlebar από πάνω του που είναι κάπως έτσι: + +![](/18/img/titlebar.jpg) + +Το αριστερό κουμπί κάνει minimize και το δεξί close. Τα φαινόμενα απατούν. Η titlebar δεν κάνει μόνο αυτά τα λίγα. Κάντε δεξί κλίκ πάνω της για να σας +εμφανιστεί ένα menu (εκεί βρίσκεται και η εντολή hide, η οποία κρύβει το πρόγραμμα κάτω από το εικονίδιό του). Το menu περιέχει και πολλές άλλες επιλογές. + +Κανοντας δεξί κλίκ στην επιφάνεια εργασίας σας, βγαίνει ένα menu που μοιάζει πιθανότατα με αυτό: + +![](/18/img/applications.jpg) + +Από εδώ μπορείτε να τρέξετε διάφορα προγράμματα (ιδιαίτερα το υπομενού Programs περιέχει τα προγράμματα που είναι εγκατεστημένα στο σύστημά σας). Πώς !;! Δεν +έχει το δικό σας menu μερικά από αυτά που έχει η φωτογραφία, όπως το Run ή το Programs ; Μην ταράζεστε άδικα. Συνεχίστε να διαβάζετε. + + +### [3. Προγράμματα για ρυθμίσεις]{#s3} + +Αν δεν προτιμάτε να ρυθμίζετε τον Window Maker manually πειράζοντας αρχεία και μπλέκοντας με τη γραμμή εντολών και με editors, vi και δε συμμαζεύεται (real men +do it with keyboard), τότε μπορείτε να χρησιμοποιήσετε δύο προγράμματα που τρέχουν σε γραφικό περιβάλλον και τα οποία θα σας παρουσιάσω. Αν τώρα ενοχληθήκατε +από το real men do it with keyboard, έχω φροντίσει και για αυτό στο επόμενο section. Για την ώρα ας δούμε τα προγράμματα. + +Το ένα πρόγραμμα έρχεται μαζί με τον Window Maker και λέγεται WPrefs. Μοιάζει κάπως έτσι: + +![](/18/img/wprefs.jpg) + +Βέβαια θα αναρωτιέστε \"μα που στο καλό είναι αυτό το πρόγραμμα ;\" με το δίκιο σας γιατί εκεί που είναι\... Το full path του είναι: +**/usr/X11R6/lib/GNUstep/Apps/Wprefs.app/** . Μέσα σε αυτόν τον κατάλογο θα βρείτε το εκτελέσιμο WPrefs. Σας συμβουλεύω να το τρέξετε και μετά να το +τοποθετήσετε στο DockPanel. Ιδιαίτερη προσοχή δώστε στο **Menu Definition** του WPrefs (σας υποσχέθηκα το Run και τα Programs \--\> παρακάτω). + +Το άλλο πρόγραμμα είναι το wmakerconf το οποίο είναι ξεχωριστό, δεν έρχεται μαζί με τον WindowMaker. Και αυτό παρέχει ρυθμίσεις για το Menu. Και τα δύο αυτά +προγράμματα περιέχουν όλα τα κουμπιά για να παραμετροποιήσετε τον Window Maker αρκετά και \"σε βάθος\", ενώ η χρήση τους είναι αρκετά απλή. + +### [3.1 Applications Menu]{#ss3.1} + +Ας δούμε τα βήματα που χρειάζεστε για να προσθέσετε το Run στο menu. Κατ\' αρχάς, το Run χρησιμεύει στο να τρέχετε κάποια εντολή. Για παράδειγμα, αν θέλετε να +τρέξετε ένα πρόγραμμα μπορείτε αντί να ανοίξετε το xterm και να πληκτρολογήσετε την εντολή, να το κάνετε από το Run. To Run σε μένα είναι κάπως έτσι: + +![](/18/img/run.jpg) + +Με το WPrefs, πηγαίνετε στο **Menu Definition** και στο αριστερό παράθυρο διαλέξτε **Add Command**. Δίπλα τώρα, στο **Label** γράψτε **Run\...**, ενώ στο +**Command** διαλέξτε **Run Program**. Από κάτω, στο **Program To Run** πληκτρολογήστε όπως το βλέπετε: **%a(Run,Type command to run:)**. Αυτό ήταν. Τα βήματα +είναι τα ίδια και με το Wmaker Conf. + +### [3.2 Η εντολή wmconfig]{#ss3.2} + +Πρίν σας πώ για το Programs, να σας μιλήσω για το wmconfig. Αυτό είναι ένα χρήσιμο προγραμματάκι, το οποίο δημιουργεί μία λίστα με τα προγράμματα του συστήματός +σας με σκοπό να χρησιμοποιήσετε τη λιστα που σας παράγει στα menu των διάφορων window managers. Υποστηρίζει τα: KDE, Wmaker, FVWM 95, FVWM 2, Afterstep, mwm, +Anotherlevel, icewm. Δοκιμάστε να τρέξετε στη γραμμή εντολών το εξής: **wmconfig \--output wmaker**. Τώρα θα μου πείτε \"μα καλά, αυτό που ξέρει ποιά +προγράμματα έχω εγκαταστήσει;\". Η απάντηση είναι απλή. Κοιτάξτε τα περιεχόμενα του φακέλου **/etc/X11/wmconfig**. Εκεί περιέχονται πληροφορίες για κάθε +πρόγραμμα που είναι εγκατεστημένο στο σύστημά σας. Αν θέλετε και εσείς να προσθέσετε πληροφορία για κάποιο πρόγραμμα που δεν βρίσκεται εκεί, κοιτάξτε ένα άλλο +αρχείο για να παραδειγματιστείτε. + +Πάμε τώρα να δούμε πώς να φτιάξετε το menu Programs. Στο Wprefs, στο **Menu Definition** διαλέγετε στο αριστερό παράθυρο **Add external menu**. Δίπλα στο +**Label** γράψτε Programs και από κάτω στο **Menu Path/Directory List** πληκτρολογήστε την εντολή: **\|wmconfig \--output wmaker 2\>/dev/null**. Τώρα είστε +έτοιμοι. Αν θέλετε να το κάνετε με το Wmaker Conf, τότε στο Menu αφού προσθέσετε **New menu** διαλέγετε στο **Command** \--\> **include dynamic menu** και από +κάτω πληκτρολογείτε την παραπάνω εντολή. + + +### [4. Αρχεία ρυθμίσεων]{#s4} + +Τα αρχεία ρυθμίσεων βρίσκονται σε πολλά directories. Στον κατάλογο **/etc/X11/WindowMaker** υπάρχουν τα default αρχεία παραμετροποίησης του WMaker. Στον +κατάλογο **/usr/share/WindowMaker** μπορείτε να εγκαταστήσετε themes, εικονίδια και backgrounds για όλους τους χρήστες του συστήματος. Εγώ θα αναφερθώ ξεχωριστά +για τους χρήστες και για να γίνω πιο συγκεκριμένος στα αρχεία ρυθμίσεων του home directory ενός χρήστη. Τα αρχεία αυτά βρίσκονται στον κατάλογο **GNUstep** μέσα +στο home directory. + +Ο κατάλογος GNUstep περιέχει τρείς φακέλους, δύο φανερούς και έναν κρυφό. Ο κρυφός κατάλογος περιέχει τα εικονίδια που είναι docked στο DockPanel. O κατάλογος +Library περιέχει άλλους υποκαταλόγους μέσα στους οποίους εγκαθίστανται themes, ήχοι, backgrounds, εικονίδια κλπ. + +Ο κατάλογος Defaults περιέχει τα πιο σημαντικά αρχεία για τις ρυθμίσεις του Window Maker. Ας δούμε τα αρχεία αυτά ένα-ένα: + +- Το αρχείο WMGLOBAL περιέχει πληροφορίες για τις γραμματοσειρές που χρησιμοποιεί ο WindowMaker, καθώς και το μέγιστο χρόνο που ανάμεσα στα δύο κλίκ του + ποντικιού, για να δουλέψει το διπλό κλίκ. +- Το αρχείο WMRootMenu περιέχει τις απαραίτητες πληροφορίες για το Applications Menu (από αυτό το αρχείο μπορείτε επίσης να προσθέσετε το Run και Programs που + λέγαμε). +- Το αρχείο WMState περιέχει τις ρυθμίσεις για τα εικονίδια του DockPanel, του συνδετήρα (Clip) και των επιφανειών εργασίας (Workspaces). Σε αυτό το αρχείο + μπορείτε να ορίσετε να ανοίγει αυτόματα ένα πρόγραμμα του οποίου το εικονίδιο βρίσκεται στο DockPanel (π.χ. το ρολόι). +- Το αρχείο WMWindowAttributes περιέχει πληροφορίες σχετικά με το ποιό εικονίδιο χρησιμοποιούν τα διάφορα προγράμματα. Εδώ μπορείτε να ορίσετε εσείς εικονίδιο + για κάποιο πρόγραμμα που τυχόν δεν έχει ορισμένο εικονίδιο. +- Το αρχείο WPrefs περιέχει τις ρυθμίσεις για το ομώνυμο πρόγραμμα, όπως π.χ. αν θα χρησιμοποιεί balloοn help ή όχι. +- Τέλος, το αρχείο WindowMaker περιέχει τις ρυθμίσεις για το περιβάλλον του WindowMaker, όπως τα χρώματα, τα backgrounds κλπ. + + +### [5. Themes]{#s5} + +Όπως θα έχετε καταλάβει μέχρι τώρα, ο WindowMaker υποστηρίζει themes. Διάφορων ειδών themes μπορείτε να βρείτε στη διεύθυνση . Η +εγκατάστασή τους είναι αρκετά απλή. Τα themes είναι πάντα σε συμπιεσμένη μορφή. Αποσυμπιέζετε λοιπόν στον κατάλογο **/usr/share/WindowMaker** για να τα βλέπουν +όλοι οι χρήστες ή στον κατάλογο **\~/GNUstep/Library/WindowMaker** για να τα βλέπει μόνο ο συγκεκριμένος χρήστης. Έπειτα, πηγαίνετε στο **Applications Menu** +\--\> **Appearence** \--\> **Themes** και διαλέξτε το theme της αρεσκείας σας. + + +### [6. Ελληνικά]{#s6} + +Ο Window Maker είναι έτοιμος ως προς το θέμα των ελληνικών, συνεργάζεται άψογα μαζί τους και εσείς δεν χρειάζεται να κάνετε κάποια ειδική ρύθμιση. Θα σας το +αποδείξω με τις παρακάτω φωτογραφίες. + +![](/18/img/ntscpgr.jpg) + +![](/18/img/rungr.jpg) + +![](/18/img/menugr.jpg) + +Προσέξτε ιδιαίτερα το γεγονός ότι μπορείτε να γράψετε ελληνικά στο Run. Τώρα αν εσείς δεν τα καταφέρνετε, σημαίνει ότι τα ελληνικά δεν έχουν εγκατασταθεί σωστά. +Για να λύσετε αυτό το πρόβλημα κοιτάξτε το άρθρο του Magaz στο τεύχος 16. + +### [6.1 Ελληνικό μενού]{#ss6.1} + +Ίσως να αναρωτιέστε πως γίνεται να βάλετε ελληνικά στο Applications Menu για να μοιάζει με αυτό της φωτογραφίας. Αυτό γίνεται με πολλούς τρόπους. Ένας τρόπος +είναι να αλλάξετε τα **Label** των υπομενού με το πρόγραμμα WPrefs ή με το Wmaker Conf. Ένας άλλος τρόπος είναι να ανοίξετε το αρχείο +**\~/GNUstep/Defaults/WMRootMenu** και να αλλάξετε τα **Label** manually. Ένας τελευταίος τρόπος είναι ο εξής: Στον κατάλογο **\~/GNUstep/Library/WindowMaker/** +υπάρχουν μερικά αρχεία **menu.??**, τα οποία είναι text μορφές του Applications Menu σε πολλές γλώσσες. Το αρχείο για την ελληνική είναι το **menu.el**. Θα σας +πώ πώς να χρησιμοποιήσετε αυτό το αρχείο. Βέβαια, το μόνο του μειονέκτημα είναι ότι έχει κάποια πράγματα έτοιμα, οπότε αν δεν έχετε κάποιο από τα προγράμματα +αυτά, τότε δεν θα δουλεύει. Για να χρησιμοποιήσετε λοιπόν αυτό το αρχείο ανοίξτε με έναν editor από την γραμμή εντολών το αρχείο +**\~/GNUstep/Defaults/WMRootMenu**, σβήστε ότι έχει γραμμένο μέσα και γράψτε μέσα σε εισαγωγικά το full path του αρχείου **menu.el**. Δηλαδή γράψτε +**\"\~/GNUstep/Library/WindowMaker/menu.el\"**. Μετά μπείτε στα X και θα δείτε το ελληνικό μενού. Προσέξτε ότι όταν κάνετε αυτήν την αλλαγή δεν θα πρέπει να +τρέχει ο Window Maker γιατί άμα πάτε να τον ξαναξεκινήσετε δεν θα δουλέψει. + + +### [7. WMaker με KDE ή GNOME]{#s7} + +Όπως σας είπα, έχετε τη δυνατότητα να χρησιμοποιήσετε τον Window Maker σαν window manager στο KDE και στο GNOME. Ας δούμε πώς θα το κάνετε αυτό. + +Για το KDE. Ανοίξτε το αρχείο startkde και αντικαταστήστε όπου λέει kwm με wmaker. Αυτό ήταν. Την επόμενη φορά που θα ανοίξετε το KDE θα χρησιμοποιείτε τον +Wmaker ως window manager. + +Για το GNOME. Στο αρχείο **\~/.xinitrc** προσθέστε μία γραμμή πρίν από το wmaker. Γράψτε **gnome-session &**. Την επόμενη φορά που θα ανοίξετε τα X θα σας +εμφανιστεί και η μπάρα του GNOME. + + +### [8. Documentation]{#s8} + +Παρόλο που σας είπα αρκετά πράγματα για τον Window Maker, εσείς μπορείτε να διαβάσετε κι άλλα είτε από περιέργια, ενδιαφέρον είτε αν συναντήσατε κάποιο +πρόβλημα. Σας αναφέρω εδώ μερικά μέρη που θα βρείτε documentation. + +- Κατ\' αρχάς στο ίδιο το σύστημά σας. Πηγαίνετε στον κατάλογο **/usr/doc/WindowMaker-0.60**. +- Στο επίσημο site θα βρείτε αρκετό documentation. H διεύθυνσή του είναι . Θα βρείτε και πληρέστατο F.A.Q. +- Υπάρχει και το User Guide. Θα το βρείτε στην διεύθυνση . Η pdf έκδοση του User Guide βρίσκεται στη διεύθυνση + + diff --git a/content/articles/18/05_raid.md b/content/articles/18/05_raid.md new file mode 100644 index 0000000..172a408 --- /dev/null +++ b/content/articles/18/05_raid.md @@ -0,0 +1,148 @@ ++++ +title = 'RAID στο Linux' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 18'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ποσο εύκολο, ή δύσκολο είναι να φτιάξουμε ένα software RAID στο Linuxάκι μας; Και, αλήθεια, υπάρχει πράγματι λόγος για κάτι τέτοιο; Που θα βρούμε εργαλεία, και +τι πρέπει να προσέξουμε; Όλες αυτές τις ερωτήσεις θα προσπαθήσουμε να απαντήσουμε, μέσα από αυτό το άρθρο-παρουσίαση μίας πραγματικής κατάστασης.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το τελευταίο διάστημα, ακούω συνέχεια γνωστούς και φίλους, να παραπονιούνται για δίσκους που χάλασαν (ακούς Βαγγέλη;). Και όλοι αυτοί οι γνωστοί και φίλοι, πάνε +κάθε λίγο και λιγάκι και περιμένουν τις αντιπροσωπείες, που δεν είναι και υποδείγματα εξυπηρέτησης, να τους αλλάξουν το δίσκο, και, αν βαρεθούν να περιμένουν +καμμία φορά, αγοράζουν καινούριο.\ +Το να μείνεις χωρίς δίσκο για κάποιο διάστημα (και συνεπώς χωρίς υπολογιστή), σίγουρα δεν είναι το καλύτερο. Είναι όμως αρκετά καλύτερο από το να χάσεις κάποια +ευαίσθητα δεδομένα. Και, όλοι μας έχουμε δεδομένα που τα θεωρούμε ευαίσθητα. Άλλος το mail του, άλλος τα κείμενα που έχει γράψει, άλλος το βιογραφικό του (!!!) +άλλος κάποιο κώδικα που έχει γράψει για συγκεκριμένη δουλειά κλπ. Επειδή αγχώθηκα, και επειδή έχω την πτυχιακή μου αλλά και μαζεύω επί μήνες υλικό για το Magaz, +επειδή βαριέμαι να ξαναγράφω τα scripts που έχω γράψει, και επειδή, εν τέλει, είμαι πολύ τεμπέλης για να εφαρμόσω ένα σοβαρό σύστημα backup, αποφάσισα να +χρησιμοποιήσω RAID, τουλάχιστον για το partition /home στον υπολογιστάκο μου. Ούτως ή άλλως, ο παλιός μου δίσκος (2.1 Gb ο οποίος παροπλίστηκε όταν πλέον δεν με +χώραγε, και που αντικαταστάθηκε από έναν 6.5 Gb) χρησιμοποιείται για \"χύμα\" αποθήκευση αρχείων, συνεπώς δεν θα μου κόστιζε τίποτα παραπάνω :-) Αντίθετα, η +αγορά 5-6 zip-disks θα μου κόστιζε 10-15 χιλιάδες.\ +Βέβαια, για να είμαι και πιο σωστός απεναντί σας, να σας τονίσω ότι πιστεύω ότι **ένα καλοσχεδιασμένο σύστημα-πρόγραμμα backup αποδυκνείεται *ΠΑΝΤΑ* +ανεκτίμητο.** + +**1. Tι είναι το Raid;** +----------------------------------------------- + +**2. Τι επιλογές έχουμε με το Linux;** +------------------------------------------------------------- + +**3. Πως το χρησιμοποιούμε;** +---------------------------------------------------- + +**4. Επίλογος-βιβλιογραφία** +--------------------------------------------------- + + +### [1. Tι είναι το Raid;]{#s1} + +Raid σημαίνει Redundant Array of Inexpensive Disks και υποστηρίζεται από τον ίδιο τον πυρήνα του Linux (με κάποια εξωτερικά προγράμματα). Υπάρχει εδώ και χρόνια +ως υλοποίηση σε διάφορα Unix και με δύο διαφορετικούς τρόπους. Το Hardware Raid (όπου την όλη διαχείριση του RAID αναλαμβάνει ένας hardware controller) και το +Software Raid (όπου όλα γίνονται από το software). Το hardware raid γενικά θεωρείται καλύτερο και αποδοτικότερο (και ταχύτερο) από το software raid, αλλά είναι +πολύ ακριβότερο. Το Linux έχει υποστήριξη στον πυρήνα πάντως για ορισμένους hardware raid controllers. Το Linux επίσης παρέχει δυνατότητα να βρίσκεται σε + +### [2. Τι επιλογές έχουμε με το Linux;]{#s2}Tο Linux παρέχει τα εξής επίπεδα software Raid: + +- Linear mode Σε αυτή την περίπτωση, δυο ή περισσότεροι δίσκοι ενώνονται λογικά για να δημιουργήσουν έναν μεγαλύτερο. Συνολικό μέγεθος του λογικού δίσκου, όσο + το άθροισμα των δίσκων που το αποτελούν. + - Προτερήματα\ + Οι δίσκοι μπορούν να είναι εντελώς διαφορετικοί μεταξύ τους, εφόσον η ένωση γίνεται σειριακά (ο ένας \"κολλάει\" πίσω από τον άλλο) χωρίς απώλειες στην + απόδοση. Έτσι μπορούμε απλά να ενώσουμε μερικούς παλιούς μικρούς δίσκους για να δημιουργήσουμε έναν νέο μεγαλύτερο (προφανώς, εφόσον οι EIDE controllers + στα περισσότερα από τα μηχανήματά μας, υποστηρίζουν 2 δίσκους ο καθένας, αυτό αναφέρεται σε SCSI δίσκους). + - Μειονεκτήματα\ + Δεν υπάρχει κανενός είδους προστασία για απώλεια δεδομένων αλλά συνήθως ούτε καμία ιδιαίτερη αύξηση στην ταχύτητα. +- Stripe mode (RAID 0) Στην υλοποίηση Raid τύπου 0, οι δίσκοι πάλι ενώνονται μεταξκύ τους όπως και στο Linear mode, αλλά αυτή το φορά οι εγγραφές δεν γίνονται + σειριακά (πρώτα ο πρώτος δίσκος, μετά ο επόμενος κ.ο.κ) αλλά γίνονται ταυτόγχρονα σε όλους τους δίσκους. + - Προτερήματα\ + Η ταχύτητα του RAID 0 για Ν δίσκους μπορεί να είναι Ν-πλάσια από την ταχύτητα του κάθε δίσκου χωριστά. Αυτό βέβαια δεν επιτυγχάνεται ποτέ (είναι μόνο + θεωρητικό) και πλησιάζεται μόνο με χρήση δίσκων που βρίσκονται σε διαφορετικούς controllers. + - Μειονεκτήματα\ + Πάλι δεν υπάρχει κανενός είδους προστασία για απώλεια δεδομένων. Αν χρησιμοποιηθούν δίσκοι πολύ διαφορετικών μεγεθών, μπορεί να παρατηρηθεί μειωμένη + ταχύτητα (σε σχέση πάντα με ένα καλοστημένο RAID). Αν χρησιμοποιηθούν partitions του ίδιου δίσκου, ή δίσκοι στον ίδιο controller, η διαφορά στην απόδοση + είναι ανάξια λόγου. +- Mirroring (RAID 1) Επιτέλους, η πρώτη λύση RAID από όσες μελετάμε, που παρέχει ένα πραγματικό redundancy. Αυτή η μέθοδος, όπως λέει και το όνομά της, + κρατάει ένα πλήρες αντίγραφο των δεδομένων του ενός δίσκου, στον άλλο (ή στους άλλους, αν χρησιμοποιήσουμε πολλούς δίσκους). Μπορούν επίσης να δηλωθούν και + spare disks οι οποίοι θα γίνουν μέρος του mirrorset μόλις ένας χαλάσει. + - Προτερήματα\ + Παρέχει πάρα πολύ υψηλό επίπεδο redundancy. Μπορεί από ένα raidset να αφαιρεθούν όλοι οι δίσκοι εκτός από έναν, και το set να συνεχίσει να δουλεύει (υπό + την έννοια ότι είναι διαθέσιμο για εγγραφή - ανάγνωση δεδομένων). Βέλτιστη απόδοση σε αναγνώσεις από τους δίσκους. + - Μειονεκτήματα\ + Πρέπει οι δίσκοι να είναι ίδιου μεγέθους (οποισδήποτε δίσκος μεγαλύτερος απλά χρησιμοποιείται ως μικρότερος. Ο υπερβάλλων χώρος δεν χρησιμοποιείται). Σε + εγγραφές προς το δίσκο, παρατηρείται μία ελαφριά καθυστέρηση (αν και ίσως λογικά νομίζετε ότι θέλει Ν\*χρόνο για εγγραφές - όπου Ν ο αριθμός των + δίσκων - με μία σωστή υλοποίηση, δηλαδή ξεχωριστοί δίσκοι σε ξεχωριστούς controllers, η καθυστέρηση είναι έως ανύπαρκτη). +- RAID 4 Σε αυτή την περίπτωση, τα δεδομένα μοιράζονται σε πολλούς δίσκους (σαν το striping) αλλά υπάρχει ένας ακόμα δίσκος, ο οποίος κρατάει parity + information. Έτσι υπάρχει redundancy, αλλά και μία μείωση στην ταχύτητα. + - Προτερήματα\ + Υψηλό redundancy, πιο αποδοτικό από απόδοσης χώρου, από το RAID 1. + - Μειονεκτήματα\ + Μεγάλη καθυστέρηση στην ανάγνωση και (κυρίως) στην εγγραφή. Θέλει σωστό σχεδιασμό για να μειωθεί αυτό το πρόβλημα (το bottleneck δημιουργείται προφανώς + στον parity δίσκο, οπότε πρέπει εκεί να δοθεί ιδιαίτερη προσοχή). +- RAID 5 Η πλέον χρησιμοποιούμενη υλοποίηση RAID είναι μία μετεξέλιξη του RAID 4, με την διαφορά ότι αντί να κρατάει το parity σε έναν δίσκο, μοιράζει και το + parity στους επιμέρους δίσκους. Προφανώς παρέχει redundancy υψηλότερη από το RAID 4 (εφόσον εκεί υπάρχει ένα single point of failure, ο δίσκος με την parity + πληροφορία). + - Προτερήματα\ + Υψηλό redundancy, αποδοτικότερο σε χώρο από το RAID 1, γρηγορότερο από το RAID 4. + - Μειονεκτήματα\ + Συνεχίζει βέβαια να υπάρχει πρόβλημα απόδοσης, αλλά όχι τόσο μεγάλο όσο στο RAID 4. Πρέπει οι δίσκοι να είναι ίδιας χωρητικότητας. + + +### [3. Πως το χρησιμοποιούμε;]{#s3}Μέσα από το configuration του πυρήνα πρέπει να έχουμε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Multiple devices driver support -> CONFIG_BLK_DEV_MD + Ανάλογα με την υλοποίηση που έχουμε διαλέξει, + πρέπει να επιλέξουμε και την αντίστοιχη επιλογή στο configuration. + Linear (append) mode -> CONFIG_MD_LINEAR + RAID-0 (striping) mode -> CONFIG_MD_STRIPED + RAID-1 (mirroring) mode -> CONFIG_MD_MIRRORING + RAID-4/RAID-5 mode -> CONFIG_MD_RAID5 + Αν θέλετε να βάλετε τον boot δίσκο σε RAID (μόνο linear ή stripped) + πρέπει να επιλέξετε και το: + Boot support (linear, striped) -> CONFIG_MD_BOOT + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα χρειαστούμε και το software που διαχειρίζεται τα Multiple Devices (ο όρος που χρησιμοποιείται για το software raid) και το οποίο αν δεν το έχετε με το +distribution σας θα πρέπει να το κατεβάσετε από το . Προσέξτε γιατί εκεί υπάρχει έκδοση που δουλεύει με τους +stock πυρήνες, και έκδοση που χρειάζεται να περάσουμε patches στον πυρήνα για να δουλέψει. Διαβάστε καλά τα READMEs που υπάρχουν εκεί. + +Μετά το reboot (για να δουλέψει ο νέος kernel) θα πρέπει να φτιάξουμε το md, με την εντολή mdadd. Σε αυτή την εντολή δίνουμε ως παραμέτρους τα devices που θα +ενωθούν για να δημιουργήσουν το multiple device, το όνομα του νέου device (/dev/mdX). Προσοχή. αν υπάρχουν δεδομένα σε κάποιον από τους δίσκους που θα +χρησιμοποιηθούν, μπορούν υπό προϋποθέσεις να μην χαθούν. Για άλλη μία φορά, διαβάστε το README. Τέλος, τρέχουμε την εντολή mdrun για να οριστεί το /dev/mdX ως +block device. Τότε δημιουργείται και το πολύ χρήσιμο /proc/mdstat το οποίο μας δίνει πληροφορίες για τα md devices που έχουμε στο σύστημά μας. + +Με τα νέα utilities (που χρειάζονται patches στον kernel) το mdrun έχει αφαιρεθεί, και η διαχείριση γίνεται με λίγο διαφορετικό τρόπο. + +Μετά από όλα αυτά, είμαστε έτοιμοι να κάνουμε mount το /dev/mdX όπου μας εξυπηρετεί. Για να γίνεται αυτόματα mount κατά το boot, πρέπει απλά να τρέξουμε από ένα +rc.\* script τις εντολές mdadd και mdrun (οι οποίες δαιβάζουν το αρχείο /etc/mdtab και ενεργοποιούν τα raid devices) πριν διαβαστεί το fstab. + + +### [4. Επίλογος-βιβλιογραφία]{#s4} + +Αν και αυτό το άρθρο ξεκίνησα να το γράφω για να είναι ένας τυφλοσούρτης, στην πορεία αποφάσισα ότι είναι κακή ιδέα να παρέχεις τυφλοσούρτη για τόσο σημαντικά +θέματα. Γι αυτό και θα δείτε τόσες φορές μέσα στο άρθρο την φράση \"Διαβάστε το README\". Είναι εύκολο να στήσεις RAID σε Linux, αλλά συνάμα και επικίνδυνο. Σε +περίπτωση που υπάρχουν δεδομένα σε κάποιον από τους δίσκους που θα συμμετάσχει στο Raidset, πρέπει να γίνει backup πριν οποιαδήποτε διαδικασία. Σε ορισμένα RAID +modes μπορεί τα δεδομένα να διατηρηθούν, αλλά μην στηρίζεστε σε αυτό. Αν δεν το χρειάζεστε, μπορείτε προφανώς να το δοκιμάσετε (εξάλλου γι\' αυτό γράφεται αυτό +το άρθρο, αν το χρειάζεστε ξέρετε μάλλον καλύτερα από μένα τι να κάνετε), αλλά προσέξτε τα εξής:\ +A) Διαβάστε καλά τα documents και καταλάβετέ τα.\ +Β) Πάρτε σε backup τα αρχεία σας.\ +Γ) Αφού διαβάσατε αυτό το άρθρο και είδατε ότι σε θέμα απόδοσης, το παν είναι ο σωστός σχεδιασμός, ξαναδιαβάστε το, και μαζί με αυτό και το +Software-RAID-Howto.\ +Δ) Ξαναδιαβάστε τα documents και καταλάβετέ τα :-)\ +Ε) Καλό raid-ing. + +**Βιβλιογραφία** + +[Generic RAID overview](http://www.dpt.com/uraiddoc.html)\ +[General Linux RAID options](http://linas.org/linux/raid.html)\ +[Linux Software RAID tools](ftp://ftp.fi.kernel.org/pub/linux/daemons/raid/)\ +[Bootable RAID mini-HOWTO](http://www.linuxdoc.org/HOWTO/Root-RAID-HOWTO.html)\ +[Software RAID HOWTO](http://www.linuxdoc.org/HOWTO/mini/Software-RAID.html) + diff --git a/content/articles/19/01_editorial.md b/content/articles/19/01_editorial.md new file mode 100644 index 0000000..84ece2d --- /dev/null +++ b/content/articles/19/01_editorial.md @@ -0,0 +1,45 @@ ++++ +title = 'Editorial' +date = '1999-11-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 19'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz** Νοεμβρίου \...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το προτελευταίο αυτό τεύχος του έτους, μαζεύουμε εντυπώσεις από την αλλαγή που κάναμε. Η εξαγωγή και ανάλυση συμπερασμάτων ποτέ δεν ήταν εύκολη δουλειά, (και +σίγουρα όχι τεχνική) αλλά φαντάζομαι οι περισσότεροι το ξέρετε αυτό, άρα δεν θα σας κάνει εντύπωση αν ερμηνεύουμε διαφορετικά τα ίδια στοιχεία. + +Περίπου 170 άτομα μέσα στον Οκτώβριο χρησιμοποίησαν το search. Καλό νούμερο (αν και δεν ξέρουμε πόσα από αυτά είναι δικές μας δοκιμές και πόσα είναι δικές σας +αναζητήσεις). Επίσης, γύρω στα 100 άτομα είδαν την δημοσκόπηση, αλλά ψηφίσανε μόνο 25. Λιγότερα από 60 άτομα κατέβασαν το τεύχος για να το διαβάσουν offline, +ενώ γύρω στα 70 ζητήσαν το προηγούμενο τεύχος (17). Τέλος, όπως αναμενόταν, τα πιο περιζήτητα άρθρα ήταν αυτά του τεύχους 18 (πιο πρόσφατο) με πολλά όμως hits +σε άρθρα των τευχών 17, 16 και 15. Αυτό εμείς το θεωρούμε καλό, γιατί σημαίνει ότι ο κόσμος ανατρέχει σε παλαιότερα άρθρα μας. + +Σε αυτό το τεύχος έχουμε [εντυπώσεις από την Infosystem 99](02_infosystem.html), μία [ανάλυση του CVS](03_cvs.html), μία [επεξήγηση του boot +process](04_boot.html) και μία [ανάλυση για τα benchmarks](05_benchmarks.html) που βλέπουν τελευταία το φως της δημοσιότητας. + +Μετά την αλλαγή, επικοινώνησαν και άλλοι μαζί μας ρωτώντας τι άρθρα να συνεισφέρουν, συνεπώς θα ξανααναφέρουμε τις προτάσεις μας (αν παρατηρήσετε ότι είναι πολύ +λιγότερες από την τελευταία φορά, αυτό είναι επειδή κάποια άρθρα έχουν ήδη γραφτεί, και κάποια άλλα είναι αυτή τη στιγμή σε εξέλιξη). + +- Κατηγορία Howto + - Callback στο Linux + - Προγραμματισμός σε QT, GNOME + - Infrared communication + - SGML και LINUXDOC tutorial +- Κατηγορία αναλύσεις + - Linux και POSIX + - Το Linux σαν router +- Κατηγορία παρουσιάσεις + - Παρουσίαση του Koffice + - Παρουσίαση του Mozilla + - Παρουσιάσεις νέων Distributions +- Κατηγορία updates παλαιότερων άρθρων + - Update για Samba v2 και kernel 2.2 + - Update για IP Masq σε kernel 2.2 και ipchains + +Σας ευχόμαστε καλή ανάγνωση\.... diff --git a/content/articles/19/02_infosystem.md b/content/articles/19/02_infosystem.md new file mode 100644 index 0000000..7a02834 --- /dev/null +++ b/content/articles/19/02_infosystem.md @@ -0,0 +1,104 @@ ++++ +title = 'Με το HELLUG στην Infosystem 99' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης' +issue = ['Magaz 19'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Η φετινή Infosystem είχε μία ασυνήθιστη παρουσία. Τι θέλουν οι τύποι με τους πιγκουίνους στο κεφάλι σε μία έκθεση πληροφορικής; Ένα από τα μέλη του hellug +περιγράφει την εμπειρία.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η Infosystem που γίνεται στην Θεσσαλονίκη κάθε χρόνο είναι μία από τις σημαντικότερες εκθέσεις πληροφορικής στην Ελλάδα. Εκθέτες από όλη την χώρα παρουσιάζουν +τα προϊόντα και τα επιτεύγματά τους. Η Infosystem99 ήταν η πρώτη έκθεση πληροφορικής στην Ελλάδα στην οποία παρουσιάστηκε επίσημα το Linux ως προϊόν και ώς +εναλλακτική λύση. Κατά κύριο λόγο (αλλά όχι και μοναδικό όπως θα δούμε παρακάτω) αυτό οφείλονταν στην παρουσία του Hellug (Hellenic Linux Users Group) σε αυτή. + +Η παρουσία του HELLUG στην φετινή Infosystem σίγουρα τράβηξε το μάτι χιλιάδων ανθρώπων που πέρασαν από την έκθεση. Όσοι στάθηκαν στο περίπτερό μας, σίγουρα +κατάλαβαν ότι κάτι διαφορετικό γίνόταν σε αυτό τον χώρο. Στην πραγματικότητα, τα πάντα ήταν διαφορετικά σε σχέση με τους υπόλοιπους εκθέτες! + +Για να μπορέσει να έχει αυτή την αξιοπρόσεκτη παρουσία, το HELLUG χρειάστηκε να ξεπεράσει πολλά εμπόδια και σε επίπεδο συλλόγου αλλά και σε επίπεδο προσωπικό +για τα μέλη του. Τα προβλήματα ήταν κυρίως οικονομικά: τα μέλη χρειάστηκε να δώσουν μία έκτακτη εισφορά για να συγκεντρωθούν τα χρήματα που απαιτούνταν για την +ενοικίαση του περιπτέρου στον χώρο της έκθεσης, αλλά και να πληρώσουν το καθένα από την τσέπη του τα έξοδα μετάβασης και διαμονής στην Θεσσαλονίκη. Χάρη στο +μεράκι και την όρεξη του διακρίνει τους λινουξάδες, τα προβλήματα αυτά ξεπεράστηκαν και τελικά γύρω στα 15 μέλη του συλλόγου κατάφεραν να βρίσκονται όλες ή +μερικές μέρες στον χώρο του περιπτέρου και να βοηθούν. + +Σημαντική ήταν και η αρωγή που είχε ο σύλλογος από αρκετές εταιρείες. Η διαφημιστική Modus Vivendi προσφέρθηκε να μας σχεδιάσει και να εκτυπώσει τις τεράστιες +αφίσες που κάλυψαν τους τοίχους καθώς και τα 13.000 ενημερωτικά φυλλάδια που είχαμε για διάθεση στους επισκέπτες του περιπτέρου. Τα Μακεδονικά Περιφερειακά +δάνεισαν για όλες τις ημέρες της έκθεσης 2 μηχανήματα στα οποία τρέχαμε linux. Οι εταιρείες Caldera, RedHat και Mandrake έστειλαν CDs και μπλουζάκια. Τέλος, +πρέπει να πούμε ότι σημαντική ήταν και η βοήθεια που είχαμε από τους δύο έλληνες αντιπροσώπους της SuSE, τις εταιρείες ΥΕΠ (www.suse.gr) και Step (www.step.gr) +που μας έδωσαν αμέτρητα CDs\... + +Πέρα από τις εταιρείες που βοήθησαν όμως, το κύριο βάρος το σήκωσαν τα μέλη του συλλόγου. Μερικοί έφεραν τα laptop τους, άλλος μία κάρτα για video grabbing μαζί +με μία μικρή καμερούλα, άλλος ολόκληρο PC!!! + +Ξέρω ότι πολλοί επαγγελματίες που διαβάζουν τα παραπάνω θα χαμογελάνε ήδη. Ας μην βαστείτε όμως να κρίνετε. Είναι γεγονός ότι η οργάνωση του HELLUG δείχνει έναν +ερασιτεχνισμό (και γιατί όχι στο κάτω, κάτω, αφού είναι το χόμπι μας\...). Το αποτέλεσμα όμως ήταν εντυπωσιακό: ένα πολύ όμορφο περίπτερο, με τη φρεσκάδα και +την ζωντάνια που χαρακτηρίζει κάθετί που γίνεται εθελοντικά, γεμάτο επισκέπτες ακόμη και σε ώρες που τα άλλα, οργανωμένα περίπτερα ήταν άδεια! + +Οι επισκέπτες που πέρασαν από το περίπτερο 15 stand 12 (αυτός ήταν ο χώρος μας) παρατήρησαν ότι οι υπολογιστές που βρίσκονταν εκεί δεν ήταν απλώς διακοσμητικοί. +Σχεδόν πάντα, κάποιος έκανε κάτι σε αυτούς. Την μία γινόταν recompile του πηρήνα για να αναγνωρίσει τον video grabber, την άλλη στηνόταν το firewall, την τρίτη +κάποιος προσπαθούσε να αναπαράγει το πρόβλημα που είχε ένας λινουξάς επισκέπτης στο γραφείο του για να δωθεί η σωστή λύση. Πολλοί που δεν είχαν παλαιότερη +εμπειρία με το linux θέλησαν να δουν πως συμπεριφέρεται στην πράξη και υπήρχαν και μερικοί που βρήκαν την ευκαιρία να μας δείξουν πως χρησιμοποιούν το linux +στην δουλειά τους. Από το Σάββατο, οι φωτογραφίες που είχε τραβήξει κάποιος με μία ψηφιακή κάμερα είχαν μεταφερθεί στα μηχανήματα που είχαμε στην έκθεση και +στην συνέχεια μπήκαν στον server του συλλόγου, στην διεύθυνση (προσθέθηκαν και άλλες αργότερα). Υπήρχε και η σκέψη να στηθεί +ένας Real Server για να μεταδίδουμε στο internet την εικόνα από την κάμερα που βρισκόταν συνδεδεμένη σε ένα από τα μηχανήματά μας, αλλά την τελευταία στιγμή +εγκαταλήφθηκε (αν και ο server είχε ήδη στηθεί) γιατί μάλλον θα καταναλώναμε όλο το bandwidth της έκθεσης. + +Ένα άλλο ενδιαφέρον χαρακτηριστικό ήταν ότι στο περίπτερο του HELLUG ο κόσμος σταματούσε για να συζητήσει. Έγιναν ατελείωτες συζητήσεις, άλλες με καθαρά τεχνικό +ενδιαφέρον (σχετικά με web servers, δίκτυα κ.λ.) και άλλες με θεωρητικό (ποιό είναι το μέλλον του linux, που πάει η αγορά πληροφορικής και ό,τι άλλο μπορέιτε να +φανταστείτε). Νομίζω ότι αυτό ήταν και ένα από τα πιο σημαντικά στοιχεία του περιπτέρου μας. Ότι δηλαδή οι άνθρωποι που βρισκόντουσαν μαζεμένοι σε αυτό ήταν +άνθρωποι με τεχνογνωσία, πρόθυμοι να την μοιραστούν με τους υπόλοιπους. Δεν υπήρχε το άγχος της \"σωστής\" παρουσίας ή της πώλησης, αλλά η όρεξη για κουβέντα +και ανταλλαγή απόψεων. Σιγά σιγά χάθηκε και ο διαχωρισμός μεταξύ \"εκθετών\" και \"επισκεπτών\": λινουξάδες που δεν ήταν μέλη του hellug παρασυρμένοι από το +γενικό κλίμα, έδιναν συμβουλές και βοήθεια σε επισκέπτες! + +Η εμπειρία από το προηγούμενο happening που είχε οργανώσει ο σύλλογος έλεγε ότι ενώ είχαμε ένα πολύ σημαντικό αριθμό CDs με linux για να μοιράσουμε στον κόσμο, +αν δεν τα δίναμε με μέτρο γρήγορα θα εξαντλούνταν. Έτσι, δεν διαφημίσαμε ότι θα δίναμε τζάμπα CDs και προσπαθούσαμε να δώσουμε μόνο στους επισκέπτες που +έδειχναν πραγματικό ενδιαφέρον και να μην τα σκορπίζουμε ανεξέλενκτα. Αυτό μπορεί να κακοφάνηκε σε μερικούς, ο μόνος λόγος όμως ήταν ότι δεν θέλαμε να +καταλήξουν τα περιορισμένα κομάτια που είχαμε (και που σε μερικές περιπτώσεις είχαν γραφτεί με προσωπικά έξοδα μελών) στα σκουπίδια, μαζί με τα διαφημιστικά +φυλλάδια που μάζευαν οι επισκέπτες από κάθε περίπτερο. Τελικά, όση φειδώ και αν δείξαμε, την Κυριακή το βράδυ (τελευταία μέρα της έκθεσης) δεν είχαμε άλλα CDs +να δώσουμε. Οι υπολογισμοί δείχνουν ότι μοιράστηκαν με αυτό τον τρόπο γύρω στα 800 CDs (πλήρως λειτουργικά). + +Από τα πράγματα που τράβηξαν περισσότερο το ενδιαφέρον των επισκεπτών μας ήταν σίγουρα το bb, το VMWare και τα γραφικά του enlightenment. Το bb είναι ένα demo +που δείχνει τις δυνατότητες της βιβλιοθήκης aalib (ASCII Art Libraty) που επιτρέπει να σχεδιάζουμε γραφικά σε text mode χρησιμοποιώντας μόνο χαρακτήρες (ούτε +κάν γραφικούς χαρακτήρες όπως έκαναν κάποτε οι προγραμματιστές στα παιχνίδια για DOS). Η aalib δεν θα μπορούσε να αντικαταστήσει βέβαια την υπέροχη κάρτα +γραφικών σας με μία οθόνη κειμένου 80x24, αλλά είναι σίγουρα εντυπωσιακό να βλέπει κανείς φράκταλς, φωτογραφίες, dithering, antialising και error diffusion να +γίνονται μόνο με γράμματα και αριθμούς διαφορετικής φωτινότητας. Το bb ήταν από τα πράγματα που έκαναν πολλούς να αναλογιστούν τί μπορέι να κάνει ένας +ταλαντούχος προγραμματιστής όταν έχει όρεξη, ανεξάρτητα από τις δυνατότητες του hardware. Από την άλλη, το VMWare τραβούσε εύκολα τα βλέματα, αφού δεν είναι και +τόσο συνηθισμένο να βλέπει κανείς ένα μέσης κατηγορίας μηχάνημα να τρέχει το KDE, σε ένα παράθυρο να τρέχει Windows NT και σε ένα άλλο να κάνει εγκατάσταση +Windows 98!!! + +Κάτι που μας ενθουσίασε ως σύλλογο ήταν ότι μερικοί από τους επισκέπτες του περιπτέρου ήρθαν να μας δουν για να λύσουν ειδικά προβλήματα για τα οποία η αγορά +δεν μπορούσε να τους δώσει λύση. Χαρακτηριστικά, ένας από τους επισκέπτες μας είπε ότι ένας φίλος του τον συμβούλευσε \"αν δεν βρεις άκρη \[με το πρόβλημά σου\] +πήγαινε στους λινουξάδες, αυτοί κάτι θα κάνουν\"!!! Αυτό δείχνει κατά την γνώμη μου, ότι σιγά σιγά ο κόσμος αντιλαμβάνεται τις δυνατότητες του ελεύθερου +λογισμικού και ότι αυτό εδραιώνεται ως μια σημαντική εναλλακτική λύση στην συνείδηση των ανθρώπων της πληροφορικής. (Πληροφοριακά, το συγκεκριμένο πρόβλημα είχε +να κάνει με την υποστήριξη πολυτονικών γραμματοσειρών και πληκτρολογίου και η λύση δεν είναι μακριά.) + +Η παρουσία μας στην έκθεση δεν είχε σαν στόχο μόνο την επικοινωνία με το \"ευρύ κοινό\", αλλά και με τους υπόλοιπους εκθέτες. Καταρχήν, έγινε φανερό στους +ανθρώπους που στελέχωναν τα γύρω περίπτερα ότι υπάρχει ένα μεγάλο ενδιαφέρον από το κοινό για το linux. Απόδειξη για αυτό ήταν τα (καλοπροαίρετα) σχόλια της +μορφής \"πώς πάτε, χωράτε στο περίπτερο ή θα εκραγεί;\" για τον κόσμο που συνωστιζόταν γύρω από τα μηχανήματα με linux. Ενδεικτικό είναι και το γεγονός ότι οι +δύο τηλεοπτικές εκπομπές με αντικείμενο την πληροφορική που είχαν περίπτερα στην Infosystem99, το PCTV της ΕΤ3 και το five on-line του Alter 5 φιλοξένησαν +συνεντεύξεις μελών του HELLUG και παρουσίασαν το περίπτερό μας. + +Αρκετές μικρές και μεγάλες εταιρείες (μερικές είναι και στο χρηματιστήριο) μας πλησίασαν και μας είπαν ότι ενδιαφέρονται να πουλήσουν μηχανήματα με linux, και +ρώτησαν ή ζήτησαν βοήθεια για τον τρόπο που θα μπορούσαν να παρέχουν υποστήριξη στους λινουξάδες πελάτες τους. Το ενδιαφέρον ήταν γνωστό (ή έστω πολλοί από εμάς +το αναμέναμε να εκδηλωθεί αργά ή γρήγορα), αλλά η ζήτηση σε επαγγελματικό επιπεδο για ανθρώπους που να γνωρίζουν καλά το linux ήταν μία ευχάριστη έκπληξη. +Υπήρξαν ακόμη και εταιρείες που αναπτύσουν λογισμικό που ενδιαφέρθηκαν για το linux ως πλατφόρμα και συζήτησαν εκτενώς μαζί μας. Ενδιαφέρον ήταν ακόμη, ότι ένα +πρόχειρο \"σκανάρισμα\" στο δίκτυο της έκθεσης αποκάλυψε ότι εκτός από τα μηχανήματα με linux στο περίπτερο του HELLUG και στα Μακεδονικά Περιφερειακά υπήρχε +και ένα στο περίπτερο της Canon!!! (Και μιας και μιλάμε για σκανάρισμα, είναι απίστευτο το πόσο απροστάτευτα από άποψη δικτυακής ασφάλειας ήταν τα μηχανήματα +στα περισσότερα περίπτερα\...) + +Βέβαια, δεν επισκέφθηκαν μόνο οι άλλοι το περίπτερο του HELLUG, αλλά και οι λινουξάδες τα γειτονικά περίπτερα. Γενικά, τα μέλη του HELLUG που γύριζαν ήταν +μάλλον ενας μικρός μπελάς για τους υπόλοιπους εκθέτες, αφού οι ερωτήσεις τους ήταν κατά κανόνα \"δύσκολες\"\... Ε, και όπου υπήρχε πρόκληση, οι ενθουσιώδεις +λινουξάδες δεν την άφηναν. Όπως για παράδειγμα ένα PC (με Windows στην αρχή) που είχε την προκλητική ταμπέλα \"ΣΒΗΣΕ ΜΟΥ ΤΟΝ ΔΙΣΚΟ - ΔΕΝ ΠΑΘΑΙΝΩ ΤΙΠΟΤΑ\" που +μετά από μερικές ώρες είχε φορμαριστεί και στην θέση των Windows κάποιοι είχαν εγκαταστήσει Debian Linux! (Την επόμενη μέρα ο εκθέτης είχε εγκαταστήσει πάλι +Windows, αλλά η ταμπέλα είχε εξαφανιστεί\...). Όλα αυτά όμως έγιναν με καλή διάθεση και νομίζω ότι το αποτέλεσμα είναι να ανεβαίνει ο \"πήχης\" όσον αφορά στο +επίπεδο των παρεχόμενων υπηρεσιών και πληροφοριών προς το κοινό. + +Οι εντυπώσεις που αποκόμησαν τα μέλη του συλλόγου από την παρουσία τους στην Infosystem99 νομίζω ότι είναι στο σύνολό τους θετικές: βρεθήκαμε για μία ακόμη φορά +όλοι (έστω αρκετοί) μαζί, γνωρίσαμε ανθρώπους που ασχολούνται με το linux αλλά μέχρι τώρα δεν είχαν επικοινωνήσει μαζί μας και προσφέραμε σε πάρα πολλούς άλλους +την ευκαιρία να γνωρίσουν το linux και την φιλοσοφία του. Είχαμε ακόμη την ευκαιρία να δείξουμε στις εταιρείες πληροφορικής ότι το linux είναι ένας χώρος που +έχει ενδιαφέρον από άποψη αγοράς αλλά και ως πλατφορμα ανάπτυξης λογισμικού. Και τέλος, περάσαμε καλά στην πανέμορφη Θεσσαλονίκη! diff --git a/content/articles/19/03_cvs.md b/content/articles/19/03_cvs.md new file mode 100644 index 0000000..7d50aeb --- /dev/null +++ b/content/articles/19/03_cvs.md @@ -0,0 +1,331 @@ ++++ +title = 'CVS: Concurrent Versions System (\...)' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης για το Magaz ( magaz.hellug.gr(http://magaz.hellug.gr) )' +issue = ['Magaz 19'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το CVS (Concurrent Versions System) είναι ένα σύστημα που έχει αναπτυχθεί από προγραμματιστές για προγραμματιστές. Δηλαδή, θα μου πείτε; Ε, λοιπόν, είναι +φτιαγμένο για \`\`προγραμματιστικούς\'\' σκοπούς. Ας δούμε όμως αναλυτικά τι κάνει, πώς λειτουργεί, και πώς μπορεί να μας φανεί χρήσιμο.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. ΕΙΣΑΓΩΓΗ** +------------------------------------- + +- [1.1 ΤΙ ΚΑΝΕΙ ΤΟ CVS](#ss1.1) +- [1.2 ΠΩΣ ΛΕΙΤΟΥΡΓΕΙ ΤΟ CVS.](#ss1.2) + +**2. ΣΤΗΣΙΜΟ CVS ΣΤΟΝ ΥΠΟΛΟΓΙΣΤΗ ΣΑΣ** +------------------------------------------------------------ + +- [2.1 LOGIN ΚΑΙ ΕΡΓΑΣΙΑ ΣΕ ΕΝΑ CVS SERVER](#ss2.1) +- [2.2 ΑΝΑΝΕΩΣΗ ΤΟΥ ΚΩΔΙΚΑ](#ss2.2) + +**3. CVS FOR DEVELOPERS** +----------------------------------------------- + +- [3.1 Αλλαγές στον κώδικα και πώς να τις ενσωματώσουμε στο Repository του Project.](#ss3.1) +- [3.2 CONFLICTS](#ss3.2) +- [3.3 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΑΛΛΑΓΩΝ](#ss3.3) +- [3.4 ΠΡΟΣΘΕΣΗ - ΑΦΑΙΡΕΣΗ ΑΡΧΕΙΩΝ](#ss3.4) + +**4. ΕΠΙΛΟΓΟΣ** +------------------------------------- + + +### [1. ΕΙΣΑΓΩΓΗ]{#s1} + +### [1.1 ΤΙ ΚΑΝΕΙ ΤΟ CVS]{#ss1.1} + +Το cvs θα λέγαμε ότι χρησιμοποιείται για την διατήρηση και ανάπτυξη ενός προγραμματιστικού έργου (module) μεγάλης εμβέλειας, όπου πολλοί προγραμματιστές μπορούν +να εργάζονται ταυτόχρονα - ή σχεδόν ταυτόχρονα όπως θα δούμε και παρακάτω - για την ολοκλήρωση του. Διατηρεί μια δομή με αρχεία, καταλόγους αρχείων και κώδικα +που είναι προσπελάσιμα από κάθε προγραμματιστή που έχει τη διάθεση να συνεισφέρει. Φυσικά, ο καθένας μπορεί να κάνει αλλαγές που πιστεύει ότι είναι σωστές για +την καλύτερη λειτουργία του υπό αν άπτυξη προγράμματος. + +### [1.2 ΠΩΣ ΛΕΙΤΟΥΡΓΕΙ ΤΟ CVS.]{#ss1.2} + +Η αρχή λειτουργίας του είναι πολύ απλή. Σε κάποιο server κάπου στο παγκόσμιο δίκτυο, είναι συγκεντρωμένος ο κώδικας ενός προγράμματος. Όταν κάποιος από την +ομάδα των προγραμματιστών που έχουν αναλάβει το project θέλει να κάνει μια αλλαγή στον κώδικα, αρκεί να συνδεθεί με τον εν λόγω server και να κατεβάσει το +αρχείο στο οποίο θέλει να κάνει την αλλαγή. + +Κάνει την αλλαγή και μετά το ανεβάζει\... Φυσικά, οι λέξεις \"ανεβάσει\" και \"κατεβάσει\" δεν είναι οι καλύτερες για την περιγραφή της εργασίας που γίνεται, +μια και το CVS αναλαμβάνει να \`\`ενημερώσει\'\' όλα τα αρχεία που έχουν αλλάξει. Αυτό σημαίνει, ότι ο χρήστης στον τοπικό του δίσκο έχει όλα τα αρχεία του +project (ακόμα και το README) ακόμα και αν το μόνο που κάνει είναι\... ορθογραφική διόρθωση. + +Μόλις γίνει μια ενημέρωση, το CVS \`\`μαρκάρει\'\' την νέα έκδοση με ένα minor αριθμό παραπάνω. Αυτό σημαίνει ότι από 1.3 το κάνει 1.4 (Φυσικά αυτή η αλλαγή +μπορεί να είναι και από 1.5.3.4.2 σε 1.5.3.4.3). Την ίδια στιγμή, ο χρήστης που έκανε την αλλαγή, είναι υποχρεωμένος να γράψει και μια μικρή παρατήρηση. Επίσης +μαρκάρεται η ώρα της αλλαγής και το όνομα αυτού που την έκανε. Κάτι τέτοιο βοηθάει τους άλλους προγραμματιστές να μπορούν με ευκολία να απαντήσουν σε ερωτήματα +του τύπου + +- Ποιός έκανε την αλλαγή; +- Πότε έγινε; +- Γιατί έγινε; +- Τι προσφέρει στον κώδικα αυτή η αλλαγή; + +Αλλά πριν συνεχίσουμε, ας δούμε πώς μπορούμε να στήσουμε το δικό μας δέντρο CVS με απλές εντολές. + + +### [2. ΣΤΗΣΙΜΟ CVS ΣΤΟΝ ΥΠΟΛΟΓΙΣΤΗ ΣΑΣ]{#s2} + +Πριν να μπορέσουμε να τρέξουμε και να κάνουμε την ενημέρωση, πρέπει να έχουμε δηλώσει μια μεταβλητή συστήματος, την CVSROOT. Αυτή είναι η διαδρομή στον +απομακρυσμένο server που βρίσκονται τα προς λήψη αρχεία. + +Αν και λογικά για να διαβάζετε αυτό το άρθρο ξέρετε πως να θέσετε μια μεταβλητή συστήματος, θυμίζω για τους νέους: Ο τρόπος είναι ανάλογος του shell που +χρησιμοποιεί ο καθένας. + +Η πλειοψηφία έχει bash (CVSROOT=\':pserver:anonymous\@cvs.enlightenment.org:/cvs/enlightenment\' ; export CVSROOT) και υπάρχουν και λίγοι (αλλά δυνατοί!) με csh +ή κάτι αντίστοιχο (setenv CVSROOT = \':pserver:anonymous\@cvs.enlightenment.org:/cvs/enlightenment\') + +### [2.1 LOGIN ΚΑΙ ΕΡΓΑΣΙΑ ΣΕ ΕΝΑ CVS SERVER]{#ss2.1} + +Επόμενο βήμα είναι να κάνουμε login σε ένα CVS server, στην παραπάνω περίπτωση θα κάνουμε Login στον CVS server που περιέχει τον enlightenment. + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs login +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε αυτό το σημείο θα σας ζητήσει ένα password, πατήστε απλά ENTER. Δεν θα χρειαστεί να ξανακάνουμε αυτό το βήμα, εκτός αν κόψουμε πλέον τη σύνδεση! + +Από αυτό το σημείο και πέρα, θα πάρουμε όλη τη δομή καταλόγου του project στο δίσκο μας. + +**ΣΗΜΕΙΩΣΗ: Αν και για να μπορέσουμε να κάνουμε τον enlightenment να δουλεύει, πρέπει να κατεβάσουμε πολλά modules, εδώ θα αναφερόμαστε σε ένα για συντομία +χρόνου και χώρου.** + +Ο enlightenment αποτελείται από πολλά modules. Αυτά είναι: + +- e +- Eterm +- imlib +- fnlib +- esound +- audiofile + +Εμείς θα ασχοληθούμε με το module της imlib, μιας βιβλιοθήκης διαχείρισης γραφικών (μπορείτε φυσικά να διαλέξετε ένα άλλο module) + +Την κατεβάζουμε λοιπόν τοπικά με την εντολή: + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs -z3 checkout imlib +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Φυσικά, μπορούμε να πάρουμε και πάνω από ένα module με μια εντολή: + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs -z3 checkout imlib fnlib ... +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε αυτό το σημείο έχουμε κατεβάσει όλο τον κώδικα του module, και είμαστε έτοιμοι να κάνουμε τις αλλαγές που θα κρίνουμε απαραίτητες ή αν δεν είμαστε στο +development team απλά να κάνουμε compile τον νέο μας κώδικα! + +**ΠΡΟΣΟΧΗ: Δεν είναι ανάγκη να κάνουμε καμμία αλλαγή, οι άνθρωποι που γράφουν τον κώδικα ξέρουν τι κάνουν.** Αν και εσείς ξέρετε τι κάνετε, δεν το βρίσκω πρέπoν +να τους αλλάξουμε των κώδικά τους!! (εκτός και αν ανήκετε στο development team). + +Ας δούμε το directory structure που δημιουργήθηκε στο δίσκο μας. Έχει δημιουργηθεί ο κατάλογος `imlib/` που περιέχει όλον τον κώδικα, και ένας κατάλογος `CVS/`, +στον οποίο το cvs έχει καταγεγραμμένες πληροφορίες για καθένα από τα αρχεία ώστε να μπορεί να καταλάβει τι αλλαγές κάναμε από τότε που το κατεβάσαμε (Αυτό +χρειάζεται για την περίπτωση που θέλουμε να το ανεβάσουμε με δικές μας αλλαγές, ώστε να ξέρει τι log file να δημιουργήσει). + +Έχουμε πλέον την πιο νέα έκδοση του πακέτου αυτού! + +Φυσικά, αυτό δεν είναι πάντα καλό, μια και πολλές φορές το πακέτο που μόλις κατεβάσαμε δεν κάνει compile καν! Φυσικό, όπως αντιλαμβάνεστε, μια και μιλάμε για +ΧΟΝΤΡΟ development, όπου συνήθως ενσωματώνονται νέα χαρακτηριστικά. Είναι λοιπόν πιθανότατο ακόμα και αν κάνει compile να μας \`\`κολλάει\'\' συνεχώς (core +dumped κ.λπ.). Σε αυτή την περίπτωση ή προσπαθούμε να το φτιάξουμε μόνοι μας, ή\... περιμένουμε να βγει νεότερη έκδοση. Σε καμία περίπτωση μη στείλετε mail +στους developers να τους πείτε \`\`δεν δουλεύει αυ τό\'\'. Πιστέψτε με, το ξέρουν καλύτερα από εμάς!! + +### [2.2 ΑΝΑΝΕΩΣΗ ΤΟΥ ΚΩΔΙΚΑ]{#ss2.2} + +Την επόμενη φορά που θα πάμε στο CVS server για ανανέωση, δεν θα κάνουμε checkout, αλλά update. Κάτι τέτοιο σημαίνει ότι θα μας έρθουν μόνο τα πακέτα που έχουν +αλλάξει, και όχι όλα από την αρχή. Αυτό μπορεί να γίνει με την εντολή: + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs -z3 update -Pd imlib +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Φυσικά, κάνουμε την προσευχή μας να κάνει compile. Αν και πιστεύω ότι δεν θα εισακουστεί (μιλάω εκ πείρας), πάντα υπάρχουν οι εξαιρέσεις, και πάντα γίνονται +θαύματα. + +Οι απλοί χρήστες που θέλουν να έχουν την πιο νέα έκδοση του λογισμικού στο δίσκο τους, και όχι να γράφουν κώδικα, **μόλις τελείωσαν το διάβασμα αυτού του +άρθρου**. Στη συνέχεια, αυτό που εξηγείται είναι το πως το cvs καταφέρνει να τα βγάζει πέρα με τυχόν conflicts (π.χ.: δύο developers την ίδια στιγμή έκαναν +revisions στο ίδιο αρχείο), το πως μπορούμε να δημιουργήσουμε νέα αρχεία ή και ολόκληρα directories και να τα συμπεριλάβουμε στο repository του module. + +Όσοι δεν ασχολείστε με προγραμματισμό, μην συνεχίσετε το διάβασμα, εκτός αν θέλετε να μάθετε εγκυκλοπαιδικά πως δουλεύει το CVS. Δεν είναι τίποτα δυσνόητο, αλλά +κατά πάσα πιθανότητα δε θα σας ενδιαφέρει. + + +### [3. CVS FOR DEVELOPERS]{#s3} + +### [3.1 Αλλαγές στον κώδικα και πώς να τις ενσωματώσουμε στο Repository του Project.]{#ss3.1} + +Οι αλλαγές που τυχόν θα γίνουν θα γραφούν τοπικά στο δικό σας δίσκο, και όχι στο server. Αυτό πάει να πει ότι οι άλλοι developers δεν θα δουν τις αλλαγές σας, +μέχρι να σιγουρευτείτε ότι αυτό που κάνατε δουλεύει και μόνο αν του το πείτε θα τα ανεβάσει. Αυτό γίνεται με την εντολή **`/cvs commit`** + +Πριν γίνει όμως το γράψιμο στο server, πρέπει πάνω του να υπάρχει η έκδοση των αρχείων που είχατε κατεβάσει ώστε τυχόν αλλαγές που έκαναν άλλοι developers να +μην χαθούν (αυτός είναι ο σκοπός του directory CVS/ που έχει δημιουργηθεί στην ιεραρχία καταλόγων στο δίσκο σας). Κάνουμε λοιπόν ένα + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs update imlib +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έστω ότι κάναμε αλλαγές στο αρχείο README, αλλά άλλος ένας έχει κάνει αλλαγές τόσο στο ίδιο αρχείο όσο και στο αρχείο Makefile στο μεσοδιάστημα. Μετά την εντολή +update, βλέπουμε την έξοδο: + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs update: Updating . +> U Makefile +> RCS file: /imlib/README +> retrieving revision 1.5 +> retrieving revision 1.6 +> Merging differences between 1.5 and 1.6 into README +> M README +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Όλα αυτά σημαίνουν: + +> U Makefile + +Οι αλλαγές που έκανε ο άλλος κατέβηκαν στο δίσκο μας. + +> RCS file: /imlib/README +> retrieving revision 1.5 +> retrieving revision 1.6 +> Merging differences between 1.5 and 1.6 into README + +Αυτό μας δείχνει ότι οι δύο revisions 1.5 και 1.6 του αρχείου README συγχωνεύτηκαν σε ένα αρχείο, το README, τοπικά, στο δίσκο μας. + +> M README + +Το γράμμα Μ, φανερώνει ότι το αρχείο έχει αλλαχθεί από εμάς, και ότι οι αλλάγες δεν ανέβηκαν ακόμα (φυσικό αυτό, ένα update κάναμε. + +Ας μην ξεχνάμε ότι τώρα το αρχείο README περιλαμβάνει και τις αλλαγές του άλλου!!! Καλό (απαραίτητο για να είμαι ακριβής) θα είναι να κάνουμε έναν έλεγχο να +δούμε αν δουλεύει ακόμα ο κώδικας. Φυσικά, στην περίπτωσή μας, δεν είναι ανάγκη, γιατί είναι ένα text κείμενο, που δεν επηρεάζει τη λειτουργικότητα του όλου +project (αυτό δεν σημαίνει ότι δεν θα ήταν καλό να ελέγξουμε τί αλλαγές έκανε ο άλλος). + +Καλό θα είναι πριν κάνουμε commit, να ξανακάνουμε update, ώστε στο διάστημα που κάναμε τον έλεγχο να μην έγινε καμμία άλλη αλλαγή (πράγμα σπάνιο). Η έξοδος, +καλώς εχόντων των πραγμάτων, θα είναι: + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs update: Updating . +> M README +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\`Αρα, οι μόνες αλλαγές είναι στο δίσκο μας. Πάμε για commit. + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> $ cvs commit +> README +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τώρα θα μας ζητηθεί να γράψουμε ένα μικρό κείμενο που θα εξηγεί στους άλλους τι αλλαγές κάναμε και γιατί. Μόλις τελειώσουμε, θα πάρουμε από το CVS: + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> Checking in README; +> /imlib/README,v <-- README +> new revision: 1.7; previous revision: 1.6 +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τώρα, οι αλλαγές μας θα είναι πάνω στο server, και οι άλλοι προγραμματιστές όταν θα κάνουν cvs update θα τις πάρουν στο δίσκο τους. + +### [3.2 CONFLICTS]{#ss3.2} + +Κάτι τέτοιο είναι εφικτό στην περίπτωση που οι γραμμές που αλλάζουν οι δύο developers δεν είναι ίδιες. Αν όμως τύχει και αλλάζουν και οι δύο την ίδια γραμμή; + +Σε αυτή την περίπτωση έχουμε conflict, και το cvs μας αφήνει να βρούμε μόνοι μας τη λύση. Μας αφήνει με ένα αρχείο, στο οποίο φαίνεται η περιοχή που έγινε το +conflict, περιέχει και τις δύο απόψεις (τη δική μας και αυτή που έρχεται σε αντίθεση με τη δική μας, του άλλου προγραμματιστή) και είμαστε αναγκασμένοι να το +ελέγξουμε, να κάνουμε τυχόν αλλαγές και να ξανακάνουμε commit. Αυτό, αν και ακούγεται δύσκολο, είναι πολύ εύκολο (και φυσικά απαραίτητο) γιατί ο τρόπος που μας +έχει φτιάξει το αρχείο βοηθάει στην κ ατανόηση του προβλήματος που έχει δημιουργηθεί. Από εκεί και πέρα, είναι απαραίτητο να έχουμε σωστή κρίση ώστε να αφήσουμε +στον κώδικα την καλύτερη λύση από τις δύο προτεινόμενες (ακόμα και αν αυτή δεν είναι η δική μας!) + +### [3.3 ΠΑΡΑΚΟΛΟΥΘΗΣΗ ΑΛΛΑΓΩΝ]{#ss3.3} + +Για να μπορέσουμε να δούμε τις αλλαγές που έχουν γίνει σε ένα αρχείο του project, θα χρησιμοποιήσουμε την εντολή **`cvs log`** + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs log README +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα μας παρουσιαστεί ένα κατεβατό με μια περιγραφή του αρχείου, τον τρέχοντα αριθμό αναθεώρησης, καθώς και όλες τις αναθεωρήσεις που του έχουν γίνει, καθώς και +το log για κάθε μια από αυτές. + +### [3.4 ΠΡΟΣΘΕΣΗ - ΑΦΑΙΡΕΣΗ ΑΡΧΕΙΩΝ]{#ss3.4} + +Η πρόσθεση και η αφαίρεση αρχείων γίνεται όπως και με τις αλλαγές σε αρχεία, αφού πρώτα καταγραφούν οι αλλαγές στο cvs directory που έχει δημιουργήσει. Με αυτό +τον τρόπο (και μόνο) μπορεί το cvs να ξεχωρίσει τι αλλαγές έχουν γίνει. + +#### ΠΡΟΣΘΕΣΗ + +Το να προσθέσουμε απλά ένα αρχείο στο directory structure του δίσκου μας, δεν είναι αρκετό. Σε αυτή την περίπτωση, το cvs θα μας πει με πολύ κομψό τρόπο ότι δεν +έχει ακουστά αυτό το αρχείο ακόμα (CVS doesn\'t know about this file yet) στο επόμενο update. + +Για να το προσθέσουμε, πρέπει να κάνουμε cvs add. Έστω ότι δημιουργήσαμε το αρχείο colors.c. Για να ολοκληρωθεί η διαδικασία πρόσθεσης του αρχείου, κάνουμε τα +εξής βήματα (με \$ αρχίζουν οι εντολές που δίνουμε, τα άλλα είναι η έξοδος του cvs). + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> $ cvs add colors.c +> cvs add: scheduling file `colors.c' for addition +> cvs add: use 'cvs commit' to add this file permanently +> $ cvs update +> cvs update: Updating . +> A colors.c --- The file is marked for addition. +> $ cvs commit colors.c +> (...Το cvs θα μας ζητήσει να δώσουμε εδώ ένα κείμενο για το log...) +> RCS file: /imlib/colors.c +> done +> Checking in colors.c; +> /imlib/colors.c,v <-- colors.c +> initial revision: 1.1 +> done +> $ +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Παρατηρούμε και την αρχική αρίθμηση, που είναι από το 1.1. Από αυτή τη στιγμή το αρχείο που προσθέσαμε βρίσκεται στο repository του project, και οι χρήστες που +θα κάνουν update, θα το πάρουν μαζί με όλα τα άλλα του project. + +#### ΑΦΑΙΡΕΣΗ + +Αν απλά αφαιρέσουμε ένα αρχείο από το directory structure του σκληρού μας, φυσικά και δεν φεύγει από το server. Μάλιστα, όταν κάνουμε cvs update, το αρχείο θα +επαναδημιουργηθεί. Αυτό βοηθάει πολύ σε περιπτώσεις που έχουμε κάνει πολλές αλλαγές σε ένα αρχείο και αποφασίσουμε ότι κάναμε λάθος και τελικά δεν έπρεπε να +γίνουν αλλαγές. Σε αυτή την περίπτωση απλά σβήνουμε το αρχείο και κάνουμε ένα update. + +Είναι κατανοητό ότι η αφαίρεση ενός αρχείου είναι επικίνδυνο παιχνίδι, και γιαυτό το cvs δεν αφήνει πλήρη ελευθερία στον χρήστη. Φυσικά, μπορεί να δημιουργηθεί +μια \`\`αφαίρεση\'\', η οποία όμως θα είναι πλασματική. Δηλαδή: Για να διαγράφεί ένα αρχείο, πρέπει πρώτα να το σβήσουμε από το δίσκο μας, και να γράψουμε την +εντολή + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> cvs rm `filename' +> cvs commit `filename' +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πάντως, αυτό δεν το καταστρέφει από το server. Απλά φτιάχνει μια νέα \`\`αναθεώρηση\'\' στην οποία χαρακτηρίζεται ως \`\`ανύπαρκτο\'\'. Υπάρχει ακόμα όμως, και +μπορεί να ανακληθεί π.χ. με την εντολή cvs log. + + +### [4. ΕΠΙΛΟΓΟΣ]{#s4} + diff --git a/content/articles/19/04_boot.md b/content/articles/19/04_boot.md new file mode 100644 index 0000000..1179545 --- /dev/null +++ b/content/articles/19/04_boot.md @@ -0,0 +1,112 @@ ++++ +title = 'Διαδικασία εκκίνησης του Υπολογιστή.' +date = '1999-11-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@freemail.gr)' +issue = ['Magaz 19'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό αποτελεί συνέχεια του αντίστοιχου άρθρου του τεύχους 13. Έχει σκοπό να εμβαθύνει περισσότερο στο εσωτερικό και στη λειτουργία του αρχείου +/etc/inittab και του καταλόγου /etc/rc.d/* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. init και /etc/inittab** +--------------------------------------------------- + +**2. Τα αρχεία /etc/inittab και /etc/rc.d/rc.sysinit** +----------------------------------------------------------------------------- + +**3. Το αρχείο /etc/rc.d/rc.local** +---------------------------------------------------------- + +**4. Οι κατάλογοι rcX.d** +------------------------------------------------ + + +### [1. init και /etc/inittab]{#s1} + +Η man page του init αναφέρει: \"Το init είναι ο πατέρας όλων των processes\". Ο πρωταρχικός του ρόλος είναι να δημιουργήσει processes από τις οδηγίες που του +δίνει το /etc/inittab. Ο τρόπος με τον οποίο το Linux εκκινεί τα processes μετά από το boot του kernel, προέρχεται από μία άλλη έκδοση του UNIX, την System V. +Στην πραγματικότητα η εντολή init είναι συμβατή με την System V init εντολή. Παρόλο που η init χαρακτηρίζεται ως το τελευταίο βήμα της διαδικασίας του boot του +kernel, είναι η πρώτη εντολή που ρυ θμίζει και προετοιμάζει το σύστημά σας για χρήση. Η init δουλεύει διαβάζοντας το /etc/inittab και τρέχοντας τα scripts του +καταλόγου /etc/rc.d σύμφωνα βέβαια με το επιθυμητό runlevel. Κάθε script μπορεί να σταματήσει ή να ξεκινήσει μια υπηρεσία, όπως π.χ. την υπηρεσία για το mail, +τα news ή το Web. + +Αυτή είναι μιά άποψη του καταλόγου /etc/rc.d (προσέξτε ότι από διανομή σε διανομή, τα runlevels δεν είναι ίδια): + + init.d/ + rc* + rc.local* + rc.sysinit* + rc0.d/ + rc1.d/ + rc2.d/ + rc3.d/ + rc4.d/ + rc5.d/ + rc6.d/ + +Στον κατάλογο /etc/rc.d/init.d θα βρείτε έναν αριθμό από scripts που χρησιμεύουν στο να σταματούν ή να ξεκινούν τις διάφορες υπηρεσίες. + + +### [2. Τα αρχεία /etc/inittab και /etc/rc.d/rc.sysinit]{#s2} + +Το σπουδαιότερο script είναι το rc.sysinit, καθώς είναι το πρώτο script που εκτελείται στο Linux. Οι λειτουργίες του script αυτού είναι οι εξής: + +- Ορίζει το PATH (κάνει export τη μεταβλητή PATH) +- Ρυθμίζει το networking +- Ξεκινάει το swapping για τη virtual memory +- Ορίζει το hostname του συστήματος +- Ελέγχει το root partition για πιθανές επιδιορθώσεις (fsck) +- Ελέγχει τα quotas του root filesystem +- Ενεργοποιεί τα user και group quotas για το root filesystem +- Ξανακάνει mount το root filesystem, αλλά αυτήν την φορά read/write +- Ελέγχει τον πίνακα των mounted filesystems, τον /etc/mtab +- Ετοιμάζει το σύστημα για το φόρτωμα των modules +- Βρίσκει τα modules dependencies +- Ελέγχει τα υπόλοιπα filesystems για πιθανές επιδιορθώσεις +- Κάνει mount όλα τα υπόλοιπα filesystems +- Σβήνει πολλά /etc αρχεία, όπως π.χ. το /etc/fastboot +- Σβήνει τα UUCP lock αρχεία +- Ρυθμίζει την ώρα του συστήματος +- Ξεκινάει το swap partition +- Ετοιμάζει τις serial ports +- Φορτώνει τα modules + +Το rc.sysinit script εκτελείται από την init δια μέσου του /etc/inittab. Το inittab περιέχει την εξής γραμμή: + + # System initialization. + si::sysinit:/etc/rc.d/rc.sysinit + + +### [3. Το αρχείο /etc/rc.d/rc.local]{#s3} + +Μέχρι τώρα είδαμε ότι μετά το boot του kernel, η εντολή τρέχει το script rc.sysinit. Στη συνέχεια, η εντολή init εκτελεί το script rc.local. Αν κοιτάξετε το +περιεχόμενο του rc.local, θα διαπιστώσετε ότι αυτό το script μαζεύει πληροφορίες για το όνομα της διανομής σας και για την αρχιτεκτονική του υπολογιστή σας και +τοποθετεί αυτές τις πληροφορίες στο αρχείο /etc/issue. Το περιεχόμενο του αρχείου αυτού αναδεικνύεται κατά τη διαδικασία του login από το χρήστη. + +Αναλυτικότερα, σε ένα RedHat σύστημα, το rc.local διαβάζει το αρχείο /etc/redhat-release, που περιέχει την έκδοση της διανομής, και στη συνέχεια εκτελεί τις +εντολές **uname -r**, που εμφανίζει την έκδοση του kernel, και **uname -m**, που εμφανίζει τον τύπο του επεξεργαστή (π.χ. 686). Στο τέλος, τοποθετεί όλες αυτές +τις πληροφορίες στο αρχείο /etc/issue (με echo \>\> ). + +**Σημείωση:** Ο σκοπός του rc.local δεν είναι να αποτελεί ένα μέρος για να βάζει κανείς εντολές για τη ρύθμιση (initialization) του συστήματος, παρόλο που +μερικοί το κάνουν. Στο BSD UNIX, το rc.local χρησιμοποιείται για τον έλεγχο των δικτυακών υπηρεσιών. Το Linux δεν χρησιμοποιούσε πάντα τα ίδια initialization +scripts, οπότε μπορεί να βρείτε διαφορές μεταξύ των RedHat, SuSE, Slackware και των άλλων διανομών. + + +### [4. Οι κατάλογοι rcX.d]{#s4} + +Η επόμενη εργασία που κάνει η εντολή init είναι η εκτέλεση των ειδικών scripts για κάθε runlevel. Μέσα στον κατάλογο /etc/rc.d, όπως είδαμε, υπάρχουν οι +κατάλογοι rcX.d, όπου X είναι ο αριθμός του αντίστοιχου runlevel (από 0 έως 6). Αν κοιτάξετε τα περιεχόμενα ενός από αυτούς του καταλόγους, θα δείτε οτι +περιέχουν links στα διάφορα scripts του καταλόγου /etc/rc.d/init.d. Η μορφή των links είναι κάπως έτσι: + + S10network ή + K10network + +Το γράμμα S ή K αντιστοιχεί στην εκκίνηση ή στον τερματισμό μιάς υπηρεσίας (S από το Start και K από το Kill). Ο αριθμός δίπλα από το γράμμα χρησιμεύει για να +τρέχουν τα scripts στη σωστή σειρά (για παράδειγμα να μην κάνει unmount τα partitions πριν κλείσει το network file-sharing). + diff --git a/content/articles/19/05_benchmarks.md b/content/articles/19/05_benchmarks.md new file mode 100644 index 0000000..924a393 --- /dev/null +++ b/content/articles/19/05_benchmarks.md @@ -0,0 +1,181 @@ ++++ +title = 'Benchmark(et)ing\...' +date = '1999-11-01T00:00:00Z' +description = '' +author = 'Κυριάκος Κ. Σκαφάς(mailto:kskafas@usa.net)' +issue = ['Magaz 19'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Κάποια σχόλια σχετικά με τα benchmarks - συγκριτικά μεταξύ NT και Linux που είδαν πρόσφατα το φως της δημοσιότητας.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Υπόσχομαι οτι δεν θα μου γίνει συνήθεια, αλλά, τουλάχιστον αυτή τη πρώτη φορά, θα πρέπει να επεκταθώ σε κάτι που δεν έχει παρά ελάχιστη μόνο σχέση με το θέμα +που θα πραγματευθώ παρακάτω. Την αγωνία που βιώνει ο αρθρογράφος πριν, αλλά και κατά την αναζήτηση και ανάπτυξη του θέματος. Ποιό ύφος θα πρέπει να υιοθετήσω, +να γράψω σε πρώτο ή τρίτο πρόσωπο, να φαίνομαι απόμακρος ή προσιτός; Επέλεξα να παραμείνω απλώς ο εαυτός μου. Για να είμαι ειλικρινής, όμως, δεν ήταν αυτό το +κύριο πρόβλημα που αντιμετώπισα. Πιό θέμα να διαλέξω; Πόσο να το αναπτύξω; Η απάντηση ήταν σχεδόν αυτονόητη: αφού αυτό θα είναι το πρώτο άρθρο, το περιεχόμενο +θα πρέπει να έχει πανηγυρικό ύφος. Θα πρέπει να γράψω για την ανωτερότητα του Linux έναντι άλλων λειτουργικών συστημάτων, όπως αυτών της Microsoft. Και τι θα +αποτελούσε την καλύτερη απόδειξη παρά μια παράθεση αποτελεσμάτων γνωστών έγκυρων και έγκριτων συγκριτικών benchmarks; Και ενώ είχα αποφασίσει για τα πάντα, +προέκυψαν τα λεγόμενα Mindcraft Benchmarks. + +Η [Mindcraft](http://www.mindcraft.com) είναι μια εταιρία η οποία αναλαμβάνει για λογαριασμό των εκάστοτε πελατών της να φέρει σε πέρας μελέτες που τους αφορούν +και να δημοσιεύσει τα αποτελέσματα μετά από άδεια τους ( ). Η παραπάνω εταιρία ανέλαβε για λογαριασμό της Microsoft να φέρει +σε πέρας τρεις μελέτες που αφορούν στις επιδόσεις του επαγγελματικού λειτουργικού συστήματος της Microsoft, Windows NT 4.0 αναβαθμισμένα με το Service Pack 4 σε +σχέση με αυτό της [Sun](http://www.sun.com/), Solaris 2.6. ( ), σε σχέση με αυτό της +[Novell](http://www.novell.com/), Netware 5.0 ( ) και τέλος σε σχέση με το +[Linux](http://www.linux.com) και συγκεκριμμένα με το [RedHat](http://www.redhat.com/) Linux 5.2 (έκδοση πυρήνα 2.0.36) αναβαθμισμένο στον πυρήνα (kernel) 2.2.2 +( ), σε αντίστοιχο, παρόμοιο ή και όμοιο υλικό (hardware), των οποίων τα αποτελέσματα δημοσιεύθηκαν +με διαφορά δύο εβδομάδων μεταξύ τους. + +Ευνόητο είναι ο,τι αφού δημοσιεύθηκαν τα αποτελέσματα αυτά ήταν ευνοϊκά για τον πελάτη. Όπως ήταν άλλωστε αναμενόμενο, και στις τρεις περιπτώσεις αντέδρασαν οι +ηττημένοι ( [Novell](http://www.novell.com/advantage/nw5/nw5-mindcraftcheck.html)). Στη πρώτη περίπτωση, η ήττα της Sun εξέπληξε. Το Solaris είναι ένα αυθεντικό +και με μακρά ιστορία Unix, βασισμένο στο AT&T Unix System V με διάφορα στοιχεία από BSD Unix, με αρχιτεκτονική 64bit, με σύστημα αρχειοθέτησης ικανό για γρήγορη +ανάκαμψη από βλάβες (Journalling FileSystem - JFS), με συμμετρική πολυδιεργασία (Symmetrical MultiProcessing - SMP) για ταυτόχρονη χρήση μέχρι 128 επεξεργαστων, +ιδιότητα τέτοια ωστέ πολλοί δικτυωμένοι υπολογιστές να συμπεριφέρονται σαν ένας (clustering) και πολλά άλλα, αναρίθμητα, χαρακτηριστικά τα οποία βελτιώνουν την +ταχύτητα, καθώς και άλλα που δεν την επηρεάζουν. Αντίθετα, στη δεύτερη περίπτωση, η ήττα της Novell ήταν αναμενόμενη, επειδή παρά το γεγονός ο,τι το Netware +έχει την δυνατότητα της πλήρους διαχείρισης από έναν υπολογιστή και όλων των άλλων σε ένα δίκτυο (Novell Directory Services - NDS) και μία από τις καλύτερες +εικονικές μηχανές για την γλώσσα προγραμματισμού Java (Java Virtual Machine - JVM), δεν είχαν καταβληθεί ιδιαίτερες προσπάθειες για την βελτίωση της ταχύτητας +του. Και ενώ αντέδρασαν επίσημα οι παραπάνω εταιρίες δεν δημιουργήθηκε ποτέ θέμα, επειδή δεν αντέδρασαν οι χρήστες και οι χρήστες δεν αντέδρασαν είτε επειδή +ήταν, απλώς, λίγοι, είτε επειδή είχαν ήδη επενδύσει σε ένα από τα παραπάνω λειτουργικά συστήματα, ήταν ευχαριστημένοι και ανεξάρτητα από τα δημοσιεύματα, δεν +ήταν διατεθιμένοι να τα αλλάξουν. Στη τρίτη, όμως, περίπτωση, σχεδόν κυριολεκτικά, αναταράχθηκε το Διαδίκτυο. + +Σύμφωνα με τη μελέτη αυτή, τα Windows NT [αποδείχθηκαν](http://www.mindcraft.com/whitepapers/first-nts4rhlinux.html#exec_summary) κατά 3,7 φορές ταχύτερα του +Linux στον τομέα εξυπηρέτησης στατικών δεδομένων HTTP και κατά 2,5 φορές στον τομέα εξυπηρέτησης SMB. HTTP και SMB ονομάζονται τα προτόκολλα διαμεταγωγής +δεδομένων, όπως ιστοσελίδων και εικόνων, στον παγκόσμιο ιστό (World-Wide Web - WWW) και αρχείων στα δίκτυα Windows, αντίστοιχα. Το λογισμικό (software) για τα +Windows NT αποτελούσαν ο Microsoft Internet Information Server 4.0 και οι ενσωματωμένες υπηρεσίες SMB και για το Linux ο Apache 1.3.4 και η Samba 2.0.1. + +Το υλικό ήταν κοινό, ένας εξυπηρετητής (server) της Dell, ο PowerEdge 6300/400, ο οποίος διαθέτει τέσσερεις επξεργαστες Pentium II Xeon 400MHz, 1 MByte Cache, 1 +GByte RAM, έναν σκληρό δίσκο 9 GBytes και σε συστειχία (Redundant Array of Inexpensive Disks - RAID) οκτώ σκληρούς δίσκους 4 GBytes, τέσσερεις κάρτες δικτύου +Ethernet 100 MBit, και ο οποίος [κοστίζει \$50.000](http://www.mindcraft.com/whitepapers/first-nts4rhlinux.html#products). + +Στο Διαδίκτυο, ο Apache, απολαμβάνει ένα ποσοστό περίπου 54%, το μεγαλύτερο, ακόμη μεγαλύτερο από το άθροισμα των ποσοστών των Netscape και Microsoft, και +υπερδιπλάσιο από του καθενός ξεχωριστά. Ο μεγαλύτερος από τους υποστηρικτές του Apache είναι η International Business Machines (IBM), η οποία δεν χρειάζεται +συστασεις και η οποία τον ενσωμάτωσε στην WebShere, στην λύση της για ηλεκτρονικό εμπόριο (e-commerce). Η Samba αποτελεί τη μοναδική εναλλακτική λύση στη θέση +ενός αυθεντικού εξυπηρετητή SMB και απολαμβάνει, μεταξύ άλλων, της υποστήριξης της Silicon Graphics (πρόσφατα μετoνομάσθηκε σε SGI), της οποίας τα μηχανήματα +χρησιμοποιούνται στην κατασκευή οπτικών F/X σε ταινίες, όπως Terminator 2 και Jurassic Park και η οποία με αυτό συνοδεύει το λειτουργικό σύστημα της. Πρέπει να +σημειωθεί οτι η Microsoft δε δημοσίευσε ποτέ κάποια περιγραφή των χαρακτηριστικών και των λειτουργειών του SMB με αποτέλεσμα οι προγραμματιστές της Samba να +αναγκασθούν να παρακολουθήσουν με ιδιαίτερη προσοχή τα πακέτα δεδομένων που πηγαινοέρχονταν σε δίκτυα που χρησιμοποιούσαν SMB για να καταφέρουν να αναπαράγουν +τη συμπεριφορά του SMB με τη Samba. + +Επίσης, υπάρχουν διάσπαρτες στο Διαδίκτυο πολλές άλλες μελέτες πρόσφατες και παλαιότερες, οι οποίες συνίστανται ή, απλώς, υποστηρίζονται από benchmarks, των +οποίον [τα πορίσματα](http://www.unix-vs-nt.org/kirch/) συγκρούονται με αυτά των Mindcraft Benchmarks. + +Έτσι, πολλοί ήταν αυτοί που έσπευσαν να καταδικάσουν την Mindcraft. Η Mindcaft επιτέλεσε θαυμαστό έργο στην παραμετροποίηση των Windows NT, ενώ αποδείχθηκε +παντελώς ανίκανη στην παραμετροποίηση του Linux, του Apache και της Samba, αφού σε πολλές περιπτώσεις άλλαξε τις προεπιλεγμένες παραμέτους σε άλλες οι οποίες +μείωναν τις επιδόσεις. Το Linux δεν διέθετε \"ώριμο\" οδηγό του ελεγκτή της συστοιχίας των δίσκων της AMI. Θα μπορούσε κάλλιστα στη θέση αυτού του ελεγκτή να +τοποθετηθεί κάποιος άλλος, που υποστηρίζεται πλήρως, όπως αυτοί της Mylex και της Vortex. Στα Windows ΝΤ διατέθηκε όλη, ενώ στο Linux διατέθηκε μόνο το 96% της +μνήμης του συστήματος. Σε ένα τέτοιο μηχάνημα, αυτό αντιστοιχεί σε μείωση κατά 4% των επιδόσεων. Στο Linux διατέθηκε μόνο το 60% της μνήμης για προσωρινή +αποθήκευση κάποιων δεδομένων των σκληρών δίσκων (buffering). Ο πυρήνας 2.2.2, στον οποίο αναβαθμίστηκε το Linux, παρουσίαζε προβλήματα στην εξυπηρέτηση πελατών +Windows. Όλοι οι πελάτες ήταν Windows 95. Και ο Apache και η Samba μεταγλωττίστηκαν από τη Mindcraft διαφορετικά από ο,τι από την RedHat. Αυτό είχε σαν +επακόλουθο μειώση των επιδόσεων. Και στον Apache προσδιορίστηκε λάθος ο αριθμός των αρχικών και των διαθέσιμων εξυπηρετητών (οι StartServers θα έπρεπε να είναι +τουλαχιστον 150 και οι SpareServers μέχρι και άλλοι τόσοι) και στη Samba απενεργοποιήθηκε μια επιλογή που μείωσε καταλυτικά τις επιδόσεις (\"widelinks=no\"). +Στα μάτια των περισσοτέρων πεπειραμένων χρηστών Linux, η ενέργεια αυτή χαρακτηρίσθηκε εσκεμμένη και διαβολική. Η Mindcraft διαμαρτηρήθηκε, λέγοντας πως το +προσωπικό της ζήτησε τη γνώμη των χρηστών Linux σχετικά, σε news groups και mailing lists, και οτι αυτοί δεν απάντησαν, κάτι το οποίο έρχεται σε αντίθεση με την +εδραιωμένη από παλιά, ακόμη, φήμη τους που τους θέλει πάντα πρόθυμους να προσφέρουν βοήθεια (http://www.infoworld.com/cgi-bin/displayTC.pl?/97poy.supp.htm). Οι +χρήστες Linux αντεπιτέθηκαν, λέγοντας πως οι ερωτήσεις οι οποίες ετέθησαν δεν ήταν παρά γενικολογίες, ενώ παράλληλα δημιουργήθηκαν σχεδόν μισή δωδεκάδα sites με +οδηγίες για τη καλύτερη δυνατή παραμετροποίηση ενός Linux συστήματος, ανάλογα με τη χρήση (http://www.linux.com/tuneup/). Στην διαδρομή προέκυψαν και άλλα +στοιχεία. Το προσωπικό της Mindcraft επικοινωνούσε με τον υπόλοιπο κόσμο από τις εγκαστάσεις της Microsoft, και γρήγορα έγινε αντιληπτό ο,τι και τα Mindcraft +Benchmarks πραγματοποιήθηκαν στις εγκαταστάσεις της Microsoft. + +Ακόμα και η Microsoft, δια του αντιπροσώπου της Ian Hatton, [παραδέχθηκε την μη εγκυρότητα των +Benchmarks](http://www.itweb.co.za/sections/enterprise/1999/9904221410.asp). + +Έτσι η Mindcraft επανέλαβε τα Benchmarks με την βοήθεια γνωστών προσωπικοτήτων της κοινότητας χρηστών Linux, όπως του Linus Torvalds, αρχικού δημιουργού και +μετέπειτα συντονιστή της ανάπτυξης του πυρήνα, και το Jeremy Allison, κύριου προγραμματιστή της Samba, αλλά δεν δημοσίευσε τα αποτελέσματα, επειδή ήταν πολλοί +εκείνοι που την κατηγόρουσαν για αδιαφάνεια. + +Η Mindcraft έπρεπε να υπερασπίσει το κύρος της, άλλωστε αυτό είναι το είδος το οποίο εμπορεύεται. Έμμεσα παραδεχόμενη την προφανή και πρωτοφανή της ανικανότητα +να φέρει σε πέρας την μελέτη που τις ανατέθηκε, πρότεινε την επανάληψη των benchmarks, από τον ανεξάρτητο εκδοτικό οργανισμό [Ziff-Davis](http://www.zdnet.com/) +και πιο συγκεκριμμένα από το περιοδικό [PC Week](http://www.zdnet.com/pcweek/), παρουσία αντιπροσώπων της Microsoft, της RedHat και της +[Mindcraft](http://www.mindcraft.com/openbenchmark.html). Αν επιβεβαιωνόταν η Mindcraft το κύρος της θα αποκαθίστατο και η Microsoft θα είχε στα χέρια της μια +σχετικά αξιόπιστη απόδειξη της ανωτερότητας του δικού της λειτουργικού συστήματος, στη θέση μιας παρωδίας. + +Πράγματι, τα benchmarks επαναλήφθηκαν, δικαίωσαν την Mindcraft ως προς την ορθότητα των αποτελεσμάτων με την συγκεκριμμένη παραμετροποίηση, απέδειξαν οτι το +Linux θα μπορούσε να είχε αποδώσει καλύτερα, όπως επίσης οτι σε καμμία περίπτωση δεν θα μπορούσε να αποδώσει καλύτερα από τα Windows NT στο ίδιο υλικό. Βαθύτερη +μελέτη των αποτελεσματων αποκάλυψε τους λόγους. Ο κυριότερος λόγος είναι ο,τι το Linux δεν υποστηρίζει πολυνηματική δικτύωση (multithreaded TCP/IP stack), +δηλαδή δεν μπορεί να διαβιβάσει σε μία ορισμένη στιγμή δεδομένα παρά μόνο μέσω μίας δικτυακής σύνδεσης ( +). Ένας δευτερεύων λόγος είναι ο,τι το Linux δεν διαθέτει αρκετά καλή συμμετρική πολυδιεργασία, +δηλαδή δεν μπορεί να εκμεταλλευθεί στο έπακρο κανέναν επεξεργαστή μετά τον πρώτο, αλλά αντίστοιχο πρόβλημα αντιμετωπίζουν και τα Windows NT. + +Κανένας δεν απελπίστηκε στον χώρο του Linux. Ανάμεσα σε αυτούς υπήρξαν κάποιοι που [διακομώδησαν το όλο +συμβάν](http://segfault.org/story.phtml?mode=2&id=377c4f9f-039ab200) και αρκετοί που από τη πρώτη στιγμή καλωσόρισαν τα Mindcraft Benchmarks ως ευεργετικά για +την βελτίωση του Linux, όπως άλλα παρόμοια [benchmarks του παρελθόντος](http://members.tripod.com/~e_l_green/mindcraft.html). Το πρόβλημα της δικτύωσης ήταν ήδη +γνωστό και διορθωνεται πρόχειρα στη τρέχουσα σειρά σταθερών πυρήνων (2.2.x), αλλά και αποφασιστικά στην πειραματική σειρά των πυρήνων (2.3.x). Το πρόβλημα της +συμμετρικής πολυδιεργασίας έχει αντιμετωπιστεί στη τρέχουσα σειρά σταθερών πυρήνων και σε άκρως ικανοποιητικό βαθμό στις εκδόσεις μετά την 2.2.10 ( +, και ). Στην επόμενη σειρά +σταθερών πυρήνων (2.4.x), η οποία θα κυκλοφορίσει μέχρι το τέλος του τρέχοντος έτους, θα περιλαμβάνονται αρκετές ακόμη βελτιώσεις και προσθήκες. + +Ποιά είναι λοιπόν τα συμπεράσματα; + +Μέχρι να εμφανιστεί η επόμενη σειρά σταθερών πυρήνων και πρίν απο την κυκλοφορία των Windows 2000 (των μέχρι πρόσφατα αποκαλούμενων Windows NT 5.0), το Linux θα +υστερεί σε σχέση με τα Windows NT στο συγκεκριμμένο και εξωπραγματικό μηχάνημα που κοστίζει εκπληκτικά πολύ. + +Είναι παραδεκτό ο,τι πιο συμφέρουσα και από άποψη απόδοσης, αλλά και από άποψη τιμής είναι μια λύση που συνίσταται σε ένα σύνολο σημαντικά φθηνότερων +δικτυομένων μηχανημάτων, τα οποία επωμίζονται εξίσου τον φόρτο εργασίας (computer farm). Με το ίδιο κόστος τη θέση του εξωπραγματικού αυτού μηχανήματος θα +μπορούσαν να αναλάβουν 20 συνηθισμένα μηχανήματα. Στη περίπτωση βλάβης ή αναβάθμισης του εξωπραγματικού μηχανήματος θα παρουσιάζονταν διακοπή παροχής +υπηρεσειών, ενώ αντίθετα στη περίπτωση ενός μηχανήματος από ένα σύνολο, τα άλλα θα συνέχιζαν κανονικά. + +Επιπλέον, τέσσερεις κάρτες δικτύου των 100 MBits αποδίδουν συνολικά 400 MBits. Τα περισσότερα τοπικά δίκτυα (Local Area Networks - LANs) περιορίζονται σε έναν +δίαυλο των 100 ή 10 Mbits (Fast ή απλό Ethernet), οι περισσότεροι παροχείς υπηρεσιών Διαδικτύου (Internet Services Providers - ISPs) περιορίζονται σε λιγότερα +από 2 MBits (συνήθως E1/T1 1,544 MBits), οι επικοινωνίες μέσω του ψηφιακού δικτύου υπηρεσιών (Intergraded Services Digital Network - ISDN) περιορίζονται σε +0,128 ή 0,064 MBits (128 και 64 KBit αντίστοιχα) και τα τηλεφωνικά modems, των οποίων η ταχύτητα αποκλείεται να αυξηθεί λόγω των περιρισμών που επιβάλει το +τηλεφωνικό δίκτυο, περιορίζονται σε περίπου 0,0576 MBits (57,6 KBits που αντιστοιχούν σε περίπου 57,6 Kbps). + +Στα παραπάνω πρέπει να προστεθεί ο,τι η συστοιχία δίσκων του μηχανήματος ήταν τύπου 0 (RAID 0), η οποία δίνει ιδιαίτερη έμφαση στη ταχύτητα και όχι στη +αξιοπιστία. Σε ένα επιχειρισιακό περιβάλλον προτεραιότητα έχει η αξιοπιστία και όχι η ταχύτητα και για αυτόν τον λόγο πιθανότατα θα χρησιμοποιούταν συστοιχία +δίσκων είτε τύπου 5 (RAID 5) είτε συνδιασμός τύπων 0 και 5 (RAID 0,5). + +Στα παραπάνω πρέπει να προστεθεί οτι σε ένα επιχειρισιακό περιβάλλον τα δεδομένα δεν είναι στατικά, δηλαδή το περιεχόμενο των ιστοσελίδων δεν είναι σταθερό και +δεδομένο εκ των προτέρων, αλλά δυναμικά, δηλαδή το περιεχόμενο συνεχώς αλλάζει και είναι μέλημα του εξυπηρετητή - πιθανότατα με τη βοήθεια μιας γλώσσας δέσμης +εντολών (batch ή scripting language) - να αντλεί τα δεδομένα από μια βάση δεδομένων (database) ή να τα συλλέγει άμεσα από τις εκάστοτε πηγές, να τα μετατρέπει +και να τα παρουσιάζει ανάλογα, σαν ιστοσελίδες ή εικόνες. Η επιδόσεις του Apache είναι μέτριες σε στατικά και εκπληκτικές σε δυναμικά δεδομένα. Συνεπώς, δεν θα +έπρεπε να χρησιμοποποιηθεί ο Apache στα Mindcraft Benchmarks, αλλά κάποιος άλλος εξυπηρετητής, όπως ο ZHTTPd. + +Οι συνεργάτες του γερμανικού περιοδικού c\'t αντιλαμβάνόμενοι κάποια από τα παραπάνω διεξήγαγαν μία [παρόμοια +μελέτη](http://www.heise.de/ct/english//99/13/186-1/). + +Σύμφωνα με τη μελέτη αυτή, το Linux αποδείχθηκε κατάτι ταχύτερο στον τομέα εξυπηρέτησης στατικών και κατά πολύ ταχύτερο στον τομέα εξυπηρέτησης δυναμικών +δεδομένων από τα Windows NT. Το λογισμικό για το Linux ο Apache 1.3.6 και για τα Windows NT αποτελούσαν ο Microsoft Internet Information Server 4.0. + +Πάλι το υλικό ήταν κοινό, ένας εξυπηρετητής της Siemens, ο Primergy 870, ο οποίος διαθέτει τέσσερεις επεξεργαστές Pentium II Xeon 450MHz, 512 ΚByte Cache, 2 +GBytes RAM, σε συστοιχία τέσσερεις σκληρούς δίσκους και δύο κάρτες δικτύου Ethernet 100 MBit και ο οποίος κοστίζει 100.000,- DM. + +Αρχικά στο μηχάνημα ήταν προεγκατεστημένα τα Windows NT 4.0 αναβαθμισμένα με το Service Pack 3 και το SuSE Linux 6.1 (έκδοση πυρήνα 2.2.5). Τα πρώτα +αποτελέσματα ήταν αποκαρδιωτικά, ειδικά για το Linux, και έτσι και τα δύο λειτουργικά συστήματα αναβαθμίστηκαν εκ νέου. Τα Windows NT με το Service Pack 4 και +το Linux στον πυρήνα 2.2.9. + +Η μελέτη του εν λόγω περιοδικού δεν είναι μόνο ανατρεπτική, αλλά αποκαλύπτει την ταχύτητα με την οποία εξελίσεται και βελτιώνεται ο πυρήνας του Linux. Η +Mindcraft χρησιμοποίησε την έκδοση 2.2.2 και όταν το c\'t αντίκρισε την έκδοση 2.2.5 την βρήκε εξαιρετικά αργή και έτσι χρησιμοποίησε την 2.2.9. Οι τρεις +εκδόσεις διαφέρουν μεταξύ τους μόνο ως προς το τρίτο δεκαδικό ψηφίο και το μέγιστο διάστημα που μεσολάβησε ανάμεσα στην εμφάνιση τους δεν υπερβαίνει τον μήνα +(!). Δεν υφίσταται σύγκριση με άλλα προγράμματα (και όχι αποκλειστικά με άλλα λειτουργικά συστήματα) τα οποία διατίθενται χωρίς τον πηγαίο κώδικα (closed +source), τα οποία συχνά κοστίζουν υπερβολικά, των οποίων αργούν να κυκλοφορήσουν οι νέες εκδόσεις και όταν κυκλοφορούν είναι σχεδόν ίδιες με τις προηγούμενες. + +Επιπλέον, η Mindcraft παρέληψε τη σύγκριση στους τομείς της διαθεσιμότητας, της ασφάλειας, της αξιοπιστίας, της σταθερότητας, της επεκτασιμότητας και του +κόστους, [τομείς στους οποίους τα Windows NT υστερούν](http://www.zdnet.com/sr/stories/news/0,4538,2309474,00.html). Το Linux και ειδικά οι εφαρμογές του, +πολλές από τις οποίες προηγήθηκαν του ίδιου, είναι διαθέσιμες για πολλές πλατφόρμες, δοκιμάστηκαν εξαντλητικά και κάθε φορά όταν εντοπίζεται ένα πρόβλημα, μια +παράλειψη, μια δυσλειτουργία, αμέσως διορθώνεται, παρακάμπτεται, \"μπαλώνεται\", από τους ίδιους τους προγραμματιστές ή και από τους χρήστες και είναι απολύτως +δωρεάν για απεριόριστο αριθμό χρηστών και μηχανημάτων. Κάτι τέτοιο είναι δυνατό επειδή οι προγραμματιστές είναι γνωστοί και άμεσα προσιτοι από τους χρήστες, +αλλά και επειδή ο πηγαίος κώδικας είναι διαθέσιμος. + +Μετά την παράθεση όλων αυτών των λόγιων επιχειρημάτων θα έπρεπε (ευχαριστημένος) να τελειώσω συνοψίζοντας. Όμως, αλίμονο, δε φθάνει, απλώς, να διαφωτίσω +κάποιους από τους αναγνώστες για αυτήν την μελέτη και για αυτά τα αποτελέσματα, θα πρέπει να τους προετοιμάσω για τα μελλούμενα. + +Η Microsoft, η IBM, ο προκάτοχος της στην κυριαρχία του χώρου της πληροφορικής, και κάθε άλλη μεγάλη εταιρία μεταχειρίζεται με ιδιαίτερη δεξιοτεχνία τα μέσα +μαζικής ενημέρωσης για να πετύχει του σκοπούς της. Στη περίπτωση των Mindcraft Benchmarks διέδωσε φόβο, αβεβαιότητα και αμφιβολία (Fear, Uncertainty and Doubt - +FUD). Επιχείρησε να προβάλει την κατωτερότητα του Linux έναντι των Windows NT βασιζόμενη σε ένα μόνο πρόβλημα του Linux το οποίο παρουσιαζόταν σε εξαιρετικά +απίθανες περιπτώσεις. Και τα κατάφερε. Η Mindcraft μεταχειρίστηκε για χάρη της Microsoft, του εργοδότη της, [κάθε διαθέσιμη μέθοδο +FUD](http://linuxtoday.com/stories/7972.html). + +Για παράδειγμα τα Benchmarks δεν είχαν καμμία σχέση με τα γενικευμένα πορίσματα, τα οποία δεν ίσχυουν παρά μόνο για μηχανήματα με περισσότερες από δύο δικτυακές +συνδέσεις των 100 MBits. + +Αγνοήθηκαν τυχόν άλλοι ανταγωνιστές των Windows NT, όπως τα παρόμοια με το Linux, δωρεάν Unices, δηλαδή τα FreeBSD, OpenBSD και NetBSD, τα οποία είχαν καλύτερη +δικτυακή συμπεριφορά, στο παρελθόν τουλάχιστον ( ). + +Συμπερασματικά, το Linux, παρά τα πρόσφατα αρνητικά αποτελέσματα, παραμένει μια εξαίσια επιλογή και στην συντριπτική πλειονότητα των περιπτώσεων παραμένει μια +επιλογή καλύτερη από τα Windows NT. Έχει ανακτήσει το χαμένο έδαφος και σύντομα θα ξεπεράσει τα Windows NT σε κάθε τομέα. [Αυτό το γνωρίζει η +Microsoft](http://www.opensource.org/halloween/) και για αυτό διαδίδει FUD. Όμως, το FUD δεν αντέχει σε μια προσεκτικότερη ματία. + +Προσέξτε τι \... FUD σας ταϊζουνε! diff --git a/content/articles/20/01_editorial.md b/content/articles/20/01_editorial.md new file mode 100644 index 0000000..d048d60 --- /dev/null +++ b/content/articles/20/01_editorial.md @@ -0,0 +1,63 @@ ++++ +title = 'Editorial' +date = '1999-12-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 20'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz** Δεκεμβρίου \...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Φτάσαμε αισίως στο 20ο τεύχος, τελευταίο του 1999, και τελευταίο του δεύτερου έτους λειτουργίας του Magaz. Δεν θα πέσω στην παγίδα να πω τελευταίο της +χιλιετηρίδας (εξάλλου όπως όλοι ξέρουν, η χιλιετηρίδα ΔΕΝ τελειώνει το 1999 αλλά το 2000). + +Εμείς περάσαμε και αυτόν τον χρόνο καλά και ελπίζουμε και εσείς μαζί μας. Την αναδρομή του 1999 θα την κάνουμε τώρα και όχι στο επόμενο τεύχος (21ο) γιατί λόγω +της αλλαγής έτους (το γνωστό πρόβλημα με την ημερομηνία στους υπολογιστές) και επειδή οι πιο πολλοί από εμάς δουλεύουμε σε σχετικές με υπολογιστές δουλειές, δεν +ξέρουμε πότε και πόσα θα μπορέσουμε να γράψουμε για το επόμενο έτος. + +Σχετική με το πρόβλημα που αντιμετωπίζουν οι υπολογιστές με την αλλαγή του έτους, είναι και η δημοσκόπηση αυτού του μήνα. + +To έτος αυτό λοιπόν κλείνει με 10 (προφανώς) τεύχη, 6 editorials, και 41 άρθρα. Επίσης, ερωτήθηκαν (και απαντήθηκαν) 205 ερωτήσεις στα πρώτα 6 τεύχη, πράγμα το +οποίο συνιστά abuse/misuse των διαθέσιμων resources και όχι use. Να υπενθυμίσω ότι όλο το 1998 (8 τεύχη με ερωτ-απαντήσεις) είχαμε 94 ερωτήσεις και 52 άρθρα. Ο +υπερδιπλασιασμός των ερωτήσεων επηρρέασε σαφέστατα τον διαθέσιμο χρόνο που είχαμε για άρθρα, και εφόσον οι ερωτήσεις επαναλαμβάνονταν ξανά και ξανά, εμείς +αποφασίσαμε να τις σταματήσουμε. + +Μόλις σταμάτησαν λοιπόν οι ερωτήσεις, σταθεροποιηθήκαμε κι εμείς με την ησυχία μας στα 4 άρθρα το μήνα (συν ένα editorial) και βρήκαμε επιτέλους χρόνο να +ασχοληθούμε με το layout του περιοδικού, σύστημα δημοσκοπήσεων, δυνατότητα searching στα παλαιότερα τεύχη /ερωτήσεις του Magaz και πολλά άλλα features. + +Συνολικά στον χρόνο που πέρασε φιλοξενήσαμε άρθρα από 16 άτομα, ενώ με τη βοήθεια άλλων 2 φίλων μεταφράσαμε τρία πολύ ενδιαφέροντα άρθρα που παρουσιάστηκαν στο +εξωτερικό. + +Το Magaz αρχίζει να προσανατολίζεται προς τον πιο advanced χρήστη από ότι παλαιότερα, χωρίς βέβαια αυτό να σημαίνει ότι ξεχνάμε και τους νέους. Το γεγονός όμως +ότι αυτοί δεν κοιτάνε τα archives θα μας κάνει μάλλον να τους ξεχάσουμε. Ο καθένας επιλέγει την μοίρα του, και για να βοηθηθείς πρέπει πρώτα να βοηθήσεις τον +εαυτό σου ο ίδιος. + +Σε αυτό το τεύχος έχουμε το πρώτο παιχνίδι που παρουσιάζεται στο Magaz, το [Civilization: Call to power](05_civ.html), μία [παρουσίαση του Basilisk II - +emulator για Macintosh](02_basilisk.html), μία [επεξήγηση του xinit](03_xinit.html) και ένα πρώτο μέρος για [προγραμματισμό σε GTK](04_gtk.html) που ξεκινάει +ένα αφιέρωμα του περιοδικού στον προγραμματισμό. + +Να υπενθυμίσω ότι προγραμματιστικά θέματα έχουμε παρουσιάσει και στο παρελθόν με και με την πρώτη εισαγωγή , αλλά και παλιότερα με τις οδηγίες για +bash-scripting. Απλά τώρα θα δώσουμε ιδιαίτερη σημασία σε αυτό το θέμα, εφόσον το βρίσκουμε πολύ ενδιαφέρον και έχουμε ήδη προγραμματίσει αρθράκια για την perl + +Τα άρθρα - προτάσεις του Magaz υπάρχουν και μεταβάλλονται τεύχος με το τεύχος, καθώς άλλα άρθρα \"καπαρώνονται\" και άλλα προσφέρονται. + +- Κατηγορία Howto + - Callback στο Linux + - Προγραμματισμός σε QT + - Infrared communication + - SGML και LINUXDOC tutorial +- Κατηγορία αναλύσεις + - Linux και POSIX + - Το Linux σαν router +- Κατηγορία παρουσιάσεις + - Παρουσίαση του Koffice + - Παρουσιάσεις νέων Distributions +- Κατηγορία updates παλαιότερων άρθρων + - Update για Samba v2 και kernel 2.2 + - Update για IP Masq σε kernel 2.2 και ipchains + +Σας ευχόμαστε καλή ανάγνωση, καλά Χριστούγεννα και καλή χρονιά. diff --git a/content/articles/20/02_basilisk.md b/content/articles/20/02_basilisk.md new file mode 100644 index 0000000..626f938 --- /dev/null +++ b/content/articles/20/02_basilisk.md @@ -0,0 +1,129 @@ ++++ +title = 'Παρουσίαση του BasiliskII' +date = '1999-12-01T00:00:00Z' +description = '' +author = 'Αντώνης Μαυρέλος(mailto:A.Mavrelos@csd.ase.gr)' +issue = ['Magaz 20'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το BasiliskII είναι το καλύτερο πρόγραμμα εξομείωσης Mac στο Linux. Πόσο καλό είναι; Σκεφτείτε MacOS 8 να παίζει Quicktime video και να μπαίνετε στο Internet +μέσα από το Netscape.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +![](/20/img/9_sm.png) + +[Μεγάλο μέγεθος](/20/img/9.png) + +Τρέχει ό,τι δοκίμασα. Η ταχύτητα του είναι ικανοποιητική. Κάποιος μπορεί να δουλέψει με \"άνεση\" ακόμα και σε Celeron 333 που έχω εγώ. Μειονεκτήματα; Δεν κάνει +Emulation PPC επεξεργαστή. Κάνει emulation τα classics, και Mac II (εξού και το ΙΙ στο όνομα), ήχο (DSP), κάρτα δικτύου (δεν έχω δεν το δοκίμασα), CD-ROM (με +ήχο), SCSI (δεν έχω δεν το δοκίμασα). + +**1. Installation** +---------------------------------------------- + +**2. Διαδικασία για εγκατάσταση MacOS 8** +-------------------------------------------------------------------- + +**3. Ενά τυπικό .basilisk\_ii\_prefs** +----------------------------------------------------------------- + +**4. Δύο Screnshots** +------------------------------------------------ + + +### [1. Installation]{#s1} + +Την τελευταία έκδοση του BasiliskII θα τη βρείτε στη . Είναι μόλις 555 ΚB (ούτε καν 666). Κάνετε compile με το +γνωστό πια τρόπο: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ./configure + make + make install + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Και το τρέχετε για πρώτη φορά. Το πρόγραμμα θα βγει (exit) αμέσως και θα δημιουργήσει ένα αρχείο στο home directory με όνομα .basilisk\_ii\_prefs. Αυτό είναι το +configuration file. Εδώ θα πρέπει να προσθέσουμε και να αλλάξουμε κάποιες εγγραφές. Οι περισσότερες είναι εύκολες στην κατανόηση τους. Υπάρχει και ένα Readme +file που εξηγεί τι κάνει η κάθε μία.\ +Για αρχή να ορίσουμε ότι θέλουμε ο Mac μας να τρέχει σε παράθυτο 800Χ600. Προσθέτουμε Screen win/800/600. Τόσο απλά. Μετά θα πρέπει να δώσουμε το Path που +βρίσκεται η ROM του Mac μας. Τωρα το που θα βρείτε τη ROM δε θα σας το πω εγώ. Αλλά είναι σχετικά εύκολο να βγάλετε ένα image από ένα υπάρχον Mac και ακόμα πιο +εύκολο (αλλά όχι σωστό) να τη βρείτε στο Internet. Προσθέτουμε λοιπόν τη γραμμή: ROM \. Aν τρέξουμε το basilisk θα βγει το γνωστό εικονίδιο που βγάζουν +οι Mac όταν ξεκινάνε αλλά δε βρίσκουν δίσκο. Πάμε λοιπόν αμέσως μετά να δείξουμε στο Mac μας τον/τους δίσκους του. Εδώ έχουμε 2 λύσεις. Να δώσουμε ολόκληρο +filesystem ή αυτό που έκανα εγώ, ένα image file.\ +Δημιουργούμε με την dd ένα αρχείο μεγέθους ας πούμε 250 ΜΒ. + + dd if=/dev/zero of=/usr/local/BasiliskII/Mac_HD.hfs bs=1k count=250000 + +Κατεβάζουμε τα HFSUtils και τα κάνουμε compile. Κάνουμε mount to image που μόλις φτιάξαμε: + + hmount /var/local/basiliskII/Mac_HD.hfs + +Αν όλα πήγαν καλά με την hvol θα βλέπουμε το Mac\_HD Φορμάρουμε το filesystem με: + + hformat -l "Local MacHD" /usr/local/BasiliskII/Mac_HD.hfs + +Για να ξεκινήσει ο Mac θέλει φυσικά και λειτουργικό σύστημα. Η δοκιμή που θα κάνω (αν βρω ελεύθερο χρόνο) θα είναι να του βάλω Linux. Προς το παρόν καταφεύγουμε +στο MacOS. Οι επιλογές μου (αυτά είχα) είναι τα 7.0 και 7.1. Προς το παρόν εξομοιώνουμε τον classic. Αυτο το ορίζουμε με την παράμετρο modelid 5 στο +.basiliskII\_prefs. Κάνουμε boot τον Mac και χρησιμοποιούμε τις δισκέτες εγκατάσταης - ή όσοι έχουν την παρανομία στο αίμα τους, βρίσκουν ένα disk image με +κάποιο MacOS στο internet. Eίστε έτοιμοι. Αν θέλετε να προσθέσετε αρχεία στον εικονικό δίσκο σας χρησιμοποιήτε την hcopy + + hcopy ~/norton_utilities.hpx : + +Θα αντιγραφούν τα norton στον δίσκο που αυτή τη στιγμή είναι mount (current). Το ποιος είναι το βλέπουμε με hvol ή κάνουμε cat το  /hcwd Σημειώστε ότι μετά από +reboot του host συστήματος (Linux) δεν χάνετε το current mounted filesystem. Και αυτό είναι φυσικό αφού είναι γραμμένο στο .hcwd. + + +### [2. Διαδικασία για εγκατάσταση MacOS 8]{#s2} + +Καταρχήν δε μπορούμε να μεταπηδήσουμε από το 7.0 ή 7.1 απευθείας στο 8. Τα βήματα είναι τα εξής: + +- Βάζουμε ένα σύστημα τουλάχιστον 7.5.3 +- Βγαίνουμε από τον emulator και αλλάζουμε το ID του συστήματος σε 14 (Quadra). +- To 8 γίνεται εγκατάσταση από CD. Το τοποθετούμε στο tray και τρέχουμε τον installer. + +Προσέχουμε να μην κάνει εγκατάσταση τους drivers για τον σκληρό δίσκο. Για κάποιο λόγο καθυστερεί (δεν κολάει) υπερβολικά. Το άφησα 2 ώρες σε αυτό το σημείο και +μετά διέκοψα την εγκατάσταση. Αλλη μια περίπτωση που καθυστερεί υπερβολικά είναι όταν έχουμε φτιάξει ένα μεγάλο filesystem και αυτό αρχίζει να γεμίζει. Κατά τα +άλλα όλες σχεδόν οι λειτουργίες στο 8 δουλεύουν άψογα. Το τρομερό είναι στα quicktime videos που παίζουν χωρίς frame skiping και χωρίς απώλειες στον ήχο. Τα +tutorials (multimedia), τα παιχνίδια, όλα παίζουν τέλεια. Ετρεξα μια χαρά το Quicken, αρκετά extentions και shareware. Λίγες φορές έχει κολλήσει και τότε μου +έβγαλε το μήνυμα: \"Your Mac just did something very stupid\". + + +### [3. Ενά τυπικό .basilisk\_ii\_prefs]{#s3} + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + seriala /dev/ttyS0 + serialb /dev/ttyS1 + bootdrive 0 + bootdriver 0 + ramsize 33554432 + frameskip 6 + modelid 14 + fpu false + nocdrom false + nosound false + nogui false + keycodes false + screen win/800/600 + rom /usr/local/BasiliskII/rom + disk /var/BasiliskII/Mac_HD.hfs + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [4. Δύο Screnshots]{#s4} + +![](/20/img/2_sm.png) + +[Μεγάλο μέγεθος](/20/img/2.png) + +![](/20/img/12_sm.png) + +[Μεγάλο μέγεθος](/20/img/12.png) + diff --git a/content/articles/20/03_xinit.md b/content/articles/20/03_xinit.md new file mode 100644 index 0000000..ec02a8a --- /dev/null +++ b/content/articles/20/03_xinit.md @@ -0,0 +1,128 @@ ++++ +title = 'Aρχεία εκκίνησης των X' +date = '1999-12-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 20'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό έχει σκοπό να σας παρουσιάσει τα ιδιαίτερα εκείνα αρχεία, με τα οποία μπορείτε να παραμετροποιήσετε την είσοδό σας στα X-Windows, αναλύοντας με +ποιόν τρόπο θα \"πειράξετε\" τα αρχεία εκκίνησης των X.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +--------------------------------------- + +- [1.1 Runlevels](#ss1.1) + +**2. Αρχεία εκκίνησης** +----------------------------------------------- + +- [2.1 Το αρχείο xinitrc (runlevel: single/multi user mode)](#ss2.1) +- [2.2 Συντεταγμένες](#ss2.2) +- [2.3 Το αρχείο xsession (runlevel: X11)](#ss2.3) + +**3. Συντεταγμένες για πιο προχωρημένους** +------------------------------------------------------------------ + + +### [1. Εισαγωγή]{#s1} + +Όταν μιλάμε για \"εκκίνηση των X\" εννοούμε με λίγα λόγια, τον window manager που επιθυμούμε να χρησιμοποιούμε στα X και διάφορες εφαρμογές ή προγράμματα που +θέλουμε να ξεκινούν αυτόματα κατά την είσοδό μας στο σύστημα των X-Windows. Επισης, πολλές φορές δεν θέλουμε απλά να ξεκινάει αυτόματα ένα πρόγραμμα, αλλά να +εμφανίζεται και σε ένα συγκεκριμένο σημείο στην επιφάνεια εργασίας μας. + +### [1.1 Runlevels]{#ss1.1} + +Στο Linux υπάρχουν δύο τρόποι για να ξεκινήσουν τα X-Windows: ο ένας είναι να bootάρουμε κανονικά το λειτουργικό, να κάνουμε login, μπαίνοντας στην κονσόλα, και +μετά, αν θέλουμε X-Windows, να πληκτρολογήσουμε την εντολή **startx**. Ο δεύτερος τρόπος είναι να bootάρουμε το Linux και αμέσως μετά το φόρτωμα του πυρήνα, να +φορτώσουν τα X-Windows, οπότε να γίνει η διαδικασία του login από το γραφικό περιβάλλον. Στις δύο αυτές περιπτώσεις, υπάρχουν, δυστυχώς, διαφορετικά αρχεία +εκκίνησης για τα X. Κατ\' αυτόν τον τρόπο, αν μιά μέρα κανείς θελήσει να αλλάξει τον τρόπο με τον οποίο μπαίνει στα X, θα εκπλαγεί, διαπιστώνοντας ότι αυτά που +πιθανόν να έχει ρυθμίσει να εκτελούνται κατά την είσοδό του στο γραφικό περιβάλλον, δεν υπάρχουν πιά. + +Οι δύο παραπάνω τρόποι εισόδου στα X-Windows, χαρακτηρίζονται με δύο διαφορετικά runlevels. Ο μεν πρώτος τρόπος, μπορεί να είναι runlevel σε single user mode, +σε multiuser mode χωρίς δίκτυο, ή σε full multiuser mode. Ο δεύτερος τρόπος πραγματοποιείται με την επιλογή του runlevel σε X11 mode. Τα runlevels ορίζονται στο +αρχείο **/etc/inittab** με αριθμούς. Κάθε αριθμός αντιστοιχεί σε ένα runlevel. Αξιοσημείωτο, όμως είναι, ότι κάθε Linux distribution ορίζει με διαφορετικούς +αριθμούς το κάθε runlevel. Μην ανησυχείτε, στο αρχείο **/etc/inittab**, συνήθως περιγράφονται σε comment mode, οι αντιστοιχίες αριθμων και runlevels. +**ΠΡΟΣΟΧΗ:** Υπάρχουν, αν δεν το έχετε καταλάβει, τα αντίστοιχα runlevel για το reboot και το shutdown του λειτουργικού (αυτά συνήθως εκφράζονται με τους +αριθμούς 6 και 0 αντίστοιχα, σε όλα τα distribution). Έτσι, δεν πρέπει να ορίσετε το προεπιλεγμένο runlevel σας σε κάποιο από τα δύο αυτά runlevel, για +ευνόητους λόγους (μόλις θα ξεκινάτε το Linux, ή θα γίνεται reboot ή shutdown). + +Ας δούμε όμως πως ορίζουμε το default runlevel, με το οποίο θα ξεκινά το Linux. Μέσα στο αρχείο **/etc/inittab**, υπάρχει η ακόλουθη γραμμή: + + id:3:initdefault: + +Η γραμμή ορίζει σαν προεπιλογή το runlevel 3 (το οποίο στο RedHat είναι το full multiuser). Αλλάξτε, λοιπόν τον αριθμό με τον αριθμό του runlevel που +επιθυμείτε. + + +### [2. Αρχεία εκκίνησης]{#s2} + +### [2.1 Το αρχείο xinitrc (runlevel: single/multi user mode)]{#ss2.1} + +Όπως θα καταλάβατε και από τον τίτλο, εδώ θα μιλήσουμε για τις ρυθμίσεις που μπορείτε να πραγματοποιήσετε, όταν χρησιμοποιείτε για runlevel το single ή το multi +user mode. + +Το αρχείο που θα μας απασχολήσει εδώ είναι το **xinitrc**, το οποίο βρίσκεται στο home directory του χρήστη, και μάλιστα, είναι κρυφό. Επομένως η πλήρης +διαδρομή του είναι **\~/.xinitrc** (το **\~** συμβολίζει το home directory. Θα μπορούσα στη θέση του να χρησιμοποιήσω τη μεταβλητή **\$HOME**). + +Μέσα στο αρχείο αυτό, όπως είπαμε, μπορούμε να ορίσουμε ποιόν window manager θέλουμε να χρησιμοποιήσουμε. Έτσι, αν θέλουμε για παράδειγμα να δουλεύουμε στο KDE, +γράφουμε μέσα στο αρχείο (αφού το ανοίξουμε με έναν text editor) **startkde**. Αν θέλαμε τον Window Maker, θα γράφαμε **wmaker**, αν θέλαμε το GNOME, θα γράφαμε +**gnome-session**, κ.ο.κ. + +Για να δούμε τώρα τι μπορούμε να κάνουμε, ώστε όταν ξεκινάν τα X, να ανοίγουν ταυτόχρονα και τα προγράμματα που εμείς θέλουμε. Στο αρχείο .xinitrc, γράφουμε την +εντολή που θέλουμε (η οποία αντιπροσωπεύει το πρόγραμμά μας) και δίπλα βάζουμε το σύμβολο **&**. Βάζουμε το σύμβολο αυτό για να τρέξει η εφαρμογή στο background +και να επιτρέψει να δουλέψει ο window manager. Οπότε, όπως θα καταλάβατε, πάντα θα γράφουμε τις εντολές που θέλουμε πρώτα, και φυσικά κάθε εντολή θα +καταλαμβάνει καινούρια γραμμή στο αρχείο μας (με το σύμβολο & πάντα) και στο τέλος θα βάζουμε τον window manager που θέλουμε (χωρίς το σύμβολο &). Για +παράδειγμα, το ακόλουθο .xinitrc μας επιτρέπει να ξεκινήσουμε τα X, να ανοίξει το πρόγραμμα Xisp, το πρόγραμμα rxvt και όλα αυτά κάτω από το περιβάλλον του KDE: + +**xisp &\ +rxvt &\ +startkde** + +### [2.2 Συντεταγμένες]{#ss2.2} + +Σειρά τώρα έχει να εξηγήσουμε τί μπορούμε να κάνουμε, ώστε τα προγράμματα που βάλαμε να ξεκινάν με το φόρτωμα των X, να εμφανίζονται σε ένα προκαθορισμένο +σημείο της επιφάνειας εργασίας. Η επιφάνεια εργασίας μας έχει συντεταγμένες. Η πάνω αριστερή γωνία έχει τις συντεταγμένες (0,0). Οι συντεταγμένες, γενικά, στην +περίπτωση των X συμβολίζονται ως +0+0. Ανάλογα, λοιπόν με το ποιά ανάλυση έχουμε επιλέξει στα X, ανάλογο είναι και το εύρος των συντεταγμένων. Το πρώτο στοιχείο +στις συντεταγμένες είναι η τετμημένη, δηλαδή μας ορίζει την οριζόντια θέση μας. Το δεύτερο στοιχείο είναι η τεταγμένη και μας ορίζει την κάθετη θέση μας +(ουσιαστικά και στα δύο στοιχεία ο αριθμός υποδηλώνει την απόστασή μας σε pixels από την πάνω αριστερή γωνία). Ευτυχώς για να μην μπλέξουμε, όταν κάποιος +μετακινεί ένα παράθυρο στην επιφάνεια εργασίας του, εμφανίζονται αυτόματα οι συντεταγμένες της πάνω αριστερής γωνίας του ανοιχτού παράθυρου. ΠΡΟΣΟΧΗ: μπορεί ο +window manager που χρησιμοποιείτε ήδη, να μην εμφανίζει τις συντεταγμένες. Π.χ. το KDE δεν τις εμφανίζει, αλλά μπορείτε να χρησιμοποιήσετε έναν άλλο window +manager, όπως fvwm ή Window Maker, για να προσδιορίσετε της συντεταγμένες μιας θέσης. + +Ας υποθέσουμε, λοιπόν, στο προηγούμενο παράδειγμα, πως θέλετε όταν ανοίγετε τα X, να ανοίγει το Xisp στην πάνω αριστερή γωνία της οθόνης περίπου, το rxvt να +ανοίγει περίπου στο μέσον της οθόνης, και όλα αυτά χρησιμοποιώντας για window manager το GNOME. Το αρχείο μας θα γίνει: + +**xisp -geometry +5+5 &\ +rxvt -geometry +100+67 &\ +gnome-session** + +Όπως θα καταλάβατε, για να ορίσετε σε ποιές συντεταγμένες θα ανοίγει ένα πρόγραμμα, αρκεί να το εκτελείτε με την παράμετρο **-geometry +x+y**, όπου **x** και +**y** είναι οι επιθυμητές συντεταγμένες. + +### [2.3 Το αρχείο xsession (runlevel: X11)]{#ss2.3} + +Για να εξηγήσουμε τώρα, τί γίνεται όταν το runlevel μας φορτώνει τα X αμέσως μετά το boot του πυρήνα. Δυστυχώς, το αρχείο .xinitrc που φτιάξαμε νωρίτερα, δεν +δουλεύει σ\' αυτήν την περίπτωση. Αντί αυτού του αρχείου, αρκεί να φτιάξουμε ένα αρχείο στο home directory και να το ονομάσουμε **.xsession**. Για να +παραμετροποιήσουμε αυτά που θέλουμε κατά την εκκίνηση, ακολουθούμε ακριβώς τα βήματα που ακολουθήσαμε και για το παραπάνω αρχείο. **ΠΡΟΣΟΧΗ**, όμως, υπάρχει μια +μικρή διαφορά: το αρχείο **.xsession** που δημιουργήσαμε, πρέπει να είναι executable, αλλιώς δεν δουλεύει. Για να το κάνουμε executable, απλώς εκτελούμε την +εξής εντολή: **chmod u+x .xsession**. + +Τελειώσαμε !! Από εδώ και μπρός θα είστε ικανοί να παραμετροποιήσετε την είσοδό σας στα X-Windows. + + +### [3. Συντεταγμένες για πιο προχωρημένους]{#s3} + +Πρίν κλείσω το άρθρο, θα ήθελα να σας πώ λίγα ακόμα πράγματα για τις συντεταγμένες της επιφάνειας εργασίας μας. + +Όπως ανέφερα προηγούμενα, οι συντεταγμένες +0+0 ορίζουν την πάνω αριστερή γωνία της οθόνης μας. Η πάνω δεξιά γωνία χαρακτηρίζεται από τις συντεταγμένες -0+0. Η +κάτω δεξιά γωνία με τις -0-0 και η κάτω αριστερή γωνία με τις +0-0. + +Είναι λοιπόν αυτονόητο, πως αν κάποιος εφαρμόσει την \"Ευκλείδιο Γεωμετρία\" στην επιφάνεια εργασίας του, θα καταφέρει να προσδιορίζει με μεγαλύτερη ακρίβεια +μια συγκεκριμένη θέση. Αν μπερδευτήκατε με όλα αυτά λοιπόν, θα σας συμβούλευα να αρκεστείτε στο +0+0. + diff --git a/content/articles/20/04_gtk.md b/content/articles/20/04_gtk.md new file mode 100644 index 0000000..f5e53de --- /dev/null +++ b/content/articles/20/04_gtk.md @@ -0,0 +1,518 @@ ++++ +title = 'Προγραμματισμός με GTK(\...)' +date = '1999-10-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης για το Magaz ( magaz.hellug.gr(http://magaz.hellug.gr) )' +issue = ['Magaz 20'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*GTK\... Gimp ToolΚit. Αυτό το πρόγραμμα τα άρχισε όλα. Από τη στιγμή που βγήκε το gimp, δημιουργήθηκαν ένα σωρό εφαρμογές που χρησιμοποιούν τις βιβλιοθήκες +απεικόνισής του, οι οποίες σημειωτέον είναι από τις καλύτερες που υπάρχουν. Πάνω σε αυτή βασίζεται ολόκληρο το gnome, και είναι από τα προτιμούμενα της REDHAT +και άλλων φυσικά διανομών. \`Ελα όμως που ο προγραμματισμός σε GTK είναι σχετικά δύσκολος\... Μη μασάτε, δεν είναι και τόσο όσο νομίζετε\... Είναι +ευκολούτσικος, και δεν θα σας πάρει πάνω από 10 λεπτά διάβασμα για να καταφέρετε να στήσετε το πρώτο σας προγραμματάκι σε GTK. Πολλά από τα σημεία αυτού του +άρθρου, έχουν βασιστεί στα tutorials της gtk. όπως αυτά έρχονται με το gtk-devel.rpm πακέτο. Για περισσότερες πληροφορίες σε σημεία του κειμένου, παρακαλώ ρίξτε +τους μια ματιά.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Περί αυτού του άρθρου. (the boring stuff)** +---------------------------------------------------------------------- + +**2. Που θα βρείτε το GTK** +------------------------------------------------- + +**3. Προϋποθέσεις** +----------------------------------------- + +**4. Βασικές έννοιες προγραμματισμού σε gtk** +------------------------------------------------------------------- + +- [4.1 Βασικά χαρακτηριστικά](#ss4.1) +- [4.2 widgets, signals, κ.λπ.](#ss4.2) +- [4.3 Γεια σας μάγκες! Το πρώτο πρόγραμμα σε gtk](#ss4.3) +- [4.4 Εξήγηση του Hello Magez](#ss4.4) +- [4.5 Πως θα το τρέξετε.](#ss4.5) + +**5. Tοποθέτηση των widgets** +--------------------------------------------------- + +- [5.1 Boxes, ή αλλιώς κουτιά :)](#ss5.1) +- [5.2 Tοποθέτηση των widgets, partII (λέγε με tables)](#ss5.2) +- [5.3 Η συνέχεια](#ss5.3) + + +### [1. Περί αυτού του άρθρου. (the boring stuff)]{#s1} + +Αυτό το άρθρο, δεν έχει σκοπό να σας μάθει gtk, αλλά να σας εξοικειώσει με τις δυσκολότερες έννοιες στο toolkit αυτό, ώστε να αρχίσετε μόνοι σας να +προγραμματίζετε. Σε καμία περίπτωση δεν είμαι υπεύθυνος εγώ ειδικά και το magaz γενικότερα αν κάνετε μπάχαλο τον υπολογιστή σας. Στο δικό μου δουλεύουν όλα μια +χαρά, και δεν έπαθε τίποτα από όσα γράφω σε αυτό το άρθρο. + +\`Εχω προγραμματίσει να ολοκληρωθεί σε τρεις συνέχειες. Πολύ πιθανόν και 4. Αυτό δεν σημαίνει ότι είμαι υποχρεωμένος να συνεχίσω και με τα άλλα, αλλά δεσμεύομαι +να προσπαθήσω. Και αυτό το λεω, γιατί στο παρελθόν είχα κάνει κάτι αντίστοιχό που δεν ολοκληρώθηκε (bash, enlightenment) αλλά είχα δικαιολογία και για τα δύο. +Μπορεί κάτι να συμβεί και να μη συνεχιστεί. Σε μια τέτοια περίπτωση, παρακαλώ όποιος έχει την όρεξη να συνεχίσει. + +Επίσης, δεν υπάρχει ούτε ΜΙΑ πιθανότητα να μην έχω κάνει εκφραστικά -και ίσως νοηματικά- λαθάκια. Είναι η δυσκολία που υπάρχει στη μετάφραση αυτού που θέλουμε +να εκφράσουμε, καθώς και η μεταφορά του σε λέξεις. \`Οσοι από εσάς προγραμματίζουν, ή έχουν τέλος πάντων μια εξοικείωση με την αγγλική ορολογία, καταλαβαίνετε +τι θέλω να πω. Να είσαστε λοιπόν ελαστικοί στην κρίση σας. + +\`Οσοι από εσάς ασχολούνται με gtk και βρουν τίποτα ανακρίβειες (πράγμα πολύ πιθανό γιατί ναι μεν προγραμματίζω σε gtk αλλά δεν χρησιμοποιώ όλα όσα εξηγώ σε +αυτό το άρθρο), παρακαλώ να μου στείλετε με [mail στο papas\@hellug.gr](mailto:papas@hellug.gr) τις παρατηρήσεις σας, και θα προσπαθήσω να διορθώσω τα λάθη σε +ένα από τα επόμενα άρθρα. + +Καλό διάβασμα, και happy programming! + + +### [2. Που θα βρείτε το GTK]{#s2} + +Κατά πάσα πιθανότητα, το έχετε ήδη εγκατεστημένο στον υπολογιστή σας. Για όσους από εσάς αρνούνται να εγκαταστήσουν το GTK, επιμένοντας σε υποκατάστατα του +τύπου QT - καλά, μη βαράτε :) - σας παραπέμπω στη διεύθυνση να το κατεβάσετε σε ότι μορφή θέλετε. Αν θέλετε **rpm**, μην ξεχάσετε να πάρετε +και το **devel** πακέτο, γιατί αυτό ουσιαστικά θα μας χρειαστεί ώστε να κάνουμε τα προγράμματά μας να τρέχουν. + + +### [3. Προϋποθέσεις]{#s3} + +Δεν υπάρχουν ουσιαστικές προϋποθέσεις. Απλά θα πρέπει να ξέρετε τα βασικά του προγραμματισμού, λίγη C, και να έχετε πολύ όρεξη. Επίσης, θα πρέπει να έχετε στο +PATH σας το script **gtk-config**, για να αποφύγουμε να βρίσκουμε λεπτομέρειες που είναι διαφορετικές για κάθε μηχάνημα. Περισσότερες πληροφορίες θα βρείτε στο +**man page** του gtk-config (`man gtk-config`) + + +### [4. Βασικές έννοιες προγραμματισμού σε gtk]{#s4} + +Ας ξεκινήσουμε με τις αρχικές έννοιες, που στη συνέχεια θα μας βοηθήσουν στην κατανόηση του προγραμματισμού σε gtk. + +### [4.1 Βασικά χαρακτηριστικά]{#ss4.1} + +Κάθε πρόγραμμα που θα φτιάχνουμε, πρέπει να περιέχει, μεταξύ άλλων, και τα εξής: + +Πρώτα από όλα, πρέπει να περιέχει τις βιβλιοθήκες που θα κάνουμε import. Για την gtk, αυτή είναι ή `gtk.h`, που βρίσκεται μέσα στο directory **gtk** + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Φυσικά, όπως όλα τα προγράμματα, περιέχει την πολύ γνωστή `main`. Αυτή είναι η πρώτη συνάρτηση που καλείται, και πρέπει οπωσδήποτε να υπάρχει, είναι *int*, +γιατί πρέπει να επιστρέφει μια τιμή τύπου int στο *shell* (το γνωστό σε όλους μας **exit status**). + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + int main(int argc, char *argv[]){ + ... + ... + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μέσα σε αυτήν τώρα, πρέπει να υπάρχει μια άλλη, η `gtk_init` που καλείται από όλα τα προγράμματα που είναι γραμμένα σε gtk για την αρχικοποίηση. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gtk_init(&argc, &argv); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Επίσης, σε κάποιο σημείο πρέπει να καλείται η `gtk_main` η οποία δεν είναι τίποτα άλλο από την συνάρτηση η οποία περιμένει για ενέργειες του χρήστη, όπως το +πάτημα ενός κουμπιού στο ποντίκι, ή το πάτημα ενός πλήκτρου. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gtk_main(); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Φυσικά δεν πρέπει να ξεχάσουμε την τιμή που θα επιστρέφει το όλο πρόγραμμά μας (είναι είπαμε *int*), και αυτό γίνεται με την γνωστή `return` + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + return(0); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτά είναι τα βασικά και απαραίτητα που πρέπει να περιέχει ένα πρόγραμμα σε gtk. Φυσικά, για να γραφεί ένα ολοκληρωμένο και λειτουργικό πρόγραμμα απαιτούνται +πολύ περισσότερα που θα δούμε στη συνέχεια, γιαύτο μη βιάζεστε\... Συνεχίστε το διάβασμα για την βουτά στα βαθιά\... ))) + +### [4.2 widgets, signals, κ.λπ.]{#ss4.2} + +First things first\... + +#### Widgets + +Πριν αρχίσουμε, να δούμε μερικά πράγματα, όπως πχ. τι είναι το gtk\_widget που θα συναντάμε κατ κόρον. Είναι μια δομή, που μέσω αυτής μπορούμε να έχουμε +πρόσβαση σε όλα τα widgets της gtk. Αυτά μπορεί να είναι **buttons, radio buttons, check buttons, lists, combo boxes, boxes, toolbars**, και γενικότερα +οτιδήποτε βλέπετε στα παραθυράκια των προγραμμάτων gtk. + +#### signals + +Ο έλεγχος σε ένα πρόγραμμα **gtk** δίδεται χρησιμοποιώντας τα **signals**. Ας σας εξηγήσω όμως με ένα παράδειγμα.\ +Για να συνδέσουμε ένα συμβάν με μια λειτουργία, μπορούμε να χρησιμοποιούμε μια συνάρτηση όπως η `gtk_signal_connect`.\ +Αυτή, συντάσσεται όπως βλέπουμε παρακάτω, και επιστρέφει μια τιμή τύπου **gint** (Μια μορφή ακεραίου που χρησιμοποιεί η gtk). + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gint gtk_signal_connect(GtkObject *object, gchar name, GtkSignalFunc func, gpointer func_data); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Παρακάτω δίνονται οι απαραίτητες εξηγήσεις για να καταλάβετε τι κάνει το κάθε όρισμα: + +- `GtkObject *object`\ + Το widget που θα παρακολουθούμε για signal +- `gchar name`\ + Το signal για το οποίο παρακολουθούμε +- `GtkSignalFunc func`\ + Η συνάρτηση που θα κληθεί όταν γίνει trap στο σινιάλο που παρακολουθούμε +- `gpointer func_data`\ + Το όρισμα που θα περάσει στην καλούμενη συνάρτηση (μπορεί να είναι πχ, το πλήκτρο που πατήθηκε) + +Το τρίτο όρισμα, είναι μια συνάρτηση που δέχεται σαν ορίσματα ένα δείκτη (pointer) στο widget από το οποίο προκλήθηκε το signal, και ένα δείκτη που αναφέρεται +στο τέταρτο όρισμα της καλούσας συνάρτησης (το func\_data δηλαδή). ώστε να ξέρει τι να κάνει με τα δεδομένα που της εστάλησαν (ΜΠΕΡΔΕΥΤΗΚΑΤΕ;) + +### [4.3 Γεια σας μάγκες! Το πρώτο πρόγραμμα σε gtk]{#ss4.3} + +Επειδή ήδη αρχίσαμε να κολυμπάμε σε βαθύτερα νερά, ας φτιάξουμε ένα μικρό προγραμματάκι, και ας το εξηγήσουμε στη συνέχεια. Κάντε copy-paste, σε ένα αρχείο το +παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + void hello(GtkWidget *widget, gpointer data){ + g_print("Hello Magez!"); + } + + gint del_eve(GtkWidget *widget, GdkEvent *event, gpointer data){ + g_print("close pressed\n"); + return(TRUE); + } + + void dest(GtkWidget *widget, gpointer data){ + gtk_main_quit(); + } + + int main(int argc, char *argv[]){ + GtkWidget *window, *button; + + gtk_init(&argc, &argv); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + + gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(del_eve), NULL); + gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(dest), NULL); + + gtk_container_set_border_width(GTK_CONTAINER(window), 10); + + button = gtk_button_new_with_label("Hello Magez"); + + gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(hello), NULL); + gtk_signal_connect_object(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(window)); + + gtk_container_add(GTK_CONTAINER(window), button); + + gtk_widget_show(button); + gtk_widget_show(window); + + gtk_main(); + + return(0); + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ονομάστε το αρχείο HelloMagez.c και αποθηκεύστε το κάπου που έχετε δικαιώματα (πχ. στο home directory σας). Παρακάτω θα δούμε πως μπορούμε να δημιουργήσουμε το +εκτελέσιμο αρχείο. + +### [4.4 Εξήγηση του Hello Magez]{#ss4.4} + +Ας δούμε τώρα πως δουλεύει. Θα εξηγούμε το πρόγραμμα με μικρά βήματα. Αλλά ας μην αρχίσουμε από την αρχή, πάμε κατευθείαν στην main. + +- **`GtkWidget *window, *button;`**\ + Εδώ ορίζουμε ότι θα χρησιμοποιήσουμε δύο widgets, με ονόματα `window` και `button` +- **`gtk_init(&argc, &argv);`**\ + Η γνωστή **gtk\_init**. Την αναφέραμε προηγουμένως. +- **`window = gtk_window_new(GTK_WINDOW_TOPLEVEL);`**\ + Ορισμός στο widget **window** ενός νέου παραθύρου τύπου **`GTK_WINDOW_TOPLEVEL`**, δηλαδή κανονικού παραθύρου προγράμματος. +- **`gtk_signal_connect(GTK_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(del_eve), NULL);`**\ + Εδώ αρχίζουν τα δύσκολα. Μη φοβηθείτε όμως, θα τα εξηγήσουμε όλα. Αυτό που κάνουμε, είναι να συνδέσουμε το συμβάν `delete_event` με την συνάρτηση `del_eve`. + To `delete_event` το στέλνει ο window manager που χρησιμοποιούμε όταν πατήσουμε το **close**, ή αντίστοιχα το κουμπί **close** στην **bar** του + προγράμματος. Γιατί το παγιδεύουμε αυτό; Μα γιατί ίσως να θέλουμε να κάνουμε κάποιες εργασίες πριν να κλείσουμε το παράθυρο, πχ. να αποθηκεύσουμε ένα αρχείο + ρυθμίσεων, ή να εμφανίσουμε ένα μήνυμα του τύπου \`\`Είστε σίγουρος;\'\'\ + To `GTK_OBJECT` και το `GTK_SIGNAL_FUNC` είναι ουσιαστικά μακροεντολές, που ελέγχουν αν είναι σωστές οι παράμετροι που περνάμε στην `gtk_signal_connect` και + (σύμφωνα με μερικούς-μερικούς) βοηθάει να είναι ο κώδικας πιο ευανάγνωστος και πιο κατανοητός. +- **`gtk_signal_connect(GTK_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(dest), NULL);`**\ + \`Aλλη μια σύνδεση. Σε αυτή συνδέουμε το συμβάν `destroy` με τη συνάρτηση `dest`. Το συμβάν `destroy` συμβαίνει όταν δίνουμε στο `delete_event` την τιμή + FALSE, ή όταν καλούμε το `gtk_widget_destroy()` που είναι μια συνάρτηση στην οποία περνάμε σαν παράμετρο το όνομα του παραθύρου που θέλουμε να καταστρέψουμε + (κλείσουμε). Με αυτό τον τρόπο, με μια συνάρτηση, ελέγχουμε και τις δύο περιπτώσεις. +- **`gtk_container_set_border_width(GTK_CONTAINER(window), 10);`**\ + Αυτή η εντολή, απλά θέτει μια ιδιότητα για ένα αντικείμενο. Συγκεκριμένα, την ιδιότητα *border* στο widget `window`, που είναι ο χώρος γύρω από το παράθυρο + που μένει ανεκμετάλλευτος και δεν μπορεί να χρησιμοποιηθεί από άλλα widgets. Αυτό το κάνουμε για αισθητικούς λόγους.\ + Το `GTK_CONTAINER` είναι και αυτό μια μακροεντολή, για type casting, όπως τα `GTK_OBJECT` και `GTK_SIGNAL_FUNC`. +- **`button = gtk_button_new_with_label("Hello Magez");`**\ + Συνάρτηση για τη δημιουργία ενός κουμπιού που γράφει \"Hello Magez\". Φυσικά, κουμπιά μπορούν να δημιουργηθούν και αλλιώς, χωρίς να είμαστε αναγκασμένοι να + τους δώσουμε ένα κείμενο, σε περίπτωση πχ. που το κείμενο θα εξαρτάται από κάποιες μεταβλητές, ή θα πρέπει να αλλάξει μετά από λίγο. +- **`gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(hello), NULL);`**\ + Συνδέουμε το click στο κουμπί, με τη συνάρτηση `hello`. Αυτό είναι πολύ απλό, και εύκολο στην κατανόηση. +- **`gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(window));`**\ + Να και κάτι καινούριο. Με αυτή την εντολή, παρατηρούμε ότι μπορούμε να συνδέσουμε πολλές συναρτήσεις με ένα event (στην περίπτωση αυτή με το click του + ποντικιού στο κουμπί `button`. Αυτό που θα συμβεί είναι ότι πρώτα θα καλέσουμε τη συνάρτηση `hello` και αμέσως μετά τη συνάρτηση `gtk_widget_destroy` που + είναι μια συνάρτηση που \`\`καταστρέφει\'\' το widget που της δίνεται σαν όρισμα, στη συγκεκριμένη περίπτωση το `window`, που είναι το παράθυρο του + προγράμματός μας.\ + Θα παρατηρήσατε ότι εδώ χρησιμοποιείται η `gtk_signal_connect_object` αντί της `gtk_signal_connect`. Αυτό συμβαίνει γιατί πρέπει να περάσουμε σαν όρισμα το + widget που πρέπει να καταστραφεί. Περισσότερα για τα signals αργότερα. +- **`gtk_container_add(GTK_CONTAINER(window), button);`**\ + Κι άλλα καινούρια! η `gtk_container_add` είναι μια συνάρτηση που προσθέτει ένα widget σε ένα container. Εδώ, widget=`button` και container=`window`.\ + Σημειώστε ότι ένα `gtk_container` μπορεί να περιέχει μόνο ένα widget. Υπάρχουν όμως άλλα widgets, που πάνω τους μπορούν να φιλοξενούν πολλά άλλα widgets. + Αυτό, στην ενότητα των widgets θα αναλυθεί πολύ καλύτερα. Προς το παρών αρκεστείτε σε αυτό, και τυχόν απορίες σας θα λυθούν παρακάτω. +- **`gtk_widget_show(button);`**\ + Αυτή η συνάρτηση εμφανίζει το widget που δέχεται σαν όρισμα. Παρατηρείστε ότι τα widgets, δεν εμφανίζονται μόνα τους. Δεν φτάνει δηλαδή η συνάρτηση + `gtk_container_add` για να εμφανιστεί. Πρέπει πρώτα να προστεθούν όλα, και μετά να εμφανιστούν. Αυτό, μας προστατεύει από συμπεριφορές του τύπου να γίνονται + όλα render στην οθόνη ένα-ένα το οποίο οπτικά είναι πολύ άσχημο, πιστέψτε με. Εμφανίζουμε λοιπόν με την συγκεκριμένη εντολή το κουμπάκι. +- **`gtk_widget_show(window);`**\ + \`Οπως και το παραπάνω, μόνο που εδώ εμφανίζουμε το παράθυρο. +- **`gtk_main();`**\ + Περνάμε τον έλεγχο στην `gtk_main` όπως περιγράψαμε προηγουμένως. +- **`retutn(0);`**\ + Είναι το **exit status** του προγράμματός μας. Θα μπορούσαμε με κάποιο έλεγχο να είχαμε διαφορετικό **exit status**, ανάλογα με το αν το πρόγραμμα απέτυχε, + αν το πρόγραμμα δεν ολοκληρώθηκε, κ.λπ. + +Και ας ρίξουμε μια γρήγορη ματιά στις συναρτήσεις που περιέχει το πρόγραμμα. Αν και είναι πολύ εύκολες στην κατανόηση, υπάρχουν κάνα-δυο σημεία που χρειάζονται +εξήγηση. + +- **`void hello(GtkWidget *widget, gpointer data)`**\ + \`Οπως βλέπουμε, είναι μια συνάρτηση που απλά καλείται όταν πατήσει ο χρήστης το πλήκτρο, και το μόνο που κάνει είναι να τυπώνει **Hello Magez** και να + προσθέτει μια νέα γραμμή. +- **`gint del_eve(GtkWidget *widget, GdkEvent *event, gpointer data)`**\ + Η συνάρτηση που καλείται όταν πατηθεί το κουμπί που τερματίζει το πρόγραμμα. Επιστρέφει τιμή ακεραίου, και όπως βλέπουμε (στο συγκεκριμένο παράδειγμα + τουλάχιστον) επιστρέφει TRUE. Αυτός είναι και ο λόγος που δεν έχουμε έξοδο από το πρόγραμμα όταν -θεωρητικά- το κλείνουμε με το κουμπί κλεισίματος. Αν η + τιμή που επιστρέφει αλλαχθεί σε FALSE, τότε θα έχουμε έξοδο από το πρόγραμμα (δοκιμάστε το). Αυτό συμβαίνει, γιατί η συνάρτηση που καλείται από την + `delete_event` εξ ορισμού από τo gtk επιστρέφει μια τιμή που αν είναι FALSE, καλεί το event `destroy` (θυμηθείτε ότι το έχουμε συνδέσει με τη συνάρτηση + `dest`) +- **`void dest(GtkWidget *widget, gpointer data)`**\ + Με τη συνάρτηση αυτή έχουμε έξοδο από το πρόγραμμα, μέσω μιας ενσωματωμένης στο gtk συνάρτησης, της `gtk_main_quit` + +### [4.5 Πως θα το τρέξετε.]{#ss4.5} + +Για να κάνετε compile to πρόγραμμα, χρησιμοποιήστε την εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gcc -Wall -g HelloMagez.c -o hellomagez `gtk-config --cflags` `gtk-config --libs` + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\`Οσοι δεν ξέρουν τι είναι αυτό, **man gcc**. Μόλις ολοκληρωθεί η παραπάνω εντολή, στο τρέχον directory θα έχει δημιουργηθεί το αρχείο **hellomagez**, που είναι +και το εκτελέσιμο. Τρέξτε το! + + +### [5. Tοποθέτηση των widgets]{#s5} + +Το πιο πιθανό είναι να μην δημιουργήσουμε ποτέ μια εφαρμογή που θα έχει μονάχα ένα *widget*, όπως στην περίπτωση του **HelloMagez**. Μάλλον, αυτό που θα θέλουμε +να κάνουμε θα αποτελείται από περισσότερα από ένα *widget*. Ας δούμε πως μπορούμε να τα τοποθετήσουμε στο παράθυρο του προγράμματός μας. + +### [5.1 Boxes, ή αλλιώς κουτιά :)]{#ss5.1} + +Τα *boxes* θα γίνουν οι καλύτεροι φίλοι μας στη διαδικασία σύνταξης εφαρμογών για **gtk**, αλλά - πιστέψτε με - και οι χειρότεροί μας εχθροί. Θα μάθουμε να +ζούμε με τα *boxes*, και να είστε σίγουροι ότι δεν θα τα γλιτώσουμε. Τι είναι όμως αυτά τα *boxes*;\ +Είναι widgets, όπως και όλα τα άλλα. Απλά, μπορούν να περιέχουν περισσότερα από 1 widgets πάνω τους. Δεν είναι ορατά, και χρησιμοποιούνται μονάχα για την +ομαδοποίηση αντικειμένων. Τα boxes μπορεί να είναι δύο ειδών, ανάλογα με τον προσανατολισμό που θέλουμε να πάρουν τα προς τοποθέτηση σε αυτό *widgets*: + +- **HORIZONTAL BOXES**\ + Τα τοποθετημένα σε αυτό *widgets* θα μπουν στη σειρά από αριστερά προς τα δεξιά ή από τα δεξιά προς τα αριστερά όπως θα δούμε παρακάτω στην εξήγηση των + συναρτήσεων **`gtk_box_pack_start`** και **`gtk_box_pack_end`**.\ + H δημιουργία ενός τέτοιου *box* επιτυγχάνεται με τη χρήση της συνάρτησης **`gtk_hbox_new`**. +- **VERTICAL BOXES**\ + Τα τοποθετημένα σε αυτό *widgets* θα μπουν στη σειρά από πάνω προς τα κάτω ή από κάτω προς τα πάνω, πάλι με χρήση των **`gtk_box_pack_start`** και + **`gtk_box_pack_end`**.\ + Σε γενικές γραμμές, η δημιουργία ενός τέτοιου *box* επιτυγχάνεται με τη χρήση της συνάρτησης **`gtk_hbox_new`**. + +#### Δημιουργία, σύνταξη και παραμέτροι. + +Για τη δημιουργία ενός box, χρησιμοποιούμε τις **`gtk_hbox_new`** και **`gtk_vbox_new`** όπως αναφέραμε και παραπάνω.\ +Η σύνταξη και ο τύπος των συναρτήσεων αυτών είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + GtkWidget *gtk_hbox_new(gint homogeneous, gint spacing); + GtkWidget *gtk_vbox_new(gint homogeneous, gint spacing); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στη συνέχεια θα αναφέρομαι μονάχα στην εντολή `gtk_hbox_new` και ότι ισχύει για αυτήν ισχύει και για την `gtk_vbox_new`. \`Οπως παρατηρούμε, επιστρέφει τιμή +τύπου `GtkWidget`, και παίρνει δύο τιμές, τύπου *gint*, τις **homogenous** και **spacing**. + +Η **homogenous** μπορεί να είναι TRUE ή FALSE (και φυσικά οποιαδήποτε λογική έκφραση) και μας δίνει τη δυνατότητα να ελέγξουμε αν τα *widgets* που θα +τοποθετηθούν στο box θα έχουν το ίδιο πλάτος όλα ή όσο χρειάζεται το κάθε ένα. + +Η παράμετρος **spacing** καθορίζει πόσα pixels θα απέχουν μεταξύ τους τα *widgets*. + +#### Εργασία με τα boxes + +Δεν πιστεύω να σας τρόμαξα με τα όσα έγραψα για τα boxes στην προηγούμενη ενότητα\... \`Οπως θα δείτε, η εργασία με τα boxes είναι μια εύκολη υπόθεση, αν ξέρετε +να δουλεύετε τις συναρτήσεις **`gtk_box_pack_start`** και **`gtk_box_pack_end`**. Στη συνέχεια θα δούμε πόσο εύκολη είναι η εργασία με αυτές τις συναρτήσεις. + +**`gtk_box_pack_start`**\ +**`gtk_box_pack_end`** + +Η μορφή αυτών των συναρτήσεων είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + void gtk_box_pack_start(GtkBox *box, GtkWidget *child, gint expand, gint fill, gint padding ); + void gtk_box_pack_end(GtkBox *box, GtkWidget *child, gint expand, gint fill, gint padding ); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δεν επιστρέφουν καμία τιμή (είναι void απ\' ότι βλέπετε) και τα ορίσματα που δέχονται εξηγούνται παρακάτω: + +- **`GtkBox *box`**\ + Το όνομα του *box* στο οποίο αναφερόμαστε. +- **`GtkWidget *child`**\ + Το όνομα του *widget* το οποίο προσθέτουμε. +- **`gint expand`**\ + Είναι μορφής *gint*, και αυτό που περιγράφει είναι αν το *widget* που τοποθετούμε θα πιάνει όλη την περιοχή του *box*. Μπορούμε να του αποδώσουμε τις τιμές + TRUE και FALSE. TRUE στην περίπτωση που θέλουμε να πιάνει όλη την διαθέσιμη περιοχή, και FALSE αν θέλουμε να πιάνει μόνο όση περιοχή του είναι απαραίτητη. + Δίδοντας την τιμή FALSE μπορούμε να επιτύχουμε (αριστερή στην περίπτωση της **`gtk_box_pack_start`** ή δεξιά στην περίπτωση της **`gtk_box_pack_end`**) + στοίχιση.\ + \`Οπως καταλαβαίνετε, αν δοθεί η τιμή TRUE, δεν έχει σημασία πια από τις **`gtk_box_pack_start`** ή **`gtk_box_pack_end`** χρησιμοποιήσουμε. +- **`gint fill`**\ + Η τιμή αυτής της παραμέτρου έχει σημασία μόνο αν η τιμή της **`expand`** είναι TRUE. Και αυτό γιατί περιγράφει αν ο επιπλέον χώρος που μένει μετά τη + δημιουργία των *widgets* θα ανήκει σε αυτά (Δηλ. θα τα μεγαλώσει) στην περίπτωση που πάρει την τιμή TRUE ή αν θα ανήκει στο *box* σαν αδιάθετος χώρος στην + περίπτωση που της δώσουμε την τιμή FALSE +- **`gint padding`**\ + Αριθμός τύπου *gint*, που καθορίζει πόσος χώρος (σε pixels) γύρω από το κάθε *widget* δεν θα χρησιμοποιείται. + +### [5.2 Tοποθέτηση των widgets, partII (λέγε με tables)]{#ss5.2} + +Υπάρχει και άλλος ένας τρόπος για να στοιχίσουμε τα widgets στο παράθυρο της εφαρμογής μας. Αυτός επιτυγχάνεται με τη χρήση της συνάρτησης **`gtk_table_new`** +που δημιουργεί έναν πίνακα στο παράθυρο της εφαρμογής μας. Φυσικά, και αυτή η συνάρτηση χρησιμοποιείται μόνο για την τοποθέτηση των διαφόρων *widgets* στο +παράθυρο, και δεν σχεδιάζεται κανένας πίνακας στην εφαρμογή μας.\ +Η σύνταξή της είναι η εξής: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + GtkWidget *gtk_table_new(gint rows, gint columns, gint homogeneous ); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Είναι προφανές ότι rows είναι ο αριθμός των γραμμών του πίνακά μας και columns ο αριθμός των στηλών του. + +Το homogenous περιγράφει τον τρόπο που τα κελιά του πίνακα θα διανέμονται και θα τοποθετούνται πάνω στο παράθυρό μας. Αν είναι TRUE, τότε όλα τα κελιά του +πίνακα μεγαλώνουν ή μικραίνουν, σύμφωνα με το μεγαλύτερο *widget* στον πίνακα. Αν πάρει την τιμή FALSE, το μέγεθος ορίζεται από το πιο μακρύ *widget* στην κάθε +στήλη και το πιο ψηλό *widget* στην σειρά. Αυτό που ουσιαστικά συμβαίνει είναι ότι αν το HOMOGENEOUS είναι TRUE, όλα τα *widgets* έχουν το ίδιο μέγεθος, και +είναι ομοιόμορφα τοποθετημένα πάνω στο box. + +Η διάταξη των κελιών του πίνακα, διαμορφώνεται από το 0 μέχρι τις τιμές *rows* και *columns*. Μoιάζει δηλαδή με το παρακάτω. Η αρίθμηση όπως βλέπετε, ξεκινάει +από την πάνω αριστερή γωνία. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 0 1 2 + 0+----------+----------+ + | | | + 1+----------+----------+ + | | | + 2+----------+----------+ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για την τοποθέτηση ενός widget σε ένα πίνακα, χρησιμοποιούμε την συνάρτηση **`gtk_table_attach`**, της οποίας η σύνταξη είναι η παρακάτω + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + void gtk_table_attach(GtkTable *table, GtkWidget *child, gint left_attach, gint right_attach, + gint top_attach, gint bottom_attach, gint xoptions, + gint yoptions, gint xpadding, gint ypadding); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δεν επιστρέφei καμία τιμή και τα ορίσματα που δέχεται είναι + +- **`GtkTable *table`**\ + Το Table στο οποίο αναφερόμαστε + +- **`GtkWidget *child`**\ + Το widget που θέλουμε να τοποθετήσουμε + +- **`gint left_attach`**\ + Η αριστερή συντεταγμένη από όπου θα αρχίζει το widget + +- **`gint right_attach`**\ + Η δεξιά συντεταγμένη από όπου θα τελειώνει το widget + +- **`gint top_attach`**\ + Η πάνω συντεταγμένη από όπου θα αρχίζει το widget + +- **`gint bottom_attach`**\ + Η κάτω συντεταγμένη που θα τελειώνει το widget + +- **`gint xoptions`**\ + χρησιμοποιείται για τον καθορισμό του τρόπου πακεταρίσματος, και θα το δούμε στη συνέχεια πιο αναλυτικά + +- **`gint yoptions`**\ + \`Οπως και το παραπάνω, και οι τιμές που μπορεί να πάρει τόσο αυτό όσο και το `xoptions` είναι οι παρακάτω: + + - **`GTK_FILL`**\ + Αν η περιοχή (συνήθως το κουτί του πίνακα) είναι μεγαλύτερο από το widget που τοποθετούμε, το widget θα μεγαλώσει τόσο ώστε να καλύψει όλο τον χώρο που + υπάρχει. + - **`GTK_SHRINK`**\ + Αν κατά την απόδοση χώρου σε ένα κουτί ο χώρος που δίνεται σε ένα widget είναι μικρότερος από το μέγεθός του ίδιου του widget, τότε αυτό θα μικράνει + ώστε να χωράει. Κάτι τέτοιο συμβαίνει όταν ο χρήστης κάνει resize σε ένα παράθυρο. Αν δεν είναι ορισμένο το **`GTK_SHRINK`** είναι πολύ πιθανό σε μια + τέτοια περίπτωση να μην εμφανίζονται τα widgets μέσα στον χώρο του παραθύρου μας. + - **`GTK_EXPAND`**\ + Με αυτό τον τρόπο μπορούμε να αποδώσουμε στο table μας όλο τον χώρο που απομένει στο παράθυρο μετά τη δημιουργία του. + + Οι παραπάνω τιμές που μπορούν να πάρουν, είναι δυνατό να συνδυαστούν με το **OR** για να καλύψουμε περισσότερες από μια περιπτώσεις. + +- **`gint xpadding`**\ + Το γνωστό και πολλάκις εξηγημένο padding στον οριζόντιο άξονα + +- **`gint ypadding`**\ + \`Οτι και το παραπάνω, αναφέρεται όμως στον κατακόρυφο άξονα + +Για όλους εσάς που όλα αυτά τα ορίσματα στην παραπάνω συνάρτηση σας φάνηκαν πολλά, υπάρχει και μια άλλη, που κάνει την ίδια (περίπου) δουλειά απλούστερα. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + void gtk_table_attach_defaults(GtkTable *table, GtkWidget *widget, gint left_attach, + gint right_attach, gint top_attach, gint bottom_attach); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\`Οπως παρατηρούμε, μόνο οι βασικές παραμέτροι περνάνε στη συνάρτηση. Ουσιαστικά δηλαδή, μόνο τα controls θέσης και μεγέθους. Οι παραμέτροι που δεν αναφέρονται, +παίρνουν κάποιες προκαθορισμένες τιμές. Αυτές είναι οι πλέον χρησιμοποιούμενες, και συγκεκριμένα τα **X** και **Y options** γίνονται +**`GTK_FILL | GTK_EXPAND`**, (ελπίζω να ξέρετε ότι το \`\`\|\'\' είναι το **OR**) και στα **X** και **Y padding** δίδεται η τιμή +0. + +Για να καθορίσουμε το spacing ανάμεσα σε συγκεκριμένες γραμμές και στήλες ενός πίνακα, χρησιμοποιούμε τις παρακάτω συναρτήσεις: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + void gtk_table_set_row_spacing(GtkTable *table, gint row, gint spacing); + void gtk_table_set_col_spacing(GtkTable *table, gint col, gint spacing); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +όπου row ή col η γραμμή ή η στήλη στην οποία αναφερόμαστε, και spacing η απόσταση που θέλουμε να ορίσουμε σαν spacing. Για τις στήλες το spacing προστίθεται στα +ΔΕΞΙΑ και για τις γραμμές ΚΑΤΩ. + +Είναι επίσης δυνατό να καθορίσουμε για ΟΛΕΣ τις στήλες ή γραμμές το spacing, χρησιμοποιώντας τις συναρτήσεις: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + void gtk_table_set_row_spacings(GtkTable *table, gint spacing); + void gtk_table_set_col_spacings(GtkTable *table, gint spacing); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +\`Οπως πολύ καλά καταλάβατε, η τελευταία στήλη και η τελευταία σειρά δεν λαμβάνουν αυτή την τιμή, γιατί θα δημιουργούσε ένα κενό στα αριστερά και ένα κενό κάτω. + +Είναι φανερό ότι το να δουλεύει κανείς με tables είναι εύκολο. Εγώ προσωπικά δεν το προτιμώ, παρόλο που είναι βασικά η μόνη λύση στην περίπτωση που θέλουμε +απόλυτα στοιχισμένα κουτάκια και κουμπάκια και widgets. Δοκιμάστε το πάντως, και πολλές φορές θα σας λύσει τα χέρια + +### [5.3 Η συνέχεια]{#ss5.3} + +Τον επόμενο μήνα θα συνεχίσουμε αυτό το άρθρο και θα ασχοληθούμε περισσότερο με τα widgets (buttons, radio/check/toggle buttons, text boxes, κ.λπ.) και τις +ιδιότητές τους. Μέχρι τότε, πολλά φιλάκια. + diff --git a/content/articles/20/05_civ.md b/content/articles/20/05_civ.md new file mode 100644 index 0000000..dbab4e3 --- /dev/null +++ b/content/articles/20/05_civ.md @@ -0,0 +1,69 @@ ++++ +title = 'Civ Call To Power' +date = '1999-12-01T00:00:00Z' +description = '' +author = 'Αντώνης Μαυρέλος(mailto:A.Mavrelos@csd.ase.gr)' +issue = ['Magaz 20'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία παρουσίαση του παιχνιδιού Civ Call To Power που κυκλοφόρησε για Linux από την Loki* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Τίτλος: Civ Call To Power + Κατασκευαστής: Activision + Μεταφορά στο Linux: Loki Entertainment Software + Διανομή στην Ελλάδα: SuSe + Τιμή: 16000 (Αν βρείτε τον Νικήτα στο μαγαζί του Παπασωτηρίου) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για μένα το Civilization είναι ένα από τα καλύτερα παιχνίδια όλων των εποχών. Η πρώτη του έκδοση κυκλοφόρησε στις αρχές της δεκαετίας για DOS μόνο τότε. Μετά +βγήκε και η έκδοση για Amiga και μπορούσα να ξενυχτήσω και εγώ όπως οι άλλοι τυχεροί. Το Civilization διέθετε ένα χαρακτηριστικό το οποίο δεν είχαν τα άλλα +παιχνίδια. Ηταν ρεαλιστικό. Το θέμα του είχε άμεση σχέση με την πορεία του ανθρώπου κατά την διάρκεια της εξέλιξης του τόσο πολιτισμικά όσο και κυριαρχικά. Δεν +μιλούσε για Θεούς και Δαίμονες, ήρωες, πολεμιστές, φανταστικά γεγονότα και ιστοριούλες. Αναλάμβανες να οδηγήσεις ένα πολιτισμό από το -3000 π.Χ μέχρι το 2020 +μ.Χ. Να ανακαλύψεις ό,τι ανακάλυψε ο άνθρωπος κατά τη διάρκεια του χρόνου. Αντίπαλοι σου άλλες φυλές όλες οδηγούμενες από τον Υπολογιστή. + +Η έκδοση 2 κυκλοφόρησε με βελτιωμένα γραφικά και για την πλατφόρμα των Windows. Το θέμα δεν άλλαξε, διορθώθηκαν μικροατέλειες και η ΑΙ. Το 2 πούλησε ακόμα +περισσότερο και χαρακτηρίστικε από πολλά \"δημοψηφίσματα\" σαν το καλύτερο παιχνίδι όλων των εποχών. Φυσικό ήταν λοιπόν και η όποια συνέχειά του να ακολουθήσει +την ίδια συνταγή. Ο Sid έφυγε από την Microprose που ήταν και η κατασκευάστρια εταιρεία και δημιούργησε την Firaxis. Η Firaxis έβγαλε πριν ένα χρόνο το Alpha +Centauri ταυτόχρονα με την Activision που έβγαλε για τα Windows το Civ. Τα δύο παιχνίδια έχουν το ίδιο θέμα αλλά το ένα χρονικά βρίσκεται στο μέλλον και είναι η +συνέχεια του αρχικού Civilization που τελείωνε όταν ο άνθρωπος έφτανε στο Αλφα του Κεντάυρου και το δεύτερο\... + +Ενα βελτιωμένο από όλες τις απόψεις Civilization. Καταρχήν Multiplayer. Εστω και Turn Based Strategy (όχι Real Time) έχει μεγαλύτερο ενδιαφέρον να παίζεις +εναντίον ανθρώπου παρά του υπολογιστή. Τα γραφικά είναι καταπληκτικά, παίζει σε παράθυρο αλλά και με DGA σε Full Screen. Υπάρχουν σκηνές μάχης, με αντιπαράθεση +των στρατών ο ένας απέναντι από τον άλλο. Τα σενάρια είναι πιο πολύπλοκα και, γιατί όχι, έξυπνα. + +Για παράδειγμα υπάρχει δυνατότητα να πιάσεις δούλους από γειτονικές πόλεις, να χρησιμοποιήσεις δικηγόρους(!), παπάδες και άλλα τέτοια τρελά πράγματα. Ολα αυτά +δίνουν στο gameplay μια ώθηση. + +Ενα ενοχλητικό χαρακτηριστικό είναι κάποια buttons που βρίσκονται στο κάτω μέρος χαμηλά στην οθόνη και αρκετές φορές παρεμβαίνει το Panel του KDE όταν τα +πατάμε. + +O έλεγχος για όποιον έχει συνηθήσει στα προηγούμενα είναι αρκετά δύσκολος. Η βοήθεια που σου δίνουν ta icons στο αριστερό μέρος είναι μεγάλη αρκετές φορές (για +παράδειγμα ξεχνιέσαι να δώσεις δουλειά σε μια πόλη ή αφήνεις να φτιάχνει το ίδιο πράγμα πολλές φορές). Είναι όμως ενοχλητικά τα πολλά κλικ και γίνονται αρκετά +\"χιλιόμετρα\" με το ποντίκι. + +Το παιχνίδι θα φανεί τις πρώτες φορές εχθρικό. Γίνονται πολλές ξαφνικές επιθέσεις από βάρβαρους ή από άλλες φυλές αλλά σε γενικές γραμμές είναι εύκολο. + +![](/20/img/civ_sm.png)\ +[Μεγάλο μέγεθος](/20/img/civ.png) + +**Installation** + +To πακέτο περιέχει 2 δισκάκια. Στο ένα είναι το παιχνίδι και στο άλλο το SuSE 6.1. Φανταστείτε στην έκδοση για Windows να είχε άλλο ένα δισκάκι με τα Windows +98. Αν πάει καλά το Linux και μειωθεί το ποσοστό των windows users μπορεί η MS σε 3-4 χρόνια να δίνει μια Lite έκδοσή τους ίσα-ίσα για να ξεκινήσει το παιχνίδι. +Οι οδηγίες εγκατάστασης είναι απαράδεκτες. To πρόγραμμα που κάνει install τα tar.gz files δεν είναι καν executable. Δεν υπάρχει πρόβλημα για κάποιον που έχει +λίγες απλές γνώσεις αλλά για τον αρχάριο είναι βουνό. Σίγουρα τα επόμενα παιχνίδια δεν θα έχουν τέτοιες μικροατέλειες. H Loki έχει βγάλει τον Installer σε open +source και ήδη βοηθάει κόσμος. Ας θυμηθούμε πώς γινόταν η εγκατάσταση στις πρώτες εκδόσεις του Linux και που φτάσαμε σήμερα με την Corel και Caldera. + +Κατά τα άλλα το εγχειρίδιο του παιχνιδιού είναι άριστο. Στις 100 σελίδες του βρίσκονται όλα όσα χρειάζεται κανείς και είναι ευκολοδιάβαστο. Δεν υπάρχουν πολλά +Hints αλλά σίγουρα μετά από 1-2 χρόνια θα βγει κάποια Special Edition με ένα ακόμα πιο πλήρες manual. Υπάρχει και μια αφίσσα που θα κοσμήσει τον τοίχο σας. + +Το κόστος του Civ είναι αρκετά μεγάλο. Στις 16900 κρίνεται εξαρχής απαγορευτικό για κάποιους, ενώ για κάποιους άλλους η κόπια θεωρείται μονόδρομος. Πιστεύω ότι +με το καιρό και όσο πολλαπλασιάζονται οι εγκαταστάσεις με Linux θα μειωθούν οι τιμές. Civ στο Linux ποιος θα το φανταζοταν πριν 2 χρόνια! Να περιμένουμε δηλαδή +και την Enacarta 2001; diff --git a/content/articles/21/01_editorial.md b/content/articles/21/01_editorial.md new file mode 100644 index 0000000..a998912 --- /dev/null +++ b/content/articles/21/01_editorial.md @@ -0,0 +1,37 @@ ++++ +title = 'Editorial' +date = '2000-01-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 21'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο πρώτο **Magaz** του 2000\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ήρθε και το 2000. Και μαζί του το Magaz, έστω και λίγο καθυστερημένο, χτυπημένο από τον ιό, όχι της χιλιετίας, αλλά της γρίππης.\ +Ήρθε και το 2000 που το περιμένανε κάποιοι πως και πως: + +- Τα ΜΜΕ, ελληνικά και διεθνή, για να \"πουλήσουν\" ένα χρόνο νωρίτερα το millennium. Αν και περίμενα η \"αναγνώριση\" για την λάθος ημερομηνία να γίνει κατά + τον Απρίλιο, ξεκίνησε σε ορισμένα κανάλια από τις πρώτες μέρες του Ιανουαρίου. Περιμένουμε βέβαια σε 11 μήνες, την ίδια ιστορία - υστερία με το millennium. +- Οι επιτήδειοι που πουλάνε τα πάντα, σιγά μην αφήνανε αυτό το \"λογιστικό λάθος\" να πάει ανεκμετάλλευτο :-) +- Οι κασσάνδρες που προμήνυαν το τέλος του κόσμου (για άλλη μία φορά διαψεύσθηκαν). +- Τέλος οι εργαζόμενοι σε θέσεις που έχουν σχέση, άμεση ή έμμεση, με υπολογιστικά συστήματα, για να δούνε την επίδραση της αλλαγής των τριών τελευταίων ψηφίων + της ημερομηνίας (για να θέσουμε και το πρόβλημα στην πραγματική του βάση) στα συστήματα αυτά. + +Αυτό το τελευταίο ήταν (και παραμένει) ο μόνος πραγματικός λόγος για τον οποίο θα έπρεπε κάποιος να αγωνιά για την έλευση του 2000. Τα πραγματικά αποτελέσματα +θα φανούν κατά το Μάρτιο - Απρίλιο, οπότε θα μπορούμε με ασφάλεια να υποθέσουμε ότι το 90% των προγραμμάτων έχουν ήδη χρησιμοποιηθεί και δεν έχουν παρουσιάσει +πρόβλημα (ή έχουν παρουσιάσει, αλλά λύθηκε).\ +Πραγματικά, τα μόνα προβλήματα που έχουν φανεί μέχρι τώρα είναι απλά scripts που \"τρέχουν\" σε διάφορες web σελίδες ανά τον κόσμο, εντελώς ακίνδυνα βέβαια, τα +οποία στην συντριπτική τους πλειοψηφία οφείλονται στην βαρεμάρα (ή μήπως άγνοια / αδιαφορία;) των web-developers να ελέγξουν ποια έκδοση JavaScript χρησιμοποιεί +ο browser που τους βλέπει. Να επισημάνω εδώ, ότι μετά από συζητήσεις με διάφορους και προβληματισμό σχετικά με αυτό το θέμα, μια που φαίνεται ότι αυτά τα +προβλήματα δεν έχουν τελειωμό, βρήκα επιτέλους το λάθος, το οποίο είναι απλούστατο. Η έκδοση JavaScript 1.1 και οι προηγούμενες, επιστρέφουν στην function +getYear() διαφορετικό output από ότι η έκδοση 1.2 και έτσι, ανάλογα με τον browser (μάρκα - έκδοση) είναι και η χρονιά που βλέπει ο καθένας\... + +Το τεύχος αυτό, δεν έχει παρά ένα μόνο τεχνικό άρθρο. Τα άλλα 3 είναι άρθρα - αναλύσεις, το έναυσμα για ένα από αυτά ήταν ένα προσωπικό mail που έλαβε ο γράφων, +από κάποιον άγνωστο, και για κάποιο άλλο, η αδυναμία του γράφοντος να δει κάποιες web σελίδες στον ελληνικό \"κυβερνοχώρο\". + +Αρκετά όμως με αυτήν την εισαγωγή. Σας ευχόμαστε καλή ανάγνωση, και ό,τι επιθυμείτε για το 2000 να πραγματοποιηθεί. diff --git a/content/articles/21/02_opensource.md b/content/articles/21/02_opensource.md new file mode 100644 index 0000000..e50673e --- /dev/null +++ b/content/articles/21/02_opensource.md @@ -0,0 +1,114 @@ ++++ +title = 'Γιατί Free Software' +date = '2000-01-01T00:00:00Z' +description = '' +author = 'Νίκος Μαυρογιαννόπουλος(mailto:nmav@hellug.gr)' +issue = ['Magaz 21'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σε αυτό το κείμενο θα προσπαθήσουμε να κάνουμε μια σύγκριση μεταξύ ιδιόκτητου λογισμικού (proprietary software) και ελεύθερου λογισμικού (free software).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε αυτό το σημείο θα πρέπει να κάνουμε μια διευκρίνιση η οποία είναι απαραίτητη: τo ελεύθερο λογισμικό δεν είναι public domain, είναι το λογισμικό όπως εχει +οριστεί από το free software foundation ( ). Αναφέρεται και σε εμπορικά προγράμματα, μιας και υπάρχουν πολλά παραδείγματα ελεύθερων +προγραμμάτων που είναι εμπορικά (περισσότερες πληροφορίες στο , και ). + +Αντίθετα με ότι συνήθως ακούμε η διαφορες μεταξύ του ελεύθερου λογισμικού και του ιδιόκτητου λογισμικου, δεν περιορίζονται στην τιμή του λογισμικού, ούτε ακόμη +και στον ανοιχτό κώδικα. + +**Ανοικτός κώδικας:** + +Ο ανοικτός κώδικας (open source) είναι ένα βασικό κομμάτι του free software, χωρίς το οποίο η ιδέα αυτή θα ήταν άχρηστη. Όλα τα open source προγράμματα +συνοδεύονται απο τον κώδικα τους, επιτρέποντας την αλλαγή του, για βελτίωση του ίδιου του προγράμματος, ή ακόμη και την χρησιμοποίηση του κώδικα αυτούσιου (η με +αλλάγες) για την εξυπηρέτηση δικών μας αναγκών, με ορισμένους περιορισμούς, που θα δούμε παρακάτω. Ετσι μπορεί ο καθένας να βελτιώσει ένα πρόγραμμα και να του +προσθέσει δυνατότητες που χρειάζεται, απλώς και μόνο χρηματοδοτώντας έναν προγραμματιστή για να το κάνει. Δεν εξαρτάται από τον αρχικό προγραμματιστή ή απο +κάποια εταιρεία. + +**Αδεια χρήσης:** + +Δεν είναι όμως το open source το μόνο χαρακτηριστικό του free software, εξ\'ίσου σημαντική είναι και η άδεια κάτω από την οποία μπορεί κάποιος να χρησιμοποιήσει +κώδικα\... Η οποία συνοψίζεται: + +1. σε περίπτωση αλλαγής/χρησιμοποίησης κώδικα απο ελεύθερο λογισμικό, οι αποδέκτες του αλλαγμένουν κώδικα, πρέπει να έχουν τα ίδια δικαιώματα με αυτόν που + τροποποίησε τον κώδικα, όχι λιγότερα. +2. Δεν υπάρχει περιορισμός στην διανομή ελεύθερου λογισμικού. + +Αυτή η άδεια δεν επιτρέπει σε κάποια εταιρεία/προγραμματιστή να προσθέσει λίγες ή πολλές δυνατότητες σε ένα ελεύθερο πρόγραμμα, και να το προωθήσει ως ιδιόκτητο +(δηλαδή να περιορίσει τα δικαιώματα του τελικού χρήστη, σε ένα μικρό υποσύνολο από αυτά που είχε καθορίσει ο αρχικός προγραμματιστής). Αυτός είναι και ο βασικός +λόγος που ο πυρήνας του linux, και πολλά προγραμματά του παραμένουν ελεύθερα ακόμη και μετά την εισαγωγή εμπορικών εταιριών στην διανομή του. Αντίθετα λογισμικό +ανοικτού κώδικα, όπως το BSD, κάτω από την άδεια του Berkeley, δεν κατάφερε να παραμείνει open-source, μετα την εισαγωγή εταιρίων στην διανομή του (στη +συγκεκριμένη περίπτωση η ελευθερία του κώδικα δεν ήταν ο σκόπος). + +**Η τιμή:** + +Σε πολλές συζητήσεις ακόμη και στην linux-greek-users λίστα συζητήσεως, πολλοί αναφέρουν την τιμή σαν την πιο σημαντική διαφόρα του ελέυθερου λογισμικού από το +ιδιόκτητο. Συνήθως αυτό δεν ισχύει. Δεν υπάρχει καμιά εγγύηση ότι το ελεύθερο λογισμικό είναι δωρεάν (εδώ μπερδέυει η αγγλική γλώσσα με την χρήση του \"free\" +για να περιγράψει και το \"δωρεάν\" και το \"ελεύθερο\"). Το ελεύθερο λογισμικό μπορεί να μην είναι δωρεάν ενώ το ιδιόκτητο λογισμικό μπορεί να είναι δωρεάν +(πόσα εμπορικά πακέτα δεν κυκλοφορούν δωρεάν ή σε πολύ χαμηλή τιμη για να αυξήσουν την δημοτικότητα τους;). + +**Ιδιόκτητο λογισμικό** + +Η ερώτηση μπορεί να τεθεί ως εξής: Αν η διαφορά ελεύθερου και ιδιόκτητου λογισμικού περιορίζεται στην τιμή, αν το ιδιόκτητο διανεμόταν δωρέαν θα ήταν ελεύθερο;\ +Μάλλον όχι. + +Το ιδιόκτητο λογισμικό θέτει υπερβολικούς περιορισμούς ακόμη και αν διανέμεται δωρεάν. + +1. Δεν μπορεί καποιος να μοιραστεί το πρόγραμμα με τους φίλους/γνωστούς του. Αν σας φαίνεται λογικό το παραπάνω σκεφτείτε το εξής: Θα δανείζατε ένα βιβλίο σας + σε ένα φίλο σας που σας το ζήτησε; Ο φίλος σας αυτός μπορεί να επωφεληθεί διαβάζοντας αυτά που γράφει το βιβλίο; Θα κάνατε το ίδιο με το δισκάκι ενος + ιδιόκτητου προγράμματος που έχετε αγοράσει; Αν όχι, τότε μαλλόν η εταιρεία σας έχει πείσει οτι αυτό δεν είναι σωστό, συνήθως αναφέροντας διαφυγόντα έσοδα. + Είναι αυτό αποδεκτό; Πόσα βιβλία που έχετε δανειστεί για να διαβάσετε θα αγοράζατε; Ίσως και κανένα. +2. Δεν μπορεί κάποιος να διορθώσει ένα πρόβλημα του λογισμικού πηγαίνοντας το στον προγραμματιστή που προτιμά. Μονο η εταιρεία που το δημιούργησε μπορεί να + αναβαθμίσει/διορθώσει το πρόγραμμα. Σκεφτείτε τί γίνεται αν η εταιρεία κλείσει, ή αν τα χρήμματα που ζητά για να κάνει αυτό που θέλουμε είναι υπερβολικά.\ + Αυτό μπορεί να γίνει πιο κατανοητό με το παράδειγμα μιας αγοράς αυτοκινήτου, του οποίου η εταιρεία σας υποχρεώνει να του κάνετε service, ή να αγοράζετε + αξεσουάρ, μόνο στα τα δικά της καταστήματα. +3. Είναι παράνομο σύμφωνα με την άδεια του προγράμματος να δει κάποιος πως λειτουργεί(reverse engineering)! Δηλαδή έχουμε ένα πρόγραμμα το οποίο λειτουργεί για + μας, αλλά μας απαγορεύει να δούμε τι ακριβώς κάνει και πώς το κάνει. Κατέχουμε δηλαδή ένα μαύρο κουτί, ερμητικά κλειστό.\ + Παραλληλήστε το, πάλι, με ένα αυτοκίνητο το οποίο έχει τέτοια άδεια χρήσης, ωστε να απαγορεύει να κοιτάξει κάποιος την μηχανή του. + +Ευλογα αναρωτιέται κανείς αν είναι δικό του το πρόγραμμα που αγόρασε. + +Από τα παραπάνω φαίνεται ότι μάλλον δεν είναι, είναι (όπως αναφέρει και ο τίτλος) ιδιοκτησία της εταιρείας που το παρήγαγε και απλώς μας δίνει μια άδεια +περιορισμένης χρήσης. + +Τα παραπάνω είναι αντίθετα με την ιδέα της ελεύθερης διαδοσης της γνώσης, και της προόδου. Σκεφτείτε κάποιον μαθηματικό να παράγει θεωρήματα τα οποία +\"προστατεύει\", κάτω απο παρόμοιες άδειες, ωστε να επωφεληθεί ο ίδιος. Η ανάπτυξη στον τομέα αυτόν θα προχωρούσε με ρυθμό χελώνας. (Αυτό συνέβαινε και +συμβαίνει ακόμη σε τομείς όπου δεν υπάρχει πανεπιστημιακή παρουσία. Πχ η κρυπτογραφία μέχρι την δεκαετία του 1970 ελεγχόταν απο οργανισμούς κρατικούς ή μη, οι +οποίοι δεν παρουσίαζαν τα αποτελέσματα των ερευνών τους. Αποτέλεσμα αυτού ήταν να εφευρίσκουν τον τροχό κάθε φορά για να προχωρίσουν). + +Η επιστημονική κοινότητα ευτυχώς δεν αντιμετωπίζει αυτό το πρόβλημα, μιας και η γνώση μεταδίδεται ελεύθερα στους κύκλους της (και δεν περιορίζεται σε αυτούς). +Οποιοσδήποτε μπορεί να αποδείξει ένα θεώρημα και αργότερα οποισδήποτε μπορεί να το χρησιμοποιήσει για να φτάσει σε κάτι καλύτερο, δεν υπάρχει κανένας +περιορισμός. + +Από αυτήν την ιδέα χαρακτηρίζεται η άδεια του λειτουργικού συστήματος BSD (που αναπτύχθηκε στο πανεπιστήμιο του Berkeley), ενώ η [GNU General Public +License](http://www.gnu.org/copyleft/gpl.html) (η άδεια του free software), επεκτείνε αυτήν την άδεια ωστε να μπορεί να χρησιμοποιηθεί και στον εμπορικό κόσμο. +Εξασφαλίζει τον συγγραφέα/προγραμματιστή ότι κανείς δεν θα περιορισει τα δικαιώματα που αυτός απέδωσε στον τελικό χρήστη ( +[Copyleft](http://www.gnu.org/copyleft/copyleft.html)). + +Αυτό επιβεβαιώνει και το γεγονός ότι υπάρχουν εμπορικά πρόγραμματα κάτω απο την GNU άδεια, ενώ ευτυχώς ή δυστυχώς δεν υπάρχουν εμπορικά προγράμματα κάτω απο μια +BSD-like άδεια χρήσης. + +Τα προγράμματα κάτω απο μια ιδιόκτητη άδεια, προσπαθούν με κάθε δυνατό τρόπο να περιορισουν την γνώση που εσωκλείουν, προσπαθούν να μετατρέψουν τον τελικό +χρήστη σε καταναλωτή που δεν ξέρει τι καταναλώνει. Για παράδειγμα όλα τα πρωτόκολλα που χρησιμοποιούν ιδιόκτητα προγράμματα είναι μυστικά, κανείς δεν μπορεί να +δει πως αποθηκεύουν ένα αρχείο κειμένου στον σκληρό δίσκο, πως μεταφέρουν αρχεία απο υπολογιστή σε υπολογιστή, πως επιτυγχάνουν την πιστοποίηση στοιχείων. + +Πέρα απο τη μετατροπή του χρήστη σε καταναλωτή, αυτή η αντιμετώπιση, έχει ως αποτέλεσμα να μην μπορεί ευκολα κάποιος να παρατηρήσει πιθανά λάθη στην υλοποίηση +του πρωτοκόλλου ή στο ίδιο το πρωτόκολλο, ώστε να τα διορθώσει.\ +Για παράδειγμα το PPTP πρωτόκολλο που χρησιμοποιεί η Μicrosoft για πιστοποίηση στοιχείων, είχε και έχει σοβαρά προβλήματα ( +), γιατί κατά την υλοποίση του πιστέυτηκε ότι υπάρχει ασφάλεια αποκρύπτοντας τις λεπτομέρειες του πρωτοκόλλου. + +Το συγκεκριμένο πρωτόκολλο έχει βελτιωθεί απο την στιγμή της πρώτης παρατήρησης των αδυναμιών, όμως συστήνεται ακόμα ως ακατάλληλο όταν η ασφάλεια είναι ο +πρώταρχικός στόχος. + +Σε ένα ελεύθερο λειτουργικό, θα μπορούσε οποιοσδήποτε να αντικαταστήσει αυτό το πρωτόκολλο με κάποιο καλύτερο, δεν θα ήταν αναγκασμένος να περιμένει μία +εταιρεία να το βελτιώσει. + +Απο τα παραπάνω βλέπουμε άλλον ένα σημαντικό, ίσως τον πιο σημαντικό λόγο, για να χρησιμοποιήσουμε ελευθερο λογισμικό. Δεν είναι μόνο η τιμή ή ο κώδικας, ο +οποίος για τους μη προγραμματιστές είναι άχρηστος. Είναι η αντιμετώπιση μας ως σκεπτόμενους και ελεύθερους ανθρώπους. Με το ελεύθερο λογισμικό έχουμε +δυνατότητες επιλογής, μπορούμε να επιλέξουμε σε ποιον θα απευθυνθούμε για βοήθεια, ή ποίος θα διορθώσει τα προβλήματα του λειτουργικού μας. Παρατηρήστε μόνο τον +αριθμό των εταιριών που προσφέρουν διανομές linux (Redhat, Caldera, Suse, Corel κλπ), υποστήριξη σε linux, καθώς και τους τροποποιημένους πυρήνες Linux που +υπάρχουν στο διαδίκτυο, και καλύπτουν διαφορετικές ανάγκες! + +Δεν είναι μόνο ότι δεν παραμένουμε παθητικοί καταναλωτές, αλλά συμμετέχουμε και στην εξέλιξη του λογισμικού, ακόμα και σαν απλοί χρήστες. diff --git a/content/articles/21/03_community_thought.md b/content/articles/21/03_community_thought.md new file mode 100644 index 0000000..381a92a --- /dev/null +++ b/content/articles/21/03_community_thought.md @@ -0,0 +1,167 @@ ++++ +title = 'Σκέψεις για την ελληνική κοινότητα του Linux.' +date = '2000-01-01T00:00:00Z' +description = '' +author = 'Παναγιώτης Βρυώνης(mailto:vrypan@hellug.gr)' +issue = ['Magaz 21'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μερικές σκέψεις για το ποιός είναι ο ρόλος της ελληνικής κοινότητας του Linux και πώς θα μπορούσαμε να αντιμετωπίσουμε μερικά από τα προβήματα που διακρίνονται +στον ορίζοντα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οι μέρες που το Linux ήταν \"περιθωριακό\" έχουν περάσει, αυτό νομίζω ότι είναι κοινός τόπος ακόμη και των πιο φανατικών αντι-linux-άδων. Το 1999 ήταν χρονιά +θριάμβου για το Linux, διότι (αν μη τί άλλο) αναδείχθηκε σε έναν από τους κύριους παράγοντες που επηρρεάζουν την αγορά της πληροφορικής. Τα σημάδια είναι πλέον +\"χειροπιαστά\" και δεν περιορίζονται σε εκτιμήσεις: Υπάρχουν 2 πολύ μεγάλες εταιρείες που αναδείχθηκαν μόνο και μόνο λόγω Linux, η RedHat και η VA Linux που με +την εισαγωγή τους στο NASDAQ έκαναν τους χρηματιστές όλου του κόσμου να παραμιλάνε. Υπάρχει η σαφής πρόθεση κολοσσών της αγοράς πληροφορικής όπως +Hewlett-Packard, SGI, Compaq, IBM, Oracle, SUN κ.λ. να υποστηρίξουν με τον ένα ή τον άλλο τρόπο το Linux ως πλατφόρμα. Και τέλος, υπάρχει πλέον η αντιμετώπιση +του Linux από την μεγαλύτερη εταιρεία του κόσμου, την Microsoft, ως σοβαρού ανταγωνιστή. + +Αυτό όμως που κάνει το Linux διαφορετικό από τα περισσότερα άλλα λειτουργικά συστήματα δεν είναι τόσο η τεχνολογία που κρύβει πίσω του, ούτε η αποδοχή που βρήκε +στην αγορά. Η σηματικότερη διαφορά του είναι ότι ανέδειξε το κίνημα του Open Source Software (OSS). + +Οι περισσότεροι ανθρωποι που έρχονται σε επαφή με το Linux επτυπωσιάζονται από το γεγονός ότι είναι τζάμπα. Το μοντέλο του OSS έχει όμως πολύ βαθύτερες +προεκτάσεις και αγγίζει πολύ περισσότερα θέματα εκτός από την τιμή του τελικού προϊόντος. Επηρεάζει βαθειά τη διαχείριση (management) του τρόπου ανάπτυξης και +υποστήριξης του λογισμικού, αναγνωρίζοντας ως κύρια δύναμη στους τομείς της έρευνας, της ανάπτυξης, της υποστήριξης, αλλά και της αγοράς αυτό που ονομάστηκε +\"κοινότητα\". + +Δοκιμάστε να βρείτε την φράση \"κοινότητα των Windows\" ή \"κοινότητα του Solaris\". Δεν νομίζω ότι θα έχετε επιτυχία (εκτός και αν βρείτε κάποια από αυτές σε +διαφημιστικά των εταιρειών που παράγουν τα εν λόγω προϊόντα). Αντίθετα, θα βρείτε \"κοινότητα του Linux\" και \"κοινότητα του FreeBSD\"\... Η διαφορά δεν +βρίσκεται στην τιμή των παραπάνω προϊόντων. Η διαφορά βρίσκεται στο ότι ένας μεγάλος αριθμός ανθρώπων με διαφορετικές ιδιότητες (προγραμματιστές, +administrators, χρήστες, συγγραφείς τεχνικών εγχειριδίων κ.α.), που δεν βρίσκονται μέσα στα πλαίσια μίας και μόνης εταιρείας ή ενός οργανισμού, συμμετέχουν στην +εξέλιξη, υποστήριξη και προώθηση του λογισμικού. Επιπλέον, ο οποιοσδήποτε μπορεί να \"προσχωρήσει\" σε αυτήν την κοινότητα χωρίς να ζητήσει την άδεια κάποιου +\"αρμόδιου\". + +Είναι λοιπόν σαφές ότι η \"κοινότητα\" του Linux αποτελείται από ετερόκλητους ανθρώπους που ο καθένας συμμετέχει για τους δικούς του προσωπικούς λόγους. Αλλος +το κάνει από μεράκι, άλλος το κάνει γιατί θεωρεί ότι αυτός είναι ο πιο αποδοτικός τρόπος να κάνει την δουλειά του και άλλος γιατί θεωρεί ότι από αυτό θα βγάλει +λεφτά. + +Φτάνουμε λοιπόν στο πρώτο επίμαχο σημείο: \"επιτρέπεται\" από την ιδεολογία που διακρίνει το Linux να βγάζεις λεφτά από αυτό; Πιστεύω ότι η απάντηση είναι ένα +μεγάλο ΝΑΙ. Αν θεωρήσουμε ότι το GPL (GNU Public License) είναι ο θεμελιώθης λίθος του Linux (αλλά και των περισσότερων και σημαντικότερων OSS εγχειρημάτων), +τότε θα δούμε ότι η πώληση του Linux επιτρέπεται, άρα και το κέρδος από αυτή. Αυτό που δεν επιτρέπεται είναι η \"οικιοποίηση\" της προσπάθειας και του +αποτελέσματος των ανθρώπων που συμμετέχουν στο GPL λογισμικό. Είναι μάλιστα προφανές ότι είναι τέτοια η φύση του GPL που η αποδοχή του από εταιρείες οδηγεί σε +μία πολύ υγειή αγορά όπου ο ανταγωνισμός είναι όσο πιο ελεύθερος γίνεται. + +Αρα, σύμφωνα με τον παραπάνω συλλογισμό, οι εταιρείες που αναπτύσουν, υποστηρίζουν ή απλά πουλάνε το Linux είναι μέλη της \"κοινότητας\". Αυτή την στιγμή δεν +υπάρχουν πολύ μεγάλες εταιρείες που να ασχολούνται με το Linux ενεργά στην Ελλάδα. Υπάρχουν όμως 2-3 μικρότερες και πιστεύω ότι, καθώς η αγορά του Linux αρχίζει +να αποκτά ενδιαφέρον και στην Ελλάδα, σύντομα θα δούμε σημαντικές κινήσεις από τους \"μεγάλους\". Ίσως ακόμη και οι \"μικροί\" να μεγαλώσουν απότομα ή να +πληθύνουν. Σε κάθε περίπτωση, θα πρέπει ως κοινότητα να βοηθήσουμε αν μπορούμε αυτές τις προσπάθειες με την προϋπόθεση ότι θα διατηρούν τον ανοικτό χαρακτήρα +του Linux. Θα ήταν μάλιστα μεγάλη επιτυχία να κάνουμε τις εταιρείες αυτές να κατανοήσουν τον τρόπο που λειτουργεί η κοινότητα του Linux και να τις πείσουμε να +συμμετάσχουν ενεργά σε αυτή. + +Εκτός από τις εταιρείες, υπάρχουν και άλλες \"οργανωμένες\" ομάδες που συμμετέχουν την \"κοινότητα\". Η συμαντικότερη (κατά την γνώμη μου) τέτοιας μορφής ομάδα +είναι οι άνθρωποι που απαρτίζουν τις διάφορες \"λίστες\" (mailing lists) με θέματα που άπτονται του Linux και του λογισμικού που το συνοδεύει. Ειδικά στην +Ελλάδα, έχουμε ένα λαμπρό παράδειγμα, την linux-greek-users που αποτελεί την καρδιά της ελληνικής κοινότητας του Linux. Εκεί γίνεται το σημαντικότερο μέρος της +υποστήριξης, εκεί ανακοινώνονται τα διάφορα νέα. Κατά την γνώμη μου, η λίστα αυτή είναι κάτι σαν την αρχαία Αθηναϊκή αγορά: αποτελεί τον χώρο στον οποίο γίνεται +η ανταλλαγή απόψεων, οι αντιπαραθέσεις αλλά και η γέννηση ενδιαφέροντων ιδεών. + +Μία άλλη μορφή οργανωμένης ομάδας που αποτελεί μέρος της \"κοινότητας\", είναι τα διάφορα Linux Users Groups (LUGs). Βέβαια, κάθε LUG έχει διαφορετικούς +στόχους, ανάλογα με τις ανάγκες των μελών του, ανάγκες που μπορεί να μεταλλάσονται με την πάροδο του χρόνου. Στον Ελληνικό χώρο υπάρχουν τουλάχιστον 4 LUGs:\ +[HELLUG](http://www.hellug.gr/),\ +[PLUG](http://students.ceid.upatras.gr/~glavas/linux/),\ +[TheLUG](http://hal.csd.auth.gr/thelug/),\ +[ALLUG](http://www.aneta.gr/allug/). + +Το σημαντικότερο από αυτά, λόγω \"πανελλαδικότητας\", αριθμού μελών αλλά και διότι είναι το μόνο που υφίσταται ώς επίσημος σύλλογος είναι το HELLUG. Αυτό +βέβαια, δεν σημαίνει ότι οι υπόλοιποι σύλογοι δεν είναι σημαντικοί. Έχουν και αυτοί ένα δικό τους ρόλο να διαδραματίσουν, που σε καμία περίπτωση δεν θα έπρεπε ο +HELLUG λόγω μεγέθους να προσπαθήσει να τους στερήσει. + +Ερχόμαστε λοιπόν σε άλλο ένα \"ζεστό\" θέμα: ποιός είναι ο ρόλος των LUGs; Τί ρόλο θα πρέπει να παίξει ο HELLUG και τί οι τοπικοί σύλογοι; Κατά την γνώμη μου, ο +HELLUG έχει την δυνατότητα τώρα πια (λόγω προβολής, οργάνωσης και πόρων), πρώτον να αποτελει την επίσημη φωνή του Linux στην Ελλάδα σε περιπτώσεις που +χρειάζεται να μιλήσουμε με εταιρείες, κρατικούς φορείς και οργανισμούς και δεύτερον να φροντίζει για την ύπαρξη της υποδομής που θα βοηθήσει την κοινότητα να +είναι πιο παραγωγική και ενεργή σε τομείς όπως η ανάπτυξη λογισμικού, η υποστήριξη και η ανάληψη πρωτοβουλιών. Και εξηγώ: + +Νομίζω ότι είναι προφανές ότι σε περιπτώσεις που ο συνομιλητής είναι μία επιχείρηση ή ένα υπουργείο θα θελήσει να μιλήσει με κάποιον που, αν μη τί άλλο, έχει +μία νομική υπόσταση. Μην θεωρείτε ότι τέτοιες περιπτώσεις δεν θα παρουσιαστούν. Αυτή την στιγμή γνωρίζουμε ότι σε όλα τα ελληνικά σχολεία θα υπάρχει +εγκατεστημένο Linux και τίποτα δεν αποκλείει την περίπτωση να δούμε το Linux να εγκαθίσταται σε υπουργεία ή άλλους δημόσιους οργανισμούς (δείτε το παράδειγμα +του Μεξικού!). Δεν θα θέλαμε σαν κοινότητα να έχουμε κάποιο λόγο ώστε να αποφευχθούν λάθος κινήσεις; Ένα άλλο παράδειγμα είναι το certification μηχανημάτων ότι +λειτουργούν σωστά με το Linux, που συζητείται αυτές τις μέρες στην λίστα του hellug. Σε αυτή την περίπτωση, θα είναι απαραίτητο να μιλήσει κάποιος και να κάνει +κάποια συμφωνία με εταιρείες - ποιός είναι καλύτερος από το HELLUG; + +Όσο για το θέμα της υποδομής, δεν είναι λίγοι που το θεωρούν αμεληταίο. Κι όμως, σε ποιά μηχανήματα βρίσκονται οι διάφορες λίστες (linux-greek-users, hellug, +hellenic-howto), αλλά και η κεντική σελίδα του HELLUG (που δεν εξυπηρετεί μόνο τα μέλη του βέβαια); Και πως δέχθηκε ο provider (Forthnet σε αυτή την περίπτωση) +να φιλοξενήσει αυτά τα μηχανήματα και να παραχωρήσει κάποιο bandwidth για αυτά; Από πού βρέθηκαν τα λεφτά για το περίπτερο στην Infosystem; Τα παραπάνω είναι +μερικές από τις περιπτώσεις που η ύπαρξη του HELLUG, η διαφήμιση που του έχει γίνει από διάφορα έντυπα (με την αναφορά του σε σχετική αρθρογραφία π.χ.), αλλά +και η νομική του υπόσταση εξασφάλισαν την ύπαρξη της απαραίτητς υποδομής για να προχωρήσει καλύτερα το Linux\... + +Νομίζω όμως ότι έγινε σαφές πως το HELLUG ΔΕΝ ΕΙΝΑΙ η ελληνική κοινότητα Linux. Είναι απλά ένα σημαντικό μέρος της. Υπάρχουν πράγματα που δεν μπορεί ο HELLUG να +οργανώσει ή να πετύχει και που δεν θα έπρεπε να προσπαθήσει. Ένα τέτοιο είναι η σύσφιξη των σχέσεων των ανθρώπων που ασχολούνται με το Linux μακρυά από την +Αθήνα. Τα περισσότερα μέλη του HELLUG βρίσκονται στη Αθήνα και κατά συνέπεια αρκετές φορές λειτουργεί ως η αφορμή για την σύσφιξη των σχέσεών τους (που οδηγεί +σε καλύτερης ποιότητας επικοινωνία) με συγκεντρώσεις ή happenings. Θα ήταν όμως λάθος να ασχοληθεί με κάτι τέτοιο σε περιοχές που υπάρχουν τοπικά LUGs. Θα ήταν +λάθος να προσπαθήσουμε ως HELLUG να \"καπελώσουμε\" τις τοπικές πρωτοβουλίες. Αντίθετα, θέλω ένα HELLUG που θα μπορεί να προσφέρει πόρους έτσι ώστε τα τοπικά +LUG να γίνουν πιο δραστήρια και περισσότερα. Οι πόροι αυτοί μπορεί να είναι με την μορφή μίας συμφωνίας με Internet Providers για την παροχή κάποιας γραμμής +δωρεάν, ή με την μορφή μεσολάβησης για την προβολή των δραστηριοτήτων ενός μικρότερου LUG, ή κάτι αντίστοιχο. + +Αυτό δεν σημαίνει σε καμμία περίπτωση ότι το HELLUG θα πρέπει να μετατραπεί σε ένωση αθηναίων χρηστών Linux. Αντίθετα, θα ήταν καλό φίλοι από όλη την Ελλάδα να +συμμετέχουν σε αυτό, ώστε να το επηρεάζουν και να έχουν λόγο στις αποφάσεις και τις δραστηριότητές του. Απλά, δεν θα πρέπει η συμμετοχή τους να τους αποτρέψει +από την δημιουργία και τοπικών LUG. + +Όλα αυτά είναι βέβαια ιδέες και μάλιστα σε ένα χώρο που η κινητήρια δύναμη (μέχρι στιγμής τουλάχιστον) είναι ο εθελοντισμός. Αρα, όσες ιδέες και να διατυπωθούν, +δεν μπορεί να γίνει τίποτα χωρίς την ενεργή συμμετοχή όλων (ή έστω αρκετών). Ερχόμαστε λοιπόν στο τρίτο θέμα μας: νοοτροπία και συμπεριφορά μέσα σε αυτό τον +μυστήριο για πολλούς χώρο της \"κοινότητας\". + +Όπως είπα και στην αρχή, ο καθένας είναι ελεύθερος να συμμετέχει (όχι γιατί κάποιος δίνει αυτό το δικαίωμα σε όλους, αλλά γιατί δεν υπάρχει κάποιος που να +μπορεί να το στερήσει\...). Συνήθως, η συμμετοχή αυτή έχει δύο όψεις: το μέλος αντλεί από την κοινότητα πόρους (με την μορφή τεχνογνωσίας και υποδομής) και +προσφέρει πόρους σε αυτή (με την ίδια μορφή). + +Κατά τα πρώτα χρόνια του Linux (και μέχρι πριν από 1-2 χρόνια στην Ελλάδα), οι άνθρωποι που αποτελούσαν την κοινότητα είχαν κατά κανόνα περισσότερες από τον +μέσο χρήστη γνώσεις πληροφορικής και ασχολούνταν με αυτό από χόμπυ ή σε επαγγελματικό επίπεδο, σαν εργαλείο. Κατά συνέπεια, σπάνια ζητούσαν από την υπόλοιπη +κοινότητα να τους δώσει κάτι: τα προβλήματά του προσπαθούσαν να τα λύσουν μόνοι τους και αν κατόπιν αρκετής προσπάθειας τους έλλειπε κάτι, τότε μόνο ζητούσαν +την βοήθεια (= τον χρόνο και την ενασχόληση) κάποιου άλλου. Είχαμε λοιπόν ένα θετικό ισοζύγιο σε αυτή την εισροή και εκροή πόρων. Αυτό το πλεόνασμα, επενδύονταν +σε νέα πράγματα - να φτιάξουμε το ένα, να διορθώσουμε το άλλο, να γράψουμε documentation. + +Τον τελευταίο όμως χρόνο, άρχισε να παρουσιάζεται ένα άλλο φαινόμενο. Η μεγάλη προβολή του Linux από έντυπα αλλά και οι προσπάθειες του HELLUG να φέρουν κόσμο +στον χώρο του Linux, σε συνδυασμό με το γεγονός ότι αυτό γίνονταν όλο και πιο φιλικό στον νέο χρήστη, άρχισαν να αποδίδουν καρπούς. Η κοινότητα μεγάλωνε με πολύ +γρήγορους ρυθμούς. Οι νέοι χρήστες θεώρησαν ότι αυτό είναι ένα νέο προϊόν, ανταγωνιστικό των Windows ή του MacOS, απλά πολύ πιο φθηνό, χωρίς να συνειδητοποιούν +(στην πλειοψηφία τους) ότι δεν μιλάμε για το προϊόν ΤΟΥΣ (κάποιας εταιρείας) αλλά το προϊόν ΜΑΣ (όλων μας). Δεν λέω ότι ήταν δικό τους το λάθος, ίσως να φταίμε +και οι παλαιότεροι και πολύ περισσότερο όλοι όσοι αρθρογραφούμε σε περιοδικά πληροφορικής που το παρουσιάζαμε με αυτόν ακριβώς τον τρόπο. Το αποτέλεσμα όμως +ήταν να αυξηθεί δυσανάλογα η ζήτηση πόρων (με την έννοια που προανέφερα), σε σχέση με την προσφορά. + +Η linux-greek-users και το magaz άρχισαν να κατακλύζονται από ερωτήσεις που πολλές φορές επαναλαμβάνονταν ξανά και ξανά (πώς θα συνδεθώ στο Internet, πώς θα +γράψω ελληνικά, πώς θα ρυθμίσω το Netscape για να βλέπω ελληνικά κ.λ.). Το ενοχλητικό για αυτούς που καλούνταν να απαντήσουν ήταν ότι οι απαντήσεις υπήρχαν +διαθέσιμες: HOWTOS, άρθρα στο magaz, archives των λιστών\... Πολλές φορές μάλιστα, οι ερωτήσεις είχαν και επιτακτικό χαρακτήρα που υπονοούσε ότι \"είστε +υποχρεωμένοι να μου πείτε\", όπως ακριβώς θα ήταν προς μία εταιρεία που τους πούλησε ένα προϊόν και είναι υποχρεωμένη να παρέχει κάποια υποστήριξη. + +Όμως τα πράγματα δεν είναι έτσι. Το μόνο που υποχρεώνει ένα μέλος της κοινότητας να βοηθήσει είναι η διάθεσή του και η αίσθηση που έχει ότι πρέπει να +ανταποδώσει την προσφορά όλων αυτών που έγραψαν τα προγράμματα που χρησιμοποιεί και τον βοήθησαν όταν είχε ανάγκη. Επειδή μάλιστα ο χρόνος που μπορεί να +διαθέσει κάποιος είναι περιορισμένος (στην καλύτερη περίπτωση 24 την ημέρα!), ακόμη και όταν έχει την διάθεση να βοηθήσει, μπορεί να επιλέγει κάποιο άλλο τρόπο, +και όχι αυτόν του να απαντάει σε ερωτήσεις νέων χρηστών. Μπορεί να γράφει κάποιο νέο πρόγραμμα, να συμμετέχει στην ανάπτυξη κάποιου άλλου, να βοηθάει στην +συγγραφή τεχνικών κειμένων (π.χ. HOWTOs), να συντηρεί καποιο server στον οποίο φιλοξενείται ένα project ή να γράφει άρθρα για το magaz. + +Ακόμη και στην περίπτωση που θέλει να βοηθήσει απαντώντας σε προβλήματα, μπορεί να μην έχει όρεξη να απαντήσει στην ίδια ερώτηση 10 φορές σε διάστημα 10 +εβδομάδων. Αν μάλιστα πρόκειται για έναν καλό γνώστη καποιων πλευρών του linux, είναι και κρίμα να αναλώνονται οι 5-6 απαντήσεις που προλαβαίνει να δώσει σε +πράγματα που θα μπορούσαν να απαντήσουν σχεδόν όλοι και να μην διαθέτει τον χρόνο αυτό σε ερωτήσεις που ελάχιστοι άλλοι ξέρουν να απαντήσουν σωστά. + +Με τα παραπάνω, δεν θέλω να πω ότι πρέπει να επικρατήσει μία ελιτίστικη αντίληψη ότι \"εγώ δεν απαντάω σε τέτοιες ερωτήσεις\". Το θέμα της υποστήριξης είναι +πάρα πολύ σημαντικό και πρέπει όλοι να συνεισφέρουμε σε αυτή. Η λύση δεν είναι δύσκολη: Από την μία πρέπει να εξηγούμε στους νέους χρήστες ότι για να +λειτουργήσουν στον χώρο του Linux πρέπει να ψάχνουν λίγο μήπως υπάρχει έτοιμη η απάντηση στο πρόβλημά τους. Από την άλλη πρέπει να έχουμε όλοι στο μυαλό μας +αυτό που ονομάζω \"ένα βήμα πίσω\": αν δηλαδή αυτός που κάνει την ερώτηση βρίσκεται ένα βήμα πίσω από κάποιον, τότε αυτός (που προφανώς έλυσε το ίδιο πρόβλημα +πριν από λίγο καιρό) έχει την ηθική υποχρέωση να βοηθήσει. Με αυτό τον τρόπο, ακόμη και αν έχουμε πολλούς νέους χρήστες, θα υπάρχουν πολλοί άνθρωποι για να τους +βοηθήσουν στα απλά πράγματα. Για τα πιό πολύπλοκα, θα υπάρχουν λιγότεροι, αλλά θα έχουν όλο τον χρόνο να ασχοληθούν. Σημειώστε ακόμη, ότι το να απαντήσει +κάποιος σε κάτι που έλυσε πριν από μία μέρα είναι πολύ πιο εύκολο από το να απαντήσει σε κάτι που έλυσε πριν από ένα χρόνο. + +Ένα άλλο πρόβλημα που παρουσιάστηκε ήταν ότι οι νέοι χρήστες αισθάνονται πολλές φορές ξένοι μέσα σε ένα χώρο που κάποιοι άλλοι δείχνουν να γνωρίζονται καλά και +μάλιστα, αυτοί οι \"άλλοι\" ξέρουν και πολύ περισσότερα. Το αποτέλεσμα είναι ότι πολλά νέα μέλη της κοινότητας δεν τολμάνε να αναλάβουν πρωτοβουλίες με την +λογική \"τώρα που να πεταχτώ και εγώ, εδώ μιλάνε οι \"παλιοί\" που ξέρουν\". Αυτό είναι λάθος. Όλες οι γνώμες και όλες οι πρωτοβουλίες πρέπει να ακούγονται. +Χαρακτηριστικό παράδειγμα είναι το magaz. Οι άνθρωποι που το ξεκινήσαμε, όταν το ξεκινήσαμε προσπαθήσαμε μέσα από αυτό να παρουσιάζουμε τις εμπειρίες μας και +τους προβληματισμούς μας. Είναι λογικό μετά από δύο χρόνια να μην βρισκόμαστε στο ίδιο σημείο, και να μας απασχολούν πιο \"προχωρημένα\" θέματα. Αυτό όμως δεν +σημαίνει ότι το magaz δεν έχει ανάγκη από άρθρα που να εξηγούν πως λειτουργεί η ls για παράδειγμα. Αντιθέτως. Το θέμα είναι να συνειδητοποιήσουν οι νεότεροι ότι +η κοινότητα τους χρειάζεται και αυτούς και ότι η προσφορά τους είναι πολύτιμη. Δεν αποκλείεται μάλιστα, να υπάρχει μεγαλύτερο ενδιαφέρον από το κοινό για τα +απλά πράγματα. Αρα, στρωθείτε και γράφετε άρθρα, γιατί αλλιώς το \"περιοδικάκι\" που σας βοήθησε στα πρώτα σας βήματα μπορεί να μην υπάρχει για να βοηθήσει τους +επόμενους\... Αλλωστε, ο Μιχάλης, ο Παναγιώτης, ο Σπύρος, ο Φώτης και όλοι όσοι \"ακούτε\" να μιλάνε μεταξύ τους με τα μικρά τους ονόματα γνωρίστηκαν μέσα σε +αυτό τον χώρο, όταν δεν ήξεραν και πολλά πράγματα\... + +Το ίδιο ισχύει και στον χώρο του HELLUG. Υπάρχουν πολλές ιδέες, αλλά συχνά λείπει ο απαραίτητος αριθμός ανθρώπων που θα πάρουν την πρωτοβουλία να τις +υλοποιήσουν. Δεν μιλάμε μόνο να συμμετάσχουν όταν όλα θα είναι κανονισμένα (που και αυτό βέβαια είναι απαραίτητο), αλλά και για ανθρώπους που θα αναλάβουν την +οργάνωσή τους. Θέλουμε λοιπόν όσο γίνεται περισσότερα μέλη στο HELLUG, αλλά θέλουμε ανθρώπους που θα έχουν την όρεξη να βοηθήσουν. Αυτοί που νομίζουν ότι με την +εγγραφή τους στο σύλογο θα απολαμβάνουν κάποιο προνόμιο όπως support, δεν χρειάζεται να μπούν στον κόπο: όση βοήθεια είναι να λάβουν, θα την λάβουν έτσι και +αλλιώς\... + +Η αίσθησή μου είναι ότι το Linux είναι έτοιμο να κάνει το \"μεγάλο άλμα\", αν δεν το έχει κάνει ήδη. Οι αριθμοί γίνονται όλο και μεγαλύτεροι, είτε μιλάμε για +τον αριθμό των χρηστών, είτε για τα χρήματα που έχουν να κερδίσουν όσοι ασχολούνται με το Linux επαγγελματικά. Σύντομα λοιπόν θα αλλάξουν οι κλίμακες, και αυτό +μπορεί να βάλει σε κίνδυνο την συνοχή της \"κοινότητας\" αλλά και τον ρόλο της, αν δεν είμαστε σωστά προετοιμασμένοι για αυτό. Πιστεύω ότι οι απόψεις που +παρέθεσα προσπαθούν να προλάβουν κάποιες δυσάρεστες καταστάσεις και να διατηρήσουν και την δυναμικότητα και τον ρόλο της κοινότητας των (ελλήνων) χρηστών Linux +τουλάχιστον στο κοντινό μας μέλλον. Ελπίζω να γίνουν αιτία γόνιμου προβληματισμού. diff --git a/content/articles/21/04_gidoboskoi.md b/content/articles/21/04_gidoboskoi.md new file mode 100644 index 0000000..2dde5ad --- /dev/null +++ b/content/articles/21/04_gidoboskoi.md @@ -0,0 +1,181 @@ ++++ +title = 'Γιδοβοσκοί του Ελληνικού Ιντερνέτ' +date = '2000-01-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 21'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Προσφάτως, μία φίλη χαρακτήρισε κάποιους γιδοβοσκούς του Web (απόλυτα δικαιολογημένα κατά την άποψή μου), γεγονός που μου έδωσε το έναυσμα να γράψω για τους +γιδοβοσκούς του Ιντερνέτ γενικότερα (ο τόνος δεν είναι τυχαίος)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ποια η σχέση του άρθρου με το Linux; Επιφανειακά καμία. Κατά βάθος επίσης καμμία. Μόνο ότι οι χρήστες Linux \"αποκλείονται\" από το Internet, όχι χάρη σε αυτόν +που φοβόμασταν (Microsoft) αλλά χάρη σε 10-20 άσχετους που κατεβήκαν από τα βουνά όπου έβοσκαν τα γίδια τους, και αποφάσισαν να ασχοληθούν με την νέα μόδα, το +Ιντερνέτ\... Διαβάστε παρακάτω και ίσως συμφωνήσετε μαζί μου. + +**1. Που βρίσκονται οι γιδοβοσκοί** +---------------------------------------------------------------- + +- [1.1 Idealnet και 3E](#ss1.1) +- [1.2 ΕΛΟΤ (Ελληνικός Οργανισμός Τυποποίησης)](#ss1.2) +- [1.3 Cronus airlines](#ss1.3) +- [1.4 IN.gr](#ss1.4) + +**2. Μα τους θάβεις όλους\.....** +-------------------------------------------------------------- + +- [2.1 Πρωθυπουργός της χώρας](#ss2.1) +- [2.2 Μεγάλοι ISPs](#ss2.2) +- [2.3 Σελίδες φτιαγμένες με μεράκι\...](#ss2.3) + +**3. Που μπαίνει το Linux στην ιστορία;** +---------------------------------------------------------------------- + +**4. Γιατί;** +------------------------------------------ + +**5. Τι μπορεί να γίνει;** +------------------------------------------------------- + +- [5.1 Οδηγίες προς εταιρείες](#ss5.1) +- [5.2 Οδηγίες προς τεχνικούς](#ss5.2) + +**6. Disclaimer** +---------------------------------------------- + + +### [1. Που βρίσκονται οι γιδοβοσκοί]{#s1} + +### [1.1 Idealnet και 3E]{#ss1.1} + +Όλη η ιστορία, ξεκίνησε από την μεγάλη εταιρεία [IdealNet](http://www.idealnet.net) η οποία προσέλαβε έναν \"web-developer\" να φτιάξει το site της. Ο άνθρωπος +ξέρει ότι αυτά που φτιάχνει φαίνονται μόνο από συγκεκριμένους browsers (πρώτο λάθος). Για να εξασφαλίσει λοιπόν ότι κάποιος με άλλο browser δεν θα τα δει να τα +\"κακοχαρακτηρίσει\" έχει βάλει ένα script το οποίο ελέγχει τι browser έχει ο \"πελάτης\" και τον ειδοποιεί καταλλήλως. Το script αυτό είναι τόσο +\"sophisticated\" που αν πας να δεις τη σελίδα με browser Netscape 4.05+ (που υποτίθεται ότι θα μπορούσες να την δεις) κάτω από Linux, σου εμφανίζεται το +υπέροχο μήνυμα ότι πρέπει να αναβαθμίσεις το browser σου. Δηλαδή ΔΕΝ μπορείς να δεις τη σελίδα από Linux, ό,τι και να κάνεις. + +Σίγουρα αυτό είναι άβολο, αλλά το site δικό τους είναι, ότι θέλουν το κάνουν. Αραγε, άλλες εταιρείες όπως η [3E Ελληνική Εταιρεία Εμφιαλώσεως](http://www.3e.gr) +που **πληρώνουν** την idealnet για να τους διαφημίσει κατ\' αυτόν τον τρόπο στο Internet, έχουν ενημερωθεί για αυτό; Το αστείο βέβαια είναι ότι η [πραγματική +σελίδα της 3E](http://www.3e.gr/english/index.htm) φαίνεται κανονικά από τον browser που αποκλείεται να την δει. + +Δεν θα μπορούσαμε βέβαια να ισχυριστούμε το ίδιο για την αντίστοιχη [ελληνική σελίδα](http://www.3e.gr/greek/index.htm) η οποία είναι δηλωμένη να έχει character +set windows-1253. Έχω ακόμα την απορία αν άλλα λειτουργικά συστήματα (εκτός από τα windows δηλαδή, όπως BeOS και MacOS) μπορούν να καταλάβουν αυτό το +proprietary encoding των Windows. + +### [1.2 ΕΛΟΤ (Ελληνικός Οργανισμός Τυποποίησης)]{#ss1.2} + +Μια που αναφέραμε βέβαια το encoding, δεν θα μπορούσε να λείπει ο κυρίαρχος του παιχνιδιού, το site που πληρώνουμε από την τσέπη μας για να δημιουργεί standards +και μετά να τα καταπατά. Μιλάμε βέβαια για τον [ΕΛΟΤ](http://www.elot.gr) του οποίου μία τουλάχιστον [ελληνική σελίδα](http://www.elot.gr/profile/83189.html) +που κοίταξα, έχει δηλωμένο encoding το windows-1253 αντί του σωστού κατά τον ίδιο τον ΕΛΟΤ ISO-8859-7. Μάλιστα, **διευκρινίζεται ότι η σελίδα είναι γραμμένη σε +ΕΛΟΤ928**. Κανένας δεν πήγε να δει την σελίδα με ΕΛΟΤ928 fonts να δει ότι δεν διαβάζεται; Αραγε, η κυβέρνηση της Ελλάδας, και ο ISO (του οποίου ο +\"αντιπρόσωπος\" στην Ελλάδα είναι ο ΕΛΟΤ) έχουν ενημερωθεί για αυτό; + +### [1.3 Cronus airlines]{#ss1.3} + +Η εταιρεία [Cronus Airlines](http://www.cronus.gr) πρωτοτυπεί, αφήνοντας όλους τους άλλους πίσω. Με το υπέροχο flash plugin που έχει για να μας δείχνει τα +δρομολόγια, στα ελληνικά, μας τα παρουσιάζει με charset windows-1252. Αυτά έχω την απορία αν τα βλέπουν **έστω** τα Windows\.... μια που αυτά σίγουρα δεν είναι +ελληνικά ούτε για την Microsoft. + +### [1.4 IN.gr]{#ss1.4} + +Υπάρχουν βέβαια sites τα οποία δεν έχουν έναν web-designer αλλά πολλούς. Και δεν δίνουν τις σελίδες τους \"έξω\" για να τις φτιάξουν. Ένα τέτοιο site είναι το +πρώτο ελληνικό portal που φιλοδοξεί να φέρει την επανάσταση στο ελληνικό Internet. Μιλάμε βέβαια για το [IN του Δημοσιογραφικού Οργανισμού +Λαμπράκη](http://www.in.gr) του οποίου η πρώτη σελίδα είναι απόλυτα σωστά δηλωμένη ως προς τα ελληνικά (iso-8859-7) οι \"παραμέσα\" όμως, που μάλλον φτιάχνονται +από κάποιο template, έχουν και αυτές, στην πλειοψηφία τους, την \"εξυπνάδα\" που προαναφέραμε (charset=windows-1253). + +Αυτό βέβαια είναι πταίσμα, μπροστά στο άλλο, μεγάλο πρόβλημα που ταλανίζει το εν λόγω site. Μιλάω βέβαια για την απόκριση \"HTTP 1.1 Server too busy\" που +εμφανίζεται **συχνότατα** κατά τις ώρες συνεδρίασης του χρηματιστηρίου\.... Κάτι το οποίο θα ήταν ίσως φυσιολογικό **ΑΝ** δεν υπήρχαν τέσσερις ολόκληροι servers +για να απαντάνε σε αυτά τα requests. Αν φαντάζεστε δε ότι τέσσερις servers δεν επαρκούν για την τρομακτική κίνηση του site, να σας πληροφορήσω ότι τέσσερις +servers έχει και το [Hotmail](http://www.hotmail.com), το οποίο αν και δεν έχω δει στατιστικά στοιχεία, αδυνατώ να πιστέψω ότι έχει λιγότερα hits από το In. + + +### [2. Μα τους θάβεις όλους\.....]{#s2} + +θα μπορούσε κάποιος να πει, βλέποντας να μην αφήνω κανένα σχεδόν site ασχολίαστο. Και όμως, υπάρχουν και σωστοί designers. Παραδείγματα θέλετε; Παραδείγματα θα +έχετε: + +### [2.1 Πρωθυπουργός της χώρας]{#ss2.1} + +Στο [site του](http://www.primeminister.gr) ο πρωθυπουργός της χώρας, χρησιμοποιεί ελληνικό encoding (iso-8859-7) για να διαβάζεται, όπως πρέπει εξάλλου, από +όλους τους Έλληνες. Δυστυχώς τα υπουργεία μας στα οποία μπορούμε να οδηγηθούμε από το προαναφερθέν site δεν έχουν την ίδια \"ευαισθησία\" χρησιμοποιώντας το +windows-1253 στην συντριπτική τους πλειοψηφία. + +### [2.2 Μεγάλοι ISPs]{#ss2.2} + +Οι μεγαλύτεροι ISPs της χώρας ( [OteNet](http://www.otenet.gr), [FORTHnet](http://www.forthnet.gr), [HOL](http://www.hol.gr), +[HellasNet](http://www.hellasnet.gr) κλπ) είτε χρησιμοποιούν το σωστό encoding (iso-8859-7) ή αφήνουν τον browser μας να αποφασίσει τι encoding θα +χρησιμοποιήσει (καθόλου δήλωση για encoding), πράγμα που τουλάχιστον είναι καλύτερο από το windows-1253. Μιλάω βέβαια για τις αρχικές σελίδες τους, γιατί δεν +μπορώ να ξέρω τις σελίδες που έχουν σχεδιάσει για τρίτους (μπορεί να τους έχω αναφέρει παραπάνω όμως)\... + +### [2.3 Σελίδες φτιαγμένες με μεράκι\...]{#ss2.3} + +\... όπως είναι οι \"δικές μας\" του [συλλόγου](http://www.hellug.gr) και του [http://www.linux.gr](http://linux.gr), όπως είναι η σελίδα για τους [Macintosh +users της Ελλάδας](http://www.mac.gr), και είμαι σίγουρος και πολλές άλλες. + + +### [3. Που μπαίνει το Linux στην ιστορία;]{#s3} + +Αλήθεια, γιατί σας πρήζω τόση ώρα για θέματα γνωστά και ίσως πολυσυζητημένα, και τι σχέση έχουν με το Linux; Η απάντηση είναι απλή. Η καθιέρωση των επιμέρους +standards από την Microsoft για character encoding δεν είναι μόνο για τα ελληνικά, αλλά για όλες τις γλώσσες. Μήπως αυτό είναι ένας τρόπος \"αποκλεισμού\" των +άλλων λειτουργικών συστημάτων από το Web? Θεωρίες συνωμοσίας θα πείτε, και συμφωνώ μαζί σας. Μάλλον δεν έχουν σχέση με το Linux όλα αυτά. Δεν πειράζει όμως, +έχουν σχέση με το Internet\..... + + +### [4. Γιατί;]{#s4} + +Γιατί άραγε συμβαίνουν όλα αυτά; Ας αναλύσουμε τις πιθανές περιπτώσεις: + +- Είμαστε τελικά τόσο υπανάπτυκτοι στις νέες τεχνολογίες, που δεν μπορούμε ούτε μία σελίδα να γράψουμε μόνοι μας. Πρέπει να μας την γράψει το frontpage, ή το + word ή κάτι άλλο που κάνει ό,τι καταλαβαίνει. +- Υπάρχει τέτοια έλλειψη προσωπικού που αναλαμβάνουν άσχετοι άνθρωποι άσχετες δουλειές. Έτσι υποχρεώνονται να καταφύγουν σε λύσεις τύπου frontpage για να + δημιουργήσουν τις \"sophisticated\" σελίδες τους. Ή να δέχονται τις default ρυθμίσεις του κάθε SQL server με την κρυφή ελπίδα ότι θα δουλέψει και δεν θα + εκτεθούνε. +- Είναι τόσο ακριβοί οι IT professionals που οι εκάστοτε \"εργοδότες\" προτιμούν τους φτηνούς (και συνήθως άσχετους) από τους ακριβούς και (συνήθως) καλούς. + Για άλλη μία φορά, ότι πληρώνεις παίρνεις\.... +- Είμαστε τόσο αναίσθητοι στον εκφυλισμό της γλώσσας μας και της τεχνολογίας μας, που δεχόμαστε οποιαδήποτε επέμβαση εντελώς άκριτα. +- Έχουμε απλά άγνοια της κατάστασης + +Από τα ανωτέρω, διαλέχτε όσα πιστεύετε ότι ισχύουν, και βγάλτε τα δικά σας συμπεράσματα. + + +### [5. Τι μπορεί να γίνει;]{#s5} + +Πρακτικά τίποτα. Μόνο να γκρινιάζουμε μπορούμε, και με αυτό πάλι κινδυνεύουμε να χαρακτηριστούμε γραφικοί\.... + +Αλλά, εγώ, θα προσπαθήσω να προτείνω λύσεις. Όχι ότι θα τις εφαρμόσει κανείς, αλλά έτσι, για το γαμώτο\.... + +### [5.1 Οδηγίες προς εταιρείες]{#ss5.1} + +- Επιβάλετε τις απαιτήσεις σας: Η παρουσίαση της εταιρείας σας στο Internet είναι ένας υπέροχος τρόπος διαφήμισης. Μην τον χαλάτε. Όταν πληρώνατε τόσα λεφτά + για να μοιραστούν τα φυλλάδια πόρτα - πόρτα, σας ενδιέφερε να πάρει όσο περισσότερος κόσμος γινότανε το διαφημιστικό σας φυλλάδιο. Τώρα που έχετε κατεβάσει + το κόστος λόγω Internet, δέχεστε να αποκλείεται έτσι άκριτα και ελφρά τη καρδία ένα (μεγάλο, πιστέψτε με) κοινό το οποίο για οποιονδήποτε λόγο δεν μπορεί να + δει τις σελίδες σας; Πληρώνετε, άρα απαιτήστε να πάρετε αυτό για το οποίο πληρώνετε. Το να αλλάξει κάποιος 2 λέξεις δεν είναι τίποτα δύσκολο. +- Αξιολογήστε τις ανάγκες σας και υπολογίστε το κόστος: Το να προσλάβετε κάποιον που δεν ξέρει πως να υλοποιήσει αυτό που θέλετε, απλά και μόνο επειδή είναι + φτηνότερος, δεν σας προσφέρει κανένα πραγματικό κέρδος. Χασούρα σας προκαλεί γιατί γίνεστε περίγελως αυτών που γνωρίζουν. +- Αξιολογήστε το νέο μέσο κατάλληλα: Προσλάβετε ένα άτομο που θα αναλάβει να **μελετήσει** αν μη τι άλλο, τουλάχιστον τον χρόνο download της σελίδας σας από + μια απλή dial-up σύνδεση. Αυτό που σας δείχνει ο σχεδιαστής ή η ανάδοχος εταιρεία, από LAN, δεν έχει καμία απολύτως σχέση με την ταχύτητα με την οποία θα + δει τις ίδιες σελίδες ο πελάτης από το σπίτι. Ομοίως, η κίνηση την οποία εσείς υπολογίζετε να έχετε, μπορεί να είναι λάθος. Εμπιστευτείτε τους ειδικούς και + έμπειρους στο να σας κάνουν υπολογισμούς για να έχει η παρουσίασή σας το ζητούμενο scalability. +- Αντιληφθείτε έγκαιρα την άναρχη φύση του internet: Το ότι ο σχεδιαστής σας χρησιμοποιεί τον Α browser δεν σημαίνει ότι όλος ο κόσμος χρησιμοποιεί αυτόν τον + browser\... Αντίθετα, το μεγαλύτερο ποσοστό αυτή τη στιγμή παγκοσμίως που κατέχει ένας browser είναι μόλις 55%. Αν σας φτιάξει σελίδα για **αυτόν** τον + browser, ζητήστε να δείτε πως θα φαίνεται από τους άλλους διαθέσιμους της αγοράς. Θα εκπλαγείτε (δυσάρεστα μάλλον) από τα αποτελέσματα. + +### [5.2 Οδηγίες προς τεχνικούς]{#ss5.2} + +- Μία και μόνη: Διαβάστε. Διαβάστε τα standards και σεβαστείτε τα. Διαβάστε στατιστικά στοιχεία και ενημερωθείτε. Διαβάστε sites του εξωτερικού και + μορφωθείτε. Να είστε μετριόφρονες. Δεν ανακαλύψατε εσείς το Internet. Υπήρχε μάλλον πριν από εσάς, και θα υπάρχει (μάλλον) μετά από εσάς. Μην βάζετε κι + εσείς ένα λιθαράκι στην καταστροφή του. + + +### [6. Disclaimer]{#s6} + +Οι προαναφερθείσες απόψεις είναι καθαρά δικές μου και δεν εκπροσωπώ κανέναν. Θα μπορούσα να αναφέρω πολύ περισσότερα τεχνικά προβλήματα εκτός του πασιφανέστατου +του in.gr αλλά κάτι τέτοιο θα απαιτούσε βαθύτερη γνώση του δικτύου και του σχεδιασμού της κάθε εταιρείας, πράγμα το οποίο δεν έχω κάνει, άρα θα ήταν άδικο. Δεν +έχω καμία προσωπική έχθρα ή φιλία με κανέναν από τους προαναφερθέντες εμμέσως τεχνικούς (εκτός από 2, δεν ξέρω κανέναν άλλον ούτε κατ\' όνομα). Αν +προσεβλήθησαν, καλά θα κάνουν να προβληματιστούν πριν με χαρακτηρίσουν τρελλό και ερειστικό. Τέλος, ΔΕΝ ψάχνω για δουλειά. + diff --git a/content/articles/21/05_linuxdoc.md b/content/articles/21/05_linuxdoc.md new file mode 100644 index 0000000..d075ea2 --- /dev/null +++ b/content/articles/21/05_linuxdoc.md @@ -0,0 +1,245 @@ ++++ +title = 'LinuxDoc' +date = '2000-01-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 21'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό έχει σκοπό να σας παρουσιάσει τον κόσμο της γλώσσας SGML, και μάλιστα τον τύπο εγγράφου linuxdoc, ο οποίος είναι ευρύτατα διαδεδομένος για τη +συγγραφή How-Tos, FAQs και διαφόρων άλλων βοηθητικών εγγράφων γύρω από το Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +------------------------------------------ + +**2. Ο τύπος Linuxdoc** +-------------------------------------------------- + +**3. Το πρώτο σας έγγραφο** +------------------------------------------------------ + +- [3.1 Basic structure (Βασική Δομή)](#ss3.1) +- [3.2 Κεφάλαια και ενότητες](#ss3.2) +- [3.3 Μορφοποίηση του κειμένου](#ss3.3) +- [3.4 Ειδικοί χαρακτήρες](#ss3.4) +- [3.5 Εσωτερικά links](#ss3.5) +- [3.6 Web links](#ss3.6) +- [3.7 Εισαγωγή εικόνων](#ss3.7) + +**4. SGML Tools** +-------------------------------------------- + +- [4.1 Ελέγχοντας το έγγραφό σας](#ss4.1) +- [4.2 Δημιουργώντας plain text](#ss4.2) +- [4.3 Δημιουργώντας LaTex](#ss4.3) +- [4.4 Δημιουργώντας HTML](#ss4.4) +- [4.5 Δημιουργώντας RTF](#ss4.5) + +**5. Επίλογος** +------------------------------------------ + +- [5.1 Πηγές](#ss5.1) +- [5.2 Κατάργηση του LinuxDoc](#ss5.2) + + +### [1. Εισαγωγή]{#s1} + +Τα αρχικά SGML σημαίνουν Standard Generalised Mark-up Language. Η SGML, λοιπόν, είναι μια γλώσσα προσδιορισμού τύπων εγγράφων. Μπορείτε να φανταστείτε την SGML +σαν ένα υπερσύνολο, και, για να σας δώσω ένα παράδειγμα, η HTML είναι ένα υποσύνολο της SGML. Η SGML επινοήθηκε από την IBM προκειμένου να λυθεί το πρόβλημα της +μη τυποποποιημένης εμφάνισης κειμένων σε διάφορα υπολογιστικά συστήματα. + +Ας δούμε ένα άλλο παράδειγμα: Κάποιος μπορεί να ορίσει τον τύπο ενός εγγράφου ως συνταγή. Το έγγραφο θα περιέχει ένα πρώτο μέρος, όπου θα παρουσιάζονται τα +υλικά. Στο δεύτερο μέρος θα γίνεται μια εισαγωγή για τα σκεύη και ότι άλλο χρειαστεί στην όλη διαδικασία. Στο τρίτο μέρος, τελικά, θα περιγράφονται τα βήματα +που χρειάζονται για να μαγειρέψουμε το αντικείμενό μας, και, τέλος μια ολοκληρωμένη εικόνα του τί κάναμε, για να δοθεί μια σφαιρική άποψη της πράξης μας. + +Όλο αυτό ονομάζεται \"Ορισμός του τύπου του εγγράφου\" (Document Type Definition). Δεν περιγράφει το πως θα μοιάζει το τελικό έγγραφο, αλλά το τί μπορεί να +περιέχει. Με αυτόν τον τρόπο, γράφει κανείς το έγγραφό του χωρίς να λογαριάζει την τελική του εμφάνιση, την εμφάνιση που θα δεί ο αναγνώστης. + + +### [2. Ο τύπος Linuxdoc]{#s2} + +Όπως θα καταλάβατε από το όνομά του, το Linuxdoc είναι ο τύπος που χρησιμοποιούμε για να γράψουμε έγγραφα στο/γύρω από/σχετικά με το Linux (ναι, όλα αυτά). +Αυτός ο τύπος εγγράφων γράφεται ως εξής: Αρχίζουμε με τον τίτλο, ακολουθούμενο από το όνομα του συγγραφέα, την έκδοση και την ημερομηνία. Μετά ακολουθεί το +abstract, δηλαδή μια σύντομη περιγραφή, ώστε να μην χρειαστεί να ανατρέξετε στα περιεχόμενα για να δείτε το θέμα του εγγράφου, αλλά να σας υποδηλώσει το +αντικείμενο, με το οποίο ασχολείται ο συγγραφέας. Έπειτα, ακολουθούν τα περιεχόμενα, που δείχνουν το περιεχόμενο του εγγράφου, ώστε οι \"γρήγοροι\" να πάνε +κατ\' ευθείαν στο θέμα που τους ενδιαφέρει. Στη συνέχεια, έχουμε μια λίστα από κεφάλαια, παραγράφους και ενότητες (chapters, paragraphs, sections). + +Ανάμεσα σε όλα αυτά, μπορεί κανείς να προσθέτει ότι θέλει: κείμενο, κομμάτια από κώδικα προγραμμάτων, να αλλάζει το font για να τονίζει κάποιες φράσεις, να +χρησιμοποιεί λίστες, να αναφέρεται και να παραπέμπει σε άλλα τμήματα του κειμένου, κτλ\... + +Τα tags και τα ειδικά εργαλεία που θα δούμε παρακάτω, στο σύνολό τους, αυτό είναι που ονομάζουμε γλώσσα markup: ένας τρόπος πληροφοριακής και περιγραφικής +σύνταξης ενός εγγράφου με τέτοιο τρόπο, ώστε να είναι χρήσιμος σε διάφορα προγράμματα. Η HTML, το Tex και τα man pages του Unix είναι κι αυτά γνωστά +παραδείγματα από γλώσσες markup. + +H SGML, από μόνη της δεν περιγράφει μια γλώσσα markup, αλλά μια γλώσσα, με την οποία μπορεί κανείς να συγγράψει προσδιορισμούς για άλλες γλώσσες markup. Στη +\"διάλεκτο\" της SGML ο markup προσδιορισμός ονομάζεται DTD (Document Type Definition). To DTD σας επιτρέπει να ορίσετε τη δομή ενός είδους εγγράφου, δηλαδή, +ποιά μέρη θα έχει, και σε ποιά σειρά, ένα έγγραφο. Όταν ορίζετε DTD σε ένα έγγραφό σας, τότε ένας SGML \"σαρωτής\" μπορεί να ελέγξει αν το έγγραφό σας είναι +σωστά γραμμένο. Επιπλέον, με τη χρήση του συνδυασμού ενός SGML \"σαρωτή\" και ενός συγκεκριμένου DTD, μπορεί κανείς να δημιουργήσει ένα πρόγραμμα που να +μεταφράζει το έγγραφο, από μια markup γλώσσα σε μια άλλη. + + +### [3. Το πρώτο σας έγγραφο]{#s3} + +### [3.1 Basic structure (Βασική Δομή)]{#ss3.1} + +Αρχίζοντας, πρέπει να προσθέσετε τις παρακάτω γραμμές στην αρχή του εγγράφου σας: \\ +\\ +\Βάλτε εδώ τον τίτλο που θέλετε\\ +\\ +Όνομα συγγραφέα, το e-mail του, κλπ\...\ +\\ +\\ +έκδοση και ημερομηνία\ +\ + +Στη συνέχεια, αν θέλετε να περιγράψετε περιληπτικά το περιεχόμενο του εγγράφου, βάλτε τα tags **\** πρίν την παράγραφο της περίληψης και +**\** στο τέλος της περίληψης. Μετά από αυτά, βάλτε το tag **\** το οποίο σημαίνει Table of Contents (Πίνακας περιεχομένων). + +### [3.2 Κεφάλαια και ενότητες]{#ss3.2} + +Κάθε φορά, που θα θέλετε να ξεκινήσετε ένα νέο κεφάλαιο, θα πρέπει να βάζετε, πριν αρχίσετε, το tag **\** και δίπλα του να γράφετε τον τίτλο του +κεφαλαίου. Προσέξτε, σε αυτό το σημείο, πως δεν είναι ανάγκη να αριθμείτε τα κεφάλαιά σας, γιατί αυτό γίνεται αυτόματα από το tag **\**. Με τον ίδιο +ακριβώς τρόπο, μπορείτε να δημιουργήσετε ενότητες μέσα στα κεφάλαια, και μάλιστα ενότητες διαφόρων επιπέδων: Εισάγοντας το tag **\** και μετά από αυτό +έναν τίτλο, αυτομάτως δημιουργείται μία ενότητα δευτέρου επιπέδου (αριθμημένη κατάλληλα). Η αρίθμησή της έχει 2 μέρη (αφού είναι δευτέρου επιπέδου) και ακολουθή +την μορφή **Χ.Υ**. **Χ** είναι ο αριθμός του κεφαλαίου, μέσα στον οποίο βρίσκεται η ενότητα, ενώ το **Υ** είναι ο αριθμός της ενότητας. Προσέξτε ότι το **Υ** +δεν αυξάνεται συνεχώς, αλλά ξαναπέρνει την τιμή 1 όταν φτιάξετε μια ενότητα σε καινούριο κεφάλαιο. Με παρόμοιο τρόπο, λοιπόν, μπορείτε να ορίσετε και ενότητες +μεγαλύτερου επιπέδου, έως και 5ου, με το tag **\**, όπου το **Ν** πέρνει τις τιμές από 1 μέχρι 4. + +### [3.3 Μορφοποίηση του κειμένου]{#ss3.3} + +Για να ορίσετε μια νέα παράγραφο, αρκεί να βάλετε το tag **\** πρίν αρχίσετε να τη γράφετε. Εάν απλώς θέλετε να αλλάξετε γραμμή (και όχι παράγραφο), τότε +χρησιμοποιήστε το tag **\**. Τα σχόλιά σας, μπορείτε να τα γράφετε ανάμεσα στα tags **\**. + +Όταν θέλετε να δίνετε έμφαση σε κάποια τμήματα του κειμένου σας, τότε μπορείτε να κάνετε τη γραμματοσειρά να φαίνεται είτε ως italics (*πλάγια γράμματα*), είτε +ως bold (**έντονα γράμματα**). Για να ορίσετε τα italics, αρκεί να \"περικυκλώσετε\" το τμήμα του κειμένου που θέλετε με τα tags **\** και **\**, ενώ +για bold, χρησιμοποιήστε τα tags **\** και **\** με τον ίδιο ακριβώς τρόπο. Μπορείτε, επίσης, να κάνετε τη γραμματοσειρά σε typewriter style με τα +tags **\** και **\**. + +Η SGML σας δίνει την δυνατότητα να χρησιμοποιήσετε λίστες μέσα στο έγγραφό σας. Για να προσθέσετε μία μη αριθμημένη λίστα (λίστα με κουκίδες), περικυκλώστε την +λίστα με τα tags **\** και **\**. Ανάμεσα στα δύο αυτά tags, ορίζετε τα στοιχεία της λίστας με το tag **\**. Δείτε ένα σχετικό +παράδειγμα: + +\\ +\1ο στοιχείο\ +\2ο στοιχείο\ +\3ο στοιχείο\ +\ + +Εάν τώρα θέλετε να δημιουργήσετε μια αριθμημένη λίστα, αρκεί να χρησιμοποιήστε τα tags **\** και **\** αντί των **\** και +**\**. + +Αν μέσα στο έγγραφό σας έχετε συμπεριλάβει ένα κομμάτι κώδικα και θέλετε να το κάνετε να ξεχωρίζει από το υπόλοιπο έγγραφο, τότε περικυκλώστε το από τα tags +**\** και **\**. Παράδειγμα: + + + #include + + void main() + { + cout << "Hello World !!" << endl; + } + + +### [3.4 Ειδικοί χαρακτήρες]{#ss3.4} + +Μάλλον, μέχρι τώρα, θα έχετε καταλάβει ότι αν θέλετε να χρησιμοποιήσετε τους χαρακτήρες **\<** και **\>** δεν μπορείτε, γιατί χρησιμοποιούνται από την SGML, +ώστε να υποδηλώνουν την παρουσία ενός tag. Μην ανησυχείτε, υπάρχει λύση σ\' αυτό το πρόβλημα. Έχετε την δυνατότητα να παραστήσετε τους χαρακτήρες αυτούς (αλλά +και άλλους όπως θα δούμε στη συνέχεια), χρησιμοποιώντας ειδικούς κώδικες (όπως άλλωστε και στην HTML). + +Παρακάτω, θα αναφέρω σε μιά λίστα μερικούς από τους κωδικούς για τους ειδικούς χαρακτήρες. Βέβαια, υπάρχουν περισσότεροι ειδικοί χαρακτήρες από αυτούς, τους +οποίους μπορείτε να βρείτε στο Guide των Sgml-Tools. + +Χρησιμοποιείστε τον κωδικό & για το σύμβολο (&) + +Χρησιμοποιείστε τον κωδικό < για το σύμβολο (\<) + +Χρησιμοποιείστε τον κωδικό > για το σύμβολο (\>) + +Χρησιμοποιείστε τον κωδικό &etago; για το σύμβολο (\ + +### [4.1 Ελέγχοντας το έγγραφό σας]{#ss4.1} + +Τα SGML-Tools σας παρέχουν τη δυνατότητα να ελέγξετε αν συγγράψατε σωστά το έγγραφό σας, πρίν το μετρατρέψετε στην επιθυμητή μορφη. Για να το κάνετε αυτό, αρκεί +να εκτελέσετε την ακόλουθη εντολή: + + $ sgmlcheck έγγραφο.sgml + +Αν σας επιστραφούν μηνύματα error, τότε σημαίνει πως έχετε κάνει κάποια λάθη. Αν δεν σας επιστρέψει κανένα μήνυμα, τότε το έγγραφό σας είναι ολόσωστο. + +### [4.2 Δημιουργώντας plain text]{#ss4.2} + +Για να μετατρέψετε ένα sgml έγγραφο σε απλό text κείμενο, αρκεί να εκτελέσετε: + + $ sgml2txt έγγραφο.sgml + +Αν τώρα θέλετε το έγγραφό σας να το μετατρέψετε σε μορφή groff για να το χρησιμοποιήσετε σαν man page, τότε εκτελέστε: + + $ sgml2txt --man έγγραφο.sgml + +### [4.3 Δημιουργώντας LaTex]{#ss4.3} + +Παρακάτω, ακολουθούν οι εντολές που μπορείτε να εκτελέσετε, για να μετατρέψετε το έγγραφό σας σε LaTex, Postscript και DVI, αντίστοιχα: + + $ sgml2latex έγγραφο.sgml + $ sgml2latex --output=ps έγγραφο.sgml + $ sgml2latex --output=dvi έγγραφο.sgml + +### [4.4 Δημιουργώντας HTML]{#ss4.4} + +Η εντολή για να μετατρέψετε το έγγραφό σας σε HTML είναι: + + $ sgml2html έγγραφο.sgml + +Μπορείτε, όμως να χρησιμοποιήσετε και την παρακάτω εντολή: + + $ sgml2html --imagebuttons έγγραφο.sgml + +Η παραπάνω εντολή αντικαθιστά τα \"Next\", \"Previous\" και \"Contents\" που περιέχουν οι σελίδες HTML (για να προχωρήσει ο αναγνώστης στις σελίδες +έγγραφο-1.html κλπ. ανάλογα με τα κεφάλαια του εγγράφου) με βελάκια. Τα βελάκια, έπειτα θα είναι τα αρχεία \"next.gif\", \"prev.gif\", και \"toc.gif\". + +### [4.5 Δημιουργώντας RTF]{#ss4.5} + +Η αντίστοιχη εντολή σ\' αυτήν την περίπτωση είναι: + + $ sgml2rtf έγγραφο.sgml + + +### [5. Επίλογος]{#s5} + +### [5.1 Πηγές]{#ss5.1} + +Για να συγγράψω αυτό το άρθρο συμβουλεύτηκα το **Guide** των **SGML-Tools**, το **LinuxDoc+Emacs+Ispell HowTo**, καθώς και \... τις πολλές ώρες ενασχόλησής μου +με τη συγγραφή κειμένων, άρθρων κλπ. σε LinuxDoc. + +### [5.2 Κατάργηση του LinuxDoc]{#ss5.2} + +Αν επισκεφτείτε την σελίδα των SGML-Tools, θα διαπιστώσετε, ότι το project για το LinuxDoc έχει σταματήσει, και ότι τα SGML-Tools από την έκδοση 2 και μετά +υποστηρίζουν το καινούριο DTD, το BookDoc (ενώ για να τα χρησιμοποιήσετε για έγγραφα γραμμένα με LinuxDoc, χρειάζεστε έκδοση 1.χχ.χχ). Τώρα, το κατά πόσο θα +καταργηθεί τελείως το LinuxDoc, αυτό εξαρτάται από πολλούς παράγοντες, όπως από το γεγονός ότι όλα τα How-To και FAQ για το Linux, είναι γραμμένα σε LinuxDoc. +Ίσως, τελικά, στα \... πληκτρολόγια των Linuxάδων να μην καταργηθεί ποτέ \... + diff --git a/content/articles/22/01_editorial.md b/content/articles/22/01_editorial.md new file mode 100644 index 0000000..1ab300f --- /dev/null +++ b/content/articles/22/01_editorial.md @@ -0,0 +1,40 @@ ++++ +title = 'Editorial' +date = '2000-03-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 22'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz**\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κανονικά αυτό το τεύχος θα έπρεπε να είναι \"διπλό\" μια και τεύχος Φεβρουαρίου δεν βγήκε. Τελικά μάλλον πρέπει να δημιουργηθεί σενάριο failover για περιπτώσεις +όπως αυτή, που από τέλος Ιανουαρίου μέχρι μέσα Φεβρουαρίου αδυνατούσα να ασχοληθώ με οτιδήποτε. + +Στο προηγούμενο τεύχος, υπήρχε ένα άρθρο σχετικά με τους γιδοβοσκούς του Ιντερνέτ, άρθρο το οποίο δεν γέννησε τις αντιδράσεις που περίμενα, είχε όμως ως +αποτέλεσμα κάποιοι άνθρωποι να επικοινωνήσουν μαζί μου για να πάρουν συγκεκριμένες οδηγίες. Προφανώς τους παρέπεμψα στα RFCs μια που δεν είναι δουλειά μου να +δίνω τέτοιες οδηγίες\.... + +Το ότι κάποιος όμως, ενδιαφέρθηκε να διορθώσει τις σελίδες του, και να μάθει παραπάνω πράγματα, για μένα είναι σημαντικό. + +Σε αυτό το τεύχος έχουμε ένα πολύ όμορφο άρθρο για το VI, από τον φίλο Σεραφείμ Ζανικόλα. Πραγματικά invaluable για τους αρχαρίους του vi, και πολύ χρήσιμο για +όσους το ξέρουν σε κάποιο μέσο επίπεδο. + +Έχουμε και το άρθρο του Μάνου Καραγιώργου που ασχολείται με το swapping (και λίγο με το paging). Πραγματικά χρήσιμο, για να ρυθμίσετε τα swap files και devices +σας για να είναι αποδοτική η εργασία του συστήματός σας. + +Ο Πολύβιος Πρατικάκης καταπιάνεται με το θέμα της ελευθερίας του Internet, και τους κινδύνους που αυτή θέτει, συγκρίνοντας τη σημερινή κατάσταση, με αυτήν που +περιέγραψε ο Όργουελ στο βιβλίο του 1984. + +Τέλος, ο The Reverant μας εξηγεί πόσο παραμετροποιήσιμος είναι ο FVWM2, ένας window manager με ιστορία στο Linux, και μας οδηγεί σε απλές (και όχι τόσο απλές) +αλλαγές στο configuration file του. + +Οι πιο παρατηρητικοί από εσάς θα προσέξουν νέα ονόματα σε αυτό το τεύχος. Μόνο νέα ονόματα, γεγονός το οποίο ενισχύει για μία ακόμα φορά τις προσπάθειες της +συντακτικής ομάδας του Magaz να γίνει το περιοδικό ένας χώρος έκφρασης και brainstorming της ελληνικής linux κοινότητας, και όχι ένας χώρος μονολόγων των +ολίγων. + +Καλή ανάγνωση\... diff --git a/content/articles/22/02_swapping.md b/content/articles/22/02_swapping.md new file mode 100644 index 0000000..e9934e4 --- /dev/null +++ b/content/articles/22/02_swapping.md @@ -0,0 +1,449 @@ ++++ +title = 'Swapping' +date = '2000-03-01T00:00:00Z' +description = '' +author = 'Μάνος Καραγιώργος(mailto:mantis@pathfinder.gr)' +issue = ['Magaz 22'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Άξονας κίνησης του παρόντος άρθρου είναι η περιγραφή του σκοπού ύπαρξης swap αρχείων/κατατμήσεων, της λειτουργίας τους, της διαδικασίας ορισμού τους, κ.ά.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Let\'s swap\...** +------------------------------------------------- + +- [1.1 Σκοπός ύπαρξης swap κατάτμησης/αρχείου](#ss1.1) +- [1.2 Εικονική μνήμη](#ss1.2) +- [1.3 Λειτουργία](#ss1.3) +- [1.4 Swapping/Paging](#ss1.4) +- [1.5 Μέγεθος swap](#ss1.5) +- [1.6 Όρια](#ss1.6) +- [1.7 Συμβουλές για μέγιστη απόδοση](#ss1.7) + +**2. Swap αρχεία** +--------------------------------------------- + +- [2.1 Ορισμός swap αρχείου](#ss2.1) +- [2.2 Ρόλος του /dev/zero](#ss2.2) + +**3. Swap κατατμήσεις** +-------------------------------------------------- + +- [3.1 Ορισμός swap κατάτμησης](#ss3.1) + +**4. Ρύθμιση swap συσκευών** +------------------------------------------------------- + +**5. Συγχρονισμός\... ΤΩΡΑ** +------------------------------------------------------- + +- [5.1 Ρόλος της sync](#ss5.1) + +**6. Χρησιμοποίηση swap συσκευών** +------------------------------------------------------------- + +- [6.1 Το αρχείο /etc/fstab](#ss6.1) +- [6.2 Εξηγήσεις\...](#ss6.2) +- [6.3 Παράμετροι στην swapon](#ss6.3) +- [6.4 Αυτόματη χρησιμοποιήση swap συσκευών](#ss6.4) +- [6.5 Μή χρησιμοποίηση swap συσκευών](#ss6.5) + +**7. Έλεγχος χρήσης swap συσκευών** +-------------------------------------------------------------- + +- [7.1 free](#ss7.1) +- [7.2 cat /proc/meminfo](#ss7.2) +- [7.3 cat /proc/swaps](#ss7.3) +- [7.4 top](#ss7.4) +- [7.5 procinfo](#ss7.5) + +**8. Ιδέες\...** +------------------------------------------- + +- [8.1 Συνδυασμός swap και /tmp](#ss8.1) +- [8.2 Swap κατ\' απαίτηση με loopback device](#ss8.2) + +**9. Ίδιος χώρος swap με άλλα λειτουργικά συστήματα** +-------------------------------------------------------------------------------- + +- [9.1 FreeBSD](#ss9.1) +- [9.2 Microsoft Windows](#ss9.2) + +**10. Σχετικά** +-------------------------------------------- + +- [10.1 No time\...](#ss10.1) +- [10.2 Πηγές](#ss10.2) + + +### [1. Let\'s swap\...]{#s1} + +### [1.1 Σκοπός ύπαρξης swap κατάτμησης/αρχείου]{#ss1.1} + +To swap αρχείο/κατάτμηση χρησιμοποιείται ως εικονική μνήμη (virtual RAM) στο σύστημά σας. Η εικονική μνήμη είναι επέκταση της πραγματικής μνήμης του συστήματος. +Η ύπαρξή του τις περισσότερες φορές είναι απαραίτητη. + +### [1.2 Εικονική μνήμη]{#ss1.2} + +Το Linux υποστηρίζει εικονική μνήμη, δήλαδη χρησιμοποιεί ένα δίσκο σαν επέκταση της RAM, έτσι ώστε το συνολικό μέγεθος της χρησιμοποιήσιμης μνήμης να αυξάνει +αναλογικά. Ο πυρήνας γράφει τα περιεχόμενα ενός τρέχοντος αχρησιμοποίητου block μνήμης στο σκληρό δίσκο έτσι ώστε η μνήμη να μπορεί να χρησιμοποιηθεί για άλλο +σκοπό. Όταν τα αρχικά περιέχομενα χρειάζονται ξανά, διαβάζονται πάλι από τη μνήμη. + +Αυτά όλα γίνονται τελείως αδιαφανή από το χρήστη. Προγράμματα που τρέχουν κάτω από το Linux βλέπουν μόνο τη μεγαλύτερη ποσότητα της διαθέσιμης μνήμης και δεν +προσέχουν πως κομμάτια αυτών μένουν στο δίσκο από στιγμή σε στιγμή. Το κομμάτι του σκληρού δίσκου που χρησιμοποιείται σαν εικονική μνήμη ονομάζεται χώρος swap +(χώρος προσωρινής αποθήκευσης). + +### [1.3 Λειτουργία]{#ss1.3} + +Όταν χρησιμοποιείται swap χώρος, το Linux μετακινεί αχρησιμοποιήτες σελίδες μνήμης στο σκληρό δισκό, επιτρέποντας να τρέχετε περισσότερες εφαρμογές ταυτόχρονα +στο σύστημά σας. + +Όμως, επειδή αυτή η διαδικασία είναι σχετικά αργή (χίλιες φορές περίπου), ο χώρος swap δεν μπορεί να αντικαταστήσει την πραγματική φυσική μνήμη RAM, που είναι +πιο γρήγορη. Έτσι τα προγράμματα δεν τρέχουν το ίδιο γρήγορα. Οι εφαρμογές του X Window System, κυρίως, έχουν ιδιαίτερες απαιτήσεις σε μνήμη και γι\'αυτό θα +πρέπει να έχετε μια συσκευή (αρχείο/κατάτμηση) swap. + +Μερικά προγράμματα καταλαμβάνουν στατικά σελίδες πραγματικής μνήμης (κλειδώνοντάς τες) για λόγους ασφαλείας ή για λόγους απόδοσης. Με αυτόν τον τρόπο οι +\"κλειδωμένες\" σελίδες μειώνουν το μέγεθος της διαθέσιμης πραγματικής μνήμης, καθιστώντας απαραίτητη τη χρήση swap μνήμης. + +### [1.4 Swapping/Paging]{#ss1.4} + +Με απλά λόγια: + +Υπάρχει διαχωρισμός μεταξύ του swapping (γράφοντας ολόκληρες τις διεργασίες (processes) σε χώρο swap) και του paging (γράφοντας μόνο καθορισμένου μεγέθους +κομμάτια, συνήθως μερικά kilobytes τη φορά). + +Το paging είναι συνήθως πιο αποτελεσματικό, και αυτό είναι που κάνει το Linux, αλλά μιλάμε για swapping έτσι κι αλλιώς. + +### [1.5 Μέγεθος swap]{#ss1.5} + +Ορισμένοι προτείνουν ότι η swap μνήμη πρέπει να έχει διπλάσιο μέγεθος από αυτό της πραγματικής μνήμης. Υπάρχουν αρκετές διαφοροποιήσεις σχετικά με το πόση swap +μνήμη θα πρέπει να χρησιμοποιήσετε: όλες εξαρτώνται από το τι εφαρμογές θέλετε να τρέχετε\... + +Το μέγεθος του χώρου swap εξαρτάται ακόμη από πόση μνήμη έχετε ήδη στο σύστημά σας. + +Αν έχετε αρκετή φυσική μνήμη (\>128ΜΒ) και είστε ο μοναδικός χρήστης του συστήματος χωρίς ιδιαίτερες απαιτήσεις μπορεί να σκεφτείτε να μην χρησιμοποιήσετε μνήμη +swap, έχοντας έτσι περισσότερο ελεύθερο αποθηκευτικό χώρο και μειώνοντας το χρόνο αναζήτησης στα δεδομένα σας. + +Μπορεί να μην χρησιμοποιείτε μια swap κατάτμηση πολύ συχνά, όταν όμως τη χρειαστείτε η παρουσία της είναι ανεκτίμητη. + +Πιθανότατα δεν έχει νόημα να έχετε swap μνήμη περισσότερη από τρεις φορές της φυσικής μνήμης. + +Υπολογίστε τη συνολικη σας ανάγκη σε μνήμη. Αυτή είναι το μεγαλύτερο μέγεθος μνήμης που πιθανώς θα χρειαστείτε σε κάθε στιγμή, δηλαδή το άθροισμα των απαιτήσεων +σε μνήμη όλων των προγραμμάτων που θέλετε να τρέχετε ταυτοχρόνως. Αυτό μπορεί να γίνει τρέχοντας την ίδια ώρα όλα τα προγράμματα που πιθανώς θα τρέξετε ποτέ +ταυτοχρόνως. Για παράδειγμα, αν θέλετε να τρέχετε το X Window System, θα πρέπει να καταχωρίσετε περίπου 8-16 MB για αυτό, ο gcc θέλει αρκετά megabytes (μερικά +αρχεία χρειάζονται μία ασυνήθιστα μεγάλη ποσότητα, μέχρι και δεκάδες megabytes, αλλά συνήθως περίπου 4-8 θα είναι αρκετά) κτλ. Ο πυρήνας θα χρησιμοποιήσει +περίπου 1-2ΜΒ από μόνος του, και τα συνηθισμένα shells και άλλα μικρά βοηθητικά προγράμματα ίσως μερικές εκατοντάδες kilobytes (περίπου 1ΜΒ όλα μαζί). Δεν +υπάρχει ανάγκη να προσπάθησετε να είστε ακριβείς, υπολογισμοί στο περίπου είναι μια χαρά, αλλά μπορεί να θέλετε να είστε στην απαισιόδοξη πλευρά. + +Θυμηθείτε πως αν υπάρχουν αρκετά άτομα που χρησιμοποιούν το σύστημα ταυτοχρόνως, θα καταναλώνουν όλα μνήμη. Πάντως, αν δύο άτομα τρέχουν το ίδιο πρόγραμμα +αταυτοχρόνως, η συνολική κατανάλωση μνήμης συνήθως δεν είναι διπλάσια, εφόσον οι σελίδες του κώδικα και οι shared βιβλιοθήκες υπάρχουν ήδη μια φορά. + +### [1.6 Όρια]{#ss1.6} + +Το μέγιστο χρήσιμο μέγεθος μιας περιοχής swap εξαρτάται πλέον από την αρχιτεκτονική του συστήματος. + +Είναι περίπου: + +- 2GB σε i386, PPC, m68k, ARM, +- 1GB σε sparc, +- 512MB σε mips, +- 128GB σε alpha και +- 3TB σε sparc64. + +Υποστηρίζονται μέχρι και 8 συνολικά περιοχές swap. + +### [1.7 Συμβουλές για μέγιστη απόδοση]{#ss1.7} + +Συνιστάται η χρησιμοποιήση μιας swap κατάτμησης παρά ενός swap αρχείου. Έτσι σε πολλές εγκαταστάσεις του Linux θα συναντήσετε δύο τουλάχιστον κατατμήσεις. To +swapping σε αρχείο επιφέρει σχετική μείωση της απόδοσης του συστήματος γιατί πηγαίνει μέσω του συστήματος αρχείων (ext2). Από την άλλη, μπορείτε να προσθέσετε +swap αρχείο όποτε θέλετε χωρίς καμία ανάγκη για κατάτμηση των δίσκων σας. + +Χρησιμοποποιείστε πρώτα αρχείο swap, δουλέψτε με το σύστημα σας για λίγο καιρό για να δείτε πόση μνήμη swap χρειάζεστε περίπου, και μετά φτιάξτε μια κατάτμηση +swap. Μπορείτε βέβαια να χρησιμοποιείτε πολλές swap κατατμήσεις ή/και swap αρχεία, ταυτοχρόνως. + +Αφήστε, πάντως, περιθώρια ασφαλείας γιατί πιθανότατα θα ξεχάσετε να τρέξετε μερικά προγράμματα που θα θέλετε να τρέχετε και βεβαιωθείτε ότι έχετε ελέυθερο χώρο +σε κάθε περίπτωση. Είναι καλύτερα να καταχωρήσετε πάρα πολύ χώρο παρά πολύ λίγο (προσέξτε τους τόνους στο παρα\...), αλλά δεν υπάρχει ανάγκη να το παρακάνετε +και να καταχωρήσετε ολόκληρο δίσκο, εφόσον αχρησιμοποιήτος χώρος swap είναι no doubt wasted χώρος. + +Αν ο χώρος swap, που θα υπολογίσετε με την παραπάνω μέθοδο, είναι πάρα πολύ μεγαλύτερος από τη φυσική σας μνήμη (όχι τη δικιά σας, του συστήματος σας\...), +καλύτερα να σκεφτείτε σοβαρά να επενδύσετε στην αγορά περισσότερης φυσικής μνήμης, αλλιώς η απόδοση θα είναι αρκετά χαμηλή. + +Είναι καλή ιδέα να έχετε τουλάχιστον λίγο χώρο swap, ακόμη και αν οι υπολογισμοί σας δείχουν ότι δεν χρειάζεστε καθόλου. Το Linux χρησιμοποιεί το χώρο swap +δυαναμικά, έτσι ώστε όση περισσότερη φυσική μνήμη το δυνατόν να μπορεί να παραμείνει ελεύθερη. Το Linux θα swap out σελίδες μνήμης που δεν έχουν χρησιμοποιηθεί, +ακόμη και αν η μνήμη δεν χρειάζεται ακόμη για τίποτα. Αυτό αποφεύγει την αναμονή για swapping όταν χρειάζεται: το swapping μπορεί να γίνει νωρίτερα, όταν ο +δίσκος είναι έτσι κι αλλιώς αδρανής. + +Ο χώρος swap μπορεί να χωριστεί ανάμεσα σε αρκετούς δίσκους. Αυτό μερικές φορές βελτιώνει την απόδοση, ανάλογα με τις σχετικές ταχύτητες των δίσκων και το χρόνο +προσπέλασης αυτών. Μπορεί να θέλετε να πειραματιστείτε με μερικά διαδεδομένα μοντέλα, αλλά κατανοήστε ότι κάνοντας τα πειράματα κανονικά είναι αρκετά δύσκολο. +Δε θα πρέπει να πιστεύετε φήμες που λένε ότι ένα μοντέλο είναι ανώτερο από κάθε άλλο, εφόσον δε θα είναι πάντα αληθείς. + +Μπορείτε να χρησιμoποιήσετε και περισσότερες από μία swap κατατμήσεις. + +Μερικοί χρησιμοποιούν RAM disks για swapping, δεν κερδίζετε πολλά με αυτόν τον τρόπο αφού μειώνεται τη διαθέσιμη μνήμη για caching και buffering. + +Συνιστάται να δημιουργείτε κατατμήσεις swap σε μεσαία tracks του σκληρού δίσκου (συνήθως /dev/?d?x, όπου xε{4,5,\...} ανάλογα με τον αριθμό των υπάρχοντων +κατατμήσεων) , γιατί τότε η αναζήτηση είναι σχετικά γρήγορη (γρήγορη διαμεταγωγή και αναζήτηση αρχείων). + +Αν χρησιμοποιείτε swap αρχείο συνιστάται να τοποθετείται σε ξεχωριστή κατάτμηση, αφού περιλαμβάνει λιγότερα ρίσκα. Αυτή η κατάτμηση δε θα μπορεί πλεόν να +χρησιμοποιηθεί, ακόμη και αν φαίνεται να υπάρχει ελεύθερος χώρος σε αυτή. + + +### [2. Swap αρχεία]{#s2} + +Ένα swap αρχείο είναι ένα κανονικό αρχείο. Δεν είναι με κανένα τρόπο ειδικό προς τον πυρήνα. Το μόνο πράγμα που νοιάζει τον πυρήνα είναι να μην έχει καθόλου +\"τρύπες\", και να είναι έτοιμο για χρήση με την εντολή mkswap. + +Πρέπει, πάντως, να διαμένει σε έναν τοπικό δίσκο του συστήματος. Δεν μπορεί να διαμένει σε ένα σύστημα αρχείων που έχει προσαρτηθεί μέσω NFS για λόγους +υλοποίησης. + +Το κομμάτι σχετικά με τις \"τρύπες\" είναι σημαντικό. Το αρχείο swap κρατάει τον χώρο του δίσκου έτσι ώστε ο πυρήνας να μπορεί γρήγορα να swap out μια σελίδα +χωρίς να χρειάζεται να παέι μέσω όλων των πραγμάτων που είναι χρήσιμα όταν καταχωρεί ένα sector δίσκου σε ένα αρχείο. Ο πυρήνας απλώς χρησιμοποιεί όποιους +τομείς έχουν ήδη καταχωρηθεί στο αρχείο. Επειδή μια \"τρύπα\" σε ένα αρχείο σημαίνει πως δεν υπάρχουν καθόλου τομείς δίσκου καταχωρημένοι (για αυτό το μέρος +μέσα στο αρχείο), δεν είναι καλό για τον πυρήνα να προσπαθεί να τους χρησιμοποιεί. + +### [2.1 Ορισμός swap αρχείου]{#ss2.1} + +Ένας καλός τρόπος για να δημιουργήσετε το swap αρχείο χωρίς \"τρύπες\" είναι μέσω της ακόλουθης εντολής: + + dd if=/dev/zero of= bs= count= + +- if=/dev/zero : input file, διαβάζει από αυτό το αρχείο +- of=\ : output file, γράφει σε αυτό το αρχείο +- bs=\ : block size, διαβάζει και γράφει \ bytes κάθε φορά +- count=\ : αντιγράφει μόνο \ blocks από αυτά που διαβάζει + +Θα εμφανιστεί το μήνυμα: + + +0 records in + +0 records out + +Είναι καλύτερα το μέγεθος να είναι πολλαπλάσιο του 4, επειδή ο πυρήνας γράφει σελίδες μνήμης, που είναι 4ΚΒ σε μέγεθος. Αν το μέγεθος δεν είναι πολλαπλάσιο του +4, το τελευταίο ζευγάρι των kilobytes μπορεί να είναι αχρησιμοποίητο. Ειδικότερα, για swap αρχείο το μέγεθος είναι καλό να είναι πολλαπλάσιο του inode μεγέθους, +συνήθως 1024 ή 2048 (ή ακόμη και 4096), γιατί 1block=1KB=1024 bytes άρα τιμές πολλαπλάσιες του 1024. + +### [2.2 Ρόλος του /dev/zero]{#ss2.2} + +Το /dev/zero είναι ένα ειδικό αρχείο που κατά την ανάγνωσή του, επιστρέφει \\0 χαρακτήρες. Είναι μια συσκευή που όταν την διαβάζετε παίρνετε άπειρα ASCII 0. +Είναι χρήσιμη ως πηγή \"κενών\" bytes, όπως ακριβώς και πολλοί επεξεργαστές RISC έχουν ένα zero καταχωρητή που είναι πάντα 0. + +Δημιουργείται με: + + mknod -m 666 /dev/zero c 1 5 + chown root.mem /dev/zero + + +### [3. Swap κατατμήσεις]{#s3} + +Μία swap κατάτμηση δεν είναι επίσης ειδική με κανέναν τρόπο. Τη δημιουργείτε όπως κάθε άλλη κατάτμηση. Η μόνη διαφορά είναι ότι χρησιμοποιείται σαν μια άδεια +(raw) κατάτμηση, δηλαδή, δεν περιέχει κανένα σύστημα αρχείων. Είναι καλη ιδέα να σημειώνετε τις κατατμήσεις swap σαν τύπο 82 (Linux swap). Αυτό κάνει τα +περιεχόμενα της κατάτμησης πιο σαφή, αν και δεν είναι αυστηρώς απαραίτητο στον πυρήνα. + +Όπως αναφέραμε, οι κατατμήσεις swap είναι πιο γρήγορες ξεπερνούν το σύστημα αρχείων, διαβάζοντας κατευθείαν από τον σκληρό δίσκο. + +### [3.1 Ορισμός swap κατάτμησης]{#ss3.1} + +Η swap κατάτμηση δεν είναι ανάγκη να βρίσκεται στον ίδιο σκληρό δίσκο με την κατάτμηση που είναι εγκατεστημένο το Linux. + +Τρέξτε το πρόγραμμα fdisk. Δώστε n (add a new partition), μετά p (primary partition), για hex code: 82 (αν γράψετε l θα δείτε ότι αυτός ο τύπος αντιστοιχεί σε +κατάτμηση Linux swap). + +Κάθε είδος κατάτμησης έχει έναν ξεχωριστό (identifier number) αριθμό ώστε να αναγνωρίζεται από το λειτουργικό σύστημα. (π.χ. για το Linux είναι 83). + +Τελος, δώστε: w (write table to disk and exit). + + +### [4. Ρύθμιση swap συσκευών]{#s4} + +Εφόσον έχετε δημιουργήσει ένα swap αρχείο ή μια swap κατάτμηση, πρέπει να γράψετε μια υπογραφή στην αρχή του/της, αυτή περιέχει μερικές διευθυντικές πληροφορίες +και χρησιμοποιείται από τον πυρήνα. Η εντολή για να το κάνετε αυτό είναι η mkswap. Τη χρησιμοποιείτε έτσι: + + mkswap <μέγεθος> + +Συνηθισμένες παράμετροι: + +- -c ελέγχει τη συσκευή (block device) για bad blocks +- -v0 παλιά μέθοδος (μέχρι 128ΜΒ) +- -v1 νέα μέθοδος (μέχρι 2GB) + +Θα εμφανιστεί το μήνυμα: + + Setting up swapspace, size = <μεγεθος> bytes + +Ο swap χώρος δεν χρησιμοποιείται ακόμη. Υπάρχει, αλλά ο πυρήνας δεν τον χρησιμοποιεί για να παρέχει εικονική μνήμη. + +Πρέπει να είστε πολύ προσεκτικοί στη χρησιμοποίηση της εντολής mkswap, εφόσον ΔΕΝ ελέγχει αν το αρχείο ή η κατάτμηση χρησιμοποιείται για άλλο σκοπό. Η +χρησιμοποίησή της γίνεται συνήθως κατά την εγκατάσταση του συστήματος, την εκτελείτε μόνο ΜΙΑ φορά. + + +### [5. Συγχρονισμός\... ΤΩΡΑ]{#s5} + +H εντολή sync μέσω της συνάρτησης sync() δεσμεύει πρώτα τα inodes σε buffers, και μετά τα buffers στο σκληρό δίσκο. Εκτελείται, συνήθως, αμέσως μετά από την +mkswap. + +### [5.1 Ρόλος της sync]{#ss5.1} + +Κάθε U\*ix έχει φορτωμένο στη μνήμη το super block και τον inode πίνακα και ό,τι δουλειά κάνει πάνω σε αυτά την κάνει στη MNHMH, για ταχύτητα. Περιοδικά τα +\"κατεβάζει\" και στο δίσκο, για αποφυγή απρόσμενων γεγονότων. To sync είναι ακριβώς η εντολή που κάνει το \"κατέβασμα\". Με αυτόν τον τρόπο μπορεί κάποιος να +βεβαιωθεί ότι ολά έχουν γραφτεί με ασφάλεια. + +Στα περισσότερα UNIX συστήματα, υπάρχει ένα πρόγραμμα ου λέγεται update και τρέχει στο background κάνοντας ένα sync κάθε 30 δευτερόλεπτα, οπότε συνήθως δεν +είναι απαραίτητο να χρησιμοποιήσετε την sync. Το Linux έχει έναν επιπρόσθετο δαίμονα (daemon), τον bdflush, ο οποίος κάνει ένα πιο ατελές sync πιο συχνά. + +Κάτω από το Linux, ο bdflush εκκινείται από το update. Δεν υπάρχει συνήθως κανένας λόγος για να ανησυχείτε, αλλά αν ο bdflush πεθάνει για κάποιο λόγο, ο πυρήνας +θα σας προειδοποιήσει γι\' αυτό, και θα πρέπει να τον ξεκίνησετε μόνοι σας (/sbin/update). + + +### [6. Χρησιμοποίηση swap συσκευών]{#s6} + +Εφόσον έχουν ακολουθηθεί τα παραπάνω βήματα για ρύθμιση swap αρχείων/κατατμήσεων, η χρησιμοποίηση αυτών από τον πυρήνα γίνεται με την εντολή swapon. + +### [6.1 Το αρχείο /etc/fstab]{#ss6.1} + +FileSystem TABle + +Το αρχείο /etc/fstab δίνει πληροφορίες για τα διάφορα συστήματα αρχείων στα οποία μπορούμε να έχουμε πρόσβαση. + +Για μια swap συσκευή θα δείτε μια γράμμη όπως η παρακάτω. Στο σύστημά μου (powered by SuSE) είναι: + + /dev/hde3 swap swap defaults 0 0 + +### [6.2 Εξηγήσεις\...]{#ss6.2} + +- Το πρώτο πεδίο περιγράφει τη block συσκευή ή το σύστημα αρχείων που θέλουμε να προσαρτήσουμε, +- το δεύτερο περιγράφει το σημείο προσάρτησης (για swap κατάτμηση είναι swap), +- το τρίτο περιγράφει τον τύπο του συστήματος αρχείων (δείτε cat /proc/filesystems για αυτά που υποστηρίζονται από τον τρέχοντα πυρήνα σας), +- το τέταρτο περιγράφει τις παραμέτρους προσάρτησης, +- το πέμπτο χρησιμοποιείται από την εντολή dump (στην περίπτωσή μας είναι 0, δεν χρειάζεται), +- το έκτο καθορίζει τη σειρά προτεραιότητας με την οποία τα συστήματα αρχείων ελέγχονται κατά την εκκίνηση του Linux (στην περίπτωση μας είναι 0, δεν είναι + απαραίτητο). + +### [6.3 Παράμετροι στην swapon]{#ss6.3} + +-a: διαβάζει το /etc/fstab και κάνει διαθέσιμες τις συσκευές/αρχεία που προορίζονται για swapping. + +-p: θέτει προτεραίοτητα στο swapon, 0 \< p \< 32767 από το /etc/fstab, όπου pri=\"τιμή\". + +### [6.4 Αυτόματη χρησιμοποιήση swap συσκευών]{#ss6.4} + +Επεξεργαστείτε το αρχείο /etc/fstab και δημιουργήστε ένα νέο πεδίο για κάθε συσκευή που θέλετε να χρησιμοποιήσετε. + +Τα script εκκίνησης θα τρέξουν την εντολή swapon -a χρησιμοποιώντας όσες swap συσκευές έχουν καταχωριθεί στο /etc/fstab. Επομένως, η εντολή swapon +χρησιμοποιείται μόνο όταν χρειάζεται περισσότερος χώρος swap. + +### [6.5 Μή χρησιμοποίηση swap συσκευών]{#ss6.5} + +Μία περιοχή swap μπορεί να μην χρησιμοποιηθεί με χρήση της εντολής swapoff. Δεν είναι συνήθως απαραίτητο να το κάνετε, εκτός από προσωρινούς χώρους swap. Όλες +οι σελίδες που χρησιμοποιούνται στο χώρο swap αντιγράφονται στη μνήμη πρώτα. Αν δεν υπάρχει αρκετή φυσική μνήμη να τις κρατήσει, Θα αντιγραφούν τότε σε κάποιον +άλλο χώρο. Αν δεν υπάρχει αρκετή εικονική μνήμη να κρατήσει όλες τις σελίδες, το Linux θα αρχίσει να thrash (πιθανότατα, θα αρχίσει να παραπονιέται ο σκληρός, +όσο σκληρός και αν είναι\...). Ύστερα από λίγο, θα πρέπει να γίνει recover, αλλά ενδιάμεσα το σύστημα θα είναι μη χρησιμοποιήσιμο. Θα πρέπει να ελέγξτε (π.χ., +με free) αν υπάρχει αρκετή ελεύθερη μνήμη πριν απομακρύνετε ένα χώρο swap από χρήση. + +Όλες οι περιοχές swap που χρησιμοποιούνται αυτόματα με swapon -a μπορούν αν απομακρυνθούν με swapoff -a. Διαβάζει το αρχείο /etc/fstab για να βρει τί να +απομακρύνει. Όσες περιοχές swap έχουν χρησιμοποιηθεί manually θα παραμείνουν σε χρήση. + +Μερικές φορές πολύς χώρος swap μπορεί να χρησιμοποιείται ακόμη και αν υπάρχει αρκετή πραγματική μνήμη διαθέσιμη. Αυτό μπορεί να συμβεί για παράδειγμα αν σε +κάποιο σημείο υπάρχει ανάγκη για swap, αλλά αργότερα μια μεγάλη διεργασία που καταλάμβανε μεγάλο μέρος της φυσικής μνήμης τερματίζεται και ελευθερώνει τη μνήμη. +Τα swapped-out δεδομένα δεν αντιγράφονται αυτόματα στη μνήμη έως ότου χρειάζεται, έτσι η φυσική μνήμη μπορεί να παραμείνει ελεύθερη για ένα μεγάλο χρονικό +διάστημα. Δεν υπάρχει καμία ανάγκη να ανησυχείτε γι\'αυτό, αλλά μπορεί να σας ανακουφίζει το γεγονός αν γνωρίζετε τι συμβαίνει. + + +### [7. Έλεγχος χρήσης swap συσκευών]{#s7} + +Έχοντας μια swap συσκευή μπορείτε να δείτε πόση από αυτή χρησιμοποιείται. Απλώς δώστε: + +### [7.1 free]{#ss7.1} + + total used free shared buffers cached + Mem: 63092 61604 1488 12684 7664 43396 + -/+ buffers/cache: 10544 52548 + Swap: 136512 376 136136 + +Η πρώτη γραμμή Mem εμφανίζει τη φυσική μνήμη. + +- Η στήλη total ΔΕΝ εμφανίζει τη φυσική μνήμη που χρησιμοποιείται από τον πυρήνα, που είναι περίπου 1-2MB. +- Η στήλη used εμφανίζει το μέγεθος της μνήμης που χρησιμοποιείται (η δεύτερη γραμμή δεν μετράει buffers). +- Η στήλη free εμφανίζει το μέγεθος της αχρησιμοποίητης μνήμης. +- Η στήλη shared εμφανίζει το μέγεθος της μνήμης που μοιράζεται από διάφορες διεργασίες, όσο περισσότερη, τόσο καλύτερη. +- Η στήλη buffers εμφανίζει το τρέχον μέγεθος buffer cache του δίσκου. + +Η τελευταία γραμμή Swap εμφανίζει παρόμοιες πληροφορίες για τις περιοχές swap. Αν αυτή η γραμμή είναι όλο μηδενικά, ο swap χώρος σας δεν έχει ενεργοποιηθει. + +### [7.2 cat /proc/meminfo]{#ss7.2} + + total: used: free: shared: buffers: cached: + Mem: 64606208 63078400 1527808 12877824 7847936 44437504 + Swap: 139788288 385024 139403264 + MemTotal: 63092 kB + MemFree: 1492 kB + MemShared: 12576 kB + Buffers: 7664 kB + Cached: 43396 kB + BigTotal: 0 kB + BigFree: 0 kB + SwapTotal: 136512 kB + SwapFree: 136136 kB + +### [7.3 cat /proc/swaps]{#ss7.3} + + Filename Type Size Used Priority + /dev/hde4 partition 136512 376 -1 + +### [7.4 top]{#ss7.4} + + Mem: 63092K av, 61544K used, 1548K free, 13116K shrd, 7516K buff + Swap: 136512K av, 376K used, 136136K free 43372K cached + +### [7.5 procinfo]{#ss7.5} + + Memory: Total Used Free Shared Buffers Cached + Mem: 63092 61488 1604 12796 7516 43372 + Swap: 136512 376 136136 + + +### [8. Ιδέες\...]{#s8} + +### [8.1 Συνδυασμός swap και /tmp]{#ss8.1} + +Η ιδέα υπάρχει από το tmpfs στα \*BSD και το Solaris, καθώς και από το swapfs σε NeXT συστήματα. + +Η λογική είναι ότι αυτά χρησιμοποιούνται για προσωρινή αποθήκευση που υπό κανονικές συνθήκες δεν απαιτούν πάρα πολύ χωρό. Έτσι συνδυάζοντας τα swap και /tmp δε +χρειάζεται να κρατάτε ξεχωριστό χώρο για αυτά τα δύο, όπως κανονικά θα έπρεπε. Αυτό το ειδικευμένο σύστημα αρχείων είναι ένας swappable RAM δίσκος, που +τοποθετεί τα προσωρινά αρχεία στην swap κατάτμηση. Σημαντικό μειονέκτημα είναι ότι για να κερδίσετε αποθηκευτικό χώρο, χάνετε ταχύτητα (μειώνεται λίγο η απόδοση +του συστήματος), αφού δεν μπορείτε να έχετε και τα δυο σε παραλληλία, γεγονός που ξεπερνιέται με χρήση πολλαπλών δίσκων (interleaving). Με αυτόν τον τρόπο +μπορείτε να μοιράσετε σε διάφορους δίσκους το φόρτωμα του εν λόγω συστήματος αρχείων και να πετύχετε παραλληλία. + +### [8.2 Swap κατ\' απαίτηση με loopback device]{#ss8.2} + +Εφόσον έχετε υποστήριξη για loopback devices στον πυρήνα, γράψτε ένα shell script ώστε να εκχωρείται δυναμικά ο χώρος του swap σε αρχείο βέβαια, χωρίς ξεχωριστή +κατάτμηση\.....κτλ, κτλ + + +### [9. Ίδιος χώρος swap με άλλα λειτουργικά συστήματα]{#s9} + +### [9.1 FreeBSD]{#ss9.1} + +Δεν έχω (ακόμα\...) δεν έχω δοκιμάσει. Δείτε το Linux+FreeBSD mini HOWTO. + +### [9.2 Microsoft Windows]{#ss9.2} + +Έχω (ακόμα\...), δεν έχω δοκιμάσει. Δείτε το Tips-HOWTO και το Swap-Space mini HOWTO, που πλέον συντηρείται. Το ονομα είναι παραπλανητικό\... αναφέρεται σε +ειδικό θέμα ενώ το όνομά του παραπέμπει αλλού. + + +### [10. Σχετικά]{#s10} + +### [10.1 No time\...]{#ss10.1} + +Τα τρία τελευταία κομμάτια, για loopback και για μοίρασμα χώρου swap με άλλα OS θα μπορούσα να τα αναλύσω περισσότερο. Έδωσα, πάντως, κάποιους κατευθυντήριους +άξονες για κάθε ενδιαφερόμενο. Ήθελα να δώσω το στοιχείο της πληρότητας αλλά αν το έκανα σε κάθε πιθανή γωνία του παρόντος θα κατέληγα σε πληρέστατο HOWTO, που +θα απαιτούσε πολύ χρόνο\... + +### [10.2 Πηγές]{#ss10.2} + +Για τη σύνταξη του παραπάνω χρησιμοποιήθηκαν διάφορες πηγές, από HOWTOs, από το SAG, από ερωτήσεις/απαντήσεις διάφορων mailining lists/newsgroups, από σχετικές +man pages, εγχειρίδια διανομών, βιβλία για το Linux κτλ, κτλ. + diff --git a/content/articles/22/03_vi.md b/content/articles/22/03_vi.md new file mode 100644 index 0000000..aac657f --- /dev/null +++ b/content/articles/22/03_vi.md @@ -0,0 +1,569 @@ ++++ +title = 'Οι βασικές λειτουργίες του VI' +date = '1999-03-01T00:00:00Z' +description = '' +author = 'Ζανικόλας Σεραφείμ(mailto:serzan@it.teithe.gr)' +issue = ['Magaz 22'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αυτό το έγγραφο φιλοδοξεί να παρουσιάσει με κατανοητό και γρήγορο τρόπο τις βασικές λειτουργίες του `VI`, ενός από τους καθιερωμένους επεξεργαστές κειμένου των +UNIX λειτουργικών συστημάτων.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Σχετικά\...** +--------------------------------------- + +**2. Εισαγωγή** +------------------------------------ + +**3. Μετακίνηση** +-------------------------------------- + +- [3.1 Στα όρια της ενεργής γραμμής](#ss3.1) +- [3.2 Σε σχέση με την οθόνη](#ss3.2) +- [3.3 Σε όλο το κείμενο](#ss3.3) + +**4. Επεξεργασία Κειμένου** +------------------------------------------------ + +- [4.1 Εισαγωγή](#ss4.1) +- [4.2 Διαγραφή](#ss4.2) +- [4.3 Αντικατάσταση](#ss4.3) +- [4.4 Αλλες χρήσιμες εντολές επεξεργασίας](#ss4.4) + +**5. Αναζήτηση** +------------------------------------- + +- [5.1 Στα όρια της ενεργής γραμμής](#ss5.1) +- [5.2 Σε όλο το κείμενο](#ss5.2) + +**6. Διαχείρηση Αρχείων** +---------------------------------------------- + +**7. Διαχείριση περιοχών μνήμης προσωρινής αποθήκευσης (buffers)** +--------------------------------------------------------------------------------------- + +**8. Διάφορες εντολές** +-------------------------------------------- + +**9. Παραδείγματα** +---------------------------------------- + + +### [1. Σχετικά\...]{#s1} + +Όπως δηλώνει σαφώς και ο τίτλος, σε καμμία περίπτωση δεν αποτελεί πλήρη οδηγό του VI. Η ομαδοποίηση των εντολών έγινε αυθαίρετα έχοντας υπ\'όψη την -όσο το +δυνατόν- ευκολότερη εκμάθηση τους. Για παρατηρήσεις / προτάσεις, επικοινωνήστε στην παραπάνω διεύθυνση. Τέλος το έγγραφο θα το βρείτε στη διεύθυνση +http://aetos.it.teithe.gr/\~serzan/vi/vi.html + + +### [2. Εισαγωγή]{#s2} + +**Καταστάσεις Λειτουργίας, Εντολές** + +: Ο `VI`(sual editor) έχει δύο βασικές καταστάσεις λειτουργίας: + + - κατάσταση εντολών (command mode) + - κατάσταση εισαγωγής κειμένου (text entry mode) + + Κατά τη κατάσταση εντολών οτιδήποτε πληκτρολογείτε μεταφράζεται ως εντολή. Φροντίστε να είστε προσεκτικοί γιατί δε φαίνονται οι εντολές που δίνετε, βλέπετε + μόνο τα αποτελέσματά τους. Εξαίρεση αποτελούν οι εντολές που αρχίζουν από \":\" (άνω κάτω τελεία) οι οποίες εμφανίζονται στο κάτω μέρος της οθόνης και + εκτελούνται αφού πατήσετε `` (enter). Σε κατάσταση εισαγωγής κειμένου -σχεδόν- ο,τιδήποτε πληκτρολογείτε εισάγεται στο κείμενο. + +**Εισαγωγή - Διαγραφή** + +: Πατώντας `` ή `^[` (control-\[) μπορείτε να είστε σίγουροι πως ο `VI` είναι σε κατάσταση εντολών. Βασικοί τρόποι για να περάσετε σε κατάσταση εισαγωγής + κειμένου είναι: πατώντας `i` (insert - εισαγωγή κειμένου στη θέση του δρομέα), `a` (append - εισαγωγή κειμένου στην πρώτη θέση στα δεξιά του δρομέα) ή `o` + (open(?) - εισαγωγή κειμένου σε νέα γραμμή κάτω από την ενεργή). Χρησιμοποιήστε το `x` για να διαγράψετε το χαρακτήρα στη θέση του δρομέα. + +**Μετακίνηση** + +: Για να κινηθείτε μέσα στο κείμενο, αφού βεβαιωθείτε πως είστε σε κατάσταση εντολών, χρησιμοποιήστε τα `h j k l` για αριστερά, κάτω, πάνω και δεξιά. + Εναλλακτικά μπορείτε να χρησιμοποιήσετε τα βελάκια, κάτι που δε συνίσταται για λόγους ταχύτητας. + +**Χειρισμός Αρχείων, Εξοδος** + +: Οσο επεξεργάζεστε ένα αρχείο στον `VI`, ουσιαστικά δουλεύετε σε ένα αντίγραφο του αρχείου σε μία προσωρινή μνήμη (buffer). Οι αλλαγές που κάνετε στην + προσωρινή μνήμη δεν αποθηκεύονται μέχρι τη στιγμή που θα δώσετε την εντολή `:w` (από το write). Εάν το αρχείο είναι read only μπορείτε να γράψετε μόνο + με `:w!`, με την προυπόθεση φυσικά πως έχετε δικαίωμα εγγραφής στο αρχείο (write permission). Γράφοντας + `:e filename` μπορείτε να ανοίξετε ένα νέο αρχείο για επεξεργ ασία, ενώ τερματίζετε τον `VI` με `:q`. Εφόσον δεν + έχετε αποθηκεύσει τις αλλαγές που κάνατε ο `VI` θα διαμαρτυρηθεί και δε θα εκτελέσει την εντολή σας, σε αυτή την περίπτωση χρησιμοποιήστε `:e! filename` + και `:q!` αντίστοιχα. + +**Αντιγραφή, Διαγραφή, Επικόλληση** + +: Οι εντολές `c[E]`, `y[E]` και `d[E]` (change-αλλαγή, yank-copy-αντιγραφή σε προσωρινή μνήμη, delete-διαγραφή και αντιγραφή στην προσωρινή μνήμη), επιδρούν + σε περιοχή κειμένου που προσδιορίζεται από το επίθεμά `[E]` πχ. `yw` (yank word to buffer). Η επανάληψη (`cc`, `yy`, `dd)` υποδηλώνει την επίδρασή τους στην + τρέχουσα γραμμή πχ. το `yy` αντιγράφει το περιεχόμενο της τρέχουσας γραμμής στην προσωρινή μνήμη (yank line to buffer). Επικόλληση κειμένου από την + προσωρινή μνήμη γίνεται μ ε το `p`. + +**Η Λογική Των Εντολών** + +: Οι περισσότερες εντολές του `VI` μπορούν να δεχτούν ένα αριθμητικό πρόθεμα, με το οποίο δηλώνουμε πόσες φορές επιθυμούμε την εκτέλεση τους. Ετσι λοιπόν εκεί + που το `dd` θα έσβηνε την τρέχουσα γραμμή το `3dd` σβήνει 3 γραμμές. + + Ακολουθούν κάποια παραδείγματα. Είναι επιθυμητό ο αναγνώστης να εξοικειωθεί με όσα αναφέρθηκαν μέχρι στιγμής δεδομένου ότι οι εντολές των επόμενων κεφαλαίων + ενδέχεται να προκαλέσουν σύγχιση. + +**Παραδείγματα** + +: + + **`14l`** + + : μεταφορά του δρομέα 14 θέσεις προς τα δεξιά + + **`10j`** + + : μεταφορά του δρομέα 10 σειρές προς τα κάτω + + **`10x`** + + : διαγραφή 10 χαρακτήρων, ξεκινώντας από το δρομέα προς τα δεξιά + + **`cwtext`** + + : αλλαγή λέξης με το text + + **`3cctext`** + + : αλλαγή τριών γραμμών με το text + + **`7yw`** + + : αντιγραφή 7 λέξεων στην προσωρινή μνήμη + + **`3yy`** + + : αντιγραφή 3 γραμμών στην προσωρινή μνήμη + + **`5dw`** + + : διαγραφή 5 λέξεων (και αντιγραφή στην προσωρινή μνήμη) + + **`2dd`** + + : διαγραφή 2 γραμμών (και αντιγραφή στην προσωρινή μνήμη) + + +### [3. Μετακίνηση]{#s3} + +Οι εντολές που δέχονται αριθμητικό πρόθεμα φαίνονται με το χαρακτήρα \[N\] ενώ εκείνες που μπορούν να χρησιμοποιηθούν ως επίθεμα των εντολών `y d c` με \[E\] + +### [3.1 Στα όρια της ενεργής γραμμής]{#ss3.1} + +**`[N][E] w b e`** + +: μετακίνηση στην επόμενη λέξη, στην αρχή ή στο τέλος λέξης (οι λέξεις αποτελούνται από γράμματα και ψηφία, οτιδήποτε άλλο θεωρείται διαχωριστικό λέξης) + +**`[N][E] W B E`** + +: μετακίνηση στην επόμενη λέξη, στην αρχή ή στο τέλος λέξης (οι λέξεις αποτελούντα από οποιουσδήποτε χαρακτήρες εκτός από το κενό, που έιναι διαχωριστικό + λέξης) + +**`[E] 0`** + +: μεταφορά του δρομέα στην πρώτη στήλη της ενεργής γραμμής + +**`[E] n|`** + +: μεταφορά του δρομέα στην νιοστή στήλη της ενεργής γραμμής ή στην πρώτη εάν δεν προσδιοριστεί το `n` + +**`[E] $`** + +: μετακίνηση του δρομέα στο τέλος της ενεργής γραμμής + +### [3.2 Σε σχέση με την οθόνη]{#ss3.2} + +**`[E] H`** + +: μετακίνηση στην πρώτη γραμμή της οθόνης + +**`[E] M`** + +: μετακίνηση στη γραμμή στη μέση της οθόνης + +**`[E] L`** + +: μετακίνηση στην τελευταία γραμμή της οθόνης + +**`^F`** + +: μετακίνηση μία οθόνη προς τα κάτω + +**`^B`** + +: μετακίνηση μία οθόνη προς τα πάνω + +### [3.3 Σε όλο το κείμενο]{#ss3.3} + +**`[N] h j k l`** + +: αριστερά, κάτω, πάνω, δεξιά (εναλλακτικά χρησιμοποιήστε τα βελάκια) + +**`[E] nG`** + +: μετακίνηση στη νιοστή γραμμή ή στο τέλος του αρχείου (χωρίς το `n`) + +**`:n`** + +: μετακίνηση στη νιοστή γραμμή + +**`[E] 'a`** + +: μετακίνηση στην πρώτη στήλη της γραμμής που σημειώθηκε ως `a`, αυτό γίνεται με την εντολή `ma` όπου `a` ένα οποιοδήποτε μικρό γράμμα του λατινικού αλφαβήτου + +**`` [E] `a ``** + +: μετακίνηση στη στήλη και στη γραμμή που σημειώθηκε ως `a`, αυτό γίνεται με την εντολή `ma` όπου `a` ένα οποιοδήποτε μικρό γράμμα του λατινικού αλφαβήτου + + +### [4. Επεξεργασία Κειμένου]{#s4} + +Οι εντολές που δέχονται αριθμητικό πρόθεμα φαίνονται με το χαρακτήρα \[N\] ενώ εκείνες που μπορούν να χρησιμοποιηθούν ως επίθεμα των εντολών `y d c` με \[E\] + +### [4.1 Εισαγωγή]{#ss4.1} + +**`atext`** + +: γράφει το `text` στα δεξιά της θέσης του δρομέα (append) + +**`A`text** + +: γράφει το `text` στο τέλος της ενεργής γραμμής + +**`itext`** + +: γράφει το `text` στη θέση του δρομέα (insert) + +**`Itext`** + +: γράφει το `text` στην αρχή της ενεργής γραμμής + +**`otext`** + +: γράφει το `text` στην αρχή μιας νέας γραμμής που ανοίγει κάτω από την ενεργή (open) + +**`Otext`** + +: γράφει το `text` στην αρχή μιας νέας γραμμής που ανοίγει πάνω από την ενεργή + +### [4.2 Διαγραφή]{#ss4.2} + +Κάθε φορά που διαγράφετε κάτι, αυτό αντιγράφετε αυτόματα στη γενικής χρήσεως προσωρινή μνήμη (buffer). + +**`[N] x`** + +: διαγραφή του χαρακτήρα στον οποίο βρίσκεται ο δρομέας + +**`[N] X`** + +: διαγραφή του χαρακτήρα αριστερά του δρομέα + +**`[N] d[E]`** + +: διαγραφή από τη θέση του δρομέα εώς το σημείο που προσδιορίζει το `[E]` + +**`[N] dd`** + +: διαγραφή τρέχουσας γραμμής + +**`D`** + +: διαγραφή από τη θέση του δρομέα εώς το τέλος της γραμμής (ισοδύναμο με `d$`) + +**`:d`** + +: διαγραφή τρέχουσας γραμμής (ισοδύναμο με `dd`) + +**`:nd`** + +: διαγραφή νιοστής γραμμής, όπου `n` ακέραιος αριθμός που προσδιορίζει τον αριθμό γραμμής + +**`:x,yd`** + +: διαγραφή από την γραμμή `x` εώς και την `y`. Όπου `x` και `y` μπορεί να είναι: α) οποιοσδήποτε αριθμός γραμμής β). (τελεία - ενεργή γραμμή) γ) \$ (τελευταία + γραμμή) δ) τα (β) ή (γ) + - αριθμητική σταθερά + +### [4.3 Αντικατάσταση]{#ss4.3} + +#### Στα όρια της ενεργής γραμμής + +**`[N] c[E]text`** + +: αλλαγή (change) του κειμένου, από το δρομέα εώς τη θέση που προσδιορίζει το `[E]`, με το `text` + +**`[N] cctext`** + +: αλλαγή ενεργής γραμμής με το `text` + +**`Ctext`** + +: αλλαγή του κειμένου, από το δρομέα εώς το τέλος της γραμμής, με το `text` (ισοδύναμο με `c$text`) + +**`:s/re1/re2/`** + +: αντικατάσταση (subtitute), ΜΟΝΟ της πρώτης συμβολοσειράς `re1` ή αυτής που προσδιορίζεται από την κανονική έκφραση `re1` (relative expression), που θα + βρεθεί στην ενεργή γραμμή, με τη συμβολοσειρά `re2` ή αυτήν που προσδιορίζεται από την κανονική έκφραση `re2` + +**`:s/re1/re2/g`** + +: το ίδιο με τη διαφορά πως θα αντικαταστήσει ΟΛΑ τα `re1`, της ενεργής γραμμής, με το `re2` και όχι μόνο το πρώτο + +**`:s/re1/re2/c`** + +: το ίδιο με τη διαφορά πως θα σας ζητήσει επιβεβαίωση για κάθε αλλαγή που θα κάνει. Οι επιλογές `g` (global) και `c` (confirm) είναι προαιρετικές και μπορούν + να χρησιμοποιηθούν και ταυτόχρονα + +#### Σε όλο το κείμενο + +**`:x,y s/re1/re2/`** + +: αντικατάσταση, ΜΟΝΟ της πρώτης συμβολοσειράς `re1` ή αυτής που προσδιορίζεται από την κανονική έκφραση `re1` (relative expression), που θα βρεθεί στις + γραμμές που προσδιορίζονται από τα `x` και `y`, με τη συμβολοσειρά `re2` ή αυτήν που προσδιορίζεται από την κανονική έκφραση `re2`. Όπου `x` και `y` μπορεί + να είναι: α) οποιοσδήποτε αριθμός γραμμής β). (τελεία - ενεργή γραμμή) γ) \$ (τελευταία γραμμή) δ) τα (β) ή (γ) + - αριθμητική σταθε ρά + +### [4.4 Αλλες χρήσιμες εντολές επεξεργασίας]{#ss4.4} + +**`[N] ~`** + +: αλλάζει το χαρακτήρα στη θέση του δρομέα, από μικρό σε κεφαλαίο ή αντίστροφα, και κινείται μία θέση δεξιά (μόνο για λατινικούς χαρακτήρες) + +**`[N] u`** + +: ακυρώνει μία ή περισσότερες ενέργεις (undo) + +**`J`** + +: ενώνει την ενεργή γραμμή με την επόμενη + + +### [5. Αναζήτηση]{#s5} + +Οι εντολές που δέχονται αριθμητικό πρόθεμα φαίνονται με το χαρακτήρα \[N\] ενώ εκείνες που μπορούν να χρησιμοποιηθούν ως επίθεμα των εντολών `y d c` με \[E\] + +### [5.1 Στα όρια της ενεργής γραμμής]{#ss5.1} + +**`[N][E] fa Fa`** + +: μεταφορά του δρομέα στο πρώτο `a` που θα βρεθεί στη γραμμή προς τα δεξιά (`fa`) ή προς τα αριστερά (`Fa`) + +**`[N][E] , ;`** + +: επανάληψη τελευταίας αναζήτησης προς τα αριστερά (`,`) ή προς τα δεξιά (`;`) + +### [5.2 Σε όλο το κείμενο]{#ss5.2} + +**`/re`** + +: αναζήτηση, προς τα εμπρός, του `re`, όπου `re` μια οποιαδήποτε συμβολοσειρά ή κανονική έκφραση + +**`?re`** + +: αναζήτηση, προς τα πίσω, του `re`, όπου `re` μια οποιαδήποτε συμβολοσειρά ή κανονική έκφραση + +**`n`** + +: επανάληψη τελευταίας αναζήτησης προς τα κάτω + +**`N`** + +: επανάληψη τελευταίας αναζήτησης προς τα πάνω + + +### [6. Διαχείρηση Αρχείων]{#s6} + +**`:w`** + +: αποθήκευση αλλαγών στο αρχικό αρχείο + +**`:w filename`** + +: αποθήκευση αλλαγών στο `filename` + +**`:wq`** + +: αποθήκευση αλλαγών στο αρχικό αρχείο και τερματισμός του `VI` + +**`:e filename`** + +: ανοίγει το `filename` (αν δεν υπάρχει δημιουργεί ένα άδειο), θα εμφανιστεί προειδοποίηση σε περίπτωση που δεν έχουν αποθηκευτεί οι αλλαγές του αρχικού + αρχείου + +**`:e! filename`** + +: ανοίγει το `filename` ανεξάρτητα από το αν έχουν αποθηκευτεί οι αλλαγές του πρώτου ή όχι + +**`:r filename`** + +: προσθέτει τα περιεχόμενα του αρχείου `filename` στη θέση του δρομέα + +**`:r `** + +: προσθέτει την έξοδο της εντολής `unix_cmd` στη θέση του δρομέα + +**`:q `** + +: έξοδος από τον `VI`, θα εμφανιστεί προειδοποίηση σε περίπτωση που δεν έχουν αποθηκευτεί οι αλλαγές + +**`:q! `** + +: έξοδος από τον `VI`, ανεξάρτητα από το αν έχουν αποθηκευτεί οι αλλαγές του αρχείου + + +### [7. Διαχείριση περιοχών μνήμης προσωρινής αποθήκευσης (buffers)]{#s7} + +Εκτός από την γενικής χρήσης ή ανώνυμη μνήμη αποθήκευσης υπάρχουν και οι επώνυμες, μία για κάθε (μικρό) γράμμα του λατινικού αλφαβήτου. + +**`y[E]`** + +: αντιγραφή του κειμένου, από το δρομέα εώς το σημείο που προσδιορίζει το `[E]`, στη γενικής χρήσης μνήμη + +**`Y`** + +: αντιγραφή της ενεργής γραμμής στη γενικής χρήσης μνήμη, ισοδύναμο του `yy` + +**`"ay[E]`** + +: αντιγραφή του κειμένου, από το δρομέα εώς το σημείο που προσδιορίζει το `[E]`, στην επώνυμη μνήμη `a`, όπου `a` οποιοδήποτε μικρό γράμμα του λατινικού + αλφαβήτου + +**`p P`** + +: επικόλληση του περιεχομένου της γενικής χρήσης προσωρινής μνήμης μετά ή πριν τη θέση του δρομέα ή την ενεργή γραμμή (ανάλογα με το αν η μνήμη έχει λέξεις ή + γραμμές) + +**`"ap "aP`** + +: επικόλληση του περιεχομένου της προσωρινής μνήμης `a` μετά ή πριν τη θέση του δρομέα + + +### [8. Διάφορες εντολές]{#s8} + +**`:sh`\** + +: προσωρινή έξοδος στο κέλυφος (shell), επιστροφή με `exit` + +**`:!unix_cmd`\** + +: εκτέλεση της εντολής `unix_cmd` + +**`:cd dir_name`\** + +: αλλαγή ενεργού καταλόγου στον `dir_name` + +**`^G`** + +: εμφανίζει το όνομα του αρχείου, ένδειξη τροποποίησης ή όχι, αρ.γραμμής και θέση του δρομέα στο αρχείο σε ποσοστό % + +**`^Z`** + +: προσωρινή διακοπή του `VI`, επιστροφή με fg + + +### [9. Παραδείγματα]{#s9} + +**`c4Wtext`** + +: αλλαγή των 4 επόμενων λέξεων με το `text` (όπου λέξη οποιαδήποτε σειρά χαρακτήρων δεν περιέχει το κενό) + +**`d4wtext`** + +: διαγραφή των 4 επόμενων λέξεων (όπου λέξη οποιαδήποτε σειρά γραμμάτων και ψηφίων) + +**`d0`** + +: διαγραφή του κειμένου από τη θέση του δρομέα εώς την αρχή της γραμμής + +**`d$`** + +: διαγραφή του κειμένου από τη θέση του δρομέα εώς το τέλος της γραμμής + +**`dN|`** + +: διαγραφή του κειμένου από τη θέση του δρομέα εώς τη στήλη `N` + +**`:11d`** + +: διαγραφή της 11ης γραμμής + +**`:.,.+3d`** + +: διαγραφή της ενεργής γραμμής και των τριών επόμενων + +**`:.,$d`** + +: διαγραφή από την ενεργή γραμμή εώς το τέλος του αρχείου + +**`4~`** + +: αλλαγή των κεφαλαίων γραμμάτων σε μικρών και αντίστροφα, για τους επόμενους τέσσερεις χαρακτήρες + +**`3u`** + +: ακυρώνει τις τρεις τελευταίες ενέργειες (undo) + +**`f*`** + +: μετακίνηση του δρομέα στο πρώτο `*` + +**`3f*`** + +: μετακίνηση του δρομέα στο τρίτο `*` + +**`y2fB`** + +: αντιγραφή του κειμένου από το δρομέα εώς το δεύτερο B, στη γενικής χρήσης (ανώνυμη) μνήμη + +**`d5fa`** + +: διαγραφή του κειμένου από το δρομέα εώς το πέμπτο a, αντιγραφή στη γενικής χρήσης (ανώνυμη) μνήμη + +**`c5fatext`** + +: αλλαγή του κειμένου από το δρομέα εώς το πέμπτο a με το `text` + +**`:s/text1/text2/`** + +: αντικατάσταση του πρώτου `text1` που θα βρεθεί στην ενεργή γραμμή με το `text2` + +**`:s/text1/text2/g`** + +: αντικατάσταση όλων των `text1` που θα βρεθούν στην ενεργή γραμμή με το `text2` + +**`:s/text1/text2/gc`** + +: αντικατάσταση όλων των `text1` που θα βρεθούν στην ενεργή γραμμή, με το `text2`, μετά από επιβεβαίωση + +**`:5,11 s/text1/text2/`** + +: αντικατάσταση του πρώτου `text1` που θα βρεθεί στις γραμμές 5 εώς και 11, με το `text2` + +**`:.,.+3 s/text1/text2/gc`** + +: αντικατάσταση όλων των `text1` που θα βρεθούν στην ενεργή γραμμή και στις 3 επόμενες, με το `text2`, μετά από επιβεβαίωση + +**`:.,$ s/text1/text2/gc`** + +: αντικατάσταση όλων των `text1` που θα βρεθούν από την ενεργή γραμμή εώς και το τέλος του αρχείου, με το `text2`, μετά από επιβεβαίωση + +**`"ayf.`** + +: αντιγραφή του κειμένου από το δρομέα εώς την πρώτη τελεία, στην επώνυμη μνήμη `a` + +**`"ap`** + +: επικόλληση του περιεχομένου της επώνυμης μνήμης `a`, στα δεξιά του δρομέα + +**`"zy2f)`** + +: αντιγραφή του κειμένου από το δρομέα εώς τη δεύτερη παρένθεση, στην επώνυμη μνήμη `z` + +**`"zP`** + +: επικόλληση του περιεχομένου της επώνυμης μνήμης `z`, στη θέση του δρομέα + diff --git a/content/articles/22/04_internet.md b/content/articles/22/04_internet.md new file mode 100644 index 0000000..46c44c8 --- /dev/null +++ b/content/articles/22/04_internet.md @@ -0,0 +1,78 @@ ++++ +title = 'Οι κίνδυνοι του Internet' +date = '2000-03-01T00:00:00Z' +description = '' +author = 'Πρατικάκης Πολύβιος(mailto:el97649@central.ntua.gr)' +issue = ['Magaz 22'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Οι κίνδυνοι του Internet και του κυβερνοχώρου, 16 χρόνια μετά το 1984.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έχετε αναρωτηθεί πόσο ελεύθερο είναι το Internet; + +Όλοι ακούμε συνεχώς για την υπερλεωφόρο των πληροφοριών, και πώς πρόκειται να επηρεάσει τη ζωή μας, να μας δώσει ελευθερία, απελευθέρωση του λόγου, και καλύτερη +δια-προσωπική επικοινωνία. Όμως, υπάρχει και μία άλλη άποψη, όχι τόσο διαδεδομένη και ακουστή, \"η άλλη πλευρά\", η οποία μεταβάλλει τις παραπάνω αισιόδοξες +δηλώσεις, μόνο με το να προσθέσει τη λέξη \"δυνητικά\". Φυσικά, η τεχνολογία είναι καλή, η γνώση είναι για όλους, και η πληροφορία θέλει να είναι ελεύθερη. +Αλλά, από την άλλη, τι να την κάνουμε την τεχνολογία και την ελευθερία που μπορεί να προσφέρει, αν όλοι χάσουμε το ενδιαφέρον μας για ελευθερία; + +Το Internet τελευταία έχει αρχίσει να μεταμορφώνεται σε ένα άλλο είδος τηλεόρασης, υιοθετώντας όλο και περισσότερο το είδος σχέσης πομπού-δέκτη, με τη +δικαιολογία ότι \"πάντα υπάρχει η δυνατότητα αμφίδρομης επίδρασης\". Κανείς δεν αρνείται ότι υπάρχει η δυνατότητα αλληλεπίδρασης, αλλα φαίνεται ότι συγχέουμε τη +δυνατότητα με την πραγματοποίηση. Διαπράτουμε το ίδιο λάθος με αυτούς που υποστηρίζουν ότι οι τηλεθεατές έχουν πάντα την επιλογή να κλείσουν την τηλεόραση. + +Όλο και πιό πολλοί άνθρωποι, μην έχοντας τη δυνατότητα να ψάξουν και να αναζητήσουν ανάμεσα στις τεράστιες -και συνεχώς διογκούμενες- ποσότητες πληροφορίας, οι +περισσότερες από τις οποίες αποτελούν κυρίως \"θόρυβο\", εξαρτώνται από μηχανές αναζήτησης για να εντοπίσουν τις πληροφορίες που θέλουν. Οι περισσότεροι από +τους \"καινουριοφερμένους\" στο Internet, συγχέουν το Internet με τα portals και τις μηχανές αναζήτησης, αλλά σχεδόν κανείς δεν αναρωτιέται ποτέ ποιός διοικεί +αυτές τις μηχανές. Ποιός δηλαδή λίγο πολύ \"φιλτράρει\" τις πληροφορίες στις οποίες έχουν πρόσβαση, ή ακόμα πιο πέρα, από ποιόν εξαρτώνται αυτές οι μηχανές. +Γιατί λ.χ. \"τυχαίνει\" κάθε φορά οι σελίδες που αποτελούν απάντησεις σε ένα ερώτημα να είναι ταξινομημένες, σε φθίνουσα σειρά, ανάλογα με το πόσα χρήματα +δαπανά η εταιρία που έχει την σελίδα για διαφήμηση στο εν λόγω ψαχτήρι. + +Ένα άλλο ανησυχητικό θέμα που έχει προκύψει είναι η ιδιωτική ζωή. Το λάθος εδώ έγκειται στο γεγονός ότι οι περισσότεροι άνθρωποι νιώθουν ότι ο κυβερνοχώρος +είναι μια ζώνη \"παιχνιδιού\", ένας χώρος όπου όλοι είναι αυτό που θέλουν να είναι, ένα μέρος χωρίς σύνορα ούτε νόμους. Αυτό φυσικά δεν είναι αλήθεια, αλλά και +ακόμη κι άν ήταν, σίγουρα δεν είναι επιθυμητό, όσο παράξενο κι αν ακούγεται. Φαίνεται να ξεχνάμε ότι τα κράτη και οι νόμοι -ειδικά στο δυτικό κόσμο- υπάρχουν +για να προστατεύουν τους πολίτες και τη δημοκρατία, και έχουν κερδηθεί και πληρωθεί πολύ ακριβά. Ξεχνάμε επίσης ότι είτε θέλουμε είτε όχι, ο κυβερνοχώρος είναι +μια προέκταση της κοινωνίας, είναι άλλο ένα ανθρώπινο δημιούργημα. Είναι φυσιολογικό επομένως να επηρεάζεται -και να επηρεάζει- από την \"υλική\" κοινωνία. +Είναι αδύνατον οι ίδιοι άνθρωποι να ζούν στον ένα κόσμο σε ένα σύστημα δημοκρατίας (η μη\...), και ταυτόχρονα στον άλλο μέσα σε μια ιδεαλιστική αναρχία. Αυτά τα +δύο δέν συμβιβάζονται, γιατί απαιτούν ένα εντελώς διαφορετικό σύστημα αξιών. Όταν λέμε αναρχία στον κυβερνοχώρο, δεν εννοούμε την ουτοπιστική έννοια όπου δεν +υπάρχει αρχή, γιατί δεν χρειάζεται να υπάρχει, αφού όλοι συνειδητοποιούν την αξία της ελευθερίας και υποχωρούν όπου πρέπει οικιοθελώς. Δυστυχώς η αναρχία, αν +τελικά επικρατήσει, στον κυβερνοχώρο, θα εκφράζεται ως η απουσία οποιασδήποτε αρχής θα μπορούσε να ελέγξει ποιος καταπιέζει ποιον. + +Στις σύγχρονες δημοκρατίες (εντός ή εκτός εισαγωγικών) οι αρχές και οι νόμοι θέτουν τα όρια και τις δικλείδες ώστε να μην παραβιάζονται οι αρχές της δημοκρατίας +και της ισότητας. Αυτό μπορεί να ακούγεται εξίσου ουτοπικό με την ιδανική αναρχία, αλλά έστω και αν η πραγματικότητα απέχει στις περισσότερες των περιπτώσεων, +τουλάχιστον είναι καλύτερα απ\' ότι παλιότερα. Δεν μπορούμε να δούμε ότι από τον κυβερνοχώρο λείπουν όλες αυτές οι προστασίες -μερικοί τις λένε +\"περιορισμούς\"- και όλο αυτό γιατί οι άνθρωποι θεωρούν δεδομένο ότι τα δικαιώματά τους είναι ασφαλή και δεν επηρρεάζονται. + +Αντιθέτως, αυτοί οι \"περιορισμοί\" που τραβούν τη διαχωριστική γραμμή εκεί που τελειώνει η ελευθερία του ενός και αρχίζει η ελευθερία του άλλου, δεν είναι +ενεργοί στον κυβερνοχώρο. Το γεγονός αυτό επιτρέπει την καταπάτηση της ιδιωτικής ζωής, η οποία θεωρείται απόρθητη στον πραγματικό κόσμο. Δεν φαινόμαστε να +συνειδητοποιούμε ότι εμείς, τα γούστα μας, τα ενδιαφέροντά μας, οι σκέψεις μας εμπορευματοποιούνται και πωλούνται από τον ένα διαφημιστή στον άλλο, και το +χειρότερο, αυτό γίνεται \"ελεύθερα\". Στον \"έξω\" κόσμο, η παραβίαση του απορρήτου της αλληλογραφίας είναι ακατανόητη, και θα προκαλούσε σκάνδαλο, αν και οι +περισσότερες εταιρίες που έχουν δίκτυα, αλλά και οι ISP και mail-providers γενικότερα, ψάχνουν στην ηλεκτρονική αλληλογραφία των πελατών τους, για να +\"προστατέψουν\" τα συστήματά τους. + +\"Και τι σχέση έχει το Linux;\" θα ρωτούσε κανεις. Μπορεί να μη φαίνεται με την πρώτη, αλλά η σχέση είναι μεγάλη, και όχι μόνο για το Linux, αλλά για τη +φιλοσοφία OpenSource γενικότερα. Η σχέση βασίζεται στην σημασία του λογισμικού για τον κυβερνοχώρο. Το λογισμικό είναι ουσιαστικά αυτό που καθιστά τον +κυβερνοχώρο αυτό που είναι. Κανείς δεν σκέφτεται τον κυβερνοχώρο ως τα καλώδια και τα κομμάτια πυρίτιο που αποτελούν το υλικό. Επιπλέον, το υλικό δεν είναι καν +ελεύθερο, αφού πολύ μικρό ποσοστό των γραμμών που υλοποιούν τις συνδέσεις είναι δημόσιο. Και όμως το Internet δεν είναι ιδιωτικό. Αυτό συμβαίνει γιατί ο +κυβερνοχώρος έγκειται στο χώρο του ιδεατού, είναι δηλαδή ως ιδέα πολύ πιο κοντά στο λογισμικό. Ο έλεγχος δηλαδή της βιομηχανίας του λογισμικού συνεπάγεται +έλεγχο σε ένα μεγάλο βαθμό και του κυβερνοχώρου. Δεν είναι δυνατόν να μιλάμε για δημοκρατία, ισότητα και ελευθερία, όταν ο έλεγχος αυτός δεν γίνεται από μια +πλειοψηφία τουλάχιστον, και στην καλύτερη περίπτωση από όλους. + +Σήμερα, η συντριπτική πλειοψηφία των χρηστών δεν έχουν τη δυνατότητα του παραμικρού ελέγχου και κριτικής πάνω στο λογισμικό που χρησιμοποιούν. Οι ιδέες, γιατί η +έννοια του λογισμικού είναι κοντά σ\' αυτό που λέμε ιδέα, έχουν γίνει ιδιοκτησία, και το να μάθει κάποιος την ιδιοκτησία του άλλου είναι έγκλημα. Αλήθεια, τι +άλλο θα μπορούσε να ονομαστεί \"έγκλημα σκέψης\"; + +Το Linux και η όλη φιλοσοφία που εισάγεται με το Open Source Software, είναι ουσιαστικά μια μεταβίβαση της δυνατότητας ελέγχου του λογισμικού, από αυτούς που το +γράφουν, σε όλους. Είναι δηλαδή η βασική προϋπόθεση για τον \"εκδημοκρατισμό\" του κυβερνοχώρου, και μια ελπίδα ώστε να μην καταλήξουμε σε μια ασύδοτη +\"αναρχία\", αλλά σε μια καλύτερη έκδοση της υπάρχουσας κοινωνίας. Ο καθένας μπορεί να ελέγξει τον κώδικα, να καταλάβει τις σκέψεις του άλλου, να τις βελτιώσει. +Και βέβαια αυτό δεν είναι κλοπή, αλλά αναγνώριση της αξίας του δημιουργού. Το Linux εισάγει στον κυβερνοχώρο το αυτονόητο: τη δυνατότητα όλων να κρίνουν, να +ελέγχουν και να προστατεύουν τους εαυτούς τους, αλλά και τη δυνατότητα του κάθε δημιουργού να εισπράξει την αναγνώριση για το έργο του. Αυτός είναι ένας άλλος +μεγάλος τομέας προόδου, αφού μέχρι τώρα, την \"ιδιοκτησία\" του λογισμικού δεν την είχαν αυτοί που το δημιουργούσαν αλλά δικηγόροι και managers. (Αλήθεια, ο +Gates προγραμμάτισε τα Windows;) + +Ας ελπίσουμε ότι κάποια στιγμή οι άνθρωποι θα συνειδητοποιήσουν ότι τα δικαιώματά τους στον κυβερνοχώρο είναι ακριβώς όσο πολύτιμα όσο και στον υλικό κόσμο, και +ότι η ελευθερία πρέπει να προστατευθεί για τους αδύνατους. Ας μη μιλάμε μόνο για ελευθερία στον κυβερνοχώρο, ενάντια σε κάθε νόμο και έλεγχο, μόνο γιατί +νιώθουμε ότι περιοριζόμαστε από το να \"εξαπλώσουμε\" την ελευθερία μας ενάντια σ\'αυτή κάποιου άλλου. Μπορεί όλοι να νιώθουμε δυνατοί, αλλά πάντα υπάρχει ο πιο +δυνατός, και αν τους κανόνες του παιχνιδού δεν τους θέτουν αυτοί που θα έπρεπε, θα τους θέσουν αυτοί που δεν πρέπει. diff --git a/content/articles/22/05_fvwm2.md b/content/articles/22/05_fvwm2.md new file mode 100644 index 0000000..58d8107 --- /dev/null +++ b/content/articles/22/05_fvwm2.md @@ -0,0 +1,449 @@ ++++ +title = 'Πώς να κάνετε τον FVWM2 πιο Στυλάτο' +date = '2000-01-01T00:00:00Z' +description = '' +author = 'The Reverant(mailto:reverant@x-treme.gr)' +issue = ['Magaz 22'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ο FVWM2 είναι ένας Window Manager (WM) που λόγω ηλικίας είναι πλέον αρκετά \"ώριμος\" και σταθερός. Δυστυχώς όμως, είναι περισσότερο \"ώριμος\" από όσο θα +έπρεπε όσον αφορά την εμφάνισή του, και είναι αναμφισβήτητο γεγονός το ότι η λειτουργικότητά του χρήζει παραιτέρω βελτίωσης.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτός είναι και ο σκοπός αυτού του άρθρου. Πρωτίστως να βελτιώσει το εντελώς ανιαρό και συντηρητικό standard look του FVWM2, και να βελτιώσει στα σημεία τη +λειτουργικότητά του. Αρχίζουμε λοιπόν\... :-) + +ΣΗΜΕΙΩΣΗ: Αυτό το άρθρο προϋποθέτει κάποια εξοικείωση με τον FVWM2. Αν αυτή δεν υπάρχει, προτείνεται η χρήση του μέχρι κάποιου σημείου εξοικείωσης, καθώς και η +ανάγνωση της man σελίδας (man fvwm2 μόνο για όποιον έχει πραγματικά **ΓΑΙΔΟΥΡΙΝΗ** υπομονή. Ο υπογράφων μερικές φορές δεν φάνηκε αρκετά \"ζώον\" και η υπομονή +του δοκιμάστηκε πέραν ανθρωπίνων ορίων :-) ) + +Πρώτο βήμα είναι να βρούμε το config αρχείο του FVWM2. Αυτό είναι το .fvwm2rc το οποίο αναζητείται στο home directory του χρήστη. Εαν δεν βρεθεί εκεί, τότε +χρησιμοποιείται το system-wide που συνήθως βόσκει στο λιβάδι /usr/X11R6/lib/X11/fvwm2/.fvwm2rc. Δεν προτείνεται να πειράξετε το system-wide αρχείο, αντιθέτως, +πειράξτε το αντίστοιχο ενός απλού χρήστη. Και φυσικά, πριν κάνετε οποιαδήποτε παρέμβαση, κάντε ένα **τριπλό** backup του αρχείου αυτού, για κάθε ενδεχόμενο. + +Κατόπιν, ανοίγουμε το αρχείο .fvwm2rc με έναν editor και αρχίζουμε: + +1. Window buttons - Μπορούμε να ορίσουμε την εμφάνιση των window control buttons. Τα standard κρίνονται ικανοποιητικά, οπότε αφήνονται ως εχουν. + +2. General Configuration - Διάφορες γενικοί παράμετροι του FVWM2. Αυτό που θα πειραχθεί από εδώ είναι το DeskTopSize. Αυτή η παράμετρος ορίζει πόσα virtual + desktops θα εμφανίζονται στον pager. Η default τιμη 3x2 μέχρι τώρα δεν μου έχει χρησιμεύσει προσωπικά. Τουναντίον μάλιστα :-). Για αυτό και βάζουμε τιμή + 2x2: + + DeskTopSize 2x2 + +3. Colors and fonts - Μπορούμε να ορίσουμε τα χρώματα των selected windows και των διαφόρων menu. Με τη δήλωση: + + HilightColors TextColor BackColor + + το selected window θα έχει ως font color το \"TextColor\" και ως background color το \"backColor\". Αυτά τα χρώματα μπορεί να είναι οποιαδήποτε χρώματα που + αναφέρονται στο αρχείο: /usr/X11R6/lib/X11/rgb.txt\ + Για τα sticky παράθυρα: + + StickyColors TextColor BackColor + + Για τα ανενεργά παράθυρα, καθώς και για συγκεκριμένα παράθυρα, θα χρησιμοποιήσουμε τη Style δήλωση, της οποίας η χρήση αναλύεται αργότερα. Κατόπιν, για το + χρώμα & το font των menus: + + Menustyle TextColor BackColor OtherColor -misc-fixed-medium-r-normal-*-15-*-75-75-c-90-iso8859-1 fvwm + + Το \"OtherColor\" δεν έχει διαπιστωθεί που χρησιμεύει (κανείς;). Κατόπιν, η standard δήλωση του font που θέλουμε. + +4. Functions για Initialization, Restart & Exit.\ + Functions είναι δηλώσεις που εκτελούνται κατόπιν κάποιας πράξης του χρήστη, π.χ. πατάει ένα button στο FvwmButtons, ή κάνει κλικ στο desktop, κ.τ.λ. Αυτές + εκτελούνται κατόπιν αναλόγου σήματος του WM. Για initialization (οι παρακάτω δηλώσεις θα εκτελούνται όταν ο FVWM2 γίνεται initialized):\ + Δήλωση της function \"InitFunction\": + + AddToFunc InitFunction + + Και μετά έχουμε: + + - Το module \"FvwmBanner\" δεν χρησιμεύει πουθενά, οπότε κερδίζει ένα comment-out σύμβολο (\#) με την αξία του! :-) + + #+ "I" Module Fvwmbanner + + - Τα xmessages προτιμώ προσωπικά να εμφανίζονται σε ενα xterm με background χρώμα το μαύρο και text χρώμα το πράσινο (Old-schoοl terminal), με τίτλο + \"Xmessages\", και ένα συγκεκριμένο geometry (δηλαδή μέγεθος και σημείο τοποθέτησης του παραθύρου πάνω στο desktop) που βολεύει. Αυτό γίνεται με την + εξής δήλωση: + + + "I" Exec xterm -geometry 83x10+0+1120 -bg black -fg green -T "XMessages" -e tail -f /root/.X.err + + Η original δήλωση αφαιρείται όπως έχει. + + - Το default xterm που εμφανίζεται με το initialization του fvwm2 έχει χάλια χρώματα, οπότε: + + + "I" Exec xterm -geometry +0+88 -bg black -fg green + + - Ένα όμορφο background πάντα βοηθάει την κατάσταση :-) + + + "I" Exec xpmroot /root/pics/skull.xpm + + ΣΗΜΕΙΩΣΗ: Για όποιον ενδιαφέρεται, οι εικόνες και τα εικονίδια που χρησιμοποιώ, θα είναι διαθέσιμα από 5-6 Ιανουαρίου στο: + . Τα κάνετε extract με: + + $: tar zxfv linux-icons.tar.gz + + και ύστερα τα αντιγράφετε στο: /usr/X11R6/include/X11/pixmaps + + - Με ενδιαφέρει επίσης να μπορώ να βλέπω τα διάφορα log messages χωρίς να αλλάζω consoles συνεχώς, οπότε: + + + "I" Exec xterm -ls -geometry 100x10+513+1120 -T "Messages" -bg black -fg green -e tail -f /var/log/messages + + - Μια **ΜΕΓΑΛΗ** έλλειψη του FVWM2 όπως έρχεται το config του, είναι ένα είδος taskbar, η οποία να δείχνει ποια παράθυρα υπάρχουν, και να βοηθάει στην + μεταξύ τους εναλλαγή. Αυτό το πρόβλημα λύνεται με τη χρήση του module \"FvwmTaskBar\": + + + "I" Module FvwmTaskBar + + Για Restart (Οι παρακάτω δηλώσεις θα εκτελούνται όταν κάνουμε restart τον FVWM2). Τα βήματα 2, 4 και 5 επαναλαμβάνονται σε αυτήν τη δήλωση: + + AddToFunc RestartFunction + + "I" Exec xterm -geometry 83x10+0+1120 -bg black -fg green -T "XMessages" -e tail -f /root/.X.err + + "I" Exec xpmroot /root/pics/skull.xpm + + "I" Exec xterm -ls -geometry 100x10+513+1120 -T "Messages" -bg black -fg green -e tail -f /var/log/messages + + Εννοείται ότι οι original δηλώσεις για xmessages, xpmroot αφήνουν το μάταιο τούτο config file :-)\ + Η Exit function αφήνεται όπως έχει. + +5. Functions - Το ψωμί της υπόθεσης, ή αλλιώς, \"όλα τα λεφτά!\". Εδώ δηλώνουμε τις functions, κοινώς δηλαδή τι γίνεται όταν λαμβάνει χώρα κάποιο γεγονός + (μπερδευτήκατε;), π.χ. κάνουμε κλικ σε ενα button του FvwmButtons. Μια function, προκειμένου να δηλώσουμε την εμφάνιση ενός menu με επιλογές, έχει την εξής + μορφή: + + AddToMenu OnomaTisFunctionPopUp "Onoma Tis Function" Title + ...Εδώ μέσα δηλώσεις για το τι περιλαμβάνει η function... + # end popup OnomaTisFunction + + Εξηγήσεις:\ + Με την λέξη \"AddToMenu\" δηλώνουμε μια function η οποία θα κάνει PopUp μια λίστα με εντολές. Μετά δηλώνεται το όνομα της function. Στην περίπτωσή μας, αυτό + είναι \"OnomaTisFunctionPopUp\". Δηλαδή, όποτε θέλουμε να αναφερθούμε στη function αυτή, θα χρησιμοποιούμε το όνομα αυτό. Προσοχή, το όνομα της function δεν + μπορεί να έχει κενά ανάμεσα στα γράμματα, ούτε κάποιους ειδικούς χαρακτήρες.\ + ΣΗΜΕΙΩΣΗ: Στην πραγματικότητα, με τη δήλωση \"AddToMenu\" δεν δηλώνουμε μια function, αλλά ένα menu, που είναι κατά κάποιο τρόπο μια function, απλά το μόνο + που μπορεί να κάνει είναι να εμφανίζει μια λίστα. Για λόγους απλούστευσης όμως, θα θεωρούμε και τα menus ως functions. Κατόπιν, δηλώνεται το όνομα που + θέλουμε να εμφανίζεται στην ανώτερη θέση της λίστας, δηλαδή ένα όνομα που περιγράφει τι εντολές περιέχονται στη λίστα, και μετά την ειδική λέξη \"Title\". + Ένα παράδειγμα είναι π.χ. \"Shells\", ή \"My Programs\". Εδώ επιτρέπονται και κενά, και ειδικοί χαρακτήρες (Για περισσότερες πληροφορίες, κοιτάξτε το manual + page του fvwm2). Εάν κάποιος δεν θέλει να εμφανίζεται καθόλου τίτλος, απλά δεν γράφει έναν και ΔΕΝ βάζει την λέξη Title μετά το όνομα της Function.\ + \... Μετά οι δηλώσεις για τα περιεχόμενα της λίστας (εξηγούνται παρακάτω, υπομονή παρακαλώ :ο) )\...\ + Τέλος, **εάν** θέλει κανείς μπορεί για λόγους ευκολίας ανάγνωσης και μόνο να βάλει ένα comment-out και μετά να δηλώσει \"end popup onomatisfunction\". Αυτό + είτε το βάλει κανείς είτε δεν το βάλει, ένα και το αυτό. Απλά, για να είναι ξεκάθαρο που τελειώνει η δήλωση της function καλό θα ήταν να το δηλώνετε.\ + Και τώρα οι δηλώσεις για το τι θα περιλαμβάνει η PopUp λίστα που θα εμφανίζεται. Γενικά, μια δήλωση έχει ως εξής: + + + "Onoma entolis%onomaicon.xpm" Kanekati + + Όπου: + + - Onoma entolis είναι το όνομα της εντολής που θα εμφανίζεται σε μία PopUp λίστα, π.χ. StarOffice, ή BitchX. Προσοχή στο ότι αυτό το όνομα δεν είναι η + \"πραγματική\" εντολή που θα εκτελεστεί από τον WM. Είναι απλά ένα όνομα, ένα \"alias\". Κατόπιν, τοποθετούμε το σύμβολο \"%\" για να διαχωρίσουμε το + alias από το filename του icon που θέλουμε να χρησιμοποιήσουμε για το alias αυτό, και ταυτόχρονα να δηλώσουμε ότι το icon θέλουμε να εμφανιστεί δίπλα + στο alias (χρησιμοποιώντας το σύμβολο \"\$\" αντί του \"%\" δηλώνουμε ότι θέλουμε το icon να εμφανιστεί πάνω από το alias). Προσοχή στο ότι η συνένωση + αυτών των δύο δηλώσεων πρέπει να είναι μέσα σε εισαγωγικά (double quotes: \"). + + - Ακολουθεί η εντολή που θέλουμε να πραγματοποιηθεί. Αυτή μπορεί να είναι είτε μια κανονική εντολή που θα εκτελοέσαμε εμείς στο shell, είτε μια εντολή + προς τον WM να εμφανίσει μια άλλη PopUp λίστα. Για να εκτελέσει ο WM ένα πρόγραμμα, δηλώνουμε: + + + "Onoma entolis%onomaicon.xpm" Exec enaprogramma + + π.χ., για να εκτελέσουμε ένα bash shell, δηλώνουμε: + + + "Bash shell%bash.xpm" Exec bash + + Άλλο παράδειγμα, για το XISP: + + + "XISP%xisp.xpm" Exec xisp + + Αν θέλουμε, μπορεί αντί να εκτελεστεί μια εντολή, να εμφανιστεί μια άλλη PopUp λίστα. Για να το κάνουμε αυτό, δηλώνουμε: + + + "List of programs%programs.xpm" PopUp ProgramsPopUp + + όπου ProgramsPopUp μια function με το όνομα αυτό.\ + Γνωρίζοντας τα παραπάνω ας αρχίσουμε λοιπόν να γράφουμε/τροποποιούμε τις functions που θα χρειαστούμε, αφού σκεφτούμε πρώτα τι χρειαζόμαστε από ένα WM. + Χρειαζόμαστε λοιπόν: + + 1. Μια function για να χειριζόμαστε διάφορες παραμέτρους του WM (modules, exit/restart, start another WM), βοήθεια για τον WM και τα modules του, καθώς και + για reboot/halt του συστήματος. + 2. Μια function για ανεύρεση αρχείων. + 3. Μια function για βοήθεια + 4. Μια function για να ξεκινάμε ένα shell (Το γιατί πρέπει να είναι ξεχωριστή αυτή η function από τις άλλες είναι θέμα εργονομίας: Ένα shell συνήθως + εκτελείται αρκετές φορές παραπάνω από οποιοδήποτε άλλο πρόγραμμα.) + 5. Μια function για γενικό configuration του συστήματος + 6. Μια function για να τρέχουμε κάποια συχνά χρησιμοποιούμενα προγράμματα μας. + 7. Μια function για άμεση πρόσβαση σε δισκους, CD-ROM, Floppy, κ.τ.λ. + + Για την πρώτη function, θα χρησιμοποιήσουμε μια υπάρχουσα. Αυτή είναι η thiswmpopup: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################################### + # + # thiswmpopup + # + ############################################################################### + + AddToMenu thiswmpopup "Fvwm2" Title + + + "Other window managers%small.icon_warning_3d.xpm%" Popup otherwmpopup + + "Fvwm2 Modules%small.install_3d.xpm%" Popup modulepopup + + "Configuration%small.checklist2_3d.xpm%" Popup susewmpopup + + "Fvwm2 Man Pages%small.xman3d.xpm%" Popup wmmanpopup + + "" Nop + + "Restart Fvwm2%small.restart_suse_3d.xpm%" Restart fvwm2 + + "Exit Fvwm2 and X%small.exit.xpm%" Function QuitSave + + # end popup thiswmpopup + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + στην οποία θα προσθέσουμε τις εξής 2 γραμμές: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + "Reboot System" Exec Reboot + + "Halt System" Exec Halt + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + για να κάνουμε reboot & halt αντίστοιχα όλο το σύστημα. + + Δεύτερη function είναι η function που μας βοηθά στο να βρούμε κάποιο αρχείο γρήγορα, χωρις να θυμόμαστε πολύπλοκες συντάξεις εντολών, π.χ. της find: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################ + # + # findpopup + # + ############################################################ + + AddToMenu findpopup "Find" Title + + "Find a file*find.xpm*" Exec xterm -bg black -fg green -e findfile + + # end popup findpopup + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + To findfile είναι ένα shell script που έχει γραφεί με σκοπό τον προαναφερθέντα, και είναι το εξής: + + echo "Filename?" + read filename + echo "Search where?" + read pathname + find $pathname -name $filename + echo "Done, press enter to exit" + read anykey + exit + + Η τρίτη function είναι η function που θα μας εμφανίζει τα σχετικά με help, documentation, κ.τ.λ. Συγκεκριμένα, θα τρέχει το xman για να διαβάσουμε κάποια + man page, μας ανοίγει τον xfilemanager στο /usr/doc/howto/en/ ή στο /usr/doc/howto/el/ : + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################ + # + # helpmepopup + # + ############################################################ + + AddToMenu helpmepopup "Help" Title + + "Manual Pages%small.xman3d.xpm%" Exec xman + + "Greek HOWTO's%help1.xpm%" Exec xfilemanager -rootDir /usr/doc/howto/el -singleWindow + + "English HOWTO's%help1.xpm%" Exec xfilemanager -rootDir /usr/doc/howto/en -singleWindow + + # end popup findpopup + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Με την τέταρτη function θα εμφανίζεται ένα xterm, στοιχείο πολύ βασικό στο Πραγματικό Λειτουργικό :-) + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################ + # + # runmepopup + # + ############################################################ + + AddToMenu runpopup "Shells" Title + + "Old-school Xterm%small.greenterm.xpm%" Exec xterm -bg black -fg green + + # end popup findpopup + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Με την πέμπτη function θα εμφανίζεται μια λίστα με διάφορες επιλογές για configuration, π.χ. για kernel configuration, εκτέλεση του yast (Για S.u.S.E. + μόνο!), καθώς και για configuration των Χ: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################ + # + # mesettingspopup + # + ############################################################ + + AddToMenu mesettingspopup "Settings" Title + + "Yast%small.yast_suse_3d.xpm%" Exec xterm -bg balck -fg green -e yast + + "Kernel Configuration" Exec xterm -bg black -fg green -e mkmc + + "X configuration" Exec xterm -bg black -fg green -e Xconfig + + # end popup mesettingspopup + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Με την έκτη function θα εμφανίζεται μία λίστα με διάφορα προγράμματα που θα χρησιμοποιούνται συχνά - για αυτό και η ανάγκη για μια δικιά τους function. + Κόφτε και ράφτε κατά τα μέτρα σας :-) : + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################ + # + # meprogramspopup + # + ############################################################ + + AddToMenu meprogramspopup "Programs" Title + + "Netscape%netscape1.xpm%" Exec netscape + + "X11Amp%x11amp.xpm%" Exec x11amp + + "The Gimp%gimp.xpm%" Exec gimp + + "GRio%grio.xpm%" Exec grio + + "KEdit%kedit.xpm%" Exec kedit + + "Bitchx%bitchx.xpm%" Exec bitchx + + "Kmix%kmix.xpm%" Exec kmix + + "XIsp%xisp.xpm%" Exec xisp -nohints + + "Acrobat Reader%acrobat.xpm" Exec xpdf + + # end popup findpopup + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Τέλος, η function για πρόσβαση στα διάφορα drives: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################ + # + # medrivespopup + # + ############################################################ + + AddToMenu medrivespopup "Drive I/O" Title + + "Root filesystem%hdd.xpm" Exec xfilemanager -rootDir / -singleWindow + + "CD-ROM%cdrom.xpm" Exec xfilemanager -rootDir /cdrom -singleWindow + + "Floppy%floppy.xpm" Exec xfilemanager -rootDir /floppy -singleWindow + + # end popup medrivespopup + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Σημείωση: Αν χρησιμοποίησετε τις functions αυτές, θα παρατηρήσετε ότι πρέπει να κρατάτε πατημένο το πλήκτρο του πόντικα σας ή του πληκτρολογίου σας για να + παραμείνει η λίστα στην οθόνη. Για να το αποφύγετε αυτό, κάντε το εξής: Γράφτε μια function σαν την παρακάτω, για κάθε function που θέλετε να συμβαίνει + αυτό, και στη συνέχεια αντί να καλείτε την πρωτότυπη, καλέστε την καινούργια. Π.χ., για την medrivespopup, γράφουμε την εξής function: + + AddToFunc medrivespopupfunc + + "I" Popup medrivespopup + # end function medrivespopupfunc + +6. Η δήλωση \"Style\" - Με αυτήν μπορούμε να δηλώσουμε συγκεκριμένες ιδιότητες που θα έχει κάποιο ή όλα τα παράθυρα. Αυτή η δήλωση δεν γίνεται μόνο μια φορά + αλλά πολλές - τόσες ώστε να αποδώσουμε όλες τις επιθυμητές ιδιότητες στα παράθυρά μας. Μια δήλωση style έχει ως εξής: + + style "titleparathirou" idiotita1, idiotita2, idiotia3, κ.τ.λ. + + όπου titleparathirou ο τίτλος του παραθύρου στο οποίο θέλουμε να δώσουμε τις ιδιότητες idiotita1, idiotita2, idiotita3, κ.τ.λ. Αν αυτές τις ιδιότητες + θέλουμε να τις αποδώσουμε σε όλα τα παράθυρα, τότε δηλώνουμε: + + style "*" idiotita1, idiotita2, idiotia3, κ.τ.λ. + + Άν ακόμα έχουμε ένα παράθυρο του οποίου ο τίτλος δεν είναι απολύτως σταθερός, όπως π.χ. το xosview, του οποίου ο τίτλος εξαρτάται από το όνομα του + μηχανήματος (Hostname), τότε μπορούμε να δηλώσουμε: + + style "katistathero*" idiotita1, idiotita2, idiotia3, κ.τ.λ. + + όπου katistathero είναι το μέρος του τίτλου τού παραθύρου που μένει σταθερό. Ας αρχίσουμε λοιπόν τις style δηλώσεις που μας ενδιαφέρουν: + + - Το module FvwmTaskbar είναι μια Taskbar η οποία έχει κουμπιά με τα προγράμματα που τρέχουν. Επειδή είναι αρκετά χαζό να συμπεριλαμβάνεται ο εαυτός της, + θα της δώσουμε την ιδιότητα WindowListSkip, η οποία εξαιρεί την εμφάνιση του προγράμματος στο οποίο αποδίδουμε την ιδιότητα, στην Taskbar. Ακόμα, δεν + θέλουμε η Taskbar να έχει τίτλο και \"decorations\", για αυτό της δίνουμε την ιδιότητα NoTitle. Ακόμα, θέλουμε να είναι συνεχώς ορατό, οπότε του δίνουμε + την ιδιότητα StaysOnTop. Έτσι έχουμε: + + Style "FvwmWinList" NoTitle, WindowListSkip, StaysOnTop + + - Το εικονίδιο του xterm είναι **επειικώς** απαράδεκτο, οπότε: + + Style *xterm* Icon greenterm.xpm + + Με τη δήλωση αυτή, δηλώνουμε ότι θέλουμε όταν το xterm γίνεται iconified, το εικονίδιό του να είναι το greenterm.xpm + + - Εμένα μου αρέσουν αυτά τα χρώματα στα inactive παράθυρά μου: + + Style "*" BackColor Purple4 + Style "*" ForeColor Red + + BackColor to background χρώμα του παραθύρου, ForeColor το χρώμα των γραμμάτων του τίτλου του παραθύρου. Αν δεν σας αρέσουν, ξέρετε τι να κάνετε :-P + +7. FvwmButtons - Το FvwmButtons είναι ένα Module του FVWM, το οποίο είναι ουσιαστικά μια μπάρα με κουμπιά, και εμείς διαλέγουμε πόσα κουμπιά θα έχει, τι θα + κάνει το καθένα, κ.τ.λ. Αρχίζουμε με τα χρώματα, τών οποιων η δήλωση είναι αρκετά απλή: + + *FvwmButtonsFore Green + *FvwmButtonsBack Purple4 + + και ύστερα η θέση του στο desktop, η οποία είναι ελαφρώς μετατοπισμένη προς τα κάτω, γιατί επάνω από το FvwmButtons θα τοποθετηθεί η TaskBar: + + *FvwmButtonsGeometry +0+31 + + Άν θέλετε, μπορείτε όπως εγώ να βγάλετε τις δηλώσεις των xclock, xeyes, και asclock, γιατί καταλαμβάνουν πολύτιμο χώρο. Εξ άλλου, η Taskbar διαθέτει ρολόι + στο δεξί άκρο της. Έχουμε λοιπόν: + + #*FvwmButtons - - Swallow "FvwmXeyes" Exec xeyes -name "FvwmXeyes" -geometry +0+0 -bg grey67 & + #*FvwmButtons - - Swallow "FvwmXclock" Exec xclock -name "FvwmXclock" -geometry +0+0 -padding 1 -bg grey67 & + #*FvwmButtons - - Swallow "asclock" Exec asclock -position +0+0 -shape -led green & + + Για το αν το coolmail αξίζει το χώρο που πιάνει, εγώ προσωπικά νομίζω πως όχι, οπότε\... Αν βέβαια εσείς θέλετε να το έχετε, ε, τι να κάνουμε\... :-) Και + τώρα οι ζουμερές δηλώσεις ;-) + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *FvwmButtons "" shutdown.xpm Function barthiswmpopupfunc + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Με την παραπάνω δηλώνουμε ότι θέλουμε να προσθέσουμε ένα button στο FvwmButtons, το οποίο δεν έχει καθόλου κείμενο πάνω του (Τα εισαγωγικά είναι κενά. Ο + λόγος είναι ότι στη συγκεκριμένη περίπτωση, το εικονίδιο έχει πάνω του το περιγραφικό κείμενο, π.χ. \"I/O Access\", ή \"Help\".), ενώ όταν κάνουμε αριστερό + κλικ πάνω εκτελείται η function barthiswmpopupfunc, η οποία με τη σειρά της εμφανίζει και κρατάει σταθερό στην οθόνη το thiswmpopup menu.\ + Ομοίως λοιπόν για τις άλλες δηλώσεις: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *FvwmButtons "" cfind.xpm Function findpopupfunc + *FvwmButtons "" help.xpm Function helpmepopupfunc + *FvwmButtons "" run.xpm Function runpopupfunc + *FvwmButtons "" settings.xpm Function mesettingspopupfunc + *FvwmButtons "" programs.xpm Function meprogramspopupfunc + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Τα άλλα buttons (SuSE, Graphics, Tools, Shells) μας αποχαιρέτησαν (\#). + +8. FvwmTaskBar - Όπως αναφέρθηκε και προηγουμένως, η TaskBar είναι μια μπάρα, πάνω στην οποία υπάρχουν buttons τα οποία χρησιμοποιεί κανείς για να κάνει + iconify/maximise ένα πρόγραμμα. Εκτός αυτών, η Taskbar έχει και ένα button στο οποίο μπορούμε να αναθέσουμε κάποια function ή menu, παρόμοιο με το \"Start\" + button ακατανόμαστου αλειτούργητου συστήματος που άρχισε να κυκλοφορεί το 1995 ;-) Οι δηλώσεις που έχω εγώ για την TaskBar είναι: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ############################################################################### + # # + # Task Bar # + # # + ############################################################################### + *FvwmTaskBarGeometry +0+0 + *FvwmTaskBarFore Green + *FvwmTaskBarBack Purple4 + *FvwmTaskBarUseSkipList + *FvwmTaskBarShowTips + *FvwmTaskBarStartName Main() + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Επεξηγήσεις: Οι τρεις πρώτες δηλώσεις είναι αρκετά απλές. Η τέταρτη (\*FvwmTaskBarUseSkipList) δίνει εντολή στην TaskBar να \"δίνει σημασία\" στην ιδιότητα + WinListSkip ενός παραθύρου. Αν αυτή η δήλωση παραλειφθεί, παράθυρα στα οποία έχει δωθεί η ιδιότητα WinListSkip θα φαίνονται κανονικά και με το Νόμο στην + TaskBar. + +Φυσικά δεν είναι αναγκαστικό να κάνετε ότι έκανα και εγώ. Πειραματιστείτε, ψάξτε, και όλο και κάτι πιο καλό θα βρείτε. diff --git a/content/articles/23/01_editorial.md b/content/articles/23/01_editorial.md new file mode 100644 index 0000000..f7a1f23 --- /dev/null +++ b/content/articles/23/01_editorial.md @@ -0,0 +1,30 @@ ++++ +title = 'Editorial' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 23'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz**\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τεύχος προεκλογικό (ψηφίστε μας :-) αυτό, λόγω ημερομηνίας βέβαια και όχι λόγω ύλης. Για να πω την αλήθεια, εγω θα ψήφιζα ΔΑΓΚΩΤΟ αυτόν που θα μου έλεγε ότι θα +ακολουθούσε το παράδειγμα του Μεξικού, να γεμίσει τα σχολεία ΜΟΝΟ με Linux και να σταθεί σαν επίσημο κράτος πίσω από το Linux. Αλλά τέλος πάντων, αυτό δεν είναι +επί του παρόντος. + +Όπως είπαμε στο τεύχος 20, προσπαθούμε να επικεντρωθούμε σε τεχνικά θέματα, λίγο πιο advanced από το \"Πως βάζω ελληνικά στο Linux\" όχι επειδή το δεύτερο δεν +μας απασχολεί, αλλά επειδή έχει απαντηθεί και αναλυθεί τόσες πολλές φορές που πλέον καταντάει γελοίο. Βέβαια, το να αρχίσει το Magaz να έχει πιο advanced +θέματα, εξαρτάται αποκλειστικά και μόνο από τους αρθρογράφους του. Και αυτή τη φορά, οι αρθρογράφοι μας έκαναν τη χάρη να μας βοηθήσουν. + +Έχουμε λοιπόν, [μία παρουσίαση της xbasic](02_xbasic.html) από τον Κώστα Τσακάλογλου σε αυτό το τεύχος, μία πρώτη προσέγγιση στον [προγραμματισμό με +gawk](03_gawk1.html) από τον DJ-Art, μία ελαφριά και επιφανειακή προσέγγιση της [χρήσης του Perl DBI](04_perldbi.html) και τεχνικές οδηγίες για την [εγκατάσταση +του apache με SSL και jserv](05_apachejserv.html) από τον Κώστα Γεωργακόπουλο. + +Η [δημοσκόπηση αυτού του μήνα](http://magaz.hellug.gr/cgi-bin/poll23.cgi) καταπιάνεται με την αγαπημένη σας γλώσσα (αν προγραμματίζετε, ή αν θα προγραμματίζατε, +ποια θα προτιμούσατε να μάθετε). + +Καλή ανάγνωση\... diff --git a/content/articles/23/02_xbasic.md b/content/articles/23/02_xbasic.md new file mode 100644 index 0000000..7a18596 --- /dev/null +++ b/content/articles/23/02_xbasic.md @@ -0,0 +1,238 @@ ++++ +title = 'Xbasic' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)' +issue = ['Magaz 23'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κατά την τακτική επίσκεψη μου στους δικτυακούς χώρους πέρασα και από το site της [Sourceforge](http://Sourceforge.net). Στην προσπάθεια αναζήτησης εργαλείων +προγραμματισμού για το LINUX ζήτησα να δώ τι υπάρχει από Developement tools. Προσπαθώντας να δω τελικά με τι θα δουλέψω τώρα που έστησα και εγω επιτέλους το +Linuxάκι μου (SUSE 6.3) έπεσα επάνω σε ένα link που έγραφε Xbasic. Τι ωραία! Λές να υπάρχει κάτι ενδιαφέρον, αναρωτιέμαι.. Μια και γράφω σε Basic από την εποχή +του TRS-80 καλό θα ήταν να βρω κάτι που δεν θα μου αλλάξει και πολύ το στύλ μου. Ακολουθώντας τα διάφορα links πηγαίνω στην κατάλληλη σελίδα για να δω +τελοσπάντων τι πράγμα είναι αυτή η Xbasic. Επιλέγοντας να δω κάποια οθόνη από το πρόγραμμα βρέθηκα μπροστά στην παρακάτω εικόνα: + +![](/23/img/xbasic.gif) + +Αρκετά όμορφο περιβάλλον για να γράφει κανείς πρόγραμμα, για να δούμε όμως από ουσία τι λέει: + +Ετσι αποφάσισα να κατεβάσω το πρόγραμμα και να το εγκαταστήσω στο μηχάνημά μου. Σύμφωνα με τις οδηγίες εγκατάστασης, έπρεπε να κατεβάσω το αρχείο +*xblinux.tar.gz* στο μηχάνημά μου και μετά να πληκτρολογήσω τις παρακάτω εντολές: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + cd / + tar xfz xblinux.tar.gz + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αφού λοιπόν το κατέβασμα έγινε μια χαρά και το tar έκανε την δουλειά του, ξεκινάω τα X (KDE). Ανοίγω το Bash Terminal και γράφω: + + cd /usr/xb + xb + +Ωραία ξεκίνησε μια χαρά και ήρθε η ώρα να γράψω τις πρώτες μου εντολές. Μόλις δίνω την εντολή για το ξεκίνημα συγγραφής νέου προγράμματος να και άλλη μια +έκπληξη. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ' + ' + ' ###################### + ' ##### Entry () ##### + ' ###################### + ' + ' Programs contain: + ' 1. A PROLOG with type/function/constant declarations. + ' 2. This Entry() function where execution begins. + ' 3. Zero or more additional functions. + ' + FUNCTION Entry () + + END FUNCTION + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτό δεν θυμίζει λίγο στο ξεκίνημα για την C; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + main() + { + + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Προσπαθώντας έτσι να ρίξω μια ματιά στην γλώσσα για να δω περίπου τι κάνει, πέφτω επάνω στους τύπους των μεταβλητών. Αρχίζω και βλέπω τύπους που δεν υπάρχουν +στην MS-BASIC ούτε καν στην VISUAL BASIC. Είδα διάφορα ωραία πράγματα και τα παραθέτω. Πρώτα από όλα να ξεκινήσω με τον κατάλογο των επιθεμάτων. + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ SBYTE 8-bit signed integer + `@` + + `@@` UBYTE 8 bit unsigned integer + + \% SSHORT 16 bit signed integer + + %% USHORT 16 bit unsigned integer + + & SLONG 32 bit signed long integer + + && ULONG 32 bit unsigned long integer + + \~ XLONG 32/64 bit signed machine integer + + \$\$ GIANT 64 bit signed giant (financial) integer + + ! SINGLE IEEE single precision floating point + + \# DOUBLE IEEE double precision floating point + + \$ STRING STRING of unsigned bytes + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +Από τον παραπάνω πίνακα, οι τύποι SBYTE ,UBYTE,USHORT,ULONG,XLONG και GIANT δεν υπάρχουν στην MS-BASIC και VISUAL BASIC. Οι Unsigned τύποι καθαρά είναι τύποι +που υποστηρίζει η C. Για τον τύπο XLONG νομίζω ότι είναι μια χαρά για εφαρμογές προγραμματισμού συστήματος (systems programming). + +Οι μεταβλητες όμως στην XBASIC μπορούν να έχουν και προθέματα που δείχνουν την χρήση των μεταβλητών στις διάφορες ρουτίνες και προγράμματα. Τα προθέματα που +μπορούν να χρησιμοποιηθούν στην XBASIC είναι: + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ SHARED Η μεταβλητή είναι διαθέσιμη σε όλες τις ρουτίνες + \# + + \#\# EXTERNAL Η μεταβλητή είναι διαθέσιμη και σε άλλα προγράμματα + + \$ LOCAL CONSTANT Η μεταβλητή έχει σταθερή τιμή για την τρέχουσα + ρουτίνα + + \$\$ SHARED CONSTANT Η μεταβλητή έχει σταθερή τιμή και είναι διαθέσιμη σε + όλες τις ρουτίνες + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +Θέλει προσοχή όταν ορίζουμε και χρησιμοποιούμε μεταβλητές στην XBASIC. Όπως και στο Linuxάκι μας τα κεφαλαία / πεζά είναι σημαντικά για την ονοματολογία των +αρχείων, έτσι και στην XBasic τα κεφαλαία / πεζά δίνουν διαφορετικά ονόματα μεταβλητών άρα και διαφορετικές τιμές. Για αυτή την γλώσσα τα ονόματα COUNT, Count +και count είναι διαφορετικές μεταβλητές. + +Σύμφωνα με προηγούμενα καταλαβαίνουμε ότι οι εντολές πρέπει να γράφονται αποκλειστικά με κεφαλαία γράμματα γιατί διαφορετικά η γλώσσα τις βλέπει σαν μεταβλητές. +Έτσι το: + + FOR I%=1 to 100 + +είναι σωστό, ενώ το: + + For I%=1 to 100 + +είναι λάθος γιατί η γλώσσα καταλαβαίνει ότι υπάρχει μια μεταβλητή For όπου δεν την κάνουμε τίποτα. + +Παρακάτω συνέχισα την ανάγνωση και έπεσα στους τελεστές συγκρίσεων. Εκεί πάλι είδα στοιχεία από την C να ξεφυτρώνουν όπως οι τελεστές: + + = ,<>,< ,<=,>=,> + +μπορούν να εκφραστούν και αντίστοιχα με + + ==,!=,!>=,!>,!<,!<= + +Επίσης αν ρίξουμε μια ματιά στον παρακάτω πίνακα θα δούμε τελεστές διευθύνσεων μνήμης (pointers) που τόσο αρέσουν στους προγραμματιστές της C και διάφορα άλλα +καλούδια όπως μετακινίσεις bit κλπ. + + ------------------- ------------------- ------------------- ------------------- ------------------- ------------------- ------------------- ------------------- + \ ALT ΚIND CLASS OPERANDS RETURNS PREC COMMENTS + OP + + & unary 10 AnyType Address 12 Address of Object + Data + + && unary 10 AnyType Address 12 Address of Object + Handle + + ! unary 9 Numeric T/F 12 Logical Not (TRUE + if 0, else FALSE) + + !! unary 9 Numeric T/F 12 Logical Test (FALSE + if 0, else TRUE) + + NOT \~ unary 9 Integer SameType 12 Bitwise NOT + + \+ unary 8 Numeric SameType 12 Plus + + \- unary 8 Numeric SameType 12 Minus + + \>\>\> binary 7 Integer LeftType 11 Arithmetic Up Shift + + \<\<\< binary 7 Integer LeftType 11 Arithmetic Down + Shift + + \<\< binary 7 Integer LeftType 11 Bitwise Left Shift + + \>\> binary 7 Integer LeftType 11 Bitwise Right Shift + + \*\* binary 4 Numeric HighType 10 Power + + / binary 4 Numeric HighType 9 Divide + + \* binary 4 Numeric HighType 9 Multiply + + \\ binary 6 Numeric Integer 9 Integer Divide + + MOD binary 6 Numeric Integer 9 Modul. (Int.Remain) + + \+ binary 5 Numeric HighType 8 Add + + \+ binary 5 String String 8 Concatenate + + \- binary 4 Numeric HighType 8 Subtract + + AND & binary 3 Integer HighType 7 Bitwise AND + + XOR \^ binary 3 Integer HighType 6 Bitwise XOR + + OR \| binary 3 Integer HighType 6 Bitwise OR + + \> !\<= binary 2 NumStr T/F 5 Greater-Than + + \>= !\< binary 2 NumStr T/F 5 Greater-Or-Equal + + \<= !\> binary 2 NumStr T/F 5 Less-Or-Equal + + \< !\>= binary 2 NumStr T/F 5 Less-Than + + \<\> != binary 2 NumStr T/F 4 Not-Equal + + = == binary 2 NumStr T/F 4 Equal(also + \"!\<\>\") + + && binary 1 Integer T/F 3 Logical AND + + \^\^ binary 1 Integer T/F 2 Logical XOR + + \|\| binary 1 Integer T/F 2 Logical OR + + = binary NumStr RightType 1 Assignment + + T/F T/F always returned + as XLONG + + + ------------------- ------------------- ------------------- ------------------- ------------------- ------------------- ------------------- ------------------- + +Κάτι Address και bitwise shift έχουν κάποιο ενδιαφέρον για κάποιους που θέλουν να χρησιμοποιήσουν αυτές τις εντολές αλλά η μέχρι τώρα γνωστές Basic δεν τους +έδιναν αυτή την δυνατότητα. + +Από μια πρώτη ματιά νομίζω ότι κάποιος που ξέρει BASIC και έχει αποφασίσει να αρχίσει να γράφει προγράμματα για το LINUX καλό είναι να ρίξει μια ματιά σε αυτή +την γλώσσα που εκ πρώτης όψεως υπόσχεται πολλά. Εκτός από τις εντολές που δίνουν την δύναμη της C στον προγραμματιστή υπάρχει και παράθυρο εργαλείων για την +κατασκευή μιας φόρμας. Κουμπιά και όλα τα Widgets των X μάλλον υποστηρίζονται. Λέω μάλλον γιατί δεν έχω προλάβει να αρχίσω να κάνω κάτι με αυτή την γλώσσα. Απλά +όταν την είδα με μια πρώτη ματιά μου άρεσε τόσο που αποφάσισα να μοιραστώ τις εντυπώσεις που με άλλους προγραμματιστές γράφοντας αυτό το κείμενο και +παρουσιάζοντάς το στο Magaz. Τον άλλο μήνα που θα έχω κάνει κάτι θα γράψω και νεότερα. Εχω σκοπό να κρατάω σημειώσεις για κάθε τι που κάνω και να παρουσιάζω +κάθε τόσο από τη στήλη του Magaz κάθε τι καινούργιο όπως θα το μαθαίνω. Αυτά τα λίγα για τώρα και τα ξαναλέμε στο επόμενο Magaz. diff --git a/content/articles/23/03_gawk1.md b/content/articles/23/03_gawk1.md new file mode 100644 index 0000000..a57726c --- /dev/null +++ b/content/articles/23/03_gawk1.md @@ -0,0 +1,590 @@ ++++ +title = 'Προγραμματισμός με gawk μέρος 1ο' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 23'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό έχει σκοπό να σας βοηθήσει στην εκμάθηση της γλώσσας προγραμματισμού awk. Μία \"εξειδικευμένη\" γλώσσα προγραμματισμού, ένα ιδιαίτερα δυνατό +εργαλείο στη διαχείρηση αρχείων κειμένου (text files), καθώς και δημιουργίας αναφορών, με το πλεονέκτημα ότι είναι και εύκολη στην εμάθηση και στην σύνταξη, +αλλά και ότι \"συγγενεύει\" με την C. Το πλήρες άρθρο αποτελείται από δύο μέρη, εδώ σας παρουσιάζεται το πρώτο, ενώ ετοιμάζεται και το 2ο :-)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +--------------------------------------- + +- [1.1 Ιστορικά](#ss1.1) +- [1.2 Εφαρμογές](#ss1.2) +- [1.3 Δυνατότητες](#ss1.3) + +**2. Τα πρώτα βήματα** +---------------------------------------------- + +- [2.1 Οι βασικές αρχές](#ss2.1) +- [2.2 Σύνταξη](#ss2.2) +- [2.3 Απλά Παραδείγματα](#ss2.3) +- [2.4 Awk Scripts](#ss2.4) + +**3. Πρότυπα (και Πράξεις)** +---------------------------------------------------- + +- [3.1 Ειδικά πρότυπα](#ss3.1) +- [3.2 Πρότυπα κανονικών παραστάσεων](#ss3.2) +- [3.3 Πρότυπα σχεσιακών εκφράσεων](#ss3.3) +- [3.4 Λογικοί Τελεστές](#ss3.4) +- [3.5 Διάστημα προτύπων](#ss3.5) + +**4. Πράξεις** +-------------------------------------- + +- [4.1 Εισαγωγή](#ss4.1) +- [4.2 Μεταβλητές](#ss4.2) +- [4.3 Αλφαριθμητικά](#ss4.3) +- [4.4 Πίνακες](#ss4.4) + + +### [1. Εισαγωγή]{#s1} + +### [1.1 Ιστορικά]{#ss1.1} + +Η gawk, ή καλύτερα η GNU awk, είναι μιά από τις πιο καινούριες εκδόσεις της γλώσσας προγραμματισμού awk, η οποία είχε δημιουργηθεί για το περιβάλλον UNIX από +τους Alfred Aho, Peter Weinberger και Brian Kernighan το 1977. Το όνομα awk προέρχεται από τα αρχικά γράμματα των επωνύμων των παραπάνω δημιουργών. Η σχεδίαση +της awk φαίνεται στη διατριβή τους: \"AWK - a pattern scanning and processing language\" Software-Practice and Experience, Ιούλιος 1978. Η awk έχει την καταγωγή +της σε ιδέες από την SNOBOL4, από την εντολή sed, από τα εργαλεία yacc και lex και από τη C. Επίσης, ο Kernighan είναι ένας από αυτούς που βοήθησε στη +δημιουργία της C και του UNIX, ενώ οι άλλοι δύο βοήθησαν στη δημιουργία του UNIX. Για ακριβώς αυτούς τους λόγους, θα δείτε πολλές ομοιότητες μεταξύ της C και +της awk. Υπάρχουν πολλές εκδόσεις της awk: η αυθεντική awk, η nawk, η POSIX awk και, φυσικά, η gawk, η οποία είναι βασισμένη στην POSIX awk. + +### [1.2 Εφαρμογές]{#ss1.2} + +H awk, σε όλες τις εκδόσεις, είναι μια γλώσσα επεξεργασίας και σύγκρισης προτύπων (patterns) με μεγάλη δύναμη σε αυτόν τον τομέα. Μπορεί να ψάξει ένα ή +περισσότερα αρχεία για εγγραφές (records) που ταιριάζουν μέ ένα δοσμένο πρότυπο. Όταν ταιριάξουν, μία καθορισμένη πράξη (action) εκτελείται. Σαν +προγραμματιστής, δεν χρειάζεται να ανησυχείτε για το άνοιγμα, την επαναλαμβανόμενη ανάγνωση των εγγραφών ή το κλείσιμο ενός αρχείου. Αυτές οι λεπτομέρειες +γίνονται αυτόματα για εσάς. Το να γράφετε μικρά awk προγράμματα είναι εύκολο λόγω της λειτουργικότητας της γλώσσας, πολλές διαδικασίες είναι αυτοματοποιημένες. + +Θα βρείτε πολλές εφαρμογές για τη awk, όπως το να \"διαβάζετε\" δεδομένα από ένα αρχείο, να μετράτε συγκεκριμένες \"υπάρξεις\" μέσα σ\' αυτό, αλλά και να +δημιουργείτε εξειδικευμένες αναφορές (reports). Η γενική σύνταξη της awk μοιάζει πάρα πολύ/έχει πολλά κοινά σημεία με τη C. Εάν ήδη ξέρετε C, τότε γνωρίζετε +αρκετά πράγματα από τη awk. Από πολλές απόψεις, η gawk είναι μία ευκολότερη \"έκδοση\" της C. Αν δεν γνωρίζετε C, τότε θα την μάθετε ευκολότερα αν ήδη γνωρίζετε +awk. + +ΣΗΜΕΙΩΣΗ: H awk δουλεύει με text αρχεία, όχι εκτελέσιμα. Επειδή τα εκτελέσιμα αρχεία περιέχουν χαρακτήρες που μοιάζουν με το τέλος εγγραφών (δηλαδή σύμβολα +αλλαγής σειράς), η awk μπερδεύεται. Αν θέλετε να επεξεργαστείτε εκτελέσιμα αρχεία, τότε χρειάζεστε την Perl ή, φυσικά, μία από τις \"πατροπαράδοτες\" γλώσσες +προγραμματισμού, όπως η C. + +### [1.3 Δυνατότητες]{#ss1.3} + +Η awk είναι ευλύγιστη, όπως το UNIX περιβάλλον, περιλαμβάνει προκαθορισμένες μεταβλητές, αυτοματοποιεί πολλές από τις \"διαδικασίες\" του κλασσικού +προγραμματισμού, παρέχει τη δυνατότητα των συμβατικών μεταβλητών, υποστηρίζει το μορφοποιημένο output της C και είναι εύκολη στη χρήση. Σας επιτρέπει να +συνδυάσετε τα πλεονεκτήματα των shell scripts με πολλά στοιχεία της C. Να σημειώσω πως δεν χρειάζετε να ορίζετε τον τύπο μιάς μεταβλητής (σε αντίθεση με τη C), +αφού η awk καταλαβαίνει τον τύπο τους όταν τις χρησιμοποιεί. Φυσικά, υποστηρίζει τους βρόγχους της C (if/else, do/while, for), αλλά δεν υποστηρίζει το +switch/case. Παρόλα αυτά, υποστηρίζει το printf() της C, αλλά και την εντολή print, μιά απλούστερη (από την printf) εντολή. + + +### [2. Τα πρώτα βήματα]{#s2} + +### [2.1 Οι βασικές αρχές]{#ss2.1} + +Για να χρησιμοποιήσετε την gawk, θα πρέπει να γράψετε ένα πρόγραμμα. Το πρόγραμμα αυτό θα το ονομάζουμε awk script. Το λέω αυτό, γιατί σε απλές εφαρμογές θα +παρατηρήσετε πως θα μπορούσατε αντί για την gawk να χρησιμοποιήσετε το grep. Στο grep, όμως, δεν γράφετε πρόγραμμα (script), αλλά του δίνετε παραμέτρους. +Φυσικά, το awk script δεν έχει περιορισμούς στο μέγεθος. Μπορείτε να το κάνετε όσο μεγάλο θέλετε. To πρόγραμμα που φτιάχνετε μπορεί να \"διαβαστεί\" από την +gawk με πολλούς τρόπους, από τους οποίους οι πιό συνηθισμένοι είναι η από την γραμμή εντολών ή από ένα αρχείο. Η gawk μπορεί επίσης να δεχθεί input με pipe +(διασωλήνωση) από άλλο πρόγραμμα ή ακόμα και από το ίδιο το πληκτρολόγιο (επί τόπου). Το output με τη σειρά του, μπορεί εκτός από το standard, να ανακατεθυνθεί +σε ένα αρχείο ή να διασωληνωθεί σε ένα άλλο πρόγραμμα. + +### [2.2 Σύνταξη]{#ss2.2} + + gawk -Fx 'πρόγραμμα' [αρχείο/α] + gawk -Fx -f αρχείο_εντολών [αρχείο/α] + +Το **πρόγραμμα** είναι μία σειρά από εντολές της awk, ενώ **αρχείο\_εντολών** είναι ένα αρχείο που περιέχει εντολές της awk. To **αρχείο/α** (στο τέλος της +σύνταξης) είναι το όνομα του αρχείου στο οποίο θα γίνει η επεξεργασία που θέλουμε. Αν παραλείψουμε εκεί το αρχείο, τότε η gawk δέχεται input από την καθιερωμένη +μονάδα εισόδου (πληκτρολόγιο). + +Κάθε εντολή της awk έχει την μορφή: **πρότυπο {πράξη}**\ +Η awk \"σαρώνει\" γραμμή προς γραμμή το αρχείο και κάθε γραμμή συγκρίνεται με το πρότυπο. Αν ταιριάζει, τότε εκτελείται η αντίστοιχη πράξη. Αν από την παραπάνω +μορφή απουσιάζει το πρότυπο, τότε η πράξη εκτελείται για κάθε γραμμή, ενώ αν απουσιάζει η πράξη, τότε όλες οι γραμμές που ταιριάζουν με το πρότυπο εμφανίζονται +στην οθόνη. Την χρησιμότητα της επιλογής **-Fx** θα την δούμε παρακάτω. + +### [2.3 Απλά Παραδείγματα]{#ss2.3} + +Ο απλούστερος τρόπος να χρησιμοποιήσετε την awk είναι να γράψετε το πρόγραμμα στην γραμμή εντολών. Ας δούμε ένα απλό παράδειγμα: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ cat arxeio.txt | gawk '{print NF ": " $0}' + 2: Γεια σας + 8: Σήμερα θα μάθουμε να προγραμματίζουμε με την gawk + 4: Σας εύχομαι καλή επιτυχία! + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για να δούμε τώρα τί κάνει το πρόγραμμα. Το αποτέλεσμα της εντολής cat arxeio.txt περνά σαν είσοδος στην gawk. Πρότυπο δεν έχουμε, επομένως η πράξη (μέσα στις +αγκύλες) εφαρμόζεται για κάθε γραμμή (του arxeio.txt). Από εκεί και πέρα η gawk εμφανίζει στην οθόνη των αριθμό των λέξεων, την άνω και κάτω τελεία, το κενό και +μετά τα περιεχόμενα (ανά γραμμή) του arxeio.txt. To NF είναι μια προκαθορισμένη μεταβλητή της gawk, η οποία παριστάνει των αριθμό των πεδίων σε κάθε εγγραφή. +Από default το κάθε πεδίο ξεχωρίζει από το άλλο με κενό (space) ή με tab, ενώ κάθε εγγραφή ξεχωρίζει με τον χαρακτήρα αλλαγής γραμμής. Επομένως, ας πώ τί κάνει +η NF με πιο απλά λόγια: παριστάνει τον αριθμό λέξεων σε κάθε γραμμή. Όντως, στην πρώτη γραμμή η λέξεις ήταν 2 κλπ. Το σύμβολο \$0 παριστάνει ολόκληρη την +εγγραφή, ενώ υπάρχουν τα σύμβολα \$1, \$2 κ.ο.κ. για τα πεδία. Για παράδειγμα, στην πρώτη γραμμή, το \$1 παριστάνει το πεδίο \"Γεια\", ενώ το \$2 το \"σας\". +Στην δεύτερη γραμμή το \$5 είναι το \"προγραμματίζουμε\". + +Θα μπορούσατε να χρησιμοποιήσετε την ανακατεύθυνση του UNIX, ή απλά το όνομα του αρχείου για να καταλήξετε στο ίδιο αποτέλεσμα με την παραπάνω εντολή. Δείτε +άλλες δύο ισοδύναμες (με την παραπάνω) εντολές: + + $ gawk '{print NF ": " $0}' < arxeio.txt + $ gawk '{print NF ": " $0}' arxeio.txt + +### [2.4 Awk Scripts]{#ss2.4} + +Ας δούμε πάλι το παραπάνω παράδειγμα, την εντολή **gawk \'{print NF \": \" \$0}\' arxeio.txt**. Θα μπορούσατε να απόφυγετε την πληκτρολόγηση της εντολής στην +γραμμή εντολών, αλλά να την συμπεριλάβετε σε ένα awk script. Προσέξτε πως στο awk script δεν πρέπει να γράψετε τα απλά εισαγωγικά, αφού αυτά χρησιμεύουν για να +μην ασχοληθεί ο φλοιός (shell) με το περιεχόμενό τους. Αν τα χρησιμοποιήσετε η gawk θα σας βγάλει ένα μήνυμα λάθους και, φυσικά, δεν θα έχετε το επιθυμητό +αποτέλεσμα. Οπότε, θα δημιουργήσετε ένα αρχείο **script.awk** που θα περιέχει τα εξής: + + {print NF ": " $0} + +Στη συνέχεια, θα τρέξετε το πρόγραμμα με την εξής εντολή: + + gawk -f script.awk arxeio.txt + +Να αναφέρω επίσης, πως η gawk και άλλες εκδόσεις της awk, οι οποίες συμβαδίζουν με το POSIX πρότυπο (standard) σας επιτρέπουν να χρησιμοποιήσετε περισσότερα του +ενός scripts μετά την επιλογή -f (π.χ. gawk -f script1 script2 script3 arxeio.txt). Θα σας συμβούλευα να προτιμήσετε να καλέσετε ένα μόνο script (και όχι πιο +πολλά) για να αποφύγετε διάφορα λάθη ή ενέργειες που μπορεί να σας μπερδέψουν. + + +### [3. Πρότυπα (και Πράξεις)]{#s3} + +Στην gawk μπορείτε να χρησιμοποιήσετε πρότυπα 3 ειδών: + +1. Ειδικά πρότυπα (special patterns) +2. Κανονικές παραστάσεις (regular expression patterns) +3. Σχεσιακές εκφράσεις (comparison patterns) + +### [3.1 Ειδικά πρότυπα]{#ss3.1} + +Η awk περιλαμβάνει δύο ειδικά πρότυπα: το **BEGIN** και το **END**. Η πράξη που ακολουθεί το πρότυπο **BEGIN** εκτελείται πρίν διαβαστεί οποιαδήποτε γραμμή του +αρχείου. Για αυτόν τον λόγο, το **BEGIN** χρησιμοποιείται συνήθως για εκτύπωση επικεφαλίδων ή για αρχική καταχώρηση σε μία μεταβλητή. Η πράξη που ακολουθεί το +**END** εκτελείται όταν έχουν επεξεργαστεί όλες οι γραμμές από το αρχείο. + +Τα πρότυπα **BEGIN** και **END** είναι εντελώς προαιρετικά. Τα χρησιμοποιείτε αν θέλετε. Όμως, αν τα χρησιμοποιήσετε τότε μπορείτε να τα έχετε μόνο μιά φορά +μέσα στο πρόγραμμά σας. Μην χρησιμοποιήσετε δύο **BEGIN** ή δύο **END**. Παράδειγμα για τα **BEGIN** και **END** θα δούμε παρακάτω, όταν μιλήσουμε για +μεταβλητές. + +### [3.2 Πρότυπα κανονικών παραστάσεων]{#ss3.2} + +Κανονική παράσταση είναι μία σειρά χαρακτήρων που περικλείονται ανάμεσα σε ζευγάρι από / (slash). Για παράδειγμα, αν εκτελέσετε την: + + gawk '/linux/' my_doc.txt + +τότε θα εμφανιστούν στην οθόνη όλες οι γραμμές του αρχείου my\_doc.txt που περιέχουν τη λέξη linux. + +Οι κανονικές παραστάσεις της gawk αποτελούνται από χαρακτήρες (όπως τα γράμματα της αλφαβήτου) και από μεταχαρακτήρες (metacharacters). Οι μεταχαρακτήρες είναι +και αυτοί χαρακτήρες που έχουν ειδικό νόημα: δεν χρησιμοποιούνται για \"ταίριασμα\" με πεδίο ή εγγραφή ενός αρχείου, αλλά εκτελούν μιά συγκεκριμένη λειτουργία. +Ας δούμε, λοιπόν, έναν πίνακα με τους μεταχαρακτήρες και την συμπεριφορά τους: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Συμπεριφορά** + **Μεταχαρακτήρας** + + \\ Ακυρώνει την έννοια του ειδικού χαρακτήρα που ακολουθεί την backslash,\ + οπότε ο ειδικός χαρακτήρας αντιμετωπίζεται σαν απλός + + \^ Σύγκριση (matching) στην αρχή της γραμμής + + \$ Σύγκριση στο τέλος της γραμμής + + /\^\$/ Σύγκριση για κενή γραμμή + + . Συγκρίνει οποιονδήποτε απλό χαρακτήρα + + \[ΑΒΓ\] Συγκρίνει για οποιονδήποτε από τους Α, Β ή Γ + + \[Α-Γα-γ\] Συγκρίνει για οποιονδήποτε από τους Α, Β, Γ, α, β, ή γ + + \[\^ΑΒΓ\] Συγκρίνει για οποιονδήποτε άλλο χαρακτήρα εκτός των Α, Β ή Γ + + Linux\|System Συγκρίνει για την λέξη Linux ή για την System (λογικό OR) + + \[ΑΒΓ\]\[ΔΕΖ\] Συγκρίνει για τους Α, Β ή Γ, οι οποίοι όμως,θα πρέπει να ακολουθούνται\ + από οποιονδήποτε των Δ, Ε ή Ζ + + \[XYZ\]\* Συγκρίνει για καμμία ή περισσότερες εμφανίσεις της παράστασης\[XYZ\] + + \[XYZ\]+ Συγκρίνει για μία ή περισσότερες εμφανίσεις της παράστασης\[XYZ\] + + \[XYZ\]? Συγκρίνει για καμμία ή μία εμφάνιση της παράστασης\[XYZ\] + + () Συνδυάζει κανονικές παραστάσεις. Π.χ. το (ανα\|δια)λύω συγκρίνει για να\ + βρεί είτε τη λέξη αναλύω είτε τη λέξη διαλύω + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +#### Παραδείγματα + +Ας δούμε την παρακάτω κανονική παράσταση: + + /[Mm]agaz|interesting$/ + +Αυτή η παράσταση αναζητά τις γραμμές στις οποίες βρίσκονται οι λέξεις Magaz ή magaz (σε οποιοδήποτε σημείο της γραμμής) ή interesting (στο τέλος της γραμμής). + +Ας δούμε άλλη μία παράσταση: + + /[Mm][Aa][Gg][Aa][Zz]/ + +Αυτή η παράσταση αναζητά τις γραμμές στις οποίες βρίσκεται η λέξη magaz ΜΕ ΟΠΟΙΟΝΔΗΠΟΤΕ τρόπο γραμμένη, δηλαδή μπορεί να \"ξεθάψει\" την λέξη ακόμα και αν αυτή +είναι γραμμένη με έναν από τους συνολικά 32 τρόπους!! (δηλ. Magaz, MAgaz, MAGaz, MAGAz, MAGAZ, mAgaz κ.ο.κ.) + +### [3.3 Πρότυπα σχεσιακών εκφράσεων]{#ss3.3} + +Με τις σχεσιακές εκφράσεις γίνεται σύγκριση αριθμών ή αλφαριθμητικών (strings). H σύγκριση γίνεται με τους σχεσιακούς τελεστές, οι οποίοι είναι παρόμοιοι με +αυτούς της C και των φλοιών (shells) του UNIX. Μέχρι τώρα είδαμε πως οι κανονικές παραστάσεις \"σαρώνουν\" όλη τη γραμμή για να βρούν αυτό που ζητάμε. Μπορούμε, +όμως, να συνδυάσουμε τις κανονικές παραστάσεις με τις σχεσιακές εκφράσεις για να \"ψάξουμε\" σε συγκεκριμένα πεδία. Ας δούμε πρώτα όμως, έναν πίνακα με τους +σχεσιακούς τελεστές: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Ερμηνεία** + **Τελεστής** + + == Ίσο με + + \< Μικρότερο + + \> Μεγαλύτερο + + \<= Μικρότερο ή ίσο + + \>= Μεγαλύτερο ή ίσο + + != Διάφορο του + + \~ Ίσο με την ακόλουθη κανονική παράσταση + + !\~ Διάφορο της ακόλουθης κανονικής παράστασης + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +#### Παραδείγματα + +Ας δούμε ένα \"τυπικό\" παράδειγμα εφαρμογής των παραπάνω τελεστών: + + $1 == "Linux" { print "Linux Rocks!!" } + +Η παραπάνω εντολή ελέγχει αν το πρώτο πεδίο είναι η λέξη Linux και αν είναι εκτελεί την πράξη, δηλαδή στην περίπτωσή μας εμφανίζει στην οθόνη το μήνυμα Linux +Rocks!! Προσέξτε ότι εδώ τα πράγματα είναι όπως ακριβώς φαίνονται, δηλαδή αν το πρώτο πεδίο είναι η λέξη linux (το l όχι κεφαλαίο όπως το δηλώσαμε), τότε δεν θα +εκτελεστεί η πράξη. Επομένως, ας δούμε τη χρησιμότητα του συνδυασμού της κανονικής παράστασης με τις σχεσιακές εκφράσεις: + +\$6 !\~ /\[Mm\]\[Aa\]\[Gg\]\[Aa\]\[Zz\]/ { print \"we have no magaz\" } + +Η παραπάνω εντολή ελέγχει αν το 6ο πεδίο περιέχει τη λέξη magaz (όπως και αν είναι γραμμένη) και όταν δεν τη βρεί τυπώνει αυτό που περιέχεται στα εισαγωγικά της +print. + +### [3.4 Λογικοί Τελεστές]{#ss3.4} + +Οι λογικοί τελεστές που χρησιμοποιούνται στην awk είναι παρόμοιοι με αυτούς της C. Χρησιμοποιούμε τους τελεστές αυτούς για να συνδυάσουμε πρότυπα (σχεσιακές +εκφράσεις ή κανονικές παραστάσεις) ώστε να \"συνθέσουμε\" μιά πολύπλοκη μορφή λογικής. Ας δούμε έναν πίνακα με τους λογικούς τελεστές: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Ερμηνεία** + **Τελεστής** + + && Λογικό ΚΑΙ (AND) + + \|\| Λογικό Η (OR) + + ! Λογικό ΟΧΙ (NOT) + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Ας δούμε ένα παράδειγμα: + + $3 == "Linux" && $18 == "Magaz" {print "Μήνυμα εξόδου") + +Εδώ, το πρότυπό μας, στην περίπτωση που το 3ο πεδίο είναι η λέξη Linux ΚΑΙ το 18ο πεδίο η λέξη Magaz, τυπώνει στην οθόνη το μήνυμα. + +### [3.5 Διάστημα προτύπων]{#ss3.5} + +Μπορείτε στη θέση ενός προτύπου να χρησιμοποιήσετε ένα διάστημα προτύπων. Το διάστημα προτύπων είναι δύο πρότυπα, τα οποία χωρίζονται με κόμμα (,) και +χρησιμεύουν στο εξής: Η πράξη που τα ακολουθεί, εφαρμόζεται σε όλες εκείνες τις γραμμές που βρίσκονται ανάμεσα στη γραμμή που εμφανίζεται το πρώτο πρότυπο και +στη γραμμή που εμφανίζεται το δεύτερο πρότυπο. Παράδειγμα: + + /Linux/,/Magaz/ + +Η gawk θα αναζητήσει εκείνες τις γραμμές, από εκείνη που εμφανίζεται η λέξη Linux μέχρι εκείνη που εμφανίζεται η λέξη Magaz. + + +### [4. Πράξεις]{#s4} + +### [4.1 Εισαγωγή]{#ss4.1} + +Οι πράξεις είναι αυτές που λένε στην awk \"τί να κάνει\" όταν το πρότυπο ταιριάξει με αυτό που του ζητήσαμε. Μία πράξη αποτελείται από μία ή περισσότερες +εντολές, οι οποίες μοιάζουν πάρα πολύ με τις εντολές τις C. Μία πράξη μπορεί να περιέχει: + +- Μεταβλητές +- Πίνακες +- Ενσωματωμένες συναρτήσεις (αλφαριθμητικές και αριθμητικές) +- Εντολές ελέγχου ροής +- Εκτυπώσεις + +Οι πράξεις γράφονται μέσα σε αγκύλες ({}). Ο μόνος περιορισμός που έχετε, είναι να γράψετε την πρώτη αγκύλη στην ίδια γραμμή με το πρότυπο. Αυτός, βέβαια, είναι +ο μόνος σας περιορισμός. + +Υπάρχουν κανόνες για τον τρόπο με τον οποίο γράφετε ένα awk script. Ευτυχώς, οι κανόνες αυτοί είναι σχεδόν ίδιοι με τους κανόνες της C: γενικά, στην συγγραφή +ενός προγράμματος, έχετε μιά ελευθερία με τα κενά, τις γραμμές κλπ. Ας τα δούμε, όμως, από την αρχή. Μέσα σε ένα script, οι κενές γραμμές αγνοούνται. Οι εντολές +που γράφετε μπορούν είτε να είναι στην ίδια γραμμή είτε σε διαφορετική. Η awk αναγνωρίζει τα κενά με τον ίδιο τρόπο που τα αναγνωρίζει η C. Οι επόμενες δύο +γραμμές είναι ακριβώς οι ίδιες: + + $1=="Linux"{print"μήνυμα 1"} + + $1 == "Linux" { print "μήνυμα 1" } + +Εννοείται πάντως, πως διαφόρων ειδών κενά μέσα στα εισαγωγικά δεν αγνοούνται. Τα υπόλοιπα κενά (μέσα στον κώδικα) αγνοούνται. Μπορείτε επίσης, να \"σπάτε\" τις +εντολές σε πολλές γραμμές: + + $1 == "Linux" { + print "μήνυμα 1" + } + +Μπορείτε να έχετε πολλές διαφορετικές πράξεις μέσα στις αγκύλες ({}). Μπορείτε να τις χωρίζετε με το ελληνικό ερωτηματικό (;): + + $1 == "Linux" {print "μήνυμα 1"; print "μήνυμα 2"; print μήνυμα 3";} + +Όμως, έχετε τη δυνατότητα να μην χρησιμοποιήσετε το ελληνικό ερωτηματικό, αλλά να γράψετε κάθε εντολή της πράξης σε διαφορετική γραμμή. Το ακόλουθο παράδειγμα +έχει το ίδιο αποτέλεσμα με το παραπάνω: + + $1 == "Linux" { + print "μήνυμα 1" + print "μήνυμα 2" + print "μήνυμα 3" + } + +Επίσης, μπορείτε να έχετε σχόλια (comments) μέσα στο script σας. Αυτό μπορείτε να το κάνετε χρησιμοποιώντας το σύμβολο **\#** μπροστά από κάθε γραμμή σχόλιου. + +### [4.2 Μεταβλητές]{#ss4.2} + +Οι μεταβλητές σας χρειάζονται, φυσικά, για να έχετε τη δυνατότητα να αποθηκεύετε δεδομένα μέσα σε ένα πρόγραμμα. Υπάρχουν τριών ειδών μεταβλητές στην awk: + +- Μεταβλητές πεδίου +- Προκαθορισμένες μεταβλητές +- Καθορισμένες από το χρήστη μεταβλητές + +Από όλα αυτά τα είδη έχουμε δεί παραδείγματα των πρώτων δύο ειδών. Τις μεταβλητές πεδίου, όπως το \$1 και τις προκαθορισμένες μεταβλητές, όπως το NF κ.α. + +Οι μεταβλητές που ορίζονται από το χρήστη είναι, όπως θα καταλάβατε, οι μεταβλητές που δημιουργείτε εσείς μέσα σε ένα πρόγραμμα για να σας εξυπηρετήσουν σε έναν +συγκεκριμένο σκοπό. Ένα πλεονέκτημα της awk είναι πως δεν χρειάζετε να ορίσετε τον τύπο της μεταβλητής που θα δημιουργήσετε. Δεν είναι π.χ. όπως στη C (και σε +άλλες) που ορίζετε το αν μία συγκεκριμένη μεταβλητή είναι integer, float, char κλπ. Στην awk απλά χρησιμοποιείτε την μεταβλητή (θυμάστε την BASIC ? :-) H awk +καταλαβαίνει τον τύπο της μεταβλητής, από το πώς αυτή χρησιμοποιείται μέσα στο πρόγραμμα. Αν για παράδειγμα, μέσα σε μιά μεταβλητή συμπεριλάβετε γράμματα και/ή +αριθμούς, τότε αυτή η μεταβλητή αναγνωρίζεται ως αλφαριθμητικό. Αν χρησιμοποιήσατε μόνο αριθμούς, τότε αυτή αναγνωρίζεται ως αριθμητική μεταβλητή. + +Όπως και στη C, τα ονόματα των μεταβλητών που χρησιμοποιείτε ΠΡΕΠΕΙ να αρχίζουν με αλφαβητικό χαρακτήρα ή με μία κάτω παύλα/underscore (\_). Για το υπόλοιπο +όνομα της μεταβλητής μπορείτε να χρησιμοποιήσετε γράμματα, underscores ή αριθμούς. Οι αλφαβητικοί χαρακτήρες μπορούν να είναι είτε κεφαλαία είτε μικρά γράμματα. +Φυσικά, σε αυτό το σημείο πάντα δίνονται δύο (κλασσικές) συμβουλές: Η μία είναι να δίνετε στις μεταβλητές ονόματα περιγραφικά (δηλαδή, να καταλαβαίνει κάποιος +τί είναι το περιεχόμενό τους από το όνομά τους). Η δεύτερη συμβουλή είναι να αποφεύγετε όσο μπορείτε να γράφετε τις μεταβλητές με κεφαλαία γράμματα γιατί, όπως +θα δούμε παρακάτω, οι προκαθορισμένες μεταβλητές της awk είναι με κεφαλαία γράμματα, οπότε μπορεί εύκολα να γίνει λάθος. + +Λοιπόν, ας δούμε τώρα έναν πίνακα με τις προκαθορισμένες (built-in variables) μεταβλητές της awk. Ο πίνακας έχει 3 στήλες. Στην 3η στήλη αναγράφεται, αν +υπάρχει, η default τιμή μιας μεταβλητής. Επίσης, να τονίσω ότι πολλές από τις παρακάτω μεταβλητές δεν υπάρχουν σε προηγούμενες εκδόσεις της awk (άλλωστε μιλάμε +για gawk): + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ **Σημασία** **Default Τιμή** + **Μεταβλητή** + + ARGC Ο αριθμός των παραμέτρων που δίνονται στην γραμμή + εντολών + + ARGV Πίνακας με όλες τις παραμέτρους που δίνονται στην + γραμμή εντολών + + CONVFMT Η μορφή που η awk \"διαβάζει\" τους αριθμούς %.6g + + ENVIRON Οι μεταβλητές περιβάλλοντος του UNIX + + ERRNO Τα μηνύματα λάθους του UNIX + + FILENAME Το όνομα του τρέχοντος αρχείου εισόδου + + FNR Ο τρέχων αριθμός εγγραφής + + FS Ο διαχωριστής πεδίων Space + + IGNORECASE Ελέγχει την case sensitivity 0 (δηλ. υπάρχει case sensitivity) + + NF Ο αριθμός των πεδίων στην τρέχουσα εγγραφή + + NR Ο αριθμός των εγγραφών + + OFMT Η μορφή εξόδου των αριθμών %.6g + + OFS Ο διαχωριστής πεδίων για την έξοδο Space + + ORS Ο διαχωριστής εγγραφών της εξόδου Newline + + RS Ο διαχωριστής εγγραφών της εισόδου Newline + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +#### Αναλυτικά + +- Η πρώτη παράμετρος που δίνετε στην γραμμή εντολών συμβολίζεται με ARGV\[0\], ενώ η τελευταία παράμετρος είναι η ARGV\[ARGC-1\]. Για την ακρίβεια, η πρώτη + \"παράμετρος\" που δίνουμε στην γραμμή εντολών είναι η ίδια η gawk. Αρα ARGV\[0\]=\"gawk\" + +- Ας μιλήσουμε τώρα για εκείνη την παράμετρο **-Fx** που είδαμε στην σύνταξη της εντολής gawk. Εξ ορισμού, τα πεδία ξεχωρίζουν από τα κενά (ανεξάρτητου μήκους + κενά) μεταξύ τους. Τί γίνεται, όμως, αν θέλετε να επεξεργαστείτε ένα αρχείο σαν το /etc/passwd το οποίο δεν περιέχει κενά, αλλά παρόλα αυτά περιέχει πολλά + πεδία με πληροφορίες; Εδώ θα χρειαστεί να χρησιμοποιήσετε διαφορετικό από τον εξ ορισμού διαχωριστή πεδίων (field seperator). Αυτό μπορείτε να το κάνετε με + την παράμετρο **-Fx** όπου στη θέση του **x** θα βάλετε τον διαχωριστή που θέλετε. Για παράδειγμα, στο αρχείο /etc/passwd, σίγουρα θα θέλετε τα πεδία να + ξεχωρίζουν με το σύμβολο της άνω και κάτω τελείας (:). Επομένως, αρκεί να χρησιμοποιήσετε την παράμετρο **-F:** + + Υπάρχει, όμως, εναλλακτικός τρόπος να ορίσετε τον διαχωριστή. Η μεταβλητή **FS** χρησιμοποιείται από την awk για αυτόν ακριβώς το λόγο. Επομένως, έχετε τη + δυνατότητα να χρησιμοποιήσετε αυτήν την μεταβλητή σε συνδυασμό με το ειδικό πρότυπο **BEGIN**. Π.χ. πρίν γράψετε οτοδήποτε άλλο στον κώδικά σας, μπορείτε να + γράψετε το: + + BEGIN { FS = ":" } + +- Θα καταλάβετε την μεταβλητή ENVIRON με το ακόλουθο παράδειγμα: + + ENVIRON["TERM"] == "vt100" { print "Δουλεύετε σε VT100 !!" } + + Η παραπάνω εντολή ελέγχει αν είστε σε VT100 τερματικο και, αν είστε, τυπώνει το μήνυμα. + +- Είδατε δύο Default τιμές να είναι \"%.6g\". Για το τί σημαίνει αυτή η τιμή (και γενικά τιμές τέτοιου τύπου) θα μιλήσουμε όταν αναφερθούμε στις εκτυπώσεις + και, συγκεκριμένα, όταν αναφερθούμε στην \"printf\" (στο 2ο μέρος). + +### [4.3 Αλφαριθμητικά]{#ss4.3} + +Εδώ θα σας δώσω ένα παράδειγμα \"μεταχείρισης\" αλφαριθμητικών (άλλωστε, σε προηγούμενα παραδείγματα, θα έχετε ήδη καταλάβει τί/πώς/πού/κλπ. είναι τα +αλφαριθμητικα). Στη συνέχεια, θα μιλήσουμε για τις αλφαριθμητικές ενσωματωμένες συναρτήσεις και στο τέλος θα σας δώσω έναν πίνακα με ειδικές αλφαριθμητικές +σταθερές. + +Τα αλφαριθμητικά πάντα γράφονται μέσα σε ζευγάρι διπλών εισαγωγικών (\"). Ένα αλφαριθμητικό μπορεί να περιέχει οποιουσδήποτε χαρακτήρες. Να σημειώσω πως αν +χρησιμοποιήσετε ΜΟΝΟ αριθμούς (π.χ. το \"156\") για ένα αλφαριθμητικό, τότε αυτόματα η awk το χρησιμοποιεί σαν αριθμητική μεταβλητή. Αντίθετα, αν έχετε ένα +αλφαριθμητικό (με χαρακτήρες ή ακόμα και \"μορφοποιημένο\" αριθμό: π.χ. \"+30 972 66 55 44\" \<\-- το οποίο για την gawk είναι αλφαριθμητικό, αφού περιέχει κενά +(\" \"). Προσέξτε, το \"+\" επιτρέπεται, όπως και το \"-\" σε αριθμητικές μεταβλητές) και προσπαθήσετε να κάνετε μιά αλγεβρική πράξη με αυτό (πρόσθεση, +αφαίρεση, κλπ \...) τότε η awk θα προσπαθήσει να μετατρέψει το αλφαριθμητικό σε αριθμητική μεταβλητή και, πολύ απλά, θα του δώσει την αριθμητική τιμή 0 (μηδέν). +Ας δούμε το παράδειγμα: + + $ gawk 'BEGIN {x="αβγ""δεζ" ; y = "magaz"; z=x y; z2 = "A"x"LINUX"y"END"; print x, y, z, z2}' + αβγδεζ magaz αβγδεζmagaz AαβγδεζLINUXmagazEND + +Είδατε, λοιπόν, πως μπορούμε να \"συνδυάσουμε\" αλφαριθμητικά. Είδατε επίσης, στη μεταβλητή x, πώς δεν είναι ανάγκη να συμπεριλάβουμε όλους τους χαρακτήρες στο +ίδιο ζεύγος εισαγωγικών. Ακόμα, στο τέλος, αν δεν είχαμε χρησιμοποιήσει το κόμμα (,) ανάμεσα στις μεταβλητές στην εντολή print, αυτό που θα μας έδινε η έξοδος +θα ήταν:\ +αβγδεζmagazαβγδεζmagazAαβγδεζLINUXmagazEND + +Ας δούμε τώρα τον πίνακα με τις συναρτήσεις. Και πάλι, μερικές από αυτές μπορεί να μην δουλεύουν σε παλιότερες εκδόσεις awk: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Ερμηνεία** + **Συνάρτηση** + + index(s1, s2) Επιστρέφει την θέση (από αριστερά) του αλφαριθμητικού s2 στο αλφαριθμητικό s1 + + length(string) Μετρά τον αριθμό χαρακτήρων του string + + split(string, πίνακας, διαχωριστής) Δείτε παρακάτω, στα αναλυτικά + + substr(string, m, n) Επιστρέφει εκείνο το τμήμα του αλφαριθμητικού string που αρχίζει από\ + τη θέση m και έχει n χαρακτήρες + + tolower(string) Επιστρέφει το string με μικρούς χαρακτήρες + + toupper(string) Επιστρέφει το string με κεφαλαίους χαρακτήρες + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +#### Αναλυτικά + +- Η split(string, πίνακας, διαχωριστής) καταχωρεί τα τμήματα του αλφαριθμητικού string που χωρίζονται μεταξύ τους με τον χαρακτήρα \"διαχωριστή\", στα + στοιχεία πίνακας\[1\], πίνακας\[2\], \... , πίνακας\[ν\] του πίνακα και επιστρέφει το ν. Αν δεν υπάρχει ο \"διαχωριστής\", τότε χρησιμοποιείται η μεταβλητή + FS. Παράδειγμα: + + number = split("29/3/2000", array, "/") + + Λοιπόν, μετά την εκτέλεση της εντολής θα έχουμε: array\[1\]=29, array\[2\]=3, array\[3\]=2000. H μεταβλητή number θα έχει την τιμή 3. + +- Ας δούμε και ένα παράδειγμα για την substr. Έχουμε: + + var=substr("Linux", 3, 2) + + Μετά την εκτέλεση της εντολής, η μεταβλητή var θα περιέχει το αλφαριθμητικό \"nu\". + +Παρακάτω, βλέπετε έναν πίνακα με ειδικές αλφαριθμητικές σταθερές, τις οποίες μπορείτε να χρησιμοποιήσετε μέσα σε ένα αλφαριθμητικό για συγκεκριμένες, +εξειδικευμένες \"εκτυπώσεις\". Π.χ. αν θα θέλατε μέσα σε ένα αλφαριθμητικό να χρησιμοποιήσετε τα διπλά εισαγωγικά (\") τότε θα πρέπει να γράψετε πρίν από αυτά +την backslash (\\) ώστε να μην \"μπερδευτεί\" η awk με τα εισαγωγικά που περιβάλλουν το αλφαριθμητικό: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Σημασία** + **Σταθερά** + + \\\\ Παριστάνει την ίδια την backslash + + \\a Ο χαρακτήρας alert ή bell (Θα ηχήσει το speaker) + + \\b Backspace + + \\f Formfeed + + \\n Newline + + \\r Carriage return + + \\t Tab + + \\v Vertical Tab + + \\\" Παριστάνει τα εισαγωγικά + + \\xYY Δείχνει ότι ο ΥΥ είναι δεκαεξαδικός αριθμός + + \\0YYY Δείχνει ότι ο ΥΥΥ είναι οκταδικός αριθμός + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +### [4.4 Πίνακες]{#ss4.4} + +Όταν έχετε πολλά δεδομένα (π.χ. τιμές) που αφορούν στο ίδιο θέμα, τότε έχετε 2 επιλογές: είτε θα χρησιμοποιήσετε πολλές μεταβλητές, είτε θα χρησιμοποιήσετε έναν +πίνακα, ο οποίος σας επιτρέπει να έχετε συγκεντρωμένα πολλά δεδομένα. Ένας πίνακας αποτελείται από το όνομά του και τα στοιχεία του. Συμβολίζεται κάπως έτσι: +όνομα\[στοιχείο\]. + +Προσοχή!! Οι πίνακες στην awk έχουν ειδικές ικανότητες, οι οποίες δεν παρουσιάζονται στις περισσότερες γλώσσες προγραμματισμού. Είναι δυναμικοί πίνακες, πράγμα +που σημαίνει πως ξεφεύγουμε από το μαθηματικό μοντέλο του πίνακα (αν και πρέπει πάντα να το έχουμε στο μυαλό μας) καταργώντας τα \"αριθμημένα\" στοιχεία, δηλαδή +τις *διαστάσεις του πίνακα*. Το στοιχείο του πίνακα στην awk συμβολίζεται με αλφαριθμητικό!! Δεν χρειάζετε να δηλώνετε για μία συγκεκριμένη μεταβλητή πως είναι +πίνακας (όπως κάνουμε στη C), οπότε δεν δηλώνουμε εκ των προτέρων το μέγεθος που έχει ο πίνακάς μας. Όταν χρησιμοποιείτε ένα καινούριο στοιχείο για πρώτη φορά, +τότε αυτό δυναμικά προστίθεται στον πίνακά μας. Ας δούμε δύο παραδείγματα πινάκων: + + magaz_subject["Linux"] = 1 + magaz_subject["gardening"] = 0 + +Αν θα θέλαμε να κάνουμε το ίδιο σε άλλη γλώσσα προγραμματισμού, τότε θα έπρεπε να έχουμε 2 διαφορετικούς πίνακες, όπου στον έναν να είχαμε διάφορα θέματα και +στον άλλον πίνακα, στα ίδια στοιχεία να βάζαμε την τιμή 0 ή 1 (ανάλογα αν ανταποκρίνεται το magaz στα θέματα αυτά), οπότε κάθε φορά να κάναμε \"αντιστοίχιση\" +των πινάκων. Δηλαδή, για το παραπάνω παράδειγμα, ο ένας πίνακας ας υποθέσουμε ότι στη θέση 5 (στοιχείο 5 / array\[5\]) περιείχε το αλφαριθμητικό \"Linux\" και +στη θέση 6 το αλφαριθμητικό \"gardening\". Ο δεύτερος πίνακας θα είχε στη θέση 5 το 1 και στη θέση 6 το 0. + +Η τακτική αυτή στην awk (δηλαδή η χρήση αλφαριθμητικού για στοιχείο) είναι \"λιγότερο προγραμματιστική-μαθηματική\" αλλά ευκολότερη στο διάβασμα. Η τακτική αυτή +οφείλεται για το γεγονός ότι η awk δεν υποστηρίζει άμεσα πολυδιάστατους πίνακες. + +#### Συναρτήσεις πινάκων + +Η awk περιλαμβάνει 2 συναρτήσεις για τους πίνακες: την in και την delete. Η συνάρτηση in ελέγχει την ύπαρξη ενός στοιχείου του πίνακα. Η delete σβήνει ένα +στοιχείο από έναν πίνακα. + +Για παράδειγμα, μπορούμε να χρησιμοποιήσουμε την παρακάτω εντολή μέσα σε έναν βρόγχο if (τους οποίους θα δούμε στο 2ο μέρος) για να εξετάσουμε μιά ύπαρξη και να +εκτελέσουμε, ανάλογα, μιά πράξη: + + "Linux" in magaz_subject + +Ομοίως, χρησιμοποιούμε την συνάρτηση delete: + + delete magaz_subject["gardening"] + +Προσέξτε, ότι όταν χρησιμοποιείτε την delete, το στοιχείο σβήνεται από την περιοχή μνήμης. Τα δεδομένα δεν μπορούν να ανακτηθούν. Προσέξτε όμως, πως δεν +μπορείτε να χρησιμοποιήσετε την delete κάπως έτσι: delete magaz\_subject. Δεν μπορείτε να σβήσετε ολόκληρο τον πίνακα, αλλά μόνο τα στοιχεία του. + +#### Πολυδιάστατοι Πίνακες + +Είπαμε πως η awk δεν υποστηρίζει άμεσα πολυδιάστατους πίνακες, αλλά τους \"εξομοιώνει\". Το γεγονός αυτό, δεν σας επηρεάζει ως προγραμματιστές. Εσείς προχωράτε +κανονικά και δηλώνετε τους πολυδιάστατους πίνακες όπως ακριβώς και στη C, δηλαδή: + + magaz_subject[6, 2] = "Linux" + +Εννοείται πως μπορείτε να χρησιμοποιήσετε τις in και delete όπως ακριβώς και στους μονοδιάστατους. + diff --git a/content/articles/23/04_perldbi.md b/content/articles/23/04_perldbi.md new file mode 100644 index 0000000..27bf636 --- /dev/null +++ b/content/articles/23/04_perldbi.md @@ -0,0 +1,223 @@ ++++ +title = 'DataBaseInterface για Perl' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 23'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σε αυτό το μικρό αρθράκι θα κάνουμε μία πρώτη και επιφανειακή προσέγγιση σε προγραματισμό Perl για Databases μέσω του DBI interface* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η Perl είναι μία interpreted γλώσσα όπως όλοι ξέρουν. Και ως interpreted θεωρείται από αρκετούς \"κακή\" γλώσσα. Από την άλλη, είναι εξαιρετικά απλή σε σύνταξη. +Και επειδή είναι εξαιρετικά απλή, υπάρχουν εκατοντάδες προγραμματιστές που την επεκτείνουν, σε τομείς για τους οποίους δεν είχε σχεδιαστεί. Ένας από αυτούς τους +τομείς είναι οι DataBases. + +**1. Τι παρέχει το DBI** +-------------------------------------------------- + +**2. Τι ΔΕΝ παρέχει το DBI** +------------------------------------------------------ + +**3. Συνηθισμένες συναρτήσεις** +--------------------------------------------------------- + +- [3.1 Connect](#ss3.1) +- [3.2 Select](#ss3.2) +- [3.3 Insert](#ss3.3) +- [3.4 Delete](#ss3.4) +- [3.5 Update](#ss3.5) +- [3.6 Do αντί για prepare() και execute()](#ss3.6) +- [3.7 Finsh και Disconnect](#ss3.7) + +**4. \`Αλλα καλούδια** +------------------------------------------------ + +**5. Βιβλιογραφία** +--------------------------------------------- + + +### [1. Τι παρέχει το DBI]{#s1} + +Το module DBI (Database Interface) παρέχει τη δυνατότητα στην perl να μιλάει με μία database. Το module αυτό παρέχει κάποιες functions οι οποίες μιλάνε με +κάποιο underlying module, το οποίο λέγεται DBD. Υπάρχει ξεχωριστό DBD για κάθε βάση δεδομένων (π.χ. MySQL, Postgres, Oracle κλπ), και δεν παρέχουν όλα τις ίδιες +δυνατότητες, αλλά με την χρήση του DBI είσαστε λίγο-πολύ σίγουροι ότι ο κώδικας σας μεταφέρεται από την μία Database στην άλλη, χωρίς να ξαναγραφτούν όλες οι +functions από την αρχή. Ειδικά αν η SQL που γράφετε είναι \"κανονική\" SQL και όχι specific-database-enhanced SQL, είναι πολύ εύκολο (από πλευράς προγράμματος +και μόνο) να αλλάξετε βάση, ή να διανείμετε τον κώδικά σας χωρίς να σας ενδιαφέρει το τί βάση χρησιμοποιεί ο άλλος (αρκεί βέβαια να του ορίσετε το schema που θα +δημιουργήσει στην βάση του). + +Βέβαια, αν χρησιμοποιήσετε το DBI για να εκτελέσετε triggers ή stored procedures σε μία βάση (κάτι που γίνεται), δεν μπορείτε να περιμένετε μεγάλη +μεταφερσιμότητα, κυρίως λόγω του διαφορετικού τρόπου με τον οποίο καλούν τα διάφορα triggers οι βάσεις. Συνεπώς, αν θέλετε να έχετε την ευελιξία να αλλάξετε +βάση αύριο - μεθαύριο χωρίς να σας βγουν τα μάτια να διαβάζετε καλά όλο τον κώδικα για να βρείτε τα databse-specific κομμάτια, σημειώστε καλά τα σημεία που τα +χρησιμοποιείτε και στο υπόλοιπο πρόγραμμα\.... stic k to SQL. + + +### [2. Τι ΔΕΝ παρέχει το DBI]{#s2} + +Το DBI δεν παρέχει έναν τρόπο να μιλήσετε σε μία βάση χωρίς να ξέρετε SQL. To DBI είναι ένα απλό API, άρα αν δεν ξέρετε πως να σχεδιάσετε / υλοποιήσετε ένα +RDBMS και πως να αποθηκεύσετε, αλλάξετε, σβήσετε αρχεία με απλή SQL, μην συνεχίσετε να διαβάζετε, το άρθρο αυτό θα σας είναι εντελώς άχρηστο. Αντ\' αυτού +διαβάστε ένα βιβλίο για SQL πρώτα, και μετά ξαναελάτε. + + +### [3. Συνηθισμένες συναρτήσεις]{#s3} + +### [3.1 Connect]{#ss3.1} + +Για να ξεκινήσουμε να μιλάμε σε μία βάση, πρέπει πρώτα να συνδεθούμε σε αυτή τη βάση. Αυτό γίνεται απλά καλώντας την function \"connect\" του DBI. Όταν την +καλέσουμε, θα μας επιστρέψει ένα handler (αν επιτύχει βέβαια), και με αυτό το handler θα μιλάμε. + + Παράδειγμα 1 + $dbh=DBI->connect('DBI:Pg:dbname=dbname user=dbuser password=dbpass'); + +Η παραπάνω γραμμή, απλά συνδέεται σε μία postgres database, στην βάση με όνομα dbname, με username dbuser και password dbpass. Η database στο συγκεκριμένο +παράδειγμα πρέπει να είναι στο ίδιο μηχάνημα, και να \"ακούει\" στο standard port της Postgres, αλλιώς πρέπει να χρησιμοποιηθούν και οι παράμετροι host= και +port=. Σωστή προγραμματιστική τακτική λέει ότι πρέπει η μεταβλητή \$dbh πρέπει να έχει οριστεί νωρίτερα, και να ελεγχθεί αν πράγματι έχει τιμή αυτό που +επιστρέφεται (αν δηλαδή πέτυχε το connect). + +Αυτή η συγκεκριμένη γραμμή είναι αρκετά διαφορετική από βάση σε βάση. Για παράδειγμα για Oracle, θα έπρεπε να γραφτεί ως εξής + + Παράδειγμα 2 + $dbh=DBI->connect('DBI:Oracle:dbname', 'dbuser', 'dbpass'); + +και αυτό οφείλεται στο ότι ο κάθε προγραμματιστής ενός DBD δεν ακολουθεί κάποιους κανόνες για το πως περνάει της παραμέτρους στην βάση του. + +### [3.2 Select]{#ss3.2} + +Αφού δημιουργήσαμε τη σύνδεση, πλέον στέλνουμε εντολές, στο \$dbh. Αυτό γίνεται σε δύο στάδια (εκτός από κάποιες περιπτώσεις που θα δούμε παρακάτω). Το πρώτο +στάδιο είναι να \"προετοιμάσουμε\" την εντολή, και το δεύτερο είναι να την εκτελέσουμε. Το να λάβουμε τα δεδομένα είναι άλλη υπόθεση (και τρίτο στάδιο). Για +παράδειγμα, για να εκτελέσουμε μία τυπική select σε ένα πίνακα, έστω clients, οι εντολές είναι : + + Παράδειγμα 3 + $entoli = $dbh->prepare('SELECT * FROM clients'); + $entoli->execute(); + +Όσα είπαμε προηγουμένως για σωστή προγραμματιστική τακτική ισχύουν και εδώ (και σε όλο το άρθρο, οπότε θα σταματήσω να τα λέω), και απλά παραλείπονται μια που ο +καθένας προτιμάει τον δικό του τρόπο δήλωσης μεταβλητών και ελέγχου επιτυχίας της function. + +Όπως βλέπουμε, η prepare() δίνει την εντολή, η οποία εκτελείται από την execute(). Αν τώρα θέλουμε να επιλέξουμε συγκεκριμένα στοιχεία από τον πίνακα, απλά +αντικαθιστούμε το \* με τα στοιχεία που θέλουμε. Έστω δηλαδή ότι θέλουμε τα στοιχεία client\_name και client\_tel από τον πίνακα, οι εντολές γίνονται: + + Παράδειγμα 4 + $entoli = $dbh->prepare('SELECT client_sname, client_tel FROM clients'); + $entoli->execute(); + +Φυσικά, αν θέλουμε να περιορίσουμε την select μπορούμε μέσω του DBI, θέτοντας WHERE clauses. Ο σωστός τρόπος να γίνει αυτός είναι ο εξής: + + Παράδειγμα 5 + $entoli = $dbh->prepare('SELECT client_tel FROM clients WHERE client_sname = ?'); + $entoli->execute('kabrianis'); + +Η παράμετρος η οποία θα αντικαταστήσει το ερωτηματικό (?) όταν εκτελεστεί η εντολή, είναι η παράμετρος η οποία μπαίνει ως όρισμα στην function execute(). Τελικά +δηλαδή θα εκτελεστεί στην Database η εντολή: + + Παράδειγμα 6 + SELECT client_tel FROM clients WHERE client_sname = 'kabrianis' + +Προφανώς, μπορούμε να έχουμε περισσότερες από μία παραμέτρους στα WHERE clauses, αντικαθιστώντας τα αντίστοιχα ερωτηματικά με τις παραμέτρους, χωρισμένες με +κόμμα, στην αντίστοιχη execute(). Μπορούμε επίσης να έχουμε και subqueries, όπως: + + Παράδειγμα 7 + $entoli = $dbh->prepare('SELECT client_tel FROM clients WHERE client_addr = ? + AND client_sname in (SELECT client_sname FROM clients WHERE client_fname = ?)'); + $entoli->execute('Athina','Michalis'); + +Αν μπερδευτήκατε, ξαναδιαβάστε SQL. Η εντολή είναι απλούστατη, και θα μας βρεί από την βάση μας (πίνακα clients) όσους έχουν διεύθυνση Athina και λέγονται +Michalis. + +Όλα αυτά τα αποτελέσματα της SELECT μπορούν να διαβαστούν από εμάς, γραμμή - γραμμή, με την fetchrow\_array() μέθοδο της \$entoli, και βέβαια μας έρχονται σε +μορφή array. Για παράδειγμα, ο κώδικας του παραδείγματος 4 θα μας επιστρέφει arrays που θα περιέχουν τα client\_sname και client\_tel ως πρώτο και δεύτερο +στοιχείο του array. Το να τα κρατήσουμε σε μεταβλητές και να τα κάνουμε κάτι, είναι φυσικά εύκολο. + + Παράδειγμα 8 + while (@apotelesmata = $entoli->fetchrow_array()) { + $client_sname = $apotelesmata[0]; + $client_tel = $apotelesmata[1]; + ## + ## Εδώ κάνουμε κάτι με τα αποτελέσματα που πήραμε + ## + } + +### [3.3 Insert]{#ss3.3} + +Η χρήση της INSERT είναι πολύ απλή, και μοιάζει με αυτή της SELECT. Για παράδειγμα για να βάλουμε άλλη μία γραμμή στον παραπάνω πίνακα (ο οποίος έστω ότι έχει +πεδία id, client\_sname, client\_fname και client\_addr) θα γράψουμε τα εξής: + + Παράδειγμα 9 + $entoli = $dbh->prepare('INSERT INTO clients VALUES (?,?,?,?)'); + $entoli->execute($id,$client_sname,$client_fname,$client_addr); + +Φυσικά εδώ η fetchrow\_array() δεν θα μας επιστρέψει τίποτα. Η ανωτέρω συνάρτηση μπορεί να επεκταθεί όσο θέλετε, με βάση πάντα τα όρια της SQL, προσθέτοντας +συγκεκριμένες τιμές, σε συγκεκριμένα πεδία (αν το επιτρέπει ο πίνακας που έχετε φτιάξει). + +### [3.4 Delete]{#ss3.4} + +Πραγματικά δεν θα περιμένετε κάτι διαφορετικό, έτσι; Ας πάμε κατυεθείαν στον κώδικα: + + Παράδειγμα 10 + $entoli = $dbh->prepare('DELETE FROM clients WHERE client_sname = ?'); + $entoli->execute($client_sname); + +και φυσικά, πάλι η fetchrow\_array() δεν θα επιστρέψει τίποτα. Subqueries μπορούν να χρησιμοποιηθούν, για να σβήσουμε συγκεκριμένες γραμμές ενός πίνακα, ακόμα +και χωρίς να δώσουμε καθόλου εξωτερικά στοιχεία. + +### [3.5 Update]{#ss3.5} + +\`Αλλη μία απλή εντολή, η update, έχει ακριβώς την ίδια σύνταξη με την insert και την delete. + + Παράδειγμα 11 + $entoli = $dbh->prepare('UPDATE clients SET client_tel = ? WHERE client_sname = ?'); + $entoli->execute($client_tel,$client_sname); + +Όπως είπαμε και πιο πάνω, οι παράμετροι της execute() διαβάζονται σειριακά, και αντικαθιστούν τα ερωτηματικά που βρίσκουν στην prepare(). Αυτό το ξανατονίζω +γιατί η update είναι ίσως η πιο \"επικίνδυνη\" εντολή, από την άποψη ότι μπορεί εύκολα να κάνεις λάθος, και να μην το καταλάβεις, και να κάνεις update όλες τις +εγγραφές ενός πίνακα αντί για μία - δύο που ήθελες. + +### [3.6 Do αντί για prepare() και execute()]{#ss3.6} + +Για τις εντολές insert, update και delete, οι οποίες ΔΕΝ επιστρέφουν τίποτα, το DBI παρέχει έναν τρόπο να αποφεύγουμε τις πολλές γραμμές κώδικα. Ο τρόπος είναι +να αντικαταστήσουμε τα prepare(), execute() και finish (που θα δούμε παρακάτω) με την απλή εντολή do. + + Παράδειγμα 12 + $entoli = $dbh->do('DELETE FROM clients WHERE client_id = 5'); + +Έτσι η εντολή DELETE προετοιμάζεται (prepare()), εκτελείται (execute()) και ο handler \$entoli τερματίζεται (finish) αυτόματα. + +### [3.7 Finsh και Disconnect]{#ss3.7} + +Πρέπει πάντα, να τερματίζουμε τον handler της εντολής μετά την εκτέλεσή της, και το fetching των γραμμών που μας επιστρέφει (αν μας επιστρέφει τίποτα φυσικά). +Συνεπώς, σε όλα τα παραπάνω παραδείγματα, πρέπει να προσθέσετε στο τέλος την γραμμή: + + $entoli->finish; + +ενώ πρέπει, όταν τελειώνουμε με την βάση μας, να κλείνουμε τη σύνδεση: + + $dbh->disconnect; + + +### [4. \`Αλλα καλούδια]{#s4} + +Εκτός από τα connect, disconnect, prepare, execute, do, finish και fetchrow\_arrays που είδαμε, υπάρχουν και άλλα καλούδια που παρέχονται από το DBI, τα οποία +μπορούν να χρησιμοποιηθούν για να κάνουν τη ζωή σας ευκολότερη. Ας κάνουμε μία σύντομη αναφορά σε κάποια (τα πιο χρήσιμα ίσως) από αυτά: + +- prepare\_cached(): Αν αντί της prepare() χρησιμοποιήσουμε την prepare\_cached, τότε, κάθε φορά που θα εκτελείται ένα execute() με τις ίδιες ακριβώς + παραμέτρους, δεν θα γίνεται σύνδεση προς τη βάση, αλλά θα μας επιστρέφονται οι τιμές που έχουν γίνει cached κατά την πρώτη φορά. +- rows: Αν χρησιμοποιήσουμε την \$entoli-\>rows, θα μας επιστραφεί ο αριθμός των γραμμών που στέλνει η βάση μετά από ένα select. +- bind\_columns(): Αντί της fetchrow\_array() που είδαμε παραπάνω και του while που αναθέτουμε σε κάποιες μεταβλητές, τα στοιχεία του array που μας + επιστρέφονται, μπορούμε απλά να χρησιμοποιήσουμε την bind\_columns() δίνοντας ως παραμέτρους τα ονόματα των μεταβλητών. Τα δεδομένα από την βάση μας + έρχονται μέσω της fetch. + +Το DBI μας παρέχει στην err τον κωδικό λάθους (αν υπάρχει κάποιο) κατά την εκτέλεση της εντολής, στην errstring το μήνυμα λάθους που επιστρέφει η database, και +στην state το SQLSTATE κωδικό λάθους. Χρήσιμες functions είναι οι trace, trace\_msg και η func. + + +### [5. Βιβλιογραφία]{#s5} + +Καλό βιβλίο, και προτεινόμενο για DBI programming (και με κάποια στοιχεία SQL μέσα) είναι το Programming the Perl DBI από τις εκδόσεις O\'Reilly. Μην το ψάξετε +στον Παπασωτηρίου, δεν το έχει (και το ζητούσα 2 μήνες).\ +Πολύ καλές πληροφορίες δίνει το manual page του DBI του ίδιου.\ +Πρέπει επίσης να διαβάσετε το manual του DBD module της βάσης σας (αν φυσικά έχει ένα τέτοιο). Βιβλία για Perl και SQL ΔΕΝ θα προτείνω εδώ. + diff --git a/content/articles/23/05_apachejserv.md b/content/articles/23/05_apachejserv.md new file mode 100644 index 0000000..1b48d95 --- /dev/null +++ b/content/articles/23/05_apachejserv.md @@ -0,0 +1,290 @@ ++++ +title = 'Apache mod\_ssl mod\_jserv installation' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'Κώστας Γεωργακόπουλος(mailto:kgeorga@magnet.gr)' +issue = ['Magaz 23'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αυτό το κείμενο προσπαθεί να κάνει την εγκατάσταση του apache-ssl-jserv εύκολη ώστε οποιοσδήποτε, ακολουθώντας απλά τις εντολές, να μπορέσει να εγκαταστήσει το +ρημάδι.. Πάντως δούλεψε για μένα..* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Tι πρέπει να ξέρετε.** +--------------------------------------------------------- + +**2. Απαραίτητα αρχεία και που θα τα βρείτε.** +---------------------------------------------------------------------------- + +**3. Εγκατάσταση χωρίς υποστήριξη DSO** +--------------------------------------------------------------------- + +- [3.1 Αρχίζοντας..](#ss3.1) +- [3.2 Εγκατάσταση των προαπαιτούμενων.](#ss3.2) +- [3.3 Εγκατάσταση του ApacheJserv](#ss3.3) +- [3.4 Eγκατάσταση του apache και του mod\_ssl με ένα μόνο configure (μαγεία!)](#ss3.4) +- [3.5 Τελευταία βήματα.](#ss3.5) + +**4. Εγκατάσταση με υπστήριξη DSO (Dynamic Shared Object)** +----------------------------------------------------------------------------------------- + +- [4.1 Aρχίζοντας.](#ss4.1) +- [4.2 Apache & mod\_ssl configuration σε ένα (ξανά!)](#ss4.2) +- [4.3 Εγκατάσταση ApacheJserv](#ss4.3) +- [4.4 Τελευταία βήματα.](#ss4.4) +- [4.5 Έλεγχος.](#ss4.5) + +**5. Tι να προσέξετε.** +----------------------------------------------------- + +**6. Feedback** +--------------------------------------------- + + +### [1. Tι πρέπει να ξέρετε.]{#s1} + +**Σύστημα εγκατάστασης** + +: Slackware 7.0 (kernel 2.2.14) + +**Σημειώσεις** + +: - Αν ζείτε στις Η.Π.Α η εγκατάσταση είναι διαφορετική. + - Διαλέχτε είτε WITHOUT DSO είτε DSO installation.. + - Υποθέτω οτι έχετε μια κάποια γνώση του configure script. + - Μετά τις 8/2/2000 τα ίδια βήματα ισχύουν για τον apache\_1.3.12 με mod\_ssl-2.6.0-1.3.12 . + + +### [2. Απαραίτητα αρχεία και που θα τα βρείτε.]{#s2} + +Αναγκαία αρχεία και που θα βρείτε τις τελευταίες εκδόσεις τους.. + +mod\_ssl-2.5.0-1.3.11.tar.gz\ +[www.modssl.org](http://www.modssl.org) + +openssl-0.9.4.tar.gz\ +[www.openssl.org](http://www.openssl.org) + +ApacheJserv-1.1.tar.gz\ +[java.apache.org](http://java.apache.org) + +jdk-1.2.2-RC4-linux-i386-glibc-2.1.2.tar.gz (or .bz2 )\ + + +jsdk20-solaris2-sparc.tar.Z\ + + +apache-1.3.11.tar.gz\ +[www.apache.org](http://www.apache.org) + + +### [3. Εγκατάσταση χωρίς υποστήριξη DSO]{#s3} + +### [3.1 Αρχίζοντας..]{#ss3.1} + +Διάλεγουμε ένα κατάλογο εργασίας (π.χ /root/work ) και αντιγράφουμε όλα τα παραπάνω αρχεία εκεί.. + +cd /root/work\ +tar -zxvf mod\_ssl-2.5.0-1.3.11.tar.gz\ +tar -zxvf openssl-0.9.4.tar.gz\ +tar -zxvf ApacheJserv-1.1.tar.gz\ +tar -zxvf jdk-1.2.2-RC4-linux-i386-glibc-2.1.2.tar.gz\ +tar -zxvf jsdk20-solaris2-sparc.tar.gz\ +tar -zxvf apache-1.3.11.tar.gz + +### [3.2 Εγκατάσταση των προαπαιτούμενων.]{#ss3.2} + +Εγκαθιστούμε τώρα τα αναγκαία από το jserv και το ssl πακέτα.. + +-openssl-0.9.4 (προαπαιτούμενο του mod\_ssl)- + + cd openssl-0.9.4 + ./config + make + make test + cd .. + +-jdk ( προαπαιτούμενο του by jserv)- + + cd jdk-1.2.2-RC4-linux-i386-glibc-2.1.2 + + Απλή εγκατάσταση , δεν χρειάζεται compile ( βλέπε README ) + Yποθέτουμε οτι τελικά εγκαθίσταται στο /usr/local/jdk + + cd .. + +-jsdk (προαπαιτούμενο του jserv)- + +Tα ίδια με το προηγούενο.. Yποθέτουμε οτι τελικά εγκαθίσταται στο /usr/local/jsdk + +### [3.3 Εγκατάσταση του ApacheJserv]{#ss3.3} + +Κάνουμε ένα (προαπαιτούμενο από το jserv ) configure στο top directory του apache: + + cd apache_1.3.11 + ./configure --prefix=/usr/local/apache + make install + cd .. + +Eγκαθιστούμε το ΑpacheJserv : + + cd ApacheJserv-1.1 + ./configure \ + + --prefix=/usr/local/jserv \ + --with-apache-src=../apache_1.3.11 \ + --with-jdk-home=/usr/local/jdk \ + --with-JSDK=/usr/local/jsdk \ + --enable-EAPI + + make + make install + +### [3.4 Eγκατάσταση του apache και του mod\_ssl με ένα μόνο configure (μαγεία!)]{#ss3.4} + +Κάνουμε configure τον apache μέσω του mod\_ssl : + + cd mod_ssl-2.5.0-1.3.11 + ./configure \ + + --prefix=/usr/local/apache \ + --with-apache=../apache_1.3.11 \ + --with-ssl=../openssl-0.9.4 \ + --activate-module=src/modules/jserv/libjserv.a \ + --enable-module=ssl \ + --enable-suexec \ (OPTIONAL) + --suexec-caller=nobody (OPTIONAL) + [ ..more apache options.. ] + cd .. + +Προσθέτουμε στο \"apache\_1.3.11/src/Configuration\" στο τέλος του αρχείου : + +AddModule modules/jserv/libjserv.a + +Κάνουμε μετά στον κατάλογο apache\_1.3.11 : + + make + make certificate TYPE=custom (or TYPE=dummy) + make install + +### [3.5 Τελευταία βήματα.]{#ss3.5} + +Βάζουμε κάπου στο httpd.conf : + +Include /usr/local/jserv/etc/jserv.conf + +Κάνουμε επίσης : chmod o+w /usr/local/jserv/logs + +Ξεκινάμε τον apache με υποστήριξη ssl : + +/usr/local/apache/bin/apachectl startssl + +Eλέγχουμε το jserv : + +http://server.domain.com/servlets/Hello + +Ελέγχουμε το ssl : + +https://server.domain.com/ + + +### [4. Εγκατάσταση με υπστήριξη DSO (Dynamic Shared Object)]{#s4} + +### [4.1 Aρχίζοντας.]{#ss4.1} + +Απλά επαναλάβετε τα βήματα 3.1 και 3.2 (χρειάζονται και εδώ :) ) + +### [4.2 Apache & mod\_ssl configuration σε ένα (ξανά!)]{#ss4.2} + + cd mod_ssl-2.5.0-1.3.11 + + ./configure \ + + --prefix=/usr/local/apache \ + --with-apache=../apache_1.3.11/ \ + --with-ssl=../openssl-0.9.4 \ + --enable-shared=ssl \ + --enable-rule=SHARED_CORE \ + --enable-module=so \ + --enable-suexec \ (OPTIONAL) + --suexec-caller=nobody (OPTIONAL) + [..more apache options..] + cd .. + + cd apache_1.3.11 + + make + make certificate TYPE=custom (or TYPE=dummy) + make install + + cd .. + +### [4.3 Εγκατάσταση ApacheJserv]{#ss4.3} + + cd ApacheJserv-1.1 + + ./configure \ + + --prefix=/usr/local/jserv \ + --with-apxs=/usr/local/apache/bin/apxs \ + --with-jdk-home=/usr/local/jdk/ \ + --with-JSDK=/usr/local/jsdk/ + + make + make install + +### [4.4 Τελευταία βήματα.]{#ss4.4} + + Bάζουμε κάπου στο httpd.conf : + + Include /usr/local/apache/conf/jserv/jserv.conf + + Επίσης στο AddModules section του httpd.conf: + + AddModule mod_jserv.c + +### [4.5 Έλεγχος.]{#ss4.5} + +Ξεκινάμε τον apache με υποστήριξη ssl : + +/usr/local/apache/bin/apachectl startssl + +Eλέγχουμε το jserv : + +http://server.domain.com/servlets/Hello + +Ελέγχουμε το ssl : + +https://server.domain.com/ + +:) + + +### [5. Tι να προσέξετε.]{#s5} + +Εαν έχετε 2 ή παραπάνω apache δαίμονες να ακούνε σε διαφορετικές IP διευθύνσεις στο ίδιο μηχάνημα (π.χ με IP alias) τότε μάλλον έχετε ενεργοποιήσει την Listen +εντολή στο httpd.conf : + + Listen xxx.yyy.zzz.vvv:80 + +Aν όντως συμβαίνει αυτό τότε κάντε σχόλιο την παρακάτω γραμμή στο httpd.conf στο οποίο έχετε ενεργοποιήσει την εντολή Listen : + + . + . + #Listen 80 <-- σχόλιο + Listen 443 + . + . + +Εάν έχετε και τις 2 Listen εντολές ενεργοποιημένες τότε ο apache den Θα ξεκινήσει + + +### [6. Feedback]{#s6} + +ΠΑΡΑΚΑΛΩ στείλτε μου πληροφορίες ( λάθη ή ο,τιδήποτε ) για να ξέρω αν σας βοήθησε καθόλου..\ +e-mail : [kgeorga\@it.teithe.gr.gr](mailto:kgeorga@it.teithe.gr) + diff --git a/content/articles/24/01_editorial.md b/content/articles/24/01_editorial.md new file mode 100644 index 0000000..3fcec21 --- /dev/null +++ b/content/articles/24/01_editorial.md @@ -0,0 +1,46 @@ ++++ +title = 'Editorial' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 24'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz**\... Τεύχος Παράδοσης / Παραλαβής* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Γεια σας, για τελευταία φορά από μένα από αυτό το βήμα, του αρχισυντάκτη. Από το επόμενο τεύχος, ο αρχισυντάκτης του περιοδικού αλλάζει, και εγώ μετατρέπομαι σε +απλό αρθρογράφο.\ +Λίγες εξηγήσεις για αυτό, νομίζω ότι σας τις οφείλω. Από ιδρύσεως του Magaz, δηλαδή, το 1ο τεύχος που βγήκε τον Ιανουάριο του 1998, και μέχρι και αυτό το τεύχος +(24o, Μάιος του 2000), αρχικά ανεπίσημα και στη συνέχεια επίσημα (εκ των πραγμάτων βέβαια), είχα την ευθύνη αρχισυνταξίας του Magaz. Αν και πίστευα ότι δεν +χρειάζεται να υπάρχει αρχισυντάκτης, από τα πράγματα αποδείχτηκε ότι αυτός που \"κυνηγάει\" τους αρθρογράφους, συντονίζει τι άρθρα θα γράψουν, τα στέλνει στον +διορθωτή, φτιάχνει τις σελίδες, τις \"μοιράζει\" στα mirrors και πολλά άλλα, είναι ένας άτυπος έστω αρχισυντάκτης. Αυτή η ιστορία με έχει κουράσει πλέον. Όπως +θα έχετε παρατηρήσει, τα άρθρα μου (πλην του editorial) συνεχώς μειώνονται στο περιοδικό. Αυτό είναι κάτι που δεν ήθελα να συμβεί. Συμβαίνει όμως, λόγω ελλείψης +χρόνου. Αισθάνομαι ότι υπηρέτησα καλά το Magaz από αυτή τη θέση, τα δυόμιση αυτά χρόνια. Η αλήθεια είναι ότι δεν το παραδίδω και στην καλύτερη κατάσταση, έχει +όμως δυναμική. + +Προφανώς θα συνεχίσω να είμαι τριγύρω, κυρίως γράφοντας άρθρα πλέον, εκμεταλλευόμενος τον χρόνο που θα εξοικονομήσω από την αρχισυνταξία, αλλά και σαν βοηθός +του νέου αρχισυντάκτη, αντικαθιστώντας τον όποτε χρειάζεται (σε δυό μήνες ας πούμε που θα παντρευτεί, πάλι εγώ θα βγάλω το τεύχος). + +Αναλαμβάνει νέος αρχισυντάκτης ο παλιότερος τακτικός συνεργάτης του περιοδικού που παραμένει ενεργός (μία ευνόητη και φυσιολογική εξέλιξη νομίζω), ο [Βαγγέλης +Παπαδογιαννάκης](mailto:papas@hellug.gr). Τα άρθρα του συνήθως είναι πρώτα από πλευράς αναγνωσιμότητας σε όποιο τεύχος συμμετέχουν σύμφωνα με τα στατιστικά μας, +ενώ έχει και το ρεκόρ να έχει γράψει το άρθρο με την μεγαλύτερη αναγνωσιμότητα που εμφανίστηκε στο Magaz από τότε που κρατάμε στατιστικά (το Enlightenment του +τεύχους 14). Ο Βαγγέλης έχει μεταξύ των άλλων και τις τεχνικές γνώσεις να διορθώσει τυχόν προβλήματα που θα προκύψουν, και με βάση όλα τα παραπάνω φαντάζομαι +ότι η μετάβαση θα γίνει χωρίς καν να το καταλάβετε (ή, ελπίζω, αν το καταλάβετε, θα δείτε βελτίωση). + +Είμαι σίγουρος ότι ο Βαγγέλης θα δώσει νέα πνοή στο Magaz, ενώ περιμένω από τους μέχρι τώρα συνεργάτες του Magaz (τους οποίους και ευχαριστώ προσωπικά για την +καλή συνεργασία που είχαμε) να τον στηρίξουν και βοηθήσουν στο δύσκολο έργο που αναλαμβάνει. Το Magaz πάντα στηριζόταν, και θα συνεχίσει να στηρίζεται, στην +καλή θέληση και διάθεση όλων των μελών της κοινότητας να στείλουν άρθρα. Αν αυτή η διάθεση σταματήσει να υπάρχει, το Magaz απλά θα σταματήσει να βγαίνει. Είναι +λοιπόν ευθύνη όλων μας να συνεισφέρουμε στην συνέχιση του Magaz. + +Να επισημάνω για άλλη μία φορά (τρίτη) ότι το Magaz δεν βγαίνει κάθε μήνα. Βγαίνει 10 φορές το χρόνο. Αυτό το λέω, για να προλάβω αντιδράσεις του τύπου \"άλλαξε +η δομή του και εξαφανίστηκε\" :-) + +Να στείλω τέλος, για τελευταία φορά ως αρχισυντάκτης του περιοδικού, μία πρόσκληση προς κάθε εύηκοον ους για αποστολή άρθρων.\ +Ευχαριστώ όλους που με ανεχτήκατε σε αυτό το ταξίδι των δυόμιση χρόνων. Θα τα ξαναπούμε πιστεύω, από άλλο μετερίζι. Εύχομαι στον νέο αρχισυντάκτη καλή δύναμη +και καλή επιτυχία στο δύσκολο έργο που αναλαμβάνει. + +Καλή ανάγνωση\... diff --git a/content/articles/24/02_xbasic.md b/content/articles/24/02_xbasic.md new file mode 100644 index 0000000..b79be35 --- /dev/null +++ b/content/articles/24/02_xbasic.md @@ -0,0 +1,236 @@ ++++ +title = 'Xbasic' +date = '0000-04-01T00:00:00Z' +description = '' +author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)' +issue = ['Magaz 24'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C. Μέρος ΙΙ* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μετα από μια πρώτη ματιά και την πρώτη προσπάθεια να γράψω ένα πρόγραμμα σκέφτηκα ότι πρώτα πρέπει να εξοικειωθώ με το περιβάλλον ανάπτυξης εφαρμογών της XBASIC +για να μπορώ να δουλέψω καλύτερα. Στο σημερινό άρθρο θα σας παρουσιάσω το περιβάλλον ανάπτυξης για να είναι κατανοητό το παράδειγμα εφαρμογής που θα γραφτεί +μετά. + +**1. Περιβάλλον συγγραφής του κώδικα** +--------------------------------------------------------------- + +**2. Παράθυρο εμφάνισης αποτελεσμάτων** +---------------------------------------------------------------- + +**3. Παράθυρο κατασκευής γραφικών αντικειμένων** +------------------------------------------------------------------------- + +**4. Επίλογος** +---------------------------------------- + + +### [1. Περιβάλλον συγγραφής του κώδικα]{#s1} + +![](/24/img/xbdev1.gif) + +Σε αυτό το παράθυρο γράφουμε τον κώδικα και έχουμε όλες τις δυνατότητες που έχουν τα σύγχρονα περιβάλλοντα προγραμματισμού. Πχ. σημεία προσωρινής παύσης +(breakpoints), εμφάνιση τιμών μεταβλητών κ.λ.π.\ +Αναλυτικά θα δούμε τις κυριώτερες επιλογές των μενού. + +- FileNew\ + Επιλέγεται νέο αρχείο. Διαγράφεται ότι έχει παραμείνει στην μνήμη και διακόπτεται οποιαδήποτε λειτουργία. Τα δεδομένα δεν αποθηκεύονται έτσι πρέπει να έχει + γίνει πριν αποθήκευση αν θέλουμε να χρησιμοποιήσουμε πάλι το πρόγραμμα που μόλις είχαμε γράψει. Η επιλογή αυτή έχει μας δίνει την δυνατότητα να + δημιουργήσουμε 3 διαφορετικούς τύπους κώδικα. + 1. Απλό αρχείο χαρακτήρων (text file) + 2. Κανονικό πρόγραμμα BASIC (χωρίς την χρήση γραφικού περιβάλλοντος) + 3. Πρόγραμμα που χρησιμοποιεί γραφικό περιβάλλον (φόρμες, κουμπιά κ.λ.π.) +- FileTextLoad\ + Με αυτή την επιλογή μπορούμε να φορτώσουμε στο περιβάλλον αρχεία χαρακτήρων (text files) που μπορεί να μην είναι πρόγραμμα πχ. σημειώσεις. Στο περιβάλλον + δεν υποστηρίζεται η εμφάνιση χαρακτήρων πάνω από το 128 όπου αν υπάρχουν τέτoιοι χαρακτήρες θα φαίνονται περίεργα. Επίσης στο αρχείο χαρακτήρων δεν πρέπει + να υπάρχουν χαρακτήρες NULL. Βέβαια εδώ δημιουργείται το ερώτημα τι γινέται με τα Ελληνικα; Νομίζω όμως οτι μπορούμε να ξεπεράσουμε αυτόν τον περιορισμό αν + τα μηνύματα του προγράμματος δεν είναι μέσα στο ν κώδικα αλλά σε αρχείο όπου θα διαβάζεται από το πρόγραμμα. Αυτός ο τρόπος δίνει επίσης την δυνατότητα να + έχουμε διαφορετικά αρχεία για κάθε γλώσσα και έτσι νομίζω ότι ο περιορισμός του περιβάλλοντος να μην δέχεται χαρακτήρες \> 128 δεν είναι σπουδαίο πρόβλημα. +- FileLoad\ + Φορτώνεται στο περιβάλλον ένα πρόγραμμα που εχει αποθηκευθεί από πριν. +- FileSave\ + Αποθηκεύεται το τρέχον πρόγραμμα σε αρχείο. +- FileMode\ + Επιλέγεται ο τρόπος λειτουργίας του περιβάλλοντος. Text mode είναι για να μπορούμε να επεξεργαζόμαστε οποιοδήποτε κείμενο ενώ το Program Mode μας δίνει τις + ευκολίες που χρειαζόμαστε για το γράψιμο προγραμμάτων +- FileRename\ + Το επιλέγουμε για να αλλάξουμε το όνομα του προγράμματος που έχουμε στην μνήμη. +- FileQuit\ + Δηλώνουμε ότι θέλουμε να εγκαταλείψουμε το περιβάλλον εργασίας και άν έχουμε κάνει μεταβολές στο πρόγραμμά μας το περιβάλλον μας ζητά επιβεβαίωση και φύλαξη + των τελευταίων αλλαγών άν θέλουμε. +- EditCut\ + Διαγράφει καί αποθηκεύει σε προσωρική μνήμη (clipboard) το επιλεγμένο κείμενο. +- EditGrab\ + Αντιγράφει το επιλεγμένο κείμενο στην προσωρινή μνήμη (clipboard). +- EditPaste\ + Παρεμβάλλει στο τρέχον σημείο ότι είναι αποθηκευμένο στην μνήμη. +- EditFind\ + Αναζήτηση κειμένου στο πρόγραμμα +- Edit\_\_\ + Αντικατάσταση κειμένου με άλλο +- EditRead\ + Ανάγνωση αρχείου στην προσωρινή μνήμη (clipboard). +- EditWrite\ + Εγγραφή σε αρχείο της προσωρινής μνήμης (clipboard). +- EditAbandon\ + Ακύρωση όλων των αλλαγών στην τρέχουσα ρουτίνα. +- ViewFunction\ + Εμφανίζεται παράθυρο με όλες τις ρουτίνες του προγράμματος και επιλέγεται η επιθυμητή. +- ViewPriorFunction\ + Εμφανίζεται η προηγούμενη ρουτίνα +- ViewNewFunction\ + Δημιουργούμε μια νέα ρουτίνα και καθορίζουμε το όνομά της, παραμέτρους κλπ. +- ViewDeleteFunction\ + Εμφανίζεται κατάλογος με όλες τις ρουτίνες και επιλέγουμε αυτήν πρός διαγραφή. +- ViewRenameFunction\ + Δίνεται η δυνατότητα αλλαγής ονόματος της τρέχουσας ρουτίνας. Με την εντολή αλλαγής όλες οι κλήσεις σε αυτή την ρουτίνα προσαρμόζονται ανάλογα. +- ViewCloneFunction\ + Αναπαράγεται ένα πιστό αντίγραφο κάποιας ρουτίνας. +- ViewLoadFunction\ + Φορτώνεται μια ρουτίνα από αρχείο και ενσωματώνεται στο ήδη υπάρχον πρόγραμμα. +- ViewSaveFunction\ + Αποθηκεύεται μια ρουτίνα σε αρχείο για την μεταφορά της όπως είναι σε άλλο πρόγραμμα. +- Options\ + Επηρεάζεονται οι παράμετροι εμφάνισης του περιβάλλοντος και οι παράμετροι της μεταγλώττισης (Compile). +- RunStart\ + Εκτελείται το τρέχον πρόγραμμα +- RunContinue\ + Συνεχίζεται η εκτέλεση μετά από διακοπή της εκτέλεσης του προγράμματος. +- RunPause\ + Διακοπή της εκτέλεσης του προγράμματος για τον έλεγχο μεταβλητών ή κλήσεων ρουτινών. +- RunKill\ + Τερματισμός της λειτουργίας του προγράμματος και μηδενισμός μεταβλητών. +- RunRecompile\ + Γίνεται μεταγλώττιση του προγράμματος χωρίς να εκτελεστεί για το έλεγχο λαθών σύνταξης κλπ. +- RunAssembly\ + Γίνεται μεταγλώττιση του προγράμματος σε γλώσσα Assembly και αποθηκεύεται στον δίσκο με το επίθεμα .a +- RunLibrary\ + Γίνεται μεταγλώττιση του προγράμματος σε γλώσσα Assembly και αποθηκεύεται στον δίσκο με το επίθεμα .a για να χρησιμοποιηθεί για την δημιουργία βιβλιοθηκών + ρουτινών. +- DebugToggleBreakpoint\ + Τοποθετείται/ακυρώνεται στην τρέχουσα γραμμή σημείο διακοπής εκτέλεσης (Breakpoint) για έλεγχο της ροής και τνω μεταβλητών του προγράμματος. +- DebugClearBreakpoints\ + Ακυρώνονται τα σημεία διακοπής (Breakpoints) σε όλο το πρόγραμμα. +- DebugEraseBreakpoints\ + Ακυρώνονται τα σημεία διακοπής (Breakpoints) στην τρέχουσα ρουτίνα. +- DebugMemory\ + Εμφανίζονται τα περιεχόμενα της μνήμης σε σημεία πού επιλέγετε. +- DebugAssembly\ + Εμφανίζεται η τρέχουσα γραμμή σε μορφή Assembly και μπορούμε να προχωράμε τις εντολές βήμα-βήμα. +- DebugRegisters\ + Εμφανίζονται τα περιεχόμενα των καταχωρητών (Registers) του επεξεργαστή. +- Help\ + Βοήθεια για την λειτουργία το περιβάλλοντος προγραμματισμού. + + +### [2. Παράθυρο εμφάνισης αποτελεσμάτων]{#s2} + +![](/24/img/xbdev2.gif) + +Σε αυτό το πραράθυρο εμφανίζονται τα μυνήματα εισόδου/εξόδου όταν η εφαρμογή μας δεν είναι κατασκευασμένη για γραφικό περιβάλλον. Εμφανίζονται τα αποτελέσματα +(output) ή οι ερωτήσεις για πληκτρολόγηση δεδεομένων (input) με το απλό στύλ της κονσόλας.\ +Για απλά προγράμματα χωρίς περίπλοκη εισαγωγή δεδομένων είναι ότι πρέπει γιατί δεν υπάρχει λόγος να μπλέξουμε με γραφικό περιβάλλον στις απλές εφαρμογές. + + +### [3. Παράθυρο κατασκευής γραφικών αντικειμένων]{#s3} + +![](/24/img/intro3.gif) + +Με την βοήθεια του toolkit μπορούμε να δημιουργήσουμε παράθυρα,κουμπιά και ότι άλλο προσφέρει το GuiDesigner για να κατασκευάσουμε το περιβάλλον της εφαρμογής +μας. Για να φανούν οι δυνατότητες του, θα αναφέρω παρακάτω ένα-ένα τα εικονίδια και τι κάνει το κάθε ένα. Πρώτα από όλα να δούμε τι κάνουν τα μενού. + +![](/24/img/guiguide35.gif) + +Επιλέγοντας το Window μπορούμε να δημιουργήσουμε νέο παράθυρο, να εξαφανίσουμε το τρέχον, να ανακαλέσουμε κάποιο παλαιό για διόρθωση/συμπλήρωμα, να +αποθηκεύσουμε αυτό που έχουμε δημιουργήσει ή και να διαγράψουμε μόνιμα το τρέχον παράθυρο. Προσοχή! Δεν υπάρχει τρόπος να ανακληθεί παράθυρο που έχει διαγραφεί. +Ο τρόπος αποθήκευσης είναι τέτοιος ώστε τα παράθυρα αποθηκεύνται με ειδικές παραμέτρους για να μπορούν να ενσωματωθούν και να επικοινωνούν με την εφαρμογή μας. +Η τρίτη και δεύτερη επιλογή από το τέλος κάνει αυτή την μετατροπή στην μνήμη για να είναι άμεσα διαθέσιμες οι εντολές στο πρόγραμμά μας. Η τελευταία επιλογή +είναι φανερό ότι είναι το τέλος λειτουργίας του GuiDesigner. + +![](/24/img/guiguide36.gif) + +Επιλέγοντας το Grid μπορούμε να ρυθμίσουμε την εμφάνιση, την συμεριφορά, την σειρά και την εξάρτηση (ποιό αντικείμενο ανήκει που, ομάδες κλπ) του κάθε +αντικειμένου. Η τελευταία επιλογή είναι για την διαγραφή του τρέχοντος αντικειμένου.\ +Παρακάτω θα δούμε ένα ένα τα αντικείμενα του γραφικού περιβάλλοντος ένα ένα. + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ XuiColor. Επιλογή χρωμάτων (125 διαθέσιμα) + ![](/24/img/guiguide4.gif) + + ![](/24/img/guiguide5.gif) XuiLabel. Εμφάνιση γραμμών κειμένου ή εικόνας + + ![](/24/img/guiguide6.gif) XuiCheckBox Επιλογή ανεξαρτήτων επιλογών (όχι μία από ομάδα).. + + ![](/24/img/guiguide7.gif) XuiRadioBox Επιλογή από μια ομάδα XuiRadioBox. + + ![](/24/img/guiguide8.gif) XuiPressButton Επιλέγεται όταν πατήσουμε το ποντίκι. + + ![](/24/img/guiguide9.gif) XuiPushButton Επιλέγεται όταν πατήσουμε και αφήσουμε το ποντίκι. + + ![](/24/img/guiguide10.gif) XuiToggleButton Με το πρώτο πάτημα ένεργοποιείται και με το δεύτερο + απενεργοποιείται. + + ![](/24/img/guiguide11.gif) XuiScrollBarH Οριζόντια κίνηση/τοποθέτηση. + + ![](/24/img/guiguide12.gif) XuiScrollBarV Κάθετη κίνηση/τοποθέτηση. + + ![](/24/img/guiguide13.gif) XuiTextLine Εισαγωγή κειμένου (μία γραμμή). + + ![](/24/img/guiguide14.gif) XuiTextArea Εισαγωγή κειμένου (πολλές γραμμές). + + ![](/24/img/guiguide15.gif) XuiMenu Δημιουργία μενού εντολών. + + ![](/24/img/guiguide16.gif) XuiMenuBar Μενού επιλογών σε οριζόντια διάταξη. + + ![](/24/img/guiguide17.gif) XuiPullDown Μενού επιλογών σε κάθετη διάταξη. + + ![](/24/img/guiguide18.gif) XuiList Επιλογή ενός στοιχείου διαθέσιμου από μια λίστα. + + ![](/24/img/guiguide19.gif) ![](/24/img/guiguide20.gif) XuiMessage1B/2B/3B/4B Εμφάνιση μηνύματος με 1/2/3/4 κουμπιά επιλογών + ![](/24/img/guiguide21.gif) ![](/24/img/guiguide22.gif) αντίστοιχα. + + ![](/24/img/guiguide23.gif) XuiProgress Εμφάνιση ποσοστού εκτέλεσης/υπολοίπου για κάποια + διαδικασία. + + ![](/24/img/guiguide24.gif) ![](/24/img/guiguide25.gif) XuiDialog2B/3B/4B Εμφάνιση μηνύματος και αποδοχή απάντησης από τον + ![](/24/img/guiguide26.gif) χρήστη με 2/3/4 κουμπιά επιλογών. + + ![](/24/img/guiguide27.gif) XuiDropButton Εμφάνιση λίστας επιλογών με πάτημα κουμπιού. + + ![](/24/img/guiguide28.gif) XuiDropBox Καταχώρηση κειμένου ή επιλογή από λίστα επιλογών + + ![](/24/img/guiguide29.gif) XuiListButton Εμφάνιση λίστας επιλογών με πάτημα κουμπιού με μπάρα + μετακίνησης στην λίστα. + + ![](/24/img/guiguide30.gif) XuiListBox Καταχώρηση κειμένου ή επιλογή από λίστα επιλογών με + μπάρα μετακίνησης στην λίστα . + + ![](/24/img/guiguide31.gif) XuiRange Εμφάνιση τιμής και μεταβολή της +- με το πάτημα + κουμπιών. + + ![](/24/img/guiguide32.gif) XuiFile Ετοιμο παράθυρο για την επιλογή αρχείου + + ![](/24/img/guiguide33.gif) XuiFont Ετοιμο παράθυρο επιλογής χαρακτήρων. (Είδος, μέγεθος, + έντονα κλπ.) + + ![](/24/img/guiguide34.gif) XuiListDialog2B Εμφάνιση μηνύματος και αποδοχή απάντησης από τον + χρήστη με 2 κουμπιά + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +Αυτά είναι τα διάφορα αντικείμενα που μπορούμε να χρησιμοποιήσουμε για να κατασκευάσουμε την παραθυρική εφαρμογή μας. + + +### [4. Επίλογος]{#s4} + +Μετά την πρώτη γνωριμία με το περιβάλλον στο επόμενο άρθρο θα δούμε τα βασικά δομικά στοιχεία που αποτελούν μια εφαρμογή XBASIC είτε σε περιβάλλον κονσόλας είτε +σε παραθυρικό περιβάλλον (φόρμες, κουμπιά, πεδία κλπ.) Θα γίνουν και κάποια συγκριτικά τεστ με τις άλλες δύο Basic που ξέρω (Basic για το DOS και Visual Basic +gia ta Windows) έτσι για να δούμε και τί γίνεται από ταχύτητες και θα αναφέρω ότι άλλο δώ ότι είναι ενδιαφέρον κάποιος να ξέρει πρίν ξενικήσει να γράψει την +πρώτη του εφαρμογή. Θα τα ξαναπούμε στο επόμενο Magaz. + diff --git a/content/articles/24/03_gawk.md b/content/articles/24/03_gawk.md new file mode 100644 index 0000000..4d082c6 --- /dev/null +++ b/content/articles/24/03_gawk.md @@ -0,0 +1,505 @@ ++++ +title = 'Προγραμματισμός με gawk μέρος 2ο' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 24'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό αποτελεί το δεύτερο (και τελευταίο) μέρος της παρουσίασης της γλώσσας awk με στόχο την βοήθεια για την εκμάθησή της.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Ενσωματωμένες συναρτήσεις** +------------------------------------------------------- + +**2. Αριθμητικοί τελεστές** +-------------------------------------------------- + +**3. Εντολές ελέγχου ροής** +-------------------------------------------------- + +- [3.1 If](#ss3.1) +- [3.2 Υποθετικός τελεστής](#ss3.2) +- [3.3 βρόγχοι](#ss3.3) + +**4. Advanced Input** +-------------------------------------------- + +- [4.1 Next](#ss4.1) +- [4.2 Exit](#ss4.2) +- [4.3 Getline](#ss4.3) +- [4.4 Input από αρχείο](#ss4.4) +- [4.5 Input από εντολή](#ss4.5) +- [4.6 Τερματίζοντας το Input από αρχείο ή εντολή](#ss4.6) + +**5. Advanced Output** +--------------------------------------------- + +- [5.1 Printf](#ss5.1) +- [5.2 Output σε αρχείο](#ss5.2) +- [5.3 Output σε εντολή](#ss5.3) +- [5.4 Τερματίζοντας το Output από αρχείο ή εντολή](#ss5.4) + +**6. Συναρτήσεις** +----------------------------------------- + +- [6.1 Δήλωση της συνάρτησης](#ss6.1) +- [6.2 Συνάρτηση με παραμέτρους](#ss6.2) +- [6.3 Η δήλωση return](#ss6.3) +- [6.4 Η συνάρτηση system](#ss6.4) + +**7. Βιβλιογραφία** +------------------------------------------ + + +### [1. Ενσωματωμένες συναρτήσεις]{#s1} + +Παρακάτω, μπορείτε να δείτε έναν πίνακα με χρήσιμες συναρτήσεις που μπορείτε να χρησιμοποιήσετε σε ένα πρόγραμμά σας: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Επιστρέφει το ημίτονο του x + sin(x) + + cos(x) Επιστρέφει το συνημίτονο του x + + int(x) Επιστρέφει το ακέραιο μέρος του x + + log(x) Επιστρέφει το φυσικό λογάριθμο του x + + exp(x) Eπιστρέφει το e υψωμένο στη δύναμη του x + + sqrt(x) Επιστρέφει την τετραγωνική ρίζα του x + + getline() Διαβάζει την επόμενη γραμμή από το αρχείο.\ + Επιστρέφει 0 για το τέλος του αρχείου, διαφορετικά,\ + επιστρέφει 1 + + rand() Επιστρέφει έναν τυχαίο αριθμό ανάμεσα στο 0 και στο 1. + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + + +### [2. Αριθμητικοί τελεστές]{#s2} + +Εδώ, επίσης θα δείτε έναν πίνακα, ο οποίος παρουσιάζει τους τελεστές που μπορείτε να χρησιμοποιήσετε για να κάνετε αριθμητικές πράξεις: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Υψώνει το x στη δύναμη του y + x\^y + + x\*\*y Κάνε ακριβώς την ίδια δουλειά με τον παραπάνω τελεστή + + x%y Υπολογίζει το υπόλοιπο της διαίρεσης x/y + + x+y Προσθέτει το x στο y + + x-y Αφαιρεί το y από το x + + x\*y Πολλαπλασιάζει το x με το y + + x/y Διαιρεί το x με το y + + -x Επιστρέφει τον αντίθετο του x (αλλάζει το πρόσημο) + + ++x Αυξάνει τον x κατά 1 και χρησιμοποιεί την τιμή (όλου αυτού) + + x++ Χρησιμοποιεί πρώτα την τιμή του x και μετά την αυξάνει κατά 1 + + \--x (αντίστοιχα με τα παραπάνω) + + x\-- (αντίστοιχα με τα παραπάνω + + x=y Αποδίδει την τιμή του y στον x + + x+=y Ισοδυναμεί με την παράσταση x=x+y + + x/=y Iσοδυναμεί με την παράσταση x=x/y + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +**Παραδείγματα**\ +Ακόμα μπερδευόσαστε με τα x++ και ++x ; :-) Πάμε, λοιπόν, να δούμε μέσα από παραδείγματα τί ακριβώς προσφέρουν: + +x++\ +Αυτή εδώ η παράσταση ισοδυναμεί με την παράσταση x=x+1. Λοιπόν, προσέξτε: όσοι ασχολούνται για πρώτη φορά με τον προγραμματισμό, πρέπει να δώσουν ιδιαίτερη +προσοχή με το σύμβολο της ισότητας. Εδώ το = δεν σημαίνει ακριβώς \"ίσον\" !!! Το σύμβολο = χρησιμοποιείται για να αποδώσει τιμές. Δηλαδή, στην ισότητα x=x+1, +δεν πρέπει κανείς να πάει και \"να φέρει το x στο πρώτο μέλος, οπότε να μείνει 0=1\" !!! Απλά, το = κάνει το εξής: αποδίδει στην μεταβλητή x την τιμή που +υπάρχει στο δεξί μέρος του, δηλαδή, αν αρχικά είχαμε ορίσει ότι το x είναι ίσο με 3, τώρα, μετά από αυτήν την δήλωση, το x θα είναι ίσο με 4. + +y = x++\ +Αυτή εδώ η παράσταση, αντιστοιχεί σε δύο παραστάσεις, στην y=x και στην x=x+1. Δηλαδή, αν αρχικά το x είναι ίσο με 3, τότε το y ισούται με 3 (**ΠΡΟΣΟΧΗ εδώ**), +ενώ το x πιά ισούται με 4 !!!! Κοιτάξτε και το παρακάτω παράδειγμα για να καταλάβετε: + +y = \--x\ +Λοιπόν, και αυτή η παράσταση αντιστοιχεί σε άλλες δύο, στην x=x-1 και στην y=x. Μα, θα μου πείτε, αυτές οι δύο δεν έχουν διαφορά με τις παραπάνω. Πρέπει να +λάβετε υπ\' όψιν την σειρά με την οποία εκτελούνται οι παραστάσεις, δηλαδή εδω, **ΠΡΩΤΑ** μειώνεται η τιμή του x κατά 1 και **ΜΕΤΑ** αποδίδεται η τιμή (του +μειωμένου πιά x) στην μεταβλητή y, δηλαδή αν είχαμε αρχικά ότι το x ισούται με 3, τότε τώρα πιά, το x **ΑΛΛΑ ΚΑΙ ΤΟ** y ισούται με 2. + + +### [3. Εντολές ελέγχου ροής]{#s3} + +### [3.1 If]{#ss3.1} + +Απο τη φύση της, η gawk έχει την εξής μορφή: αν το πρότυπο ικανοποιείται, τότε εκτελείται η πράξη. Φυσικά, έχετε τη δυνατότητα να γράψετε ένα πρόγραμμα με +\"υποθετική ροή\". Αυτό μπορείτε να το κάνετε, φυσικά, με το if. + +Η γενική δομή του if έχει ως εξής: + + if (υπόθεση) + εντολή που εκτελείται αν η υπόθεσή μας είναι αληθινή + else + εντολή που εκτελείται αν η υπόθεσή μας δεν είναι αληθινή + +Η υπόθεσή μας μπορεί να είναι οποισδήποτε συνδυασμός προτύπων από αυτά που είπαμε στο 1ο μέρος. Τώρα, αν θέλετε να εκτελούνται περισσότερες από μία εντολές, +μετά τον έλεγχο αληθείας της υπόθεσης, τότε θα πρέπει να \"περικυκλώσετε\" τις εντολές με αγκύλες ({ }), ακριβώς όπως και στη C. + +Μπορείτε να χρησιμοποιήσετε πολλά if στη σειρά (και μετά από ένα else) με τον εξής τρόπο: + + if ("Linux" in magaz_subject) + print "We are studying Linux :-)" + else if ("gawk" in magaz_subject) + print "We are studying awk :-)" + else + print "We are doing nothing :-(" + +### [3.2 Υποθετικός τελεστής]{#ss3.2} + +Η gawk σας παρέχει με αυτόν τον τελεστή, ο οποίος αποτελείται από τρείς παραμέτρους, τη δυνατότητα να εφαρμόζετε if-ελέγχους ανά πάσα στιγμή μέσα στο πρόγραμμά +σας. Η μορφή του είναι η εξής: + + υπόθεση ? αποτέλεσμα σε περίπτωση αλήθειας : εναλλακτικό αποτέλεσμα (σε μη-αληθινή περίπτωση) + +Αυτός ο τελεστής καθιστά τα προγράμματά σας πιο ευανάγνωστα. Ας δούμε ένα παράδειγμα χρήσης του παραπάνω τελεστή σε περίπτωση όπου ανάλογα με τον αριθμό των +αρχείων που αντιγράφηκαν, θέλουμε πληθυντικό ή ενικό: + + { print $1, "αρχεί" $1 != 1 ? "α αντιγράφηκαν" : "ο αντιγράφηκε" } + +Αν θα θέλαμε να γράψουμε το παραπάνω, χρησιμοποιώντας το if, τότε θα γράφαμε: + + if ( $1 != 1 ) + print $1, "αρχεία αντιγράφηκαν" + else + print $1, "αρχείο αντιγράφηκε" + +### [3.3 βρόγχοι]{#ss3.3} + +H awk υποστηρίζει τους βρόγχους do, for και while, όπως ακριβώς αυτοί συντάσσονται στην C. Μια γενική συμβουλή (για όλους τους βρόγχους) είναι να μην ξεχνάτε να +χρησιμοποιείτε αγκύλες ({ }) όταν θέλετε μέσα στο βρόγχο να εκτελέσετε πάνω από μία εντολές. Ένα λάθος που γίνεται συχνά είναι ακριβώς αυτό, να ξεχνάει κανείς +τις αγκύλες. + +#### Do + +Ο βρόγχος do (συνήθως καλείται και do-while) αποτελείται από δύο μέρη: τις εντολές που θέλουμε να εκτελέσουμε και τον (υποθετικό) έλεγχο. Προσέξτε πως αυτός ο +βρόγχος έχει το χαρακτηριστικό να εκτελούνται οι εντολές που του δηλώνουμε τουλάχιστον μία φορά, καθώς ο υποθετικός έλεγχος που \"επιβάλλουμε\" αναγράφεται μετά +την δήλωση των εντολών. Για να το καταλάβετε καλύτερα, ας δούμε τη σύνταξη του do: + + do + εντολές + while (υπόθεση) + + π.χ: + + do + print "Magaz kicks!!" + while ($1 != 1) + +Το μήνυμα της print θα εκτελείται μέχρι το πρώτο πεδίο (\$1) να πάρει την τιμή 1. Όμως, ακόμα και αν το \$1 \"ξεκινάει\" με αρχική τιμή 1, τότε το μήνυμα θα +τυπωθεί. Απλά, όταν θα γίνει ο έλεγχος και \"ικανοποιηθεί\" η while, δεν θα ξαναγυρίσουμε στο do, αλλά το πρόγραμμα θα προχωρήσει στις τυχόν παρακάτω εντολές. + +#### For + +O βρόγχος for είναι ένας πασίγνωστος βρόγχος στις γλώσσες προγραμματισμού. Ας δούμε κατ\' ευθείαν την σύνταξή του για να καταλάβουμε τη λειτουργία του: + + for (i = 0; i < 100; i++) + { + εντολή 1 + εντολή 2 + } + +Παραπάνω, οι εντολές του βρόγχου θα εκτελεστούν 100 φορές!! Ας δούμε γιατί: Αρχικά, ορίζουμε μιά μεταβλητή, την i, η οποία θα μας χρησιμεύσει απλά και μόνο για +το πόσες φορές θα εκτελεστεί ο βρόγχος, και δίνουμε στην i την τιμή 0. Μετά, η for κοιτάει τη 2η δήλωση στην παρένθεση (οι δηλώσεις, υπενθυμίζω, χωρίζονται με +;) και κάνει τον υποθετικό έλεγχο. Στην περίπτωσή μας, ελέγχεται αν η τιμή της μεταβλητής i είναι μικρότερη από 100 και αν είναι, τότε εκτελούνται οι εντολές +που καθορίσαμε. Μετά (και εδώ φαίνεται η \"δυναμη\" της for), δεν χρειάζεται να \"κανονίσουμε\" εμείς την μεταβλητή i, αλλά έχουμε δηλώσει η i να αυξάνεται κατά +1. Η for λοιπόν, αυξάνει την τιμή της i και ξαναρχίζει: κάνει τον έλεγχο, εκτελεί της εντολές, αυξάνει την i κ.ο.κ. \... Όταν, λοιπόν, η i θα αποκτήσει την τιμή +100, τότε δεν θα εκτελεστούν οι εντολές, καθώς το αποτέλεσμα του ελέγχου 100 \< 100 είναι ψευδές (το 100 δεν είναι μικρότερο από το 100 !! :) + +#### While + +Ο βρόγχος while είναι αρκετά απλός και μάλλον θα έχετε ήδη καταλάβει πως λειτουργεί (από το βρόγχο do-while). Σε αντίθεση με την do, οι εντολές εκτελούνται μόνο +αν το αποτέλεσμα του υποθετικού ελέγχου, ο οποίος γίνεται στην αρχή του βρόγχου, είναι αληθής. Ας δούμε τη σύνταξή του: + + while (υπόθεση) + εντολή(ες και μήν ξεχάσετε τις αγκύλες :) + +Γενικά, για τους βρόγχους, να έχετε υπ\' όψιν πως μέσα στις εντολές του βρόγχου, η μεταβλητή πάνω στην οποία γίνεται ο υποθετικός έλεγχος, πρέπει να αλλάζει, +αλλιώς ο βρόγχος μας δεν τελειώνει ποτέ !!! (ατέρμων βρόγχος) + +#### Έλεγχος στους βρόγχους + +Όπως και στις υπόλοιπες γλώσσες προγραμματισμού, έτσι και στην awk, έχετε τη δυνατότητα να \"βγείτε\" από έναν βρόγχο (loop), \"νωρίτερα από το κανονικό\", +δηλαδή χωρίς να \"ικανοποιηθεί\" κάποιος υποθετικός έλεγχος και τερματίσει ο βρόγχος. Αυτό μπορείτε να το κάνετε με δύο εντολές: την break και την continue. + +Με την εντολή break **\*ΑΚΑΡΙΑΙΑ\*** τερματίζετε τον βρόγχο και, φυσικά, όσες εντολές ακολουθούν την break **\*ΜΕΣΑ\*** στον βρόγχο, δεν εκτελούνται, αλλά το +πρόγραμμα θα συνεχίσει, εκτελώντας τις εντολές που τυχόν βρίσκονται μετά τον βρόγχο. Η εντολή break είναι σαν να εκτελείτε εκείνη την στιγμή τον υποθετικό +έλεγχο του βρόγχου, αλλά το αποτέλεσμα **\*ΒΕΒΙΑΣΜΕΝΑ\*** (από την break) είναι μή αληθές (FALSE). + +Αντίθετα, η εντολή continue αναγκάζει τον βρόγχο να εκτελέσει τον υποθετικό του έλεγχο. Όσες τυχόν εντολές βρίσκονται μετά την continue (μέσα στο βρόγχο) δεν +εκτελούνται. Η continue δεν είναι σίγουρο πως θα \"τερματίσει\" το βρόγχο, αν το αποτέλεσμα του βρόγχου είναι αληθές (TRUE), τότε ο βρόγχος θα συνεχίσει να +εκτελείται. Η continue είναι ιδιαίτερα χρήσιμη αν θέλετε (για κάποιο λόγο, για κάποια συνθήκη) να \"παρακάμψετε\" κάποιες εντολές του κώδικα. + + +### [4. Advanced Input]{#s4} + +Εξ ορισμού, η awk αυτόματα διαβάζει και εκτελεί συνέχεια την ίδια δουλειά: Διαβάζει μιά εγγραφή και αν ταιριάξει κάποιο πεδίο ή εγγραφή με το πρότυπο, τότε +εκτελεί την πράξη. Όμως, η awk σας δίνει την δυνατότητα να \"επέμβετε\" σε όλην αυτήν την διαδικασία και να πάρετε την είσοδο (input) από ένα άλλο αρχείο ή να +προκαλέσετε πρώιμο ξαναξεκίνημα της όλης διαδικασίας, να πάρετε είσοδο από την έξοδο κάποιας εντολής κλπ. + +### [4.1 Next]{#ss4.1} + +Η εντολή next \"υποχρεώνει\" την awk να διαβάσει την αμέσως επόμενη εγγραφή και να κάνει τα γνωστά (ταίριασμα των προτύπων και αν είναι αληθές, τότε εκτέλεση +της πράξης κλπ.), δηλαδή αγνοείται πλήρως η παρούσα εγγραφή που επεξεργάζεται η awk. + +### [4.2 Exit]{#ss4.2} + +Η εντολή exit, χρησιμοποιούμενη σε πράξη, συμπεριφέρεται σαν να έφτασε το τέλος του αρχείου (που επεξεργάζεται η awk). Αυτό έχει σαν συνέπεια να σταματήσει, +γενικότερα, η εκτέλεση του κώδικα, δεν εκτελούνται άλλες πράξεις, δεν ταιριάζονται άλλα πρότυπα. Στη συνέχεια, κανονικά, εκτελείται (αν υπάρχει, βέβαια) το +ειδικό πρότυπο END. + +Αν τώρα, χρησιμοποιήσουμε την εντολή exit μέσα στο ειδικό πρότυπο END, τότε τερματίζεται ολόκληρο το πρόγραμμα, δεν εκτελείται τίποτα άλλο στη συνέχεια. + +### [4.3 Getline]{#ss4.3} + +Η εντολή getline διαβάζει μία εγγραφή \"κατηγορηματικά\", επιστρέφει 1 αν η ανάγνωση της εγγραφής ήταν επιτυχής (θυμίζω πως εξ ορισμού η κάθε γραμμή ενός +αρχείου αποτελεί μία εγγραφή), ή 0 αν δεν ήταν επιτυχής (δηλαδή αν έφτασε στο τέλος του αρχείου). Η getline συμπεριφέρεται \"κανονικά\", δηλαδή ορίζει με τον +σωστό τρόπο το \$0, ορίζει τις μεταβλητές πεδίων και τις μεταβλητές FNR, NR και NF). + +### [4.4 Input από αρχείο]{#ss4.4} + +Έτσι, λοιπόν, η getline μπορεί να χρησιμεύσει για να πάρετε είσοδο δεδομένων από κάποιο αρχείο, το οποίο δεν αναφέρατε στην γραμμή εντολών. Η γενική μορφή, με +την οποία χρησιμοποιούμε την getline σ\' αυτήν την περίπτωση είναι η getline \< \"filename\". Σε αυτήν την περίπτωση, αν το αρχείο υπάρχει και η getline διάβασε +εγγραφή, επιστρέφει 1, αλλιώς αν έφτασε στο τέλος του αρχείου επιστρέφει 0, ενώ αν το αρχείο δεν υπάρχει επιστρέφει -1. + +ΣΗΜΕΙΩΣΗ: Και πάλι, οι μεταβλητές \$0, οι μεταβλητές πεδίων και η NF ορίζονται κανονικά, ενώ οι μεταβλητές FNR και NR **ΔΕΝ ΑΛΛΑΖΟΥΝ, ΠΑΡΑΜΕΝΟΥΝ ΩΣ ΕΙΧΑΝ !!** + +### [4.5 Input από εντολή]{#ss4.5} + +Μιά άλλη περίπτωση όπου χρησιμοποιείται η getline, είναι η είσοδος από UNIX εντολή. Ας δούμε πως μπορούμε να συντάξουμε κάτι τέτοιο: + + while ("UNIX εντολή" | getline) + { + # ακολουθούν οι εντολές που θέλω να εκτελέσω + } + +Φανταστείτε π.χ. πως θα θέλατε κάθε φορά που μπαίνει ένας χρήστης στο σύστημα, να τυπώνετε ένα μήνυμα (ή, τέλος πάντων, να κάνατε κάτι άλλο), τότε στη θέση της +UNIX εντολής θα βάζατε το who ή και το who -u. + +### [4.6 Τερματίζοντας το Input από αρχείο ή εντολή]{#ss4.6} + +Καλό θα είναι, κάθε φορά που χρησιμοποιείτε την getline για να \"ανοίξετε\" ένα αρχείο ή μία εντολή, δηλαδή να πάρετε είσοδο από αυτά, να τα \"κλείνετε\" όταν +τελειώσετε με αυτά. Υπάρχει ένας μέγιστος αριθμός \"ανοιχτών\" αρχείων/εντολών που επιτρέπεται σε έναν χρήστη (αυτός ο αριθμός ποικίλει από σύστημα σε σύστημα, +αλλά και ανάλογα με τις ρυθμίσεις του διαχειριστή του συστήματος). Με το να \"κλείνετε\" τις εντολές/αρχεία που χρησιμοποιήσατε, ουσιαστικά μειώνετε την +πιθανότητα να φτάσετε τον μέγιστο αριθμό. Λοιπόν, αυτό μπορείτε να το κάνετε με την εξής εντολή: + + close ("filename") + +Στη θέση του filename μπορείτε να χρησιμοποιήσετε είτε το όνομα κάποιας μεταβλητής (η οποία περιέχει αρχείο/εντολή) είτε το όνομα της εντολής που +χρησιμοποιήσατε (εδώ, προσέξτε να δηλώσετε την ακριβή εντολή που χρησιμοποιήσατε, π.χ. αν χρησιμοποιήσετε την who -u να γράψετε close (\"who -u\") \...). + + +### [5. Advanced Output]{#s5} + +Μερικές πιο ειδικευμένες δυνατότητες υπάρχουν στην awk για την έξοδο (output). Αυτές είναι: το \"όμορφο\" φορμάρισμα του κειμένου, η ανακατεύθυνση του output σε +αρχεία (κειμένου) και η διασωλήνωση του output στην είσοδο (input) άλλων (εξωτερικών) εντολών του command prompt. + +### [5.1 Printf]{#ss5.1} + +Η εντολή print που είδαμε (στο 1ο μέρος), είναι αρκετά απλή και το output της είναι και αυτό αρκετά απλό. Αν, όμως, θέλετε να έχετε μορφοποιημένη την έξοδο του +προγράμματός σας (παραγωγή στηλών, για παράδειγμα), τότε θα πρέπει να χρησιμοποιήσετε την δανεισμένη από τη C εντολή, την printf. H printf έχει την εξής γενική +μορφή: + + printf("αλφαριθμητικό ελέγχου", λίστα_ορισμάτων, 1ο όρισμα, 2ο όρισμα, κ.ο.κ.) + +Το αλφαριθμητικό ελέγχου, μπορεί να αποτελείται από τα εξής στοιχεία: + +1. Απλούς χαρακτήρες (δηλαδή κείμενο) +2. ειδικούς μεταχαρακτήρες (θυμάστε το \\n π.χ.) +3. Τις διαταγές φόρμας + +Ας δούμε από ένα παράδειγμα για τα παραπάνω τρία στοιχεία, και μετά να μιλήσουμε περισσότερο για τις διαταγές φόρμας: + +1. printf(\"hello world\") +2. printf(\"\\f\") +3. printf(\"%22s\", \"Magaz\") +4. Και φυσικά, συνδυασμό όλων αυτών των στοιχείων (θα το δούμε) + +#### Διαταγές φόρμας + +Λοιπόν, κάθε διαταγή φόρμας αποτελείται από 3 μέρη. Στο 1ο μέρος, **ΠΑΝΤΑ**, γράφουμε το σύμβολο του ποσοστού (**%**). Κάθε διαταγή φόρμας αρχίζει με αυτό το +σύμβολο. Το 2ο μέρος συμπληρώνεται προαιρετικά. Συμπληρώνεται με αριθμούς, οι οποίοι υποδηλώνουν το μέγιστο μήκος της εξόδου. Τέλος, το 3ο μέρος αποτελείται από +ειδικούς χαρακτήρες, οι οποίοι υποδηλώνουν το είδος της εξόδου (αν είναι αλφαριθμητικό, αν είναι δεκαδικός αριθμός κλπ.) Θα μιλήσουμε τώρα αναλυτικότερα για το +2ο μέρος και μετά θα δούμε έναν πίνακα με τους χαρακτήρες του 3ου μέρους. + +Ο αριθμός, το εύρος πεδίου, αποτελείται από δύο αριθμούς οι οποίοι χωρίζονται με μία τελεία (.), δηλαδή είναι της μορφής x.y. Αν η έξοδος μας είναι δεκαδικός +αριθμός, τότε ο αριθμός αριστερά από την τελεία υποδηλώνει τον αριθμό ψηφίων **ΟΛΟΥ** του αριθμού (*συμπεριλαμβανόμενης της τελείας (.) του αριθμού*), ενώ ο +αριθμός δεξιά από την τελεία υποδηλώνει τον αριθμό ψηφίων του δεκαδικού μέρους του αριθμού. Αν τώρα, η έξοδος μας δεν είναι δεκαδικός αριθμός, αλλά ο,τιδήποτε +άλλο, τότε ο αριθμός αριστερά από την τελεία είναι ο ελάχιστος αριθμός ψηφίων/χαρακτήρων αυτού που θα τυπώσουμε, ενώ ο αριθμός δεξιά της τελείας είναι ο +μέγιστος αριθμός ψηφίων/χαρακτήρων και ο \"πραγματικός\" αριθμός των ψηφίων/χαρακτήρων που τελικά θα εκτυπωθούν. Δηλαδή, μπορείτε κάλλιστα να παραλείψετε τον +αριθμό αριστερά της τελείας (π.χ. %.4s) + +**ΣΗΜΕΙΩΣΕΙΣ:**\ +Αν θέλετε μέσα από την printf να τυπώσετε τον χαρακτήρα %, τότε θα γράψετε μέσα στον κώδικά σας %%.\ +Εξ ορισμού, η έξοδος της printf είναι σε δεξιά στοίχιση. Αν θέλετε να έχετε αριστερή, τότε μπροστά από τον αριθμό που βρίσκεται αριστερά της τελείας (στο εύρος +πεδίου) βάζετε το σύμβολο μείον (-). + +Παρακάτω, βλέπετε τον πίνακα με τους χαρακτήρες που μπορείτε να χρησιμοποιήσετε. Στη συνέχεια θα δούμε και παραδείγματα. + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Σημασία** + **Κωδικός φόρμας** + + %c Χαρακτήρας ASCII + + %d Ακέραιος δεκαδικός αριθμός + + %i Το ίδιο με το %d + + %e Εκτύπωση δεκαδικού αριθμού κινητής υποδιαστολής με επιστημονική\ + σημειογραφία, δηλαδή της μορφής \[-\]x.xxxxe\[-/+\]xxx + + %f Δεκαδικός κινητής υποδιαστολής + + %g Η awk κρίνει και διαλέγει για έναν αριθμό μία από τις μορφές %e και\ + %f (όποια έχει μικρότερο μήκος) και, παράλληλα, \"απαλοίφει\" άχρηστα μηδενικά + + %o Μη προσημασμένος (χωρίς πρόσημο) ακέραιος οκταδικός αριθμός + + %s Αλφαριθμητικό + + %x Μη προσημασμένος ακέραιος δεκαεξαδικός αριθμός (με πεζά τα abcdef) + + %X Μη προσημασμένος ακέραιος δεκαεξαδικός αριθμός (με κεφαλαία τα ABCDEF) + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +#### Παραδείγματα + +Επειδή θέλω να σας δείξω την λειτουργία του εύρους πεδίου, θα συμβολίζω τα κενά με παύλα (-), ώστε να μπορείτε να μετρήσετε τους χαρακτήρες και τα κενά (και να +βγάλετε τα συμπεράσματά σας): + + printf("%10d\n", 29) (θα έχει σαν αποτέλεσμα:) --------29 + + printf("%-10d\n", 29) 29-------- + + printf("%10.3f\n", 123.56) ---123.560 + + printf("%15s\n", "Linux Magaz") ----Linux Magaz + + printf("%-15s\n", "Linux Magaz") Linux Magaz---- + +### [5.2 Output σε αρχείο]{#ss5.2} + +Όπως και στην περίπτωση της getline, έτσι και εδώ, μπορείτε να χρησιμοποιήσετε τα σύμβολα της ανακατεύθυνσης για να στείλετε την έξοδο κατ\' ευθείαν μέσα σε ένα +αρχείο. Π.χ: + + printf("hello world\n") > "filename" + printf("hello world\n") >> "filename" + +### [5.3 Output σε εντολή]{#ss5.3} + +Σε αυτήν την περίπτωση, έχετε την δυνατότητα να στείλετε έξοδο (output) στην είσοδο (input) μιάς εξωτερικής εντολής του UNIX. Π.χ: + + printf("hello world\n") | "sort -t , " + +### [5.4 Τερματίζοντας το Output από αρχείο ή εντολή]{#ss5.4} + +Ακριβώς για τους ίδιους λόγους που αναφέραμε στην getline, έτσι και εδώ, καλό θα ήταν να \"κλείνετε\" ένα αρχείο ή μία εντολή αφού τελειώσετε με αυτά. Η σύνταξη +είναι ακριβώς η ίδια: close (\"filename\") και στη θέση του filename χρησιμοποιείτε είτε όνομα αρχείου, είτε το όνομα της **ΑΚΡΙΒΟΥΣ** εντολής που τρέξατε με +διασωλήνωση, είτε το όνομα κάποιας μεταβλητής που \"δείχνει\" σε αρχείο. + + +### [6. Συναρτήσεις]{#s6} + +**ΠΡΟΣΟΧΗ!!!**\ +Οι συναρτήσεις (που ορίζονται από τον χρήστη) δεν υπάρχουν στην \"αυθεντική\" awk, αλλά προστέθηκαν αργότερα στην nawk και υποστηρίζονται από την gawk. + +Όπως θα καταλάβατε, εκτός από τις ενσωματωμένες συναρτήσεις η gawk σας επιτρέπει να φτιάξετε τις δικές σας. Μία συνάρτηση χρησιμεύει σε ένα πρόγραμμα αν θέλετε +να επαναλάβετε τα ίδια κομμάτια κώδικα σε πολλά σημεία του προγράμματος, ώστε να μην ξαναγράφετε κάθε φορά το ίδιο πράγμα. Η χρήση των συναρτήσεων απαιτεί δύο +βήματα: την δήλωση της συνάρτησης και την κλήση της συνάρτησης μέσα στο πρόγραμμα. + +### [6.1 Δήλωση της συνάρτησης]{#ss6.1} + +Παρακάτω, θα δούμε τον κώδικα που απαιτείται για να δηλώσετε μιά συνάρτηση. Επιπλέον, να σημειώσω πως δεν παίζει κανέναν ρόλο η θέση που θα δηλώσετε την +συνάρτηση. Μπορείτε κάλλιστα να την δηλώσετε στο τέλος του προγράμματος. + + function όνομα_συνάρτησης(παράμετροι) { + κώδικας της συνάρτησης + } + +Τώρα θα δούμε τη λειτουργία των συναρτήσεων μέσα από τρία παραδείγματα. Το πρώτο παράδειγμα θα δείχνει την συνάρτηση στην απλή της μορφή (χωρίς παραμέτρους), το +δεύτερο παράδειγμα θα δείχνει τη χρήση, λειτουργία και χρησιμότητα των παραμέτρων, ενώ στο 3ο παράδειγμα, θα μιλήσουμε για την δήλωση return και θα δούμε το +αντίστοιχο παράδειγμα. + + BEGIN { function1() } + + function function1() { + printf("Magaz τεύχος 24\n"); + printf("Άρθρο για gawk\n"); + } + +Όταν τρέξουμε το πρόγραμμα, το αποτέλεσμα θα είναι να μας τυπώσει στην οθόνη το περιεχόμενο των δύο printf, όπως ορίζονται μέσα στην συνάρτηση. Δώστε ιδιαίτερη +έμφαση στις παρενθέσεις της συνάρτησης, πάντα πρέπει να τις γράφετε (σε αντίθεση με τις ενσωματωμένες συναρτήσεις της awk, όπου είναι προαιρετική η αναγραφή των +παρενθέσεων). + +### [6.2 Συνάρτηση με παραμέτρους]{#ss6.2} + +Όταν χρησιμοποιούμε παραμέτρους στη συνάρτηση, τότε η αριθμητική αξία της μεταβλητής που αποτελεί την παράμετρο, αντιγράφεται και μετά \"περνάει\" στην +συνάρτηση. Αυτό έχει σαν αποτέλεσμα η αρχική τιμή της μεταβλητής-παραμέτρου να παραμένει αναλλοίωτη. Αυτό είναι ένα πλεονέκτημα, μπορεί να μας φανεί σε πολλές +περιπτώσεις χρήσιμο. Βέβαια, υπάρχει πάντα και η δυνατότητα να αλλοιωθεί, θα το δούμε παρακάτω. Ας δούμε τώρα ένα παράδειγμα: + + BEGIN { variable = 0; function1(variable); + printf("Η τιμή της μεταβλητής variable είναι: %d\n", variable); } + + function function1(variable2) { + variable2++; + printf("Η τιμή της μεταβλητής variable2 είναι: %d\n", variable2); } + +Όταν εκτελέσουμε το πρόγραμμα θα δούμε πως θα μας τυπωθούν στην οθόνη δύο γραμμές. Η πρώτη γραμμή (που θα προέρχεται από την συνάρτηση) θα λέει πως η variable2 +είναι ίση με 1, ενώ η δεύτερη θα λέει πως η variable είναι ίση με 0. Βλέπετε, λοιπόν, πως η τιμή της variable αντιγράφεται στην variable2 και δεν αλλάζει. + +### [6.3 Η δήλωση return]{#ss6.3} + +H return έχει δύο λειτουργίες: είτε να επιστρέψετε την τιμή της παραμέτρου, είτε να βγείτε από την συνάρτηση νωρίτερα. Η σύνταξή της είναι: return +όνομα\_μεταβλητής. Μπορείτε σε κάθε συνάρτηση να επιστρέψετε την τιμή *μόνο μίας μεταβλητής*, **όχι παραπάνω**. Ας δούμε το παράδειγμα: + + BEGIN { variable = 0; function1(variable); + printf("Η τιμή της μεταβλητής variable είναι: %d\n", variable); } + + function function1(variable2) { + variable2++; + printf("Η τιμή της μεταβλητής variable2 είναι: %d\n", variable2); + return variable2; } + +Σε αυτήν την περίπτωση, θα τυπωθούν δύο γραμμές πάλι. Και στις δύο γραμμές η τιμή των μεταβλητών θα είναι ίση με 1, καθώς η τιμή της variable2 επέστρεψε στην +τιμή της variable. + +### [6.4 Η συνάρτηση system]{#ss6.4} + +Η συνάρτηση system είναι ενσωματωμένη στην awk. Είναι διαφορετική από τις άλλες, δεν ανήκει ούτε στην κατηγορία των αριθμητικών ούτε στην κατηγορία των +αλφαριθμητικών συναρτήσεων. Αυτό που πραγματικά κάνει είναι να εκτελεί το αλφαριθμητικό που της δόθηκε ως παράμετρος, επιτρέποντας στον προγραμματιστή να +εκτελεί απ\'ευθείας εντολές μέσα από το πρόγραμμα. Η σύνταξη της system έχει ως εξής: + + system ("εντολή") + + +### [7. Βιβλιογραφία]{#s7} + +Για την επίτευξη αυτού του άρθρου (συμπεριλαμβανομένου, φυσικά, και του 1ου μέρους) συμβουλεύτηκα τις εξής πηγές: + +- Την man page της εντολής gawk (man gawk) +- Το βιβλίο \"Linux Unleashed\" της SAMS +- Το βιβλίο \"UNIX: Θεωρία και πράξη\" του Κώστα Ν. Γιαλελή + +Αν θα θέλατε να κάνετε ένα βήμα παραπάνω από το άρθρο, θα σας συμβούλευα πριν ψάξετε οπουδήποτε αλλού, να διαβάσετε τουλάχιστον μία φορά το man page της gawk. +Είναι πολύ κατατοπιστικό και πολύ περιεκτικό. + diff --git a/content/articles/24/04_perldbi.md b/content/articles/24/04_perldbi.md new file mode 100644 index 0000000..c40358c --- /dev/null +++ b/content/articles/24/04_perldbi.md @@ -0,0 +1,88 @@ ++++ +title = 'DataBaseInterface για Perl μέρος 2ο' +date = '2000-06-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 24'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σε αυτό το τεύχος συνεχίζουμε την προσέγγιση στον προγραματισμό Perl για Databases μέσω του DBI interface που ξεκινήσαμε στο τεύχος Απριλίου.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτή τη φορά θα ασχοληθούμε με απλά κολπάκια για καλύτερο προγραμματισμό, τα οποία δεν αναφέραμε στο εισαγωγικό άρθρο. Ξεκινάμε: + +1. Έλεγχος λαθών + + Είχαμε πει στο προηγούμενο τεύχος ότι πρέπει ο προγραμματιστής να ελέγχει το exit status κάθε function που καλεί, για να δει αν πέτυχε ή όχι. Σε περίπτωση + που δεν πέτυχε μπορεί να κάνει κάποιες δουλειές, αλλά συνήθως θέλει να σταματάει η εργασία εκεί. Γι αυτό το DBI παρέχει το RaiseError. Αμέσως μετά τη + σύνδεση (ή και παράλληλα) μπορούμε να θέσουμε τη μεταβλητή RaiseError και τότε, σε κάθε error το πρόγραμμά μας θα σταματάει με ένα die. + + Παράδειγμα 1 + $dbh=DBI->connect('DBI:Pg:dbname=dbname user=dbuser password=dbpass'); + $dbh->{RaiseError} = 1; + + Η πρώτη γραμμή, απλά συνδέεται σε μία postgres database, στην βάση με όνομα dbname, με username dbuser και password dbpass. Η δεύτερη γραμμή θέτει τη + μεταβλητή RaiseError όπως λέγαμε. \`Αλλη μία μεταβλητή που μπορεί να τεθεί με αυτόν τον τρόπο, είναι η AutoCommit, για transactional databases. Αν δεν + ξέρετε τι είναι transactional database, καλά θα κάνετε να διαβάσετε το manual της βάσης σας. + +2. Απ\' ευθείας ανάθεση αποτελεσμάτων σε μεταβλητές + + Εκτός από την παραδοσιακή μέθοδο που είδαμε στο προηγούμενο τεύχος, να τοποθετούμε δηλαδή τα αποτελέσματα σε ένα array (μία στήλη αποτελεσμάτων είναι + αντίστοιχα ένα στοιχείο του array), μπορούμε να χρησιμοποιήσουμε την bind\_columns για να αναθέσουμε τα αποτελέσματα σε ήδη ορισμένες μεταβλητές. + + Παράδειγμα 2 + $entoli = $dbh->prepare('SELECT phone,name FROM clients WHERE id=?'); + $entoli->execute($num); + $entoli->bind_columns(\$phone,\$name); + $entoli->fetch; + + Το \$num καθώς και τα \$phone και \$name πρέπει προφανώς να τα έχουμε δηλώσει νωρίτερα. Προσοχή πρέπει να δοθεί στο ότι η bind\_columns δίνεται μετά την + execute. Επίσης όπως βλέπετε δεν χρησιμοποιούμε την fetchrow\_array αλλά την σκέτη fetch για να τραβήξουμε τα στοιχεία από την βάση. + +3. Casting και πέρασμα παραμέτρων από πριν Μία άλλη μέθοδος που υποστηρίζει το DBI είναι η bind\_param(). Αυτή δίνει εξ αρχής στην execute τις παραμέτρους που + θα πάρει, δίνoντάς μας την δυνατότητα να κάνουμε και casting. + + Παράδειγμα 2 + $entoli = $dbh->prepare('SELECT phone,name FROM clients WHERE id=?'); + $entoli->bind_param(1, $num, { TYPE => SQL_INTEGER }); + $entoli->execute(); + $entoli->bind_columns(\$phone,\$name); + $entoli->fetch; + + Σε αυτό το παράδειγμα πριν καλέσουμε την execute λέμε στο DBI ότι στο πρώτο placeholder (όπου placeholder είναι το ερωτηματικό, και το πρώτο βγαίνει από το + 1 που είναι το πρώτο όρισμα της bind\_param()) θα βάλει την τιμή \$num και θα πει στην βάση μας ότι είναι τύπου Integer. Αυτό σε ορισμένες περιπτώσεις είναι + χρήσιμο, αν και το σε ποιες ακριβώς, αφήνεται ως άσκηση στον αναγνώστη :-) Αν λοιπόν θέλουμε για οποιονδήποτε λόγο να κάνουμε casting, αυτή είναι η μέθοδος + που πρέπει να ακολουθήσουμε. + +4. Αποθήκευση παραμέτρων σε hashed array + + Αντί για την fetchrow\_array και την fetch που είδαμε πιο πάνω, μπορούμε να χρησιμοποιήσουμε και την fetchrow\_hashref() μέθοδο, για να τοποθετήσουμε τα + αποτελέσματα που θα μας επιστρέψει η βάση σε ένα hash.\ + Για κάθε γραμμή αποτελεσμάτων που επιστρέφεται από την βάση, δημιουργείται ένα reference σε ένα array που περιέχει το field name σαν κλειδί και την τιμή του + σαν value. Αν κάποιο value είναι Null, τότε επιστρέφεται με τιμή undef. Αυτό προσέξτε το γιατί σημαίνει ότι θα υπάρχει συνδυασμός κλειδί-τιμή στο hash που + θα δημιουργηθεί (ενώ ίσως περίμενε κάποιος να μην υπάρχει καν αυτός ο συνδυασμός εφόσον η τιμή του είναι Null).\ + Αυτή η υλοποίηση δημιουργεί περισσότερο overhead στο πρόγραμμά μας απ\' ότι η fetchrow\_array και δεν είναι και πολύ μεταφέρσιμη μεταξύ των διαφορετικών + βάσεων, συνεπώς αν δεν το χρειάζεστε, μην το χρησιμοποιήσετε. + +5. Πληροφορίες από την βάση + + Μπορούμε να πάρουμε όλα τα αποτελέσματα του select μας με την μέθοδο dump\_results() η οποία καλεί εσωτερικά την neat\_list και τυπώνει τα αποτελέσματα.Aν + δεν δώσουμε παραμέτρους, θα τυπώσει μέχρι 35 χαρακτήρες (\$maxlen=35), μία γραμμή αποτελεσμάτων σε μία γραμμή του output (\$lsep=\'\\n\'), χωρισμένες οι + στήλες με κόμματα (\$fsep=\',\') στο STDOUT (\$fh). Όλα αυτά μπορούμε να τα αλλάξουμε με τις μεταβλητές που ανέφερα. + + Η βάση μας δίνει επίσης πληροφορίες για: + + - NUM\_OF\_FIELDS (integer)\ + Ο αριθμός των πεδίων που θα επιστρέψει το select που έχουμε κάνει prepare. + - NUM\_OF\_PARAMS (integer)\ + Ο αριθμός των παραμέτρων που περνάμε στην prepare (αυτά που λέγαμε για Placeholders). + - NAME (reference σε array)\ + Ένα reference σε array που περιέχει τα ονόματα των πεδίων. Υπάρχουν αντίστοιχα και οι NAME\_lc και NAME\_uc που επιστρέφουν τα ίδια στοιχεία σε + LowerCase και UpperCase αντίστοιχα. + + Όλες οι παραπάνω παράμετροι είναι βέβαια read\_only. + +Με αυτό το κείμενο τελειώσαμε την εισαγωγή στο DBI interface της perl. Διαβάστε πάλι την βιβλιογραφία από το προηγούμενο τεύχος και είστε έτοιμοι να ξεκινήσετε. diff --git a/content/articles/24/05_odigos.md b/content/articles/24/05_odigos.md new file mode 100644 index 0000000..8485258 --- /dev/null +++ b/content/articles/24/05_odigos.md @@ -0,0 +1,45 @@ ++++ +title = 'Οδηγός καλής συμπεριφοράς προς Linuxάδες' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας(mailto:evris@hellug.gr)' +issue = ['Magaz 24'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το κείμενο αυτό\... έχει νόημα :-). Ολόκληρο το κείμενο με τις σχετικές επεξηγήσεις, θα το βρείτε στο +[DiLiMa](http://baza.eeea.gr/article.php3?sid=20000530224100) που θα κυκλοφορήσει σύντομα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ένα Παραμύθι με Νόημα + +*\"Μια φορά κι έναν καιρό, σε ένα απόμακρο χωριό, ζούσαν δέκα ψαράδες. Την εποχή εκείνη, κανείς άλλος δεν ήξερε να ψαρεύει και ούτε ενδιαφερόταν για το ψάρεμα. +Αν μάλιστα οι ψαράδες έκαναν το αστείο να διδάξουν ψάρεμα στους ανθρώπους της πόλης, ή να τους δώσουν δωρεάν ψάρια εκείνοι τους κορόιδευαν και τους χλεύαζαν.* + +*Οι κάτοικοι της πόλης, βλέπετε, τρώγανε μόνο έτοιμες προτηγανισμένες τηγανητές πατάτες που τους προμήθευε ο αφέντης μεγαλέμπορας.* + +*Οι ψαράδες όμως επέμειναν. Σιγά σιγά, καλλιέργησαν και τη γη, κάναν μια μικρή φάρμα εκτροφής ζώων, άρμεγαν τα ζώα και επειδή ήταν όλοι φίλοι μεταξύ τους και +ήταν λίγοι σε πληθυσμό, ο καθένας έκανε ότι του άρεσε και το πρόσφερε δωρεάν και χαμογελαστά στους υπόλοιπους. Όποιος δεν μπορούσε να φέρει σε πέρας κάποια +δουλειά, μπορούσε να ρωτήσει τους παλιότερους κατοίκους του χωριού και εκείνοι με χαρά τον βοηθούσαν.* + +*Σιγά σιγά, οι ταλαιπωρημένοι και στα πρόθυρα της ασιτίας κάτοικοι της πόλης ενδιαφέρθηκαν να μάθουν και αυτοί τον τρόπο ζωής του μικρού αυτού χωριού και +άρχισαν να μαζεύονται στα περίχωρα του χωριού.* + +*Ο πληθυσμός του χωριού αυξήθηκε. Οι νέοι κάτοικοι απαιτούσαν σαν κακομαθημένα παιδιά τα δωρεάν ψάρια τους (λες και κάποιος τους τα χρώσταγε) και +κακοαναθρεμένοι όπως ήταν, άρχισαν να ζητάνε τσιπούρες, φιλέτο, λαχανάκια Βρυξελλών, πράγματα που οι παλιοί χωρικοί δε μπορούσαν (χωρίς τη συνεργασία των νέων) +να φτιάξουν.* + +*Αλλά αυτό που πραγματικά έφερνε σε απόγνωση τους γέροντες του χωριού, ήταν η συμπεριφορά των νέων στο σχολείο. Δεν έκαναν τις εργασίες τους, δε διάβαζαν τα +βιβλία τους, δεν παίδευαν το μυαλό τους και δεν παρατηρούσαν τους γεροντότερους ώστε να προοδεύσουν. Αντί αυτού, συνεχώς έβριζαν τη δασκάλα τους όταν τους +εξηγούσε πως αν είχαν διαβάσει το βιβλίο δε θα χρειαζόταν να διακόπτουν συνέχεια το μάθημα και να ρωτούν τα ίδια και τα ίδια.* + +*Η κατάσταση αυτή συνεχίστηκε για πολύ καιρό, μέχρι που πέθαναν οι γεροντότεροι, χάθηκε η γνώση που είχαν και τελείωσαν από τις αποθήκες οι έτοιμες τροφές που +με τόσο κόπο συσσώρευαν.* + +*Πεινασμένοι και απογοητευμένοι οι κάτοικοι της πόλης, ξαναγύρισαν στον παλιό αφέντη τους. Με σκυμμένο το κεφάλι, παραδέχτηκαν πως ήταν λάθος τους να φύγουν από +κοντά του και του ζήτησαν να τους πάρει στη δούλεψή του.* + +*Αυτός άλλο που δεν ήθελε. Τώρα πια όλοι δουλεύουν γι\' αυτόν, για μια μερίδα προτηγανισμένες σάπιες πατάτες και κανένας δεν έχει μείνει για να επαναστατήσει +εναντίον του.\"* diff --git a/content/articles/25/01_editorial.md b/content/articles/25/01_editorial.md new file mode 100644 index 0000000..f6cd3de --- /dev/null +++ b/content/articles/25/01_editorial.md @@ -0,0 +1,51 @@ ++++ +title = 'Editorial' +date = '2000-07-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης(mailto:papas@hellug.gr)' +issue = ['Magaz 25'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο magaz, τεύχος παραλαβής (ωχ!).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Και νάμαι λοιπόν από αυτή τη θέση, μια θέση που φέρει ένα σωρό ευθύνες. Και αυτή δεν είναι μόνο δική μου άποψη, αλλά και του Μιχάλη. Εξάλλου, πως να μη νοιώθω +γεμάτος ευθύνες όταν στο προηγούμενο editorial ο Μιχάλης με παρουσίασε σαν τον super αρθρογράφο και linuxa και ξέρω γω τι άλλο; + +Τέλος πάντων, ας μπούμε στα θέματά μας τώρα. + +Σε αυτό το τεύχος έχουμε ένα άρθρο από τον [DJ Art](mailto:djart@hellug.gr) που αποτελεί μετάφαση του **the html hell page** ( + ) του [Eric S. Raymond](mailto:esr@thyrsus.com) , και το οποίο είμαι σίγουρος ότι πολλοί θα έπρεπε να το διαβάσουν +και να αναθεωρήσουν τις απόψεις τους περί html design. + +Επίσης, διαβάστε τη συνέχεια για την **xbasic**, ένα άρθρο του [Κώστα Τσακάλογλου](mailto:tsakf@hellug.gr). Αν έχετε παραλείψει να διαβάσετε στο προηγούμενο +τεύχος το άρθρο για την xbasic διαβάστε το [εδώ](/24/02_xbasic.html). + +Σε αυτό το τεύχος, επίσης, έχουμε μια από τις μεγαλύτερες δημοσιογραφικές επιτυχίες στον ηλεκτρονικό τύπο για τα δεδομένα της Ελλάδας :) Αναφέρομαι στην +συνέντευξη που ο παλιός αρχισυντάκτης του **magaz** [Καμπριάνης Μιχάλης](mailto:kabrianis@hellug.gr) πήρε από τον πρόεδρο του OSI (Open Source Initative), τον +Eric Raymond ( ) + +Ένα άρθρο από τον παλιό (και μη εξαιρετέο) αρθρογράφο μας, τον [Θρασύβουλο Κοτσιφάκη](mailto:tkots@SoftHome.net)), που μετά από ένα πολύ μεγάλο ταξίδι επέστρεψε +στα πάτρια εδάφη (Χανιά) και φυσικά δε μας ξέχασε εμάς εδώ στο **magaz** :). Το άρθρο καταπιάνεται με μια σουίτα πρωτοκόλλων που όλα μαζί απαρτίζουν το γνωστό +σε όλους μας TCP/IP (**Transfer Control Protocol/Internet Protocol**). Όπως είναι αυτονόητο, δεν αναφέρεται αποκλειστικά σε linux, μια και το TCP/IP είναι το +πιο διαδεδομένο στον κόσμο και χρησιμοποιείται από όλα τα λειτουργικά. Είναι πάντως μια φοβερά καλή εισαγωγή στον κόσμο των πρωτοκόλλων, και οι αρχάριοι θα το +εκτιμήσουν πολύ, αφού εξηγεί με απλά λόγια τα κυριότερα χαρακτηριστικά του TCP/IP. + +Να συμπληρώσω επίσης ότι πλέον κυκλοφορεί ένα έντυπο περιοδικό στο χώρο του linux, το **dilima** (dilima is a linux magazine, κλασική περίπτωση κυκλικής +αναφοράς). Και εκεί και εδώ, στο **magaz**, πολλοί από τους αρθρογράφους είναι ίδιοι. Σε καμία περίπτωση δεν είμαστε ανταγωνιστές (μια και κάτι τέτοιο θα με +έκανε αντίπαλο με τον εαυτό μου, και δόξα το Θεό, τέτοιου είδους ανησυχίες δεν έχω), και αυτό να σημειωθεί γιατί δε γουστάρουμε να δημιουργηθούν αντιπαλότητες +κ.λπ. Αυτό που είναι σίγουρο είναι ότι εμείς (ως magaz) δεν απειλούμαστε από κανένα, και φυσικά το **dilima** δεν απειλείται από εμάς. Όσοι είναι να διαβάσουν +το **magaz** θα το διαβάσουν σίγουρα γιατί και τζαμπέ είναι, και ότι ώρα γουστάρεις το βρίσκεις, και διαφημίσεις δεν έχει, και δεν πιάνει και χώρο στο γραφείο. +Από την άλλη, όποιος γουστάρει να πάρει το **dilima** θα το πάρει γιατί μπορεί να μη γουστάρει να είναι online ή μπορεί να το θέλει τυπωμένο, ή να έχει κάποιο +άλλο λόγο. Άντε τώρα\... (α, και αν δεν βλέπετε στην λέξη\`\`Άντε\'\' το Α το τονούμενο, γυρίστε την κωδικοσελίδα σας σε iso8859-7. ΚΑΙ ΚΑΝΤΕ ΤΗ DEFAULT!!!) + +Η **ψηφοφορία** αυτού του τεύχους, αναφέρεται στη μορφή του **magaz**. Μην ξεχάσετε να [ψηφίσετε](/cgi-bin/poll25.cgi) για να μπορέσουμε να βελτιώσουμε (όσο +μπορούμε και εμείς) το περιεχόμενο του περιοδικού ώστε να ανταποκρίνεται στις \`\`αναγνωστικές\'\' σας ανάγκες :) + +Τέλος, θα ήθελα να ξέρετε ότι εγώ σαν Βαγγέλης από τη θέση του αρχισυντάκτη θα κάνω ότι περνάει από το χέρι μου ώστε αυτό το **e-zine** που με τόσο κόπο +καταφέραμε να στήσουμε να συνεχίσει την καλή του παρουσία, και να συνεχίζει να αποτελεί πηγή πληροφόρησης για τους χρήστες του Linux στην Ελλάδα. + +Καλή ανάγνωση, και μην ξεχνάτε, μπορείτε να κατεβάσετε όλο το τεύχος πατώντας [εδώ](/files/magaz.25.tgz) diff --git a/content/articles/25/02_tcpip.md b/content/articles/25/02_tcpip.md new file mode 100644 index 0000000..11ccbc4 --- /dev/null +++ b/content/articles/25/02_tcpip.md @@ -0,0 +1,213 @@ ++++ +title = 'TRANSMISSION CONTROL PROTOCOL / INTERNET PROTOCOL' +date = '2000-07-01T00:00:00Z' +description = '' +author = 'Κοτσιφάκης Θρασύβουλος' +issue = ['Magaz 25'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Επιστροφή μετά από πολύ καιρό στα παλιά καλά λημέρια.Αν και ο χρόνος μου λίγος θα επιχειρήσω να σας μυήσω λιγάκι στις βασικές έννοιες των δικτύων και της πιο +διαδεδομένης σε εμάς συλλογής πρωτοκόλλων το **TCP/IP*** + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Τι είναι δίκτυο και τι είναι το TCP/IP;** +---------------------------------------------------------------------- + +- [1.1 Λίγη Ονοματολογία για να μπορέσουμε να συνεχίσουμε !](#ss1.1) + +**2. Τα χαρακτηριστικά του TCP/IP** +----------------------------------------------------------- + +- [2.1 Logical Addressing.](#ss2.1) +- [2.2 Routing](#ss2.2) +- [2.3 Name Resolution](#ss2.3) +- [2.4 Error Checking / Flow Control](#ss2.4) +- [2.5 Application Support](#ss2.5) + +**3. Τα Utilities του TCP/IP** +------------------------------------------------------ + +- [3.1 ftp](#ss3.1) +- [3.2 lpr](#ss3.2) +- [3.3 ping](#ss3.3) +- [3.4 telnet](#ss3.4) +- [3.5 traceroute](#ss3.5) + + +### [1. Τι είναι δίκτυο και τι είναι το TCP/IP;]{#s1} + +**Δίκτυο** είναι το σύνολο από υπολογιστές και συσκευές που ομοιάζουν με υπολογιστή, τα οποία επικοινωνούν μεταξύ τους μέσω ενός μέσου μεταφοράς των δεδομένων. +Αυτό το μέσο μεταφοράς μπορεί να είναι καλώδιο, η τηλεφωνική μας γραμμή ή κάποιο άλλο π.χ. κάποιος ασύρματος μεταδότης. + +Σε ένα δίκτυο ο κάθε υπολογιστής πρέπει να είναι ικανός να επικοινωνεί με τους υπόλοιπους και μάλιστα αμφίδρομα, δηλαδή να δύναται να διοχετεύσει πληροφορίες +αλλά και να λάβει. Για να γίνει τώρα αυτό θα πρέπει να οριστούν εξ αρχής ο τρόπος επικοινωνίας του με το υπόλοιπο δίκτυο. Θα πρέπει δηλαδή να οριστούν κάποιοι +κανόνες για την ασφαλή και απρόσκοπτη μεταφορά των δεδομένων. + +Οι συσκευές σε ένα δίκτυο δεν είναι απαραίτητο (αλλά ούτε και εφικτό πολλές φορές) να ακολουθούν τα ίδια πρότυπα ως μεμονωμένοι σταθμοί εργασίας (workstations), +δηλαδή δεν είναι απαραίτητο να εκτελούν τις εντολές κάτω από το ίδιο λειτουργικό σύστημα ή να χρησιμοποιούν το ίδιο Hardware. Για τα παραπάνω όπως καταλαβαίνετε +είμαστε αναγκασμένοι να ορίσουμε κάποια standards έτσι ώστε οι ανόμοιες αυτές συσκευές να μπορούν να συνεργάζονται αρμονικά και να εκτελούν τις αιτήσεις μας σε +συνεργασία με τις υπόλοιπες συσκευές που σχηματίζουν το δίκτυο. + +Ας ορίσουμε τώρα το **TCP/IP**. Όλοι περιγράφουμε το TCP/IP σαν ένα πρωτόκολο, αυτό δεν είναι απόλυτα σωστό. Στην πραγματικότητα είναι μία ολόκληρη σουίτα από +πρωτόκολα η οποία έχει σαν βασικό της ρόλο να βοηθήσει την ομαλή συνύπαρξη των συσκευών που βρίσκονται συνδεδεμενες μεταξύ τους και επιπλέον να ορίσει τους +κανόνες που θα ισχύουν κατά την επικοινωνία των συσκευών ετσι ώστε η πληροφορία που θα περνάει από τη μία συσκευή στην άλλη να μεταφράζεται σωστά. + +### [1.1 Λίγη Ονοματολογία για να μπορέσουμε να συνεχίσουμε !]{#ss1.1} + +- **LAN**:(**L**ocal **A**rea **N**etwork) Είναι μία ομάδα υπολογιστών και σχετικών συσκευών οι οποίες είναι συνδεδεμένες μεταξύ τους, επικοινωνούν και + μπορούν να ανταλλάσουν πληροφορίες ή πόρους του δικτύου (π.χ. εκτυπωτές που μπορεί να είναι συνδεδεμένοι επάνω στο δίκτυο) +- **WAN**:(**W**ide **A**rea **N**etwork) Είναι τα δίκτυα τα οποία συνδέουν χρήστες μεταξύ μεγάλων αποστάσεων οι οποίες πολλές φορές ξεπερνούν τα γεωγραφικά + όρια των χωρών. Το Internet π.χ. είναι ένα WAN. +- **MAN**:(**M**etropolitan **A**rea **N**etwork) Είναι δίκτυα υψηλής ταχύτητας τα οποία περιορίζονται σε υπολογιστές οι οποίοι είναι συνδεδεμένοι σε + αποστάσεις όχι μεγαλύτερες από 80 χιλιόμετρα. +- **ETHERNET**: Είναι ένας ευρέως διαδεδομένος τρόπος διασύνδεσης μεταξύ υπολογιστών το οποίο χρησιμοποιεί ως μέσο μεταφοράς το καλώδιο (ομοαξωνικό twisted + pair ή οπτική ίνα) και μια κάρτα η οποία αναλαμβάνει τον ρόλο της διασύνδεσης και ορθής μεταφοράς των πακέτων δεδομενων που αποστέλλονται ανάμεσα στους + υπολογιστές και τις συσκευές του δικτύου. + + +### [2. Τα χαρακτηριστικά του TCP/IP]{#s2} + +Το TCP/IP έχει ορισμένα ενδιαφέροντα χαρακτηριστικά τα οποία χρησιμοποιεί για να παρακάμπτει προβλήματα που προκύπτουν στα δίκτυα. Ας εξετάσουμε όμως διεξοδικά +πια είναι αυτά τα προβλήματα και να δούμε πως το TCP/IP αναλαμβάνει να τα επιλύσει. + +### [2.1 Logical Addressing.]{#ss2.1} + +Κάθε κάρτα δικτύου από κατασκευής δια8έτει μία μοναδική και μόνιμη φυσική διεύθυνση (physical address). Σε μικρά δίκτυα η παράδοση των δεδομένων γίνεται με βάση +αυτή την φυσική διεύθυνση. Π.χ. σε τοπικά δίκτυα τύπου ethernet ένας υπολογιστής μεταδίδει τα δεδομένα κατευθείαν στο μέσο μεταφοράς (καλώδιο). Κάθε υπολογιστής +που βρίσκεται στο συγκεκριμένο δίκτυο παρακολουθεί όλες τις μεταδώσεις και επιλέγει να κρατήσει τα δεδομένα που έχουν διεύθυνση την φυσική διεύθυνση της κάρτας +δικτύου που βρίσκεται εγκατεστημένη σ\' αυτόν. Σε μεγαλύτερα δίκτυα φανταστείτε τι θα γινόταν αν κάθε υπολογιστής παρακολουθούσε όλα τα πακέττα δεδομένων που +αποστέλλονται μέσω του μέσου μεταφοράς. + +Στα μεγάλα δίκτυα για αποφύγουμε την διαρκή παραλαβή άχρηστων δεδομένων τα χωρίζουμε σε άλλα μικρότερα υποδίκτυα (subnetworks) τα οποία κάτω απο μία ιεραρχική +σχεδίαση και δομή μπορούν να παρακολουθούν τις αποστολές και να επιλέγουν τα πακέττα δεδομένων που προορίζονται για τις συσκευές που τα αποτελούν. + +Για να επιτύχουμε την παραπάνω λειτουργία τα υποδίκτυα θα πρέπει να έχουν διευθύνσεις που να τα χαρακτηρίζουν για να γίνονται αναγνωρίσιμα. Η διευθυνσεις αυτές +περέχονται από το λογισμικό και στην προκυμένη περίπτωση από το TCP/IP και ονομάζονται λογικές διευθύνσεις (logical address).Στο TCP/IP οι συγκεκριμένες +διευθύνσεις λέγονται IP adresses.Η διεύθυνση IP τωρα με την σειρά της μπορεί να περιέχει: + +- Την ταυτότητα ενός δικτύου. +- Την ταυτότητα ενός υποδικτύου. +- Την ταυτότητα ενός υπολογιστή μέσα σε ένα υποδίκτυο. + +Οι ταυτότητες που αναφέρουμε παραπάνω, ουσιαστικά αντιστοιχούν σε συνδυασμούς αριθμών που χαρακτηρίζουν και την κλάση του δικτύου.Ανάλογα με το είδος δικτύου +που έχουμε, έχουμε και την αντίστοιχη κλάση. Εν περιλήψει οι βασικότερες: + +- **Κλάση A**: Εδώ οι ταυτότητες είναι 8-bit για τα δίκτυα και 24-bit για τους κεντρικούς υπολογιστές σ\'αυτά. Τέτοιοι αριθμοί αποδίδονται σε οργανισμούς, + εταιρείες ή χώρες δηλαδή σε περιπτώσεις που απαιτούνται μεγάλος αριθμός διευθύνσεων IP αφού θεωρητικά τα δίκτυα κλάσης A μπορούν να υποστηρίξουν περίπου + 16.7 εκατομμύρια υπολογιστές. +- **Κλάση Β**: Εδώ η ταυτότητες τών δικτύων και των κεντρικών υπολογιστών είναι 16-bit. Οι διευθύνσεις αποδίδονται σε δίκτυα μεσαίου μεγέθους και είναι ικανές + να υποστηρίξουν την αναγνώριση μέχρι 65.5 χιλιάδων υπολογιστών περίπου. +- **Κλάση C**: Στην τρίτη κλάση οι ταυτότητες του δικτύου είναι 24-bit και των υπολογιστών 8-bit. Mε αυτόν τον τρόπο αποδιδουμε διευθύνσεις σε μικρά δίκτυα με + έως 254 υπολογιστές. +- **Κλάση D**: Οι διευθύνσεις εδώ δεν αποδίδονται σε υπολογιστές αλλά χρησιμοποιούνται για multicasting δηλαδή σε περιπτώσεις που θέλουμε να ορίσουμε ομάδες + υπολογιστών σε ένα δίκτυο που θα πρέπει να τους αποσταλλεί ένα συγκεκριμένο πακέττο δεδομένων ταυτόχρονα. + +### [2.2 Routing]{#ss2.2} + +Πιο πάνω είπαμε ότι μπορούμε να χωρίσουμε ένα δίκτυο σε άλλα μικρότερα και να αποδόσουμε λογικές διευθύνσεις σε αυτά.Πως όμως αποκόπτουμε τα άχρηστα πακέττα και +πως όμως το μικρότερο αυτό δίκτυο 8α αντιληφθεί ότι κάποιο πακέττο δεδομένων απευθύνεται σε αυτό;Η τεχνική λέγεται routing και οι συσκευές που αναλαμβάνουν την +αναγνώριση των πακέττων routers. + +Με απλά λόγια ένας router διαχωρίζει το subnet από το υπόλοιπο δίκτυο και δεν επιτρέπει να περάσουν πληροφορίες στο σύνολο οι οποίες είναι άχρηστες. Πληροφορίες +οι οποίες αφορούν τους υπολογιστές του υποδικτύου και κατευθύνονται από υπολογιστή μέσα σε αυτό σταματούν στον router και δεν βγαίνουν προς τα έξω. Οι +πληροφορίες πάλι που απευθύνονται σε υπολογιστές εκτός του subnet ο router τις προω8εί εκτός. Γενικά ο τρόπος πού λειτουργεί ένας router είναι ο εξής: + +- Παραλαμβάνει τα δεδομένα από ένα από τα προσαρτιμένα σε αυτό δίκτυα +- Ελέγχει τον προορισμό του πακέττου. Αν το πακέττο έχει προορισμό συσκευή μέσα στο δίκτυο από το οποίο απεστάλλει τότε το απορρίπτει αφού αυτό έχει φθάσει + ήδη στον προορισμό του. +- Αν το πακέττο κατευθύνεται σε συσκευή έξω από το δίκτυο απ\' όπου προέρχεται τότε ο router συμβουλεύεται εναν πίνακα που ονομάζεται routing table έτσι ώστε + να δει που θα προωθήσει το πακέττο +- Αφού βρεθεί που θα προωθηθεί το πακέττο ο router αναλαμβάνει την αποστολή του μέσω του λεγόμενου NETWORK ACCESS LAYER software + +Το TCP/IP περιέχει πρωτόκολλα τα οποία καθορίζουν πως ένας router θα βρει διαδρομή για να κατευθύνει τα πακέττα στον προορισμό τους. Αυτά είναι τα: a)**Routing +Information Protocol (RIP)** Το οποίο είναι το παλαιότερο routing protocol. Με απλά λόγια οι routers στέλνουν πληροφορίες γι\' αυτούς και επίσης αποστέλλουν το +λεγόμενο **hop count** δηλαδή πληροφορία σχετικά με το πόσο απομακρισμένοι είναι. Με αυτόν τον τρόπο οι routers μεταξύ τους γνωρίζουν ποιοι απ\' αυτούς είναι +διαθέσιμοι και να εκτιμήσουν την συντομότερη διαδρομή για να αποστείλουν το πακέττο στον προορισμό τους.b)**Open Shortest Path First (OSPF)** είναι νεότερο +πρωτόκολλο το οποίο σταδιακά πέρνει την θέση του RIP. Η μεγάλη διαφορά του από το RIP είναι ότι εδώ οι Proxies δεν χρειάζεται να κάνουν υπολογισμό του hop απλά +αποστέλλουν πληροφορίεσ σχετικά με την κατάσταση τους στους proxies που βρίσκονται απ\' ευ8είας συνδεδεμένοι μαζί τους. Με αυτόν τον τρόπο μειώνεται το συνολικό +bandwidth που 8α πρέπει να δεσμευ8εί για την αποστολή πληροφοριών. Ως αποτέλεσμα τι OSPF μπορεί να υποστηρίξει δίκτυα μεγάλα σε όγκο και ανάγκες. + +### [2.3 Name Resolution]{#ss2.3} + +Φανταστείτε να σας έλεγαν 111.121.131.156 και την φίλη σας 111.121.131.158, μπέρδεμά έ; Ναι έχετε δίκιο. Καλοί οι αριθμούλιδες αλλά εμείς έχουμε μάθει να +αναγνωρίζουμε τους άλλους από το όνομα τους και όχι από τον αριθμό της ταυτότητας τους. Για να μας κάνει την ζωή πιο εύκολη λοιπόν το TCP/IP χρησιμοποιει εν +παραλλήλω με τα IP numbers και ένα πιο ανθρωπινο τρόπο για να αναγνωρίζεται ο αποστολέας και ο παραλήπτης ενός πακέττου τα ονόματα αυτά λέγονται **domain +names** και η υπηρεσία **Domain Name Service**.Με αυτόν τον τρόπο δεν χρειάζεται να γνωρίζουμε το IP number κάποιου υπολογιστή σε ένα δίκτυο αλλά μόνο το όνομα +του.Έτσι για να αποστείλουμε π.χ. ένα email στην αγαπημένη μας δεν χρειάζεται να ξέρουμε το IP number του mail server που της έχει παραχωρίσει χώρο αλλά μόνο το +domain name που συνή8ως είναι όνομα της μορφής \"companyname.com\" του και φυσικά το όνομα που χρησιμοποιεί αυτή σαν αναγνωριστικό. + +Πως γίνεται τώρα και τα domain names μεταφράζονται σε IP numbers; Με απλά λόγια υπάρχουν κάποιοι εξυπηρετητές οι οποίοι αναλλαμβάνουν την αποθήκευση των domain +names και την αποκωδικοποίηση τους σε IP numbers. Αν θέλετε τώρα να δείτε πως περίπου γίνεται το name servicing ρίξτε μια ματιά στο **/etc/hosts** του κουτιού +σας για να δείτε με ποια σύνταξη ορίζονται domain names σε IP names. + +### [2.4 Error Checking / Flow Control]{#ss2.4} + +Κατά την μεταφορά αρχείων είναι λογικό ότι δεν πάνε πάντα τα πράγματα όπως τα θέλουμε. Λάθη κατά την μεταφορά ή πακέττα δεδομένων που για κάποιο λόγο δεν +παρελήφθησαν ακέραια είναι συχνό φαινόμενο. Γι αυτόν τον λόγο οι σχεδιαστές του TCP/IP φρόντισαν να του ενσωματώσουν διαδικασίες οι οποίες ελέγχουν την χωρίς +λάθη παραλαβή ενός πακέττου και την αποστολη του στον σωστό παραλήπτη. Οι διαδικασίες αυτές ενσώματωνονται στο ονομαζόμενο **Transport Layer** του TCP/IP. + +### [2.5 Application Support]{#ss2.5} + +Σε όλους είνα γνωστό ότι για να αποκτήσουμε πρόσβαση στο δίκτυο χρησιμοποιούμε εφαρμογές οι οποίες ουσιαστικά με τρόπο «αδιαφανή» μας παρέχουν την πρόσβαση αλλά +και τις ζητούμενες υπηρεσίες. Δηλαδή δεν χρειάζεται π.χ. να γνωρίζουμε τι είναι το SMTP για να στείλουμε ένα email. + +Το TCP/IP αναλαμβάνει την παροχή ενός interface για τις εφαρμογές μας έτσι ώστε αυτές να μπορούν να έχουν πρόσβαση στο λογισμικό του δικτύου και να διευκολύνει +την προσπέλαση στο δίκτυο. Για να γίνει αυτό, η σουίτα χρησιμοποιεί ένα σύστημα από \"λογικά κανάλια\" τα οποία ονομάζονται **ports**. Κάθε port διαθέτει ένα +port number το οποίο χρησιμοποιείται για την αναγνώριση της port και ουσιαστικά και για την αναγνώριση της εργασίας που καλείτε να εκτελέσει. Με απλά λόγια (και +λίγη φαντασία) τα ports είναι αυλοί επικοινωνίας που μέσα τους κυκλοφορούν τα δεδομένα και οι αιτήσεις από την αφαρμογή προς το δίκτυο. + +Το ίδιο το TCP/IP περιέχει μερικές εφαρμογές οι οποίες χρησιμοποιούνται για να διευκολύνουν τις διάφορες διαδικασίες. Αυτές οι εφαρμογές είναι οι γνωστές στους +περισσότερους **ftp lpr ping telnet** και **traceroute** των οποίων την χρησιμότητα θα εξηγήσουμε παρακάτω. + + +### [3. Τα Utilities του TCP/IP]{#s3} + +### [3.1 ftp]{#ss3.1} + +Το ftp είναι εφαρμογή (ουσιαστικά ένα κέλυφος εργασίας) η οποία χρησιμοποιεί το **File Transfer Protocol** για την μεταφορά αρχείων από και προς έναν υπολογιστή +ο οπoίος παίζει τον ρόλο του ftp server. Με την εντολή ftp εκκινούμε την εφαρμογή client η οποία μας παρέχει το περιβάλλον για να συνδεθούμε και να εργαστούμε +με υπολογιστές οι οποίοι τρέχουν τον λεγόμενο **ftp daemon** ο οποίος είναι μία εφαρμογή που τρέχει σε έναν ftp server στο παρασκήνιο και όταν της ζητη8εί από +τον client κάποιου υπολογιστή στο δίκτυο, αναλαμβάνει την διεκπεραιρέωση της αιτήσεως. + +Η εκκίνηση της ftp μπορεί να γίνει είτε δίδοντας την εντολή σκέτη ή προσθέτοντας το **IP adress** ή το **domain name** του εξυπηρετητή που θέλουμε να +συνδεθούμε. Μπορούμε επίσης να προσθέσουμε παραμέτρους οι οποίοι να καθορίζουν τον τρόπο και το είδος της σύνδεσης που θέλουμε να πετύχουμε. Μία ματιά στην +**man page** της ftp θα σας κατατοπίσει καλύτερα για το ποιες παράμετροι μπορούν να σας φανούν χρήσιμες. + +Αφού επιτύχουμε την σύνδεση με το ftp site που μας ενδιαφέρει μία σειρά εντολών μπορεί να δωθεί για την εργασία μας. Πολλές απ\' αυτές είναι ήδη γνωστές από την +εργασία μας στα linux shells **(pwd mkdir cd chmod)**. + +### [3.2 lpr]{#ss3.2} + +Είναι εντολή η οποία χρησιμοποιείται για την δρομολόγιση και μορφοποίηση αιτήσεων προς έναν εκτυπωτή. Όταν υπάρχουν πολύ εκτυπωτές πάνω στο δίκτυο η lpr μπορεί +να εκτελεστεί με την παράμετρο **-P** και το όνομα του εκτυπωτή που θέλουμε να μας εξυπηρετήσει. Επίσης μια πλιάδα από παραμέτρους μπορούν να χρησιμοποιηθούν +για ικανοποιητικότερη χρήση της. + +### [3.3 ping]{#ss3.3} + +Utility το οποίο χρησιμοποιείται ως διαγνωστικό. Όταν εκτελέσουμε την εντολή ping domainname τότε αποστέλλουμε ένα διαγνωστικό πακέττο κάτω από το **ICMP +protocol** (Internet Control Message Protocol) αιτώντας ταυτόχρονα απάντηση **(ICMP echo)** από τον παραλήπτη. Η ping έχει σχεδιασθεί έτσι ώστε να βοηθά τον +έλεγχο, την αποσφαλμάτωση, και μέτρηση της ανταπόκρισης μεταξύ δύο υπολογιστών σε ένα δίκτυο.Όταν παραλειφθεί το ICMP echo από τον υπολογιστή που εκτελέσαμε την +ping, μας εμφανίζεται στην οθόνη το μέγεθος του πακέττου που απεστάλλει (56bytes για το linux) ο χρόνος σε milliseconds ο οποίος χρειάστηκε για να αποσταλλεί +και να επιστρέψει όπως επίσης και το **TTL** (Time To Live), δηλαδή μία τιμή η οποία μας δείχνει πόσους επιπλεόν routers μπορούσε το πακέττο να περάσει μέχρι να +απορριφθεί. Αν το ποσό που επιστρέφει ως ένδειξη στην TTL είναι κοντά στο μηδέν (1,2 κλπ) τότε θα πρέπει να υποψιαστούμε ότι σφάλματα στο δίκτυο. + +### [3.4 telnet]{#ss3.4} + +Το telnet είναι κέλυφος εργασίας το οποίο ενσωματώνει διάφορες λειτουργίες για την εργασία μεταξύ δύο υπολογιστών εκ των οποίων ο ένας εκτελεί χρέη εξυπηρετητή +τρέχοντας τον **telnet daemon**. Το telnet επίσης είναι και αυτόνομο πρωτόκολλο επικοινωνίας. Σκοπός του telnet είναι να μας παρέχει ένα περιβάλλον εργασίας +όπου οι εντολές που εμείς πληκτρολογούμε να περνούν στο δίκτυο και να εκτελούνται στον απομακρυσμένο από εμάς υπολογιστή. Για να εκκινήσουμε μία telnet session +χρησιμοποιούμε την εντολή: + +- telnet *hostname* + +Οι εντολές που δίνουμε από εκεί και πέρα εκτελούνται στον απομακρυσμένο υπολογιστή + +### [3.5 traceroute]{#ss3.5} + +Είναι utility το οποίο μας δείχνει την διαδρομή που ακολουθει ένα πακέττο δεδομένων έως ότου καταλήξει στον προορισμό του. Εάν δοκιμάσουμε την traceroute σε +κάποιο domain στο INTERNET θα καταλάβουμε από τα domain names και την γεωγραφική διαδρομή που έκανε το πακέττο εως ότου φτάσει στον προορισμό του. + diff --git a/content/articles/25/03_htmlhell.md b/content/articles/25/03_htmlhell.md new file mode 100644 index 0000000..4554f51 --- /dev/null +++ b/content/articles/25/03_htmlhell.md @@ -0,0 +1,150 @@ ++++ +title = 'The HTML Hell Page' +date = '2000-07-01T00:00:00Z' +description = '' +author = 'Eric S. Raymond(mailto:esr@thyrsus.com) Μετάφραση: DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 25'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό αποτελεί την μετάφραση του άρθρου The HTML Hell Page του Eric S. Raymond, το οποίο μπορείτε να βρείτε στην διεύθυνση +. Οι απόψεις του είναι απόλυτα δικαιολογημένες (θα μπορέσετε να διακρίνετε την αγανάκτηση) και διατυπώνονται με +εξίσου \"χαρακτηριστικό\" τρόπο :-)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Καλως Ήρθατε στην HTML σελίδα της κόλασης** + +**Ξέρετε πως βρίσκεστε σε σχεδιαστική κόλαση όταν βλέπετε\...** + +**Κείμενο που αναβοσβήνει (blinking)**\ +Το κείμενο αυτό καθιστά αδύνατη την προσοχή (του επισκέπτη) σε οτιδήποτε άλλο στην σελίδα. Ρίχνει το 87% των επισκεπτών σε μιά αβοήθητη κατάσταση καθηλωμένου +και \"κλειδωμένου\" εγκεφάλου, περίπου όπως ένα κουνέλι που τυφλώνεται από τους προβολείς της διερχόμενης νταλίκας. Αυτό δεν είναι καλό. Αν το *παρακάνει* +κανείς με το blink tag, τότε δικαιούται να τον πυροβολήσουν. *Στοιχείο:* αν **χρησιμοποιείτε** το blink tag, τότε ήδη το *παρακάνετε*. + +**Περιττό animation**\ +Χρησιμοποιώντας περιττά animations πετυχαίνετε όλους τους \"*υπέροχους τραυματισμούς*\" του blink tag συν την \"*δημόσια προσβολή*\" του χρόνου που απαιτείται +για το κατέβασμα αυτών. Άνθρωποι που το παρακάνουν με τα animations θα έπρεπε να τους εμβολίσουν με βιβλία σε κάθε \"στόμιο\" του σώματός τους μέχρι να +καταλάβουν πως γεμίζοντας δύο ή και τρία frames μόνο με animations είναι ακόμα πιο δυσάρεστο από την *κατάστασή τους*. + +**Marquees**\ +Λοιπόν, μπορεί να νομίζετε πως το blink tag και τα animations είναι η χειρότερη κατάχρηση που θα μπορούσαν να κάνουν οι \"γιδοβοσκοί\". Μπαααααα. Σε τέτοιες +περιπτώσεις όπου η κατάχρηση απλά δεν είναι αρκετή, ο Μεγάλος Σατανάς του Redmond μας έδωσε το \, το οποίο επιτρέπει σε κάποιον να δημιουργήσει +animated και κυλιόμενες \"τέντες\" μέσα σε αγκύλες (\[\]). Αυτός ο μπάσταρδος ξάδελφος του blink tag μπορεί να προκαλέσει ίλιγγο και αποπληξία σε ευεπηρέαστους +ανθρώπους, μειώνοντάς τους στο σημείο του γλυκοσαλιάσματος, το οποίο παρεμπιπτόντως είναι και αναγκαία προϋπόθεσις για να αγοράσει κανείς προϊόντα της +Microsoft. Σύμπτωσις; Εμείς πιστεύουμε πως όχι. + +**Φανταχτερά (=κακόγουστα) backgrounds**\ +Την επόμενη φορά που θα \"σκοντάψουμε\" σε μιά σελίδα φτιαγμένη από κάποιον που νομίζει ότι είναι ωραίο (=cool) να χρησιμοποιεί φλόγες που ξεπηδούν ή επτά +αποχρώσεις του ρόζ για background, ορκιζόμαστε πως θα περάσουμε μέσα από την οθόνη για να φτάσουμε και να ξεριζώσουμε το λαιμό του υπεύθυνου για το ξέρασμα. Αν +υπάρχει χειρότερος διοργανωτής υπερκόπωσης των ματιών και ημικρανιών από το blink tag, τότε είναι αυτό. + +**Μη αναγνώσιμος συνδυασμός χρώματος κειμένου/background**\ +Ο κόσμος είναι γεμάτος από κλόουν που νομίζουν πως οι σελίδες τους φαινόνται καλύτερα με makeup για κλόουν, με αφθονία αντιθετικών χρωμάτων (αυτό το κάνει και ο +κακόγουστος με τα φανταχτερά backgrounds). Οι μαγικές λέξεις που αυτοί οι χαμένοι πρέπει να μάθουν είναι \"καθαρή αντίθεση/contrast\". Το γούστο χρωμάτων +στηρίζεται μεταξύ εσάς και των Θεών της Κακογουστιάς, αλλά εάν δεν χρησιμοποιήσετε φωτεινό κείμενο σε σκούρο background, ή το αντίθετο, τότε θα χάσετε +επισκέπτες που τους αρέσει να διαβάζουν χωρίς να καταλαβαίνουν τον κόπο που χρειάζεται για να γίνει αυτό. + +**Επιβλητικές επικεφαλίδες**\ +Οι επιβλητικές επικεφαλίδες είναι \"αγενείς\". Εκτός αν νομίζετε πως κάθε επισκέπτης λαχταρά την ευκαιρία να περιμένει τόσο πολύ που να διακρίνει τα νύχια των +ποδιών του να μεγαλώνουν ενώ περιμένει να κατέβει το GIF απλά και μόνο για να φανεί η επικεφαλίδα, η οποία θα μπορούσε να δημιουργηθεί με μία ωραία, *γρήγορη*, +γραμματοσειρά. + +**\"κάντε resize το browser σε \...\" οδηγίες**\ +Σωστά. Λες και θέλαμε να καταλαμβάνουν οι browser μας τόσην επιφάνεια. Αλλά αυτό που πραγματικά είναι ενοχλητικό είναι ότι τις περισσότερες φορές οι +\"γιδοβοσκοί\" το αντιλαμβάνονται λανθασμένα. Λες και στους δικούς τους browsers αντισταθμίζονται 8 pixel, εμάς μας τρώει 20, αλλά ξεχνούν να ενεργοποιήσουν τα +scroll bars, οπότε έχουν βγεί έξω τουλάχιστον 30 pixels, αν και η σελίδα ήταν έτσι κι αλλιώς για τα μπάζα. + +**Ξέρετε πως βρίσκεστε σε κόλαση περιεχομένου όταν βλέπετε\...** + +**Μετρητές**\ +\"Είστε ο υπ\' αριθμόν 2.317 επισκέπτης\". Ναι, λες και μας νοιάζει. Μέσω Yahoo ή Altavista μπορεί κανείς να βρεί χωρίς κόπο κάθε σελίδα του δικτύου με θέμα +\"τυροπιτάκια\" ή \"το καναρίνι μου\". Σε αυτόν τον γενναίο νέο κόσμο, οι μετρητές δεν είναι τίποτα άλλο παρά μιά μορφή επίδειξης εγωισμού, εντυπωσιάζοντας μόνο +αυτούς που φέρουν μυαλό από lemming\*. Οι μετρητές θα σας δείξουν πόσα κορόιδα διάβαζαν με τις ώρες αυτές τις σελίδες, αλλά δεν θα σας δείξουν πόσα άτομα σε +κλάσματα δευτερολέπτου μουρμούρισαν \"γιδοβοσκοί\" και είχαν ήδη φύγει. Οι μετρητές είναι κακό εργαλείο για την στατιστική επισκεπτών μιας σελίδας, βαραίνοντας +ακόμα περισσότερο τα \"καλώδια\" του Δικτύου.\ +**\* σημείωση από τον μεταφραστή:** επειδή υπάρχουν φήμες πως πολλά άτομα του χώρου μας εδώ, δεν έχουν ασχοληθεί με παιχνίδια, να αποσαφηνίσω τί είναι το +lemming. Υπήρχε κάποτε ένα ωραίο παιχνίδι, τα Lemmings, όπου είχες υπό τον έλεγχό σου μιά αγέλη από μικροσκοπικά ανεγκέφαλα όντα, που το μόνο που ήξεραν να +κάνουν ήταν να περπατάνε ΜΟΝΟ ευθεία και να εκρήγνυνται (αν τους διέταζες). Ο χρήστης λοιπόν, έπρεπε να διαμορφώσει κατάλληλα την πίστα ώστε τα ηλίθια αυτά όντα +να φτάσουν (περπατώντας ΜΟΝΟ ίσια) στην πόρτα που βρισκόταν στην άλλη μεριά της πίστας. Δεν ξέρω αν καταλάβατε πόσο ανεγκέφαλα είναι αυτά τα όντα (άλλο να σας +το λέω και άλλο να το βλέπετε ;-) + +**Μπαγιάτικα links**\ +Τα μπαγιάτικα links είναι lame. Άτομα που έχουν πάρα πολλά μπαγιάτικα links είναι lamers. OK, ο καθένας έχει έναν δείκτη \"εξάτμισης\" των links πού και πού \-- +αλλά δεν έχετε παρατηρήσει ότι τα μπαγιάτικα links εμφανίζονται κατα γενική ομολογία σε σμήνη, σαν κατσαρίδες; Κι αυτό γιατί άτομα με καλές σελίδες +χρησιμοποιούν links, αλλά τα προσέχουν και διορθώνουν τα μπαγιάτικα links γρήγορα χωρίς να το καταλάβει κανείς. Μία σελίδα που έχει πολλά μπαγιάτικα links +μιλάει από μόνη της: \"Ο δημιουργός μου είναι τεμπέλης, χαμένο κορμί, ιδιοκτήτης τρώγλης που συντηρεί ένα παλάτι κατσαρίδων\". + +**Σελίδες που βρίσκονται αιώνια υπο κατασκευή**\ +Οι surfers του δικτύου διαπιστώνουν γρήγορα πως για κάθε 10 σελίδες υπο κατασκευή, ίσως δύο τρείς μόνο από αυτές να καταργηθούν πρίν από το ολοκαύτωμα του +Σύμπαντος. Αυτό είναι ηλίθιο. Η html δεν είναι επιστήμη πυραύλων και η κατασκευή σελίδων δεν είναι μιά αργή διαδικασία. Όποιος δεν μπορεί να αφαιρέσει τις \"υπο +κατασκευή\" ταμπέλες από τις σελίδες του, θα έπρεπε αμέσως να τις παρατήσει και να βρεί ένα hobby που ταιριάζει καλύτερα στις ικανότητές του, όπως ας πούμε να +σαλιαρίζει(=ανοηταίνει) ή να κοιτάζει τον τοίχο. + +**Ξέρετε πως βρίσκεστε σε αισθητική κόλαση όταν βλέπετε\...** + +**Ανούσιες εγωκεντρικές σελίδες**\ +Αν μας δίναν μία δραχμή για κάθε σελίδα του στύλ \"Γεια, σε αυτήν την φωτογραφία βλέπετε εμένα και σε αυτήν βλέπετε το σκύλο/τη γάτα/τον γκόμενο/την γκόμενά +μου\" τότε αύριο κιόλας θα παίρναμε σύνταξη και θα ζούσαμε στην Aruba μαζί με μιά παρέα από supermodels. *Στοιχείο:* αν δεν έχεις κάτι να πείς, τότε σκάσε. Και +κράτα το μακριά από το Internet, η ζωή είναι πολύ σύντομη για βαρεμάρα. + +**Εταιρική logό-ρεια**\ +Όλοι τις έχουμε δεί \-- σελίδες κάποιων εταιρειών που ξεκινούν κατεβάζοντας κάποιο θηριώδες logo από την κόλαση. Και αφού περιμένετε κανα εκατομμύριο χρόνια να +τελειώσει, η υπόλοιπη σελίδα διακατέχεται από έναν τόνο λόγια για το πόσο υπέροχη είναι η εταιρεία κλπ, αλλά *καθόλου περιεχόμενο*. Συμβουλή για τους +marketroids: αυτό *δεν* είναι καθόλου αποτελεσματικό, εκτός εάν ο σκοπός σας είναι να κάνετε την εταιρεία να μοιάζει με όλες τις άλλες που νομίζουν πως έχοντας +μιά Web διεύθυνση είναι \"κάποιες\". Κι όμως !! + +**Διαφημίσεις από την κόλαση**\ +Δεν αγαπάτε τις διαφημίσεις στο πάνω μέρος των σελίδων που αλλάζουν κάθε φορά που διαβάζεται η σελίδα; Αν πηγαίνετε μπρος-πίσω ανάμεσα σε μιά κύρια σελίδα και +σε μιά άλλη, ψάχνοντας δεδομένα σε μιά συγκεκριμένη υποκατηγορία, τότε κερδίζετε την αμφίβολη ευχαρίστηση να περιμένετε κάθε φορά να φορτώσει ένα καινούριο +γραφικό! + +**Ανυπαρξία e-mail διεύθυνσης για feedback**\ +Αυτοί οι τύποι αρέσκονται στο να τους επισκέπτεστε, να τους βλέπετε και να τους ακούτε, αλλά οι ίδιοι δεν επιθυμούν να ακούσουν εσάς. Δεν είναι ιδιαίτερα +ενδιαφέρον ότι οι μισές Web σελίδες εταιρειών με μεγάλα ονόματα δεν σας αποκαλύπτουν ποιά είναι η e-mail διεύθυνσή τους; Αυτό δείχνει πόσο αυτές οι εταιρείες +*πραγματικά* εκτιμούν τους πελάτες τους. Συμβουλή για τους marketdroids: αυτή η κατάσταση κάνει την εταιρεία να μοιάζει ακριβώς τόσο αλαζονική, ηλίθια και +αδιάφορη για τους πελάτες, όσο πραγματικά είναι. Σκεφτείτε το θέμα της e-mail διεύθυνσης για feedback ως απαραίτητη μεταμφίεση. + +**Ξέρετε πως βρίσκεστε στην προέκταση της κόλασης όταν βλέπετε\...** + +**broken HTML**\ +Η υπερβολική κακογραμμένη και λάθος HTML είναι μάστιγα για τον κόσμο γιατί τυχαίνει να προσπερνάει τον βλαμμένο-εγκεφαλικά \'parser\' του αγαπημένου web browser +του καθενός. Ο σχεδιαστής του site κερδίζει το βραβείο διαστροφής εάν μπορεί να προκαλέσει ριζοσπαστικά διαφορετικές συμπεριφορές σε διαφορετικούς browsers ή +browsers διαφορετικής έκδοσης. + +**μή σταθερές επεκτάσεις**\ +Πολύ αγαπάμε τη στιγμή όταν ο browser παγώνει καθώς φορτώνει μιά σελίδα, μένει εκεί για λίγο και μετά ατιμωτικά πετάει coredump. Όταν συμβαίνει αυτό, μπορείτε +να στοιχηματίσετε χρήματα ότι η σελίδα χρησιμοποιεί κάποια \"άχρηστη\" επέκταση, την οποία κανένας ποτέ δεν προβληματίστηκε να κάνει κάνει debug σωστά (υπάρχει +σχεδόν ακριβής αριθμός αυτών). Ο χειρότερος εφιάλτης είναι χωρίς αμφιβολία ο \... + +**frames**\ +Τα frames είναι για τους ηλίθιους. Δεν δουλεύουν σε αρκετούς browsers, αλλά ευθύνονται για το core-dump σε πολλούς άλλους, οι οποίοι θεωρητικά υποτίθεται πως +υποστηρίζουν frames. Καταλαμβάνουν υπερβολικά πολύ χώρο στην οθόνη και, όταν χρησιμοποιούνται υπέρμετρα, τότε καθιστούν σχεδόν αδύνατο να καταλάβεις πού ήσουν +και πώς να πάς πίσω, εκεί από όπου ήρθες. + +**Καλυτερεύοντας την σελίδα** + +\"Οκ,\" σας ακούω να λέτε, \"μου έδωσες καλές συμβουλές στο πώς να μην τα κάνω θάλασσα. Έχεις να πείς κάτι πιό θετικό; Όπως, σωστά πράγματα και πώς να κάνω +καλύτερη μιά σελίδα;\" + +Για σένα, φίλε μου, έχω τρείς λέξεις. Περιεχόμενο, *περιεχόμενο* και **περιεχόμενο**. Δώσε στο \"ακροατήριο\" έναν λόγο για να νοιαστεί. Υπάρχουν τόσες πολλές +σελίδες που μοιάζουν σαν \"ιστορίες που διηγούνται ηλίθιοι\", γεμάτες από ήχο και μανία, μη σημαίνοντας κάτι. Θέλεις να προκαλέις το ενδιαφέρον; Τότε ξέχνα τα +γραφικά και τη λάμψη. Πρώτα και κύρια, *να έχεις κάτι να πείς*. + +**Ευχαριστίες** + +\...στον Pete Glasscock για την έμπνευση αυτής της σελίδας. + +\...στον Patrick Campbell-Preston \ για τα περισσότερα στην ενότητα \"προέκταση της κόλασης\". + +\...στον Rob Novak \ για το \"διαφημίσεις από την κόλαση\". + +Πολλοί άλλοι έχουν συμβάλλει στην δημιουργία αυτής της σελίδας και επιθυμούν να **μην** τους επιδοθούν ευχαριστίες. + +**Άλλες Καλές Συμβουλές** + +Υπάρχει μια μεγάλη \"φλυαρία\" για web page design από τον [C. J. Silverio](http://www.spies.com/~ceej/Words/rant.web.html). Φριχτά παραδείγματα κακής τεχνικής +βρίσκονται στο [Web Pages That Suck](http://www.webpagesthatsuck.com). Η στήλη του Jakob Neilsen [Top Ten Mistakes in Web +Design](http://www.useit.com/alertbox/9605.html) είναι πολύ καλή. Επίσης δείτε τα [Ten Commandments of Web +Design](http://www.mcs.net/~jorn/html/terrorist.html). diff --git a/content/articles/25/04_xbasic.md b/content/articles/25/04_xbasic.md new file mode 100644 index 0000000..ff6004f --- /dev/null +++ b/content/articles/25/04_xbasic.md @@ -0,0 +1,343 @@ ++++ +title = 'XBASIC' +date = '2000-07-01T00:00:00Z' +description = '' +author = 'Κ. Τσακάλογλου Tsakf@hellug.gr(mailto:%20Tsakf@hellug.gr)' +issue = ['Magaz 25'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σε αυτό το τεύχος του magaz Θα κάνουμε μια πρώτη προσπάθεια θα γράψουμε ένα πάρα πολύ απλό πρόγραμμα για να δούμε πως λειτουργεί το περιβάλλον και μελετήσουμε +τα βασικά στοιχεία που αποτελούν τη δομή ενός προγράμματος Xbasic.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Αρχικές ενέργειες** +------------------------------------------------- + +**2. Το πρόγραμμά μας** +------------------------------------------------ + +**3. Ανάλυση προγράμματος** +---------------------------------------------------- + +**4. Δεδομένα: Μεταβλητές και σταθερές.** +------------------------------------------------------------------ + +- [4.1 Μεταβλητές](#ss4.1) +- [4.2 Αριθμητικές μεταβλητές](#ss4.2) +- [4.3 Σκοπός μεταβλητών](#ss4.3) +- [4.4 Σταθερές](#ss4.4) + +**5. Επίλογος 2ου μέρους** +--------------------------------------------------- + + +### [1. Αρχικές ενέργειες]{#s1} + +Ξεκινάμε δίνοντας την εντολή στο περιβάλλον εργασίας της Xbasic για κατασκευή νέου προγράμματος επιλέγοντας από το **File\>New**. Θα εμφανιστεί παράθυρο για να +επιλεγεί το είδος του κειμένου που θέλουμε να δημιουργήσουμε. Επιλέγουμε την επιλογή program και το περιβάλλον δημιουργεί τις αρχικές εντολές που απαιτούνται +για το νέο πρόγραμμα. + +Θα δούμε ότι έχουν δημιουργηθεί δύο ενότητες. + +- 1\. PROLOG +- 2\. ENTRY + +Μπορούμε να επιλέξουμε ποια θα βλέπουμε με την επιλογή **view\>function** και εμφανίζεται παράθυρο επιλογών από όπου διαλέγουμε την επιθυμητή ενότητα. +Επιλέγοντας το PROLOG βλέπουμε ότι το περιβάλλον έχει δημιουργήσει κάποιες εντολές για να μας βοηθήσει στο στήσιμο του νέου προγράμματος μας. + + +### [2. Το πρόγραμμά μας]{#s2} + +Θα κατασκευάσουμε ένα απλό πρόγραμμα για να δούμε την δομή του αναλυτικά. Ο κώδικας που θα δούμε περιέχει αριθμούς γραμμής που στην πραγματικότητα δεν +χρειαζόμαστε. Μπήκαν απλά για να μπορεί να γίνει κατανοητή η εξήγηση των ενοτήτων. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 1. ' + 2. ' #################### + 3. ' ##### PROLOG ##### + 4. ' #################### + 5. ' + + 6. PROGRAM "multiply" ' 1-8 char program/file name without .x or any .extent + 7. VERSION "1.0000" ' version number - increment before saving altered program + 8. ' + 9. ' You can stop the PDE from inserting the following PROLOG comment lines + 10.' by removing them from the prolog.xxx file in your \xb\xxx directory. + 11.' + 12.' Programs contain: 1: PROLOG - no executable code - see below + 13.' 2: Entry function - start execution at 1st declared func + 14.' * = optional 3: Other functions - everything else - all other functions + 15.' + 16.' The PROLOG contains (in this order): + 17.' * 1. Program name statement PROGRAM "progname" + 18.' * 2. Version number statement VERSION "0.0000" + 19.' * 3. Import library statements IMPORT "libName" + 20.' * 4. Composite type definitions TYPE ... END TYPE + 21.' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args) + 22.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args) + 23.' * 7. Shared constant definitions $$ConstantName = literal or constant + 24.' * 8. Shared variable declarations SHARED variable + 25.' + 26.' ****** Comment libraries in/out as needed ***** + 27.' + 28.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... + 29.' IMPORT "xcm" ' Complex library : complex number library (trig, etc) + 30. IMPORT "xst" ' Standard library : required by most programs + 31.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs + 32.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs + 33.' + 34. + 35.DECLARE FUNCTION Entry () + 36.DECLARE FUNCTION multiply (numa%,numb%) + 37.' + 38.' + 39.' ###################### + 40.' ##### Entry () ##### + 41.' ###################### + 42.' + 43.' Programs contain: + 44.' 1. A PROLOG with type/function/constant declarations. + 45.' 2. This Entry() function where execution begins. + 46.' 3. Zero or more additional functions. + 47.' + 48.FUNCTION Entry () + 49. STATIC prompt$,inpu$ + 50. STATIC numa%, numb%,numc% + 51. inpu$=INLINE$("Enter a number 1..100 ") + 52. numa%=SSHORT(inpu$) + 53. inpu$=INLINE$("Enter a number 1..100 ") + 54. numb%=SSHORT(inpu$) + + 55. numc%=multiply(numa%,numb%) + 56. PRINT numc% + 57. + 58.END FUNCTION + 59.' + 60.' + 61.' ######################### + 62.' ##### multiply () ##### + 63.' ######################### + 64.' + 65.FUNCTION multiply (numa%,numb%) + 66.STATIC p1% + 67. + 68.p1%=numa%*numb% + 69. + 70.END FUNCTION p1% + 71.END PROGRAM + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [3. Ανάλυση προγράμματος]{#s3} + +**Γραμμές 6-7** Χαρακτηριστικά προγράμματος + +Γράφουμε το όνομα του προγράμματος και την έκδοσή του. + +**Γραμμές 28-32** Βιβλιοθήκες + +Γράφουμε τα ονόματα των βιβλιοθηκών που θα συμπεριληφθούν στο πρόγραμμα. Η εντολή είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + IMPORT όνομα βιβλιοθήκης + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οι βιβλιοθήκες είναι ξεχωριστά αρχεία στον σκληρό δίσκο και προστίθενται αυτόματα στον κώδικα που έχουμε γράψει κατά την εκτέλεση του. Μαζί με την Xbasic έχουν +έρθει οι βιβλιοθήκες. + +**xma** για μαθηματικά, **xcm** για πολύπλοκες μαθηματικές πράξεις, (τριγωνομετρία κλπ.) **xst** είναι η βιβλιοθήκη που χρησιμοποιούμε πάντα και έχει τις +βασικές εντολές, **xgr** και xui που χρησιμοποιούνται όταν κατασκευάζουμε προγράμματα με γραφικό περιβάλλον (φόρμες, κουμπιά κλπ.). Η εντολή IMPORT είναι κάτι +αντίστοιχο της \#include της γλώσσας C. + +Στο συγκεκριμένο παράδειγμα χρησιμοποιείται μόνο η βιβλιοθήκη xst έτσι μπροστά από την εντολή δεν υπάρχει το \"\'\" που δηλώνει ότι η εντολή πρέπει να αγνοηθεί. + +**Γραμμές 35-36** Ορισμός παραμέτρων συναρτήσεων του προγράμματος + +Για να μπορεί να εκτελεστεί μια συνάρτηση που κατασκευάζουμε στο πρόγραμμα μας πρέπει να ορισθούν το όνομα, τυχόν παράμετροι κλπ. Εδώ δεν βάζουμε τον κώδικα της +συνάρτησης αλλά απλά τον ορισμό της. Ο κώδικας της συνάρτησης μπαίνει παρακάτω όπως θα δούμε στις γραμμές 65-70. + +Αυτά τα τρία κομμάτια κώδικα αποτελούν το PROLOG όπως αναφέρεται και στο παράθυρο του γραφικού περιβάλλοντος. άλλα στοιχεία του PROLOG που δεν τα χρησιμοποιούμε +στο παράδειγμά μας είναι: + +- Ορισμός τύπων μεταβλητών. +- Ορισμός εσωτερικών μεταβλητών (του κώδικα που έχουμε και γράφουμε). +- Ορισμός εξωτερικών μεταβλητών (του κώδικα που υπάρχει σε άλλο αρχείο). +- Ορισμός σταθερών. + +**Γραμμές 48-58** Η κύρια συνάρτηση Entry + +Η πραγματική δουλειά της Xbasic γίνεται εδώ. Οι εντολές της γλώσσας εμφανίζουν μηνύματα στο παράθυρο κονσόλας, δέχονται είσοδο από το πληκτρολόγιο, εκτελούν +μαθηματικές πράξεις, καλούν άλλες συναρτήσεις, διαβάζουν ή γράφουν σε αρχεία στον δίσκο και οποιαδήποτε άλλη εργασία ένα πρόγραμμα χρειάζεται να εκτελέσει. + +Οι εντολές που βλέπουμε εδώ είναι οι: + +**Γραμμές 51,53** INLINE\$ + +Αυτή η συνάρτηση εμφανίζει ένα μήνυμα στο παράθυρο κονσόλας και περιμένει εισαγωγή αλφαριθμητικών χαρακτήρων, συνοδευόμενη από το ENTER. + +**Γραμμές 52,54** SSHORT + +Αυτή η συνάρτηση μετατρέπει την σειρά αλφαριθμητικών χαρακτήρων σε αριθμητική μεταβλητή για να μπορούν να γίνουν μαθηματικές πράξεις. + +**Γραμμή 55** κλήση συνάρτησης + +Εδώ γίνεται η κλήση της συνάρτησης multiply που ορίζεται στις γραμμές 65-70. + +**Γραμμή 56** PRINT + +Αυτή η συνάρτηση εμφανίζει μηνύματα στο παράθυρο κονσόλας. + +**Γραμμές 65-70** Η συνάρτηση multiply + +Οι συναρτήσεις είναι ανεξάρτητα κομμάτια κώδικα που γράφτηκαν να κάνουν μια συγκεκριμένη δουλειά. Κάθε συνάρτηση έχει όνομα, παραμέτρους και τιμή επιστροφής. Ο +κώδικας της συνάρτησης εκτελείται μόλις σε κάποιο άλλο σημείο του προγράμματος την καλέσουμε με το όνομά της. Το απολύτως απαραίτητο για μια συνάρτηση είναι το +όνομά της ενώ μπορεί να μην έχει παραμέτρους ούτε τιμή επιστροφής. + +**Γραμμή 68** Πολλαπλασιασμός + +Στο παράδειγμά μας η συνάρτηση υπολογίζει το γινόμενο των μεταβλητών numa% και numb% και το τοποθετεί στην μεταβλητή p1%. + +**Γραμμή 70** END FUNCTION + +Εδώ τελειώνει ο κώδικας της συνάρτησης. Μπορούμε να βάλουμε δίπλα την μεταβλητή που θέλουμε να επιστρέψει η συνάρτηση. Στο παράδειγμά μας θέλουμε, να +επιστρέψουμε στην καλούσα συνάρτηση το γινόμενο, γι\' αυτό γράφουμε δίπλα την μεταβλητή που θέλουμε να επιστρέψει. + +**Γραμμές 1-5,8-29,31-33,37-47 και 59-64** σχόλια + +Σε αυτές στις γραμμές υπάρχει το σύμβολο \"\'\" που δηλώνει ότι η γραμμή αυτή είναι γραμμή σχολίων και έτσι δεν εκτελείται τίποτα απλά υπάρχει για να μπορεί ο +προγραμματιστής να βάζει σχόλια και να θυμάται μετά από καιρό τι έχει κάνει. + + +### [4. Δεδομένα: Μεταβλητές και σταθερές.]{#s4} + +Στο παράδειγμά μας στις γραμμές 49,50,66 γίνεται ο ορισμός μεταβλητών. Τα προγράμματα συνήθως χρησιμοποιούν διαφορετικής μορφής δεδομένα και χρειάζεται ένα +τρόπο να τα αποθηκεύει. Αυτά τα δεδομένα μπορεί να είναι ή αριθμοί ή γράμματα (χαρακτήρες). Η Xbasic έχει δύο τρόπους να αποθηκεύει δεδομένα -μεταβλητές και +σταθερές- όπου κάθε περίπτωση έχει τις ιδιότητές της. + +### [4.1 Μεταβλητές]{#ss4.1} + +Οι μεταβλητές χρησιμοποιούνται για να αποθηκεύσουμε δεδομένα του προγράμματος και να τα χρησιμοποιήσουμε σε κάποιο άλλο σημείο τους. Οι μεταβλητές στην +πραγματικότητα δείχνουν σε κάποια θέση μνήμης στον υπολογιστή που είναι αποθηκευμένα τα δεδομένα που αντιστοιχούν στην μεταβλητή. Τα ονόματα των μεταβλητών +ξεκινάνε πάντα με τουλάχιστον ένα πεζό αγγλικό γράμμα. Τα κεφαλαία τα χρησιμοποιούμε αποκλειστικά να γράφουμε τις εντολές της Xbasic. Είναι απαραίτητο να γίνει +αυτό γιατί εντολή που έχει έστω και ένα πεζό γράμμα δεν αναγνωρίζεται. Στα ονόματα των μεταβλητών η γλώσσα δεν μετατρέπει σε κεφαλαία ή πεζά ότι μοιάζει και +έτσι οι μεταβλητές numa και numA είναι διαφορετικές. Τα ονόματα μεταβλητών δεν μπορούν να περιέχουν σύμβολα εκτός από το την υπογράμμιση (Underscore \_). + +### [4.2 Αριθμητικές μεταβλητές]{#ss4.2} + +Στην Xbasic υπάρχουν διάφορα είδη αριθμητικών μεταβλητών. Ανάλογα με το είδος της μεταβλητής υπάρχουν διαφορετικές απαιτήσεις μνήμης και διαφέρουν ως προς τον +τρόπο που γίνονται οι μαθηματικές πράξεις σε αυτές. Π.χ. Μικρές αριθμητικές τιμές 1,10,100,-5 χρειάζονται λιγότερη μνήμη για να αποθηκευθούν από ότι οι τιμές +3.14 ή 312.45687632 και λιγότερη ώρα για τον υπολογισμό τους. Με την κατάλληλη χρήση των μεταβλητών εξασφαλίζεται η γρήγορη και αποτελεσματική λειτουργία του +προγράμματός μας. Οι αριθμητικές μεταβλητές διακρίνονται σε τρία βασικά είδη: + +- Ακέραιες μεταβλητές όπου και αυτές διακρίνονται σε δύο ομάδες (με πρόσημο και χωρίς πρόσημο). +- Μεταβλητές κινητής υποδιαστολής όπου τα περιεχόμενά τους μπορούν να είναι κει δεκαδικοί αριθμοί. +- Μεταβλητές συστήματος. + +Παραθέτω ένα πίνακα με τα είδη των ακεραίων αριθμητικών μεταβλητών που διαθέτει η Xbasic με το επίθεμά τους, το όνομα τους, το χώρο (σε bits) που καταλαμβάνουν +στην μνήμη, και τις ελάχιστες και μέγιστες τιμές που μπορούν να έχουν. + +- Μεταβλητές με πρόσημο (signed). + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + @ SBYTE (8 bits) -128 έως 127 + % SSHORT (16 bits) -32768 έως 32767 + & SLONG (32 bits) -2147483648 έως 2147483647 + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +- Μεταβλητές χωρίς πρόσημο (Unsigned). + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + @@ UBYTE (8 bits) 0 έως 255 + %% USHORT (16 bits) 0 έως 65535 + && ULONG (32 bits) 0 έως 4294967295 + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +- Μεταβλητή συστήματος XLONG + + Η μεταβλητή αυτή μπορεί να είναι 32 ή 64 bit ανάλογα με το σύστημα που χρησιμοποιούμε. + +Οι μεταβλητές κινητής υποδιαστολής είναι δύο τύπων. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ! SINGLE (32 bits) σύμφωνα με την κωδικοποίηση IEEE + # DOUBLE (64 bits) σύμφωνα με την κωδικοποίηση IEEE + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οι μεταβλητές κινητής υποδιαστολής ανάλογα με το είδος τους μπορούν να έχουν ακρίβεια 8 δεκαδικών ψηφίων ο τύπος SINGLE και 16 δεκαδικών ψηφίων ο τύπος DOUBLE. + +### [4.3 Σκοπός μεταβλητών]{#ss4.3} + +**AUTO AUTOX STATIC SHARED (/όνομα ομάδας/) EXTERNAL (/όνομα ομάδας/)** + +**EXTERNAL** ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο για οποιοδήποτε κομμάτι προγράμματος ακόμη και αν αυτό είναι σε βιβλιοθήκη και +γίνεται σύνδεση (link) μετά την μεταγλώττισή του (compile). + +**SHARED** ορίζονται οι μεταβλητές που το περιεχόμενό τους είναι διαθέσιμο σε όλες τις συναρτήσεις του τρέχοντος προγράμματος. + +**STATIC** ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και κρατούν τις τιμές τους για διαδοχικές κλήσεις της συνάρτησης. + +**AUTO** και **AUTOX** ορίζονται οι μεταβλητές που ανήκουν στην τρέχουσα συνάρτηση και για κάθε κλήση της συνάρτησης κάθε φορά παίρνουν νέα τιμή. + +Οι μεταβλητές **SHARED** και **EXTERNAL** συνήθως ορίζονται στο τμήμα PROLOG όπως αναφέρθηκε προηγούμενα. + +### [4.4 Σταθερές]{#ss4.4} + +Όπως οι μεταβλητές έτσι και οι σταθερές καταλαμβάνουν κάποιο χώρο στην μνήμη. Οι σταθερές διαφέρουν από τις μεταβλητές στο ότι τα περιεχόμενά τους δεν αλλάζουν +κατά την εκτέλεση του προγράμματος. Οι σταθερές έχουν όνομα όπως και οι μεταβλητές και οι περιορισμοί στην ονοματολογία τους είναι ίδια με αυτή των μεταβλητών +όπως αναφέραμε παραπάνω. Οι σταθερές είναι χρήσιμες όταν γράφουμε προγράμματα που έχουν κάποια βασική παράμετρο που δεν αλλάζει. Π.χ. ο αριθμός π=3.14\... + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Λ.χ. + perim=3.14*(2*R) + emb=3.14*R*R + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αντί να γράφουμε τον αριθμό 3.14 κάθε φορά που θέλουμε να βάλουμε τον αριθμό π στους υπολογισμούς μας ορίζουμε σαν σταθερά την pi=3.14 + +Έτσι το πρόγραμμα διαμορφώνεται σε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $pi=3.14 + + perim=$pi*(2*R) + emb=$pi*R*R + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Με αυτόν τον τρόπο ο κώδικας είναι ευανάγνωστος και εύκολα κατανοητός. Εκτός όμως από την πιο εύκολη αναγνωσιμότητα του προγράμματος μπορούμε πολύ εύκολα να +αλλάξουμε την σταθερά π μόνο σε ένα σημείο στο πρόγραμμα και αυτό θα επηρεάσει όλα τα σημεία του προγράμματος που έχουν την σταθερά ενώ αν δεν την είχαμε +χρησιμοποιήσει θα έπρεπε να αλλάξουμε σε κάθε σημείο τον αριθμό 3.14. + +Οι σταθερές στην Xbasic είναι δύο ειδών. + +- Οι τοπικές σταθερές που ορίζονται αρχικά μέσα σε μια συνάρτηση και στο όνομά τους προηγείται ένα \$ Π.χ. \$YES +- Οι σταθερές που αφορούν όλο το πρόγραμμα και ορίζονται στο κομμάτι PROLOG στην αρχή του προγράμματος και στο όνομα τους προηγούνται δύο \$. Π.χ. \$\$READ + +Υπάρχουν και οι σταθερές συστήματος που τις δίνει η Xbasic και είναι διαθέσιμες σε όλα τα προγράμματα όπως \$\$TRUE και \$\$FALSE. + + +### [5. Επίλογος 2ου μέρους]{#s5} + +Είδαμε μέχρι στιγμής πως μπορούμε να κατασκευάσουμε ένα πρόγραμμα Xbasic. Πρέπει να προσεχτεί ιδιαίτερα από τους έμπειρους σε άλλες BASIC η σημασία της ενότητας +ENTRY. Εκεί αρχίζει η εκτέλεση του προγράμματος και στο END FUNCTION τελειώνει. Αυτό βέβαια για τους προγραμματιστές C είναι γνωστό από την συνάρτηση MAIN. +Πιστεύω ότι για κάποιον που έχει συνηθίσει BASIC και θέλει να αλλάξει γλώσσα και να πάει στην C, καλό είναι να περάσει πρώτα από την XBASIC. Θα έχει τις γνωστές +εντολές (BASIC) με μικροδιαφορές αλλά η δομή του προγράμματος μοιάζει πιο πολυ με την C. Έτσι αφού εξοικειωθεί με την δομή της XBASIC τότε η αλλαγή στην C θα +είναι πάρα πολύ εύκολη. + diff --git a/content/articles/25/05_esr.md b/content/articles/25/05_esr.md new file mode 100644 index 0000000..7956b10 --- /dev/null +++ b/content/articles/25/05_esr.md @@ -0,0 +1,147 @@ ++++ +title = 'Διευκρινήσεις για το Open Source' +date = '2000-07-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 25'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Κάποιοι προβληματισμοί για την αποδοχή του open source στην ελλάδα, και μία συνέντευξη που ξεκαθαρίζει ορισμένα πράγματα, από τον Eric Raymond.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Στην Ελλάδα έχουμε μία θλιβερή πρωτοτυπία. Σύμφωνα με τα αποτελέσματα της τελευταίας (πιο πρόσφατης) [έρευνας του open +letter](http://www.open.gr/survey/991231/web-soft.html) το λογισμικό των Web servers στην Ελλάδα κατανέμεται ως εξής: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Ποσοστό χρήσης** + **Web-server software** + + Apache 47,2% + + MS IIS 40,7% + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Την ίδια περίοδο, σε αντίστοιχες μετρήσεις παγκοσμίως που διενεργήθηκαν από την [Netcraft](http://www.netcraft.com), η κατάσταση είναι εντελώς διαφορετική, με +τον (open source) Apache να \"νικάει\" τον (closed-source proprietary) Microsoft IIS κατά κράτος: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ **Ποσοστό χρήσης** + **Web-server software** + + Apache 55,5% + + MS IIS 22,9% + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Αυτό δείχνει ότι η έννοια του open source δεν έχει πιάσει στην Ελλάδα τόσο όσο στο εξωτερικό. Τόσο σε επίπεδο επιχειρήσεων, όσο, δυστυχώς, και σε επίπεδο +developers (δεν είδα και πολλά open source προγράμματα από Έλληνες τελευταία :-). Ίσως αυτό να είναι επειδή το open source έχει μία φήμη. Προσπάθησα να +αξιολογήσω ποιο είναι το πρόβλημα. Ξεκίνησα από το ότι κάποια στοιχεία είναι γνωστά και αδιαμφισβήτητα. Για παράδειγμα η ποιότητα του open source δεν μπορεί να +φταίει και να τίθεται υπό αμφισβήτηση. Η έλλειψη εξειδικευμένου προσωπικού ίσως είναι ένα πρόβλημα, το οποίο θα προσπαθήσω να αναλύσω σε άλλο άρθρο. Αυτά για +τις επιχειρήσεις. Για τους developers το πρόβλημα είναι βιοποριστικό συνήθως. Και πως θα ζήσουμε; Διαβάζοντας κείμενα στο Internet, βρήκα στο \"σπίτι\" του +[Open Source](http://www.opensource.org) διάφορες πληροφορίες για το γιατί το open source είναι καλύτερο (πληροφορίες που να απευθύνονται σε επιχειρηματίες αλλά +και απαντάνε ορισμένα ερωτήματα των developers) αλλά δεν βρήκα πραγματικές απαντήσεις σε ερωτήματα που δέχομαι ο ίδιος συχνά από ανθρώπους που ανησυχούν να +βγάλουν τα προγράμματά τους Open Source, ή από εταιρείες που δεν χρησιμοποιούν Open Source αισθανόμενες απειλούμενες, και, δεν είχα κάτι να απαντήσω\... Επειδή +ο σωστός advocator είναι ο ενημερωμένος advocator, και επειδή η αναπαραγωγή ανακριβών ιδεών τελικά κάνει κακό στην κοινότητα, αποφάσισα ότι αξίζει τον κόπο να +ενημερωθούμε. Μάζεψα λοιπόν αυτές τις ερωτήσεις, και τις έστειλα στο OpenSource υπό την μορφή συνέντευξης. Η απάντηση ήρθε απ\' ευθείας από τον [Eric S. +Raymond](http://www.tuxedo.org/~esr). + +O Eric Raymond είναι ο πρόεδρος του OSI (Open Source Initiative) και ο άνθρωπος που έγραψε το (θρυλικό πια) κείμενο \"The Cathedral and The Bazaar\" για την +μορφή ανάπτυξης των open source προγραμμάτων. Ο Eric Raymond εργάζεται σαν σύμβουλος για την εταιρεία Thyrsus Enterprises και πρακτικά, γυρνάει τον κόσμο +δίνοντας διαλέξεις για το Open Source. + +Η συνέντευξη προφανώς δόθηκε στα αγγλικά. Έκανα μία μετάφραση αλλά για οποιαδήποτε απορία, διευκρίνηση, διαφωνία, πρέπει πρώτα να συμβουλευτείτε το πρωτότυπο +αγγλικό κείμενο επειδή μπορεί κατά την μετάφραση να μην απέδωσα σωστά κάποιο κομμάτι. [English text - Αγγλικό κείμενο](#engl) + +- Ελευθερία και επιχειρήσεις. + 1. Τι πιστεύει το OSI ότι θα έπρεπε να είναι ελεύθερο; Είναι μόνο το software ή αυτή η έννοια συμπεριλαμβάνει υποστήριξη, υπηρεσίες, εκπαίδευση + (πληροφορικής και όχι) κλπ; + + *E.R.: Αν και μέλη του OSI ατομικά μπορεί να έχουν θέσεις για την \"ελευθερία\" άλλων υλικών, η αποστολή μας είναι αυστηρά να προωθήσουμε την ελευθερία + στο software.* +- Προβλήματα παραγωγής και άδειας χρήσης των open source προγραμμάτων. + 1. Καλή πρακτική ανάπτυξης λογισμικού προϋποθέτει ότι πρέπει να υπάρχει (μεταξύ άλλων) μία περίοδος στην οποία η ομάδα ανάπτυξης παίρνει συνεντεύξεις από + τους (εν δυνάμει) τελικούς χρήστες και τους δοκιμαστές, με σκοπό να διευκρινιστούν οι πραγματικές ανάγκες που βρίσκονται κρυμμένες πίσω από τα παράπονα + του τύπου \"δεν δουλεύει\". Αυτό είναι κάτι που δεν μπορεί να γίνει στον ελεύθερο χρόνο κάποιου (τόσο εύκολα όσο η συγγραφή κώδικα), συνεπώς ποια είναι + η προτεινόμενη λύση, αν υπάρχει κάποια, για αυτό το πρόβλημα; + + *E.R.: Το software ανοιχτού κώδικα, ελέγχεται από την ανασκόπηση άλλων (peer-review) καθ\' όλη τη διάρκεια της ζωής του. Στην πραγματικότητα κάνουμε πιο + πολλούς ελέγχους, αναλογικά, απ\' ότι γίνονται στο περισσότερο proprietary λογισμικό, απλά διανέμουμε το φόρτο διαφορετικά. Αυτή η τακτική φαίνεται να + δουλεύει. Τα ανοιχτού κώδικα λειτουργικά συστήματα έχουν μεγάλα διαστήματα μεταξύ σφαλμάτων (mean times between failure).\ + Ένα τμήμα το οποίο είναι δύσκολο να αντικαταστήσουμε για τυπικούς ελέγχους, είναι στην ρύθμιση της χρηστικότητας για όχι τεχνικούς, τελικούς χρήστες. + Δεν είμαστε πολύ καλοί σε αυτό ακόμα.* + + 2. Αν και το να πουλήσεις λογισμικό δεν είναι παράνομο στις Ελεύθερες άδειες, φαίνεται να υπάρχει ένα πρόβλημα με αυτό. Μία μεγάλη εταιρεία που θα αγοράσει + λογισμικό από έναν προγραμματιστή, έχει το marketing και την αναγνώριση (γνωστό όνομα εταιρείας) που ο προγραμματιστής δεν έχει, και έτσι είναι + ευκολότερο για την εταιρεία να πουλήσει το λογισμικό. Αυτό είναι ένα γεγονός της αγοράς. Το τελικό αποτέλεσμα θα είναι ότι η μεγάλη εταιρεία θα πουλήσει + όλα τα πακέτα, ενώ ο πραγματικός προγραμματιστής θα έχει πουλήσει μόνο αυτό το αρχικό κομμάτι. Δεν είναι αυτό άδικο για τον προγραμματιστή (και υπέρ της + μεγάλης εταιρείας); + + *E.R. Οι προγραμματιστές που θέλουν να πουλήσουν λογισμικό δεν το βγάζουν open source. Αυτοί οι οποίοι το βγάζουν open source επιλέγουν να αποζημιωθούν + με άλλους τρόπους από την απ\' ευθείας πώληση (πουλώντας σχετικά προϊόντα ή υπηρεσίες, ή απλά σε φήμη). Σε οποιαδήποτε περίπτωση δεν υπάρχει αδικία, + απλά διαφορετικές επιλογές.\ + Το ελεύθερο λογισμικό θα ήταν \"άδικο\" μόνο αν οι προγραμματιστές αναγκάζονταν να συμμετάσχουν σε αυτό. Κανείς δεν το υποστηρίζει αυτό, και, είναι + γεγονός, εγώ υπερασπίζω το δικαίωμα των προγραμματιστών να κάνουν οποιοδήποτε συμβόλαιο μπορούν να διαπραγματευτούν για να διαθέσουν την πνευματική τους + ιδιοκτησία, συμπεριλαμβανομένης μίας άδειας κλειστού κώδικα αν έτσι επιλέξουν.* +- Γενικές διευκρινήσεις + 1. Εμείς πιστεύουμε ότι όλο το λογισμικό θα έπρεπε να είναι ελεύθερο. Από την άλλη πλευρά, δεν πιστεύουμε ότι έχουμε το δικαίωμα να αναγκάσουμε κάποιον να + παράγει ελεύθερο λογισμικό. Αν αυτός θέλει να το διανείμει υπό μία μη ελεύθερη άδεια χρήσης, είναι ελεύθερος να το κάνει. Συμφωνεί το OSI με αυτό; Αν + όχι, είναι αυτό που οι μεγάλες εταιρείες ονομάζουν \"πειρατεία\" δικαολογημένο; + + *E.R. Η θέση του OSI σε αυτό είναι η ίδια με την προηγούμενη ερώτηση. Οι προγραμματιστές έχουν το δικαίωμα να κάνουν τις επιλογές τους και δεν + υποστηρίζουμε την πειρατεία.* + + 2. Free-speach και free-beer. Καθώς ο χρόνος περνάει όλο και περισσότερο free-beer λογισμικό εμφανίζεται για το Linux. StarOffice, Sybase για να αναφέρω + κάποια παραδείγματα. Θα έπρεπε η κοινότητα να υποστηρίζει αυτά τα προγράμματα για την γρηγορότερη εξάπλωση του Linux ή θα έπρεπε να τα αγνοεί; (Για + παράδειγμα, εμείς σαν Hellug σκεφτόμαστε να γράψουμε έναν ελληνικό διορθωτή για το StarOffice αλλά εχουμε καταλήξει σε αδιέξοδο. Και αυτό, φοβάμαι, + είναι μόνο το πρώτο πρόβλημα). + + *Το OSI δεν έχει θέση σε αυτό.* + +[]{#engl} **English original text of the interview** + +- Freedom and business. + 1. What does the OSI consider that should be open? Is it only for the software, or does that include support, services, education (computer-related or not) + etc? + + *While individual OSI members may have positions on the \"openness\" of other kinds of goods, our mission is strictly to promote openness in software* +- Open source producing/licensing problems + 1. Good software enginnering practice (as tought in Greek colleges that is, of course, but I don\'t think it will be different there :-) says that a + software should have among others a period on which development team interviews the (potential) users and the testers, in order to recognize the real + needs behind the \"it doesn\'t work\" nagging. That is something that cannot be done on someone\'s free time (as easy as coding) so what is the + recommended solution, if any, for that situation? + + *Open-source software is tested by peer-review throughout its lifetime. We actually do more testing, proportionately, than most proprietary software + gets; we just distribute the load differently. This tactic seems to work; open-source operating systems have very long mean times between failure.\ + The one area where it\'s hard to substitute for formal testing is in tuning the usability of interfaces for non-technical end-users. We\'re not very + good at that yet.* + + 2. While selling software is not illegal in Open Licenses, there seems to be a problem with that. A big company byuing an open source software from a + freelance developer, has the marketing resources and the society recognition (=Well known Company Name) that the developer doesn\'t, so it\'s easier for + the company to sell the software. That\'s a fact of the market (at least in Greece but I don\'t think it will be different there again). The final + result will be that the big company will sell all the packages to be sold, while the developer will have that one initial piece sold. Isn\'t that unfair + for the developer (and on favor of the big company?) + + *Developers who want to sell software don\'t go open source. Those who do are choosing to be compensated in some other way than direct sale value + (through selling associated goods or services, or simply in reputation). Either way, there is no unfairness, just different choices.\ + Open source would only be \"unfair\" if developers were forced to participate in it. Nobody advocates that \-- and, in fact, I defend the right of + developers to make any contract they can negotiate to dispose of their intellectual property, including a closed-source license if they so choose.* +- Those who still don\'t get it (modified to generic clarifications) + 1. We (and you of course) beleive that all software should be free. On the other hand, we don\'t think that we have the right to force someone to produce + free software. If he/she wants to distribute it under a non-free license he is free to do so. Does OSI agree with that? If not, is, what big companies + name as \"piracy\", justified? + + *OSI\'s position on this is similar to the one I implied in answering the previous question. Developers have the right to make their own choices, and we + do not support piracy.* + + 2. Free-speach and free-beer. As the time goes by, more free-beer software appears for Linux. StarOffice, Sybase to name just a few. Should the community + support these products for the earlier adoption of Linux, or should it ignore them? (for example, we as Hellenic LUG are thinking about writing a greek + speller for StarOffice, but we\'ve come to an endpoint. And that\'s, I\'m afraid, only the beggining). + + *OSI has no position on this.* diff --git a/content/articles/26/01_editorial.md b/content/articles/26/01_editorial.md new file mode 100644 index 0000000..11babc8 --- /dev/null +++ b/content/articles/26/01_editorial.md @@ -0,0 +1,65 @@ ++++ +title = 'Editorial' +date = '2000-09-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης(mailto:papas@hellug.gr)' +issue = ['Magaz 26'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz**\... Επίσιμη ονομασία τεύχους, \`\`τα κεφάλια μέσα\'\'* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τέρμα το διάλειμα, τα κεφάλια μέσα λοιπόν\... Κρίμα που και αυτό το καλοκαίρι πέρασε τόσο άδοξα, και για άλλη μια χρονιά δεν καταλάβαμε διακοπές. Όσο μακριά και +αν ήταν η Πορτογαλία, σας διαβεβαιώ ότι δεν ήταν αρκετή, για να με κάνει να ξεκουραστώ. Αλλά, ω γέγoνε γέγoνε και back to black και άστα να πάνε\... Ελπίζω +τουλάχιστον εσείς να περάσατε καλύτερα. + +Στα θέματά μας τώρα. \`Εχουμε τη [συνέχεια του άρθρου περι XBASIC](02_xbasic3.html) από τον [Κώστα Τσακάλογλου](mailto:tsakf@helug.gr). Αισίως έχουμε φτάσει +στην 3η συνέχεια του άρθρου, με προοπτικές για ακόμα περισσότερα. Αν πρώτη φορά πέσατε στο magaz, σας προτείνω να αρχίσετε από την αρχή της σειράς εδώ και να +συνεχίσετε μέσα από όλη τη σειρά. + +Φιλοξενούμε επίσης ένα άρθρο από τον [Θέμη Παπασσιλέκα](mailto:panzer@finecon.gr) που αναφέρεται στο linux που θα πάρει τη θέση του linux, δηλαδή το linux 2.4. +Μια περιεκτική ανάλυση του τι καινούριου μας έρχεται με τον νέο πυρήνα, που θα βοηθήσει να δούμε τις νέες δυνατότητες του αγαπημένου μας λειτουργικού. Το άρθρο +βρίσκεται [εδώ](04_kernel24.html), και θα σας πρότεινα να το διαβάσετε αμέσως! + +Από τον [DJ Art](mailto:djart@hellug.gr) φιλοξενούμε ένα [άρθρο που θα βοηθήσει τους νέους μας αρθρογράφους](03_beginners.html) να προσανατολιστούν στον +αστερισμό του linux. Ένα άρθρο που περιέχει πολλές αναφορές σε πηγές που είναι απαραίτητες για τον καθένα που ξεκινά με το linux. Εκεί θα βρείτε ό,τι θέλετε, +από υποστήριξη ελληνικών μέχρι και εξειδικευμένα πράγματα και τεχνικές. Έχουν μαζευτεί οι περισσότερες πηγές για τους Έλληνες χρήστες του linux. Οι νέοι χρήστες +λοιπόν, ας αρχίσουν το διάβασμα :) + +Για το τέλος, σας άφησα το καλύτερο :) Ο [Μιχάλης Καμπριάνης](mailto:kabrianis@hellug.gr) μας έγραψε [ένα φοβερό άρθρο](05_lfs.html) για το πώς να στήσουμε ένα +minimum μηχανάκι με **linux**, ώστε να μπορούμε να το προσαρμόσουμε στις ανάγκες μας, χωρίς να είμαστε κρεμασμένοι απο τα \... της κάθε διανομής και του κάθε +προγράμματος διαχείρισης πακέτων. Αρχίζουμε λοιπόν πολύ σωστά με μια minimum εγκατάσταση, και στη συνέχεια προσθέτουμε όσα μας είναι πραγματικά **απαραίτητα**. +Στο άρθρο αυτό ο [Μιχάλης](mailto:kabrianis@hellug.gr) θα μας βοηθήσει να το κάνουμε και θα μας καθοδηγήσει μέσα από απλά βήματα στην ολοκλήρωση και επιτυχή +εγκατάσταση μιας minimum εγκατάστασης. + +Μια πολύ ενδιαφέρουσα ιδέα του νέου αρθρογράφου [Βραχνάκη Γιώργου](mailto:gi0rgos@pathfinder.gr) ήταν να κάνουμε μια έρευνα ώστε να δούμε πού \`\`πάει\'\' το +Ελληνικό Internet. Γράψαμε λοιπόν ένα mail σε κάθε support@(ISP).gr, ρωτώντας τους μερικά πράγματα. Αυτά είναι: + +Τι λειτουργικό χρησιμοποιούν και με ποιo λογισμικό τα μηχανήματά τους. Ειδικότερα: + +- web servers +- mail servers +- news servers +- dns servers +- authentication servers (Τι είναι και τι τρέχουν) + +Όπως ήταν αναμενόμενο, δε μας απάντησαν όλοι, τους τρώγαμε βλέπετε τον πολύτιμο χρόνο τους. Και αυτό το σημείο θέλω να σταθώ και να το σχολιάσω: Κακώς δε μας +απάντησαν, γιατί με αυτόν τον τρόπο ουσιαστικά δυσφημίζουν την εταιρία τους και δεν παρέχουν υποστήριξη (υπόψιν ότι δε γύρισε κανένα mail πίσω, άρα το πήραν +όλοι). Αλλά αυτό είναι άλλου παπά ευαγγέλιο (Καμπριάνη με ακούς;) + +Τέλος πάντων, τα αποτελέσματα είναι ενδιαφέροντα, και φυσικά αξίζουν περαιτέρω ανάλυσης, πράγμα το οποίο δυστυχώς δεν κάναμε λόγω έλλειψης χρόνου. Εμείς, από τη +μεριά μας, προσπαθήσαμε να βγάλουμε κάποια αποτελέσματα για όσους δε μας έστειλαν απαντήσεις από τη μια με τη βοήθεια του [netcraft](http://www.netcraft.com) +για το web server και το OS του, και από την άλλη με telnet στις πόρτες 25 για το mail και την 119 για τα news, όσα φυσικά μας άφηναν, γιατί είναι γνωστό ότι τα +news είναι ελεύθερα για τους συνδρομητές τους και μόνο. + +Μια και το εγχείρημα, όπως είπα και παραπάνω, παρουσίαζει πολύ ενδιαφέρον, το άρθρο αυτό δε θα δημοσιευτεί αυτό το μήνα, αλλα τον επόμενο. Μέχρι τότε, θα +ξαναστείλουμε το mail σε όσους δεν απάντησαν, για μια ακόμα ευκαιρία. Στο επόμενο τεύχος λοιπόν, θα υπάρχει και μια πλήρης στατιστική ανάλυση, με ποσοστά και +αριθμούς. + +Θα ήθελα να ευχαριστήσω τους admin που απάντησαν, και να τους ζητήσω συγνώμη που δε δημοσιεύεται σε αυτό το τεύχος ελπίζοντας στην κατανόησή τους. + +Καλή ανάγνωση, και περάστε μια βόλτα από τη [σελίδα της ψηφοφορίας](http://magaz.hellug.gr/cgi-bin/poll26.cgi), ώστε να μας βοηθήσετε να εξαγάγουμε συμπεράσματα +για το πώς θέλετε το **magaz** σας! Η ψηφοφορία αυτού του μήνα αναφέρεται στο πόσο και γιατί χρησιμοποιείτε linux diff --git a/content/articles/26/02_xbasic3.md b/content/articles/26/02_xbasic3.md new file mode 100644 index 0000000..81fff9f --- /dev/null +++ b/content/articles/26/02_xbasic3.md @@ -0,0 +1,357 @@ ++++ +title = 'Xbasic' +date = '0000-09-01T00:00:00Z' +description = '' +author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)' +issue = ['Magaz 26'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C. Μέρος ΙΙΙ* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε αυτό το τεύχος θα συνεχίσουμε την αναφορά στα δομικά στοιχεία της Xbasic. θα αναφερθούμε στις εντολές, τις πράξεις και τους τελεστές. θα αναλύσουμε και ένα +παράδειγμα για να κατανοήσουμε καλύτερα την χρήση των πράξεων και των τελεστών. + +**1. Εντολές** +---------------------------------------- + +**2. Γραμμές κώδικα** +----------------------------------------------- + +**3. Τελεστές** +----------------------------------------- + +- [3.1 Ο τελεστής εκχώρησης (=)](#ss3.1) +- [3.2 Τελεστές μιας παραμέτρου](#ss3.2) +- [3.3 Τελεστές δύο παραμέτρων](#ss3.3) +- [3.4 Προτεραιότητα τελεστών](#ss3.4) +- [3.5 Είδη τελεστών](#ss3.5) +- [3.6 Ομάδες τελεστών](#ss3.6) +- [3.7 Προτεραιότητα τελεστών](#ss3.7) + +**4. Παράδείγμα χρήσης αριθμητικών τελεστών.** +------------------------------------------------------------------------ + +**5. Επίλογος 3ου μέρους:** +----------------------------------------------------- + + +### [1. Εντολές]{#s1} + +Οι εντολές είναι λέξεις που προσδιορίζουν την εκτέλεση μιας πράξης, ακολουθούμενες από στοιχεία της γλώσσας που ταιριάζουν στην κάθε εντολή. Γενικά προτιμάται +να χρησιμοποιούμε συναρτήσεις της γλώσσας αντί για εντολές. Οι εντολές όμως έχουν δύο πλεονεκτήματα. + +Το πρώτο είναι ότι δεν εκτελούνται επιπλέον εντολές που απαιτούνται για την αποθήκευση και επαναφορά των παραμέτρων, ώστε μόλις τελειώσει η εκτέλεση της +συνάρτησής τους να επιστρέψουμε στην προηγούμενη κατάσταση. Αυτό δίνει μεγαλύτερη ταχύτητα στο πρόγραμμά μας. Το δεύτερο είναι ότι δεν περιοριζόμαστε από +ορισμούς συναρτήσεων και έτσι κάθε εντολή έχει την σύνταξή της που είναι καθαρή και πιο κατανοητή από μία λίστα παραμέτρων. + +**Χρήση κενών και TABS**\ +Γενικά μπορούμε να χρησιμοποιούμε τα κενά ή τα TABS για να μορφοποιούμε το πρόγραμμά μας εκτός από μια εξαίρεση. Ότι βρίσκεται ανάμεσα σε εισαγωγικά και +ορίζεται σαν περιεχόμενο αλφαριθμητικής μεταβλητής. Εκεί τα κενά παίζουν ρόλο και, αν υπάρχουν θα εμφανίζονται στα περιεχόμενα της μεταβλητής ενώ οπουδήποτε +αλλού αγνοούνται. + +Παρακάτω θα δούμε δυο παραδείγματα όπου φαίνεται πόσο ευανάγνωστο γίνεται ένα πρόγραμμα όταν χρησιμοποιήσουμε κενά και TABS. Στην πρώτη περίπτωση δυσκολευόμαστε +να βρούμε πού αρχίζει και πού τελειώνει η επανάληψη των εντολών. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR i1=1 to 1000 + PRINT i1 + IF i1>500 THEN PRINT "i1>500" + NEXT i1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ενώ μόλις γίνει η διαμόρφωση με τα κενά είναι εύκολο να δούμε τις εντολές που επαναλαμβάνονται εύκολα. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR i1=1 to 1000 + PRINT i1 + IF i1>500 THEN PRINT "i1>500" + NEXT i1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τα πράγματα δυσκολεύουν, όταν οι εντολές που επαναλαμβάνονται είναι πάρα πολλές και δε χωράνε σε μια οθόνη. Τότε η μορφοποίηση είναι απαραίτητη, για να +μπορέσουμε να βγάλουμε κάποια άκρη, όταν εκ των υστέρων ξανακοιτάξουμε το πρόγραμμα μετά από καιρό. + + +### [2. Γραμμές κώδικα]{#s2} + +Οι γραμμές του κώδικα ξεχωρίζουν με το ENTER που υπάρχει στο τέλος κάθε γραμμής. Στην ίδια γραμμή κώδικα μπορούν να υπάρχουν περισσότερες από μία εντολές με +διαχωριστικό το \':\'. Έτσι, για παράδειγμα, μπορούμε να έχουμε τις εντολές, a=a+1:PRINT a στην ίδια γραμμή εφ\' όσον τις ξεχωρίσουμε με το διαχωριστικό \':\'. + +Οι γραμμές του κώδικα μπορούν να έχουν ονόματα ώστε να είναι δυνατή μετάβαση της εκτέλεσης του προγράμματος στην συγκεκριμένη γραμμή. + + +### [3. Τελεστές]{#s3} + +Οι τελεστές είναι σύμβολα που με την χρήση τους γίνονται πράξεις και ενέργειες όπου συμμετέχουν μία ή και περισσότερες παράμετροι. όπως στην άλγεβρα. Στην +Xbasic υπάρχουν τελεστές αριθμητικοί, λογικοί, σε επίπεδο bit και τελεστές διευθύνσεων. Ο κάθε ένας έχει την προτεραιότητά του και ανήκει σε μια τάξη που +ορίζει: + +- τους δεκτούς τύπους παραμέτρων +- τον τύπο του αποτελέσματος και, +- τους κανόνες μετατροπής των τύπων για την εκτέλεση μιας πράξης + +### [3.1 Ο τελεστής εκχώρησης (=)]{#ss3.1} + +Αυτόν τον τελεστή τον χρησιμοποιούμε για να εκχωρήσουμε μια τιμή σε μια μεταβλητή Π.Χ. a1=10 + +### [3.2 Τελεστές μιας παραμέτρου]{#ss3.2} + +Οι τελεστές μιας παραμέτρου έχουν μόνο μια παράμετρο δεξιά από τον τελεστή. Τέτοιο παράδειγμα είναι ο τελεστής - δηλώνει το αρνητικό αριθμητικό πρόσημο Π.Χ. +-10, -a1 -(a+b). Στην τελευταία περίπτωση το άθροισμα (a+b) επειδή περικλείεται από παρενθέσεις θεωρείται μία παράμετρος. + +### [3.3 Τελεστές δύο παραμέτρων]{#ss3.3} + +Οι τελεστές αυτοί υπολογίζουν τις δύο τιμές που τους δίνονται σαν παράμετροι και δίνουν ένα αποτέλεσμα. Όταν οι παράμετροι είναι διαφορετικού τύπου πρώτα +μετατρέπεται η μια στο είδος της άλλης και μετά εκτελείται η πράξη. + +### [3.4 Προτεραιότητα τελεστών]{#ss3.4} + +Όπως και στην άλγεβρα έτσι και εδώ οι τελεστές έχουν προτεραιότητα. Οι τελεστές με την μεγαλύτερη προτεραιότητα εκτελούνται πρώτα και τελευταίοι εκτελούνται +αυτοί που έχουν την μικρότερη προτεραιότητα. Αν για παράδειγμα γράψουμε x1=a+b\*c τότε, πρώτα θα υπολογιστεί το b\*c και μετά το αποτέλεσμα θα προστεθεί στο a. +Με την προτεραιότητα μειώνονται οι ανάγκες χρήσης παρενθέσεων για τον καθορισμό του τρόπου υπολογισμού των πράξεων. Οι παρενθέσεις χρειάζονται όταν θέλουμε να +ορίσουμε εμείς την σειρά εκτέλεσης. Δηλ. + +- x1=a+b\*c όπου είναι το ίδιο με το να γράφαμε x1=a+(b\*c) ή +- x1=(a+b)\*c όπου εξαναγκάζουμε να γίνει πρώτα το άθροισμα και μετά ο πολλαπλασιασμός. + +### [3.5 Είδη τελεστών]{#ss3.5} + +Οι αριθμητικοί τελεστές έχουν την ίδια χρήση που έχουν και στην άλγεβρα. Κάνουν πράξεις μεταξύ αριθμητικών παραμέτρων και παράγουν ένα αριθμητικό αποτέλεσμα. + +Οι τελεστές επιπέδου bit κάνουν πράξεις σε ακέραιους αριθμούς και παράγουν ακέραιους αριθμούς σαν αποτέλεσμα, αλλά λειτουργούν σε επίπεδο bit χωρίς τα +κρατούμενα Carry και Borrow. Οι πράξεις με bit έχουν να κάνουν περισσότερο με την εσωτερική αρχιτεκτονική του επεξεργαστή (processor) και είναι γνωστές στους +προγραμματιστές που έχουν δουλέψει C και Assembly. Για τον μέσο χρήστη / προγραμματιστή συνήθως οι τελεστές επιπέδου bit δεν χρειάζονται αλλά τους αναφέρω εδώ +για να δείξω την δύναμη που έχει η Xbasic να φτάνει σε τόσο χαμηλό επίπεδο. Έτσι κάποιος που θέλει να κάνει μερικά πράγματα που οι γνωστές Basic δεν έχουν, και +χρειαζόταν να χρησιμοποιήσει την C ή την Assembly τώρα με την Xbasic μπορεί να παραμείνει στην Basic και να κάνει αυτά που θέλει. + +Οι λογικοί τελεστές κάνουν πράξη σε αριθμητικές ή και αλφαριθμητικές μεταβλητές και δίνουν ένα λογικό αποτέλεσμα τύπου Αληθές. \[\$\$TRUE(-1)\] ή Ψευδές +\[\$\$FALSE(0)\]. + +### [3.6 Ομάδες τελεστών]{#ss3.6} + +#### Ομάδα 1 + +Η ομάδα 1 των τελεστών περιλαμβάνει τους λογικούς τελεστές && (AND), \|\| (OR) και \^\^ (XOR). + +#### Ομάδα 2 + +Η ομάδα 2 των τελεστών περιλαμβάνει τους τελεστές = (ίσο),\<\> (διάφορο),\< (μικρότερο), \<=(μικρότερο ή ίσο), \>= (μεγαλύτερο ή ίσο), \> (μεγαλύτερο) και τα +αντίστοιχά τους ==, !=, !\>=, !\>, !\<, !\<=. Οι παράμετροί τους μπορεί να είναι Ακέραιοι, δεκαδικοί ή αλφαριθμητικές μεταβλητές. Οι αλφαριθμητικές μεταβλητές +συγκρίνονται χαρακτήρα, χαρακτήρα από την αρχή μέχρι το τον πρώτο διαφορετικό χαρακτήρα. Έτσι βγαίνει το αποτέλεσμα της σύγκρισης. Το αποτέλεσμα είναι πάντα +XLONG ή \$\$TRUE ή \$\$FALSE. + +#### Ομάδα 3 + +Η ομάδα 3 περιλαμβάνει τους τελεστές επιπέδου Bit AND, XOR και OR με τα αντίστοιχα σύμβολά τους &,\^,\|. Οι παράμετροί τους μπορεί να είναι ακέραιοι ή άλλες +πράξεις. Το αποτέλεσμά τους είναι πάντα του ίδιου τύπου με τον τύπο των παραμέτρων τους. + +#### Ομάδα 4 + +Η ομάδα 4 περιλαμβάνει τους αριθμητικούς τελεστές +, -, \*, /, \*\*. Οι παράμετροι μπορεί να είναι ακέραιοι ή δεκαδικοί. Το αποτέλεσμα είναι πάντα τύπος +μεταβλητής της υψηλότερης ακρίβειας από τις μεταβλητές των παραμέτρων. + +#### Ομάδα 5 + +Στην ομάδα 5 ανήκει ο τελεστής + που ανάλογα με τις παραμέτρους του είναι είτε αριθμητικός τελεστής είτε τελεστής συγχώνευσης δύο αλφαριθμητικών μεταβλητών. Οι +παράμετροί του μπορεί να είναι, ή υποχρεωτικά και οι δύο αριθμοί, ή υποχρεωτικά και οι δύο αλφαριθμητικές μεταβλητές. Το αποτέλεσμα είναι, είτε αριθμός, είτε +αλφαριθμητικά μεταβλητή ανάλογα με τις παραμέτρους που έχουν δοθεί. + +#### Ομάδα 6 + +Σε αυτή την ομάδα έχουμε τους τελεστές MOD και \\. O MOD δίνει το υπόλοιπο της ακέραιας διαίρεσης των παραμέτρων του. Ο \\ δίνει το πηλίκο της ακέραιας +διαίρεσης των παραμέτρων του. Το αποτέλεσμα των τελεστών αυτής της ομάδας είναι πάντα ακέραιο. + +#### Ομάδα 7 + +Εδώ έχουμε του τελεστές \<\<, \>\>, \<\<\<.\>\>\>. Αυτοί οι τελεστές έχουν την ιδιότητα να μεταφέρουν τα bits των παραμέτρων τους ορισμένες θέσεις αριστερά ή +δεξιά. Οι παράμετροι τους μπορεί να είναι ακέραιοι ή πράξεις. Το αποτέλεσμά τους είναι το ίδιο με τον τύπο της αριστερής παραμέτρου. + +#### Ομάδα 8 + +Η ομάδα αυτή περιλαμβάνει τους τελεστές μιας παραμέτρου + και -.Η παράμετρος μπορεί να είναι ακέραιος αριθμός ή δεκαδικός. Το αποτέλεσμα είναι του ίδιου τύπου +με την παράμετρο. + +#### Ομάδα 9 + +Εδώ έχουμε τους τελεστές ! και !!. Στον τελεστή ! το αποτέλεσμα είναι λογικό \$\$TRUE αν η παράμετρος έχει τιμή 0 και \$\$FALSE όταν έχουμε οποιαδήποτε άλλη +τιμή. Στον τελεστή !! το αποτέλεσμα είναι λογικό \$\$FALSE αν η παράμετρος έχει τιμή 0 και \$\$TRUE όταν έχουμε οποιαδήποτε άλλη τιμή. + +#### Ομάδα 10 + +Ένας μόνο τελεστής ανήκει στην ομάδα αυτή και είναι ο   (ΝΟΤ) σε επίπεδο bit.Η παράμετρος μπορεί να είναι ή ακέραιος αριθμός ή το όνομα μιας συνάρτησης. Το +αποτέλεσμα είναι πάντα XLONG. + +#### Ομάδα 11 + +Η ομάδα αυτή περιλαμβάνει τους τελεστές μιας παραμέτρου & και && πού δίνουν σαν αποτέλεσμα μια XLONG διεύθυνση. Η παράμετρος του τελεστή & μπορεί να είναι +αριθμητική ή αλφαριθμητική μεταβλητή, πίνακας ή και στοιχείο πίνακα. Η παράμετρος του τελεστή && μπορεί να είναι αλφαριθμητική μεταβλητή, πίνακας αλφαριθμητικών +μεταβλητών. + +### [3.7 Προτεραιότητα τελεστών]{#ss3.7} + +**Προτεραιότητα 12**\ +&, && της ομάδας 11\ +NOT της ομάδας 10\ +!, !! της ομάδας 9\ ++, - της ομάδας 8 + +**Προτεραιότητα 11**\ +\<\<\<, \>\>\>, \<\<, \>\> της ομάδας 7 + +**Προτεραιότητα 10**\ +\*\* της ομάδας 4 + +**Προτεραιότητα 9**\ +\*, / της ομάδας 4 MOD, \\ της ομάδας 6 + +**Προτεραιότητα 8**\ ++ της ομάδας 5 - της ομάδας 4 + +**Προτεραιότητα 7**\ +& ή AND της ομάδας 3 + +**Προτεραιότητα 6**\ +XOR \^ και OR \| της ομάδας 3 + +**Προτεραιότητα 5**\ +\>, \>=, \<, \<= της ομάδας 2 + +**Προτεραιότητα 4**\ +\<\>, = ή !=, == της ομάδας 2 + +**Προτεραιότητα 3**\ +& Λογικό AND της ομάδας 1 + +**Προτεραιότητα 2**\ +\^\^ Λογικό XOR και \|\| Λογικό OR της ομάδας 1 + +**Προτεραιότητα 1**\ += τελεστής εκχώρησης. + + +### [4. Παράδείγμα χρήσης αριθμητικών τελεστών.]{#s4} + +Στο παρακάτω παράδειγμα θα χρησιμοποιήσουμε τους τελεστές \\ και MOD εφ\' όσον οι τελεστές + - \* και / μας είναι γνωστοί από την αριθμητική και νομίζω ότι δεν +έχει έννοια να επεκταθούμε σε αυτούς. Επαναλαμβάνω ότι δεν χρείαζεται να γράψουμε τους αριθμούς γραμμής απλά τους έχω βάλει για να ξέρουμε σε ποιες γραμμές +αναφερόμαστε κάθε φορά. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 1.' + 2.' #################### + 3.' ##### PROLOG ##### + 4.' #################### + 5.' + 6.PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent + 7.VERSION "0.0000" ' version number - increment before saving altered program + 8.' + 9.' You can stop the PDE from inserting the following PROLOG comment lines + 10.' by removing them from the prolog.xxx file in your \xb\xxx directory. + 11.' + 12.' Programs contain: 1: PROLOG - no executable code - see below + 13.' 2: Entry function - start execution at 1st declared func + 14.' * = optional 3: Other functions - everything else - all other functions + 15.' + 16.' The PROLOG contains (in this order): + 17.' * 1. Program name statement PROGRAM "progname" + 18.' * 2. Version number statement VERSION "0.0000" + 19.' * 3. Import library statements IMPORT "libName" + 20.' * 4. Composite type definitions TYPE ... END TYPE + 21.' * 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args) + 22.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args) + 23.' * 7. Shared constant definitions $$ConstantName = literal or constant + 24. + 25.$$secspermin = 60 + 26.$$secsperhr = 3600 + 27. + 28.' * 8. Shared variable declarations SHARED variable + 29.' + 30.' ****** Comment libraries in/out as needed ***** + 31.' + 32.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... + 33.' IMPORT "xcm" ' Complex library : complex number library (trig, etc) + 34. IMPORT "xst" ' Standard library : required by most programs + 35.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs + 36.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs + 37.' + 38. + 39. + 40.DECLARE FUNCTION Entry () + 41.' + 42.' + 43.' ###################### + 44.' ##### Entry () ##### + 45.' ###################### + 46. + 47.Programs contain: + 48.' 1. A PROLOG with type/function/constant declarations. + 49.' 2. This Entry() function where execution begins. + 50.' 3. Zero or more additional functions. + 51.' + 52.FUNCTION Entry () + 53. USHORT seconds,minutes,hours,secleft,minleft,nofsec + 54. STRING ans + 55. + 56. ans=INLINE$("Enter number of seconds :") + 57. nofsec=USHORT(ans) + 58. + 59. hours = nofsec \ $$secsperhr + 60. minutes = nofsec \ $$secspermin + 61. minleft = minutes MOD $$secspermin + 62. secleft = nofsec MOD $$secspermin + 63. + 64. PRINT nofsec;" Seconds are..." + 65. PRINT hours;" Hours ";minleft;" min ";secleft;" seconds" + 66. + 67. + 68.END FUNCTION + 69.END PROGRAM + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οι γραμμές 1-37 αποτελούν το κομμάτι **PROLOG** του προγράμματός μας όπου εκεί ορίζονται οι σταθερές, οι κοινές μεταβλητές για όλο το πρόγραμμα οι τυχόν τύποι +μεταβλητών και οι βιβλιοθήκες που χρειάζονται, στο τέλος μπαίνουν οι ορισμοί των συναρτήσεων. Στο συγκεκριμένο παράδειγμα στις γραμμές 25 και 26 ορίζουμε τις +σταθερές \$\$secspermin και \$\$secsperhr. Στην γραμμή 34 έχουμε δώσει εντολή να περιλιφθεί η βιβλιοθήκη xst και στην γραμμή 40 έχει μπεί ο ορισμός της +συνάρτησης ENTRY. + +Οι γραμμές 53 και 54 + +\ +Σε αυτές τις γραμμές ορίζουμε το είδος των μεταβλητών που θα χρησιμοποιήσουμε στην συνάρτηση. + +Η γραμμή 56 + +\ +Σε αυτή την γραμμή καλούμε την συνάρτηση INLINE\$ που την γνωρίσαμε από το προηγούμενο παράδειγμα. + +Η γραμμή 57\ +Εδώ γίνεται μετατροπή της μεταβλητής ans που είναι αλφαριθμητική σε αριθμητική για να μπορούν να γίνουν οι πράξεις παρακάτω. + +Οι γραμμές 59 και 60 + +Βλέπουμε την χρήση του τελεστή \\ (ακέραια διαίρεση) έστι σαν αποτέλεσμα παίρνουμε το ακέραιο πηλίκο της διαίρεσης. + +Οι γραμμές 61 και 62\ +Η χρήση του τελεστή MOD για να βρούμε τα υπόλοιπα των διαιρέσεων. + +Οι γραμμές 64 και 65 + +Με την χρήση της εντολής PRINT δίνουμε εντολή στην Xbasic να εμφανίσει τα αποτελέσματα στην κονσόλα. + + +### [5. Επίλογος 3ου μέρους:]{#s5} + +Με τα παραδείγματα που είδαμε μέχρι τώρα έχουμε δεί τα βασικά μέρη που αποτελείται ένα πρόγραμμα Xbasic. Κάναμε μια σύντομη περιγραφή για τις μεταβλητές, τις +σταθερές και κάποιους τελεστές. Στο επόμενο θα συνεχίσουμε με παράδειγμα χρήσης των λογικών τελεστών και την εντολή IF. Γι αυτούς που έχουν κάποια εμπειρία από +άλλες Basic, να προσέξουν τους επιπλέον τελεστές που διατίθενται και προσοχή στο σημαντικότερο. Ο τελεστής \^ που σε άλλες Basic σημαίνει ύψωση σε δύναμη εδώ +αντικαθίσταται από τον \*\*. Ο τελεστής \^ εδώ είναι ο τελεστής επιπέδου bit OR. + diff --git a/content/articles/26/03_beginners.md b/content/articles/26/03_beginners.md new file mode 100644 index 0000000..3769c84 --- /dev/null +++ b/content/articles/26/03_beginners.md @@ -0,0 +1,117 @@ ++++ +title = 'A Beginners\ Guide \-- The linux.gr collection' +date = '2000-09-01T00:00:00Z' +description = '' +author = 'DJ Art(mailto:djart@hellug.gr)' +issue = ['Magaz 26'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Βλέποντας κανείς τον τίτλο αυτού του άρθρου θα πεί: \"ααα\... άλλος ένας οδηγός για τους αρχάριους\". Υπάρχει, όμως, μία διαφορά: η τοποθεσία του οδηγού αυτού. +Η αλήθεια είναι πως όσο περισσότερα άτομα ασχολούνται με το linux (και ιδίως αρχάριοι) παρατηρείται συνέχεια μιά \"γκρίνια\" (ας το πούμε έτσι χαριτολογώντας ;) +ότι οι gurus τους γυρνάνε την πλάτη και όλα αυτά τα σχετικά. Ο οδηγός λοιπόν είναι επίτηδες σύντομος και σε μορφή links για να παρέχει την σωστή +\"κατεύθυνση\"/πορεία που θα πρέπει να ακολουθήσουν οι αρχάριοι, αλλά και για να τους μεταδώσει την νοοτροπία του \"ψάχνω καλά να βρώ αυτά που χρειάζομαι\".* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Τί είναι το Linux ?**\ +Το Linux είναι ένα δωρεάν τύπου-Unix λειτουργικό σύστημα που αρχικά δημιουργήθηκε από τον Linus Torvalds και στη συνέχεια αναπτύχθηκε με τη βοήθεια +προγραμματιστών από όλον τον κόσμο. To Linux είναι μιά ανεξάρτητη POSIX υλοποίηση και στα χαρακτηριστικά του συμπεριλαμβάνει πραγματικό multitasking, πραγματικό +πολυχρηστικό περιβάλλον, virtual memory, shared libraries, demand loading, TCP/IP networking και πολλά άλλα χαρακτηριστικά που δικαιολογούν τον τίτλο +\"τύπου-Unix\". Είναι κατασκευασμένο υπό την GPL άδεια, δηλαδή ο πηγαίος κώδικάς του είναι διαθέσιμος στον καθένα. + +Ο Linus, ως φοιτητής στο Πανεπιστήμιο της Φιλανδίας, αρχικά δημιούργησε το Linux ως hobby. Είχε επικεντρωμένο το ενδιαφέρον του στο Minix, ένα μικρό UNIX +σύστημα, και έτσι αποφάσισε να δημιουργήσει ένα σύστημα που θα είχε περισσότερες δυνατότητες από το Minix. Ξεκίνησε την δημιουργία του Linux το 1991, +ανακοινώνοντας την έκδοση 0.02 και δουλεύοντας σταθερά έφτασε το 1994 στην έκδοση 1.0 του Linux Kernel. Το Linux μπορεί να χρησιμοποιηθεί για πολλούς σκοπούς, +όπως το networking, η ανάπτυξη προγραμμάτων, ακόμα και για πλατφόρμα για απλούς χρήστες. Λόγω της φύσης και της ευελιξίας του, το Linux έχει γίνει πολύ διάσημο +παγκοσμίως και ένας μεγάλος αριθμός προγραμματιστών έχει επικεντρώσει το ενδιαφέρον του πάνω σε αυτό. Η μασκότ του Linux είναι ένας συμπαθέστατος χαμογελαστός +πινγκουίνος, ο οποίος επιλέχτηκε από τον ίδιον τον δημιουργό του. Πρόλογος Το κείμενο που ακολουθεί έχει στόχο να καθοδηγήσει τους αρχάριους του Linux στα πρώτα +βασικά βήματα, να τους παρέχει τα σωστά links για τις πληροφορίες/πηγές που χρειάζονται. Επίσης, θα είναι μικρό, εύκολο και γρήγορο, ακριβώς όσο χρειάζεται για +να είναι κατανοητό και εύχρηστο. + +**Εγκατάσταση**\ +Μην ρωτάτε ποιά διανομή να εγκαταστήσετε. Να συνηθίσετε στην ιδέα ότι το Linux είναι ΕΝΑ. Οι διανομές διαφέρουν κυρίως στα προγράμματα εγκατάστασης. Αφού +εγκαταστήσετε το Linux θα μάθετε να δουλεύετε το λειτουργικό ακριβώς με τον ίδιο τρόπο ανεξάρτητα από το ποιά διανομή εγκαταστήσατε. Λοιπόν, ειδικά για τους +αρχάριους, είναι προτιμότερο να μην τσιγκουνευτείτε το σκληρό δίσκο, αφιερώστε αρκετό χώρο και κάντε μιά μεγάλη εγκατάσταση (δεν λέω full-install γιατί κάποιες +διανομές το παρακάνουν) κι αυτό για να έχετε πολλά πράγματα στη διάθεσή σας (προγράμματα/Documentation) και να μην ψάχνεστε. Όταν αποκτήσετε κάποια πείρα με το +λειτουργικό μετά από αρκετή χρήση θα είναι σίγουρο ότι θα είστε σε θέση να ασκήσετε την αφαιρετική ιδιότητα και να μην εγκαταστήσετε αυτά που δεν σας +χρειάζονται. Τώρα, όσον αφορά για οδηγίες εγκατάστασης, καλύτερα να συμβουλευτείτε τις οδηγίες που συνοδεύουν την κάθε διανομή, οι οποίες είναι αναλυτικές και +περιγράφουν βήμα προς βήμα το τί πρέπει να κάνετε. Πρόσθετες πληροφορίες θα βρείτε στα: + +[Installation HowTo](http://www.linuxdoc.org/HOWTO/Installation-HOWTO.html)\ +[Linux Installation and Getting Started](http://www.linuxdoc.org/LDP/gs/gs.html) + +**Ωραία, και τώρα που το εγκατέστησα, τί να κάνω;**\ +Τώρα τί; !! Μα, έχετε εγκατεστημένο ένα πολυ-χρηστικό, multitasking, ευέλικτο και παντοδύναμο λειτουργικό σύστημα. Αυτό που μένει είναι να αρχίσετε να το +χρησιμοποιείτε. Και για να το κάνετε αυτό, θα πρέπει πρώτα: α) να σιγουρευτείτε ότι εκμεταλλευτήκατε όλες τις συσκευές (hardware) που έχετε, β) να μπορείτε να +διαβάζετε και να γράφετε ελληνικά, γ) να συνδεθείτε στο Internet και δ) να βρείτε μιά πληθώρα προγραμμάτων για να ικανοποιήσουν την ανάγκη σας και τη θέλησή σας +να εντάξετε τον Η/Υ στη ζωή σας. Αρχίζουμε: + +**Ελληνικά** + +- \ + Αυτό είναι το πρώτο site που πρέπει να επισκεφθείτε, περιέχει τα πακέτα με τις γραμματοσειρές. +- [Hellenic HowTo](http://howto.hellug.gr/howto/pub/html/Hellenic-HOWTO.html) +- [Magaz Τεύχος 16](http://magaz.hellug.gr/16/02_grlinux.html) +- [Staroffice HowTo](http://howto.hellug.gr/howto/pub/html/StarOffice-and-Greek.html)\ + Τί; Δεν ξέρετε τί είναι το Staroffice; Αμέσως τρέξτε στο [site του](http://www.sun.com/staroffice). +- + +**Hardware** + +- [Hardware HowTo](http://www.linuxdoc.org/HOWTO/Hardware-HOWTO.html) +- [Printing HowTo](http://www.linuxdoc.org/HOWTO/Printing-HOWTO/index.html) +- [USB Υποστήριξη](http://www.linux-usb.org) +- Modems + - [Modem HowTo](http://www.linuxdoc.org/HOWTO/Modem-HOWTO.html) + - [Win-Modems](http://www.linmodems.org) + - [Winmodems HowTo](http://www.linuxdoc.org/HOWTO/Winmodems-and-Linux-HOWTO.html) +- Soundcards + - [Sound-HowTo](http://www.linuxdoc.org/HOWTO/Sound-HOWTO.html) + - [Drivers για SBLive! κ.α.](http://opensource.creative.com) + - Κοιτάξτε και στον κατάλογο /usr/src/linux/Documentation/sound +- [Υποστήριξη Scanners](http://panda.mostang.com/sane/) +- [Plug and Play HowTo](http://www.linuxdoc.org/HOWTO/Plug-and-Play-HOWTO.html) + +**Πώς θα συνδεθώ στο Internet;** + +- [Magaz Τεύχος 6](http://magaz.hellug.gr/06/05_xisp2.html) +- [X-ISP](http://xisp.hellug.gr) +- [Ρυθμίσεις για OTEnet](http://www.otenet.gr/hd/html/linux_settings.htm) +- [Ρυθμίσεις για Forthnet](http://www.forthnet.gr/support/gr/linux/index.html) +- [Οδηγίες σύνδεσης χρησιμοποιώντας το X-ISP](http://members.hellug.gr/djart/guide/guide-6.html) + +**Πού θα βρώ προγράμματα;** + +- [Linuxberg](http://linuxberg.duth.gr) Το αντίστοιχο του Tucows για το Linux +- [Freshmeat](http://freshmeat.net) +- [Sourceforge](http://www.sourceforge.net) +- [Επιστημονικές εφαρμογές](http://SAL.KachinaTech.com) +- [Εφαρμογές στο LGU-FAQ](http://homepages.pathfinder.gr/lgu_faq/index-12.html) +- [Εμπορικά προγράμματα](http://www.linuxdoc.org/HOWTO/Commercial-HOWTO.html) + +**Παιχνίδια** + +- +- [Loki Entertainment](http://www.lokigames.com) + +**Θέλω να είμαι \"μέσα στα πράγματα\"** + +- [Hellug](http://www.hellug.gr) Οι αρχάριοι πρέπει να επισκεφτούν αυτό το site οπωσδήποτε και να πατήσουν σε όλες τις πατούσες-links +- [Magaz](http://magaz.hellug.gr) Το online δωρεάν περιοδικό της ελληνικής κοινότητας του Linux +- [D.i.li.ma. \-- Το πρώτο έντυπο περιοδικό στην Ελλάδα για το Linux](http://dilima.eeea.gr) +- [Όλα τα HowTo (στα Αγγλικά)](http://www.linuxdoc.org) +- [Όλα τα μεταφρασμένα στα Ελληνικά HowTo](http://howto.hellug.gr) +- [Οι ελληνικές mailing lists](http://lists.hellug.gr) +- [Linux-Greek-Users-FAQ](http://homepages.pathfinder.gr/lgu_faq) +- Μην παραλέιψετε να επισκεφτείτε όλο το site του linux.gr +- [Tsakf\'s Links](http://links.hellug.gr) + +**Θέλω να βοηθήσω και εγώ εθελοντικά την ελληνική κοινότητα του Linux** + +- [Οι ελληνικές mailing lists](http://lists.hellug.gr) Μην ξεχάσετε την linux-howto λίστα +- [Τα ενεργά Projects](http://server.hellug.gr/LUGistics/el/pub/PRJ_main.php3) +- [Σημαντικά ελληνικά projects-προγράμματα](http://hq.hellug.gr) +- [NLS-HowTo για τις μεταφράσεις](http://nls.hellug.gr) +- [Το project ελληνικοποίησης των προγραμμάτων](http://hlp.sourceforge.net) diff --git a/content/articles/26/04_kernel24.md b/content/articles/26/04_kernel24.md new file mode 100644 index 0000000..d801d9d --- /dev/null +++ b/content/articles/26/04_kernel24.md @@ -0,0 +1,388 @@ ++++ +title = 'O ΥΠΕΡΟΧΟΣ ΚΟΣΜΟΣ ΤΟΥ LINUX 2.4' +date = '0000-09-01T00:00:00Z' +description = '' +author = 'Θέμης Παπασσιλέκας(mailto:panzer@finecon.gr)' +issue = ['Magaz 26'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μια εισαγωγή στον μαγικό κόσμο του καινούριου μας πυρήνα* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Εν αρχή ήταν ο Linus και ο 386 του. Για λόγους πολύ περίπλοκους για να αναλυθούν εδώ, αποφάσισε να μη χρησιμοποιήσει το κοινώς διαθέσιμο λειτουργικό σύστημα της +εποχής και αποφάσισε να γράψει το δικό του. Κάμποσα χρόνια και πολλές χιλιάδες γραμμές κώδικα αργότερα, κυκλοφόρησε το Linux 2.2 το οποίο ήταν ένα ορόσημο από +μόνο του. Ευτυχώς για τον κόσμο, ο Linus (και η παρέα του) συνέχισαν να πειράζουν το Linux και η έκδοση 2.4 του πυρήνα του είναι σχεδόν έτοιμη. Αυτό το κείμενο +περιγράφει κάποια από τα νέα χαρακτηριστικά στον 2.4, βασιζόμενο στον 2.3.99-pre3. + +Αντίθετα με τις ανακοινώσεις προ της εκδόσεως καποιων άλλων λειτουργικών συστημάτων, τα χαρακτηριστικά που περιγράφονται εδώ υπάρχουν ήδη στον πυρήνα 2.3 +(developers), αν και πιθανόν να μην είναι όλα τελείως σταθερά και κάποια μπορεί να χαρακτηρίζονται \"πειραματικά\" στην έκδοση 2.4. Καθώς το Linux είναι πιστό +στην φιλοσοφία του Open Source, τα χαρακτηριστικά προστίθενται από ανεξάρτητους προγραμματιστές καθώς ανακαλύπτουν μία συγκεκριμένη ανάγκη ή ένα λάθος στον +υπάρχοντα κώδικα. Αυτές οι αλλαγές ελέγχονται από τον Linux και τους βοηθούς του, και αυτή η διαδικασία φιλτραρίσματος είναι που κρατάει το Linux συνεκτικό +ακόμα και με αυτή την τεράστια βάση ανάπτυξής του. + +Ακόμα, στο πνεύμα του κινήματος **Open Source**, τα προϊόντα εκδίδονται \"όταν είναι έτοιμα\" και γενικά δεν έχουν προανακοινωμένες ημερομηνίες διάθεσης. Προς +το παρόν το Linux 2.3 βρίσκεται στην τελικά φάση προ-έκδοσης και δεν θα αλλάξει πολύ εκτός από κάποιες διορθώσεις. Περιμένουμε το Linux 2.4 σε έναν-δύο μήνες +και σε μερικούς μήνες από τότε οι διανομές θα το ενσωματώσουν στα πακέτα τους. Μένει να ειδωθεί πόσα από τα νέα χαρακτηριστικά θα διαλέξουν να υποστηρίξουν +οιδιανομές εξ\' αρχής. Η υποστήριξη για DevFS και LVM, ειδικά, θα είναι ένα μείζον θέμα για τις μελλοντικές διανομές. + +Σε αυτό το κείμενο γίνεται προσπάθεια επικέντρωσης στις περιοχές που το Linux 2.4 δεν είναι συμβατό με το Linux 2.2. Να θυμάστε ότι τα binary modules σίγουρα +δεν θα δουλεύουν, καθώς πολλές εσωτερικές δομές έχουν αλλάξει. Η μορφή κάποιων αρχείων στο /proc επίσης έχουν αλλάξει. Τα ονόματα σχεδόν όλων των αρχείων στο +/dev έχουν αλλαχθεί, αλλά παρέχονται συμβατά ονόματα. Οι περισσότερες εφαρμογές ούτε που θα καταλάβουν τις αλλαγές. (Οι low-level εφαρμογές , όπως ο δαίμονας +ppp, ή άλλα προγράμματα που βασίζονται σε στενή επαφή με τον πυρήνα πιθανότατα δεν θα είναι 100% συμβατά μεταξύ μεγάλων αλλαγών του πυρήνα). Αν σας αρέσει να +ενημερώνετε τη διανομή σας με το χέρι, να διαβάσετε οπωσδήποτε το αρχείο CHANGES και να ενημερώσετε όποια πακέτα χρειάζεται πριν να υποβάλετε αναφορά για λάθη. + +**1. ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΟΥ LINUX 2.4** +-------------------------------------------------------------- + +- [1.1 LINUX 2.4 KAI ia64](#ss1.1) +- [1.2 LINUX 2.4 KAI CRUSOE](#ss1.2) +- [1.3 LINUX 2.4 KAI ΠΡΟ-386](#ss1.3) +- [1.4 TA ΕΣΩΤΕΡΑ ΤΟΥ LINUX](#ss1.4) +- [1.5 ΥΠΟΣΤΗΡΙΞΗ ΥΛΙΚΟΥ - /dev/\*](#ss1.5) +- [1.6 ΔΙΑΥΛΟΙ - ISA, PCI, USB, MCA κτλ](#ss1.6) +- [1.7 Block Devices - LVM, Disk Drives, κλπ.](#ss1.7) +- [1.8 Συστήματα αρχείων και πίνακες κατατμήσεων](#ss1.8) +- [1.9 Συσκευές Χαρακτήρων - Πληκτρολόγια, Ποντίκια, Κονσόλες και Θύρες](#ss1.9) +- [1.10 Πολυμέσα: Ήχος, Τηεόραση, Ραδιόφωνο κλπ](#ss1.10) +- [1.11 Κάρτες Video και συσκευές Framebuffer](#ss1.11) +- [1.12 Προσιτότητα - accessibility](#ss1.12) +- [1.13 Δικτύωση και πρωτόκολλα](#ss1.13) +- [1.14 Binary Types](#ss1.14) +- [1.15 O Kernel Web Daemon](#ss1.15) +- [1.16 Κρυπτογραφία στον Πυρήνα](#ss1.16) + + +### [1. ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ ΤΟΥ LINUX 2.4]{#s1} + +Σε όρους γραμμών κώδικα, ο πυρήνας του Linux είναι κυρίως οδηγοί. Πραγματικά, το μέγεθος της καρδιάς του Linux δεν έχει μεγαλώσει πολύ κατά τις τελευταίες +ανανεώσεις. Κάποιοι από αυτούς τους οδηγούς είναι ανεξάρτητοι αρχιτεκτονικής, όπως ο οδηγός ΙDE. Αυτό σημαίνει πως αυτοί έχουν γραφτεί για να δουλεύουν σε +διάφορες πλατφόρμες. 'λλοι οδηγοί εξαρτώνται από μία συγκεκριμένη αρχιτεκτονική. Για παράδειγμα, ο οδηγός ποντικιού **ADB** (Apple Desktop Bus) δεν μπορεί να +δουλέψει στην πλατφόρμα i386 και έτσι δεν υποστηρίζεται. Οι προγραμματιστές του πυρήνα του Linux πασχίζουν για να φτιάξουν οδηγούς όσο γενικούς γίνεται, έτσι +ώστε να είναι δυνατόν να ξαναχρησιμοποιηθούν με μικρή προσπάθεια σε άλλες πλατφόρμες αν κάποιο εξάρτημα είναι διαθέσιμο. Το Linux είναι ένα πολυκέφαλο θηρίο με +πρόσωπα παρόμοια αλλά διαφορετικά το ένα από το άλλο, ανάλογα με την πλατφόρμα που χρησιμοποιούμε. + +Αυτό το κείμενο θα ασχοληθεί με υλικό Ιntel. Παρ\' ότι δεν θα μπει σε λεπτομέρειες για κάθε μεταφορά του Linux, θα πρέπει να αναφερθεί πως το Linux 2.4 θα +υποστηρίζει κάποιες νέες πλατφόρμες: i64 (Itanium), S/390 και SuperH. H υποστήριξη αυτή θα ωριμάσει με το χρόνο, όπως έγινε και με το Linux για άλλες +πλατφόρμες. Τα ακριβή χαρακτηριστικά διαφέρουν από πλατφόρμα σε πλατφόρμα και κάποιοι περιορισμοί του υλικού, μνήμης κλπ θα διαφέρουν ανάλογα με την +αρχιτεκτονική. + +Σε ό,τι αφορά στο Linux 2.4 για Intel, αυτό είναι πολύ παρόμοιο σε υποστήριξη με το Linux2.2. Όλα τα chips της Intel από τον 386 υποστηρίζονται ακόμα, μέχρι τον +Pentium III. Συμβατά chips όπως αυτά της AMD ή της Cyrix επίσης υποστηρίζονται. Επιπλέον, το Linux 2.4 θα περιλαμβάνει υποστήριξη για άλλο υλικό συχνά παρόν σε +πιο καινούργια chips συμπεριλαμβανομένων ποικιλιών **MTRRs (Memory Type Range Registers, επίσης MCRs)** μή-Intel που θα βελτιώσουν την απόδοση σε κάποιες +συσκευές μεγάλου εύρους. Ενώ το Linux 2.2 είχε υποστήριξη για **IO-APIC (Advanced Programmable Interrupt Controller)** σε συστήματα πολλαπλών επεξεργαστών, το +Linux 2.4 θα παρέχει την ίδια υποστήριξη και σε συστήματα ενός επεξεργαστή κι επίσης θα υποστηρίζει μηχανήματα με πολλαπλούς ΙΟ-ΑPICs. Η υποστήριξη για +πολλαπλούς IO-APICs θα επιτρέψει στο Linux 2.4 να προσαρμόζεται (scale) πολύ καλύτερα σε μηχανήματα υψηλών αποδόσεων απ΄ότι πριν. + +### [1.1 LINUX 2.4 KAI ia64]{#ss1.1} + +Αν και δεν έχει ακόμα παραδοθεί στις ανυπομονούσες μάζες, ο 64μπιτος αντικαταστάτης της Intel για τη σειρά των x86 έρχεται. Αν και δεν υπάρχει πραγματικό υλικό +ακόμα, στην έκδοση του πυρήνα έχει συμπεριληφθεί υποστήριξη (με patches) γι αυτό το chip και τους διαδόχους του. Η διαδικασία της μεταφοράς απλουστεύτηκε +σίγουρα με την υπάρχουσα υποστήριξη του Linux για 64μπιτους επεξεργαστές (συμπεριλαμβανομένων του **Alpha** της Compaq και του **Sparc64**). + +### [1.2 LINUX 2.4 KAI CRUSOE]{#ss1.2} + +Καθώς ο Linus δουλεύει στην **Transmetta**, ο Crusoe θα υποστηρίζει οπωσδήποτε το Linux όταν βγουν τα πρώτα προϊόντα Crusoe στην αγορά. Στην πραγματικότητα, το +Linux στον Crusoe έχει ήδη επιδειχθεί και μάλιστα πειστικά χρησιμοποιώντας το τεστ του Quake (πιθανώς το πιο σημαντικό τεστ για κάθε νέο επεξεργαστή). Καθώς ο +Crusoe προσομοιώνει τους i386 δεν θα υπάρξει ειδική μεταφορά γι αυτή την οικογένεια επεξεργαστών αλλά χαρακτηριστικά (ειδικά διαχείριση ενέργειας και πιθανώς +ένα νέο \"virtual keyboard layer\") τα οποία αναμένονται να υπάρχουν στην έκδοση 2.4 του πυρήνα. + +### [1.3 LINUX 2.4 KAI ΠΡΟ-386]{#ss1.3} + +Περιέργως, πολλοί ενδιαφέρονται ακόμα για το Linux για προ-386 επεξεργαστές. Η απάντηση, τουλάχιστον αυτή τη στιγμή, είναι πως δεν υπάρχει τέτοιο πράγμα Υπάρχει +ένα αδερφό πρόγραμμα, το **ΕLKS (Embedable Linux Kernel Subset)** το οποίο δουλεύει πάνω σε μία παραλλαγή του Linux για τέτοια μηχανήματα, με υποστήριξη για +protected mode για όσα την υποστηρίζουν. Το πρόγραμμα αυτό είναι ανεξάρτητο από το κυρίως Linux και δεν αφορά αυτό το κείμενο. + +Υπάρχει επίσης μία διαφορετική μεταφορά του πυρήνα του Linux, το uLinux, που προσφέρει Linux σε ενσωματωμένους και παλιότερους επεξεργαστές, συμπεριλαμβανομένων +αυτών χωρίς MMUs. Αυτή η δουλειά προς το παρόν βασίζεται πάνω στον πυρήνα 2.0 και δεν έχει ενσωματωθεί στο master tree. + +### [1.4 TA ΕΣΩΤΕΡΑ ΤΟΥ LINUX]{#ss1.4} + +To Linux 2.2 ήταν μία μεγάλη βελτίωση του Linux 2.0 και τη σειρά Linux 1.x. Υποστήριζε πολλά καινούργια συστήματα αρχείων, ένα νέο σύστημα **file caching** και +ήταν πολύ καλύτερα κλιμακούμενο. Το Linux 2.4 χτίζει πάνω σε αυτές και άλλες βάσεις για να είναι το καλύτερο Linux μέχρι τώρα για πολλά πράγματα. + +Ο πυρήνας του Linux είναι μία συλλογή αρθρωμάτων που περιλαμβάνουν οδηγούς υλικού, πρωτόκολλα και άλλα στοιχεία. Αυτά είναι \'κολλημένα\' στην καρδιά του πυρήνα +με **APIs, Programming Interfaces**, που παρέχουν μία στάνταρντ μέθοδο με την οποία ο πυρήνας του Linux μπορεί να επεκταθεί, και με αυτά θα ασχοληθεί αυτό το +κείμενο. Αυτά είναι τα στοιχεία που οδηγούν τους δίσκους σας, διαβάζουν τα αρχεία σας και κάνουν όλα τα προφανή πράγματα. Το Linux 2.4 είναι κάτι παραπάνω από +αυτά, όμως. Αυτοί οι οδηγοί και τα APIs περιστρέφονται γύρω από ένα κοινό κέντρο του πυρήνα του Linux. Αυτό το κέντρο περιλαμβάνει πολύ σημαντικά χαρακτηριστικά +όπως τον scheduler, τον διαχειριστή μνήμης, το εικονικό σύστημα αρχείων και το **resource allocator**. + +Το Linux 2.4 είναι η πρώτη έκδοση του πυρήνα του Linux που θα περιλαμβάνει ένα πλήρη υποσύστημα resource allocator management. Οι προηγούμενες εκδόσεις +περιείχαν μία κάποια υποστήριξη αλλά ήταν μάλλον αναξιόπιστη και δεν παρείχε τη λειτουργικότητα που χρειάζεται στον κόσμο \"Plug and Play\". Σε αντίθεση με τις +περισσότερες εσωτερικές αλλαγές, οι χρήστες θα νοιώσουν άμεσα αυτή την αλλαγή μια που επηρεάζει τον τρόπο που τα resources κατανέμονται και αναφέρονται στον +πυρήνα. Σαν μέρος αυτής της αλλαγής, η βάση δεδομένων PCI card που ήταν \'ριγμένη\' στο Linux 2.2 τώρα αναβαθμίζεται ούτως ώστε όλα τα resources να έχουν ένα +αντίστοιχο όνομα συσκευής παρά απλά έναν αντίστοιχο οδηγό. + +Η νέα έκδοση του πυρήνα του Linux επίσης διορθώνει κάποια προβλήματα με τον τρόπο που γινόταν η διαχείριση του layer του **VFS (Virtual FileSystem)** και των +file caches. Σε παλαιότερες εκδόσεις του Linux το caching εξαρτάτο από ένα σύστημα dual-buffer το οποίο απλοποιούσε κάποια πράγματα, αλλά προκαλούσε +πονοκεφάλους στους προγραμματιστές του πυρήνα που έπρεπε να διασφαλίσουν ότι δεν ήταν δυνατό για αυτούς τους buffer να είναι ασυγχρόνιστοι. Επιπροσθέτως, η +παρουσία του buffer αύξανε τη χρήση της μνήμης και καθυστερούσε το σύστημα καθώς ο πυρήνας έπρεπε να κάνει επιπλέον δουλειά για να κρατάει τα πράγματα +συγχρονισμένα. Το Linux 2.4 λύνει αυτά τα προβλήματα χρησιμοποιώντας ένα απλούστερο σύστημα με μονό buffer. + +Ένας αριθμος αλλαγών στο Linux 2.4 μπορεί να περιγραφεί ώς \"enterprise level\". Αυτό σημαίνει πως δεν θα γίνουν αντιληπτές και χρήσιμες στους χρήστες desktop +άμεσα. Στο μεγαλύτερο μέρος τους αυτά τα χαρακτηριστικά δεν υποβιβάζουν το Linux σε πιο \"νορμάλ\" περιβάλλοντα. Πρώτα απ\' όλα, το Linux 2.4 μπορεί να +χειρίζεται περισσότερες ταυτόχρονες διεργασίες καθώς είναι πιο κλιμακούμενο σε πολυεπεξεργαστικά μηχανήματα και επίσης προσφέροντας ένα ρυθμιζόμενο όριο +διεργασιών. Δεύτερον, ο scheduler έχει ξαναφραφεί κάπως για να είναι πιο αποτελεσματικός σε συστήματα με πολλές ταυτόχρονες διεργασίες. Τρίτον, ο καινούργιος +πυρήνας του Linux μπορεί πλέον να χειρίζεται ένα απίθανο νούμερο χρηστών και groups -κάπου 4.2 εκατομμύρια (και αυτό είναι \*πολλοί\* χρήστες!). Επιπροσθέτως, +παρέχεται υποστήριξη για πιο ισχυρό υλικό με υποστήριξη RAM 4GB σε Intel, μέχρι 16 Ethernet κάρτες, 10 ελεγκτές IDE, πολλαπλά IO-APICs και άλλες καταχρήσεις +καλού υλικού. Το όριο των 2GB για τα αρχεία έχει επίσης αυξηθεί. Με αυτές και άλλες αλλαγές, οι προγραμματιστές του πυρήνα του Linux αποδεικνύουν πως το Linux +μπορεί να είναι μία επιλογή σε πολλά νέα περιβάλλοντα. + +Ο τρόπος που το Linux χειρίζεται την μοιραζόμενη (shared) μνήμη έχει επίσης αλλάξει στο 2.4 για να συμμορφωθεί περισσότερο με τα στανταρντ. Μία παρενέργεια +αυτών των αλλαγών είναι ότι το Linux 2.4 θα απαιτεί να γίνεται mount ένα ειδικό σύστημα αρχείων μοιραζόμενης μνήμης για να δουλεύουν τα τμήματά της. Αυτό θα +γίνεται από τη διανομή όταν γίνουν διαθέσιμες για το Linux 2.4. + +Το Linux 2.4 επίσης περιέχει μία πολύ μεγαλύτερη συλλογή οδηγών και υποστηριζόμενου υλικού από οποιαδήποτε άλλη έκδοση και κάθε κομμάτι υλικού που μπορείτε να +ονομάσετε έχει μία καλή πιθανότητα να δουλεύει κάτω από Linux (βεβαίως, θα πρέπει να συμβουλευτείτε τα κείμενα πριν να αγοράσετε καινούργιο υλικό, για κάθε +περίπτωση. Ειδικά καινούργιο υλικό μπορεί να μη δουλεύει ακόμα.) + +Μία συχνή ερώτηση για το Linux 2.4 είναι το πόση μνήμη θα απαιτεί. Πολλά λειτουργικά συστήμτα απαιτούν ολοένα και περισσότερη μνήμη και πόρους καθώς ωριμάζουν, +αλλά το Linux 2.4 δεν ακολουθεί αυτήν την τάση καθώς απαιτεί λειγότερη μνήμη σε κάποιες περιπτώσεις. Βεβαίως, το Linux 2.4 περιέχει πολύ περισσότερη +λειτουργικότητα από το 2.2 και πολλά από αυτά τα χαρακτηριστικά χρειάζονται χώρο, οπότε η περίπτωσή σας μπορεί να διαφέρει (να θυμάστε ότι τα περισσότερα +στοιχεία του πυρήνα μπορούν να απενεργοποιηθούν κατά το compling, σε αντίθεση με άλλα λειτουργικά). + +### [1.5 ΥΠΟΣΤΗΡΙΞΗ ΥΛΙΚΟΥ - /dev/\*]{#ss1.5} + +Πριν να μιλήσουμε για την υποστήριξη υλικού στο Linux 2.4, πρέπει να μιλήσουμε για ένα από τα πιο καιρνούρια και αμφιλεγόμενα χαρακτηριστικά του: το **DevFS +(Device FileSystem)**. Αυτό είναι ένα (προς το παρόν προαιρετικό) χαρακτηριστικό το οποίο βασικά ξαναγράφει τον τρόπο με τον οποίο το Linux χειρίζεται τις +διάφορες συσκευές. Αυτό θα πρωτοπαρουσιαστεί στο χρήστη με δυο προφανείς τρόπους. Πρώτον, σχεδόν όλα τα ονόματα των συσκευών έχουν αλλάξει. Για παράδειγμα, το +\"/dev/had\" μπορεί να ήταν ο σκληρός σας δίσκος, αλλά τώρα θα ήταν τοποθετημένο στο \"/dev/ide0/\...\" (η ονοματολογία δεν είναι ακόμη βέβαιη). Αυτό το +αλλαγμένο σχήμα αυξάνει τον διαθέσιμο για ονόματα συσκευών χώρο κι επιτρέπει να ενσωματωθούν πιο εύκολα συστήματα USB και άλλα \"συγχρονα\" πράγματα. Δεύτερον, +τα ονόματα των συσκευών τώρα θα προστίθενται στο /dev/ ώς οδηγοί φορτωμένοι στον πυρήνα παρά θα έχουμε όλα τα πιθανά ονόματα να προϋπάρχουν σε αυτό το +directory. Τα παλιά ονόματα θα είναι ακόμη διαθέσιμα χάριν συμβατότητας χρησιμοποιώντας ένα πρόγραμμα userspace, το \"devfsd\". + +Αν και αυτό μπορεί να επηρεάσει τις εταιρίες διανομών που θέλουν να εχουν σίγουρο πως όλες οι εφαρμογές θα έχουν μεταβληθεί κατα τρόπο ώστε να χρησιμοποιούν τα +νέα ονόματα, οι χρήστες δεν θα πρέπει να επηρεασθούν ιδιαίτερα. Αυτή η αλλαγή θα είναι μία έκπληξη, αν μή τι άλλο, για πολλούς χρήστες. Αν και σε μερικούς +μπορεί να μην αρέσει η νέα μακριά ονοματολογία, είναι εύκολο να δούμε πόσο περιοριστική ήταν η παλιά (τί θα γινόταν, για παράδειγμα, αν είχατε περισσότερους από +26 δίσκους;) + +### [1.6 ΔΙΑΥΛΟΙ - ISA, PCI, USB, MCA κτλ]{#ss1.6} + +Οι επεξεργαστές είναι μόνο ένα μικρό κομμάτι του κόσμου του υπολογιστή. Εξίσου σημαντικά είναι η αρχιτεκτονική του διαύλου, το στοιχείο του συστήματος που είναι +συχνά υπεύθυνο για τις εσωτερικές κι εξωτερικές συσκευές. Κάποιες αρχιτεκτονικές, όπως η αρχική ISA, είναι περισσότερο ανεύθυνες απέναντι στο υλικό απ\' +ότιδήποτε άλλο -δεν παρέχουν καμμία διαχείριση πόρων, παρά μόνο ένα μέρος για να βάλουμε κάρτες. 'λλες, όπως η PCI, υποστηρίζουν πολύ περισσότερο προχωρμένα +επίπεδα παραμετροποίησης και επιτρέπουν την αλλαγή παραμέτρων συσκευών και άλλα πράγματα. Καθώς όλοι οι αρχικοί εσωτερικοί δίαυλοι Intel υποστηρίζονταν από το +Linux 2.2 ((Ε)ISA, VLB, PCI, MCA), δεν υπήρχαν εντυπωσιακές ανακοινώσεις σε αυτόν τον τομέα. Το Linux 2.4, παρ\' όλα αυτά, βελτιώνει κάποιους από αυτούς τους +διάυλους με το να τους προσδένει στο νέο υποσύστημα πόρων του Linux + +Υπάρχουν τώρα δύο μεγάλες βελτιώσεις σε αυτόν τον τομέα. Το Linux 2.4 περιέχει, για πρώτη φορά στον πυρήνα, υποστήριξη για ISA Plug \'n\' Play συσκευές. +Προγηγουμένως, το Linux μπορούσε να υποστηρίξει τις συσκευές αυτές μόνο μέσω ενός προγράμματος που έτρεχε ο χρήστης και με πολύ ιδρώτα. Το Linux 2.4 θα +επιτρέπει τη χρησιμοποίηση αυτών των συσκευών κατά την εκκίνηση (π.χ., την εκκίνηση από ένα ΙSAPnP IDE ελεγκτή) και την αυτόματη παραμετροποίηση αυτών. Ακομα το +Linux 2.4 θα παρέχει υποστήριξη για I2O μέσα στον πυρήνα. Το **Ι2Ο (Intelligent Input/Output)** είναι ένα υποσύνολο του PCI που επιχειρεί να επιτρέψει να +γραφούν οδηγοί ανεξαρτήτως λειτουργικού για πολλές συσκευές. Μεταξύ αυτών των δύο αλλαγών, πολλοί χρήστες θα βρουν ότι το Linux 2.4 υποστηρίζει πολύ περισσότερα +κομμάτια υλικου PC. + +Παρ\' όλα αυτά, το Linux 2.4 δεν θα αυξήσει την υποστήριξη για εξωτερικές συσκευές. Έχει προστεθεί υποστήριξη για PCMCIA (ή PC Card). Αυτή η υποστήριξη ήταν +διαθέσιμη σε πολλές διανομές από μία εξωτερική πηγή και οι περισσότερες διανομές την περιείχαν εξ\' ορισμού. Το Linux 2.4 υποστηρίζει καλύτερη ολοκλήρωση με το +σύνολο οδηγών PCMCIA και θα κάνει ευκολότερη την εγκατάσταση και τη ρύθμιση για τέτοιες συσκευές, για πολλούς χρήστες. Όπως προηγούμενες εκδόσεις αυτού του +οδηγού, πάντως, το Linux 2.4 θα απαιτεί ακόμα έναν εξωτερικό δαίμονα και στοιχεία (components) για να χρησιμοποιήσει τις συσκευές στο έπακρο. Ίσως τα πιο +ενδιαφέροντα νέα σε αυτό το μέτωπο έχουν να κάνουν με το Universal Serial Bus (USB), έναν εξωτερικό δίαυλο που κυριαρχεί σιγά-σιγά σε συσκευές όπως +πληκτρολόγια, ποντίκια, συστήματα ήχου, σαρωτές και εκτυπωτές. Το USB είναι μία δημοφιλής επιλογή για πολλές καινούργιες συσκευές, ακόμη και για υλικό μή-Intel. +Η υποστήριξη του Linux γι αυτές τις συσκευές είναια κόμη σε πρώιμα στάδια αλλά ένα μεγάλο ποσοστό κοινού υλικού USB (πληκτρολόγια, ποντίκια, ηχεία κλπ) ήδη +υποστηρίζεται από τον πυρήνα. + +Πιο πρόσφατα, προστέθηκε υποστήριξη **Firewire** στον πυρήνα. Το **Firewire** είναι μία δημοφιλής επιλογή για πολλές συσκευές μεγάλου εύρους διαύλου. Δεν +υπάρχουν πολλοί οδηγοί γι αυτήν την αρχιτεκτονική ακόμη, αλλά αυτή η υποστήριξη σίγουρα θα βελτιωθεί με τον καιρό, καθώς αυτή ωριμάζει. + +### [1.7 Block Devices - LVM, Disk Drives, κλπ.]{#ss1.7} + +Στην πιο απλή του μορφή, ένα block device είναι μία συσκευή που μπορεί να εκφραστεί ώς μία σειρά bytes που τα οποία μπορούν να προσπελασθούν σε οποιαδήποτε +σειρά. Αυτό περιλαμβάνει συσκευές όπως οι δίσκοι (μπορούμε να διαβάσουμε όποιο τομέα θέλουμε) αλλά όχι σειριακές θύρες (μπορούμε να διαβάσουμε μόνο ότι υπάρχει +στην άκρη του καλωδίου). Επεκτάσεις αυτής της ιδέας (όπως η έξοδος ενός δίσκου κλπ) χειρίζονται από το Linux μέσω των ioctls (I/O Controls). Η ιδέα των block +devices δεν έχει αλλάξει εδώ και καιρό και υποστήριξη για συσκευές όπως δίσκοι **IDE/SCSI** υπάρχει από τις πρώτες εκδόσεις του πυρήνα του Linux. Στο Linux 2.4 +έχουν ξαναγραφεί κάπως όλοι οι οδηγοί block devices καθώς το ΑΡΙ των block devices έχει αλλάξει για να ξεφορτωθεί διάφορα σκουπίδια και να διαχωρίσει το block +ΑΡΙ από το ΑΡΙ αρχείων σε επίπεδο πυρήνα. Οι αλλαγές που χρειάστηκαν γι αυτό το ξαναγράψιμο του ΑΡΙ δεν ήταν μεγάλες. Όμως, οι προγραμματιστές αρθρωμάτων που +διατηρούν αρθρώματα έξω από το main tree μπορεί να χρειαστεί να ανανεώσουν τον κώδικά τους (δεν θα πρέπει ποτέ να υποθέτουμε πλήρη συμβατότητα ΑΡΙ για αρθρώματα +του πυρήνα μεταξύ μεγάλων αλλαγών του πυρήνα) + +Τουλάχιστον στην επιφάνεια εργασίας, οι συσκευές δίσκων που χρησιμοποιούν το δίαυλο IDE είναι οι κυρίαρχες. Το Linux υποστηρίζει το IDE από τους πρώτους πυρήνες +αλλά το Linux 2.4 βελτιώνει αυτή την υποστήριξη με διάφορους τρόπους. Πρώτα απ\' όλα, τα μηχανήματα υψηλής απόδοσης με πολλαπλούς ελεγκτές IDE θα ωφεληθούν +καθώς ο αριθμός των υποστηριζόμενων ελεγκτών έχει ανέλθει στους 10, ενώ πριν ήταν 4. Καθώς οι περισσότερες μητρικές έρχονται μόνο με δύο, αυτό δεν θα επηρρεάσει +τους περισσότερους χρήστες. Δεύτερον, υπήρξαν αλλαγές που ια βελτιώσουν την υποστήριξη για ελεγκτές PCI και PnP IDE, δισκέττες ΙDE και tapes, DVDs και CDROM +changers. Και τέλος, το Linux 2.4 περιέχει ανανεώσεις οδηγών που θα διορθώνουν λάθη κάποιοων chipsets IDE και θα παρέχουν βελτιωμένη υποστήριξη για κάποια +χαρακτηριστικά άλλων, όπως το **ΑΤΑ66**. + +Αν και φαίνεται πως το υποσύστημα **SCSI** δεν έχει αλλάξει τόσο όσο το ΙDE, έχει ξαναγραφεί σε μεγάλο βαθμό. Επιπροσθέτως, υποστηρίζονται πολλοί νέοι ελεγκτές, +ενώ αναμένεται ακόμα ένα ξεκαθάρισμα στον κύκλο ανάπτυξης του 2.5. + +Ένα ολοκαίνουργιο χαρακτηριστικό του 2.4 είναι η εφαρμογή του **\"raw\" Ι/Ο device**. Μία συσκευή \"raw\" είναι εκείνη η προσπέλαση της οποίας δεν χειρίζεται +από το **caching layer**, αντί να πηγαίνει κατευθείαν στη low-level συσκευή καθεαυτή. Μία τέτοια συσκευή μπορεί να χρησιμοποιηθεί σε περιπτώσεις που μία +απαιτητική εφαρμογή θέλει πλήρη έλεγχο πάνω στο πως αποθηκεύει δεδομένα και τα μειονεκτήματα του συνηθισμένου caching δεν είναι επιθυμητά. Εναλλακτικά, μία +τέτοια συσκευή θα μπορούσε να χρησιμοποιηθεί σε κρίσιμες περιπτώσεις όπου θέλουμε να βεβαιωθούμε ότι τα δεδομένα θα γράφονται αμέσως στο δίσκο ώστε να μη χαθούν +σε καμμία περίπτωση. Η προηγούμενη υποστήριξη δεν ήταν επαρκής και γι αυτό δεν συμπεριλαμβανόταν, μια που έπρεπε να διπλασιαστεί ο αριθμός των nodes ώστε κάθε +block device να έχει ένα **raw device node** (και αυτή είναι η υποστήριξη που παρέχουν πολλά εμπορικά Unix). Η παρούσα υποστήριξη χρησιμοποιεί μία δεξαμενή +**device nodes** που μπορεί να συσχετισθεί με οποιαδήποτε συσκευή. + +Μία μεγάλη περιοχή αλλαγών στο Linux 2.4 υπήρξε η εισαγωγή του υποσυστήματος **LVM (Logical Volume Manager)** μέσα στον πυρήνα. Αυτό είναι ένα σύστημα ανάλογο +των **Unix HP-UX** και **Tru64 UNIX** που επανακαθορίζει πλήρως τον τρόπο που διαχειρίζονται τα συστήματα αρχείων και volumes. Το LVM επιτρέπει στα συστήματα +αρχείων να εκτείνονται σε πολλούς δίσκους, να αλλάζουν μέγεθος και να διαχειρίζονται με ένα πιο ευέλικτο τρόπο απ\'ότι με τις παρούσες μεθόδους partition table. +Κάποια από τα νέα χαρακτηριστικά του LVM αναπαράγονται με τον οδηγό md (multiple device) ή κάποια εργαλεία userspace. Πάντως, το υποσύστημα LVM προσφέρει αυτήν +την υποστήριξη με ένα εκ των πραγμάτων συμβατό με στάνταρντ τρόπο που θα είναι οικείος σε χρήστες εμπορικών UNIX. + +Επιπρόσθετα των αλλαγών στα άλλα block devices, το Linux 2.4 ακόμα υποστηρίζει ανανεωμένο loopback και οδηγούς ramdisk που διορθώνουν ορισμένα λάθη. + +### [1.8 Συστήματα αρχείων και πίνακες κατατμήσεων]{#ss1.8} + +Τα Block devices μπορούν να χρησιμοποιηθούν με διάφορους τρόπους. Ο ποιος συνήθης είναι να ενεργοποιήσουμε (mount) ένα σύστημα αρχείων πάνω τους (εσωτερικά, ο +κώδικας των συστημάτων αρχείων είναι σαν ένα \'επίστρωμα\' του οδηγού του block device). 'λλοι τρόποι περιλαμβάνουν τη διαδικασία κατατμήσεων (partitioning) (το +οποίο μοιάζει πολύ με ένα σύστημα αρχείωμ, μόνο που διαχειρίζεται με τε΄λείως διαφορετικό τρόπο), και η χρησιμοποίησή του ώς έχει (raw). + +To Linux 2.4 περιλαμβάνει όλα τα συστήματα αρχείων του 2.2. Αυτά συμπεριλαμβάνουν το **FAT (για τα διάφορα DOS), το ΝΤFS (Windows NT), VFAT και FAT32 (Windows +9x), HFS (MacOS), HPFS (OS/2)** και άλλα. Έχουν προστεθεί καινούργια συστήματα αρχείων, κυρίως το σύστημα **UDF** που χρησιμοποιείται στα **DVD** και το **XFS +(ή EFS)** που χρησιμοποιείται από το **ΙRIX**. Όλα τα συστήματα έχουν ξαναγραφεί σε ένα βαθμό προκειμένου να υποστηρίζουν το καινούργιο σύστημα page caching και +θα είναι πιο αποδοτικά εξαιτίτας αυτής της αλλαγής. Η μόνη εξαίρεση είναι αυτή του **ΝΤFS** που δεν συντηρείται ιδιαίτερα και δεν είναι σταθερό. + +Υπάρχει ένας αριθμός αλλαγών που θα βελτιώσουν τη συμβατότητα με άλλα συστήματα. Οι χρήστες OS/2 θα μπορούν επιτέλους να γράψουν στα συστήματα αρχείων τους μέσα +από το Linux. Οι χρήστες ΝΤ δεν έχουν αυτήν την πολυτέλεια ακόμη μια που ο οδηγός είναι ακόμα σε πειραματικό στάδιο. Οι χρήστες **NextStep** θα μπορούν να +ενεργοποιούν (mount) τα CD-ROM τους κάτω από Linux, μια και αυτό υποστηρίζει μία επέκταση του UFS που χρησιμοποιεί το ΝextStep. Ας σημειωθεί ότι το **HFS+**, το +νέο σύστημα αρχείων του Macintosh δεν υποστηρίζεται ακόμη από το Linux. + +To Linux 2.4 δεν υποστηρίζει ακόμη ένα **journaling** σύστημα αρχείων, αν και διάφορα σχέδια είναι κοντά στο να παρέχουν αυτή τη λειτουργία με σταθερό τρόπο. Αν +και είναι σχεδόν σίγουρο ότι ένα τέτοιο σύστημα δεν θα υποστηρίζεται από το Linux 2.4, αναμένεται ότι τουλάχιστον ένα τέτοιο θα προστεθεί στον κύκλο 2.4. + +Επιπροσθέτως, ο κώδικας διαχείρισης του πίνακα κατατμήσεων έχει ξαναγραφεί και τώρα επιτρέπει να χρησιμοποιηθεί μία πολύ μεγαλύτερη επιλογή ξένων τύπων πινάκων. +Αυτό θα ήταν χρήσιμο αν έχετε, για παράδειγμα, ένα εξωτερικό οδηγό **SCSI** από ένα Macintosh και θέλετε να τον χρησιμοποιήσετε στο PC σας. Έχει προστεθεί ένας +αριθμός νέων τύπων πινάκων κατατμήσεων, συμπεριλαμβανομένου του format για μηχανήματα **ΙRIX**. + +Δεν ενεργοποιούνται όλα τα συστήματα αρχείων πάνω από **block devices**. Μερικά, όπως το proc και το devfs είναι τελείως εικονικά. 'λλα ενεργοποιούνται στο +δίκτυο. Υπάρχει ένας αριθμός τρόπων για να πραγματοποιηθεί αυτό και πολλά λειτουργικά προσφέρουν τις δικές τους μεθόδους. + +Ο κόσμος των Windows χρησιμοποιεί το **Server Message Block (SMB)** για τα δικτυακά συστήματα αρχείων. Ο νέος πυρήνας Linux αφαιρεί την επιλογή του εάν θα +ενεργοποιηθούν δίσκοι από Windows 9x ή NT κατά το compile. Θα μπορεί να ανιχνεύει αυτόματα τον τύπο του απομακρυσμένου συστήματος και να ενεργοποιεί διορθώσεις +όταν χρειάζεται. Αυτό θα βελτιώσει σημαντικά την ικανότητα του Linux να λειτουργεί σε δίκτυα με διάφορες εκδόσεις Windows. + +Στον κόσμο του UNIX, το πρωτόκολλο NFS είναι το προτιμητέο για διαμοίρασμα (share) αρχείων. Το Linux 2.4 περιλαμβάνει τη δυνατότητα πρόσβασης σε κοινά αρχεία με +την τελευταία έκδοση του ΝFS, NFSv3. Αυτή έχει πολλά πλεονεκτήματα σε σχέση με προηγούμενες εκδόσεις και είναι από τα πλέον σητημένα χαρακτηριστικά . Θα πρέπει +να σημειωθεί, πάντως, ότι ο δαίμονας του ΝFS θα εξάγει ακόμη μόνο NFSv2 από Linux (έχει ανακοινωθεί εξέλιξη υποστήριξης για NFSv4). + +### [1.9 Συσκευές Χαρακτήρων - Πληκτρολόγια, Ποντίκια, Κονσόλες και Θύρες]{#ss1.9} + +Οι συσκευές που μπορούν να προσπελασθούν σε σειρά είναι οι συσκευές χαρακτήρων. Αυτές είναι συσκευές, όπως οι σειριακές, που επιτρέπουν την ανάγνωσημίας +αλληλουχίας δεδομένων ή την εισαγωγή δεδομένων σε αυτή, αλλά όχι και το \'τρέξιμο\' μπροστά ή πίσω. Αυτές περιλαμβάνουν τις σειριακές και παράλληλες θύρες, τα +πληκτρολόγια, τα ποντίκια και τις τερματικές συσκευές (terminal devices). Υπάρχουν σημαντικές βελτιώσεις σε αυτόν τον τομέα στον τελευταίο πυρήνα. + +Μία από τις μεγαλύτερες βελτιώσεις είναι στην υποστήριξη για πληκτρολόγια και ποντίκα. Προηγουμένως υπήρχε υποστήριξη για σειριακά και PS/2 πληκτρολόγια και +ποντίκια (και ADB, για παράδειγμα, σε Macintosh). Το Linux 2.4 υποστηρίζει ποντίκια και πληκτρολόγια USB. Επιπροσθέτως, υποστηρίζει πληκτρολόγια σε συστήματα +όπου το πληκτρολόγιο δεν αρχικοποιείται από το BIOS και συστήματα με προβλήματα στην ανίχνευση πληκτρολογίου. Και τέλως, το Linux 2.4 περιλαμβάνει εκτενή +υποστήριξη για digitizer pads και υποστηρίζει προσωμοίωση για να χρησιμοποιηθούν ώς κανονικά ποντίκια, ακόμη και αν αυτό δεν υποστηρίζεται ευθέως από το υλικό. + +Η υποστήριξη του Linux για σειριακές θύρες δεν έχει αλλάξει ιδιαίτερα από τις ημέρες του 2.2. Το Linux 2.4 υποστηρίζει διαμοιρασμένα ΙRQ σε PCI. Προηγουμένως, +αυτό το χαρακτηριστικό περιοριζόταν σε ΙSA και on-board σειριακές πλακέτες. Επιπροσθέτως, το Linux 2.4 προσθέτει έναν αριθμό νέων οδηγών για σειριακές κάρτες +πολλαπλών θυρών. Ελπίζεται ότι αυτές οι αλλαγές και άλλες θα κάνουν τη χρήση των σειριακών θυρών ευκολότερη από ποτέ. + +Σε ένα ξεχωριστό τομέα, έχει γίνει δουλειά στην υποστήριξη των αποκαλούμενων **WinModems (ή Soft Modems)**. Aυτά είναι modem που υλοποιούνται ευρέως μέσω +λογισμικού (συχνά το DSP και άλλα μέρη του υλικού πρέπει να προσομοιωθούν από λογισμικό). Αν και δεν έχει επιδοθεί κώδικας στον Linus για την υποστήριξη αυτή, +διάφορα σχέδια είναι στα σκαριά για την υποστήριξη των modem αυτών και τα πρώτα δείγματα έχουν αρχίσει να φαίνονται έξω από το main tree. Αν και θα πάρει αρκετό +καιρό πριν να υποστηριχθούν οι περισσότερες από αυτές τις συσκευές, φαίνεται πως για πρώτη φορά η χιονόμπαλλα του Οpen Source αρχίζει να κυλάει προς αυτή την +κατεύθυνση. + +Το Linux 2.4 ακόμη έχει ένα ευρέως ξαναγραμμένο υποσύστημα παράλληλης θύρας. Μία από τις μεγαλύτερες αλλαγές σε αυτόν τον τομέα είναι η υποστήριξη για +\`\`generic\'\' παράλληλες συσκευές. Η λειτουργικότητα αυτή μπορεί να χρησιμοποιηθεί από προγράμματα που έχουν πρόσβαση στη θύρα με ασυνήθιστους τρόπους, +περιλαμβανομένης της χρήσης UDMA για γρηγορότερο Ι/Ο αν αυτό υποστηρίζεται από το υλικό. Με τον νέο πηρήνα, είναι επίσης δυνατό το να κατευθύνονται όλα τα +μηνύματα της κονσόλας σε μία παράλληλη συσκευή όπως ένας εκτυπωτής. Αυτό επιτρέπει στο Linux να έχει τη λειτουργικότητα πολλών εμπορικών UNIX βγάζοντας τα +μηνύματα του πυρήνα και του debugging σε εκτυπωτές. + +Η υποστήριξη για υπέρυθρες έχει βελτιωθεί από το 2.2 και έχουν γίνει πολλές αλλαγές, συμπεριλαμβανομένης καλύτερης δικτυακής υποστήριξης. + +### [1.10 Πολυμέσα: Ήχος, Τηεόραση, Ραδιόφωνο κλπ]{#ss1.10} + +Στην πλευρά των συσκευών χαρακτήρα έχουμε κάποιες από τις λιγότερο αναγκαίες για υποστήριξη συσκευές. Το Linux, ως αναδυόμενη λύση για πλατφόρμα desktop +προσπαθεί πολύ σκληρά να υποστηρίξει κάρτες ήχου, τηλεόρασης και ραδιοφώνου και άλλες συσκευές εισόδου/εξόδου ήχου και εικόνας. Για να είμαστε ειλικρινείς, το +2.4 δεν έχει τραγικές αλλαγές από τον 2.2. Όμως περιλαμβάνει ανανεώσεις και καινούργιους οδηγούς για διάφορες κάρτες ήχου και εικόνας καθώς και υποστήριξη για +full duplex. Το 2.4 ακόμη περιλαμβάνει κώδικα που επιτρέπει σε κάποιες συσκευές ήχου να διαχειρίζονται ευκολότερα μνήμη στις αναγκαίες περιοχές. Αυτό θα +διευκολύνει πολύ τη ρύθμιση και τη χρήση των καρτών + +Ένα τελείως καινούργιο υποσύστημα ήχου είναι στα σκαριά και θα χρησιμοποιεί πολλά από τα πιο προχωρημένα χαρακτηριστικά των σημερινών καρτών ήχου. Αυτή η +υποστήριξη θα ενσωματωθεί στον 2.6. + +### [1.11 Κάρτες Video και συσκευές Framebuffer]{#ss1.11} + +Μία άλλη, πιο περίπλοκη ποικιλία συσκευών είναι οι framebuffer. Μία τέτοια συσκευή είναι απλά μία περιοχή της μνήμης που αντιπροσωπεύει (ή είναι) μνήμη video σε +τέτοιο βαθμό που η εγγραφή σε αυτή τη μνήμη επηρρεάζει τα χρώματα και τα pixel σε μία ιθόνη. Αυτό είναι πιο πολύπλοκο από άλλες συσκευές γιατή υποστηρίζει +ioctls για την αλλαγή παλέττας και άλλες λειτουργίες σχετιζόμενες με το video. Το Linux 2.4 περιλαμβάνει νέους οδηγούς και βελτιώσεις στους παλιούς. Ιδιαίτερα +σημαντηκή είναι η υποστήριξη για πολύ περισσότερες \'στάνταρντ\' κάρτες και διαρυθμίσεις VGA,τουλάχιστον σε ορισμένα modes (ακόμη και αν αυτόε ίναι μόνο 16 +χρωμάτων). Να θυμάστε ότι αυτό το χαρακτηριστικό μπορεί να προσπερασθεί και (σε i386) είναι χρήσιμό μόνο σε συστήματα που δεν μπορούν να υποστηριχθούν κατ\' +άλλο τρόπο. Αυτή τη στιγμή, το Χfree προσφέρει υποστήριξη για πολύ περισσότερες κάρτες απ\' ό,τι ο πυρήνας και έτσι δεν είναι αναγκαία η χρήση αυτής της +λειτουργίας για υποστήριξη για το σύστημα X Window (η **SVGALib** και άλλες libraries επιτρέπουν την άμεση διαχείριση εικόνας σε υποστηριζόμενο υλικό, αν και η +χρήση αυτών πρέπει να γίνεται μετα προσοχής για λόγους ασφάλειας). + +Μία από τις μεγαλύτερες αλλαγές εδώ είναι η προσθήκη του **Direct Rendering Manager** στον πυρήνα. Ο **DRM** ξεκαθαρίζει την πρόσβαση στο υλικό και δεν +επιτρέπει καταστάσεις όπου πολλές διεργασίες που γράφουν στην κάρτα εικόνας προκαλλούν κρασάρισμα του συστήματος. Αυτό θα βελτιώσει την σταθερότητα σε πολλές +περιπτώσεις. Ο DRM επίσης λειτουργεί σαν σημείο εισόδου για την πρόσβαση DMA καρτών video. Συνολικά, αυτές οι αλλαγές μαζί με τα Xfree4.x και άλλα συμβατά +προγράμματα θα επιτρέψουν στο Linux να είναι πιο σταθερό και ασφαλές όταν διενεργεί δουλειά εντατικών γραφικών, όπως και την καλύτερη υποστήριξη καρτών +τηλεόρασης. + +### [1.12 Προσιτότητα - accessibility]{#ss1.12} + +Όταν σκεφτόμαστε το Linux οι λέξεις \"user friendly\" γενικά δεν έρχονται αμέσως στο μυαλό. Έτσι, κάποιος μπορεί να εκπλαγεί μαθαίνοντας ότι το Linux 2.4 +υποστηρίζει κάρτες σύνθεσης ομιλίας. Αυτός ο οδηγός και το ανάλογο υλικό θα επιτρέψει σε χρήστες με μειωμένη ικανότητα όρασης να ακούνε όλα τα μηνύματα του +Linux , ακόμη και αυτά πολύ νωρίς στη διαδικασία εκκίνησης. Πολύ λίγα συστήματα μπορούν να περηφανευθούν για τέτοια υποστήριξη σε τόσο βσαικό επίπεδο (θα +υπάρξουν και άλλα προγράμματα και patches για τη πλήρη χρησιμοποίηση αυτών των συσκευών, μια που ο οδηγός του πυρήνα είναι μόνο ένα κομμάτι του συστήματος.) + +### [1.13 Δικτύωση και πρωτόκολλα]{#ss1.13} + +Η δικτύωση και το υλικό δικτύου είναι ένας από τους τομείς που το Linux πάντοτε τα πήγαινε περίφημα. Αυτές οι συσκευές δεν είναι ούτε \"character\" ούτε +\"block\" αλλά καταλαμβάνουν έναν ειδικό χώρο που δεν χρειάζεται κόμβους (nodes)συσκευών. Το Linux 2.4 θα περιλαμβάνει πολλές βελτιώσεις σε αυτόν τον τομέα, +όπως νέους οδηγούς, διορθώσεις και νέα λειτουργικότητα στους υπάρχοντες οδηγούς. + +Το μοντέλο Linux για sockects δικτύου είναι ένα στανταρντ στις περισσότερες παραλλαγές Unix. Δυστυχώς όμως, έχει κάποια διορθώσιμα ελλατώματα. Στο Linux 2.2 και +πριν, αν έχετε έναν αριθμό διεργασιών που περιμένουν για ένα γεγονός από το δίκτυο (web server, για παράδειγμα) θα \`\`ξυπνήσουν\'\' όλες όταν ανιχνευθεί +δραστηριότητα. Έτσι, για κάθε αίτηση για σελίδα web το Linux θα \`\`ξύπναγε\'\' έναν αριθμό διεργασιών για την ίδια αίτηση. Μια που δεν έχει νόημα πολλαπλές +διεργασίες να εξυπηρετούν την ίδια αίτηση, μόνο μία θα φτάσει στα δεδομένα, ενώ οι υπόλοιπες δεν θα βρουν τίποτα να επεξεργαστούν και θα ξανακοιμηθούν. Το Linux +είναι αρκετά αποτελεσματικό και γρήγορο σε αυτό, αλλά θα μπορούσε να γίνει καλύτερο αν δεν γινόντουσαν τα μή απαραίτητα \`\`ξυπνήματα\'\'. Το Linux 2.4 +περιλαμβάνει αλλαγές που επιτρέπουν ακριβώς αυτό, δηλαδή μέσω του χαρακτηριστικού \`\`wake one\'\' να ξυπνάει μόνο μία διεργασία στην περίπτωση δραστηριότητας. +Αυτό θα επιτρέψει σε εφαρμογές όπως ο Apache να είναι ακόμη πιο αποδοτικές και να γίνει το Linux ακόμα καλύτερη επιλογή ώς web server. + +To Linux 2.4 ακόμη περιλαμβάνει ένα τελείως ξαναγραμμένο layer δικτύωσης. Έχει γίνει όσο πιο μή-σειριακό γίνεται για να προσαρμόζεται (scale) το δυνατόν +καλύτερα από οποιαδήποτε προηγούμενη έκδοση. Επιπροσθέτωςμ ολόκληρο το υποσύστημα έχει ξανασχεδιασθεί για να είναι όσο πιο σταθερό γίνεται σε συστήματα +πολλαπλών επεξεργαστών. Ακόμα, περιλαμβάνει πολλές βελτιώσεις που του επιτρέπουν να λειτουργεί με δικτυακές ιδιομορφίες πολλών λειτουργικών, όπως τα Windows. Θα +πρέπει επίσης να υπενθυμισθεί εδώ ότι το Linux είναι ακόμα το μόνο λειτουργικό πλήρως συμβατό με το γράμμα των προδαγραφών ΙPv4 και το Linux 2.4 έχει να +επιδείξει μία εφαρμογή αυτού πολύ πιο προσαρμόσιμή από αυτή του προκατόχου του. + +Ώς μέρος αυτού του ξαναγραψίματος, η λειτουργικότητα του πυρήνα σε ό,τι αφορά σε **firewall** και **IP masquerading** έχει ξαναγραφτεί, όπως και στον 2.2. Το +νέο υποσύστημα έχει χωριστεί σε δύο μέρη: ένα στρώμα φιλτραρίσματος πακέτων και ένα στρώμα μετάφρασης δικτυακών διευθύνσεων (**network address translation - +NAT**). Αυτά τα νέα υποσυστήματα είναι σημαντικά πιο γενικά από τους προκατόχους τους, και τώρα είναι δυνατό να γίνεται και η πιο απαιτητική εργασία routing +μέσω Linux. Προηγουμένως, αυτή η λειτουργικότητα ήταν διαθέσιμη με ειδικό υλικό. Δυστυχώς αυτό το ξαναγράψιμο περιλαμβάνει ένα νέο εργαλείο userspace για τη +διαχείριση της υπάρχουσας λειτουργικότητας. Για συμβατότητα, υπάρχουν αρθρώματα που επιτρέπουν τη χρήση των εργαλείων είτε του **Linux 2.0 (ipfwadm)** είτε του +Linux 2.2 (ipchains). Αυτό θα κάνει την αναβάθμιση πιο εύκολη. + +Για τους χρήστες σε επιχειρήσεις, υπάρχει ένας αριθμός χαρακτηριστικών που θα επιτρέψουν στο Linux την καλύτερη ενσωμάτωση σε παλαιότερα και νεότερα στοιχεία +υπαρχουσών δομών δικτύων. Μία σημαντική πρόσθεση εδώ είναι η νέα υποστήριξη για τα πρωτόκολλα και το υλικό **DECnet** και **ARCnet**. Αυτό επθιτρέπει την +καλύτερη συνεργασίαμε εξειδικευμένα συστήματα, περιλαμβανομένων παλαιότερων συστημάτων **Digital/Compaq**. Επίσης ιδιαίτερα ενδιαφέρουσα θα είναι η υποστήριξη +για **ATM network adapters** για δικτύωση υψηλών ταχυτήτων. + +Για το μέσο χρήστη, το ΡΡΡ είναι σημαντικό μέρος της καθημερινής χρήσης. Το Linux 2.4 περιλαμβάνει μεγάλες βελτιώσεις και αρθρωματοποίηση μεγάλου ποσοστού του +κώδικα, περιλαμβάνοντας ένα από καιρό αναμενόμενο συνδιασμό των στρωμάτων ΡΡΡ από το στρώμα ISDN kai PPP, όπως για τηλεφωνικές συνδέσεις με μόντεμ. Ακόμα, το +ΙSDN έχει ανανεωθεί για να υποστηρίξει πολλές νέες κάρτες. Το **PLIP (ΡΡΡ σε παράλληλες θύρες)** έχει επίσης βελτιωθεί και χρησιμοποιεί το νέο **abstraction +layer** της παράλληλης θύρας. Και τέλος, έχει προστεθεί υποστήριξη για **PPP μέσω Ethernet (PPPoE)** που χρησιμοποιείται από κάποιους παροχείς DSL. + +### [1.14 Binary Types]{#ss1.14} + +Ενα συνήθως παραμελημένο μέρος του πυρήνα είναι ο loader του προγράμματος: το κομμάτι που παίρνει τα προγράμματα, τα φορτώνει σωστά και τα τρέχει. Πολλοί δεν +γνωρίζουν ότι στο Linux 2.2 προστέθηκε υποστήριξη για ένα δυαδικό φορτωτή \"διαφόρων\", ένα εύκαμπτο άρθρωμα σχεδιασμένο να επιτρέπει στο χρήστη να συσχετίζει +τύπους δυαδικών αρχείων (βασιζόμενο στην κατάληξη ή σε πληροφορίες του header) με εφαρμογές \"helper\" περίπου όπως τα Windows. Αυτό θα μπορούσε να συσχετίσει, +για παράδειγμα, όλες τις εφαρμογές Windows με τον WINE έτσι ώστε όταν γράψετε \"./notepad.exe\" να συμβεί το σωστό πράγμα. Αυτό θεωρήθηκε μεγάλη νίκη από +πολλούς γιατί επιτρέπει σε πολλές ομάδες, όπως την ομάδα του **Wine (Windows non-Emulator)** και **Dosemu** να δημοσιεύσουν πληροφορίες για να τρέχουν τα +προγράμματά τους \'native\' από τον πυρήνα. + +Το Linux 2.2 και 2.0 περιλάμβαναν ενσωματωμένη υποστήριξη για την εκκίνηση ενός Java interpreter όταν εκτελούταν μία εφαρμογή Java (και ήταν από τα πρώτα +λειτουργικά που το έκαναν αυτό σε επίπεδο πυρήνα). Το Linux 2.4 ακόμα περιλαμβάνει αυτή την υποστήριξη, αλλά ο ειδικός οδηγός έχει αφαιρεθεί και οι χρήστες θα +πρέπει να ανανεώσουν τα συστήματά τους για να χρησιμοποιήσουν τον οδηγό \"Misc.\". + +### [1.15 O Kernel Web Daemon]{#ss1.15} + +Ένα από τα πιο χτυπητά χαρακτηριστικά στον πυρήνα 2.4 είναι ο the kernel web daemon, ή khttpd. Είναι αλήθεια, το Linux πραγματικά υποστηρίζει ένα άρθρωμα πυρήνα +που μπορεί να επεξεργαστεί αιτήσεις HTTP χωρίς να χρειαστεί να επικοινωνήσει με κανέναν user space server (όπως ο Αpache). Αυτό το χαακτηριστικό συχνά +παρερμηνεύεται - δεν έχει σχεδιαστεί για να αντικαταστήσει τον Apache ή οποιονδήποτε άλλο εξυπηρέτη και μπορεί να χρησιμοποιηθεί μόνο για raw αρχεία (όχι CGI). +Αν λάβει μία αίτηση για κάτι που δεν μπορεί να χειρισθεί, θα την περάσει στον εξυπηρέτη χωρίς αυτός να καταλάβει τη διαφορά. Αυτό το χαρακτηριστικό θα κάνει το +Linux μία ακόμη καλύτερη επιλογή για γρήγορη εξυπηρέτηση web στατικού περιεχομένου όπως οι **dedicated image servers**. + +### [1.16 Κρυπτογραφία στον Πυρήνα]{#ss1.16} + +Αν και οι νόμοι εξαγωγής στην Αμερική έχουν αλλάξει από τον 2.2, το Linux 2.4 μάλλον δεν θα περιλαμβάνει υποστήριξη για κρυπρογράφηση στην κύρια διανομή. Οι +περιορισμοί στην εισαγωγή/εξαγωγή κρυπρογραφίας είναι διαφορετικοί σε όλο τον κόσμο. Ήδη όμως, είναι διαθέσιμα patches για την κρυπτογράφηση σε πολλά +υποσυστήματα του πυρήνα. Μένει να ειδωθεί πόσο επίσημα θα είναι αυτά στο μέλλον. + diff --git a/content/articles/26/05_lfs.md b/content/articles/26/05_lfs.md new file mode 100644 index 0000000..a65b41c --- /dev/null +++ b/content/articles/26/05_lfs.md @@ -0,0 +1,194 @@ ++++ +title = 'To \...δικό μας Linux. Γιατί και πως' +date = '2000-10-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 26'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αναρωτηθήκατε ποτέ πόσα \"άχρηστα\" προγράμματα βρίσκονται στον υπολογιστή σας; Εκνευριστήκατε ποτέ για τα αυτόματα scripts που τρέχουν χωρίς να τα βάλατε +εσείς; Εγώ ναι. Και αποφάσισα να το ξεπεράσω με τον πιο δραστικό (!!!) τρόπο. Φτιάχνοντας το δικό μου Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κάθε φορά που στήνω ένα νέο μηχάνημα έχω το ίδιο πρόβλημα. Ποιο distribution να βάλω που: + +- Να μην θέλει πάνω από μισή ώρα για την εγκατάσταση +- Να μην μου γεμίσει το δίσκο με άχρηστα προγράμματα +- Να μην μου εγκαταστήσει τα προγράμματα που ούτως ή άλλως θα ξαναβάλω εγώ για να τα ρυθμίσω στα paths που θέλω, και ίσως και με κάποιες έξτρα παραμέτρους + (πειραγμένα). +- Να ακολουθεί ένα όσο το δυνατόν πιο ορθολογικό και standard τρόπο ρύθμισης αρχείων του συστήματος, τα οποία θέλω να βρίσκονται\... εκεί που θα τα βρω (ίσως + εκεί που πρέπει να είναι καλύτερη έκφραση αλλά δεν ξέρω αν ισχύει :-) +- Να μην περιμένει να κάνω όλες τις δουλειές μου στο σύστημα με το δικό του super-extra-duper πρόγραμμα διαχείρησης / εγκατάστασης πακέτων. +- Να μην περιμένει να κάνω όλες τις ρυθμίσεις στο σύστημα από το δικό του super-extra-duper πρόγραμμα ρυθμίσεων που τροποποιεί το ειδικό αρχείο τρέχα-γύρευε + το οποίο με τη σειρά του ρυθμίζει τα πάντα. + +Ζόρικα τα πράγματα. Ειδικά το πρώτο είναι σχεδόν αδύνατο (σε συνδυασμό βέβαια με τα υπόλοιπα). Για να δούμε κάποιες προτάσεις για το πως θα προσεγγίσουμε όσο το +δυνατόν περισσότερα από τα παραπάνω. + +**1. Εναλλακτικές προτάσεις** +--------------------------------------------------- + +**2. Τι είναι το Linux (πάααααλι;)** +---------------------------------------------------------- + +**3. Τι ακριβώς θα κάνουμε είπαμε;** +---------------------------------------------------------- + +**4. Βήμα 1ο: Προετοιμασία του συστήματος.** +------------------------------------------------------------------ + +**5. Βήμα 2ο: Δημιουργώντας το βασικό μας σύστημα** +------------------------------------------------------------------------- + +**6. Βήμα 3ο: Διορθώνοντας τον Gerard** +------------------------------------------------------------- + +**7. Επίλογος** +------------------------------------- + + +### [1. Εναλλακτικές προτάσεις]{#s1} + +Οι λύσεις που ξέρω (και μπορεί να υπάρχουν κι άλλες που να μην τις ξέρω) είναι οι εξής: + +**Πρώτη λύση**\ +Χρησιμοποιούμε ένα RPM-based distribution (Caldera, Mandrake, TurboLinux, RedHat, SuSE ίσως και άλλα), κάνουμε την ελάχιστη δυνατή εγκατάσταση σε όσα από αυτά +γίνεται.\ +Εγκαθιστούμε τα προγράμματα που ενημερώνουν την rpm database για όσα προγράμματα βάζουμε με το χέρι, κατεβάζουμε και κάνουμε compile όσα προγράμματα θέλουμε να +βάλουμε εμείς μετά, κάνοντας ταυτόχρονα και ένα upgrade στα προγράμματα που έχουμε ήδη εγκαταστήσει (και δεν γινόταν αλλιώς) και θέλουμε νεώτερες εκδόσεις.\ +Ελέγχουμε **όλα** τα αρχεία στο /etc directory για να τα προσαρμόσουμε στις ανάγκες μας (και όχι αυτές που νομίζει ο εγκαταστάτης ότι είναι οι ανάγκες μας).\ +Διαμορφώνουμε **σωστά** αυτή τη φορά τα runlevels τα οποία αν δεν μπορούν να ακολουθήσουν το Linuxbase, τουλάχιστον ας μοιάζουν με κάποιο από τα άλλα Unices που +δουλεύουμε. + +**Δεύτερη λύση**\ +Χρησιμοποιούμε το Slackware ή κάποιο άλλο tgz - based distribution (υπάρχει;) και ακολουθούμε την ίδια διαδικασία, απλά \"πηδώντας\" τα κομμάτια για το RPM που +είπαμε παραπάνω.\ +Ή εναλλακτικά χρησιμοποιούμε κάποιο debian-based distribution (Corel, Debian, Storm κλπ) για τα οποία δεν ξέρω, αλλά φαντάζομαι ότι υπάρχει ένας τρόπος να +\"παρακάμψεις\" τον package manager και να ακολουθήσεις όλα τα βήματα που είπαμε παραπάνω για τις rpm-based distributions. + +**Τρίτη λύση**\ +Κατεβάζουμε ένα minimum distribution (Leetnux, Laonux, RockLinux, Trinux κλπ) ελπίζοντας ότι ο εγκαταστάτης έκανε καλή δουλειά και θα μας γλιτώσει από κάποιο +κόπο. Με βάση αυτό το distribution χτίζουμε το σύστημά μας, βγάζοντας και βάζοντας πακέτα, αλλάζοντας και τροποποιώντας scripts κ.ο.κ. + +**Τέταρτη λύση**\ +Πηγαίνουμε στο [Linux From the Scratch](http://www.linuxfromscratch.org), κατεβάζουμε τις οδηγίες, 70 Mb σε προγράμματα, οπλιζόμαστε με υπομονή και αρχίζουμε να +χτίζουμε το δικό μας Linux. + +Όπως προείπα, όλες οι παραπάνω λύσεις θέλουν όχι λιγότερο από μισή ώρα που είπα στην αρχή, αλλά πολύ περισσότερο. Ίσως και να μιλάμε για καμιά-δυο μέρες ίσως +και πολύ περισσότερο (όπου μέρα == το τρίωρο που μας μένει ελεύθερο να ασχοληθούμε με το PC μας). Αλλά υπάρχουν κάποια κόλπα στην όλη υπόθεση\... Και θα δείτε +στη συνέχεια ότι το πράγμα γίνεται πολύ όμορφο. + + +### [2. Τι είναι το Linux (πάααααλι;)]{#s2} + +Όχι, δεν θα πω πάλι τα βαρετά και ίδια πράγματα, απλά κάποιες ελάχιστες λεπτομέρειες.\ +Πολλές φορές έχετε ακούσει ότι Linux τεχνικά είναι μόνο ο πυρήνας, και ότι όλα τα άλλα είναι GNU και OpenSource προγράμματα. Αυτό δεν είναι απόλυτα ακριβές +βέβαια. Linux, δεν είναι μόνο ο πυρήνας αλλά και πραγματάκια άλλα που καθορίζουν consortiums κλπ όπως το FHS (Filesystem Hierarchy Standard) το τι είναι τα +Runlevels σε ένα σύστημα που θέλει να λέγεται Linux, και διάφορα άλλα τέτοια.\ +Όχι, δεν θέλω να πω ότι τα XFree86 είναι Linux, ούτε ότι το gcc είναι Linux, αλλά το ότι το runlevel 1 σημαίνει single user και το runlevel 6 σημαίνει reboot +κάποιος τα έχει πει, και αυτός ο κάποιος λέγεται Linuxbase. Και αν κάποιος θέλει να κάνει ένα distribution το οποίο θα λέγεται Linux, ε, καλά θα κάνει να τα +σεβαστεί αυτά. Όπως επίσης καλά θα κάνει να σεβαστεί και το ποια αρχεία θα βρίσκονται που (και όχι να πετάμε τα init scripts όπου και όπως μας βολεύει).\ +Αν βέβαια έχουμε συνηθίσει κάποιο distribution και τις (τυχόν) παραξενιές του κανείς δεν μας απαγορεύει, στο δικό μας Linux, να ακολουθήσουμε τα γνωστά σε μας +από αυτό. Εγώ όμως, στην συγκεκριμένη περίπτωση, αποφάσισα να κάνω αυτό που θεωρώ σωστό. Όλα (ή μάλλον όσα μπορώ), να είναι by the book. Τα αρχεία θα βρίσκονται +εκεί που πρέπει, και τα runlevels θα είναι αυτά που πρέπει. Το μηχάνημα θα ανεβάζει μόνο τα services που πρέπει και θα έχει εγκατεστημένα μόνο τα πακέτα που +πρέπει\... + +Ας ξεκαθαρίσω από την αρχή τα δεδομένα: Καμμία ευθύνη δεν φέρω σε περίπτωση που κάποιος καταστρέψει το σύστημά του διαβάζοντας αυτό το άρθρο. Σε καμία περίπτωση +δεν θα πρότεινα στους απλούς χρήστες μία τέτοια διαδικασία (κάτι ξέρουν που υπάρχουν οι Suse, Debian, κλπ κλπ κλπ). Τα όσα θα ακολουθήσουν είναι για ανθρώπους +αρκετά έμπειρους να κάνουν ένα custom compile κάνοντας override κάποια system-wide defaults και που ξέρουν κάποια πράγματα από την έννοια του multiuser +λειτουργικού συστήματος. Τα ίδια (περίπου) θα διαβάσετε και στις οδηγίες του Linux from the scratch. Πιστέψτε μας. Αν δεν ξέρετε που μπλέκετε, ΜΗΝ το κάνετε. + + +### [3. Τι ακριβώς θα κάνουμε είπαμε;]{#s3} + +Η όλη ιδέα είναι να \"χτίσουμε\" ένα Linux σύστημα από την αρχή. Αφού ούτως ή άλλως, αν ξεκινήσουμε να χτίζουμε από κάποιο distribution θα φάμε και κανένα 4ωρο +να φέρουμε το σύστημα στα μέτρα μας, ας φάμε κανένα 10ωρο μιας εξαρχής να το απολαύσουμε κιόλας. + +Το να χτίσουμε ένα Linux σύστημα βέβαια σημαίνει ότι δεν υπάρχει τίποτα. Ούτε πυρήνας, ούτε libc, ούτε compiler, ούτε boot manager, ούτε shell\... τίποτα. Το +λέω και το ξαναλέω για να μην ξεκινήσετε κάτι που δεν πρόκειται να τελειώσετε ποτέ και να χάσετε τόσο χρόνο. Όταν αυτή η διαδικασία τελειώσει, δεν θα δουλεύει +τίποτα. Ούτε services θα σηκώνονται, ούτε init scripts θα υπάρχουν, ούτε το bash θα είναι ρυθμισμένο (εκείνα τα χρωματάκια στο ls και εκείνα τα παράξενα aliases +του τύπου \"rm=\'rm -i\'\" ξεχάστε τα). Αλλά θα είναι το δικό σας linux σύστημα, και θα μάθετε τόσα πολλά για το linux (και πολλά άλλα προγράμματα) κάνοντας +αυτή τη διαδικασία που δεν θα τα μάθετε σχεδόν με κανέναν άλλο τρόπο. + +Θα ακολουθήσουμε τη διαδικασία που περιγράφει στο πολύ καλό βιβλίο του ο Gerard Beekmans και το έχει για όλους εμάς τους υπόλοιπους στο [site +του](http://www.linuxfromscratch.org). Σε μερικά σημεία, η δικιά μου διαδικασία διαφοροποιήθηκε λίγο. Θα δείτε γιατί και είστε ελεύθεροι ή να την ακολουθήσετε, +ή όχι. + +Εγώ ας πούμε έχω τελικά κρατήσει τρία snapshots του συστήματος, για να μπορώ ανά πάσα στιγμή να ξεκινήσω ξανά την διαδικασία από όπου θέλω (πρέπει) ούτως ώστε +να ξαναφτιάξω ακριβώς το ίδιο σύστημα. + +Ας ξεκινήσουμε. + + +### [4. Βήμα 1ο: Προετοιμασία του συστήματος.]{#s4} + +Η διαδικασία του Gerard Beekmans είναι απλή (στη σύλληψη) αλλά και ταυτόχρονα δύσκολη (στην εφαρμογή). Ο Gerard μας έκανε τη χάρη να μας το κάνει λίγο πολύ +τυφλοσούρτη. Να πως έχει:\ +Πρέπει στο μηχάνημα που θα χτίσουμε το Linux, να υπάρχει ήδη ένα Linux προεγκατεστημένο (θυμάστε; χρειαζόμαστε έναν compiler). Αφού φτιάξουμε λοιπόν ένα +partition (το οποίο τελικά θα είναι το root partition του τελικού μας συστήματος) ξεκινάμε να κάνουμε compile εκεί μέσα κάποια προγράμματα. Όλα statically +linked (γιατί κάποια στιγμή θα αποκοπούν από το παλιό σύστημα) εκτός από ένα. Ναι σωστά μαντέψατε, τη glibc.\ +Εγώ προετοίμαζα (αρχικά) το linux μου για ένα μηχανάκι K6-200. Επειδή φαντάστηκα (και δεν είχα άδικο :-) ότι η διαδικασία σε αυτό το μηχάνημα θα ήταν αρκετά +αργή, αποφάσισα να την κάνω σε ένα άλλο μηχάνημα που έχω, έναν Athlon-500.\ +Δημιουργούμε ένα ψευτο-σύστημα στο οποίο δεν μπορούμε να κάνουμε boot (γιατί θα λείπουν κάποια βασικά πράγματα όπως η εντολή mount και το lilo) μπορούμε όμως να +κάνουμε chroot σε αυτό και να δουλέψουμε σαν να είναι πραγματικό σύστημα. Εδώ, σε περίπτωση που κάνετε κάτι παρόμοιο με μένα, θα πρέπει να προσέξετε το εξής: Αν +και ο Gerard δεν το αναφέρει πουθενά, καλό είναι να χρησιμοποιηθούν compiler directives για compilation το οποίο να μπορεί να μεταφερθεί σε χαμηλότερο σύστημα. +Αν άφηνα το compile να ακολουθήσει την πορεία του, θα έπαιρνα ένα σύστημα optimized για i686, το οποίο βέβαια σε έναν K6 θα \"έσκαγε\" με invalid instruction. +Χρησιμοποίησα λοιπόν την παράμετρο -mcpu=i486 στον gcc και έδωσα και την παράμετρο \--host=i486-pc-linux στο configure οποιουδήποτε προγράμματος εγκαθιστούσα +(όχι ότι έχει σημασία σε αυτό το στάδιο, μια που όλα θα αντικατασταθούν εκτός από την glibc. Για αυτήν **πρέπει υποχρεωτικά** να χρησιμοποιηθεί η παράμετρος +αυτή).\ +Το αποτέλεσμα (ναι, ακολουθήστε τα βήματα του Gerard, τα λέει πολύ αναλυτικά, δεν θα ξαναμπω στην ίδια διαδικασία) είναι ένα mini-σύστημα το οποίο μπορεί να +κάνει μόνο compile. Και μπορεί να τρέξει σε οποιοδήποτε μηχάνημα κλάσης 486 και πάνω (άρα και στον ταπεινό μου Κ6). Άφησα κάποια πακέτα του Gerard έξω από την +διαδικασία (όπως ας πούμε το bzip2) αν και αυτό δεν είναι απαραίτητο. Θα έλεγα μάλλον ότι είναι μη-προτεινόμενο :-)\ +Στο σημείο αυτό, παίρνω ένα backup του συστήματος. Τι είναι; ένα 200 Mb (περίπου) tar file το οποίο άν συμπιεστεί (bzip2) πέφτει στα 40 Mb. Ας το κρατήσουμε σε +μία άκρη λοιπόν. Αν αύριο θελήσουμε να φτιάξουμε ένα σύστημα optimized για 686 μπορούμε να ξεκινήσουμε από αυτό, και συγκεκριμένα από το σημείο που εγκαθίσταται +η glibc και κάτω. Αν και, να παρατηρήσουμε, ότι το README της glibc λέει ότι κανένα optimization δεν θα κάνει διαφορά στην απόδοση, άρα μπορούμε να +αποσυμπιέσουμε απλά αυτό το tar και να συνεχίσουμε από το επόμενο στάδιο, χωρίς να χάσουμε τίποτα. + +Μόλις έχουμε γλιτώσει 2 με 3 ώρες από την επόμενη εγκατάστασή μας (ανάλογα με το μηχάνημα στο οποίο κάνουμε το compile). Επειδή λοιπόν κρατάω αυτό το αρχείο ως +\"βάση\", κάνω στον εαυτό μου μία χάρη και κάνω strip όλα τα debugging symbols από τα static binaries (τα οποία ούτως ή άλλως θα αντικατασταθούν) για να μικρύνω +ακόμα περισσότερο το αρχείο που θα κρατήσω. Επίσης, κάνω compile με -O3 (εκτός από την glibc που την προτιμώ unoptimised εφόσον την κάνω compile σε άλλη CPU). + + +### [5. Βήμα 2ο: Δημιουργώντας το βασικό μας σύστημα]{#s5} + +Ακολουθώντας για άλλη μία φορά τις οδηγίες του Gerard, αρχίζουμε να χτίζουμε το σύστημά μας. Όλα τα πακέτα εκτός από την glibc θα αντικατασταθούν όπως είπαμε +από άλλα, dynamically linked αυτή τη φορά. Εδώ έχουν μεγάλη σημασία και τα optimizations του compiler όπως λέει και ο Gerard, αλλά και το directive +\--host=\.... στην περίπτωση που κάνουμε το compile σε άλλο μηχάνημα από το τελικό. Εγώ για να γλιτώσω χρόνο (πάλι) συνέχισα και αυτό το στάδιο στον Αthlon, +αλλά έδωσα παραμέτρους για τον k6 μου και με υψηλό optimization, χωρίς debugging information (μια που δεν υπάρχει περίπτωση να κάτσω να κάνω debugging). Δηλαδή +-mcpu=k6 -march-k6 -O3 όπως προτείνει και ο Gerard (προσοχή, είναι το ίδιο που κάναμε και στο 1ο βήμα, αλλά για άλλο λόγο). Από τις παραμέτρους -mcpu και -march +η μία από τις δύο είναι άχρηστη, αλλά επειδή δεν ξέρουμε ποιο πρόγραμμα θα σεβαστεί ποια παράμετρο, τις βάζουμε και τις δύο να είμαστε σίγουροι. Βέβαια το +\--host μου στο configure ήταν i586-pc-linux (ναι, ο k6 είναι σαν 586). + +Στο συγκεκριμένο σημείο ξαναπαίρνω ένα backup του συστήματος. Το σύστημα αυτή τη στιγμή είναι έτοιμο να κάνει boot και μπορεί να ξεκινήσει τον k6 μου κανονικά. +τώρα το σύστημα είναι 200 Mb σε tar (και 55 Mb συμπιεσμένα με bzip2) και ανά πάσα στιγμή θέλω, το \"πετάω\" σε έναν δίσκο, κάνω ένα chroot σε αυτό το δίσκο, +τρέχω το lilo και είμαι έτοιμος. Γιατί έκανα αυτά τα δύο backup; Γιατί το μεν πρώτο θα το χρησιμοποιήσω για να \"χτίσω\" οποιοδήποτε άλλο μηχάνημα (όπου να\'ναι +ξεκινάω και τον Athlon) ενώ το δεύτερο είναι ένα αρχικό working snapshot του K6. + + +### [6. Βήμα 3ο: Διορθώνοντας τον Gerard]{#s6} + +Όπως προείπα, εγώ σε κάποια σημεία διαφοροποιήθηκα από τον Gerard είτε κατ\' επιλογή, είτε από ανάγκη.\ +Κατ\' επιλογή λοιπόν κατέβασα από το όλες τις νεώτερες ελληνικές μεταφράσεις και αντικατέστησα αυτές που είχαν +μέσα τα πακέτα (όχι όλα τα πακέτα, αλλά αρκετά).\ +Κατ\' επιλογή πρόσθεσα και τις συμβουλές του Σίμου Ξενιτέλλη από την Linux-greek-users για ελληνικά στην κονσόλα.\ +Κατ\' επιλογή αποφάσισα αντί να εγκαταστήσω το netkit-base που προτείνει ο Gerard να εγκαταστήσω κομμάτια του netkit-combo (ένα υπερσύνολο των διαφόρων netkit +utilities) μια που ούτως ή άλλως θα τα εγκαταστούσα.\ +Κατ\' επιλογή αποφάσισα να εγκαταστήσω τα νεώτερα shadow tools από εκείνα που προτείνει ο Gerard και κατ\' ανάγκη άλλαξα το format του αρχείου /etc/consoles που +περιμένουν τα shadow tools να βρουν (έχω την εντύπωση ότι έχουν αλλάξει format μεταξύ των δύο εκδόσεων της shadow αλλά δεν το έχω ψάξει πολύ για να το πω με +σιγουριά). Έπρεπε πάντως αντί για το device name που έγραφα μέχρι τώρα να γράψω το full path για το device file (αντί για tty1 δηλαδή, /dev/tty1). Κατ\' επιλογή +αποφάσισα να \"πειράξω\" το αρχείο src/feature.h για το vim ούτως ώστε να ενεργοποιήσω την επιλογή για το langmap (χωρίς όλες τις άλλες που έρχονται μαζί της). +Κατ\' ανάγκη άλλαξα την εντολή του για το defkeymap και αποσυμπίεσα το συγκεκριμένο αρχείο, γιατί μόνο έτσι το δεχόταν.\ +Κατ\' ανάγκη έκανα αυτό που δεν ανέφερε ο Gerard, να εκτελέσω δηλαδή την εντολή mkswap στο swap partition που είχα στο δίσκο μου, μια που αυτό το βήμα είναι + +### [7. Επίλογος]{#s7} + +Τι κατάφερα; Έχω ένα μηχάνημα το οποίο κάνει boot και έχει δίκτυο, telnet, ftp, compiler (και όλα τα απαιτούμενα tools για compile) και τα sources του πυρήνα. +Το σύστημα τρέχει σε οποιοδήποτε μηχάνημα από 486 και πάνω και μπορεί να χρησιμοποιηθεί σαν βάση για ένα νέο σύστημα από το μηδέν.\ +Είπα προηγουμένως ότι πήρα τρία backup. Στο τρίτο backup δεν φτάσαμε ακόμα (το τρίτο backup έγινε στο live σύστημα με όλα τα προγράμματα επάνω χωρίς δεδομένα). +Στο τρίτο backup θα φτάσουμε στο επόμενο τεύχος, όταν θα αναλυσουμε όλες τις δικτυακές ρυθμίσεις που κάνουμε, και τα νέα αρχεία ρυθμίσεων που δημιουργούμε για +να φτάσουμε να έχουμε ένα μηχάνημα που θα έχει την ίδια λειτουργικότητα με οποιοδήποτε distribution, προσαρμοσμένη όμως στις ανάγκες μας και τις απαιτήσεις μας. + diff --git a/content/articles/27/01_editorial.md b/content/articles/27/01_editorial.md new file mode 100644 index 0000000..599806e --- /dev/null +++ b/content/articles/27/01_editorial.md @@ -0,0 +1,52 @@ ++++ +title = 'Editorial' +date = '2000-10-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης(mailto:papas@hellug.gr)' +issue = ['Magaz 27'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ορίσατε στο **Magaz**\... Επίσιμη ονομασία τεύχους, \`\`Η επιστροφή των απολωλότων\'\'* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Καλωσήρθατε στο **magaz** Οκτωβρίου του 2000. Λοιπόν, οι περισσότεροι θα αναρωτιέστε γιατί αυτός ο τίτλος! Επίσημα λοιπόν, αυτό πρέπει να είναι το πιο +καθυστερημένο magaz στην ιστορία, μια και με την πάρτη μου ισχύει αυτό που λένε τα στρατευμένα νιάτα\... **ΕΧΩ ΠΗΞΕΙ!**. Μια όμως και τα προσωπικά μου, προφανώς +και δικαιολογημένα, δε σας ενδιαφέρουν, ας προχωρήσουμε στην ύλη του μήνα αυτού. + +Αρχίζοντας αυτόν το μήνα, ας διορθώσουμε τα \`\`κακώς κείμενα\'\' του προηγούμενου τεύχους. Στο προηγούμενο τεύχος λοιπόν, φιλοξενήθηκε ένα άρθρο από τον [Θέμη +Παπασσιλέκα](mailto:panzer@finecon.gr) με τίτλο [Ο υπέροχος κόσμος του Linux 2.4](../26/04_kernel24.html). Για αυτό το άρθρο από δική μου παράλειψη, δεν +αναφέρθηκε ο πραγματικός αρθρογράφος. Αυτό συνέβη διότι.. δεν τον ήξερα και απλά \`\`έβαλα\'\' το άρθρο. + +Όπως καταλαβαίνετε, η ευθύνη βαραίνει εμένα και μόνο αποκλειστικά. + +Μετά από την (πολύ σωστή) επισήμανση του (ουσιαστικά) μεταφραστή ( [Θέμη Παπασσιλέκα](mailto:panzer@finecon.gr)) λοιπόν, να πούμε σε αυτό το τεύχος (κάλιο αργά +παρά ποτέ) ότι το άρ8ρο γράφτηκε από τον [Joe Pranevich](mailto:jpranevich@linuxtoday.com) για το γνωστό [LinuxToday](http://linuxtoday.com) και την τελευταία +του έκδοση, μπορείτε να βρείτε [εδώ](http://linuxtoday.com/news_story.php3?ltsn=2000-07-17-014-04-NW-LF-KN). Την ειλικρινή μου συγνώμη για την παράλειψη. + +Καλωσορίζουμε ξανά ένα άρθρο από τον [Παπακώστα Ευρυπίδη](mailto:evris@hellug.gr), συνέχεια του άρθρου του [περί καλής συμπεριφοράς των +linuxάδων](../24/05_odigos.html) που δημοσιεύτηκε στο [τεύχος 24](../24/index.html). Ένας αρθρογράφος, που μετά από πολύ-πολύ καιρό απραξίας (όσον αφορά στο +magaz) επιστρέφει πολλά υποσχόμενος και\... γεμάτος άρθρα. Τώρα θα μου πείτε\...\`\`Κοίτα ποιός μιλάει για απραξία\...\'\'. Και το κακό είναι ότι θα έχετε +δίκιο! Τέλος πάντων, το άρθρο του μπορείτε να το βρείτε [εδώ](03_odigos.html) + +Και για να κάνουμε το συγκεκριμένο αυτό τεύχος πιο \`\`οικογενειακό\'\', ε, φιλοξενούμε και ένα άρθρο από την [Βούλα Σανιδά](mailto:voulariba@hellug.gr). Οι +παλιοί θα το υμνήσουν, οι νέοι θα το μισήσουν\... **μόνο στην αρχή**. Πρόκειται για ένα άρθρο για τον πιο **διαδεδομένο**, πιο **στυλάτο** editor, που +ταυτόχρονα έχει και το πιο φανατικό κοινό! Δεν πρόκειται για άλλον από τον vi. [Δείτε το οπωσδήποτε!](02_vitips.html) + +Όλοι, όταν πρωτοασχοληθήκαμε με το **linux**, είχαμε την απορία τι στο καλό είναι αυτό το **/proc** directory που υπάρχει στο δίσκο μας. Άσε που εκεί μέσα +υπάρχει και το **μ-ε-γ-α-λ-ύ-τ-ε-ρ-ο** αρχείο του filesystem (What could that file be? Can I delete it?)! Αν και (μερικοί) λύσαμε τελικά αυτήν την απορία, +υπάρχουν πολλές λεπτομέρειες που σίγουρα δεν ξέρουμε! Ε λοιπόν, αυτό το άρθρο που περιγράφει το proc filesystem από τον [Πρατικάκη +Πολύβιο](mailto:polyvios@softlab.ntua.gr) με μια \`\`ξεχωριστή\'\' νότα περιεχομένου, θα μας κάνει να\... θέλουμε και άλλα!!! (εγώ τουλάχιστον, μόλις το +διάβασα, έτρεξα και διάβασα το **linux kernel module programmers guide**. Το άρθρο μπορείτε να το βρείτε [εδώ](04_proc.html) + +Συνέχεια του [άρθρου του προηγούμενου μήνα](../26/05_lfs.html) από τον [Μιχάλη Καμπριάνη](mailto:kabrianis@hellug.gr) που μας έγραψε για το πώς να στήσουμε ένα +linux μηχανάκι **from the scrach!**. Εγώ πάντως που το δοκίμασα, τώρα έχω γεμίσει ένα δίσκο με\... images!!! Φυσικά και αστειεύομαι, και μπράβο στο +[Μιχάλη](mailto:kabrianis@hellug.gr) για το πολύ καλό πραγματικά άρθρο. Μπορεί οι νέοι μας να μην το εκτιμήσουν και πολύ (καθόλου θα ήταν ακριβέστερο) αλλά όλοι +οι υπόλοιποι το απολαύσαμε! + +Αυτά τα ολίγα προς το παρόν, και σας υπόσχομαι ότι δε θα ξαναργήσω να βγάλω τεύχος! Θα φροντίσω, αν πνίγομαι τόσο πολύ, να λέω στον παλιό αρχισυντάκτη, τον +[Μιχάλη Καμπριάνη](mailto:kabrianis@hellug.gr), τον οποίο και ευχαριστώ που πάντα με βοηθάει, να το ανεβάζει! + +Για το **magaz** [Παπαδογιαννάκης Βαγγέλης](mailto:papas@hellug.gr). diff --git a/content/articles/27/02_vitips.md b/content/articles/27/02_vitips.md new file mode 100644 index 0000000..0e4146a --- /dev/null +++ b/content/articles/27/02_vitips.md @@ -0,0 +1,272 @@ ++++ +title = 'vi Tips' +date = '2000-10-01T00:00:00Z' +description = '' +author = 'Βούλα Σανίδα(mailto:voulariba@eeea.gr)' +issue = ['Magaz 27'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Tips στον vi (Μα δεν χρειάζονται, είναι τόσο απλός\...)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ποιός τόλμησε να πει πως το vi είναι δύσχρηστο; Μερικά απλά tips για να κάνετε την ζωή σας ευκολότερη\... + +**1. Practical leaflet** +------------------------------------------------- + +**2. crash course theory leaflet** +----------------------------------------------------------- + +- [2.1 θεωρία 1](#ss2.1) +- [2.2 θεωρία 2](#ss2.2) +- [2.3 θεωρία 3](#ss2.3) + + +### [1. Practical leaflet]{#s1} + +**tip 1**: Για να βλέπετε στο κάτω μέρος της οθόνης την τρέχουσα γραμμή και στήλη: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :set ruler + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +(αν θέλετε τέτοιες ρυθμισεις να ισχύουν πάντα δημιουργείστε στο \$HOME σας ένα αρχείο .vimrc και γράψτε εκεί την παραπάνω εντολή). + +**tip 2**: Διαλέξτε κομμάτια κειμένου με τα πλήκτρα (σαν να χρηιμοποιείτε ποντίκι):\ +Πατήστε v για VISUAL MODE. Με τα πλήκτρα διαλέξτε τις γραμμές του κείμενο που θέλετε. Λειτουργεί το page-up, page-down για να διαλέξετε ολόκληρες οθόνη. +Μπορείτε να χρησιμοποιείσετε regular expressions (π.χ. /test) για να επιλέξω το κείμενο μέχρι την πρώτη εμφάνιση της λέξης test.\ +Εναλλακτικά,. πατήστε Ctrl-v για VISUAL BLOCK και διαλέξτε το κείμενο που θέλετε κατά στήλες (κατακόρυφα). + +- Αντιγράφετε το κείμενο. +- Με p κάνετε επικόλληση (paste). +- Με d διαγράφετε το μαρκαρισμένο κείμενο. + +**tip 3**: Πως αφαιρούμε ΟΛΑ τα html tags από μια html σελίδα και μένει μόνο plain text κείμενο: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :g/<[^>]*>/s///g + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 4**: Πώς σβήνουμε το mail header από ένα email, ώστε να μείνει μόνο το body του: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :1,/^$/d + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +(ουσιαστικά σβήνουμε από την 1η γραμμή μέχρι να βρούμε την πρώτη κενή γραμμή) + +**tip 5**: Πως αντικαθιστούμε τη λέξη καλό με τη λέξη πολύ καλό σε όλο το κείμενο και σε όλες τις εμφανίσεις σε κάθε γραμμή, με χρήση του τελεστή &: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :%s/καλό/πολύ &/g + (εναλλακτικά :%s/καλό/πολύ καλό/g, αν και δεν είναι και τόσο δυναμικό) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 6**: Πως κλείνουμε σε /\* \... \*/ την τρέχουσα γραμμή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :s/.*/\/* & *\// + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 7**: Πως βάζουμε τις 5 πρώτες γραμμές σε σχόλια τύπου shell (\#): + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :1,5s/.*/# &/ + (ή ισοδύναμα :1,5s/^/# /) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 8**: Πως διαγράφουμε όλες τις κενές γραμμές του κειμένου: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :g/^$/d + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 9**: Πως σβήνουμε τα κενά πριν από κάθε γραμμή + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :g/^ *\(.*\)/s//\1/g + (ή ισοδύναμα :g/^ */s///g) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 10**: Πως διπλασιάζουμε τον αριθμό των κενών μεταξύ των λέξεων + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :%s/ */&&/g + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 11**: Ανταλλαγή μέρας-μήνα. Η ημερομηνία από τη μορφή 21-03-1999 θα γίνει 03-21-1999 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :%s/\([0-9]\{1,2\}\)-\([0-9]\{1,2\}\)-\([0-9]\{4\}\)/\2-\1-\3/g + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 12**: Πώς αντιστρέφουμε 2 στήλες που διαχωρίζονται μεταξύ τους με άνω κάτω τελεία : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :%s/\(.*\):\(.*\)/\2:\1/g + (ναι, με awk είναι πιο εύκολο, όντως!) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 13**: Πως διαγράφουμε τους 4 πρώτους χαρακτήρες σε κάθε γραμμή του κειμένου + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :%s/^....//g + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 14**: Σε περίπτωση που γράφουμε ένα βιβλίο με references της μορφής \"Δείτε το κεφάλαιο ΧΧ.ΥΥ\", όπου Χ και Y αριθμοί, και θέλουμε να βάλουμε τέτοιες +εμφανίσεις σε παρενθέσεις: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :%s/Δείτε το Κεφάλαιο [1-9][0-9]*\.[1-9][0-9]*/(&)/g + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**tip 16**: Βαρεθήκατε να χρησιμοποιείτε το \\ σαν unescape χαρακτήρα για τον χαρακτήρα /; Αλλάξτε το διαχωριστή (delimiter) / της εντολής s (π.χ. με τον +χαρακτήρα θαυμαστικό !).\ +**Παράδειγμα:** Θέλω να αντικαταστήσω το /usr/doc/HOWTO /usr1/doc2/HOWTO3: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :%s/\/usr\/doc\/HOWTO/\/usr1\/doc2\/HOWTO3 (ο παλιός δύσκολος τρόπος) + :%s!/usr/doc/HOWTO!/usr1/doc2/HOWTO3! (ο νέος και εύκολος) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +tip16: Α\....εννοείτε πως για να ψάξουμε για μια έκφραση (π.χ. lalakis) η εντολή είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + /lalakis + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [2. crash course theory leaflet]{#s2} + +### [2.1 θεωρία 1]{#ss2.1} + +Aντικαταστάσεις: + +H εντολή αντικατάστασης έχει την μορφή: \[address\]s/oldregexp/newregexpr\[/flags\] όπου : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + [..] = προεραιτικό μέρος της εντολής, μπορείτε να το παραλείψετε + oldregexp = τι να αντικαταστήσουμε + newregexp = με τι + address = σε ποιο διάστημα (range) κειμένου θα γίνει η αντικατάσταση + flags = αν θα ρωτάει για κάθε αντικατάσταση, αν θα το κάνει σε όλο + το κείμενο, αν θα τα δείχνει κλπ... + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ετσι, το address μπορεί να είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + % = θα εφαρμοστεί σε όλο το κείμενο + 1,5 = θα εφαρμοστεί από τη γραμμή 1 μέχρι την 5 + 1,$ = θα εφαρμοστεί από τη γραμμή 1 ως και την τελευταία (σε όλο + δηλαδή το κείμενο) + = (τίποτα), θα εφαρμοστεί στην τρέχουσα γραμμή + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μερικά flags μπορούν να είναι + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + g = θα εκτελεστεί η εντολή σε όλα τις εμφανίσεις τρέχουσας γραμμής + (Μια καλή ερώτηση που θα περιμένα να έχετε: Αν έχω για address το % , + δεν είναι ισοδύναμο; Μια καλή απάντηση είναι ΟΧΙ. Αν παραλείψετε το g + στα flags τότε το vi θα ψάξει για την oldregexp σε όλο το κείμενο αλλά + αντικατάσταση θα γίνει ΜΟΝΟ για την πρώτη εμφάνιση της oldregexp ΣΕ ΚΑΘΕ + ΓΡΑΜΜΗ. Αρα αν μια γραμμή περιέχει δύο φορές την oldregexp χρειάζεστε + το flag g.) + gc = θα ρωτά για κάθε αντικατάσταση πριν την κάνει + p = εμφάνιση στο κάτω μέρος του vi όλων των υποψήφιων αλλαγών + (tips: 3, 5, 6, 7, 9, 10, 11, 12, 13, 14) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [2.2 θεωρία 2]{#ss2.2} + +Μερικοί χαρακτήρες (με χαρακτήρα): + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + & = Αν εμφανιστεί οπουδήποτε στα δεξιά μιας εντολής + αντικατάστασης s, αντικαθίσταται από οτιδήποτε συνέπεσε στην αριστερή + πλευρά (tips: 5, 6, 7, 10, 14) + . = Οποιοσδήποτε χαρακτήρας (tips: 6, 7, 9, 12, 13) + * = Οσοι (και όποιοι) χαρακτήρες (tips: 6, 7, 9, 12, 14) + % = Ολό το αρχείο (tips: 5, 10, 11, 12, 13, 14) + ^ = Αρχή γραμμής (tips: 3, 4, 7, 8, 9, 13) + $ = Τέλος γραμμής (tips: 4, 8) + [...] = Οποιοσδήποτε χαρακτήρας από αυτούς που είναι εντός αγκύλης. + Με Α-Χ εντός αγκύλης ορίζουμε όλους τους χαρακτήρες από τον Α εως τον X + κατά ASCII σειρά (tips: 3, 11, 14) + [^...] = Οποιοσδήποτε χαρακτήρας εκτός από αυτούς που είναι εντός αγκύλης + \ = Escape character. Εξουδετερώνει τις "ειδικές" ιδιότητες του + χαρακτήρα που ακολουθεί. Το vi αντιμετωπίζει δηλαδή τον επόμενο χαρακτήρα, + ως κοινό. (tips: 6, 14) + \{n,m\} = Δηλώνει πως οι εμφανίσεις του χαρακτήρα που προηγείται αυτής της + έκφρασης θα κυμαίνονται από n το λιγότερο μέχρι m το περισσότερο (tips: 11) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [2.3 θεωρία 3]{#ss2.3} + +Regular Expressions + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + \(regexp\) = Ομαδοποιεί με βάση το regular expression εντός παρένθεσης. + Οτι λοιπόν είναι μέσα στην παρένθεση θεωρείται ως ένα ενιαίο block. Μπορούμε + πλέον να αναφερθούμε σε αυτό με βάση τον αριθμό του block αυτού. Αν είναι το + πρώτο block που ομαδοποιήσαμε με αυτόν τον τρόπο, αναφερόμαστε σε αυτό με \1 + (tips: 9, 11, 12) + // = κενό regular expression ισοδυναμεί με το αμέσως προηγούμενο + regular expression (tips: 9) + /./ = μη κενή γραμμή, τουλάχιστον 1 χαρακτήρας + /^$/ = κενή γραμμή, μόνο χαρακτήρας αλλαγής γραμμής + /κάτι/ = το κάτι οπουδήποτε στη γραμμή + /^κάτι/ = το κάτι στην αρχή της γραμμής + /κάτι$/ = το κάτι στο τέλος της γραμμής + /κάτι.$/ = το κάτι και ένας ακόμη οποιοσδήποτε χαρακτήρας στο τέλος της + γραμμής + /κάτι\.$/ = το κάτι. στο τέλος της γραμμής + /κάτι[0-9]/ = το κάτι ακολουθούμενο από ψηφίο + /κάτι[^0-9]/ = το κάτι ακολουθούμενο από μη ψηφίο + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + diff --git a/content/articles/27/03_odigos.md b/content/articles/27/03_odigos.md new file mode 100644 index 0000000..6317e89 --- /dev/null +++ b/content/articles/27/03_odigos.md @@ -0,0 +1,329 @@ ++++ +title = 'Οδηγός καλής συμπεριφοράς προς Linuxάδες' +date = '2000-04-01T00:00:00Z' +description = '' +author = 'Ευριπίδης Παπακώστας `evris@hellug.gr`' +issue = ['Magaz 27'] +issue_weight = 3 ++++ + +**1. Ένα Παραμύθι με Νόημα** +----------------------------------------------------- + +**2. Η Πραγματικότητα** +------------------------------------------------ + +- [2.1 Linux Κοινότητα](#ss2.1) +- [2.2 Υπάρχει τελικά πρόβλημα;](#ss2.2) + +**3. Τυφλοσούρτι** +------------------------------------------- + +**4. Προτεινόμενο Διάβασμα** +----------------------------------------------------- + +- [4.1 LGU Netiquette](#ss4.1) +- [4.2 MAGAZ](#ss4.2) +- [4.3 HOWTOs](#ss4.3) +- [4.4 HELLUG](#ss4.4) +- [4.5 ΕΕΕΑ](#ss4.5) + + +### [1. Ένα Παραμύθι με Νόημα]{#s1} + +*\"Μια φορά κι έναν καιρό, σε ένα απόμακρο χωριό, ζούσαν δέκα ψαράδες. Την εποχή εκείνη, κανείς άλλος δεν ήξερε να ψαρεύει και ούτε ενδιαφερόταν για το ψάρεμα. +Αν μάλιστα οι ψαράδες έκαναν το αστείο να διδάξουν ψάρεμα στους ανθρώπους της πόλης, ή να τους δώσουν δωρεάν ψάρια εκείνοι τους κορόιδευαν και τους χλεύαζαν.* + +*Οι κάτοικοι της πόλης, βλέπετε, τρώγανε μόνο έτοιμες προτηγανισμένες τηγανητές πατάτες που τους προμήθευε ο αφέντης μεγαλέμπορας.* + +*Οι ψαράδες όμως επέμειναν. Σιγά σιγά, καλλιέργησαν και τη γη, κάναν μια μικρή φάρμα εκτροφής ζώων, άρμεγαν το γάλα και επειδή ήταν όλοι φίλοι μεταξύ τους και +ήταν λίγοι σε πληθυσμό, ο καθένας έκανε ότι του άρεσε και το πρόσφερε δωρεάν και χαμογελαστά στους υπόλοιπους. Όποιος δεν μπορούσε να φέρει σε πέρας κάποια +δουλειά, μπορούσε να ρωτήσει τους παλιότερους κατοίκους του χωριού και εκείνοι με χαρά τον βοηθούσαν.* *Σιγά σιγά, οι ταλαιπωρημένοι και στα πρόθυρα της ασιτίας +κάτοικοι της πόλης ενδιαφέρθηκαν να μάθουν και αυτοί τον τρόπο ζωής του μικρού αυτού χωριού και άρχισαν να μαζεύονται στα περίχωρα του χωριού.* *Ο πληθυσμός του +χωριού αυξήθηκε. Οι νέοι κάτοικοι απαιτούσαν σαν κακομαθημένα παιδιά τα δωρεάν ψάρια τους (λες και κάποιος τους τα χρώσταγε) και κακοαναθρεμένοι όπως ήταν, +άρχισαν να ζητάνε τσιπούρες, φιλέτο, λαχανάκια Βρυξελλών, πράγματα που οι παλιοί χωρικοί δε μπορούσαν (χωρίς τη συνεργασία των νέων) να φτιάξουν.* + +*Αλλά αυτό που πραγματικά έφερνε σε απόγνωση τους γέροντες του χωριού, ήταν η συμπεριφορά των νέων στο σχολείο. Δεν έκαναν τις εργασίες τους, δε διάβαζαν τα +βιβλία τους, δεν παίδευαν το μυαλό τους και δεν παρατηρούσαν τους γεροντότερους ώστε να προοδεύσουν. Αντί αυτού, συνεχώς έβριζαν τη δασκάλα τους όταν τους +εξηγούσε πως αν είχαν διαβάσει το βιβλίο δε θα χρειαζόταν να διακόπτουν συνέχεια το μάθημα και να ρωτούν τα ίδια και τα ίδια.* + +*Η κατάσταση αυτή συνεχίστηκε για πολύ καιρό, μέχρι που πέθαναν οι γεροντότεροι, χάθηκε η γνώση που είχαν και τελείωσαν από τις αποθήκες οι έτοιμες τροφές που +με τόσο κόπο συσσώρευαν.* + +*Πεινασμένοι και απογοητευμένοι οι κάτοικοι της πόλης, ξαναγύρισαν στον παλιό αφέντη τους. Με σκυμμένο το κεφάλι, παραδέχτηκαν πως ήταν λάθος τους να φύγουν από +κοντά του και του ζήτησαν να τους πάρει στη δούλεψή του.* + +*Αυτός άλλο που δεν ήθελε. Τώρα πια όλοι δουλεύουν γι\' αυτόν, για μια μερίδα προτηγανισμένες σάπιες πατάτες και κανένας δεν έχει μείνει για να επαναστατήσει +εναντίον του.\"* + + +### [2. Η Πραγματικότητα]{#s2} + +Ο παραπάνω μύθος, μέχρι ένα σημείο του ανταποκρίνεται πλήρως στο μοντέλο ανάπτυξης και λειτουργίας του Linux. Είναι γνωστό πως δεν ανήκει σε κανέναν, πως +προσφέρεται δωρεάν, πως ο καθένας εθελοντικά προσφέρει εκεί που θέλει και μπορεί και πως υπάρχουν ισχυροί δεσμοί ανάμεσα στα μέλη της κοινότητας αυτής.\ +Είναι γνωστό, επίσης, πως για να μην τρως μόνο ότι σε ταΐζουν οι άλλοι, θα πρέπει μόνος σου να διαφοροποιήσεις το μενού σου πράγμα που απαιτεί προσωπική +ενασχόληση. + +### [2.1 Linux Κοινότητα]{#ss2.1} + +Η κοινότητα του Linux, λοιπόν, έχει τα σχολεία της. Διατηρεί κάποιους μηχανισμούς για την ισχυροποίηση των δεσμών των μελών της, για την επίλυση των προβλημάτων +τους και για την, τόσο ζωτικής σημασίας, επικοινωνία μεταξύ τους. Αυτοί οι μηχανισμοί δεν είναι τίποτε άλλο από τις γνωστές μας λίστες ανταλλαγής ηλεκτρονικών +μυνημάτων (newsgroups). + +Στον ελληνικό χώρο, ο αφιλοκερδής σύλλογος Ελλήνων Χρηστών και Φίλων Λίνουξ Ελλάδος -HELLUG συμβάλλει σε αυτή την προσπάθεια. Με τον προσωπικό χρόνο, χρήμα και +όρεξη μελών του και μη, συντηρείται το www.hellug.gr (web server του συλλόγου), magaz.hellug.gr (ηλεκτρονικό περιοδικό για Linux), HOWTOs (μεταφρασμένα ή +πρωτότυπα εγχειρίδια τεκμηρίωσης), projects (στέγαση και ενημέρωση για ελληνικές προγραμματιστικές προσπάθειες), happenings, εκθέσεις, κλπ. + +Σημαντικότερη, ίσως, όλων των παραπάνω δραστηριοτήτων είναι η συντήρηση των αντίστοιχων λιστών: + +![](/27/img/linux-greek-users.jpg) + +linux-greek-users\@hellug.gr (για θέματα που άπτονται του Linux γενικώς π.χ. προβλήματα, συζητήσεις, επικαιρότητα κλπ.),\ +linux-howto\@hellug.gr (για μεταφραστικές προσπάθειες, εξελληνισμούς),\ +hellug\@hellug.gr (για διοικητικά θέματα, συμμετοχή μόνο από μέλη του HELLUG)\ + +### [2.2 Υπάρχει τελικά πρόβλημα;]{#ss2.2} + +Τώρα πια, όμως, που μέρος των στόχων του συλλόγου δείχνει να εκπληρώνεται (αύξηση των Ελλήνων χρηστών Linux καθώς και των εταιρειών που ασχολούνται ή το +χρησιμοποιούν), αρχίζει να διαφαίνεται ένας μακροπρόθεσμος κίνδυνος. Αυτός της κατάρρευσης της κοινότητας κάτω από το ίδιο της το βάρος. Και εξηγούμαι\... + +#### Παλιοί και νέοι Χρήστες + +Όπως και στο μύθο με τους χωρικούς, οι νέοι χρήστες που δίνουν στο Linux μια ευκαιρία, κατά πλειοψηφία δε διαθέτουν την αντίστοιχη παιδεία και μεράκι όπως οι +παλιοί.\ +Για να μην παρεξηγηθούμε, δεν γίνεται εδώ θέμα τεχνικών γνώσεων, παλαιότητας, μαγκιάς ή σεβασμού προς τους γκουρού. Απλά, όσο περισσότεροι άνθρωποι +στριμώχνονται στον ίδιο χώρο τόσο πιο προσεκτικοί και ευγενικοί πρέπει να είναι στις επαφές τους με τους γύρω τους.\ +Η αρχική μαγιά χρηστών Linux, καθότι λιγοστοί στον αριθμό, δεν αντιμετώπισε ποτέ αυτό το πρόβλημα. Άλλωστε, μην ξεχνάμε πως οι πρώτοι εκείνοι χρήστες ήταν κατά +βάση επαγγελματίες, χομπίστες - σπασίκλες των computers. Το κύριό τους μέλημα δεν ήταν να κάνουν τη δουλειά τους με το Linux, αλλά αντίθετα η δουλειά τους (έστω +και σε επίπεδο δονκιχοτισμού ή χόμπι) ήταν να κάνουν το Linux. + +#### Οι ορμές του νέου + +Οι σημερινοί χρήστες, συνήθως, είναι πιο προσγειωμένοι και απαιτητικοί. Θεωρούν πως το Linux οφείλει να τους ανταμείψει για το τόλμημα που έκαναν να το +δοκιμάσουν και να τους καλύψει κάθε τους ανάγκη, καλύτερα και πιο γρήγορα από κάθε εναλλακτική λύση με την οποία το συγκρίνουν. + +Μερικές φορές, παρεξηγούν επίσης, το ρόλο των ανθρώπων που έκαναν τα πράγματα να είναι όπως σήμερα, χωρίς να το χρωστούν σε κανέναν και απαιτούν την επιτυχή +βοήθειά τους εδώ και τώρα. Σε περιπτώσεις άγνοιας, αδιαφορίας, λανθασμένης απάντησης (κανείς δεν είναι τέλειος μην ξεχνάμε) δείχνουν αρνητική στάση και αρχίζουν +να ακούγονται παράπονα όπως \"κρατάτε την γνώση για τον εαυτό σας\", \"δεν μας διδάσκετε όπως σας δίδαξαν\", \"είσαστε ένα κλειστό κύκλωμα και δεν μας δέχεστε +και εμάς\" \... + +Πολλές φορές, μάλιστα, επειδή το Linux έχει ξεφύγει πια από εργαλείο του σπασίκλα, οι νέοι χρήστες αυτοί δε διαθέτουν βασικές γνώσεις Η/Υ αλλά και ούτε την +στοιχειώδη παιδεία συμπεριφοράς στα ηλεκτρονικά μέσα (email, λίστες). + +Έτσι, ακόμα και αν η απορία τους έχει απαντηθεί και η πληροφορία είναι ήδη προσιτή, δεν μπαίνουν καν στον κόπο να την αναζητήσουν και επιμένουν να ρωτούν τα +ίδια και τα ίδια, δημιουργώντας τριβές και εκνευρισμούς. + +#### Ο καημός του παλιού + +Για να απαντήσει κάποιος \"γκουρού\" σε μια οποιαδήποτε ερώτηση, θα πρέπει να βρει τον χρόνο να την διαβάσει, να την επεξεργαστεί (ώστε να μην συμβουλέψει +λάθος), να το δοκιμάσει ο ίδιος, πιθανώς να ψάξει για σχετικά links και documentation ή και να αναζητήσει παλαιότερες απαντήσεις στην ίδια ερώτηση. Αν η +ανταμοιβή του είναι μόνο γκρίνια, ίσως να αποτραβηχτεί από την εθελοντική αυτή συνεισφορά του. Αν επίσης οι ερωτήσεις πληθαίνουν σε σημείο που δεν μπορεί κανείς +να τις παρακολουθήσει, χάνουν την πραγματική τους αξία, εξισώνονται όλες μεταξύ τους (δύσκολες, ενδιαφέρουσες, τετριμμένες, ήδη απαντημένες, λανθασμένες, +άσχετες με Linux) και γίνονται απλά ένας θόρυβος. + +Στην περίπτωση δε που η απάντηση έχει δοθεί τρια μηνύματα πριν, είναι λογικό να απογοητεύεται οποιοσδήποτε από τον τρόπο που υποβιβάζουν τον χρόνο και την +προσφορά του οι ερωτούντες πριν διαβάσουν έστω και στο ελάχιστο το \"μάθημα της ημέρας\". + +#### Μια μέση λύση + +Φυσικά η σωστή συμπεριφορά απαιτεί βήματα και κατανόηση και από τις δύο πλευρές.\ +Ο νέος φίλος δεν καλείται να τα ξέρει όλα, αλλά ούτε και να απαιτεί σαν κακομαθημένο παλιόπαιδο ιδιαίτερα μαθήματα, όποτε χρειαστεί, από όποιον επιλέξει, επί +παντός επιστητού. + +Ο παλιός από την άλλη, υπό κανονικές συνθήκες δεν θα έπρεπε να σνομπάρει κάθε ερώτηση που του φαίνεται απλή και προφανής. Θα πρέπει να είναι επεξηγηματικός στις +απαντήσεις του. Σε περίπτωση που νοιώθει την ακατάσχετη τάση να χλευάσει, να ειρωνευτεί και γενικώς να μην συνεισφέρει θετικά σε κάποιο πρόβλημα, όποιος και αν +είναι ο λόγος αυτής του της διάθεσης, υπάρχει μια και μόνη συμβουλή: **Μην απαντήσει!**. + +Η λίστα είναι εργαλείο και δεν πρέπει να εκφυλίζεται σε προσωπικές μικροτριβές που δεν προάγουν το Linux. + +Όπως και στο μύθο, το μυστικό της επιτυχίας του χωριού, ήταν πρώτα πρώτα η προσωπική ενασχόληση με κάτι που άρεσε στους χωρικούς. Η εξήγηση της αποτυχίας είναι, +επίσης, απλή. Μηδενική προσωπική συνεισφορά και απαίτηση από τους άλλους να δουλέψουν για σένα. Στο Linux, ισχύει το ρητό \"Αν σε τρώει η πλάτη σου, προσπάθησε +να την ξύσεις μόνος σου. Αν τα καταφέρεις, πες και στους άλλους πώς το έκανες. Αν όχι, βρες φίλους σου να ξύνει ο ένας την πλάτη του άλλου.\" + +Προς θεού, απέχουμε πολύ από την κατάληξη του μύθου και δεν νομίζω πως εύκολα θα καταλήξουμε εκεί, αλλά μπορούμε όλοι μαζί να κάνουμε την Linux-ική ζωή μας πιο +εύκολη και ευχάριστη, αν έχουμε στο μυαλό μας την παραπάνω ιστοριούλα, κάθε φορά που αποφασίζουμε να απευθυνθούμε στις Linux λίστες. + + +### [3. Τυφλοσούρτι]{#s3} + +Παρακάτω επιχειρούμε να δώσουμε έναν τυφλοσούρτη καλής συμπεριφοράς για τέτοιες περιπτώσεις. Οι ενέργειες καταγράφονται ΑΚΡΙΒΩΣ με την σειρά που θα έπρεπε να +γίνουν, ώστε να μεγιστοποιήσουμε τον παράγοντα σήμα/θόρυβο μιας ηλεκτρονικής λίστας. + +- Βήμα 1: Επιχειρώ να λύσω μόνος μου το πρόβλημά μου (διαβάζοντας τα manuals, πειραματιζόμενος, ψάχνοντας στο internet στα σχετικά sites). + +- Βήμα 2: Συμβουλεύομαι φίλους και γνωστούς από τον κύκλο μου. Αν φοβάμαι πως γίνομαι ενοχλητικός σε αυτούς, να είμαι σίγουρος πως το ίδιο νοιώθουν και οι + άγνωστοι στις λίστες. + +- Βήμα 3: Διαβάζω με προσοχή παρεμφερείς ερωταπαντήσεις στις λίστες, κοιτώντας μήπως η απάντηση έχει ήδη δοθεί και είναι μπροστά στα μάτια μου. + +- Βήμα 4: Δημοσιοποιώ το πρόβλημά μου στην σωστή λίστα, με ευγενικό τρόπο, παρέχοντας όσες πληροφορίες νομίζω πως θα βοηθήσουν τους άλλους να κατανοήσουν + ακριβώς το πρόβλημα μου και συνεχίζω να τους δίνω τις επιπλέον πληροφορίες που (ίσως) να ζητήσουν. + +- - Βήμα 5α: Αν το πρόβλημα λυθεί δεν είναι άσχημη ιδέα να ευχαριστήσω τα παιδιά που έδωσαν χρόνο και δαπάνησαν σκέψη για να με βοηθήσουν. Στέλνω την + ολοκληρωμένη ερώτηση και απάντηση στην λίστα γιατί πιθανώς ενδιαφέρει και άλλους. + - Βήμα 5b: Αν η ερώτηση δεν απαντηθεί για κάποιο καιρό, ή οι απαντήσεις δεν λύσουν το πρόβλημα, δεν επιμένω, δεν βρίζω, δεν προσβάλω. Όποιος και όπως + μπόρεσε να ασχοληθεί το έκανε ήδη. Δεν υπάρχει τρόπος να καταναγκάσουμε και άλλους να εμπλακούν. Τι να γίνει; Ήμασταν άτυχοι. Δεν είναι λύση επίσης, η + αποστολή του ίδιου mail - ερώτηση σε πολλαπλούς παραλήπτες προσωπικά. Να είσαστε σίγουροι πως όλοι διαβάζουν τις ίδιες λίστες και πως μόνο ενόχληση + μπορεί να δημιουργήσει κάτι τέτοιο. + +- Βήμα Μόνιμο (και σημαντικότερο): ΠΑΝΤΑ, ΜΑ ΠΑΝΤΑ, έχω στο μυαλό μου πως η λίστα δεν είναι μόνο για να παίρνω απαντήσεις αλλά κατά βάση για να δίνω. + Παρακολουθώ λοιπόν και τα υπόλοιπα threads, προσπαθώντας με την σειρά μου να ανακουφίσω και εγώ άλλους ομοιοπαθείς. + + +### [4. Προτεινόμενο Διάβασμα]{#s4} + +Το θέμα αυτό έχει συζητηθεί πολλές φορές και από τα ίδια τα παιδιά που συμμετέχουν στις λίστες αυτές και έχουν ήδη ξεκινήσει κάποιες προσπάθειες ενημέρωσης των +\"νεοφώτιστων\" φίλων. Το κάθε ένα από αυτά τα ενημερωτικά κείμενα, αναφέρεται στο θέμα με τον δικό του τρόπο, κάνοντας όμως λίγο πολύ παρεμφερείς συστάσεις. + +Σας παραπέμπουμε λοιπόν στην σχετική \*βιβλιογραφία\* : + +### [4.1 LGU Netiquette]{#ss4.1} + +Το LGU Netiquette μπορείτε να διαβάσετε ηλεκτρονικά στο . Αποστέλλεται πάντως αυτόματα και σε μηνιαία βάση στην +linux-greek-users, ώστε να το λαμβάνουν όλοι οι νέοι συμμετέχοντες σε αυτήν. Μεταξύ άλλων στο κείμενο αναφέρονται και τα εξής: + +> `` +> +> * Βάλτε ένα σχετικό subject στο e-mail σας. Subjects του στυλ "βοήθεια, +> αρχάριος" ή "πρόβλημα με το linux" δε βοηθάνε ούτε τους αναγνώστες, +> ούτε όσους ψάχνουν για παρόμοιο πρόβλημα στα archives αλλά ούτε κι εμάς +> που γράφουμε το faq. +> +> * Αλλάζετε το subject όταν αλλάζετε το θέμα. +> +> * Μπορείτε όταν σας απαντήσουν και λυθεί το πρόβλημά σας, να γράψετε +> ένα e-mail με την προσθήκη του "FIXED:" ή κάτι παρόμοιο στο θέμα, και +> να περιγράψετε με λίγα λόγια πως τελικά λύσατε το πρόβλημά σας. Με +> αυτό τον τρόπο δημιουργείται μια περίληψη του όλου thread και βοηθάτε +> κάποιον με παρόμοιο πρόβλημα να βρει τη λύση πολύ γρηγορότερα. +> +> * Γενικά, αν είστε νέος στη λίστα και γενικά σε λίστες ταχυδρομείου, +> διαβάστε τα μηνύματα που στέλνονται για μια εβδομάδα περίπου για να +> καταλάβετε τον τρόπο συμπεριφοράς σε τέτοιους χώρους. +> +> * Quotes: Όταν κάνετε reply σε κάποιο e-mail κόψτε όσο ποιο πολλά +> μπορείτε από το αρχικό μύνημα. Kόψτε το footer που προσθέτει ο +> mail-server στο τέλος κάθε μηνύματος. Αφήστε μόνο τα σχετικά με την +> απάντησή σας για να καταλάβουν οι υπόλοιποι σε τί απαντάτε. +> Οτιδήποτε άλλο χαραμίζει bandwidth και χρόνο. +> +> * Signatures: Γενικά είναι καλό να περιορίσετε το signature στα e-mail +> σας σε 4-5 σειρές το πολύ. +> +> * Attachments: Γενικά είναι καλό να μην στέλνετε αρχεία στη λίστα. Αν +> χρειάζεται να στείλετε κάποιο αρχείο που έχει σχέση με το πρόβλημά σας +> προσπαθήστε να βρείτε το πιθανό σημείο του προβλήματος και να στείλετε +> μόνο αυτό. Το να στέλνετε όλο το syslog δεν είναι καλή τακτική! + +### [4.2 MAGAZ]{#ss4.2} + +Άρθρα με παρεμφερή προβληματισμό, μπορείτε να βρείτε και στο [ηλεκτρονικό περιοδικό magaz](http://magaz.hellug.gr). + +Ένα άρθρο γενικού ενδιαφέροντος που εκφράζει κάποιες γενικότερες σκέψεις για την κοινότητα και τις δραστηριότητές της είναι το: [Σκέψεις για την ελληνική +κοινότητα του Linux](http://magaz.hellug.gr/21/03_community_thought.html). + +Μια άλλη πληροφορία που μπορεί να σας φανεί χρήσιμη είναι πως τα τεύχη του magaz, έως και το 16ο, περιλαμβάνουν και αλληλογραφία με το κοινό. Σε αυτήν υπάρχουν +αρκετές ερωταπαντήσεις κυρίως αρχαρίων χρηστών. + +### [4.3 HOWTOs]{#ss4.3} + +Ένα από τα γνωστότερα και παλαιότερα Ελληνικά HOWTOs, το [Hellenic HOWTO](http://www.hellug.gr/gr/howto/howto/pub/html/Hellenic-HOWTO.html) αναφέρει και αυτό με +την σειρά του μερικούς χρήσιμους κανόνες καλής συμπεριφοράς. Αναφέρουμε αποσπασματικά\... + +> `` +> +> Χρήσιμες συμβουλές +> +> - Το magaz έχει πλήθος από ερωτήσεις που έχουν γίνει στο παρελθόν, +> και λίγο πολύ οι ερωτήσεις επαναλαμβάνονται. +> +> - Αφιερώστε αρκετό χρόνο διαβάζοντας για να ενημερωθείτε γύρω από το +> πρόβλημα που ψάχνετε, +> +> - ΜΗΝ παραλείψετε να διαβάσετε τα HOWTO και FAQ (/usr/doc/faq) του +> LDP Project (http://metalab.unc.edu/LDP/). +> +> - Ψάξτε σχετικά θέματα από την σελίδα: http://lists.hellug.gr/archives. +> +> - Τα διεθνή newsgroups comp.os.linux* είναι επίσης χρήσιμα, +> πχ news://comp.os.linux.misc +> +> - Μην στέλνετε προσωπικό email σε κάποιον, γιατί σπάνια υπάρχει +> ο χρόνος για απάντηση. Αντίθετα προτιμήστε την λίστα ή το newsgroup, +> όπου η πιθανότητα να πάρετε απάντηση είναι πολύ μεγαλύτερη. +> ΠΧ, στο δικό μου mailbox, συχνά φτάνουν γράμματα αυτού του τύπου: +> me lene Xxxxx spoudazo yyyyyyy kai arxisa na asxoloumai me to linux. +> Tha ithela na mou peis pou mporo na bro to programma. +> oti theleis na mou to steileis sto zzz@zzzzzzzzzz.zz" +> Δεν απαντώ τέτοια email, ειδικά όταν το HOWTO και το FAQ έχουν τις απαντήσεις, +> αντίστοιχα πράττουν και άλλοι. + +Εκτός των παραπάνω, το HOWTO αυτό έχει μια λίστα συχνά τιθέμενων ερωτήσεων (FAQ) για προβλήματα Ελλήνων Linuxάδων, που μπορεί να σας φανεί ιδιαίτερα χρήσιμη. + +### [4.4 HELLUG]{#ss4.4} + +Οδηγίες για το τι σκοπούς εξυπηρετεί η κάθε λίστα, ποιες είναι οι συχνότερα τιθέμενες ερωτήσεις και απαντήσεις τους (FAQ), συμβουλές για να βοηθήσετε και να +βοηθηθείτε καθώς και για το πώς να εγγραφείτε στις λίστες, θα βρείτε στην διεύθυνση και στο [LGU FAQ (Linux Greek Users Frequently +Asked Questions)](http://http://homepages.pathfinder.gr/lgu_faq/) + +![](/27/img/lists-hellug-gr.jpg) + +Διαβάζουμε: + +> `` +> +> Πρέπει να περιοριστεί λίγο το traffic στη λίστα. Τον τελευταίο καιρό με +> αύξουσα πορεία σε συνάρτηση με το χρόνο, τίθενται ερωτήσεις που έχουν απαντηθεί +> στο παρελθόν. Παράλληλα, καλό θα ήταν να ανέβει λίγο το επίπεδό της, εννοώντας +> ότι παλιές απορίες λύνονται, και εμφανίζονται νέες, πιο προχωρημένες. +> +> * Οι απαντήσεις που γράφονται είναι εγγυημένα σωστές; +> Φυσικά και όχι! Οι απαντήσεις δίνονται από τον καθένα σε εθελοντική βάση +> σύμφωνα με τις γνώσεις και εμπειρίες που είχε μέχρι στιγμής. +> +> * Πέρασαν 24 ώρες κι ακόμα απάντηση δεν πήρα. Γιατί; +> Πολύ απλά μπορεί να μην ξέρει κανείς την απάντηση! Οι απαντήσεις γράφονται +> από άλλους χρήστες, που μπορεί να μην έχουν αντιμετωπίσει το πρόβλημά σας. +> +> * Κάποιος μου απάντησε υβριστικά/με έθιξε/κλπ. Να του απαντήσω; +> Όχι μέσω της λίστας. Για τέτοιου είδους θέματα να στέλνετε προσωπικά e-mail. +> Δεν ενδιαφέρει κανέναν στη λίστα οι προσωπικές σας διαφορές με κάποιον. +> +> * Μην ξεχνάτε ότι το linux απαιτεί κόπο και από τον ίδιο το χρήστη. +> +> * Το να στείλετε μια ερώτηση που έχει απαντηθεί δεκάδες φορές στο παρελθόν +> δείχνει ότι θεωρείτε το χρόνο σας πιο πολύτιμο από τον χρόνο αυτών που θα σας +> απαντήσουν... +> +> * Προσέξτε τη γλώσσα που χρησιμοποιείτε. Η λίστα είναι διαθέσιμη σε πολύ κόσμο +> και δε μιλάτε στους φίλους σας μόνο. Η λίστα αυτή αποτελεί και έναν τρόπο να +> δείχνουμε την εικόνα του Linux στον υπόλοιπο κόσμο. +> +> * Spam: Σε καμία περίπτωση δε θα πρέπει να στείλετε spam mail στη λίστα. Άσχετα +> διαφημιστικά, μηνύματα-αλυσίδες, κλπ. Μη σχολιάζετε spam-mail που καταλήγει +> στη λίστα. Απλά επιβαρύνετε κι άλλο τη λίστα. + +### [4.5 ΕΕΕΑ]{#ss4.5} + +Τέλος, για μια ακόμα πιο επιθετική και ωμή στάση στο ζήτημα μπορείτε να διαβάσετε το [Linux Savoir Vivre HOWTO στην +EEEA](http://www.eeea.gr/repository/grlinux/Linux-Savoir-Vivre-HOWTO/Linux-Savoir-Vivre-HOWTO.html) που φημίζεται για την αμεσότητά της παρά για την πολιτικά +ορθή στάση της. Για μια πρόγευση: + +> `` +> +> - Ελπίζεις να είναι όλοι καλύτεροι από σένα. Δέξου το, αν όντως αληθεύει. +> Για να σου λύσουν το πρόβλημα, οι άλλοι, η κοινότητα, βασίζεσαι σε μια κρυφή +> ελπίδα. Να ξέρουν αυτό για το οποίο χρειάζεσαι βοήθεια. Δηλαδή να είναι +> καλύτεροί σου. Να μάθεις να ακούς λοιπόν και να κάνεις τουμπέκα γιατί αυτή +> τη στιγμή ένας καλύτερός σου, εθελοντικά δαπανά χρόνο. Μην του τον χαραμίζεις. +> +> - Του άλλου ο χρόνος είναι πάντα πιο σημαντικός από σένα τον ασήμαντο. +> Απόδειξη: Εσύ του τον ζητάς και αυτός άμα γουστάρει τον δίνει. +> Σεβάσου τον λοιπόν. +> +> - Χέρι με χέρι ή δώσε πρώτος. +> Μην θεωρείς δεδομένο πως σου χρωστάει κανείς μόνο και μόνο γιατί αποφάσισες +> να βάλεις Linux. Ίσα - ίσα. Εσύ χρωστάς να συνεχίσεις και να βελτιώσεις αυτό +> που τόσο απλόχερα σου προσφέρθηκε. +> + diff --git a/content/articles/27/04_proc.md b/content/articles/27/04_proc.md new file mode 100644 index 0000000..cdbbedc --- /dev/null +++ b/content/articles/27/04_proc.md @@ -0,0 +1,159 @@ ++++ +title = 'Περιγραφή του proc filesystem' +date = '2000-10-01T00:00:00Z' +description = '' +author = 'Πρατικάκης Πολύβιος(mailto:polyvios@softlab.ntua.gr)' +issue = ['Magaz 27'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +-------------------------------------- + +**2. Οι δομές του proc** +----------------------------------------------- + +**3. Std disclaimer** +-------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Στο linux υπάρχει ένα σύστημα αρχείων, το proc, το οποίο προσαρτάται συνήθως στο **/proc** στο δένδρο καταλόγων, και το οποίο είναι εικονικό. Αυτό που δηλαδή +φαίνεται ως αρχεία, στην πραγματικότητα δεν υπάρχει πουθενά στο δίσκο ή στην μνήμη του υπολογιστή. Στην πραγματικότητα, τα φαινομενικά αρχεία είναι απλές +\"εγγραφές\" στο δένδρο καταλόγων που αντιστοιχούν το διάβασμα, γράψιμο κ.λ.π των \"αρχείων\" αυτών σε κλήσεις διαφόρων συναρτήσεων. Έτσι, όταν διαβάζει κάποιος +το αρχείο π.χ. /proc/interrupts δεν διαβάζει τα περιεχόμενα ενός υπαρκτού αρχείου, αλλά απλώς την έξοδο μιας συνάρτησης που καλείται κάθε φορά που το αρχείο +αυτό διαβάζεται. + +Το εικονικό σύστημα αρχείων proc, χρησιμοποιείται κυρίως για την αναφορά πληροφοριών (δυναμικά) του συστήματος. Μπορεί δε να αλλάξει δυναμικά, δηλαδή να +προστεθούν και να αφαιρεθούν αρχεία και κατάλογοι, ανάλογα με την τρέχουσα κατάσταση του συστήματος.\ +Ο προγραμματισμός του συστήματος αρχείων proc στον πυρήνα, προσφέρει ένα υπάρχον σύνολο συναρτήσεων (ελληνιστί API), που καθιστούν την επέμβαση στο proc και την +προσθαφαίρεση αρχείων σχετικά εύκολη. Για να προσθέσουμε ένα αρχείο στο proc, χρησιμοποιούμε τη συνάρτηση proc\_register(), η οποία παίρνει ως όρισμα μια δομή +που περιγράφει το αρχείο (όνομα, μέγεθος, ιδιότητες, κ.λ.π.), καθώς και τις συνδεδεμένες με το αρχείο συναρτήσεις. Επιπλέον, δίνεται η - πολύ χρήσιμη - +δυνατότητα να περάσουμε ένα δείκτη, ο οποίος θα περαστεί ως παράμετρος στην συνάρτηση που κάθε φορά καλείται. Με αυτό τον τρόπο, μπορούμε να γράψουμε μια φορά +τις συναρτήσεις που καλύπτουν πολλά \"ίδια\" αρχεία του proc. + +Για παράδειγμα, προφανώς δεν χρειάζεται να γραφούν ξεχωριστές συναρτήσεις για το αρχείο /proc/parport/0/irq και /proc/parport/1/irq, αλλά οι ίδιες συναρτήσεις +καλούνται με διαφορετικό όρισμα. Ο τρόπος για να γίνει αυτό, είναι ένας δείκτης void \*, ο οποίος \"συνδέεται\" με κάθε αρχείο, και \"κουβαλάει\" ό,τι αυτό +χρειάζεται. + + +### [2. Οι δομές του proc]{#s2} + +Επειδή το καλό με το Open Source είναι το\... open source, παρατηρώντας το αρχείο linux/include/linux/proc\_fs.h, βλέπουμε τα εξής: + +- 3-4 enum τα οποία καθορίζουν σταθερές. Οι σταθερές αυτές χρησιμοποιούνται από κάποια \"αρχεία\" του proc, το ποιά είναι φανερό από την ονομασία τους. Π.χ., + οι σταθερές PROC\_\* (το πρώτο enum), είναι τα \"είδη\" των αρχείων ή καταλόγων που βλέπει κανείς ακριβώς \"κάτω\" από το σημείο που προσαρτάται το proc, + συνήθως δηλαδή στο /proc/\*. Οι σταθερές PROC\_NET\_\* βρίσκονται στο /proc/net κ.ο.κ. +- Στη συνέχεια, βλέπουμε το σημαντικό μέρος του αρχείου, την δομή `proc_dir_entry`. Κάθε αρχείο του proc είναι ουσιαστικά μια τέτοια δομή. Αναλυτικά, τα πεδία + της δομής είναι: + + **`low_ino`** + + : Στη μεταβλητή αυτή τίθεται το είδος του αρχείου, που συνήθως είναι μια από τις σταθερές που ορίζονται παραπάνω. + + **`namelen`** + + : Όπως ίσως φαίνεται, στη μεταβλητή αυτή αποθηκεύεται το μήκος του ονόματος του αρχείου. + + **`name`** + + : Πρόκειται για δείκτη σε null terminated αλφαριθμητικό, με το όνομα του αρχείου. + + **`mode`** + + : Στη μεταβλητή αυτή, καθορίζεται ο τύπος και τα permissions του αρχείου, δηλαδή το αν πρόκειται για αρχείο ή κατάλογο, αν και για ποιόν επιτρέπεται η + εγγραφή, η ανάγνωση κ.λ.π. + + **`nlink`** + + : Στη μεταβλητή αυτή αποθηκεύεται ο αριθμός των συνδεδεμένων αρχείων με αυτό το αρχείο, δηλαδή 1 αν πρόκειται για απλό αρχείο που συνδέεται μόνο με τον + κατάλογο που το περιέχει, ή 2 αν πρόκειται για κατάλογο. Στην περίπτωση αυτή, το nlink καταλόγου αυξάνει όταν προσθέτουμε αρχεία σε κατάλογο. + + **`uid`** + + : Το owner ID του αρχείου. + + **`gid`** + + : Το group ID του αρχείου. + + **`size`** + + : Το φαινομενικό μέγεθος του αρχείου, όπως αυτό φαίνεται π.χ. με την εντολή ls -l. + + **`ops`** + + : Μια δομή inode\_operations στην οποία περιέχονται δείκτες στις συναρτήσεις που χειρίζονται το inode (βλέπε κείμενα για συστήματα αρχείων) που + δημιουργείται. Στο άρθρο αυτό, δεν θα υπάρξει εκτενής περιγραφή για τη δομή αυτή και τις πιθανές χρήσεις της. Για όποιον ενδιαφέρεται, ας κοιτάξει το + linux kernel module programming guide, στο όπου γίνεται μια περιγραφή του proc, και χρησιμοποιείται η συγκεκριμένη δομή για + είσοδο. + + **`get_info`** + + : Συνάρτηση που καλείται κατά την ανάγνωση από το αρχείο και επιστρέφει το μήκος. + + **`fill_inode`** + + : Η συνάρτηση αυτή καλείται για να συμπληρώσει τη δομή inode που αντιστοιχεί στο αρχείο, και χρησιμοποιείται μόνο όταν αυτά τα δεδομένα δεν μπορούν να + καθοριστούν στατικά κατά την δημιουργία του αρχείου. + + **`next,parent,subdir`** + + : Πρόκειται για δείκτες σε δομές proc\_dir\_entry. Με το δείκτη next, δημιουργείται μια συνδεδεμένη λίστα από όλες τις εγγραφές (entries) στο proc, ενώ + χρησιμοποιώντας τους δείκτες parent και subdir, διατηρείται στη μνήμη ένα \"δένδρο\" καταλόγων για το proc. + + **`data`** + + : Όπως αναφέρθηκε και στην εισαγωγή, κατά τη δημιουργία του αρχείου θέτουμε το δείκτη αυτό ώστε να δείχνει στα δεδομένα που αντικατοπτρίζει το αρχείο, και + στη συνέχεια όταν καλλούνται οι διάφορες συναρτήσεις του αρχείου περνιέται ως παράμετρος. Έτσι, οι συναρτήσεις του αρχείου \"ξέρουν\" σε ποιά δεδομένα + αναφέρεται το αρχείο αυτό. + + **`read_proc`** + + : Συνάρτηση που καλείται όταν το αρχείο διαβάζεται. Η συνάρτηση αυτή χρησιμοποιείται για έξοδο από τον πυρήνα, και επιστρέφει (γράφει σε ένα buffer) + δεδομένα κάθε φορά που καλείται. Μια από τις παραμέτρους της συνάρτησης αυτής είναι ο δείκτης data που προαναφέρθηκε. + + **`write_proc`** + + : Συνάρτηση που καλείται κατά το γράψιμο στο αρχείο. Με τη συνάρτηση αυτή επιτυγχάνεται η είσοδος παραμέτρων προς τον πυρήνα μέσα από το σύστημα αρχείων + proc. Αυτό βέβαια γίνεται και μέσω των συναρτήσεων του inode του αρχείου, αλλά ο τρόπος αυτός είναι προτιμότερος, γιατί υπάρχει και εδώ ο μηχανισμός με + το δείκτη data, που επιτρέπει να υπάρχουν \"παρόμοια\" αρχεία. + + **`readlink_proc`** + + : Η συνάρτηση αυτή (από ότι έχω καταλάβει πάντα) καλείται όταν το αρχείο \"συνδέεται\" (link), όπως π.χ. με την εντολή ln. + + **`count`** + + : Μετρητής για την απαρίθμηση της χρήσης του αρχείου. Αυξάνει κάθε φορά που το αρχείο ανοίγεται, και μειώνεται όταν κλείνεται. + + **`deleted`** + + : Σημαία για το αν το αρχείο έχει σβηστεί. +- Μετά τον ορισμό της δομής proc\_dir\_entry, ακολουθούν ορισμοί τύπων για τους δείκτες συναρτήσεων που χρησιμοποιούνται, και δηλώνονται ορισμένες μεταβλητές + που αντιστοιχούν στα \"σίγουρα\" αρχεία του proc, όπως π.χ. η ρίζα του, οι υποκατάλογοι net, scsi, sys, pid, κ.λ.π. +- Οι επόμενες ενδιαφέρουσες δηλώσεις στο αρχείο, είναι αυτές των συναρτήσεων proc\_register και proc\_unregister. Χρησιμοποιώντας τις συναρτήσεις αυτές, + \"βάζουμε\" και \"βγάζουμε\" proc\_dir\_entries, δηλαδή αρχεία, στο και από το proc filesystem. + +Η συνέχεια του αρχείου είναι λίγο εως πολύ συγκεκριμένες δηλώσεις που χρησιμοποιούνται για τα υπάρχοντα αρχεία του proc, ή απλώς δεν τα έχω ψάξει αρκετα ;-). + +Η μέχρι τώρα επεξήγηση πρέπει να είναι αρκετή για να \"φτιάξετε\" ένα αρχείο στο proc που θα μπορεί από το να \"περιέχει\" ένα απλό \"hello world!\", μέχρι να +κάνει dump τα στατιστικά μιας tbf queueing discipline (Αυτό είναι σίγουρα ένα άλλο θέμα!). Για το πού θα πρέπει να προσθέσετε την proc\_register() γραμμή σας, +ένα πιθανό μέρος είναι η do\_basic\_setup() συνάρτηση στο αρχείο linux/init/main.c, ή η init\_module() συνάρτηση του αρχείου που θα κάνετε insmod (Αλλά κι αυτό +είναι ένα άλλο θέμα\...) + +Αν αυτή η περιγραφή σας άνοιξε την όρεξη, μπορείτε να διαβάσετε περισσότερα στον linux kernel module programmers guide, αν και οι αναφορές δεν είναι με τίποτα +εκτενείς. Στο συγκεκριμένο guide υπάρχει γενικότερη αναφορά στα modules, σε IO - device drivers κ.λ.π. Μην ξεχνάτε όμως πως ο καλύτερος οδηγός είναι ο κώδικας. +Άλλωστε γιατί ειναι τόσο σημαντικό το Open Source; + + +### [3. Std disclaimer]{#s3} + +Στο παρόν άρθρο, καταβλήθηκε προσπάθεια να περιγραφεί το σύστημα αρχείων proc, όπως το έχω καταλάβει προσωπικά από τα sources του πυρήνα, και διάφορα guides. +Δεν είμαι σίγουρος ότι οι πληροφορίες που δίνονται ανταποκρίνονται στην πραγματικότητα, και μη βασιστείτε σε αυτο :-). + diff --git a/content/articles/27/05_lfs.md b/content/articles/27/05_lfs.md new file mode 100644 index 0000000..929695f --- /dev/null +++ b/content/articles/27/05_lfs.md @@ -0,0 +1,118 @@ ++++ +title = 'To \...δικό μας Linux. Γιατί και πως μέρος 2ο' +date = '2000-10-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 27'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Συνεχίζουμε την προσπάθεια για τη δημιουργία του δικού μας Linux, μπαίνοντας στα extra προγράμματα και τις ρυθμίσεις.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Την περασμένη φορά (προηγούμενο τεύχος) είχαμε φτάσει να έχουμε ένα minimum σύστημα το οποίο κάνει boot και έχει δίκτυο, telnet, ftp, compiler (και όλα τα +απαιτούμενα tools για compile) και τα sources του πυρήνα. Αυτό το σύστημα το έχουμε και σε backup (ας το ονομάσουμε «στάδιο 2»). Τώρα πρέπει να κάνουμε το +fork\... + +**1. Forking** +------------------------------------ + +**2. Κοινός server** +------------------------------------------ + +**3. Development μηχάνημα** +------------------------------------------------- + +**4. Μεταφορά** +------------------------------------- + + +### [1. Forking]{#s1} + +Από εδώ και πέρα, αποφασίζουμε τι ακριβώς ανάγκες θα εξυπηρετεί το μηχάνημά μας.\ +Αν το μηχάνημα το «χτίζουμε» για (π.χ.) **stand-alone workstations** φοιτητών σε Πανεπιστήμιο που θα μπαίνουν Internet, θα θέλουν mail, browser, editor και +λοιπά παρόμοια προγράμματα, δεν χρειάζεται να του βάλουμε καθόλου servers και απλά θα εγκαταστήσουμε (αν τίθεται τέτοια απαίτηση για την χρήση του workstation) +τα X-windows. Μπορούμε να μην σηκώνουμε καν το inetd για παράδειγμα, και ούτε κουβέντα για Apache, sendmail, postgres/mysql, squid και λοιπά καλούδια που μας +βάζουν συνήθως οι distributions.\ +Αν το μηχάνημα το «χτίζουμε» για να εξυπηρετεί **συγκεκριμένο service** (π.χ. θα γίνει mail server) τότε απλά του εγκαθιστούμε το αντίστοιχο service και ένα +πρόγραμμα για remote access. Σε όλες τις περιπτώσεις, για remote access προτιμώ το ssh έναντι των παραδοσιακών telnet/ftp. Δεν συζητάμε καθόλου βέβαια για +r-tools εκτός αν πρόκειται το μηχάνημα να είναι backup-server (το rmt χρειάζεται rshd). Δημιουργούμε τα αντίστοιχα scripts για να σηκώνονται και να σταματάνε τα +σχετικά services, κατά τα παραδείγματα του Gerard.\ +Αν μιλάμε για περίπτωση **«τυπικού» server** που θα εξυπηρετεί web, mail, dns, μία (τουλάχιστον) βάση, ίσως news, ότι σκεφτούμε δηλαδή (κλασικά παραδείγματα +τέτοιων μηχανημάτων είναι ο tux.hellug.gr και το igloo.linux.gr, τα μηχανήματα του συλλόγου), τότε ξεκινάμε και εγκαθιστούμε όλα τα services, πολλά extra-libs, +φτιάχνουμε όλα τα scripts για startup-shutdown, ίσως ακόμα και να πρέπει να φτιάξουμε (επιτέλους;) και κάποιο inetd.conf για να ξεκινάμε τον inetd (ανάλογα με +τις απαιτήσεις πάλι), σίγουρα κάποιο cron, θα αυτοματοποιήσουμε κάποιες εργασίες\... Πολλή δουλειά.\ +Τέλος, μπορεί να θέλουμε να φτιάξουμε ένα **πλήρες development μηχάνημα**, το οποίο όπως το εννοώ εγώ είναι ένας συνδυασμός της πρώτης και τελευταίας από τις +προαναφερθείσες περιπτώσεις. Δηλαδή πολλούς servers (που θα «σηκώνουμε» κατ\' επιλογή όποιον/όποιους χρειαζόμαστε για να κάνουμε τους ελέγχους μας) και τα +X-windows με τα αντίστοιχα προγράμματα για ppp, internet, writing-tools κλπ, ότι δίνει δηλαδή ένα distribution. (τόση δουλειά για να ξαναφτάσουμε εκεί που +ξεκινήσαμε!!! :-) + +Εγώ εδώ θα ασχοληθώ με τις δύο τελευταίες περιπτώσεις, μια και είναι αυτές ακριβώς με τις οποίες ασχολήθηκα. + + +### [2. Κοινός server]{#s2} + +Εφόσον δεν χρησιμοποιούμε κάποιο standard package management software (π.χ. rpm) πρέπει να έχουμε κάποιο τρόπο, να «κρατάμε» κάπου ένα κατάλογο με το αρχεία +βάλαμε και σε ποιο σημείο. Εγώ χρησιμοποίησα το installwatch για αυτό το λόγο (και τώρα ετοιμάζομαι μα γράψω ένα απλό uninstall script που να παίρνει σαν input +τα logs του installwatch) και θα πρότεινα, για να μην βρεθείτε πιο χαμένοι από ότι ξεκινήσατε, να χρησιμοποιήσετε κι εσείς κάποιο τέτοιο πακέτο.\ +Οι servers που εγκατέστησα (όχι ότι έχει και σημασία αφού όπως είπαμε ο καθένας βάζει ότι τον εξυπηρετεί) είναι οι apache, mysql, qmail, bind, sshd, ενώ και +ένας nfs server μου φάνηκε χρήσιμος κάποια στιγμή (για να κάνω «βαριά» compiles στο άλλο, γρήγορο μηχάνημα που έχω\... το πως και γιατί στο περίπου, μπορείτε να +το βρείτε στο πρώτο-πρώτο τεύχος του magaz που ο Φώτης Γεωργάτος χρησιμοποίησε το ίδιο τρικ για να κάνει compile τον πυρήνα σε ένα μηχάνημα). Φυσικά εγκατέστησα +και ένα cron, και μια που το παραδοσιακό cron είναι αρκετά παλιό, εγκατέστησα το fcron. Προτίμησα το qmail αντί για το sendmail για λόγους ασφαλείας και επειδή +το qmail μου καλύπτει τις ανάγκες μου.\ +Τα σημαντικά (για μένα) κομμάτια είναι τα εξής: + +- Έβαλα ολόκληρα τα πακέτα σε δικά τους ξεχωριστά directory (π.χ. o apache μπήκε στο /usr/local/apache). Αυτό ήταν εύκολο για ορισμένα πακέτα (apache, inn) + και πιο δύσκολο για άλλα (mysql) ενώ για κάποια ακόμα (π.χ. ssh) δεν είχε νόημα. +- Έφτιαξα (η άλλαξα όσα υπήρχαν έτοιμα) τα startup - shutdown scripts τα οποία μπήκαν στο /etc/init.d και φτιάχτηκαν τα αντίστοιχα links στο /etc/rc.d. + +\ +Αν έχουμε ένα παράλληλο μηχάνημα με τις ίδιες ρυθμίσεις μπορούμε να κάνουμε αυτό που προτείνουν πολλοί security experts, να μην αφήσουμε δηλαδή compiler(s) στο +μηχάνημα και να αφαιρέσουμε όλα τα sources. Ένα tripwire ή ένα md5sum που το βάζουμε να \"τρέχει\" κάθε βράδυ και να μας στέλνει με mail τα αποτελέσματα για να +τα συγκρίνουμε με τα αρχικά, μας βοηθάει και μας δημιουργεί λίγο την ψευδαίσθηση ότι το μηχανάκι μας είναι ασφαλές. Εμείς πάντως κάναμε ότι έπρεπε, από αυτή τη +μεριά (γιατί υπάρχει πάντα και το θέμα του administration της βάσης, τα τυχόν cgi scripts που τρέχουν κλπ). + + +### [3. Development μηχάνημα]{#s3} + +Αυτό το οποίο χρειάζομαι πραγματικά να έχω είναι ένα development μηχάνημα, το οποίο θα χρησιμοποιώ ως εξής: + +- Στήνω όλα τα services όπως στον server. Ένα ακριβές αντίγραφο του server. Ελλείψη τρίτου μηχανήματος, το κάνω αυτό στο βασικό μου μηχάνημα. +- Περνάω επάνω ότι extra προγράμματα χρειάζομαι, όπως X-Windows, mail-client, browser, editors κλπ για να μπορώ να το δουλέψω χωρίς κανένα πρόβλημα. Τα βασικά + στα βασικά τους σημεία (π.x. τα X-Windows στο /usr/X11R6) και τα μη βασικά εκεί που θέλω (π.χ. όλα τα γραφικά προγράμματα στο /opt και όλα τα προγράμματα + κονσόλας στο /opt/local). +- Θυμάστε που είπα προηγουμένως ότι όλα τα services τα έβαλα σε δικά τους directory; Ε, όλα τα directories ήταν και στο ίδιο filesystem (/usr/local). Ένα + level 0 backup του filesystem σήμερα, και ένα differential όταν τελειώσω το development (της τυχόν εφαρμογής, ή τον έλεγχο της τυχόν νέας έκδοσης), με + καλύπτει κατά 99% για πλήρη μεταφορά στον server. Το 1% που αφήνω είναι για τυχόν περιπτώσεις που δεν μου έρχονται τώρα στο μυαλό. +- Μεταφέροντας το differential backup στον server, ξαναπαίρνω ένα level 0 backup και βρίσκομαι πάλι σε αυτό που μπορούμε να ονομάσουμε checkpoint. + +Το εν λόγω μηχάνημα λοιπόν έχει περασμένα (εκτός από τα προγράμματα του server) και τα XFree86-4.01, gtk και glib (καθώς και gnome-libs και gnome-includes της +έκδοσης 1.2), και τα υπόλοιπα desktop tools (Staroffice, Netscape, Acrobat κλπ). + + +### [4. Μεταφορά]{#s4} + +Ωραία τα φτιάξαμε αυτά και δουλέυουν. Τι κερδίσαμε; Το όλο νόημα ήταν στην αρχή να μπορούμε να το μεταφέρουμε από δω κι από κει, όποιο \"παρακλάδι\" από αυτά +που είπαμε στο τμήμα Forking θέλουμε, χωρίς πρόβλημα. E, αυτό είναι εύκολο\... + +1. Κατ\' αρχάς υπάρχει η παραδοσιακή (και πολλές φορές καλύτερη) μέθοδος με το tar. Προσοχή λίγο στις παραμέτρους (συγκεκριμένα για τα permissions) και έχετε + ένα tar image του συστήματός σας. Αν στο νέο σύστημα boot-άρετε από μία ειδική δισκέτα (π.χ. tom\'s boot disk), κάνετε mount ένα CD που έχετε το εν λόγω + image, και κάνετε untar το image στον δίσκο, το μόνο που χρειάζεται να κάνετε μετά είναι ένα chroot στον νέο δίσκο, διόρθωμα αν χρειάζεται του /etc/fstab + και /etc/lilo.conf, τρέχουμε ένα lilo και reboot. Θεωρητικά όλα είναι έτοιμα. Για να πω την αλήθεια, όχι μόνο θεωρητικά. Αυτή τη μέθοδο χρησιμοποίησα για να + αντιγράψω το βασικό \"server\" μηχάνημα στο development. +2. Υπάρχει η λύση του cluclo (cluster cloning) αν το νέο μηχάνημα έχει δίκτυο. Διαβάστε το documentation καλά κάντε τα 3-4 βήματα που λέει, και είστε έτοιμοι. +3. Κάποιος μου είπε για κάποιο πρόγραμμα με όνομα ghost που κάνει κάτι τέτοιο, αλλά είναι λέει για Windows οπότε δεν μπόρεσα να το δοκιμάσω. +4. Υπάρχει και το αντίστοιχο (ίδιο;) πρόγραμμα open source για Linux. Λέγεται Partition Image και θα το βρείτε και αυτό στο Freshmeat. Από μία σύντομη ματιά + που έριξα στο documentation, κρίνω ότι μάλλον είναι ιδιαίτερα εύχρηστο και ευέλικτο. +5. Πάντα παίζει και η λύση του dd. Βάζουμε δηλαδή τον δίσκο του νέου μηχανήματος στο παλιό μηχάνημα, και αν ο δίσκος είναι ίδιος του κάνουμε ένα dd και + τελειώνει η υπόθεση, ενώ αν οι δίσκοι διαφέρουν, παίζουμε λίγο με τα partitions και κάνουμε dd το partition. + +Όλες οι μέθοδοι που αναπτύξαμε πιο πάνω, είναι σαφώς πιο γρήγορες από μία εγκατάσταση από CD. Βέβαια έτσι κάνεις μόνο τυποποιημένες εγκαταστάσεις, αλλά μπορείς +να τις τροποποιήσεις πολύ εύκολα (μια που ξέρεις ακριβώς τι υπάρχει μέσα) και, βέβαια, πόσες φορές χρειάζεσαι μία διαφορετική εγκατάσταση απ\' ότι έκανες την +περασμένη φορά; + +Αν δεν σας φτάνουν αυτοί οι τρόποι, βρείτε κάποιον μόνοι σας. Εξάλλου, αυτή είναι η ομορφιά του Linux. + diff --git a/content/articles/28/01_editorial.md b/content/articles/28/01_editorial.md new file mode 100644 index 0000000..ce24122 --- /dev/null +++ b/content/articles/28/01_editorial.md @@ -0,0 +1,69 @@ ++++ +title = 'Editorial' +date = '2000-11-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Παπαδογιαννάκης(mailto:papas@hellug.gr)' +issue = ['Magaz 28'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μάγκας εν όψη!* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Καλώς ήρθατε στο magaz Νοεμβρίου! + +Το τι γίνεται στο περιοδικό μας είναι πρωτοφανές. Τα στατιστικά δείχνουν ότι οι επισκέψεις πληθαίνουν, πράγμα που πάει να πει οτι όλο και περισσότεροι φίλοι του +linux μας επισκέπτονται καθημερινά + +Αυτό με τη σειρά του πάει να πει ότι οι ευθύνες μας για σωστή και συνεχή ενημέρωση αυξάνονται. To Magaz έχει ξεφύγει πλέον από τη φάση που ήταν ένα απλό ezine, +φτιαγμένο από linuxάδες που σκοπό είχαν να κάνουν το κέφι τους και να βοηθήσουν την κοινότητα. Έχει πλέον εξελιχθεί σαν η πηγή που (περισσότερο αλλά όχι μόνο) +οι νέοι χρήστες linux αναζητούν λύσεις και προτάσεις που θα τους βοηθήσουν. + +Πρέπει το magaz να αλλάξει μορφή, και αυτό είναι το κύριο μέλημά μου αυτή τη στιγμή. Ένα πειραματικό magaz οργανώνεται, και θα είναι έτοιμο σε περίπου δύο +μήνες. Ενδεικτικά να αναφέρω ότι το look θα είναι πολύ πιο καλαίσθητο, και η εργονομία θα είναι από τα σημεία που θα δοθεί πολύ προσοχή. Θέλουμε το magaz να +γίνει ένα μέρος στο οποίο θα μπορείτε άνετα να ψάξετε και να **βρείτε αυτό που ψάχνετε**. + +Τα άρθρα θα είναι χωρισμένα και κατηγοριοποιημένα σε ενότητες, με το καθένα από αυτά να έχει κάποιες λέξεις κλειδιά που θα βοηθούν στην αναζήτηση και τη +θεματική κατηγοριοποίηση τους. Θα μπορείτε να ψηφίζετε για το κάθε άρθρο ξεχωριστά, και να βρείτε παρόμοια άρθρα. Οι αρθρογράφοι (επιτέλους) θα καταχωρηθούν και +θα μπορείτε να δείτε όλα τα άρθρα που έχει γράψει κάποιος συγκεκριμένος αρθρογράφος. + +Θα μπορείτε να γράφετε τις παρατηρήσεις σας για ένα άρθρο, και να κρίνετε αν είναι βοηθητικό, να συμπληρώνετε, και να βοηθάτε προς μια περισσότερο +\`\`ολοκληρωμένη\'\' εικόνα ενός θέματος. + +Θα μπορείτε να δείτε μια \"printer friendly\" έκδοση του κάθε άρθρου ώστε να μπορείτε να το τυπώσετε και επίσης να το κατεβάσετε σε ότι μορφή μπορεί να +υποστηριχτεί από την sgml. Πρακτικά όλες δηλαδή :). + +Εκτός αυτού, το περιοδικό θα μπορεί να ανανεώνεται συχνότερα, και όχι πλέον κάθε μήνα. Με αυτό τον τρόπο θα ξεφύγουμε από τα \`\`περιθώρια\'\' του ημερολογιακού +μήνα, και σταδιακά (πράγμα που νομίζω ότι τελικά θα πάρει πολύ καιρό αλλά κάποτε θα γίνει) θα προχωρήσουμε σε ένα magaz που θα έχει νέα και άρθρα (όλα φυσικά +γύρω από το linux) που θα ανανεώνονται ακόμα και καθημερινά (άρθρα να υπάρχουν!). Θα δημιουργηθεί μια mailing list όπου θα μπορείτε να γράφεστε και να λαμβάνετε +email κάθε φορά που θα ανανεώνεται το magaz. Έτσι, όσοι ενδιαφέρονται, θα μπορούν να έχουν μια συνεχή επαφή με τα νέα της Ελληνικής κοινότητας linux. + +Πληροφοριακά, το νέο magaz θα χτιστεί σε [PHP4](http://www.php.net) και [MySQL](http://www.mysql.com), και (φυσικά) όλος ο κώδικας θα είναι GPLed. + +Φυσικά, κάτι τέτοιο δεν είναι εύκολο να γίνει χωρίς τη βοήθεια από εσάς, όποιοι και αν είσαστε. Πως μπορείτε να βοηθήσετε; + +- Στέλνοντας άρθρα προς δημοσίευση. Το θέμα είναι ελεύθερο, αν και καλό θα ήταν να υπάρχει μια συνεννόηση για να αποφεύγονται καταστάσεις όπου πχ δύο άτομα να + γράφουν άρθρο για το ίδιο θέμα. Περισσότερες πληροφορίες για το πως να βοηθήσετε μπορείτε να πάρετε στέλνοντας mail στον + [αρχισυντάκτη](mailto:papas@hellug.gr) του περιοδικού. Να σας υπενθυμίσω εδώ, ότι το magaz είναι το περιοδικό **ΟΛΗΣ** της κοινότητας Linuxάδων της Ελλάδος, + και όχι δικό μου ή του Καμπριάνη ή του Μαυρογιαννόπουλου ή του Παπακώστα ή της Σανίδα ή \... είναι ΟΛΩΝ μας! +- [Στέλνοντας προτάσεις](mailto:papas@hellug.gr) για τη μορφή και το περιεχόμενο του νέου magaz. Τι θα θέλατε να δείτε; Τι θα θέλατε να υπάρχει; Τι ΔΕΝ θα + θέλατε να δείτε; +- [Στέλνοντας παρατηρήσεις](mailto:papas@hellug.gr) για τη μορφή και την εργονομία του νέου magaz. +- Στέλνοντας χρήματα για να αγοράσω επιτέλους αυτή την Porsche (αστειεύομαι). +- Ψηφίζοντας αυτό το μήνα. + +Αυτά περί της επερχόμενης αλλαγής. Ας προχωρήσουμε στα θέματα του μήνα\... + +- [Xbasic συνέχεια](02_xbasic.html)\... Πολύ καλό sequence από τον [Κώστα Τσακάλογλου](mailto:tsakf@hellug.gr). Διαβάστε το\... +- [linux VS windows](04_linuxvswin.html)\... Από τον [Ευριπήδη Παπακώστα](mailto:evris@hellug.gr). Πολυσηζητημένο; Ίσως. Απλά, μερικές φορές, είναι πολύ + δύσκολο να δούμε τα πράγματα όπως είναι, δηλαδή \`\`ΑΠΛΑ\'\'. Για περάστεεεεε. +- [Ρυθμίσεις](03_rithimis.html)\... Πως να γράψω ένα CD με το linuxι μου; Ένα κατανοητό και συνάμα βοηθητικό άρθρο από τον [Νίκο + Αποστολάκη](mailto:nickapos@agriroot.aua.gr). Επιτέλους, θα χρησιμοποιήσετε το CDR σας, για το λόγο για τον οποίο το αγοράσατε! Να καλωσορίσουμε το Νίκο τον + Αποστολάκη στην παρέα του Magaz, και ας ελπίσουμε να μας ξαναγράψει\... (άρθρο, μην αρπάζεστε) +- [Κρυπτογράφηση](05_passwd.html). Τιιιιι συμβαίνει με αυτό το θέμα; Τι είναι το passwd; Γιατί υπάρχει αυτό το shadow; Μας στοιχειώσανε το μηχάνημα οι σκιές; + Ένα πολύ κατατοπιστικό άρθρο από τον [Νίκο Μαυρογιαννόπουλο](mailto:nmav@hellug.gr), τον αιώνιο μπάκουρο :) + +[Μην ξεχάσετε να ψηφίσετε!!!](http://magaz.hellug.gr/cgi-bin/poll28.cgi). Μόνο ψηφίζοντας θα μας βοηθήσετε να σας προσφέρουμε αυτά που πραγματικά θέλετε στο νέο +magaz που έρχεται\... diff --git a/content/articles/28/02_xbasic.md b/content/articles/28/02_xbasic.md new file mode 100644 index 0000000..d370dae --- /dev/null +++ b/content/articles/28/02_xbasic.md @@ -0,0 +1,329 @@ ++++ +title = 'Xbasic' +date = '2000-11-01T00:00:00Z' +description = '' +author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)' +issue = ['Magaz 28'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία γλώσσα προγραμματισμού Basic που έχει αρκετά στοιχεία C. Μέρος 4ο* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Σχεσιακοί τελεστές** +-------------------------------------------------- + +- [1.1 Παραδείγματα χρήσης σχεσιακών τελεστών](#ss1.1) + +**2. Η εντολή IF** +------------------------------------------- + +**3. Παραδείγματα** +-------------------------------------------- + +- [3.1 Παράδειγμα 1. Εντολή IF χωρίς ELSE](#ss3.1) +- [3.2 Παράδειγμα 2 Εντολή IF μαζί με ELSE.](#ss3.2) +- [3.3 Επόμενο τεύχος](#ss3.3) + + +### [1. Σχεσιακοί τελεστές]{#s1} + +Οι σχεσιακοί τελεστές της Xbasic χρησιμοποιούνται για να συγκρίνουν μεταβλητές με σταθερές ή μεταβλητές μεταξύ τους. Π.χ. Είναι η τιμή της μεταβλητής x +μεγαλύτερη από 100; Η τιμή της μεταβλητής a είναι ίση με την τιμή της μεταβλητής d; + +Αυτοί οι τελεστές μας επιστρέφουν τιμές \$\$TRUE ή \$\$FALSE αντίστοιχα αν η σχέση ισχύει ή όχι. + +Παραθέτω παρακάτω ένα πίνακα με τους σχεσιακούς τελεστές που υπάρχουν στην Xbasic. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Μεγαλύτερο >, !<= Το x είναι μεγαλύτερο του y x>y x!<=y + Μεγαλύτερο ή ίσο >=, !< Το x είναι μεγαλύτερο ή ίσο του y x>=y x! Το x είναι μικρότερο ή ίσο του y x<=y x!>y + Μικρότερο <, !>= Το x είναι μικρότερο του y x=y + Διάφορο (όχι ίσο) <>, != Το x είναι διάφορο του y x<>y x!=y + Ισο =,== Το x είναι ίσο με το y x=y x==y + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [1.1 Παραδείγματα χρήσης σχεσιακών τελεστών]{#ss1.1} + +- 5 = 1 Είναι το 5 ίσο με το 1; \$\$FALSE +- 5 \> 1 Είναι το 5 μεγαλύτερο από το 1 \$\$TRUE +- 5 +- 1 Είναι το 5 διάφορο του 1 \$\$TRUE + + +### [2. Η εντολή IF]{#s2} + +Οι σχεσιακοί τελεστές χρησιμοποιούνται για να γίνονται οι έλεγχοι στις εντολές IF και WHILE που θα μελετήσουμε. Αυτές οι εντολές χρειάζονται για να αποφασίζεται +η εκτέλεση διαφορετικών κομματιών κώδικα, ανάλογα με το αν ισχύουν ή όχι οι σχεσιακοί τελεστές που αναφέρονται στην εντολή IF ή WHILE αντίστοιχα. Από τα +προηγούμενα παραδείγματα είδαμε ότι η εκτέλεση των προγραμμάτων γίνεται με εκτέλεση των εντολών από πάνω προς τα κάτω. Έτσι, η εντολή IF υπολογίζει το +αποτέλεσμα των σχεσιακών τελεστών και εκτελεί το κομμάτι του κώδικα αντιστοιχεί για την κάθε περίπτωση αληθές/ψευδές (\$\$TRUE/\$\$FALSE). + +Στην Xbasic η εντολή if μπορεί να έχει τις εξής μορφές: + +- IF (σχεσιακός τελεστής.) ΤΗΕΝ (εντολή 1) + + Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 + +- IF (σχεσιακός τελεστής) ΤΗΕΝ (εντολή 1) ELSE (εντολή 2) + + Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 αλλιώς αν δεν ισχύει (\$\$FALSE) τότε θα εκτελεστεί η εντολή 2 + +- IF (σχεσιακός τελεστής) ΤΗΕΝ + + (εντολή 1 + + εντολή + + εντολη) + + END IF + + Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 και όλες οι υπόλοιπες που ακολουθούν μέχρι το END IF. + +- IF (σχεσιακός τελεστής) ΤΗΕΝ + + (εντολή 1 + + εντολή + + εντολη) + + ELSE + + (εντολή 2 + + εντολή + + εντολη) + + END IF + + Αν ισχύει ο σχεσιακός τελεστής (\$\$TRUE) τότε θα εκτελεστεί η εντολή 1 και όλες οι υπόλοιπες που ακολουθούν μέχρι το ELSE αλλιώς αν δεν ισχύει ο τελεστής + (\$\$FALSE) τότε θα εκτελεστεί η εντολή 2 και όλες οι υπόλοιπες που ακολουθούν μέχρι το END IF. + + +### [3. Παραδείγματα]{#s3} + +Για να κατανοήσουμε καλύτερα την χρήση των σχεσιακών τελεστών θα δούμε δύο παραδείγματα με την εντολή IF. Στο ένα παράδειγμα θα χρησιμοποιήσουμε την εντολή IF +χωρίς το ELSE και στο επόμενο θα την χρησιμοποιήσoυμε μαζί με το ELSE. + +### [3.1 Παράδειγμα 1. Εντολή IF χωρίς ELSE]{#ss3.1} + +Ας δούμε όμως μερικά παραδείγματα. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 1. ' + 2. ' #################### + 3. ' ##### PROLOG ##### + 4. ' #################### + 5. ' + 6. PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent + 7. VERSION "0.0000" ' version number - increment before saving altered program + 8. ' + 9. ' You can stop the PDE from inserting the following PROLOG comment lines + 10.' by removing them from the prolog.xxx file in your \xb\xxx directory. + 11.' + 12.' Programs contain: 1: PROLOG - no executable code - see below + 13.' 2: Entry function - start execution at 1st declared func + 14.' * = optional 3: Other functions - everything else - all other functions + 15.' + 16.' The PROLOG contains (in this order): + 17.' * 1. Program name statement PROGRAM "progname" + 18.' * 2. Version number statement VERSION "0.0000" + 19.' * 3. Import library statements IMPORT "libName" + 20.' * 4. Composite type definitions TYPE typename ... END TYPE + 21.' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args) + 22.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args) + 23.' * 7. Shared constant definitions $$ConstantName = literal or constant + 24.' * 8. Shared variable declarations SHARED variable + 25.' + 26.' ****** Comment libraries in/out as needed ***** + 27.' + 28.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... + 29.' IMPORT "xcm" ' Complex library : complex number library (trig, etc) + 30.' IMPORT "xst" ' Standard library : required by most programs + 31.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs + 32.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs + 33.' + 34. DECLARE FUNCTION Entry () + 35.' + 36.' + 37.' ###################### + 38.' ##### Entry () ##### + 39.' ###################### + 40.' + 41.' Programs contain: + 42.' 1. A PROLOG with type/function/constant declarations. + 43.' 2. This Entry() function where execution begins. + 44.' 3. Zero or more additional functions. + 45.' + 46.FUNCTION Entry () + 47.STRING in1,in2 + 48.SSHORT num1,num2 + 49.in1=INLINE$("Number 1... ") + 50.in2=INLINE$("Number 2... ") + 51.num1=SSHORT(in1) + 52.num2=SSHORT(in2) + 53.IF num1=num2 THEN + 54. PRINT num1; " = "; num2 + 55.END IF + 56.IF num1>num2 THEN + 57. PRINT num1; " > "; num2 + 58.END IF + 59.IF num1 +αριθμός2. Αν δεν ισχύει αυτό τότε η εκτέλεση του προγράμματος θα συνεχιστεί παρακάτω χωρίς να εκτελεστεί η γραμμή 57. + +**Γραμμές 59..61**\ +Γίνεται ο έλεγχος για την περίπτωση που ο πρώτος αριθμός είναι μικρότερος. Αν αυτό ισχύει τότε στην κονσόλα της XBASIC εμφανίζεται το μήνυμα αριθμός1 \< +αριθμός2. Τότε δεν θα εκτελεστεί η γραμμή 60. + +Αυτός είναι ο απλός τρόπος να κάνουμε συγκρίσεις και λαμβάνει υπ\' όψιν του όλες τις περιπτώσεις. Έχει όμως ένα μειονέκτημα. Αν οι δύο αριθμοί είναι ίσοι τότε +θα τυπωθεί αριθμός1 = αριθμός2 όμως στην συνέχεια θα γίνουν οι επόμενες συγκρίσεις που δεν χρειάζονται. Έτσι για να βελτιστοποιήσουμε την ταχύτητα εκτέλεσης +χρησιμοποιούμε την εντολή IF μαζί με την ELSE. Παρακάτω θα δούμε πως διαφοροποιείται το πρόγραμμα με την χρήση της ELSE. + +### [3.2 Παράδειγμα 2 Εντολή IF μαζί με ELSE.]{#ss3.2} + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 1.' + 2.' #################### + 3.' ##### PROLOG ##### + 4.' #################### + . + . + . + . + . + 37.' ###################### + 38.' ##### Entry () ##### + 39.' ###################### + 40.' + 41.' Programs contain: + 42.' 1. A PROLOG with type/function/constant declarations. + 43.' 2. This Entry() function where execution begins. + 44.' 3. Zero or more additional functions. + 45.' + 46.FUNCTION Entry () + 47.STRING in1,in2 + 48.SSHORT num1,num2 + 49.in1=INLINE$("Number 1... ") + 50.in2=INLINE$("Number 2... ") + 51.num1=SSHORT(in1) + 52.num2=SSHORT(in2) + 53.IF num1=num2 THEN + 54. PRINT num1;" = ";num2 + 55.ELSE + 56. IF num1>num2 THEN + 57. PRINT num1;" > ";num2 + 58. ELSE + 59. PRINT num1;" < ";num2 + 60. END IF + 61.END IF + 62.END FUNCTION + 63.END PROGRAM + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Ανάλυση του παραδείγματος.** + +**Γραμμές 1..45 PROLOG , Γραμμές 46..62 Συνάρτηση ENTRY, Γραμμές 47,48 και οι γραμμές 49..52** + +Έχουν την ίδια ακριβώς σημασία με το προηγούμενο παράδειγμα και έτσι δεν θα ασχοληθούμε με αυτές εδώ. Στις γραμμές 53..61 φαίνεται η διαφορά στις εντολές του +παραδείγματος με το προηγούμενο, γι\' αυτό θα σταθούμε λίγο πιο αναλυτικά. + +**Γραμμές 53..55** + +Στην περίπτωση που οι δύο αριθμοί είναι ίσοι τότε θα εκτελεστεί η γραμμή 54. Η παρουσία του ELSE στην γραμμή 55 που σημαίνει ότι αν δεν ισχύει η ισότητα τότε θα +εκτελεστεί ο κώδικας που βρίσκεται ανάμεσα στις γραμμές 56..61 αναγκάζει το πρόγραμμα να συνεχίσει την εκτέλεση στην γραμμή 62. Με αυτόν τον τρόπο αποφεύγουμε +τις υπόλοιπες συγκρίσεις. + +**Γραμμές 56..58** + +Αν ο αριθμός1 είναι μεγαλύτερος, τότε θα εκτελεστεί η γραμμή 57. Η παρουσία του ELSE στην γραμμή 58 που σημαίνει ότι αν ο αριθμός1 δεν είναι μεγαλύτερος τότε θα +εκτελεστεί η εντολή στην γραμμή 59 αναγκάζει το πρόγραμμα να συνεχίσει την εκτέλεση .στην γραμμή 61.Έτσι ανάλογα με το αν ο αριθμός1 είναι μεγαλύτερος ή όχι +εκτελείται η γραμμή 57 ή η γραμμη 61 αντίστοιχα. + +Για να ανακεφαλαιώσουμε τα παραπάνω επιγραμματικά έχουμε: + +**Πρώτο παράδειγμα** + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + IF num1=num2 THEN + . + END IF + IF num1>num2 THEN + . + END IF + IF num1num2 THEN + . + ELSE + .. + END IF + END IF + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Εδώ τώρα, ανάλογα με τις τιμές των μεταβλητών θα εκτελεστούν. + +- Αν οι δύο αριθμοί είναι ίσοι γίνεται η πρώτη σύγκριση και παραλείπονται τα υπόλοιπα +- Αν ο πρώτος αριθμός είναι μεγαλύτερος τότε γίνονται και οι δύο συγκρίσεις num1=num2 και num1\>num2. +- Αν ο πρώτος αριθμός είναι μικρότερος τότε πάλι γίνονται οι δύο συγκρίσεις num1=num2 και num1\>num2. + +Όπως βλέπουμε στο πρώτο παράδειγμα γίνονται πάντα τρεις συγκρίσεις; ενώ στο δεύτερο γίνονται μία ή και δύο. Είναι φανερό πια γιατί προτιμάμε να χρησιμοποιούμε +το ELSE από το να κάνουμε διαδοχικές συγκρίσεις. Γράφουμε μικρότερο και ταχύτερο κώδικα. + +### [3.3 Επόμενο τεύχος]{#ss3.3} + +Στο επόμενο, θα αναλύσουμε τις συναρτήσεις στην XBasic. Θα πούμε ποιός είναι ο σκοπός τους, πως δημιουργούνται, και πως τις χρησιμοποιούμε. Θα αναλύσουμε επίσης diff --git a/content/articles/28/03_rithimis.md b/content/articles/28/03_rithimis.md new file mode 100644 index 0000000..01d7ca5 --- /dev/null +++ b/content/articles/28/03_rithimis.md @@ -0,0 +1,240 @@ ++++ +title = 'CD Recording' +date = '2000-11-01T00:00:00Z' +description = '' +author = 'Νίκος Αποστολάκης(mailto:nickapos@agriroot.aua.gr)' +issue = ['Magaz 28'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Βήματα και μεθόδοι που ακολουθούμε για να γράψουμε ένα cd απο το Linux.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. DISCLAIMER** +-------------------------------------------- + +**2. Ρυθμίσεις του πυρήνα του Linux για να γράψουμε ένα cd.** +---------------------------------------------------------------------------------------- + +- [2.1 Η θεωρία](#ss2.1) +- [2.2 Τα modules](#ss2.2) +- [2.3 Ειδικές περιπτώσεις όσον αφορά το module loading and unloading.](#ss2.3) + +**3. Δημιουργία και έλεγχος του iso-image.** +----------------------------------------------------------------------- + +- [3.1 Δημιουργία του iso-image.](#ss3.1) +- [3.2 Έλεγχος του iso-image.](#ss3.2) + +**4. Το κάψιμο του cd.** +--------------------------------------------------- + +- [4.1 Η εντολή](#ss4.1) +- [4.2 Επεξήγηση παραμέτρων](#ss4.2) + +**5. Ειδικές ρυθμίσεις για την εγγραφή multisession cd.** +------------------------------------------------------------------------------------ + +- [5.1 Γενικά](#ss5.1) +- [5.2 Έλεγχος του προηγούμενου session και δημιουργία του image.](#ss5.2) +- [5.3 Εγγραφή του session](#ss5.3) + +**6. Βιβλιογραφία** +---------------------------------------------- + + +### [1. DISCLAIMER]{#s1} + +Δεν φέρω καμία ευθύνη για τυχόν ζημίες που θα προκληθούν στο μηχάνημα σας απο την εφαρμογή των παρακάτω. Εάν αποφασίσετε να ακολουθήσετε τα παρακάτω το κάνετε +με δική σας ευθύνη. + + +### [2. Ρυθμίσεις του πυρήνα του Linux για να γράψουμε ένα cd.]{#s2} + +### [2.1 Η θεωρία]{#ss2.1} + +Κατ\' αρχάς για να επιτύχουμε την εγγραφή του cd στο Linux πρέπει να ενεργοποιήσουμε την υποστήριξη για SCSI που έχει το Linux. Εάν το cdwriter που έχουμε δεν +είναι SCSI ακόμη και τότε θα πρέπει να ενεργοποιήσουμε το λεγόμενο SCSI emulation. + +Η δική μου περίπτωση είναι η δεύτερη. + +### [2.2 Τα modules]{#ss2.2} + +Εδώ θα ήθελα να αναφέρω ότι όσον αφορά το configuration του πυρήνα προτιμώ να βάζω μέσα στον πυρήνα τα απολύτως απαραίτητα και να φτιάχνω τα υπόλοιπα σαν +modules. + +Θεωρούμε ότι έχετε ρυθμίσει τον πυρήνα ώστε να μπορείτε να χρησιμοποιείτε το cdrom και να διαβάζετε iso-9660 filesystems. + +Για να ενεργοποιήσουμε το SCSI emulation πρέπει να απαντήσουμε Y ή M στην επιλογή scsi emulation support, στο SCSI generic support επίσης Y ή M και το ίδιο και +στο SCSI cdrom support. Αφότου ενεργοποιήσουμε το SCSI emulation μπορούμε πια να αναφερόμαστε στις IDE συσκευές μας σα να ήταν SCSI. + +### [2.3 Ειδικές περιπτώσεις όσον αφορά το module loading and unloading.]{#ss2.3} + +#### Eνδιαφέρουσες περιπτώσεις. + +Κατά την ρύθμιση του πυρήνα μπορούν να προκύψουν κάποιες ενδιαφέρουσες περιπτώσεις. + +- Η πρώτη περίπτωση είναι να έχετε επιλέξει το **SCSI emulation** ώστε να γίνει compile μέσα στον πυρήνα (όχι σαν module). Σε αυτή την περίπτωση αν έχετε + επιλέξει την υποστήριξη για **IDE cd-rom drives** ώστε να γίνει compile μέσα στον πυρήνα τότε δεν θα μπορείτε να χρησιμοποιήσετε το cdwriter για την + εγγραφή cd. Αυτό συμβαίνει γιατί όπως αναφέρεται στο documentation του πυρήνα όταν έχετε επιλέξει υποστήριξη για **IDE cd-rom** και **SCSI emulation** τότε + αυτόματα χρησιμοποιείται το default δηλαδή εδώ το IDE cd-rom. Το ίδιο αποτέλεσμα και για τους ίδιους λόγους θα έχετε και όταν επιλέξετε το **IDE cd-rom + drive support** σαν build-in στον πυρήνα και το **SCSI emulation** σαν module. +- Η δεύτερη περίπτωση είναι να έχετε επιλέξει και στις δύο επιλογές **Module**. Τότε θε πρέπει να παίζετε με τις εντολές **lsmod** , **rmmod** , **insmod** ή + **modprobe** προκειμένου να μπορέσετε να κάνετε load τα modules που χρειάζονται για το **SCSI emulation** και unload τα modules που χρησιμοποιούνται απο το + IDE cd-rom. +- Η τρίτη περίπτωση είναι να έχετε επιλέξει μόνο το SCSI emulation είτε build-in στον πυρήνα είτε σαν module και να έχετε επιλέξει **Module** στο **IDE cd-rom + support**. Σε αυτή την περίπτωση θα βλέπετε όλα τα cd-rom drives σας σαν SCSI και θα μπορείτε να χρησιμοποιείτε το cdwriter άμεσα. + +#### Αποτελέσματα + +Εάν όλα είναι εντάξει τότε η εντολή **cdrecord -scanbus** μας δείχνει τις SCSI συσκευές που υπάρχουν στο σύστημα. Εγώ προσωπικά έχω δοκιμάσει και τα δύο +τελευταία configurations για σχετικά μεγάλα χρονικά διαστήματα με εξίσου καλά αποτελέσματα όσον αφορά την εγγραφή των cd\'s. + +Όταν είχα το configuration μόνο για **SCSI emulation** είχα κάποια προβλήματα στο **audio-ripping** αλλά δεν έχω διαπιστώσει αν γι\'αυτο ήταν υπεύθυνο το +configuration ή το drive μου που είναι αρκετά παλιό και σχετικά προβληματικό. + + +### [3. Δημιουργία και έλεγχος του iso-image.]{#s3} + +### [3.1 Δημιουργία του iso-image.]{#ss3.1} + +#### Η εντολή + +Φτιάχνουμε το **iso-image** με το **mkisofs**. Η εντολή που δίνουμε είναι η παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + mkisofs -r --o iso-image firstdir/ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#### Επεξήγηση παραμέτρων + +- Η παράμετρος **-r** χρησιμοποιείται για να προσθέσει τα **Rockridge extensions** στο iso-image. +- Η παράμετρος **-o** χρησιμοποιείται για να δηλώσει ο χρήστης το όνομα του αρχείου που θα αποθηκευτεί η έξοδος του **mkisofs** δηλαδή το **iso-image**. +- Το **firstdir/** αποτελεί το directory εισόδου του **mkisofs** δηλαδή το directory απο το οποίο το **mkisofs** θα ξεκινήσει να διαβάζει ώστε να δημιουργήσει + το iso-image. Το directory αυτο δεν θα φαίνεται όταν γραφεί το cd και θα αντικατασταθεί απο το root directory του cd. + +### [3.2 Έλεγχος του iso-image.]{#ss3.2} + +#### Η εντολή + +Για να ελέγξουμε εάν το **iso-image** που δημιουργήσαμε είναι αυτο που επιθυμούμε, δεν έχει λάθη κ.τ.λ. χρησιμοποιούμε τα λεγόμενα **loopback devices**. Έτσι η +εντολή που δίνουμε είναι η παρακάτω : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + mount -t iso9660 -o ro,loop=/dev/loop0 iso-image /cdrom + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#### Επεξήγηση παραμέτρων + +- Η παράμετρος **-t** δηλώνει τον τύπο του filesystem που θέλουμε να προσαρτήσουμε. +- Η παράμετρος **-o** δηλώνει με τι επιλογές θέλουμε να προσαρτήσουμε το iso-image και σε ποιό loopback device. +- Τέλος προσδιορίζουμε σε ποιό directory θέλουμε να προσαρτήσουμε το **iso-image**. + +Αφού προσαρτήσουμε το **iso-image** μπορούμε να πάμε στο directory που επιλέξαμε να γίνει η προσάρτηση και να ελέγξουμε αν όλα είναι εντάξει. + + +### [4. Το κάψιμο του cd.]{#s4} + +### [4.1 Η εντολή]{#ss4.1} + +Η εντολή που χρησιμοποιούμε είναι η παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + cdrecord -v -multi -eject speed=2 dev=0,0 iso-image + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [4.2 Επεξήγηση παραμέτρων]{#ss4.2} + +- Η παράμετρος -v χρησιμοποιείται ώστε το **cdrecord** να τυπώνει αναλυτικά το στάδιο στο οποίο βρίσκεται το γράψιμο του cd. +- Η επιλογή **speed=2** δηλώνει την ταχύτητα της εγγραφής. +- Η επιλογή **dev=0,0** δηλώνει την συσκευή μέσω της οποίας θα γίνει η εγγραφή (στο pc μου αυτή είναι η dev=0,0) σε άλλα μηχανήματα θα είναι διαφορετική. +- Η επιλογή **-multi** χρησιμοποιείται για την δημιουργία **multisession cd**. +- Η επιλογή **-eject** χρησιμοποιείται για να γίνει eject μόλις τελειώσει η εγγραφή. + + +### [5. Ειδικές ρυθμίσεις για την εγγραφή multisession cd.]{#s5} + +### [5.1 Γενικά]{#ss5.1} + +Παρακάτω περιγράφεται η διαδικασία για την δημιουργία ενός **multisession cd**. Για την εγγραφή του πρώτου session αρκεί η παραπάνω διαδικασία με την επιλογή +**-multi** κατά την εγγραφή του cd. + +### [5.2 Έλεγχος του προηγούμενου session και δημιουργία του image.]{#ss5.2} + +#### Έλεγχος του προηγούμενου session. + +Αρχικά πρέπει να πάρουμε πληροφορίες για το sector που έχει σταματήσει το προηγούμενο session. Η εντολή που χρησιμοποιούμε είναι η παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + cdrecord -msinfo dev=0,0. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το output της εντολή αυτής είναι δύο αριθμοί της μορφής **xx,yy**. + +Εννοείται βέβαια ότι για να πάρουμε αυτές τις πληροφορίες θα πρέπει το cd στο οποίο θα προστεθεί το νέο session να είναι μέσα στο drive. + +#### Δημιουργία του image + +Για να φτιάξουμε το iso-image χρησιμοποιούμε και πάλι το mkisofs και η εντολή που δίνουμε είναι η παρακάτω + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + mkisofs -o cd-image -R --C xx,yy -M /dev/cdwriter firstdir/ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η επεξήγηση των παραμέτρων της εντολής ακολουθεί παρακάτω: + +- Η παράμετρος **-o** καθορίζει το όνομα του αρχείου στο οποίο θα γραφεί το iso image. +- Η παράμετρος **-R** προσθέτει στο **iso image** τα **Rockridge extensions**. +- Η παράμετρος **-C xx,yy** προσδιορίζει δύο αριθμούς. Ο πρώτος αντιστοιχεί στο πρώτο sector number του τελευταίου session του cd στο οποίο θα προστεθεί το + image που θα φτιάξουμε και ο δεύτερος στο πρώτο sector number του νέου session. Οι αριθμοί **xx,yy** δίνονται ακριβώς με την σειρά που βγαίνουν απο το + **cdrecord -msinfo dev=0,0**. +- Η παράμετρος **-M /dev/cdwriter** προσδιορίζει την συσκευή απο την οποία θα διαβαστούν πληροφορίες για το **iso image** στο τέλος του οποίου θα προστεθεί το + **iso image** που εμείς θα δημιουργήσουμε. Στην περίπτωση μας η συσκευή αυτή είναι το cdwriter που στο pc μου είναι η συσκευή **/dev/sr0**. +- Η παράμετρος **firstdir/** έχει περιγραφεί παραπάνω. + +#### Έλεγχος του iso image + +Η γενική ιδέα του ελέγχου του **iso image** είναι η ίδια όπως και παραπάνω όμως υπάρχει μια μικρή (σχετικά) διαφορά. Έτσι για να μπορέσουμε να ελέγξουμε το +**iso image** θα πρέπει να φτιάξουμε ένα άλλο **iso image** με την παρακάτω εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + mkisofs -o iso-image1 -R --C xx,0 -M /dev/cdwriter firstdir/. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η εντολή αυτή είναι η ίδια με την προηγούμενη απλά εδώ το **iso image** θα είναι φτιαγμένο έτσι ώστε το πρώτο του sector number να είναι μηδέν. + +Τώρα μπορούμε να το κάνουμε mount κατά τα γνωστά με τις **loopback devices**. + +### [5.3 Εγγραφή του session]{#ss5.3} + +Η εγγραφή του session γίνεται κατα τα γνωστά με την εντολή : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + cdrecord -v -multi -eject speed=2 dev=0,0 iso-image + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [6. Βιβλιογραφία]{#s6} + +- Το σχετικό howto. +- Τα manuals των εντολών mkisofs, cdrecord, lsmod , rmmod , insmod, modprobe. +- Το documentation του πυρήνα. +- Το Internet. + diff --git a/content/articles/28/04_linuxvswin.md b/content/articles/28/04_linuxvswin.md new file mode 100644 index 0000000..d429886 --- /dev/null +++ b/content/articles/28/04_linuxvswin.md @@ -0,0 +1,233 @@ ++++ +title = 'Linux VS Windows' +date = '2000-11-01T00:00:00Z' +description = '' +author = 'Ευριπήδης Παπακώστας(mailto:evris@hellug.gr)' +issue = ['Magaz 28'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Κοινωνική διάσταση ενός ακύρηχτου πολέμου (ή εναλλακτικά \"Νίκησε και εσύ στα flamewars Linux εναντίον Windows.Μπορείς\").* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Γενικά\...** +---------------------------------------------- + +**2. Οπλοστάσια** +---------------------------------------------- + +- [2.1 \...των χρηστών windows](#ss2.1) +- [2.2 \...των χρηστών Linux](#ss2.2) +- [2.3 Προσωπικά](#ss2.3) + +**3. Γενικές παραδοχές** +----------------------------------------------------- + +- [3.1 Νέο μοντέλο συνεργασίας.](#ss3.1) +- [3.2 Ισα δικαιώματα και ευκαιρίες](#ss3.2) +- [3.3 Μονοπώλια stop](#ss3.3) +- [3.4 Η κλοπή είναι κακό πράγμα](#ss3.4) +- [3.5 Λήξη χρόνου](#ss3.5) + + +### [1. Γενικά\...]{#s1} + +Τον τελευταίο καιρό νοιώθω πως βρίσκομαι σε ένα συνεχές deja-vu (=η αίσθηση πως κάτι το έχεις ξαναζήσει, ξαναβιώσει ακριβώς όπως συμβαίνει τώρα, σαν να βλέπεις +ένα replay από την ζωή σου). + +Έχει να κάνει με ένα πολύ συγκεκριμένο θέμα. Την επαναλαμβανόμενη συζήτηση (σε ανύποπτο χρόνο, με διαφορετικούς ανθρώπους, από διαφορετικά μέσα) σχετικά με το +πολύ πιασιάρικο και μοδάτο (τελευταίως) ζήτημα **\"Linux εναντίον Windows\"**. + +Πρώτα πρώτα, έχω παρατηρήσει πως το θέμα αυτό απασχολεί ολοένα και περισσότερο στήλες άλλων -ευρύτερης ύλης και γενικότερου προσανατολισμού- περιοδικών (για +παράδειγμα τη στήλη του **Νίκου Δήμου στο RAM** και αποτελεί ένα από τα κύρια θέματα της αλληλογραφίας των αναγνωστών. Οι αναγνώστες νοιώθουν την ανάγκη να +υποστηρίξουν το αγαπημένο τους λειτουργικό (με βάσιμα ή μη επιχειρήματα). Το έντυπο **flamewar** πουλάει. Ο αρθρογράφος έχει έναν εύκολο τρόπο να διακτινίσει +τον εαυτό του σε έναν χώρο (Linux) στον οποίο μέχρι κάποια στιγμή δεν υπήρχε, από την πίσω πόρτα. Η στήλη με μαγικό τρόπο αυτοσυμπληρώνεται και ο αρθρογράφος +της απεμπλέκεται από μέρος της δουλειάς του. + +Ομως, η ίδια καρμπόν κατάσταση ισχύει και στις τετ α τετ συζητήσεις με διάφορα άτομα του χώρου (συνήθως κατά τη διάρκεια άπειρων καφέδων). Ομοίως και στο +Internet: ηλεκτρονικές λίστες, web forums, emails. Εδώ τα πράγματα είναι 10 τάξεις μεγέθους πιο επιθετικά και πιο προσβλητικά. Βλέπετε, το mail είναι απρόσωπο +(ίσως και ανώνυμο) και καθένας μπορεί να παρεξηγήσει τους συνομιλητές του. + +Στην όλη αυτή \*διαμάχη\* πρωταγωνιστές είναι συνήθως οι νεώτεροι (ηλικιακά αλλά και σε εξοικείωση με τα λειτουργικά) χρήστες Η/Υ. + +Μπορώ πλέον να κοιτάξω κάποιον από μακριά και να ξέρω τι θα πει για το θέμα, με ποια σειρά, τι θα απαντήσω, τι θα ανταπαντήσει, πότε να φέρω στην επιφάνεια την +τάδε τεχνική ερώτηση παγίδα, πως θα γλυτώσει. Σε λίγο καιρό, ο καθένας έχει χτίσει ένα τέτοιο οπλοστάσιο και η συζήτηση είναι ακριβώς σαν και αυτές μεταξύ +Παναθηναϊκών και Ολυμπιακών. + +Η άποψη του καθενός είναι σεβαστή και πρέπει να να ακούγεται, να υποστηρίζεται (και μάλιστα και με θέρμη). Όμως είναι αληθινά πολύ ρηχό (στα όρια της +γηπεδοποίησης) να εκφυλίζεται η συζήτηση σε τέτοια κλισέ κανάλια που δεν οδηγούν σε εποικοδομητική κατάληξη. + + +### [2. Οπλοστάσια]{#s2} + +### [2.1 \...των χρηστών windows]{#ss2.1} + +Από τη μια λοιπόν, έχουμε τους χρήστες των windows που προτάσουν ως όπλα τα εξής: + +- Η ευχρηστία των Windows +- η έλλειψη drivers στο Linux +- πρωτόγονα Linux GUIs +- Μόνο στα Windows βρίσκω τα εργαλεία που χρειάζομαι για την δουλειά μου. +- Κλοπή Windows=μαγκιά +- Linux=κόλλημα +- Οι φίλοι, που προμηθεύουν με το παράνομο λογισμικό (άρα και τα Windows τζάμπα είναι +- Windows προεγκατεστημένα και προπληρωμένα (τι κερδίζω;) +- Το Linux είναι για power users, εγώ θέλω να μην ταλαιπωρηθώ για απλές δουλειές. +- Πως θα διαβάζω τα .doc; +- Αν δεν υπήρχαν τα Windows δεν θα ήξερε ο κόσμος πληροφορική. +- Στατιστικά, ρυθμών ανάπτυξης της MS, benchmarks. + +### [2.2 \...των χρηστών Linux]{#ss2.2} + +Από την άλλη μεριά, οι χρήστες Linux έχουν να λένε: + +- Σταθερότητα του Linux. +- Δωρεάν κώδικας και λογισμικό. +- δυνατότητα τροποποίησης. +- Μόνο στο Linux βρίσκω τα εργαλεία που χρειάζομαι για την δουλειά μου. +- Linux=μαγκιά, Windows=αρτηριοσκλήρωση. +- Πριν βγουν τα Windows υπήρχε το Internet, οι εκτυπώσεις βιβλίων, το Desktop Publishing, η επεξεργασία εικόνας, τα γραφικά, το GUI. Τι ακριβώς λοιπόν + προσέφεραν; +- Αν δεν υπήρχαν τα Windows ο κόσμος θα ήξερε Πληροφορική. +- Χιλιάδες στατιστικά, ρυθμών ανάπτυξης του Linux, benchmarks + +### [2.3 Προσωπικά]{#ss2.3} + +Ως Linuxας φυσικά και θέλω στο τέλος του \"ματς\" το Linux να έχει κερδίσει τις εντυπώσεις. Δεν θέλω όμως να δώσω την μάχη με τεχνικά, οικονομικά και ιστορικά +στοιχεία. (Εδώ που τα λέμε, ουσιαστικά δεν υφίσταται καν μάχη). + +Κατ\' εμέ, τέτοιες συζητήσεις θα πρέπει να έχουν εντελώς **άλλο προσανατολισμό**. Κάθε προϊόν που έχει την διάδοση των Windows (τολμώ να πω και του Linux) δεν +μπορεί να εξετάζεται στενά με κριτήρια τύπου \"εγώ κάνω αυτό, μου προσφέρει εκείνο, δεν μπορώ να κάνω το άλλο\" και μόνο, αλλά ευρύτερα με βάση το γενικότερο +κοινωνικό καλό. (Υποστηρίζουμε πως η Πληροφορική είναι η νέα επανάσταση που επηρεάζει κοινωνικοοικονομικά τον κόσμο όλο, έτσι;;). + +Σε τέτοια πλαίσια κανείς δεν μπορεί να αρνηθεί μερικά προφανή πράγματα\... + + +### [3. Γενικές παραδοχές]{#s3} + +Ναι, υπάρχουν μερικά προφανή πράγματα, που κανένας δεν μπορεί να τα αρνηθεί + +### [3.1 Νέο μοντέλο συνεργασίας.]{#ss3.1} + +Η μοναδικότητα του Linux (και όχι μόνο αυτού, γιατί όπως μονοπωλεί τις συζητήσεις, τείνει να πνίξει άλλες υπέροχες προσπάθειες και λειτουργικά) έγκειται στο +ριζικά επαναστατικό τρόπο συνεργασίας, σχεδιασμού, ανάπτυξης, διόρθωσης, διανομής λογισμικού που έχει εδραιώσει. Δεν έχει να κάνει με το αν το προϊόν είναι +καλό. Στην παρούσα φάση μπορεί να είναι χειρότερο ή και καλύτερο από άλλα υπάρχοντα. Το μόνο σίγουρο όμως είναι πως με την εμπλοκή και άλλων ατόμων σε επίπεδο +χρήστη ή κωδικογράφου ή tester μόνο να βελτιωθεί μπορεί. + +Χρησιμοποιώντας Linux είτε ως hobby είτε επαγγελματικά συμμετέχετε έστω και εν αγνοία σας σε μια ζωντανή κοινότητα. Ακόμα και να μην μιλήσετε ποτέ με αυτούς +τους ανθρώπους και να μην τους βοηθήσετε συνειδητά, και πάλι συμμετέχετε. + +Ίσως κάποιο ποσό από τη διανομή που αγοράσατε να μεταγγίζεται ως δωρεά σε ένα από τα projects της κοινότητας. Ίσως αν απλά κατεβάσατε το CD από το δίκτυο, το +μποτιλιάρισμα στις γραμμές που διαθέτουν να τους κάνει να βρουν πιο γρήγορους τρόπους να το προσφέρουν. Ίσως να ρωτήσατε μια απορία σε μια λίστα και να πήραν +κουράγιο πως προσφέρουν όντως βοήθεια ή να αποθαρρύνθηκαν μια που τσακωθήκατε. Πάντως ο ρόλος σας δεν είναι εντελώς ουδέτερος. + +Στην αντίθετη περίπτωση, η κοινωνική σας συνεισφορά είναι για όλους παντελώς ανύπαρκτη. Το αν είσαστε πελάτης του μεν ή του δε καταστήματος δεν αφορά κανέναν +άλλον εκτός από εσάς. + +'λλο το να μετέχεις ενεργά σε μια ερασιτεχνική ομάδα ποδοσφαίρου (ακόμα και στην χειρότερη που υπάρχει), να παίζεις μπάλα στο γήπεδο, να κάνεις δωρεές για να +επιβιώσει, να διαθέτεις τα απογεύματά σου κάνοντας τον εμπειροτέχνη προπονητή της και άλλο να είσαι απλά ένα εισιτήριο διαρκείας της μεγάλης κερδοσκοπικής +εταιρείας Μάντσεστερ. Αυτό δεν έχει καμμία κοινωνική προσφορά. Και να έφτασε κάποιος να θεωρεί σκοπό της ζωής του το να υποστηρίζει έναν κερδοσκοπικό οργανισμό +με πάθος αγγίζει τα όρια της αρρώστιας. + +**Κοινωνία εναντίον Εταιρείας λοιπόν 1-0.** + +### [3.2 Ισα δικαιώματα και ευκαιρίες]{#ss3.2} + +**\"Η πληροφορία είναι δύναμη\", \"γνώση προσιτή σε όλους\", \"ίσες ευκαιρίες στην μόρφωση, στην εκπαίδευση\"**. Όλα αυτά τα κλισέ πραγματάκια που κατά καιρούς +πίστεψαν μερικοί, και ίσως να θυσίασαν πολλά για να τα διασφαλίσουν. + +Το Linux είναι **ακριβώς αυτό**. Κάθε τι που γράφετε και βγαίνει σε μορφή **GPL** πλέον ανήκει σε όλους. Κάθε αλγόριθμος που επινοήθηκε που κατασκευάστηκε και +που ελευθερώθηκε ως δώρο στην κοινωνία της Πληροφορικής είναι ελεύθερο αγαθό για πάντα. Να το αλλάξουν, να το διαβάσουν, να το πουλήσουν, να το χαρίσουν, να +χτίσουν πάνω του. + +Δεν νομίζω ότι κανείς ενδιαφέρεται τώρα πια για το αν πληρώθηκε ο **Πυθαγόρας** ή ο **Ομηρος** ή ο **Μπαχ** για την δουλειά του. Αυτό που μετράει είναι ότι τώρα +**η δουλειά τους υπάρχει για όλους ανεξαιρέτως**. Οχι μόνο για τα μέλη κάποιου prive club. + +Δεν μπορεί κάποιος να έχει το δικαίωμα χρήσης του Θεωρήματος του Πυθαγόρα, σε προνομιακή φοιτητική τιμή, ή για δέκα θέσεις εργασίας και ο διπλανός του να +απαγορεύεται να το χρησιμοποιεί. Είναι τρομακτικό κόστος για την κοινωνία να περιμένει έναν ακόμα Μπαχ, για να ξαναεφεύρει παραπλήσια πράγματα σε άλλη τιμή, με +άλλη συσκευασία. + +Θα μου πείτε τι άλλη λύση υπάρχει; Πλέον η έρευνα απαιτεί δαπάνη κεφαλαίων που δεν μπορεί κανείς πελάτης να επωμιστεί μεμονωμένα. Γιαυτό και το χαράτσι ανά +κεφάλι, ανά μήνα, ανά upgrade, ανά ηλικία, ανά προϊόν. + +Ευτυχώς πολύς κόσμος έχει επιχειρήματα για το ακριβώς αντίθετο. + +Πρώτον η ύπαρξη του **δωρεάν free λογισμικού** (που τις περισσότερες φορές είναι ποιοτικά τουλάχιστον συγκρίσιμο) αποδεικνύει πως το κόστος δεν είναι και τόσο +μεγάλο. Δεύτερον, κανείς δεν είπε να μην πληρωθεί κάποιος για την δουλειά του. + +**Σενάριο 1:** η πρώτη ομάδα πελατών που και πραγματικά χρειάζεται το προϊόν επωμίζεται πλήρως το κόστος. Μετά το πέρας κάποιου διαστήματος (ώστε και οι πελάτες +να κάνουν με την σειρά τους την απόσβεσή τους) ο κώδικας απελευθερώνεται και γίνεται κτήμα όλων. + +**Σενάριο 2:** Το κόστος μοιράζεται σε όλους **από την αρχή, εφάπαξ**. Οργανωμένα, μέσω sites χρηματοδότησης ανάπτυξης λογισμικού το κόστος αναλαμβάνει η +κοινότητα. Οι developers πληρώνονται ακριβώς όσο κοστολόγησαν την δουλειά τους, και αυτή είναι πλέον διαθέσιμη σε όλους. + +Οικονομία δυνάμεων λοιπόν, μυαλών, κεφαλαίων, αποδέσμευση από απίστευτους περιοριστικούς όρους, ίσες ευκαιρίες και έχουμε ένα εύκολο **Κοινωνία εναντίον +Εταιρείας 2-0 στον αιφνιδιασμό.** + +### [3.3 Μονοπώλια stop]{#ss3.3} + +Οι μονοπωλιακές καταστάσεις είναι επιβλαβείς για την οικονομία και την κοινωνία. Η εξήγηση είναι προφανής για τον αναγνώστη μας\... + +Η προστασία μας είναι και κρατικό ζήτημα (αν το Χ κράτος το αποφασίσει και μπορεί να το επιβάλλει σε εύλογο διάστημα). Καλό θα ήταν όμως να υπάρχουν και άλλες +εναλλακτικές ασφαλιστικές δικλείδες. Δεν πρέπει ο κόσμος να εξαρτάται αποκλειστικά από το αν κάποιος δικαστής υποχρεώσει (λίγο πριν τις καλοκαιρινές του +διακοπές) κάποια εταιρεία να διχοτομηθεί και να αναρτήσει άλλη ταμπέλα, αριστερά και δεξιά μιας νοητής διαχωριστικής γραμμής εντός του κτηρίου της. + +Με το Linux πλέον φαίνεται πως o κίνδυνος μονοπώλιου ελαχιστοποιείται. Όποιος θέλει μπορεί πάντα να έχει πρόσβαση σε ένα λειτουργικό σύστημα και κάποιες +εφαρμογές. Μπορεί πάντα να διαβάσει και να μάθει από τον κώδικα του πως είναι αυτά τα λειτουργικά. Δεν είναι κάποιο κρυφό μαγικό φίλτρο του Φύλαρχου του χωριού. + +**Κοινωνία εναντίον Εταιρείας 3-0 με καταπληκτικό ψαλιδάκι.** + +### [3.4 Η κλοπή είναι κακό πράγμα]{#ss3.4} + +Συνήθως αυτό υποστηρίζουν τα έννομα κράτη. Το δικαστήριο, οι νομοθετικές αρχές και οι αστυνομικές αρχές δαπανούν πολύ από το χρόνο και τους πόρους τους πάνω σε +αυτήν την κατεύθυνση. + +Η χώρα μας έχει ακόμα μια θλιβερή επίδοση στη διάδοση του παράνομου λογισμικού (νομίζω έρχεται πρώτη σε Ευρωπαϊκό επίπεδο). Η BSA είναι ένας οργανισμός που δρα +υποβοηθητικά στην πάταξη της κλοπής προϊόντων λογισμικού. Σε συνεργασία με τις εισαγγελικές αρχές προσπαθεί να προασπίσει τα συμφέροντά των μελών και πελατών +της (η **MS** όπως και πολλές άλλες εταιρείες λογισμικού είναι τέτοιοι). + +Το παράδοξο εδώ είναι το εξής. Ενώ σε οποιαδήποτε περίπτωση στην οποία ήσασταν μάρτυρας μιας κλοπής αυτοκινήτου το πιθανότερο είναι να τηλεφωνούσατε στην +αστυνομία και να το αναφέρατε, στην κλοπή λογισμικού αλλάζουν ως δια μαγείας οι παράμετροι. Ακόμα και με την αμοιβή -σύλληψης μέσω επώνυμης καταγγελίας- της BSA +(1 εκατ. δρχ, η περιβόητη ολοσέλιδη διαφήμιση στο ΒΗΜΑ) δεν φαίνεται τόσο αυτονόητο και δελεαστικό να καταδείξει κανείς τον κλέφτη. + +Αλλά και να τον καταδείξει, αν οι αριθμοί που ικάζονται για το κλεψίτυπο λογισμικό είναι σωστοί τι θα γίνει; + +Θα γίνονται αθρόες έρευνες με εισαγγελική παρουσία και προσαγωγές ανήλικων, μαθητών, φοιτητών, οικογενειαρχών, δασκάλων, παπάδων, γιατρών; Θα δημιουργηθεί μια +νέα τάξη δισεκατομμυριούχων επαγγελματιών καταδοτών επί αμοιβή; Δύσκολο\...προσωπικά πιστεύω πως το όπλο αυτό ενεργοποιείται εκλεκτικά κατά μεγαλοπελατών ως +**μέτρο εκφοβισμού και παραδειγματισμού στις μάζες**. Έχουμε λοιπόν το παράδοξο της εταιρείας που (δικαιωματικά ομολογουμένως) τρομοκρατεί εχθρούς/κλέφτες ώστε +να γίνουν μελλοντικοί φίλοι/πελάτες. + +Υπάρχει φαντάζομαι μια εύκολη δικαιολογία πάνω στην κλοπή εμπορικού λογισμικού που πολλοί ήδη έχουν χρησιμοποιήσει σε αντίστοιχες συζητήσεις. \"Το χρειαζόμουν +αλλά τόσο που το χρεώνουν σιγά μην το αγοράσω, άλλωστε δεν στοιχίζει τίποτα η αντιγραφή ενός CD, άυλο και ανέξοδο είναι, δεν είναι πως έκλεψα και κάτι που +κοστίζει πραγματικά λεφτά\". + +Είναι τόσο βαθιά ανήθικη, ανώριμη και διαβρωτική αυτή η δήλωση που είναι τρομακτική. + +**Πρώτον**, αν χρειάζεσαι κάτι το πληρώνεις. Αλλιώς δεν μπορείς να το έχεις (όπως και πολλά άλλα πράγματα στην ζωή). Δεν τίθεται εδώ θέμα πραγματικής απειλής +της ίδιας της ύπαρξης του ανθρώπου (όπως είναι η κλοπή φαγητού για να μην λοιμοκτονήσει). Αν θέλει κάποιος να σταδιοδρομήσει επαγγελματικά σε ένα χώρο που ο +απαραίτητος εξοπλισμός είναι πέραν δυνατοτήτων, έχει κάνει λάθος εκτίμηση. Ας αλλάξει δουλειά. + +**Δεύτερον**, πολλές φορές υπάρχει **δωρεάν εναλλακτική λύση**. Ίσως και χειρότερη. Αλλά που δεν οδηγεί στην κλοπή. + +**Τρίτον**, το πόσο κοστίζει κάτι **δεν καθορίζεται από το πόσα λεφτά θα ήθελε κάποιος να διαθέσει, αλλά για πόσα το αποχωρίζεται ο παραγωγός του**. Από την +στιγμή που δεν εισέπραξε τα λεφτά του έχει ζημίες και διαφυγόντα κέρδη και τα δικαιούται. + +**Τέταρτον**, τι περιθώρια επιβίωσης αφήνει η κλοπή λογισμικού και μάλιστα πολυσύνθετου (όπως ένα λειτουργικό) στον προγραμματιστή/συγγραφέα ενός προγράμματος +ΠΡΟΠΟ σε C; Ποιός θα αγοράσει 100 χιλ. δρχ το προγραμματάκι αυτό, όταν δεν δίστασε να κλέψει 500Mbyte λογισμικού Πολυεθνικών Εταιριών αξίας 3 εκατ. δρχ; Γιατί +να μην το κλέψει επίσης; + +Δεν χρειάζεται να πω πάλι πως από κοινωνικής πλευράς το Linux δρα εξυγιαντικά, χαρίζοντας στον κόσμο την δυνατότητα να μείνει εκτός φυλακής, χωρίς την ρετσινιά +του κλέφτη και τελικά με τα λεφτά του στην δική του και μόνο τσέπη. + +Καταπληκτικό σουτ-γκολ από την σέντρα και **Κοινωνία εναντίον Εταιρείας 4 - 0** + +### [3.5 Λήξη χρόνου]{#ss3.5} + +Κάπου εδώ πρέπει να σφυρίξουμε και την λήξη αυτού του ματς. Αναπληρωματικοί παίκτες όπως \"Διαρροή συναλλάγματος\", \"Διαφάνεια, Ασφάλεια, Κρατικά Συμφέροντα\", +\"Μελλοντική σιγουριά κάλυψης αναγκών ζωτικής σημασίας για μικρά κράτη (γλώσσα, ελληνικοποιήσεις, παιδεία)\" δεν χρειάστηκε καν να μπουν στον αγώνα. + +Θυμίζω πως δεν υπάρχει λόγος να γίνει κάποιος φίλαθλος, οπαδός, και πόσο μάλλον παίχτης. Αλλά αν, στο καφενείο, πρέπει να έχει έναν λόγο να τσακώνεται με +κάποιους άλλους, να εκτονώνεται, να περνάει ευχάριστα η ώρα, ας το κάνει. Απλά ας διαλέξει τους σωστούς λόγους να δώσει την μάχη και ας πάει με την ομάδα που, diff --git a/content/articles/28/05_passwd.md b/content/articles/28/05_passwd.md new file mode 100644 index 0000000..9f87197 --- /dev/null +++ b/content/articles/28/05_passwd.md @@ -0,0 +1,198 @@ ++++ +title = 'Password encoding in UNIX systems' +date = '2000-11-01T00:00:00Z' +description = '' +author = 'Νίκος Μαυρογιαννόπουλος' +issue = ['Magaz 28'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Password encoding σε UNIX συστήματα, τι είναι, τι εναλλακτικές λύσεις έχουμε, και άλλες πληροφορίες.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Τι είναι το Password encoding;** +-------------------------------------------------------------- + +**2. DES Password Encoding** +----------------------------------------------------- + +**3. MD5 crypt** +----------------------------------------- + +**4. Blowfish crypt (bcrypt)** +------------------------------------------------------- + +**5. Cracking Passwords** +-------------------------------------------------- + +**6. Συμπεράσματα και γεγονότα** +--------------------------------------------------------- + +**7. Παραπομπές** +------------------------------------------ + + +### [1. Τι είναι το Password encoding;]{#s1} + +Τα UNIX συστήματα μιας και είναι πολυχρηστικά, χρειάζονται κάποιο τρόπο για να ξεχωρίζουν τους χρήστες. Ο κάθε χρήστης διαθέτει ένα μοναδικό αριθμό (user id), +το οποίο αντιστοιχεί σε κάποιο όνομα χρήστη (username). Οι παραπάνω αντιστοιχίες καθορίζονται στο αρχείο \"/etc/passwd\", ονομασμένο έτσι για ιστορικούς λόγους. +Μια καταχώριση στο αρχείο αυτό θα μπορούσε να είναι: + + nmav:x:500:4:Nikos Mavroyanopoulos:/home/nmav:/bin/bash + +\ +Τα πεδία σε αυτό το αρχείο ξεχωρίζουν απο την ανω-κάτω τελεία \':\', ενώ τα πεδία που μας ενδιαφέρουν είναι το 1 που περιέχει το όνομα χρήστη - nmav - καθώς και +το πεδίο 3 όπου αναφέρεται η ταυτότητα του χρήστη - 500. + +Τα περισσότερα UNIX σύστηματα, για να πιστοποιήσουν την ταυτότητα του χρήστη χρησιμοποιούν συνθηματικές λέξεις, ή απλώς συνθηματικά (passwords). Αυτά τα +συνθηματικά αλλάζουν με την εκτέλεση του \"/usr/bin/passwd\" προγράμματος, το οποίο ανανεώνει τη βάση συνθηματικών του συστήματος. Σε απλά συστήματα αυτή η βάση +είναι ένα εκτυπώσιμο αρχείο, και στα περισσότερα παλαιά συστήματα αυτό ήταν το ίδιο το \"/etc/passwd\". Στα πιο νέα συστήματα είναι ένα αρχείο αναγνώσιμο μόνο +απο τον διαχειριστή του συστήματος, και συνήθως είναι το \"/etc/shadow\". + +Αντίθετα με αυτό που θα περίμενε κανείς, η βάση συνθηματικών του συστήματος δεν περιέχει τα ίδια τα συνθηματικά. Τα συνθηματικά κωδικοποιούνται μέσω ενός +αλγορίθμου μίας φοράς ( [1](05_passwd-7.html#1)) και αποθηκεύονται. Με αυτόν τον τρόπο δεν μπορεί ούτε ο διαχειριστής του συστήματος να δει τα συνθηματικά των +χρηστών (μπορεί όμως να τα αλλάξει). Μιας και τα συνθηματικά δεν υπάρχουν στην βάση ίσως να αναρωτηθήτε πως γίνεται η πιστοποίηση του χρήστη. Αν υποθέσουμε ότι +ο αλγόριθμος μίας φοράς είναι PW(x), με x να είναι το συνθηματικό, τότε κατά την εισαγωγή του συνθηματικού(x) το σύστημα αρκεί να υπολογίσει πάλι το PW(x) και +να το συγκρίνει με το αποθηκευμένο στην βάση. + + +### [2. DES Password Encoding]{#s2} + +Τα πρώτα UNIX συστήματα κωδικοποιούσαν τα συνθηματικά χρησιμοποιώντας ένα τροποποιημένο DES αλγόριθμο, με τετοιο τρόπο έτσι ώστε να μην μπορεί απο την +κωδικοποιημενη μορφή να προκύψει το αρχίκο συνθηματικό. Ο μόνος τρόπος για να προκύψει το αρχικό συνθηματικό είναι η δοκιμή όλων των δυνατών συνδιασμών +συνθηματικών (η διαδικασία αυτή συχνά καλείται brute force attack). Αυτό το είδος επίθεσης, ενώ αρχικά ήταν πρακτικά αδύνατο να εφαρμοστεί, τα τελευταία χρόνια, +με την πρόοδο των υπολογιστών, μπορεί να εφαρμοστεί χωρίς ιδιαίτερα ακριβό εξοπλισμό. Ενα τυπικό UNIX έχει καταχώρισεις στο \"/etc/shadow\" της μορφής: + + nmav:ZKZ/wHem5Uv:11000:0:99999:7::: + +\ +Το δευτερο πεδίο περιέχει μια εκτυπώσιμη μορφή του DES encoded συνθηματικού. Τα δύο πρώτα του ψηφία είναι η εκτυπώσιμη μορφή ενός τυχαίου salt που αποτελείται +απο 12 bits ( [2](05_passwd-7.html#2)). Χρησιμοποιείται ώστε να διαφοροποιεί την έξοδο του αλγορίθμου, ακόμα και σε ίδια συνθηματικά. Ενα συνθηματικό μπορεί να +αποθηκευτεί με 212 τρόπους το πολύ. + +Ο αλγόριθμος DES (Data Encryption Standard) είναι κρυπτογραφικός αλγόριθμος που λειτουργεί με 64 bit μπλοκ. Ήταν πρότυπο τις δεκαετίες του \'70 και \'80, αλλά +είναι ξεπερασμένος σήμερα. Ο τρόπος με το οποίο χρησιμοποιείται είναι: + +- εκκίνηση του DES +- Μετατροπή του Expansion Permutation συναρτήσει του salt +- Κρυπτογράφηση για 25 φορές 8 null bytes χρησιμοποιώντας σαν κλειδί το συνθηματικό του χρήστη +- Το τελικό αποτέλεσμα είναι η εκτυπώσιμη μορφή των κρυπτογραφημένων 64 bit μαζί με τα 12 bit του salt. + +Ο παραπάνω αλγόριθμος είναι ουσιαστικά αλγόριθμος μιας φοράς, αφού δεν υπάρχει τρόπος αντιστροφής της διαδικασίας και εξαγωγής του συνθηματικού απο την +κωδικοποιημένη μορφή, χωρίς να δοκιμάσουμε όλους τους δυνατούς συνδυασμούς. Έχει το λιγότερο, την ασφάλεια του DES, αλγόριθμου δοκιμασμένου για αρκετά χρόνια. +Ένας περιορισμός που έχει είναι ότι τα συνθηματικά περιορίζονται στους 8 χαρακτήρες από τους οποίους χρησιμοποιούνται τα 56 bits (λόγω του μικρού ευρους +κλειδιών του DES). + +Μιας και τα E-boxes του DES είναι σταθερά ανά salt, είναι δυνατό με κάποιο δυνατό υπολογιστή να δοκιμάσουμε όλα τα πιθανά συνθηματικά σε λογικό χρόνο. Ο DES +όπως είδαμε χρησιμοποιεί μόνο 56 bits για κλειδί οπότε όλοι οι πιθανοί συνδιασμοί που πρέπει να δοκιμάσει κανείς είναι 256, αριθμός οχι υπερβολικά μεγάλoς. + +Έτσι ενώ αρχικά τα κωδικοποιημένα συνθηματικά αποθηκεύονταν στο \"/etc/passwd\", αρχείο αναγνώσιμο απο όλους τους χρήστες του συστήματος, τα τελευταία χρόνια +μεταφέρθηκαν σε ειδικό αρχείο αναγνώσιμο απο τον διαχειριστή μόνο του συστήματος. Αυτό η κίνηση φανέρωσε την αδυναμία του αλγορίθμου κωδικοποίησης να +προστατέψει αποτελεσματικά τα συνθηματικά των χρηστών. + + +### [3. MD5 crypt]{#s3} + +Λύση στο παραπάνω πρόβλημα και στο ότι ο DES είναι κρυπτογραφικός αλγόριθμος και υπήρχε παλαιότερα δυσκολία εξαγωγής του από τις Η.Π.Α, κυρίως για τα μη +εμπορικά UNIX λειτουργικά, έδωσε ο Paul-Henning Kamp για το FreeBSD λειτουργικό. Σχεδιάσε ένα αλγόριθμο κωδικοποίησης συνθηματικών βασισμένο στον MD5 ( +[3](05_passwd-7.html#3)) hash αλγόριθμο. Ο MD5 είναι απο τον σχεδιασμό του μίας φοράς (one-way), οπότε οι μετατροπές σε αυτόν ήταν μικρές, ενώ προστέθηκε salt +απο 12 μέχρι 48 bits. + +Ο αλγορίθμος αυτός σε γενικές γραμμές κωδικοποιεί το salt και το συνθηματικό, με τον MD5, με αρκετούς διαφορετικούς τρόπους, έτσι ώστε να καθυστερήσει την +διαδικασία. Ο MD5 αλγόριθμος παράγει ένα 128 bit hash και αφού μετατραπεί σε εκτυπώσιμη μορφή μαζί με το salt αποθηκεύεται στο αρχείο συνθηματικών. Ενα τυπικό +σύστημα με MD5 κωδικοποιημένα συνθηματικά θα έχει καταχωρίσεις στο /etc/shadow της μορφής: + + nmav:$1$4Wcrq7pj$l8uWovJXI1QBP6MXRrWdt0:11000:0:99999:7::: + +\ +Οι χαρακτήρες \'\$1\$\' καθορίζουν τον συγκεκριμένο αλγόριθμο που χρησιμοποιείται (versioning) και μιας και η DES κωδικοποίηση δεν χρησιμοποιεί τον χαρακτήρα +\'\$\', δεν είναι πρόβλημα για ένα πρόγραμμα να τα διακρίνει. Το salt ξεχωρίζει απο την έξοδο του MD5 με τον χαρακτήρα \'\$\'. + +O MD5 δεν έθετε πρακτικούς περιορισμούς στο μέγεθος του συνθηματικού του χρήστη. Είχε όμως το πρόβλημα του DES encoding\... έχει συγκεκριμένη πολυπλοκότητα και +κάποια στιγμή στο μέλλον θα ήταν εφικτή η brute force attack και σε αυτόν, άρα θα έπρεπε να αντικατασταθεί και πάλι. + + +### [4. Blowfish crypt (bcrypt)]{#s4} + +Την λύση σε αυτή την αδυναμία δίνει ένας αλγόριθμος σχεδιασμένος απο τον Niels Provos και τον David Mazieres για το OpenBSD σύστημα. Ο αλγόριθμος αυτός είναι +βασισμένος στον blowfish ( [4](05_passwd-7.html#4)) αλγόριθμο, με εκθετικά μεταβαλλόμενη πολυπλοκότητα O (2n), και το n καθορίζεται απο τον διαχειριστή του +συστήματος. Ο τροποποιημένος αλγόριθμος καλείται eksblowfish, ή πιο αναλυτικά Expensive Key Schedule Blowfish. + +Η επιλογή του blowfish έγινε λόγω του ότι διαθέτει s-boxes εξαρτώμενα από το κλειδί, και συνεπώς έχει πολύ μεγαλύτερη πολυπλοκότητα, κατά την εκκίνηση του, από +τον DES αλγόριθμο. Επιπρόσθετα έχει πολύ μεγαλύτερο εύρος κλειδιών (448 bits), κάτι που δεν θέτει πρακτικούς περιορισμούς στο μέγεθος των συνθηματικών (55 +bytes). + +Ο eksblowfish χρησιμοποιεί μια τροποποιημένη μορφή της δημιουργίας των s-boxes του αλγορίθμου, και ένα 128 bits salt. Σε γενικές γραμμές η λειτουργία του +αλγορίθμου συνοψίζεται στο: + +- Εκκίνηση του Blowfish (δημιουργία των s-boxes) +- Από 1 μέχρι 2n τροποποίηση των s-boxes και των sub-keys συναρτήσει του salt και συναρτήσει του κλειδιού +- Κρυπτογράφιση 64 φορές, μιας αλυσίδας χαρακτήρων (192 bits) με το κλειδί + +Το κωδικοποιημένο string είναι η εκτυπώσιμη μορφή του salt και της εξόδου του αλγορίθμου. Ενα σύστημα με Bcrypt κωδικοποιημένα συνθηματικά θα έχει καταχωρίσεις +στο /etc/shadow της μορφής:\ + + nmav:$2a$05$abcdefghijklmnopqrstuu5s2v8.iXieOjg/.AySBTTZIIVFJeBui:11000:0:99999:7::: + +\ +Οπως παρατηρούμε και αυτός ο αλγόριθμος χρησιμοποιεί τους πρώτους χαρακτήρες (\'\$2a\$\'), του κωδικοποιημένου συνθηματικού για να δείξει την έκδοση του +αλγορίθμου, ενώ πάλι ο χαρακτήρας \'\$\' χρησιμοποιείται σαν σημείο διαχωρισμού πεδίων. Το πρώτο πεδίο όπως είδαμε περιέχει την έκδοση του αλγορίθμου, το +δεύτερο το μέγεθος του κόστους(n), ενώ το τρίτο περιέχει το 128 bits salt και το κωδικοποιημένο συνθηματικό. + +Μια πρόχειρη υλοποίηση του bcrypt, καθώς και ένα patch για το Linux pam\_unix module, βρίσκεται στο . Στο +, μπορούν να βρεθούν περισσότερες πληροφορορίες για τον αλγόριθμο, καθώς και η αρχική υλοποίηση του. + + +### [5. Cracking Passwords]{#s5} + +Η αδυναμία του DES encoding, να προσαρμοστεί στον χρόνο και στην συνεχώς αυξανόμενη υπολογιστική δύναμη, προκάλεσε την δημιουργία προγραμμάτων που προσπαθούσαν +απο την κωδικοποιημένη μορφη να παράξουν το συνθηματικό σε σχετικά μικρό χρόνο. Τα προγράμματα αυτά ονομάστηκαν password crackers, και βασίζοντουσαν στην χαλαρή +επιλογή συνθηματικών απο τους χρήστες, αλλά καθώς το υλικό βελτιωνώταν, το «σπάσιμο» ενός όχι πολυ σύνθετου συνθηματικού έγινε εφικτό. Αρχικά βασίζονταν κυρίως +σε κάποιο λεξικό που κρατάει συνθηματικά που επιλέγαν πιο συχνά οι χρήστες (dictionary attack). Πιο τελευταία προγράμματα χρησιμοποιούν αρκετά πιο εξελιγμένες +τεχνικές. + +Μερικά προγράμματα είναι: + +- John the Ripper του \"Solar Designer\" +- QCrack του \"Crypt Keeper\" +- Crack του Alec Muffett + +Μια ενδιαφέρουσα ερευνα για τις cracking εφαρμογές και την αποδοσή τους έγινε από τον Kurt Hockenbury και μπορεί να βρεθεί στο +. Στο κείμενο αυτό παρουσιάζεται η αναποτελεσματικότητα του DES σε συνθηματικά με λιγότερους απο 6 +χαρακτήρες και σε ορισμένες μορφές συνθηματικών με 8 χαρακτήρες, ενώ το hardware που χρησιμοποιήθηκε είναι εύκολα προσβάσιμο απο οποιονδήποτε φοιτητή στο +πανεπιστήμιο του. + + +### [6. Συμπεράσματα και γεγονότα]{#s6} + +Γενικά οι περισσότεροι διανομείς και εταιρίες παραγωγής UNIX χρησιμοποιούν ακόμα την DES κωδικοποίηση, αν και ξεπερασμένη, για λόγους συμβατότητας. Αυτοί οι +λόγοι συνήθως προκύπτουν όταν διαφορετικά συστήματα διαμοιράζονται αρχεία συνθηματικών πχ. με NIS ή NIS+. Ακόμα χειρότερα, μερικές εταιρίες ακόμη χρησιμοποιούν +την παλιά μορφή του \"/etc/passwd\", που περιέχει το κωδικοποιημένο συνθηματικό. + +Η \'bcrypt\' κωδικοποίηση δεν χρησιμοποιείται, μέχρι σήμερα, σε άλλα λειτουργικά πέρα απο το OpenBSD, κυρίως επειδή χρησιμοποιεί κρυπτογραφικό αλγόριθμο με +μεγάλο εύρος κλειδιών, οπότε και η εξαγωγή απο τις Η.Π.Α (στις οποίες έχουν την έδρα τους οι περισσότερες επιχειρήσεις) δεν ήταν μέχρι πρόσφατα, νόμιμη. +Ορισμένα συστήματα, όπως το QNX ( [5](05_passwd-7.html#5)), επέλεξαν διαφορετικούς τρόπους αποθήκευσης των συνθηματικών, αλλά απέτυχαν στον σχεδιασμό των +αλγορίθμων τους. Περισσότερες πληροφορίες για την συγκεκριμένη αδυναμία του αλγορίθμου θα βρείτε στο . + +Βέβαια δεν αρκεί ένας καλός αλγόριθμος κωδικοποίησης για να είναι ασφαλής ένας λογαριασμός. Ο χρήστης έχει σημαντικό ρόλο στην ασφάλεια του λογαριασμού του και +αυτό γιατί η επιλογή του συνθηματικού ανήκει σε αυτόν. Οσο μεγάλο και να είναι το salt, όσο καλός και να είναι ο αλγόριθμος, αν το συνθηματικό είναι \'12345\' +είναι ζητημα δευτερολέπτων να βρεθεί. Για την αποφυγή ευκολων συνθηματικών από τους χρήστες η shadow μορφή των συνθηματικών, καθώς και η πιστοποίηση με PAM +(Plugable Authentication Modules), επιτρέπουν στον διαχειριστή του συστήματος να θέσει μέγιστο χρόνο ζωής ενός συνθηματικού, επιτρεπόμενο χρόνο αλλαγής ενός +συνθηματικού, λήξη λογαριασμών κλπ, κάτι που επιβάλεται σε ένα σύστημα που προορίζεται για ασφαλές. Επίσης υπάρχει η CrackLib του Alec Muffett, που μπορεί να +χρησιμοποιηθεί απο το πρόγραμμα αλλαγής συνθηματικών, για να απορρίπτει τα πολύ εύκολα από αυτά. + + +### [7. Παραπομπές]{#s7} + +[]{#1} φοράς: Έστω y=A(x). Σε ένα αλγόριθμο μιας φοράς(A) αν γνωρίζουμε το y, είναι δύσκολο να υπολογίσουμε το x. + +[]{#2} bits: 8 bit == 1 byte + +[]{#3} MD5: Ο MD5 (ή Message Digest 5) είναι Αλγόριθμος που παράγει ένα 128 bits χαρακτηριστικό αριθμό για κάθε μηνύμα. Σχεδιαστηκε απο τον Ron Rivest και +περιγράφεται στο RFC1321 + +[]{#4} blowfish: κρυπτογραφικός συμμετρικός αλγόριθμος σχεδιασμένος από τον Bruce Schneier []{#5} QNX: Real-time λειτουργικό σύστημα + diff --git a/content/articles/29/01_editorial.md b/content/articles/29/01_editorial.md new file mode 100644 index 0000000..0ceaaf9 --- /dev/null +++ b/content/articles/29/01_editorial.md @@ -0,0 +1,60 @@ ++++ +title = 'Editorial' +date = '2000-12-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Παπαδογιαννάκης(mailto:papas@hellug.gr)' +issue = ['Magaz 29'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Και καλές γιορτές\...* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Φτάσαμε στο Δεκέμβρη και βροχές δεν έχουμε δει ακόμα\... Μόνο 2-3 πλημμύρες, που ήταν και αναμενόμενες μια και έχουμε κάψει ό,τι καιγεται. Και το χώμα δε +συγκρατεί το νερό και το βουνό δε συγκρατεί το χώμα και γενικώς δε συγκρατείται τίποτα. Μόνο η ψυχραιμία μας, αλλά **μέχρι πότε**; + +Και με αυτήν τη μελαγχολική εισαγωγή, ξεκινάει αυτό το **Editorial**. Ένα Editorial που κανονικά θα έπρεπε να είναι χαρωπό, **Χριστούγεννα πλησιάζουν!**. Και +όλοι μαζεύονται δίπλα στο τζάκι και όλοι είναι κοντά στο **Χριστουγεννιάτικο δέντρο** και όλοι κοιτάνε τις **κάλτσες** που έχουν κρεμάσει στο **τζάκι** +περιμένοντας το δώρο του **'ϊ Βασίλη**. **ΟΧΙ**, κάτι τέτοια γίνονται μόνο στη Αμερική. Εκεί που περιμένουν τα Χριστούγεννα για να βρεθούν όλοι μαζι, εκεί που ο +θεσμός της οικογένειας δεν είναι τόσο δυνατός (γιατί άραγε να υπάρχουν τόσοι άστεγοι;) ασχέτως πώς την παρουσιάζουν τα media και ο κάθε υποψήφιος προεδράρας, +που προς άγραν ψήφων βάζει και τη γυναίκα του δίπλα στο φακό.\ +Δεν έχει σημασία ότι κάτω από το γραφέιο του περιμένει μια \`\`Μόνικα\'\'. + +Μα τι είναι όλα αυτά και τι σχέση έχουν με το Linux και το Magaz ειδικότερα; + +**Καμία\...** + +\`Αντε λοιπόν καλές γιορτές, καλά φαγοπότια, και μην ξεχνάτε ότι έχουν πλέον απαγορευτεί τα κοκορέτσια και τα κεφαλάκια και τα λοιπά εδέσματα. ΧΑ, ας έρθουν +στην Κρήτη να μας το πουν\...\ +(DISCLAIMER: Εγώ δεν τρώω τέτοια, για τους άλλους λέω (γλύψιμο, ο Αρτέμης ε;;;)). + +Ένας τρελός επιστήμονας, ονόματι **Φώτης Γιαννούλας**, που οι φήμες τον τοποθετούν στο **Βόλο**, μου έστειλε ένα email για ένα Project, το **LCP (Linux +Classification Project)**, την κατηγοριοποίηση των HOW-TOs. Χαιρετίζουμε την προσπάθειά του και του υποσχόμαστε (εμείς, οι Παπαδογιαννάκηδες Βαγγέληδες) ότι +έχει μια θέση στο **magaz**, αλλά στο επόμενο τεύχος, γιατί δεν πρόλαβα να τα μεταφράσω σε **SGML**. Το Project είναι σε **Beta** φάση και, απ\' όσο το είδα, +είναι \*ήδη\* σε πολύ καλή κατάσταση.\ +Να σημειώσω εδώ ότι είναι μια πολύ καλή δουλειά και πραγματικά χρειάζεται βοήθεια. Και αν όχι βοήθεια, στήριξη. Σύντομα αυτό το project θα μεγαλώσει πολύ. Η +κοινότητα του linux πραγματικά το είχε ανάγκη.\ +Περισσότερες πληροφορίες από τον ίδιο, στο mail + +Στα άρθρα του magaz τώρα, το τεύχος, αν και θα έπρεπε να είναι εορταστικό, δεν είναι και τόσο, αφου δεν έχει **bonus άρθρο**. Αυτό γιατί δεν προσφέρονται και +τόσοι να γράψουν καμιά γραμμή. Ευτυχώς που ο [Παπακώστας ο Ευρυπίδης](mailto:evris@hellug.gr) μου έχει αφήσει παρακαταθήκη κάτι άρθρα που θα δημοσιεύονταν στο +DILIMA, αλλά τελικά αποφάσισε ότι το **magaz** είναι καλύτερο (γιατί άραγε;). Ευτυχώς που υπάρχει ο [Καμπριάνης ο Μιχάλης](mailto:kabrianis@hellug.gr), και +ξελασπώνει λίγο την κατάσταση\... Φυσικά και θα αναφέρω το μεγάλο μας ευεργέτη, τον [Κώστα Τσακάλογλου](mailto:tsakf@hellug.gr), που ουκ ολίγες φορές μας έχει +ξελασπώσει με την XBASIC. Όσο για εμένα, ε, γράφω κάνα editorial, γράφω και κάνα άλλο άρθρο που πότε - πότε βάζω, ε φτιάχνω και το νέο site του magaz, ε, +αυτά\... + +Με χαρά (και ανησυχία για το τι θα βάλω στο επόμενο τεύχος) λοιπόν σας παραπέμπω στα άρθρα αυτού του μήνα: + +- [XBASIC](04_xbasic.html) και οι συναρτήσεις της, από τον Τσακάλογλου. +- [Hellenic Status](03_hellenic-status.html)από τον Ευρυπίδη Παπακώστα. +- [Bash\...](05_bash.html)από τον Καμπριάνη Μιχάλη +- [Ελληνικοί ISPs](02_erevna.html)από το Βραχνάκη το Γιώργο. Αυτόν τον καλωσορίζουμε ιδιαιτέρως στην παρέα του magaz, μια και κατάγεται από το Linuxοχώρι!\ + Τιιιιιι;;;;; Δεν ξέρετε το linuxοχώρι;;;;;;;;; Ντροπή σας! για πηγαίνετετε [εδώ](http://www.eeea.gr/article.php3?sid=20000607113131) εδώ να διαβάσετε\... + και μετά [εδώ](http://www.eeea.gr/article.php3?sid=20000613081716). Για να θυμούνται οι παλιοί και να μαθαίνουν οι νεότεροι\... + +ΑΑΑΑ, να μην ξεχάσω να αναφέρω ότι δε νομίζω το επόμενο magaz να βγεί νωρίς το Γενάρη του νέου έτους. Αυτό πιστεύω ότι είναι κατανοητό και χωρίς να χρειάζεται +να το εξηγήσω\... + +Καλή ανάγνωση mages και υπομονή, το νέο magaz έρχεται!\ diff --git a/content/articles/29/02_erevna.md b/content/articles/29/02_erevna.md new file mode 100644 index 0000000..901020b --- /dev/null +++ b/content/articles/29/02_erevna.md @@ -0,0 +1,248 @@ ++++ +title = 'Τα Operating Systems Τών Ελληνικών I.S.P\s' +date = '2000-09-01T00:00:00Z' +description = '' +author = 'Γιώργος Βραχνάκης(mailto:gi0rgos@pathfinder.gr)' +issue = ['Magaz 29'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αυτό το άρθρο επιχειρεί μια έρευνα για τους internet service providers της Ελλάδας. Σε καμία περίπτωση δεν είναι πλήρης, και δεν μπορεί να γίνει. Παρόλα αυτά, +μια βασική ιδέα την πέρνουμε για τα τεκταινόμενα του Internet εν Ελλάδι. Όσοι λοιπόν έχετε αναρωτηθεί τι O/S τρέχει ο Internet Provider που έχετε Account τώρα +μπορείτε να μάθετε.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Γενικά περί της έρευνας** +------------------------------------------------------- + +**2. Απαντήσεις** +------------------------------------------ + +- [2.1 HellasNet](#ss2.1) +- [2.2 Otenet](#ss2.2) +- [2.3 SparkNet](#ss2.3) +- [2.4 Panafonet](#ss2.4) +- [2.5 GroovyNet](#ss2.5) + +**3. Οι μη απαντήσαντες\...** +------------------------------------------------------ + +**4. Servers (προγράμματα) στους servers** +------------------------------------------------------------------- + +- [4.1 HTTP](#ss4.1) +- [4.2 MAIL](#ss4.2) +- [4.3 NEWS](#ss4.3) + +**5. Αναλύσεις\...** +--------------------------------------------- + +**6. Ευχαριστίες.** +-------------------------------------------- + + +### [1. Γενικά περί της έρευνας]{#s1} + +Οι αναφορές γίνονται σε κάθε Internet Provider και τι λειτουργικό σύστημα τρέχουν oι διάφοροι Servers του (web, ftp, dial up, etc) + +Σε όλους είχε σταλεί το παρακάτω email: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Κύριε/Κυρία, + Τους θερμούς χαιρετισμούς μου, και μπαίνω κατευθείαν στο θέμα. + Ονομάζομαι Παπαδογιαννάκης Ευάγγελος, και είμαι ο αρχισυντάκτης του magaz, του επίσιμου online περιοδικού για το linux στην Ελλάδα, της HELLUG (Hellenic Linux Users Group, http://www.hellug.gr). To περιοδικό μας βρίσκεται στο http://magaz.hellug.gr. Στα πλαίσια ενός άρθρου που συντάσσω με τον Βραχνάκη Γεώργιο, θα ήθελα να με ενημερώσετε για τα παρακατω στοιχεία όσον αφορά στο τι τρέχουν οι server σας. + + Operating system of Mail Servers: + Operating system of DNS Servers: + Operating system of FTP Servers: + Operating system of Dial Up Servers: + Operating system of Web Servers: + + software of Mail Servers: (πχ Sendmail 8.9.3/8.9.3) + software of DNS Servers: (πχ bind) + software of FTP Servers: (πχ wuftp) + software of News Servers: (πχ NNTPcache server) + software of Web Servers: (πχ IIS) + + Θα το εκτιμούσα αν απαντήσετε μέχρι τις 2 Σεπτεμβρίου, πράγμα που το θεωρώ αρκετά εύκολο. + Το άρθρο θα παρουσιαστεί στο magaz (http://magaz.hellug.gr) στο τεύχος Σεπτεμβρίου, που θα βγει στη δημοσιότητα στις 3 του ίδιου μήνα. + + Για οποιαδήποτε απορία - διευκρίνιση, παρακαλώ μη διστάσετε να επικοινωνήσετε μαζί μου. + + Ευχαριστώ εκ των προτέρων, + Ο Αρχισυντάκτης και Συντονιστής Αρθρογραφίας του Μagaz, + Παπαδογιαννάκης Ευάγγελος. + papas@hellug.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το mail αυτό στάλθηκε στις παρακάτω διευθύνσεις. + +- +- +- +- +- +- +- +- +- +- +- +- + + +### [2. Απαντήσεις]{#s2} + +Φυσικό και αναμενόμενο, δεν πήραμε και πολλές απαντήσεις. Οι λίγοι όμως που μας έστειλαν, πρέπει να τιμηθούν αφού μας αφιέρωσαν λίγο από το χρόνο τους. + +Παρακάτω λοιπόν, είναι όσοι απάντησαν και οι απαντήσεις τους όσον αφορά στο θέμα μας + +### [2.1 HellasNet]{#ss2.1} + +**Mail Servers**: Solaris\ +**DNS Servers**: Solaris & Linux RedHat\ +**FTP Servers**: Linux RedHat\ +**Dial Up Servers**: Solaris\ +**Web Servers**: Linux RedHat, Solaris και WinNT + +### [2.2 Otenet]{#ss2.2} + +**Mail Servers**: Solaris\ +**DNS Servers**: Solaris\ +**FTP Servers**: Solaris\ +**Dial Up Servers**: Solaris\ +**Web Servers**: Solaris + +Εδώ, όπως φυσικά οι περισσότεροι ξέρετε, υπάρχει μια αντίθεση. Για τους web servers τους, οι της OteNet μας έστειλαν πληροφορίες ότι τρέχουν **Solaris**. Σε +αυτή την περίπτωση εγώ σηκώνω τα χέρια ψηλά, γιατί από τη μια στο site τους μας λένε ότι τρέχουν Windows 2000, και από την άλλη γιατί και το +**[NetCraft](http://www.netcraft.com)** μου δίνει επίσις ότι τρέχουν Windows 2000 με Microsoft-IIS/5.0. + +Επίσης, στο email απάντηση της OteNet, υπήρχε (μεταξύ άλλων) το + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Υπόψιν ότι όλα τα παραπάνω στοιχεία μπορούσατε να τα πάρετε με νόμιμο τρόπο. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Δηλαδή εμείς τώρα τα πήραμε με παράνομο τρόπο; Τέλος πάντων\... + +### [2.3 SparkNet]{#ss2.3} + +**Mail Servers**: Solaris\ +**DNS Servers**: Solaris\ +**FTP Servers**: Solaris\ +**Dial Up Servers**: Solaris\ +**Web Servers**: Solaris + +### [2.4 Panafonet]{#ss2.4} + +**Mail Servers**: Solaris\ +**DNS Servers**: Solaris\ +**FTP Servers**: Solaris\ +**Dial Up Servers**: Solaris\ +**Web Servers**: Solaris + +### [2.5 GroovyNet]{#ss2.5} + +NetBSD ή OpenBSD + + +### [3. Οι μη απαντήσαντες\...]{#s3} + +Στους παρακάτω Providers έστειλα 2 φορές email (!) με μια διαφορά 6 ημερών, δεν απάντησε κανείς!. + +Σημείωση: Οι παρακάτω πληροφορίες έχουν παρθεί απο το [NetCraft](http://www.netcraft.com). Αυτό σημαίνει οτι **\*δεν\* είναι απολύτα αξιόπιστες και είναι +\*μονο\* για το σε τι O/S τρέχουν οι Web Servers**. + +\ +**Forthnet**: IRIX\ +**HOL**: Solaris\ +**Compulink**: Win2000\ +**TEE**: Solaris\ +**StsNet**:Red Hat Linux\ +**Mbn**:Windows 2000\ +**Internet Hellas**: Linux ('γνωστη Διανομή)\ +Η Internet Hellas \*απάντησε\* στο mail μου αλλά με σε UTF-8 με αποτέλεσμα να μην μπορώ να το διαβάσω γι\'αυτό το λόγο δεν γράφω και για τους υπόλοιπους +servers. + + +### [4. Servers (προγράμματα) στους servers]{#s4} + +Ας περάσουμε τώρα στο τι τρέχει ο κάθε provider στις επιμέρους υπηρεσίες. Τα αποτελέσματα προέρχονται από το [NetCraft](http://www.netcraft.com) + +### [4.1 HTTP]{#ss4.1} + +\ +**HellasNet**: Apache/1.3.4\ +**OteNet**: Microsoft-IIS/5.0\ +**SparkNet**: Apache/1.3.12 (Unix) PHP/3.0.16 mod\_perl/1.21 mod\_ssl/2.6.2 OpenSSL/0.9.5a-beta2\ +**PanafoNet**: Netscape-Enterprise/4.0\ +**GroovyNet**: Apache/1.3.12 (Unix) mod\_ssl/2.6.2 OpenSSL/0.9.5a\ +**ForthNet**: Νetscape-Enterprise/3.6 SP2\ +**HOL**: Netscape-Enterprise/3.6 SP2\ +**Compulink**: Microsoft-IIS/5.0\ +**TEE**: Netscape-Enterprise/4.0\ +**Internet Hellas**: Apache/1.3.12\ +**stsnet**: Apache/1.3.9 (Unix)\ +**mbn**: Microsoft-IIS/5.0 + +### [4.2 MAIL]{#ss4.2} + +Να σημειωθεί, οτι τα αποτελέσματα για τους mail servers eξήχθηκαν με ένα telnet στην πόρτα 25. + +**HellasNet**: Sendmail 8.9.1/8.9.1\ +**otenet**: Sendmail 8.10.1/8.10.1\ +**SparkNet**: Sendmail 8.11.0/8.11.0\ +**PanafoNet**: Netscape Messaging Server 4.1\ +**GroovyNet**: Sendmail 8.8.8/8.8.8\ +**forthnet**: Sendmail 8.8.5/8.8.5\ +**HOL**: QMail\ +**Compulink**: Sendmail 8.10.2/8.10.2\ +**TEE**: -\ +**Internet Hellas**:-\ +**stsnet**: Sendmail 8.9.3/8.9.3\ +**mbn**: Sendmail 8.8.5/8.8.5 + +### [4.3 NEWS]{#ss4.3} + +Αποτελέσματα με telnet στην πόρτα 119. + +**HellasNet**: NNTPcache server V2.3.3\ +**otenet**: -\ +**SparkNet**: -\ +**PanafoNet**: -\ +**GroovyNet**: -\ +**forthnet**: NNTPcache server V2.3.3\ +**HOL**: -\ +**Compulink**: InterNetNews NNRP server INN 2.2.1\ +**TEE**: -\ +**Internet Hellas**: -\ +**stsnet**: -\ +**mbn**: - + + +### [5. Αναλύσεις\...]{#s5} + +Από μια βασική ανάλυση, φαίνεται ότι το **Solaris** έχει τη μερίδα του λέωντος, πράγμα πολύ καλό αν αναλογιστούμε πόσο σταθερό και αξιόπιστο θεωρείται. + +Από την άλλη στους εξηπηρετητές web φαίνεται οτι ο **Apache** και ο **Netscape** είναι η πιο χρησιμοποιούμενη λύση. + +Όσο για τους **mail servers**, ε εδώ δεν χρειάζεται ανάλυση, το **sendmail** είναι ο αδιαμφισβήτητος (και αναμενόμενος) βασιλιάς. Οπαδοί του **Q** +μαζευτείτεεεεε! + + +### [6. Ευχαριστίες.]{#s6} + +Τέλος να ευχαριστίσω για τιw πληροφορίες που μας έδωσαν: + +τον Κύριο Αντώνιο Πετράκη απο την HellasNet,\ +τον Κύριο Αχιλλέα Βολίοτη απο την Otenet,\ +τον Κύριο Νίκο Ασλανάκη απο την SparkNet,\ +την κυρία Ζωή Παπακωνσταντίνου απο την Panafonet, + diff --git a/content/articles/29/03_hellenic-status.md b/content/articles/29/03_hellenic-status.md new file mode 100644 index 0000000..725f52e --- /dev/null +++ b/content/articles/29/03_hellenic-status.md @@ -0,0 +1,372 @@ ++++ +title = 'Το Linux στην Ελλάδα' +date = '2000-02-01T00:00:00Z' +description = '' +author = 'Evripidis Papakostas (evris@hellug.gr) Voula Sanida (voulariba@hellug.gr)' +issue = ['Magaz 29'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Φαίνεται πως κάτι αρχίζει να κινείται στον Ελληνικό χώρο όσον αφορά στο Linux. Η Ελληνική Linux κοινότητα πολλαπλασιάζει τα μέλη της, νέα οργανωμένα sites και +λίστες συζητήσεων εμφανίζονται, πρόοδος σημειώνεται στον χώρο της υποστήριξης και ενσωμάτωσης ελληνικών στο λειτουργικό αυτό. Παράλληλα, το Linux κεντρίζει +πλέον το ενδιαφέρον των ελληνικών περιοδικών, βιβλιοπωλείων, εταιριών, ακόμα και των Κρατικών Οργανισμών που βλέπουν μια πιθανή αγορά να δημιουργείται. Τις +περισσότερες φορές οι διεθνείς εξελίξεις στην Πληροφορική, τελικά υιοθετούνται και από την Ελληνική αγορά (έστω και με μια διαφορά φάσης). Από αυτή την πλευρά, +παρουσιάζει ιδιαίτερο ενδιαφέρον να καταγράψουμε την μέχρι τώρα εικόνα της ελληνικής Linux σκηνής και πως αυτή επηρεάστηκε το τελευταίο διάστημα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Ελληνική Linux Κοινότητα** +----------------------------------------------------------------- + +**2. Linux και Ελληνικά Σχολεία** +------------------------------------------------------------------- + +**3. H Εμπορική Πλευρά** +---------------------------------------------------------- + +- [3.1 Providers - Ένωση Ελλήνων Χρηστών Internet (EEXI)](#ss3.1) +- [3.2 Προεγκατεστημένα Linux - ΥΕΠ και Μακεδονικά Περιφερειακά](#ss3.2) +- [3.3 Πώληση και Υποστήριξη Συστημάτων. Step Computers](#ss3.3) + +**4. Έντυπη πληροφόρηση και Linux** +--------------------------------------------------------------------- + +**5. To Ελληνικό Linux με αριθμούς** +---------------------------------------------------------------------- + + +### [1. Ελληνική Linux Κοινότητα]{#s1} + +Μέχρι κάποια εποχή οι Έλληνες Linuxάδες αποτελούσαν μια αμελητέα μειοψηφία ανάμεσα στο σύνολο των υπολοίπων χρηστών Η/Υ. Η πρώτη επίσημη προσπάθεια καταμέτρησης +των Ελλήνων χρηστών Linux έγινε κάπου στα μέσα του 1996 και αυτοί που δηλώθηκαν δεν ξεπερνούσαν τους 50. Σήμερα σε τελευταία καταμέτρησή τους από το ελληνικό +ηλεκτρονικό περιοδικό για Linux, magaz (http://magaz.hellug.gr) ξεπερνούν τους 450 (αύξηση 800%). Αν οι απόλυτοι αριθμοί αυτοί σας φαίνονται μικροί, σκεφτείτε +πόσοι από εσάς έχετε συνδρομή internet και την χρησιμοποιήσατε μάλιστα για να δηλώσετε σε κάποιο δικτυακό τόπο ποιό λειτουργικό σύστημα χρησιμοποιείτε. + +Υπήρχαν βέβαια από τότε κάποιες λιγοστές μεμονωμένες σελίδες σχετικά με το Linux, στις οποίες οι τότε γκουρού έδιναν τεχνικές συμβουλές και βοήθεια στους +απεγνωσμένους (υποστήριξη ελληνικών, γραμματοσειρές). + +Στα λίγα αυτά χρόνια που πέρασαν η κατάσταση έχει σαφώς καλυτερεύσει. Ενδεικτικά αναφέρουμε μερικά από τα μεγαλύτερα και γνωστότερα sites: http://www.linux.gr +(Φθινόπωρο 1997), του επίσημου site του HELLUG http://www.hellug.gr, το ηλεκτρονικό περιοδικό magaz (http://magaz.hellug.gr), την ΕΕΕΑ (http://www.eeea.gr). + +Κάπου τον Φεβρουάριο του 1997 γίνεται το σημαντικότερο ίσως βήμα για την ελληνική Linux κοινότητα. Ο Γιάννης Ιωάννου δημιουργεί την ηλεκτρονική λίστα +linux-greek-users στον κόμβο argeas.argos.hol.gr. Η λίστα αυτή ασχολείται με την επίλυση προβλημάτων χρήσης του Linux και γενικότερα με οποιοδήποτε θέμα που +άπτεται του ενδιαφέροντος των Ελλήνων Linuxάδων. Αποτελεί δε ορόσημο στην πορεία του Linux στην Ελλάδα, καθώς έφερε σε επαφή όλους τους (μέχρι τότε μοναχικούς +και αποκομμένους) Linuxάδες, αναπτέρωσε το ηθικό και τις ελπίδες τους και αποτέλεσε το μέσο για την σύσφιξη των δεσμών τους και την ανάπτυξη της ιδέας της +κοινότητας (μιας ιδέας που είναι στενά συνυφασμένη με το Linux γενικότερα). + +Σήμερα, η λίστα αυτή αριθμεί επισήμως περί τα 200 μέλη (300% αύξηση μελών στα δύο χρόνια λειτουργίας της) και αρκετές φορές πολλαπλάσιο αριθμό ατόμων που την +παρακολουθούν χωρίς να είναι εγγεγραμμένοι. Αυτό πρακτικά σημαίνει πως ο νέος χρήστης που αντιμετωπίζει προβλήματα με το Linux (και που δεν μπορεί να λύσει +μόνος του) έχει μεγάλες πιθανότητες να βρει την λύση του αν καταφύγει (με ευγενικό τρόπο) στην βοήθεια του τεράστιου think tunk της ελληνικής Linux κοινότητας. + +Παράλληλα, έχει μπει σε λειτουργία η linux-howto. Διαθέτει πάνω από 60 μέλη, στην οποία συζητούνται προβλήματα τεκμηρίωσης, μεταφράσεων, εξελληνισμών +προγραμμάτων και διανομών (60 εθελοντές μεταφραστές και συγγραφείς δεν είναι και λίγοι!). + +Η δραστηριοποίηση των ελλήνων Linuxάδων οδήγησε και στο σχηματισμό του επίσημου συλλόγου Linuxάδων HELLUG (Hellenic Linux Users Group) που σήμερα αριθμεί περί +τα 100 μέλη. + +Ο σκοπός του συλλόγου είναι η ανάπτυξη εφαρμογών, η σύσφιξη των σχέσεων των Ελλήνων χρηστών Linux, η προώθηση και η διάδοση του λειτουργικού, ο εξελληνισμός +μέρους του και η συνεργασία με αντίστοιχους συλλόγους, οργανισμούς και εταιρίες εντός και εκτός Ελλάδας. + +Ανεπίσημα τοπικά LUGs υπάρχουν επίσης στην Θεσ/κη (TheLUG), Πάτρα (PLUG), Αλεξανδρούπολη (ALLUG) και Θράκη (ThraceLUG). + +Μέσω του συλλόγου, μπόρεσαν να οργανωθούν, συστηματοποιηθούν και συνεχιστούν οι ανεξάρτητες συνεισφορές των διαφόρων Linuxάδων και έτσι πλέον στον κόμβο του θα +βρείτε λύση για χρόνια προβλήματα που ταλαιπωρούσαν τον κόσμο: ελληνικά πληκτρολόγια, γραμματοσειρές, εκτυπώσεις με ελληνικά, μεταφρασμένη τεκμηρίωση και +εφαρμογές, ελληνικοποιημένες διανομές (π.χ. SuSE), διορθωτές ορθογραφίας, ερωταπαντήσεις (FAQ), οδηγίες κλπ. Πλέον περιβάλλοντα όπως το KDE, Gnome έχουν σχεδόν +ολικά εξελληνιστεί. + +Στις δραστηριότητες του HELLUG περιλαμβάνονται happenings (όπως αυτό στην Στουρνάρη, όπου μοιράστηκαν δωρεάν διανομές Linux και ενημερωτικό υλικό, το +παρακολούθησαν περί τα 2000 άτομα), παρουσία σε εκθέσεις (περίπτερο στην INFOSYSTEM 99) κλπ. + +Σημαντική εξέλιξη του χώρου αποτέλεσε και η κυκλοφορία (Ιανουάριος 1998) του ηλεκτρονικού περιοδικού για Linux, magaz (http://magaz.hellug.gr) με άνω των 2500 +hits μηνιαίως και με συντακτική ομάδα άνω των 10 αρθρογράφων. + +Βλέπουμε πως η δουλειά που έχει γίνει και η πληροφόρηση που προσφέρεται γύρω από το Linux στον ελληνικό χώρο είναι δυσανάλογα μεγάλη σε σχέση με την διάδοση +του. Δεν είμαστε ενήμεροι για αντίστοιχους αφιλοκερδείς συλλόγους, λίστες βοηθείας και δωρεάν ηλεκτρονικά περιοδικά και τόπους στην Ελλάδα για άλλα λειτουργικά. + + +### [2. Linux και Ελληνικά Σχολεία]{#s2} + +Στις 22 Απριλίου 1999, το Υπουργείο Εθνικής Παιδείας και Θρησκευμάτων προκυρήσει διαγωνισμό για την προμήθεια αρκετών χιλιάδων Η/Υ για τα Ενιαία Λύκεια με +προεγκατάσταση 2 Λ.Σ. εκ των οποίων το ένα θα πρέπει να είναι \"τύπου Linux\". Λίγους μήνες πριν, η Αγγλία, η Γαλλία και το Μεξικό είχαν προβεί σε αντίστοιχες +ενέργειες. Ο διαγωνισμός αυτός αναγκαστικά κινεί το ενδιαφέρον των μεγάλων εταιριών γύρω από το λειτουργικό αυτό. Να σημειωθεί πως μέχρι σήμερα ο διαγωνισμός +δεν έχει κριθεί. + +![](/29/img/ypepth1.gif) + +![](/29/img/ypepth2.gif) + +Τέτοιοι διαγωνισμοί προκυρήχτηκαν παράλληλα για όλα τα γεωγραφικά διαμερίσματα της Ελλάδας. + +To ΥΠΕΠΘ συνεχίζει να εκπλήσσει ευχάριστα τον κόσμο, παρακολουθώντας από κοντά τις εξελίξεις και αναβαθμίζοντας μέσα σε λίγους μήνες και το πρόγραμμα σπουδών +του, όπως φαίνεται και στο απόκομμα από το μάθημα Λειτουργικά Συστήματα για τα ΤΕΕ. + +![](/29/img/ypepth3.gif) + + +### [3. H Εμπορική Πλευρά]{#s3} + +Κατηγορηματικά μπορούμε να πούμε πως αυτή τη στιγμή, το Linux κάθε άλλο παρά πρωταγωνιστεί στις δραστηριότητες των περισσοτέρων εταιριών. Με την ίδια βεβαιότητα +πάντως μπορούμε να ισχυριστούμε πως ο αριθμός των εταιριών που βλέπουν πλέον με άλλο μάτι το λειτουργικό αυτό δεν είναι αμελητέος (ειδικά σε σύγκριση με το +παρελθόν). + +Ολοένα και περισσότερες εταιρίες αρχίζουν να ασχολούνται συστηματικά με τον χώρο του Linux, καθώς σιγά σιγά αρχίζουν να βλέπουν να αποτελεί ένα υπολογίσιμο +μέρος της πίτας της αγοράς. Ενδεικτικά αναφέρουμε εταιρίες όπως η Step στον Πειραιά, τα Μακεδονικά Περιφερειακά και την ΥΕΠ (Υπηρεσίες Εφαρμοσμένης +Πληροφορικής) στην Θεσ/κη που ήδη προσφέρουν Η/Υ με προεγκατεστημένο Linux. + +Στον χώρο της τεχνικής υποστήριξης, οι πατροπαράδοτα μεγάλες εταιρίες, όπως η Compaq και η HP, έχουν (ή προσπαθούν) να αλλάξουν την πολιτική τους και να +ακολουθήσουν τη γραμμή που υπαγορεύει η μητρική εταιρεία (τεχνική υποστήριξη σε Linux αλλά και πώληση). Από όσο είμαστε ενήμεροι, υπάρχουν σκέψεις από μεγάλες +ελληνικές εταιρίες για κυκλοφορία σειρών Η/Υ με προεγκατεστημένο Linux και από τις αλυσίδες λιανικής διάθεσης που διαθέτουν. + +Επίσης, όπως εδώ και καιρό συμβαίνει στο εξωτερικό, υπάρχουν κάποιες εταιρείες που το στηρίζουν επενδύοντας σε μακροπρόθεσμα έμμεσα oφέλη από αυτήν την κίνηση. +Έτσι, δεν είναι λίγοι αυτοί που έχουν βοηθήσει ενεργά την ελληνική Linux κοινότητα με διάφορους τρόπους. + +Η Forthnet, για παράδειγμα, χορηγεί στον σύλλογο HELLUG τη γραμμή που εξυπηρετεί το www.hellug.gr, η Internet Hellas το www.linux.gr (και παλαιότερα η HOL), η +ΕΕΧΙ έχει επίσης προσφερθεί να βοηθήσει αναλόγως όπου χρειαστεί. + +Κάποιοι άλλοι όπως τα Μακεδονικά Περιφερειακά και η SYSWARE, έχουν δωρίσει τους απολύτως αναγκαίους servers, ενώ υπάρχουν και περιπτώσεις εταιριών που έχουν +εμπλακεί προάγοντας το Linux, χωρίς καν να άπτεται των δραστηριοτήτων τους (όπως π.χ. η Modus Vivendi που ανέλαβε την διακόσμηση και τα έξοδα του περιπτέρου +στην INFOSYSTEM 99). + +Μιλήσαμε με μερικούς αντιπροσώπους των χαρακτηριστικότερων κατηγοριών εταιριών που στις εμπορικές τους δραστηριότητες ήδη περιλαμβάνουν το Linux. + +### [3.1 Providers - Ένωση Ελλήνων Χρηστών Internet (EEXI)]{#ss3.1} + +Ο κ. Αλέξης Κουλουμπής υπεύθυνος για την διαχείριση του δικτύου της ΕΕΧΙ μας αναφέρει: + +\"Η EEXI είναι μια Ένωση μη κερδοσκοπικού χαρακτήρα. Από την πρώτη κιόλας μέρα λειτουργίας της, το δίκτυο της βασίζεται εξ\'ολοκλήρου πάνω σε Linux. + +Η απόφαση αυτή πάρθηκε λαμβάνοντας υπόψιν την σταθερότητα που επιδείκνυε το εν λόγω λειτουργικό σύστημα, την εμπειρία των system administrators με αυτό, την +πληθώρα εφαρμογών που υπήρχαν διαθέσιμες στο δίκτυο καθώς και το ανύπαρκτο κόστος αρχικής κτήσης του λογισμικού. + +Σημαντικό ήταν για εμάς επίσης το γεγονός πως δεν ήμασταν αποκομμένοι από τους \*προμηθευτές\* του λογισμικού. Αυτοί καθώς γνωρίζετε δεν είναι άλλοι από την +Linux κοινότητα, κοινοί άνθρωποι με τους οποίους μπορούμε να έρθουμε άμεσα σε επαφή και να συνεργαστούμε για να διορθώσουμε οποιαδήποτε προβλήματα. + +Από την άλλη, η προσφορά του κώδικα των εφαρμογών, κάνει το customization πολύ πιο εύκολο. + +Αξίζει να σημειώσουμε πως από το 1993 μέχρι σήμερα, υπάρχουν Linux μηχανήματα που παραμένουν σε λειτουργία, με συνεχείς on-line αναβαθμίσεις, επιδεικνύοντας +άψογη συμπεριφορά. + +Η ΕΕΧΙ εξυπηρετεί άνω των 2000 μελών, προσφέροντας τους όλες τις συνήθεις διαδικτυακές υπηρεσίες, καθώς και δυνατότητα χρήσης unix shell. + +Μέσα στις δραστηριότητές μας συμπεριλαμβάνονται και Linux specific σεμινάρια σε ιδιώτες και οργανισμούς, καθώς και συνεργασίες με το HELLUG στον οποίο μερικοί +από μας τυγχάνουν και ενεργά μέλη\" + +### [3.2 Προεγκατεστημένα Linux - ΥΕΠ και Μακεδονικά Περιφερειακά]{#ss3.2} + +\"Διαπιστώνουμε καθημερινά, ότι και ο επιχειρηματικός κόσμος αναγνωρίζει τα πλεονεκτήματα του Linux και προχωράει βαθμιαία στην εφαρμογή του. Αναμένουμε όμως +αντίστοιχη ανταπόκριση και από τους Home users. Οι μέχρι τώρα δραστηριότητές μας, όσον αφορά τον χώρο του Linux, μπορούν να συνοψιστούν στα εξής: + +Αντιπροσωπεύουμε την διανομή SuSE και παρέχουμε δωρεάν τηλεφωνική υποστήριξη εγκατάστασης για 60 ημέρες (μόνο για την τρέχουσα έκδοση). + +Τα \"Μακεδονικά Περιφερειακά\" με την συνεργασία μας παράγουν την σειρά υπολογιστών XpePPer με λειτουργικό σύστημα Linux (SuSE). + +Από την εταιρεία μας ζητείται συνήθως η προμήθεια και εγκατάσταση file και print servers καθώς επίσης FAX servers, DNS, proxy κλπ. + +Αντιπροσωπεύουμε στην Ελλάδα το εξελληνισμένο λογισμικό διαχείρισης νοσοκομειακών εργαστηρίων της γερμανικής εταιρείας IMP. Το λογισμικό αυτό τρέχει σε Linux με +αρχιτεκτονική client/server. + +Το Υπουργείο Παιδείας σε πρόσφατο μεγάλο διαγωνισμό για τον εξοπλισμό των εργαστηρίων Πληροφορικής και Φυσικής ζήτησε οι προσφορές να περιλαμβάνουν +εγκατεστημένο λειτουργικό σύστημα πλην των Windows και Linux. Η InfoQuest συμμετείχε σ\' αυτόν τον διαγωνισμό συνεργαζόμενη μαζί μας στο μέρος που σχετίζεται με +το Linux. + +Στη συνεισφορά μας για την προώθηση του Linux μεταξύ άλλων συγκαταλέγεται μια σειρά ολιγόλεπτων δυστυχώς παρουσιάσεων στην εκπομπή PCTV της ΕΤ3 καθώς και η +προβολή μέσω του δικτυακού τόπου μας www.suse.gr. Επίσης προσπαθούμε να βοηθάμε την εξάπλωση του λειτουργικού αυτού, με όποιον τρόπο μπορούμε. Χαρακτηριστικά +αναφέρω την αρμονική μας συνεργασία με το HELLUG, το οποίο τόσο εμείς όσο και τα Μακεδονικά Περιφερειακά έχουμε ενισχύσει κατά καιρούς, χορηγώντας διανομές +Linux και Η/Υ σε εκθέσεις όπως η INFOSYSTEM και διάφορα happenings που διοργανώθηκαν.\" + +Γ. Παπαδόπουλος + +Υπηρεσίες Εφαρμοσμένης Πληροφορικής + +Δωδεκανήσου 61, 551 31 Θεσσαλονίκη + +Τηλ: 031-424512, FAX: 031-417537 + +### [3.3 Πώληση και Υποστήριξη Συστημάτων. Step Computers]{#ss3.3} + +\"Η Step δημιουργήθηκε στα τέλη του 1994 με αντικείμενο την πώληση και συντήρηση εξοπλισμού Η/Υ και την παροχή ολοκληρωμένων λύσεων LAN στις μικρομεσαίες +επιχειρήσεις. Η έδρα μας είναι στον Πειραιά και δραστηριοποιούμαστε σε ολόκληρη την Αττική. + +Από τα μέσα του 1996 πειραματιστήκαμε με το Linux και αρκετά αργότερα ξεκινήσαμε μια συνεργασία με την SuSE, της οποίας αποτελέσαμε τον αρχικό distributor στην +Ελλάδα. + +Η εταιρία μας έχει πλέον μεγάλη εμπειρία στο Linux και στις εφαρμογές του στον επιχειρηματικό χώρο. Αρκετοί από τους πελάτες μας βασίζονται σε αυτό για τις +καθημερινές τους ανάγκες, σε επίπεδο server βέβαια ακόμα. + +Έχουμε συνεργαστεί με το HELLUG για τον εξελληνισμό της διανομής SuSE Linux, και έχουμε στηρίξει σε αρκετές περιστάσεις, με παροχή υλικού, διανομών και άλλες +χορηγίες τις προσπάθειες του συλλόγου. + +Η ίδια η εταιρία μας καλύπτει τις δικτυακές της ανάγκες βασισμένη σε σύστημα Linux και την τεχνογνωσία που αποκομμίζουμε από αυτό, θα προσπαθήσουμε να την +περάσουμε και στην αγορά σε συστήματα που θα παρέχουμε. Μια τέτοια συνεργασία με μεγάλη εταιρία πληροφορικής είναι σε εξέλιξη. + +Έχουμε συνεργαστεί με το HELLUG για τον εξελληνισμό της διανομής SuSE Linux, και έχουμε στηρίξει σε αρκετές περιστάσεις, με παροχή υλικού, διανομών και άλλες +χορηγίες τις προσπάθειες του συλλόγου. + +Επειδή πιστεύουμε πως η ενίσχυση της Linux κοινότητας έμμεσα ή άμεσα ωφελεί και τις επιχειρηματικές μας δραστηριότητες, προσπαθούμε να προσφέρουμε και στον χώρο +αυτό. Στα σχέδια μας συμπεριλαμβάνεται η συγγραφή εγχειριδίου για Linux για τον άπειρο χρήστη με σκοπό να τον ενημερώσει για τις ιδιαιτερότητες των διάφορων +διανομών Linux. \" + +Γιώργος Παπαμιχελάκης + +Step Computers + + +### [4. Έντυπη πληροφόρηση και Linux]{#s4} + +Αν ξεφυλλίσετε προσεκτικά τα γνωστότερα περιοδικά του χώρου της πληροφορικής θα παρατηρήσετε πως πλέον σταθερά θα βρείτε άρθρα, αφιερώματα, ερωταπαντήσεις, νέα +και προγράμματα για Linux. + +Μέχρι κάποιο διάστημα, το ηλεκτρονικό περιοδικό magaz ήταν το μοναδικό βήμα για το, ομολογουμένως ολιγομελές, ελληνικό Linux κοινό. + +Στον έντυπο χώρο, οι επιλογές περιορίζονταν σε εξειδικευμένες εκδόσεις του εξωτερικού (βλέπε Linux Journal). + +Δειλά δειλά το 1998 αρχίζουν να εμφανίζονται μικρά άρθρα και νέα για Linux, ενώ η τάση αυτή γίνεται ιδιαίτερα αισθητή από τα μέσα του 1999. + +Για παράδειγμα, το RAM του Απριλίου (τεύχος 124) κάνει το πρώτο εκτεταμένο αφιέρωμα για Linux, διαθέτοντας πάνω από 40 σελίδες, καθώς και μια ολοκληρωμένη +διανομή SuSE 6.0. + +Παρεμφερή πολιτική ακολούθησαν και τα υπόλοιπα περιοδικά όπως το Chip, το Computer Για Όλους κλπ. + +Ακόμα και μη τεχνικά περιοδικά ή εφημερίδες έχουν αφιερώσει σελίδες τους στο νέο αυτό λειτουργικό. Ενδεικτικά αναφέρουμε το ΜΕΝ, το ΜΕΤΡΟ, το Βήμα, την +Ελευθεροτυπία. + +Ας μην ξεχνάμε και την κυκλοφορία του D.I.Li.Ma που αποτελεί το πρώτο εξειδικευμένο περιοδικό για Unix. + +Το γεγονός αυτό μιλάει από μόνο του. Η ύλη των εντύπων θα πρέπει να βρίσκεται σε συμφωνία με το ενδιαφέρον και τις προτιμήσεις του αγοραστικού κοινού. +Περισσότερες λοιπόν σελίδες για Linux/Unix ένα πράγμα μπορεί να σημαίνει: αυξημένη απήχηση του λειτουργικού στους αναγνώστες. + + +### [5. To Ελληνικό Linux με αριθμούς]{#s5} + +Καταμέτρηση Χρηστών Linux Ελλάδας (στοιχεία από το magaz.hellug.gr) + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Αριθμός Χρηστών + Έτος + + 1996 50 + + 1999 450 + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Αριθμός Λιστών Ηλεκτρονικών Μηνυμάτων + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Αριθμός Λιστών + Έτος + + 1996 0 + + 1997 2 + + 1998 4 + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Οι λίστες αυτές είναι οι : + +linux-greek-users\@hellug.gr για κάθε είδους συζήτηση και τεχνικά προβλήματα σχετικά με Linux. + +linux-howto\@hellug.gr για μεταφραστικά ζητήματα και συγγραφή τεκμηρίωσης για Linux. + +hellug\@hellug.gr για διαδικαστικά θέματα από τα μέλη του συλλόγου HELLUG + +thelug (από newsgroup στο edessa.topo.auth.gr) για την επικοινωνία των μελών του Θεσσαλονικιώτικου LUG + +Χρήστες της linux-greek-users (δεν προσμετρούνται οι χρήστες που τη διαβάζουν μέσω newsgroup και που είναι αρκετές φορές πολλαπλάσιοι) + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Αριθμός Χρηστών + Έτος + + 1997 50 (3978 Messages) + + Μέσα του 1999 200 (9000 Messages) + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Ο διεθνής counter χρηστών Linux (counter.li.org) δίνει: + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Χρήστες + Χώρα + + Κύπρος 70 + + Ελλάδα 518 + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +![](/29/img/linux_counter.jpg) + +Ιδιαίτερο ενδιαφέρον παρουσιάζει η πρόβλεψη του Linux Counter για τον πραγματικό αριθμό χρηστών Linux. Με αναγωγή στα δεδομένα της Ελλάδας ο αριθμός των H/Y με +Linux κυμαίνεται μεταξύ των 10360 και 200000 μηχανημάτων! + +Αριθμός Linux Users Groups (LUGs) + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Αριθμός LUGs + Έτος + + 1996 0 + + 1997 1 + + 1998 3 + + 1999 5 + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Επίσημος σύλλογος: HELLUG (http://www.hellug.gr) + +Τοπικά LUGs: + +TheLUG (http://hal.csd.auth.gr/thelug) + +PLUG (http://students.ceid.upatras.gr/ glavas/linux) + +ALLUG (http://www.neta.gr/allug) + +ThraceLUG (http://www.thracelug.gr) + +Αρθρογράφοι του magaz + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Αριθμός + Έτος + + 1998 4 (800 hits/month) + + 1999 10 (3500 hits/month) + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Άρθρα του RAM με εκτεταμένες αναφορές στο Linux + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + \ Αριθμός + Έτος + + 1997 0 + + 1998 20 (περίπου) + + 1999 50 (περίπου) + + 2000 25 (περίπου - μέχρι Απρίλιο) + + + ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- + +Συνολικά Hits στον κόμβο του HELLUG σε 14 μήνες λειτουργίας: 1894265 + diff --git a/content/articles/29/04_xbasic.md b/content/articles/29/04_xbasic.md new file mode 100644 index 0000000..a9e00ee --- /dev/null +++ b/content/articles/29/04_xbasic.md @@ -0,0 +1,336 @@ ++++ +title = 'Xbasic' +date = '2000-12-01T00:00:00Z' +description = '' +author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)' +issue = ['Magaz 29'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Συναρτήσεις στην XBASIC.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Οι συναρτήσεις** +---------------------------------------------- + +**2. Παράδειγμα συνάρτησης.** +------------------------------------------------------ + +- [2.1 Επεξήγηση του προγράμματος](#ss2.1) + +**3. Πως λειτουργούν οι συναρτήσεις** +-------------------------------------------------------------- + +- [3.1 Συναρτήσεις και δομημένος προγραμματισμός](#ss3.1) +- [3.2 Γιατί το να γράφουμε δομημένα με συναρτήσεις είναι σημαντικό;](#ss3.2) +- [3.3 Σχεδιάζοντας ένα δομημένο πρόγραμμα.](#ss3.3) +- [3.4 Γράφοντας μια συνάρτηση](#ss3.4) +- [3.5 Το εσωτερικό της συνάρτησης](#ss3.5) +- [3.6 Ο κώδικας των συναρτήσεων.](#ss3.6) + + +### [1. Οι συναρτήσεις]{#s1} + +Οι συναρτήσεις είναι βασικό δομικό στοιχείο των προγραμμάτων στην Xbasic. Οι συναρτήσεις είναι ανεξάρτητα κομμάτια κώδικα που εκτελούν μια συγκεκριμένη εργασία +και μπορεί να επιστρέφουν κάποια τιμή στον κώδικα που τις καλεί. + +Οι ιδιότητες των συναρτήσεων: + +- **Έχουν μοναδικό όνομα.**\ + Κάθε συνάρτηση έχει ένα μοναδικό όνομα. Η χρήση του ονόματος σε ένα άλλο μέρος του προγράμματος, επιτρέπει την εκτέλεση των εντολών που περιέχονται σε αυτή. + Αυτό ονομάζεται και κλήση της συνάρτησης. Μια συνάρτηση μπορεί να καλείται και μέσα από μια άλλη συνάρτηση. +- **Ο κώδικας που περιέχουν είναι ανεξάρτητος από το υπόλοιπο πρόγραμμα.**\ + Όλες οι μεταβλητές που χρησιμοποιούνται δεν έχουν σχέση με τις μεταβλητές που μπορεί να έχουν το ίδιο όνομα και να υπάρχουν αλλού στο πρόγραμμα. Εξαίρεση + είναι οι μεταβλητές που εμείς ορίζουμε ότι θα έχουν σχέση με το υπόλοιπο πρόγραμμα όπως θα δούμε παρακάτω. +- **Μια συνάρτηση εκτελεί μια συγκεκριμένη εργασία.**\ + Οι συναρτήσεις συνήθως χρησιμοποιούνται για να εκτελέσουμε συγκεκριμένες εργασίες που μπορεί να χρειαστεί να εκτελεστούν πολλές φορές μέσα σε ένα πρόγραμμα, + με διαφορετικά δεδομένα κάθε φορά. +- **Μια συνάρτηση μπορεί να επιστρέφει μια τιμή στον κώδικα που την καλεί.**\ + Όταν το πρόγραμμά μας καλεί μια συνάρτηση, εκτελείται ο κώδικας της συνάρτησης και μπορούμε να έχουμε κάποια τιμή που επιστρέφει από την συνάρτηση σαν + αποτέλεσμα της εκτέλεσης του κώδικα. + + +### [2. Παράδειγμα συνάρτησης.]{#s2} + +Παρακάτω ακολουθεί ένα παράδειγμα συνάρτησης στην XBASIC. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 1.' + 2.' + 3.' #################### + 4.' ##### PROLOG ##### + 5.' #################### + 6.' + 7.PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent + 8.VERSION "0.0000" ' version number - increment before saving altered program + 9.' + 10.' You can stop the PDE from inserting the following PROLOG comment lines + 11.' by removing them from the prolog.xxx file in your \xb\xxx directory. + 12.' + 13.' Programs contain: 1: PROLOG - no executable code - see below + 14.' 2: Entry function - start execution at 1st declared func + 15.' * = optional 3: Other functions - everything else - all other functions + 16.' + 17.' The PROLOG contains (in this order): + 18.' * 1. Program name statement PROGRAM "progname" + 19.' * 2. Version number statement VERSION "0.0000" + 20.' * 3. Import library statements IMPORT "libName" + 21.' * 4. Composite type definitions TYPE ... END TYPE + 22.' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args) + 23.' * 6. External function declarations EXTERNAL FUNCTION FuncName (args) + 24.' * 7. Shared constant definitions $$ConstantName = literal or constant + 25.' * 8. Shared variable declarations SHARED variable + 26.' + 27.' ****** Comment libraries in/out as needed ***** + 28.' + 29.' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... + 30.' IMPORT "xcm" ' Complex library : complex number library (trig, etc) + 31.' IMPORT "xst" ' Standard library : required by most programs + 32.' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs + 33.' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs + 34.' + 35.DECLARE FUNCTION Entry () + 36.DECLARE FUNCTION SLONG cube (SLONG x) + 37.' + 38.' + 39.' ###################### + 40.' ##### Entry () ##### + 41.' ###################### + 42.' + 43.' Programs contain: + 44.' 1. A PROLOG with type/function/constant declarations. + 45.' 2. This Entry() function where execution begins. + 46.' 3. Zero or more additional functions. + 47.' + 48.FUNCTION Entry () + 49. SLONG inpu, answer + 50. STRING inpus + 51. + 52. inpus=INLINE$("Enter number :") + 53. inpu=SLONG(inpus) + 54. answer = cube(inpu) + 55. PRINT answer + 56. + 57. + 58. + 59.END FUNCTION + 60.' + 61.' + 62.' ##################### + 63.' ##### cube () ##### + 64.' ##################### + 65.' + 66.FUNCTION SLONG cube (SLONG x) + 67. + 68. x_cube = x * x * x + 69. + 70.END FUNCTION(x_cube) + 71.END PROGRAM + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [2.1 Επεξήγηση του προγράμματος]{#ss2.1} + +Ας προσπαθήσουμε όμως να κάνουμε μια ανάλυση του παραπάνω προγράμματος. Έχουμε λοιπόν. + +**Γραμμές 1..34**\ +Εδώ έχουμε τους αρχικούς ορισμούς και το κομμάτι PROLOG όπως έχουμε αναλύσει και στα προηγούμενα τεύχη. + +**Γραμμή 35**\ +Εδώ έχουμε το ορισμό της συνάρτησης Entry() όπου αναλύοντας τον βλέπουμε ότι αυτή η συνάρτηση δεν έχει παράμετρο. + +**Γραμμή 36**\ +Σε αυτή την γραμμή ορίζεται η συνάρτηση cube και από τον ορισμό της βλέπουμε ότι αυτή η συνάρτηση είναι τύπου SLONG που σημαίνει ότι θα μας επιστρέψει κάποια +τιμή SLONG. Στην λίστα παραμέτρων (αυτή που υπάρχει ανάμεσα στις παρενθέσεις) βλέπουμε ότι η cube δέχεται σαν παράμετρο μια SLONG μεταβλητή για να κάνει τον +υπολογισμό. Στο παράδειγμά μας έχουμε ορίσει και την cube και την παράμετρό της ίδιου τύπου. Αυτό δεν είναι δεσμευτικό, μπορούμε να έχουμε μία ή και πολλές +παραμέτρους διαφορετικού τύπου από τον τύπο της οριζόμενης συνάρτησης. + +**Γραμμές 48..55**\ +Στην γραμμές 49 και 50 ορίζουμε τις μεταβλητές που θα χρησιμοποιηθούν μέσα στην Entry. Στην γραμμή 52 παίρνουμε την πληκτρολόγηση του χρήστη στην μεταβλητή +τύπου string inpus. Στην γραμμή 53 την μετατρέπουμε σε SLONG για να μπορεί να χρησιμοποιηθεί από την cube. Στην γραμμή 54 καλείται η συνάρτηση cube να κάνει τον +υπολογισμό και να επιστρέψει το αποτέλεσμα στην μεταβλητή answer.\ +Στην γραμμή 55 εμφανίζουμε το αποτέλεσμα στο console window της Xbasic. + +**Γραμμές 66..71**\ +Εδώ βρίσκεται ο κώδικας της συνάρτησης cube. Στην γραμμή 66 υπάρχει ο ορισμός των παραμέτρων και στην συνέχεια έχουμε τον κώδικα υπολογισμού. Σε αυτή την +συνάρτηση έχουμε απλά το υπολογισμό του κύβου (ύψωση στην τρίτη δύναμη) της παραμέτρου x, που βρίσκεται στην γραμμή 68. Στην γραμμή 70, η τοποθέτηση του +αποτελέσματος σε παρένθεση κάνει την Xbasic να δώσει την τιμή αυτή σαν αποτέλεσμα υπολογισμού στην συνάρτηση cube και να το επιστρέψει στην μεταβλητή που +χρησιμοποιήσαμε για την κλήση της, την answer. + +Με αυτό το απλό παράδειγμα φαίνεται πόσο χρήσιμο είναι να χρησιμοποιούμε συναρτήσεις, εφόσον αν ξαναχρειαστούμε μέσα στο πρόγραμμα να υπολογίσουμε τον κύβο ενός +αριθμού δεν έχουμε παρά να καλέσουμε την συνάρτηση. + +Π.χ. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + SLONG x1,x2 + + x1 = 10 + x2 = cube(x1) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [3. Πως λειτουργούν οι συναρτήσεις]{#s3} + +Ένα πρόγραμμα Xbasic δεν εκτελεί τις εντολές που βρίσκονται σε μια συνάρτηση μέχρι η συνάρτηση να κληθεί από ένα άλλο μέρος του προγράμματος. Όταν η συνάρτηση +κληθεί, τότε το πρόγραμμα στέλνει τις παραμέτρους (αν υπάρχουν) στην συνάρτηση. Η παράμετρος είναι κάποια μεταβλητή που περιέχει πληροφορία που είναι απαραίτητη +για την εκτέλεση του κώδικα της συνάρτησης. Στην συνέχεια εκτελούνται οι εντολές που περιέχονται στην συνάρτηση εκτελώντας την επιθυμητή εργασία. Όταν τελειώσει +η εκτέλεση του κώδικα της συνάρτησης η εκτέλεση συνεχίζεται στην αμέσως επόμενη εντολή μετά την κλήση της συνάρτησης. Οι συναρτήσεις μπορεί να επιστρέφουν +κάποια τιμή στο πρόγραμμα που τις κάλεσε. + +### [3.1 Συναρτήσεις και δομημένος προγραμματισμός]{#ss3.1} + +Χρησιμοποιώντας τις συναρτήσεις δημιουργούμε ένα πρόγραμμα που είναι πολύ πιο εύκολο να αναπτυχθεί και να διορθωθεί εκ των υστέρων. Αυτός ο τρόπος συγγραφής +προγράμματος ονομάζεται δομημένος προγραμματισμός. + +### [3.2 Γιατί το να γράφουμε δομημένα με συναρτήσεις είναι σημαντικό;]{#ss3.2} + +Είναι πολύ ευκολότερο να προγραμματίζουμε δομημένα γιατί αυτός ο τρόπος προγραμματισμού μας επιτρέπει να αντιμετωπίσουμε το περίπλοκα προβλήματα διαιρώντας τα +σε πολλά απλά μικρά. Κάθε μικρό πρόβλημα αντιμετωπίζεται με την δική του συνάρτηση όπου οι μεταβλητές είναι απομονωμένες από το υπόλοιπα πρόγραμμα εκτός από τις +παραμέτρους και την τιμή επιστροφής. Έτσι η επίλυση μικρών προβλημάτων ένα κάθε φορά μας επιτρέπει να αναπτύξουμε με μεγαλύτερη ευκολία την εφαρμογή μας. + +Είναι πολύ ευκολότερο να βρίσκουμε τα λάθη σε ένα δομημένο πρόγραμμα. Αν υπάρχει κάποιο λάθος, αυτό μπορεί να περιοριστεί στην αντίστοιχη συνάρτηση και να +επιλυθεί. Δεν μπορούμε να το συγκρίνουμε με το πόσο επίπονο θα είναι να ψάχνουμε σε ένα κατεβατό από πολλές γραμμές κώδικα για να εντοπίσουμε το λάθος. + +Ένα πραγματικό πλεονέκτημα των συναρτήσεων είναι ότι αφού γράψουμε μια συνάρτηση για να λύσουμε ένα επιμέρους πρόβλημα τότε αυτή η συνάρτηση είναι διαθέσιμη να +χρησιμοποιηθεί ξανά, είτε στο τρέχον πρόγραμμα που γράφουμε, είτε σε κάποιο άλλο μεταγενέστερο. Ακόμα και αν οι ανάγκες του επόμενου προγράμματος είναι λίγο +διαφορετικές, είναι πιο απλό να αλλάξουμε λίγο τις εντολές μιας συνάρτησης, παρά να την ξαναγράψουμε από την αρχή. + +### [3.3 Σχεδιάζοντας ένα δομημένο πρόγραμμα.]{#ss3.3} + +Αν θέλετε να σχεδιάσετε ένα δομημένο πρόγραμμα πρέπει πρώτα να κάνετε ένα σχέδιο των λειτουργιών του προγράμματος. Αυτό πρέπει να γίνει πριν ακόμη αρχίζουμε να +γράφουμε κάποια γραμμή κώδικα. Είναι ανάγκη να ορισθούν οι λειτουργίες του προγράμματος. Παρακάτω θα δούμε ένα παράδειγμα στησίματος ενός δομημένου +προγράμματος. Ας πούμε λοιπό ότι ένα πρόγραμμα θα εκτελεί τις εργασίες: + +- Εισαγωγή νέων ονομάτων και διευθύνσεων +- Διόρθωση των στοιχείων που ήδη υπάρχουν +- Ταξινόμηση στοιχείων κατά όνομα +- Εκτύπωση ετικετών + +Με αυτόν τον κατάλογο εργασιών μπορούμε τώρα να αναλύσουμε κάθε εργασία στις επιμέρους για να ξεκινήσουμε να γράφουμε τον κώδικα. Ας ξεκινήσουμε με το +\"Εισαγωγή νέων ονομάτων και διευθύνσεων\" + +- Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο +- 'νοιγμα πεδίων στην οθόνη για την καταχώρηση νέων στοιχείων +- Προσθήκη νέων στοιχείων στον κατάλογο των ονομάτων +- Φύλαξη όλου του καταλόγου + +Το \"Διόρθωση των στοιχείων που ήδη υπάρχουν\" αναλύεται σε: + +- Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο +- 'νοιγμα πεδίων στην οθόνη για την διόρθωση των στοιχείων +- Φύλαξη όλου του καταλόγου + +Θα παρατηρήσατε ότι και στις δύο περιπτώσεις υπάρχουν δύο κοινές λειτουργίες, η \"Ανάγνωση των διαθεσίμων ονομάτων από το αρχείο\" και η \"Φύλαξη όλου του +καταλόγου\". Εδώ φαίνεται καθαρά η οικονομία χρόνου που μπορεί να έχουμε με την χρήση των συναρτήσεων. Θα γράψουμε δύο συναρτήσεις για αυτές τις δύο λειτουργίες +και θα τις χρησιμοποιήσουμε την κάθε μια, δύο φορές μέσα στο πρόγραμμά μας. Αυτή η μέθοδος δίνει ιεραρχική δομή στον κώδικα του προγράμματός μας. + +Αν ακολουθήσουμε την μέθοδο της αντιμετώπισης ενός προβλήματος διαιρώντας το σε περισσότερα μικρότερα δημιουργούμε ευανάγνωστα και εύκολα στην διόρθωση +προγράμματα. Έτσι θα δείτε πολλά προγράμματα Xbasic να έχουν ένα πολύ μικρό κομμάτι εκτελέσιμου κώδικα στην Entry(), και όλες οι λειτουργίες να γίνονται με +συναρτήσεις. Αποφεύγετε να γράφετε μεγάλες συναρτήσεις γιατί χάνονται τα πλεονεκτήματα της χρήσης τους. Επίσης σε ομάδες προγραμματιστών που ο κάθε ένας έχει +αναλάβει να γράψει κώδικα για διαφορετικό κομμάτι της εφαρμογής οι συναρτήσεις επιτρέπουν να μην γράφεται πολλές φορές (κάθε φορά από διαφορετικό +προγραμματιστή) κώδικας, που εκτελεί την ίδια λειτουργία. Συνήθως η συνάρτηση γράφεται από έναν και είναι διαθέσιμη σε όλους. + +### [3.4 Γράφοντας μια συνάρτηση]{#ss3.4} + +Εδώ θα δούμε λίγο πιο αναλυτικά αυτά που είδαμε παραπάνω στο παράδειγμά μας. + +Το πρώτο βήμα για να γράψουμε μια συνάρτηση είναι να έχουμε αποφασίσει τι θα κάνει. Όταν ξέρουμε τι θέλουμε να κάνει η συνάρτηση, είναι σχετικά εύκολο να την +γράψουμε. Στην πρώτη γραμμή της συνάρτησης, ορίζονται: + +- Το όνομά της +- Ο τύπος της συνάρτησης +- Η λίστα παραμέτρων (αν χρειάζεται) + +Στο παράδειγμά μας, στην γραμμή 66 έχουμε: `FUNCTION SLONG cube (SLONG x)` + +Αναλύοντας αυτή την γραμμή έχουμε: + +- Την εντολή `FUNCTION` που δηλώνει ότι ξεκινά από εδώ και πέρα κώδικας που ανήκει σε συνάρτηση και οι μεταβλητές που θα βρεθούν δεν έχουν σχέση με τυχόν + ίδιου ονόματος σε άλλα σημεία του προγράμματος. + +- Τον τύπο `SLONG` που σημαίνει ότι αυτή η συνάρτηση θα επιστρέψει τιμή τύπου `SLONG`. Ο τύπος της συνάρτησης μπορεί να είναι οποιοσδήποτε από τους τύπους + μεταβλητών της Xbasic που έχουμε αναφέρει σε προηγούμενα άρθρα.\ + Ετσι οι ορισμοί: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FUNCTION STRING retstr .. + FUNCTION SSHORT test . + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ορίζουν συναρτήσεις τύπου `STRING` και `SSHORT` αντίστοιχα. + +- Το όνομα της συνάρτησης που είναι το `cube`. Τα ονόματα των συναρτήσεων ακολουθούν του ίδιους κανόνες με τα ονόματα των μεταβλητών που έχουμε αναφέρει. + +- Τις παραμέτρους της συνάρτησης. + +Πολλές συναρτήσεις χρησιμοποιούν παραμέτρους που οι τιμές τους είναι απαραίτητα στοιχεία για εκτελέσουν κάποιο υπολογισμό. Για κάθε παράμετρο που μεταφέρει +κάποια τιμή στην συνάρτηση η λίστα παραμέτρων πρέπει να έχει έναν ορισμό. Αυτός ο ορισμός δηλώνει τον τύπο της μεταβλητής που φέρνει τα δεδομένα και ένα όνομα +που με αυτό αντιστοιχείται η τιμή αυτή μέσα στην συνάρτηση. + +Στην cube έχουμε την λίστα παραμέτρων (`SLONG x`). Με αυτόν τον τρόπο δηλώνουμε ότι, όταν κληθεί αυτή η συνάρτηση, θα μας έρθει +μια τιμή από το πρόγραμμα που την καλεί και από δώ και πέρα μέσα στην συνάρτηση αναφέρεται με το όνομα x. Στο παράδειγμά μας με την κλήση της συνάρτησης cube η +τιμή της μεταβλητής inpu περνάει στην συνάρτηση, και από δω και πέρα η τιμή αυτή εκπροσωπείται από την μεταβλητή x. + +Για να δούμε ξεκάθαρα την ευκολία που μας παρέχει η χρήση των συναρτήσεων θα κάνουμε διαδοχική κλήση της ίδιας συνάρτησης με άλλες παραμέτρους κάθε φορά. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FUNCTION Entry() + SLONG num1 + SLONG num2 + SLONG z + num1 = 8 + num2 = 10 + z = cube(num1) + PRINT z + z = cube(num2) + PRINT z + END FUNCTION + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν αντικαταστήσουμε την Entry() στο παράδειγμά μας με τις παραπάνω γραμμές, τότε το αποτέλεσμα του προγράμματος στην κονσόλα θα δείξει: + +`512`\ +`1000` + +Έτσι γράφοντας μια φορά την cube μπορούμε να έχουμε τον υπολογισμό του κύβου αριθμού με διαφορετικά δεδομένα κάθε φορά, και το αντίστοιχο αποτέλεσμα. + +### [3.5 Το εσωτερικό της συνάρτησης]{#ss3.5} + +Μπορούν να ορισθούν μεταβλητές στο εσωτερικό μιας συνάρτησης. Οι μεταβλητές αυτές ονομάζονται τοπικές. Ο όρος τοπικές σημαίνει ότι οι μεταβλητές αυτές ανήκουν +στην συνάρτηση και δεν έχουν καμμία σχέση με μεταβλητές ίδιου ονόματος σε άλλα σημεία του προγράμματος. Εννοείται ότι ακολουθούνται οι κανόνες ονοματολογίας των +μεταβλητών στην Xbasic. Συνοψίζοντας την χρήση των μεταβλητών στις συναρτήσεις της Xbasic έχουμε: + +- Τοπικές μεταβλητές\ + Ορίζονται στην συνάρτηση και δεν έχουν καμμία σχέση με άλλες μεταβλητές αλλού στο πρόγραμμα. +- Παράμετροι\ + Αυτές οι μεταβλητές μεταφέρουν δεδομένα από το πρόγραμμα που τις καλεί, για να χρησιμοποιηθούν σε υπολογισμούς. +- Επιστρεφόμενη τιμή\ + Για να μπορεί το πρόγραμμα που καλεί την συνάρτηση να πάρει ένα αποτέλεσμα του υπολογισμού της, πρέπει να ορισθεί μια τιμή επιστροφής. Αυτή ορίζεται είτε με + την τοποθέτηση της μεταβλητής που περιέχει την επιστρεφόμενη τιμή δίπλα στην εντολή END FUNCTION μέσα σε παρένθεση, είτε με τοποθέτηση μέσα στην συνάρτηση + μιας από τις δύο εντολές (RETURN ή EXIT FUNCTION) και δίπλα, σε παρένθεση, την μεταβλητή με την τιμή επιστροφής. + +### [3.6 Ο κώδικας των συναρτήσεων.]{#ss3.6} + +Συνήθως ο κώδικας των συναρτήσεων ακολουθεί τον κώδικα της συνάρτησης ENTRY () μέσα στο ίδιο αρχείο που περιέχεται όλο το πρόγραμμα. Σε πολύπλοκα προγράμματα +όμως, όπου αρκετοί προγραμματιστές ασχολούνται με το ίδιο θέμα, είναι καλύτερα οι συναρτήσεις να μπαίνουν σε ξεχωριστό αρχείο ή και σε πολλά αρχεία ανάλογα με +τις ανάγκες της εφαρμογής. Έτσι μπορεί να έχουμε σε ένα αρχείο όλες τις συναρτήσεις που έχουν σχέση με την αποθήκευση στον δίσκο, σε άλλο τα γραφικά, σε άλλο οι +μαθηματικοί υπολογισμοί κλπ. Έτσι δημιουργούνται οι βιβλιοθήκες συναρτήσεων, όπου ο κάθε προγραμματιστής μπορεί να τις συντηρεί (διορθώνει, βελτιώνει) και αυτές +να είναι διαθέσιμες σε όλους τους άλλους. + +Κλείνοντας το κεφάλαιο των συναρτήσεων θέλω να τονίσω ότι η διαφορά στον τρόπο προγραμματισμού με συναρτήσεις και χωρίς αυτές, είναι τόσο μεγάλη που πια σήμερα +κανείς δεν γράφει προγράμματα που να μην έχουν συναρτήσεις. Όταν εγώ ξεκίνησα να γράφω, οι γλώσσες που χρησιμοποιούσα τότε, δεν είχαν την δυνατότητα δημιουργίας +συναρτήσεων και πάρα πολλά λάθη είχαν εμφανισθεί λόγω της χρήσης ίδιων ονομάτων μεταβλητών σε διαφορετικά σημεία του προγράμματος. Η δε απομόνωση του σημείου +του κώδικα που περιείχε το λάθος ήταν εξαιρετικά επίπονη. Με την χρήση συναρτήσεων ο χρόνος εντοπισμού των σφαλμάτων περιορίστηκε σε κάτω από τον μισό. Στην +συνέχεια θα δούμε τις εντολές ελέγχου της ροής του προγράμματος στην Xbasic. + diff --git a/content/articles/29/05_bash.md b/content/articles/29/05_bash.md new file mode 100644 index 0000000..49cdfae --- /dev/null +++ b/content/articles/29/05_bash.md @@ -0,0 +1,197 @@ ++++ +title = 'Απλός χειρισμός Bash' +date = '2000-09-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης(mailto:kabrianis@hellug.gr)' +issue = ['Magaz 29'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το standard shell του Linux είναι το bash, γι αυτό, ας μάθουμε μερικά πράγματα για αυτό.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το Bash είναι ένα shell που χρησιμοποιείται ως standard στο Linux και υπάρχει διαθέσιμο και σαν πηγαίος κώδικας για να προστεθεί σε οποιoδήποτε Unix θέλετε. +Είναι ένα POSIX-compliant shell και βασικά πρόκειται για μια μετεξέλιξη του shell (sh) συνδυάζοντας τα καλύτερα στοιχεία των C-shell (csh) και Korn-shel (ksh).\ +Το bash υποστηρίζει command-line editing, substitution, filename completion, προχωρημένες δυνατότητες scripting κλπ. Το bash υποστηρίζει βέβαια και +wildcharacters ή χαρακτήρες-μπαλαντέρ (? για αντικατάσταση ενός χαρακτήρα και \* για αντικατάσταση απεριόριστων χαρακτήρων, `[ ]` +για καθορισμό εύρους τιμών κλπ. Σε κάθε περίπτωση, αυτό το κείμενο δεν μπορεί παρά να κάνει μία απλή εισαγωγή, και για περισσότερες πληροφορίες που θα οδηγούσαν +στην πλήρη εκμετάλλευση των δυνατοτήτων του bash, ο αναγνώστης πρέπει να διαβάσει το manual του bash (man bash). + +**1. Μεταβλητές** +---------------------------------------- + +**2. Ανακατεύθυνση** +------------------------------------------- + +**3. Έξοδος λογικής έκφρασης: test** +----------------------------------------------------------- + +**4. Έλεγχοι ροής** +------------------------------------------ + +**5. Επαναληπτικοί βρόγχοι** +--------------------------------------------------- + + +### [1. Μεταβλητές]{#s1} + +Οι μεταβλητές (βασικό στοιχείο σε κάθε πρόγραμμα) στο bash δεν είναι προκαθορισμένου τύπου, μπορεί δηλαδή η ίδια μεταβλητή να έχει αριθμητική τιμή, ή τιμή +κειμένου (string) κλπ χωρίς να το προδηλώσουμε πουθενά (αν και για το bash όλες οι μεταβλητές είναι strings, με την χρήση της eval μπορούμε να κάνουμε και +αριθμητικές πράξεις αν τα strings αποτελούνται μόνο από αριθμούς). Οι μεταβλητές ορίζονται με απλή τοποθέτηση (assignment, π.χ. var=1) και προσπελαύνονται +βάζοντας μπροστά από το όνομά τους το σύμβολο \$. Αν η τιμή μίας μεταβλητής εσωκλείεται σε διπλά εισαγωγικά \"\", τότε το bash αγνοεί οποιαδήποτε κενά +βρίσκονται εκεί. Αν δεν τα αγνοούσε, η τιμή της μεταβλητής θα ήταν οτιδήποτε υπάρχει μέχρι το πρώτο κενό. Ότι ήταν μετά το κενό θα θεωρούνταν ως τιμή της +δεύτερης μεταβλητής, κάτι το οποίο έχει ιδιαίτερο νόημα για παραμέτρους που δίνονται από την γραμμή εντολών κατά την κλήση του προγράμματος. Αν εσωκλείεται σε +ανάποδα μονά εισαγωγικά \`, τότε εννοείται ότι πρόκειται περί εντολής, η οποία θα εκτελεστεί και το αποτέλεσμα της εντολής θα αποτελεί την τιμή της μεταβλητής. + +Το bash χρησιμοποιεί κάποιες προκαθορισμένες μεταβλητές για τα διάφορα \"προγραμματάκια\" που μπορούμε να φτιάξουμε. Αυτές είναι οι: + +- \$\# Ο αριθμός των παραμέτρων που δώσαμε στην γραμμή εντολών. +- \$0 Η πρώτη λέξη της κληθείσας εντολής (πρακτικά δηλαδή το όνομα του προγράμματος). +- \$1 - \$N Οι παράμετροι που δώσαμε στην γραμμή εντολών (όπου \$1 η πρώτη παράμετρος, και N ίσο με το \$\#). +- \$@ Φυλάσσει το σύνολο των παραμέτρων της γραμμής εντολών (δηλαδή από \$1 μέχρι \$N όπως ακριβώς τις γράψαμε.) σε μορφή πίνακα (array). +- \$\* Φυλάσσει το σύνολο των παραμέτρων της γραμμής εντολών (δηλαδή από \$1 μέχρι \$N όπως ακριβώς τις γράψαμε) σε μία μεταβλητή (μία και μόνη, τύπου + string). +- \$? Σε αυτή τη μεταβλητή φυλάσσεται το αποτέλεσμα εξόδου της προηγούμενης εντολής. + + +### [2. Ανακατεύθυνση]{#s2} + +Το bash υποστηρίζει όπως θα ήταν ίσως αναμενόμενο, ανακατεύθυνση των τριών βασικών file descriptors, δηλαδή των standard input, standard output και standard +error (αντίστοιχα 0, 1 και 2). Η ανακατεύθυνση της εισόδου γίνεται με το σύμβολο \<, και η ανακατεύθυνση εξόδου (και εξόδου λάθους) με το σύμβολο \> γράφοντας +και τον αριθμό του file descriptor. Δηλαδή η έκφραση command 1\> output θα ανακατευθύνει την κανονική έξοδο στο αρχείο output (και είναι ισοδύναμη με την +command \> output) ενώ η έκφραση command 2\> error θα ανακατευθύνει την έξοδο λάθους στο αρχείο error. Για να ανακατευθύνουμε και την κανονική έξοδο, αλλά και +την έξοδο λάθους σε ένα αρχείο, μπορούμε να χρησιμοποιήσουμε οποιαδήποτε από τις ακόλουθες εκφράσεις: +`command &> out, command >& out, command 2>&1 out` + +Τέλος, το bash υποστηρίζει και piping, να ανακατευθύνει δηλαδή την έξοδο μίας εντολής, στην είσοδο μίας άλλης εντολής, με το σύμβολο \|. + + +### [3. Έξοδος λογικής έκφρασης: test]{#s3} + +Όποτε θέλουμε να ελέγξουμε το αποτέλεσμα μίας λογικής ή αριθμητικής έκφρασης χρησιμοποιούμε τη συνάρτηση test. Η συνάρτηση test επιστρέφει τιμή \"αληθής\" ή +\"ψευδής\" ανάλογα με το αληθές ή ψευδές της λογικής (ή και αριθμητικής) έκφρασης που ελέγχεται. H συνάρτηση test μπορεί να γραφεί και ώς `[ έλεγχος ]` . Η +έκφραση μπορεί να έχει ένα μόνο στοιχείο και έναν τελεστή (ο οποίος έτσι ονομάζεται unary operator) ή μπορεί να έχει δύο στοιχεία και έναν τελεστή ο οποίος +ονομάζεται binary operator. Πιο πολλές πληροφορίες από το manual page της συνάρτησης test το οποίο μπορείτε να δείτε γράφοντας man test + +Οι πιο συνηθισμένοι τελεστές: + +- `test [ 1 -eq 2 ]`\ + Η ανωτέρω έκφραση είναι ψευδής γιατί ο (αριθμητικός) τελεστής -eq σημαίνει ισότητα (equal). Άλλοι αριθμητικοί τελεστές είναι οι: + 1. -gt ο αριθμός αριστερά είναι μεγαλύτερος από τον αριθμό δεξιά (greater than). + 2. -lt ο αριθμός δεξιά είναι μικρότερος από τον αριθμό αριστερά (less than). + 3. -ne οι δύο αριθμοί δεν είναι ίσοι (not equal). + 4. -ge ο αριθμός αριστερά είναι μεγαλύτερος ή ίσος από τον αριθμό δεξιά (greater or equal). + 5. -le ο αριθμός αριστερά είναι μικρότερος ή ίσος από τον αριθμό δεξιά (less or equal). +- `test [ like = likme ]`\ + Η ανωτέρω έκφραση είναι ψευδής γιατί ο (λογικός) τελεστής = σημαίνει ότι τα δύο strings που συγκρίνουμε είναι ίσα (ίδια). Άλλοι λογικοί τελεστές σχετικοί με + strings είναι οι: + 1. != ο οποίος προφανώς επιστρέφει \"αληθές\" όταν τα δύο strings που συγκρίνουμε είναι ανόμοια. + 2. -z ο οποίος είναι unary operator (συντάσσεται δηλαδή ως εξής: `test [ -z string ]`) επιστρέφει \"αληθές\" αν το μήκος του string είναι μηδενικό. + 3. -n που είναι και αυτός unary operator (συντάσσεται δηλαδή ως εξής: `test [ -n string ]`) επιστρέφει \"αληθές\" αν το μήκος του string δεν είναι + μηδενικό. +- `test [ -e filename ]`\ + Η ανωτέρω έκφραση βγαίνει αληθής όταν το αρχείο με όνομα filename υπάρχει. Άλλοι τελεστές ελέγχου της κατάστασης ενός αρχείου είναι οι εξής (όλοι όσοι + αναφέρονται εδώ είναι unary operators): + 1. -b αν το αρχείο υπάρχει και είναι block device + 2. -c αν το αρχείο υπάρχει και είναι character device + 3. -d αν το αρχείο υπάρχει και είναι directory + 4. -f αν το αρχείο υπάρχει και είναι κανονικό αρχείο + 5. -r αν το αρχείο υπάρχει και μπορεί να διαβαστεί + 6. -s αν το αρχείο υπάρχει και το μέγεθος του δεν είναι μηδέν + 7. -w αν το αρχείο υπάρχει και μπορεί να γραφτεί + 8. -x αν το αρχείο υπάρχει και μπορεί να εκτελεστεί + + +### [4. Έλεγχοι ροής]{#s4} + +- if - then - else + + Ένας τρόπος και ο πιο συνηθισμένος ελέγχου ροής ενός προγράμματος είναι ο έλεγχος if-then-else όπου ελέγχουμε το αποτέλεσμα μίας λογικής έκφρασης και + ανάλογα με αυτό το αποτέλεσμα καθορίζουμε τι θα κάνει το πρόγραμμα. Προφανώς ο έλεγχος χρησιμοποιεί το αποτέλεσμα της συνάρτησης test για να καθορίσει την + ροή. Για παράδειγμα + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + if [ $i -eq 3 ]; then + echo 'Number is 3'; + elif [ $i -eq 2 ]; then + echo 'Number is 2'; + else echo 'Number is neither 3 nor 2'; + fi + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + όπου είναι προφανές ότι κάπου στο πρόγραμμά μας έχουμε δώσει τιμή στην παράμετρο \$i. Μπορούμε να έχουμε όσα elif θέλουμε, αρκεί στο τέλος να υπάρχει και + ένα else. Αν δεν υπάρχει κανέναν elif δεν είναι υποχρεωτικό και το else, είναι όμως σε κάθε περίπτωση υποχρεωτικό το fi. + +- select + + Η συνάρτηση select δουλεύει (και συντάσσεται) όπως η if αλλά δίνει τη δυνατότητα να δημιουργήσουμε menu. Για παράδειγμα + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + select i in a.txt b.txt c.txt; do + cat $i; + done + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Το ανωτέρω παράδειγμα παρουσιάζει στον χρήστη ένα menu με τρεις επιλογές και ανάλογα με την επιλογή του χρήστη, του εμφανίζει το αντίστοιχο αρχείο στην + οθόνη. + +- case + + Η συνάρτηση case τέλος, προσομοιάζει στην αντίστοιχη συνάρτηση της C και σαν σύνταξη, αλλά και σαν αποτέλεσμα, και συγκεκριμένα εκτελεί προκαθορισμένες + εντολές για προκαθορισμένες τιμές μίας μεταβλητής, έχοντας ταυτόχρονα και μία γενική περίπτωση που δεν εμπίπτει στις υπόλοιπες. Για παράδειγμα + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + case $i in + 1 | 3 | 5 | 7 | 9) echo -n "Odd one-digit number";; + 0 | 2 | 4 | 6 | 8) echo -n "Even one-digit number";; + *) echo -n "It definitely is not a one-digit nummber";; + esac + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Το ανωτέρω παράδειγμα ελέχει την μεταβλητή \$i που υποτίθεται ότι κάπου πιο πριν την έχουμε δώσει, και μας απαντάει αν είναι μονός ή ζυγός μονοψήφιος + αριθμός, ή όχι. + + +### [5. Επαναληπτικοί βρόγχοι]{#s5} + +- for - do + + Ο βρόγχος for - do είναι ο πιο συνηθισμένος σε όλες τις γλώσσες προγραμματισμού. Η χρήση του είναι απλούστατη ειδικά στο bash όπου \\textbf{δεν μπορούμε να + ορίσουμε πεδίο τιμών, αντ\' αυτού είμαστε υποχρεωμένοι να ορίζουμε τις τιμές μία μία, ακόμα και αν αυτές είναι κατά κάποια έννοια συνεχόμενες. Ένα + παράδειγμα είναι το απλούστατο: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + for i in 1 3 5 ; do + echo $i; + done + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Το πεδίο τιμών της μεταβλητής \$i δεν αποτελείται υποχρεωτικά από αριθμούς αλλά μπορεί να είναι και λέξεις ή γράμματα, ή ακόμα και wildcharacters (\* και ?) + κάνοντας έτσι αυτό τον βρόγχο ένα πανίσχυρο εργαλείο. + +- while - do Η συνάρτηση while εκτελεί κάποιες εντολές όσο μία λογική έκφραση είναι αληθής. Το κλασικότερο παράδειγμα είναι η δημιουργία ενός επαναληπτικού + βρόγχου, ως εξής: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + while [ $i -lt 10 ]; do + read i; + echo $i; + done + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Προφανώς το παράδειγμα αυτό θα μας εμφανίζει συνέχεια ότι του γράφουμε μέχρι να δώσουμε ένα αριθμό μεγαλύτερο (ή ίσο) του 10. Προσοχή χρειάζεται εδώ, γιατί + στο πρόγραμμά μας η μεταβλητή \$i πρέπει να έχει τιμή πριν κληθεί η while. + diff --git a/content/articles/30/01_editorial.md b/content/articles/30/01_editorial.md new file mode 100644 index 0000000..b547ac5 --- /dev/null +++ b/content/articles/30/01_editorial.md @@ -0,0 +1,108 @@ ++++ +title = 'Editorial' +date = '2001-09-01T00:00:00Z' +description = '' +author = 'Παπαδογιαννάκης Βαγγέλης(mailto:papas@hellug.gr)' +issue = ['Magaz 30'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλώς ήρθατε στο magaz.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Ενα editorial διαφορετικό από τα άλλα.** + +Αυτό το editorial δεν θα σας πει ποια άρθρα φιλοξενούμε αυτό το μήνα, ούτε θα σας προτρέψει να ψηφίσετε σε μια ψηφοφορία. Θα σχολιάσω (όπως το βλέπω εγω) το +περιοδικό μας και μερικά πράγματα για το **linux** ξεχωριστά. Θα μπορούσε να είναι ένα ξεχωριστό άρθρο, αλλά καλά είναι και εδώ, το κάνει πιο επίσημο. + +Άλλο ένα καθυστερημένο [magaz](http://magaz.hellug.gr) λοιπόν. Δεν θα προσπαθήσω να δικαιολογηθώ για αυτήν την καθυστέρηση, το ξέρω άλλωστε ότι πολλές ευθύνες +βαραίνουν και εμένα. + +Το θέμα είναι ότι κάτι φαίνεται να μην πάει καλά. Τι όμως είναι αυτό, και πώς μπορούμε να το καταπολεμήσουμε, ώστε να μην παίρνω email διαμαρτυρίας για το πότε +θα βγεί το περιοδικό; Και η αλήθεια είναι ότι δεν με πτοούν τα email διαμαρτυρίας. Αυτό που με στεναχωρεί όμως είναι ότι λαμβάνω και πολλά emails με +συγχαρητήρια και προτροπές για να συνεχίσουμε την καλή δουλειά που κάνουμε κ.λπ. Θα απορήσετε γιατί με στεναχωρεί αυτό. Η απάντηση είναι απλή: επειδή βλέπω ότι +δεν είμαστε πια σε θέση να ακολουθήσουμε την ολοένα αυξανόμενη κίνηση των χρηστών υπολογιστών προς το **linux**. + +Και εξηγούμαι:\ +Είμαστε 5-6 άτομα. Το κάθε περιοδικό απαιτεί 4 άρθρα τουλάχιστον. Αν λοιπόν από αυτά τα 6 άτομα ο ένας δεν μπορέσει ένα μήνα να γράψει άρθρο και αν άλλος ένας +δεν ξέρει τι να γράψει - μια και ο καθένας την ειδικότητά του μερικές φορές την έχει καλύψει και η θεματολογία του πλεον έχει παρουσιαστεί εξολοκλήρου - τότε +πρέπει οι άλλοι να δουλέψουν πυρετωδώς για να βγάλουν ένα περιοδικό για όλους. + +Μέχρι πότε; Πόσο πιστεύετε ότι μπορεί να κρατήσει αυτό; + +Πόσο δηλαδή κάποιοι θα σηκώνουν όλο το βάρος πάνω τους; + +Ξέρω, όλα αυτά είναι χιλιοειπωμένα και στο παρελθόν και η ανταπόκριση ήταν μηδαμινή και τότε. Γιατί τα γράφω λοιπόν; Η απάντηση είναι απλή: επειδή πιστεύω ότι +κάποιοι, έστω και λίγοι, μπορούν (και θέλουν) να βοηθήσουν. Δεν είναι ανάγκη τα άρθρα τους να είναι πλήρη από τεχνικής πλευράς. + +Δεν είναι ανάγκη να δουλεύουν και να έχουν φοβερή πείρα, για να γράψουν ένα άρθρο. Δεν είναι ανάγκη να ξέρουν τίποτα παραπάνω από το θέμα για το οποίο θα +γράψουν. Τι θα πει αυτό; Ας πούμε, για παράδειγμα, ότι κάποιος πάει να στήσει την κάρτα ήχου του, τη SB Live!. Γιατί όσο την στήνει να μη γράψει ένα άρθρο με το +οποίο να εξηγεί τι έκανε και δεν πέτυχε, τι έκανε λάθος, τι χρειάστηκε να προσθέσει για να δουλέψει, από που κατέβασε τι κ.λπ.; + +Άλλο παράδειγμα: Κάποιος έστησε ένα δικτυάκι στο σπίτι του και χρησιμοποίησε **linux**, για να μοιράζει internet και samba, για file sharing. Γιατί να μη γράψει +και αυτός ένα άρθρο, εξηγώντας πώς το έκανε; + +Όπως βλέπετε, δεν είναι ανάγκη να γράφουμε εξειδικευμένα άρθρα. Oι αναγνώστες μας είναι ως επί το πλείστον νέοι. Δεν λέω να μην υπάρχουν τεχνικά άρθρα φυσικά, +αλλά αυτά θα είναι το κερασάκι στην τούρτα. + +**Πού απευθύνομαι**; Σε όλους αυτούς που έχουν χρόνο, σε όλους τους φοιτητές που μπορούν να κρατήσουν το περιοδικό ζωντανό. Είναι αυταπόδεικτο ότι δεν μπορούμε +να στηριχτούμε σε άτομα που εργάζονται 8 με 10 ώρες τη μέρα. Είναι λογικό το ότι νέο αίμα πρέπει να κυλίσει. Είναι βασική η βοήθειά σας, μην την αρνιέστε. Χωρίς +όλους εσάς, εμείς δεν μπορούμε να συνεχίσουμε. Μη φοβάστε ότι θα είσαστε λάθος. \`Ολοι είμαστε, λίγο ή πολύ. Η πορεία προς την επιτυχία δεν καθορίζεται από τα +5-6 άτομα τακτικούς αρθρογράφους. Καθορίζεται από το σύνολο των Linuxάδων της χώρας μας. + +Αν θέλετε να βοηθήσετε, και δεν ξέρετε πώς, στείλτε ένα email σε εμένα να σας πω λεπτομέρειες. Μη διαβάζετε αυτήν τη γραμμή και μέσα σας λέτε \`\`σιγά μωρέ, ωχ +αδερφέ\'\' και άλλα χαριτωμένα. + +Και κάτι τελευταίο και κλείνω αυτόν τον τομέα.\ +Το περιοδικό δεν είναι του [hellug](http://www.hellug.gr). Είναι δικό σας. Μπορεί ο [hellug](http://www.hellug.gr) να το φιλοξενεί, αλλά είναι δικό σας! \`Ολων +εσάς που το διαβάζετε κάθε μήνα! Για μια φορά μην το διαβάσετε απλά, βοηθήστε το! + +Θα ήθελα, ακόμα, να σχολιάσω το **linux** γενικότερα, παίρνοντας ως αφορμή την ολοένα αυξανόμενη αναλογία του noise/signal στην [Linux Greek +Users](http://lists.hellug.gr). + +Η έννοια που πρέπει να καταλάβουν όλοι γύρω από το **linux** , κατά τη δική μου άποψη, δεν είναι ότι είναι τσάμπα (δωρεάν). Δωρεάν προγράμματα υπάρχουν πολλά. +Τσάμπα. Δεν τα πληρώνεις. Δεν είσαι αναγκασμένος να τα πληρώσεις για να τα χρησιμοποιήσεις. Και στα windows υπάρχουν τσάμπα προγράμματα (**IE, outlook express, +realdownload**, κα). Το θέμα είναι ο κώδικας. + +Είναι η ελευθερία που σου παρέχει να **ΔΕΙΣ** πώς αυτό το πρόγραμμα κάνει αυτό που κάνει. Να σιγουρευτείς ότι δεν έχει ένα **backdoor**, ούτε στέλνει τα +στοιχεία σου σε έναν κεντρικό server και **φακελώνεσαι κανονικά και με το νόμο**. \`Ολοι έχουν ακούσει για τα περίφημα *\`\`τσάμπα\'\'* προγράμματα που στέλνουν +σε ένα server τα αρχεία που κατεβάζεις, τις σελίδες που επισκέπτεσαι, το όνομα και το επώνυμό σου. Η πιο τρανή απόδειξη είναι το **RealDownload** και όλα τα +προγράμματα της ABE (ναι, και το **CuteFTP** που όλοι χρησιμοποιείτε).\ +Σας παραπέμπω στις εξής σελίδες: + +\ + + +όπου μπορείτε να δείτε πώς οι κύριοι που βγάζουν \`\`τσάμπα\'\' προγράμματα σας φακελώνουν κανονικά, τόσο εσάς όσο και τις προτιμήσεις σας, τις σελίδες που +επισκέπτεστε, όλα. + +Κάτι τέτοιο με προγράμματα του **linux** είναι απίθανο (αδύνατο) να συμβεί, μια και η συντριπτική πλειοψηφία είναι OPEN SOURCE, (παρέχεται και ο κώδικας). Αν +κάποιος αντιληφθεί κάτι τέτοιο, είναι θέμα ωρών να διορθωθεί το πρόβλημα και να κατέβει αυτό το πρόγραμμα από οπουδήποτε υπάρχει. + +Αυτό είναι το καλό του **linux**. \`Οχι ότι είναι \`\`τσάμπα\'\'. + +Μαζί, φυσικά, έρχονται και κάτι άλλα, που λίγοι τα εκτιμούν. Είναι η δημιουργία (και τήρηση) των standards (έχετε δοκιμάσει reverse DNS se NT;). Είναι ότι άν +βρεθεί τρύπα ασφαλείας, σε μία ώρα έχει φτιαχτεί. Είναι ότι η βελτίωση είναι ραγδαία, ακόμα και στο επίπεδο του desktop, που ενδιαφέρει τους περισσότερους +(νέους) χρήστες (σας θυμίζω την περίπτωση του \`\`πολυσυζητημένου\'\' benchmark win2K-Linux, όπου υπήρχε ένα λάθος στο TCP stack του πυρήνα. Φτιάχτηκε σε +λιγότερο από 1 ώρα). + +Είναι όλα αυτά που κάνουν το λειτουργικό μας ξεχωριστό. Είναι όλα αυτά που μας κάνουνε να λατρέυουμε το **linux**. Και συγχωρέστε μας, αν καμιά φορά είμαστε +απότομοι, είναι όμως \*σκληρό\* να βλέπεις πόσοι πολλοί δεν κάνουν το βασικότερο, να διαβάσουν το help. Απαιτούν κάτι έτοιμο, κάτι μασημένο. Αυτούς δεν τους +θέλουμε. Θέλουμε σκεπτόμενα άτομα, θέλουμε άτομα ενεργά και όχι παράσιτα. Θέλουμε βοήθεια, όπως εμείς προσφέρουμε βοήθεια. Δεν θέλουμε τα script kiddies, τους +ετοιματζήδες, δεν θέλουμε τους (και καλά) hackers. Ποιους (και καλά) hackers; Θα σας δώσω ένα παράδειγμα. + +Αυτούς που θέλουν να hackέψουν **linux** servers με το Unicode Bug! Που θέλουν να κατεβάσουν ένα μηχάνημα, για να το λένε αργότερα κομπάζοντας στα φιλαράκια +τους, αλλά ούτε καν κάνουν τον κόπο να δούνε τι λειτουργικό τρέχει! Υπάρχουν web servers, που δέχονται γύρω στις 20 επιθέσεις τη μέρα, και οι 18 είναι με χρήση +του **Unicode Bug**, bugs του **FrontPage** και bugs του **IIS** (και των samples αυτού). Αν αυτοί δεν είναι παιδάκια που θέλουν να κάνουν το κομμάτι τους, τι +είναι; + +Αυτά είχα να πω, να ξανατονίσω όμως ότι είναι προσωπικές μου απόψεις, και δεν έχουν καμία σχέση με το [magaz](http://magaz.hellug.gr) ή το +[hellug](http://www.hellug.gr) γενικότερα. Οποιοδήποτε flame/αντίρρηση/παρατηρήσεις/συγχαρίκια/email με vbscript viruses(!) , στείλτε τα στο +[papas\@hellug.gr](papas@hellug.gr). Βεβαιωθείτε μόνο ότι έχετε βάλει charset, αν υπάρχουν ελληνικά, γιατί το **procmail** μου δεν αστειεύεται (BTW, υπάρχει ένα +πολύ καλό άρθρο για το procmail αυτό το μήνα από τον Αποστολάκη Νίκο) + +Κλείνοντας, να ζητήσω συγνώμη από τα άτομα που μου έχουν στείλει άρθρο πολύ καιρό αλλά λόγω της έλλειψης ύλης δεν μπορούσα να τα δημοσιεύσω. + +[Παπαδογιαννάκης Βαγγέλης](mailto:papas@hellug.gr) diff --git a/content/articles/30/02_xbasic.md b/content/articles/30/02_xbasic.md new file mode 100644 index 0000000..e182115 --- /dev/null +++ b/content/articles/30/02_xbasic.md @@ -0,0 +1,386 @@ ++++ +title = 'Xbasic' +date = '2001-09-01T00:00:00Z' +description = '' +author = 'Κώστας Τσακάλογλου(mailto:tsakf@hellug.gr)' +issue = ['Magaz 30'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Εντολές ανακύκλωσης* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εντολές ανακύκλωσης** +--------------------------------------------------- + +**2. Η εντολή FOR \... NEXT** +------------------------------------------------------ + +- [2.1 Παράδειγμα](#ss2.1) + +**3. FOR \... NEXT μέσα σε άλλο FOR..NEXT** +-------------------------------------------------------------------- + +- [3.1 Παράδειγμα πολλαπλών FOR\...NEXT.](#ss3.1) + +**4. Η εντολή EXIT FOR** +------------------------------------------------- + + +### [1. Εντολές ανακύκλωσης]{#s1} + +Ο τρόπος που εκτελείται ένα πρόγραμμα XBASIC είναι ο συνηθισμένος, όπου οι εντολές εκτελούνται από επάνω προς τα κάτω.\ +Η εκτέλεση των εντολών ξεκινά από την συνάρτηση `ENTRY()` και εκτελούνται μία-μία οι εντολές, από επάνω προς τα κάτω μέχρι να φτάσουμε στην εντολή +`END FUNCTION` όπου εκεί τελειώνει η εκτέλεση του προγράμματος. + +Στην πραγματικότητα όμως, σπάνια βρίσκουμε προγράμματα που να εκτελούνται έτσι απλά όπως περιγράψαμε πριν. Σε πάρα πολλές περιπτώσεις χρειαζόμαστε +επαναλαμβανόμενες διαδικασίες και πολύπλοκους ελέγχους για να κατασκευάσουμε ένα πρόγραμμα που θα εκτελεί κάποια ζητούμενη, σύνθετη εργασία.\ +Η XBASIC μας δίνει κάποιες εντολές για να μπορούμε να έχουμε επαναλαμβανόμενες διαδικασίες μέσα στο πρόγραμμά μας. Αυτές είναι οι εντολές `FOR ... NEXT` και η +εντολές `DO ... LOOP` + +Παρακάτω θα αναλύσουμε και τις δύο για να δούμε την χρήση τους και πως μπορούμε να τις εφαρμόσουμε. + + +### [2. Η εντολή FOR \... NEXT]{#s2} + +Αυτή την εντολή την χρησιμοποιούμε για να έχουμε την εκτέλεση μιας ή μιας ομάδας εντολών για προκαθορισμένο αριθμό επαναλήψεων. Η μορφή της είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR [μεταβλητή] = [αρχική τιμή] ΤΟ [τελική τιμή] STEP [βήμα] + .. + [εντολές που θα εκτελεστούν επαναλαμβανόμενα] + .. + NEXT [μεταβλητή] + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [2.1 Παράδειγμα]{#ss2.1} + +Θα δούμε ένα παράδειγμα χρήσης της FOR \... NEXT + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 1. ' + 2. ' + 3. ' #################### + 4. ' ##### PROLOG ##### + 5. ' #################### + 6. ' + 7. PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent + 8. VERSION "0.0000" ' version number - increment before saving altered program + 9. ' + 10. ' You can stop the PDE from inserting the following PROLOG comment lines + 11. ' by removing them from the prolog.xxx file in your \xb\xxx directory. + 12. ' + 13. ' Programs contain: 1: PROLOG - no executable code - see below + 14. ' 2: Entry function - start execution at 1st declared func + 15. ' * = optional 3: Other functions - everything else - all other functions + 16. ' + 17. ' The PROLOG contains (in this order): + 18. ' * 1. Program name statement PROGRAM "progname" + 19. ' * 2. Version number statement VERSION "0.0000" + 20. ' * 3. Import library statements IMPORT "libName" + 21. ' * 4. Composite type definitions TYPE ... END TYPE + 22. ' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args) + 23. ' * 6. External function declarations EXTERNAL FUNCTION FuncName (args) + 24. ' * 7. Shared constant definitions $$ConstantName = literal or constant + 25. ' * 8. Shared variable declarations SHARED variable + 26. ' + 27. ' ****** Comment libraries in/out as needed ***** + 28. ' + 29. ' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... + 30. ' IMPORT "xcm" ' Complex library : complex number library (trig, etc) + 31. ' IMPORT "xst" ' Standard library : required by most programs + 32. ' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs + 33. ' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs + 34. ' + 35. DECLARE FUNCTION Entry () + 36. ' + 37. ' + 38. ' ###################### + 39. ' ##### Entry () ##### + 40. ' ###################### + 41. ' + 42. ' Programs contain: + 43. ' 1. A PROLOG with type/function/constant declarations. + 44. ' 2. This Entry() function where execution begins. + 45. ' 3. Zero or more additional functions. + 46. ' + 47. FUNCTION Entry () + 48. SSHORT i + 49. FOR i=1 TO 20 + 50. PRINT i + 51. NEXT i + 52. END FUNCTION + 53. END PROGRAM + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#### Γραμμές 1..35 Ορισμοί + +Οι γνωστές πια σε όλους γραμμές ορισμού του προγράμματος των βιλιοθηκών και των συναρτήσεων του προράμματος. + +#### Γραμμές 47..52 Η συνάρτηση ENTRY() + +Εδώ έχουμε την συνάρτηση `ENTRY()` όπου και θα αναλύσουμε για να δούμε τον τρόπο λειτουργίας της `FOR ... NEXT` + +Η εκτέλεση του προγράμματος ξεκινά από την γραμμή 49 όπου υπάρχει και η εντολή `FOR`. Έχοντας ορίσει ακριβώς παραπάνω το είδος της μεταβλητής `i` μπορούμε να +την χρησιμοποιήσουμε. Αναφέρω ξανά τα παραπάνω προασμοσμένα στο παράδειγμά μας. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR [μεταβλητή] = [αρχική τιμή] ΤΟ [τελική τιμή] STEP [βήμα] + .. + [εντολές που θα εκτελεστούν επαναλαμβανόμενα] + .. + NEXT [μεταβλητή] + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Όπου έχουμε :\ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + [μεταβλητή] = i + [αρχική τιμή] = 1 + [τελική τιμή] =20 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το `STEP` έχει παραλειφθεί γιατί θεωρείται ότι η απουσία της STEP δηλώνει αύξηση κατά 1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + [εντολές που θα εκτελεστούν επαναλαμβανόμενα]= PRINT i + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα ξεκινήσουμε παρακολουθώντας βήμα-βήμα την εκτέλεση του προγράμματος για να δούμε τι γίνεται. + +Η εκτέλεση ξεκινά από την γραμμή 49 όπου η μεταβλητή `i` παίρνει την τιμή `1` και γίνεται έλεγχος άν αυτή η τιμή είναι μεγαλύτερη από την τελική τιμή της. Εφ\' +όσον η τιμή της μεταβλητής είναι μικρότερη από την τελική τιμή, τότε συνεχίζεται η εκτέλεση της γραμμής 50.\ +Στην γραμμή 50 γίνεται εμφάνιση της τιμής της `i` στο παράθυρο κοσόλας της **XBASIC**. Στην γραμμή 51 γίνεται αύξηση της τιμής της `i` κατά το βήμα που έχει +ορισθεί (1) και εκτελείται ξανά η εντολή 49. Τώρα πάλι γίνεται έλεγχος άν η τιμή της `i` που είναι πια 2 είναι μικρότερη από την μέγιστη (20). Είναι, οπότε +έχουμε πάλι την εκτέλεση της γραμμής 50 και εμφανίζεται πάλι στο παράθυρο κονσόλας η τιμή της i. Συνεχίζουμε ξανά με την ΝΕΧΤ όπου η τιμή της i γίνεται 3. Πάλι +εκτέλεση της 49, έλεγχος και επανάληψη όλων των παραπάνω μέχρι η τιμή της `i` να γίνει 20.\ +Μόλις η τιμή γίνει 20 τότε ο έλεγχος στην γραμμή 49 δίνει ότι έχουμε φτάσει στην τελική τιμή της μεταβλητής. Τότε παταλείπονται όλες οι εντολές μέχρι την εντολή +`NEXT` και η εκτέλεση του προγράμματος συνεχίζεται μετά από αυτήν. Στο παράδειγμά μας, δεν έχουμε τίποτε άλλο έτσι η εκτέλεση του προγράμματος τελειώνει. + +Με την βοήθεια ορισμού του βήματος μπορούμε να έχουμε διάφορες περιπτώσεις που η μεταβλητή `i` δεν αυξάνει κατά 1 αλλά με διαφορετικό βήμα. Π.χ. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR i= 1 to 16 STEP 3 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε αυτή την περίπτωση το βήμα για κάθε ανακύκλωση αυξάνει κατά 3 και οι διαδοχικές τιμές που μπορεί λαμβάνει η `i` είναι 1,4,7,10,13,16. Επίσης μπορούμε να +έχουμε αντί για αύξηση της τιμής της `i` μείωση με την παρακάτω σύνταξη. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR i = 16 to 1 STEP -1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε αυτή την περίπτωση η διαδοχικές τιμές της `i` θα είναι 16,15,14,\...3,2,1. + +Συνοψίζοντας βλέπουμε ότι με την εντολή `FOR ... NEXT` μπορούμε να έχουμε επαναλαμβανόμενη εκτέλεση κώδικα όσες φορές επιθυμούμε +και με οποιοδήποτε βήμα. + + +### [3. FOR \... NEXT μέσα σε άλλο FOR..NEXT]{#s3} + +Υπάρχει η δυνατότητα να έχουμε πολλαπλά `FOR ... ΝΕΧΤ` το ένα μέσα στο άλλο.\ +Απαραίτητη προυπόθεση είναι αυτά να έχουν διαφορετικές μεταβλητές μέτρησης. Αν χρησιμοποιηθεί η ίδια μεταβλητή μέτρησης τότε το ένα `NEXT` θα επηρεάζει το άλλο +με απρόβλεπτα αποτελέσματα στην εκτέλεση του κώδικα.\ +Έτσι είναι λάθος να γράψουμε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR i=1 TO 10 + FOR i=2 TO 7 + . + . + . + NEXT i + NEXT i + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα παρατηρήσουμε ότι στο παραπάνω παράδειγμα έχει τοποθετηθεί το δεύτερο `FOR` δεξιότερα από το πρώτο.\ +Αυτό μας βοηθάει πάρα πολύ κατά την ανάγνωση το προγράμματός μας να βλέπουμε που τελειώνει η κάθε ανακύκλωση χωριστά. Ένα άλλο λάθος που γίνεται μερικές φορές +είναι η λάθος αντιστοίχηση των `FOR` με τα αντίστοιχα `NEXT`. Κάποιος που θα γράψει: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR i= 1 TO 10 + FOR k= 1 TO 5 + . + . + . + NEXT i + NEXT k + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +θα λάβει μήνυμα λάθους `NESTING ERROR`. Αυτό συμβαίνει γιατί κατά την ανάγνωση του κώδικα ο υπολογιστής έχει καταχωρίσει ότι η τελευταία μεταβλητή μέτρησης +είναι η `k` και όχι η `i`. + +Ένα άλλο λάθος που μπορεί να γίνει είναι ο λάθος υπολογισμός της τελικής τιμής άν έχουμε βήμα διαφορετικό από το 1 όπως στο προηγούμενο παράδειγμα και έτσι ενώ +έχουμε γράψει + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + FOR i = 1 TO 10 STEP 3 + . + . + + ΝΕΧΤ i + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ετσι η τελική τιμή της μεταβλητής i είναι διαφορετική από αυτήν που περιμένουμε να έχει η i κατά την τελευταία ανακύκλωση. + +### [3.1 Παράδειγμα πολλαπλών FOR\...NEXT.]{#ss3.1} + +Θα γράψουμε ένα μικρό πρόγραμμα που θα δημιουργεί μια επιφάνεια από Χ ανάλογα με τις διαστάσεις που εισάγουμε. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 1. ' + 2. ' + 3. ' #################### + 4. ' ##### PROLOG ##### + 5. ' #################### + 6. ' + 7. PROGRAM "progname" ' 1-8 char program/file name without .x or any .extent + 8. VERSION "0.0000" ' version number - increment before saving altered program + 9. ' + 10. ' You can stop the PDE from inserting the following PROLOG comment lines + 11. ' by removing them from the prolog.xxx file in your \xb\xxx directory. + 12. ' + 13. ' Programs contain: 1: PROLOG - no executable code - see below + 14. ' 2: Entry function - start execution at 1st declared func + 15. ' * = optional 3: Other functions - everything else - all other functions + 16. ' + 17. ' The PROLOG contains (in this order): + 18. ' * 1. Program name statement PROGRAM "progname" + 19. ' * 2. Version number statement VERSION "0.0000" + 20. ' * 3. Import library statements IMPORT "libName" + 21. ' * 4. Composite type definitions TYPE ... END TYPE + 22. ' 5. Internal function declarations DECLARE/INTERNAL FUNCTION Func (args) + 23. ' * 6. External function declarations EXTERNAL FUNCTION FuncName (args) + 24. ' * 7. Shared constant definitions $$ConstantName = literal or constant + 25. ' * 8. Shared variable declarations SHARED variable + 26. ' + 27. ' ****** Comment libraries in/out as needed ***** + 28. ' + 29. ' IMPORT "xma" ' Math library : SIN/ASIN/SINH/ASINH/LOG/EXP/SQRT... + 30. ' IMPORT "xcm" ' Complex library : complex number library (trig, etc) + 31. ' IMPORT "xst" ' Standard library : required by most programs + 32. ' IMPORT "xgr" ' GraphicsDesigner : required by GuiDesigner programs + 33. ' IMPORT "xui" ' GuiDesigner : required by GuiDesigner programs + 34. ' + 35. DECLARE FUNCTION Entry () + 36. ' + 37. ' + 38. ' ###################### + 39. ' ##### Entry () ##### + 40. ' ###################### + 41. ' + 42. ' Programs contain: + 43. ' 1. A PROLOG with type/function/constant declarations. + 44. ' 2. This Entry() function where execution begins. + 45. ' 3. Zero or more additional functions. + 46. ' + 47. FUNCTION Entry () + 48. USHORT i1,i2 + 49. USHORT side1,side2 + 50. STRING sside1,sside2 + 51. sside1=INLINE$("side 1 ") + 52. sside2=INLINE$("side 2 ") + 53. side1=USHORT(sside1) + 54. side2=USHORT(sside2) + 55. FOR i1 = 1 TO side1 + 56. FOR i2 = 1 TO side2 + 57. PRINT "X"; + 58. NEXT i2 + 59. PRINT "" + 60. NEXT i1 + 61. + 62. + 63. + 64. END FUNCTION + 65. END PROGRAM + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#### Γραμμές 1..46 + +Οι ορισμοί του προγράμματος και των βιβλιοθηκών που χρειάζονται + +#### Γραμμές 47..64 + +Η συνάρτηση `ENTRY()` που περιέχει και τον εκτελέσιμο κώδικα του προγράμματός μας. + +Θα αναλύσουμε την `ENTRY()` για να δούμε την διαδοχική χρήση των εντολών `FOR ... NEXT` + +#### Γραμμή 48 + +Σε αυτές τις γραμμές ορίζουμε τις μεταβλητές που θα χρησιμοποιήσουμε παρακάτω στις εντολές `FOR ... NEXT` + +#### Γραμμή 49 + +Ορίζονται οι μεταβλητές που θα περιεχουν τις διαστάσεις της τετράγωνης επιφάνειας. + +#### Γραμμή 50 + +Εδώ ορίζουμε βοηθητικές μεταβλητές τύπου STRING για να πάρουμε την πληκτρολόγηση του χρήστη. + +#### Γραμμές 51 και 52 + +Με την γνωστή πια εντολή `INLINE$` δίνουμε μήνυμα στον χρήστη να εισάγει διαδοχική τις επιθυμιτές διαστάσεις του τετραγώνου. + +#### Γραμμές 53 και 54 + +Μετατροπή των μεταβλητών STRING σε αριθμητικές για να τις χρησιμοποιήσουμε παρακάτω και τις εντολές ανακύκλωσης `FOR ... NEXT` + +#### Γραμμή 55 + +Αρχή της πρώτης ανακύκλωσης. Εδώ ο μετρητής `i1` θα λάβει τιμές από 1 έως την τιμή της μεταβλητής `side1` που είναι η κάθετη διάσταση του τετραγώνου + +#### Γραμμή 56 + +Αρχή της δεύτερης ανακύκλωσης. Εδώ ο `i2` θα λάβει τιμές από 1 έως την τιμή της `side2` που είναι η οριζόντια διάσταση του τετραγώνου. + +#### Γραμμή 57 + +Εμφάνιση στο παράθυρο κονσόλας του χαρακτήρα `X` + +#### Γραμμή 58 + +Κλείσιμο της δεύτερης ανακύκλωσης και έτσι η εκτύπωση των `X` θα γίνει τόσες φορές όσες έχει επιλέξει ο χρήστης που έχουν αποθηκευθεί στην μεταβλητή `side2` + +#### Γραμμή 59 + +Αλλαγή γραμμής στο παράθυρο κονσόλας. + +#### Γραμμή 60 + +Κλείσιμο της πρώτης ανακύκλωσης. Εδώ τών αυξάνει κατά 1 ο μετρητής της κάθετης διάστασης του τετραγώνου. Ετσι ολόκληρη η διαδικασία \[επαναλαμβανόμενη εμφάνισης +των `X` (δεύτερη ανακύκλωση) και η αλλαγή γραμμής\] θα γίνει τόσες φορές όσες έχει ζητήσει ο χρήστης όταν όριζε την πρώτη (κάθετη) διάσταση του τετραγώνου. Αυτή +η τιμή είναι αποθηκευμένη στην μεταβλητή `side1`. + + +### [4. Η εντολή EXIT FOR]{#s4} + +Συνήθως χρησιμοποιούμε τις ανακυλώσεις για να εκτελέσουμε συγκεκριμένο αριθμό επαναλήψεων ενός κομματιού κώδικα.\ +Υπάρχουν όμως περιπτώσεις που θέλουμε να διακόψουμε την ανακύκλωση στην μέση γιατί μετά από κάποιο έλεγχο που κάνουμε, θέλουμε να συνεχίσει το πρόγραμμα με τον +κώδικα που υπάρχει μετά το `NEXT`. Τότε μαζί με τον έλεγχό μας χρησιμοποιούμε και την εντολή `EXIT FOR` έτσι το `FOR ... NEXT` +διακόπτεται και η εκτέλεση συνεχίζεται μετά το `NEXT` σαν να είχε τελειώσει κανονικά η ανακύκλωση. + diff --git a/content/articles/30/03_yacas.md b/content/articles/30/03_yacas.md new file mode 100644 index 0000000..8e7a9eb --- /dev/null +++ b/content/articles/30/03_yacas.md @@ -0,0 +1,325 @@ ++++ +title = 'YACAS (Yet Another Computer Algebra System)' +date = '2001-09-01T00:00:00Z' +description = '' +author = 'Πίπιλας Κων/νος(mailto:pilotos@hellug.gr)' +issue = ['Magaz 30'] +issue_weight = 3 ++++ + +**1. ΕΙΣΑΓΩΓΗ** +--------------------------------------- + +**2. ΕΓΚΑΤΑΣΤΑΣΗ** +------------------------------------------ + +**3. ΧΡΗΣΗ** +------------------------------------ + +**4. ΕΠΙΠΛΕΟΝ ΣΤΟΙΧΕΙΑ** +------------------------------------------------ + +**5. Yacas vs Others** +---------------------------------------------- + + +### [1. ΕΙΣΑΓΩΓΗ]{#s1} + +Πρόκειται για ένα πολύ ισχυρό και επεκτάσιμο πρόγραμμα, που για να εκμεταλευτείτε όλη του τη δύναμη \"θα πρέπει να του μιλήσετε στη δική του γλώσσα\". Δεν είναι +και τίποτα ιδιαίτερο, ιδίως αν έχετε μια βασική γνώση προγραμματισμού. Αλλά και εντελώς αρχάριοι να είστε, νομίζω ότι είναι απλά θέμα εξοικείωσης και λίγων +λεπτών για να μπορέσετε να κάνετε τις βασικές εργασίες. + +Αν λοιπόν θέλετε να εκτελείτε σε δευτερόλεπτα διάφορα προβλήματα όπως υπολογισμός παραγώγου, ολοκληρωμάτων, ορίων, πολλαπλασιασμός πινάκων, επίλυση γραμμικών +εξισώσεων, απλοποίηση παραστάσεων, υπολογισμός σειρών Taylor κτλ., που απαιτούν ένα σωρό πράξεις σίγουρα το Yacas θα το αγαπήσετε. + + +### [2. ΕΓΚΑΤΑΣΤΑΣΗ]{#s2} + +Το Yacas μπορείτε να το κατεβάσετε από το επίσημο site:\ +url name=\"http://www.xs4all.nl/ apinkus/\" url=\"http://www.xs4all.nl/ apinkus/\"\>\ +ή από κάποιο κοντινό mirror\ +(http://linuxberg.ntua.gr στο Ε.Μ.Π. στην κατηγορία X11/Scientific/Math/).\ +Το μέγεθος του είναι περίπου 450ΚΒ. + +Είναι συμβατό με όλες τις Unixοειδή πλατφόρμες (αφού η είσοδος και η έξοδος του Yast είναι σε μορφή text) οπως τα **Linux**, **FreeBSD** κτλ., αρκεί να έχετε +εγκατεστημένο ένα compiler **C++**, πχ. **τον g++**. + +Αφού το κατεβάσετε εκτελέστε την εντολή : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + tar -xzvf yacas-έκδοση.tgz + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +στον κατάλογο που επιθυμείτε. Στην συνέχεια μπείτε σε αυτόν τον κατάλογο και πληκτρολογήστε τις εξής εντολές : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ./configure + make + make install + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν όλα πάνε καλά τότε είστε έτοιμοι να χρησιμοποιήσετε το πρόγραμμα με την εντολή yacas. Εκτός από τη **Source** μορφή, μπορείτε να το κατεβάσετε και σε **RPM ή +DEB**. + + +### [3. ΧΡΗΣΗ]{#s3} + +Για να ξεκινήσει το Yacas όπως είπαμε και πιο πάνω γράψτε + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + yacas + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +ή αν είστε στα X-Windows ανοίξτε ένα παράθυρο προσωμοίωσης τερματικού και κάντε το ίδιο. Στις πρώτες σειρές θα δείτε κάποιες πληροφορίες για το πρόγραμμα και +την βοήθεια. Στην συνέχεια βλέπετε το command prompt του Yacas: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + + In> + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +στο οποίο εισάγετε όλες τις εντολές.Στο τέλος κάθε εντολής μπαίνει ένα ελληνικό ερωτηματικό. Σε κάθε γραμμή μπορείτε να εισάγετε μια μόνο εντολή.Πχ: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In>N(Cos(Pi)); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οι \`\`απαντήσεις\'\' του Yacas στις εντολές που του δίνουμε εμφανίζονται μετά το prompt: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Out> + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για να κλείσουμε το πρόγραμμα πληκτρολογούμε `Exit()` ή `quit` ή `^C (Ctrl+C)`. + +Το Yacas συνοδεύεται από ένα πολύ καλό documentation, που εξηγούνται όλες οι λεπτομέρειες του προγράμματος και η πρόσβαση σ\' αυτό γίνεται με την εντολή `??` +όπου και θα ανοίξει ο Browser **Lynx** για να δείτε τις **HTML** σελίδες του documentation. Επίσης μπορείτε να πάρετε βοήθεια για μια συνάρτηση δίνοντας +`?συνάρτηση()`, πχ. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ?Sin() + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το συντακτικό που χρησιμοποιεί το Yacas είναι C-like.\ +Δηλαδή οι αριθμητικές πράξεις παριστάνονται ως εξής: + +πρόσθεση : +\ +αφαίρεση : -\ +πολ/σμος : \*\ +διαίρεση : /\ +δύναμη : \^ (δηλαδή το 2 στον κύβο παριστάνεται 2\^3). + +Δύο άλλα σύμβολα που χρησιμοποιούνται είναι:\ +ανάθεση τιμής : =\ +ισότητα : == + +Επίσης υπάρχουν διάφορες συναρτήσεις εκ των οποίων οι βασικότερες είναι οι:\ +ημίτονο = `Sin()`\ +συνημίτονο = `Cos()`\ +εφαπτομένη = `Tan()`\ +Υπολογισμός `e^x = Exp(x)`\ +νεπέριος λογάριθμος του `x = Ln(x)`\ +ρίζα του `x=Sqrt(x)`\ +απόλυτη τιμή αριθμού = `Abs(x)`\ +η αριθμητική τιμή μιας έκφρασης = `N(έκφραση)`\ +n παραγοντικό = `n!` + +Για μια ολοκληρωμένη εικόνα των συναρτήσεων που συναντούνται στο Yacas υπάρχει το **functions reference** (το βρίσκετε με την εντολή `??`). Για παράδειγμα ένας +αριθμητικός υπολογισμός που θα μπορούσε να εκτελεστεί στο Yacas θα ήταν: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In>(3*6^2+7*897)/(N(Sin(5)*Tan(6))); + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και η έξοδος από το Yacas θα ήταν : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Out>22888.1333231108; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Όταν δουλεύουμε με δεκαδικούς αριθμούς τότε μπορούμε από την αρχή να καθορίσουμε την ακρίβεια των δεκαδικών ψηφίων.\ +Αυτό γίνεται με την συνάρτηση `Precision(n)`, όπου n ο αριθμός των δεκαδικών ψηφίων. Πχ.: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In> Precision(15); + Out> True; + In> N(7/23); + Out> 0.304347826086956; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το κύριο χαρακτηριστικό του Yacas είναι η χρήση λιστών για την παρουσίαση πιο σύνθετων αλγορίθμων όπως ο πολ/σμος πινάκων, διανυσμάτων κτλ. (η ιδέα αυτή +προέρχεται από την γλώσσα προγραμματισμού LISP).\ +Μια λίστα είναι ένα αριθμημένο σύνολο από αντικείμενα. Στο Yacas μια λίστα δημιουργείται βάζοντας μέσα σε άγκυστρα τα αντικείμενα και χωρίζοντάς τα με κώμμα. +Πχ. αν `a, b, c, d` είναι αντικείμενα, μια λίστα θα είχε τη μορφή : {a,b,c,d}. Έτσι ένα διάνυσμα παριστάνεται στο Yacas σαν μια λίστα και ένας πίνακας σαν μια +λίστα από λίστες. Για να προσπελάσουμε ένα αντικείμενο μιας λίστας χρησιμοποιούμε την εντολή: `ls[n]`, όπου `ls` είναι το όνομα της λίστας και `n` είναι η θέση +του αντικειμένου που ζητάμε από τη λίστα. Οπότε αν είχαμε το διάνυσμα + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ls{a,b,c,d,e,f} + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +τότε θα μπορούσαμε να εκτελέσουμε τις εξής εντολές: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ls[3]; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και η έξοδος του προγράμματος θα ήταν το `c`. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ls[2 .. 4]; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και η έξοδος θα ήταν η λίστα `{b,c,d}` (οι 2 τελείες \"..\" μεταφράζονται \"εως\" και χρησιμοποιούνται για λόγους συντομίας). Ας κάνουμε τώρα ενα παράδειγμα +πολ/σμού πινάκων. Έστω ο πίνακας Κ23 είναι 2x3 και ο M34 είναι 3x4. Για να τους ορίσουμε δίνουμε στο prompt: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In> K23:={{x,y,2},{4,y,x)}; και + In> M34:={{3,x,y,x+1},{x+y,y-2,2,y},{y^2-1,4,y,2*x^2}}; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Οπότε αν τώρα δώσουμε + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + K23*M34 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +θα πάρουμε το γινόμενο των 2 αυτών πινάκων που είναι ένας νέος πίνακας 2x4. + +Υπάρχουν αρκετές συναρτήσεις για τους πίνακες και γενικά για την γραμμική 'λγεβρα όπως η συνάρτηση `Determinant(M)`, που μας επιστρέφει την ορίζουσα του πίνακα +M, η `Inverse(Μ)` που επιστρέφει τον αντίστροφο του M κτλ. + +Στο **Yacas** μπορούμε να δουλέψουμε άνετα με συναρτήσεις και να κάνουμε τους συνήθεις υπολογισμούς όπως υπολογισμός τιμών συνάρτησης, παραγώγου, ολοκληρώματος +και ορίου.\ +Πχ. έστω ότι έχουμε την συνάρτηση `f(x)=2x+3` και θέλουμε να υπολογίσουμε το `f(4)`, την παράγωγο της `f`,το ολοκλήρωμα της `f` από `a` εως `b` και το όριο της +`f` όταν το `x` τείνει στο 0. Τότε θα είχαμε τα παρακάτω : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In> f(x):=2*x+3; /* Ορισμός συνάρτησης */ + Out> true; + In>f(4); /* Υπολογισμός του f(4) */ + Out>11; + In>D(x) f(x); /* Υπολογισμός παραγώγου της f */ + Out>2; + In>Integrate(x,a,b) f(x); /* Υπολογισμός ολοκληρώματος */ + Out>(2*b^2)/2+3*b-((2*a^2)/2+3*a); + In>Limit(x,0) f(x); /* Υπολογισμός ορίου της f όταν x->0 */ + Out>3; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Με το Yacas έχουμε την δυνατότητα επίλυσης συστημάτων γραμμικών (προς το παρόν) εξισώσεων, αρκεί να μην το παρακάνετε (μην του βάλετε ένα σύστημα 100x100 γιατί +θα σας πάρει κάποια χρόνια:). + +Για παράδειγμα έστω ότι θέλουμε να λύσουμε το σύστημα : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 4x+6y+z=2 + x-4z=4 + y+2z=2 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα χρησιμοποιήσουμε την συνάρτηση `Solve` πέρνωντας κάθε εξίσωση και κάθε μεταβλητή σαν στοιχεία μιας λίστας : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In> Solve({4*x+6*y+z==2,x-4*z==4,y+2*z==2},{x,y,z}); + Out> {{-84/5,62/5,-26/5}}; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μπορούμε ακόμη να κάνουμε απλοποίηση παραστάσεων με την συνάρτηση `Simplify`: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In> Simplify((x-8)^2+(x-6)^2); + Out> 2*x^2-28*x+100; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πολλές φορές τα αποτελέσματα που παίρνουμε από το **Yacas** είναι μεγάλα και δύσκολα στο διάβασμα. Γι\' αυτό μας δίνεται η δυνατότητα να εκτυπώνονται τα +αποτελέσματα έτσι ώστε να τα καταλαβαίνουμε εύκολα με την βοήθεια της συνάρτησης `PrettyForm` (σε **ASCII text**). + +Πχ. αν είχαμε ως αποτέλεσμα από έναν υπολογισμό την παράσταση: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ((3*x^2+1)/2!)+7*x+1/2*x^2-2*x+3/8 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +δίνοντας: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + In> PrettyForm(%); /* Το % παίρνει την προηγούμενη τιμή της εξόδου */ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα πέρναμε ως έξοδο: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +      2 + 3 * x + 1           1    2           3 + --------- + 7 * x + - * x - 2 * x + - +     2               2                8 + Out>True; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [4. ΕΠΙΠΛΕΟΝ ΣΤΟΙΧΕΙΑ]{#s4} + +Οι δυνατότητες του **Yacas** δεν σταματούν βέβαια εδώ. Το **Yacas** μπορεί να συνεργαστεί με άλλα προγράμματα όπως το **Gnuplot** και να μας δίνει πχ. το +αποτέλεσμα από έναν υπολογισμό πάνω στο καρτεσιανό επίπεδο σε ένα παράθυρο στα **X-Windows**. + +Μπορεί να προσπελάσει αρχεία που έχουμε δημιουργήσει (κάποιον αλγόριθμο) και να τα εκτελέσει.Μια πολύ μεγάλη δυνατότητα που μας δίνει αυτό το πρόγραμμα είναι +οτι μπορούμε να ορίσουμε τις δικές μας συναρτήσεις που χρησιμοποιούμε καθημερινά και να το φέρουμε στα μέτρα μας. Όλα αυτά ελπίζω να τα προσθέσω σε μια +καινούρια έκδοση αυτής της παρουσίασης. + + +### [5. Yacas vs Others]{#s5} + +Πολλοί από σας θα αναρωτηθήκατε γιατί να μπω στον κόπο να μάθω άλλο ένα τέτοιο πρόγραμμα, την στιγμή που υπάρχουν διάφορα άλλα, με πλήρη κατάλογο συναρτήσεων, +καλύτερη οργάνωση, τεράστια και αναλυτικά εγχειρίδια χρήσης, που είναι και καθιερωμένα στο χώρο και τα χρησιμοποιεί και πολύς κόσμος (βλέπε **Mathematica** και +**Scilab**). + +Η απάντηση είναι απλή : γιατί το Yacas μπορεί να το αποκτήσει οποιοσδήποτε αφού διανέμεται κάτω από **GNU General Public License** (δεν γνωρίζω αν το Scilab +είναι κάτω από GPL αλλά νομίζω πως είναι) με ολόκληρο τον κώδικα μπροστά του και από την αλλή γιατί το μέγεθος του είναι **ελάχιστο** σε σχέση με τα άλλα +παρόμοια προγράμματα και με τις δυνατότητες που έχει. + +Οπότε το μόνο που έχετε να κάνετε τώρα είναι να το κατεβάσετε στον υπολογιστή σας και να το δοκιμάσετε, γιατί όπως λέει ο λαός: \"καλό ακούγεται αλλά αν δεν το diff --git a/content/articles/30/04_procmail.md b/content/articles/30/04_procmail.md new file mode 100644 index 0000000..5d13492 --- /dev/null +++ b/content/articles/30/04_procmail.md @@ -0,0 +1,217 @@ ++++ +title = 'procmail' +date = '2001-09-01T00:00:00Z' +description = '' +author = 'Νίκος Αποστολάκης(mailto:nickapos@agriroot.aua.gr)' +issue = ['Magaz 30'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*USING **procmail**. Πώς;* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Γενικά** +---------------------------------------- + +- [1.1 DISCLAIMER](#ss1.1) +- [1.2 Τι είναι το **procmail**](#ss1.2) + +**2. Στο ψητό** +------------------------------------------ + +- [2.1 Η κατάσταση των διανομών σε σχέση με το **procmail** σήμερα](#ss2.1) +- [2.2 Εάν το **procmail** δεν έχει έρθει μαζί με την διανομή μου τι κάνω;](#ss2.2) +- [2.3 Κατάφερα να ξεκινήσω το **procmail** μετά τι κάνω;](#ss2.3) + +**3. Παράδειγμα αρχείου procmailrc.** +---------------------------------------------------------------- + +**4. Bibliography** +---------------------------------------------- + + +### [1. Γενικά]{#s1} + +### [1.1 DISCLAIMER]{#ss1.1} + +Δεν φέρω καμία ευθύνη εάν η εφαρμογή των παρακάτω προκαλέσει οποιουδήποτε είδους ζημία στο μηχάνημα σας ή στα δεδομένα σας. + +### [1.2 Τι είναι το **procmail**]{#ss1.2} + +Το **procmail** είναι ένα πρόγραμμα με το οποίο μπορείς να επεξεργαστείς, φιλτράρεις, ταξινομήσεις το e-mail σου. Με το **procmail** μπορείς επίσης να φτιάξεις +**auto-mail-responders, mailing lists** και πολλά άλλα. + + +### [2. Στο ψητό]{#s2} + +### [2.1 Η κατάσταση των διανομών σε σχέση με το **procmail** σήμερα]{#ss2.1} + +Το **procmail** έρχεται σήμερα ως ο **default mail delivery** agent σε SuSE 6.4 και Slackware 7.1. + +Αυτό σημαίνει ότι όχι μόνο το **procmail** έρχεται έτοιμο σε αυτές τις διανομές αλλά και ότι το sendmail είναι έτσι ρυθμισμένο ώστε να χρησιμοποιεί το +**procmail** σαν mail delivery agent (MDA) αντί του παραδοσιακού mail. Σύμφωνα με τα παραπάνω συμπεραίνω (μπορεί και εσφαλμένα βέβαια) ότι το **procmail** +έρχεται ως ο default MDA στις περισσότερες διανομές. + +### [2.2 Εάν το **procmail** δεν έχει έρθει μαζί με την διανομή μου τι κάνω;]{#ss2.2} + +Εάν είναι αυτή η περίπτωση σας τότε θα πρέπει να κατεβάσετε το **procmail** απο το , να το κάνετε compile σύμφωνα με τις οδηγίες που +σας δίνει και να το εγκαταστήσετε. Τώρα έχετε δύο επιλογές: + +Mπορείτε να ρυθμίσετε το sendmail ώστε να χρησιμοποιεί απευθείας το **procmail** σαν MDA ή + +Nα βάλετε μέσα στο .forward την παρακάτω γραμμή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + |exec /usr/bin/:lockfile + + contitions + + exactly one action. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Φυσικά μπορούμε να χρησιμοποιήσουμε πολλα τέτοια block εντολών μέσα σε ένα .**procmailrc** + +#### Flags + +Στην πρώτη γραμμή δηλώνουμε ότι ξεκινάμε ένα νέο `block απο filtering rules` (χρησιμοποιώντας το `:0`). Δηλώνουμε με τι `flags` θέλουμε να γίνει αυτο το +φιλτράρισμα και αν θέλουμε όσο γίνεται αυτο να έχουμε κλειδωμένο το αρχείο ή τα αρχεία στα οποία αναφέρεται αυτο το `block` με ένα `lockfile`. + +Μερικά απο τα πιο κοινά `flags` είναι το `c` και το `f` με το πρώτο δημιουργούμε ένα πιστό αντίγραφο του μυνήματος που βρίσκεται υπο επεξεργασία και δουλεύουμε +πάνω σε αυτό.\ +Αυτό το flag χρησιμοποιείται όταν θέλουμε να στείλουμε ή να προωθήσουμε ένα μύνημα σε πολλούς παραλήπτες ή σε πολλούς φακέλους. + +Το δεύτερο flag χρησιμοποιείται όταν θέλουμε να θεωρήσουμε το ένα `pipe` σαν φίλτρο. Φυσικά το πιο κοινό είναι να μην χρησιμοποιήσουμε καθόλου `flags` και να +επεξεργαστούμε το ίδιο το e-mail με το **procmail** χωρίς να το περάσουμε σε ένα άλλο πρόγραμμα ή να εργαστούμε πάνω σε ένα αντίγραφο του. + +Υπάρχουν και άλλα πολλά `flags` τα οποία συνδιαζόμενα δίνουν στο **procmail** τεράστια ευελιξία αλλά δεν θα αναφερθούν έδω.\ +Περιγράφονται αναλυτικά στο σχετικό manual page (**`man procmailrc`**). + +#### Lockfiles + +Το γιατί μπορεί κάποιος να θέλει να χρησιμοποιήσει `lockfiles` έχει αναφερθεί παραπάνω. Το όνομα ενός `lockfile` δηλώνεται ως εξής : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :0:lockfilename + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μπορούμε να παραλείψουμε το όνομα του `lockfile` και η προηγούμενη έκφραση να γίνει η εξής + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :0: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +οπότε το **procmail** χρησιμοποιεί το όνομα του αρχείου στο οποίο αναφέρεται αυτο το `block` εντολών για να φτιάξει ένα `lockfile`.\ +Ασφαλώς μπορούμε να μην χρησιμοποιήσουμε καθόλου `lockfile` σε ένα block εντολών οπότε η έκφραση γίνεται + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :0 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Υπάρχουν δύο περιπτώσεις όπου η χρήση `lockfile` δεν έχει νόημα. Η μια περίπτωση είναι αυτή οταν κατευθύνεις κάποιο μύνημα στο **/dev/null** και ή δέυτερη είναι +όταν κάνεις **forward** ένα μύνημα σε κάποια άλλη διέυθυνση e-mail (όπως στο παράδειγμα **procmailrc** ). + +#### Conditions + +Το **procmail** για να δει εάν το μύνημα που επεξεργάζεται αυτή την στιγμή πληρεί τις συνθήκες που εσείς του έχετε δηλώσει περνάει όλο το μύνημα μέσα απο την +**`egrep`** δίνοντας της σαν **`regular expression`** τα contitions που έχετε γράψει εσείς. + +Δηλαδή τα contitions αυτά δεν είναι τίποτα άλλο απο **`regular expressions`**. Για περισσότερα για τις +**`regular expressions, man egrep.`** + +#### Action(s) + +Τα actions του **procmail** μπορεί να είναι οτιδήποτε (σχεδόν) απο ένα απλό όνομα οπότε το **procmail** γράφει τα μυνήματα που πληρούν τις συνθήκες σε ένα +αρχείο με αυτο το όνομα μέσα στο `MAILDIRECTORY`, μια ή πολλές e-mail adress οπότε το **procmail** απλά κάνει forward το μύνημα σε αυτές τις διευθύνσεις ή τέλος +το input οποιουδήποτε προγράμματος.\ +Όπως έχω γράψει παραπάνω την σύνταξη των `filtering rules` είμαστε αναγκασμένοι να χρησιμοποιήσουμε μόνο ένα `action`. Μπορούμε +όμως με την χρήση των αγκύλων {} να κάνουμε `nest` πολλά `blocks` απο `actions` τα οποία μπορεί να είναι ακόμα και condition rules : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + :0: + condition + {action1,action2,action3} + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [3. Παράδειγμα αρχείου procmailrc.]{#s3} + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # Please check if all the paths in PATH are reachable, remove the ones that + # are not. + + PATH=$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:. + MAILDIR=$HOME/Mail # You'd better make sure it exists + DEFAULT=$MAILDIR/mbox + LOGFILE=$MAILDIR/from + LOCKFILE=$HOME/.lockmail + + :0 # Anything from thf + * ^From.*thf@somewhere.someplace + todd # will go to $MAILDIR/todd + + :0 # Anything from people at uunet + * ^From.*@uunet + uunetbox # will go to $MAILDIR/uunetbox + + :0 # Anything from Henry + * ^From.*henry + henries # will go to $MAILDIR/henries + + # Anything that has not been delivered by now will go to $DEFAULT + # using LOCKFILE=$DEFAULT$LOCKEXT + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [4. Bibliography]{#s4} + +Καταλήγοντας θα ήθελα να πω ότι σε αυτό το άρθρο επιχείρησα να καλύψω τις απολύτως βασικές λειτουργίες του **procmail**, προσπαθώντας να είμαι σύντομος και +περιεκτικός. Για περισσότερες πληροφορίες παρακαλώ να αναφερθείτε στο documentation που έρχεται μαζί με τον κώδικα του **procmail** καθώς και στην σελίδα του diff --git a/content/articles/30/05_lids.md b/content/articles/30/05_lids.md new file mode 100644 index 0000000..d0c4313 --- /dev/null +++ b/content/articles/30/05_lids.md @@ -0,0 +1,175 @@ ++++ +title = 'Linux Intrusion Detection System - μία παρουσίαση' +date = '2000-03-01T00:00:00Z' +description = '' +author = 'Μιχάλης Καμπριάνης' +issue = ['Magaz 30'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το LIDS, Linux Intrusion Detection System είναι ένα add-on του πυρήνα του linux, που συνοδεύεται από ένα admin tool, το οποίο φροντίζει να κάνει το σύστημά μας +κάπως πιο\... \"ασφαλές\"* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +-------------------------------------- + +**2. Capabilities** +------------------------------------------ + +- [2.1 Τι είναι τα capabilities?](#ss2.1) +- [2.2 Δεν κατάλαβα τι μου παρέχουν\...](#ss2.2) +- [2.3 Δεν μου αναφέρεις μερικά capabilities;](#ss2.3) + +**3. LIDS λοιπόν\...** +--------------------------------------------- + +- [3.1 Το kernel-patch](#ss3.1) +- [3.2 Το lidsadm](#ss3.2) + +**4. Άρα\....** +-------------------------------------- + +- [4.1 Hints and tricks](#ss4.1) +- [4.2 Που το βρίσκω; Άλλο Documentation;](#ss4.2) +- [4.3 Disclaimer και συμπεράσματα.](#ss4.3) + + +### [1. Εισαγωγή]{#s1} + +Το linux, ως unix-type λειτουργικό, κουβαλάει μαζί του κάποιες αδυναμίες των παλιών και άλλων unices. Μία από αυτές τις αδυναμίες, έχει να κάνει με το +γενικότερα σύστημα authorization, όπου υπάρχουν πάρα πολλά πράγματα, που μπορεί να τα κάνει μόνο το παντοδύναμο root account\... Αυτό το σχήμα της ασφάλειας, +θεωρείται ξεπερασμένο, εφόσον + +- υπάρχουν πάρα πολλά πράγματα που γίνονται μόνο από το root account, αναγκάζοντάς μας έτσι αφενός να κάνουμε πολλά προγράμματα setuid root, αφετέρου να + μοιράζουμε το root password σε πολλά άτομα αν μιλάμε για μία φάρμα servers με πολλούς operators. +- αρκεί για κάποιον εισβολέα να αποκτήσει το root password για να έχει πλήρη έλεγχο στο σύστημα. +- προγράμματα που είναι άσχετα με το λειτουργικό (π.χ. sendmail στις παλαιότερες εκδόσεις), ακριβώς επειδή πρέπει να τρέχουν με root privileges, αποτελούν + κίνδυνο γενικότερης ασφάλειας στο σύστημα, και όχι μόνο για την υπηρεσία που εξυπηρετούν αυτή καθ\' αυτή. + +Πολλά από αυτά τα θέματα, θα μπορούσαν να ξεπεραστούν με χρήση των capabilities, ένα \"τρικ\", το οποίο προστέθηκε στην έκδοση 2.2 του Linux kernel. + + +### [2. Capabilities]{#s2} + +### [2.1 Τι είναι τα capabilities?]{#ss2.1} + +Τα capabilities είναι ένα set, όπως λέει και το όνομά τους, δυνατοτήτων, που ορίζονται μέσα στον πυρήνα, και περιορίζουν τις δυνατότητες του root που μέχρι τώρα +ξέραμε ότι είχε (και των setuid root προγραμμάτων αντίστοιχα). Τα capabilites ορίστηκαν από κάποιο POSIX draft (το οποίο τώρα αποσύρθηκε), ενώ ο πυρήνας του +Linux έχει και πολλά capabilities τα οποία δεν αναφέρονται στο draft αλλά είναι linux-specific.\ +Ένα παράδειγμα capability, είναι το CAP\_CHOWN το οποίο επιτρέπει την αλλαγή ιδιοκτήτη ενός αρχείου. Όπως καταλαβαίνετε, για να κάνουμε chown ένα αρχείο, πρέπει +να είμαστε ο root, άρα ένα πρόγραμμα που θέλουμε να κάνει chown πρέπει να είναι setuid root. Κάτι τέτοιο όμως αυτόματα σημαίνει ότι το ίδιο πρόγραμμα, θα μπορεί +να διαβάσει το αρχείο /etc/shadow, δημιουργώντας έτσι, για κάτι τόσο απλό, μία τρύπα ασφαλείας στο σύστημα. Με χρήση των capabilities, μπορεί το setuid root +πρόγραμμα να αρχίσει να τρέχει, και μετά να \"ρίξει\" όλα τα capabilities που δεν χρειάζεται και να κρατήσει μόνο το cap\_chown. Μπορεί επίσης, να αλλάξει το +effective uid και πλέον να μην μπορεί καν να ανακτήσει τα dropped capabilities. + +### [2.2 Δεν κατάλαβα τι μου παρέχουν\...]{#ss2.2} + +Λογικό, γιατί ακόμα, δεν μας παρέχουν τίποτα. Για να τα λέμε σωστά τα πράγματα, πρέπει η εφαρμογή μας να γραφτεί έτσι ώστε να χρησιμοποιεί τα capabilities, +αλλιώς δεν κερδίζουμε τίποτα.. Γι αυτό ξεκίνησε και το project LIDS (Linux Intrusion Detection System) το οποίο παρέχει απλά ένα layer μεταξύ του συστήματος +(kernel) και των εφαρμογών, για να επιβάλλει την χρήση capabilities σε ήδη γραμμένες εφαρμογές. + +### [2.3 Δεν μου αναφέρεις μερικά capabilities;]{#ss2.3} + +Αμέ\... Το CAP\_CHOWN που είδαμε πιο πάνω, το CAP\_NET\_BIND\_SERVICE που επιτρέπει σε μία εφαρμογή να ανοίξει ένα port κάτω από το 1024 (privileged ports), το +CAP\_SYS\_PTRACE που επιτρέπει την χρήση της ptrace() σε οποιοδήποτε process\...\ +Μία πλήρη λίστα για τον δικό σας πυρήνα, θα βρείτε εδώ: + + /usr/src/linux/include/linux/capability.h + + +### [3. LIDS λοιπόν\...]{#s3} + +Το LIDS αποτελείται από δύο κομμάτια: ένα (μεγαλούτσικο) kernel patch, και ένα administration πρόγραμμα, το lidsadm. Ας τα δούμε ξεχωριστά. + +### [3.1 Το kernel-patch]{#ss3.1} + +Παρέχει τις εξής extra παραμέτρους στον πυρήνα: + +- CONFIG\_LIDS: όπως λέει και το όνομά του, ενεργοποίηση του LIDS. +- CONFIG\_LIDS\_HANGUP: κάθε φορά που κάποιο πρόγραμμα προσπαθεί να κάνει κάτι που απαγορεύεται από το LIDS, τότε η κονσόλα στην οποία το πρόγραμμα είναι + attached θα κλείνει. +- CONFIG\_LIDS\_SA\_EXEC\_UP: κάθε φορά που εκτελείται ένα πρόγραμμα μη προστατευμένο πριν μπει σε \"λειτουργία\" το LIDS (κατά τη διάρκεια του boot προφανώς) + θα δημιουργείται ένα security alert. +- CONFIG\_LIDS\_NO\_EXEC\_UP: με αυτή την επιλογή το LIDS θα αρνηθεί να τρέξει μη προστατευμένα προγράμματα πριν αυτό μπει σε \"λειτουργία\". +- CONFIG\_LIDS\_INIT\_CHILDREN\_LOCK: με αυτή την επιλογή θα προστεθεί η δυνατότητα να αποκλειστούν κάποια στιγμή (την οποία επιλέγουμε εμείς) όλοι οι τρόποι + για να σκοτώσει κάποιος ένα process του οποίου το parent process είναι η init. +- CONFIG\_LIDS\_NO\_FLOOD\_LOG: Αν ένα μήνυμα του LIDS επαναλαμβάνεται επί μακρόν, το LIDS θα σταματήσει να το γράφει στα logs για να μην τα γεμίσει. +- CONFIG\_LIDS\_PORT\_SCAN\_DETECTOR: Με αυτή την επιλογή θα δημιουργηθεί μέσα στον kernel ένας port scanner detector, και για κάθε port scan το LIDS θα + καταγράφει τα απαιτούμενα μηνύματα στα logs. +- CONFIG\_LIDS\_TIMEOUT\_AFTER\_FLOOD: Είναι ο χρόνος τον οποίο πρέπει να απέχουν μεταξύ τους δύο διαφορετικά security alerts για να καταγραφούν. +- CONFIG\_LIDS\_ALLOW\_SWITCH: Με αυτή την επιλογή μπορεί να \"απενεργοποιηθεί\" προσωρινά το LIDS. +- CONFIG\_LIDS\_MAX\_TRY: Πόσες φορές θα δεχθεί λάθος password το LIDS πριν \"κλειδώσει\" για λίγο τη δυνατότητα απενεργοποίησής του. +- CONFIG\_LIDS\_TTW\_FAIL: Πόση ώρα θα κρατάει το \"κλείδωμα\" που λέγαμε πιο πάνω. +- CONFIG\_LIDS\_REMOTE\_SWITCH: Με αυτή η επιλογή, η απενεργοποίηση θα είναι δυνατή και από απόμακρο τερματικό, αλλιώς, μόνο από την κονσόλα. +- CONFIG\_LIDS\_ALLOW\_ANY\_PROG\_SWITCH: Κανονικά μόνο το /sbin/lidsadm μπορεί να απενεργοποιήσει το LIDS αλλά με αυτή την επιλογή, μπορούμε να επιτρέψουμε + και σε άλλα προγράμματα να κάνουν κάτι τέτοιο. +- CONFIG\_LIDS\_RELOAD\_CONF: Επιτρέπει την επανανάγνωση του αρχείου ρυθμίσεων του LIDS χωρίς να χρειάζεται reboot. +- CONFIG\_LIDS\_SA\_THROUGH\_NET: Με αυτή την επιλογή, τα security alerts στέλνονται δια μέσω του δικτύου, και γι αυτό πρέπει να οριστούν ορισμένες ρυθμίσεις, + τις οποίες θα δούμε παρακάτω. +- CONFIG\_LIDS\_HIDE\_KLIDS: Με αυτή την επιλογή, το process του Lids θα κρύβεται από το /proc (άρα δεν θα φαίνεται στα ps, top κλπ). +- CONFIG\_LIDS\_NET\_MAX\_TRIES: Πόσες φορές θα προσπαθήσει το LIDS να στείλει το security alert μέσω δικτύου. +- CONFIG\_LIDS\_NET\_TIMEOUT: Πόση ώρα θα είναι το timeoute μεταξύ των προσπαθειών να σταλεί το μήνυμα μέσω δικτύου. +- CONFIG\_LIDS\_MSGQUEUE\_SIZE: Πόσο μεγάλη να είναι η ουρά των μηνυμάτων που θα σταλούν μέσω δικτύου. Μόλις γεμίσει η ουρά, δεν θα καταγράφονται άλλα + μηνύματα (μέχρι να ξανααδειάσει προφανώς). + +### [3.2 Το lidsadm]{#ss3.2} + +Το πρόγραμμα /sbin/lidsadm είναι απαραίτητο για να μπορούμε να χρησιμοποιήσουμε σωστά και αποδοτικά το LIDS. Δεν θα μπούμε βέβαια σε λεπτομέρειες χρήσης, θα +πούμε μόνο ότι με αυτό το πρόγραμμα: + +- μπορούμε να θέσουμε κάποια αρχεία και directories σε read-only για όλες τις processes του συστήματος, ακόμα και τις root-owned processes. Παράδειγμα το + /usr/lib +- μπορούμε να θέσουμε κάποια αρχεία σε append-only mode (θυμηθείτε Windows-NT και permission to write), όπως για παράδειγμα το /var/log/messages +- μπορούμε να θέσουμε κάποια αρχεία σε hidden για όλες τις processes, όπως το /etc/shadow\... +- \...δίνοντας σε συγκεκριμένα προγράμματα το δικαίωμα να τα διαβάζουν, όπως το /bin/login +- μπορούμε να ορίσουμε τα capabilities που θα αφαιρέσουμε από **όλα** τα προγράμματα, όταν θα κλειδώσουμε τον πυρήνα, π.χ. το CAP\_SYS\_MODULE +- μπορούμε να προσθέσουμε κάποια από αυτά που αφαιρέσαμε globally, σε συγκεκριμένα executables +- με τη δυνατότητα να γίνονται inherited στα child processes +- μπορούμε να απενεργοποιήσουμε προσωρινά το LIDS (για να θέσουμε νέες ρυθμίσεις π.χ.)\... +- \... και να το επανενεργοποιήσουμε αφού του ζητήσουμε να διαβάσει το configuration ξανά +- μπορούμε να \"κρύψουμε\" processes +- ή μπορούμε να τα κάνουμε να αγνοούν το kill + +Νομίζω ότι πιάσατε την κεντρική ιδέα. Υπάρχουν βέβαια περιορισμοί. Συγκεκριμένα, τα file-attributes που θέτουμε, τίθενται με βάση το inode, άρα δεν μπορούμε να +κλειδώσουμε το /etc directory και να περιμένουμε να δουλεύει η εντολή passwd (η οποία αναδημιουργεί το password file κάθε φορά, άρα αυτό αποκτά άλλο inode κάθε +φορά, συνεπώς ΔΕΝ μπορούμε να δώσουμε full privilege στην εντολή passwd πάνω σε αυτό το αρχείο). + + +### [4. Άρα\....]{#s4} + +### [4.1 Hints and tricks]{#ss4.1} + +Πολύ χρήσιμο κρίνεται το remote logging που παρέχει το LIDS. Πρέπει να δοθεί προσοχή στις ρυθμίσεις (σε ποιο server θα κάνει logging, με ποια μέθοδο κλπ) και να +σχεδιαστεί σωστά το δίκτυο ούτως ώστε να μην έχουμε \"κομμένες\" γραμμές εκεί (π.χ. κάποιος αποφάσισε να βάλει ένα firewall ανάμεσα στα συστήματά μας :-).\ +Θέλει σοβαρή μελέτη το ποια αρχεία/directories θα κλειδώσουμε, πόσο θα τα κλειδώσουμε (όπως είπαμε μπορούμε να τα κρύψουμε εντελώς, να τα κάνουμε μόνο +ανάγνωσης, να τα κάνουμε μόνο append ή να τα κάνουμε εγγραφής/ανάγνωσης), σε ποια προγράμματα θα δώσουμε δικαίωμα να προσπελαύνουν τα αρχεία/directories +αυτά\... Το μόνο σίγουρο είναι ότι δεν υπάρχει συνταγή, και μάλλον είναι δύσκολο να γραφτεί μία. Μην εμπιστευτείτε καμία συνταγή, αν πρόκειται για production +σύστημα.\ +Πρέπει επίσης να μελετηθεί σωστά το σε ποια αρχεία/executables θα δοθούν τα capabilities που θα επιτρέπουν να κάνουν unmount τα filesystems και να τερματίζουν +διεργασίες, για να μπορεί το σύστημα να \"κατεβαίνει\" κανονικά, και να μην κάνει fsck σε κάθε boot, ούτε να βρίσκει \"ανοιχτά\" processes.\ +Σε κάθε περίπτωση, **πρέπει** να επιτραπεί το switching κατά το compile του πυρήνα, για να μπορείτε να απενεργοποιήσετε το lids προσωρινά. Αλλιώς, το root +account, σε μία normal εγκατάσταση, θα είναι τόσο περιορισμένο που θα είναι άχρηστο.\ +Τέλος, αν δείτε ότι το σύστημα δεν καλο-δουλεύει μετά τις αλλαγές που κάνατε, ένα security=0 σαν command parameter στο lilo θα σας δώσει τη δυνατότητα να +ξεκινήσετε το σύστημα με το LIDS απενεργοποιημένο. + +### [4.2 Που το βρίσκω; Άλλο Documentation;]{#ss4.2} + +Που το βρίσκετε; Μα που αλλού, εκτός από το . Εκεί θα βρείτε, εκτός από τα patches για τους πυρήνες της σειράς 2.4 και της σειράς 2.2, και +διάφορα links για documentation. Το δικό τους FAQ, links για άρθρα που έχουν γραφτεί για το LIDS, links για reviews, link για εκείνο το POSIX draft\....\ +Καλό θα ήταν βέβαια να υπήρχε ένα graphical configuration utility (πεδίον δόξης λαμπρό για τους απανταχού qt ή gtk programmers) αλλά δεν έχει γραφτεί κάποιο +τέτοιο ακόμα από ότι ξέρω. Ιδού η Ρόδος\.... + +### [4.3 Disclaimer και συμπεράσματα.]{#ss4.3} + +Δεν χρειάζεται βέβαια να πω ότι η χρήση του LIDS δεν προτείνεται αν είστε αρχάριος. Σε κάθε περίπτωση, για ότι κάνετε με το LIDS (ή και χωρίς αυτό :-) δεν φέρω +καμία ευθύνη. Διαβάστε το documentation, ξαναδιαβάστε το, κι αν είστε έτοιμοι, πάρτε ένα backup τα αρχεία σας και δοκιμάστε το\... + +Το LIDS δεν μου φάνηκε ακόμα έτοιμο για production servers, κυρίως λόγω της έλλειψης documentation και ενός εύκολου configuration utility. Όπως ξαναείπα, ιδού +πεδίο δόξης λαμπρό\...\ +Η αλήθεια είναι πάντως, ότι παρέχει ένα επίπεδο ακόμα ασφαλείας στο παλιό γνωστό και ταλαιπωρημένο Unix-security scheme\... Μόλις δοθεί η δυνατότητα υποστήριξης +capabilities και στο filesystem, όλα θα είναι καλύτερα :-) + diff --git a/content/articles/31/01_editorial.md b/content/articles/31/01_editorial.md new file mode 100644 index 0000000..bc5d0b5 --- /dev/null +++ b/content/articles/31/01_editorial.md @@ -0,0 +1,52 @@ ++++ +title = 'Editorial' +date = '2000-06-01T00:00:00Z' +description = '' +author = 'Βαγγέλης Παπαδογιαννάκης(mailto:papas@hellug.gr)' +issue = ['Magaz 31'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Aircondition τώρα!* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Καλός ήρθατε σε άλλο ένα magaz. Ένα magaz που είναι βγαλμένο με πολύ ιδρώτα, κυριολεκτικά μιλώντας μια και η ζέστη είναι ανηπόφορη. Τουλάχιστον εδώ στο Ηράκλειο +της Κρήτης, το θερμόμετρο έχει χτηπήσει κόκκινα, και δυστηχώς πολλές φορές ακόμα και αυτό το air-condition αποδυκνείεται λίγο. + +Αυτό το τεύχος, σας επιφυλάσει πολλά θέματα, advanced θα μπορούσαμε να τα χαρακτηρίσουμε, κάτι που η αλήθεια είναι ότι είχε λείψει από το magaz. Πριν να +προχωρήσουμε όμως σε ανάλυση των θεμάτων που φιλοξενούνται αυτό το μήνα, θα ήθελα να πω ένα μεγάλο ευχαριστώ σε όλους όσους προσφέρθηκαν να βοηθήσουν γράφοντας +άρθρα για το magaz. Η ανταπόκριση στο editorial του προηγούμενου μήνα ήταν κάτι παραπάνω από θερμή και αποδείχτικε ότι υπάρχει και όρεξη για βοήθεια αλλά και +υλικό για κάλυψη θεμάτων. Και όσοι δεν είδαν το άρθρο τους, αυτό το μήνα, ας μην ανυσηχούν, θα μπούν στον επόμενο μήνα. + +Προχωράμε λοιπόν, στο επόμενο θέμα, που είναι το **install festival** που έγινε στο **Ηράκλειο της Κρήτης στις 15 και 16 Ιουνίου**. Σε γενικές γραμμές, όλα +πήγαν πολύ καλά. Προβλήματα φυσικά και υπήρξαν, αλλά ήταν σχεδόν όλα οργανοτικά, πράγμα αναμενώμενο, μια και ποτέ δεν είχαμε οργανώσει κάτι αντίστοιχο. Στα +highlights θα ήθελα να αναφέρω + +**τα μπλουζάκια που είχαμε τυπώσει**, το οποία έγιναν ανάρπαστα και πολλές φορές ήταν η πέτρα του σκανδάλου για το ποιός θα τα πάρει τελικά.\ +**Τις ομιλίες** που έγιναν όλες και μάλιστα με μεγάλη επιτυχία, παρόλο που οι περισσότεροι δεν είχαν ξαναανέβει σε βήμα για ομιλία. Η συμμετοχή του κόσμου δεν +ήταν όση ακριβώς θα ηθέλα εγώ προσωπικά, αλλά και αυτό είναι λογικό αν αναλογιστούμε ότι ήταν περίοδος εξετάσεων, παρασκευή-σάββατο, καταμεσήμερα, και από τις +πιο ζεστές ημέρες. + +Θα ήθελα να ευχαριστήσω πολύ όλα τα παιδιά που έστηναν τους υπολογιστές (πρέπει να στήθηκαν περίπου **20 μηχανάκια**). Αυτοί ήταν οι πραγματικοί ήρωες του +διημέρου, μια και κουράστηκαν πολύ περισσότερο από όλους εμάς που απλά κάναμε μια ομιλία. Έπρεπε να αντιμετωπίσουν τους νέους χρήστες, να τους εξηγήσουν πέντε - +έξι βασικά πράγματα, και αυτό όπως ξέρουμε όλοι είναι πολύ δύσκολο :)\ +Σε γενικές γραμμές, περάσαμε καλά, και αυτό είναι που μετράει στο φινάλε :) + +Ας δούμε όμως και τα θέματα που φιλοξενούμε αυτό το μήνα στο περιοδικό μας. Έχουμε λοιπόν ένα άρθρο για KIOSLAVES, γραμένο από τον Δημήτρη Καμενόπουλο ( +) τα οποία είναι απαραίτητα για να δουλέψει καλά το KDE. Φυσικά, δεν θα τα δείτε μπροστά σας, πιθανότατα να μην τα έχετε καν +ακούσει, αλλά κάνουν πολύ δουλειά διάφανα - αθόρυβα - αποτελεσματικά. + +Window Manager of choice :) IceWm, ένας απλός, πλήρως παραμετροποιήσιμος, πανέμορφος, πανάλαφρος Window Manager. Εισαγωγικό άρθρο από τον **Αποστολάκη Νίκο** ( +[Nick Apostolakis](mailto:nickapos@agriroot.aua.gr)) έναν πολύ ενεργό συντάκτη του [magaz](http://magaz.hellug.gr). Κατέβηκε και στο **InstallFestival** και μας +βοήθησε κιόλα :) Περισσότερες πληροφορίες για το Nίκο αλλά και για όλους τους αρθρογράφους του magaz (που μας έχουν στείλει πληροφορίες για τις αφεντιές τους) +στη σελίδα [info](http://magaz.hellug.gr/info.html). + +Και για τους φρέσκους στο Linux και γενικότερα στα unixοειδή λειτουργικά, ένα πολύ καλό κείμενο από τον Άγγελο Οικονομόπουλο ( για +την ιστορία του Unix. Πολλοί από τους παλιούς χρήστες, πάντως, θα βρούν και πράγματα που δεν τα ήξεραν για αυτό ας το διαβάσουν και αυτοί :) + +Πόσοι ξέρετε το **blender**; Το blender λοιπόν είναι ένα πρόγραμμα, πολύ δυνατό στη δημιουργία τρισδιάστατων γραφικών. Μια γνωριμία - παρουσίαση, επιχηρεί ο +Καπελώνης Κώστας ( ) ένα νέο μέλος στην οικογένεια των magazάτωρων, με ενεργή συμετοχή και στο **install festival** της Κρήτης. + +Καλή ανάγνωση λοιπόν και για όσους φεύγουν διακοπές καλά μπάνια, ή ότι άλλο έχετε σχεδιάσει να κάνετε. diff --git a/content/articles/31/02_KDE_IOSlaves.md b/content/articles/31/02_KDE_IOSlaves.md new file mode 100644 index 0000000..79b48d3 --- /dev/null +++ b/content/articles/31/02_KDE_IOSlaves.md @@ -0,0 +1,308 @@ ++++ +title = 'Ολοκλήρωση στο KDE: Η τεχνολογία IO Slaves' +date = '' +description = '' +author = 'Δημήτρης Καμενόπουλος για το Magaz ( magaz.hellug.gr(http://magaz.hellug.gr) )' +issue = ['Magaz 31'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Αυτό που εντυπωσιάζει τον προγραμματιστή και τον χρήστη της κονσόλας του Unix είναι ότι \"τα πάντα είναι αρχεία\". Οι κατάλογοι, τα φυσικά αρχεία, οι σκληροί +δίσκοι, οι συσκευές δικτύου, οι δικτυακές συνδέσεις\... Όλα είναι αρχεία και αντιμετωπίζονται μέσα από ένα πρότυπο σύνολο λειτουργιών. Η τάση αυτή για διαφάνεια +και ολοκλήρωση είναι διάχυτη στο Unix, και αποτελεί βασικό τμήμα της φιλοσοφίας του.Το KDE, που παρά το γραφικό του χαρακτήρα δε θα μπορούσε ποτέ να απαρνηθεί +τη φιλοσοφία του παλιού καλού Unix, χρησιμοποιεί ένα ανάλογο μοντέλο για να αντιμετωπίζει με ενιαίο τρόπο όλες τις δυνατές πηγές εισόδου/εξόδου πληροφοριών. +Είτε πρόκειται για τα τοπικά συστήματα αρχείων, είτε για βάσεις δεδομένων SQL. Η αντίστοιχη τεχνολογία λέγεται KDE IO Slaves, είναι βασικό μέρος του KDE 2.x και +τη χρησιμοποιείτε καθημερινά μέσω του Konqueror.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +---------------------------------------------- + +**2. Η Αφαίρεση** +------------------------------------------------ + +- [2.1 Με δυο κουβέντες](#ss2.1) +- [2.2 Αφαίρεση ναι, αλλά είναι τα πάντα ίδια;](#ss2.2) + +**3. Πώς Λειτουργούν οι KDE IO Slaves** +---------------------------------------------------------------------- + +**4. Πώς Χρησιμοποιούμε (οι Χρήστες) έναν IO Slave** +----------------------------------------------------------------------------------- + +**5. IO Slaves σε Δράση** +-------------------------------------------------------- + +- [5.1 Finger με χρωματάκια και ιστορίες](#ss5.1) +- [5.2 Ο Konqueror σαν πρόγραμμα ηλ. ταχυδρομείου](#ss5.2) +- [5.3 Απ\' ευθείας IO 1: περιορισμος των mount/umount](#ss5.3) +- [5.4 Απ\' ευθείας IO 2: ο Konqueror σαν CD ripper](#ss5.4) + +**6. Πού χρησιμοποιούνται οι IO Slaves** +----------------------------------------------------------------------- + +**7. Επίλογος** +---------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Ένα από τα μεγάλα ατού των Windows 98 ήταν η \"επαναστατική\" δυνατότητα του IE να ανοίγει τοπικούς καταλόγους, δικτυακές ιστοσελίδες και τόπους FTP. Μπορώ να +θυμηθώ ενθουσιώδη άρθρα σε περιοδικά του χώρου για τον \"ενιαίο τρόπο\" αντιμετώπισης τοπικών και απομακρυσμένων αρχείων. Αφήνουμε κατά μέρος το ότι η +\"επαναστατική\" ενιαία αντιμετώπιση προϋπήρχε στο Unix εδώ και αρκετά χρόνια (ποτέ μην ξεχνάτε ότι στο μηχάνημά σας \"συνδέεστε\", και ότι το /home δεν +αποκλείεται να είναι προσαρτημένο με NFS και να αντιπροσωπεύει ένα σκληρό δίσκο στην άλλη όχθη του Ατλαντικού). + +Το πρόβλημα ήταν ότι η αντιμετώπιση εσωτερικά δεν ήταν καθόλου ενιαία. Εντελώς διαφορετικό πρόγραμμα (με διαφορετικά κουμπάκια και μενού) είναι το τμήμα του +Explorer που λειτουργεί ως Web Browser, εντελώς διαφορετικό το τμήμα FTP browser και εντελώς διαφορετικό το τμήμα File Manager. Το γεγονός ότι ο Explorer +παθαίνει \"μεταμόρφωση\" εσωτερικά για να αντιμετωπισει διαφορετική είσοδο κρύβεται από το χρήστη και από τον προγραμματιστή, και αυτό είναι καλό. Ωστόσο το να +επιτρέπεις σε λειτουργίες εισόδου/εξόδου να φτάνουν μέχρι το επίπεδο του User Interface δεν είναι κατά τη γνώμη μου καλή σχεδίαση. Ο Explorer, ή καλύτερα το +αντικείμενο \"Explorer\" είναι τρία (ή και περισσότερα) μονολιθικά προγράμματα. + +Αποτέλεσμα: παρά την υψηλής ποιότητας δουλειά των προγραμματιστών της Microsoft, ο Explorer είναι δυνατόν να κολλήσει αν τον \"στείλετε\" σε έναν κατάλογο FTP +και η σύνδεση είναι πολύ αργή ή κοπεί. Κι αυτό γιατί το \"υψηλού\" επιπέδου UI είναι στενά δεμένο με το \"χαμηλού\" επιπέδου σύστημα Ι/Ο. + +Ας έρθουμε όμως στα δικά μας, και συγκεκριμένα στο KDE. Ο Konqueror, όπως θα ξέρετε όλοι είναι File Manager και ταυτόχρονα Web και FTP browser. Θα δούμε σε αυτό +το άρθρο ότι ο Konqueror μπορεί να δει επίσης αλληλογραφία POP3, ηχητικά CD, αρχειοθήκες .tar.gz και άλλα πολλά. Όλα (εκτός από τις Ιστοσελίδες) +αντιμετωπίζονται με ενιαίο τρόπο και μάλιστα με εξαιρετική απλότητα. Υπεύθυνο για όλα αυτά είναι ένα στρώμα βοηθητικών προγραμμάτων, που εσωτερικά είναι γνωστά +με την ονομασία **KDE IO Slaves**. + + +### [2. Η Αφαίρεση]{#s2} + +### [2.1 Με δυο κουβέντες]{#ss2.1} + +Η σχεδίαση της τεχνολογίας IO Slaves είναι η \*σωστή\* αρθρωτή και ιεραρχική σχεδίαση που υποτίθεται ότι διδάσκεται σε κάθε μάθημα προγραμματισμού. Ο τελευταίος +απόφοιτος μιας σχολής προγραμματισμού γνωρίζει πως δεν πρέπει ποτέ λειτουργίες των χαμηλών επιπέδων (Ι/Ο) να \"εισβάλλουν\" στα υψηλά επίπεδα (User Interface), +όπως και ότι κοινές λειτουργίες θα πρέπει κατά το δυνατόν να ομαδοποιούνται και να προσφέρονται κατά ομοιόμορφο τρόπο στους χρήστες και στους προγραμματιστές. +Οι IO Slaves δεν είναι παρά απλή εφαρμογή των παραπάνω ιδεών. Με αυτά υπόψη, θα μπορούσαμε να συνοψίσουμε την τεχνολογία IO Slaves στην παρακάτω παράγραφο: + +**Οι ΙΟ Slaves είναι ένα στρώμα αντικειμένων που παρεμβάλλονται ανάμεσα σε ένα πρόγραμμα που ζητά πληροφορίες (π.χ. Konqueror) και την πηγή αυτών των +πληροφοριών. Αναλαμβάνουν να απαλλάξουν το πρόγραμμα από τις λεπτομέρειες της συνδιαλλαγής με την πηγή και της ανάκτησης των πληροφοριών, πραγματοποιώντας οι +ίδιοι αυτές τις λειτουργίες. Η χρήση των IO slaves γίνεται μέσω εντολών που είναι κοινές για όλους τους IO Slaves και άρα ανεξάρτητες του είδους της πηγής.** + +### [2.2 Αφαίρεση ναι, αλλά είναι τα πάντα ίδια;]{#ss2.2} + +Αν το δούμε πολύ αφαιρετικά το θέμα, σχεδόν τα πάντα σε έναν υπολογιστή μπορούν να αντιμετωπισθούν είτε ως περιεχόμενο, είτε ως αρχεία. Η διαφορά είναι μεγάλη. +Ένα \"αρχείο\" είναι ένα \"πράγμα\" με συγκεκριμένο όνομα. Τα περιεχόμενά του δε φαίνονται κατ\' ευθείαν όταν το κοιτάμε απ\' έξω. Πρέπει να το \"ανοίξουμε\" +και τότε κάποιο πρόγραμμα θα μας παρουσιάσει το \"περιεχόμενο\" του αρχείου. Υπάρχουν πρωτόκολλα που είναι καλύτερο να αντιμετωπιστούν σαν πρωτόκολλα αρχείων. +Το FTP για παράδειγμα, ή το NFS. Υπάρχουν όμως και πρωτόκολλα που (μολονότι εν τέλει στηρίζονται και αυτά σε κάποια αρχεία) καθορίζουν κυρίως περιεχόμενο. Για +παράδειγμα το HTTP κατά κανόνα χρησιμοποιείται για μεταφορά περιεχομένου. + +Οι IO Slaves κάνουν αυτή τη διάκριση. Όταν πρόκειται για περιεχόμενο αναλαμβάνουν να το εξαγάγουν σε κάποια μορφή που να μπορεί να προβληθεί από τον Konqueror. +Π.χ. ο gzip IO Slave παίρνει στην είσοδο ένα συμπιεσμένο αρχείο και το αποσυμπιέζει στην έξοδο. Ενεργεί δηλαδή σαν φίλτρο. Από εκεί και πέρα είναι θέμα του +Konqueror (ή οποιασδήποτε άλλης επφαρμογής χρησιμοποιεί τις υπηρεσίες του IO Slave) να προβάλλει σωστά αυτό το περιεχόμενο. Όταν πρόκειται για αρχεία, ο IO +Slave απλά δίνει πληροφορίες για αυτά τα αρχεία στην εφαρμογή, η οποία πρέπει να ζητήσει μια συγκεκριμένη υπηρεσία (την get) για να πάρει τα περιεχόμενά τους. Ο +FTP ΙΟ Slave π.χ., δίνει στον Konqueror μια λίστα με τα αρχεία ενός καταλόγου FTP και ο Konqueror εμφανίζει τα αντίστοιχα εικονίδια στην οθόνη. + +Ας δούμε τι αντιμετωπίζεται κυρίως σαν αρχείο (ή κατάλογος): + +- τα \...αρχεία και οι κατάλογοι +- οι τοποθεσίες **FTP** +- οι κατάλογοι **HTTP** που δεν έχουν index.html +- οι συμπιεσμένες αρχειοθήκες **.tar.gz** και **.tar.bz2** (που αντιμετωπίζονται σαν κανονικοί κατάλογοι) +- δικτυακοί κατάλογοι **NFS** +- πόροι **SMB** +- λογαριασμοί αλληλογραφίας POP3 και IMAP4 +- Ηχητικά CD +- Δισκέτες + +Και τι αντιμετωπίζεται κυρίως σαν περιεχόμενο: + +- Ιστοσελίδες **HTML** (τοπικές ή μέσω **HTTP**) +- Σελίδες **man** και **info** +- Βοήθεια του KDE (που μπορεί να είναι XML ή HTML) +- Πληροφορίες **finger** +- Συμπιεσμένα αρχεία **.gz** και **.bz2** + +Οι λίστες δεν είναι εξαντλητικές, ενώ η διάκριση δεν είναι πάντοτε τόσο απόλυτα. Σε γενικές γραμμές, ο IO slave αντιμετωπίζει ένα πρωτόκολλο σαν βασισμένο σε +αρχεία όταν σας δίνει στον Konqueror μια λίστα με εικονίδια, και σαν βασισμένο σε περιεχόμενο όταν σας δίνει HTML ή άλλη έξοδο. + + +### [3. Πώς Λειτουργούν οι KDE IO Slaves]{#s3} + +Ένας IO Slave είναι (σχεδιαστικά) ένα αντικείμενο που καταλαβαίνει ένα πρωτόκολλο και παρέχει λειτουργίες του πρωτοκόλλου για χρήση από προγράμματα ανωτέρου +επιπέδου. Συνήθως όμως τα περισσότερα προγράμματα χρησιμοποιούν μόνο μερικές στάνταρ λειτουργίες για την επικοινωνία με όλους τους IO Slaves, ενώ μόνο ειδικά +γραμμένα για κάποιον IO Slave προγράμματα κάνουν πλήρη χρήση όλων των λειτουργιών του. + +Επειδή αυτό ακούγεται λίγο περίπλοκο, θα προσπαθήσω να το εξηγήσω με ένα παράδειγμα: τον τετριμμένο IO Slave \"ftp\" ο οποίος χρησιμοποιείται από τον Konqueror +για τις λειτουργίες διαχείρισης τόπων FTP. Ο \"ftp\" παρέχει τις εξής λειτουργίες: + +- **get**, που ανακτά ένα απομακρυσμένο FTP αρχείο και το \"σερβίρει\" π.χ. τοπικά στο KWrite για άνοιγμα. +- **stat**, που δίνει πληροφορίες για ένα απομακρυσμένο FTP αρχείο (π.χ. ημερομηνία δημιουργίας, μέγεθος κλπ.) +- **listdir**, που παράγει για έναν απομακρυσμένο FTP κατάλογο μια λίστα με τα αρχεία του, επιτρέποντας π.χ. στον Konqueror να σας δείξει αυτά τα ωραία + εικονίδια που σε τίποτα δεν ξεχωρίζουν από τα τοπικά αρχεία. + +Οι περίσσότεροι IO Slaves παρέχουν μία τουλάχιστον από αυτές τις τρεις λειτουργίες. Οι Slaves περιεχομένου υποστηρίζουν βασικά την **get**, που στην περίπτωσή +τους \"φιλτράρει\" την είσοδό τους. Επίσης οι Slaves περιεχομένου υποστηρίζουν τη λειτουργία **mimetype** που καθορίζει το είδος της εξόδου τους. Οι +περισσότεροι έχουν έξοδο τύπου **text/html**, δηλαδή ιστοσελίδα, ώστε να μπορεί να απεικονιστεί στον Konqueror. Τέλος, μερικοί IO slaves (βασικά ο file και +μελλοντικά οι FTP και SMB) έχουν και λειτουργίες εγγραφής. + +Φυσικά άλλoi ΙΟ Slaves έχουν και άλλες υπηρεσίες, αλλά οι \"στάνταρ\" είναι αυτές οι τέσσερις. Αν το καλοσκεφτείτε, δεν κάνετε και άλλα πράγματα με οποιονδήποτε +πόρο του Η/Υ σας. Είτε βλέπετε πληροφορίες για αυτόν, είτε τον ανοίγετε, είτε τον τροποποιείτε. + + +### [4. Πώς Χρησιμοποιούμε (οι Χρήστες) έναν IO Slave]{#s4} + +Τουλάχιστον τρεις IO Slaves τους χρησιμοποιείτε κατά κόρον: είναι οι file, HTTP και ftp με προφανείς λειτουργίες. Για να χρησιμοποιήσουμε γενικά έναν +οποινδήποτε πόρο μέσω IO Slave, η σύνταξη είναι + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + (όνομα IO Slave): ('/' ή '//') (όνομα πόρου ή URL) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +δηλαδή + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ftp://ftp.ntua.gr/pub/linux + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +ή + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + http://localhost:631/admin + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +ή + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + floppy:/ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μέχρι στιγμής το μόνο πρόγραμμα που υποστηρίζει πλήρως αυτή τη σύνταξη είναι ο Konqueror. Μπορείτε να βάλετε στη μπάρα διεύθυνσης τη \"διεύθυνση\" οποιουδήποτε +από τους υπάρχοντες IO Slaves και είναι σίγουρο ότι θα επικοινωνήσει μια χαρά, και θα βρει και κάτι χρήσιμο να κάνει. + +Από την άλλη, οποιοσδήποτε προγραμματιστής μιας εφαρμογής KDE μπορεί να χρησιμοποιήσει αυτή τη σύνταξη στα προγράμματά του για να εξυπηρετηθεί από έναν IO +Slave. Οι \"γενικευμένες\" διευθύνσεις, που είναι σαν URLs αλλά αντί για **http://**, **ftp://** ή **file://** ή άλλα στάνταρ πρωτόκολλα έχουν και τα +\"ψευδοπρωτόκολλα\" που προφέρει κάποιος IO Slave (π.χ. **info://**) περιγράφονται από την κλάση KURL. + +Εκτός από τετριμμένες λειτουργίες (π.χ. έξοδος στο **standard error**) τα προγράμματα KDE **πρέπει** να χρησιμοποιούν KURLs και όχι απλά ονόματα αρχείων ή απλά +URL για είσοδο/έξοδο, οπότε καταλαβαίνετε πως η μέρα που το KEdit π.χ. θα επεξεργάζεται \"απ\' ευθείας\" αρχεία σε απομακρυσμένα FTP Sites στην άλλη άκρη της +γης ίσως να μην είναι και τόσο μακριά (αν και για την ώρα απέχουμε αρκετά από κάτι τέτοιο, δείτε και παρακάτω). + + +### [5. IO Slaves σε Δράση]{#s5} + +### [5.1 Finger με χρωματάκια και ιστορίες]{#ss5.1} + +Πολλοί θα ξέρετε την εντολή finger. Αυτή καλείται ως \'finger username\@hostname\' και εμφανίζει πληροφορίες για το χρήστη username του μηχανήματος hostname. Η +χρήση του IO Slave είναι απλή: + +Στη μπάρα διεύθυνσης του Konqueror δώστε π.χ. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + finger://root@localhost + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και θα πάρετε πληροφορίες για το χρήστη root. + +### [5.2 Ο Konqueror σαν πρόγραμμα ηλ. ταχυδρομείου]{#ss5.2} + +Συνδεδεθείτε στο Internet, και δώστε στη μπάρα διεύθυνσης + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + pop3://διεύθυνση.του.mail.server.σας + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +π.χ. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + pop3://mail.ntua.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πατήστε Enter. Αν όλα πάνε καλά, θα σας ζητηθεί username και password και μετά από λίγο ο Konqueror θα εμφανίσει τα μηνύματα που περιμένουν να τα παραλάβετε, +σαν μια λίστα εικονιδίων. + +Βέβαια τα πράγματα δεν είναι πολύ βολικά, αφού αν ανοίξετε ένα από αυτά τα \"αρχεία\" θα πάρετε το αντίστοιχο μήνυμα σαν \"raw data\", ενώ ένα πρόγραμμα όπως το +KMail αποκωδικοποιεί αυτά τα raw data και σας εμφανίζει ελληνικά, HTML, URL και τα λοιπά. Από την άλλη, μπορείτε εύκολα να αντιγράψετε αυτά τα ακατέργαστα +μηνύματα στο δίσκο σας με ένα Select All και μετά με drag \'n\' drop, ενώ π.χ. με το KMail θα πρέπει να τα αποθηκεύσετε ένα ένα ή όλα μαζί σε ένα μεγάλο αρχείο. + +### [5.3 Απ\' ευθείας IO 1: περιορισμος των mount/umount]{#ss5.3} + +Ένα πράγμα που είναι λίγο βαρετό, είναι τα mount/umount που πρέπει να γίνονται ακόμα και για απλή προβολή της δισκέτας. Υπό την προϋπόθεση ότι έχετε δικαιώματα +ανάγνωσης απ\' ευθείας από το /dev/fd0 ή όποια άλλη συσκευή αντιστοιχεί στο floppy disk drive του συστήματός σας, δίνοντας + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + floppy:/ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα δείτε αμέσως τα περιεχόμενα της δισκέτας σας, χωρίς να χρειαστεί να κάνετε mount. + +### [5.4 Απ\' ευθείας IO 2: ο Konqueror σαν CD ripper]{#ss5.4} + +Ναι, ο τίτλος είναι σωστός. Πρόκειται για μια εντυπωσιακή εφαρμογή της τεχνολογίας IO Slaves, που κακώς δε διαφημίζεται. Υπάρχουν κάποια προαπαιτούμενα και +πάλι. + +- Να μπορείτε να διαβάσετε απ\' ευθείας από το /dev/hdc ή όποια άλλη συσκευή αντιστοιχεί στο CD ROM σας. Συνήθως μόνο ο root έχει τέτοια άδεια. +- Να είστε συνδεδεμένοι στο Internet. +- Το πακέτο kdebase σας να έχει μεταγλωτιστεί με υποστήριξη cdparanoia (οπωσδήποτε) και Ogg Vorbis ή MP3 (όχι υποχρεωτικά). + +Η όλη διαδικασία είναι αρκετά πολύπλοκη και κατά πάσα πιθανότητα θα αποτελέσει αντικείμενο ξεχωριστού άρθρου. + +Αν όμως οι παραπάνω προϋποθέσεις πληρούνται, βάλτε στο CD ROM σας ένα ηχητικό CD και δώστε στη μπάρα διεύθυνσης του Konqueror + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + audiocd:/ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα δείτε (μετά από λίγο) το εξής εκπληκτικό: Ο Konqueror γεμίζει με εικονίδια, που αντιστοιχούν στα tracks του CD (track01, track02\...), και εμφανίζει και +μερικούς καταλόγους, με ονόματα όπως \"WAV\", \"Ogg Vorbis\" και \"MP3\". Αυτοί οι κατάλογοι, \"περιέχουν\" τις ripped και encoded εκδόσεις των κομματιών του +CD. Φυσικά δεν έχει γίνει ακόμα κανένα ripping. Αλλά ο audiocd ΙΟ Slave είναι έτοιμος να σας σερβίρει ότι του ζητήσετε. Αν έχετε \"σφαιράτο\" μηχάνημα, ανοίξτε +ένα από τα MP3 κομμάτια. Θα έχετε τη -σπανιότατη- εμπειρία να ακούτε ένα MP3 που ripάρεται και κωδικοποιείται σε πραγματικό χρόνο. Πιο ρεαλιστική εφαρμογή, +είναι να \"τσιμπήσετε\" το MP3 και να το \"πετάξετε\" σε κάποιον τοπικό κατάλογο. Ο audio slave αρχίζει τότε να κάνει ripping και να γράφει το mp3 στο δίσκο. +Αντίστοιχα γίνεται η εξαγωγή σε μορφή Ogg Vorbis, σε WAV ή και σε RAW. + +To πλέον εντυπωσιακό, είναι ότι αν το CD σας υπάρχει στη CDDB (όπως το \"Dark Side of the Moon\" των Pink Floyd, τότε αντί για track0, track02 και λοιπά θα +δείτε τους τίτλους των τραγουδιών (π.χ. \"Pink Floyd - The Dark Side of The Moon - Time.mp3\", ). Γι\' αυτό και απαιτείται η σύνδεση με Ιντερνετ. Ο IO Slave +προσπαθεί πάντοτε να χρησιμοποιήσει τη CDDB. Μάλιστα (και εδώ έχουμε μια ατέλεια), αν δεν είστε συνδεδεμένοι, ο IO Slave κλείνει χωρίς να σας ενημερώσει, ενώ θα +μπορούσε να συνεχίζει και να ονομάζει τα κομμάτια track01, track02 κλπ. + + +### [6. Πού χρησιμοποιούνται οι IO Slaves]{#s6} + +Κανονικά: παντού όπου υπάρχει Ι/Ο στο KDE, είτε ο χρήστης το καταλαβαίνει, είτε όχι. Το KMail χρησιμοποιεί τους pop3 και imap4 IO Slaves για να ανακτήσει την +αλληλογραφία σας, ο Konqueror (κυρίως) τους http, ftp, file,help, man, info και tar για τις καθημερινές του λειτουργίες, ενώ πολλές εφαρμογές χρησιμοποιούν τους +nfs και smb για να προσφέρουν λειτουργίες \"Network Neighboorhoud\". + +Πρέπει να τονιστεί ότι **ΟΛΟΙ ανεξαιρέτως** οι IO Slaves μπορούν να χρησιμοποιηθούν απ\' αυθείας από τον Konqueror, επιτρέποντας ενδιαφέρουσες εφαρμογές, όπως +δημιουργία σελιδοδείκτη για μια ιστοσελίδα που βρίσκεται συμπιεσμένη σε ένα αρχείο .tar.gz και drag \'n\' drop από ηχητικά CD\'s σε τοπικούς καταλόγους. Έχετε +πάντοτε υπόψη σας όμως ότι όλες οι λειτουργίες ενός IO slave πιθανόν να μην είναι προσπελάσιμες έτσι απλά, ή να απαιτούν άδειες που έχει μόνον ο root. + +Μια παράλειψη των IO slaves είναι ότι δεν είναι και τόσο \"O\" όσο είναι \"Ι\". Δηλαδή δεν έχουν ακόμα λειτουργίες εγγραφής στον πόρο που χειρίζονται (με +κάποιες εξαιρέσεις). Αυτό όμως είναι και λογικό. Ποιος θέλει να τροποποιήσει μια man page ή ένα audio cd; Πάντως αυτή η έλλειψη είναι και ο λόγος που το KEdit +δε μπορεί ακόμα να επεξεργαστεί απ\' ευθείας ένα αρχείο σε κάποιον FTP server :-o. + +Πληροφορίες για τους διαθέσιμους IO Slaves μπορείτε να πάρετε (στο τρέχον CVS του KDE) στον Πίνακα Ελέγχου, στην ενότητα **Δίκτυο** - υποενότητα **Πρωτόκολλα**. +Α, ναι :-) Το \"user-friendly\" όνομα των IO Slaves είναι \"KDE Networking Protocols\", κάτι που δεν είναι βέβαια απόλυτα σωστό, αλλά οι περισσότεροι αποφάσισαν +ότι λέει περισσότερα σε έναν μη προγραμματιστή από το \"IO slaves\". Εσωτερικά βέβαια η τεχνολογία λέγεται πάντα \"ΙΟ Slaves\". + + +### [7. Επίλογος]{#s7} + +Να \'μαστε λοιπόν. Ο δικός μας Web Browser φτιάχνει και MP3, και μάλιστα με απλό drag \'n\' drop. Αυτό είναι ένα δίδαγμα για όσους, ερχόμενοι από τον κόσμο των +Windows και του Macintosh περιμένουν να τα βρουν όλα ολόιδια. Ποτέ μην περιφρονείτε τον τρόπο που τα πράγματα γίνονται στο linux, γιατί μπορεί να είναι και +καλύτερος. Κανείς δεν έχει ιδιαίτερα μεγάλη όρεξη να φτιάξει αντίγραφα των Windows. Θα ήταν μάλλον χαζό, αφού υπάρχει το πρωτότυπο. + +Η ομάδα KDE πήρε απλά τη λόγική της ενιαίας αντιμετώπισης των πόρων που είχε ενσωματωμένη πάντοτε το Unix, και την έφτασε δέκα χρόνια μπροστά από τις εμπορικές +\"ευκολίες\". Για \"αντίγραφο των Windows κατασκευασμένο από δεκαπεντάχρονο χακερά\" όπως είχε αποκαλέσει κάποιος ..απλός χρήστης, νομίζω ότι το KDE δεν τα πήγε +και άσχημα. + diff --git a/content/articles/31/03_icewm.md b/content/articles/31/03_icewm.md new file mode 100644 index 0000000..d3c9d56 --- /dev/null +++ b/content/articles/31/03_icewm.md @@ -0,0 +1,100 @@ ++++ +title = 'Μια παρουσίαση του IceWM' +date = '2001-06-01T00:00:00Z' +description = '' +author = 'Nick Apostolakis(mailto:nickapos@agriroot.aua.gr)' +issue = ['Magaz 31'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*IceWm, a lightweight windowmanager* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Γενικά** +------------------------------------- + +- [1.1 DISCLAIMER](#ss1.1) +- [1.2 Τι είναι ο IceWM](#ss1.2) +- [1.3 Χαρακτηριστικά του IceWM](#ss1.3) + +**2. Compilation και αρχικές ρυθμίσεις του IceWM** +-------------------------------------------------------------------------- + +- [2.1 Compilation](#ss2.1) +- [2.2 Starting IceWM](#ss2.2) + + +### [1. Γενικά]{#s1} + +### [1.1 DISCLAIMER]{#ss1.1} + +Δεν φέρω καμία ευθύνη εάν η εφαρμογή των παρακάτω προκαλέσει οποιουδήποτε είδους ζημία στο μηχάνημα σας ή στα δεδομένα σας. + +### [1.2 Τι είναι ο IceWM]{#ss1.2} + +Ο **IceWM** είναι ένας Window Manager σχεδιασμένος έτσι ώστε να είναι μικρός, γρήγορος και να έχει οικεία εμφάνιση. Αρχικά σχεδιάστηκε ώστε να μοιάζει με το +Motif το OS/2, τα Windows 95 αν και αφού υποστηρίζει themes η εμφάνιση του μπορεί να αλλάζει. Όπως τα παραπάνω συστήματα ο **IceWM** έχει taskbar και το +αντίστοιχο του Start menu των Windows 95 όπως φαίνεται και στο Screenshot. + +Ο **IceWM** δεν έχει σχεδιαστεί ώστε να είναι πάρα πολύ παραμετροποιήσιμος όπως ο fvwm. Τα αρχεία μέσα απο τα οποία γίνεται η παραμετροποίηση του **IceWM** +είναι αρχεία κειμένου με παρα πολύ απλή σύνταξη το οποία μπορούμε να τα αλλάξουμε εντελώς χειροκίνητα με τον αγαπημένο μας editor ή να χρησιμοποιήσουμε ένα απο +τα γραφικά εργαλεία όπως είναι το iceMC. + +### [1.3 Χαρακτηριστικά του IceWM]{#ss1.3} + +Ο **IceWM** αν και δεν είναι τόσο παραμετροποιήσιμος όσο ο fvwm παραμετροποιείται σε σχετικά μεγάλο βαθμό με μεγάλη ευκολία. Επίσης αν και δεν έχει +χαρακτηριστικά των μεγάλων window managment systems (**KDE, Gnome**) όπως ήχους ανα event, μεγάλο integration μεταξύ των εφαρμογών του κτλ, δεν έχει και τα +σοβαρά τους μειονεκτήματα όπως μεγάλες απαιτήσεις σε μνήμη και χώρο, δυσκολία στο compilation απο source λόγω πολλών προαπαιτούμενων βιβλιοθηκών κα. + +Η υποστήριξη που έχει για themes, multiple workspaces, έλεγχο των πάντων (σχεδόν) απο το ποντίκι αλλά και απο το πληκτρολόγιο με τους κατάλληλους συνδυασμούς +πλήκτρων και η σταθερότητα του τον κάνουν ιδανική λύση για συστήματα με λίγους ή πολλούς πόρους και για όποιους τους ενδιαφέρει περισσότερο η παραγωγικότητα, +απο τον αν το πέρασμα απο την μια στην άλλη εφαρμογή συνοδέυεται και απο τον κατάλληλο ήχο ή αν ο terminal emulator που χρησιμοποιούν είναι διάφανος. Βέβαια εδώ +πρέπει να προσθέσω ότι ο **IceWM** ανήκει στους **GNOME compliant window managers** οπότε αν κάποιος έχει και GNOME μπορεί να έχει ένα συνδυασμό των +χαρακτηριστικών των δύο συστημάτων. + + +### [2. Compilation και αρχικές ρυθμίσεις του IceWM]{#s2} + +### [2.1 Compilation]{#ss2.1} + +Για να κάνουμε compile τον **IceWM** χρειαζόμαστε κάποιες βιβλιοθήκες γραφικών οι οποίες έχουν χρησιμοποιηθεί για την συγγραφή του. Αυτές οι βιβλιοθήκες είναι η +`gtk/glib` και `libXpm ή ImLib`. Ο **IceWM** είναι γραμμένος σε C++ οπότε θα χρειαστούμε τον `g++` και το `make` της `GNU`. Η +διαδικασία του compilation είναι η ίδια με όσα προγράμματα χρησιμοποιούν το `automake` πακέτο της `GNU` δηλαδή τρέχουμε πρώτα το `configure script` το οποίο +προσπαθεί να ανιχνεύσει τι σύστημα έχουμε και να φτιάξει τα Makefiles. Αφού δημιουργηθούν τα Makefiles τρέχουμε make και make install για να δημιουργηθεί και να +εγκατασταθεί ο **IceWM** στο σύστημα μας (το τελευταίο πρέπει να το τρέξουμε σαν **root**). + +### [2.2 Starting IceWM]{#ss2.2} + +Η επίσημη τεκμηρίωση υποστηρίζει ότι για να ξεκινήσουμε τον **IceWM** θα πρέπει να χρησιμοποιήσουμε το αρχείο `.Xclients` και εκεί μέσα να τοποθετήσουμε τις +κατάλληλες ρυθμίσεις ώστε να ξεκινάει ο **IceWM**. Επίσης δίνει και ένα δείγμα του αρχείου αυτού το οποίο παραθέτω παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *# run profile to set $PATH and other env vars correctly + + *$HOME/.bash_profile + + + * # setup background + + *xsetroot -solid '#056' + + *# setup mouse acceleration + + *xset m 7 2 + + *# run initial programs + + *xterm& + + *# start icewm, and run xterm if it crashes (just to be safe) + + *exec icewm || exec xterm -fg red + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έδω το αρχείο αυτό θέτει κάποιες μεταβλητές περιβάλλοντος και ξεκινάει κάποια προγράμματα αφού ξεκινήσει ο **IceWM** ή ξεκινάει ένα xterm εάν κάτι δεν πάει +καλά. Αφού όλα πάνε καλά μπορούμε να ξεκινήσουμε τον **IceWM** και να αρχίσουμε να τον ρυθμίζουμε σύμφωνα με τις προτιμήσεις μας. diff --git a/content/articles/31/04_unixevo.md b/content/articles/31/04_unixevo.md new file mode 100644 index 0000000..1edf977 --- /dev/null +++ b/content/articles/31/04_unixevo.md @@ -0,0 +1,430 @@ ++++ +title = 'Εξέλιξη των συστημάτων Unix' +date = '2001-06-01T00:00:00Z' +description = '' +author = 'Οικονομόπουλος Άγγελος(mailto:lydwigvernon@yahoo.co.uk) γιά το magaz(http://magaz.hellug.gr)' +issue = ['Magaz 31'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μαθαίνοντας την ιστορία, αποφέυγουμε να ξανακάνουμε τα ίδια λάθη. Και πόσα λάθη μπορεί πλέον να βρούμε σε κάτι το οποίο εξελλίσεται συνεχώς από το 1969; +Διαβάζοντας αυτό το άρθρο, ο κάθε ένας πρέπει όταν εργάζεται στο ελεύθερο Unix του να νιώθει την οικονομία και την συνέπεια ενός κατασκευάσματος που εδώ και +τριάντα και πλέον χρόνια δοκιμάζεται, χρησιμοποιείται και κατά περίσταση ξαναγράφεται από πανεπιστήμια, εταιρίες λογισμικού, βιομηχανίες, κράτη, τον αμερικάνικο +στρατό, αλλά κυρίως, από παθιασμένους hackers, που το βελτιώνουν, πέρα από την όποια αμοιβή μπορεί να λαμβάνουν, πρώτα από όλα για τον εαυτό τους. Δεν μπορεί +λοιπόν να γεννά απορία η συνοχή και η στιβαρότητα των ελεύθερων Unix, αφού αυτά ανήκουν στην οικογένεια ενός συστήματος πού όπως χαρακτηριστικά έχει αναφερθεί +έχει σε τέτοιο βαθμό διαποτίσει την κοινότητα των προγραμματιστών, ώστε μπορεί οποιαδήποτε στιγμή να ξαναγραφεί από το μηδέν.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Unix (R)evolution** +-------------------------------------------------- + +- [1.1 Η γέννηση του Unix](#ss1.1) +- [1.2 Το Unix όπως το γνωρίζουμε σήμερα: SVR1](#ss1.2) +- [1.3 Berkeley Software Distribution](#ss1.3) + +**2. Unix Variants** +---------------------------------------------- + +- [2.1 XENIX](#ss2.1) +- [2.2 Unix System V](#ss2.2) +- [2.3 SunOS/Solaris](#ss2.3) +- [2.4 HP-UX](#ss2.4) +- [2.5 AIX](#ss2.5) +- [2.6 NeXTSTEP](#ss2.6) +- [2.7 IRIX](#ss2.7) +- [2.8 A/UX](#ss2.8) +- [2.9 OSF/1](#ss2.9) +- [2.10 Minix](#ss2.10) +- [2.11 BSDi](#ss2.11) +- [2.12 UnixWare](#ss2.12) +- [2.13 tru64 Unix](#ss2.13) +- [2.14 Mac OS X](#ss2.14) + +**3. Open Source** +-------------------------------------------- + +- [3.1 GNU](#ss3.1) +- [3.2 GNU/Linux](#ss3.2) +- [3.3 FreeBSD](#ss3.3) +- [3.4 NetBSD](#ss3.4) +- [3.5 OpenBSD](#ss3.5) + +**4. Standardization** +------------------------------------------------ + +- [4.1 SVID](#ss4.1) +- [4.2 POSIX](#ss4.2) +- [4.3 XPG3/4](#ss4.3) +- [4.4 Single UNIX Specification](#ss4.4) +- [4.5 Single UNIX Specification 2](#ss4.5) + + +### [1. Unix (R)evolution]{#s1} + +Η εποχή αυτή είναι η εποχή των ερευνητικών ομάδων και των πανεπιστημίων, της ατομικής συνεισφοράς και τρέλας, αλλά κυρίως της ελεύθερης διάθεσης του κώδικα, +αυτή που ο Stallman νοσταλγούσε όταν ξεκίνησε την προσπάθειά του να ελευθερώσει το λογισμικό από τις πατέντες των εταιριών. Και όταν ακόμα η AT&T κατέστησε το +Unix αμιγώς εμπορικό προϊόν, το επιστημονικό ενδιαφέρον έπαιζε για αρκετό καιρό ακόμα σημαντικότερο ρόλο στην κατεύθυνση που ακολούθησε η εξέλιξη του Unix, από +τις αποφάσεις του τμήματος marketing των εταιριών. + +### [1.1 Η γέννηση του Unix]{#ss1.1} + +Στα τέλη της δεκαετίας του 1960, το Τεχνολογικό Ινστιτούτο της Μασσαχουσέτης (ΜΙΤ) μαζί με τα διάσημα Bell Labs της AT&T ανέπτυσσαν ένα εξελιγμένο λειτουργικό +σύστημα για το mainframe 645 της General Electric, υπό την ονομασία Multics (Multiplexed Information and Computing System). Για το ίδιο mainframe ο Ken Thompson +(εργαζόμενος στα Bell Labs) είχε γράψει ένα παιχνίδι το οποίο προσομοίωνε το ηλιακό σύστημα με τον τίτλο Space Travel, αλλά η εκτέλεση του παιχνιδιού από τον +645 ήταν απογοητευτική. Έτσι, αφού μαζί με τον Dennis Ritchie εξασφάλισε πρόσβαση σε έναν DEC PDP-7, ξαναέγραψαν το παιχνίδι για να τρέχει στον PDP-7 και +ταυτόχρονα, αξιοποιώντας πλήθος ιδεών από το Multics, δημιούργησαν ένα νέο λειτουργικό με μία πρώιμη γραμμή εντολών και το δικό του filesystem. Το λειτουργικό +αυτό μπορούσε να χρησιμοποιηθεί από δύο χρήστες ταυτόχρονα και ο Brian Kernighan του έδωσε χιουμοριστικά το όνομα Unics (Uniplexed Computing and Information +System), που το 1970 άλλαξε στο πασίγνωστο πλέον Unix. + +Με τον όρο να περιλαμβάνει utilities επεξεργασίας κειμένου, τα Bell Labs χρηματοδότησαν την μεταφορά του Unix στον ταχύτερο PDP-11/20. Το 1972 το Unix, μαζί με +το runoff (που εξελίχθηκε στο σημερινό troff), και τα δύο γραμμένα σε assembly, έτρεχε σε 10 mainframes. Το μεγαλύτερο, ίσως, άλμα στην εξέλιξη του Unix ήταν η +δημιουργία της γλώσσας προγραμματισμού C από τους Kernighan και Ritchie. Ο τελευταίος, μαζί με τον Thompson, ξαναέγραψε τον πυρήνα του Unix το 1973 +χρησιμοποιώντας την C, καθιστώντας το έτσι εύκολο στη συντήρηση και μεταφορά σε άλλες πλατφόρμες hardware. Στις επόμενες εκδόσεις (editions) του συστήματος, τις +οποίες η AT&T διέθετε σε εκπαιδευτικούς οργανισμούς, εταιρίες και κρατικές υπηρεσίες για ένα ονομαστικό κόστος, η μία καινοτομία διαδεχόταν την άλλη, ώστε η +έβδομη έκδοση του Unix περιελάμβανε το Bourne shell και το προτόκολο UUCP. Βασισμένο σε αυτή την έκδοση, το Unix System III ήταν το πρώτο Unix που η AT&T +διέθεσε εμπορικά. + +### []{#ref1} [1.2 Το Unix όπως το γνωρίζουμε σήμερα: SVR1]{#ss1.2} + +Ταυτόχρονα με τη διάθεση του SIII, από τα τμήματα έρευνας της AT&T, γίνονταν διαθέσιμες σε πανεπιστήμια και εργαστήρια ανεπίσημες εκδόσεις που εισήγαγαν +πειραματικά χαρακτηριστικά, ώστε ήταν δύσκολο για τον κάθε χρήστη ή προγραμματιστή να γνωρίζει αν τα προγράμματα που ανέπτυσσε θα ήταν συμβατά με τις επόμενες +εκδόσεις ή αν το user interface θα παρέμενε το ίδιο. Με την έκδοση του System V, πέρα από τις όποιες τεχνολογικές καινοτομίες, η AT&T φρόντισε κυρίως να +μετριάσει το fragmentation, εγγυόμενη πως το SV θα είχε προς τα εμπρός συμβατότητα με τις επόμενες επίσημες εκδόσεις. + +Η σημασία της απόφασης αυτής δεν καθίσταται άμεσα εμφανής - τουλάχιστον όχι μέχρι να σκεφτούμε πως σε οποιαδήποτε παραλλαγή του Unix και αν χρειαστεί να +εργαστούμε, θα βρούμε τουλάχιστον το παλιό-καλό Bourne shell τα ίδια ονόματα για τις βασικές εντολές και τα utilities (ls, grep, sed, more, κ.α.). Μάλιστα, σε +ένα ακραίο παράδειγμα, ένας χρήστης Unix αυτής της εποχής θα μπορούσε να εργαστεί χωρίς σημαντικό πρόβλημα στο κέλυφος και να εκτελέσει scripts που έγραψε προ +δεκαετιών. + +Στην τεχνική πλευρά τώρα, η SVR1 ενσωμάτωνε πολλά από τα στοιχεία του BSD, με σημαντικότερο όλων τον editor vi, ο οποίος έμελλε να καθιερωθεί σαν ο standard +editor των Unix συστημάτων. Η έκδοση System V Release 2 εισήγαγε το file locking. Ακόμα πιό επηρεασμένη από το BSD ήταν η SVR3 που απορρόφησε πολλές από τις +καινοτομίες των 4.xBSD\'s ιδιαίτερα όσες αφορούσαν τις τεχνολογίες δικτύωσης. Η SVR4, η τελευταία μαζί με την 4.2 που εκδόθηκαν από την AT&T, ενσωμάτωνε το +προτόκολο TCP/IP και τις BSD r\* εντολές, όπως και τα NFS, RPC από το SunOS. Η SVR5 εκδόθηκε από την Santa Cruz Operation (SCO). + +### [1.3 Berkeley Software Distribution]{#ss1.3} + +Περνώντας από το τμήμα επιστήμης υπολογιστών του Πανεπιστημίου του Berkeley, o Thompson μετέφερε την έκτη έκδοση του Unix σε έναν PDP-11/70. Έχοντας πλέον άμεση +πρόσβαση στο λειτουργικό σύστημα, οι φοιτητές Bill Joy και Chuck Halley ξεκίνησαν την ανάπτυξη των δικών τους εφαρμογών εξελλίσοντας τον line-editor ed, στον +ex, τον πρώτο editor με visual mode που επέτρεπε στο χρήστη να βλέπει μία οθόνη με το κείμενό του (σημαντική προσθήκη για την εποχή!) και ο οποίος εξελίχθηκε +από τον Joy στον αγαπημένο σε όλους (καλά, ίσως όχι σε όλους :) μας vi. Ακόμα, ανέπτυξαν το C shell, που είναι το default για τα BSD συστήματα και το οποίο +πρόσφερε δυνατότητες αδιανόητες για τους χρήστες του Bourne shell: λίστα των τελευταίων εντολών, command line editing, συνώνυμα (aliases) και ξεχωριστό login +και rc file. Περιλαμβάνοντας στα παραπάνω και έναν pascal compiler, οι Joy και Halley συνέθεσαν μία δική τους διανομή Unix που την διέθεσαν ως Berkeley Software +Distribution. Ακολούθησε το 1978 η 2BSD, ενώ η 3BSD εισήγαγε μία ριζική καινοτομία, την εικονική(ιδεατή) μνήμη που έκανε διαθέσιμη στο λειτουργικό πολλαπλάσια +ποσότητα μνήμης από την φυσική. + +Σταθμός στην εξέλιξη του Unix μπορεί να θεωρηθεί η απόφαση του DARPA (Defence Advanced Research Projects Agency) να αναθέσει στο πανεπιστήμιο του Berkeley την +ανάπτυξη του λειτουργικού του αμυντικού του δικτύου υπολογιστών. Στο πλαίσιο αυτής της συνεργασίας το DARPA χρηματοδότησε την εξέλιξη του 4BSD, η τρίτη έκδοση +του οποίου(4.2) το 1983 ενσωμάτωνε υποστήριξη για το δικτυακό πρωτόκολλο TCP/IP και τις πασίγνωστες remote commands (rsh, rlogin, rcp etc.) και τις DARPA +commands ftp και telnet που, παρά τα προβλήματα ασφάλειας, χρησιμοποιούνται ακόμα και σήμερα. Στο 4.2BSD στηρίχθηκε εν πολλοίς και το SVR4, όπως και το SunOS, +ενώ πάνω στην τελευταία έκδοση από το πανεπιστήμιο του Berkeley (4.4BSD ή 4.4BSDLite λόγω νομικών προβλημάτων) βασίστηκαν και τα open source FreeBSD, NetBSD, +OpenBSD μαζί με το εμπορικό BSD/OS (συνέχεια περισσότερο του 386BSD). + + +### [2. Unix Variants]{#s2} + +Σε μία τέτοια λίστα είναι προφανές ότι δεν θα μπορούσαν να συμπεριληφθούν όλα τα συστήματα που, περισσότερο ή λιγότερο το καθένα, ανήκουν στην οικογένεια του +Unix. Άν όμως ελλείψεις όπως το Plan9, το Ultrix και Unicos σας ενοχλούν, είναι σίγουρο ότι δεν χρειάζεται να διαβάσετε αυτό το άρθρο, δεν θα σας προσφέρει +απολύτως τίποτα. Γιά όποιον θέλει περισσότερες λεπτομέρειες για την εξέλιξη και τις αλληλεπιδράσεις ανάμεσα στις διάφορες βαριάντες, μπορεί να κατεβάσει μία +εξευτελιστικά λεπτομερή timeline (η οποία όμως συνιστάται ανεπιφύλακτα) από το URL: + +### [2.1 XENIX]{#ss2.1} + +Το 1980 η τότε-όχι-και-τόσο-κακή εταιρεία Microsoft, παρουσίασε το Xenix, ένα λειτουργικό βασισμένο στην έβδομη έκδοση του AT&T Unix το οποίο ήταν ο πρώτος Unix +κλώνος που δεν έτρεχε σε mainframe αλλά σε μικροεπεξεργαστές. Με την άμεση ανάμειξη της SCO, το Xenix μεταφέρθηκε στον Motorolla 68000 και στους 8086, 80286 και +80386 της Intel. Προερχόμενο απ\'ευθείας από το Unix της AT&T και με επιρροές από τα διάφορα BSD, το Xenix εισήγαγε και αυτό ορισμένες καινοτομίες (κυρίως +εντολές) τις οποίες όμως ενσωμάτωσε η AT&T στην έκδοση 3.2 του Unix System V, έτσι ώστε το Xenix άρχισε να φθίνει. Το ίδιο συνέβαινε και με την ανάμειξη της +Microsoft με το όλο project ( είχαν βρει το μέλλον στους IBM compatible και στο DOS :), ώστε μετά από λίγα χρόνια να μιλάμε για το SCO Xenix. + +### [2.2 Unix System V]{#ss2.2} + +Γιά το Unix System V μέχρι και την τέταρτη Release, βλέπε [Το Unix όπως το γνωρίζουμε σήμερα: SVR1](04_unixevo-1.html#ref1). Μετά και αυτή την έκδοση, η +ανάπτυξη του SV συνεχίστηκε από την θυγατρική της AT&T, Unix System Laboratories (USL), η οποία παρήγαγε το SVR4.2 στοχεύοντας και στην αγορά των desktop. Ο +κώδικας του SVR4 περιήλθε στην ιδιοκτησία της Novell, όταν η απέκτησε την πλειοψηφία μετοχών στα USL. Εξέδωσε το δικό της SVR4-based Unix σαν UnixWare, μέχρι να +πουλήσει τον κώδικα της R4 και το όνομα UnixWare στην Santa Cruz Operation (SCO). Το brand-name Unix έγινε ιδιοκτησία του X/OPEN και αργότερα του OpenGroup. Η +SCO συνέχισε την ανάπτυξη του Unix System V, ιδιαίτερα στο επίπεδο του πηρύνα, προσθέτοντας χαρακτηριστικά ώστε να το καταστήσει ανταγωνιστικό στην αγορά των +\"μεγάλων\" server, όπως υποστήριξη 64GB RAM, 512 logical disks, 1TB files και άλλα τέτοια \"μπαλωματάκια\". Στον πηρύνα της SVR5 στηρίζεται και το UnixWare της +ίδιας εταιρίας. + +### [2.3 SunOS/Solaris]{#ss2.3} + +Η Sun ιδρύθηκε to 1982 από τον Bill Joy, ο οποίος συμμετείχε ενεργά στην ανάπτυξη της Berkeley Software Distribution. Δεν μπορεί λοιπόν να αποτελεί έκπληξη το +γεγονός ότι η πρώτη έκδοση του λειτουργικού που διέθετε η Sun για το hardware το οποίο πουλούσε βασιζόταν σε μεγάλο βαθμό στο 4.xBSD. Στα πρώτα χρόνια της +ύπαρξής του το SunOS επηρέασε καταλυτικά την κατεύθυνση ανάπτυξης του Unix με πρωτοποριακές ιδέες όπως το Network File System (NFS), το Network Information +Service (NIS ή Yellow Pages-YP), το RPC (Remote Procedure Call) και το ξεχασμένο σήμερα XDR (External Data Representation) για ανταλλαγή δεδομένων, που ήταν +τόσο επιτυχημένες ώστε ενσωματώθηκαν αμέσως στο SVR4 από την AT&T. + +Στα επόμενα χρόνια, το SunOS ήταν εκείνο το οποίο ακολουθούσε την εξέλιξη των υπόλοιπων Unix, για αυτό η Sun μέσω της θυγατρικής της SunSoft έθεσε σαν στόχο την +μετάβαση σε ένα SVR4-based λειτουργικό, στόχο τον οποίο δεν πέτυχε η πρώτη έκδοση του Solaris(1.0), όντας ακόμα βαθιά εξαρτημένη από το σχετικά απαρχαιωμένο +SunOS. Τελικά με την έκδοση 2.1 του Solaris, η Sun έκανε ένα βήμα μπροστά υλοποιώντας μία ενιαία πλατφόρμα λογισμικού για το εξαιρετικό της hardware καθώς η 2.1 +μπορούσε να αξιοποιήσει όλους τους Sparc καθώς και τους x86 επεξεργαστές. Το SunOS συνέχισε την πορεία του παράλληλα με το Solaris (δεν ενδιαφέρει η εμπορική +ονομασία αλλά η ταυτότητα του λειτουργικού και το αναφέρω αυτό λόγω των διπλών ονομασιών που έδινε η Sun στο Solaris) έως το 1994. + +Με την έκδοση 2.5 το (συμβατό με POSIX από την 2.3 και με υποστήριξη του Motif από την 2.4) Solaris περιλαμβάνει και το CDE (Common Desktop Environment). Στην +έκδοση 2.6 ,η οποία έχει την \"σφραγίδα\" UNIX 95, υπάρχει για πρώτη φορά η (αμφιλεγόμενη σήμερα, επαναστατική τότε γλώσσα της Sun) Java. Οι εκδόσεις 7 και 8 +(το δύο \"κόπηκε\" από τους \"bad marketing people\") είδαν βελτιώσεις στα utilities διαχείρισης συστήματος και στις επιδόσεις, ενώ αναμένεται στην επόμενη +έκδοση η υιοθέτηση του GNOME ως default γραφικού περιβάλλοντος (σ.σ. : εγώ πάντως στον UltraSparc που θα πάρω τα Χριστούγεννα για το subnet του πλυσταριού θα +τρέχω Linux :) + +### [2.4 HP-UX]{#ss2.4} + +Η Hewlett-Packard παρουσίασε την δική της εκδοχή του Unix με το λανσάρισμα του HP-UX 1.0 το 1986. Η πρώτη αυτή έκδοση βασιζόταν στο SVR2 και το HP-UX ακολούθησε +την πορεία του SV μέχρι και την R4. Αρχικά το υποστηριζόμενο hardware ήταν μόνο ο HP9000/500 (μέχρι και 7 επεξεργαστές υποστηριζόμενοι) από τις πρώιμες +SIII-based εσωτερικές εκδόσεις της HP, ενώ αργότερα χρησιμοποιήθηκαν οι 680Χ0 της Motorolla. Σημαντικό γεγονός στην εξέλιξη του λειτουργικού ήταν η εμφάνιση του +Visual User Environment, ενός έγχρωμου(μη γελάτε μερικοί, δεν ήταν καθόλου αυτονόητο to 1990), με ψευδοτρισδιάστατη αίσθηση και αισθητικά υπέροχου (οκ, εντελώς +υποκειμενικό αυτό) GUI δημιουργημένου πάνω στο Motif της HP. Βεβαία λίγα στοιχεία θα φανούν διαφορετικά σε όσους είδαν τα Windows 95 (μείον τις +επαναλαμβανόμενες ανά πεντάλεπτο, με διαφορετική δικαιολογία κάθε φορά BSODs), αφού ακούγεται ότι η Microsoft το αντέγραψε μέχρι αηδίας. Το 1992, η HP +ανακαλύπτει ότι το νόημα της ύπαρξης είναι το standardization, αφού το HP-UX 9.0 είναι POSIX.!, POSIX.2, XPG4, SVID1 και SVID2 compliant ενώ είναι και +βελτιωμένο σε όλους τους τομείς σε σχέση με τις προηγούμενες εκδόσεις. Τη λίστα μεγαλώνει το UNIX 95 certified HP-UX 10.0 που ενσωματώνει και τις real-time +extensions του POSIX standard, είναι δηλαδή συμβατό με POSIX.1b. Τελευταία έκδοση η 64μπιτη 11.0 (1997) με δεν συμμαζεύεται χαρακτηριστικά για τους hi-end +servers/workstations. + +### [2.5 AIX]{#ss2.5} + +Δεν ήταν παρά το 1986, όταν η Big Blue ξεκίνησε να διαθέτει το δικό της Unix κλώνο υπό την ονομασία AIX. Το AIX ήταν βασισμένο στην έκδοση 3.2 του Unix System V +και ενσωμάτωνε στοιχεία του 4.3BSD, ενώ προοριζόταν να αποτελέσει το λειτουργικό σύστημα των workstations που (μεταξύ πολλών άλλων) παρήγαγε τότε η IBM. +Μένοντας συνεχώς κάτω από την άμεση εποπτεία της \"μαμάς\", το AIX ακολούθησε από κοντά τις εξελίξεις στην οικογένεια των Unix αφού αυτή συμμετείχε στην +ανάπτυξη του CDE και στο X/Open (βλέπε Standardization). Έτσι, η εξέλιξή του μπορεί να θεωρηθεί ότι ακολουθεί τα πασίγνωστα standards POSIX, XPG\* ενώ ήταν από +τα πρώτα λειτουργικά με τη \"σφραγίδα\" UNIX 98. + +### [2.6 NeXTSTEP]{#ss2.6} + +Το NeXTSTEP ήταν το λειτουργικό που ανέπτυξε η NeXT Computers γιά το hardware που κατασκεύαζε τη δεκαετία του 80. Χρησιμοποιούσε τον Mach και βασιζόταν πάνω στο +4.3BSD. Πάνω στο λειτουργικό έτρεχε ένα πρωτοποριακό, τότε, γραφικό περιβάλλον που έχει βρει το δρόμο του σε πολλούς σημερινούς (νεότερους τελοσπάντων) window +managers, στον window maker, στα steps.Μία άλλη καινοτομία ήταν το σύστημα απεικόνισης Display PostScript γιά πραγματικό WYSIWYG. Ακόμα, το NeXTSTEP διατηρούσε +ικανή συμβατότητα με τα BSD και ήταν (όχι σε όλες τις εκδόσεις του) POSIX-compliant. Μετά το 1993, η NeXT σταμάτησε να παράγει hardware και επικεντρώθηκε στην +ανάπτυξη του λειτουργικού, ώστε το 1997 (ζυγίζοντας και πολλούς άλλους παράγοντες είναι η αλήθεια) η Apple το επέλεξε σαν βάση γιά την επόμενη γενιά του MacOS. +Ανέφερα ότι πίσω από όλα αυτά ήταν ο Jobs; + +### [2.7 IRIX]{#ss2.7} + +Για την πορεία του IRIX ήταν δυνατό να βρεθούν λίγα στοιχεία πέρα από το ότι αντικατέστησε το MIPS OS στην πλατφόρμα hardware που παρήγαγε η Silicon Graphics. +Στο μεγαλύτερο, πάντως, χρονικό διάστημα από τη στιγμή της πρώτης υλοποίησής του απευθυνόταν σε αγοραστές με extreme απαιτήσεις ενώ σήμερα είναι κατάλληλο για +χρήση σε υπερυπολογιστές, servers ή workstations για όποιον θα ήθελε 80GB/s I/O bandwidth! Ανεπίβεβαίωτες πληροφορίες το θέλουν να είναι από την εποχή του +Nintendo 64 η προτιμητέα πλατφόρμα για την ανάπτυξη παιχνιδιών για τις κονσόλες (pre-rendered σκηνές). Βεβαία αφού απευθύνεται και σε mid/hi-end servers δεν θα +μπορούσε να λείπει η συμβατότητα με πλήθος standards, όπως UNIX 95, SVID3, XPG3, POSIX. + +### [2.8 A/UX]{#ss2.8} + +Το A/UX (=Apple\'s UNIX) ξεκίνησε την πορεία του σαν ένα SysV-derived λειτουργικό από την Apple. Στην πορεία, το A/UX ενσωμάτωσε πολλές από τις καινοτομίες που +εισήχθησαν στην οικογένεια του Unix, τόσο από την SV όσο και από την BSD πλευρά. Πιό συγκεκριμένα, βασιζόταν στο SVR2.2, αλλά επηρεάστηκε από τα 4.2/4.3BSD και +φυσικά από την SVR4, ώστε να πετύχει SVID/POSIX.1 συμβατότητα, ενώ έτρεχε στους 680x0 της Motorola. Οι 3.x.x εκδόσεις είχαν ικανή συμβατότητα με το MacOS, αλλά +τελικά η Apple εγκατέλειψε το A/UX στα μέσα της δεκαετίας του 90. + +### [2.9 OSF/1]{#ss2.9} + +Η κυριαρχία της AT&T στον χώρο των λειτουργικών συστημάτων, χάρη στην επιτυχία του System V, έφερε σαν απάντηση την σύνθεση ενός consortium (Open Software +Foundation) από τις IBM, HP, DEC κ.α. με στόχο την δημιουργία ενός συστήματος το οποίο θα μπορούσε να ανταγωνιστεί το SVR4. Μοναδικός καρπός αυτής της, +καταδικασμένης όπως αποδείχθηκε αργότερα, προσπάθειας ήταν το OSF/1 (κάτω από τον Mach) το οποίο γνώρισε σχεδόν πλήρη εμπορική αποτυχία. Από την απόρριψη +διέφυγε μόνο το γραφικό περιβάλλον που περιλαμβάνονταν στο OSF/1, το πασίγνωστο ακόμα και σήμερα Motif, που πέρασε στις περισσότερες από τις μεταγενέστερες του +1990 βαριάντες. Μόνη εταιρία που βάσισε την δική της έκδοση Unix στο δημιούργημα του Open Software Foundation (το οποίο εγκαταλείφθηκε από τους δημιουργούς του +και στράφηκε στην τυποποίηση) ήταν η DEC. To DEC OSF/1 βεβαία μικρή σχέση είχε με το σύστημα του 1990, αφού η DEC το βελτίωσε δραματικά σε κάθε σχεδόν τομέα +ενσωματώνοντας παράλληλα το πλήθος των χαρακτηριστικών που έλειπαν από το OSF/1 σε σχέση με το SV και την BSD. Με άλλα λόγια, η στιγμή γέννησης του OSF/1, ήταν +και η στιγμή του θανάτου του, αφού καθυστερημένο από τεχνικής άποψης και χωρίς υποστήριξη από τα μέλη του OSF, ήταν καταδικασμένο να αποτύχει. + +### [2.10 Minix]{#ss2.10} + +ΟΚ, όλοι έχουν ακούσει για \"το λειτουργικό από το οποίο εμπνεύστηκε ο Linus\". Αλλά αυτό είναι μάλλον το λιγότερο που προσέφερε το Minix στον τομέα της +πληροφορικής, ή μάλλον είναι ακριβώς αυτό : η έμπνευση. Το Minix είναι τέκνο του γνωστού καθηγητή του πανεπιστημίου Vrije στο Amsterdam, Andrew S. Tannenbaum, ο +οποίος το ανέπτυξε γιά μία και μόνο χρήση, τη διδασκαλία των εσωτερικών διεργασιών ενός λειτουργικού συστήματος. Αυτός ο σκοπός δεν θα μπορούσε να επιτευχθεί με +κάποιο άλλο Unix, λόγω της περιπλοκότητας και των πνευματικών δικαιωμάτων που τα καλύπτουν. Έτσι, ο Tannenbaum προχώρησε στην συγγραφή ενός Unix κλώνου, δικού +του copyright, το οποίο διέθεσε μαζί με τον κώδικα σε όποιον θα ήθελε να το χρησιμοποιήσει γιά εκπαιδευτικούς σκοπούς. Μόλις ένα μήνα μετά την έκδοση του +λειτουργικού, το comp.os.minix είχε συγκεντρώσει 10000 συμμετέχοντες, αρκετοί από τους οποίους προσέφεραν τη δουλειά τους γιά την περεταίρω εξέλιξη του Minix. +Πραγματοποιήθηκαν ports σε άλλες αρχιτεκτονικές πλην του IBM PC, PC/AT (Atari ST, Commodore Amiga, Macintosh-εδώ υπήρχε συνύπαρξη με το λειτουργικό της Apple). +Ωστόσο, ο Tannenbaum ποτέ δεν έχασε την βασική ιδέα που τον οδήγησε στη δημιουργία του συστήματος και πεισματικά αρνιόταν την πλειοψηφία των προσφορών γιά την +βελτίωση/επέκταση του Minix, αφού όπως λέει και ο ίδιος \"ήθελα να κρατήσω το λειτουργικό αρκετά μικρό ώστε οι φοιτητές μου να μπορούν να το κατανοήσουν σε ένα +εξάμηνο\"(ελεύθερη μετάφραση). Βεβαία, ταυτόχρονα εξελίσσονται ανεξάρτητες προσπάθειες πάνω στο Minix (που πλέον διατίθεται και κάτω από την BSD άδεια), γιά +συμβατότητα με το POSIX.1 πρότυπο, με τη C89 και άλλα παρόμοια. Κώδικας του Minix χρησιμοποιήθηκε (μέχρι να αντικατασταθεί από νέο) στα (πολύ, πάρα πολύ) πρώτα +στάδια της ανάπτυξης του πηρύνα από τον Linus. + +### [2.11 BSDi]{#ss2.11} + +Το BSDi ή BSD/OS είναι ένα POSIX.1 (και εν μέρει POSIX.2) συμβατό Unix το οποίο βασίζεται πάνω στον 386BSD πηρύνα, δηλαδή σε ιδιόκτητο κώδικα και όχι σε κώδικα +που διατίθεται κάτω από την BSD licence. Η τελευταία είναι η άδεια που χρησιμοποιείται για όσο από τον κώδικα του πηρύνα από το πανεπιστήμιο του Berkeley έχει +μείνει στα open source FreeBSD, OpenBSD και NetBSD και η άδεια κάτω από την οποία διατίθεται ο κώδικας των τελευταίων. Δηλαδή το BSD/OS είναι ένα εμπορικό +λειτουργικό που ανήκει στην εταιρεία Wind River, η οποία δίνει ιδιαίτερη έμφαση στον προσανατολισμό του δημιουργήματός της στις τεχνολογίες δικτύωσης και το +οποίο έχει μία \"ιδιαίτερη\" σχέση με το FreeBSD(= ενσωματώνουμε και εκμεταλλευόμαστε τον κώδικά σας, η τουλάχιστον αυτό ακούγεται). Το σύστημα αυτό δεν +φαίνεται να διαδραμάτισε κάποιο ρόλο στην κατεύθυνση της ανάπτυξης της οικογένειας Unix. Όπως ανέφερε παλαιότερα και ο Linus (για το 386BSD): μα είναι όνομα +αυτό; φοβίζει τον κόσμο\... + +### [2.12 UnixWare]{#ss2.12} + +Το UnixWare αποτελεί το λειτουργικό της Santa Cruz Operation το οποίο απευθύνεται στους hi-end servers. Το UnixWare ξεκίνησε από τη Novell σαν ένα βασισμένο στο +SVR4 σύστημα. Η ιδιοκτησία του πέρασε μετά το 1995 στην SCO, γιά να αντικαταστήσει το SVR3.2-based SCO UNIX. Παράλληλα η SCO εξέλισε την Unix System V Release 5 +(είχε αγοράσει την SVR4 \"πακέτο\" με το όνομα UnixWare) σε ένα 64-bit εξωτικών προδιαγραφών σύστημα, κατάλληλο για εφαρμογές υψηλών απαιτήσεων (τώρα τι +κατάφερε είναι άλλο θέμα). Ο πηρύνας της SVR5 χρησιμοποιήθηκε στο UnixWare 7 (1997) που περιελάμβανε Motif, CDE και ένα περιβάλλον ανάπτυξης 64 bit εφαρμογών. +Το σύστημα της SCO είναι συμβατό με POSIX.1/2, XPG4.2, έχει το mark UNIX 95 και γιά όποιους διαβάζουν το πορτοκαλί \"βιβλιαράκι\" βρίσκεται στο C2 επίπεδο +ασφάλειας, όπως δηλαδή και τα ανταγωνιστικά του Unix. Υποστηρίζει την IA32 και η SCO συνεργάζεται με την IBM στο project Merced-64. + +### [2.13 tru64 Unix]{#ss2.13} + +Το κυρίαρχο στις 64 bit πλατφόρμες tru64 UNIX της Compaq, έχει πίσω του μακριά ιστορία. Πρόκειται γιά την εξέλιξη του DEC OSF/1 (μετέπειτα Digital UNIX, το +οποίο η Compaq αγόρασε από την DEC γιά να το ξαναβαφτίσει στο σημερινό του όνομα). Από το DEC OSF/1, το tru64 κουβαλάει έναν 64μπιτο πηρύνα, βασισμένο πάνω στον +CMU Mach 2.5 και με επιδράσεις από τα 4.xBSD και το SV. Η Compaq το εξέλιξε ώστε να πετύχει μερική συμβατότητα με το POSIX.1b και να πάρει το χαρακτηρισμό UNIX +95. Φυσικά, τρέχει στους Alpha της DEC. + +### [2.14 Mac OS X]{#ss2.14} + +Η στροφή της Apple προς το Unix ήταν περισσότερο αποτέλεσμα του αδιεξόδου στην ανάπτυξη του MacOS και της επακόλουθης επιστροφής του Jobs στην εταιρία. Η +επανένταξη του Jobs στο δυναμικό της εταιρίας έγινε με την εξαγορά της NeXT και σχεδόν άμεσα, ανακοινώθηκε από την Apple η πρόθεσή της να στηρίξει την επόμενη +γενιά των λειτουργικών της σε πηρύνα Unix, αξιοποιώντας την δουλειά της NeXT. Έτσι, χρησιμοποιήθηκε το περιβάλλον Darwin γύρω από πηρύνα Mach, με τη χρήση των +οποίων η Apple λανσάρει το γραφικό περιβάλλον Aqua. Στόχος αυτής της αλλαγής πορείας είναι η αξιοποίηση της σταθερότητας του BSD, και η φιλικότητα προς τον +τελικό χρήστη. Συγχρόνως, η εταιρία διατυμπάνισε την επιλογή της για συνεργασία με την κοινότητα των υποστηρικτών του λογισμικού ανοικτού κώδικα (με +αμφιλεγόμενη, πλέον, ειλικρίνεια προθέσεων) για την περαιτέρω βελτίωση του Darwin. Ακόμα, το Mac OS X στοχεύει και στην αγορά των servers αφού ο κώδικας +δικτύωσης βασίζεται σχεδόν εξ\' ολοκλήρου στο 4.4BSD και εκδόσεις του λειτουργικού περιλαμβάνουν τον Apache. + + +### [3. Open Source]{#s3} + +Η ενηλικίωση του GNU project, αλλά και η αποδέσμευση των εκδόσεων του BSD από τα πνευματικά δικαιώματα της USL, μετά την αγορά της τελευταίας από τη Novell, +συνετέλεσαν ώστε να δημιουργηθεί μία ικανή βάση στην οποία θα μπορούσε να στηριχθεί κάθε προγραμματιστής ο οποίος θα επιθυμούσε να συνεισφέρει στην κοινότητα +ανοικτού κώδικα. Έτσι, μετά τις αρχές της προηγούμενης δεκαετίας, παρατηρείται εκθετική αύξηση στην συγγραφή open source προγραμμάτων και η κοινότητα εισάγει +ένα νέο μοντέλο ανάπτυξης, που δίνει διέξοδο έκφρασης σε κάθε νέα ιδέα και αναγνωρίζει το δικαίωμα του κάθε ατόμου να μετέχει στην τεχνική πρόοδο. + +### [3.1 GNU]{#ss3.1} + +Το GNU project (GNU\'s Not Unix)ξεκίνησε το 1983, όταν ο Richard M. Stallman συνέλαβε την ιδέα της συγγραφής ενός ελεύθερου λειτουργικού συστήματος δανειζόμενου +πολλά στοιχεία από την προϋπάρχουσα οικογένεια των Unix συστημάτων, αλλά χωρίς να χρησιμοποιεί πατενταρισμένο κώδικα. Η ιδέα πίσω από το όλο εγχείρημα είναι ότι +η τεχνική γνώση είναι κτήμα της κοινωνίας και ότι ο περιορισμός της διάδοσής της είναι ενάντια στον κοινό συμφέρον. Όσοι προγραμματιστές ανταποκρίθηκαν στην +πρόσκληση του Stallman, δημιούργησαν εκ του μηδενός πλήθος προγραμμάτων ανάλογα με αυτά των Unix, ώστε το 1985 είχαν διαθέσιμο τον editor emacs, έναν debugger +σε επίπεδο πηγαίου κώδικα, ένα ανάλογο του yacc και περίπου 35 utilities. Ήδη ο gcc είχε κατορθώσει να μεταγλωτίσει τον εαυτό του και το Bash μπορούσε σχεδόν να +χρησιμοποιηθεί. Όμως ο χρόνος που απαιτήθηκε για να φτάσει το GNU να περιλαμβάνει αρκετές χιλιάδες executables, τεκμηρίωση και libraries, ήταν πολλαπλάσιος (το +1987 πραγματοποιήθηκε η πρώτη beta-release του gcc, το 1988 έγινε διαθέσιμη η Ghost Script) και τελικά το Free Software Foundation ήταν, στις αρχές της +δεκαετίας του 90, σε θέση να διαθέσει μία λίγο-πολύ ολοκληρωμένη και χρησιμοποιήσιμη userland, καθώς ο πηρύνας Hurd (βασισμένος στον μικροπηρύνα CMU Mach) +απείχε πολύ από την ολοκλήρωση. Τελικά, το υλικό του GNU μπόρεσε να αποτελέσει ένα χρησιμοποιήσιμο λειτουργικό με την προσθήκη του πηρύνα Linux, ο οποίος +διανέμεται κάτω από την ίδια άδεια με τα υπόλοιπα μέρη του GNU. + +Λόγω της τεράστιας αποδοχής του GNU/Linux, η ανάπτυξη του Hurd από το FSF πέρασε σε δεύτερη μοίρα και μόνο το 2001, μπόρεσε ο πηρύνας να αποτελέσει την \"ψυχή\" +του GNU. Στο χρονικό διάστημα που μεσολάβησε, το Free Software Directory συνέχισε να μεγαλώνει, τροφοδοτούμενο από τους (δυνάμει) προγραμματιστές που το Linux +εισήγαγε στην φιλοσοφία του ελεύθερου λογισμικού. Το 1997 ξεκίνησε η ανάπτυξη του GNOME (GNU Network Object Model Environment), ενός γραφικού περιβάλλοντος +εργασίας, βασισμένο στην βιβλιοθήκη GTK+, καθώς και πολλών συνοδευτικών εφαρμογών για αυτό. Η πρώτη διανομή του GNU ήταν (είναι) η Debian GNU/Hurd το 2001. + +### [3.2 GNU/Linux]{#ss3.2} + +Χιλιοειπωμένη ιστορία! Ο Linus Torvalds (φοιτητής τότε στο πανεπιστήμιο του Ελσίνκι), γιά να εξασκηθεί στην C, ξεκίνησε το 1991 τη συγγραφή ενός πηρ\... +Χμμ\...Ας περιοριστούμε στο Linux.Ο πηρύνας του Linux στην πρώτη του έκδοση (0.01) είχε δυνατότητα γιά task-switching, παρείχε pseudo-tty\'s, οδηγό γιά ΑΤ +δίσκους, BSD sockets, BSD long filenames και system calls που έτειναν προς τις απαιτήσεις του POSIX στα 71KB του tarball. Δύο μήνες μετά, ο 0.11 προσέφερε +demand loading, data sharing ανάμεσα στις διεργασίες, υποστήριξη οδηγού δισκέτας και ήχο (beep!) στην κονσόλα, ενώ έτρεχε αρκετά πλέον executables από το GNU +Project. Εκτός του ότι ήταν ο πρώτος πηρύνας που μεταγλωττίστηκε κάτω από τον εαυτό του και πέρα από την πολύ σημαντική VM, το Linux 0.12 ήταν η πρώτη έκδοση +του πηρύνα κάτω από την GPL. + +Μετά και την έκδοση 1.0, το Linux έχει υποστήριξη SCSI και γύρω από τον Linus έχει αρχίσει να μαζεύεται η πολυπληθής παρέα που λίγοι μπορούν να ονομάσουν (Cox, +κ.τ.λ.). Ο Cox είναι ο κύριος υπέυθυνος για τον firewalling κώδικα του πηρύνα ο οποίος βασίζεται ουσιαστικά στα BSD και διατηρήθηκε στους 1.x πηρύνες, στους +οποίους οι προγραμματιστές του πηρύνα σταδιακά πρόσθεσαν/βελτίωσαν την υποστήριξη για συνδέσεις αρχικά SLIP και στη συνέχεια PPP, πάνω στις οποίες \"κάθονταν\" +τα TCP/IP και IPX. Η έκδοση 2.0.x είδε την δεύτερη γενιά του firewall, ενώ με τους 2.2.x πηρύνες, το Linux απαγκιστρώνεται από τα BSD και αποκτά μία \"καθαρή\" +υλοποίηση packet filtering, οδεύοντας προς το σημερινό netfilter. Συγχρόνως γίνονται ports και σε άλλες, πλην της x86, αρχιτεκτονικές , ώστε το Linux 2.0 να +τρέχει σε Motorola 68K, Sparc, MIPS, Alpha και PPC, giά να φτάσουμε στον 2.4 στον οποίο το ls arch δίνει: alpha arm i386 ia64m68k mips mips64 parisc ppc s390 sh +sparc sparc64. Σε όλη την εξέλιξη του πηρύνα αυτό που δεν μένει στάσιμο είναι το πλήθος των υποστηριζόμενων συσκευών το οποίο αυξάνεται αδιάκοπα, σε βαθμό που +εδώ και λίγα χρόνια το GNU/Linux να θεωρείται εναλλακτική επιλογή και σαν desktop σύστημα. + +Στο GNU/Linux ενσωματώνεται ο Samba server γιά την διευκόλυνση των μικτών δικτύων Unix/NT, ενώ ο πηρύνας αναγνωρίζει πλήθος άλλων filesystems και προτοκόλων +επικοινωνίας, ώστε να καθιστούν το Linux σαν την πρώτη επιλογή όταν το ζητούμενο είναι η interoperability. Μία ακόμα καινοτομία που εισήγαγε το Linux είναι το +μοντέλο ανάπτυξης προγραμμάτων ανοικτού κώδικα στο οποίο δεν υπάρχει κεντρική διαχείριση, μεσολαβεί μικρό χρονικό διάστημα μεταξύ των σταθερών εκδόσεων και ο +κώδικας είναι διαθέσιμος στον καθένα σε όλα τα στάδια ανάπτυξής του (βλέπε [The Cathedral and the +Bazaar](http://howto.hellug.gr/howto/pub/html/cathedral-bazaar.html)). + +### [3.3 FreeBSD]{#ss3.3} + +Η αρχική ομάδα του FreeBSD στηρίχθηκε πάνω στο 386BSD και έθεσε ως βασικό στόχο στην ανάπτυξη του λειτουργικού την υποστήριξη της PC πλατφόρμας καθώς και την +παροχή περισσότερων ευκολιών στον τελικό χρήστη. Αφού αξιοποίησε τα patches για το 386BSD που ο δημιουργός του αδυνατούσε να εφαρμόσει, αντλώντας στοιχεία +απευθείας από την 4.3BSD Networking Release 2 (Net/2) και \"ντύνοντάς\" το με υλικό από το GNU Project, η ομάδα διέθεσε το FreeBSD 1.0 το Δεκέμβρη του 1993. +Μετά την μετάβαση στο 4.4BSD-Lite με την έκδοση 2.0, η δημοτικότητα του FreeBSD, αυξάνεται αλματωδώς και στο λειτουργικό ενσωματώνονται αρκετές καινοτομίες. Το +1994 εισάγεται η έννοια του ports collection, την οποία υιοθετούν αργότερα και τα άλλα open source BSD\'s. Η ομάδα του FreeBSD επιτυγχάνει ταχύτατες υλοποιήσεις +των γνωστότερων δικτυακών προτοκόλων, και η userland μεγαλώνει διαρκώς σε όγκο (υπάρχουν περίπου 4000 ports), ενώ καθίσταται δυνατή η χρήση shared libraries. Το +λειτουργικό διατίθεται πλέον και γιά την πλατφόρμα των Alpha της DEC και προετοιμάζεται η μεταφορά του στο hardware της Sun. + +### [3.4 NetBSD]{#ss3.4} + +Η ανάπτυξη του NetBSD ξεκίνησε σαν μία προσπάθεια γιά την συνέχιση και ανανέωση του 386BSD, το οποίο, παρά τη μεγάλη του απήχηση, δεν μπορούσε να ακολουθήσει +τις εξελίξεις λόγω της αδυναμίας του δημιουργού και συντονιστή του, Bill Jolitz, να εργαστεί εντατικά σε αυτό. Έτσι μία ομάδα χρηστών του 386BSD συνεργάστηκαν +γιά να συνθέσουν τη δική τους διανομή, προσθέτοντας τη δική τους δουλειά και εφαρμόζοντας τον τεράστιο όγκο των patches που είχαν συνεισφέρει χρήστες του +συστήματος και τα οποία έμεναν αναξιοποίητα στα χέρια του Jolitz. Το NetBSD group απορρόφησε μεγάλο μέρος της δουλειάς του Computer Systems Research Group +(CSRG) του UCB καθώς και κώδικα από το GNU project. Στην έκδοση 1.0 έγινε η αναγκαστική, γιά νομικούς λόγους, αλλαγή βάσης στο 4.4BSD-Lite και τα BSD μπόρεσαν +να εκμεταλλευτούν τον διαχωρισμό του κώδικα σε machine-independant και μη που είχε επιτύχει το CSRG, γιά την εύκολη μετάβαση σε νέες πλατφόρμες (porting). +Ειδικά το NetBSD group έθεσε σαν μία από τις πρώτες προτεραιότητες τη συμβατότητα με όσο το δυνατό μεγαλύτερο αριθμό επεξεργαστών ή/και ηλεκτρονικών συσκευών, +απόφαση που καθιστούσε σαν επιτακτική, πλέον, ανάγκη ο κώδικας του συστήματος να είναι καθαρογραμμένος και σωστά οργανωμένος. Το NetBSD ήταν το πρώτο +open-source λειτουργικό που έτρεξε στον Alpha και μέσα στο 2001, οι επίσημα υποστηριζόμενες πλατφόρμες πλησιάζουν τις 40 (βεβαία αυτό το νούμερο θα έχει ήδη +μεγαλώσει :). Είναι μερικώς συμβατό με το POSIX.1 και λιγότερο, με το POSIX.2, ενώ από το δέντρο του αντλούν στοιχεία πολλές ports των άλλων BSD συστημάτων. + +### [3.5 OpenBSD]{#ss3.5} + +Το OpenBSD γεννήθηκε από ένα fork στην ανάπτυξη του NetBSD, όταν μία ομάδα προγραμματιστών συνέχισε την εργασία της πάνω στον κώδικα του NetBSD δίνοντας +ιδιαίτερη προσοχή στην ασφάλεια του συστήματος. Από το 1996 μέχρι και σήμερα μία ομάδα από 12 άτομα \"χτένισε\" τον κώδικα στον οποίο βασίζεται το OpenBSD +αναζητώντας bugs, σχεδιαστικά λάθη, παραλήψεις τα οποία μπορούσαν να χρησιμοποιηθούν γιά να αποδυναμωθεί η ασφάλεια του μηχανήματος. Θεμελιώδη σημασία γιά το +OpenBSD είχε η απόφαση των δημιουργών του να το αναπτύξουν στον Καναδά και να δέχονται (στον τομέα που αναφέρεται παρακάτω) συνεισφορές μόνο εκτός Ηνωμένων +Πολιτειών, παρακάμπτοντας με τον τρόπο αυτό τους νόμους των ΗΠΑ περί εξαγωγής μεθόδων κρυπτογράφησης. Έτσι με το λειτουργικό μπορούν να διανέμονται οι DES, +triple DES, Blowfish και Cast transforms που βρίσκουν εφαρμογή στο IPSEC και στον Kerberos, δίνοντας στο σύστημα πρωτοποριακές (τότε), σε σχέση με τα άλλα open +source λειτουργικά, δυνατότητες στον τομέα της ασφάλειας των επικοινωνιών και της κρυπτογράφησης ευαίσθητων δεδομένων. Εξίσου σημαντική, γιά όλα τα ανοικτού +κώδικα συστήματα, ήταν (είναι) και η ανάπτυξη του OpenSSH, μιας ανοικτής υλοποίησης του προτοκόλου SSH, συμβατή με όλες τις εκδόσεις του τελευταίου. Επιπλέον, η +κοινή βάση με το NetBSD διευκολύνει τη μεταφορά του OpenBSD σε νέες αρχιτεκτονικές, με 11 ports να έχουν ολοκληρωθεί και αρκετές να βρίσκονται σε εξέλιξη. + + +### [4. Standardization]{#s4} + +Ήδη από τις αρχές της δεκαετίας του 80, τα νέα χαρακτηριστικά που εισήγαγαν οι κυριότερες βαριάντες Unix, διεύρυναν τις ασυμβατότητες μεταξύ τους. Το φαινόμενο +αυτό μετριαζόταν, αφού όπως παραδοσιακά συνέβαινε στην οικογένεια του Unix, κάθε καινοτομία υιοθετούνταν άμεσα από όλους τους κατασκευαστές, αλλά και πάλι +κανένας προγραμματιστής δεν μπορούσε να είναι βέβαιος ότι η εφαρμογή που ανέπτυσσε γιά ένα σύστημα θα μπορούσε να χρησιμοποιηθεί και σε κάποιο άλλο. Για τη +διευκόλυνση των χρηστών/πελατών, οι εταιρίες που συμμετείχαν στην ανάπτυξη Unix συστημάτων, συνεργάστηκαν γιά την καθιέρωση ορισμένων κοινά αποδεκτών standards, +με στόχο την ευρύτερη συμβατότητα. Τούτη η προσπάθεια αποτέλεσε τον κλασικό τρόπο αντιμετώπισης του προβλήματος του fragmentation γιά περισσότερο από μία +δεκαετία. Σήμερα, τα open source Unix συστήματα είναι μάλλον αυτά που ακολουθούν το σωστότερο δρόμο, γιατί σε αυτά το συμφέρον των χρηστών/δημιουργών είναι +εκείνο που καθορίζει την κατεύθυνση της ανάπτυξης. + +### [4.1 SVID]{#ss4.1} + +Η System V Interface Definition αποτέλεσε μέρος της προσπάθειας της AT&T να καταστήσει το SV de facto standard στον κόσμο των Unix. Η SVID καθορίζει τεχνικά +χαρακτηριστικά του Unix System V τα οποία παρέχονται με την εγγύηση ότι θα διατηρηθούν στις επόμενες εκδόσεις και κάθε SVID-compliant σύστημα δεσμεύεται από την +υποχρέωση να διατηρήσει αυτή την συμβατότητα. Ακόμα, περιγράφει λεπτομερώς τα interfaces που παρέχονται για τις εφαρμογές, ώστε να εξασφαλίζει στον +προγραμματιστή ότι αν γράψει μία εφαρμογή στο πλαίσιο της SVID, αυτή θα μπορεί να εκτελεστεί σε όλα τα συμβατά συστήματα. Φυσικά, οι εκδόσεις του System V είναι +SVID-compliant και η SVID συνέχισε να εξελίσσεται με κάθε νέα υλοποίηση του Unix από την AT&T. Οι προδιαγραφές που όρισε η System V Interface Definition +αποτέλεσαν τη βάση γιά τα standard που υιοθέτησε το X/OPEN Consortium και πέρασαν σχεδόν αυτούσιες στην Single UNIX Specification. + +### [4.2 POSIX]{#ss4.2} + +Η ανησυχία γιά την ασυμβατότητα ανάμεσα στις βαριάντες/εκδόσεις Unix, οδήγησαν το 1981 την ομάδα χρηστών /usr/group στην αναζήτηση ενός standard το οποίο θα +εξασφάλιζε portability γιά τις διάφορες εφαρμογές. Το πρώτο αποτέλεσμα της προσπάθειάς τους δημοσιοποιήθηκε το 1984 και δεδομένης της ευρύτητας του +εγχειρήματος, η προσπάθεια συνεχίστηκε μετά το 1985 μέσα από την IEEE (Institute for Electrical and Electronics Engineers) στο πλαίσιο του Project 1003 (P1003). +Ο σκοπός αυτού του project ήταν ο καθορισμός ενός συνόλου από standards που θα καθόριζαν τον τρόπο αλληλεπίδρασης του λειτουργικού συστήματος με τις εφαρμογές +και το οποίο ονομάστηκε POSIX (στην εισαγωγή του POSIX.1 αναφέρεται: \"The name POSIX was suggested by Richard Stallman. It is expected to be pronounced +pahz-icks as in positive, not poh-six, or other variations. The pronounciation has been published in an attempt to promulgate a standardized way of referring to +a standard operating system interface\". + +Από τα POSIX standards, μεγαλύτερη προσοχή δίνεται συνήθως στο P1003.1 (POSIX.1), το απόλυτο minimum γιά να μπορεί ένα λειτουργικό να ισχυριστεί ότι ανήκει στην +οικογένεια των Unix συστημάτων. Το POSIX.1 καθορίζει το system interface (system calls, signals, files, pipes, I/O, κ.τ.λ.). Στο POSIX.1b περιλαμβάνεται το +real-time interface, δηλαδή τα real-time signals/priorities, file synchronization, asynchronous I/O, semaphores κ.α. Το POSIX.1c ασχολείται με τα threads, το e +με την ασφάλεια, το d περιλαμβάνει τις λεγόμενες real-time extensions, γιά να μη σας πω ότι το real-time υποσύνολο ονομαζόταν POSIX.4 και ότι το POSIX.3.5 +καλύπτει την Ada. Είναι πλέον φανερό το εύρος του POSIX πρότυπου. Κάτω από αυτό το πρίσμα δεν μπορεί να θεωρηθεί έκπληξη το γεγονός ότι τα νεότερα standards +χτίζουν πάνω σε κάποια από τα είκοσι και πλέον υποσύνολα του POSIX προτύπου. + +### [4.3 XPG3/4]{#ss4.3} + +To X/OPEN consortium γεννήθηκε το 1984 στην Ευρώπη (=από ευρωπαϊκές εταιρίες) και είχε σαν στόχο του τον ορισμό των standards που θα έπρεπε να πληρεί ένα +σύστημα γιά να μπορεί να χαρακτηριστεί Unix. Αργότερα στο X/OPEN προσχώρησαν όλες σχεδόν οι εταιρίες που κατασκεύαζαν Unix κλώνους. Το consortium αυτό δεν +εισήγαγε δικά του standards, αλλά υιοθέτησε τα ήδη υπάρχοντα, ώστε να είναι ευκολότερη η οριοθέτηση ενός κοινά αποδεκτού interface γιά την ανάπτυξη εφαρμογών, +λύση που πήρε τη μορφή του Common Applications Environment. Το CAE βασιζόταν κατά το μεγαλύτερο μέρος του στην SVID και περιελάμβανε τα βασικότερα POSIX +standards. Η πιστοποίηση της συμμόρφωσης γινόταν με το X/OPEN Portability Guide (XPG), πιστοποίηση την οποία είχε και το SVR4 (XPG3). Το XPG3 καθόριζε i18ned +system calls και βιβλιοθήκες, εντολές και utilities, καθώς και χαρακτηριστικά της C και την αλληλεπίδραση μεταξύ των XPG3-certified συστημάτων. Στην +interoperability επικεντρωνόταν και το XPG4 του 1992. Σαν αποτέλεσμα της συγχώνευσης του Open Software Foundation με το X/OPEN consortium, το XPG περιέχεται +πλέον στην Single UNIX Specification του OpenGroup (το προϊόν αυτής της συγχώνευσης). + +### [4.4 Single UNIX Specification]{#ss4.4} + +Το 1993 το X/OPEN consortium ανέλαβε την ευθύνη της παραγωγής ενός specification γιά τα κοινότερα Application Programming Interfaces, ώστε να είναι δυνατή η +άμεση μεταφορά ανάμεσα στις διάφορες πλατφόρμες που θα το ακολουθούσαν. Γιά να επιτύχει αυτή την τεράστια ενοποίηση, το X/OPEN κατέγραψε τα (αθροιστικά) 1170 +διαφορετικά APIs που προβλέπονται από την System V Interface Definition, το X/OPEN Portability Guide, το Application Environment Specification Full Use +Interface (AES) από το Open Software Foundation και μία ανάλυση των περισσότερο διαδεδομένων εφαρμογών, γιά αυτό και το αποτέλεσμα αυτής της προσπάθειας έγινε +γνωστό σαν Spec 1170. Μετά από ορισμένες μετατροπές και/ή προσθέσεις, το X/OPEN παρουσίασε τον καρπό αυτού του εγχειρήματος με το όνομα Single UNIX +Specification. Τα συμβατά συστήματα, όπως το AIX, το IRIX, το HP-UX και άλλα, λαμβάνουν το mark UNIX 95. + +### [4.5 Single UNIX Specification 2]{#ss4.5} + +To OpenGroup consortium παρουσίασε το 1997 ένα ευρύτερο σύνολο προδιαγραφών, το οποίο επέκτεινε το αρχικό standard του X/OPEN, με την ονομασία Single UNIX +Specification, Version 2. Σύμφωνα με τις θέσεις του OpenGroup, το νέο standard αποσκοπούσε στην εδραίωση του Unix ως την πρώτη επιλογή γιά εργασίες που απαιτούν +υψηλή αξιοπιστία και την καθιέρωσή του στον τομέα της επεξεργασίας γραφικών με υψηλές επιδόσεις. Η Version 2 είναι υπερσύνολο της πρώτης έκδοσης και τα νέα +στοιχεία που εισάγει περιλαμβάνουν extended threads functions, συμβατότητα με τα νεότερα POSIX, το γνωστό σαν N-bit cleanup, τον διαχωρισμό δηλαδή του +architecture-dependant κώδικα (όσον αφορά το data-length), με άλλα λόγια επιτρέπει τη μετάβαση στα 64 bit. Επιπλέον, προβλέπει αρχεία ικανού μεγέθους γιά να +εξυπηρετηθούν οι σύγχρονες εφαρμογές (κυρίως οι βάσεις δεδομένων), dynamic linking extensions (όχι δεν ξέρω που χρησιμεύουν :) και Year 2000 Allignment (όχι ότι +χρειαζόταν). Βεβαία, όλα αυτά και διατηρώντας προς τα πίσω συμβατότητα. Με στοιχεία του 1999, μόνο η IBM, η Sun και η NCR είχαν πιστοποιήσει ως UNIX 98 κάποιο +από τα προϊόντα τους. + diff --git a/content/articles/31/05_blender_intro.md b/content/articles/31/05_blender_intro.md new file mode 100644 index 0000000..23ef252 --- /dev/null +++ b/content/articles/31/05_blender_intro.md @@ -0,0 +1,257 @@ ++++ +title = 'Είσαγωγη στο Blender 3D' +date = '2001-06-01T00:00:00Z' +description = '' +author = 'Καπελώνης Κωστής για το Magaz ( magaz.hellug.gr(http://magaz.hellug.gr) )' +issue = ['Magaz 31'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Το άρθρο αυτό αποτελεί μια είσαγωγη στο \"μαγικό\" κόσμο του 3D Modelling. Το πακέτο τρισδιάστατων γραφικών που επιλέχτηκε είναι το δημοφιλές Blender 3D. +Απεύθυνεται σε άτομα χρήστες του Linux με μηδαμινή γνώση σε αυτον τον τομέα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +----------------------------------------------- + +**2. Τι είναι το Blender;** +----------------------------------------------------------- + +**3. Έτσι όπως μας τα λες φαίνεται πολύ \"σοβαρό\" πρόγραμμα. Γιατί εγώ ο ταπεινός Linux-as να ασχοληθώ μαζί του;** +--------------------------------------------------------------------------------------------------------------------------------------------------- + +**4. Ακούγεται πολύ καλό για να είναι αληθινό\...Κάποιο λάκκο έχει η φάβα\...** +--------------------------------------------------------------------------------------------------------------- + +**5. Εγκατάσταση** +-------------------------------------------------- + +**6. Γνωριμία με το περιβάλλον** +---------------------------------------------------------------- + +**7. Η Θεωρία** +----------------------------------------------- + +**8. Η Πράξη** +---------------------------------------------- + +**9. Επίλογος** +----------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Ωραία! Επιτέλους εγκαταστήσαμε το Linux στον υπολογιστή μας και αρχίζουμε να το χρησιμοποιούμε. Και τώρα; + +Προφανώς θα ασχοληθούμε με προγραμματισμό σε κάποιες από τις άπειρες γλώσσες που λογικά διαθέτει η διανομή που εγκαταστήσαμε. Θα σερφάρουμε και λίγο στο +INTERNET, θα στήσουμε κανέναν Server και γενικά θα κάνουμε όλα τα φυσιολογικά πράγματα που κάνουν όλοι οι Linux-άδες. Κάτι λείπει όμως\.... + +Πιστεύω ότι η εξίσωση Linux-ας = guru στον προγραμματισμό είναι λανθασμένη, και η σωστή είναι Linux-ας= \"ψαγμένο\" άτομο που χρησιμοποιεί στο έπακρο το PC του. + +Παράλληλα έχω βαρεθεί όλους αυτούς που χρησιμοποιούν Χ-windows μόνο και μόνο για να σηκώνουν πολλαπλά τερματικά. Είναι δυνατόν να αγοράζουν ένα μηχάνημα τόσων +χιλιάδων, για το πληκτρολόγιο και την οθόνη;(ποντίκι μόνο για αλλαγή focus :-) + +Αποφάσισα λοιπόν να γράψω αυτό το άρθρο για ένα πρόγραμμα που: + +- θα φτάσει τον υπολογιστή σας στα όρια του αφήνοντας σας έκπληκτους με τις δυνατότητές του. +- Θα εκμεταλλευτεί την πανάκριβη κάρτα γραφικών σας. +- θα αναδείξει την καλλιτεχνική φλέβα που όλοι κρύβετε μέσα σας. +- Θα σας κάνει να δείτε με άλλο μάτι τα εφφέ των ταινιών. +- θα αποδείξει ότι οι Linux-αδες δεν προγραμματίζουν μόνο. + +Το πρόγραμμα αυτό είναι το [Blender 3D](www.blender.nl) + + +### [2. Τι είναι το Blender;]{#s2} + +Το Blender είναι μια πλήρης σουίτα 3D CAD με δυνατότητες παραγωγής στατικών εικόνων ή 3D animation (video). Είναι επαγγελματικό εργαλείο και η εταιρία που το +κατασκεύασε το χρησιμοποιούσε αρχικά η ίδία για τις ανάγκες τις πριν το δώσει στο ευρύ κοινό. Είναι \"ώριμο\" προγραμματιστικά και έχει προχωρημένα 3D +χαρακτηριστικά (radiosity,particles) που αλλά παρόμοια προγράμματα (σε Linux) μόνο ονειρεύονται. + +Είναι cross platform (SGI,Sun,FreeBSD x86,Linux x86,Linux Alpha,Linux PPC,BeOS x86,WINDOWS), μικρό στο download (λιγότερο από 2MB), πλήρως επεκτάσιμο +(plugins-αρκεί να ξέρετε Python), και είναι Δωρεάν!! + +Άλλα τέτοια προγράμματα που τρέχουν μόνο σε Windows(3D studio,Lightwave,Truespace) απαιτoύν μια μικρή περιουσία. Την τελευταία φορά που είδα την τιμή του 3D +Studio MAX ήταν 2.000.000 δρχ (δυο εκατομμύρια δραχμές). + +Και μην αρχίσω να μιλάω για το SoftImage Extreme της M\$\... + +Το Blender μέχρι την έκδοση 1.8 προσφερόταν δωρεάν αλλά για να χρησιμοποιήσει κανείς όλες τις δυνατότητές του έπρεπε να αγοράσει ένα C-key που τις ξεκλείδωνε. +Από την έκδοση 1.8 και μετά διατίθεται εντελώς δωρεάν με όλες τις δυνατότητες του ακόμα και για επαγγελματική (commercial) χρήση. + + +### [3. Έτσι όπως μας τα λες φαίνεται πολύ \"σοβαρό\" πρόγραμμα. Γιατί εγώ ο ταπεινός Linux-as να ασχοληθώ μαζί του;]{#s3} + +Με το Blender μπορείτε να κάνετε τα εξής: + +- Εικόνες για backgrounds,icons +- Animated GIFs για την σελίδα σας +- γραφικά για το τρομερό παιχνίδι που φτιάχνετε (χε,χε\...) +- να μάθετε για το πως λειτουργούν τα 3D γραφικά. +- να ετοιμάσετε τον Terminator 4 :-) + +Βασικά για να μετατρέψετε το Linux σας σε ένα μικρό **Silicon Graphics Workstation** (Ωραία δεν ακούγεται;) + +Εδώ μπορείτε να δείτε το περιβάλλον εργασίας του Blender + +[\[tank.jpg 97k\]](/31/img/tank.jpg) [\[cup.jpg 89k\]](/31/img/cup.jpg) [\[robot 13k\]](/31/img/robot.jpg) + +Εδώ εικόνες από μέσους χρήστες: [www.blendermania.com](http://www.blendermania.com) + +και εδώ από επαγγελματίες + +[\[bottes.jpg 43k\]](/31/img/bottes.jpg) [\[doogieducati.jpg 51k\]](/31/img/doogieducati.jpg) [\[couteau.jpg 43k\]](/31/img/couteau.jpg) [\[blues.jpg 72k\]](/31/img/blues.jpg) +[\[zippo.jpg 25k\]](/31/img/zippo.jpg) [\[lagrangedwarf.jpg 170k\]](/31/img/lagrangedwarf.jpg) + +(Ναι **ΌΛΑ** αυτά είναι από υπολογιστή και όχι πραγματικές φωτογραφίες) + + +### [4. Ακούγεται πολύ καλό για να είναι αληθινό\...Κάποιο λάκκο έχει η φάβα\...]{#s4} + +Where \'s the catch? Που λένε και οι αμερικάνοι + +Ορίστε τι σας \"έκρυψα\" μέχρι τώρα. + +- Αν και το Blender δίνεται δωρεάν, ΔΕΝ είναι open-source. Κάποια μέρη του προσφέρονται open-source άλλα όχι ολόκληρο. +- Επειδή είναι cross-platform δεν μπορούσε να υιοθετήσει κάποιο περιβάλλον (look-n-feel) ενός λειτουργικού συστήματος. Έτσι το Blender διαθέτει το δικό του + γραφικό περιβάλλον (toolkit) το οποίο αν δεν σας \"ξενίσει\" θα σας φανεί δύσχρηστο στη αρχή. +- Εκτός από tooltips μέσα στο πρόγραμμα δεν έχει online βοήθεια ή οργανωμένη τεκμηρίωση(documentation).Μην ανησυχείτε όμως! Τα διάφορα tutorials στο ΙΝΤΕΡΝΕΤ + καθώς και το magaz ;-) είναι εδώ. +- Κανείς δεν είπε ότι το 3D modelling είναι εύκολο. Ακριβώς όπως το πρώτο σας πρόγραμμα, δεν ήταν ένα λειτουργικό σύστημα μην περιμένετε οι πρώτες σας + δημιουργίες να είναι ότι είδατε στα screenshots.\ + Σας απογοήτευσα τώρα,ε; :-( + + +### [5. Εγκατάσταση]{#s5} + +To Blender μπορείτε να το πάρετε από την επισήμη σελιδά με http απο την http://www.blender.nl/download/ ή κατευθείαν με FTP από το ftp.blender.nl/pub Προφανώς +επιλέγετε το Linux x86 αρχείο. Τελευταία έκδοση 2.12 (Εγώ έχω τώρα την 2.04) + +Υπάρχουν δυο εκδόσεις H static (1.2MB) και η dynamic (1.8ΜΒ) Mε την dynamic εκμεταλλεύεστε πλήρως την 3D κάρτα γραφικών σας, με την static όχι. + +Αν έχετε χρόνο κατεβάστε πρώτα την dynamic και αν αυτή δεν λειτουργήσει δοκιμάστε την static + +Αν έχετε μια καινούρια διανομή Linux με υποστήριξη 3D (Xserver 4/opengl/mesa3d) κατεβάσετε την dynamic + +Αν δεν ξέρετε τι πρέπει να διαλέξετε,κατεβάστε την static + +Καλό θα ήταν επίσης να κατεβάσετε και οτιδήποτε βρείτε στην ενότητα HELP της download σελίδας + +Το πακέτο δεν χρειάζεται εγκατάσταση παρά μόνο αποσυμπιεση. Μπορείτε να το χρησιμοποιήσετε από την περιοχή σας (home directory) αλλά προτείνεται να το βάλετε σε +κάποιον κατάλογο προσβάσιμο από όλους τους χρήστες (το /usr/local/blender είναι λογική επιλογή) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Γίνετε υπερχρηστης με την εντολή su + + cp blenderX.XXX.tar.gz /usr/local + cd /usr/local/ + gunzip blender.X.XXX.tar.gz + tar xvf blender.X.XXX.tar + rm blender.X.XXX.tar + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τέλος \"χτυπήστε\" ένα make μέσα στον κατάλογο plugins και προαιρετικά φτιάξτε ένα σύνδεσμο (symbolic link) στο /usr/locαl/bin για να μην χρειάζεται να +πληκτρολογείτε όλη την διαδρομή κάθε φόρα. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ln -s /usr/local/blenderX.XX/blender /usr/local/bin/blender + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν θέλετε και εικονίδιο στείλτε μου ένα [mail](mailto:kapelon@csd.uoc.gr) + +Τα αρχεία του blender έχουν επέκταση .blend και μπορείτε να τα αποθηκεύσετε όπου θέλετε. (Δεν πρόκειται να φτιαχτεί κατάλογος .blender στην περιοχή σας) + +Ξεκινήστε το πρόγραμμα και θαυμάστε! Πατήστε και space να δείτε τι γίνεται. (Παναγία μου κουμπιά και μενού\...) + + +### [6. Γνωριμία με το περιβάλλον]{#s6} + +Μην τα \"χάσετε\" από το μέγεθος της πληροφορίας που έχει η οθόνη.Δεν πρόκειται να τα χρησιμοποιήσετε όλα αυτά στις πρώτες σας προσπάθειες. + +Για αρχή μεγαλώστε το παράθυρο του Blender ώστε να πιάσει όλη την οθόνη.Αν χρησιμοποιείτε window manager που το υποστηρίζει (π.χ. Enlightenment, Windowmaker) +αφαιρέστε την γραμμή τίτλου (titlebar) και τα περιγράμματα (borders) από το παράθυρο και ξανά μεγιστοποιήστε. + +Αυτό που βλέπετε είναι η προκαθορισμένη (default :-) διάταξη των παραθύρων του Blender.Αυτή αποτελείται από 3 παράθυρα (frames/panels).Ένα μικρό στην πάνω μεριά +ρυθμισμένο να δείχνει τα μενού, ένα μεγάλο στην μέση (3D view) ρυθμισμένο να δείχνει τον τρισδιάστατο κόσμο και ένα μεσαίου μεγέθους, στην κάτω μεριά σε ρόλο +toolbar.Ο αριθμός των παραθύρων που βρίσκονται κάθε στιγμή στην οθόνη, η διάταξη τους πάνω σε αυτή,το μέγεθος τους καθώς και το περιεχόμενο τους είναι πλήρως +παραμετροποιήσιμα. Αυτή η διάταξη είναι καλή για αρχή. + +Πατήστε το 5 στο αριθμητικό πληκτρολόγιο (για perspective view) και κρατώντας πατημένο το μεσαίο πλήκτρο του ποντικιού(ή το ροδάκι) μετακινήστε το ποντίκι μέσα +στο 3D view.Έτσι μετακινείστε (orbit) μέσα στο 3D view.\ +Υπάρχουν και 3 προκαθορισμένες (predefined) όψεις, τα πλήκτρα 7,1,3 του αριθμητικού πληκτρολογίου. + +Το πλέγμα είναι ο ορίζοντας της σκηνής Η πυραμίδα είναι η κάμερα τής σκηνής(Για να δείτε οποιαδήποτε σκηνή τι βλέπει η κάμερα πατήστε το 0 (μηδέν) στο +αριθμητικό πληκτρολόγιο) Ο στόχος είναι το σημείο που θα εμφανιστούν τα καινούρια αντικείμενα (Μετακινήστε τον κάνοντας αριστερό κλικ κάπου αλλού). Το μικρό +τετράγωνο είναι ένα plane και είναι εάν απλό αντικείμενο. + +Ξοδέψτε λίγο χρόνο και μετακινήστε το 3D παράθυρο προς όλες τις μεριές. Παρατηρήστε ότι παίζει μεγάλη σημασία ως προς την περιστροφή η θέση του ποντικιού (ΟΧΙ +του στόχου) όταν ξεκινάτε το drag με το μεσαίο πλήκτρο. Αν χάσετε τον προσανατολισμό (μην γελάτε, συμβαίνει) πατήστε το 7 για να βρεθείτε στην πάνω όψη + +Όταν βαρεθείτε, συνεχίστε στο θεωρητικό υπόβαθρο. + + +### [7. Η Θεωρία]{#s7} + +Στον προγραμματισμό τα βήματα που ακολουθούμε είναι τις περισσότερες φορές τα εξής: + +- Πληκτρολόγηση του πηγαίου κώδικα σε ένα αρχείο κειμένου +- Compilation του παραπάνω αρχείου +- Εκτέλεση του έτοιμου προγράμματος + +Στο 3D modelling μια πολύ περιληπτική αντίστοιχη λίστα είναι η: + +- Κατασκευή των 3D αντικειμένων που θα αποτελέσουν την σκηνή(scene) που θέλουμε να φτιάξουμε +- Επεξεργασία υφών/υλικών/επιφανειών/χρωμάτων που θέλουμε να έχουν τα αντικείμενά μας (textures/materials) +- Φωτισμός της σκηνής από διάφορες πηγές (lighting) +- Απόδοση του τελικού αποτελέσματος (Rendering) + +Το rendering είναι αντίστοιχο με το compile με την έννοια ότι παίρνει πολλή ώρα (ανάλογα και με την πολυπλοκότητα της σκηνής) Σε αυτό το στάδιο ο υπολογιστής +επεξεργάζεται όλες τις πληροφορίες που του έχουμε δώσει, την γεωμετρία των σχημάτων,τον φωτισμό, την κίνηση (σε περίπτωση animation) και βγάζει το τελικό +αποτελέσμα.Τα εφφέ των ταινιών είναι τόσο απαιτητικά που το rendering γίνεται σε δίκτυα υπολογιστών ειδικά φτιαγμένων για επεξεργασία γραφικών (Silicon +graphics) + + +### [8. Η Πράξη]{#s8} + +Η πρώτη μας σκηνή είναι αντίστοιχη του hello world στον προγραμματισμό(ως προς την απλότητα) Αποτελείται από ένα έτοιμο γεωμετρικό σχήμα (σφαίρα) και μόνο. + +Επιλέξτε File/New από το μενού Πατήστε το πλήκτρο Χ (στο πληκτρολόγιο)και από το μικρό μενού διαλέξτε ERASE SELECTED + +Πατήστε space και μετά ADD/MESH/UVSPHERE Πατήστε ΟΚ και στις δυο ερωτήσεις + +Πατήστε ΤΑΒ για να βγείτε από το EDITMODE (Περισσότερα για το EDITMODE προσεχώς) Όπως είδατε η [σφαίρα](/31/img/sphere.jpg) εμφανίστηκε εκεί που ήταν o στόχος. + +Πατήστε 0 στο αριθμητικό πληκτρολόγιο και μετά F12 για Rendering Τι βλέπετε;\ +Τίποτα είναι η σωστή απάντηση γιατί δεν υπάρχουν φώτα στην σκηνή μας (Πατήστε Esc για να φύγει το μικρό παράθυρο) + +Επιστρέψτε στην πάνω όψη (numpad 7) και με αριστερό κλικ κάπου ανάμεσα στην κάμερα και την σφαίρα μετακινήστε τον στόχο + +Πατήστε space ADD/LAMP ξανά F12 + +H σφαίρα μας όμως δεν είναι λεία Επιλέξτε τη ,με δεξί κλικ του ποντικιού πάνω της. Θα πρέπει να γίνει ροζ. Πατήστε F9 για τα EDIT BUTTONS Και αλλά κουμπιά\....\ +Πατήστε το Set smooth (βλέπε [εικόνα](/31/img/smooth.jpg)) που βρίσκεται περίπου κάτω και αριστερά και πάλι F12 Τώρα είναι καλύτερα. (Πατήστε Esc για να φύγει το +μικρό παράθυρο) + +Ας αλλάξουμε τώρα το χρώμα της F5 για material buttons. Αριστερό κλικ (κρατήστε πατημένο) στην παύλα (βλέπε [εικόνα](/31/img/material.jpg)) για δημιουργία νέου +υλικού.\ +ADD NEW από το μικρό μενού. Ακόμα περισσότερα κουμπιά\...\...\...\... + +Βρείτε τα RGB sliders (βλέπε [εικόνα](/31/img/rgb.jpg)) και αλλάξτε το χρώμα της (preview τέρμα αριστερά).\ +F12 για δείτε το αποτέλεσμα + + +### [9. Επίλογος]{#s9} + +Αν κάτι δεν σας πάει καλά μην εκνευρίζεστε.Κάθε αρχή και δύσκολη + +Ελπίζω με αυτό το άρθρο να σας έδωσα το αρχικό ερέθισμα για να ασχοληθείτε με το Blender.Λογικά θα βγάλω και δεύτερό μέρος μόλις μπορέσω. + +Μέχρι τότε δείτε αυτό το [tutorial](http://www.blendermania.com/tutbook/interface.php3) + diff --git a/content/articles/32/01_editorial.md b/content/articles/32/01_editorial.md new file mode 100644 index 0000000..02ea9af --- /dev/null +++ b/content/articles/32/01_editorial.md @@ -0,0 +1,23 @@ ++++ +title = 'Editorial' +date = '2003-06-01T00:00:00Z' +description = '' +author = 'Ιατρού Μιχάλης iatrou ατ hellug.gr(mailto:iatrou%20%C3%A1%C3%B4%20hellug.gr)' +issue = ['Magaz 32'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Magaz\... reloaded.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έχουν περάσει σχεδόν δύο χρόνια από το προηγούμενο τεύχος του Magaz.\ +Εύχομαι να μην περάσουν άλλα τόσα μέχρι το επόμενο\...\ +Δυστυχώς, προσωπικά δεν μπορώ να κάνω και πολλά για να υλοποιηθεί η παραπάνω ευχή: είναι στο χέρι των φίλων/αναγνωστών του Magaz να συνεχίσει η λειτουργία του +περιοδικού. Χωρίς συντάκτες (έστω και περιστασιακούς) δεν υπάρχουν άρθρα, χωρίς άρθρα δεν υπάρχει Magaz. Τόσο απλά. + +Να αναφέρω, για πολλοστή φορά, ότι δεν είναι ανάγκη να είστε Linux-guru για να γράψετε ένα άρθρο, αρκεί απλά να θέλετε να μοιραστείτε μια εμπειρία σας ή κάτι +που σας προβλημάτισε και κίνησε το ενδιαφέρον σας τέλος πάντων. + +Ελπίζω να απολαύσετε το τεύχος \-- και ελπίζω να μην είναι το \"τελευταίο\". diff --git a/content/articles/32/02_msvcd.md b/content/articles/32/02_msvcd.md new file mode 100644 index 0000000..11355cb --- /dev/null +++ b/content/articles/32/02_msvcd.md @@ -0,0 +1,105 @@ ++++ +title = 'Μετατροπή DivX, DVD σε Video CD στο Linux' +date = '2003-04-01T00:00:00Z' +description = '' +author = 'Nick Apostolakis(mailto:nickapos@agriroot.aua.gr)' +issue = ['Magaz 32'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένας σύντομος οδηγός για το πώς μπορείτε να μετατρέψετε video, από DivX και DVD format, σε VCD, χρησιμοποιώντας τον mplayer.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +--------------------------------------- + +**2. Τα εργαλεία** +------------------------------------------ + +**3. Λίγα λόγια γενικά για τον MPlayer** +---------------------------------------------------------------- + +**4. Τα υλικά** +--------------------------------------- + +**5. Η διαδικασία** +------------------------------------------- + +**6. Επίλογος** +--------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Κοιτάζοντας κανείς τον παραπάνω τίτλο μπορεί να αναρωτηθεί για ποίο λόγο κάποιος να θέλει να μετατρέψει ένα video από DivX ή από DVD σε Video CD τη στιγμή που +τα 2 πρώτα έχουν σαφώς καλύτερες δυνατότητες από πλευράς ποιότητας αλλά και από πλευράς συμπίεσης (το DivX). Η απάντηση είναι απλή. Το Video CD είναι ένα +βιομηχανικό πρότυπο το οποίο έχει υλοποιηθεί σε πληθώρα οικιακών αλλά και φορητών συσκευών ενώ η επεξεργαστική ισχύς που απαιτείται είναι μικρή. Επίσης, +χρησιμοποιεί, ως μέσο αποθήκευσης, απλά CD τα οποία είναι διαθέσιμα σε όλους με μικρό κόστος. Οι άλλες λύσεις υστερούν σε αυτούς τους δύο τομείς. Τα μεν DivX +είναι κάτι που μεταβάλλεται πολύ γρήγορα και δεν είναι ανοιχτό σε όλο το κόσμο, υπάρχουν δε ελάχιστες standalone συσκευές με δυνατότητα αναπαραγωγής των αρχείων +αυτών (και μάλιστα, μόνο συγκεκριμένες εκδόσεις). Το DVD είναι μια πολύ καλή λύση, μόνο που τα εγγράψιμα DVD είναι ακόμα σε βρεφικό στάδιο. + +Το εμφανές μειονέκτημά των Video CD είναι η χαμηλή ποιότητα εικόνας και ήχου που έχουν. Σε αυτό το τομέα υστερούν σαφώς έναντι των DivX αλλά και των DVD. Εδώ +όμως θα πρέπει να παρατηρήσω ότι τα VCD έχουν φτιαχτεί για να παίζουν στις χαμηλές αναλύσεις των οικιακών τηλεοράσεων και όχι σε οθόνες υπολογιστών που είναι +σαφώς ανώτερες σε ποιότητα. Έτσι, όταν το video παρακολουθείται σε τηλεόραση η διαφορά στην απόδοση σε σχέση με τις άλλες δύο τεχνολογίες είναι μικρή. Τα VCD +είναι επίσης \"προβληματικά\" και στον ήχο αφού οι δυνατότητες του φτάνουν μόνο μέχρι τον στερεοφωνικό ενώ δεν υποστηρίζουν AC3. Δυστυχώς για αυτό δεν υπάρχει +λύση. + +Παρόλα τα παραπάνω, το VCD παραμένει ένα πολύ καλό ψηφιακό format το οποίο ξεπερνάει σε απόδοση και την ποιότητα της λήψης της τηλεόρασης αλλά και των +αναλογικών μέσων (VHS). + + +### [2. Τα εργαλεία]{#s2} + +Στο Linux υπάρχουν πολλά εργαλεία με τα οποία μπορείτε να κάνετε μετατροπές video μερικά αυτά είναι DVDrip, transcode, MPlayer, DVDx. Τα τρία πρώτα είναι native +Linux προγράμματα ενώ το τελευταίο είναι ένα open source πρόγραμμα για Windows το οποίο δουλεύει πολύ καλά και σε Linux μέσω του wine. Στο κείμενα που ακολουθεί +θα αναπτύξω την χρήση του MPlayer. + + +### [3. Λίγα λόγια γενικά για τον MPlayer]{#s3} + +Ο MPlayer αποτελεί τον ελβετικό σουγιά για video στον χώρο του Linux, με λίγα λόγια τα κάνει όλα και συμφέρει. Μπορεί να παίξει σχεδόν όλες τις γνωστές μορφές +video, να κάνει encode και capture από κάρτες τηλεόρασης, να μετατρέψει videos από την μια μορφή στην άλλη, να παίξει stream από το δίκτυο, να διορθώσει +χαλασμένα αρχεία και διάφορα άλλα. Λίγοι είναι αυτοί που μπορούν να ισχυριστούν ότι γνωρίζουν τις λειτουργίες του MPlayer σε βάθος και εγώ δεν είμαι ένας από +αυτούς. Παρακάτω θα περιγράψω μια σχετικά απλή διαδικασία με την οποία μπορούμε να μετατρέψουμε ένα οποιοδήποτε αρχείο video που μπορεί να παίξει ο MPlayer σε +mpg αρχικά και τελικά σε Video CD. + + +### [4. Τα υλικά]{#s4} + +Χρειαζόμαστε, προφανώς, τον ίδιο τον MPlayer (τον κώδικα του). Μέσα στο πακέτο του MPlayer υπάρχει ένα shell script το οποίο ονομάζεται mencvcd και το οποίο +χρησιμοποιεί τον MPlayer καθώς και τα mjpegtools για να κάνει την μετατροπή. Το παραγόμενο mpg το μετατρέπουμε σε bin/cue iso images με το πρόγραμμα vcdimager +και το γράφουμε με το cdrdao. Τα προγράμματα αυτά μπορούμε να τα αναζητήσουμε στο http://freshmeat.net και να ακολουθήσουμε τις οδηγίες εγκατάστασης τους. + + +### [5. Η διαδικασία]{#s5} + +Η διαδικασία είναι αρκετά απλή. Έχοντας εγκαταστήσει τα παραπάνω πακέτα, είμαστε έτοιμοι να κάνουμε τις πρώτες δοκιμές. Η λογική πίσω από το mencvcd είναι η +εξής: Το καλούμε και του δίνουμε αρχικά τις παραμέτρους για το ίδιο. Μετά ακολουθούν οι παράμετροι που χρειάζεται το MPlayer για να παίξει την ταινία. Προσοχή, +δεν δέχεται όλες τις παραμέτρους που δέχεται το MPlayer, αφού για πολλές από αυτές δεν έχει νόημα η χρήση τους. Οι βασικές παράμετροι του mencvcd είναι τρεις. +Το -vnorm, το -vfr, και το -w. Το πρώτο καθορίζει ως τι θα μεταχειριστεί το mencvcd το εισαγόμενο video και μπορεί να έχει 3 τιμές p, n, s που αντιστοιχούν σε +PAL, NTSC, SECAM. Το δεύτερο και πολύ σημαντικό δηλώνει ποίο θα είναι το frame rate του παραγόμενου mpg και παίρνει ακέραιες τιμές από 0 μέχρι 8. Εάν θέλουμε να +καταλήξουμε σε ένα mpg με frame rate 24fps (NTSC) επιλέγουμε την τιμή 2, για 25fps (PAL) επιλέγουμε την τιμή 3. Τέλος, το -w, ασχέτως από το τι μορφής είναι το +εισαγόμενο video, κάνει το mencvcd να το μετατρέψει σε 16:9. + +Έτσι, για να μετατρέψουμε το πρώτο τίτλο ενός DVD σε VCD δίνουμε: + + mencvcd output -vnorm n -vfr 2 -dvd 1 + +και το mencvcd κάνει όλη την δουλειά μέχρι το σημείο του bin/cue image. Μετά γράφουμε το image σε ένα cd: + + cdrdao write --device 0,0,0 --eject --speed videocd.cue. + +Η αντίστοιχη εντολή για ένα DivX θα ήταν: + + mencvcd output -vnorm n -vfr 2 video.avi + + +### [6. Επίλογος]{#s6} + +Αυτή είναι η διαδικασία της μετατροπής. Οι πιθανοί συνδυασμοί των παραμέτρων είναι πάρα πολλοί και η αναφορά τους θα απαιτούσε την επεξήγηση του τρόπου που +δουλεύει το mencvcd πράγμα που ξεφεύγει από τον σκοπό αυτού του κειμένου. Πάντως, η συμβουλή είναι μια: κάντε πειράματα και για να μην χαλάτε πολλά CD καλό +είναι να έχετε 1-2 rewriteable κοντά σας. + diff --git a/content/articles/32/03_grlinux.md b/content/articles/32/03_grlinux.md new file mode 100644 index 0000000..34a4dba --- /dev/null +++ b/content/articles/32/03_grlinux.md @@ -0,0 +1,400 @@ ++++ +title = 'Ελληνικά στο Linux' +date = '2003-04-01T00:00:00Z' +description = '' +author = 'Κυρίτσης Αθανάσιος (aka DJ Art)' +issue = ['Magaz 32'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Η κατάσταση με τα Ελληνικά στο Linux είναι πλέον σε σχεδόν άριστη μορφή. Όλες οι μοντέρνες διανομές και εφαρμογές υποστηρίζουν Ελληνικά. Το μόνο που θα +χρειαστεί να κάνετε, είναι να τα επιλέξετε για χρήση. Η επιλογή αυτή γίνεται με σωστή ρύθμιση 2-3 παραμέτρων του συστήματος και από εκεί και πέρα, τα Ελληνικά +είναι θέμα της κάθε εφαρμογής. Με τις παρακάτω οδηγίες μπορείτε να εγκαταστήσετε \"σωστά\" (δηλαδή iso-8859-7) ελληνικά.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για να εγκαταστήσετε τα ελληνικά, Θα πρέπει να κάνετε τα εξής 3 απλά βήματα: + +1. Να εγκαταστήσετε γραμματοσειρές στο σύστημά σας. +2. Να εγκαταστήσετε τα ελληνικά locales και να τα ενεργοποιήσετε. +3. Να ενημερώσετε τα αρχεία των Χ για το ελληνικό πληκτρολόγιο και να το ενεργοποιήσετε. + +**1. Εγκατάσταση Γραμματοσειρών** +----------------------------------------------------------- + +- [1.1 Graphis](#ss1.1) +- [1.2 Εγκατάσταση TrueType γραμματοσειρών](#ss1.2) +- [1.3 AntiAliasing](#ss1.3) + +**2. Ενεργοποίηση των locales** +--------------------------------------------------------- + +- [2.1 Για το RedHat](#ss2.1) +- [2.2 Για το Mandrake](#ss2.2) +- [2.3 Για το Slackware](#ss2.3) +- [2.4 Για Debian](#ss2.4) + +**3. Ρύθμιση των X-Windows** +------------------------------------------------------ + +- [3.1 Για X 4.3.0 και πάνω](#ss3.1) +- [3.2 Για Χ 4.1.0 ώς και X 4.2.1](#ss3.2) +- [3.3 Για Χ 4.0.2 και 4.0.3](#ss3.3) +- [3.4 Για Χ μικρότερα από 4.0.1](#ss3.4) + +**4. Για την κονσόλα και μόνο** +--------------------------------------------------------- + +**5. Για GTK+ 2.x / GNOME 2.x εφαρμογές** +------------------------------------------------------------------- + +**6. Για το Netscape της σειράς 4.x** +--------------------------------------------------------------- + +**7. \*BSD Compatibility** +---------------------------------------------------- + +**8. Credits** +---------------------------------------- + + +### [1. Εγκατάσταση Γραμματοσειρών]{#s1} + +Για να έχετε ελληνικά στο σύστημά σας, το πρώτο βήμα είναι να εγκαταστήσετε ελληνικές γραμματοσειρές. Εδώ έχετε 2 επιλογές: να εγκαταστήσετε τις δωρεάν +γραμματοσειρές του πακέτου Graphis ή/και επιπλέον TrueType γραμματοσειρές. Εμείς σας προτείνουμε να εγκαταστήσετε και τα δύο. Οι Truetype γραμματοσειρές είναι +αισθητικά πιο όμορφες και πιο προτεινόμενες για χρήση σε ένα desktop σύστημα. + +### [1.1 Graphis]{#ss1.1} + +Το Graphis είναι ένα project του Hellug, το οποίο έχει σαν στόχο την ομαδοποίηση των ήδη υπαρχόντων πακέτων γραμματοσειρών, αλλά και την επίλυση αρκετών +προβλημάτων τους. Η διεύθυνση του Graphis στο Internet είναι . Απο εκεί μπορείτε να κατεβάσετε τις γραμματοσειρές σε .rpm πακέτο ή σε +source μορφή (.tar.gz). + +Στη συνέχεια, είναι απαραίτητες οι παρακάτω ενέργειες: + +- Για να γίνει η εγκατάσταση αυτόματα είναι απαραίτητη η ύπαρξη της perl (γλώσσα προγραμματισμού), και να εισέλθετε στο μηχάνημά σας ως \"root\", όχι ως απλός + χρήστης. Χρησιμοποιούνται επίσης κάποιες άλλες εντολές, οι οποίες όμως ανήκουν στις standard εντολές, και θα πρέπει να είναι ήδη εγκατεστημένες (π.χ. οι + dirname και expr). +- Αρχικά πηγαίνετε στον φάκελο που έχετε σώσει τα RPM αρχεία. Στη συνέχεια εκτελέστε αυτήν την εντολή:\ + rpm -Uvh xfntgr-\*.rpm\ + Κανονικά θα δείτε τα πακέτα να εγκαθιστώνται το ένα μετά το άλλο. +- Αν το σύστημά σας δεν υποστηρίζει rpm πακέτα, τότε θα πρέπει να κάνετε την εγκατάσταση μόνοι σας: Αρχικά πρέπει να αποσυμπιέσετε το αρχείο + xfntgr-xx-xx.tar.gz, κάτι που μάλλον ήδη έχετε κάνει. Ως αποτέλεσμα θα πρέπει να έχετε ένα φάκελο με όνομα \"xfntgr-xx\" καθώς και πολλά αρχεία και + υποφακέλους μέσα σε αυτόν. Αυτόν τον κατάλογο θα πρέπει να τον μεταφέρετε, μετονομάζοντάς στον σε \"hellas\" στη θέση \"/usr/X11R6/lib/X11/fonts/\". Δηλαδή + θα πρέπει να υπάρχει ως \"/usr/X11R6/lib/X11/fonts/hellas/\". Στον φάκελο \"hellas\" θα βρείτε το αρχείο \"graphis\". Εκτελέστε το και οι γραμματοσειρές θα + εγκατασταθούν στο σύστημά σας (δηλαδή θα μπούν στο path στο XF86Config). + +### [1.2 Εγκατάσταση TrueType γραμματοσειρών]{#ss1.2} + +Truetype γραμματοσειρές μπορείτε να βρείτε οπουδήποτε. Το καλύτερο μέρος είναι ο φάκελος Fonts των Windows :-) (αρκεί να τα έχετε νόμιμα). Για όσους δεν έχουν +πρόσβαση σε μία Windows εγκατάσταση, μπορείτε να κατεβάσετε τα \"core fonts for the web\" στο . Επίσης, μπορείτε να βρείτε +Truetype γραμματοσειρές σε διάφορα σημεία στο Internet, ενώ υπάρχουν και εμπορικές λύσεις, εμπορικά πακέτα που προσφέρουν ως προϊόν οικογένειες TrueType +γραμματοσειρών. + +Για να εγκαταστήσετε και να χρησιμοποιήσετε truetype γραμματοσειρές, χρειάζεστε 2 πράγματα: + +1. font server με υποστήριξη truetype. Αν χρησιμοποιείτε Χ-Windows της σειράς 4.0.x και πάνω, δεν χρειάζεται να ανησυχείτε γιατί τον έχουν ενσωματωμένο. Για Χ + κατώτερης έκδοσης, τον truetype font server (xfsft) θα τον βρείτε στο .\ + \ +2. Την εφαρμογή ttmkfdir. Αν δεν την έχετε στο σύστημά σας, μπορείτε να την βρείτε στο + +Τώρα είστε έτοιμοι να εγκαταστήσετε τις γραμματοσειρές. Πηγαίντε στον κατάλογο /usr/X11R6/lib/X11/fonts και δημιουργείστε έναν καινούριο φάκελο με την ονομασία +π.χ. ttf. Μέσα σε αυτόν τον κατάλογο τοποθετήστε όσες truetype γραμματοσειρές επιθυμείτε. Σημειώστε πως τα filenames των γραμματοσειρών δεν θα πρέπει να +περιέχουν κενό. Επίσης, αν κάνατε copy τις γραμματοσειρές από το φάκελο fonts των Windows, τότε σιγουρευτείτε πως κάνατε copy μόνο όσα αρχεία έχουν την κατάληξη +.ttf, όλες οι άλλες γραμματοσειρές των Windows δεν είναι truetype και δεν θα δουλέψουν. Στη συνέχεια, μπείτε στον κατάλογο ttf και εκτελέστε τις εντολές +ttmkfdir -o fonts.dir και ttmkfdir -o fonts.scale. Θα δημιουργηθούν τα αρχεία fonts.dir και fonts.scale, τα οποίο θα περιέχουν όλες τις γραμματοσειρές που +εγκαταστήσατε. Τώρα θα πρέπει να προσθέσετε τον φάκελο /usr/X11R6/lib/X11/fonts/ttf στο Fontpath των X-Windows. Αυτό μπορείτε να το κάνετε με 2 τρόπους: + +1. Αν χρησιμοποιείτε τον X font Server (xfs), πηγαίνετε στον κατάλογο /etc/X11/fs και ανοίξτε το αρχείο config με έναν text editor. Προσθέστε στο + \"catalogue=\" τον παραπάνω κατάλογο με τις truetype γραμματοσειρές και κάντε restart τον xfs. + +2. Αν δεν χρησιμοποιείτε τον xfs, τότε ανοίξτε το κατάλληλο XF86Config (π.χ. /etc/X11/XF86Config ή /etc/X11/XF86Config-4) και προσθέστε την παρακάτω γραμμή στο + Section \"Files\": + + FontPath "/usr/X11R6/lib/X11/fonts/ttf/" + + Κάντε restart τα X-Windows + +Στις καινούριες διανομές, είναι απαραίτητο ακόμα ένα βήμα. Έτσι, λοιπόν, αν έχετε μία από τις εξής διανομές: **RedHat έκδοσης 8.0 και πάνω, Mandrake έκδοσης 9.0 +και πάνω, SuSE έκδοσης 8.0 και πάνω, Slackware έκδοσης 9.0 και πάνω ή οποιαδήποτε άλλη διανομή που χρησιμοποιεί το πακέτο fontconfig**, τότε αφού έχετε κάνει +όλα τα παραπάνω βήματα, εκτελέστε ως root την εντολή **fc-cache -fv**\ +Το output αυτής της εντολής θα πρέπει να σας πληροφορήσει σχετικά με τον αριθμό των γραμματοσειρών που βρήκε στον κατάλογο με τις ttf γραμματοσειρές σας. Αν δεν +\"διάβασε\" τον συγκεκριμένο κατάλογο, τότε θα χρειαστεί να τον προσθέσετε κατάλληλα στο αρχείο: **/etc/fonts/fonts.conf** + +Για το Debian, με την παρακάτω εντολή θα εγκατασταθούν αυτόματα οι core γραμματοσειρές της Microsoft: + +\# apt-get install msttcorefonts + +### [1.3 AntiAliasing]{#ss1.3} + +Όσον αφορά το θέμα AntiAliasing στα fonts, απλά θα αναφέρω πως εδώ μιλάμε πλέον \*ΜΟΝΟ\* για truetype γραμματοσειρές (το ΑΑ δουλεύει μόνο πάνω σε αυτές). +Επίσης, θα πρέπει να είστε σίγουροι πως οι βιβλιοθήκες που έχετε, όπως το QT ή το GTK+/Glib και τα X-Windows/libfreetype, το υποστηρίζουν ή ότι τα έχετε κάνει +compile με ενεργοποιημένη την υποστήριξη ΑΑ. + +Για τους πιο πολλούς, αν έχετε κάποια από τις τελευταίες διανομές, τότε το πιθανότερο είναι ότι δεν θα χρειαστεί να κάνετε τίποτα (π.χ. απλά επιλέξτε την +συγκεκριμένη δυνατότητα από το control center του KDE) + +Σε κάθε άλλη περίπτωση, σας παραπέμπω στο πολύ καλό HowTo για το θέμα αυτό, το οποίο θα βρείτε στο . + + +### [2. Ενεργοποίηση των locales]{#s2} + +Το επόμενο βήμα που θα πρέπει να κάνετε είναι να ενεργοποιήσετε τα ελληνικά locales στο σύστημά σας. Για να το κάνετε αυτό, καλό θα ήταν να συμβουλευτείτε τις +οδηγίες που δίνει η διανομή σας. Και, φυσικά, να φροντίσετε (πρίν από οτιδήποτε) τα ελληνικά locales να είναι εγκατεστημένα. Προσέξτε πως αν δεν τα +ενεργοποιήσετε, τότε τίποτα από όλα αυτά που αναφέρουμε εδώ δεν πρόκειται να δουλέψει σωστά. (Συνοπτικά, έχω ακούσει ότι για SuSE θα πρέπει να κάνετε το +απαραίτητο βήμα μέσω του YAST, ενώ για Redhat/Mandrake, υπάρχει το αρχείο /etc/sysconfig/i18n όπου ορίζονται οι μεταβλητές των locales και η γλώσσα). Αν έχετε +αναλυτικές οδηγίες για κάποια διανομή, ευχαρίστως να τις συμπεριλάβω σε αυτό το κείμενο. + +Αν είστε σίγουροι πως έχετε εγκατεστημένα τα locales και ξέρετε πώς να τα ενεργοποιήσετε, τότε πρέπει να ορίσετε το LC\_CTYPE ώς el ή el\_GR ή greek, ανάλογα με +τη διανομή που χρησιμοποιείτε. Για να έχετε ελληνικό πληκτρολόγιο η παραπάνω μεταβλητή είναι αρκετή. Αν θέλετε να χρησιμοποιείτε τα εξελληνισμένα προγράμματα +και να βλέπετε τα μενού στα παράθυρα στα ελληνικα, τότε πρέπει να ορίσετε την LC\_MESSAGES όπως και την LC\_CTYPE. Ένας manual τρόπος να ορίσετε τις δύο αυτές +μεταβλητές είναι να ανοίξετε το αρχείο εκίννησης του shell σας, π.χ. το .bash\_login ή το .bash\_profile ή το .bashrc (ανάλογα με τη διανομή που χρησιμοποιείτε) +που υπάρχει στο home directory σας και να γράψετε: + + export LC_CTYPE=el_GR + export LC_MESSAGES=el_GR + +### [2.1 Για το RedHat]{#ss2.1} + +Aνοίγουμε το αρχείο /etc/sysconfig/i18n και φροντίζουμε ώστε να υπάρχουν οι εξής γραμμες: + + LANG="el_GR" + SUPPORTED="en_US.UTF-8:en_US:en:el_GR.UTF-8:el_GR:el" + LC_CTYPE="el_GR" + +Μετά το πείραγμα αυτού του αρχείου, θα πρέπει το RedHat με κάποιο τρόπο να ξαναδιαβάσει αυτό το αρχείο. Ένας γρήγορος τρόπος να το κάνετε αυτό είναι να βγείτε +σε init 1 με την εντολή **telinit 1** και ξανά σε init 3 με την εντολή **telinit 3**. Οι πιο αρχάριοι μπορούν να κάνουν ένα reboot (shutdown) του μηχανήματος αν +μπερδεύονται με τα inits. + +### [2.2 Για το Mandrake]{#ss2.2} + +Ανοίγουμε το αρχείο /etc/sysconfig/i18n και φροντίζουμε ώστε να μοιάζει κάπως έτσι: + + LANG="el_GR" + SUPPORTED="en_US.UTF-8:en_US:en:el_GR.UTF-8:el_GR:el" + LC_CTYPE="el_GR" + +Μετά το πείραγμα αυτού του αρχείου, θα πρέπει το Mandrake με κάποιο τρόπο να ξαναδιαβάσει αυτό το αρχείο. Ένας γρήγορος τρόπος να το κάνετε αυτό είναι να βγείτε +σε init 1 με την εντολή **telinit 1** και ξανά σε init 3 με την εντολή **telinit 3**. Οι πιο αρχάριοι μπορούν να κάνουν ένα reboot (shutdown) του μηχανήματος αν +μπερδεύονται με τα inits. + +### [2.3 Για το Slackware]{#ss2.3} + +Στο Slackware τα πράγματα είναι πολύ εύκολα. Προσθέστε τις παρακάτω γραμμές είτε στο /etc/profile ή στο \~/.bash\_login: + + export LANG=el_GR + export LC_CTYPE=el_GR + export LC_NUMERIC=POSIX + export LC_TIME=POSIX + export LC_COLLATE=POSIX + export LC_MONETARY=POSIX + export LC_MESSAGES=POSIX + export LC_PAPER=POSIX + export LC_NAME=POSIX + export LC_ADDRESS=POSIX + export LC_TELEPHONE=POSIX + export LC_MEASUREMENT=POSIX + export LC_IDENTIFICATION=POSIX + +Όσες επιπλέον μεταβλητές περιβάλλοντος θέλετε να δείχνουν σε el\_GR, αλλάξτε κατάλληλα στις παραπάνω γραμμές το POSIX με el\_GR. + +### [2.4 Για Debian]{#ss2.4} + +Στο Debian, τα locales εγκαθίστανται και ρυθμίζονται με τις εξής εντολές: + +\# apt-get install locales\ +\# dpkg-reconfigure locales + +Στη συνέχεια επιλέγετε el\_GR.ISO8859-7 ή/και ότι άλλο χρειαζόσαστε. + + +### [3. Ρύθμιση των X-Windows]{#s3} + +### [3.1 Για X 4.3.0 και πάνω]{#ss3.1} + +Αν έχετε Χ 4.3.0 και πάνω, τότε για να έχετε ελληνικά, αρκεί να πάτε σε κάποιο εργαλείο ρύθμισης των Χ (όπως το xf86config, το xf86cfg, το XF86Setup κλπ) και +στην επιλογή για το πληκτρολόγιο να επιλέξετε το ελληνικό. Στη συνέχεια, θα πρέπει να ανοίξετε το κατάλληλο αρχείο XF86Config (ανάλογα με τη διανομή σας, π.χ. +το /etc/X11/XF86Config ή το /etc/X11/XF86Config-4) και να πάτε στην ενότητα του πληκτρολογίου ( Section \"Keyboard\" ) και να σιγουρευτείτε πως αυτή η ενότητα +θα μοιάζει κάπως έτσι: + + Option "XkbRules" "xfree86" + Option "XkbModel" "pc101" + Option "XkbLayout" "us,el" + Option "XkbOptions" "grp:alt_shift_toggle" + +Η δεύτερη γραμμή μπορεί να είναι διαφορετική, ανάλογα με πόσα πλήκτρα έχει το πληκτρολόγιό σας (προφανώς, αν υπάρχει ήδη γραμμή XkbModel μπορείτε απλά να την +κρατήσετε), ενώ η τέταρτη δηλώνει με ποιό συνδυασμό πλήκτρων μπορείτε να αλλάξετε από το αγγλικό στο ελληνικό πληκτρολόγιο, και μπορεί να είναι \"grp:toggle\" +(με AltGr), \"grp:shift\_toggle\" (τα δύο Shift μαζί), \"grp:ctrl\_shift\_toggle\", \"grp:ctrl\_alt\_toggle\" και \"grp:caps\_toggle\" (αυτά τα τρία νομίζω +είναι προφανή). + +### [3.2 Για Χ 4.1.0 ώς και X 4.2.1]{#ss3.2} + +Αν έχετε Χ 4.1.0 έως και X 4.2.1, τότε για να έχετε ελληνικά, αρκεί να πάτε σε κάποιο εργαλείο ρύθμισης των Χ (όπως το xf86config, το xf86cfg, το XF86Setup κλπ) +και στην επιλογή για το πληκτρολόγιο να επιλέξετε το ελληνικό. Στη συνέχεια, θα πρέπει να ανοίξετε το κατάλληλο αρχείο XF86Config (ανάλογα με τη διανομή σας, +π.χ. το /etc/X11/XF86Config ή το /etc/X11/XF86Config-4) και να πάτε στην ενότητα του πληκτρολογίου ( Section \"Keyboard\" ) και να σιγουρευτείτε πως αυτή η +ενότητα θα μοιάζει κάπως έτσι: + + Option "XkbRules" "xfree86" + Option "XkbModel" "pc101" + Option "XkbLayout" "el" + Option "XkbOptions" "grp:alt_shift_toggle" + +Η δεύτερη γραμμή μπορεί να είναι διαφορετική, ανάλογα με πόσα πλήκτρα έχει το πληκτρολόγιό σας (προφανώς, αν υπάρχει ήδη γραμμή XkbModel μπορείτε απλά να την +κρατήσετε), ενώ η τέταρτη δηλώνει με ποιό συνδυασμό πλήκτρων μπορείτε να αλλάξετε από το αγγλικό στο ελληνικό πληκτρολόγιο, και μπορεί να είναι \"grp:toggle\" +(με AltGr), \"grp:shift\_toggle\" (τα δύο Shift μαζί), \"grp:ctrl\_shift\_toggle\", \"grp:ctrl\_alt\_toggle\" και \"grp:caps\_toggle\" (αυτά τα τρία νομίζω +είναι προφανή). + +### [3.3 Για Χ 4.0.2 και 4.0.3]{#ss3.3} + +Αν έχετε είτε Χ 4.0.2 είτε 4.0.3, τότε για να έχετε ελληνικά, αρκεί να πάτε σε κάποιο εργαλείο ρύθμισης των Χ (όπως το xf86config, το xf86cfg, το XF86Setup κλπ) +και στην επιλογή για το πληκτρολόγιο να επιλέξετε το ελληνικό. Στη συνέχεια, θα πρέπει να ανοίξετε το κατάλληλο αρχείο XF86Config (ανάλογα με τη διανομή σας, +π.χ. το /etc/X11/XF86Config ή το /etc/X11/XF86Config-4) και να πάτε στην ενότητα του πληκτρολογίου ( Section \"Keyboard\" ) και να σιγουρευτείτε πως αυτή η +ενότητα θα μοιάζει κάπως έτσι: + + Option "XkbRules" "xfree86" + Option "XkbModel" "pc101" + Option "XkbLayout" "gr" + Option "XkbOptions" "grp:ctrl_shift_toggle" + +Η δεύτερη γραμμή μπορεί να είναι διαφορετική, ανάλογα με πόσα πλήκτρα έχει το πληκτρολόγιό σας (προφανώς, αν υπάρχει ήδη γραμμή XkbModel μπορείτε απλά να την +κρατήσετε), ενώ η τέταρτη δηλώνει με ποιό συνδυασμό πλήκτρων μπορείτε να αλλάξετε από το αγγλικό στο ελληνικό πληκτρολόγιο, και μπορεί να είναι \"grp:toggle\" +(με AltGr), \"grp:shift\_toggle\" (τα δύο Shift μαζί), \"grp:ctrl\_shift\_toggle\", \"grp:ctrl\_alt\_toggle\" και \"grp:caps\_toggle\" (αυτά τα τρία νομίζω +είναι προφανή). + +### [3.4 Για Χ μικρότερα από 4.0.1]{#ss3.4} + +Το επόμενο απαραίτητο βήμα είναι η ενημέρωση των αρχείων των Χ και η ενεργοποίηση του ελληνικού πληκτρολογίου. Θα πρέπει να κάνετε τις εξής ενέργειες: + +Πρώτα θα πρέπει να έχετε τα αρχεία el και Compose. Μπορείτε να τα βρείτε συμπιεσμένα στο . + +1. Αντιγράφετε το Compose στο /usr/X11R6/lib/X11/locale/iso8859-7/. + +2. Προσθέτετε την παρακάτω γραμμή στο /usr/X11R6/lib/X11/locale/compose.dir: + + iso8859-7/Compose el_GR.ISO8859-7 + +3. Αντιγράφετε το el στο /usr/X11R6/lib/X11/xkb/symbols/. + +4. Προσθέτετε την παρακάτω γραμμή στο /usr/X11R6/lib/X11/xkb/symbols.dir: + + -dp----- a------- el(basic) + +5. Στο /etc/X11/XF86Config, στο section \"Keyboard\", σβήνετε όλες τις επιλογές του XKB, και στη θέση τους βάζετε τις εξής: + + XkbRules "xfree86" + XkbModel "pc104" + XkbLayout "el" + XkbOptions "grp:toggle" + + (Η παραπάνω σύνταξη είναι για Χ 3.3.x. Για Χ 4.x η σύνταξη είναι η εξής): + + Option "XkbRules" "xfree86" + Option "XkbModel" "pc101" + Option "XkbLayout" "el" + Option "XkbOptions" "grp:ctrl_shift_toggle" + + H δεύτερη γραμμή μπορεί να είναι διαφορετική, ανάλογα με πόσα πλήκτρα έχει το πληκτρολόγιό σας (προφανώς, αν υπάρχει ήδη γραμμή XkbModel μπορείτε απλά να + την κρατήσετε), ενώ η τέταρτη δηλώνει με ποιό συνδυασμό πλήκτρων μπορείτε να αλλάξετε από το αγγλικό στο ελληνικό πληκτρολόγιο, και μπορεί να είναι + \"grp:toggle\" (με AltGr), \"grp:shift\_toggle\" (τα δύο Shift μαζί), \"grp:ctrl\_shift\_toggle\", \"grp:ctrl\_alt\_toggle\" και \"grp:caps\_toggle\" (αυτά + τα τρία νομίζω είναι προφανή). + +6. Ξαναξεκινάτε τον X server σας. Αυτό ήταν! + + +### [4. Για την κονσόλα και μόνο]{#s4} + +- Σιγουρευόμαστε πως το αρχείο /etc/inputrc περιέχει τις εξής γραμμές: + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + set meta-flag on + set convert-meta off + set output-meta on + + ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +- Εκτελούμε με τη σειρά τις εξής εντολές: + + **\$ echo -ne \"\\033(K\\033)K\" \>/dev/tty**\ + **\$ setfont iso07.16**\ + **\$ loadkeys gr** + + Τώρα χρησιμοποιώντας το Alt+Shift μπορούμε να αλλάξουμε σε ελληνικό πληκτρολόγιο και να γράψουμε ελληνικά. + + Αν οι παραπάνω εντολές δεν δουλέψουν στο RedHat 8.0 και πάνω, δοκιμάστε τις εξής εντολές: + + **\$ echo -ne \"\\033(K\\033)K\" \>/dev/tty**\ + **\$ setfont iso07u-16.psfu.gz -u /lib/kbd/consoletrans/8859-7\_to\_uni.trans**\ + **\$ loadkeys gr** + + **Για το Debian**, θα χρειαστεί να χρησιμοποιήσετε την εντολή consolechars αντί της setfont, δηλαδή οι εντολές θα είναι κάπως έτσι: + + **\$ echo -ne \"\\033(K\\033)K\" \>/dev/tty**\ + **\$ consolechars -f /usr/share/consolefonts/iso07.f16.psf.gz**\ + **\$ loadkeys gr** + + +### [5. Για GTK+ 2.x / GNOME 2.x εφαρμογές]{#s5} + +Λόγω ενός bug στο gtk+ 2.x, δεν εμφανίζονται οι τόνοι στις εφαρμογές. Για να επιλύσετε το συγκεκριμένο πρόβλημα, θα χρειαστεί να προσθέσετε τις παρακάτω γραμμές +στο \~/.bashrc ή \~/.bash\_profile ή \~/.bash\_login (ή όποιο άλλο είναι το αρχείο εκκίνησης του shell σας): + + export GTK_IM_MODULE=xim + + +### [6. Για το Netscape της σειράς 4.x]{#s6} + +Για να εχουμε ελληνικά στη γραμμή που δίνουμε τις διευθύνσεις και παντού στο email, αντιγράφουμε το αρχείο Netscape.ad απο τον κατάλογο +/usr/doc/netscape-communicator-4.xx/ (αν ο netscape είναι εγκατεστημένος από μορφή .rpm ή από τον κατάλογο που τον εγκαταστήσατε, σε περίπτωση μορφής .tar.gz) +στο /usr/X11R6/lib/X11/app-defaults/ και το μετονομάζουμε σε Netscape. Το ανοίγουμε με τον joe ή με άλλον επεξεργαστή και στη γραμμή 5567, 5568, 5569 (σημειώστε +ότι οι αριθμοί των σειρών αλλάζουν από έκδοση σε έκδοση, θα τους βρείτε όμως γύρω στη γραμμή 5500+) όπου λέει adobe βάζουμε \* δηλ πρέπει να είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmTextField.fontList: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmText.fontlist: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + *XmList*fontlist: -*-courier-medium-r-*-*-*-120-*-*-*-*-iso8859-* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Επίσης, στη γραμμή 5600,5601,5602 αντικαθιστούμε το -\*-helvetica με -greek-helvetica και το 100 με 120 δηλαδή πρέπει να είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + *XmLGrid*fontList:\ + -greek-helvetica-medium-r-*-*-*-120-*-*-*-*-iso8859-*,\ + -greek-helvetica-bold-r-*-*-*-120-*-*-*-*-iso8859-*=BOLD,\ + -greek-helvetica-medium-o-*-*-*-120-*-*-*-*-iso8859-*=ITALIC + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +ΤΕΛΕΙΩΣΑΜΕ + +Ξεκινάμε τον Netscape και απο το view -\> encoding επιλέγουμε το Greek (ISO-8859-7) και πάλι απο το ίδιο μενού το \"Set Default Encoding\" και στο +Εdit-\>Preferences-\>Appearance-\>fonts το \"Greek(iso-8859-7)\" και ορίζουμε ποιές γραμματοσειρές θέλουμε. Οι καλύτερες είναι οι Courier (Greek). Tο ίδιο +κάνουμε για το \"Western(iso-8859-1)\" έτσι ώστε να μπορούμε να γράψουμε ελληνικά στις φόρμες και στο mail τύπου text/plain. + + +### [7. \*BSD Compatibility]{#s7} + +Ναι, καλά θα το καταλάβατε. Όλα αυτά για τα Χ ισχύουν σε οποιοδήποτε Unix σύστημα που τρέχει X-Windows (προσοχή, για τα Χ μόνο, όχι και για την κονσόλα). Οι +γραμματοσειρές Graphis εγκαθίστανται και σε FreeBSD και σε \*BSD. Παρόλα αυτά, αν σαν ενδιαφέρει το θέμα των ελληνικών στα \*BSD, τότε πρέπει οπωσδήποτε να +επισκεφτείτε το web site του [Greek BSD Project](http://www.bsd.gr) και να δείτε τις οδηγίες που προσφέρουν τα παιδιά για τα \*BSD τόσο για την κονσόλα, όσο και +για τα Χ, όσο και τις γραμματοσειρές που έχουν φτιάξει. + + +### [8. Credits]{#s8} + +Τα παιδιά που εργάστηκαν ώστε εσείς να βλέπετε ελληνικά είναι οι: + +- To Graphis team ( ) και ιδιαιτέρως ο Παναγιώτης Κατσαλούλης. +- Βασίλης Βασαΐτης. Το section για τη ρύθμιση των Χ προέρχεται από δικό του e-mail στην i18n mailing list. Ο Παναγιώτης και ο Βασίλης είναι οι δημιουργοί των + el και Compose. +- Όλα τα παιδιά στην i18n mailing list. +- To Σίμο Ξενιτέλλη και όλο το team που μεταφράζει τα προγράμματα που βλέπετε και χρησιμοποιείτε στα ελληνικά. +- Τους Αλέξανδρο Παπαδόπουλο και Ιωάννη Παπαϊωάννου για τις Debian specific οδηγίες. +- Όλους όσους ξέχασα να αναφέρω, όσους κατά λάθος αδίκησα αναφέροντας λιγότερα από όσα έχουν κάνει και όσους απλά αγνοώ ότι έχουν προσφέρει. Καλά θα κάνουν να + μου στείλουν αμέσως ένα e-mail για να αποκαταστήσω την αλήθεια ;-) + diff --git a/content/articles/32/04_traffic.md b/content/articles/32/04_traffic.md new file mode 100644 index 0000000..3c158af --- /dev/null +++ b/content/articles/32/04_traffic.md @@ -0,0 +1,250 @@ ++++ +title = 'Traffic Shaping - Queueing algorithms' +date = '' +description = '' +author = 'Στέφανος Χαρχαλάκης' +issue = ['Magaz 32'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μία σύντομη εισαγωγή σε queueing algorithmsς και της εφαρμογής τους σε δίκτυα υπολογιστών.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. FIFO** +------------------------------------- + +- [1.1 Γενικά](#ss1.1) +- [1.2 Λειτουργία](#ss1.2) +- [1.3 pfifo\_fast](#ss1.3) +- [1.4 Πλεονεκτήματα/Μειονεκτήματα](#ss1.4) + +**2. Stochastic Fairness Queueing (SFQ)** +------------------------------------------------------------------- + +- [2.1 Γενικά](#ss2.1) +- [2.2 Λειτουργία](#ss2.2) + +**3. Random Early Detection (RED)** +------------------------------------------------------------- + +- [3.1 Γενικά](#ss3.1) +- [3.2 Λειτουργία](#ss3.2) + +**4. Αναφορές:** +------------------------------------------ + + +### [1. FIFO]{#s1} + +### [1.1 Γενικά]{#ss1.1} + +Ο αλγόριθμος FIFO είναι ο ποιο απλός απ\' όσους μπορούν να εφαρμοστούν για την διαχείριση της ουράς σε έναν network interface. Είναι ιδιαίτερα απλός και συνήθως +αποτελεί την default αντιμετώπιση. + +### [1.2 Λειτουργία]{#ss1.2} + +Η λειτουργία του βασίζεται στα εξής χαρακτηριστικά: + +- Υπάρχει μία ουρά με σταθερό μέγεθος σε bytes ή πακέτα. +- Όσο η ουρά δεν είναι γεμάτη, κάθε πακέτο που έρχεται τοποθετείται στο τέλος της ουράς. +- Όταν πρόκειται να σταλεί ένα πακέτο στο δίκτυο, επιλέγεται το πρώτο από την ουρά. +- Όταν η ουρά είναι γεμάτη, κάθε πακέτο που έρχεται απορρίπτεται. Ο τρόπος αυτός ονομάζεται tail-drop. + +### [1.3 pfifo\_fast]{#ss1.3} + +Ο pfifo\_fast αποτελεί μια παραλλαγή του FIFO. Ακολουθεί την ίδια λογική, αλλά χωρίζει την ουρά σε τρία bands. Στη συνέχεια, κάθε πακέτο που έρχεται +τοποθετείται σε ένα από τα τρία bands, ανάλογα με την τιμή του TOS πεδίου. Το πεδίο αυτό έχει μέγεθος 4 bits, κάθε ένα από τα οποία έχει και άλλη σημασία: + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/32/img/fig1.png) + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η ταξινόμηση των πακέτων σε κάθε ένα από τα τρία bands γίνεται όπως φαίνεται στον πίνακα. + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/32/img/fig2.png) + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ποτέ δεν στέλνεται πακέτο από την band 1 όταν υπάρχει κάποιο στη band 0, ούτε από την band 2 όταν υπάρχει κάποιο στη band 1. + +### [1.4 Πλεονεκτήματα/Μειονεκτήματα]{#ss1.4} + +Το μόνο πλεονέκτημα του αλγόριθμου είναι η ταχύτητά και η απλότητά του. Στην πράξη δεν έχει καλά αποτελέσματα όταν υπάρχει συμφόρηση σε κάποια γραμμή, αλλά +χρησιμοποιείται με επιτυχία σε γρήγορα interfaces όπου δεν παρατηρείται συμφόρηση. + + +### [2. Stochastic Fairness Queueing (SFQ)]{#s2} + +### [2.1 Γενικά]{#ss2.1} + +Ο αλγόριθμος SFQ προσπαθεί να λύσει το πρόβλημα που δημιουργεί ο FIFO όταν κάποιο μηχάνημα του δικτύου προκαλεί υπερβολική κίνηση. Απευθύνεται κυρίως σε μικρά +τοπικά δίκτυα για τα σημεία όπου υπάρχει συμφόρηση. + +### [2.2 Λειτουργία]{#ss2.2} + +Ο SFQ δημιουργεί πολλά slots του ενός πακέτου, στα οποία ταξινομεί τα πακέτα και στη συνέχεια επιλέγει το επόμενο από αυτά που θα σταλεί στο δίκτυο με κυκλικό +(Round-Robin) τρόπο. Πιο συγκεκριμένα: + +- Δημιουργεί 128 διαφορετικά slots του ενός πακέτου. +- Κάθε πακέτο το οποίο έρχεται κατευθύνεται ένα από αυτά. +- Αν το slot είναι κατειλημμένο τότε το πακέτο απορρίπτεται, αλλιώς τοποθετείται μέσα σε αυτό. + +Στη συνέχεια, όταν πρόκειται να δρομολογήσει ένα πακέτο στο δίκτυο, παίρνει το πρώτο που υπάρχει στην \`\`επόμενη\'\' ουρά. + +#### Hashing + +Η τοποθέτηση του κάθε πακέτου σε κάθε ένα από τα 128 slots γίνεται με την βοήθεια ενός αλγόριθμου hashing. Για τον υπολογισμού του hash key λαμβάνονται υπόψη: + +**Για IPv4 πακέτα:** + +: Η source IP address, η destination IP address και το πρωτόκολλο (TCP,UDP, \...). + +**Για IPv6 πακέτα:** + +: Η source IP address, η destination IP address και η τιμή ενός εσωτερικού pointer. + +**Για τα υπόλοιπα:** + +: Οι τιμές τριών εσωτερικών pointers. + +Επίσης χρησιμοποιείται και ένας τυχαίος αριθμός ο οποίος προέρχεται από το δίκτυο και ο οποίος αλλάζει κάθε 10 δευτερόλεπτα \-- το χρονικό διάστημα ονομάζεται +perturb \-- και είναι παραμετροποιήσιμο. + +Ο σκοπός του hashing είναι να αναγνωρίζει flows και να τα διαχωρίζει, δίνοντας ίσες ευκαιρίες στους χρήστες του δικτύου, ακόμα και αν κάποιος δημιουργεί +υπερβολική κίνηση. Λόγω του ότι τα hash keys δεν είναι μοναδικά, χρησιμοποιείται ο τυχαίος αριθμός που αναφέρθηκε, ο οποίος ουσιαστικά μεταβάλει τον αλγόριθμο +κάθε 10 δευτερόλεπτα. + +#### Αποστολή πακέτων + +Η επιλογή του επόμενου πακέτου προς αποστολή γίνεται με κυκλικό τρόπο (Round-Robin), επιλέγοντας ένα πακέτο από την επόμενη στοίβα κάθε φορά. Με τον τρόπο αυτό, +τα flows τα οποία παρουσιάζουν κίνηση μπορούν να δημιουργήσουν 128 φορές μικρότερο πρόβλημα στο δίκτυο. + +#### Παράδειγμα + +Ο τρόπος λειτουργίας του SFQ φαίνεται στο σχήμα. Τη στιγμή όπου η ουρά των 128 πακέτων είναι γεμάτη, ένα πακέτο έχει φύγει για το δίκτυο ελευθερώνοντας χώρο για +ένα καινούριο το οποίο θα καταλάβει τη θέση του. Την ίδια στιγμή, ένα άλλο πακέτο θα απορριφθεί γιατί το slot για το οποίο προορίζονταν είναι κατειλημμένο. + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/32/img/fig7.png) + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#### Πλεονεκτήματα/Μειονεκτήματα + +Όπως αναφέρθηκε, ο SFQ προορίζεται για μικρά τοπικά δίκτυα όπου μπορεί να εξασφαλίσει την ομαλή λειτουργία. Έχει το πλεονέκτημα της ταχύτητας και της απλότητας, +μιας και δεν απαιτεί ιδιαίτερους υπολογισμούς για τη λειτουργία του. + +Το πρόβλημά του είναι το μικρό μήκος ουράς (μόλις 128 πακέτα), το οποίο οδηγεί σε πολύ μεγάλο αριθμό χαμένων πακέτων. Κάτι τέτοιο είναι αποδεκτό και ίσως και +επιθυμητό σε περιπτώσεις όπου ένα flow/slot αντιστοιχεί σε έναν μόνο υπολογιστή του τοπικού δικτύου, αλλά δημιουργεί προβλήματα σε μεγαλύτερα δίκτυα. + + +### [3. Random Early Detection (RED)]{#s3} + +### [3.1 Γενικά]{#ss3.1} + +Ο αλγόριθμος αυτός είναι μία άλλη αντιμετώπιση της FIFO ουράς. Σκοπός του είναι να μην αφήσει την FIFO ουρά να γεμίσει, απορρίπτοντας επιλεκτικά πακέτα όταν +χρειάζεται. + +### [3.2 Λειτουργία]{#ss3.2} + +Η απόρριψη των πακέτων γίνεται στατιστικά, όταν το **μέσο** μέγεθος της ουράς ξεπεράσει κάποιο όριο. + +Ο αλγόριθμος δέχεται τις εξής παραμέτρους: + +**Minimum queue length: (min\_q)** + +: Το μέσο μέγεθος της ουράς το οποίο πρέπει να ξεπεραστεί πριν αρχίσει ο αλγόριθμος να εξετάζει πιθανή απόρριψη πακέτων. + +**Maximum queue length: (max\_q)** + +: Το μέσο μέγεθος της ουράς κάτω από το οποίο προσπαθεί να την κρατάει πάντα ο αλγόριθμος. Ονομάζεται και soft limit. + +**Queue limit: (qlim)** + +: Το απόλυτο μέγιστο μέγεθος της ουράς. Αν το φτάσει τότε ο αλγόριθμος μετατρέπεται σε FIFO. Ονομάζεται και hard limit. + +**Average packet size: (avg\_p)** + +: Το μέσο μέγεθος του κάθε πακέτου. Με βάση αυτό γίνεται ο υπολογισμός όλων των υπόλοιπων. + +**Burst size: (burst)** + +: Το μέγιστο επιτρεπόμενο μέγεθος των bursts , ώστε να μην απορρίπτονται πακέτα όταν δεν υπάρχει πραγματική συμφόρηση. + +Ο αλγόριθμος δεν αναγνωρίζει flows όπως κάποιοι άλλοι και στηρίζεται στην τυχαία επιλογή πακέτων. Η λειτουργία του βασίζεται στο μέσο μέγεθος της ουράς +(avg\_q), το οποίο υπολογίζεται με την άφιξη κάθε νέου πακέτου σύμφωνα με τον τύπο: + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/32/img/fig3.png) + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + +όπου cql είναι το τρέχον μέγεθος της ουράς (current queue length), m είναι ο χρόνος κατά τον οποίο η ουρά δεν είναι άδεια και W είναι μία τιμή που υπολογίζεται +ως συνάρτηση των burst, min\_q και avg\_p έτσι ώστε να ισχύει: + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/32/img/fig4.png) + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το W ονομάζεται και βάρος της ουράς (Queue Weight) και υποδηλώνει το κατά πόσο επηρεάζουν το avg\_q οι νέες τιμές της. Όσο μεγαλύτερο είναι το W, τόσο +μεγαλύτερη σημασία έχουν προσωρινές αυξομειώσεις της ουράς \-- δηλώνει το κατά πόσο πρέπει να \`\`θυμάται\'\' ο αλγόριθμος τα παλαιότερα μεγέθη της ουράς. + +Η μεταχείριση του κάθε πακέτου μεταβάλλεται ανάλογα με το avg\_q: + +- **avg\_p \< min\_q** + + Το πακέτο δεν επηρεάζεται. + +- **min\_q \< avg\_q \< max\_q** + + Στο πακέτο αποδίδεται μια πιθανότητα p\_b: + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/32/img/fig5.png) + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + + όπου max\_p είναι η μέγιστη επιθυμητή τιμή του p\_b. Ταυτόχρονα υπάρχει ένας counter ο οποίος αυξάνεται με κάθε πακέτο όταν το avg\_q βρίσκεται σε αυτά τα + όρια. Στη συνέχεια υπολογίζεται η πιθανότητα απόρριψης p\_a: + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + \ + ![](/32/img/fig6.png) + + --------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Τέλος χρησιμοποιείται ένας τυχαίος αριθμός R, μεταξύ των 0 και 1, σύμφωνα με τον οποίο απορρίπτεται το πακέτο αν ο R είναι μικρότερος του p\_a. + +- **avg\_q \> max\_q** + + Το πακέτο απορρίπτεται. + +Επειδή η απόρριψη των πακέτων γίνεται με στατιστικό τρόπο, τα flows τα οποία δημιουργούν μεγαλύτερη κίνηση έχουν περισσότερες πιθανότητες να χάσουν πακέτα μιας +και στέλνουν δεδομένα ποιο συχνά στο δρομολογητή. + +#### Πλεονεκτήματα/Μειονεκτήματα + +Ο RED αποτελεί μια πολύ καλή λύση για την αντιμετώπιση της συμφόρησης του δικτύου ενώ ταυτόχρονα βοηθάει το TCP/IP να βρει σχετικά σύντομα το σωστό ρυθμό +αποστολής δεδομένων. + +Λόγω του ότι δεν αναγνωρίζει flows δεν έχει τη δυνατότητα να παρέχει μεγάλη δικαιοσύνη κάτι το οποίο δεν αποτελεί και σκοπό του. + + +### [4. Αναφορές:]{#s4} + +- Bert Hubert, Gregory Maxwell, Remco van Mook, Martijn van Oosterhout, Paul B Schroeder, Jasper Spaans, Pedro Larroy. Linux Advanced Routing & Traffic + Control HOWTO, +- Sally Floyd and Van Jacobson. Random Early Detection Gateways for Congestion Avoidance. University of California, 1993 +- Linux kernel 2.4.20 sources + diff --git a/content/articles/32/05_rce1.md b/content/articles/32/05_rce1.md new file mode 100644 index 0000000..43c2490 --- /dev/null +++ b/content/articles/32/05_rce1.md @@ -0,0 +1,682 @@ ++++ +title = 'Reverse Engineering σε Περιβάλλον Linux, Μέρος 0' +date = '2003-04-01T00:00:00Z' +description = '' +author = 'Φραντζής Αλέξανδρος (aka Alf)' +issue = ['Magaz 32'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Reverse Engineering, από τη σκοπιά του απλού χρήστη :-)* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Μέρος 0 - Εισαγωγή στο Reverse Code Engineering** +----------------------------------------------------------------------------- + +**2. Γιατί RCE** +--------------------------------------- + +**3. Tools of the trade.** +------------------------------------------------- + +**4. GDB - Ο παρεξηγημένος debugger** +------------------------------------------------------------ + +- [4.1 GDB - Τα βασικά](#ss4.1) + +**5. Πρόκληση 0** +---------------------------------------- + + +### [1. Μέρος 0 - Εισαγωγή στο Reverse Code Engineering]{#s1} + +\"In the beginning the Universe was created. This has made a lot of people very angry and been widely regarded as a bad move.\"- HGG Book 2 + +Τη δεκαετία του \'60-\'70 τα προγράμματα άρχισαν να μεγαλώνουν και να γίνονται χαώδη (βλέπε ΙΒΜ OS/360). Ο Dikjstra προσπάθησε να βάλει τάξη αλλά ήταν ήδη αργά +:) Πολλοί προγραμματιστές βρέθηκαν στη δύσκολη κατάσταση να λαμβάνουν τόνους παρατημένου κώδικα (σε assembly βέβαια) που έπρεπε να χρησιμοποιήσουν. Τα σχόλια +που συνόδευαν τα προγράμματα ήταν συχνά λειψά και στη χειρότερη περίπτωση λανθασμένα(!). Οι επιλογές ήταν δύο· να ξαναγραφεί ο κώδικας από την αρχή ή να +χρησιμοποιηθεί (με τα χίλια ζόρια) όπως είναι. Οποιοσδήποτε, όμως, δρόμος απαιτούσε την πλήρη κατανόηση του ήδη υπάρχοντος κώδικα. Ήταν μια δύσκολη δουλειά αλλά +κάποιος έπρεπε να την κάνει. Έτσι λοιπόν γεννήθηκε το Reverse Code Engineering. + +Σήμερα τα πράγματα είναι πολύ διαφορετικά από τη μεριά των developers. Οι εφαρμογές αναπτύσσονται σχεδόν αποκλειστικά σε γλώσσες υψηλού επιπέδου (και με +εργαλεία ακόμα πιο υψηλού επιπέδου). Οι ίδιοι οι προγραμματιστές, τις περισσότερες φορές, δεν έρχονται σε επαφή με τον object κώδικα που παράγουν οι compilers. +Τα έτοιμα modules, που καλούνται να χρησιμοποιήσουν, είναι σε μορφή πηγαίου κώδικα ή σε βιβλιοθήκες με καλά καθορισμένη διεπαφή. + +Μπορεί η διαδικασία παραγωγής να έχει αλλάξει, ο τελικός χρήστης όμως έχει στα χέρια του ότι και παλιότερα: μια ακατανόητη, για την πλειονότητα, σειρά από bytes +(εξαιρούνται τα open source) κρυμμένα πίσω από στρώματα αφαιρετικότητας (πχ εικονίδιο). Τώρα πια η τέχνη του RCE εξασκείται κυρίως από περίεργους χρήστες και +σπάνια από developers. + +Τώρα έφτασε η μαγική στιγμή για να ορίσουμε το Reverse Code Engineering. Σε ελεύθερη μετάφραση στα ελληνικά ονομάζεται Αντίστροφη Μηχανική Κώδικα και είναι η +διαδικασία κατά την οποία εξάγεται η λειτουργικότητα ενός προγράμματος από τον κώδικα του, ο οποίος συνήθως βρίσκεται σε κάποια \"δύσπεπτη\" (συνήθως assembly) +μορφή. + +Σε αυτό το σημείο θα ήταν σκόπιμο να αναφερθούμε λίγο στη έννοια cracker. Σε κάποιον εκτός των πραγμάτων ίσως να θυμίζει τα μπισκότα που δίνουμε στους +παπαγάλους (Poly wanna cracker?). Συχνά συνδέεται με τον κόσμο των δικτύων και αναφέρεται στον κακόβουλο hacker ο οποίος σπέρνει την καταστροφή στο πέρασμα του +:) Στον σύμπαν του RCE το cracking αναφέρεται στη διαδικασία, κατά την οποία προσπαθούμε να ξεπεράσουμε ένα σύστημα ασφαλείας στο επίπεδο του λογισμικού (πχ +copy protection). Είναι ουσιαστικά υποκατηγορία του RCE διότι αν και χρησιμοποιεί τις ίδιες τεχνικές έχει πιο περιορισμένο σκοπό και σπάνια απαιτεί την πλήρη +κατανόηση του λογισμικού. + + +### [2. Γιατί RCE]{#s2} + +- 1\. **Γνώση**: Η παρατήρηση της εσωτερικής δομής των προγραμμάτων οδηγεί σε καλύτερη κατανόηση της λειτουργίας τους αλλά και του υπολογιστή γενικότερα. +- 2\. **Σιγουριά**: Γνωρίζοντας την εσωτερική λειτουργία ενός προγράμματος είσαι πια σίγουρος πως το λογισμικό κάνει αυτό που λέει, τίποτα λιγότερο και τίποτα + περισσότερο. +- 3\. **Ευτυχία**: Η διαδικασία του RE είναι ένα πνευματικό παιχνίδι. Αν βγεις νικητής δεν μπορείς παρά να νιώσεις ευτυχισμένος. + + +### [3. Tools of the trade.]{#s3} + +Βασική προϋπόθεση για την επιτυχία μιας προσπάθειας στο RCE είναι η γνώση των εργαλείων που υπάρχουν, των λεγόμενων tools of the trade. Τα εργαλεία χωρίζονται +σε δύο βασικές κατηγορίες ανάλογα με την προσέγγιση που χρησιμοποιούν. Από τη μία υπάρχουν τα εργαλεία που επιτρέπουν την παρακολούθηση της δυναμικής εκτέλεσης +του κώδικα και αποτελούν την live προσέγγιση. Τέτοια εργαλεία είναι οι debuggers με πιo χαρακτηριστικά παραδείγματα το πραγματικά πανίσχυρο Numega Softice για +Windows και το περιβόητο :) GDB για το linux. Από την άλλη υπάρχουν εργαλεία που παρουσιάζουν τον κώδικα σε στατική μορφή (dead listing). Αυτά είναι +disassemblers όπως w32Dasm, IDA (τρέχει σε windows αλλά υποστηρίζει και ELF-linux εκτελέσιμα) και biew, ldasm (linux). Στο linux οι περισσότεροι disassemblers +είναι scripts που χρησιμοποιούν την έξοδο του objdump, που περιέχεται στα binutils. Τέλος αξίζει να αναφερθούμε σε μια υβριδική κατηγορία εργαλείων τα οποία εγώ +ονομάζω undead. Αυτά παρουσιάζουν την δυναμική εκτέλεση του κώδικα αλλά δεν δίνουν τη δυνατότητα τροποποίησης της εξέλιξης του. Συνήθως οι πληροφορίες που +δίνουν είναι πιο υψηλού επιπέδου από assembly. Παράδειγμα τέτοιου εργαλείου είναι το strace που καταγράφει τα system calls που κλήθηκαν από ένα πρόγραμμα. + + +### [4. GDB - Ο παρεξηγημένος debugger]{#s4} + +O GDB (GNU DeBugger) αποτελεί πνευματικό παιδί του Richard Stallman, ιδρυτή του FSF (Free Software Foundation). Υποστηρίζει πολλές αρχιτεκτονικές (x86, alpha, +MIPS\...) και γλώσσες υψηλού επιπέδου (C, C++, Fortran, Modula-2, Pascal, CHILL). Υποστηρίζει (conditional, hardware) breakpoints, remote debugging. Έχει, +λοιπόν, όλα εκείνα τα χαρακτηριστικά που τον καθιστούν έναν πολύ ισχυρό debugger. Ποίο είναι το πρόβλημα λοιπόν; + +Όπως δηλώνει και ο τίτλος, ο GDB είναι ο ορισμός του παρεξηγημένου debugger. Κατά καιρούς έχει χαρακτηριστεί με επίθετα όπως \"brain-damaged\", άδικα κατά την +ταπεινή μου γνώμη. Το βασικό επιχείρημα των πολέμιων του GDB είναι το user interface. Και όντως, το UI καμία σχέση δεν έχει με το γραφικό περιβάλλον πχ του M\$ +Visual Studio. Εδώ έχουμε να κάνουμε με command line σε όλο της το μεγαλείο! Όσοι έχουν ασχοληθεί με το Softice στα windows καταλαβαίνουν τι εννοώ. Βέβαια +πολλοί έσπευσαν να βελτιώσουν την κατάσταση και έτσι σήμερα υπάρχει μία πληθώρα από front-ends: το built-in Text User Interface (TUI) σε curses, +DataDisplayDebugger (DDD) για Χ11/Motif, Kdbg gia KDE κ.α. Στο κείμενο αυτό θα ασχοληθούμε με την απλή μορφή του GDB (άντε και με το TUI :) ). Θα αρχίσουμε με +source-code debugging\... + +### [4.1 GDB - Τα βασικά]{#ss4.1} + +Βασική δυνατότητα ενός debugger είναι η παρακολούθηση της εκτέλεσης ενός άλλου προγράμματος και η εν δυνάμει αλλαγή της εξέλιξης του είτε άμεσα, είτε έμμεσα +μέσω της αλλαγής των δεδομένων του. Στο κομμάτι αυτό θα χρησιμοποιηθεί ως παράδειγμα ο παρακάτω C κώδικας: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + + int main(int argc, char **argv) + { + int num; + + if (argc < 2) { + printf("Usage: %s \n",argv[0]); + exit(1); + } + + num=alf(argv[1]); + + if (num > 10) + printf("Ok!\n"); + else + printf("Failed!\n"); + } + + int alf(char *s) + { + return atoi(s); + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κάντε compile με : gcc -g -o rce1 rce1.c + +To flag -g λέει στον compiler να περιλάβει στο εκτελέσιμο αρχείο εκτός από το symbol table, πληροφορίες που χρειάζεται ο GDB για source-code debugging. Αν ένα +πρόγραμμα δεν έχει τέτοιες πληροφορίες τότε μπορούμε μόνο να δούμε τον assembly κώδικα (και τα σύμβολα). + +Το παραπάνω (παντελώς άχρηστο) πρόγραμμα το μόνο που κάνει είναι να ελέγχει αν η πρώτη παράμετρος στη γραμμή εντολής είναι μεγαλύτερη από 10 και τυπώνει το +κατάλληλο μήνυμα. + +#### Φόρτωμα προγράμματος + +Καταρχάς πρέπει να φορτώσουμε το πρόγραμμα στο GDB: + +> bash$ gdb -q rce1 +> (gdb) +> +> + +Το switch -q/\--quiet λέει στον gdb να μη δείχνει τα εισαγωγικά μηνύματα. Από εδώ και πέρα θα εννοείται ακόμα και αν δεν γράφεται (πχ alias gdb =\"gdb -q\"). + +Το (gdb) prompt δηλώνει πως ο debugger έχει σταματήσει το πρόγραμμα και είναι έτοιμος να δεχτεί εντολές. Παρατηρήστε πως ο GDB δεν έγραψε κάποιο μήνυμα +επιβεβαίωσης ότι έγινε σωστά το φόρτωμα του rce1. Εφόσον δεν υπάρχει μήνυμα λάθους η διαδικασία ολοκληρώθηκε επιτυχώς. + +H έξοδος από τον debugger γίνεται με την \"quit\"/\"q\" + +> (gdb) q +> bash$ +> +> + +Μια εναλλακτική μέθοδος για να φορτώνουμε αρχεία είναι με την εντολή **file** του GDB. Η **file** φορτώνει το εκτελέσιμο στη μνήμη ΚΑΙ το symbol table στον GDB. +Υπάρχει και η exec-file η οποία φορτώνει μόνο τo εκτελέσιμο στη μνήμη. + +> bash$ gdb +> (gdb) file rce1 +> Reading symbols from rce1...done. +> (gdb) +> +> + +Σημείωση: Ο GDB περιλαμβάνει ένα αρκετά πλήρες σύστημα βοήθειας με την εντολή **help**. + +> (gdb) help file +> Use FILE as program to be debugged. +> It is read for its symbols, for getting the contents of pure memory, +> and it is the program executed when you use the `run' command. +> If FILE cannot be found as specified, your execution directory path +> ($PATH) is searched for a command of that name. +> No arg means to have no executable file and no symbols. +> (gdb) +> +> + +Για να δούμε τον κώδικα που έχουμε φορτώσει χρησιμοποιούμε τη εντολή **list**. Η εντολή έχει διάφορες μορφές. Χωρίς παραμέτρους εμφανίζει 10 γραμμές πηγαίου +κώδικα γύρω από την τρέχουσα ή τις πρώτες 10 γραμμές αν το πρόγραμμα δεν εκτελείται. + +> (gdb) list +> 1 #include +> 2 +> 3 int main(int argc, char **argv) +> 4 { +> 5 int num; +> 6 +> 7 if (argc<2) { +> 8 printf("Usage: %s \n",argv[0]); +> 9 exit(1); +> 10 } +> (gdb) +> +> + +Αν η **list** έχει μία παράμετρο τότε εμφανίζει 10 γραμμές κώδικα γύρω από αυτή ενώ μπορούμε να προσδιορίσουμε και ένα διάστημα ***list x,y*** + +> (gdb) list 8 +> 3 int main(int argc, char **argv) +> 4 { +> 5 int num; +> 6 +> 7 if (argc<2) { +> 8 printf("Usage: %s \n",argv[0]); +> 9 exit(1); +> 10 } +> 11 +> 12 num=alf(argv[1]); +> (gdb) list 9,14 +> 9 exit(1); +> 10 } +> 11 +> 12 num=alf(argv[1]); +> 13 +> 14 if (num>10) +> (gdb) +> +> + +#### Εκτέλεση + +Αφού το πρόγραμμα έχει φορτωθεί μπορούμε να το εκτελέσουμε με την εντολή **run** ή **r**. Η **run** δέχεται ως παραμέτρους τα command-line arguments που θέλουμε +να περάσουμε στο πρόγραμμα. + +> (gbd) r +> Starting program: /home/alf/temp/rce1 +> Usage: /home/alf/temp/rce1 Program exited with code 01. +> (gdb) r 42 +> Starting program: /home/alf/temp/rce1 42 +> Ok! +> Program exited with code 04. +> (gdb) r 3 +> Starting program: /home/alf/temp/rce1 3 +> Failed! +> Program exited with code 07. +> (gdb) r +> Starting program: /home/alf/temp/rce1 3 +> Failed! +> Program exited with code 07. +> +> + +Παρατηρήστε ότι στην απλή **r** τα command-line arguments παραμένουν από την προηγούμενη εκτέλεση. Αυτά είναι αποθηκευμένα στην εσωτερική μεταβλητή του GDB +\"args\". Υπάρχει μια πληθώρα από εσωτερικές μεταβλητές που μπορούν να προσπελαστούν με τις **show** και **set** (hint: μη ξεχνάτε το help\...). + +> (gdb) show args +> Argument list to give program being debugged when it is started is "3". +> (gdb) set args 666 7 +> (gdb) r +> Starting program: /home/alf/temp/rce1 666 7 +> Ok! +> Program exited with code 04. +> (gdb) +> +> + +Βέβαια ως εδώ το μόνο που έχουμε κάνει είναι\... τίποτα! Τα ίδια και με πιο απλό τρόπο θα μπορούσαν να γίνουν από τo command line ενώ εμείς θέλουμε να ελέγχουμε +το πρόγραμμα βήμα προς βήμα. + +Για να γίνει αυτό, πρέπει να φροντίσουμε ο έλεγχος να επιστρέψει πίσω στον debugger όταν αρχίσει το πρόγραμμα. Για την ώρα δεχτείτε αυτή την εντολή χωρίς +εξηγήσεις (λίγο υπομονή βρε παιδιά!) + +> (gdb) break main +> Breakpoint 1 at 0x8048466: file rce1.c, line 7. +> (gdb) r +> Starting program: /home/alf/projects/rce1 +> +> Breakpoint 1, main (argc=1, argv=0xbffff7e4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) +> +> + +Αυτό που κάναμε ήταν να πούμε στον GDB να σταματήσει την εκτέλεση του προγράμματος όταν μπει στη συνάρτηση main. Τώρα είμαστε πριν την εκτέλεση της πρώτης +εντολής της main και ο GDB περιμένει οδηγίες. Για να εκτελέσουμε την τρέχουσα εντολή χρησιμοποιούμε την εντολή **next** ή **n**: + +> (gdb) next +> 8 printf("Usage: %s \n",argv[0]); +> (gdb) n +> Usage: /home/alf/projects/rce1 9 exit(1); +> (gdb) n +> +> Program exited with code 01. +> +> + +Επειδή δεν περάσαμε παραμέτρους στο πρόγραμμα, το argc ήταν μικρότερο του 2 και εκτυπώθηκε ο τρόπος χρήσης του προγράμματος. Ας ξαναδοκιμάσουμε: + +> (gdb) r 123 +> Starting program: /home/alf/projects/rce1 123 +> +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) n +> 12 num=alf(argv[1]); +> (gdb) n +> 14 if (num>10) +> (gdb) n +> 15 printf("Ok!\n"); +> (gdb) n +> Ok! +> 18 } +> (gdb) n +> 0x4003abb4 in __libc_start_main () from /lib/libc.so.6 +> (gdb) n +> Single stepping until exit from function __libc_start_main, +> which has no line number information. +> +> Program exited with code 04. +> (gdb) +> +> + +Παρατηρήστε ότι μετά τη γραμμή 18 το πρόγραμμα δεν κάνει exit αλλά επιστρέφουμε σε μια συνάρτηση που ανήκει στην libc.so.6. Επειδή δεν έχουμε debugging +πληροφορίες για αυτή, η **next** απλώς προχωράει μέχρι να τελειώσει η συνάρτηση. Αυτό που συμβαίνει ακριβώς είναι ότι με την **next** προχωράμε μια γραμμή +κώδικα αλλά o GDB δεν έχει πληροφορίες για ποίες εντολές assembly αντιστοιχούν σε κάθε γραμμή, οπότε δεν ξέρει πόσο να προχωρήσει. H \_\_libc\_start\_main() +είναι στην πραγματικότητα η πρώτη συνάρτηση που έχει κληθεί από το πρόγραμμα μας και έχει στόχο να αρχικοποιήσει την libc και μετά να καλέσει τη δική μας main +(περισσότερα για αυτό στο επόμενο μέρος, όταν θα ασχοληθούμε με την assembly μορφή του κώδικα). + +Αν ενώ είμαστε στον GDB θέλουμε να συνεχίσει κανονικά η εκτέλεση του προγράμματος μπορούμε να χρησιμοποιήσουμε την εντολή **continue** ή **c**. To πρόγραμμα +συνεχίζει μέχρι να συναντήσει κάποιο breakpoint ή να τερματιστεί. + +> (gdb) r 123 +> Starting program: /home/alf/projects/rce1 123 +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) n +> 12 num=alf(argv[1]); +> (gdb) c +> Continuing. +> Ok! +> Program exited with code 01. +> (gdb) +> +> + +Εκτός από την **next** υπάρχει και η **step** ή **s** η οποία κάνει ότι και η **next** με τη διαφορά ότι αν η τρέχουσα εντολή είναι κλήση συνάρτησης η **step** +μπαίνει μέσα στον κώδικα της συνάρτησης. + +> (gdb) r 123 +> Starting program: /home/alf/projects/rce1 123 +> +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) n +> 12 num=alf(argv[1]); +> (gdb) s +> alf (s=0xbffff94f "123") at rce1.c:25 +> 25 return atoi(s); +> (gdb) n +> 26 } +> (gdb) n +> main (argc=2, argv=0xbffff7e4) at rce1.c:14 +> 14 if (num>10) +> (gdb) c +> Continuing. +> Ok! +> Program exited with code 01. +> (gdb) +> +> + +Ας δοκιμάσουμε μερικές ακόμη εντολές: + +> (gdb) r 123 abc +> Starting program: /home/alf/projects/rce1 123 abc +> +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) print argc +> $1 = 3 +> (gdb) set argc=6 +> (gdb) print argc +> $2 = 6 +> (gdb) set argc=argc-2 +> (gdb) print argc +> $3 = 4 +> +> + +Παραπάνω είδαμε δύο σημαντικές εντολές για να εξετάζουμε δεδομένα, την **print** και την **set** (η οποία όπως είδαμε χρησιμοποιείται και για εσωτερικές +μεταβλητές). Είναι πολύ βασικό να σημειωθεί πως ό,τι ακολουθεί τις **print** και **set** είναι έκφραση της C, γεγονός που μας δίνει ιδιαίτερη ευελιξία O GDB +αναγνωρίζει αυτόματα τον τύπο της έκφρασης και παρουσιάζει τα δεδομένα με τον κατάλληλο τρόπο. + +> (gdb) print &argc +> $4 = (int *) 0xbffff790 +> (gdb) print &argc + 1 +> $5 = (int *) 0xbffff794 +> (gdb) print (char *)&argc + 1 +> $6 = 0xbffff791 "" +> +> + +Στην πρώτη εντολή λέμε στον GDB να τυπώσει την διεύθυνση της μεταβλητής argc. Το αποτέλεσμα της δεύτερης εντολής ίσως να φαίνεται λίγο παράξενο. Πολλοί θα +περίμεναν να είναι 0xbffff791. Επειδή η argc είναι τύπου int που στη συγκεκριμένη περίπτωση είναι 4 bytes το &argc + 1 δείχνει 4 bytes μπροστά. Γενικά, αν p +είναι δείκτης σε τύπο Τ, το p + n δείχνει στη θέση μνήμης p+n\*sizeof(T) ( εδώ &argc + 1\*sizeof(int) ). Αν κάνουμε cast το &argc σε (char \*) το αποτέλεσμα +είναι το αναμενόμενο, διότι ο char είναι εξ ορισμού 1 byte. + +> (gdb) print argv[1] +> $7 = 0xbffff94a "123" +> (gdb) print argv[2] +> $8 = 0xbffff94d "abc" +> (gdb) print argv[0] +> $9 = 0xbffff932 "/home/alf/projects/rce1" +> +> + +Ο GDB αναγνωρίζει πως οι μεταβλητές πρόκειται για strings (char \*) και εμφανίζει το περιεχόμενο τους. Ας παίξουμε λίγο με τα strings :) + +> (gdb) set argv[1]="555" +> (gdb) print argv[1] +> $10 = 0x8049588 "555" +> +> + +Παρατηρείστε πως ο GDB έκανε μία σοφή κίνηση: δέσμευσε μόνος του χώρο για το καινούργιο string και άλλαξε τον δείκτη argv\[1\] να δείχνει στον καινούργιο χώρο. +O παλιός έμεινε όπως είναι: + +> (gdb) print (char *)0xbffff94a +> $11 = 0xbffff94a "123" +> +> + +#### Breakpoints + +Μετά από όλα αυτά, ήρθε επιτέλους η ώρα να ασχοληθούμε με ένα από τα πιο σημαντικά στοιχεία ενός debugger, τα breakpoints. Όπως δηλώνει και το όνομα τους είναι +σημεία στον κώδικα όπου διακόπτεται η εκτέλεση και ο έλεγχος επιστρέφει στον debugger. H βασική εντολή στον GDB για να τεθεί ένα BP είναι η **break** ή **b**. +Δέχεται (στη βασική της μορφή) μία παράμετρο: το σημείο όπου θα διακοπεί η εκτέλεση. Η παράμετρος έχει τις εξής μορφές: + +- 1\. Το αρχείο(προαιρετικά) και τη γραμμή του πηγαίου κώδικα \[file:\]line +- 2\. Το όνομα μιας συνάρτησης πχ main +- 3\. Μια θέση μνήμης πχ \*0x8048560 (προσέξτε το \'\*\') + +Χρήσιμες εντολές για τα BPs είναι η **info break** η οποία είναι εμφανές τι κάνει :), η **delete \[n\]** η οποία σβήνει το BP \#n (η όλα αν δεν προσδιορίσουμε +αριθμό), η **disable \[n\]** η οποία απενεργοποιεί προσωρινά το BP \#n (η όλα\...) και η αντίθετη της, η **enable \[n\]**. + +> bash$ gdb rce1 +> (gdb) break main +> Breakpoint 1 at 0x804839c: file rce1.c, line 7. +> (gdb) break alf +> Breakpoint 2 at 0x804840c: file rce1.c, line 25. +> (gdb) info break +> Num Type Disp Enb Address What +> 1 breakpoint keep y 0x0804839c in main at rce1.c:7 +> 2 breakpoint keep y 0x0804840c in alf at rce1.c:25 +> (gdb) disable 1 +> (gdb) info break +> Num Type Disp Enb Address What +> 1 breakpoint keep n 0x0804839c in main at rce1.c:7 +> 2 breakpoint keep y 0x0804840c in alf at rce1.c:25 +> (gdb) r 1 +> Starting program: /home/alf/projects/rce1 1 +> +> Breakpoint 2, alf (s=0xbffff951 "1") at rce1.c:25 +> 25 return atoi(s); +> (gdb) n +> 26 } +> (gdb) n +> main (argc=2, argv=0xbffff7e4) at rce1.c:14 +> 14 if (num>10) +> (gdb) c +> Continuing. +> Failed! +> +> Program exited with code 01. +> (gdb) +> +> + +Μια εναλλακτική (και πολύ χρήσιμη) μορφή της **break** είναι η **break \... if expr**, με τη οποία η εκτέλεση διακόπτεται μόνο αν η έκφραση *expr* είναι αληθής. + +> bash$ gdb rce1 +> (gdb) list 10 +> 5 int num; +> 6 +> 7 if (argc<2) { +> 8 printf("Usage: %s \n",argv[0]); +> 9 exit(1); +> 10 } +> 11 +> 12 num=alf(argv[1]); +> 13 +> 14 if (num>10) +> (gdb) break 14 if (num==10) +> Breakpoint 1 at 0x80483d7: file rce1.c, line 14. +> (gdb) info break +> Num Type Disp Enb Address What +> 1 breakpoint keep y 0x080483d7 in main at rce1.c:14 +> stop only if num == 10 +> (gdb) r 4 +> Starting program: /home/alf/projects/rce1 4 +> Failed! +> +> Program exited with code 01. +> (gdb) r 10 +> Starting program: /home/alf/projects/rce1 10 +> +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:14 +> 14 if (num>10) +> (gdb) c +> Continuing. +> Failed! +> +> Program exited with code 01. +> (gdb) +> +> + +Για να αλλάξουμε τη συνθήκη ενός breakpoint υπάρχει η εντολή **cond n \[expr\]** η οποία αλλάζει τη συνθήκη του BP \#n σε *expr*(ή τίποτα). + +Επίσης είναι δυνατόν να καθορίσουμε μια σειρά από ενέργειες που θα εκτελούνται όταν \"χτυπάει\" ένα BP. Αυτό γίνεται με την + +> commands n +> list +> end +> +> + +Ένα δείγμα του τι δυνατότητες μας δίνει το σύστημα: + +> (gdb) break 14 if (numi<=10) +> Breakpoint 1 at 0x80483d7: file rce1.c, line 14. +> (gdb) commands 1 +> Type commands for when breakpoint 1 is hit, one per line. +> End with a line saying just "end". +> >set num=13 +> >c +> >end +> (gdb) r 20 +> Starting program: /home/alf/projects/rce1 20 +> Ok! +> +> Program exited with code 01. +> (gdb) r 3 +> Starting program: /home/alf/projects/rce1 3 +> +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:14 +> 14 if (num>10) +> Ok! +> +> Program exited with code 01. +> (gdb) +> +> + +Το breakpoint \"χτυπάει\" αλλά συνεχίζει αυτόματα, διότι η τελευταία εντολή στο command list είναι η **continue**. Καταφέραμε με αυτόν τον τρόπο να κάνουμε το +πρόγραμμα να τυπώνει πάντα Ok!, ανεξάρτητα από την τιμή της παραμέτρου στη γραμμή εντολής! Βέβαια, αυτό γίνεται μόνο όταν τρέχουμε το πρόγραμμα μέσα από το GDB. +Υπομονή μερικά τεύχη για μια καλύτερη λύση\... + +Μια παραλλαγή είναι η **tbreak** (temporary breakpoint) που έχει ακριβώς την ίδια σύνταξη με την **break** αλλά εκτελείται μόνο μια φορά (γίνεται disabled +μετά). Πρακτικά είναι ισοδύναμη με την ακολουθία: + +> break xyz +> commands 3 --> Αν υποθέσουμε πως το breakpoint είναι το #3 +> disable 3 +> end +> +> + +#### Watchpoints + +Τα watchpoints είναι breakpoints τα οποία δεν ενεργοποιούνται με κριτήριο την εκτέλεση μιας εντολής αλλά την αλλαγή μιας θέσης μνήμης. Για να θέσουμε ένα +watchpoint χρησιμοποιούμε την εντολή **watch**! + +> (gdb) watch num +> No symbol "num" in current context. +> (gdb) break main +> Breakpoint 1 at 0x804839c: file rce1.c, line 7. +> (gdb) r 11 +> Starting program: /home/alf/projects/rce1 11 +> +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) watch num +> Hardware watchpoint 2: num +> (gdb) c +> Continuing. +> Hardware watchpoint 2: num +> +> Old value = 1075130932 +> New value = 11 +> main (argc=2, argv=0xbffff7e4) at rce1.c:14 +> 14 if (num>10) +> (gdb) c +> Continuing. +> Failed! +> +> Watchpoint 2 deleted because the program has left the block in +> which its expression is valid. +> 0x4003abb4 in __libc_start_main () from /lib/libc.so.6 +> (gdb) c +> Continuing. +> +> Program exited with code 01. +> (gdb) +> +> + +Η πρώτη εντολή (**watch num**) απέτυχε διότι η *num* είναι τοπική μεταβλητή και έχει νόημα μόνο μέσα στη main(). Οπότε πρέπει να είμαστε στη main() για να +αναφερθούμε σε αυτή. Τελικά ο GDB μας ενημέρωσε πως η μεταβλητή num άλλαξε τιμή σε 11. Παρατηρήστε πως ο έλεγχος γύρισε σε εμάς αμέσως μετά την εντολή που +προκάλεσε την αλλαγή, η οποία προφανώς δεν είναι η if (num \< 10) αλλά η προηγούμενη num=alf(argv\[1\]) που δε φαίνεται πουθενά. Ύστερα ο GDB μας λέει πως το +watchpoint διαγράφηκε. Αυτό έγινε διότι η *num* ως τοπική μεταβλητή αποθηκεύεται στο σωρό (stack) και μετά την έξοδο από τη συνάρτηση στην οποία βρισκόταν (τη +main()) ο σωρός ελευθερώνεται (δε γίνεται ακριβώς έτσι, όταν εξετάσουμε τον κώδικα σε πιο χαμηλό επίπεδο θα δούμε την διαδικασία επακριβώς) + +Παρόμοια με την **watch** είναι η **rwatch** η οποία ενεργοποιείται όχι σε αλλαγή της μνήμης αλλά σε απλή ανάγνωση. + +> (gdb) break main +> Breakpoint 1 at 0x804839c: file rce1.c, line 7. +> (gdb) r 12 +> Starting program: /home/alf/projects/rce1 12 +> +> Breakpoint 1, main (argc=2, argv=0xbffff7e4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) rwatch num +> Hardware read watchpoint 2: num +> (gdb) c +> Continuing. +> Hardware read watchpoint 2: num +> +> Value = 12 +> 0x080483db in main (argc=2, argv=0xbffff7e4) at rce1.c:14 +> 14 if (num>10) +> (gdb) c +> Continuing. +> Ok! +> +> Watchpoint 2 deleted because the program has left the block in +> which its expression is valid. +> 0x4003abb4 in __libc_start_main () from /lib/libc.so.6 +> (gdb) c +> Continuing. +> +> Program exited with code 01. +> +> + +Ουφφ! Τελειώσαμε\... για την ώρα :)\ +Αυτό το πρώτο άρθρο δεν είναι και πολύ hardcore RCE αλλά ήταν απαραίτητο ώστε να τεθούν κάποιες βάσεις για αυτά που θα ακολουθήσουν. Στο επόμενο άρθρο θα +ασχοληθούμε με τη χρήση του GDB για assembly debugging και θα ρίξουμε μια πιο προσεκτική ματιά στα υπόλοιπα εργαλεία. Επίσης θα μιλήσουμε λίγο περισσότερο για +τα breakpoints και πιο συγκεκριμένα για το πως αυτά υλοποιούνται σε χαμηλό επίπεδο. + + +### [5. Πρόκληση 0]{#s5} + +Σε κάθε άρθρο θα υπάρχει ένα πρόβλημα-πρόκληση για να ασχοληθούν όσοι επιθυμούν. Εδώ τα πράγματα είναι κάπως απλά (αλλά όχι πολύ) αφού το εκτελέσιμο είναι +compiled με το -g flag, πρακτικά σας δίνω τον πηγαίο κώδικα δηλαδή. Πάντως είναι μια καλή ευκαιρία να ακονίσετε τα GDB skills και να πάρετε μια πρώτη γεύση από +RCE! + +Σκοπός της πρόκλησης είναι να βρείτε ποίος κωδικός αντιστοιχεί στο όνομα/ψευδώνυμο σας. Όποιοι θέλουν ας μου στείλουν τις απαντήσεις τους για να αναγραφούν στο +hall of fame στο επόμενο άρθρο! Οι πρώτοι τρεις παίρνουν δώρο μια ετήσια συνδρομή στο magaz :P + +πχ + +> bash$ challenge0 -h +> Magaz RCE Challenge 0 +> Use '-g' to load it into gdb +> +> bash$ challenge0 -g +> (gdb) +> +> bash$ challenge0 +> Name: alf82 +> Password: 089s33k4das +> Authentication failed! +> +> bash$ challenge0 +> Name: alf82 +> Password: 09d12iie78722 +> Authentication successful! +> +> + +Μπορείτε να κατεβάσετε το εκτελέσιμο από [εδώ](./challenge0.bz2). + +Στείλτε απαντήσεις, σχόλια, διορθώσεις, προσθήκες στο alf82 at freemail.gr. Καλό θα ήταν το subject του email να είναι της μορφής magaz-rce-\... ή κάτι τέτοιο, +για να τα ξεχωρίζω εύκολα! + +Καλό RCE! + diff --git a/content/articles/33/01_editorial.md b/content/articles/33/01_editorial.md new file mode 100644 index 0000000..3910639 --- /dev/null +++ b/content/articles/33/01_editorial.md @@ -0,0 +1,18 @@ ++++ +title = 'Editorial' +date = '2003-07-01T00:00:00Z' +description = '' +author = 'Ιατρού Μιχάλης iatrou ατ hellug.gr(mailto:iatrou%20%C3%A1%C3%B4%20hellug.gr)' +issue = ['Magaz 33'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Καλωσορίσατε στο καλοκαιρινό Magaz.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το τεύχος αυτό είναι ένα \"δώρο\" σε όλους εκείνους που, ηθελημένα ή όχι, αψηφούν τις υψηλές θερμοκρασίες (και όχι μόνο) και μένουν μακριά από τις παραλίες, +κοντά στα \"μηχανάκια\" τους. + +Καλή διασκέδαση και καλό καλοκαίρι. diff --git a/content/articles/33/02_iptun.md b/content/articles/33/02_iptun.md new file mode 100644 index 0000000..82efd7c --- /dev/null +++ b/content/articles/33/02_iptun.md @@ -0,0 +1,534 @@ ++++ +title = 'IP/Ethernet Tunnel Using Linux' +date = '2003-06-01T00:00:00Z' +description = '' +author = 'Τοπογλίδης Κων/νος' +issue = ['Magaz 33'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*IP tunnels με απλά λόγια.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +--------------------------------------- + +- [1.1 Τι είναι όμως αυτά τα IP/Ethernet Tunnels;](#ss1.1) +- [1.2 Γιατί όμως είναι χρήσιμα; Τι εφαρμογές έχουν;](#ss1.2) + +**2. Τα εργαλεία** +------------------------------------------ + +**3. Tunnel με το SSH** +----------------------------------------------- + +- [3.1 Socks 4 proxy](#ss3.1) +- [3.2 Port Forwarding](#ss3.2) +- [3.3 Και αν δεν μπορούμε να κάνουμε ssh;](#ss3.3) + +**4. Vtun - Virtual tunnel** +---------------------------------------------------- + +- [4.1 Εγκατάσταση](#ss4.1) +- [4.2 Τι θα χρειαστούμε](#ss4.2) +- [4.3 Εγκατάσταση](#ss4.3) +- [4.4 Ρύθμιση του server](#ss4.4) +- [4.5 Ρύθμιση του client](#ss4.5) +- [4.6 Και τώρα;](#ss4.6) +- [4.7 Και αν είμαστε πίσω από proxy;](#ss4.7) + +**5. FreeS/WAN** +---------------------------------------- + +**6. Επίλογος** +--------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Όλοι μας, λίγο πολύ έχουμε ακούσει κάτι για τα IP tunnels και ίσως να έχουμε ακούσει περισσότερα τώρα που υπάρχει και έξαρση με τις wireless συσκευές. + +### [1.1 Τι είναι όμως αυτά τα IP/Ethernet Tunnels;]{#ss1.1} + +Τα IP Tunnels είναι, με απλά λόγια, μια σύνδεση 2 υπολογιστών μέσω κάποιου ευρύτερου (όχι απαραίτητα) δικτύου όπως το intenet. Όμως διαφέρει από τις υπόλοιπες +συνδέσεις γιατί η σύνδεση που δημιουργείται μεταξύ των δύο υπολογιστών έχει κάποιες ιδιότητες. Για παράδειγμα, μπορεί να είναι encrypted ή και να σχηματίζουν +ένα τοπικό δίκτυο μεταξύ τους. + +### [1.2 Γιατί όμως είναι χρήσιμα; Τι εφαρμογές έχουν;]{#ss1.2} + +Η κυριότερη εφαρμογή - ίσως και ο λόγος που δημιουργήθηκαν - είναι η απομακρυσμένη και ασφαλής σύνδεση ενός υπολογιστή σε ένα εταιρικό τοπικό δίκτυο για να μην +υποκλαπούν δεδομένα και η απομακρυσμένη και ασφαλής σύνδεση δύο τοπικών δικτύων, για τον ίδιο λόγο. Οπότε μπορεί κανείς να δει την χρησιμότητα τους στα wireless +δίκτυα. Άλλο όνομα για τα IP Tunnels είναι το VPN (δηλαδή Virtual Private Network). Όμως, μπορούν να χρησιμοποιηθούν και για να \"προσπεράσει\" κάποιος έναν +πολύ \"αυστηρό\" proxy server. + + +### [2. Τα εργαλεία]{#s2} + +Υπάρχουν αρκετοί τρόποι για να κάνει κάποιος ένα Tunnel. Υπάρχουν αρκετές διανομές που είναι παρακλάδια μικρών διανομών όπως: Wolverine Firewall and VPN Server, +Astaro Security Linux που δεν είναι όμως από την άδεια χρήσης GPL. Υπάρχουν και λύσεις όπως της Cisco και άλλων εταιριών, που πωλούν ένα συγκεκριμένο μηχάνημα +και συνήθως κοστίζει αρκετά χρήματα ακόμα και για μεσαίες επιχειρήσεις. + +Φυσικά όμως, υπάρχουν και αρκετά project τα οποία είναι Free/Open Source κάτω από την GPL άδεια χρήσης. Το άρθρο θα καλύψει μερικά από αυτά όπως: tunnels με το +ssh, το vtun, και λιγότερο το FreeS/WAN. Φυσικά υπάρχουν και άλλα projects όπως το OpenVPN, το vpnd, το tinc, το SLAN, το CIPE, το Htun και άλλα. + + +### [3. Tunnel με το SSH]{#s3} + +Το ssh είναι από τα πιο γνωστά πλέον προγράμματα. Είναι για όλους σχεδόν ένα από τα πιο χρήσιμα εργαλεία για remote access. Το αγαπημένο μας ssh μπορεί να κάνει +και κάποιες άλλες δουλειές, όπως να κάνει port forwarding ή να γίνει socks 4 proxy, διοχετεύοντας όλο το traffic από το τοπικό μηχάνημα στο απομακρυσμένο. + +### [3.1 Socks 4 proxy]{#ss3.1} + +Για να γίνει το ssh ένας μικρός τοπικός socks 4 proxy το μόνο που έχετε να κάνετε είναι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ssh -D 1080 my.linux.server.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τώρα όσο είμαστε συνδεδεμένοι στο απομακρυσμένο μηχάνημα my.linux.server.gr θα παρατηρήσουμε και την port 1080 στο μηχάνημά μας να ακούει για συνδέσεις. Το +option -D ορίζει πως το τοπικό μηχάνημα θα εξυπηρετεί συνδέσεις στην port 1080. Άρα, αν ρυθμίσουμε τον φυλλομετρητή μας να χρησιμοποιεί proxy ή τον αγαπημένο +μας IRC client να χρησιμοποιεί την port 1080 σαν proxy θα παρατηρήσουμε πως όλες πλέον οι συνδέσεις μας περνούν μέσα από το secure shell που έχουμε. + +### [3.2 Port Forwarding]{#ss3.2} + +Ένα άλλο option που έχει το ssh είναι να κάνει port forwarding από και προς το απομακρυσμένο μηχάνημα. Εδώ υπάρχουν δύο περιπτώσεις. + +#### Να κάνει κάποιος forward μία port από το τοπικό μηχάνημα μέσω του ssh. + +Για να γίνει αυτό το μόνο που πρέπει να κάνουμε είναι : + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ssh -L 1080:uk.irc.gr:6667 my.linux.server.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +όπου στην προκειμένη περίπτωση, ανοίγει μια port στο τοπικό μηχάνημα και στο παράδειγμά μας η port 1080 και ότι σύνδεση γίνει εκεί μεταφέρεται αμέσως μέσω του +ssh και κάνει σύνδεση στο server uk.irc.gr στην port 6667. Με το συγκεκριμένο παράδειγμα μπορούμε να ανοίξουμε τον αγαπημένο μας IRC Client και να δώσουμε σαν +server το local μηχάνημα και port την 1080 + + /server 127.0.0.1 1080 + +και να συνδεθούμε στο GRNet και συγκεκριμένα στον server uk.irc.gr. Ομοίως, μπορούμε να κάνουμε το ίδιο και για ένα web site ή ένα ftp server. Προσωπικά βρήκα +πολύ χρήσιμο το option αυτό όταν ο διαχειριστής του proxy της εταιρίας σου επιτρέπει να κάνεις ssh άλλα δεν επιτρέπει τις port για να κάνει κανείς IRC. + +#### Να κάνει κάποιος forward μία port από το απομακρυσμένο μηχάνημα στο τοπικό μηχάνημα ή σε κάποιο άλλο στο τοπικό δίκτυο. + +Αυτό θα ήτανε ιδιαίτερα χρήσιμο αν θέλουμε να συνδεθεί κάποιος προσωρινά στο μηχάνημα μας ή σε κάποιο μηχάνημα στο τοπικό μας δίκτυο. Με την εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ssh -R 5100:192.168.0.3:80 my.linux.server.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +ανοίγουμε την port 5100 στο μηχάνημα my.linux.server.gr και του ορίζουμε πως θα ανακατευθύνει ότι συνδέσεις γίνονται εκεί μέσω του ssh στο μηχάνημα 192.168.0.3 +και στην port 80 (που είναι οι web υπηρεσίες συνήθως). Έν ολίγοις αν στο μηχάνημα μας 192.168.0.3 έχουμε κάποιο web server όποιος χρήστης πάει να δει το site +http://my.linux.server.gr:5100/ στην πραγματικότητα θα δει τον web server μας. + +Σημείωση: Για να ανοίξουμε ports μικρότερα από την port 1024 θα πρέπει να έχουμε root access στα αντίστοιχα μηχανήματα, δηλαδή στο 3.2.2 πρέπει να έχουμε root +access στο απομακρυσμένο μηχάνημα και στην ενότητα 3.2.1 θα πρέπει να έχουμε root access στο μηχάνημα το οποίο βρισκόμαστε. + +### [3.3 Και αν δεν μπορούμε να κάνουμε ssh;]{#ss3.3} + +Σε πολλές περιπτώσεις όμως, για πολλούς και διάφορους λόγους, κάποιος \"κακός\" διαχειριστής δεν μας αφήνει να έχουμε πρόσβαση με secure shell (ssh), και +περνάει όλη την κίνηση του δικτύου προς το Internet από κάποιο proxy. Ευτυχώς όμως υπάρχουν εργαλεία που μας επιτρέπουν να μπορέσουμε να \"προσπεράσουμε\" τον +proxy. Τέτοια εργαλεία είναι: το proxytunnel, το corkscrew, το desproxy, το Http Proxy και άλλα. Ύστερα από αρκετές δοκιμές εμένα μου άρεσε περισσότερο και μου +δούλεψε αρκετά έως πολύ εύκολα το proxytunnel που δεν χρειάζεται καν root access, μπορείς να το έχεις στο home directory και υποστηρίζει και proxy +authentication. + +#### Εγκατάσταση - ρύθμιση + +Μπορείτε να κατεβάσετε το πρόγραμμα από το http://proxytunnel.sf.net/ και να το εγκαταστήσετε πολύ εύκολα, είτε να κατεβάσετε binaries. Ίσως η ρύθμισή του να +φανεί λιγάκι περίεργη αλλά είναι αρκετά εύκολη. Τα μόνα που έχετε να κάνετε είναι: + +- Να δημιουργήσετε τον κατάλογο  /.ssh στο home directory σας (mkdir  /.ssh) + +- Να δημιουργήσετε το αρχείο config (touch  /.ssh/config) + +- Να επεξεργασθείτε το αρχείο config με τον αγαπημένο σας επεξεργαστή κειμένου (πχ. vi, vim, mcedit, pico, joe ή όποιον προτιμάτε) + +- και τέλος να προσθέσετε την γραμμή + + Host foobar + + ProtocolKeepAlives 30 + + ProxyCommand /path/to/proxytunnel -g proxy.customer.com + -G 8080 -u user -s password -d my.linux.server.gr -D + 443 + + Όπου: + + \* proxy.customer.com είναι ο proxy server (μπορεί να χρησιμοποιηθεί και η IP του server) + + \* 8080 είναι η port του proxy + + \* user είναι το username που χρησιμοποιείτε για τον proxy + + \* password είναι το password για τον proxy + + \* my.linux.server.gr είναι το μηχάνημα στο οποίο θέλετε να συνδεθείτε + + \* και 443 είναι η port στο μηχάνημα αυτό (η port για το ssh συνήθως είναι η 22, αλλά μπορούμε να \"σηκώσουμε\" ssh server σε όποια port θέλουμε. Εδώ + χρησιμοποιώ την 443 γιατί σε αυτήν την port επιτρέπει ο proxy secure connections, επειδή η 443 είναι η port για https) + +Είναι πλέον έτοιμο το proxytunnel να το χρησιμοποιήσετε. Για να το χρησιμοποιήσουμε απλά γράφουμε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ssh foobar + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και το πρόγραμμα κάνει τα υπόλοιπα. Αν όλα πάνε καλά και είναι σωστές οι ρυθμίσεις θα συνδεθεί στο my.linux.server.gr χωρίς κανένα πρόβλημα. + + +### [4. Vtun - Virtual tunnel]{#s4} + +Το vtun είναι ένα πάρα πολύ καλό εύχρηστο και μικρό εργαλείο για την δημιουργία IP tunnel πάνω από ένα ήδη υπάρχον δίκτυο. Υποστηρίζει συμπίεση, κρυπτογράφηση +ακόμα και περιορισμό κίνησης (compression, encryption and traffic shaping). + +### [4.1 Εγκατάσταση]{#ss4.1} + +Μπορείτε να κατεβάσετε το vtun από το site http://vtun.sf.net/ . Υπάρχει και σαν binary πακέτα, όπως επίσης υπάρχουν και πακέτα για FreeBSD, OpenBSD και +Solaris. + +Το πρόγραμμα χρησιμοποιείται και σαν server αλλά και σαν client, ανάλογα την ρύθμιση. + +### [4.2 Τι θα χρειαστούμε]{#ss4.2} + +Τα λιγότερα πράγματα που θα χρειαστείτε για να γίνει compile είναι: + +\* Good C compiler (gcc, egcs, etc) + +\* Lexical Analyzer (flex, lex) + +\* YACC (yacc, bison, byacc) + +\* Universal TUN/TAP driver http://vtun.sourceforge.net/tun + +\* OpenSSL encryption library http://www.openssl.org + +και optional τα: + +\* Zlib compression library + +\* LZO compression library http://www.oberhumer.com/opensource/lzo + +Κατά ένα μεγάλο ποσοστό αυτό που θα χρειαστείτε και δεν θα υπάρχει ήδη στην διανομή σας είναι το TUN/TAP Driver, που θα πρέπει να κατεβάσετε και να +εγκαταστήσετε. + +### [4.3 Εγκατάσταση]{#ss4.3} + +Εφ\' όσον έχουμε όλα τα παραπάνω απλά κάνουμε unzip/untar το αρχείο + + tar xzvf vtun-2.6.tar.gz + + cd vtun + + ./configure + + make + +και τέλος σαν root για να το εγκαταστήσετε + + make install + +Την ίδια ακριβώς διαδικασία πρέπει να γίνει και στο μηχάνημα με το οποίο θέλουμε να κάνουμε το IP/Ethernet Tunnel. + +### [4.4 Ρύθμιση του server]{#ss4.4} + +Όταν εγκαταστήσουμε πλήρως και στα δύο μηχανήματα το vtun θα παρατηρήσουμε πως στον κατάλογο /etc υπάρχει το αρχείο vtund.conf, που έχει ήδη κάποια παραδείγματα +από ρυθμίσεις. Εμείς θα το ρυθμίσουμε από την αρχή. Πρώτα πρέπει να ορίσουμε τα γενικά options: + + options { + + port 5000; # Listen on this port. + + # Syslog facility + + syslog daemon; + + # Path to various programs + + ppp /usr/sbin/pppd; + + ifconfig /sbin/ifconfig; + + route /sbin/route; + + firewall /sbin/ipchains; + + ip /sbin/ip; + + } + + # Default session options + + default { + + compress no; # Compression is off by default + + speed 0; # By default maximum speed, NO shaping + + } + +Όπου στην αρχή δηλώνουμε ότι ο vtun server \"ακούει\" στην port 5000 μετά ότι θα χρησιμοποιήσει τον syslog για τα logs και μετά οι τοποθεσίες που βρίσκεται κάθε +πρόγραμμα, όπως ο pppd δαίμονας και άλλα προγράμματα που ίσως θα χρειαστούμε και τέλος ορίζουμε τα default options των συνδέσεών μας, για το αν θα έχει ή όχι +κρυπτογράφηση ή αν θα έχει όριο στο bandwidth. + +Η βασική ρύθμιση για ένα Ethernet Tunnel είναι: + +Πρέπει να ορίσουμε ένα όνομα για να αναφερόμαστε στη συγκεκριμένη ρύθμιση μιας και μπορούμε να έχουμε παραπάνω από μία. + + alekos { + +Μέτα ορίζουμε το password στον server μας + + passwd magaz; # Password + +Μετά τι τύπος tunnel θα είναι. Εδώ μπορούμε να ορίσουμε είτε ether, είτε tun, είτε tty ή pipe + + type ether; # Ethernet tunnel + +Ποια συσκευή θα χρησιμοποιήσει (αν δεν κάνετε και 2ο tunnel αφήστε το option ως έχει). + + device tap0; # Device tap0 + +Ποιο πρωτόκολλο θα χρησιμοποιήσει. Αυτό παίζει ρόλο αν είσαστε πίσω από proxy ή όχι. Προτιμήστε το udp αν δεν είσαστε πίσω από proxy, αλλιώς θα πρέπει να +χρησιμοποιήσετε το tcp. + + proto tcp; # UDP protocol + +Αν θέλουμε συμπίεση και σε τι επίπεδο (παίρνει περισσότερη επεξεργαστική ισχύ, αλλά μπορεί να δώσει περισσότερο bandwidth) + + # compress lzo:5; # LZO compression level 1 + +Αν θέλουμε να είναι το tunnel μας κρυπτογραφημένο (καταναλώνει αρκετό bandwidth). Καλό είναι να το έχουμε ενεργοποιημένο, εκτός αν το περνάμε μέσω ssh tunnel, +όπου είναι περιττό. + + encrypt no; # Encryption + +Αν θέλουμε να κρατάει log files στο syslog. + + stat yes; # Log connection statistic + +Αν θέλουμε να προσπαθεί να κρατάει την σύνδεση ενεργή αν δεν την χρησιμοποιήσουμε για κάποια ώρα. Χρήσιμο αν κάνουμε tunnels μέσω dial-up συνδέσεων ή +dial-on-demand συνδέσεων. + + keepalive yes; # Keep connection alive + +Εδώ ορίζουμε τι θέλουμε να κάνει όταν ανοίξει η σύνδεση μεταξύ server και client. + + up { # Connection is Up + +Να δώσει μία IP στο μηχάνημα (ορίζω την 192.168.0.1 μιας και είναι ο server) + + # Assign IP address + ifconfig "%% 192.168.0.1 netmask 255.255.255.0"; + +Δίνουμε και μία δρομολόγηση (routing) για να ξέρει που πάνε τα IP πακέτα + + # Add route to net + route "add -net 192.168.0.0 netmask 255.255.255.0 gw + 192.168.0.1"; + +Ενεργοποιούμε το firewall μας για masquerading (αν για παράδειγμα συνδεόμαστε στον server για να έχουμε internet access) + + # Enable masquerading for net 10.2.0.0.0/24 + # firewall "-A forward -s 192.168.0.0/24 -d 0.0.0.0/0 + -j MASQ"; + + }; + +και τέλος τι κάνουμε όταν κλείνει η σύνδεση + + down { # Connection is Down + +Κλείνουμε την συσκευή + + # Shutdown tap device. + ifconfig "%% down"; + +και απενεργοποιούμε το firewall μας + + # Disable masquerading for net 10.2.0.0.0/24 + # firewall "-D forward -s 192.168.0.0/24 -d 0.0.0.0/0 + -j MASQ"; + + }; + + } + +### [4.5 Ρύθμιση του client]{#ss4.5} + +Πάμε στο μηχάνημα που θα είναι ο client στο tunnel μας. Πάλι στον κατάλογο /etc θα βρούμε το αρχείο vtund.conf . Οι ρυθμίσεις που θα μπουν εδώ θα πρέπει να +είναι αντίστοιχες με τον server αλλά όχι ίδιες. Οπότε: + + options { + + port 5000; # Connect to this port. + + timeout 60; # General timeout + + # Path to various programs + + ppp /usr/sbin/pppd; + + ifconfig /sbin/ifconfig; + + route /sbin/route; + + firewall /sbin/ipchains; + + ip /sbin/ip; + + } + +Όπως και πριν, το πρώτο option αναφέρεται στο port που θα συνδεθεί στον server, το timeout για να κλείσει την σύνδεση και τέλος τα διάφορα προγράμματα. + +Και οι ρυθμίσεις που θα πρέπει να κάνουμε για την αντίστοιχη σύνδεση στον server. Οι ρυθμίσεις είναι στο ίδιο μοτίβο: + +Το όνομα της ρύθμισης για να αναφερόμαστε σ\' αυτήν + + alekos { + +Το password που έχουμε ορίσει στον server + + passwd magaz; # Password + +Τι τύπος tunnel θα είναι πρέπει να είναι ίδιο με τον server + + type ether; # Ethernet tunnel + +Ποια συσκευή να χρησιμοποιήσει, αφήστε το default εκτός και αν θέλετε να κάνετε πάνω από ένα tunnel + + device tap0; # Device tap0 + +Τι θα κάνει όταν γίνει η σύνδεση + + up { # Connection is Up + +Πρέπει να ορίσουμε μία IP αλλά φυσικά όχι ίδια με τον server εδώ ορίζουμε την IP 192.168.0.2 + + # Assign IP address and netmask. + ifconfig "%% 192.168.0.2 netmask 255.255.255.0"; + +Ορίζουμε και την δρομολόγηση (routing) για τα IP πακέτα + + route "add default gw 192.168.0.1"; + + }; + +Τι να κάνουμε όταν κλείσει η σύνδεση + + down { # Connection is Down + +Να κλείσει την συσκευή. + + # Shutdown tap device + ifconfig "%% down"; + }; + } + +Και στον client θα μπορούσαμε να ανοίγουμε και να κλείνουμε κάποιο firewall αν θέλαμε να περάσουμε μέσω του tunnel κίνηση (traffic) μεταξύ δύο τοπικών δικτύων. +Περισσότερα παραδείγματα θα βρείτε και στο site του vtun αλλά και στα configuration files (στο /etc/vtund.conf) που καλύπτουν σχεδόν κάθε περίπτωση IP/Ethernet +tunnel. + +### [4.6 Και τώρα;]{#ss4.6} + +Αφού ρυθμίσαμε και τον vtun server μας αλλά και τον client, ήρθε η ώρα να ενεργοποιήσουμε το tunnel που ρυθμίσαμε. + +Από τον server σαν root λοιπόν, δίνουμε την εντολή: + + vtund -s alekos + +Όπου -s είναι το option για τρέξει τον server και να περιμένει για συνδέσεις, και alekos είναι το όνομα της ρύθμισης που κάναμε στο server. Τώρα ο server μας +λειτουργεί και περιμένει να συνδεθούμε. + +Οπότε, πάμε στο client και πάλι σαν root δίνουμε την εντολή: + + vtund alekos my.linux.server.gr + +Αν όλα έχουν πάει καλά και οι ρυθμίσεις μας είναι σωστές μπορούμε να δούμε αν έχει πραγματοποιηθεί το IP tunnel μας με την εντολή: + + /sbin/ifconfig + +Όπου θα δούμε κάτι σαν: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + tap0 Link encap:Ethernet HWaddr 00:FF:AE:E8:EC:85 + + inet addr:192.168.0.2 Bcast:192.168.0.255 + Mask:255.255.255.0 + + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + + RX packets:432204 errors:0 dropped:0 overruns:0 frame:0 + + TX packets:151242 errors:0 dropped:0 overruns:0 + carrier:0 collisions:0 txqueuelen:100 + + RX bytes:612105831 (583.7 Mb) TX bytes:9998554 (9.5 Mb) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Επιτυχώς λοιπόν έχουμε φτιάξει το πρώτο μας IP Tunnel! + +### [4.7 Και αν είμαστε πίσω από proxy;]{#ss4.7} + +Φυσικά υπάρχει η περίπτωση να είμαστε πίσω από κάποιον proxy που δεν μας επιτρέπει να κάνουμε IP Tunnels. Η γνώση και οι δοκιμές που περιέχονται σε αυτό το +άρθρο αποκτήθηκαν στην προσπάθεια να \"προσπεράσουμε\" κάποιον proxy server που δεν μας επέτρεπε να κάνουμε σχεδόν τίποτα. Η λύση λοιπόν είναι η εξής: + +Κάνουμε όλα τα configurations και όλες τις ρυθμίσεις μας για το tunnel με το vtun. Επίσης ρυθμίζουμε το proxytunnel όπως περιγράφετε στο πρώτο μέρος και πρώτα +κάνουμε ένα ssh tunnel κάνοντας forward το port 5000 από το τοπικό μας μηχάνημα στο server. Παράδειγμα: + +Έστω πως το proxytunnel δουλεύει κανονικά για να κάνουμε και IP Tunnel δίνουμε: + + ssh -L 5000:127.0.0.1:5000 foobar + + Οπότε και ανοίγουμε μία σύνδεση με το μηχάνημα που + θέλουμε να κάνουμε IP Tunnel οπότε δίνουμε την εντολή: + + vtund alekos 127.0.0.1 + +και το tunnel σας λειτουργεί. + + +### [5. FreeS/WAN]{#s5} + +Το FreeS/WAN είναι ένα πρόγραμμα που υλοποιεί το IPSec πρωτόκολλο. Το IPSec δεν είναι τίποτα άλλο παρά Security for the Internet Protocol, δηλαδή είναι η +επέκταση ασφαλείας του απλού IP πρωτοκόλλου. Εν ολίγοις είναι ένα τυποποιημένο πρωτόκολλο που θα είναι μέρος της έκδοσης του Internet Protocol v6 (IPv6). Αυτό +σημαίνει πως το IPSec είναι συμβατό και με άλλες εμπορικές εφαρμογές, όπως τα VPN clients της Cisco και τα hardware firewalls (PIX) της Cisco. Με το IPSec +μπορούμε να δημιουργήσουμε VPN (Virtual Private Network), που είναι ακριβώς ίδιο με στην γενική ιδέα με το vtun αλλά τα tunnels που δημιουργούνται είναι +κρυπρογραφημένα και εξακριβωμένα (encrypted and authenticated). Που σημαίνει πως κάθε πακέτο που ανταλλάσσεται μεταξύ των δύο μηχανημάτων, ελέγχεται πρώτα για +να διαπιστωθεί αν είναι εξακριβωμένος (authenticated) ο αποστολέας και το πακέτο μετά μεταδίδεται μέσω του κρυπτογραφημένου tunnel ώστε να μην υποκλαπεί. Ένα +μεγάλο μειονέκτημα που έχει το FreeS/WAN όμως είναι ότι είναι αρκετά περίπλοκο στην εγκατάστασή του, μίας και απαιτεί μερικές αλλαγές στην ρύθμιση του πυρήνα. +Το δύσκολο κομμάτι δεν είναι στο να τα εγκαταστήσει τα επιπλέον κομμάτια, αλλά να γίνουν compile σωστά. Το άρθρο αυτό δεν θα αναφερθεί παραπάνω στο FreeS/WAN +ακόμα. Όποιο θα θέλανε να το δοκιμάσουν μπορούνε να βρούνε αρκετά πακέτα σε binary μορφή και οδηγίες από το site του FreeS/WAN, http://www.freeswan.org . Τέλος +να αναφέρω πως υπάρχουν μερικές διανομές που περιλαμβάνουν το FreeS/WAN στα CD τους. Τέτοιες διανομές όπως: + +\* SuSE Linux + +\* Conectiva + +\* Mandrake + +\* Version 3.0 of Debian will include FreeS/WAN. \"unstable\" and \"test\" versions already have it + +\* the Polish(ed) Linux Distribution + +\* Best Linux + + +### [6. Επίλογος]{#s6} + +Η δημιουργία και η υλοποίηση ενός IP Tunnel δεν είναι κάτι δύσκολο, ούτε κάτι το οποίο απαιτεί \"ειδικές\" γνώσεις και είναι αρκετά χρήσιμο σε πολλές +περιπτώσεις. Ανάλογα και την περίπτωση το κάθε πρόγραμμα έχει τα αρνητικά και τα θετικά του στοιχεία. Το καλό όμως, είναι πως υπάρχουν αρκετά Free/Open Source diff --git a/content/articles/33/03_qos1.md b/content/articles/33/03_qos1.md new file mode 100644 index 0000000..0a511b4 --- /dev/null +++ b/content/articles/33/03_qos1.md @@ -0,0 +1,320 @@ ++++ +title = 'Τιθασεύοντας την κίνηση του δικτύου σας, Μέρος 1ο' +date = '2003-06-01T00:00:00Z' +description = '' +author = 'Στοΐλης Ιωάννης giannis@stoilis.gr' +issue = ['Magaz 33'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Δυστυχώς, το Ίντερνετ στην Ελλάδα είναι είδος πολυτελείας. Για εταιρείες που το χρειάζονται απαραίτητα, είναι ένας οικονομικός βραχνάς. Η σειρά των άρθρων που +θα ακολουθήσει, αποσκοπεί στο να ρυθμίσετε, με την χρήση ενός Linux server, με τον καλύτερο δυνατό την χρήση της γραμμή σας.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Πρόλογος** +-------------------------------------- + +- [1.1 Το πρόβλημα](#ss1.1) +- [1.2 Η λύση](#ss1.2) +- [1.3 Τι θα ακολουθήσει;](#ss1.3) +- [1.4 Τι ΔΕΝ θα ακολουθήσει;](#ss1.4) +- [1.5 \"Δεν μου δουλεύει όσο καλά λες ότι λειτουργεί\"](#ss1.5) +- [1.6 Επικοινωνία](#ss1.6) + +**2. Το δίκτυο** +--------------------------------------- + +- [2.1 Σχηματική παράσταση του δικτύου.](#ss2.1) +- [2.2 Ανάλυση του δικτύου](#ss2.2) +- [2.3 Κοινές παραλλαγές του δικτύου](#ss2.3) + +**3. Proxy server** +------------------------------------------ + +- [3.1 Τι είναι ο proxy server;](#ss3.1) +- [3.2 Σε τι μηχάνημα;](#ss3.2) +- [3.3 Τι είναι το latency;](#ss3.3) +- [3.4 Ποιον proxy server;](#ss3.4) + +**4. Διαδικασία** +---------------------------------------- + +- [4.1 Download του squid](#ss4.1) +- [4.2 Μεταγλώττιση](#ss4.2) +- [4.3 Ρύθμιση του squid](#ss4.3) +- [4.4 Η πρώτη δοκιμή](#ss4.4) + +**5. ΠΡΑΓΜΑΤΙΚΗ ρύθμιση του squid** +---------------------------------------------------------- + +**6. Επίλογος** +-------------------------------------- + +- [6.1 Ανασκόπηση](#ss6.1) +- [6.2 Τι θα ακολουθήσει;](#ss6.2) + + +### [1. Πρόλογος]{#s1} + +### [1.1 Το πρόβλημα]{#ss1.1} + +Η ιστορία αυτής της σειράς άρθρων, ξεκινά από τα παράπονα μιας εταιρείας πριν από περίπου δύο χρόνια. Παραπονιόντουσαν για αργή ταχύτητα σύνδεσης με το +Ίντερνετ, παρόλο που είχαν μισθωμένη γραμμή 256kbit. Όταν πήγα να ερευνήσω το θέμα, με έκπληξη βρήκα ένα δίκτυο με περίπου 100 υπολογιστές να βγαίνουν απευθείας +στο Ίντερνετ με NAT, χωρίς proxy. Η λύση ήταν προφανής. + +### [1.2 Η λύση]{#ss1.2} + +Μέσα σε λίγες μέρες, έστησα έναν Linux proxy server και η κατάσταση βελτιώθηκε αισθητά. Με τον καιρό, αυξήθηκαν οι απαιτήσεις και δεν είχα παρά να αξιοποιήσω +τον Linux server στο μέγιστο. Χρησιμοποίησα squid access pools, active directory authentication integration, QoS με tc και παραγωγή στατιστικών για σχεδόν +οτιδήποτε είναι δυνατόν να μετρηθεί. Μετά από ένα χρόνο, το όλο εγχείρημα έχει φτάσει σε ένα ώριμο στάδιο, οπότε θεώρησα χρήσιμο να καταγράψω όλες τις κινήσεις +μου, μέσω του [magaz](http://magaz.hellug.gr), ώστε να βοηθήσω όσους περισσότερο μπορώ. + +### [1.3 Τι θα ακολουθήσει;]{#ss1.3} + +Βασικά, αυτό που θα ακολουθήσει είναι \"Τι μπορούμε να κάνουμε με ένα proxy server\". Δεν είναι πρωτότυπο σαν άρθρο, υπάρχουν παρόμοιοι οδηγοί παντού στο +Ίντερνετ, στα αγγλικά. Ελπίζω όμως να παρέχω στον Έλληνα αναγνώστη την δυνατότητα να τα βρει όλα μαζεμένα σε μια γωνιά του Ίντερνετ, αλλά επίσης φιλοδοξώ και να +εξηγήσω τον τρόπο σκέψης που θα πρέπει να έχει ένας διαχειριστή που ξέρει μεν τι να κάνει, αλλά δεν ξέρει το πως. + +### [1.4 Τι ΔΕΝ θα ακολουθήσει;]{#ss1.4} + +Αυτή η σειρά των άρθρων δεν πρόκειται σε καμία περίπτωση να καλύψει τον κάθε τρόπο που μπορεί να γίνει μια οποιαδήποτε εργασία. Υπάρχουν πραγματικά αμέτρητοι +τρόποι και αμέτρητοι συνδυασμοί προγραμμάτων, ρυθμίσεων και τοπολογίας δικτύου, για να επιτύχετε αυτό που θέλετε. Εγώ θα παραθέσω αυτά που έκανα, και τα +αποτελέσματά τους. Είναι σίγουρο ότι μπορούν να γίνουν με διαφορετικό τρόπο, ευκολότερα ή δυσκολότερα.\ +Επίσης, το άρθρο αυτό παίρνει ως δεδομένο ότι έχετε καλή γνώση του δικτύου σας, όπως επίσης και καλή γνώση διαχείρισης του Linux. + +### [1.5 \"Δεν μου δουλεύει όσο καλά λες ότι λειτουργεί\"]{#ss1.5} + +Δυστυχώς, αυτό είναι το μόνο σίγουρο. Το όλο εγχείρημα είναι αρκετά περίπλοκο και χρειάζεται αρκετό παιχνίδι και χρόνο εκ μέρους σας, για να φτάσει στο καλύτερο +δυνατό αποτέλεσμα. Ο λόγος που θα εξηγήσω τόσο λεπτομερώς τι έκανα και γιατί, είναι και για να σας δείξει πως μπορείτε να πειραματιστείτε μόνοι σας. + +. + + +### [2. Το δίκτυο]{#s2} + +### [2.1 Σχηματική παράσταση του δικτύου.]{#ss2.1} + +![](/33/img/net.gif) + +Το παραπάνω σχεδιάγραμμα αντιπροσωπεύει ένα τυπικό δίκτυο, πάνω στο οποίο θα εφαρμόσω όλες τις τεχνικές. + +### [2.2 Ανάλυση του δικτύου]{#ss2.2} + +PC1, PC2, PC3 και PC4: Αυτοί είναι κάποιοι σταθμοί εργασίας του δικτύου μας. Οι μετρήσεις μας θα γίνουν από αυτούς. Στο δικό μου δίκτυο είναι περίπου 120 οι +υπολογιστές.\ +WEB SERVER: Είναι ένας server με πραγματική διεύθυνση στο Internet, που σερβίρει τις σελίδες της εταιρείας.\ +MAIL SERVER: Είναι άλλος ένας server με πραγματική διεύθυνση στο Internet, που ασχολείται με όλα τα εισερχόμενα και εξερχόμενα e-mails της εταιρείας.\ +ΕΞΩΤΕΡΙΚΟΣ ROUTER: Μια δικτυακή συσκευή που συνδέει το εσωτερικό μας δίκτυο με το Internet μέσω μιας μισθωμένης γραμμής. Κάνει NAT και εκτελεί και χρέη +firewall. Στο δίκτυο μου είναι ένας Cisco router.\ +INTERNET: Στο δικό μου δίκτυο, η γραμμή σύνδεσης με το Internet είναι 256kbit. Βασικά, δεν έχει καμία σημασία αν έχετε μικρότερη ή μεγαλύτερη ταχύτητα από +αυτήν. Η ανάγκη των τεχνικών που αναφέρω εφαρμόζονται καλύτερα ανάλογα με το πόσοι υπολογιστές θα μοιραστούν την ταχύτητα. Όσοι περισσότεροι υπολογιστές, τόσο +μεγαλύτερη η ανάγκη για εξοικονόμηση bandwidth, είτε πρόκειται για σύνδεση 33.6kbit, είτε για 1mbit.\ +PROXY SERVER: Ο proxy server του δικτύου μας, με τον οποίο θα ασχοληθούμε. Προσέξτε ότι έχει δύο κάρτες δικτύου, μία για κάθε δίκτυο που συνδέεται. + +### [2.3 Κοινές παραλλαγές του δικτύου]{#ss2.3} + +Η πιο κοινή διαφορά του δικτύου αυτού με άλλα μικρότερα, είναι ο router. Πολλά δίκτυα έχουν ήδη έναν Linux server που κάνει το dialup στο Internet με ISDN. Δεν +έχει καμία απολύτως σημασία σε αυτά τα άρθρα, έχει όμως σημασία το θέμα της ασφάλειας, επειδή ο Linux server είναι αυτός που θα κάνει το NAT και το firewall. Η +εγκατάσταση αυτών δεν αφορά αυτό το άρθρο, θεωρώ ότι υπάρχουν ήδη. + + +### [3. Proxy server]{#s3} + +### [3.1 Τι είναι ο proxy server;]{#ss3.1} + +Proxy server ονομάζουμε οποιοδήποτε πρόγραμμα ή υπολογιστή λειτουργεί ως ενδιάμεσος για οποιαδήποτε σύνδεση δικτύου θέλουμε να κάνουμε. Ας πούμε για παράδειγμα +ότι και οι τέσσερις υπολογιστές θέλουν να συνδεθούν στην σελίδα . Χωρίς proxy, η σελίδα αυτή θα ζητηθεί από το Ίντερνετ 4 φορές. Αν +χρησιμοποιούμε proxy, η σελίδα θα ζητηθεί μια φορά, και ο proxy θα αναλάβει να κρατήσει ένα αντίγραφο στην μνήμη ή τον δίσκο του. Μετέπειτα, όποιος ζητάει την +συγκεκριμένη σελίδα, o proxy δεν χρειάζεται να την ξαναζητήσει από το internet, εξοικονομώντας έτσι bandwidth για άλλες δουλειές. + +### [3.2 Σε τι μηχάνημα;]{#ss3.2} + +Όσοι έχουν ασχοληθεί με διαχείριση Linux και Windows 2000, γνωρίζουν από πρώτο χέρι, ότι το Linux είναι πιο ελαφρύ λειτουργικό σύστημα από τα Windows. Για αυτό, +υπάρχει μια τάση να εγκαθιστούμε το Linux σε απαρχαιωμένο hardware, για λόγους οικονομίας. Η αλήθεια είναι ότι δουλεύει, και δουλεύει καλά. Υπάρχει όμως ένα +μειονέκτημα που πρέπει να λάβετε υπόψιν. Το latency. + +### [3.3 Τι είναι το latency;]{#ss3.3} + +Αφότου χρησιμοποιήσετε ένα proxy server σε ένα δίκτυο μαζί με τεχνικές QoS που θα αναλύσω σε επόμενα άρθρα, να γνωρίζετε ότι αυτομάτως θα χαθεί η \"σπιρτάδα\" +του Internet. Οι συνδέσεις σε άλλους server αντί να γίνονται αστραπιαία, μπορεί να γίνονται πλέον σε ένα δευτερόλεπτο. Οι σελίδες του Internet θα αρχίσουν να +κατεβαίνουν με μεγαλύτερη αρχική καθυστέρηση αρκετών millisecond, αλλά σε τελική ταχύτητα θα είναι σίγουρα πιο γρήγορες από το να μην χρησιμοποιείτε καθόλου +proxy server. + +Στην περίπτωση του QoS, αν δεν είναι καλο-ρυθμισμένο, αυτό το φαινόμενο μπορεί να ενταθεί σε μεγάλο βαθμό, διότι, ανάλογα με τους κανόνες που θα εφαρμόσουμε, +δίνουμε στον proxy server το δικαίωμα να σταματά κάθε πακέτο που περνά από μέσα του, να το κοιτάει, να συμβουλεύεται του κανόνες που θα του έχετε βάλει, να +κατηγοριοποιεί το πακέτο ανάλογα με την σπουδαιότητά του, και μετά να επεξεργάζεται όλα τα πακέτα που έχει στην ουρά, αρχίζοντας από τα σημαντικότερα. + +Στην περίπτωση του squid, όταν ζητάμε μια σελίδα, πρώτα ελέγχει την βάση του στην μνήμη αν έχει αυτή την σελίδα. Αν την έχει, θα πρέπει να ψάξει τον δίσκο του, +ανάμεσα σε χιλιάδες άλλες. Μετά, θα πρέπει να διαπιστώσει αν το αντίγραφο που έχει είναι ξεπερασμένο. Σε αυτή την περίπτωση, θα πρέπει να κάνει νέο αντίγραφο. +Αν διαπιστώσει ότι δεν έχει χώρο, πρέπει βρει ποια είναι η σελίδα που έχει πιο πολύ καιρό να ζητηθεί, να την σβήσει και μετά να αφήσει εκεί ένα νέο αντίγραφο +της σελίδας που θέλει, στέλνοντας (ΕΠΙΤΕΛΟΥΣ!!!) την σελίδα σε αυτόν που την ζήτησε. + +Η όλη διαδικασία, μπορεί να διαρκέσει μερικές φορές ακόμα και μερικά δευτερόλεπτα, στην χειρότερη περίπτωση. Αυτό το φαινόμενο όμως, είναι δυνατό να +ελαχιστοποιηθεί με ένα καλό και γρήγορο μηχάνημα, με γρήγορους δίσκους, και αρκετή μνήμη. Η χρήση RAID0 είναι συνηθισμένη, σε περιπτώσεις που θέλουμε να έχουμε +το καλύτερο δυνατό αποτέλεσμα. Επίσης, είναι καλό να μην τρέχει τίποτα άλλο, ώστε να μην τον απασχολούμε με περιττές εργασίες. + +Τέλος, προτείνω το μηχάνημα να είναι εξοπλισμένο με δύο καλές και επώνυμες κάρτες δικτύου. Η διαφορά τιμής μιας καλής κάρτας δικτύου από μια παλιά ή και ανώνυμη +είναι γελοία. + +### [3.4 Ποιον proxy server;]{#ss3.4} + +Υπάρχει πραγματικά μεγάλη πληθώρα proxy server στο Ίντερνετ, με τον καθένα από αυτούς να υποστηρίζει περισσότερα ή λιγότερα πρωτόκολλα και δυνατότητες. Μετά από +έρευνα, κατέληξα στον [squid](http://www.squid-cache.org/). Είναι ο πιο διαδεδομένος, είναι GPLed, υπάρχει εδώ και πολλά χρόνια, είναι σταθερός, υποστηρίζεται +από πληθώρα εφαρμογών και υποστηρίζει τις περισσότερες λειτουργίες από αυτές που μας ενδιαφέρουν. + + +### [4. Διαδικασία]{#s4} + +### [4.1 Download του squid]{#ss4.1} + +Μπορείτε να κατεβάσετε τον squid από εδώ την τελευταία stable έκδοση. + +**Σημείωση: ΠΡΕΠΕΙ να το κατεβάσετε και να το κάνετε compile, διότι μια δυνατότητα που θα χρησιμοποιήσουμε (delay pools) είναι απενεργοποιημένη από default στα +διάφορα pre-compiled binaries που περιλαμβάνονται ήδη στις διάφορες διανομές.** + +### [4.2 Μεταγλώττιση]{#ss4.2} + +Αφού το κατεβάσετε και το αποσυμπιέσετε σε ένα προσωρινό φάκελο, κάντε compile με τις εξής εντολές: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + ./configure --enable-delay-pools + make + make install + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [4.3 Ρύθμιση του squid]{#ss4.3} + +Ας σιγουρευτούμε καταρχήν ότι δουλεύει. Ξεκινήστε τον, με την εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + /usr/local/squid/bin/squid -z + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Η παραπάνω εντολή δημιουργεί την cache του. Χρειάζεται να χρησιμοποιηθεί μόνο την πρώτη φορά που θα τρέξετε το squid ή αν για οποιοδήποτε λόγο θέλετε να +μηδενίσετε την υπάρχουσα cache. + +Τώρα μπορούμε να τον τρέξουμε κανονικά με την εντολή: + +/usr/local/squid/bin/squid + +### [4.4 Η πρώτη δοκιμή]{#ss4.4} + +Ρυθμίστε τον browser από κάποιον υπολογιστή μέσα στο δίκτυο να χρησιμοποιεί ως proxy την IP διεύθυνση του proxy, με την πόρτα 3128. Δοκιμάστε να επισκεφτείτε +οποιαδήποτε σελίδα. Αν δείτε το μήνυμα \"Access Denied\", τότε είστε σε καλό δρόμο. Το μήνυμα αυτό σημαίνει ότι ο squid δεν είναι ρυθμισμένος να απαντάει σε +ερωτήματα από IP που δεν γνωρίζει. Για λόγους ασφαλείας, αυτό είναι καλό. Ας το ρυθμίσουμε και αυτό. Βάλτε τις παρακάτω παραμέτρους στο αρχείο ρυθμίσεων του +squid(/usr/local/squid/etc/squid.conf): + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + acl localnet src_ip 10.0.0.0/8 + http_access allow localnet + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**Σημαντικό: Ψάξτε το αρχείο και βάλτε την πρώτη ρύθμιση μαζί με τις ήδη υπάρχουσες. Δεν θα δημιουργηθεί πρόβλημα αν δεν το κάνετε, αλλά αν πάτε κάποτε να +κάνετε αλλαγές, θα χάσετε τον μπούσουλα.\ +Την δεύτερη ρύθμιση ΠΡΕΠΕΙ να την βάλετε ΠΡΙΝ από την υπάρχουσα παράμετρο: \"http\_access deny all\". Αν δεν το κάνετε, δεν θα μετρήσει καθόλου.** + +Κάντε reload το squid, με την εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + /usr/local/squid/bin/squid -k reconfigure + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Με αυτή την εντολή, λέμε στο squid να ξαναδιαβάσει το αρχείο ρυθμίσεών του. + +Δοκιμάστε πάλι να δείτε κάποια από την σελίδα του browser σας. Αν όλα πάνε καλά, είστε έτοιμοι για παρακάτω. + + +### [5. ΠΡΑΓΜΑΤΙΚΗ ρύθμιση του squid]{#s5} + +Αν θέλουμε απλά να παίξει, είναι εύκολο. Αν θέλουμε όμως να παίξει καλά, θα πρέπει να ρυθμίσουμε πολλά πράγματα. Κάθε παράμετρος εξηγείται σαφέστατα μέσα στο +αρχείο ρυθμίσεων. Δεν έχετε παρά να διαβάσετε τα σχόλια που προηγούνται κάθε παραμέτρου και να κάνετε δοκιμές. Επίσης, στην σελίδα του squid μπορείτε να βρείτε +το πλήρες manual του. Δυστυχώς όμως, μερικά πράγματα είναι θέματα εμπειρίας. Παρακάτω θα κοιτάξουμε μερικές από τις πιο σημαντικές ρυθμίσεις που μπορούμε να +κάνουμε. + +**http\_port IP:PORT**\ +Όπου IP, βάζουμε την εσωτερική διεύθυνση του proxy server. Όπου PORT, βάζουμε την πόρτα όπου θα δέχεται αιτήσεις. Π.χ: **http\_port 10.0.0.1:3128**. Μπορείτε να +παραλείψετε την δήλωση του IP και έτσι ο squid θα ακούει σε όλες τις διευθύνσεις του server. Για λόγους ασφαλείας, δεν προτείνεται. + +**icp\_port**\ +Ρύθμιση της πόρτας που ακούει το squid για επικοινωνία με άλλους proxy servers. To 0 το απενεργοποιεί. Απενεργοποιήστε το για να ελαφρύνετε το σύστημα. + +**cache\_dir**\ +Αυτή η παράμετρος ρυθμίζει το που θα αποθηκεύεται η cache του proxy. Π.χ: **cache\_dir ufs /usr/local/squid/cache 1000 16 256**\ +ufs: Τύπος της cache. \"ufs\" είναι το πιο stable, αφήστε το έτσι, καλύτερα.\ +/usr/local/squid/cache: Φάκελος που βρίσκεται η cache. Το καλύτερο είναι να βρίσκεται σε διαφορετικό δίσκο. Αν όχι, βάλτε το τουλάχιστον σε διαφορετική +κατάτμηση. Αν πάλι δεν μπορείτε, αφήστε το όπως είναι.\ +1000: Μέγεθος της cache, σε Megabytes. Αυτή η τιμή είναι καθαρά θέμα εμπειρίας. Κάθε administrator έχει την προσωπική του άποψη για το πόσο πρέπει να είναι. Εγώ +το υπολογίζω με τον εξής εμπειρικό τύπο: **συνολικό bandwidth ΕΠΙ αναμενόμενος χρόνος χρήσης ανά ημέρα**. Π.χ., αν το bandwidth μου είναι 256kbit ανά +δευτερόλεπτο, και η αναμενόμενη χρήση της γραμμής γίνεται για 8 ώρες την ημέρα, τότε έχουμε 921 Mbytes για αυτή την cache, για αυτή τη χρήση.\ +**ΣΗΜΕΙΩΣΗ: Αν για οποιοδήποτε λόγο αλλάξετε αυτήν την τιμή, π.χ. να την κάνετε μικρότερη για οικονομία χώρου, ΔΕΝ ΧΡΕΙΑΖΕΤΑΙ ΝΑ ΣΒΗΣΕΤΕ ΤΙΠΟΤΑ ΑΠΟ ΤΗΝ CACHE ΜΕ +ΤΟ ΧΕΡΙ (ναι, το έχω δει και αυτό). Σιγά σιγά μόνο του το squid θα την προσαρμόσει στα μέτρα που του ορίσατε.**\ +Οι υπόλοιπες παράμετροι ρυθμίζουν κάποια πράγματα για την cache, με τα οποία δεν θεωρώ σημαντικό να ασχοληθούμε. Μην τα αλλάξετε, εκτός αν ξέρετε τι κάνετε. + +**ftp\_user squid\@server.com**\ +Αυτή η παράμετρος δηλώνει το e-mail που θα δίνει το squid στους ftp servers που συνδέεται με anonymous login. Δεν έχει καμία σημασία τι θα βάλετε εδώ, αρκεί να +μοιάζει με πραγματική e-mail διεύθυνση. Η προεπιλογή του squid δεν παίζει με μερικούς ftp server που κοιτάζουν αν η e-mail διεύθυνση αυτή μοιάζει πραγματική. +Πλέον αυτό το πρόβλημα δεν φαίνεται να υπάρχει, αλλά καλύτερα να φυλάμε τα ρούχα μας. + +**shutdown\_lifetime 5 seconds**\ +Είναι το περιθώριο που θα δώσουμε στις σελίδες που ήδη κατεβαίνουν, να τελειώσουν, αφότου δώσουμε εντολή τερματισμού στο squid. Καταντά ενοχλητικό, κατά την +γνώμη μου, να περιμένεις πάνω από μερικά δευτερόλεπτα, ακόμα και αν αυτό σημαίνει ότι θα διακόψουμε κάποιους χρήστες. Ένα shutdown, γίνεται για σημαντικό λόγο +μόνο και είναι πιο σημαντικό να τελειώσει το συντομότερο δυνατόν. Βάλτε ότι πιστεύετε. + +**acl ACLNAME TYPE PARAMETERS**\ +Οι access lists είναι αυτές που δίνουν στο squid την δυνατότητα να κατηγοριοποιεί είτε τις αιτήσεις που δέχεται, είτε τις σελίδες που τραβάει. Θα τις +χρειαστείτε αρκετές φορές στην διάρκεια των άρθρων αυτών. Η συνταξή τους είναι αρκετά απλή. Ας πάρουμε τις ρυθμίσεις που βάλαμε πριν, για να αφήσουμε το squid +να δεχτεί τις αιτήσεις μας, για την πρώτη μας δοκιμή:\ +**acl localnet src\_ip 10.0.0.0/8**\ +**acl all src\_ip 0.0.0.0/0**\ +**http\_access allow localnet**\ +**http\_access deny all** Οι access lists χωρίζονται σε δύο κατηγορίες. Η πρώτη κατηγορία περιλαμβάνει το \"τι θα πιάνει\". Η δεύτερη κατηγορία, δηλώνει το \"τι +θα κάνει αυτό που πιάνει\".\ +H πρώτη γραμμή δηλώνει ότι υπάρχει μια ομάδα υπολογιστών που ονομάζεται all. Στην αυτήν την ομάδα συμπεριλαμβάνεται οποιαδήποτε IP.\ +Η δεύτερη γραμμή δηλώνει ότι υπάρχει μια ομάδα υπολογιστών που ονομάζεται \"localnet\". Σε αυτήν την ομάδα ανήκουν όλοι όσοι είναι στο subnet 10.0.0.0/8. Οι δύο +τελευταίες γραμμές, κάνουν το εξής: Λένε ότι επιτρέπεται να έχουν πρόσβαση σε σελίδες όσοι ανήκουν στο γκρουπ \"localnet\", δηλαδή όλοι οι υπολογιστές στο +δίκτυό μας. Η επόμενη γραμμή απαγορεύει την πρόσβαση σε οποιονδήποτε υπολογιστή.\ +Ο έλεγχος αυτών των παραμέτρων από το squid γίνεται από πάνω προς τα κάτω, και δεν κοιτάει παρακάτω αν βρει μια που ταιριάζει στο αίτημα που δέχτηκε. Οπότε, αν +ένας υπολογιστής του δικτύου μας ζητήσει μια σελίδα, θα \"πιαστεί\" από τον πρώτο κανόνα, θα γίνει δεκτό το αίτημα του και δεν θα προχωρήσει παραπέρα.\ +Αν όμως κάποιος υπολογιστής που δεν είναι στο δίκτυό μας ζητήσει μια σελίδα από το squid, τότε δεν θα πιαστεί παρά μόνο από τον τελευταίο μας κανόνα. Άρα, θα +απορριφθεί.\ +Οι access lists παρέχουν μεγάλη δύναμη ελέγχου στο squid και επίσης μπορούν να σας προκαλέσουν αρκετά προβλήματα αν δεν τις ρυθμίσετε σωστά.\ +Υπάρχουν πραγματικά πάρα πολλοί τρόποι για να ρυθμίσετε ποίος δεν θα βλέπει τι. Το squid έχει access lists για να απαγορεύει σελίδες ανάλογα με το όνομα του +υπολογιστή που τις ζήτησε, ανάλογα από που τις ζήτησε, ή ακόμα και αν έχει συγκεκριμένες λέξεις μέσα στο url. Π.χ, θα μπορούσαμε να απαγορεύσουμε σελίδες που +έχουν την λέξη \"porn\" μέσα στο URL τους. Για περισσότερες πληροφορίες, δείτε τις εξηγήσεις μέσα στο αρχείο ρυθμίσεων του squid, ακριβώς εκεί που αρχίζει η +πρώτη access list. + +**cache\_mgr webmaster**\ +Δηλώνει το e-mail του υπεύθυνου αυτού του proxy server. Θα εμφανίζεται σε κάθε σελίδα του squid που δηλώνει ότι υπάρχει κάποιο πρόβλημα. Βάλτε εδώ την διεύθυνσή +σας. Π.χ. netadmin\@server.com. + +**forwarded\_for off**\ +Αυτή η παράμετρος ρυθμίζει το αν θα συμπεριλαμβάνει το squid την διεύθυνση του client που ζήτησε την σελίδα, στον server από τον οποίο θα την ζητήσει. +Απενεργοποιήστε το καλύτερα. + + +### [6. Επίλογος]{#s6} + +### [6.1 Ανασκόπηση]{#ss6.1} + +Είπαμε βασικά πράγματα, όπως το τι είναι ένας proxy server και που χρειάζεται. Είπαμε για τις επιπτώσεις που θα έχει το δίκτυό μας, καλές και κακές.\ +Είπαμε πόσο εύκολο είναι να τον εγκαταστήσουμε, και πόσο δύσκολο είναι να ρυθμίσουμε τα πάντα όπως πρέπει για να δουλεύει τέλεια. Είπαμε ότι αν δεν παίξετε λίγο +με τις ρυθμίσεις, τότε πιθανότατα δεν θα παίξει με το μέγιστο των δυνατοτήτων του. + +### [6.2 Τι θα ακολουθήσει;]{#ss6.2} + +Στο επόμενο άρθρο θα ασχοληθούμε με πιο ενδιαφέροντα πράγματα, όπως το τι προγράμματα μπορούμε να χρησιμοποιήσουμε για να φτιάξουμε στατιστικά που θα μας +δείχνουν πόσο αποδοτικά λειτουργεί ο proxy server μας, αναφορές για το που πηγαίνουν οι χρήστες μας, περιορισμός ταχύτητας ανά χρήστη, έλεγχος πρόσβασης στον +proxy με την βοήθεια Windows NT domain ή Windows 2000 active directory, εξαναγκασμός χρήσης του proxy σε ένα δίκτυο, ακόμα και αν δεν το έχουν δηλώσει οι +χρήστες τους στον browser τους μέσω του transparent proxy.\ +Επίσης, θα δημοσιεύσω και μερικές access lists που θα περιορίζουν σημαντικά τα διαφημιστικά banner σε Ελλάδα και εξωτερικό, όπως επίσης και σελίδες με diff --git a/content/articles/33/04_mobile.md b/content/articles/33/04_mobile.md new file mode 100644 index 0000000..399980a --- /dev/null +++ b/content/articles/33/04_mobile.md @@ -0,0 +1,431 @@ ++++ +title = 'Επικοινωνία κινητού - υπολογιστή στο Linux' +date = '2003-06-01T00:00:00Z' +description = '' +author = 'Σιδηρόπουλος Αθανάσιος' +issue = ['Magaz 33'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή.** +----------------------------------------- + +**2. Εν αρχή είναι η σύνδεση.** +-------------------------------------------------------- + +**3. Επικοινωνία κινητού - υπολογιστή.** +----------------------------------------------------------------- + +- [3.1 Η ζωή με το kandy.](#ss3.1) +- [3.2 Η ζωή με το gsmlib.](#ss3.2) + +**4. Επίλογος** +---------------------------------------- + + +### [1. Εισαγωγή.]{#s1} + +Όλοι ξέρουμε ότι το Linux είναι ένα καταπληκτικό λειτουργικό σύστημα που εξελίσσεται ραγδαία, καταφέρνοντας πρώτο αυτό που κανένα UNIX δεν έχει καταφέρει: να +γίνει προσιτό και να καλύψει τις ανάγκες του απλού χρήστη. Σε αυτό συνέβαλαν τα γραφικά περιβάλλοντα KDE και GNOME και μια πλειάδα εφαρμογών από επεξεργαστές +κειμένου, λογιστικά φύλλα, προγράμματα παρουσιάσεων και ένα σωρό άλλα που κάνουν την ζωή μας με τον υπολογιστή ευκολότερη κάθε μέρα, ειδικά γι αυτούς που δεν +είναι συνηθισμένοι στην γραμμή εντολών. + +Μπορούμε να γράψουμε τα κείμενά μας σε επεξεργαστές WYSIWYG, να ετοιμάσουμε τις παρουσιάσεις για την δουλειά μας να υπολογίσουμε χίλια δυο πράγματα σε ένα +λογιστικό φύλο να δούμε τις φωτογραφίες μας και να ακούσουμε τα mp3 μας με την ίδια ευκολία ή ακόμα και περισσότερη κάποιες φορές από ότι άλλοι άνθρωποι μπορούν +να κάνουν χρησιμοποιώντας τα windows. + +Όμως, καλά όλα αυτά, Αλλά\... + +Αν θέλω να δημιουργήσω ένα αρχείο στον υπολογιστή μου με τα sms που μου έστειλε η κοπέλα μου; Αν θέλω να δημιουργήσω ένα άλλο αρχείο με τα sms κάποιων φίλων +μου; Θα κάθομαι και θα πληκτρολογώ ότι μου έχουν στείλει στον υπολογιστή μου; Και αν θέλω να απαντήσω ταυτόχρονα αυτά τα sms; Μήπως μετά πρέπει να παιδευτώ με +το πληκτρολόγιο του κινητού μου για να γράψω την απάντηση; Και αν θέλω να αλλάξω όλα τα νούμερα που έχω στο κινητό μου επειδή πάλη άλλαξε ο τρόπος κλίσης; (πχ. +από 093 έγινε 693). Η ακόμα χειρότερα να συγχρονίσω τον τηλεφωνικό κατάλογο του κινητού με τα περιεχόμενα ενός αντίστοιχου που διατηρώ στον υπολογιστή. Σε αυτό +το άρθρο θα δούμε πως μπορούν να γίνουν όλα τα παραπάνω, χωρίς να χαλάσουμε το uptime του Linux. + +Ναι, το Linux έχει την δυνατότητα να κάνει και αυτά τα κόλπα και ίσως και καλύτερα από ότι τα windows. Ανάλογα βέβαια και με την \"ποιότητα\" της σχετικής +εφαρμογής που μας παρέχετε. Αν και είναι ακόμα αρκετά νωρίς και δεν είναι αρκετά εξελιγμένα τα αντίστοιχα GUI και μη προγράμματα η ωρίμανση και σε αυτό το +σημείο δεν είναι τόσο μακριά. + +Άλλα αρκετά με τα εισαγωγικά. Ας πάμε στο ζουμί. + + +### [2. Εν αρχή είναι η σύνδεση.]{#s2} + +Το πρώτο πράγμα που πρέπει να καταφέρουμε για να κάνουμε όλα αυτά τα ωραία κολπάκια είναι να επιτύχουμε σύνδεση μεταξύ του προσωπικού μας υπολογιστή και του +κινητού. Αυτή μπορεί να είναι ενσύρματη (RS 232, σειριακή θύρα) είτε ασύρματη (μέσω υπέρυθρων). + +Να σημειώσουμε εδώ μια αρκετά σημαντική λεπτομέρεια. Η όλη διαδικασία δεν διαφέρει και πολύ από την σύνδεση υπολογιστή με modem. Τα περισσότερα, αν όχι όλα, +σημερινά κινητά άλλωστε ενσωματώνουν modem και απαντούν σε AT εντολές. Απλώς, έχουν μερικές ακόμη AT εντολές για να διαχειριστούν τον τηλεφωνικό κατάλογο τα sms +και άλλα. + +Στην δική μου περίπτωση έπρεπε να ακολουθήσω τον μακρύ και δύσκολο δρόμο των υπερύθρων καθότι δεν διέθετα καλώδιο που να συνδέει το κινητό μου με τον +υπολογιστή. Και ευτυχώς ο φορητός μου διέθετε υπέρυθρες (γιατί δεν διαθέτει σειριακή) γιατί δεν ήθελα να ασχοληθώ με το ψάξιμο ενός δέκτη υπερύθρων για τον +σταθερό μου υπολογιστή. + +Ας δούμε πως γίνεται. + +Καταρχάς, πρέπει να πούμε στο Linux ότι υπάρχει θύρα υπερύθρων ώστε να \"ακούει\" και εκεί, όπως κάνει με τη σειριακή. Επειδή η διανομή μου (SuSE 7.2 τότε) έχει +ετοιμάσει τα απαραίτητα για να φορτωθούν τα modules που είναι απαραίτητα για να αναγνωριστεί η υπέρυθρη θύρα, το μόνο που χρειάστηκα να κάνω είναι ένα rcirda +start. Μετά έπρεπε να βάλω το κινητό μου να βλέπει το \"ματάκι\" των υπερύθρων στο φορητό και να ενεργοποιήσω την θύρα του κινητού από το menu. Εκτελώντας από +πριν το irdump σε ένα xterm έβλεπα αμέσως να εμφανίζεται το κινητό μου. Η σύνδεση είχε επιτευχθεί. Έμενε να αξιοποιηθεί πλέον από το απαραίτητο λογισμικό. + +Αν δεν μου τα είχε έτοιμα όλα η διανομή μου, θα έπρεπε να έτρωγα κάποιες ώρες (?) διαβάζοντας το σχετικό how to για να βρω ποια είναι τα απαραίτητα modules +(αυτά που αντιστοιχούν στο hardware που διαθέτω) του πυρήνα που έπρεπε να φορτώσω (irtty & irda τουλάχιστον στην δικιά μου περίπτωση) και να ασχοληθώ με εντολές +όπως η irattach για να \"συνδέσω\" την θύρα με ένα οδηγό συσκευής. Όχι πολύ δύσκολα πράγματα δηλαδή. + + +### [3. Επικοινωνία κινητού - υπολογιστή.]{#s3} + +Προγράμματα τα οποία να μπορούν να επικοινωνούν με το κινητό τηλέφωνο για να κάνουν την δουλειά που θέλουμε στο Linux γνωρίζω (έχω χρησιμοποιήσει / δοκιμάσει) +δύο. + +Το ένα είναι μέρος του KDE, συγκεκριμένα του πακέτου pim και ονομάζεται kandy. Δυστυχώς είναι ακόμα αρκετά ανώριμο και μόλις πρόσφατα φαίνεται να το ξαναπιάσανε +για να το εξελίξουν περαιτέρω. Ακόμα κι έτσι όμως, είναι πανεύκολο στην χρήση και θα χαρώ πολύ να το δω να βελτιώνεται. Αποτελείται από δύο καρτέλες. Η μία +είναι η καρτέλα από όπου μπορείς να ελέγξεις τις διάφορες λειτουργίες που σου παρέχει το πρόγραμμα (μεταφορά τηλεφωνικού καταλόγου από το κινητό καθώς και +συγχρονισμός με τα στοιχεία που υπάρχουν στο pim). Η δεύτερη σου δίνει πλήρη πρόσβαση στις λειτουργίες του κινητού μέσω των εντολών AT και σου δίνει την +δυνατότητα για προγραμματισμό (εν μέρει) του προγράμματος για να ταιριάξει απόλυτα στις συγκεκριμένες ανάγκες του κινητού σου. Βασικός σκοπός του προγράμματος +είναι να διαχειριστεί τον τηλεφωνικό κατάλογο του κινητού τηλεφώνου, μη δίνοντας καμιά σημασία στα μηνύματα sms. + +Το άλλο είναι βασικά μία συλλογή από προγράμματά που μπορεί να διαχειριστεί πλήρως τον τηλεφωνικό κατάλογο του τηλεφώνου καθώς και τα μηνύματα sms που υπάρχουν +στην κάρτα sim. Το \"πρόβλημα\" του είναι ότι δεν έχει GUI. Για τους λάτρεις του είδους αυτό δεν είναι πρόβλημα αλλά για τον μέσο χρήστη ίσως να είναι. Ελπίζω +σύντομα να αναπτυχθεί κάποιο front-end και γι αυτό. + +Το πακέτο αυτό λέγεται gsmlib. Μπορεί κανείς να την βρει στην διεύθυνση www.phx.de/fs/gsmlib/index.html. Την στιγμή που γράφονταν το παρόν άρθρο η έκδοση ήταν +1.10. θα ασχοληθούμε κυρίως με αυτή την συλλογή καθότι είναι αρκετά ώριμη και λειτουργική και θα κάνουμε μια μικρή μόνο αναφορά στο kandy. + +### [3.1 Η ζωή με το kandy.]{#ss3.1} + +Το kandy είναι όπως είπαμε μέρος του πακέτου pim του KDE. Η τρέχουσα έκδοση είναι η 0.3 και έχει αρκετό δρόμο μπροστά του. Βασική του λειτουργία είναι η +διαχείριση του τηλεφωνικού καταλόγου του κινητού μας. Μπορεί να διαβάσει τα περιεχόμενα του (με πολύ δυσκολία και προσπάθεια σε πολλά κινητά) ή τουλάχιστον ένα +μέρος αυτού και να περάσει τα δεδομένα αυτά στο pim. Η επικονωνία με τον χρήστη επιτυγχάνεται χάρη σε δύο καρτέλες. Η κύρια καρτέλα (mobile GUI) αποτελείται από +δύο καταλόγους με τα τηλέφωνα που υπάρχουν, στο KDE address book ο ένας και στο κατάλογο του κινητού τηλεφώνου ο δεύτερος. Κάτω από κάθε ένα υπάρχουν τα κουμπιά +που θα πατήσει κανείς για να διαβάσει τα νούμερα από το κινητό τηλέφωνο ή το KDE address book καθώς και για να γράψει τα τηλέφωνά πίσω όπως τα βλέπει εκείνη την +στιγμή. Στα δεξιά μπορεί κανείς να δει πληροφορίες για το κινητό του τηλέφωνο, όπως το μοντέλο και την έκδοσή του καθώς και το ποσοστό φόρτισης της μπαταρίας.\ +Την δεύτερη καρτέλα μπορεί κανείς να την δει επιλέγοντας show -\> terminal από τα μενού. Από εδώ έχει πρόσβαση στο κινητό του τηλέφωνο σε \"χαμηλό\" επίπεδο. +Μπορεί να δώσει εντολές απευθείας στο κινητό του καθώς και να διορθώσει τις ήδη υπάρχουσες για να καλύψουν τις συγκεκριμένες ιδιαιτερότητες του κινητού του +τηλέφωνο. + +### [3.2 Η ζωή με το gsmlib.]{#ss3.2} + +Το gsmlib είναι μία βιβλιοθήκη που συνοδεύεται από ένα σετ προγραμμάτων για γραμμή εντολής. Αυτά είναι: + +- gsmpb: Πρόγραμμα διαχείρισης καταλόγου. +- gsmsctl: Διαχείριση κινητού τηλεφώνου. (ποικίλες δυνατότητες) +- gsmsmsd: Δαίμονας διαχείρισης μηνυμάτων sms. +- gsmsiectl: Δεν γνωρίζω δεν απαντώ. Μάλλον για low-level \"δουλειές\". +- gsmsendsms: Αποστολή sms σε άλλα κινητά. +- gsmsiexfer: Ούτε για αυτό γνωρίζω τίποτα. +- gsmsmsstore: Πρόγραμμα διαχείρισης sms. + +Με αυτά τα απλά προγραμματάκια είναι δυνατόν κάποιος να διαχειριστεί με πολύ μεγάλη ευκολία τον τηλεφωνικό του κατάλογο καθώς και τα μηνύματα sms που έχει +αποθηκευμένα στο κινητό του. Ας δούμε πως. + +#### Τηλεφωνικός κατάλογος κινητού τηλεφώνου. + +Ας ξεκινήσουμε με τον τηλεφωνικό κατάλογο. Γι αυτόν τον σκοπό θα χρησιμοποιήσουμε το gsmpb. Το συγκεκριμένο πρόγραμμα μπορεί να διαβάσει τον κατάλογο του +κινητού μας αλλά και να γράψει σε αυτόν. Για να διαβάσει τον τηλεφωνικό κατάλογο και να τον αποθηκεύσουμε σε ένα αρχείο στον δίσκο μας δίνουμε την ακόλουθη +εντολή. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gsmpb -b 19200 -c -d katalogos.txt -i -p MT -s /dev/ircomm0 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ας δούμε όμως τι σημαίνει αυτό το μακρινάρι. + +**-b 19200** είναι η ταχύτητα με την οποία θα γίνει η επικοινωνία μεταξύ υπολογιστή και κινητού. Δεν είναι απαραίτητο να δοθεί Η προεπιλεγμένη τιμή αν δεν δοθεί +είναι 38400bps. + +**-c** Για να πραγματοποιηθεί η αντιγραφή των περιεχομένων της \"πηγής\" στον \"προορισμό\" που ορίσαμε. + +**-d katalogos.txt** Το αρχείο προορισμού του τηλεφωνικού καταλόγου. Στην συγκεκριμένη περίπτωση είναι το katalogos.txt + +**-i** Για να υπάρχει αύξων αριθμός εγγραφής (ένδειξη θέσης) στο αρχείο που θα δημιουργήσουμε. Αν θέλουμε να γνωρίζουμε ποία ακριβώς θέση στον τηλεφωνικό +κατάλογο έχει το κάθε τηλέφωνο. Αν δεν βάλουμε το -i τότε το αρχείο θα έχει την μορφή \[όνομα \| νούμερο\]. Αν το βάλουμε θα προστεθεί και ο αύξων αριθμός +εγγραφής στην αρχή του κάθε τηλεφώνου. Ο διαχωριστής τον πεδίων είναι το \|. + +**-p MT** Εδώ είναι το ενδιαφέρον μέρος. Καταρχάς όλα τα σημερινά κινητά τηλέφωνα έχουν και δικό τους εσωτερικό τηλεφωνικό κατάλογο και δεν μας αφήνουν στον +περιορισμένο σε αριθμό εγγραφών κατάλογο της κάρτας sim. Τώρα εμείς μπορεί να θέλουμε είτε τον κατάλογό της κάρτας sim, είτε του κινητού τηλεφώνου, είτε και +τους δύο μαζί. Για να διευκρινίσουμε τι θέλουμε, δίνουμε έναν κωδικό δύο γραμμάτων. Έτσι αν θέλουμε τον κατάλογο της κάρτας sim θα δώσουμε -p SM. Αν πάλι +θέλουμε του κινητού τηλεφώνου μόνο δίνουμε -p ME. Στην περίπτωση που δώσουμε -p MT θα πάρουμε τον κατάλογο και του τηλεφώνου (πρώτα) και της κάρτας sim (αμέσως +μετά και ξεκινώντας από τον επόμενο αύξοντα αριθμό εγγραφής αν έχουμε δώσει -i) + +**-s** dev/ircomm0/ Μα φυσικά η \"πηγή\" του τηλεφωνικού μας καταλόγου. Η θύρα πού είναι συνδεδεμένο το κινητό μας τηλέφωνο. Στην συγκεκριμένη περίπτωση στην +πρώτη θύρα υπερύθρων. + +Για να κάνουμε την αντίθετη εργασία, να γράψουμε τα περιεχόμενα ενός αρχείου με ονόματα και τηλέφωνα που πιθανόν να το έχουμε διορθώσει από τον υπολογιστή μας +στο κινητό τηλέφωνο απλώς πρέπει να βάλουμε στην θέση του προορισμού την θύρα που συνδέεται το κινητό και στη θέση της πηγής το αρχείο που θέλουμε να +μεταφέρουμε. Τόσο απλά. + +Ας δούμε όμως μερικές άλλες παραμέτρους που είναι δυνατόν να χρησιμοποιήσουμε με το gsmpb. + +**-I \**\ +**\--init \**\ +Με αυτό μπορούμε να δώσουμε κάποιες εντολές αρχικοποίησης του κινητού μας. Το ποίες θα είναι αυτές, δεν το ξέρω. Ανάλογα τι γνωρίζετε ότι χρειάζεται το κινητό +σας τηλέφωνο αλλά δεν πρόκειται να το πάρει από το πρόγραμμα υπό κανονικές συνθήκες. Μάλλον δεν θα χρειαστείτε αυτή την παράμετρο, αν δεν θέλετε να κάνετε κάτι +\"περίεργο\". + +**-V**\ +**\--verbose**\ +Για να σας δείχνει τι κάνει τόση ώρα που του παίρνει για να τελειώσει την μεταφορά :-) + +**-v**\ +**\--version**\ +Ε, τα γνωστά. Τυπώνει την έκδοση του προγράμματος. + +**-X**\ +**\--xonoff**\ +Για να χρησιμοποιηθεί η μέθοδος XON/XOFF κατά την \"συνομιλία\" μεταξύ υπολογιστή / κινητού. Αν αντιμετωπίζετε δυσκολίες με την συνήθη μέθοδο χρησιμοποιήστε +αυτήν. Αν όχι, καλύτερα με την hardware μέθοδο που είναι η προεπιλογή. + +**-y**\ +**\--sychronize**\ +Αυτή η επιλογή κάνει συγχρονισμό μεταξύ των περιεχομένων \"πηγής\" και \"προορισμού\". Έτσι, αν μια εγγραφή δεν υπάρχει στον \"προορισμό\" θα προστεθεί. Αν μια +εγγραφή βρεθεί στην \"πηγή\" με όνομά που υπάρχει και στον \"προορισμό\", η εγγραφή στον \"προορισμό\" θα αλλαχθεί σύμφωνα με την εγγραφή της \"πηγής\". Εάν +όμως βρεθούν περισσότερες εγγραφές απλά θα προστεθεί μία ακόμα. Επίσης εγγραφές που δεν υπάρχουν στην πηγή θα διαγραφούν. + +**-t \**\ +**\--charset \**\ +Εδώ υπάρχει πολύ ζουμί.\ +Μπορεί κανείς να επιλέξει μία από τις διαθέσιμες στο κινητό του κωδικοσελίδες. Τα δεδομένα που θα μεταφερθούν θα είναι σε αυτήν την κωδικοσελίδα. Έτσι μπορεί +κανείς, με αρκετή προσπάθεια, να καταφέρει να μεταφέρει τα ονόματα του τηλεφωνικού καταλόγου με ελληνικά όπως τα έχει γραμμένα στο τηλέφωνό του. Όμως δυστυχώς η +προεπιλεγμένη GSM alphabet ΔΕΝ υποστηρίζει τα ελληνικά. Άρα\... πειράματα και προσπάθειες πολλές χρειάζονται, μέχρι να γίνει κάτι τέτοιο εφικτό. + +#### Αποστολή λήψη μηνυμάτων sms. + +Ως εδώ είδαμε έναν τρόπο για να διαχειριστούμε τον τηλεφωνικό κατάλογο του κινητού μας τηλεφώνου. Ας δούμε τώρα με ποία προγράμματα θα μεταφέρουμε τα μηνύματα +sms που έχουμε αποθηκευμένα στο κινητό μας. + +Ας ξεκινήσουμε με το gsmsendsms, με το οποίο μπορεί κανείς να στείλει μηνύματα sms σε άλλα κινητά τηλέφωνα. Αυτό γίνεται με την παρακάτω εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gsmsendsms -b 19200 -d /dev/ircomm0 <αριθμός τηλεφώνου> <μήνυμα> + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Θα παρατηρήσατε πιστεύω ότι το -b και -d είναι ίδια με το το προηγούμενο παράδειγμα. Αυτό συμβαίνει γιατί είναι μερικές από τις κοινές, μεταξύ των προγραμμάτων +του πακέτου, παραμέτρους. Δεδομένου ότι υπάρχει πιθανότητα να μας καλύπτουν οι προεπιλεγμένες τιμές για αυτές τις παραμέτρους, το μόνο που χρειάζονταν να +δώσουμε είναι ο αριθμός του κινητού στο οποίο θέλουμε να στείλουμε το μήνυμα και το ίδιο, φυσικά, το μήνυμα. + +Να σημειωθεί ότι η παράμετρος -d έχει σαν προεπιλογή προορισμού την θέση /dev/mobilephone οπότε ένα link με το πραγματικό device που χρησιμοποιείτε για την +επικοινωνία με το κινητό τηλέφωνο είναι απαραίτητη. + +Πρέπει να προσέξουμε ιδιαίτερα ένα σημείο. Το χρησιμοποιούμενο αλφάβητο και σε αυτήν την περίπτωση είναι το GSM alphabet (από την μεριά του κινητού) και το +latin 1 (από την μεριά του υπολογιστή). Το πρόγραμμα θεωρεί ότι το μήνυμά μας είναι γραμμένο με βάση την κωδικoσελίδα latin 1. Αν το μήνυμά μας περιέχει +χαρακτήρες που δεν υπάρχουν στην κωδικoσελίδα latin 1 σε αυτό θα αντικατασταθούν από τον GSM delta χαρακτήρα (GSM code 16). + +Υπάρχουν βέβαια και πολλές άλλες παράμετροι με τις οποίες θα μπορούσαμε να παίξουμε κι εδώ για να κάνουμε κάτι πιο περίπλοκο. Αυτές είναι: + +**-c \<ταυτότητα μηνύματος\>**\ +**\--concatenate \<ταυτότητα μηνύματος\>** + +Με αυτήν την παράμετρο μπορούμε να στείλουμε μηνύματα που είναι πολύ μεγαλύτερα από τα συνηθισμένα (160 χαρακτήρες). Το μήνυμά μας χωρίζεται σε μικρότερα με την +ίδια \"ταυτότητα\" και αύξοντα αριθμό μηνύματος. Αν το κινητό που λαμβάνει το μήνυμα μπορεί να χειριστεί αυτού του είδους τα μηνύματα θα το εμφανίσει σαν ενιαίο +μήνυμα. Ειδάλλως, θα το λάβει ως ξεχωριστά μηνύματα. + +**-C \<διεύθυνση υπηρεσίας\>**\ +**\--sca \<διεύθυνση υπηρεσίας\>** + +Ο αριθμός του κέντρου αποστολής sms μέσω του οποίου θέλουμε να αποσταλούν τα sms μας. + +**-r**\ +**\--requeststat** + +Ζητάει αναφορά για το μήνυμα που στείλαμε από το δίκτυο. + +**-t**\ +**\--test** + +Για να δούμε πώς θα φτάσει το μήνυμα μας στον προορισμό του. Μην ξεχνάτε ότι το πρόγραμμα δέχεται σαν κωδικοσελίδα του μηνύματος την latin 1 και την μετατρέπει +σε GSM alphabet για να την στείλει στο κινητό τηλέφωνο. Αν δώσουμε αυτή την παράμετρο στο πρόγραμμά τότε δεν θα στείλει το μήνυμα αλλά θα το μεταφράσει πάλι σε +latin 1 και θα μας δείξει το πώς θα φαινόταν. Οτιδήποτε είναι εκτός των χρησιμοποιούμενων κωδικοσελίδων μετατρέπεται σε ASCII code 172. + +Αφού μάθαμε να στέλνουμε sms ώρα να μάθουμε να τα αποθηκεύουμε κιόλας στον υπολογιστή μας. Αυτό μπορεί να το κάνει το πρόγραμμα gsmsmstore. Βεβαίως μπορεί να +κάνει και την αντίστροφη εργασία. Δηλαδή να αποθηκεύσουμε μηνύματα sms στην κάρτα sim του κινητού μας αν το επιθυμούμε. Αυτό γίνεται με την παρακάτω εντολή: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gsmsmstore -b 19200 -c -d arxeio.sms -s /dev/ircomm0 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Ας δούμε τι κάνει καθετί: + +Το **-b** φυσικά είναι ίδιο όπως και στα δύο προηγούμενα παραδείγματα. + +**-c** σημαίνει αντέγραψε τα περιεχόμενα της πηγής στον προορισμό. Αν στο τέλος της εντολής δίναμε αριθμούς θα έπαιρνε μόνο τα μηνύματα που αντιστοιχούν σε +αυτές τις θέσεις. Αν, για παράδειγμα, θέλουμε μόνο το 5ο και το 7ο sms από το κινητό μας τηλέφωνο, δεν έχουμε παρά να προσθέσουμε ένα 5 7 στο τέλος. + +**-d arxeio.sms** Ο προορισμός μας. Το αρχείο με τα sms που θέλουμε. + +**-s** dev/ircomm0/ Είναι η \"πηγή\" μας. To device που αντιστοιχεί στη θύρα που έχουμε συνδεδεμένο το κινητό μας τηλέφωνο. + +Ας δούμε τώρα μερικές ακόμα παραμέτρους που μπορούμε να χρησιμοποιήσουμε. + +**-C \<διεύθυνση υπηρεσίας\>**\ +**\--sca \<διεύθυνση υπηρεσίας\>**\ +Τα είπαμε πριν αυτά έτσι δεν είναι; + +**-k**\ +**\--backup** + +Παρόμοιο με το -c με μία διαφορά. Προσθέτει μόνο ότι δεν υπάρχει ήδη στον προορισμό. Με το -c αντιγράφονται όλα τα περιεχόμενα της πηγής στον προορισμό. Κι εδώ, +αν δώσουμε αριθμούς μηνυμάτων θα λάβει υπόψιν του μόνο τις ανάλογες θυρίδες μηνυμάτων. + +**-l**\ +**\--list** + +Επειδή τα μηνύματα στο αρχείο είναι σε μη αναγνώσιμη μορφή, με αυτήν την παράμετρο βλέπουμε στην οθόνη μας σε αναγνώσιμη αυτήν την φορά μορφή και όχι +κωδικοποιημένα. + +**-x**\ +**\--delete** + +Για να διαγράψουμε τα μηνύματα που θέλουμε από τον προορισμό. + +#### Μηνύματα sms με άλλον τρόπο. + +Ας δούμε και έναν άλλο τρόπο να διαχειριστούμε τα μηνύματα sms που λαμβάνουμε. Θα χρησιμοποιήσουμε το gsmsmsd. Τον δαίμονα διαχείρισης sms του πακέτου. Ο πιο +απλός τρόπος λειτουργίας του είναι να περιμένει να έρθει ένα sms στο κινητό μας και να το τυπώσει στην στάνταρ έξοδο. Για να το πετύχουμε αυτό δεν χρειαζόμαστε +να δώσουμε καμιά απολύτως παράμετρο εκτός ίσως από την επιθυμητή ταχύτητα επικοινωνίας καθώς και την συσκευή που αντιστοιχεί στο κινητό μας αν αυτή δεν την +έχουμε κάνει ήδη link στο /dev/mobilephone που είναι η προεπιλογή όπως έχουμε δει για όλα τα προγράμματα του πακέτου. Όμως, αν ας πούμε θέλουμε να λαμβάνουμε +email με τα sms που μας στέλνουνε στο κινητό μας; Τότε; + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gsmsmsd -d /dev/ircomm0 -b 19200 -a "mail xrisths1" + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Πολλοί από εσάς θα βρείτε πολύ πιο χρήσιμες δουλειές για το gsmsmsd, όπως διαχείριση του server εξ\' αποστάσεως μέσω απλών εντολών στο κινητό τηλέφωνο που έχετε +μονίμως συνδεδεμένο επάνω του. Αφήστε την φαντασία σας να οργιάσει. Χρήσιμη σε μία τέτοια περίπτωση θα φανεί και η δυνατότητα του gsmsmsd να στέλνει μηνύματα +sms και όχι μόνο να λαμβάνει. Όχι ότι δεν θα ήταν δυνατόν κάτι τέτοιο με τα δύο προηγούμενα προγράμματα. Απλώς εδώ γίνεται αυτοματοποιημένα από ένα μόνο +πρόγραμμα. + +Για να δουλέψει όμως το πρόγραμμα είναι απαραίτητο να υπάρχει τουλάχιστον μία κενή θέση αποθήκευσης sms στο κινητό.\ +Ας δούμε εν συντομία τώρα τι άλλες παραμέτρους μπορούμε να δώσουμε στο gsmsmsd. + +**-c \<ταυτότητα\>**\ +**\--concatenate \<ταυτότητα\>** + +Όπως και στο gsmsendsms έτσι κι εδώ με την χρήση αυτού του αριθμού ταυτότητας μπορούμε να στείλουμε μεγάλου μεγέθους sms κομμένα σε πολλά μικρότερα τα οποία αν +το υποστηρίζει το κινητό του παραλήπτη θα ανασυσταθούν σε ένα ενιαίο sms μεγάλου μεγέθους. + +**-D**\ +**\--direct** + +Ενεργοποιεί την απευθείας δρομολόγηση των μηνυμάτων. Επειδή όμως δεν υποστηρίζεται από πολλά κινητά η προεπιλογή είναι να αποθηκεύονται πρώτα τα sms και μετά να +διεκπεραιώνονται. + +**-f**\ +**\--flush** + +Διαβάζει και σβήνει τα περιεχόμενα της θυρίδας αποθήκευσης που δίνουμε με την παράμετρο -store. Τα περιεχόμενα ακολουθούν κανονικά τον δρόμο που θα ακολουθούσε +κάθε νεοεισερχόμενο μήνυμα. Δηλαδή τυπώνονται ή περνούνε στην εντολή που έχουμε δώσει να εκτελείται με την παράμετρο -a (\--action). + +**-r**\ +**-requeststat**\ +Αιτείται αναφοράς κατάστασης από το δίκτυο για το sms που αποστέλλει. + +**-s \<κατάλογος\>**\ +**\--spool \<κατάλογος\>** + +Εδώ είμαστε σε μια αρκετά σημαντική παράμετρο που μπορεί να φανεί ιδιαίτερα χρήσιμη σε μερικούς. Εδώ ορίζουμε έναν κατάλογο που ελέγχεται κάθε 5 δευτερόλεπτα +και που θα τοποθετήσουμε αρχεία με τα sms που θέλουμε να στείλουμε. Η μορφή των αρχείων αυτών είναι απλή. Περιέχουν τον αριθμό που θέλουμε να στείλουμε το sms +και αμέσως μετά το μήνυμα. Δηλαδή 6931234567 Sas omhlei o aftomatos thlefoniths toy ypologisth sas. + +**-t \<Όνομα θυρίδας\>**\ +**\--store \<όνομα θυρίδας\>** + +Εδώ ορίζουμε που θα κοιτάει το πρόγραμμα για εισερχόμενα μηνύματα. Το σύνηθες είναι να κοιτάει στην κάρτα sim (SM). + +#### Έλεγχος λειτουργιών κινητού τηλεφώνου. + +Τέλος θα δούμε πως μπορούμε να παίξουμε με τις λειτουργίες του κινητού μας τηλεφώνου. Για τον σκοπό αυτό θα χρησιμοποιήσουμε το gsmctl. Με το gsmctl μπορούμε +τόσο να δούμε όσο και να ορίσουμε πολλές και διάφορες παραμέτρους του κινητού μας τηλεφώνου. Καλό είναι όμως πρώτον να μελετήσουμε πάρα πολύ καλά το manual του +gsmctl γιατί δεν είναι καθόλου δύσκολο να προξενίσουμε αρκετά μεγάλο πρόβλημα στην λειτουργία του κινητού μας τηλεφώνου. Αν δεν είμαστε σίγουροι για το τι +κάνουμε καλό είναι να το αφήσουμε. + +Να σημειώσουμε ότι πολλές από τις λειτουργίες που είναι δυνατόν να διαχειριστούμε με το gsmctl ενδέχεται να μην υποστηρίζονται από το κινητό μας τηλέφωνο. Σε +αυτήν την περίπτωση παίρνουμε ένα ωραιότατο μήνυμα λάθους και διακόπτεται η προσπάθεια. + +Η σύνταξη της σχετικής εντολής είναι (ανάλογα και με το αν θέλουμε να δούμε η να αλλάξουμε κάτι): + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + gsmctl -d /dev/ircomm0 -b 19200 <πληροφορία που θέλουμε> + gsmctl -d /dev/ircomm0 -b 19200 -o <παράμετρος που πειράζουμε> + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Με την πρώτη μορφή ρωτάμε το κινητό μας για διάφορες πληροφορίες που μπορεί να μας δώσει. Αυτές είναι: + +**ALL** Όλες οι δυνατές πληροφορίες που μπορεί να μας δώσει. + +**BATT** Κατάσταση μπαταρίας και επίπεδο φόρτισης. + +**BITERR** Δίνει μία ένδειξη για τον ρυθμό λαθών που παρουσιάζει το σήμα. + +**CLIP** Δείχνει αν είναι ενεργή ή όχι η αποστολή αριθμού κλίσης από το δίκτυο. + +**CSET** Τρέχουσα και διαθέσιμες κωδικοσελίδες. + +**CURROP** Δείχνει ποιος είναι ο τρέχον παροχέας δικτύου. + +**FLCAP** Δίνει έναν συνδυασμό δύο γραμμάτων που δείχνει κάποιες από τις δυνατές φραγές που μπορούμε να ενεργοποιήσουμε. Αυτές μπορεί να είναι από το κλείδωμα +πληκτρολογίου (CS) και της sim (SC) μέχρι φραγή εισερχομένων και εξερχομένων κλίσεων. + +**FLSTAT** Δείχνει τις ενεργοποιημένες φραγές (δες παραπάνω FLCAP). + +**FORW** Πληροφορίες για τις προωθήσεις κλίσεων που είναι ενεργές. + +**OP** Πληροφορίες για τους διαθέσιμους παροχείς δικτύου. + +**PIN** Πληροφορίες για τον αριθμό PIN (αν απαιτείται η εισαγωγή του π.χ. κατά το άνοιγμα του κινητού). + +**PW** Δείχνει της προστατευμένες με password φραγές. + +**SCA** Δίνει το κέντρο διακίνησης sms. + +**SIG** Μας δίνει έναν αριθμό που αντιστοιχεί με την ένταση λήψης σήματος από το κινητό με βήματα των 2 dBm. + +Με την δεύτερη μορφή μπορούμε να επηρεάσουμε τον τρόπο που λειτουργεί το κινητό μας τηλέφωνο. Το μόνο που έχουμε να κάνουμε είναι να πούμε τι και πώς επιθυμούμε +να επηρεάσουμε. Βέβαια, ό,τι πάμε να κάνουμε εδώ θα πρέπει να γίνει με πολύ προσοχή γιατί δεν αποκλείεται να κλειδώσουμε την συσκευή μας καθιστώντας τη άχρηστη. +Ας δούμε εν συντομία τη μπορούμε να επηρεάσουμε. + +**-o dial \<νούμερο\>** + +Κάνει κλίση προς το νούμερο που ορίζουμε και περιμένει να πατήσουμε το \ για να τερματίσουμε την σύνδεση. + +**-o forw \<κατάσταση\> \<λόγος\> \<νούμερο\> \[τάξη υπηρεσίας\] \[χρόνος\]** + +Εδώ μπορούμε να ορίσουμε το που θα προωθούνται οι κλίσεις που δεχόμαστε (\<νούμερο\>) όταν ικανοποιούνται τα κριτήρια που ορίζουμε (\<λόγος\>). Επίσης μπορούμε +να διαγράψουμε κάποια ενεργή προώθηση κλίσεων (\<κατάσταση\> = erase). Επίσης μπορούμε να ορίσουμε (σε κάποιες περιπτώσεις) μετά από πόση ώρα θα γίνει η +προώθηση κλίσεως. + +**-o pin \<νούμερο\>** + +Ρυθμίζει τον αριθμό pin της κάρτας sim. + +**-o setsca \<νούμερο\>** + +Ορίζει τον αριθμό του κέντρου διαχείρισης μηνυμάτων. + + +### [4. Επίλογος]{#s4} + +Μην περιμένετε όλα αυτά τα θαυμαστά πράγματα να δουλέψουν απρόσκοπτα σε όλα τα κινητά της αγοράς. Για παράδειγμα, δεν μπόρεσα να κάνω το gsmsmsd να δουλέψει με +το motorola timeport 250 που έχω καθώς και πολλές από τις πληροφορίες που δίνει το gsmctl έδιναν ένα θαυμάσιο μήνυμα λάθους. Παρόλα αυτά όμως με λίγο +πειραματισμό δεν αποκλείεται να καταφέρετε να κάνετε τα θαυμαστά πράγματα που υπόσχεται το άρθρο. Λίγος παραπάνω κόπος ίσως είναι αρκετός να σας δώσει την +δυνατότητα να διαχειριστείτε τον τηλεφωνικό σας κατάλογο ακόμα και στα ελληνικά καθώς και να διαχειριστείτε εξ\' αποστάσεως τον υπολογιστή σας με μόνο μέσο το +κινητό σας τηλέφωνο. + +Όσο εξελίσσονται και ωριμάζουν σιγά-σιγά τα σχετικά προγράμματα (ίσως και με την δική σας συνεισφορά) η ευχρηστία τους θα γίνεται όλο και λιγότερη. Ελπίζω το +παρόν άρθρο να ήταν αρκετά ενδιαφέρον δίνοντας σας ερεθίσματα για πολλές εξαιρετικά ενδιαφέρουσες εφαρμογές. + diff --git a/content/articles/33/05_rce2.md b/content/articles/33/05_rce2.md new file mode 100644 index 0000000..7a9c56c --- /dev/null +++ b/content/articles/33/05_rce2.md @@ -0,0 +1,1280 @@ ++++ +title = 'Reverse Engineering σε περιβάλλον Linux, Μέρος 1' +date = '2003-06-01T00:00:00Z' +description = '' +author = 'Φραντζής Αλέξανδρος (aka Alf) alf82 at freemail dot gr' +issue = ['Magaz 33'] +issue_weight = 5 ++++ + +**1. Εισαγωγή** +-------------------------------------- + +**2. Χρήση του GDB για assembly debugging** +------------------------------------------------------------------ + +- [2.1 Εξετάζοντας τον κώδικα assembly και άλλα παρεμφερή](#ss2.1) +- [2.2 Εξετάζοντας τα δεδομένα](#ss2.2) +- [2.3 Εκτελώντας τον κώδικα](#ss2.3) +- [2.4 Πληροφορίες για το εκτελέσιμο](#ss2.4) +- [2.5 Καλώντας συναρτήσεις και ψάχνοντας για σύμβολα](#ss2.5) + +**3. Άλλα χρήσιμα εργαλεία** +--------------------------------------------------- + +- [3.1 strace](#ss3.1) +- [3.2 ltrace](#ss3.2) + +**4. Υλοποίηση των breakpoints** +------------------------------------------------------- + +- [4.1 Software Breakpoints](#ss4.1) +- [4.2 Hardware Breakpoints](#ss4.2) +- [4.3 Hints and Tips - Home-made Traps](#ss4.3) + +**5. Χρήσιμες έως **πολύ** χρήσιμες πληροφορίες** +------------------------------------------------------------------------ + +- [5.1 The C calling convention](#ss5.1) +- [5.2 System Calls](#ss5.2) + +**6. Hands-on Παράδειγμα** +------------------------------------------------- + +**7. Πρόκληση** +-------------------------------------- + +- [7.1 Προηγούμενη πρόκληση - Λύση και Hall Of Fame](#ss7.1) +- [7.2 Πρόκληση \#1](#ss7.2) + + +### [1. Εισαγωγή]{#s1} + +Το πρώτο μέρος του άρθρου (2-3) έχει βασικό σκοπό την παρουσίαση των πιο κοινών εργαλείων που υπάρχουν στο linux και που μπορούν να ενισχύσουν την προσπάθεια +κατανόησης της λειτουργίας ενός εκτελέσιμου. Βέβαια, αυτά τα εργαλεία δεν είναι τα μόνα που υπάρχουν και μια αναζήτηση στο διαδίκτυο θα εμφανίσει πολλούς +θησαυρούς. Το πρόβλημα με τα περισσότερα από τα προγράμματα που ίσως βρείτε, είναι ότι πρόκειται περί \"diamonds in the rough\". Θα σας ταλαιπωρήσουν μέχρι να +τα στήσετε σωστά και μετά ποιος ξέρει τι άλλα προβλήματα θα εμφανιστούν. + +Στο δεύτερο μέρος (4-6) θα ασχοληθούμε με πιο γενικές πληροφορίες σε σχέση με το RCE. **Προσοχή**: δεν πρόκειται για περιττές πληροφορίες αλλά για βασικές +γνώσεις, χωρίς τις οποίες θα δυσκολευτείτε να κατανοήσετε τι πραγματικά συμβαίνει. + +Για την καλύτερη κατανόηση του άρθρου είναι επιθυμητή μια στοιχειώδης, το λιγότερο, γνώση της γλώσσας assembly. Θα προσπαθήσω να εξηγώ όπου χρειάζεται, όμως +σίγουρα δεν πρόκειται να μετατρέψω το κείμενο σε assembly tutorial. Πολλοί ίσως να θεωρούν την assembly παρωχημένη γλώσσα άλλα να είστε σίγουροι πως RCE χωρίς +assembly δε νοείται. Μια αναζήτηση για \"x86 assembly tutorial\" στο google θα σας δώσει πληροφορίες που θα σας απασχολήσουν για πολύ καιρό. + +Τέλος όπως κάθε φορά υπάρχει η πρόκληση του μήνα. Στόχος είναι να σας επιτρέψει να εξασκήσετε τις ικανότητές σας, να γνωρίσετε τα όρια σας και να χαρείτε από +πρώτο χέρι τη διαδικασία του RCE! + +Επίσης οτιδήποτε σχόλιο δεκτό: θεωρείτε τις προκλήσεις πολύ εύκολες/δύσκολες, θα θέλατε να καλυφθεί κάποιο θέμα ή να καλυφθεί εκτενέστερα; + +Στο επόμενο τεύχος θα συνεχίσουμε με τη δομή των ELF, το objdump, το /proc filesystem, περισσότερα hands-on παραδείγματα και ποιος ξέρει τι άλλο :) + +Καλό RCE και κυρίως **καλό καλοκαίρι**! + + +### [2. Χρήση του GDB για assembly debugging]{#s2} + +Στο μέρος αυτό θα εξετάσουμε τις δυνατότητες του GDB για assembly debugging. Το case-study πρόγραμμα θα είναι το ίδιο με την προηγούμενη φορά: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + + int main(int argc, char **argv) + { + int num; + + if (argc<2) { + printf("Usage: %s \n",argv[0]); + exit(1); + } + + num=alf(argv[1]); + + if (num>10) + printf("Ok!\n"); + else + printf("Failed!\n"); + } + + int alf(char *s) + { + return atoi(s); + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κάντε compile με : gcc \[-g\] -o rce1 rce1.c + +Αυτή τη φορά η παράμετρος \"-g\" δεν είναι απαραίτητη αλλά και να την χρησιμοποιήσουμε δε μας ενοχλεί. Το φόρτωμα του προγράμματος στον GDB γίνεται ως συνήθως: + +> bash$ gdb rce1 +> (gdb) + +Αν δοκιμάσουμε να δούμε τον πηγαίο κώδικα του προγράμματος χωρίς να έχουμε κάνει compile με -g: + +> (gdb) list +> 1 init.c: No such file or directory. +> in init.c +> (gdb) + +O GBD δε βρίσκει το αρχείο \"init.c\". Ε, και τι έγινε θα πείτε; Το δικό μας αρχείο είναι το \"rce1.c\"! Το πρόβλημα είναι ότι το εκτελέσιμο δεν περιλαμβάνει +καμία πληροφορία για το ποιο είναι το πηγαίο αρχείο του και ο GDB υποθέτει το όνομα \"init.c\". To \"init.c\" είναι το αρχείο πηγαίου κώδικα που αντιστοιχεί +στην αρχικοποίηση της libc. Αν δημιουργήσουμε ένα αρχείο με το όνομα \"init.c\", τότε η **list** θα μας δείξει το περιεχόμενο του αρχείου αυτού. Αλλά και πάλι +δεν μπορούμε να κάνουμε δουλειά, διότι ο debugger δεν γνωρίζει ποιες εντολές assembly αντιστοιχούν σε ποιες γραμμές C κώδικα. Αν πχ έχουμε αντιγράψει το +\"rce1.c\" σε \"init.c\": + +> bash$ cp rce1.c init.c +> bash$ gdb -q rce1 +> (gdb) break main +> Breakpoint 1 at 0x8048392 +> (gdb) r +> Starting program: /home/alf/projects/magaz/issue1/rce1 +> Breakpoint 1, 0x08048392 in main () +> (gdb) n +> Single stepping until exit from function main,which has no line number +> information. +> Usage: /home/alf/projects/magaz/issue1/rce1 +> +> Program exited with code 01. +> (gdb) + +Όταν πήγαμε να προχωρήσουμε μία γραμμή πηγαίου κώδικα με την **n**, ο GDB παραπονέθηκε πως δεν έχει τις απαραίτητες πληροφορίες και αποφάσισε να προχωρήσει +μέχρι το τέλος της main(). Για πλάκα μπορούμε να συγχύσουμε τον GDB (και τους εαυτούς μας) αν κάνουμε compile με το -g flag και μετά αντικαταστήσουμε το source +αρχείο μας με ένα άσχετο :) + +Αφού λοιπόν δεν έχουμε τον πηγαίο κώδικα αυτό ήταν\... ας πάμε να παίξουμε τάβλι καλύτερα. Αλλά μια φωνή μέσα μας (τουλάχιστον μέσα σε εμένα!) αρνείται να +παραδώσει τα όπλα. The gate is now open, welcome to the world of RCE! + +### [2.1 Εξετάζοντας τον κώδικα assembly και άλλα παρεμφερή]{#ss2.1} + +Αφού λοιπόν δεν αποθαρυνθήκαμε, ας εξετάσουμε το assembly listing της main. Αυτό γίνεται (κυρίως) με την εντολή **disassemble \<διεύθυνση\> \[\<τελική +διεύθυνση\>\]**. Αν ορίσουμε μόνο μια παράμετρο, τότε εμφανίζεται ο κώδικας **όλης της συνάρτησης** στην οποία ανήκει η διεύθυνση. Το πρόβλημα είναι πως αν ο +GDB δε γνωρίζει σε ποια συνάρτηση ανήκει η διεύθυνση (πχ όταν δεν υπάρχουν σύμβολα στο εκτελέσιμο), είτε θα παραπονεθεί και δε θα τυπώσει τίποτα είτε θα +συγχυστεί με προηγούμενα σύμβολα και θα μας εκτυπώσει κατεβατά ολόκληρα. Για παράδειγμα: + +> (gdb) disas main +> Dump of assembler code for function main: +> 0x804838c

: push %ebp +> 0x804838d : mov %esp,%ebp +> 0x804838f : sub $0x8,%esp +> 0x8048392 : and $0xfffffff0,%esp +> 0x8048395 : mov $0x0,%eax +> 0x804839a : sub %eax,%esp +> 0x804839c : cmpl $0x1,0x8(%ebp) +> 0x80483a0 : jg 0x80483c1 +> 0x80483a2 : sub $0x8,%esp +> 0x80483a5 : mov 0xc(%ebp),%eax +> 0x80483a8 : pushl (%eax) +> 0x80483aa : push $0x8048464 +> 0x80483af : call 0x80482ac +> 0x80483b4 : add $0x10,%esp +> 0x80483b7 : sub $0xc,%esp +> 0x80483ba : push $0x1 + +Οι εντολές: + +> (gdb) disas main+44 +> (gdb) disas 0x80483f7 + +και γενικά όσες διευθύνσεις περιέχονται στη main θα έχουν ως αποτέλεσμα να εκτυπωθεί όλη η main (ακριβώς όπως παραπάνω). Προσοχή πως το \"main\" είναι απλώς ένα +σύμβολο που αντιστοιχεί σε κάποια διεύθυνση, εδώ την 0x804838c. Η έκφραση main+44 είναι και αυτή μια διεύθυνση (0x80483b8). Δεν έχει σημασία που δεν αποτελεί +την αρχή κάποιας εντολής ( είναι το δεύτερο byte της sub \$0xc,%esp), αρκεί που ανήκει μέσα στη συνάρτηση main. + +[]{#gdb_asm} Η ερώτηση που τίθεται είναι η εξής: που ξέρει ο GDB που αρχίζει και τελειώνει μια συνάρτηση; Και η απάντηση: ο GDB ξέρει μόνο που αρχίζει η +συνάρτηση και υποθέτει ότι συνεχίζει η ίδια συνάρτηση μέχρι να βρει κάποιο άλλο σύμβολο που είναι σύμβολο συνάρτησης. + +Αν τα σύμβολα στο εκτελέσιμο κατά σειρά αύξουσας διεύθυνσης είναι: + +> 0804838c main +> 08048406 alf +> 0804841c __do_global_ctors_aux + +O GDB θεωρεί πως ό,τι βρίσκεται μεταξύ των διευθύνσεων main και alf ανήκει στη συνάρτηση main, ό,τι βρίσκεται μεταξύ των alf και \_\_do\_global\_ctors\_aux +ανήκει στη συνάρτηση alf κτλ. Το γεγονός πως τα όρια της κάθε συνάρτησης (για την ακρίβεια το τέλος) δεν είναι γνωστά, προκαλεί το πρόβλημα που αναφέρθηκε +παραπάνω (ο GDB δε μπορεί να βρει σε ποια συνάρτηση ανήκει η διεύθυνση ή κάνει λάθος). Ας δούμε το πρόβλημα στην πράξη: + +> bash$ strip -s rce1 +> bash$ gdb rce1 +> (no debugging symbols found)... +> (gdb) + +H εντολή strip \"απογυμνώνει\" ένα object αρχειο από όλα τα σύμβολα που μπορεί. Γράφω \"μπορεί\", διότι υπάρχουν μερικά που δε έχει νόημα να αφαιρέσει, όπως για +παράδειγμα αυτά που αναφέρονται σε εξωτερικές συναρτήσεις και δεδομένα. Ο λόγος είναι ότι στο στάδιο του linking (είτε αυτό είναι dynamic είτε όχι) δε θα +μπορέσει να βρει τις διευθύνσεις τους αν δε γνωρίζει το όνομα τους! + +> (gdb) disas main +> No symbol table is loaded. Use the "file" command. + +Το σύμβολο main δε βρέθηκε αλλά εμείς ξέρουμε τη διεύθυνση του. + +> (gdb) disas 0x804838c +> Dump of assembler code for function atoi: +> 0x80482cc : jmp *0x804958c +> 0x80482d2 : push $0x18 +> 0x80482d7 : jmp 0x804828c +> 0x80482dc : xor %ebp,%ebp +> 0x80482de : pop %esi + +Και ιδού\... Ο GDB τα \"πήρε\" :) + +Το μόνο σύμβολο που υπάρχει αμέσως πριν τη διεύθυνση της main είναι το atoi οπότε ο debugger θεωρεί πως η διεύθυνση 0x804838c ανήκει στη συνάρτηση atoi(). Το +σύμβολο atoi δείχνει σε μια εξωτερική συνάρτηση για αυτό και δεν αφαιρέθηκε. Σε αυτές τις περιπτώσεις είναι χρήσιμη η εναλλακτική μορφή της disassemble στην +οποία ορίζουμε τόσο την αρχική όσο και την τελική διεύθυνση για το disassembly : + +> (gdb) disas 0x804838c 0x80483a0 +> Dump of assembler code from 0x804838c to 0x80483a0: +> 0x804838c : push %ebp +> 0x804838d : mov %esp,%ebp +> 0x804838f : sub $0x8,%esp +> 0x8048392 : and $0xfffffff0,%esp +> 0x8048395 : mov $0x0,%eax +> 0x804839a : sub %eax,%esp +> 0x804839c : cmpl $0x1,0x8(%ebp) +> End of assembler dump. + +Μπορεί ο GDB να πιστεύει πως βρισκόμαστε 192 bytes από την αρχή της atoi αλλά εμείς ξέρουμε πως ουσιαστικά είμαστε στην αρχή της main! + +Κλείνοντας αυτό το κομμάτι θα ασχοληθούμε λίγο με τη μορφή του listing. Όσοι έχετε ασχοληθεί με assembly στον x86 η σύνταξη των προηγούμενων listing ίσως σας +φανεί λίγο παράξενη. Αυτή ονομάζεται AT&T syntax και ένα βασικό χαρακτηριστικό της είναι ότι στις εντολές της έχει ανάποδα την πηγή και τον προορισμό, σε σχέση +με την άλλη μορφή την Intel syntax. Πχ για να μετακινήσουμε το περιεχόμενο του καταχωρητή ebx στον eax : + +> mov %ebx, %eax AT&T +> mov eax, ebx Intel + +Βέβαια υπάρχουν και άλλες διαφορές αλλά δε θα μας απασχολήσουν εδώ. Επίσης υπάρχουν και παραλλαγές των παραπάνω όπως η σύνταξη που χρησιμοποιεί ο Nasm (Netwide +Assembler) η οποία βασίζεται στην Intel αλλά κατά τη γνώμη είναι πιο ξεκάθαρη Παρακάτω θα χρησιμοποιήσουμε τη σύνταξη της Intel διότι είναι γενικά πιο +διαδεδομένη για τους επεξεργαστές της. Στον GDB η σύνταξη ορίζεται στην εσωτερική μεταβλητή disassembly-flavor: + +> (gdb) set disassembly-flavor intel +> (gdb) disas main +> Dump of assembler code for function main: +> 0x804838c
: push ebp +> 0x804838d : mov ebp,esp +> 0x804838f : sub esp,0x8 +> 0x8048392 : and esp,0xfffffff0 +> 0x8048395 : mov eax,0x0 +> 0x804839a : sub esp,eax +> 0x804839c : cmp DWORD PTR [ebp+8],0x1 +> 0x80483a0 : jg 0x80483c1 +> 0x80483a2 : sub esp,0x8 +> 0x80483a5 : mov eax,DWORD PTR [ebp+12] +> 0x80483a8 : push DWORD PTR [eax] +> 0x80483aa : push 0x8048464 +> 0x80483af : call 0x80482ac +> 0x80483b4 : add esp,0x10 +> 0x80483b7 : sub esp,0xc +> 0x80483ba : push 0x1 +> 0x80483bc : call 0x80482bc +> 0x80483c1 : sub esp,0xc +> 0x80483c4 : mov eax,DWORD PTR [ebp+12] +> 0x80483c7 : add eax,0x4 +> 0x80483ca : push DWORD PTR [eax] +> 0x80483cc : call 0x8048406 +> 0x80483d1 : add esp,0x10 +> 0x80483d4 : mov DWORD PTR [ebp-4],eax +> 0x80483d7 : cmp DWORD PTR [ebp-4],0xa +> 0x80483db : jle 0x80483ef +> 0x80483dd : sub esp,0xc +> 0x80483e0 : push 0x8048478 +> 0x80483e5 : call 0x80482ac +> 0x80483ea : add esp,0x10 +> 0x80483ed : jmp 0x80483ff +> 0x80483ef : sub esp,0xc +> 0x80483f2 : push 0x804847d +> 0x80483f7 : call 0x80482ac +> 0x80483fc : add esp,0x10 +> 0x80483ff : mov eax,0x1 +> 0x8048404 : leave +> 0x8048405 : ret +> End of assembler dump. +> (gdb) + +### [2.2 Εξετάζοντας τα δεδομένα]{#ss2.2} + +Τα δεδομένα που μας ενδιαφέρουν όταν ασχολούμαστε με low-level debugging μπορούν να βρίσκονται είτε σε κάποιον καταχωρητή είτε στη μνήμη. + +#### Εξετάζοντας καταχωρητές + +Ο βασικός τρόπος για να δούμε τα περιεχόμενα των καταχωρητών είναι με την **info registers**/ **i r** \[reg\]. Χωρίς όρισμα εκτυπώνει όλους τους ακέραιους +καταχωρητές με τα περιεχόμενα τους σε δεκαεξαδική και δεκαδική μορφή, αλλιώς τυπώνει μόνο αυτόν που ορίσαμε. + +> (gdb) i r +> eax 0x0 0 +> ecx 0x4 4 +> edx 0x4014f1ec 1075114476 +> ebx 0x40153234 1075130932 +> esp 0xbffff730 0xbffff730 +> ebp 0xbffff738 0xbffff738 +> esi 0x40014020 1073823776 +> edi 0xbffff794 -1073743980 +> eip 0x804839c 0x804839c +> eflags 0x386 902 +> cs 0x23 35 +> ss 0x2b 43 +> ds 0x2b 43 +> es 0x2b 43 +> fs 0x0 0 +> gs 0x0 0 +> fctrl 0x37f 895 +> fstat 0x0 0 +> ftag 0xffff 65535 +> fiseg 0x0 0 +> fioff 0x0 0 +> foseg 0x0 0 +> fooff 0x0 0 +> fop 0x0 0 +> mxcsr 0x1f80 8064 +> orig_eax 0xffffffff -1 +> (gdb) i r edx +> edx 0x4014f1ec 1075114476 +> (gdb) + +Υπάρχει και η εντολή **info all-registers** η οποία τυπώνει όλους τους καταχωρητές ( integer και floating-point και ΜΜΧ και ΧΜΜ για x86). + +To πρόβλημα με την εντολή **i r** είναι πως μας επιτρέπει μόνο να δούμε τις τιμές των καταχωρητών, ενώ αρκετά συχνά θέλουμε να τις αλλάξουμε ή να τις +χρησιμοποιήσουμε σε κάποια έκφραση. Στον GDB για κάθε καταχωρήτη υπάρχει μια ψευδο-μεταβλητή της οποία το όνομα αποτελείται από το \'\$\' και το όνομα του +καταχωρήτη πχ \$eax. Ο μηχανισμός αυτός προσφέρει μεγάλη ευελιξία και ευκολία: + +> (gdb) print $eip +> $1 = (void *) 0x804839c +> (gdb) set $eip=$eip+1 +> (gdb) print $eip +> $2 = (void *) 0x804839d +> (gdb) set $eip-- +> (gdb) print $eip +> $3 = (void *) 0x804839c + +#### Εξετάζοντας τη μνήμη + +Η προσπέλαση στη μνήμη γίνεται με την εντολή **x**. Η πλήρης σύνταξη είναι **x/FMT** όπου FMT είναι μια ακολουθία τριών στοιχείων \\\. To πρώτο ορίζει πόσα αντικείμενα να εκτυπωθούν, το δεύτερο δηλώνει τι μέγεθος θα έχει το κάθε αντικείμενο ( b(byte 1), h(halfword 2) +, w(word 4) ,g(giant 8) και τέλος το format σε τι μορφή να εκτυπωθούν ( o(octal), x(hex), d(decimal), u(unsigned decimal), t(binary), f(float), a(address), +i(instruction), c(char) και s(string). ) + +Πχ Εκτύπωσε 5 bytes σε οκταδική μορφή αρχίζοντας από τη διεύθυνση main + +> (gdb) x/5bo main +> 0x804838c
: 0125 0211 0345 0203 0354 + +Το ίδιο σε hex + +> (gdb) x/5bx main +> 0x804838c
: 0x55 0x89 0xe5 0x83 0xec + +Εκτύπωσε 3 λέξεις (4 bytes η κάθε μία) σε δεκαεξαδική μορφή αρχίζοντας από τη διεύθυνση main + +> (gdb) x/3wx main +> 0x804838c
: 0x83e58955 0xe48308ec 0x0000b8f0 + +Εκτύπωσε τις πρώτες δέκα εντολές της main( όχι τις γνωστές δέκα\...) + +> (gdb) x/10i main +> 0x804838c
: push %ebp +> 0x804838d : mov %esp,%ebp +> 0x804838f : sub $0x8,%esp +> 0x8048392 : and $0xfffffff0,%esp +> 0x8048395 : mov $0x0,%eax +> 0x804839a : sub %eax,%esp +> 0x804839c : cmpl $0x1,0x8(%ebp) +> 0x80483a0 : jg 0x80483c1 +> 0x80483a2 : sub $0x8,%esp +> 0x80483a5 : mov 0xc(%ebp),%eax + +Η τελευταία εντολή έχει το ίδιο αποτέλεσμα με την εντολή **disassemble main main+25**. + +Συχνά χρειάζεται να εξετάζουμε συνέχεια μια θέση μνήμης και καταντάει κουραστικό να γράφουμε την εντολή **x/FMT** . Σε τέτοιες περιπτώσεις βολεύει η εντολή +**display** που συντάσεται ακριβώς όπως η **x/FMT** και μαζί με κάθε gdb prompt μας εμφανίζει τα δεδομένα που της ζητήσαμε. Ένα πολύ χρήσιμο παράδειγμα της +display είναι το παρακάτω: + +> (gdb) display/5i $eip +> (gdb) break main +> Breakpoint 1 at 0x8048392 +> (gdb) r +> Starting program: /home/alf/projects/magaz/issue1/rce1 +> +> Breakpoint 1, 0x08048392 in main () +> 2: x/5i $eip +> 0x8048392 : and $0xfffffff0,%esp +> 0x8048395 : mov $0x0,%eax +> 0x804839a : sub %eax,%esp +> 0x804839c : cmpl $0x1,0x8(%ebp) +> 0x80483a0 : jg 0x80483c1 +> (gdb) ni +> 0x08048395 in main () +> 2: x/5i $eip +> 0x8048395 : mov $0x0,%eax +> 0x804839a : sub %eax,%esp +> 0x804839c : cmpl $0x1,0x8(%ebp) +> 0x80483a0 : jg 0x80483c1 +> 0x80483a2 : sub $0x8,%esp + +Μετά από κάθε **ni** (next instruction, δείτε λίγο παρακάτω) εμφανίζονται αυτόματα οι 5 επόμενες εντολές assembly. Για να εξετάσουμε ποια auto-display έχουμε +στο σύστημα μας γράφουμε info display ενώ για να ακυρώσουμε μια εντολή display χρησιμοποιούμε την **undisplay \[\#num\]** ή **delete display \[\#n\]**. + +### [2.3 Εκτελώντας τον κώδικα]{#ss2.3} + +Είναι ωραίο να βλέπουμε τον κώδικα του προγράμματος μας και τα δεδομένα του αλλά είναι καλύτερο να μπορούμε και να το εκτελούμε! Για το σκοπό αυτό οι εντολές +που χρειαζόμαστε είναι οι **ni**/**nexti** (next instruction) και **si**/**stepi**. Αυτές λειτουργούν αντίστοιχα με τις **next** και **step** αλλά σε επίπεδο +εντολών assembly και όχι σε επίπεδο γραμμών πηγαίου κώδικα. Οι **nexti** και **stepi** εκτελούν την επόμενη εντολή assembly αλλά η **nexti** δεν ακολουθεί τις +κλήσεις συναρτήσεων. + +> (gdb) display/1i $eip +> (gdb) ni +> 0x080483ca in main () +> 2: x/i $eip +> 0x80483ca : push DWORD PTR [eax] +> (gdb) ni +> 0x080483cc in main () +> 2: x/i $eip +> 0x80483cc : call 0x8048406 +> (gdb) ni +> 0x080483d1 in main () +> 2: x/i $eip +> 0x80483d1 : add esp,0x10 +> (gdb) ni +> 0x080483d4 in main () +> 2: x/i $eip +> 0x80483d4 : mov DWORD PTR [ebp-4],eax +> (gdb) ni +> 0x080483ca in main () +> 2: x/i $eip +> 0x80483ca : push DWORD PTR [eax] +> (gdb) ni +> 0x080483cc in main () +> 2: x/i $eip +> 0x80483cc : call 0x8048406 +> (gdb) si +> 0x08048406 in alf () +> 2: x/i $eip +> 0x8048406 : push ebp +> (gdb) ni +> 0x08048407 in alf () +> 2: x/i $eip +> 0x8048407 : mov ebp,esp +> (gdb) ni +> 0x08048409 in alf () +> 2: x/i $eip +> 0x8048409 : sub esp,0x8 +> (gdb) ni +> 0x0804840c in alf () +> 2: x/i $eip +> 0x804840c : sub esp,0xc + +**Breakpoints-Watchpoints** + +Για τα breakpoints και τα watchpoints ισχύουν όσα είχαν γραφτεί στο προηγούμενο τεύχος. Απλώς λόγω έλλειψης συμβόλων χρησιμοποιείται αρκετά η μορφή που περιέχει +απλή διεύθυνση πχ **break \*0x8045333**. + +### [2.4 Πληροφορίες για το εκτελέσιμο]{#ss2.4} + +Η εντολή **info files** τυπώνει πληροφορίες για το εκτελέσιμο: + +> (gdb) info files +> Symbols from "/home/alf/projects/magaz/issue1/rce1". +> Local exec file: +> `/home/alf/projects/magaz/issue1/rce1', file type elf32-i386. +> Entry point: 0x8048330 +> 0x080480f4 - 0x08048107 is .interp +> 0x08048108 - 0x08048128 is .note.ABI-tag +> 0x08048128 - 0x08048160 is .hash +> 0x08048160 - 0x080481f0 is .dynsym +> 0x080481f0 - 0x0804824e is .dynstr +> 0x0804824e - 0x08048260 is .gnu.version +> 0x08048260 - 0x08048280 is .gnu.version_r +> 0x08048280 - 0x08048290 is .rel.dyn +> 0x08048290 - 0x080482b8 is .rel.plt +> 0x080482b8 - 0x080482cf is .init +> 0x080482d0 - 0x08048330 is .plt +> 0x08048330 - 0x080484ac is .text +> 0x080484ac - 0x080484c7 is .fini +> 0x080484c8 - 0x080484f6 is .rodata +> 0x080494f8 - 0x08049504 is .data +> 0x08049504 - 0x08049508 is .eh_frame +> 0x08049508 - 0x080495d0 is .dynamic +> 0x080495d0 - 0x080495d8 is .ctors +> 0x080495d8 - 0x080495e0 is .dtors +> 0x080495e0 - 0x080495e4 is .jcr +> 0x080495e4 - 0x08049608 is .got +> 0x08049608 - 0x08049610 is .bss +> (gdb) + +Καταρχάς δίνεται το path και το είδος του εκτελέσιμου.\ +Αμέσως μετά δίνεται το entry point, δηλαδή η διεύθυνση της πρώτης εντολής που θα εκτελεστεί όταν αρχίσει το πρόγραμμα. **Προσοχή: αυτή συνήθως δεν είναι η +διεύθυνση της main αλλά είναι η αρχή του κώδικα που αρχικοποιεί την libc!** + +Όλα τα υπόλοιπα είναι τα sections του ELF και οι διεύθυνσεις μνήμης που καταλαμβάνουν. + +### [2.5 Καλώντας συναρτήσεις και ψάχνοντας για σύμβολα]{#ss2.5} + +Εδώ θα αναφερθούμε σε δύο αρκετά χρήσιμες εντολές που μάλλον θα ταίριαζαν περισσότερο στο προηγούμενο άρθρο. + +Η πρώτη εντολή είναι η **call** η οποία χρησιμοποιείται για να καλέσουμε μια οποιαδήποτε συνάρτηση. Η σύνταξη που χρησιμοποιεί εξαρτάται από την τρέχουσα γλώσσα +και στη C είναι γνωστή η **call func(arg1,arg2,\...)**. + +> bash$ gdb rce1 +> (gdb) call alf("123") +> evaluation of this expression requires the target program to be active +> (gdb) break main +> Breakpoint 1 at 0x80483f0: file rce1.c, line 7. +> (gdb) r +> Starting program: /home/alf/magaz/issue1/rce1 +> +> Breakpoint 1, main (argc=1, argv=0xbffff7a4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) call alf("123") +> $1 = 123 +> (gdb) call alf("747") +> $2 = 747 +> (gdb) print $1 +> $3 = 123 +> (gdb) print $+1 +> $4 = 124 + +Η τιμή που επιστρέφει η συνάρτηση αποθηκεύεται στη μεταβλητή που μας δείχνει ο GDB πχ \$1. Η μεταβλητή \$ περιέχει την τελευταία τιμή που παράχθηκε. + +Η επόμενη εντολή είναι η **info functions \[name\]**. Η εντολή αυτή εμφανίζει όλες τις συναρτήσεις που ξέρει ο GDB μαζί με τη διεύθυνση τους (αμέτρητες!). Αν +καθορίσουμε κάποιο όνομα θα εμφανιστούν μόνο οι συναρτήσεις που περιέχουν αυτό το όνομα. Αν και γενικά τα πράγματα είναι απλά, υπάρχουν μερικά σκοτεινά σημεία +που ίσως σας προβληματίσουν. + +Για παράδειγμα έστω ότι έχουμε ένα πρόγραμμα που καλεί την fprintf(). Αφου το φορτώσουμε στο GDB έχουμε: + +> (gdb) info functions fprintf +> All functions matching regular expression "fprintf": +> +> Non-debugging symbols: +> 0x080482e0 fprintf +> (gdb) break main +> Breakpoint 1 at 0x80483f0: file rce1.c, line 7. +> (gdb) r +> Starting program: /home/alf/tst +> +> Breakpoint 1, main (argc=1, argv=0xbffff7a4) at rce1.c:7 +> 7 if (argc<2) { +> (gdb) info functions fprintf +> All functions matching regular expression "fprintf": +> +> Non-debugging symbols: +> 0x080482e0 fprintf +> 0x4006e5c0 _IO_vfprintf +> 0x4006e5c0 _IO_vfprintf_internal +> 0x4006e5c0 __GI_vfprintf +> 0x4006e5c0 vfprintf +> 0x40072b40 buffered_vfprintf +> 0x400788f0 _IO_fprintf +> 0x400788f0 __GI_fprintf +> 0x400788f0 fprintf +> 0x4007c8d0 buffered_vfprintf + +Αρχικά (πριν εκτελέσουμε το πρόγραμμα) το μόνο σύμβολο fprintf που υπήρχε ήταν στη διεύθυνση 0x080483e0. Η διεύθυνση αυτή ανήκει στο δικό μας πρόγραμμα και +επομένως δεν μπορεί να είναι η αρχή της fprintf()! Στην πραγματικότητα είναι ένα jmp προς την κανονική fprintf(). Αφού τρέξουμε το πρόγραμμα, ο GDB +συνειδητοποιεί πως φορτώθηκαν βιβλιοθήκες και προσθέτει τα σύμβολα των συναρτήσεων στη λίστα του. Μια από αυτές που φορτώθηκε ήταν η libc έτσι προστέθηκε μεταξύ +άλλων το σύμβολο fprintf στη διεύθυνση 0x400788f0 που αποτελεί και τη πραγματική αρχή της συνάρτησης. + +> bash$ gdb tst +> (gdb) break fprintf +> Breakpoint 1 at 0x80482e0 +> (gdb) r +> Starting program: /home/alf/tst +> Breakpoint 1 at 0x400788f6 +> +> Breakpoint 1, 0x400788f6 in fprintf () from /lib/libc.so.6 +> (gdb) + +Παρατηρήστε ότι ενώ το αρχικό breakpoint ήταν στη διεύθυνση 0x80482e0 το break έγινε στη διεύθυνση 0x400788f6. Ο GDB αναγνωρίζει ότι το σύμβολο fprintf στη +διεύθυνση 0x80482e0 έχει ειδική σημασία, και όταν φορτωθεί η πραγματική fprintf() ανανεώνει το breakpoint. Περισσότερα για το θέμα στο επόμενο τεύχος όταν +εξετάσουμε το ELF. + + +### [3. Άλλα χρήσιμα εργαλεία]{#s3} + +Παρακάτω παρουσιάζονται εν συντομία δύο πολύ χρήσιμα εργαλεία που υπάρχουν σε κάθε σύγχρονο linux σύστημα. Βασίζονται και τα δύο στο ptrace() system call που +επιτρέπει τον έλεγχο διεργασιών στο linux. + +### [3.1 strace]{#ss3.1} + +To strace (system call trace) καταγράφει τα system calls ενός προγράμματος. Από default καταγράφει όλα τα syscalls αλλά υπάρχει η δυνατότητα να προσδιοριστούν +μόνο κάποια συγκεκριμένα. Δέχεται πολλές παραμέτρους και ρυθμίσεις αλλά εδώ θα ασχοληθούμε μόνο με τις πιο βασικές (εξάλλου δεν υπάρχει λόγος να επαναλαμβάνουμε +τη manpage!) + +Η βασική σύνταξη είναι **strace \[options\] \[-o outputfile\] \[objfile \[args\]\]**.\ +Αν δεν καθορίσουμε κάποιο αρχείο για output τα syscalls εμφανίζονται στo stderr. + +Χρήσιμες παράμετροι είναι:\ +**-e call1,call2,\...** ή **-e trace=call1,call2,\...,callΝ**\ +Καθορίζει ποια syscalls να παρακολουθήσει το πρόγραμμα. Αν πριν από κάποιο όνομα υπάρχει το \'!\' σημαίνει να μην παρακολουθηθεί το syscall αυτό. H default τιμή +είναι -e trace=all.\ +**-p pid**\ +καθορίζει σε ποια διεργασία να \"αγκιστρωθεί\" το πρόγραμμα ώστε να αρχίσει να παρακολουθεί. Προφανώς στην περίπτωση αυτή είναι περιττό να καθοριστεί το +objfile.\ +**-i**\ +Πριν από κάθε syscall εμφανίζεται η τιμή του IP (instruction pointer) τη στιγμή της κλήσης. Η επιλογή αυτή είναι λιγότερο χρήσιμη από ότι φαίνεται, διότι τα +syscalls καλούνται μέσα από wrapper συναρτήσεις που βρίσκονται σε βιβλιοθήκες, και έτσι οι διευθύνσεις που θα λαμβάνουμε δεν θα είναι και πολύ χρήσιμες. + +πχ + +> bash$ strace -e trace=write rce1 +> write(1, "Usage: rce1 \n", 21Usage: rce1 +> ) = 21 + +Το παραπάνω είναι λίγο μπερδεμένο διότι το strace αρχίζει να καταγράφει το syscall write στο stderr(που από default είναι η οθόνη), ύστερα εκτυπώνεται το +κείμενο μας και μετά τελειώνει η καταγραφή με την τιμή επιστροφής της write. Αν είχαμε χρησιμοποιήσει το option -ο δε θα υπήρχε πρόβλημα. + +> bash$ strace -o rce1.trace -e trace=write rce1 +> Usage: rce1 +> bash$ cat rce1.trace +> write(1, "Usage: rce1 \n", 21) = 21 + +Ας δούμε τώρα το πλήρες trace από το αγαπημένο μας rce1. + +> bash$ strace -o rce1.trace rce1 +> Usage: rce1 +> bash$ cat -n rce1.trace +> 1 execve("./rce1", ["rce1"], [/* 51 vars */]) = 0 +> 2 brk(0) = 0x8049598 +> 3 open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or +> directory) +> 4 open("/etc/ld.so.cache", O_RDONLY) = 3 +> 5 fstat64(3, {st_mode=S_IFREG|0644, st_size=64466, ...}) = 0 +> 6 old_mmap(NULL, 64466, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40015000 +> 7 close(3) = 0 +> 8 open("/lib/libc.so.6", O_RDONLY) = 3 +> 9 read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\\\1\000"..., +> 1024) = 1024 +> 10 fstat64(3, {st_mode=S_IFREG|0755, st_size=1435624, ...}) = 0 +> 11 old_mmap(NULL, 1256740, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) = +> 0x40025000 +> 12 mprotect(0x4014f000, 36132, PROT_NONE) = 0 +> 13 old_mmap(0x4014f000, 20480, PROT_READ|PROT_WRITE, +> MAP_PRIVATE|MAP_FIXED, 3, 0x12a000) = 0x4014f000 +> 14 old_mmap(0x40154000, 15652, PROT_READ|PROT_WRITE, +> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40154000 +> 15 close(3) = 0 +> 16 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, +> -1, 0) = 0x40158000 +> 17 munmap(0x40015000, 64466) = 0 +> 18 fstat64(1, {st_mode=S_IFCHR|0700, st_rdev=makedev(136, 0), ...}) = 0 +> 19 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, +> -1, 0) = 0x40015000 +> 20 write(1, "Usage: rce1 \n", 21) = 21 +> 21 munmap(0x40015000, 4096) = 0 +> 22 semget(1, 4096, IPC_CREAT|0x40150140|0400) = -1 ENOSYS (Function not +> implemented) +> 23 _exit(1) = ? + +**1:** Εδώ καλείται η execve() ώστε να εκτελεστεί το πρόγραμμα μας. Η επόμενη γραμμή είναι πιο ενδιαφέρουσα. + +**2:** Η brk() χρησιμοποιείται για να αλλάξει το μέγεθος του data segment. Παίρνει ως παράμετρο το νέο τέλος του data segment και επιστρέφει 0 αν όλα πήγαν καλά +και -1 σε περίπτωση λάθους (όλα αυτά σύμφωνα με την man page που έχει ξεμείνει απο το linux 0.9.11). Εδώ η παράμετρος είναι 0 και η τιμή επιστροφής είναι ένας +μια διεύθυνση. Μόλις μάθαμε ότι η brk(NULL) επιστρέφει το τρέχον τέλος του data segment :) + +Τώρα ο dynamic linker αναλαμβάνει δράση.\ +**3-4:** Παρατηρούμε μια προσπάθεια να ανοίξουν δύο αρχεία: το \"/etc/ld.so.preload\" και το \"/etc/ld.so.cache\". Το πρώτο περιέχει μια λίστα με το ποιες +βιβλιοθήκες να φορτωθούν πριν από οποιαδήποτε βιβλιοθήκη του συγκεκριμένου εκτελέσιμου και στο δικό μου σύστημα δεν υπάρχει (θα ήταν ύποπτο αν υπήρχε\...). Το +δεύτερο περιέχει μια λίστα με όλες τις βιβλιοθήκες που γνωρίζει ο dynamic linker (δες man ldconfig) και ανοίγει επιτυχώς με file descriptor 3. + +**5-7:** Με την fstat ο linker πληροφορείται για το αρχείο που μόλις άνοιξε. Η πληροφορία που τον ενδιαφέρει πιο πολύ είναι το μέγεθος st\_size=64466 (δες man +fstat). Ύστερα το αρχείο γίνεται mapped(αντιστοιχείται) στη μνήμη στη διεύθυνση 0x40015000 (δες man mmap) και το αρχείο κλείνει. + +**8-15:** Ο linker βλέπει πως το εκτελέσιμο χρειάζεται τη βιβλιοθήκη libc.so.6. Έχοντας τις πληροφορίες από το προηγούμενο βήμα βρίσκει το path και το ανοίγει. +Ύστερα διαβάζει τα πρώτα 1024 bytes που περιέχουν τον ELF(Executable and Linkable Format) header του αρχείου και αφού επιβεβαιώσει ότι όντως πρόκειται για +shared βιβλιοθήκη φορτώνει τα διάφορα sections της. + +**16-17:** Γίνονται map ανώνυμα 4Kbytes και ελευθερώνεται(unmapped) ο χώρος που αντιστοιχεί στο \"/etc/ld.so.cache\". + +**18-19:** Λαμβάνονται πληροφορίες για τον file descriptor 1 (stdout) και γίνονται map ανώνυμα άλλα 4Kbytes + +**20:** Εδώ γράφεται στον fd 1 το κείμενο μας. Εμείς δεν χρησιμοποιήσαμε την write κατευθείαν αλλά η printf τελικά καλεί την write. + +**21-23:** Ελευθερώνεται το block που δεσμεύτηκε στη γραμμή 19, καλείται η semget() η οποία δεν έχει υλοποιηθεί(!) ακόμα στον δικό μου πυρήνα (2.4.20) και το +πρόγραμμα τερματίζει. + +### [3.2 ltrace]{#ss3.2} + +To ltrace είναι αντίστοιχο με το strace αλλά όπως δηλώνει και το όνομα του (library trace) παρακολουθεί κλήσεις συναρτήσεων από βιβλιοθήκες. Πρόκειται για ένα +αρκετά χρήσιμο πρόγραμμα που δίνει μια εποπτική εικόνα της ροής του προγράμματος. Βέβαια όπως και το strace μας δίνει απλώς μια ακολουθία από συμβάντα και +καθόλου πληροφορίες για τα κομβικά σημεία της διεργασίας (πχ κάποιος έλεγχος). + +H σύνταξη είναι : **ltrace \[options\] \[-o outputfile\] \[objfile \[args\]\]** + +Χρήσιμες παράμετροι είναι:\ +**-e call1,call2,\...**\ +Το πρόγραμμα παρακολουθεί μόνο τις call1,call2\... Αν πριν από κάποια συνάρτηση υπάρχει \'!\' τότε να μην παρακολουθηθεί.\ +**-p pid**\ +Καθορίζει σε ποια διεργασία να \"αγκιστρωθεί\" το πρόγραμμα ώστε να αρχίσει να παρακολουθεί. Προφανώς στην περίπτωση αυτή είναι περιττό να καθοριστεί το +objfile.\ +**-i**\ +Πριν από κάθε call εμφανίζεται η τιμή του IP (instruction pointer) τη στιγμή της κλήσης. Σε αντίθεση με την strace η επιλογή είναι πολύ χρήσιμη, διότι οι +κλήσεις συναρτήσεων βιβλιοθήκης γίνονται συνήθως κατευθείαν από τον κώδικα που μας ενδιαφέρει και όχι από κάποια μυστική γωνιά κάποιας απέραντης βιβλιοθήκης.\ +**-l libfilename**\ +Καθορίζει τις συναρτήσεις ποιων βιβλιοθηκών να παρακολουθεί η ltrace. Για περισσότερες από μια βιβλιοθήκες πρέπει να επαναληφθεί το \'-l\' πχ -l lib1 -l lib2 +\... + +> πχ +> bash$ ltrace -orce1.ltrace -i rce1 +> Usage: rce1 +> bash$ cat rce1.ltrace +> [080482fd] __libc_start_main(0x0804838c, 1, 0xbffff784, 0x08048274, 0x08048440 +> +> [080483b4] printf("Usage: %s = 21 +> [080483c1] exit(1 +> [ffffffff] +++ exited (status 1) +++ + + +### [4. Υλοποίηση των breakpoints]{#s4} + +Τα breakpoints, όπως είχαμε πει και στο προηγούμενο τεύχος, είναι σημεία στον κώδικα όπου διακόπτεται η εκτέλεση του προγράμματος και ο έλεγχος επιστρέφει στον +debugger. Όσον αφορά στον τρόπο υλοποίησης τους μπορούν να χωριστούν σε δύο κατηγορίες: τα software και τα hardware. + +### [4.1 Software Breakpoints]{#ss4.1} + +Είναι το είδος που απαντάται πιο συχνά διότι δεν απαιτεί κάποια υποστήριξη από τον επεξεργαστή. Όταν ορίζουμε ένα software breakpoint σε κάποια διεύθυνση μνήμης +τότε ο debugger, αφού αποθηκεύσει την εντολή που βρίσκεται σε εκείνο το σημείο την αντικαθιστά με μια εντολή trap (software interrupt). Ο debugger έχει +φροντίσει να αποκτήσει τον έλεγχο του trap αυτού. Επομένως, όταν εκτελεστεί η trap ο έλεγχος επιστρέφει στον debugger, ο οποίος επανατοποθετεί τα bytes της +αρχικής εντολής και περιμένει οδηγίες. Αφού προχωρήσουμε στο πρόγραμμα τοποθετείται πάλι η trap, αν πρόκειται για μόνιμο breakpoint. Στους x86 επεξεργαστές ως +trap χρησιμοποιείται η \"int 3\" με opcode 0xCC. + +Ας δούμε ένα παράδειγμα: + +> 0x8048429 : 0xff 0x75 0xf0 push DWORD PTR [ebp-16] +> 0x804842c : 0xff 0x75 0xf4 push DWORD PTR [ebp-12] +> 0x804842f : 0xe8 0x8c 0xfe 0xff 0xff call 0x80482c0 +> 0x8048434 : 0x83 0xc4 0x10 add esp,0x10 + +Έστω ότι τοποθετούμε ένα breakpoint στην εντολή call 0x80482c0. Αυτό που συμβαίνει είναι ότι ο debugger αντικαθιστά το πρώτο byte της εντολής με \"0xcc\" αφού +βέβαια σώσει κάπου το 0xe8. Οπότε τώρα έχουμε στην πραγματικότητα: + +> 0x804842f : 0xcc int 3 +> 0x8048430 : 0x8c 0xfe 0xff 0xff ... (σκουπίδια) +> 0x8048434 : 0x83 0xc4 0x10 add esp,0x10 + +Τα bytes που απέμειναν από την call (0x8c - 0xff) ίσως να σχηματίζουν μια καινούργια εντολή αλλά πάντως όχι μια που είναι επιθυμητή! Μην περιμένετε την παραπάνω +εικόνα της μνήμης να τη δείτε ποτέ μέσα από τον debugger με τον οποίο έχετε τοποθετήσει το breakpoint. Αυτό διότι ο ίδιος φροντίζει να μας εμφανίζει το +\"αυθεντικό\" περιεχόμενο της μνήμης όταν του το ζητάμε. Πάντως, παρόλο που δε μπορείτε να τα δείτε εύκολα, τα software breakpoints όντως υπάρχουν! Το παρακάτω +πρόγραμμα είναι αρκετό για να πείσει ακόμα και τους πιο \"δύσκολους\" από εσάς: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + + int main(void) + { + + if (*((unsigned char *)main+6)==0xcc) + printf("Software Breakpoint detected at main()!\n"); + else + printf("No software breakpoint at main()!\n"); + + return 0; + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +> bash$ gcc -o bp_test bp_test.c +> bash$ ./bp_test +> No software breakpoint at main()! +> bash$ gdb bp_test +> (gdb) r +> Starting program: /home/alf/projects/magaz/issue1/bp_test +> No software breakpoint at main()! +> +> Program exited with code 01. +> (gdb) break main +> Breakpoint 1 at 0x804832e +> (gdb) r +> Starting program: /home/alf/projects/magaz/issue1/bp_test +> +> Breakpoint 1, 0x0804832e in main () +> (gdb) c +> Continuing. +> Software Breakpoint detected at main()! +> +> Program exited with code 01. + +Ο λόγος που ο έλεγχος γίνεται στο 7 byte της main() (main+6) και όχι στο πρώτο (main), είναι ότι ο GDB τοποθετεί τα breakpoints μετά από τον [πρόλογο της +συνάρτησης](05_rce2-5.html#c_call). + +### [4.2 Hardware Breakpoints]{#ss4.2} + +Τα hardware breakpoints βασίζονται στο υλικό και για αυτό ο ακριβής τρόπος υλοποίησης διαφέρει ανάλογα με τον επεξεργαστή. Στην αρχιτεκτονική x86 (386+) μέσα +στον επεξεργαστή υπάρχουν 4 debug registers DR0-DR3. Σε κάθε έναν από αυτούς μπορεί να ανατεθεί ο έλεγχος μιας θέσης μνήμης, ώστε να προκαλεί ένα interrupt όταν +η διεύθυνση μνήμης που τον αφορά διαβαστεί, γραφτεί, διαβαστεί ή γραφτεί ή εκτελεστεί ως μέρος της τρέχουσας εντολής (R, W, RW, X). Στα τρία πρώτα modes έχουμε +λειτουργία watchpoint και πρόκειται για τον μόνο πρακτικό τρόπο υλοποίησης τους. Με software, το μόνο που θα μπορούσαμε να κάνουμε είναι να ελέγχουμε κάθε +εντολή για προσπελάσεις στη μνήμη, διαδικασία **εξαιρετικά** χρονοβόρα. Εκμεταλλευόμενοι το hardware, κάθε προσπέλαση στη μνήμη συγκρίνεται σιωπηλά με τα +περιεχόμενα των DR\'s και αν υπάρξει κάποιο ταίριασμα επεμβαίνει ο debugger. Οι έλεγχοι γίνονται παράλληλα με την υπόλοιπη λειτουργία του επεξεργαστή και για +αυτό δεν υπάρχει καμία καθυστέρηση. + +Για να χρησιμοποιήσουμε hardware breakpoints στον GDB αντί για την εντολή **break** χρησιμοποιούμε την **hbreak**. H σύνταξη είναι ακριβώς όμοια με την +**break**. + +### [4.3 Hints and Tips - Home-made Traps]{#ss4.3} + +Συχνά χρειάζεται να σταματήσουμε ένα κομμάτι κώδικα πριν εκτελεστεί αλλά δεν μπορούμε να το κάνουμε με τη break του GDB διότι πχ ο κώδικας βρίσκεται σε μια +shared βιβλιοθήκη που δεν έχει φορτωθεί ακόμα. Ένας τρόπος να πετύχουμε το σκοπό μας είναι να τοποθετήσουμε μια εντολή trap (0xCC για x86) στο σημείο που +θέλουμε, αφού γράψουμε κάπου πιο byte ήταν πριν εκεί. Αυτό βέβαια θα πρέπει να γίνει στο αρχείο με έναν hex editor. Όταν τρέξει ο επιθυμητός κώδικας θα δούμε +κάτι σαν το παρακάτω: + +> Program received signal SIGTRAP, Trace/breakpoint trap. +> 0x0804835d in function () +> (gdb) print $eip$1 = (void *) 0x804835d +> (gdb) set *(--(char *)($eip))=0x55 +> (gdb) r +> ... + +Αυτό που κάνουμε είναι ουσιαστικά ότι ακριβώς κάνει ο debugger όταν βρει ένα breakpoint που έχουμε τοποθετήσει με την **break**.Η εντολή + +> set *(--(char *)($eip))=0x55 + +Πιo καθαρά θα μπορούσε να γραφτεί: + +> (gdb) set $eip=$eip-1 +> (gdb) set *(char *)$eip=0x55 ή (gdb) set {char}$eip=0x55 + +Χρειάζεται να μειώσουμε τον eip, διότι όταν προκληθεί το trap ο έλεγχος επιστρέφει στον GDB με τον eip να δείχνει στην αμέσως επόμενη εντολή. Επομένως, +πηγαίνουμε μια θέση πίσω στη μνήμη και γράφουμε το αυθεντικό byte (εδώ το 0x55, push ebp). Προσοχή στο casting σε (char \*). Είναι απαραίτητο γιατί αλλιώς ο GDB +νομίζει (από default) πως θέλουμε να γράψουμε τον **ακέραιο** 0x55 (0x00000055) και έτσι θα γράψει 4 bytes αντί 1 που θέλουμε εμείς! + +> + + +### [5. Χρήσιμες έως **πολύ** χρήσιμες πληροφορίες]{#s5} + +### [5.1 The C calling convention]{#ss5.1} + +Στο κομμάτι αυτό θα εξετάσουμε τον τρόπο με τον οποίο γίνεται το πέρασμα των παραμέτρων στις συναρτήσεις αλλά και πως υλοποιούνται οι τοπικές μεταβλητές. +Ύστατος σκοπός είναι η εξοικείωση με τον υλοποίηση των συναρτήσεων σε χαμηλό επίπεδο ώστε η μελέτη των assembly listings να είναι γρήγορη και οδηγεί σε ξεκάθαρα +συμπεράσματα. + +Υπάρχουν βέβαια διάφορες επιλογές αλλά εδώ θα δούμε την πιο κοινή, η οποία χρησιμοποιείται στα προγράμματα της C (και όχι μόνο). Η κλήση μιας συνάρτησης έχει ως +αποτέλεσμα τη μεταφορά του ελέγχου σε κάποιο αυθαίρετο κομμάτι κώδικα. Τα μεγάλα ερωτήματα που τίθενται είναι τα εξής: + +- 1\. πως ξέρει αυτό το κομμάτι που βρίσκονται οι παράμετροι που περιμένει; +- 2.που αποθηκεύει τις τοπικές μεταβλητές; + +Μια πρώτη προσέγγιση θα ήταν να παίρνει τα δεδομένα του (παραμέτρους και τοπικές μεταβλητές) από συγκεκριμένες απόλυτες διευθύνσεις μνήμης. Όλα ωραία και καλά +μέχρι να χρειαστεί να υλοποιήσουμε αναδρομικές συναρτήσεις (συναρτήσεις που καλούν τον εαυτό τους). Για παράδειγμα η f η οποία εκτυπώνει τους αριθμούς από το 1 +μέχρι το x: + +> void f(int x) +> { +> if (x>1) +> f(x-1); +> printf("%d ",x); +> } + +και έστω πως η συνάρτηση περιμένει την παράμετρο x στη διεύθυνση 100 (τι πρωτότυπους αριθμούς που χρησιμοποιώ!) + +Αν έχουμε την κλήση f(2) εμείς περιμένουμε το αποτέλεσμα \"1 2\". Ας δούμε πιο αναλυτικά τι όντως θα συμβεί: Όταν κληθεί για πρώτη φορά η f όλα είναι όπως +πρέπει, η διεύθυνση 100 περιέχει το αρχικό x (το 2). Το 2 είναι μεγαλύτερο από το 1 οπότε καλείται η f(x-1) δηλαδή η f(1). H διεύθυνση 100 περιέχει τώρα τον +αριθμό 1. Το τρέχον x δεν είναι μεγαλύτερο του 1 οπότε απλώς εκτελείται η printf και εκτυπώνεται το \"1\". Η συνάρτηση f(1) επιστρέφει και εκτελείται η printf η +οποία εκτυπώνει \... πάλι \"1\". Η προηγούμενη τιμή του x (το 2) έχει χαθεί :( + +Η μαγική λέξη για την αποφυγή τέτοιων προβλημάτων είναι ο σωρός (stack). Κάθε πρόγραμμα διατηρεί το δικό του σωρό, ο οποίος αρχίζει από υψηλές διευθύνσεις και +μεγαλώνει προς της χαμηλές. Η σύμβαση της C για την κλήση συναρτήσεων λέει πως οι παράμετροι \"σπρώχνονται\" στο σωρό από τα δεξιά προς τα αριστερά. Επίσης η +συνάρτηση που έκανε την κλήση είναι υπεύθυνη για να καθαρίσει τον σωρό (να τον φέρει στην αρχική κατάσταση). Για παράδειγμα η κλήση της συνάρτησης f(x,y,z) +μεταφράζεται σε: + +> push z +> push y +> push x +> call f -------> f: ... +> ... +> ret +> add esp,12 (4bytes * 3 παραμέτρους) + +![](/33/img/stack01.png) + +Οι τοπικές μεταβλητές αποθηκεύονται και αυτές στο σωρό σε χώρο που δεσμεύεται μετά τη διεύθυνση επιστροφής της συνάρτησης. Αυτό γίνεται απλά με την μείωση του +stack pointer esp (δείκτη στην \"κορυφή\" του σωρού) κατά τόσες θέσεις όσες τα bytes που χρειαζόμαστε για τις τοπικές μεταβλητές. + +![](/33/img/stack02.png) + +Για να προσπελάσουμε κάποιο δεδομένο χρησιμοποιούμε τον esp και τη σχετική απόσταση του από αυτόν. Για παράδειγμα η τελευταία τοπική μεταβλητή (σε σχέση με τη +σειρά που τις έχουμε δηλώσει στον κώδικα) βρίσκεται στη διεύθυνση esp+0.Το πρόβλημα με το παραπάνω σχέδιο είναι ότι κανείς δεν εγγυάται πως ο esp δεν θα αλλάξει +τιμή κατά τη διάρκεια της συνάρτησης. Για παράδειγμα αν εκτελεστεί μία εντολή push eax, η τελευταία τοπική μεταβλητή είναι πια στη θέση esp+4 και όχι esp+0. +Έτσι ο compiler πρέπει να φροντίσει να ακολουθεί τις αλλαγές και να παράγει σωστά offsets για τις τοπικές μεταβλητές. + +![](/33/img/stack03.png) + +Μια πιο βολική προσέγγιση χρησιμοποιεί την έννοια του \"πλαισίου\". Με κάθε κλήση συνάρτησης δημιουργείται στο σωρό ένα \"πλαίσιο\" (frame) που περιέχει τα +δεδομένα της συγκεκριμένης κλήσης (παραμέτρους, τοπικές μεταβλητές και διεύθυνση επιστροφής) και επίσης τη διεύθυνση του πλαισίου της προηγούμενης συνάρτησης +(αυτή που κάλεσε την τρέχουσα). Μέσα σε κάθε πλαίσιο ο τρόπος πρόσβασης στα τοπικά δεδομένα είναι ανεξάρτητος από τις αλλαγές του δείκτη του σωρού. Η δημιουργία +του πλαισίου απαιτεί 4 μικρές αλλαγές σε σχέση με τη προηγούμενη προσέγγιση: + +- 1.Ένας καταχωρητής δεσμεύεται καθολικά για να συγκρατεί την τρέχουσα διεύθυνση πλαισίου. Στους x86 αυτός είναι ο ebp. +- 2.Πριν τη δέσμευση χώρου για τις τοπικές μεταβλητές αποθηκεύεται στο σωρό η διεύθυνση του προηγούμενου πλαισίου. +- 3.Μετά το (1) η διεύθυνση που περιέχει ο esp (κορυφή του σωρού) γίνεται η διεύθυνση του τρέχοντος πλαισίου και αποθηκεύεται στον ebp. +- 4.Πριν την επιστροφή της συνάρτησης επανατοποθετείται στον ebp η διεύθυνση του προηγούμενου πλαισίου. + +Σχηματικά: + +![](/33/img/stack04.png) + +Τώρα σε κάθε συνάρτηση ο κώδικας για την προσπέλαση των τοπικών δεδομένων είναι ο ίδιος. Αν υποθέσουμε πως έχουμε επεξεργαστή και λειτουργικό 32-bit (πχ linux +:) ) τότε η πρώτη παράμετρος της συνάρτησης βρίσκεται στη θέση ebp+8, η δεύτερη στην ebp+12 κτλ Ομοίως η πρώτη τοπική μεταβλητή βρίσκεται στη θέση ebp-4, η +δεύτερη στη θέση ebp-8.Αυτό ισχύει ακόμα και όταν οι παράμετροι και οι τοπικές μεταβλητές είναι πιο μικροί από 4 bytes (πχ char). O compiler προτιμά να +σπαταλήσει λίγη μνήμη για λόγους ομοιογένειας στον παραγόμενο κώδικα αλλά κυρίως για λόγους απόδοσης, αφού με αυτόν τον τρόπο όλα τα δεδομένα είναι +ευθυγραμμισμένα (aligned) σε όρια των 4bytes (ανοίξτε κάποιο βιβλίο αρχιτεκτονικής υπολογιστών για να μάθετε γιατί\...). Βέβαια, υπάρχουν και προφανείς +εξαιρέσεις όταν για παράδειγμα έχουμε \"δεδομένα\" μεγαλύτερα των 4 bytes όπως structs. + +Οι περισσότεροι compilers δίνουν επιλογή πιο από τους δύο τρόπους να χρησιμοποιήσουν. Ο gcc χρησιμοποιεί πλαίσια ως default επιλογή και με το flag +\"-fomit-frame-pointer\" προσπαθεί να το αποφύγει όπου γίνεται. Από το info: + +> -fomit-frame-pointer +> Don't keep the frame pointer in a register for functions that +> don't need one. This avoids the instructions to save, set up and +> restore frame pointers; it also makes an extra register available +> in many functions. *It also makes debugging impossible on some +> machines.* + +Mια συνάρτηση που χρησιμοποιεί frames τυπικά αρχίζει με την ακολουθία: []{#c_call} + +> push ebp +> mov ebp,esp ; Function prologue +> sub esp, M + +και τελειώνει: + +> mov esp, ebp +> pop ebp ; Function epilogue +> ret +> +> ή +> +> leave +> ret + +### [5.2 System Calls]{#ss5.2} + +Τα σύγχρονα λειτουργικά συστήματα που σέβονται τον εαυτό τους, φροντίζουν να ξεχωρίζουν το \"χώρο\" του πυρήνα (kernel space) από το \"χώρο\" τον χρηστών (user +space). Αυτό γίνεται ώστε να μη μπορεί οποιοσδήποτε τυχαίος χρήστης να πειράξει τον πυρήνα(ή να εκτελεί κώδικα του πυρήνα αυθαίρετα) και να θέσει σε κίνδυνο την +ασφάλεια του συστήματος. Ο χωρισμός αυτός υλοποιείται με τη χρήση μηχανισμών που προσφέρει ο εκάστοτε επεξεργαστής (πχ paging, segmentation). + +Βέβαια, με κάποιο τρόπο πρέπει οι εφαρμογές να επικοινωνούν με τον πυρήνα για διάφορες εργασίες (πχ Ι/Ο). Η λύσεις είναι τα λεγόμενα call gates (όχι colgates, +αυτά είναι οδοντόκρεμες\...) και τα software interrupts. Και τα δύο έχουν ως σκοπό να ορίσουν διακριτά σημεία εισόδου στον πυρήνα. Μπορείτε να τα σκεφτείτε ως +\"gateways\" για το τοπικό δίκτυο του πυρήνα. + +Στο linux χρησιμοποιούνται τα call gates για εκτελέσιμα που έρχονται από άλλα λειτουργικά πχ solaris και το software interrupt 0x80 για native εφαρμογές. Στο +κείμενο αυτό θα ασχοληθούμε μόνο με την δεύτερη τεχνική (για την πρώτη θα έπρεπε πρώτα να αναφερθεί όλος ο μηχανισμός των descriptors στους x86). Το interrupt +0x80 όταν κληθεί μεταφέρει τον έλεγχο στον πυρήνα, μαζί με πληροφορίες για την εργασία που πρέπει να εκτελέσει. + +Κατά την κλήση ενός syscall (για την αρχιτεκτονική x86) στον eax υπάρχει ο αριθμός του syscall και στους ebx, ecx, edx, esi, edi, ebp(πυρήνες 2.4 και πάνω) οι +μέχρι έξι παράμετροι που δέχεται το συγκεκριμένο syscall. Έτσι μια τυπική κλήση είναι: + +> mov ebx, 0 +> mov eax, 1 ; syscall 1: exit +> int 0x80 + +Φυσικά, επειδή το να γράφουμε τέτοιο κώδικα κάθε φορά που θέλουμε κάτι από τον πυρήνα δεν είναι και πολύ ευχάριστο, η libc έχει φροντίσει να δημιουργήσει τις +αντίστοιχες wrapper συναρτήσεις. Έτσι αντί για το παραπάνω εμείς αρκεί να γράφουμε exit(0). + + +### [6. Hands-on Παράδειγμα]{#s6} + +Έστω ότι μια μέρα πέφτει στα χέρια σας το παρακάτω εκτελέσιμο : [rce2.bz2 (1.7k)](rce2.bz2) + +Όλο χαρά το εκτελείτε: + +> bash$ rce2 +> Say the password: sesame +> What??? +> bash$ rce2 +> Say the password: kuku +> What??? + +Ποιο να είναι άραγε το μυστικό password; + +Ας ετοιμαστούμε λοιπόν για αντιμετωπίσουμε ατελείωτα listing με εκατομμύρια γραμμές ακατανόητου κώδικα! Η ας δοκιμάσουμε κάτι πιο απλό: + +> bash$ strings rce2 +> ... + +Η **strings** τυπώνει όλες τις εκτυπώσιμες ASCII ακολουθίες που υπάρχουν στο εκτελέσιμο και έχουν μήκος πάνω από 4 χαρακτήρες (default). + +Μέσα στη λίστα με τα strings θα παρατηρήσετε κάποιο πιο ενδιαφέρον από τα υπόλοιπα :) Σπάνια βέβαια συμβαίνει να υπάρχουν plain-text κωδικοί μέσα στο εκτελέσιμο +αλλά δε χάνουμε τίποτα να δοκιμάσουμε! + +Για εκπαιδευτικούς σκοπούς, θεωρήστε ότι η προηγούμενη διαδικασία δε απέδωσε καρπούς. Ας δούμε τι μπορούμε να μάθουμε για τη ροή του προγράμματος. + +> bash$ ltrace -i -o rce2.ltr rce2 +> Say the password: sesame +> What??? +> bash$ cat rce2.ltr +> [080483b5] __libc_start_main(0x0804851c, 1, 0xbffff784, 0x0804830c, 0x08048594 +> +> [080484d5] printf("%s: ", "Say the password") = +> 18 +> [080484e1] fflush(0x40150340) = 0 +> [080484f5] fgets("sesame\n", 20, 0x401501e0) = +> 0xbffff700 +> [0804849c] isspace(10, 0x40153234, 0xbffff700, 0xbffff784, 0xbffff6e8) = +> 8192 +> [0804849c] isspace(101, 0x40153234, 0xbffff700, 0xbffff784, 0xbffff6e8) = 0 +> [08048557] puts("What???") = 8 +> [ffffffff] +++ exited (status 0) +++ + +Μόλις αποκτήσαμε δύο σπουδαίες πληροφορίες.\ +Κοιτάξτε καλά τη \_\_libc\_start\_main().\ +Συνεχίστε να την κοιτάζετε.\ +H \_\_libc\_start\_main(), εκτός των άλλων, φροντίζει να κληθεί και το δικό μας κυρίως πρόγραμμα.\ +Κοιτάξτε λίγο ακόμα\...\ +H \_\_libc\_start\_main() πρέπει να γνωρίζει που βρίσκεται ο δικός μας κώδικας. Επομένως\...\ +Για να σας βγάλω από την αγωνία, σας λέω πως η πρώτη παράμετρος της \_\_libc\_start\_main() πρόκειται για τη διεύθυνση της main (0x0804851c)! + +Αυτή η πρώτη πληροφορία οδηγεί στη δεύτερη. Παρατηρήστε ότι όλες οι διευθύνσεις μετά την \_\_libc\_start\_main() και μέχρι πριν την puts() είναι μικρότερες από +την αρχή της main(). Άρα είναι ασφαλές να υποθέσουμε πως δεν ανήκουν σε αυτή αλλά σε κάποια άλλη συνάρτηση. + +Το τρίτο πράγμα που μάθαμε, είναι ότι στη διεύθυνση 0x08048557 έχει ήδη αποφασιστεί αν το password μας είναι σωστό ή όχι. + +Ας χρησιμοποιήσουμε το βαρύ πυροβολικό\... + +> bash$ gdb rce2 +> (no debugging symbols found)...(gdb) break main +> Function "main" not defined. +> (gdb) + +Ουπς. Το εκτελέσιμο δεν περιέχει σύμβολα αλλά εμείς ξέρουμε τη διεύθυνση της main()! + +> (gdb) break *0x804851c +> Breakpoint 1 at 0x804851c +> (gdb) r +> Starting program: /home/alf/projects/magaz/issue1/rce2 +> (no debugging symbols found)... +> Breakpoint 1, 0x0804851c in printf () +> (gdb) x/30i $eip +> 0x804851c : push ebp +> 0x804851d : mov ebp,esp +> 0x804851f : push edi +> 0x8048520 : push esi +> 0x8048521 : sub esp,0x20 +> 0x8048524 : and esp,0xfffffff0 +> 0x8048527 : push esi +> 0x8048528 : push 0x13 +> 0x804852a : lea esi,[ebp-40] +> 0x804852d : push esi +> 0x804852e : push 0x80485bd +> 0x8048533 : call 0x80484bc +> 0x8048538 : mov edi,0x80485ce +> 0x804853d : mov ecx,0xb +> 0x8048542 : cld +> 0x8048543 : add esp,0x10 +> 0x8048546 : repz cmps ds:[esi],es:[edi] +> 0x8048548 : jne 0x8048564 +> 0x804854a : sub esp,0xc +> 0x804854d : push 0x80485d9 +> 0x8048552 : call 0x8048354 +> 0x8048557 : add esp,0x10 +> 0x804855a : lea esp,[ebp-8] +> 0x804855d : pop esi +> 0x804855e : xor eax,eax +> 0x8048560 : pop edi +> 0x8048561 : leave +> 0x8048562 : ret +> 0x8048563 : nop +> 0x8048564 : sub esp,0xc + +O GDB νομίζει πως βρισκόμαστε 408 bytes από την αρχή της printf για τους [γνωστούς λόγους](05_rce2-2.html#gdb_asm). Πριν αρχίσουμε σαν παλαβοί να κάνουμε single +step ας δούμε τι μπορούμε να συνάγουμε από το listing. + + push ebp + mov ebp,esp + push edi + push esi + +Καταρχάς η main είναι [frame-based](05_rce2-5.html#c_call) κάτι που φαίνεται από το γνώριμο πρόλογο. Επίσης σώζονται στο σωρό οι καταχωρητές esi και edi ώστε να +μπορούν να ανακτηθούν οι τιμές τους πριν το τέλος της συνάρτησης. Το γιατί γίνεται αυτό πρόκειται για μια εσωτερική υπόθεση του compiler (o gcc διατηρεί τους +ebx, esi και edi κατά τις κλήσεις διότι τους χρησιμοποιεί για δικά του θέματα (πχ προσωρινή αποθήκευση τιμών). + + sub esp,0x20 + and esp,0xfffffff0 + +Μετά δεσμεύεται χώρος στο σωρό για 0x20 bytes και επίσης ο esp μειώνεται(πιθανότατα) και άλλο ώστε να έρθει σε όριo των 16 bytes. Η όλη διαδικασία είναι +αποτέλεσμα του optimization και δεν είναι απαραίτητο πως το πρόγραμμα θα χρησιμοποιήσει όλη τη μνήμη που δεσμεύτηκε τελικά. + + push esi <--- ?? + push 0x13 + lea esi,[ebp-40] + push esi + push 0x80485bd + call 0x80484bc + ... + add esp,0x10 + +Ακολουθεί ένα μυστηριώδες \"push esi\" και ύστερα μια κλασική κλήση συνάρτησης. Η συνάρτηση δέχεται τρεις παραμέτρους: func\_0x804845c( 0x80485bd, 0x13, +ebp-40). H τελευταία παράμετρος είναι η διεύθυνση μιας τοπικής μεταβλητής, αφού έχει αρνητικό offset από τον ebp. Το αναμενόμενο \"add esp, X\" (διόρθωση του +σωρού) βρίσκεται λίγες γραμμές πιο κάτω. Ο λόγος που δε βρίσκεται αμέσως μετά την call, είναι ότι ο gcc αποφάσισε να αλλάξει τη σειρά των εντολών για λόγους +optimization (έχει να κάνει με τα pipelines του pentium). Όλα εντάξει; + +Ελπίζω να μην απαντήσατε \"ναι\"! Κάτι δεν πάει καλά σε όσα έχω πει ως τώρα: γιατί δέχτηκα με τόση σιγουριά πως η συνάρτηση δέχεται τρεις παραμέτρους, ενώ όχι +μόνο γίνονται τέσσερα push πριν από αυτή αλλά κυρίως, ο σωρός διορθώνεται κατά 0x10 = 4\*4 bytes (4 bytes για κάθε παράμετρο). Λοιπόν, εκτός από το γεγονός ότι +εγώ έγραψα το πρόγραμμα και το ξέρω :), υπάρχει ένας επιπλέον λόγος. Όταν γίνεται το πρώτο \"push esi\", ο esi δεν έχει αρχικοποιηθεί μέσα στη main() και έτσι +έχει μια άγνωστη τιμή. Γιατί να περάσουμε σε μια συνάρτηση μια παράμετρο με άγνωστη τιμή; + +Η απάντηση για ακόμα μια φορά είναι το optimization (περιττό να σας πω ότι το πρόγραμμα έγινε compile με -Ο2). Ο compiler θέλει να κρατάει τον esp σε +διευθύνσεις πολλαπλάσιες των 16 bytes! Το κόστος προσπέλασης σε μη aligned διευθύνσεις είναι τόσο σημαντικό, ώστε ο gcc εισάγει dummy εντολές για να το +αποφύγει! + + mov edi,0x80485ce + mov ecx,0xb + cld + ... + repz cmps ds:[esi],es:[edi] + jne 0x8048564 + +Εδώ στον edi φορτώνεται μια διεύθυνση μνήμης και στον edi η τιμή 11. Μετά \"καθαρίζεται\" το direction flag. Ακολουθεί η εντολή \"repz cmps +ds:\[esi\],es:\[edi\]\", η οποία με λίγα λόγια λέει: όσο τα bytes που βρίσκονται στις διευθύνσεις που δείχνουν esi και edi είναι ίσα και ο ecx δεν είναι 0 +αύξησε (αν το direction flag είναι 0/clear) τους esi και edi κατά ένα byte και έλεγξε ξανά (η μαγεία των CISC επεξεργαστων\...). Ουσιαστικά κάνει ακριβώς την +ίδια δουλειά με μια κλήση strncmp(esi,edi,ecx), ελέγχει αν τα πρώτα \#ecx bytes δύο string που αρχίζουν στις διευθύνσεις esi και edi είναι ίσα. + +Ωραία, ξέρουμε την τιμή του edi αλλά ο esi τη τιμή έχει; Λίγο πιο πάνω υπάρχει η \"lea esi,\[ebp-40\]\" και επειδή ξέρουμε ότι ο gcc φροντίζει να μην αλλάζει ο +esi από συναρτήσεις, είμαστε σίγουροι ότι έχει ακόμα την ίδια τιμή. + +Για να συνοψίσουμε, το πρόγραμμα καλεί μια συνάρτηση της οποίας μια παράμετρος είναι η διεύθυνση μιας τοπικής μεταβλητής (ebp-40) και μετά συγκρίνει τα bytes +που βρίσκονται εκεί με κάποια άλλα που βρίσκονται σε μια σταθερή θέση. Δε ξέρω τι λέτε εσείς αλλά εμένα μου φαίνεται πως εδώ γίνεται ο έλεγχος του password! + +Η επόμενη εντολή είναι η jne (jump if not equal/zero). Αν η σύγκριση είναι επιτυχής τότε το zero flag έχει ενεργοποιηθεί από το προηγούμενο βήμα και έτσι +**δεν** ακολουθούμε το άλμα. Αν το password είναι λάθος το ZF=0 και το άλμα γίνεται. + +Για να δούμε ποίο είναι το password: + +> (gdb) break *0x8048546 +> Breakpoint 2 at 0x8048546 +> (gdb) c +> Continuing. +> Say the password: sesame +> +> Breakpoint 2, 0x08048546 in printf () +> (gdb) x/5i $eip +> 0x8048546 : repz cmps ds:[esi],es:[edi] +> 0x8048548 : jne 0x8048564 +> 0x804854a : sub esp,0xc +> 0x804854d : push 0x80485d9 +> 0x8048552 : call 0x8048354 +> (gdb) x/s $esi +> 0xbffff720: "sesame" +> (gdb) x/s $edi +> 0x80485ce <_IO_stdin_used+26>: .......... xe xe! + +Η παραπάνω τεχνική, όπου βρίσκουμε ένα σωστό password/serial εντοπίζοντας το σημείο που γίνεται η σύγκριση με αυτό που έχουμε εισάγει εμείς, λέγεται +**password/serial fishing** + +Εντάξει, μάθαμε το password, γιατί όμως να σταματήσουμε εδώ; Γιατί να μην πειράξουμε το πρόγραμμα ώστε να δέχεται ως σωστό κάθε password; Για να το πετύχουμε, +αρκεί να μην ακολουθούμε ποτέ το άλμα. Ξέρουμε ότι η jne (σε αυτή τη μορφή) καταλαμβάνει στη μνήμη 2 bytes, διότι η επόμενη εντολή αρχίζει δύο bytes πιο μετά. + +> (gdb) x/2b 0x8048548 +> 0x8048548 : 0x75 0x1a + +Το 0x75 είναι το opcode της εντολής ενώ το 0x1a η (προσημασμένη) απόσταση του άλματος. Αν γίνει το άλμα ο έλεγχος θα μεταφερθεί 0x1a bytes από το τέλος της +εντολής(αρχή της επόμενης), εδώ 0x804854a + 0x1a = 0x8048564. + +Για να πετύχουμε το σκοπό μας, αρκεί να αντικαταστήσουμε τα δύο αυτά bytes με nop (no operation, opcode 0x90). Φυσικά δεν έχει νόημα να το κάνουμε αυτό μόνο στη +μνήμη αλλά στο image του εκτελέσιμου που βρίσκεται στο αρχείο. Το πρόβλημα είναι να εντοπίσουμε σε ποιο σημείο του αρχείου βρίσκεται ο κώδικας που θέλουμε να +πειράξουμε. Ο ELF header έχει όλες τις πληροφορίες που χρειαζόμαστε αλλά αφού δεν έχουμε αναφερθεί ακόμα σε αυτόν θα κάνουμε κάτι άλλο: θα ψάξουμε το αρχείο για +να βρούμε την αρχική ακολουθία από bytes. Υπάρχει περίπτωση η ίδια ακολουθία να υπάρχει σε πολλά σημεία και πρέπει να είμαστε σίγουροι πως πειράζουμε το σωστό. +Για αυτό χρειαζόμαστε αρκετά bytes γύρω από την εντολή (το context). + +> (gdb) x/10b 0x8048548-5 +> 0x8048543 : 0x83 0xc4 0x10 0xf3 0xa6 0x75 +> 0x1a 0x83 +> 0x804854b : 0xec 0x0c + +Αν ψάξετε για αυτά τα bytes στο αρχείο(με έναν hexeditor πχ του mc) θα τα βρείτε μόνο μια φορά και το offset του 0x75 0x1a είναι 0x548. Αντικαταστήστε τα δύο +αυτά bytes με 0x90 0x90. + +> bash$ ./rce2 +> Say the password: qrwrwr +> Hooray! +> bash$ ./rce2 +> Say the password: sdfeg4453 +> Hooray! + +Συγχαρητήρια, μόλις \"σπάσατε\" το πρόγραμμα! + + +### [7. Πρόκληση]{#s7} + +### [7.1 Προηγούμενη πρόκληση - Λύση και Hall Of Fame]{#ss7.1} + +Στην προηγούμενη πρόκληση ο σκοπός ήταν να βρείτε ποιος κωδικός αντιστοιχεί στο όνομα σας. Το μεγάλο πρόβλημα που είχα ήταν ότι για να υπάρξει source listing +πρέπει εκτός από το compilation με το -g να είναι διαθέσιμο και το αντίστοιχο source αρχείο. Θα μπορούσα απλώς να σας το δώσω και να σας προτρέψω να μην το +κοιτάξετε. Κάτι μου λέει όμως ότι πολλοί δε θα μπορούσαν να αντισταθούν στο πειρασμό ;) Για αυτό το λόγο το κυρίως αρχείο είναι απλώς ένα container που περιέχει +τόσο το εκτελέσιμο challenge όσο και τον κώδικα του (στοιχειωδώς κρυπτογραφημένο με xor). Κατά την εκτέλεση τα κάνει dump σε δύο κρυφά αρχεία(\".ch0src\" και +\".alfch0\") στον τρέχοντα κατάλογο και τρέχει το \".alfch0\" ή τον gdb. Τα αρχεία αυτά διαγράφονται μόλις τελειώσει το πρόγραμμα. + +Το challenge αυτό καθεαυτό είναι σχετικά απλό, για αυτό και άλλαξα τον πηγαίο κώδικα ώστε να έχει ανούσια ονόματα μεταβλητών και συναρτήσεων. Αρχικά προτρέπει +τον χρήστη για το όνομα και τον κωδικό (συνάρτηση \"f\"), και μετά παράγει δύο αριθμούς, έναν για το όνομα(συνάρτηση \"f1\") και έναν για τον κωδικό(συνάρτηση +\"f45\"). Aν οι δύο αριθμοί συμπίπτουν και το μήκος το ονόματος και του κωδικού είναι μη μηδενικά τότε όλα ΟΚ! + +Η συνάρτηση f1 περιέχει μια πιθανώς one-way hash function (σημ: δεν έχει αποδειχτεί ότι τέτοιες συναρτήσεις υπάρχουν) ενώ η f45 είναι σαφώς +αντιστρέψιμη(υπολογιστικά πάντα). Αν και η f45 ήταν δύσκολα αντιστρέψιμη, τότε η πρόκληση θα ήταν πρακτικά άλυτη. Για όσους αρέσκονται στoυς τύπους: + +Ν=f1(name)\ +P=f45(pass) + +Εμείς γνωρίζουμε τo name, την f1(), την f45() και μπορούμε να υπολογίσουμε το Ν. Το πρόβλημα είναι να βρούμε το pass ώστε το P να είναι ίσο με το N. + +Η f45() είναι: + +> long int f45(char *s,int l) +> { +> unsigned long int h; +> +> h=strtoul(s,NULL,16); +> if (h!=0) { +> h^=0x55555555; +> if (h&1) +> h^=0x00badbad; +> else +> h^=0x00dabdab; +> } +> return h; +> } + +Η αντιστρεψιμότητα(υπολογιστική) της f45() βασίζεται στο γεγονός ότι η xor είναι συμμετρική και εδώ έχουμε μόνο xor. Επίσης με το if(h&1) {\...} υπάρχει +κίνδυνος να κάνουμε την f45() μη αντιστρέψιμη(μαθηματικά) αλλά οι τιμές είναι επιλεγμένες ώστε να μη συμβαίνει αυτό. Βέβαια η μαθηματική μη αντιστρεψιμότητα δεν +είναι πρόβλημα, απλώς θα υπήρχαν περισσότεροι από ένας σωστοί κωδικοί για κάθε όνομα. + +Επομένως η f\_45() (αντίστροφη): + +> unsigned long f_45(unsigned long h) +> { +> unsigned long r; +> +> r=h; +> +> if (r!=0) { +> r^=0x55555555; +> if (r&1) +> r^=0x00badbad; +> else +> r^=0x00dabdab; +> } +> +> return r; +> } + +**Hall Of Fame** + +Συγχαρητήρια στους: + +1\. Λαμπής Μιχαήλ\ +2. Γιώργος Πρέκας\ +3. Αρχισυντάκτης (\...με ανάγκασε να τον συμπεριλάβω στο hall of fame!) + +Για τις δωρεάν συνδρομές ενοχλείστε τον αρχισυντάκτη :) + +Ο κώδικας του προηγούμενου challenge: [magaz-ch0-src.tar.bz2 (15k)](magaz-ch0-src.tar.bz2) + +### [7.2 Πρόκληση \#1]{#ss7.2} + +Αυτή τη φορά τα πράγματα είναι κάπως πιο πολύπλοκα. Το εκτελέσιμο δεν περιέχει debugging πληροφορίες. Σκοπός είναι το σύστημα να σας πει ότι το authentication +έγινε με επιτυχία. Καλή εξερεύνηση\... + +Το εκτελέσιμο: [challenge1.bz2 (6.3k)](challenge1.bz2) + +Όσοι επιθυμούν ας μου στείλουν ένα mail εξηγώντας συνοπτικά πως λειτουργεί το πρόγραμμα και τα δεδομένα-απαντήσεις. Αν κάποιος έχει όρεξη ας φτιάξει και έναν +key generator! Ως συνήθως όσοι τα καταφέρουν θα μπουν στο επόμενο Hall Of Fame! + +Στείλτε σχόλια, διορθώσεις, προσθήκες στο alf82 at freemail dot gr. + diff --git a/content/articles/34/01_editorial.md b/content/articles/34/01_editorial.md new file mode 100644 index 0000000..12325b8 --- /dev/null +++ b/content/articles/34/01_editorial.md @@ -0,0 +1,32 @@ ++++ +title = 'Editorial' +date = '2003-10-01T00:00:00Z' +description = '' +author = 'Ιατρού Μιχάλης iatrou ατ hellug ντοτ gr(mailto:iatrouNO@SPAMhellug.gr)' +issue = ['Magaz 34'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Magaz\... still unpatented.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αναμφισβήτητα το πιο σημαντικό γεγονός του Σεπτεμβρίου ήταν η ψηφοφορία σχετικά με τα software patents στο Ευρωπαϊκό Κοινοβούλιο. Η ψηφοφορία πραγματοποιήθηκε +στις 24 Σεπτεμβρίου, ενώ είχε ήδη αναβληθεί δύο φορές, εκ των οποίων η τελευταία ήταν στις αρχές Σεπτεμβρίου. Τα αποτελέσματα της ψηφοφορίας δικαίωσαν τις +προσπάθειες όλων όσων αντιτάχθηκαν στα software patents: οι περισσότερες τροποποιήσεις που ψηφίστηκαν στηρίζουν την ιδέα ότι το software δεν μπορεί να +πατενταριστεί. Αν κρίνουμε δε από διάφορες [αντιδράσεις](http://news.zdnet.co.uk/business/legal/0,39020651,39116709,00.htm) μάλλον \"κάποιοι\" ενοχλήθηκαν πολύ +από αυτή την εξέλιξη\... + +Όπως όμως ήταν αναμενόμενο, σε μία ψηφοφορία που διήρκεσε μόλις 40 λεπτά και ψηφίστηκαν συνολικά 78 τροποποιήσεις, δεν ήταν εφικτό να γίνουν όλα **ακριβώς** +όπως θα τα θέλαμε: μπορεί οι βάσεις να έχουν μπει, αλλά περίπου το 20% των τροποποιήσεων πρέπει να επανεξεταστεί και να καταστεί απόλυτα σαφές ότι software και +πατέντες δεν συμβαδίζουν. + +Το σίγουρο είναι ότι αν και κερδίσαμε αυτή τη μάχη, δεν έχουμε κερδίσει τον πόλεμο. Είναι βέβαιο πως στο εγγύς μέλλον θα υπάρξουν πολλές προσπάθειες να πληγεί η +ελευθερία του λογισμικού και πρέπει όλοι να είμαστε σε εγρήγορση + +**Επί του πιεστηρίου\...**\ +9 με 12 Οκτωβρίου πραγματοποιήθηκε στον εκθεσιακό χώρο της HELEXPO στη Θεσσαλονίκη η δεύτερη μεγαλύτερη έκθεση πληροφορικής στην Ελλάδα, η Infosystem. Ο +HEL.L.U.G. μετά από δύο χρόνια απουσίας έδωσε και πάλι το παρόν. Η παρουσία του μπορεί να χαρακτηριστεί απόλυτα επιτυχής: μοιράστηκαν μερικές χιλιάδες CD, ο +κόσμος ενημερώθηκε για το Linux, τον σύλλογο, το ελεύθερο λογισμικό αλλά και για σημαντικά προβλήματα όπως τα software patents. Φωτογραφίες τόσο από την έκθεση +όσο και από τις λοιπές δραστηριότητες του τετραήμερου μπορείτε να βρείτε [εδώ](http://www.hellug.gr/infosystem2003/index.html). diff --git a/content/articles/34/02_texinfo.md b/content/articles/34/02_texinfo.md new file mode 100644 index 0000000..fea6b39 --- /dev/null +++ b/content/articles/34/02_texinfo.md @@ -0,0 +1,326 @@ ++++ +title = 'Documentation ala GNU' +date = '2002-07-01T00:00:00Z' +description = '' +author = 'Καπελώνης Κωστής kkapelon _AT_ freemail.gr(mailto:kkapelonSPAM@SUXfreemail.gr)' +issue = ['Magaz 34'] +issue_weight = 2 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Σε αυτό το άρθρο γίνεται μία εισαγωγή στο επίσημο εργαλείο για documentation της GNU, το σύστημα Texinfo. Απευθύνεται σε προγραμματιστές που έχουν τελειώσει +την κατασκευή μιας εφαρμογής κονσόλας και επιθυμούν να ενσωματώσουν βοήθεια σε αυτή.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +----------------------------------------- + +**2. Οι επιλογές σας** +------------------------------------------------ + +**3. Το texinfo από την μεριά του χρήστη.** +--------------------------------------------------------------------- + +**4. texinfo vs manpages** +---------------------------------------------------- + +**5. Η φιλοσοφία του texinfo** +-------------------------------------------------------- + +**6. To πιο απλό Texinfo αρχείο** +----------------------------------------------------------- + +**7. Ένα μεγαλύτερο έγγραφο** +------------------------------------------------------- + +**8. Συγγραφή του κυρίως κειμένου.** +-------------------------------------------------------------- + +**9. Emacs shortcuts** +------------------------------------------------ + +**10. Επίλογος** +-------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Δεν νομίζω ότι χρειάζεται να επαναλάβω ρήσεις για το Documentation και το sex. Μεγάλα παιδιά είστε, οπότε ξέρετε ότι μεγάλο βάρος στην ποιότητα και την +ευχρηστία μιας εφαρμογής, έχει ΚΑΙ η βοήθεια/τεκμηρίωση που την συνοδεύει. + +Δυστυχώς αρκετές φορές η βοήθεια ενός προγράμματος παραμελείται από τους προγραμματιστές της. Όλοι μας έχουμε συναντήσει προγράμματα που ενώ ήταν λειτουργικά +και μπορούσαν να εκπληρώσουν το σκοπό τους, είχαν ελλιπές ή ακόμα και μηδαμινό documentation. + +Ειδικά στον χώρο του ανοιχτού λογισμικού (open source) τα πράγματα δεν είναι πολύ καλά. Άπειρες επιλογές με περίεργα ονόματα σε γραφικά προγράμματα, ή +undocumented παράμετροι σε προγράμματα κονσόλας (command line arguments) είναι καθημερινό φαινόμενο. Δεν μου αρέσει να ενεργοποιώ επιλογές που απλά είδα στο +δίκτυο ή άκουσα από φίλους ότι \"έτσι λειτουργεί\". Οι μέρες του voodoo πρέπει να μείνουν επιτέλους στην ιστορία. + +Τώρα θα πούνε μερικοί, \"σιγά ρε φίλε! Use the source, Luke!\". Μα καλά είμαστε σοβαροί; Είμαστε στο 2000+ και θα πρέπει να ανοίξω τον πηγαίο κώδικα του +προγράμματος για να δω τι κάνει;Δεν το δέχομαι αυτό. Καλή εφαρμογή = καλός κώδικας + καλή τεκμηρίωση. + +Γράφω λοιπόν αυτό το άρθρο έτσι ώστε όταν τελειώσετε το προγραμματιστικό σας αριστούργημα, με την τέλεια δομημένη εσωτερική αρχιτεκτονική, την ταχύτατη μεταφορά +πληροφορίας ανάμεσα στα διάφορα μέρη του, τις βελτιστοποιημένες στο έπακρο εσωτερικές ρουτίνες και τις πολύπλοκες δομές δεδομένων,όταν πιστέψετε ότι έχετε βάλει +τάξη στο χάος ;-), όταν νιώσετε ένας μικρός θεός και βιώσετε το θαύμα της δημιουργίας, να μην ξεχάσετε και τον παράγοντα τεκμηρίωση. + +### [2. Οι επιλογές σας]{#s2} + +Αν η εφαρμογή που γράφετε έχει γραφικό μέρος και ανήκει σε κάποιο από τα δύο γνωστά περιβάλλοντα εφαρμογών (desktop environments), δεν χρειάζεται να συνεχίσετε +την ανάγνωση. Απλά δείτε τις αντίστοιχες σελίδες που εξηγούν πως πρέπει να είναι το documentation της εφαρμογής σας. Λογικά θα πρέπει να γράψετε ένα αρχείο SGML +Docbook το οποίο θα πρέπει να έχει μια συγκεκριμένη μορφή. + +Αν η εφαρμογή σας είναι απλά γραφική και δεν υπάρχει \"σωστός\" τρόπος για την εισαγωγή βοήθειας, προτιμήστε το δοκιμασμένο Latex. Βάζετε το output σε html στο +site του προγράμματος για online αναζήτηση, ενώ μαζί με το ίδιο το πρόγραμμα ενσωματώνετε τα ps και pdf αρχεία. Αυτό είναι απλά μία πρόταση. Είναι στην κρίση +σας να επιλέξετε. + +Εδώ θα μιλήσουμε για την περίπτωση όπου το πρόγραμμα σας δεν έχει γραφικό περιβάλλον, αλλά εκτελείται σε περιβάλλον γραμμής εντολών. Αν είναι πολύ απλό στην +χρήση, και με λίγες παραμέτρους τα πράγματα είναι εύκολα. Απλά βάλτε στο -h/\--help του να εμφανίζεται κάθε δυνατή παράμετρος με μία μικρή εξήγηση. Σε αυτήν την +περίπτωση μπορείτε να ακολουθήσετε και το GNU style για τις παραμέτρους όπου κάθε μία έχει ένα σύντομο όνομα για τους έμπειρους χρήστες (πχ -b) και ένα πιο +μεγάλο για τους αρχάριους (πχ \--buffer-size). + +Αν όμως δεν ισχύει κάτι τέτοιο οφείλετε να δώσετε ξεχωριστό documentation. Αυτό θα βοηθήσει τόσο τους έμπειρους χρήστες όταν θα θελήσουν να \"ξεζουμίσουν\" το +πρόγραμμα σας, αλλά και τους αρχάριους που αρέσκονται στο να βρίσκουν κάπου \"μαζεμένη\" την βοήθεια ενός προγράμματος. + + +### [3. Το texinfo από την μεριά του χρήστη.]{#s3} + +Ας δούμε ένα παράδειγμα. Έστω ότι θέλετε να μάθετε τα πάντα για το GNU flex. + +Αρχικά μπορείτε να ανοίξετε ένα τερματικό στο pc σας και να δώσετε \"info flex\" [\[εικόνα\]](/34/img/flexINFO.png). Πατώντας το πλήκτρο space μπορείτε να διαβάσετε +όλο το manual από την αρχή μέχρι το τέλος. Με τα πλήκτρα (p)revious, (n)ext kai (u)p μπορείτε να περιπλανηθείτε στους κόμβους του. Μπορείτε επίσης να φορτώσετε +τον Emacs 21+ και με Ctrl-h i ή από το μενού \"Help-\>manuals-\>Browse manuals with info\" να δείτε όλα τα manuals που έχετε στο σύστημα σας σε texinfo format +(το ίδιο γίνεται και αν γράψετε σκέτο \"info\" στην γραμμή εντολών). Μόλις πάτε στο manual του flex ισχύουν τα ίδια keyboard shortcuts. Επίσης έχετε όμορφα +κουμπιά στην toolbar, ενώ μπορείτε να κάνετε και μεσαίο κλικ στα links που βλέπετε [\[εικόνα\]](/34/img/flexEMACS.png). + +Αν επιθυμείτε κάτι πιο συμβατικό μπείτε στο [gnu.org (manuals section)](http://www.gnu.org/manual/manual.html) όπου μπορείτε είτε να κατεβάσετε ολόκληρο το +manual σε Postscript μορφή [σε Postscript μορφή](http://www.gnu.org/manual/flex-2.5.4/ps/flex.ps.gz) για να το τυπώσετε ή μπορείτε να το διαβάσετε Online σε +απλή και γρήγορη [HTML μορφή](http://www.gnu.org/manual/flex-2.5.4/html_node/flex_toc.html) + +Τέλος ακόμα και αν έχετε GNOME η KDE βάζοντας info://foo στην γραμμή διεύθυνσης, μπορείτε να δείτε τα infopages της εφαρμογής foo. (Αν και νομίζω ότι στις +τελευταίες εκδόσεις KDE και GNOME υπάρχει στο help ξεχωριστή επιλογή \"browse info pages\" όπου βρίσκονται όλα τα manuals του συστήματος.) + +Τώρα πια θα πρέπει να έχετε αναγνωρίσει την άνεση που προσφέρει το texinfo. Browsing σε κονσόλα χρήσιμο για τους servers σας, ενσωμάτωση με τον emacs, γνώριμη +html μορφή και υψηλής ποιότητας manual έτοιμο για εκτύπωση. Ταχύτητα, ευχρηστία και συμβατότητα. Και όπως προφανώς καταλάβατε τα πάντα βγαίνουν από ένα αρχείο +που γράφετε μία φορά και μετά με τα διάφορα εργαλεία το μετατρέπετε σε ότι μορφή θέλετε. + + +### [4. texinfo vs manpages]{#s4} + +Λυπάμαι που θα απογοητεύσω όλους τους hard-core unixάδες, αλλά το επίσημο documentation format σύμφωνα με την GNU είναι το texinfo και όχι οι manpages. Μία +manpage είναι αρκετή για μικρά προγράμματα, από κάποιο σημείο και μετά όμως τα πράγματα δυσκολεύουν. + +Το γεγονός ότι μία manpage στερείται δομής, την κάνει δύσχρηστη. Πόσες φορές δεν έχετε εκνευρισθεί όταν ψάχνετε μία παράμετρο σε μία manpage και έχετε βρει όλες +τις άλλες εκτός από αυτήν που χρειάζεστε;Κατά την γνώμη μου μία manpage πρέπει να έχει απλά μια μικρή περιγραφή του προγράμματος. + +Έτσι σήμερα είναι δυνατόν να βρείτε προγράμματα που διαθέτουν infopages αλλά όχι manpages. Άλλες φορές μάλιστα υπάρχει manpage η οποία όμως απλά αναφέρει \"see +the info pages for the full documentation\" η κάτι παρόμοιο. + +Μπορεί λοιπόν οι manpages να ήταν αρκετές το 1980, σήμερα όμως έχετε την δυνατότητα να έχετε και δομημένο και εύκολα αναγνώσιμο documentation,οπότε γιατί να μην +το χρησιμοποιήσετε; + + +### [5. Η φιλοσοφία του texinfo]{#s5} + +Το texinfo ως σύστημα βασίζεται πάνω στο Tex/Latex. Γράφετε ένα απλό αρχείο κειμένου lala.texi με ειδική σύνταξη (τα @-commands) και μετά με την εντολή texi2foo +παίρνετε το lala.foo όπου foo μέχρι τώρα μπορεί να είναι html/dvi/pdf. Υπάρχει και εντολή makeinfo με διάφορες παραμέτρους για την παραγωγή των info αρχείων. + +Αυτό όμως δεν πρέπει να σας φοβίζει αν δεν γνωρίζετε το Latex. (Αν και κάποια στιγμή πρέπει να μάθετε και Latex :-). Το Texinfo είναι ένα επίπεδο πιο πάνω από +το Latex. Αυτό σημαίνει ότι αποκρύπτει από εσάς τα \\verylongandcomplicatedLatexdirectives και σας επιτρέπει να γράψετε το κείμενο σας με μικρά \@commands +δηλαδή εντολές/keywords που απλά ξεκινάνε με το @. Τα \@commands είναι όλα documented στο manual του texinfo το οποίο είναι γραμμένο επίσης σε (μαντέψτε!) +texinfo. Έτσι υπάρχει το \@chapter, \@section ,\@code, \@itemize με απλά και κατανοητά ονόματα. Αν μάλιστα χρησιμοποιείτε emacs θα βρείτε ότι η συγγραφή texinfo +αρχείων με το αντίστοιχο mode είναι πραγματικά πολύ εύκολη. + +H μαγεία είναι ότι μπορείτε να χρησιμοποιήσετε ακόμα τις εντολές του Latex αν το επιθυμείτε (κυρίως για τα εκτυπώσιμα outputs). Μάλιστα μπορείτε να γράψετε +διαφορετικά τμήματα για την περίπτωση που το texinfo αρχείο μετάφράζεται σε tex, html ή info. (Περίπου σαν τα \#ifdef του C-preprocessor). + +Παρόλο που το texinfo διαθέτει την εντολή \@image για την εισαγωγή εικόνων σε ένα έγγραφο, δεν θα πρέπει να την χρησιμοποιήσετε (στην αρχή τουλάχιστον). Και +αυτό γιατί η εικόνα δεν θα φαίνεται στο info output του αρχείου σας οπότε \"χάνεται\" η συμβατότητα του texinfo, για την οποία το διαλέξατε. Δηλαδή το texinfo +τεχνικά μπορεί να χειριστεί εικόνες (αφού μπορεί το Latex). + + +### [6. To πιο απλό Texinfo αρχείο]{#s6} + +Ας ξεκινήσουμε με το πιο μικρό texinfo αρχείο(σχεδόν). Στον αγαπημένο σας editor γράψτε τα παρακάτω: (σε emacs και gvim θα έχετε και syntax highlighting) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + \input texinfo + @setfilename example.texi + @settitle example + @bye + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αφού το αποθηκεύσετε με όνομα sample.texi δοκιμάστε με τις εντολές texi2dvi,texi2html,texi2pdf και makeinfo να το μετατρέψετε στα αντίστοιχα format. (To dvi +αρχείο μπορείτε να το δείτε με την εντολή xdvi. Τα dvi αρχεία είναι μια ενδιάμεση μορφή του tex.Μπορείτε να τα κάνετε Postscript με την εντολή dvips). Τo .info +αρχείο μπορείτε να το δείτε με την εντολή info ./example.info. + +H πρώτη γραμμή είναι η μοναδική εντολή σε ένα texinfo αρχείο που δεν ξεκινάει με @. Και αυτό γιατί φορτώνει το texinfo.tex το οποίο περιέχει τα defines/macros +που ενεργοποιούν τις ίδιες τις @-εντολές. Η επόμενη γραμμή ορίζει το όνομα του αρχείου που γράφετε (το οποίο προφανώς θα πρέπει να είναι ίδιο με του αρχείου που +την περιέχει). + +Η \@settitle δίνει έναν γενικό τίτλο στο manual σας, και η τελευταία εντολή δείχνει που σταματάει η επεξεργασία (processing) του κειμένου. Οτιδήποτε μετά το +\@bye αγνοείται από το Texinfo. + +Παρατηρείστε αυτό που ανέφερα παραπάνω σχετικά με την απλότητα του Texinfo. Οι @-εντολές έχουν μικρά και κατανοητά ονόματα, κάτι που δεν συμβαίνει με το Latex. + + +### [7. Ένα μεγαλύτερο έγγραφο]{#s7} + +Ας δούμε ένα μεγαλύτερο παράδειγμα. Σε ένα νέο αρχείο γράψτε τα παρακάτω. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + \input texinfo + @setfilename sample.info + @settitle A sample manual + @setchapternewpage odd + @titlepage + @title My first Texinfo manual + @subtitle Demo for Magaz + @author Kapelonis Kostis + + @comment This is a comment + @page + @vskip 11pt plus 1fill1 + Copyright @copyright{} 2002 + @end titlepage + @comment name,next,prev,up + @node Top,First Chapter,,(dir) + @menu + * First Chapter:: The first chapter is the only chapter in this sample + * Concept Index:: This index has two entries + @end menu + @node First Chapter,Concept Index,Top,Top + @chapter First Chapter + @cindex Sample index entry + These are the contents of the first chapter + Here is a simple line of text. + @cindex Another sample index entry + Here is a numbered list + @enumerate + @item + This is the first item + @item + This is the second item + @end enumerate + + @iftex + This paragraph should + appear only in a printed manual. + It is enclosed inside iftex keywords. + @end iftex + + @ifinfo + This paragraph should + appear only in the info manual. + It is enclosed inside ifinfo keywords. + @end ifinfo + + The @command{makeinfo} command will convert this manual + into an info file and @TeX{} to a printed file. + @node Concept Index ,,First Chapter,Top + @unnumbered Concept Index + @printindex cp + @comment Place here table of contents + @contents + @bye + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Εδώ βλέπουμε αρκετές \@εντολές. Δεν θα τις αναφέρω όλες, για τις λεπτομέρειες δείτε το manual του texinfo. Οι γνώστες του Latex ήδη θα έχουν δει πως το texinfo +\"καλύπτει\" με τις δικές του \@εντολές τις αντίστοιχες του Latex. + +Το παράδειγμα δείχνει τις εντολές για την δημιουργία indexing, την \@menu για την δημιουργία μενού για το browsing μέσα σε Info αρχείου, καθώς και την πολύ +σημαντική εντολή \@node. H εντολή \@vskip υπάρχει για να δείξει ότι δεν έχει χαθεί η ευελιξία που διαθέτει το Tex/Latex. + +Ένα node (κόμβος στα ελληνικά) είναι το μικρότερο δομικό στοιχείο ενός info αρχείου. Όταν πατήσατε previous,next και up στο manual του flex, ουσιαστικά +μετακινηθήκατε στα αντίστοιχα nodes. Κάθε info αρχείο \"κρέμεται\" από έναν top node που είναι ο αρχικός κόμβος του αντίστοιχου manual. Όλοι οι top nodes από τα +manuals που έχετε στο σύστημα σας \"κρέμονται\" από έναν top node(supernode) του συνολικού info tree. Αν γράψετε σκέτο info σε ένα τερματικό (χωρίς όνομα manual +δηλαδή) βλέπετε αυτόν τον supernode και άρα έχετε μπροστά σας όλα τα manual που έχετε εγκατεστημένα. To ίδιο συμβαίνει και όταν μπαίνετε στο info mode του +Emacs. + +Πρακτικά αυτό σημαίνει ότι τελικά θα πρέπει να χωρίσετε το κείμενο σας σε nodes. Τα \@chapter και \@section δεν είναι αυτά που καθορίζουν την δομή του online +manual. Όπως είδατε και στην σελίδα [της GNU για τον flex](http://www.gnu.org/manual/flex-2.5.4/flex.html) ειδικά η html μορφή είναι δυνατόν να κατασκευαστεί με +διάφορους τρόπους ανάλογα με τα nodes/chapters. Αυτή είναι και μια μεγάλη διαφορά που ίσως δυσκολέψει όσους \"σκέφτονται\" σε Latex. (Αναφέρομαι πάντα στο .info +output που είναι browsable. Για ps/pdf ισχύουν τα γνωστά, δηλαδή το texinfo είναι ένα πιο φιλικό tex. Αν γράψετε ένα manual και ξέρετε από πριν ότι θα το +βγάλετε μόνο σε pdf δεν χρειάζεται να δώσετε σημασία σε \@node και \@menu). + +To \@node command συντάσσεται ως εξής: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + @node όνομα,όνομα-επόμενου,όνομα-προηγούμενου,όνομα-πατρικού. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μία από τις πρώτες δυσκολίες που θα συναντήσετε κάθε φορά που γράφετε ένα καινούριο node,είναι να συμπληρώσετε τα παραπάνω ονόματα. Αν γράφετε σε Emacs υπάρχει +βέβαια έτοιμη εντολή που απλοποιεί τα πράγματα. Στην αμέσως επόμενη γραμμή βάλτε ένα \"συμβατικό\" δομικό \@command (π.χ. \@chapter, \@section) για τα outputs +se html/ps/pdf. + +Τo \@menu ορίζει το μενού που θα φαίνεται στην κάτω μεριά του node που βρίσκεται ο χρήστης. Συνήθως περιέχουν pointers σε άλλα nodes του ίδιου manual. Το +supernode (μετά από ένα εισαγωγικό κείμενο) δεν είναι παρά ένα μεγάλο μενού με όλα τα manuals του συστήματος. Οι λεπτομέρειες αφήνονται ως άσκηση στον αναγνώστη +(Βασικά δεν έχω ασχοληθεί πολύ με μενού ;-) + +Τα outputs του παραπάνω αρχείου είναι τα παρακάτω [\[PDF screenshot\]](/34/img/samplePDF.png) [\[HTML screenshot\]](/34/img/sampleHTML.png) [\[INFO +screenshot\]](/34/img/sampleINFO.png) + + +### [8. Συγγραφή του κυρίως κειμένου.]{#s8} + +Κατά τα άλλα, απλά γράφετε στο body του κειμένου, το τι ακριβώς κάνει το πρόγραμμα σας, ποιες παραμέτρους παίρνει και τι έξοδο πρέπει να περιμένει ο χρήστης. + +Έχετε ανοιγμένο και το manual του texinfo για να βλέπετε τα διάφορα \@commands και την χρήση τους. Θα δείτε ότι το texinfo διαθέτει αρκετά \@commands ειδικά για +το documentation προγραμμάτων (σε αντίθεση με το Latex που έχει δώσει μεγαλύτερο βάρος στο επιστημονικό/μαθηματικό κείμενο). + +Υπάρχουν τα \@key για keyboard input, τα \@env για environment variables, τα \@file για ονόματα αρχείων, και διάφορα άλλα \@commands που ανάλογα με την +περίπτωση μπορεί να σας φανούν πολύ χρήσιμα. Αυτά τα \@commands καθορίζουν απλά την εμφάνιση του κειμένου πάνω στο οποίο εφαρμόζονται και όχι την δομή του. +Προφανώς έχουν περισσότερη σημασία στο τυπωμένο manual αφού η html έχει λίγα tags μορφοποίησης κειμένου, και σχεδόν μηδαμινή στο περιβάλλον κονσόλας. + +Επίσης υπάρχουν όλα τα αναμενόμενα \@commands για list,bullets, subsection,verbatim text,code κ.τ.λ. Όλα βρίσκονται μέσα στο manual του texinfo με παραδείγματα. + +Όπως ίσως έχετε υποψιαστεί για να βάλετε το ίδιο το \"@\" μέσα στο κείμενο το γράφετε δύο φορές δηλαδή \"@@\". Υπάρχει και ειδικό \@command με όνομα \@email. + + +### [9. Emacs shortcuts]{#s9} + +Αφού το texinfo είναι μέρος της Gnu tool chain (Emacs,gcc,make,gdb, [m4](http://www.gnu.org/software/m4/) ,automake,autoconf, +[gprof](http://sources.redhat.com/binutils/docs-2.12/gprof.info/)) δεν ήταν δυνατόν να μην συνεργάζεται άψογα με τον Emacs. + +Έτσι λοιπόν υπάρχει ειδικό Texinfo mode το οποίο διαθέτει πολύ συχνά χρησιμοποιούμενα short commands (Ctrl-c) και λιγότερο συχνά long commands (Meta/Alt-x) +Αναφέρω εδώ μερικά: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + C-c C-c n Enter node + C-c C-c e Enter end + C-c C-c i Enter item + C-c C-c v Enter variable + C-c C-s Show structure + C-c C-u C-m update Menu + C-c C-u C-n update Node + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτά που πραγματικά σας λύνουν τα χέρια είναι οι εντολές για την εισαγωγή ενός νέου node,αφού συμπληρώνονται αυτόματα τα next,prev, up καθώς και η εντολή που +ανοίγει ένα νέο buffer με την δομή του texinfo αρχείου όπου μπορείτε να καταλάβετε οπτικά πως είναι αυτή. + +Γενικά, ακόμα και αν είστε φανατικός χρήστης του vi/vim/gvim σας προτείνω να ασχοληθείτε λίγο με τον Emacs κατά την συγγραφή texinfo αρχείων. Είναι πολύ +χρήσιμος, ενώ για πολύ μεγάλα manuals με περίπλοκη δομή/μενού και cross references σχεδόν απαραίτητος. + + +### [10. Επίλογος]{#s10} + +Ξέρω ότι έδωσα λιγότερες τεχνικές λεπτομέρειες από όσες ίσως θα θέλατε. Δεν αναφέρθηκα στην δημιουργία indexing/table of contents ,cross-references,table και +διάφορων άλλων δυνατοτήτων του Texinfo. Υπάρχει και η πολύ εντυπωσιακή δυνατότητα της δημιουργίας link σε εντελώς διαφορετικό manual, όπου μεταφέρεται αυτόματα +ο χρήστης, όταν χρησιμοποιεί το info format. + +Έτσι είναι δυνατόν ο χρηστής να διαβάζει το manual του flex μέσα στον Emacs και με ένα κλικ να βρεθεί σε αυτό του bison. Η από αυτό του automake να μεταφερθεί +σε αυτό του autoconf και μόλις δει αυτό που θέλει, να επιστρέψει. Σε html και τυπωμένα manual τέτοια links γίνονται απλά \"See the bison manual page 33\" ή κάτι +τέτοιο, και πάλι όμως είναι εντυπωσιακή η αυτόματη εισαγωγή τους, αφού εσείς μέσα στο texinfo αρχείο απλά βάζετε το όνομα του manual που θα μεταφερθεί ο χρήστης +καθώς και το όνομα του node στο οποίο θα γίνει η μεταφορά. + +Νομίζω όμως ότι ο σκοπός των άρθρων του magaz δεν είναι να σας πάρουν από το χεράκι και να σας δείξουν βήμα-βήμα τις οδηγίες χρήσης. Οφείλετε απλά να δείτε τι +υπάρχει διαθέσιμο και αν κάτι σας φαίνεται χρήσιμο να ασχοληθείτε μαζί του. + diff --git a/content/articles/34/03_security.md b/content/articles/34/03_security.md new file mode 100644 index 0000000..852de9e --- /dev/null +++ b/content/articles/34/03_security.md @@ -0,0 +1,686 @@ ++++ +title = 'Host/network security' +date = '2003-06-01T00:00:00Z' +description = '' +author = 'Αλέξανδρος Παπαδόπουλος apapadop@cmu.edu(mailto:apapadop+magaz@cmu.edu)' +issue = ['Magaz 34'] +issue_weight = 3 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Βήματα για να ασφαλίσουμε το GNU/Linux σύστημά μας έναντι τοπικών και δικτυακών επιθέσεων. Ίσως πούμε δυο λογάκια και για θέματα privacy.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Τοπική ασφάλεια (Local Access)** +---------------------------------------------------------------- + +- [1.1 sXid binaries](#ss1.1) +- [1.2 Password cracking](#ss1.2) +- [1.3 Φυσική πρόσβαση](#ss1.3) + +**2. Δικτυακή ασφάλεια** +--------------------------------------------------- + +- [2.1 Επιθέσεις Denial of Service (DoS)](#ss2.1) +- [2.2 Network Visibility](#ss2.2) +- [2.3 Firewalls](#ss2.3) + +**3. Privacy** +----------------------------------------- + +- [3.1 Διαφημίσεις (banner ads)](#ss3.1) +- [3.2 Cookies](#ss3.2) +- [3.3 Web bugs](#ss3.3) + + +### [1. Τοπική ασφάλεια (Local Access)]{#s1} + +Με αυτό τον όρο εννοούμε τα μέτρα που πρέπει να πάρουμε ώστε κάποιος χρήστης που έχει πρόσβαση στον υπολογιστή μας (είτε φυσική πρόσβαση, είτε user account), να +μη μπορεί να αποκτήσει τον έλεγχο του συστήματος (root access). + +### [1.1 sXid binaries]{#ss1.1} + +Ιδιαίτερα επικίνδυνα για αυτό το σκοπό είναι τα suid root binaries. Δηλαδή τα προγράμματα που, ασχέτως του χρήστη που τα καλεί, εκτελούνται πάντα σαν να τα είχε +καλέσει ο root. Ο αριθμός των suid root binaries σε ένα σύστημα είναι ένα νούμερο που θέλουμε να το κρατήσουμε όσο το δυνατό μικρότερο, και να ελέγχουμε τακτικά +οποιαδήποτε αλλαγή. Μια ατέλεια στον κώδικα ενός εκτελέσιμου προγράμματος αρκεί για να γίνει ένα [buffer +overflow](http://www.wikipedia.org/wiki/buffer_overflow), το οποίο, σε suid root binaries, σημαίνει root shell, δηλαδή πλήρη έλεγχο του συστήματος. + +Αν λοιπόν έχουμε μετρήσει όλα τα suid root binaries και ξέρουμε ότι είναι 25 στο σύστημά μας, και μετά από λίγο καιρό ελέγξουμε και βρούμε 26, πρέπει να +εξετάσουμε πολύ προσεχτικά αυτό το 26ο πρόγραμμα και να σιγουρευτούμε ότι είναι κάτι που εμείς εγκαταστήσαμε. + +Για μια λίστα με τα setuid και setgid αρχεία στο σύστημά μας, κάνουμε το εξής: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # find / \( -perm -02000 -o -perm -04000 \) -ls > setXid + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κατόπιν μπορούμε να μετρήσουμε τις γραμμές αυτού του αρχείου, και έτσι να ξέρουμε πόσα τέτοια (setXid) ειδικά αρχεία έχουμε: + + # wc -l setXid + +Είναι καλή ιδέα να ελέγχουμε περιοδικά το πλήθος αυτών των ειδικών αρχείων και να εντοπίζουμε τυχόν διαφορές. + +### [1.2 Password cracking]{#ss1.2} + +Ακόμα και αν κάποιος καταφέρει να αποκτήσει τοπική πρόσβαση στο σύστημά μας, με κάποιον υπάρχοντα λογαριασμό, έχουμε χάσει μόνο τη μάχη, αλλά όχι απαραιτήτως +τον πόλεμο. Για να μην τραβήξει την προσοχή, ο επιτιθέμενος θα προσπαθήσει να μάθει όλα τα συνθηματικά (passwords) των χρηστών του συστήματος, χωρίς να τα +αλλάξει. Ακόμα και αν κάποιος έχει root access στο μηχάνημά σας, πρέπει να είναι ιδιαίτερα προσεχτικός για να μην τον ανακαλύψετε. Οπότε, παρόλο που ο root +μπορεί να αλλάξει οποιοδήποτε password και να προσθέσει οποιονδήποτε λογαριασμό, η καλύτερη μέθοδος είναι να ξέρει κανείς όλα τα υπάρχοντα συνθηματικά, και να +τα χρησιμοποιεί όποτε χρειάζεται πρόσβαση. + +Έχοντας root, ή έχοντας καταφέρει να διαβάσει το αρχείο /etc/shadow με κάποιο άλλο τρόπο, ο επιτιθέμενος θα προσπαθήσει να μάθει όλα τα συνθηματικά που +βρίσκονται σε αυτό το αρχείο. Αν τα συνθηματικά ακολουθούν τους κανόνες των δυνατών passwords, κάτι τέτοιο θα είναι από πολύ δύσκολο έως πρακτικά αδύνατο. + +Ο καλύτερος τρόπος για να διαπιστώσετε πόσο ισχυρά είναι τα συνθηματικά που χρησιμοποιούνται στο σύστημά σας, είναι να προσπαθήσετε να τα \"σπάσετε\" (crack) +μόνοι σας. Χρησιμοποιώντας το καλύτερο password cracker για συστήματα UNIX [(John the Ripper)](http://www.openwall.com%20john/), θα μάθετε αν το συνθηματικό σας +θα αντέξει σε τέτοιου είδους επιθέσεις. + +Η χρήση του John είναι πολύ απλή: Αφού κατεβάσετε το tarball (\*.tar.gz), το κάνετε extract (tar xvfz \*.tar.gz), μπαίνετε στον κατάλογο john-1.x/src/ και +δίνετε ένα + + $ make + +Αυτό θα σας πει τις επιλογές που έχετε, και θα διαλέξετε την πιο κατάλληλη για το σύστημά σας. Μόλις τελειώσει το compile, μπείτε στον κατάλογο john-1.x/run/ +και: + + # ./unshadow /etc/passwd /etc/shadow > passwords + $ ./john passwords + +Ο John θέλει λίγα δευτερόλεπτα για να μαντέψει τα τελείως ελεεινά συνθηματικά (όμοια με το όνομα χρήστη, κάτω από 4 χαρακτήρες, λέξεις λεξικού), αλλά μπορεί να +τρέχει επί εβδομάδες χωρίς να μπορεί να βρει ένα δυνατό password 8 χαρακτήρων. + +Καλά συνθηματικά είναι αυτά που έχουν τα εξής στοιχεία: + +- Έχουν τουλάχιστον 6 χαρακτήρες +- Περιέχουν τουλάχιστον έναν χαρακτήρα από τις εξής κατηγορίες: + - Kεφαλαία (A-Z) + - Πεζά (a-z) + - Aριθμούς (0-9) + - Eιδικούς χαρακτήρες (!, @, \#, %, : κτλ.) +- Δεν συνδέονται με κάτι που μπορεί να μαντέψει ο επιτιθέμενος αν σας γνωρίζει προσωπικά (ημερομηνία γέννησης, όνομα συγγενή κτλ) +- Είναι αρκετά εύκολα να τα θυμάστε εσείς και να τα πληκτρολογείτε ώστε να μη σας σπάνε τα νεύρα! Δε λέω, καλό συνθηματικό το **kj%{8\*\#I**, αλλά δεν + πρόκειται να το θυμάμαι για πάνω από 2 λεπτά, **ή** (ακόμα χειρότερα), άπαξ και το μάθω δεν θα θέλω να το αλλάξω ποτέ επειδή είναι το πλέον uncrackable + συνθηματικό. Αυτή είναι εξίσου κακή πρακτική με το να έχετε πολύ εύκολα συνθηματικά, επειδή αν κάποιος καταφέρει να κλέψει αυτό το συνθηματικό + παρακολουθώντας το δίκτυο, πχ, θα έχει αιώνια πρόσβαση στο μηχάνημά σας. +- Δεν είναι λέξη σε οποιαδήποτε γλώσσα! Αν νομίζετε ότι ένα συνθηματικό σε Σουαχίλι ή από κάποιον επιστημονικό κλάδο σας σώζει, ρίξτε μια ματιά στις + [λίστες](ftp://ftp.ox.ac.uk/pub/wordlists/) που κυκλοφορούν. + +Μια καλή πρακτική είναι να δημιουργούμε συνθηματικά από χαρακτήρες φράσεων που μπορούμε να τις θυμηθούμε εύκολα, αλλά αν δεν ξέρει κάποιος την φράση, το +συνθηματικό να μην έχει κανένα νόημα. Παράδειγμα: Ας πούμε ότι το αγαπημένο σας τραγούδι είναι το \"Welcome to the machine\" των Pink Floyd. Από τους πρώτους +χαρακτήρες κάθε λέξης, βγάζουμε το εξής: Wttm\_PF, που δεν είναι καθόλου άσχημο, αλλά δεν σέβεται όλους τους κανόνες ενός καλού συνθηματικού. Οπότε +αντικαθιστούμε μερικούς χαρακτήρες με αριθμούς σε \"leet-speak lingo\": **W11m-PF** και ιδού! + +### [1.3 Φυσική πρόσβαση]{#ss1.3} + +Για να προστατέψουμε τον υπολογιστή μας από επιθέσεις με φυσική πρόσβαση, όπου ο χρήστης κάθεται στο πληκτρολόγιο, χρειαζόμαστε πολλά και διάφορα. Ο γενικός +κανόνας είναι ότι \"φυσική πρόσβαση = root πρόσβαση\", για τους εξής λόγους: + +Ας πούμε ότι αφήνουμε τον υπολογιστή μας και πεταγόμαστε στο διπλανό δωμάτιο για μερικά λεπτά. Αν κάποιος θέλει να αποκτήσει πρόσβαση στον υπολογιστή μας, +μπορεί απλά να κάτσει στο πληκτρολόγιο και να ψάξει για τυχόν root logins που έχουμε αφήσει ενεργά. Λύση: ΠΟΤΕ μην αφήνετε root logins ενεργά χωρίς πολύ καλό +λόγο. Αν χρειάζεται να τρέχει κάτι σαν root για μεγάλα χρονικά διαστήματα, μπορείτε να το καλέσετε με έναν τρόπο που να κάνει logout μόλις τερματιστεί η +εργασία. Παράδειγμα: + + # tail -f /var/log/messages ; logout + +Με αυτή τη γραμμή, μπορείτε να αφήσετε ένα root terminal με σχετική ασφάλεια, επειδή αν κάποιος διακόψει την εργασία με CTRL+C, εκτελείται αμέσως το logout και +χάνεται το root shell. + +Αλλά ακόμα και η πρόσβαση σαν κανονικός χρήστης μπορεί να είναι καταστροφική. Πχ, μπορεί κάποιος να σβήσει/διαβάσει/διαφθείρει όλα τα προσωπικά σας αρχεία, να +στείλει email με το όνομά σας και άλλα δυσάρεστα. Μια λύση είναι όταν δουλεύετε στο γραφικό περιβάλλον να κλειδώνετε το τερματικό πριν φύγετε από το +πληκτρολόγιο (όλοι οι μοντέρνοι window managers μπορούν να καλέσουν το xlock που κάνει ακριβώς αυτή τη δουλειά). + +Τι γίνεται όμως αν κάποιος πατήσει απλά CTRL+ALT+Backspace και \"σκοτώσει\" το γραφικό περιβάλλον; Δεν θα μείνει με ένα shell του χρήστη μας; + +Δεν είναι απαραίτητο. Για να αποφύγουμε αυτό το πρόβλημα μπορούμε να προσθέσουμε ένα alias στο .bashrc μας, που να θέτει: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + alias startx="startx -- -nolisten tcp; logout" + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Έτσι, με το που τερματίσουμε με οποιοδήποτε τρόπο το X session μας, ο χρήστης μας κάνει αυτόματα logout. Για τη σημασία του **\"-nolisten tcp\"** θα μιλήσουμε +παρακάτω. + +Όμως ακόμα και αν ο επιτιθέμενος δεν βρει έτοιμο prompt στο μηχάνημά μας, δεν μπορεί να το εκμεταλλευτεί; Σίγουρα, αν έχουμε \"ευκολίες\" όπως automount και +autoexec στο CDROM. Μια δυσάρεστη έκπληξη που είχα σε ένα φρεσκο-εγκατεστημένο σύστημα ήταν όταν έβαλα ένα δισκάκι στο CD drive και μετά από λίγα δευτερόλεπτα +είδα τον Mozilla να ανοίγει ένα παράθυρο και να μου δείχνει την \"αρχική σελίδα\" του CD, παίζοντας περιχαρώς **μουσική**! Τι θα γινόταν αν αυτό το CD είχε +κώδικα με περίεργες προθέσεις, που περίμενε την αρχική σελίδα (index.html) για να ενεργοποιηθεί; + +Για να αποφύγουμε τέτοιες εκπλήξεις καλό είναι να απενεργοποιήσουμε οποιοδήποτε automount και να σιγουρευτούμε ότι το mount γίνεται με ασφαλείς παραμέτρους. +Μερικές χρήσιμες παράμετροι είναι oι noexec, nosuid. Ρίξτε μια ματιά στο man mount για περισσότερα. + +Αλλά και πάλι, αν κάποιος μπορεί να επανεκκινήσει τον υπολογιστή, μπορεί να επιλέξει από τον boot loader (LILO, GRUB ή οτιδήποτε άλλο χρησιμοποιούμε) να κάνει +boot σε single mode, όπου έχει πλήρη έλεγχο του συστήματος. Για να αποκλείσουμε και αυτή την πιθανότητα, μπορούμε να βάλουμε έναν κωδικό στον boot loader. Έτσι, +μόνο όποιος ξέρει τον κωδικό μπορεί να ξεκινήσει το σύστημα. Αυτό επιτυγχάνεται στα αρχεία /etc/lilo.conf και /etc/grub.conf (για τους δύο πιο δημοφιλείς boot +loaders). + +Όμως ποιος τα χρειάζεται όλα αυτά, όταν υπάρχει το [KNOPPIX](http://www.knopper.net/knoppix/index-en.html); Απλά κάνουμε ένα reboot τον υπολογιστή, βάζουμε το +δισκάκι στο drive, παρακάμπτουμε ό,τι είδους ασφάλεια υπάρχει, και κάνουμε mount τον δίσκο του θύματος με πλήρη δικαιώματα! Εύκολο; Όχι τόσο γρήγορα. Γι\'αυτό +υπάρχουν τα [BIOS](http://www.webopedia.com/TERM/B/BIOS.html) passwords, που ζητούν τον κωδικό του χρήστη πριν επιτρέψουν σε κάποιον να αλλάξει τη συνηθισμένη +σειρά εκκίνησης και να κάνει boot από CD ή δισκέτα. + +Αλλά αν έχετε laptop πχ, και ο \"κακός\" μπορεί να βουτήξει απλά ολόκληρο το laptop ή να βγάλει στο πι και φι τον δίσκο και να τον πάρει μαζί του; Αυτή είναι +μάλλον η χειρότερη περίπτωση, και το μόνο που μας σώζει είναι κάποιο encrypted filesystem, που δεν επιτρέπει στον δίσκο να διαβαστεί από κάποιον που δεν έχει το +κατάλληλο λογισμικό και δεν ξέρει το σωστό συνθηματικό (pass-phrase) για να τον αποκωδικοποιήσει. Επειδή δεν έχω εμπειρία σε κάτι τέτοιο, θα σας προτείνω απλά +να κωδικοποιείτε με το [Gnu Privacy Guard (GPG)](http://gnupg.org) οτιδήποτε δεν θέλετε να πέσει με τίποτα σε λάθος χέρια. + +Δεν είναι καθόλου δύσκολο! Αν έχετε ήδη [δημιουργήσει τα κλειδιά](http://andrew.cmu.edu/~apapadop/linux/howto.html#3.3.7) σας και μπορείτε να χρησιμοποιήσετε το +gpg, μπορείτε να μαζέψετε όλα τα ευαίσθητα αρχεία σας σε έναν κατάλογο (ας πούμε secret/). Με ένα + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ tar -cf secret.tar secret + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +δημιουργείτε ένα αρχείο που περιέχει ολόκληρο τον κατάλογο secret. Μετά μπορείτε να κωδικοποιήσετε (encrypt) το αρχείο αυτό με το προσωπικό σας κλειδί, ώστε +μόνο εσείς να μπορείτε να το αποκωδικοποιήσετε στο μέλλον: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ gpg -esr apapadop@cmu.edu secret.tar + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +(αντικαταστήστε το email μου με το email που αντιστοιχεί στο προσωπικό κλειδί σας) Αυτή η εντολή θα έχει σαν αποτέλεσμα ένα αρχείο secret.tar.gpg που θα +μπορείτε μόνο εσείς να το διαβάσετε. Μπορείτε να ελέγξετε αν το σύστημα δουλεύει σωστά με τις εξής εντολές: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ gpg -d -o test.tar secret.tar.gpg + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτή η εντολή θα αποκωδικοποιήσει το αρχείο και θα το σώσει σαν test.tar. Για να δοκιμάσουμε αν έχει την παραμικρή διαφορά από το αυθεντικό αρχείο που έχει τα +ευαίσθητα περιεχόμενα, δίνουμε + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ md5sum test.tar secret.tar + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν το αποτέλεσμα δεν είναι ακριβώς το ίδιο, κάτι δεν πήγε καλά. Αν το checksum όμως είναι το ίδιο, μπορούμε να σβήσουμε τον κατάλογο με τα ευαίσθητα αρχεία + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ rm -r secret/ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και να αποκρυπτογραφήσουμε/αποσυμπιέσουμε ξανά τα περιεχόμενά του όποτε τα χρειαστούμε με τις εντολές + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ gpg -d -o secret.tar secret.tar.gpg + $ tar xvf secret.tar + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν τα παραπάνω σας φαίνονται υπερβολικά, θυμηθείτε ότι υπάρχουν εργαστήρια που διαβάζουν δεδομένα χωρίς κανένα πρόβλημα από [καμένους +υπολογιστές](http://www.datarr.com/tfds.html), συσκευές που [διαβάζουν οθόνες πίσω από τοίχους](http://www.sans.org/rr%20encryption/TEMPEST.php) και κυβερνήσεις +που θεωρούν σκόπιμο το [ψήσιμο](http://treachery.net/~jdyson/dod_cd_declassification.html) των CD που θέλουν να αποσύρουν\... + + +### [2. Δικτυακή ασφάλεια]{#s2} + +Σε αυτή την ενότητα θα εξετάσουμε τις επιθέσεις DOS και τα μέτρα που μπορούμε να πάρουμε για να αμυνθούμε. Κατόπιν θα αναφέρουμε διάφορες βασικές αρχές για τις +δικτυακές σας περιπέτειες, που (ελπίζω) θα σας γλιτώσουν από πολλές δυσάρεστες γνωριμίες\... + +### [2.1 Επιθέσεις Denial of Service (DoS)]{#ss2.1} + +[Αυτές οι επιθέσεις](http://www.wikipedia.org/wiki%20Denial_of_service) έχουν σαν σκοπό τους να μην επιτρέψουν στο σύστημά μας να επιτελέσει τον στόχο του. +Δηλαδή, αν έχουμε κάποιον server που παρέχει υπηρεσίες email για μια εταιρεία, ο σκοπός της επίθεσης DoS είναι να μη μπορεί πλέον ο συγκεκριμένος server να +παρέχει αυτές τις υπηρεσίες. Οι επιθέσεις αυτές είναι ή μέρος μιας ιδιαίτερα συντονισμένης και μελετημένης επίθεσης (οπότε δε μας σώζει τίποτα), ή το τελευταίο +στάδιο της απογοήτευσης για έναν φιλόδοξο επιτιθέμενο που δεν μπορεί να μπει στο σύστημά μας και απλά καταφεύγει στην επίδειξη δύναμης, προσπαθώντας να μας +\"πετάξει έξω από το δίκτυο\". + +Υπάρχουν πολλές περιπτώσεις στις οποίες επιθέσεις DoS έχουν χρησιμοποιηθεί για να επιτευχθεί κάποιος άλλος σκοπός. Παράδειγμα: Ο επιτιθέμενος καταφέρνει +προσωρινό DoS ενός SSH server για 10 κρίσιμα λεπτά. Σε αυτά τα 10 λεπτά, κάποιος νόμιμος χρήστης προσπαθεί να συνδεθεί στον SSH server, αλλά ο επιτιθέμενος +δίνει στο μηχάνημά του την IP του SSH server (που δεν μπορεί να απαντήσει), και προσκαλεί τον χρήστη να συνδεθεί στο μηχάνημά του. Ο χρήστης βλέπει ένα +[περίεργο μήνυμα](http://www.hpcvl.org/faqs/ssh_help.html#answer_4) ότι το fingerprint του server έχει αλλάξει, λέει \"ώχου μωρέ τώρα\" και επιλέγει να +συνδεθεί, αγνοώντας το μήνυμα. Ο επιτιθέμενος δέχεται την σύνδεση του χρήστη-θύματος, σταματάει το DoS του πραγματικού SSH server, και επιπροσθέτως του στέλνει +όλα τα πακέτα του θύματος. Αποτέλεσμα; Ο χρήστης κάνει κανονικά τη δουλειά του στον server, και ο επιτιθέμενος βλέπει και καταγράφει τα πάντα σε clear text, +μαθαίνοντας συνθηματικά, λογαριασμούς, άλλους κωδικούς, προσωπικά στοιχεία του θύματος, κτλ. Συγχαρητήρια, μόλις λάβατε μέρος σε μια επίθεση man-in-the-middle. +Το συγκεκριμένο σενάριο μπορεί να πραγματοποιηθεί πανεύκολα με παλιά SSH πρωτόκολλα και το εκπληκτικό πακέτο +[dsniff](http://naughty.monkey.org/~dugsong/dsniff/). + +Δυστυχώς δεν υπάρχει καμία καθολική λύση για το πρόβλημα των DoS. Για την ακρίβεια, με την άνθιση των DDoS (Distributed Denial of Service) επιθέσεων, τα +πράγματα γίνονται διαρκώς χειρότερα. Πάντως, μερικά βήματα που μπορούμε να ακολουθήσουμε για να αντιμετωπίσουμε τις πιο παραδοσιακές επιθέσεις DoS ( [SYN +floods](http://www.cert.org/advisories/CA-1996-21.html) και ping floods) είναι τα εξής: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #!/bin/bash + + # Ενεργοποιούμε προστασία έναντι επιθέσεων SYN flood + echo 1 > /proc/sys/net/ipv4/tcp_syncookies + # Μην απαντάς σε ICMP echo requests (προστατεύει έναντι ping floods) + echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Επίσης μπορούμε να χρησιμοποιήσουμε το module LIMIT που παρέχει το [netfilter](http://netfilter.org), το σύστημα που διαχειρίζεται τα πακέτα στο επίπεδο του +πυρήνα, με κάτι σαν: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αυτός ο κανόνας λέει στον πυρήνα να δέχεται μόνο μία νέα TCP σύνδεση ανά δευτερόλεπτο, και να αγνοεί τις υπόλοιπες. Γενικά ο πυρήνας έχει αρκετές δυνατότητες +άμυνας έναντι DoS επιθέσεων μέσω του συστήματος netfilter και των ρυθμίσεων στον κατάλογο /proc/sys/net/ipv4. + +### [2.2 Network Visibility]{#ss2.2} + +**\...ή, πόσο μεγάλο στόχο δίνουμε.** + +Εκτός από τις DoS, που έχουν έναν πολύ συγκεκριμένο σκοπό, υπάρχουν και άλλες επιθέσεις, που συνήθως έχουν σκοπό την εκμετάλλευση κάποιου bug σε ένα service του +υπολογιστή μας. Παράδειγμα: Υπάρχουν \"εργαλεία\" που μπορεί να βρει ο καθένας στο Internet, και να δίνουν άμεσο root access αν χρησιμοποιηθούν εναντίον +συστημάτων που τρέχουν παλιές εκδόσεις του HTTP server Apache. Όσο γρήγορα και να αναβαθμίζουμε το σύστημά μας όταν ο διανομέας βγάζει patches που κλείνουν +αυτές τις τρύπες, υπάρχει πάντα μια ακαθόριστη περίοδος προτού γνωστοποιηθεί το bug, κατά την οποία το σύστημά μας είναι ευάλωτο. Ό,τι και να κάνουμε, και όσα +firewalls και να έχουμε, κάποτε συμβαίνει σε όλους. + +Οπότε εκτός από τα άμεσα patches, μια **πολύ** καλή ιδέα είναι να μην έχετε κανένα ενεργό service στο σύστημά σας, εκτός από τα τελείως απαραίτητα. Έτσι οι +ευκαιρίες για εκμετάλλευση bugs ελαχιστοποιούνται, επειδή κανείς δεν μπορεί να εκμεταλλευτεί ένα πρόγραμμα που δεν τρέχει! + +Αυτές οι επιθέσεις είναι πιο δύσκολες στον εντοπισμό από τις DoS, μιας και δεν δημιουργούν άμεσα προβλήματα στο σύστημά μας. Σχεδόν όλες ξεκινούν με +αναγνωριστικές κινήσεις, όπως portscans και προσπάθειες σύνδεσης σε συνήθεις πόρτες (80-http, 22-ssh, 23-telnet, 25-smtp, 110-pop3 κτλ). Η καλύτερη άμυνα είναι +να ρυθμίσουμε το μηχάνημά μας ώστε να μη δίνει καν στόχο. Η κλασσική λύση που ακούγεται παντού είναι ένα firewall, αλλά υπάρχει κάτι πολύ πιο σημαντικό: το να +κλείσουμε οποιαδήποτε πόρτα / δικτυακό service δεν χρειαζόμαστε. + +Μία default εγκατάσταση μιας μοντέρνας \"φιλικής προς το χρήστη\" διανομής, συνήθως αφήνει πολλές περιττές πόρτες ανοιχτές στον υπολογιστή μας. Μπορούμε να +δούμε ποια services έχουμε ενεργά με ένα + + # lsof -i + +ή, από την μεριά του επιτιθέμενου (χρήσιμο για να καταλάβουμε τι μπορούν να δουν οι άλλοι για το μηχάνημά μας): + + # nmap <η_ΙΡ_μου> + +Για να δούμε τι βλέπω για το σύστημά μου: + + # lsof -i + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + privoxy 14769 privoxy 3u IPv4 173542 TCP localhost.localdomain:6969 + (LISTEN) + # ifconfig wlan0 + wlan0 Link encap:Ethernet HWaddr 00:20:E0:8D:01:2D + inet addr:192.168.1.106 Bcast:192.168.1.255 Mask:255.255.255.0 + UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 + RX packets:58578 errors:0 dropped:0 overruns:0 frame:0 + TX packets:69317 errors:0 dropped:0 overruns:0 carrier:0 + collisions:0 txqueuelen:100 + RX bytes:34820912 (33.2 MiB) TX bytes:2989402 (2.8 MiB) + + # nmap -p1-65535 192.168.1.106 + + Starting nmap V. 3.10ALPHA4 ( www.insecure.org/nmap/ ) + All 65535 scanned ports on 192.168.1.106 are: closed + + Nmap run completed -- 1 IP address (1 host up) scanned in 100.306 seconds + +Τί μας λένε τα παραπάνω; Με την εντολή lsof -i βλέπω μια υπηρεσία (privoxy) να \"ακούει\" (LISTEN) για τοπικές συνδέσεις TCP στην πόρτα 6969 (TCP +localhost.localdomain:6969). Αλλά το nmap μου λέει ότι όλες οι πόρτες είναι κλειστές! Τι γίνεται εδώ; + +Ο privoxy στην συγκεκριμένη περίπτωση \"ακούει\" μόνο για συνδέσεις στη διεύθυνση localhost.localdomain:6969. Επειδή αυτό το όνομα δεν είναι δυνατόν να +χρησιμοποιηθεί για απομακρυσμένες δικτυακές συνδέσεις (είναι alias για το τοπικό μηχάνημα, και δεν μπορεί να χρησιμοποιηθεί σαν δικτυακό όνομα με το παρόν +σύστημα [DNS](http://www.webopedia.com/TERM/D/DNS.html)), ο privoxy φαίνεται σαν να μην υπάρχει όταν κάποιος εξετάζει τις πόρτες μας από το δίκτυο (γι\'αυτό +χρησιμοποίησα την εξωτερική μου IP στο nmap - αν είχα χρησιμοποιήσει την 127.0.0.1 θα είχα διαφορετικά αποτελέσματα). Για τις χάρες του privoxy θα μιλήσουμε +στην επόμενη ενότητα. Όπως είδαμε, δεν φαίνεται καν να υπάρχει από το δίκτυο. Άρα δεν το θεωρώ ευάλωτο σημείο. + +Σε μια default εγκατάσταση κάποιας μοντέρνας διανομής, δυστυχώς έχουμε μεγάλες πιθανότητες να δούμε μια ελαφρώς διαφορετική εικόνα: + + [root@helios root]# lsof -i + COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME + privoxy 14769 privoxy 3u IPv4 173542 TCP localhost.localdomain:6969 + (LISTEN) + tcpserver 14781 root 3u IPv4 176623 TCP *:44444 (LISTEN) + tcpserver 14783 root 3u IPv4 176629 TCP *:2121 (LISTEN) + smbd 14793 root 9u IPv4 176648 TCP *:netbios-ssn (LISTEN) + xinetd 14814 root 5u IPv4 179758 UDP *:ntalk + httpd 14831 root 3u IPv4 185996 TCP *:http (LISTEN) + httpd 14886 apache 3u IPv4 185996 TCP *:http (LISTEN) + +Όλα αυτά τα (LISTEN) δεν είναι καθόλου απαραίτητα, εκτός κι\'αν ξέρετε τι κάνετε. Αν δεν ξέρετε τι σημαίνει κάποια καταχώρηση (όπως πχ. netbios-ssn), μπορείτε +να την αναζητήσετε στο αρχείο /etc/services για περισσότερες πληροφορίες: + + $ grep netbios-ssn /etc/services + netbios-ssn 139/tcp # NETBIOS session service + netbios-ssn 139/udp + +Το μηχάνημα που δεν δείχνει τίποτα να ακούει (LISTENing), είναι σχεδόν αόρατο στο δίκτυο. Είναι εξαιρετικά δύσκολο για κάποιον επιτιθέμενο να το βρει και να του +επιτεθεί. Πώς ξεφορτωνόμαστε όλα αυτά τα LISTEN λοιπόν; + +Ανάλογα με τη διανομή που χρησιμοποιούμε ( [Debian](http://www.debian.org), [Slackware](http://www.slackware.com), [Red Hat](http://www.redhat.com), +[Gentoo](http://www.gentoo.org) κτλ), υπάρχουν διαφορετικοί τρόποι ελέγχου των υπηρεσιών (services) που είναι ενεργές στον υπολογιστή μας. Οι περισσότερες +διανομές GNU/Linux χρησιμοποιούν System V init scripts, δηλαδή αποθηκεύουν τα scripts που ελέγχουν τις υπηρεσίες στους καταλόγους /etc/rcX.d, όπου Χ είναι μια +τιμή από 0 έως 6. Αυτή η τιμή αντιστοιχεί στο runlevel του συστήματος. Το runlevel στο οποίο λειτουργεί το σύστημα αμέσως μετά την εκκίνησή του (boot) το +βρίσκουμε με ένα + + # grep default /etc/inittab + +Στο δικό μου σύστημα αυτό δίνει: + + # The default runlevel. + id:2:initdefault: + +που σημαίνει ότι αν θέλω να κάνω κάποιες υπηρεσίες να μην ενεργοποιούνται σε κάθε επανεκκίνηση, πρέπει να τις απενεργοποιήσω από το φάκελο /etc/rc2.d . + +Αν κάνουμε ένα + + ls -l + +μέσα σε αυτό το φάκελο, θα δούμε ότι υπάρχουν πολλά symbolic links με τα ονόματα όλων των διαθέσιμων υπηρεσιών. Αν θέλουμε να μην ξεκινάει σε κάθε εκκίνηση ο +http daemon (httpd) (που είναι συνήθως ο [Apache](http://www.apache.org)), απλά σβήνουμε το link SXXhttpd (όπου ΧΧ η προτεραιότητα με την οποία ενεργοποιείται +κατά την εκκίνηση αυτό το service). + +Ωραία, ο web server δεν θα ξεκινάει σε κάθε εκκίνηση από δω και στο εξής. Πώς όμως τον σταματάμε εδώ και τώρα; + +Αν προσέξατε, όλα τα symbolic links στον κατάλογο που είμαστε \"δείχνουν\" σε αρχεία του καταλόγου ../init.d (δηλαδή στο /etc/init.d). Για να σταματήσουμε ή να +ξεκινήσουμε μια υπηρεσία αμέσως, καλούμε το script που την ελέγχει με την παράμετρο stop ή start: + +Αυτή η εντολή ενεργοποιεί άμεσα τον HTTP server: + + # /etc/init.d/httpd start + +Αυτή η εντολή τον σταματάει: + + # /etc/init.d/httpd stop + +Με αυτό τον τρόπο μπορούμε να ξεφορτωθούμε και οποιεσδήποτε άλλες υπηρεσίες που είναι ενεργές χωρίς λόγο. Υπενθύμιση: σε ένα home PC, η εντολή + + # lsof -i + +δεν πρέπει να δείχνει τίποτα που να \"ακούει\" (LISTEN) για συνδέσεις από το δίκτυο (\*:port\_number). + +ΣΗΜΕΙΩΣΗ: Υπάρχουν μερικές ειδικές περιπτώσεις, όπως το port 6000 (X11), το οποίο είναι περιττό για το 99% των συστημάτων για αποκλειστικά προσωπική χρήση, και +έχει γνωστά προβλήματα ασφάλειας (οποιοσδήποτε στο δίκτυο μπορεί να δει τι πληκτρολογείτε). Οπότε είναι πολύ καλή ιδέα να το κλείσετε, καλώντας τα X με την +παράμετρο -nolisten tcp: + + $ startx -- -nolisten tcp + +### [2.3 Firewalls]{#ss2.3} + +Tα firewalls είναι προγράμματα ή συσκευές που ελέγχουν τα δεδομένα που ταξιδεύουν σε ένα δίκτυο. Σε προσωπικό επίπεδο, μπορούμε να τα χρησιμοποιήσουμε για να +ελέγξουμε τις δικτυακές συνδέσεις του υπολογιστή μας και να δυναμώσουμε την άμυνά μας έναντι δικτυακών επιθέσεων. Στο GNU/Linux το +[firewalling](http://www.wikipedia.org/wiki/firewall) γίνεται από το σύστημα [netfilter](http://www.netfilter.org), που ελέγχεται από το πρόγραμμα iptables. + +Σε όλες τις μοντέρνες διανομές το σύστημα netfilter είναι ενεργοποιημένο στον πυρήνα Linux και το πρόγραμμα netfilter υπάρχει προεγκατεστημένο. Συνεπώς το μόνο +που έχουμε να κάνουμε είναι να δώσουμε τους κανονισμούς σύμφωνα με τους οποίους θα διαχειρίζεται ο πυρήνας τα δικτυακά δεδομένα που έρχονται και φεύγουν από τον +υπολογιστή μας. + +Δεν θα μπούμε σε λεπτομέρειες, επειδή το firewalling είναι αρκετά μεγάλο θέμα. Θα σας δείξω τα rules που χρησιμοποιώ στο laptop μου, με σχόλια που θα εξηγούν τι +κάνει το κάθε rule. Το παρόν ruleset έχει βασιστεί στο εξαιρετικό [tutorial του James C. Stephens.](http://www.sns.ias.edu/~jns/security/iptables/index.html) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #!/bin/bash + + if [ -z $1 ]; then + # Δεν έχουμε command line argument, οπότε δεν αφήνουμε κανέναν να συνδεθεί με + SSH σε μας. + echo Disallowing SSH access... + NOSSH=1 + else + # Έχουμε IP address στη γραμμή εντολών, που θέλουμε να συνδέεται σε μας με + SSH. + echo Allowing SSH access for $1... + fi + + ############################## + #### ΓΕΝΙΚΕΣ ΠΡΟΦΥΛΑΞΕΙΣ ##### + ############################## + + ## Μην απαντάς σε ping. + /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all + + ## Μην απαντάς σε broadcasts. + /bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts + + ## Μη δέχεσαι source routed πακέτα. + /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route + + ## Μη κάνεις ICMP redirect. + /bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects + + ## Προστασία έναντι περίεργων λαθών. + /bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses + + ## Ενεργοποίησε το reverse path filtering. + for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do + /bin/echo "1" > ${interface} + done + + ## Σημείωσε στα system logs (/var/log/messages by default) τα πακέτα που + φαίνεται να έχουν ψεύτικες διευθύνσεις ή γενικώς να είναι ύποπτα. + /bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians + + ## Μην λειτουργείς σαν router (μην προωθείς πακέτα σε άλλες διευθύνσεις). + /bin/echo "0" > /proc/sys/net/ipv4/ip_forward + + ################## + #### FIREWALL #### + ################## + + ## Φόρτωσε τα connection-tracking modules. + /sbin/modprobe ipt_state + /sbin/modprobe ip_conntrack + /sbin/modprobe ip_conntrack_ftp #ports=2121 + #/sbin/modprobe ipt_owner + + ## Καθάρισε τυχόν ενεργά rules + /sbin/iptables -F + ## Διέγραψε τυχόν custom tables + /sbin/iptables -X + ## Μηδένισε όλους τους μετρητές πακέτων + /sbin/iptables -Z + + ## By default κάνουμε DROP (αγνοούμε) όλα τα πακέτα (ώστε να περνάνε μόνο αυτά + που έχουν λόγο να περνάνε) + /sbin/iptables -P INPUT DROP + /sbin/iptables -P FORWARD DROP + /sbin/iptables -P OUTPUT DROP + + + ##################### + #### ΕΙΣΕΡΧΟΜΕΝΑ #### + ##################### + + ## Δεχόμαστε όλες τις τοπικές συνδέσεις + /sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT + + ## Δεχόμαστε πακέτα από όλες τις ήδη υπάρχουσες συνδέσεις (λόγω των υπολοίπων + rules, αναγκαστικά τις έχουμε ξεκινήσει εμείς οπότε υποθέτουμε ότι είναι + ασφαλείς) + /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + + if [ $NOSSH ]; then + #Καθόμαστε. + echo + else + ## Επέτρεψε συνδέσεις SSH από τη διεύθυνση που παρέχουμε στη γραμμή εντολών + /sbin/iptables -A INPUT -p tcp -s $1 --sport 1024: --dport 22 -j ACCEPT + fi + + ###################### + ##### ΕΞΕΡΧΟΜΕΝΑ ##### + ###################### + + ## Δεχόμαστε τοπικές συνδέσεις + /sbin/iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT + + ## SSH + /sbin/iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT + + ## HTTP + /sbin/iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT + + ## HTTPS + /sbin/iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT + + ## POP3 + /sbin/iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT + + ## SMTP + /sbin/iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT + + ## DNS + /sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT + + ## FTP (command) + /sbin/iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j + ACCEPT + + ## FTP (data::Active) + /sbin/iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j + ACCEPT + + ## FTP (data::Passive) + /sbin/iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state + ESTABLISHED,RELATED -j ACCEPT + + if [ $NOSSH ]; then + echo + else + ## Επιτρέπουμε στον SSH server μας να απαντήσει. + /sbin/iptables -A OUTPUT -p tcp --sport 22 --dport 1024: -m state --state + ESTABLISHED,RELATED -j ACCEPT + fi + + ## ICMP + /sbin/iptables -A OUTPUT -p icmp -j ACCEPT + + ## dict.org:2628 + /sbin/iptables -A OUTPUT -p tcp -d 66.111.36.30 --dport 2628 -j ACCEPT + + ## Importing OpenPGP keys από pgp.mit.edu:11371 + /sbin/iptables -A OUTPUT -p tcp -d 18.7.14.139 --dport 11371 -j ACCEPT + + ## JETDIRECT printing + /sbin/iptables -A OUTPUT -p tcp --dport 9100 -j ACCEPT + + ## Whois queries + /sbin/iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT + + ## NTP updates + /sbin/iptables -A OUTPUT -p tcp -d 128.2.4.21/16 --dport 123 -j ACCEPT + /sbin/iptables -A OUTPUT -p udp --sport 123 -d 128.2.4.21/16 --dport 123 -j + ACCEPT + + + ################# + #### LOGGING #### + ################# + ## Αυτά τα μηνύματα καταχωρούνται στο /var/log/messages + ## Με ένα tail -f /var/log/messages σαν root τα παρακολουθούμε + + ## Log εισερχόμενα TCP πακέτα που απορρίφθηκαν. + /sbin/iptables -A INPUT -p tcp -j LOG --log-prefix "iptables:IN-TCP DROPPED:" + + ## Log εξερχόμενα TCP πακέτα που απορρίφθηκαν. + /sbin/iptables -A OUTPUT -p tcp -j LOG --log-prefix "iptables:OUT-TCP DROPPED:" + + ## Log οτιδήποτε άλλο που δεν πέρασε + #/sbin/iptables -A INPUT -j LOG --log-prefix "iptables:INCOMING DROPPED:" + /sbin/iptables -A OUTPUT -j LOG --log-prefix "iptables:OUTGOING DROPPED:" + + ## Τέλος του iptables script + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μπορείτε να κατεβάσετε αυτό το script και [σε ASCII μορφή](fw.rules) για πιο εύκολη χρήση. Το script πρέπει να ανήκει στον root και να είναι executable: + + # chown root:root fw.rules + # chmod 770 fw.rules + +\...και το εκτελείτε. Τα αποτελέσματα τα βλέπετε με ένα + + # iptables -L + + +### [3. Privacy]{#s3} + +Σε αυτή την ενότητα θα εξετάσουμε τα βήματα που μπορούμε να ακολουθήσουμε για να δυσκολέψουμε το έργο των απανταχού +[spammers](http://www.wikipedia.org/wiki/Spamming), διαφημιστών, και λοιπών κερδοσκοπικών ατόμων και εταιρειών, που έχουν σαν σκοπό να μετατρέψουν το Internet +σε ένα μεγάλο εμπορικό κέντρο. Μόνο και μόνο διαβάζοντας σελίδες και στέλνοντας emails οι κινήσεις μας παρακολουθούνται και καταγράφονται για σκοπούς marketing. +Τα προσωπικά μας δεδομένα πωλούνται σε όσους μπορούν να πληρώσουν, και καταντάμε έρμαια μαζικών διαφημίσεων στα προσωπικά μας mailbox. Σε κάθε σελίδα που +διαβάζουμε υπάρχουν 5-10 διαφημιστικά banners που αναβοσβήνουν, αστράφτουν, κουνιούνται, έχουν ήχο\... κάνουν τα πάντα για να αποσπάσουν την προσοχή μας από τον +σκοπό που είχαμε όταν πήγαμε στην σελίδα (να διαβάσουμε τις πληροφορίες που έχει εκεί), και να μας κάνουν να θυμηθούμε το οποιοδήποτε προϊόν όταν το δούμε +μπροστά μας. Προσωπικά βρίσκω τις διαφημίσεις αυτές εξαιρετικά ενοχλητικές και την πώληση των προσωπικών μου πληροφοριών σε εταιρείες ανήθικη. Να τι κάνω για να +προστατέψω τον εαυτό μου λοιπόν. + +### [3.1 Διαφημίσεις (banner ads)]{#ss3.1} + +Τα banners έχουν αρχίσει να γίνονται ιδιαίτερα ενοχλητικά. Δεν μπορεί κανείς να διαβάσει μια σελίδα στο Internet χωρίς να βομβαρδίζεται από ενοχλητικά +[animation, ήχους και χρώματα](/34/img/ads.png), όλα να υπόσχονται λεφτά και εκπτώσεις και ευκαιρίες. Εκτός από την ενόχληση αυτή, τα banners χρησιμοποιούνται από +τους διαφημιστές για να παρακολουθούν τους netizens και να δημιουργούν καταναλωτικά προφίλ για σκοπούς marketing (βλ. ενότητα για cookies παρακάτω). Ευτυχώς +είναι αρκετά εύκολο να [απαλλαγεί](/34/img/noads.png) κανείς από αυτά, χάρη στους proxy servers που υπάρχουν ελεύθερα διαθέσιμοι. + +O [privoxy](http://www.privoxy.org) είναι ένας anonymizing proxy. Ένα πρόγραμμα, δηλαδή, που δέχεται αιτήσεις για νέες σελίδες από τον browser σας, και τις +φέρνει από το δίκτυο. Όταν τις σερβίρει στον browser για να τις δείξει στην οθόνη, διαβάζει τον κώδικα της σελίδας και [αντικαθιστά τις +διαφημίσεις](http://www.andrew.cmu.edu/~apapadop/linux/images/bloomberg_privoxy.png) με άσπρα κουτάκια (που δεν φαίνονται) είτε ένα σήμα που δείχνει στον χρήστη +ότι υπήρχε μια διαφήμιση εκεί, και τώρα δεν την βλέπει. Έτσι βλέπουμε μόνο αυτό που θέλουμε, και όχι διαφημίσεις που μας αποσπούν την προσοχή. + +### [3.2 Cookies]{#ss3.2} + +Τα cookies είναι μικρά αρχεία κειμένου που οποιοδήποτε site μπορεί να αποθηκεύσει στον υπολογιστή μας. Έχουν δημιουργηθεί για να ξεπεράσουν κάποια [προβλήματα +σχεδιασμού του πρωτοκόλλου HTTP](http://www.wikipedia.org/wiki/HTTP_cookie) που χρησιμοποιείται για web browsing. Επειδή το HTTP είναι stateless, δηλαδή δεν +μπορεί να καταλάβει αν κάποιο click που κάνουμε είναι συνδεμένο με προηγούμενες ενέργειές μας στην ίδια σελίδα ή όχι, εφευρέθηκαν τα cookies. Τώρα, όταν κάνω +login σε κάποιο δικτυακό χώρο που χρειάζεται να ελέγχει την πρόσβαση των χρηστών του (π.χ. online email service), το site μου δίνει ένα cookie που περιέχει +κωδικοποιημένες τις πληροφορίες του λογαριασμού μου. Έτσι, όταν ζητάω να δω το inbox μου, το εκάστοτε site ξέρει ότι είμαι ο νόμιμος χρήστης αυτού του +λογαριασμού, και μου δείχνει τα email μου. Αν δεν υπήρχε αυτός ο μηχανισμός για να παρακολουθεί πχ. το Yahoo! ποιος χρήστης ζητάει να δει τι, θα ήταν δυνατό να +διαβάζουν όλοι τα emails όλων των άλλων χρηστών. + +Όλα καλά και άγια ως εδώ με τα cookies. Τα προβλήματα ξεκινούν όταν διάφοροι εξυπνάκηδες αρχίζουν να εκμεταλλεύονται αυτό το μηχανισμό για να μας παρακολουθούν +για διαφημιστικούς λόγους. Υπάρχουν εταιρείες όπως η απεχθής Doubleclick, που μοιράζουν άφθονα cookies σε κάθε ευκαιρία, και μετά παρακολουθούν το πού πάει ο +κάτοχός τους. + +Ένα παράδειγμα. Είχα ένα λογαριασμό για free web email στο rocketmail.com και ήμουν πολύ ικανοποιημένος. Ούτε spam, ούτε διαφημίσεις, ούτε τίποτα. Όταν το +rocketmail.com αγοράστηκε από το Yahoo! άρχισαν τα προβλήματα. Κάθε φορά που χρησιμοποιώ το λογαριασμό μου, το Yahoo! προσπαθεί να μου δώσει ένα cookie εκ +μέρους της Doubleckick. Αν δεν προστάτευα τον εαυτό μου απορρίπτοντας το cookie, οποιαδήποτε άλλα sites είχαν διαφημίσεις της Doubleclick (και είναι λίγα που +**δεν** έχουν) θα μπορούσαν να μάθουν τη διεύθυνση email μου. Καθώς πήγαινα σε περισσότερα sites, με το cookie της Doubleckick στον υπολογιστή μου, οι συνήθειές +μου θα καταγράφονταν και θα συσχετιζόντουσαν για να δημιουργήσουν ένα καταναλωτικό προφίλ. Τι ενδιαφέρει αυτόn τον καταναλωτή; Σε τι δικτυακούς τόπους συχνάζει; +Πόσο χρόνο κάθεται σε τι είδους σελίδες; Αυτό το προφίλ είναι έτοιμο να πουληθεί σε οποιονδήποτε ενδιαφερόμενο κάνει direct marketing. Σε όλη αυτή τη διαδικασία +εγώ ουδέποτε έχω συμφωνήσει να φτιαχτεί τέτοιο προφίλ, να παρακολουθούνται οι κινήσεις μου, και να δέχομαι spam email από εταιρείες που δεν ξέρω καν. Και όμως, +δεχόμενος το cookie, έχω κάνει όλα τα παραπάνω. + +Τα cookies είναι άχρηστα για την σωστή λειτουργία του δικτυακού τόπου στη συντριπτική πλειοψηφία των περιπτώσεων. Ο γενικός κανόνας είναι ότι αν δεν χρειάζεται +να κάνετε login κάπου (με username και password), τότε δεν χρειάζεστε και τα cookies από εκείνο το site. + +Για να αμυνθούμε έναντι των cookies, πρέπει απλά να ρυθμίσουμε τον browser μας να μας ρωτάει τι να κάνει κάθε φορά που κάποιος προσπαθεί να μας δώσει cookie. +Και ο [Mozilla](/34/img/mozilla_cookie.png) και ο [Konqueror](/34/img/konqueror_cookie.png) έχουν πολύ ωραίο τρόπο αντιμετώπισης των cookies. Μπορούν να ρυθμιστούν να +θυμούνται την επιλογή του χρήστη (αποδοχή ή απόρριψη cookies από ένα συγκεκριμένο site), και να σβήνουν όλα τα cookies με το που κλείνουμε τον browser. Έτσι +κρατάμε τις χρήσιμες λειτουργίες των cookies επιλεκτικά, όπου τις χρειαζόμαστε, και σιγουρεύουμε ότι δεν μπορεί κανείς να μας παρακολουθήσει την επόμενη φορά +που θα ανοίξουμε τον browser μας. + +### [3.3 Web bugs]{#ss3.3} + +Τα web bugs είναι αόρατες εικόνες (1x1 pixel transparent GIFs, συνήθως) που στέλνονται σαν μέρος ενός HTML email, και πρέπει να φορτωθούν από το Internet όταν +το email ανοιχτεί. Τι σημασία έχει αυτό, σας ακούω να ρωτάτε. + +Ας πούμε ότι είμαι ένας spammer. Τρέχω έναν web server και έναν mail server δικό μου. Στέλνω 10,000 email ένα πρωί, μη ξέροντας ποιες από αυτές τις διευθύνσεις +είναι πραγματικές και ποιες έχουν καταργηθεί. Επίσης θέλω να μετρήσω το πόσο γρήγορα φτάνουν στα θύματά μου (καταναλωτές) οι διαφημίσεις που στέλνω. Πώς θα το +κάνω αυτό; + +Το email που στέλνω είναι σε HTML. Περιέχει στον κώδικα της σελίδας μια αόρατη εικόνα (transparent GIF), η πηγή του οποίου είναι ο web server μου. Συνεπώς μόλις +κάποιο θύμα ανοίξει αυτό το email, ο mail client του θα προσπαθήσει να του δείξει την εικόνα, άρα θα προσπαθήσει να την κατεβάσει από το Internet, και πιο +συγκεκριμένα από τον δικό μου web server. Αλλά οι web servers έχουν logs που δείχνουν ποια διεύθυνση (ΙΡ), ζήτησε ποιο αρχείο (το GIFάκι), ποιά ώρα. Συνεπώς +μαθαίνω ότι κάποιος στο domain 194.15.60.x (που μπορώ εύκολα να μάθω πως ανήκει σε subnet ενός συγκεκριμένου Internet Service Provider - ας πούμε της OTEnet) +άνοιξε το email μου στις 11:34 ακριβώς το πρωί. + +Αμέσως ξέρω ότι κάποια από τις διευθύνσεις \@otenet.gr που έχω είναι πιθανότατα πραγματικό mailbox κάποιου θύματος, το οποίο διαβάζει τα mail του αρκετά συχνά. +Άρα αρχίζω να χτυπάω τις διευθύνσεις \@otenet.gr πιο πολύ με spam από δω και πέρα. + +Η μόνη άμυνα για αυτή την παραβίαση του προσωπικού μας χώρου είναι η απαγόρευση των HTML email. Ο [Mozilla Mail](/34/img/moz_mail.png) και το [KMail](/34/img/kmail.png) +έχουν ρυθμίσεις για να σας βοηθήσουν να αντιμετωπίσετε τα web bugs, που είναι τελικά τελείως άχρηστα σε εμάς, και πολύ χρήσιμα στους spammers. + +**Συμπέρασμα:** + +Οι απειλές είναι πολλές, άλλα υπάρχουν και πολλά που μπορούμε να κάνουμε για να προστατευθούμε. Με λίγη προσοχή και τη δύναμη των εργαλείων του GNU/Linux, diff --git a/content/articles/34/04_tips.md b/content/articles/34/04_tips.md new file mode 100644 index 0000000..21bb374 --- /dev/null +++ b/content/articles/34/04_tips.md @@ -0,0 +1,357 @@ ++++ +title = 'Tips για την γραμμή εντολής.' +date = '2003-08-01T00:00:00Z' +description = '' +author = 'Φανουργάκης Μανώλης(mailto:mfano@NOSPAMfreemail.gr)' +issue = ['Magaz 34'] +issue_weight = 4 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Μερικά tips που διευκολύνουν τη ζωή μας στη γραμμή εντολής* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Aliases** +------------------------------------- + +- [1.1 ls](#ss1.1) +- [1.2 less](#ss1.2) +- [1.3 pushd, popd, dirs](#ss1.3) +- [1.4 PATH](#ss1.4) +- [1.5 history](#ss1.5) +- [1.6 find](#ss1.6) +- [1.7 Συντόμευση για συνηθισμένα μακριά command lines.](#ss1.7) +- [1.8 Διάφορα](#ss1.8) + +**2. Shell prompt** +------------------------------------------ + +**3. Vi (=very intelligent) editor** +----------------------------------------------------------- + +**4. Screen** +------------------------------------ + + +### [1. Aliases]{#s1} + +Τα παρακάτω aliases μπορούν να μπουν στο \~/.bashrc. Αν όμως γίνουν πολλά, είναι καλύτερα για λόγους τάξης να μπουν σε ένα ξεχωριστό αρχείο, π.χ. στο \~/.alias +και να μπει στο \~/.bashrc η γραμμή: + + test -s ~/.alias && . ~/.alias + +### [1.1 ls]{#ss1.1} + + alias l='ls -lA ' + alias lh='l -h ' + +Ο διακόπτης -h της ls είναι αρκετά χρήσιμος γιατί μετατρέπει το μέγεθος αρχείων σε kB,MB,GB. Έτσι, με \'l \~/mbox\' θα πάρω το παρακάτω: + + -rw------- 1 manolis users 135987 Ιούλ 28 22:33 /home/manolis/mbox + +Ενώ με \'lh \~/mbox\' το παρακάτω: + + -rw------- 1 manolis users 133k Ιούλ 28 22:33 /home/manolis/mbox + +### [1.2 less]{#ss1.2} + + alias m='$PAGER' + +Όπου η μεταβλητή PAGER έχει τεθεί στο \~/.bashrc ως εξής: + + export PAGER='less -rM ' + +Ή ό,τι άλλο χρησιμοποιείται ως pager τέλος πάντων. Εξαιρετικά βολικό, χρησιμοποιώ το less αμέτρητες φορές κάθε μέρα. + +### [1.3 pushd, popd, dirs]{#ss1.3} + + alias pd='pushd' + alias po='popd' + alias ds='dirs -v' + +Χρήσιμα για τις \...περιπλανήσεις μας στη δομή αρχείων του linux. + +Οι εντολές pushd, popd, dirs χειρίζονται μια στοίβα (stack) καταλόγων στους οποίους μετακινούμαστε. + +- Με την εντολή \'pushd dir\' μεταφερόμαστε στον κατάλογο dir και τοποθετείται αυτός στην κορυφή της στοίβας. +- Με την εντολή popd αφαιρείται ο κατάλογος που βρίσκεται στην κορυφή της στοίβας και μεταφερόμαστε σ\' αυτόν που θα γίνει η νέα κορυφή. +- Με την εντολή dirs βλέπουμε τα περιεχόμενα της στοίβας. + +Ένα παράδειγμα θα γίνει πιο εύκολα κατανοητό: + + $ pd /tmp/ + /tmp ~ + +Ξεκινώντας ένα νέο shell βρίσκομαι στο home directory. Κάνω push το /tmp. Παρατηρώ ότι η pushd μου αναφέρει και την κατάσταση της στοίβας: Στην κορφή βρίσκεται +το /tmp και μετά το home από όπου ξεκίνησα. + + $ pd /usr/local/bin/ + /usr/local/bin /tmp ~ + +Έκανα push και το /usr/local/bin. Η στοίβα τώρα έχει τρεις καταλόγους. + + $ ds + 0 /usr/local/bin + 1 /tmp + 2 ~ + +Ας υποθέσουμε τώρα ότι θέλω να εναλλάσομαι γρήγορα μεταξύ αυτών των καταλόγων. Με ένα pushd +n (όταν χρησιμοποιήσουμε την pushd χωρίς όρισμα, εννοείται +1) ο +κατάλογος που βρίσκεται στη θέση n πάει στην κορυφή. + + $ pd +1 + /tmp /usr/local/bin ~ + +Με ένα popd ξεφορτώνομαι τον κατάλογο που βρίσκεται στην κορυφή και μεταφέρομαι στον αμέσως επόμενο. + + $ po + /usr/local/bin ~ + +Με τη σωστή χρήση των pushd, popd, dirs μπορούμε να κάνουμε πολύ γρήγορα πολύπλοκες δουλειές. Και μην ξεχνάτε ότι τα πλήρη ονόματα των καταλόγων μπορεί να +γίνουν πολύ μεγάλα (π.χ. /usr/X11R6/lib/X11/fonts/hellas/, \~/download/pictures/flags/greece/). Είναι πολύ βολικό να μπορεί κανείς με τρία χτυπήματα πλήκτρων να +εναλάσσεται μεταξύ τους. + +Για περισσότερες πληροφορίες \'help pushd\', \'help popd\', \'help dirs\'. + +Επίσης, ας μην ξεχνάμε και την εντολή \'cd -\' που μας τοποθετεί στον προηγούμενο κατάλογο (σ\' αυτόν που είμασταν πριν κάνουμε cd ή pushd/popd). + +### [1.4 PATH]{#ss1.4} + + alias pt='echo $PATH|tr : \\n ' + addpath() { while test "$1" ; do PATH=${PATH}:"$1" ; shift ; done ; } + +Το alias pt κάνει το εξής απλό και έξυπνο: Παίρνει τη μεταβλητή PATH και την περνάει στην εντολή tr (δώστε man tr) ώστε να μετατρέψει τις άνω και κάτω τελείες +που χωρίζουν τους καταλόγους του path σε αλλαγές γραμμών. Έτσι έχουμε το εξής ευανάγνωστο αποτέλεσμα: + + $ pt + /usr/local/bin + /usr/bin + /usr/X11R6/bin + /bin + /usr/games/bin + /opt/gnome/bin + /opt/kde3/bin + . + +Η συνάρτηση addpath προσθέτει τα ορίσματά της στο τέλος της μεταβλητής PATH. Οι συναρτήσεις (functions) του shell είναι σαν μικρά σκριπτάκια, έχουν πιο πολλές +δυνατότητες από τα απλά aliases. Εδώ όπως βλέπετε μπορούμε να χειριστούμε μία- μία όλες της παραμέτρους της addpath(). + +(Για περισσότερες πληροφορίες, man bash, section FUNCTIONS) + +### []{#history} [1.5 history]{#ss1.5} + +Το shell μας δίνει τη δυνατότητα να επαναλάβουμε μια προηγούμενη εντολή χωρίς να χρειάζεται να την πληκτρολογήσουμε ολόκληρη. + +- Με τα βελάκια πάνω και κάτω μπορούμε να έχουμε γρήγορη πρόσβαση στις προηγούμενες εντολές. +- Δίνοντας \'!cmd\' επαναλαμβάνεται η τελευταία εντολή που αρχιζε με τους χαρακτήρες \'cmd\'. +- Δίνοντας \'history n\' (παρεμπιμπτόντως μην ξεχάσετε το alias h=\'history \' στο \~/.bashrc) μας εμφανίζονται οι τελευταίες n εντολές μαζί με τον αριθμό + τους. Στη συνέχεια με \'!n\', όπου n ο αριθμός της εντολής μπορούμε να επαναλάβουμε όποια θέλουμε. +- Με \'!-n\', όπου n αριθμός, εκτελείται η n-ιοστή προηγούμενη εντολή. Με \'!!\' εκτελείται η αμέσως προηγούμενη (συνώνυμο του \'!-1\'). + +(Για περισσότερες πληροφορίες, man bash, section HISTORY) + +### [1.6 find]{#ss1.6} + + export FIN='-printf %s\t%TY-%Tm-%Td-%TX\t%p\n' + +Έχοντας αυτή τη γραμμή στο \~/.bashrc έχω πάντα στο shell μου μια μεταβλητή, την FIN. Το κείμενο της είναι μια εντολή μορφοποίησης για τα αποτελέσματα της find. +Δίνοντας λοιπόν \"find dir \$FIN\" παίρνω μια λίστα των αρχείων κάτω από τον κατάλογο dir στην εξής μορφή: + + 135987 2003-07-28-22:33:13 ./mbox + +Στην πρώτη στήλη το μέγεθος του αρχείου, στη δεύτερη η ημερομηνία τροποποίησης και στην τρίτη το όνομα του αρχείου. Οι στήλες είναι χωρισμένες με tab. + +Κατευθύνοντας τώρα την έξοδο της προηγούμενης εντολής στην sort μπορούμε να κάνουμε πολύ ενδιαφέροντα πράγματα: + + % find $FIN |sort -rnk 1|head -n 4 + + 5146003 2003-08-02-20:45:48 ./Mail/LGU + 2457441 2003-08-01-11:00:07 ./Mail/saved + 2029849 2003-02-04-20:32:24 ./tmp/lp/ss11 + 1603828 2003-07-28-22:22:08 ./downl/wg/glib-2.2.2.tar.bz2 + +Ο διακόπτης \'-k NUM\' της sort κάνει ταξινόμηση σύμφωνα με το NUM-οστό πεδίο. Εδώ βάλαμε το πρώτο, το μέγεθος δηλαδή. Το \'r\' είναι για φθίνουσα ταξινόμηση. +Το \'n\' είναι για να λάβει η sort υπόψη της ότι πρόκειται για αριθμούς (και να μη βάλει το 11111 πριν από το 11 στη φθίνουσα ταξινόμηση, για παράδειγμα). +Χρησιμοποίησα το φίλτρο head για να κρατήσω τις πρώτες 4 γραμμές μόνο (man head). + +Τι κάναμε δηλαδή; Κάναμε μια αναζήτηση κάτω από τον τρέχοντα κατάλογο και βρήκαμε τα πιο μεγάλα σε μέγεθος αρχεία. + +Άλλο: + + % find $FIN |sort -rk 2|head -n 4 + + 20480 2003-08-03-12:32:13 ./tmp/.tips.swp + 7946 2003-08-03-12:32:13 ./tmp/tips + 4096 2003-08-03-12:32:13 ./tmp + 150606 2003-08-03-12:21:35 ./.bash_history + +Κάναμε ταξινόμηση ως προς την ημερομηνία και ώρα τροποποίησης. + +Παρατήρηση: Η find μας επιστρέφει και ονόματα καταλόγων (όπως το ./tmp που φαίνεται πιο πάνω). Για να μην το κάνει αυτό μπορούμε να προσθέσουμε στις παραμέτρους +της find το \'! -type d\'. + +(man find για περισσότερες πληροφορίες). + +### [1.7 Συντόμευση για συνηθισμένα μακριά command lines.]{#ss1.7} + +Αυτό που κάναμε για την find μπορούμε να το κάνουμε και για άλλες εντολές όταν υπάρχει ένα αρκετά μακρύ command line που πληκτρολογούμε συχνά. Να μπαίνει δηλαδή +ένα κομμάτι της εντολής που είναι πάντα σταθερό σε μια μεταβλητή του shell ή αν είναι όλη η εντολή σταθερή να μπαίνει όλη σε ένα alias. + +Για παράδειγμα, κάθε φορά που διαβάζω ένα ενδιαφέρον ρητό πάω και το προσθέτω σε ένα αρχείο των fortunes. Με τα παρακάτω γλυτώνω πολλή πληκτρολόγηση: + + alias addfort='pushd /usr/local/share/games/fortunes;vi quotes;strfile quotes;popd' + +Για το rip ενός dvd: + + alias dvdrip='for i in `seq 1 $n` ; do mplayer -dvd $i -dumpstream -dumpfile ${i}.stream ; done' + +Αφού πρώτα θέσουμε τον αριθμό τίτλων του dvd, τους κάνουμε όλους rip με μια εντολή: + + % n=3;dvdrip + +Το παραπάνω μπορούσε να γίνει πιο απλά με μια συνάρτηση: + + dvdrip() { for i in `seq 1 $1` ; do mplayer -dvd $i -dumpstream -dumpfile ${i}.stream ; done ;} + +οπότε θα χρειαζόταν απλά: + + % dvdrip 3 + +### [1.8 Διάφορα]{#ss1.8} + + alias h='history ' + alias he='head ' + alias t='tail ' + alias j='jobs -l ' + +Γλυτώνουμε πληκτρολόγηση\... + + alias ejclcd='eject /dev/cdrom;sleep 5s;eject -t /dev/cdrom' + +Γιατί να πρέπει να κουραζόμαστε να πατάμε το κουμπί του cd όταν μπορεί να το κάνει το λινουξάκι για μας ;-) ejclcd, βγαίνει το πορτάκι, βάζουμε το δισκάκι, +κλείνει μόνο του. + + ssdu() { ls -AQ|xargs du -sb|sort -rn|cut -f 2|awk '{print "\"" $0 "\""}'|xargs du -sh ; } + ssdus() { while test "$1";do du -sb "$1";shift;done|sort -rn|cut -f 2|awk '{print "\"" $0 "\""}'|xargs du -sh ; } + +Να κάτι πιο εξεζητημένο: Η ssdu δείχνει, σε φθίνουσα σειρά, πόσο χώρο χρησιμοποιεί, σε kB/MB/GB, κάθε στοιχείο (αρχείο ή κατάλογος) του τρέχοντος καταλόγου. Και +αν θέλετε για συγκεκριμένα αρχεία/καταλόγους μονο, η ssdus παίρνει και ορίσματα. + +Βασική ιδέα είναι να τρέξει πρώτα η du για να μας δώσει λίστα αρχείων και καταλόγων ταξινομημένων κατά μέγεθος. Στη συνέχεια για κάθε στοιχείο της λίστας, +παίρνουμε το όνομα και δείχνουμε μαζί και το μέγεθός του σε kB/MB/GB. + + +### [2. Shell prompt]{#s2} + +Το command prompt του shell μπορεί να μας παρέχει σημαντικές πληροφορίες. Π.χ. βάζοντας στο \~/.bashrc τη γραμμή: + + export PS1='\u \w (\#)% ' + +θα πάρουμε ένα prompt του τύπου: + + manolis /usr/local/bin (15)% + +που μας δείχνει το όνομα του χρήστη, τον τρέχοντα κατάλογο και τον αριθμό των εντολών που έχουμε πληκτρολογήσει. (Ο αριθμός αυτός είναι χρήσιμος για την εντολή +[history](04_tips-1.html#history)). + +Το shell μας δίνει τη δυνατότητα να εμφανίσουμε στο prompt ένα σωρό χρήσιμα πράγματα, όπως το hostname (/h), τον αριθμό των εργασιών που τρέχουν στο υπόβαθρο +(/j), την ημερομηνία και ώρα (/d, /t). Φυσικά πρέπει να επιλέξει κανείς μόνο όσα πραγματικά είναι χρήσιμα γιατί ένα πολύ μακρύ prompt δυσχεραίνει τη χρήση του +τερματικού. + +Μπορούμε να τρέξουμε ακόμα και ένα πρόγραμμα και να δείξουμε την έξοδό του στο prompt. Δώστε \"PS1=\'\`uptime\` % \'\" χωρίς τα εισαγωγικά. Δοκιμάστε επίσης +\"PS1=\'\\n\`fortune\`\\n \$ \'\" Κάπως περίεργο, αλλά έχει πλάκα. 8-) + +Για περισσότερες πληροφορίες, man bash, section PROMPTING. + + +### [3. Vi (=very intelligent) editor]{#s3} + +Κατ\' αρχάς διαβάστε τα tips που δίνονται στα τεύχη 22 και 27 του magaz. + +Έχω βάλει στο \~/.vimrc μου τα εξής: + + map :w + map j. + map :bp + map :bn + map :files + map :bdelete + +Κάνουμε map: + +- Στο f1 το σώσιμο του αρχείου. Έτσι θα είναι πιο εύκολο να το πατάμε όλη την ώρα! Ποτέ δεν ξέρεις πότε θα χτυπήσει ο δίσκος ή θα κοπεί το ρεύμα (όποιος έχει + καεί\...). +- Στο f2 την εντολή \'j.\' κάνει τα εξής: Κατεβαίνει μια γραμμή (j) και επαναλαμβάνει την προηγούμενη ενέργεια αλλαγής/διόρθωσης κειμένου (.). Αυτό είναι + χρήσιμο για να επαναλάβουμε σε πολλές γραμμές την ίδια αλλαγή με ελάχιστο κόπο. +- Στα f5 και f6: Μεταφορά στο προηγούμενο και στο επόμενο αρχείο που είναι φορτωμένο στον vi αντίστοιχα. (Θυμίζω ότι με \':e file\' μπορούμε να ανοίξουμε ένα + αρχείο μέσα από τον vi. Και μάλιστα, διαθέτει και autocomplete όπως το shell!) +- Στο f7: Λίστα με όλα τα αρχεία που είναι φορτωμένα +- Στο f8: κλείνουμε το τρέχον αρχείο. + +Επίσης, + +- με την εντολή \':set tw=n\' μπορούμε να θέσουμε το μήκος του κειμένου. Το κείμενο που θα πληκτρολογούμε στο εξής θα αναδιπλώνεται αυτόματα χωρίς να + ξεπερνάει το μήκος που ορίσαμε. +- Με την εντολή \'gqip\' ο vi αναλαμβάνει να μορφοποιήσει την τρέχουσα παράγραφο σύμφωνα με το μήκος κειμένου που έχουμε ορίσει. + +Για περισσότερα για κάθε εντολή, \'help command\' μέσα στο περιβάλλον του vi. + + +### [4. Screen]{#s4} + +Η screen είναι ένα πολύ χρήσιμο πρόγραμμα που μας δίνει τη δυνατότητα να έχουμε σε ένα τερματικό πολλές οθόνες. + +Τρέχουμε τη screen και φαίνεται να μας ανοίγει ένα νέο shell. Πατώντας \'Ctrl-A w\' (Control και A μαζί και στη συνέχεια τα αφήνουμε και πατάμε w) φαίνονται οι +οθόνες που έχουμε. Στην προκειμένη είναι μόνο μία: η νούμερο 0 με τίτλο \'bash\'. Μπορούμε να διορθώσουμε τον τίτλο πατώντας \'Ctrl-A A\'. + +Πατώντας \'Ctrl-A c\' φτιάχνουμε μια καινούρια οθόνη. Άλλος τρόπος έιναι δίνοντας screen (όταν βρισκόμαστε ήδη μέσα στη screen, φτιάχνει μια καινούρια οθόνη, +δεν τρέχει νέο στιγμιότυπο της screen). Μπορούμε με \'screen -t title\' να της δώσουμε και τίτλο. + +Ο πιο απλός τρόπος να τερματίσουμε μια οθόνη είναι να κάνουμε logout από το shell της. + +Με \'Ctrl-A n\' μεταφερόμαστε στην οθόνη με αριθμό n. Με \'Ctrl-A Ctrl-A\' εναλλασόμαστε μεταξύ της τρέχουσας και της προηγούμενης οθόνης. + +Φτιάχνοντας ένα αρχείο \~/.screenrc και προσθέτοντας την παρακάτω γραμμή + + caption always "[%n %t]%? (%W)%? (%D %d %M,%c) (%l)" + +λέμε στη screen να μας δείχνει στο κάτω μέρος της οθόνης μας τις εξής πληροφορίες: + + [0 main] (1 kernel-build) (Sun 03 Aug,13:44) (1.17 1.11 1.04) + +- Τον αριθμό και τον τίτλο της τρέχουσας οθόνης σε αγκύλες. +- Τους αριθμούς και τους τίτλους των άλλων οθονών (αν υπάρχουν) σε παρενθέσεις. +- Την ημερομηνία και ώρα. +- Το system load + +Με τη screen μπορούμε να το παίζουμε \... σε πολλά ταμπλώ έχοντας μόνο ένα τερματικό ανοιχτό. + +Επίσης, άλλη πολύ ενδιαφέρουσα δυνατότητα της screen είναι ότι μπορεί να χωρίσει την οθόνη σε πολλά οριζόντια τμήματα. Σε κάθε ένα από αυτά θα αντιστοιχεί μια +οθόνη, με δυνατότητα ρύθμισης φυσικά του ύψους του καθενός. + +- Ctrl-A S για χωρισμό της οθόνης +- Ctrl-A X για καταστροφή τρέχοντος τμήματος +- Ctrl-A Tab για μετάβαση στο επόμενο τμήμα +- Ctrl-A :resize n για αλλαγή του ύψους του τρέχοντος τμήματος σε n γραμμές, (παίρνει και +n,-n για αύξηση ή μείωση κατα n αντιστοίχως). + +Τέλος, με τη screen έχουμε τη δυνατότητα να κάνουμε detach και reattach ένα session. + +Με (Ctrl-A d) γίνεται το detach, οπότε κλείνει η screen. Το session μας όμως δεν χάθηκε. Δίνοντας screen -ls θα πάρουμε μια έξοδο της μορφής: + + There are screens on: + 781.pts-0.linux (Attached) + 893.pts-3.linux (Attached) + 2002.pts-7.linux (Detached) + 3 Sockets in /tmp/uscreens/S-manolis. + +Με \'screen -r 2002\' (το pid δεν χρειάζεται όταν υπάρχει μόνο ένα detached session) ξανακάνουμε attach το session στο τρέχον τερματικό συνεχίζοντας τη δουλειά +μας ακριβως απο εκεί που την αφήσαμε) + +Αν το session δεν είναι detached και δεν έχουμε, για κάποιο λόγο, πρόσβαση σ\' αυτό μπορούμε να χρησιμοποιήσουμε την εντολή \'screen -d -r pid\' η οποία κάνει +πρώτα detach κι ύστερα attach στο τρέχον τερματικό. + +Μια περίπτωση στην οποία αυτή η ιδιότητα είναι πολύ χρήσιμη είναι σε remote shells. Ας υποθέσουμε ότι συνδέόμαι με telnet σε ένα απομακρυσμένο unix box και +αρχίζω να κάνω μια δουλειά. Μπορώ ανά πάσα στιγμή να κάνώ detach και να τερματίσώ τη σύνδεση. Όταν αργότερα ξανασυνδεθώ, κάνω attach το προηγούμενο session και +συνεχίζω τη δουλειά μου από εκεί που την άφησα! + diff --git a/content/articles/34/05_rce3.md b/content/articles/34/05_rce3.md new file mode 100644 index 0000000..1608d98 --- /dev/null +++ b/content/articles/34/05_rce3.md @@ -0,0 +1,1631 @@ ++++ +title = 'Reverse Engineering σε περιβάλλον Linux, Μέρος 2' +date = '2003-09-01T00:00:00Z' +description = '' +author = 'Φραντζής Αλέξανδρος (aka Alf) alf82 at freemail dot gr' +issue = ['Magaz 34'] +issue_weight = 5 ++++ + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*To άρθρο αυτό είναι το τρίτο της σειράς \"Reverse Engineering σε περιβάλλον Linux\". Σκοπός της σειράς είναι να εξοικοιώσει τους αναγνώστες με τις βασικές +τεχνικές του Reverse Enineering, με έμφαση στο πως αυτές μπορούν να εφαρμοστούν στο Linux, και να τους προσφέρει πιο βαθιές γνώσεις για τη λειτουργία του +συστήματος τους. Στο συγκεκριμένο άρθρο θα ασχοληθούμε κυρίως με τη διαδικασία της εκτέλεσης των προγραμμάτων και τις πληροφορίες που μπορούμε να αποκομίσουμε +από αυτά.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +-------------------------------------- + +**2. Διαδικασία Δημιουργίας και Φόρτωσης Εκτελέσιμου** +----------------------------------------------------------------------------- + +- [2.1 Εισαγωγή](#ss2.1) +- [2.2 Η πορεία ενός bit: Από την πηγαίο κώδικα στο τελικό εκτελέσιμο](#ss2.2) +- [2.3 Το φόρτωμα του προγράμματος](#ss2.3) +- [2.4 Relocation - Εναλλακτικοί τρόποι για τη διόρθωση των αναφορών στο dynamic linking.](#ss2.4) + +**3. Το ELF** +------------------------------------ + +- [3.1 Τι είναι το ELF;](#ss3.1) +- [3.2 Βασική δομή του ELF](#ss3.2) +- [3.3 Ο ELF Header](#ss3.3) +- [3.4 Τα ELF Sections](#ss3.4) +- [3.5 Τα ELF Segments](#ss3.5) +- [3.6 Εκτέλεση ενός ELF executable και dynamic linking](#ss3.6) +- [3.7 Εργαλεία για το ELF](#ss3.7) + +**4. Το /proc filesystem** +------------------------------------------------- + +- [4.1 Τι είναι το /proc filesystem](#ss4.1) +- [4.2 Γενικές πληροφορίες για το σύστημα](#ss4.2) +- [4.3 Πληροφορίες για μια διεργασία](#ss4.3) + +**5. Χρήσιμες έως πολύ χρήσιμες πληροφορίες ΙΙ** +----------------------------------------------------------------------- + +- [5.1 Dead Listing και Εργαλεία](#ss5.1) +- [5.2 Packed Executables - Συμπιεσμένα Εκτελέσιμα](#ss5.2) + +**6. Hands-on Παράδειγμα - Υπό πίεση** +------------------------------------------------------------- + +- [6.1 Πράξη 1η](#ss6.1) +- [6.2 Επιστροφή σε Κανονικές Συνθήκες πίεσης και θερμοκρασίας.](#ss6.2) +- [6.3 Σταματώντας τον χρόνο](#ss6.3) +- [6.4 To patch](#ss6.4) +- [6.5 Ασκήσεις για το σπίτι :)](#ss6.5) + +**7. Πρόκληση** +-------------------------------------- + +- [7.1 Προηγούμενη Πρόκληση (\#1) - Λύση και Hall Of Fame](#ss7.1) +- [7.2 Πρόκληση \#2](#ss7.2) + + +### [1. Εισαγωγή]{#s1} + +Καλωσήρθατε στο τρίτο άρθρο (η μέτρηση αρχίζει από το 0) για Reverse Code Engineering σε Linux! + +Στο μέρος 2 θα ασχοληθούμε με το πως λειτουργούν τα εκτελέσιμα αρχεία γενικά, ενώ στο 3ο μέρος θα μιλήσουμε συγκεκριμένα για τα ELF αρχεία. Για την καλύτερη +κατανόηση των προηγούμενων σας προτείνω να δημιουργήσετε δικά σας μικρά προγράμματα και να δείτε πως ο compiler και ο linker τα μεταμορφώνουν στο τελικό +εκτελέσιμο. + +Στο μέρος 4 θα ρίξουμε μια σύντομη ματιά στα άδυτα του /proc filesystem και στο 5 θα αναφερθούμε σε δύο πολύ σημαντικά θέματα: το dead-listing και τα packed +εκτελέσιμα. + +Το μέρος 6 περιέχει το hands on παράδειγμα αυτού του μήνα, όπου θα συναντήσουμε τη Σταχτοπούτα και τη C++ σε όλο της το μεγαλείο :) Εδώ θα εφαρμόσουμε πολλά από +όσα ειπώθηκαν στα προηγούμενα μέρη. + +Τέλος, όπως πάντα, υπάρχει η λύση του προηγούμενης πρόκλησης, μαζί με το hall of fame και μια καινούργια (και αρκετά διαφορετική από τις προηγούμενες) πρόκληση! + +Να σημειωθεί πως όλα τα εκτελέσιμα έχουν δημιουργηθεί με gcc 3.2.2 και επομένως μπορεί να υπάρχουν προβλήματα αν εκτελεστούν σε σύστημα με παλιά έκδοση του gcc +(πχ 2.95). Ειδικά στην περίπτωση των C++ προγραμμάτων αυτό είναι σίγουρο, διότι έχει αλλάξει ριζικά το Application Binary Interface (ABI). + +Μη διστάσετε να επικοινωνήσετε μαζί μου για οποιαδήποτε διόρθωση, διευκρίνηση ή σχόλιο. + +Επίσης είμαι ανοιχτός σε ιδέες για το τι θα θέλατε να περιέχουν τα επόμενα άρθρα (αν υπάρξουν, βέβαια). + + +### [2. Διαδικασία Δημιουργίας και Φόρτωσης Εκτελέσιμου]{#s2} + +### [2.1 Εισαγωγή]{#ss2.1} + +Η δημιουργία ενός εκτελέσιμου είναι μια από τις πιο βασικές διαδικασίες σε οποιοδήποτε υπολογιστικό σύστημα. Την εποχή του 1950-1960 τα πράγματα ήταν σχετικά +\"απλά\". Ο προγραμματιστής έγραφε τον αλγόριθμο σε μνημονική γλώσσα assembly και τον μετέφραζε με το χέρι σε γλώσσα μηχανής. Ύστερα τον περνούσε με κάποιο +τρόπο (βύσματα, διάτρητες κάρτες) στο σύστημα και προσευχόταν όλα να πάνε καλά! + +Η πρώτη προσπάθεια αυτοματοποίησης ήρθε με την δημιουργία των assemblers. Τώρα πια ο ίδιος ο υπολογιστής έκανε την κουραστική δουλειά της μετάφρασης από +assembly σε γλώσσα μηχανής. Οι (τεμπέληδες :) )προγραμματιστές, όμως, δεν αρκέστηκαν σε αυτό. Ανέπτυξαν γλώσσες υψηλού επιπέδου και δημιούργησαν compilers οι +οποίοι τις μετέφραζαν σε γλώσσα assembly. Οι assemblers που ήδη υπήρχαν ολοκλήρωναν τη διαδικασία αλλά τα πράγματα δε σταμάτησαν ούτε εδώ! Ακολούθησε η χρυσή +εποχή του δομημένου προγραμματισμού και των modules. Αποφασίστηκε ότι ήταν σοφό να επαναχρησιμοποιείται ο κώδικας που υπήρχε ήδη και έτσι έπρεπε να βρεθεί ένας +τρόπος να μπορούν να συνενώνονται κομμάτια κώδικα (σε δυαδική μορφή) που βρίσκονταν σε διαφορετικά αρχεία. + +### [2.2 Η πορεία ενός bit: Από την πηγαίο κώδικα στο τελικό εκτελέσιμο]{#ss2.2} + +Υπάρχουν τρία βασικά είδη object αρχείων: + +- Relocatable Object File: Περιέχουν δεδομένα και κώδικα και είναι κατάλληλα για τη δημιουργία executable ή shared object αρχείων με τη διαδικασία του linking + (Κατάληξη: \".o\", \".obj\" ) +- Executable Object File: Αρχεία κατάλληλα για εκτέλεση (Κατάληξη: στα Unix συστήματα συνήθως καμία, \".bin\", \".exe\") +- Shared Object File: Μπορούν να γίνουν link με άλλα Shared Object ή Relocatable Object Files για να δημιουργήσουν Executable Files Επιπλέον μπορούν να + συνδεθούν δυναμικά με το εκτελέσιμο κατά τη διάρκεια της φόρτωσης του. (Κατάληξη: \".so\", \".dll\") ???? + +Το παρακάτω σχήμα δείχνει συνοπτικά τα στάδια που περνάει ένα πρόγραμμα από τη στιγμή της δημιουργίας του μέχρι την εκτέλεση. + +![](/34/img/linking.png) + +Το παραπάνω πρόγραμμα αποτελείται από δύο modules (Relocatable Object File 1 και 2). Επιπλέον, χρησιμοποιεί δύο \"βιβλιοθήκες\" (Shared Object File 1 και 2). Η +πρώτη συνδέεται στατικά στο πρόγραμμα μας, δηλαδή ο κώδικας της συγχωνεύεται στο τελικό object αρχείο. Η δεύτερη συνδέεται δυναμικά. Στην περίπτωση αυτή, στο +στάδιο του linking δε γίνεται συγχώνευση κώδικα, αλλά εισάγονται πληροφορίες ώστε όταν φορτωθεί το πρόγραμμα ο dynamic linker να μπορέσει να βρει τις +διευθύνσεις των συναρτήσεων και των δεδομένων. + +### [2.3 Το φόρτωμα του προγράμματος]{#ss2.3} + +Όταν ζητάμε από το λειτουργικό να εκτελέσει ένα πρόγραμμα, γίνονται πολλά περισσότερα από όσα φαίνονται εκ πρώτης όψεως. Σε γενικές γραμμές ακολουθούνται τα +εξής βήματα (για τα ELF εκτελέσιμα τα πράγματα διαφέρουν λίγο): + +1. Αρχικά το λειτουργικό διαβάζει τον header του εκτελέσιμου για να πάρει απαραίτητες πληροφορίες, όπως: + - Αν όντως πρόκειται για εκτελέσιμο που μπορεί να τρέξει στον υπολογιστή. + - Πόση μνήμη απαιτεί και τι ιδιότητες έχει κάθε τμήμα (segment) του εκτελέσιμου ( πχ read-only, executable κτλ). + - Ποια shared objects απαιτεί το εκτελέσιμο. +2. Το λειτουργικό αποδίδει στη διεργασία τη μνήμη που χρειάζεται και φορτώνει τα διάφορα τμήματα στη μνήμη. +3. O dynamic linker φορτώνει στο address space της διεργασίας τις βιβλιοθήκες που χρειάζεται. +4. Γίνεται relocation στο εκτελέσιμο και τις βιβλιοθήκες. Ως μέρος της διαδικασίας του relocation, διορθώνονται οι αναφορές σε συναρτήσεις/δεδομένα των + βιβλιοθηκών που φορτώθηκαν. Αυτό είναι το θέμα του επόμενου τμήματος. +5. Τέλος, ο έλεγχος μεταφέρεται στο entry point του προγράμματος. Αυτό αποτελεί τη διεύθυνση της πρώτης εντολής που πρόκειται να εκτελεστεί. + +### [2.4 Relocation - Εναλλακτικοί τρόποι για τη διόρθωση των αναφορών στο dynamic linking.]{#ss2.4} + +Το relocation (επανατοποθέτηση) είναι η διαδικασία κατά την οποία γίνονται διορθώσεις στην εικόνα ενός προγράμματος επειδή αυτή μπορεί να τοποθετηθεί στη μνήμη +σε κάποιο αυθαίρετο σημείο. Αυτό συμβαίνει πάντα για τα shared objects ενώ για τα εκτελέσιμα γίνεται σε πολύ μικρότερο βαθμό. Λόγω της εικονικής μνήμης, +μπορούμε να φορτώνουμε το εκτελέσιμο πάντα στο ίδιο σημείο. Για τα shared objects, από την άλλη, δε γίνεται να υποθέσουμε πως δε θα υπάρχει σύγκρουση, διότι +πρέπει να μπορούν να συνυπάρχουν με οποιοδήποτε άλλο shared object. + +Η διαδικασία του relocation είναι σχετικά πολύπλοκη και εδώ θα ασχοληθούμε μόνο με ένα υποσύνολο της. Αυτό το υποσύνολο σχετίζεται με τις διορθώσεις των +αναφορών σε σύμβολα τα οποία βρίσκονται σε βιβλιοθήκες και συνδέονται δυναμικά με το εκτελέσιμο. + +H χρήση των shared objects για dynamic linking προσφέρει πολλά πλεονεκτήματα σε σχέση με το static linking. Μερικά από αυτά είναι η μείωση του μεγέθους των +εκτελέσιμων, οι αυξημένες δυνατότητες για επαναχρησιμοποίηση κώδικα και η δυνατότητα επέκτασης των εφαρμογών (πχ plug-ins). Όλα αυτά όμως έρχονται με ένα +(μικρό, ομολογουμένως) τίμημα. Επειδή οι βιβλιοθήκες φορτώνονται σε κάποιο αυθαίρετο σημείο της εικονικής μνήμης της διεργασίας, οι διευθύνσεις των +συναρτήσεων/δεδομένων τους δεν είναι γνωστές από πριν. Έτσι οι κλήσεις/αναφορές σε αυτά δεν είναι ολοκληρωμένες στο εκτελέσιμο. + +Υπάρχουν διάφοροι τρόποι για να αντιμετωπιστεί το πρόβλημα αυτό. Έτσι οι κλήσεις σε συναρτήσεις βιβλιοθηκών μπορεί να έχουν μια από τις παρακάτω μορφές (και όχι +μόνο, αυτές είναι οι πιο βασικές): + +1. call 0x???????? : Για τη διόρθωση, πρέπει σε κάθε κλήση της συνάρτησης ο dynamic linker να αλλάξει την τιμή στην πραγματική διεύθυνση της συνάρτησης. πχ + call 0x40001000. Το πρόβλημα είναι πως αν η συνάρτηση καλείται σε 100 διαφορετικά σημεία, πρέπει καταρχάς το εκτελέσιμο να περιέχει πληροφορίες για όλα αυτά + τα σημεία και ο dynamic linker είναι αναγκασμένος να κάνει 100 διορθώσεις. + + ![](/34/img/dynamic1.png) + +2. call \[func1\_offset\] : στη διεύθυνση μνήμης func1\_offset (που είναι καθορισμένη από πριν) ο dynamic linker τοποθετεί τη διεύθυνση της επιθυμητής + συνάρτησης. Όλες οι κλήσεις προς αυτή τη συνάρτηση διαβάζουν τη διεύθυνση από τη συγκεκριμένη θέση μνήμης και την καλούν έμμεσα (indirect call). Έτσι + αποφεύγονται οι πολλαπλές διορθώσεις, με ένα μικρό κόστος στην ταχύτητα εκτέλεσης. Τα PE (Portable Executable) format που χρησιμοποιούν τα MS Windows + στηρίζεται σε αυτό το μοντέλο. + + ![](/34/img/dynamic2.png) + +3. call jmp\_func : στη διεύθυνση jmp\_func βρίσκεται μια εντολή jmp \[func\_offset\]. Στη διεύθυνση func\_offset ο dynamic linker τοποθετεί τη διεύθυνση της + επιθυμητής συνάρτησης. Γιατί όλη αυτή η ταλαιπωρία; Ο μηχανισμός αυτός προσφέρει τη δυνατότητα οι διορθώσεις να γίνονται κατά τη διάρκεια της εκτέλεσης του + προγράμματος, όταν υπάρχει ανάγκη, και όχι απαραίτητα όλες μαζί κατά τη φόρτωση του προγράμματος. Το ELF χρησιμοποιεί μια παραλλαγή του μοντέλου αυτού και + θα το εξετάσουμε αναλυτικότερα παρακάτω. + + ![](/34/img/dynamic3.png) + + +### [3. Το ELF]{#s3} + +### [3.1 Τι είναι το ELF;]{#ss3.1} + +Το Εxecutable and Linking Format (ELF) αποτελεί το format που χρησιμοποιεί το linux για τα object αρχεία του. Υποστηρίζει μια πληθώρα αρχιτεκτονικών και για +αυτό είναι ιδανικό για ένα multi-platform λειτουργικό όπως το linux. Παρακάτω θα γίνει μια περιγραφή των βασικών στοιχείων του ELF. Για μια πιο αναλυτική +περιγραφή ανατρέξτε στο standard (pdf): [ELF 1.1](http://www.nondot.org/sabre/os/files/Executables/ELF.pdf), [ELF +1.2](http://x86.ddj.com/ftp/manuals/tools/elf.pdf) + +Αυτό το ELF δεν έχει καμία σχέση με τον Tolkien :) + +### [3.2 Βασική δομή του ELF]{#ss3.2} + +Τα βασικά συστατικά που απαρτίζουν κάθε ELF object αρχείο είναι: + +- O ELF header +- Το Program Header Table (optional στα Relocatable Object Files) +- Τα sections και τα segments. Τα segments αποτελούνται από ένα ή παραπάνω sections. +- To Section Header Table (optional στα Executable Object Files) + +Σχηματικά: + +![](/34/img/elf_views.png) + +Τα δύο views αποτελούν διαφορετικούς τρόπους με τους οποίους το σύστημα βλέπει ένα ELF object αρχείο. Το πρώτο (linking view) χρησιμοποιείται όταν το αρχείο +πρόκειται να συνδεθεί για την παραγωγή εκτελέσιμου. Η δομική μονάδα εδώ είναι το section. Το δεύτερο (execution view) χρησιμοποιείται κατά τη φόρτωση-εκτέλεση +ενός εκτελέσιμου. Ο loader δε \"βλέπει\" πια sections αλλά φορτώνει στη μνήμη ολόκληρα segments (ομάδες από sections). + +### [3.3 Ο ELF Header]{#ss3.3} + +![](/34/img/elf_header.png) + +Ο ELF Header περιέχει βασικές πληροφορίες για το object αρχείο. To πρώτο του κομμάτι (16 bytes) είναι το ELF Identification. Αυτό εκτός από τον \"μαγικό +αριθμό\" (υπογραφή) του ELF καθορίζει + +- **File Class**: Aν το εκτελέσιμο είναι 32-bit ή 64-bit (πάνε τα 16-bit, πόσο μάλλον τα 8-bit!). +- **Data Encoding**: Aν τα δεδομένα είναι σε LSB (little-endian) ή MSB (big-endian) μορφή. +- **Header Ver \#**: Την έκδοση του ELF Header. + +Ακολουθούν 9 padding bytes και ύστερα αρχίζει ο κυρίως header. + +- **Object File Type** : Το είδος του object file (relocatable, executable, shared object). +- **Required Architecture** : Η αρχιτεκτονική στην οποία πρέπει να είναι στηριγμένος ο επεξεργαστής ώστε να μπορεί να λειτουργήσει το πρόγραμμα (Intel 80386, + SPARC, MIPS RS3000 κτλ) +- **Object File Version \#** : H εκδοση του ELF. +- **Process Entry point** : H εικονική διεύθυνση της πρώτης εντολής του προγράμματος η οποία θα εκτελεστεί. +- **Program Header Table Offset** : To offset του PHT στο object αρχείο. +- **Section Header Table Offset** : To offset του SHT στο object αρχείο. +- **Processor Specific Flags** : Σημαίες που αφορούν σε ιδιότητες του εκάστοτε επεξεργαστή. +- **ELF Header Size** : To μέγεθος του ELF Header σε bytes. +- **PHT Entry Size** : Το μέγεθος μιας καταχώρησης στο Program Header Table. +- **Number of PHT entries** : Ο αριθμός των καταχωρήσεων στο Program Header Table σε bytes. +- **SHT Entry Size** : Το μέγεθος μιας καταχώρησης στο Section Header Table σε bytes . +- **Number of SHT entries** : Ο αριθμός των καταχωρήσεων στο Section Header Table. +- **Section Name String Table SHT Index** : Το index στο SHT που καθορίζει ποιο section περιέχει το string table με τα ονόματα των sections. + +### [3.4 Τα ELF Sections]{#ss3.4} + +Το section είναι ένα τμήμα του object αρχείου το οποίο περιέχει συγκεκριμένες και ομογενείς πληροφορίες. Για παράδειγμα, ένα section μπορεί να περιέχει τον +κώδικα του προγράμματος, ένα άλλο τα δεδομένα, ένα τρίτο το string table κτλ. Τα sections ενός ELF αρχείου καθορίζονται στο Section Header Table. Αν και είναι +προαιρετικός στο executable object αρχεία, πάντα περιλαμβάνεται (από όσο έχω δει). Το Section Header Table αποτελείται από μια σειρά από περιγραφείς, καθένας +από τους οποίους μας δίνει πληροφορίες για ένα section: + +![](/34/img/elf_section.png) + +Οι πληροφορίες που μας παρέχει η παραπάνω δομή είναι: + +- **Section Name String Table Index** : To offset του ονόματος του section στο string table. +- **Section Type** : Το είδος του section (πχ program-defined, symbol table, dynamic linking info). +- **Section Flags** : Σημαίες που καθορίζουν διάφορα χαρακτηριστικά του section (πχ allocation (αν το section φορτώνεται στη μνήμη κατα την εκτέλεση), write, + execute). +- **Section Virtual Address** : Η εικονική διεύθυνση στην οποία θα φορτωθεί το section στη μνήμη ή 0 αν δεν φορτώνεται. +- **Section File Offset** : Το offset στο οποίο αρχίζει το section στο object αρχείο. +- **Section Size** : Το μέγεθος του section σε bytes +- **Section Header Table Index Link** : Κάποια sections χρειάζονται πληροφορίες από κάποιο άλλο section. To πεδίο καθορίζει το index του απαραίτητου section + στο section header table. Χαρακτηριστικό παράδειγμα είναι τα sections που περιέχουν πληροφορίες για το dynamic linking. Σε αυτά, το πεδίο καθορίζει σε ποιo + string table section βρίσκονται τα ονόματα του εξωτερικών συμβόλων. +- **Additional Section Info** : Επιπλέον πληροφορίες, η σημασία των οποίων εξαρτάται από το είδος του section. +- **Section Address Alignment** : Καθορίζει σε τι όρια πρέπει να φορτωθεί το section. +- **Fixed-Size Entry Size** : Αν το section αποτελείται από κάποιον πίνακα στον οποίο κάθε καταχώρηση έχει σταθερό μέγεθος, το πεδίο αυτό δίνει το μέγεθος της + κάθε καταχώρησης (πχ το symbol table section) + +Υπάρχουν κάποια sections τα οποία κατά σύμβαση περιέχουν συγκεκριμένες πληροφορίες. Μια πλήρης λίστα μπορεί να βρεθεί στο standard. Τα πιο σημαντικά και κοινά +είναι: + +- **.text** : Περιέχει τον εκτελέσιμο κώδικα του προγράμματος. +- **.data** : Περιέχει τα αρχικοποιημένα δεδομένα του προγράμματος (πχ global μεταβλητές στις οποίες έχουμε δώσει αρχική τιμή). +- **.bss** : Περιέχει μη αρχικοποιημένα δεδομένα του προγράμματος (πχ global μεταβλητές στις οποίες δεν έχουμε δώσει αρχική τιμή). Το section αυτό δεν + καταλαμβάνει χώρο στο αρχείο αλλά δημιουργείται μόνο στη μνήμη, όπου όλα τα bytes του μηδενίζονται. +- **.dynamic** : Περιέχει πληροφορίες απαραίτητες για το dynamic linking. +- **.strtab** : Περιέχει strings που χρησιμοποιούνται κυριώς από το symbol table. +- **.dynstr** : Περιέχει τα strings σχετικά με το dynamic linking. +- **.shstrtab** : Περιέχει τα strings των ονομάτων των sections. +- **.symtab** : Περιέχει τo symbol table για το αρχείο. +- **.dynsym** : Περιέχει τo symbol table για τα σύμβολα που χρειάζονται για το dynamic linking. +- **.plt** : Περιέχει τo procedure linkage table. Θα ασχοληθούμε με αυτό αργότερα. +- **.interp** : Περιέχει το path του interpreter που θα φορτώσει το εκτελέσιμο. + +#### String Table Section + +Τα τρία sections .strtab, .dynstr και .shstrtab περιέχουν strings τα οποία χρησιμοποιούνται από κάποια άλλα sections. Η δομή τους είναι αρκετά απλή: Το πρώτο +byte του section είναι \'\\0\' και από εκεί και πέρα ακολουθεί μια σειρά από null-terminated strings. Τα strings καθορίζονται από το offset τους από την αρχή +του section. + +![](/34/img/elf_string.png) + +Για το παραπάνω table έχουμε: + + index/offset String + 1 "alf" + 2 "lf" + 5 "tx" + κτλ + +### [3.5 Τα ELF Segments]{#ss3.5} + +Τα segments αποτελούνται από ένα ή περισσότερα sections τα οποία κατά τη φόρτωση του εκτελέσιμου/shared object αρχείου έχουν κοινές ιδιότητες. Για κάθε segment +υπάρχει μια καταχώρηση στο Program Header Table: + +![](/34/img/elf_segment.png) + +- **Segment Type** : To είδος του segment και των πληροφοριών που περιέχει (πχ loadable(θα φορτωθεί στη μνήμη), dynamic linking info) +- **Segment File offset** : Το offset της αρχής του segment στο αρχείο. +- **Segment Virtual Address** : Η εικονική διεύθυνση στην οποία θα φορτωθεί το segment στη μνήμη. +- **Segment Physical Address** : Η φυσική διεύθυνση μνήμη στην οποία θα φορτωθεί το segment. Προφανώς τα περισσότερα συστήματα αγνοούν αυτό το πεδίο. +- **Segment File Image Size** : To μέγεθος που καταλαμβάνει το segment στο αρχείο. +- **Segment Memory Image Size** : To μέγεθος που θα καταλαμβάνει το segment στη μνήμη (\>=Segment File Image Size) +- **Segment Flags** : Σημαίες που καθορίζουν ιδιότητες του segment. +- **Segment Alignment** : Καθορίζει σε τι όρια πρέπει να φορτωθεί το segment. + +### [3.6 Εκτέλεση ενός ELF executable και dynamic linking]{#ss3.6} + +#### Φόρτωση - Εκτέλεση + +Σε γενικές γραμμές ακολουθούνται τα εξής βήματα: + +1. Αρχικά το λειτουργικό (μέσω του syscall exec()) διαβάζει τον header του εκτελέσιμου για να πάρει απαραίτητες πληροφορίες όπως: + - Αν όντως πρόκειται για εκτελέσιμο που μπορεί να τρέξει στον υπολογιστή + - Πόση μνήμη απαιτεί και τι ιδιότητες έχει κάθε τμήμα (segment) του εκτελέσιμου ( πχ read-only, executable κτλ) +2. To λειτουργικό ελέγχει στο Program Header Table αν το εκτελέσιμο περιέχει ένα segment τύπου PT\_INTERP (το οποίο περιέχει μόνο ένα section, το .interp).\ + Αν δεν υπάρχει τότε: + - Το λειτουργικό αποδίδει στη διεργασία τη μνήμη που χρειάζεται και φορτώνει τα διάφορα τμήματα στη μνήμη. + - Γίνεται relocation (επανατοποθέτηση) αν χρειάζεται. + - Τέλος, ο έλεγχος μεταφέρεται στο entry point του προγράμματος. + + Αν υπάρχει (συνήθως υπάρχει): + - Διαβάζει από το segment το path του interpreter και φορτώνει τον interpreter στη μνήμη. + - Το λειτουργικό είτε φορτώνει το εκτελέσιμο στη μνήμη και \"περνάει\" τη διεύθυνση του στον interpreter, είτε \"περνάει\" στον interpreter έναν file + descriptor για το αρχείο του εκτελέσιμου και τον αφήνει να κάνει τη δουλειά. Σε κάθε περίπτωση, **ο έλεγχος περνάει στον interpreter**. + - O interpreter, αν είναι ο dynamic linker ld.so (κατά 99% είναι αυτός), φορτώνει στο address space της διεργασίας τις βιβλιοθήκες που χρειάζεται το + εκτελέσιμο. + - Γίνεται relocation στο εκτελέσιμο και στις βιβλιοθήκες. Ως μέρος του relocation, διορθώνονται, αν είναι ανάγκη, οι αναφορές σε συναρτήσεις/δεδομένα των + βιβλιοθηκών που φορτώθηκαν. Στο ELF αυτό μπορεί να γίνει και στο run-time. + - Δίνεται η δυνατότητα σε κάθε shared object να εκτελέσει κάποιο κώδικα αρχικοποίησης. + - Τέλος, ο έλεγχος μεταφέρεται στο entry point του εκτελέσιμου. + +#### Το dynamic linking στο ELF + +Τα sections τα οποία σχετίζονται με το dynamic linking σε ένα εκτελέσιμο είναι τα εξής: + +**.dynamic** + +Αυτό περιέχει πληροφορίες για το ποια shared object είναι απαραίτητα για την εκτέλεση, τη διεύθυνση του relocation table, τη διεύθυνση του symbol table που +περιέχει τα εξωτερικά σύμβολα κτλ. Ο dynamic linker διαβάζει τα πεδία αυτά, φορτώνει (και επανατοποθετεί) τις βιβλιοθήκες και προσπαθεί να \"επιλύσει\" +(resolve) τις αναφορές στα εξωτερικά σύμβολα. Με άλλα λόγια, βρίσκει τις διευθύνσεις των συμβόλων και τις διορθώνει στο εκτελέσιμο. Πρέπει να σημειωθεί πως οι +βιβλιοθήκες που φορτώνει ο dynamic linker μπορεί και αυτές να απαιτούν άλλες βιβλιοθήκες, οπότε η όλη διαδικασία επαναλαμβάνεται αναδρομικά. Βέβαια, κάθε +βιβλιοθήκη φορτώνεται μόνο μια φορά, άσχετα από το αν χρησιμοποιείται από πολλά ELF objects. + +**.got (Global Offset Table)** + +Το section αυτό (αφού φορτωθεί το πρόγραμμα) περιλαμβάνει τις διευθύνσεις των συμβόλων που είναι πιθανό να αλλάξουν από το relocation. Στα εκτελέσιμα περιέχει +μόνο τις διευθύνσεις των εξωτερικών συμβόλων (dynamically linked), ενώ για τα shared object περιλαμβάνει τις διευθύνσεις όλων των συμβόλων (εσωτερικών και +εξωτερικών). Αυτό συμβαίνει αφού σίγουρα το shared object θα επανατοποθετηθεί. Οι πρώτες τρεις καταχωρίσεις έχουν ειδική σημασία. Η πρώτη (offset 0) περιέχει τη +διεύθυνση του .dynamic section. Η τρίτη περιλαμβάνει τη διεύθυνση του dynamic linker. Η τύχη της δεύτερης αγνοείται προς το παρόν. + +**.plt (Procedure Linkage Table)** + + Αυτό έχει τη μορφή: + plt_start: + push got_start+4 + jmp [got_start+8] + ... + jmp_func1: + jmp [func1_offset] + push relocation_offset1 + jmp plt_start + + jmp_func2: + ... + +Το func1\_offset είναι μια διεύθυνση μέσα στο .got section που τελικά (μετά το relocation) θα περιέχει τη διεύθυνση της συνάρτησης func1. To relocation\_offset1 +είναι ένα offset που καθορίζει μια καταχώρηση στο relocation table. H καταχώρηση αυτή θα έχει ως offset αλλαγής (η διεύθυνση στην οποία θα γίνει η διόρθωση) το +func1\_offset. + +Αρχικά, η διεύθυνση func1\_offset περιέχει τη διεύθυνση της επόμενης εντολής από την jmp \[func1\_offset\]. Έτσι, ο έλεγχος πάει στην push relocation\_offset1 +και μετά, μέσω της jmp plt\_start, στο push got\_start+4, jmp \[got\_start+8\]. + +Το got\_start+8 είναι η τρίτη καταχώρηση στο .got section και όπως είπαμε περιλαμβάνει τη διεύθυνση του dynamic linker. Έτσι, ο έλεγχος περνάει στο dynamic +linker με δύο παραμέτρους (got\_start+4, relocation\_offset1). Με αυτές τις πληροφορίες ο dynamic linker μπορεί να βρει τη διεύθυνση της ζητούμενης συνάρτησης +και να την τοποθετήσει στη func1\_offset. Την επόμενη φορά που θα κληθεί η jmp\_func1, η εντολή jmp \[func1\_offset\] θα οδηγήσει στην πραγματική συνάρτηση +func1 (και όχι στο αμέσως επόμενο push). + +Είναι φανερό πως αυτή η διαδικασία δεν είναι απαραίτητο να γίνει στο φόρτωμα του προγράμματος αλλά την πρώτη φορά που θα χρειαστεί να κληθεί η func1. Αυτή είναι +η default συμπεριφορά και ονομάζεται lazy binding. Μπορούμε να την αλλάξουμε δίνοντας στη enviroment μεταβλητή LD\_BIND\_NOW μία μη null τιμή. + +### [3.7 Εργαλεία για το ELF]{#ss3.7} + +Η δομή του ELF καθιστά αρκετά επίπονη και χρονοβόρα την απευθείας εξαγωγή πληροφοριών από ένα object αρχείο. Ευτυχώς για εμάς, υπάρχει μια πληθώρα εργαλείων που +μπορούν να μας διευκολύνουν. + +Το πιο κοινό ίσως εργαλείο (αλλά σίγουρα όχι το καλύτερο) είναι το **objdump**. Το objdump είναι μέρος των binutils και μπορεί να μας δώσει σχεδόν όλες τις +πληροφορίες που περιέχει ένα ELF object αρχείο. Η επιλογή των πληροφοριών που θα απεικονιστούν γίνεται με διάφορα flags. Βασικά flags είναι το **-x** το οποίο +δείχνει *σχεδόν* όλες τις πληροφορίες (**εκτός από αυτές που σχετίζονται με δυναμικά σύμβολα**), το **-Τ** που δείχνει τα δυναμικά σύμβολα, το **-d** που κάνει +disassemble τον κώδικα, το **-M** με το οποίο ρυθμίζουμε τον disassembler (πχ **-M intel** για intel σύνταξη) και το **-C** που ενεργοποιεί το demangling. Το +κύριο μειονέκτημα του objdump είναι στον τομέα του disassembly. Το listing που παράγεται έχει ελάχιστες πληροφορίες, ειδικά αν δεν υπάρχουν σύμβολα. Παρέα με το +objdump (στα binutils) έρχονται το readelf και το nm. Η αλήθεια είναι πως δεν είναι και πολύ χρήσιμα, αφού το objdump κάνει ότι τα προηγούμενα δύο μαζί και +ακόμα παραπάνω. + +Ένα σαφώς πιο εξελιγμένο εργαλείο είναι το **ELFsh** (Site: ). Πρόκειται για μια scripting γλώσσα που μας επιτρέπει να διαχειριστούμε +ένα ELF αρχείο. Οι δυνατότητές του ποικίλουν από μια απλή απεικόνιση των πληροφοριών του header, μέχρι και συγχώνευση δύο object αρχείων! Η \"ψυχή\" του +προγράμματος βρίσκεται σε μια καλοσχεδιασμένη βιβλιοθήκη (libelfsh) και έτσι μπορεί να χρησιμοποιηθεί σε οποιαδήποτε άλλη εφαρμογή. + +Μια πιο εύχρηστη λύση είναι o **HT Editor** (Site: ). Παρέχει πλήρη διαχείριση του object αρχείου και έναν αρκετά καλό disassembler. +Θα αναφερθούμε λίγο περισσότερο σε αυτόν στο κομμάτι για το [dead-listing](05_rce3-5.html#dead-listing). + + +### [4. Το /proc filesystem]{#s4} + +### [4.1 Τι είναι το /proc filesystem]{#ss4.1} + +To /proc είναι ένα εικονικό σύστημα αρχείων το οποίο μας δίνει τη δυνατότητα να πάρουμε πληροφορίες από τις δομές δεδομένων του πυρήνα. Είναι εικονικό με την +έννοια ότι τα αρχεία που βλέπουμε δεν έχουν κάποια φυσική υπόσταση (πχ δεν βρίσκονται σε κάποια συσκευή). Τα περισσότερα αρχεία μπορούν να ανοιχτούν μόνο για +ανάγνωση. Με ένα \"man proc\" θα λάβετε ότι πληροφορίες για το /proc θέλετε και δε θέλετε να μάθετε :) + +### [4.2 Γενικές πληροφορίες για το σύστημα]{#ss4.2} + +Στο βασικό κατάλογο /proc υπάρχει ένα πλήθος από αρχεία και καταλόγους. Κάποια από αυτά περιέχουν ολόκληρες δομές πληροφοριών, ενώ άλλα απλώς την τιμή μιας +συγκεκριμένης μεταβλητής του πυρήνα. Τα περισσότερα αρχεία έχουν ονόματα που αυτοεξηγούνται. Κάποια κύρια είναι: + +- **/proc/\ (directory)** : Οι κατάλογοι που το όνομα τους είναι ένας αριθμός, περιέχουν πληροφορίες για τη διεργασία με τον συγκεκριμένο process id. Θα + τους εξετάσουμε αναλυτικά σε λίγο. +- **/proc/self (directory)** : Symbolic link στον κατάλογο που περιέχει πληροφορίες για την τρέχουσα διεργασία +- **/proc/ide (directory)** : Πληροφορίες για τις συσκευές που είναι συνδεδεμένες στο ide bus. +- **/proc/sys (directory)** : Πλήθος πληροφοριών για το σύστημα και τον πυρήνα. +- **/proc/cpuinfo** : Πληροφορίες για τον επεξεργαστή μας και τα bugs του :) +- **/proc/filesystems** : Λίστα από τα filesystem που υποστηρίζει ο πυρήνας. +- **/proc/meminfo** : Πληροφορίες για τη χρήση της μνήμης στο σύστημα σας. +- **/proc/modules** : Ποια modules είναι φορτωμένα στον πυρήνα. Αυτό χρησιμοποιεί και η *lsmod*. +- **/proc/interrupts** : Από ποιες συσκευές πηγάζουν τα hardware interrupts. +- **/proc/partitions** : Λίστα με όλα τα partitions στον υπολογιστή (άσχετα αν είναι mounted η όχι). +- **/proc/mounts** : Λίστα με όλα τα mounted directories. (link στο self/mounts) + +### [4.3 Πληροφορίες για μια διεργασία]{#ss4.3} + +Αν και το /proc filesystem περιέχει τεράστιο όγκο πληροφοριών, αυτές που είναι πραγματικά χρήσιμες για κάποιον που επιδίδεται στο RCE είναι οι πληροφορίες περί +διεργασιών. Αυτές βρίσκονται στον κατάλογο με αριθμό (όνομα) το pid της διεργασίας. Ο κατάλογος περιέχει: + +- **/cwd (directory link)**: link στον τρέχον κατάλογο της διεργασίας (current working directory). + +- **/fd (directory)** : Περιέχει links στα ανοικτά αρχεία της διεργασίας. Πχ το link για το αρχείο με file descriptor 2 είναι fd/2. + +- **/root (directory link)**: link στο root directory του filesystem στο οποίο εκτελείται η διεργασία (συνήθως \"/\" ). + +- **cmdline** : Η πλήρης γραμμή εντολής με την οποία κλήθηκε η διεργασία. + +- **environ** : Λίστα με τις enviroment variables που βλέπει η διεργασία. + +- **exe (link)** : link στο εκτελέσιμο από το οποίο δημιουργήθηκε η διεργασία. + +- **maps** : Το memory map της διεργασίας. Για παράδειγμα για την εντολή less: + + Virtual Address Perm Offset Device INode Path + 08048000-08060000 r-xp 00000000 03:07 1457441 /usr/bin/less + 08060000-08061000 rw-p 00018000 03:07 1457441 /usr/bin/less + 08061000-0806a000 rwxp 00000000 00:00 0 + 40000000-40014000 r-xp 00000000 03:07 615324 /lib/ld-2.3.1.so + 40014000-40015000 rw-p 00014000 03:07 615324 /lib/ld-2.3.1.so + 40026000-40059000 r-xp 00000000 03:07 615315 /lib/libncurses.so.5.3 + 40059000-40062000 rw-p 00032000 03:07 615315 /lib/libncurses.so.5.3 + 40062000-40063000 rw-p 00000000 00:00 0 + 40063000-4018d000 r-xp 00000000 03:07 615327 /lib/libc-2.3.1.so + 4018d000-40192000 rw-p 0012a000 03:07 615327 /lib/libc-2.3.1.so + 40192000-40196000 rw-p 00000000 00:00 0 + 40196000-40396000 r--p 00000000 03:07 745906 /usr/lib/locale/locale-archive + 40396000-403c9000 r--p 00507000 03:07 745906 /usr/lib/locale/locale-archive + bfffc000-c0000000 rwxp ffffd000 00:00 0 + + Η πρώτη στήλη και η δεύτερη δίνουν το πεδίο εικονικών διευθύνσεων που καταλαμβάνει το segment και τα διακαιώματα του, αντίστοιχα. Η τρίτη είναι το offset + στο οποίο βρίσκεται το segment στο αρχείο από το οποίο φορτώθηκε. Οι υπόλοιπες στήλες δίνουν το device major:minor number, το ΙNode και το πλήρες path του + αρχείο αυτού. + + Παρατηρήστε πως όλα τα shared object φορτώνονται στη διεύθυνση 0x40000000 και πάνω. Επιπλέον το τελευταίο segment περιέχει το σωρό. Το γεγονός ότι από + default είναι executable (-x- flag) είναι η ρίζα του κακού για τα buffer overflow exploits. + +- **mem** : Η ίδια η μνήμη της διεργασίας. Διαβάζοντας και γράφοντας στο αρχείο αυτό, προσπελαύνουμε κατευθείαν τη μνήμη της διεργασίας. Προφανώς πρέπει να + έχουμε τα κατάλληλα δικαιώματα. + +- **mounts** : Λίστα με όλα τα mounted directories. (link στο self/mounts) + +- **stat** : Η κατάσταση της διεργασίας (αλά *ps*). + +- **statm** : Πληροφορίες για την κατάσταση της μνήμης. + +- **status** : Πληροφορίες από τα δύο παραπάνω αρχεία σε πιο ευανάγνωστη μορφή. + +Οι πιο χρήσιμες (για RCE) από τις παραπάνω πληροφορίες είναι αυτές που δίνονται από τα **fd/**, **map**, **cmdline** και **exe**. Ειδικά το τελευταίο έχει μια +ενδιαφέρουσα χρήση. Ακόμα και αν διαγράψουμε το εκτελέσιμο αρχείο μιας διεργασίας ενώ εκτελείται, μπορούμε να έχουμε πρόσβαση σε αυτό μέσω του **exe**! + + +### [5. Χρήσιμες έως πολύ χρήσιμες πληροφορίες ΙΙ]{#s5} + +### []{#dead-listing} [5.1 Dead Listing και Εργαλεία]{#ss5.1} + +#### Τι είναι το dead listing + +Dead listing είναι η παρουσίαση του κώδικα ενός εκτελέσιμου σε στατική μορφή. Κύριο πλεονέκτημα αυτού του τρόπου μελέτης του κώδικα είναι πως δίνει μια πιο +ολοκληρωμένη άποψη για τη λειτουργία του, και, ανάλογα με την ποιότητα του disassembler, ένα πλήθος πληροφοριών (function calls, strings κτλ). Το βασικό +μειονέκτημα είναι ότι δε μπορεί να μας δώσει χρήσιμα αποτελέσματα αν ο κώδικας αλλάζει κατά τη διάρκεια της εκτέλεσης (πχ self-modifying code, +συμπιεσμένα/κρυπτογραφημένα εκτελέσιμα) ή αν υπάρχουν πολλά έμμεσα jmp και calls (πχ jmp \[eax\]), διότι δεν μπορούμε να ακολουθήσουμε (έστω και νοητικά) την +πορεία της εκτέλεσης. Το καλύτερο που έχουμε να κάνουμε σε τέτοιες περιπτώσεις, είναι να φέρουμε το εκτελέσιμο σε μια μορφή που να μπορεί να διαβάσει ο +disassembler, ώστε να εκμεταλλευτούμε τις ευκολίες που μας προσφέρει. + +[]{#objdump-weakness} Δυστυχώς, οι disassembly δυνατότητες του objdump δεν είναι αρκετά ικανοποιητικές (μη ξεχνάμε βέβαια πως το objdump δε σχεδιάστηκε για +αυτό). Εκτός από ο γεγονός ότι δε φροντίζει να παρουσιάζει τα cross-references (πχ αν μια διεύθυνση μνήμης είναι στόχος μιας jump ή call εντολής), το +disassembly του είναι γραμμικό και δε γίνεται καμία προσπάθεια να ακολουθηθεί η ροή του προγράμματος. Για παράδειγμα το παρακάτω κομμάτι κώδικα ο ΗΤEditor το +κάνει disassemble σωστά\... + +> 8048080 ! +> ....... ! entrypoint: +> ....... ! jmp loc_8048083 +> 8048082 db 86h +> 8048083 ! +> ....... ! loc_8048083: ;xref j8048080 +> ....... ! cmp eax, ebx +> 8048085 ! ret + +\...ενώ το objdump δεν καταλαβαίνει ότι ο έλεγχος θα πάει στη διεύθυνση 0x8048083 και συνεχίζει το disassembly με το επόμενο byte (dummy byte), με αποτέλεσμα να +αποσυγχρονιστεί το listing από εκεί και κάτω. + +> 08048080 <_start>: +> 8048080: eb 01 jmp 8048083 <_start+0x3> +> 8048082: 86 39 xchg BYTE PTR [ecx],bh +> 8048084: d8 c3 fadd %st,st(3) + +Μπορεί τα \"κανονικά\" προγράμματα να μην έχουν κώδικα αυτής της μορφής αλλά πρόκειται για μια πολύ κοινή τεχνική για προστασία έναντι των \"χαζών\" +disassemblers. + +#### Εργαλεία + +Παρακάτω παρουσιάζονται συνοπτικά μερικοί disassemblers και το disassembly που παράγουν για το γνωστό :) πρόγραμμα. + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> #include +> +> int main(int argc, char **argv) +> { +> int num; +> +> if (argc<2) { +> printf("Usage: %s \n",argv[0]); +> exit(1); +> } +> +> num=alf(argv[1]); +> +> if (num>10) +> printf("Ok!\n"); +> else +> printf("Failed!\n"); +> +> return 1; +> } +> +> int alf(char *s) +> { +> return atoi(s); +> } +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +#### IDA + +Ένα από τα καλύτερα εργαλεία για disassemby είναι ο **IDA (Interactive DisAssembler)**. Υπάρχει μια freeware έκδοση που δουλεύει σε DOS, ενώ η εμπορική υπάρχει +και για περιβάλλον Windows. Υποστηρίζει πλήθος αρχιτεκτονικών, εκτελέσιμων και compilers, ενώ περιέχει μια script γλώσσα για διάφορες αυτοματοποιήσεις. Στο +linux μπορεί να εκτελεστεί μέσω wine. Το επίσημο site είναι , ενώ τη freeware εκδοση μπορείτε να τη βρείτε με μια αναζήτηση στο +google. + +> .text:0804838C ; ??????????????? S U B R O U T I N E ??????????????????????????????????????? +> .text:0804838C +> .text:0804838C ; Attributes: bp-based frame +> .text:0804838C +> .text:0804838C public main +> .text:0804838C main proc near ; DATA XREF: _start+17 o +> .text:0804838C +> .text:0804838C var_4 = dword ptr -4 +> .text:0804838C arg_0 = dword ptr 8 +> .text:0804838C arg_4 = dword ptr 0Ch +> .text:0804838C +> .text:0804838C push ebp +> .text:0804838D mov ebp, esp +> .text:0804838F sub esp, 8 +> .text:08048392 and esp, 0FFFFFFF0h +> .text:08048395 mov eax, 0 +> .text:0804839A sub esp, eax +> .text:0804839C cmp [ebp+arg_0], 1 +> .text:080483A0 jg short loc_80483C1 +> .text:080483A2 sub esp, 8 +> .text:080483A5 mov eax, [ebp+arg_4] +> .text:080483A8 push dword ptr [eax] +> .text:080483AA push offset aUsageSNumber ; "Usage: %s \n" +> .text:080483AF call _printf +> .text:080483B4 add esp, 10h +> .text:080483B7 sub esp, 0Ch +> .text:080483BA push 1 +> .text:080483BC call _exit +> .text:080483C1 +> .text:080483C1 loc_80483C1: ; CODE XREF: main+14 j +> .text:080483C1 sub esp, 0Ch +> .text:080483C4 mov eax, [ebp+arg_4] +> .text:080483C7 add eax, 4 +> .text:080483CA push dword ptr [eax] +> .text:080483CC call alf +> .text:080483D1 add esp, 10h +> .text:080483D4 mov [ebp+var_4], eax +> .text:080483D7 cmp [ebp+var_4], 0Ah +> .text:080483DB jle short loc_80483EF +> .text:080483DD sub esp, 0Ch +> .text:080483E0 push offset aOk ; "Ok!\n" +> .text:080483E5 call _printf +> .text:080483EA add esp, 10h +> .text:080483ED jmp short loc_80483FF +> .text:080483EF ; --------------------------------------------------------------------------- +> .text:080483EF +> .text:080483EF loc_80483EF: ; CODE XREF: main+4F j +> .text:080483EF sub esp, 0Ch +> .text:080483F2 push offset aFailed ; "Failed!\n" +> .text:080483F7 call _printf +> .text:080483FC add esp, 10h +> .text:080483FF +> .text:080483FF loc_80483FF: ; CODE XREF: main+61 j +> .text:080483FF mov eax, 1 +> .text:08048404 leave +> .text:08048405 retn +> .text:08048405 main endp +> .text:08048405 +> .text:08048406 +> .text:08048406 ; ??????????????? S U B R O U T I N E ??????????????????????????????????????? +> .text:08048406 +> .text:08048406 ; Attributes: bp-based frame +> .text:08048406 +> .text:08048406 public alf +> .text:08048406 alf proc near ; CODE XREF: main+40 p +> .text:08048406 +> .text:08048406 arg_0 = dword ptr 8 +> .text:08048406 +> .text:08048406 push ebp +> .text:08048407 mov ebp, esp +> .text:08048409 sub esp, 8 +> .text:0804840C sub esp, 0Ch +> .text:0804840F push [ebp+arg_0] +> .text:08048412 call _atoi +> .text:08048417 add esp, 10h +> .text:0804841A leave +> .text:0804841B retn +> .text:0804841B alf endp +> .text:0804841B +> .text:0804841C + +#### Bastard Disassembly Enviroment + +Στον κόσμο του open source τώρα, στο sourceforge θα βρείτε projects που υπόσχονται πολλά αλλά δυστυχώς είναι σε πρώιμο στάδιο. Ένα από αυτά είναι το Bastard +Disassembly Enviroment. Πρακτικά πρόκειται για μια scripting γλώσσα και το αντίστοιχο interpreter shell. Site: . + +> main: +> 0804838C 55 push ebp +> 0804838D 89 E5 mov ebp , esp +> 0804838F 83 EC 08 sub esp , 0x8 +> 08048392 83 E4 F0 and esp , 0xF0 +> 08048395 B8 00 00 00 00 mov eax , 0x0 +> 0804839A 29 C4 sub esp , eax +> 0804839C 83 7D 08 01 cmp [ebp+0x08] , 0x1 +> 080483A0 7F 1F jg loc_080483C1 ;(0x80483C1 was +31) ; xrefs: >080483C1[x] +> 080483A2 83 EC 08 sub esp , 0x8 +> 080483A5 8B 45 0C mov eax , [ebp+0x0C] +> 080483A8 FF 30 push [eax] +> 080483AA 68 64 84 04 08 push 0x8048464 +> 080483AF E8 F8 FE FF FF call printf ;(0x80482AC was -264) ; xrefs: >080482AC[x] +> 080483B4 83 C4 10 add esp , 0x10 +> 080483B7 83 EC 0C sub esp , 0xC +> 080483BA 6A 01 push 0x1 +> 080483BC E8 FB FE FF FF call exit ;(0x80482BC was -261) ; xrefs: >080482BC[x] +> loc_080483C1: +> 080483C1 83 EC 0C sub esp , 0xC ; xrefs: <080483A0[x] +> 080483C4 8B 45 0C mov eax , [ebp+0x0C] +> 080483C7 83 C0 04 add eax , 0x4 +> 080483CA FF 30 push [eax] +> 080483CC E8 35 00 00 00 call alf ;(0x8048406 was +53) ; xrefs: >08048406[x] +> 080483D1 83 C4 10 add esp , 0x10 +> 080483D4 89 45 FC mov [ebp-0x04] , eax +> 080483D7 83 7D FC 0A cmp [ebp-0x04] , 0xA +> 080483DB 7E 12 jle loc_080483EF ;(0x80483EF was +18) ; xrefs: >080483EF[x] +> 080483DD 83 EC 0C sub esp , 0xC +> 080483E0 68 78 84 04 08 push 0x8048478 +> 080483E5 E8 C2 FE FF FF call printf ;(0x80482AC was -318) ; xrefs: >080482AC[x] +> 080483EA 83 C4 10 add esp , 0x10 +> 080483ED EB 10 jmp loc_080483FF ;(0x80483FF was +16) ; xrefs: >080483FF[x] +> loc_080483EF: +> 080483EF 83 EC 0C sub esp , 0xC ; xrefs: <080483DB[x] +> 080483F2 68 7D 84 04 08 push 0x804847D +> 080483F7 E8 B0 FE FF FF call printf ;(0x80482AC was -336) ; xrefs: >080482AC[x] +> 080483FC 83 C4 10 add esp , 0x10 +> loc_080483FF: +> 080483FF B8 01 00 00 00 mov eax , 0x1 ; xrefs: <080483ED[x] +> 08048404 C9 leave +> 08048405 C3 ret +> alf: +> 08048406 55 push ebp ; xrefs: <080483CC[x] +> 08048407 89 E5 mov ebp , esp +> 08048409 83 EC 08 sub esp , 0x8 +> 0804840C 83 EC 0C sub esp , 0xC +> 0804840F FF 75 08 push [ebp+0x08] +> 08048412 E8 B5 FE FF FF call atoi ;(0x80482CC was -331) ; xrefs: >080482CC[x] +> 08048417 83 C4 10 add esp , 0x10 +> 0804841A C9 leave +> 0804841B C3 ret + +#### HT Editor + +Πρόκειται για ένα ιδιαίτερα χρήσιμο και καλοφτιαγμένο εργαλείο. Ο HT Editor είναι ένας editor με έμφαση στα εκτελέσιμα αρχεία. Τα file formats που υποστηρίζει +είναι τα COFF, ELF, LE, NE, PE, MZ, και Java Class. Εκτός από τη δυνατότητα για εύκολη επεξεργασία των headers, sections, symbols κτλ των αρχείων, προσφέρει +έναν αρκετά καλό disassembler. Το μόνο πρόβλημα που υπάρχει (στην έκδοση 0.7.3 τουλάχιστον), είναι ότι ο C++ demangler δεν υποστηρίζει ακόμα το gnu-V3 mangling, +οπότε αν κάποιο πρόγραμμα έχει γίνει compile με g++ 3 τα σύμβολα θα είναι ακαταλαβίστικα. Site: . + +> ....... ! ;******************************************************** +> ....... ! ; function main (global) +> ....... ! ;******************************************************** +> ....... ! main: ;xref o80482f3 +> ....... ! push ebp +> 804838d ! mov ebp, esp +> 804838f ! sub esp, 8 +> 8048392 ! and esp, 0fffffff0h +> 8048395 ! mov eax, 0 +> 804839a ! sub esp, eax +> 804839c ! cmp dword ptr [ebp+8], 1 +> 80483a0 ! jg loc_80483c1 +> 80483a2 ! sub esp, 8 +> 80483a5 ! mov eax, [ebp+0ch] +> 80483a8 ! push dword ptr [eax] +> 80483aa ! push strz_Usage:__s__number___8048464 +> 80483af ! call printf@@GLIBC_2.0 +> 80483b4 ! add esp, 10h +> 80483b7 ! sub esp, 0ch +> 80483ba ! push 1 +> 80483bc ! call exit@@GLIBC_2.0 +> 80483c1 ! +> ....... ! loc_80483c1: ;xref j80483a0 +> ....... ! sub esp, 0ch +> 80483c4 ! mov eax, [ebp+0ch] +> 80483c7 ! add eax, 4 +> 80483ca ! push dword ptr [eax] +> 80483cc ! call alf +> 80483d1 ! add esp, 10h +> 80483d4 ! mov [ebp-4], eax +> 80483d4 ! mov [ebp-4], eax +> 80483d7 ! cmp dword ptr [ebp-4], 0ah +> 80483db ! jng loc_80483ef +> 80483dd ! sub esp, 0ch +> 80483e0 ! push data_8048478 +> 80483e5 ! call printf@@GLIBC_2.0 +> 80483ea ! add esp, 10h +> 80483ed ! jmp loc_80483ff +> 80483ef ! +> ....... ! loc_80483ef: ;xref j80483db +> ....... ! sub esp, 0ch +> 80483f2 ! push strz_Failed___804847d +> 80483f7 ! call printf@@GLIBC_2.0 +> 80483fc ! add esp, 10h +> 80483ff ! +> ....... ! loc_80483ff: ;xref j80483ed +> ....... ! mov eax, 1 +> 8048404 ! leave +> 8048405 ! ret +> 8048406 ! +> ....... ! ;******************************************************** +> ....... ! ; function alf (global) +> ....... ! ;******************************************************** +> ....... ! alf: ;xref c80483cc +> ....... ! push ebp +> 8048407 ! mov ebp, esp +> 8048409 ! sub esp, 8 +> 804840c ! sub esp, 0ch +> 804840f ! push dword ptr [ebp+8] +> 8048412 ! call atoi@@GLIBC_2.0 +> 8048417 ! add esp, 10h +> 804841a ! leave +> 804841b ! ret + +#### LDasm + +Το ldasm είναι ένα πρόγραμμα που χρησιμοποιεί και επεκτείνει την έξοδο του objdump. Χρησιμοποιεί perl/Tk για να δώσει ένα οπτικό αποτέλεσμα παρόμοιο με το +W32Dasm που υπάρχει για Windows. Δυστυχώς, ο δημιουργός του το έχει παρατήσει και έτσι έχει ξεμείνει στην έκδοση 0.04.53 (!). Πάντως, έχει τις στοιχειώδεις +δυνατότητες που χρειαζόμαστε, αν και αφού χρησιμοποιεί το objdump, έχει και τα ίδια [αδύνατα σημεία](#objdump-weakness). Site: +. + +> Exported fn(): main +> :0804838c 55 push ebp +> :0804838d 89e5 mov ebp, esp +> :0804838f 83ec08 sub esp, 8 +> :08048392 83e4f0 and esp, -16 +> :08048395 b800000000 mov eax, 0 +> :0804839a 29c4 sub esp, eax +> :0804839c 837d0801 cmpl ptr [ebp+8], 1 +> :080483a0 7f1f jg 080483c1 +> :080483a2 83ec08 sub esp, 8 +> :080483a5 8b450c mov eax, ptr [ebp] +> :080483a8 ff30 pushl (eax) +> +> * Possible StringData Ref from Code Obj ->"Usage: %s " +> | +> :080483aa 6864840408 push 8048464 +> +> * Reference To: GLIBC_2.0::printf +> | +> :080483af e8f8feffff call 080482ac +> :080483b4 83c410 add esp, 10 +> :080483b7 83ec0c sub esp, c +> :080483ba 6a01 push 1 +> +> * Reference To: GLIBC_2.0::exit -. +> | +> :080483bc e8fbfeffff call 080482bc +> +> Referenced by a (U)nconditional or (C)onditional Jump at Address: +> | :080483a0 +> | +> :080483c1 83ec0c sub esp, c +> :080483c4 8b450c mov eax, ptr [ebp] +> :080483c7 83c004 add eax, 4 +> :080483ca ff30 pushl (eax) +> +> * Reference To: alf -------------. +> | +> :080483cc e835000000 call 08048406 +> :080483d1 83c410 add esp, 10 +> :080483d4 8945fc mov ptr [ebp-4], eax +> :080483d7 837dfc0a cmpl ptr [ebp-4], a +> :080483db 7e12 jle 080483ef +> :080483dd 83ec0c sub esp, c +> +> * Possible StringData Ref from Code Obj ->"Ok!" +> | +> :080483e0 6878840408 push 8048478 +> +> * Reference To: GLIBC_2.0::printf +> | +> :080483e5 e8c2feffff call 080482ac +> :080483ea 83c410 add esp, 10 +> :080483ed eb10 jmp 080483ff +> +> Referenced by a (U)nconditional or (C)onditional Jump at Address: +> | :080483db +> | +> :080483ef 83ec0c sub esp, c +> +> * Possible StringData Ref from Code Obj ->"Failed!" +> | +> :080483f2 687d840408 push 804847d +> +> * Reference To: GLIBC_2.0::printf +> | +> :080483f7 e8b0feffff call 080482ac +> :080483fc 83c410 add esp, 10 +> +> Referenced by a (U)nconditional or (C)onditional Jump at Address: +> | :080483ed +> | +> :080483ff b801000000 mov eax, 1 +> :08048404 c9 leave +> :08048405 c3 ret +> +> Referenced by a Call at Address: +> | :080483cc +> | +> Exported fn(): alf +> :08048406 55 push ebp +> :08048407 89e5 mov ebp, esp +> :08048409 83ec08 sub esp, 8 +> :0804840c 83ec0c sub esp, c +> :0804840f ff7508 pushl ptr [ebp+8] +> +> * Reference To: GLIBC_2.0::atoi -. +> | +> :08048412 e8b5feffff call 080482cc +> :08048417 83c410 add esp, 10 +> :0804841a c9 leave +> :0804841b c3 ret + +### []{#packing}[5.2 Packed Executables - Συμπιεσμένα Εκτελέσιμα]{#ss5.2} + +#### Τι είναι; + +Τα εκτελέσιμα αρχεία, όπως και όλα τα αρχεία, περιέχουν μέσα τους επαναλήψεις που καθιστούν δυνατή τη συμπίεση τους. Η συμπίεση στα εκτελέσιμα, εφόσον η +αποσυμπίεση μπορεί να εκτελεστεί αρκετά γρήγορα ώστε να μη γίνεται αισθητή, είναι σίγουρα επιθυμητή. Τα αρχεία καταλαμβάνουν λιγότερο χώρο και επίσης είναι πιο +δύσκολο να ερευνηθούν και να αλλαχτούν (βέβαια, για όσους κάνουμε RCE αυτό είναι μεγάλο πρόβλημα). Μάλιστα, πολλά προγράμματα συμπίεσης εκτελέσιμων εφαρμόζουν +και άλλες τεχνικές, όπως κρυπτογράφηση και CRC ελέγχους. Είναι σαφές πως δε βολεύει απλώς να συμπιεστεί το αρχείο με κάποια παραδοσιακή μέθοδο (πχ με το gzip). +Αυτό συμβαίνει, διότι εκτός από το ότι το εκτελέσιμο δεν είναι πια εκτελέσιμο (η κατάσταση διορθώνεται με χρήση scripts για αυτόματη αποσυμπίεση, το utility +gzexe λειτουργεί έτσι), χάνεται η προστασία από το RCE, αφού τελικά το εκτελέσιμο θα βρεθεί στην αρχική του μορφή πριν εκτελεστεί. Για αυτό, έχουν αναπτυχθεί +διάφορες άλλες τεχνικές για συμπίεση προγραμμάτων. + +#### Βασικές Τεχνικές packing + +Καταρχάς θα δούμε την απλή packing τεχνική που αναφέραμε στην εισαγωγή . Η βασική της λειτουργία φαίνεται στο παρακάτω σχήμα: + +![](/34/img/unpacking1.png) + +Ο packer συμπιέζει **όλο το εκτελέσιμο** και δημιουργεί ένα καινούργιο που περιλαμβάνει τα συμπιεσμένα δεδομένα και τον κώδικα αποσυμπίεσης. Ο κώδικα +αποσυμπιέζει τα συμπιεσμένα δεδομένα (αρχικό εκτελέσιμο), τα σώζει σε ένα προσωρινό αρχείο, και μετά το εκτελεί συνήθως με exec(). Η αδυναμία του βρίσκεται στο +γεγονός πως εμφανίζεται το αυθεντικό εκτελέσιμο στο δίσκο, και επομένως δεν παρέχει ιδιαίτερη προστασία. Το θετικό στοιχείο του είναι η απλότητα. + +Μια πιo εξελιγμένη τεχνική : + +![](/34/img/unpacking2.png) + +Εδώ τα πράγματα είναι πιο ενδιαφέροντα. Δε συμπιέζεται όλο το εκτελέσιμο αλλά μόνο τα segments του. Το καινούργιο εκτελέσιμο περιέχει τα συμπιεσμένα δεδομένα +και τον κώδικα για το unpacking (κατά προτίμηση μετά τα δεδομένα). + +![](/34/img/unpacking3.png) + +Κατά την εκτέλεση φορτώνονται τα συμπιεσμένα segments στη μνήμη, με τέτοιο τρόπο, ώστε όταν αποσυμπιεστούν να έχουν τις αρχικές διευθύνσεις τους. Επίσης, ο +unpacker πρέπει να κάνει και κάτι άλλο που δεν είναι φανερό με την πρώτη ματιά. Αν το αυθεντικό εκτελέσιμο χρησιμοποιούσε shared objects (βιβλιοθήκες), τότε +μέσα στο αρχείο υπήρχαν οι πληροφορίες, ώστε ο dynamic linker να τα φορτώσει. Όμως το συμπιεσμένο εκτελέσιμο έχει διαφορετικές πληροφορίες και έτσι τα shared +objects δε φορτώνονται. Θα πρέπει ο unpacker να επωμιστεί αυτό το βάρος και επιπλέον να διορθώσει τις αναφορές στα εξωτερικά σύμβολα. Αυτό γίνεται με χρήση των +συναρτήσεων dlopen() και dlsym() που χρησιμοποιούνται για να φορτώνουν shared objects στο run-time (δείτε manpages). Ο unpacker, αφού ολοκληρώσει όλες τις +εργασίες του, θα μεταφέρει τον έλεγχο στο OEP (original entry point) και έτσι θα αρχίσει το κυρίως πρόγραμμα. + +#### Βασικές Τεχνικές Unpacking + +Στην πιο απλή περίπτωση, όπου ο unpacker αποσυμπιέζει το αρχικό αρχείο στο δίσκο και το εκτελεί από εκεί, τα πράγματα είναι εύκολα. Αρκεί να βρούμε ποιο +προσωρινό αρχείο χρησιμοποιείται και τελειώσαμε. Το /proc filesystem είναι ιδιαίτερα χρήσιμο, όπως θα φανεί και στο hands-on παράδειγμα που ακολουθεί. + +Αν ο packer είναι εξελιγμένος, τότε θα πρέπει να φερθούμε και εμείς πιο έξυπνα. Η μέθοδος αυτή είναι σχετικά επίπονη αλλά μπορεί να εφαρμοστεί ακόμα και στις +πιο δύσκολες περιπτώσεις. Σκοπός είναι να κάνουμε dump από τη μνήμη την εικόνα του εκτελέσιμου σε ένα αρχείο. Αυτό, βέβαια, δε θα είναι το πλήρες, αυθεντικό +αρχείο αλλά συχνά είναι ότι καλύτερο μπορούμε να κάνουμε. Εξάλλου, μετά μπορούμε να κάνουμε διάφορες επεμβάσεις για να το \"βελτιώσουμε\". + +Η διαδικασία αποτελείται από τα παρακάτω βήματα: + +1. **Ανάκτηση του OEP (original entry point)** : Εδώ προσπαθούμε να εντοπίσουμε τη διεύθυνση της πρώτης εντολής του αυθεντικού προγράμματος στην εικόνα του + εκτελέσιμου μετά την αποσυμπίεση. Αυτό το βήμα είναι που απαιτεί την περισσότερη εμπειρία. Σημάδια πως τελειώνει ο κώδικας του unpacker και περνάμε στο + αρχικό εκτελέσιμο είναι: + - Unconditional jump ( άμεσο πχ jmp 0x8048954 ή έμμεσο πχ jmp eax ) σε κάποια \"μακρινή\" διεύθυνση. + - Αλλαγή του ύφους του προγράμματος. Οι unpackers είναι συνήθως γραμμένοι σε assembly με το χέρι και το στυλ τους διαφέρει από τον κώδικα που έχει + παραχθεί από compilers. + - Χρήση των popa/popad (pop all registers). Επειδή η unpackers αλλοιώνουν το context της διεργασίας (πχ τιμές των registers) τους σώζουν όλους πριν + αρχίσουν (με pusha/pushad) και τους επαναφέρουν πριν περάσουν τον έλεγχο στο αρχικό πρόγραμμα. +2. **Dump της εικόνας (image) του εκτελέσιμου σε ένα αρχείο** : Κάνουμε dump την εικόνα του εκτελέσιμου, όπως είναι αυτή, ακριβώς πριν περάσει ο έλεγχος στο + αυθεντικό εκτελέσιμο. Για αυτό χρειαζόμαστε το OEP που μας δινει το προηγούμενο βήμα. Αφου, λοιπόν, το έχουμε, αναγκάζουμε τη διεργασία να εκτελεστεί μέχρι + το OEP (έτσι είμαστε σίγουροι πως όλα είναι unpacked όπως πρέπει) και τότε κάνουμε dump την εικόνα του εκτελέσιμου. Μπορούμε να χρησιμοποιήσουμε την εντολή + **dump** του gdb. Η σύνταξη της είναι **dump memory \ \ \**. Για να αποφασίσουμε ποιες διευθύνσεις θα κάνουμε dump μπορούμε να + συμβουλευτούμε το map από το /proc/\/. Για τα εκτελέσιμα στο linux, αρκούν συνήθως τα δύο πρώτα segments που είναι το code και data segment αντίστοιχα + . +3. **Διόρθωση του ELF Header** : Διορθώνουμε τον ELF Header του dumped αρχείου, ώστε να μπορεί να εξεταστεί και να εκτελεστεί. Συγκεκριμένα θέτουμε το entry + point του εκτελέσιμου στο OEP, διορθώνουμε τα στοιχεία των segments και αναδημιουργούμε το DYNAMIC segment. Το τελευταίο είναι αρκετά επίπονο και όχι + απαραίτητο αν απλώς θέλουμε να εξετάσουμε τον κώδικα (dissasembly). Αν δε γίνει αυτή η διόρθωση, τότε οι διευθύνσεις των συναρτήσεων των shared objects θα + έχουν παντα τις τιμές που είχαν την στιγμή που κάναμε dump, διότι ο dynamic linker δε θα ενεργοποιηθεί. Αν χρησιμοποιούμε το dumped εκτελέσιμο μόνο στο δικό + μας σύστημα και με τι ίδιες **ακριβώς** βιβλιοθήκες, ίσως να τη γλιτώσουμε. + + +### [6. Hands-on Παράδειγμα - Υπό πίεση]{#s6} + +### [6.1 Πράξη 1η]{#ss6.1} + +Αυτή τη φορά θα ασχοληθούμε με το demo του εκπληκτικού προγράμματος για πράξεις μη αρνητικών ακεραίων: [rce2-files/hands-on.gz](rce2-files/hands-on.gz). Το demo +θα σταματήσει να λειτουργεί μετά από κάποιο χρονικό διάστημα. Αυτό το είδος της προστασίας ονομάζεται Cinderella (Σταχτοπούτα) protection, διότι όπως και στο +γνωστό παραμύθι, όταν παρέλθει κάποιο χρονικό διάστημα η άμαξα/πρόγραμμα θα γίνει κολοκύθα :) Για να δούμε\... + +> bash$ ./hands-on +> Ready> 1+3 +> Result: 4 +> Ready> 4*5 +> Result: 20 +> Ready> 25/5 +> Result: 5 +> Ready> + +Αν πάμε την ημερομηνία του συστήματος μερικές μέρες μπροστά\... + +> ./hands-on +> Not ready> 3+4 +> Result: 11 +> Not ready> 6*6 +> Result: 108 +> Not ready> 2/3 +> Result: -1 +> Not ready> + +Χμμ, το πρόγραμμα όντως σταμάτησε να λειτουργεί (σωστά τουλάχιστον). Αν επιστρέψουμε στην αρχική ημερομηνία και εκτελέσουμε το πρόγραμμα θα δούμε ότι λειτουργεί +κανονικά. Όποιος έφτιαξε την προστασία μάλλον δεν το έκανε πολύ καλά :) Πάντως είναι εκνευριστικό να πρέπει να γυρνάμε το ρολόι πίσω όποτε θέλουμε να +εκτελέσουμε αυτή την *εκπληκτική* εφαρμογή. Θα πρέπει να κάνουμε κάτι καλύτερο! + +Ας δούμε τι μπορούμε να μάθουμε για το πρόγραμμα\...\ +[listing1](rce2-files/listing1.txt)\ +Ουακ! Τι είναι όλα αυτά; + +Τα ακατανόητα ονόματα είναι σύμβολα της C++ σε μπλεγμένη (mangled) μορφή. Υποτίθεται πως το ltrace έχει μια επιλογή (-C) για να κάνει demangling αλλά σε εμένα +δε βελτίωσε την κατάσταση. Ευτυχώς υπάρχει ένα πρόγραμμα, το **c++filt**, το οποίο αποκωδικοποιεί τα ονόματα των c++ συμβόλων.\ +[listing2](rce2-files/listing2.txt)\ +Αν δεν είστε μυημένοι στους μυστικούς συμβολισμούς της STL (Standard Template Library) της C++, τα παραπάνω ίσως να σας φαίνονται τόσο ακατανόητα όσο και τα +mangled σύμβολα. Η αλήθεια είναι, όμως, ότι περιέχουν σημαντικές πληροφορίες. Για παράδειγμα, οι περισσότερες γραμμές που αρχίζουν με std::basic\_ostream είναι +κλήσεις στη συνάρτηση operator\<\<() η οποία είναι υπεύθυνη για την υπερφόρτωση του τελεστή \<\<. Αν έχετε ασχοληθεί στοιχειωδώς με C++ σίγουρα θα έχετε δει το +cout\<\<\"Hello World\". Στην πραγματικότητα αυτό είναι μια κλήση operator\<\<(cout, \"Hello World\") η οποία γράφει δεδομένα στο stream της κονσόλας. Oι +κλήσεις στο παραπάνω listing δεν είναι τίποτα άλλο από τέτοιου είδους κλήσεις. Παρομοίως, οι γραμμές που αρχίζουν με std::basic\_istream είναι κλήσεις στη +συνάρτηση operator\>\>() η οποία διαβάζει δεδομένα από κάποιο stream (πχ πληκτρολόγιο). + +Ξεφεύγοντας λίγο από τη C++, άξιες προσοχής είναι οι κλήσεις στην **time(NULL)** που επιστρέφει την τρέχουσα ώρα και επίσης στη stat (\_\_xstat) που επιστρέφει +πληροφορίες για κάποιο αρχείο (το \"hands-on\" στην περίπτωση αυτή). Παρατηρήστε, επίσης, ότι στο πρόγραμμα οι κλήσεις αρχίζουν να επαναλαμβάνονται: η +\[08048be0\] time(NULL) καλείται στην αρχή και ξανακαλείται από το ίδιο σημείο αργότερα. Επίσης, αμέσως μετά και τις δύο αυτές time() (0x08048be0), υπάρχει η +ίδια ακολουθία ostream\..., istream\..., string\... . Υπαρχεί μεγάλη πιθανότητα αυτό να είναι το σημείο στο οποίο εμφανίζεται το prompt (ostream), εισάγουμε την +αριθμητική παράσταση (istream) και αυτή αποθηκεύεται (string). Αλλά αρκετά με τις υποθέσεις. Ας δούμε τι άλλο μπρούμε να μάθουμε για το εκτελέσιμο: + +> bash$ objdump -x ./hands-on +> /hands-on: file format elf32-i386 +> ./hands-on +> architecture: i386, flags 0x00000102: +> EXEC_P, D_PAGED +> start address 0x08048080 +> +> Program Header: +> LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 +> filesz 0x000005b8 memsz 0x000005b8 flags r-x +> LOAD off 0x000005b8 vaddr 0x080495b8 paddr 0x080495b8 align 2**12 +> filesz 0x0000002c memsz 0x0000002c flags rw- +> +> Sections: +> Idx Name Size VMA LMA File off Algn +> SYMBOL TABLE: +> no symbols + +\...όχι και πολλά πράγματα. Μάλιστα, κάτι ύποπτο συμβαίνει! Ενώ γνωρίζουμε ότι το εκτελέσιμο καλεί δυναμικά συναρτήσεις βιβλιοθηκών (από το ltrace) δεν υπάρχει +DYNAMIC segment. Εκτός των άλλων, δεν υπάρχουν καθόλου sections, γεγονός παράξενο (βέβαια δεν είναι απαραίτητο να υπάρχουν στο εκτελέσιμο αλλά είναι +συνηθισμένο). + +Συνεχίζοντας να μαζεύουμε πληροφορίες: + +> bash$ file hands-on +> hands-on: ELF 32-bit LSB executable, Intel 80386, version 1, statically linkedfile: corrupted section header size. +> bash$ strings hands-on +> Linux +> SlQf +> UPXδ +> δψRQθώ +> $Info: This file is packed with the UPX executable packer http://upx.sf.net $ +> $Id: UPX 1.24 Copyright (C) 1996-2002 the UPX Team. All Rights Reserved. $ +> UWVSQRό +> ... +> ... + +Τώρα όλα βγάζουν νόημα\... Το εκτελέσιμο έχει συμπιεστεί με το πρόγραμμα UPX! Στην περίπτωση που θέλουμε απλώς να εργαστούμε με κάποιον debugger αυτό δε μας +ενοχλεί ιδιαίτερα, αρκεί κάθε φορά να προσπερνάμε τον κώδικα της αποσυμπίεσης και να ασχολούμαστε με το πραγματικό εκτελέσιμο. Το πρόβλημα είναι στη περίπτωση +του dead-listing. Θα μπορούσαμε να το αγνοήσουμε, όμως, όπως έχουμε αναφέρει, οι ευκολίες που προσφέρει είναι ανεκτίμητες. Οπότε, στο επόμενο κομμάτι θα κάνουμε +ότι μπορούμε για να φέρουμε το εκτελέσιμο όσο πιο κοντά γίνεται στην αυθεντική του μορφή. + +### [6.2 Επιστροφή σε Κανονικές Συνθήκες πίεσης και θερμοκρασίας.]{#ss6.2} + +(ΣΗΜΕΙΩΣΗ: Αν δεν έχετε διαβάσει τις πληροφορίες για το packing, [τώρα είναι μια καλή στιγμή να το κάνετε](05_rce3-5.html#packing)) + +Πως όμως θα δούμε το αρχικό εκτελέσιμο; Αυτό μπορεί να επιτευχθεί ως εξής: + +**1. Ο εύκολος τρόπος** + +Μπορούμε να πάμε στη σελίδα του UPX , να το κατεβάσουμε και να αποσυμπιέσουμε το εκτελέσιμο. Αν και είναι απλή μέθοδος, δεν έχει +καμία γενικότητα. Για παράδειγμα, δε μπορεί να εφαρμοστεί στην περίπτωση που η συμπίεση/κρυπτογράφηση έχει γίνει με κάποιο custom αλγόριθμο ή ακόμα και με άλλη +έκδοση του ίδιου προγράμματος. + +**2. Ο καλύτερος τρόπος** + +Χρησιμοποιώντας το strace (κάτι που αμελήσαμε να κάνουμε πριν): + +> bash$ strace -ohands-on.st hands-on +> Ready> +> ^C +> bash$ cat -n hands-on.st +> 1 execve("./hands-on", ["hands-on"], [/* 48 vars */]) = 0 +> 2 getpid() = 690 +> 3 open("/proc/690/exe", O_RDONLY) = 3 +> 4 lseek(3, 1508, SEEK_SET) = 1508 +> 5 read(3, "0e\300\177\314\30\0\0\314\30\0\0", 12) = 12 +> 6 gettimeofday({1062315999, 908816}, NULL) = 0 +> 7 unlink("/tmp/upxCOXBQXPAAVS") = -1 ENOENT (No such file or directory) +> 8 open("/tmp/upxCOXBQXPAAVS", O_WRONLY|O_CREAT|O_EXCL, 0700) = 4 +> 9 ftruncate(4, 6348) = 0 +> 10 old_mmap(NULL, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40000000 +> 11 read(3, "\314\30\0\0b\f\0\0", 8) = 8 +> 12 read(3, "\177?d\371\177ELF\1\0\2\0\3\0\r\30\211\4\377o\263\335\010"..., 3170) = 3170 +> 13 write(4, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\2\0\3\0\1\0\0\0\30\211"..., 6348) = 6348 +> 14 read(3, "\0\0\0\0UPX!", 8) = 8 +> 15 munmap(0x40000000, 12288) = 0 +> 16 close(4) = 0 +> 17 close(3) = 0 +> 18 open("/tmp/upxCOXBQXPAAVS", O_RDONLY) = 3 +> 19 access("/proc/690/fd/3", R_OK|X_OK) = 0 +> 20 unlink("/tmp/upxCOXBQXPAAVS") = 0 +> 21 fcntl(3, F_SETFD, FD_CLOEXEC) = 0 +> 22 execve("/proc/690/fd/3", ["hands-on"], [/* 48 vars */]) = 0 +> ... + +Λοιπόν, για να δούμε τι συμβαίνει. + +**1**: Εκτελείται το hands-on. + +**2-5**: Το πρόγραμμα μαθαίνει το pid του και ανοίγει το ίδιο το αρχείο του μέσω του /proc filesystem (θα μπορούσε να έχει χρησιμοποιήσει το /proc/self άλλα +ίσως δεν το έκανε για λόγους συμβατότητας). Ύστερα διαβάζει 12 bytes από το offset 1508 στο αρχείο. + +**6-9**: Διαβάζεται η ώρα του συστήματος, γίνεται μια προσπάθεια να διαγραφεί το αρχείο \"/tmp/upxCOXBQXPAAVS\" το οποίο δεν υπάρχει και δημιουργείται εκ νέου +με δικαιώματα 0700 = -rwx\-\-\-\-\--. Τέλος, το μέγεθος του αρχείου καθορίζεται στα 6348 bytes. Η δημιουργία του αρχείου με δικαίωμα εκτέλεσης ελπίζω να σας +προβλημάτισε. Παρεπιπτόντως, παρατηρήστε οτι οι δύο τελευταίες τετράδες bytes από τα 12 bytes που διαβάστηκαν στη γραμμή 5 αντιστοιχούν στο 6348 αν τις +θεωρήσουμε ακέραιους των 4 bytes (διαβασμένα LSB first). + +**10-15**: Αρχικά γίνονται map 12288 bytes. Μετά διαβάζονται 8 bytes από αρχικό αρχείο (hands-on) (συνεχίζοντας από εκεί που είχε μείνει μετά τα 12 bytes). Αν +ερμηνευτούν ως ακέραιοι των 4-bytes είναι οι τιμές 6348 και 3170. Ύστερα διαβάζονται από το αρχικό αρχείο 3170 bytes (τι σύμπτωση!) και γράφονται στο καινούργιο +(\"/tmp/upxCOXBQXPAAVS\") 6348 bytes. Παρατηρήστε πως η αρχή των δεδομένων που γράφονται είναι ένας ELF header. Τέλος, διαβάζονται άλλα 8 bytes (μοιάζουν με end +of data signature) και γίνονται unmap αυτά που είχαν γίνει map πιο πριν. + +**16-22**: Κλείνουν τα δύο αρχεία και ανοίγει πάλι το \"/tmp/upxCOXBQXPAAVS\" με δικαιώματα μόνο ανάγνωσης αυτή τη φορά. Μετά ελέγχεται αν η τρέχουσα διεργασία +έχει δικαιώματα ανάγνωσης (R\_OK) και εκτέλεσης (X\_OK) για το αρχείο και αμέσως μετά αυτό διαγράφεται. Η διαγραφή αυτή όμως είναι τυπική διότι η τρέχουσα +διεργασία έχει ήδη ένα file handle (3), οπότε αν και το αρχείο δεν υπάρχει πια ως μέρος του filesystem τα δεδομένα του δεν έχουν χαθεί. Με τη fcntl() που +ακολουθεί, καθορίζεται ότι σε περίπτωση που κληθεί η exec() για την αντικατάσταση της διεργασίας με κάποια καινούργια, η καινούργια *δε* θα λάβει τον file +descriptor 3. Αυτό ονομάζεται close-on-exec. Τέλος, εκτελείται το αρχείο. + +Ελπίζω ύστερα από τα παραπάνω, η γενική λειτουργία του UPX να έχει γίνει φανερή. Με απλά λόγια, όταν ένα πρόγραμμα συμπιεσμένο με UPX εκτελείται, το αυθεντικό +αρχείο αποσυμπιέζεται σε ένα προσωρινό αρχείο στον κατάλογο \"/tmp\" και ο έλεγχος περνάει σε αυτό. Το αποσυμπιεσμένο αρχείο \"διαγράφεται\" αλλά τα δεδομένα +του υφίστανται μέχρι να τελειώσει η εκτέλεση. + +Τώρα τίθεται το ερώτημα: πως θα έχουμε πρόσβαση στο αποσυμπιεσμένο εκτελέσιμο; Και από το πουθενά ακούγεται ένας υπερκοσμικός ψίθυρος: **/proc/\/exe**! + +Πράγματι : + +> bash$ ./hands-on & +> [1] 804 +> Ready> bash$ cat /proc/804/exe > ./hands-on-unpacked +> +> [1]+ Stopped ./hands-on +> bash$ %1 +> ./hands-on +> ^C +> bash$ objdump -x ./hands-on-unpacked +> +> ./hands-on-unpacked: file format elf32-i386 +> ./hands-on-unpacked +> architecture: i386, flags 0x00000112: +> EXEC_P, HAS_SYMS, D_PAGED +> start address 0x08048918 +> +> Program Header: +> PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2 +> filesz 0x000000e0 memsz 0x000000e0 flags r-x +> INTERP off 0x00000114 vaddr 0x08048114 paddr 0x08048114 align 2**0 +> filesz 0x00000013 memsz 0x00000013 flags r-- +> LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 +> filesz 0x00001050 memsz 0x00001050 flags r-x +> LOAD off 0x00001050 vaddr 0x0804a050 paddr 0x0804a050 align 2**12 +> filesz 0x000002f4 memsz 0x00000430 flags rw- +> DYNAMIC off 0x000011f8 vaddr 0x0804a1f8 paddr 0x0804a1f8 align 2**2 +> filesz 0x000000e0 memsz 0x000000e0 flags rw- +> NOTE off 0x00000128 vaddr 0x08048128 paddr 0x08048128 align 2**2 +> filesz 0x00000020 memsz 0x00000020 flags r-- +> EH_FRAME off 0x00001014 vaddr 0x08049014 paddr 0x08049014 align 2**2 +> filesz 0x0000003c memsz 0x0000003c flags r-- +> +> Dynamic Section: +> NEEDED libstdc++.so.5 +> NEEDED libm.so.6 +> NEEDED libgcc_s.so.1 +> +> ... +> bash$ ./hands-on-unpacked +> Ready> +> ^C + +Αυτό ήταν, τώρα πια έχουμε το εκτελέσιμο στην αυθεντική του μορφή! + +### [6.3 Σταματώντας τον χρόνο]{#ss6.3} + +Αφού αποσυμπιέσαμε ο εκτελέσιμο, ήρθε η ώρα να δούμε πως μπορούμε να απενεργοποιήσουμε την προστασία. Αυτή τη φορά αντί για τον GDB θα χρησιμοποιήσουμε την +dead-listing προσέγγιση με τον HTEditor. Φορτώνοντας το πρόγραμμα στο ht εμφανίζεται μπροστά μας ένα γραφικό περιβάλλον σε ncurses. Με το F6/Space εμφανίζεται +το παράθυρο επιλογής mode, και εμείς επιλέγουμε το mode elf/image. Τώρα πια βλέπουμε το listing αρχίζοντας από το entry point. Με τα βελάκια μπορούμε να +κινηθούμε στις διάφορες διευθύνσεις/σύμβολα και με το πλήκτρο enter το listing μετακινείται στο σημείο όπου αναφέρεται η τρέχουσα επιλογή. Αρχικά έχουμε: + +> 8048918 ! +> ....... ! ;****************************************************************** +> ....... ! ; end of section <.plt> +> ....... ! ;****************************************************************** +> ....... ! +> ....... ! ;****************************************************************** +> ....... ! ; section 13 <.text> +> ....... ! ; virtual address 08048918 virtual size 00000678 +> ....... ! ; file offset 00000918 file size 00000678 +> ....... ! ;****************************************************************** +> ....... ! +> ....... ! ;**************************** +> ....... ! ; executable entry point +> ....... ! ;**************************** +> ....... ! entrypoint: +> ....... ! xor ebp, ebp +> 804891a ! pop esi +> 804891b ! mov ecx, esp +> 804891d ! and esp, 0fffffff0h +> 8048920 ! push eax +> 8048921 ! push esp +> 8048922 ! push edx +> 8048923 ! push offset_8048f90 +> 8048928 ! push offset_80487e0 +> 804892d ! push ecx +> 804892e ! push esi +> 804892f ! push offset_80489c8 +> 8048934 ! call __libc_start_main +> 8048939 ! hlt +> 804893a ! nop +> 804893b ! nop +> 804893c ! + +Έτσι, αν επιλέξουμε το offset\_80489c8 και πατήσουμε enter, το listing θα αρχίζει από τη διεύθυνση 0x80489c8 η οποία είναι και η διεύθυνση της main. + +Κάνοντας μερικές \"βόλτες\" στη main παρατηρούμε ότι τα πράγματα δεν είναι και πολύ κατατοπιστικά. Αυτό οφείλεται εν μέρει στα optimizations του g++ αλλά και +την ίδια τη C++ ως γλώσσα. Θα μπορούσαμε να κυκλοφορούμε σαν την άδικη κατάρα στο listing ψάχνοντας για οτιδήποτε ενδιαφέρον αλλά σίγουρα μπορούμε να σκεφτούμε +κάτι καλύτερο. Ας καταστρώσουμε, λοιπόν, κάποιο σχέδιο. Σκοπός μας είναι, καταρχάς, να εντοπίσουμε σε ποιο σημείο (ή σημεία) γίνεται ο έλεγχος για το αν έχουμε +ξεπεράσει το επιτρεπτό χρονικό όριο. Αυτό συχνά είναι και το πιο δύσκολο κομμάτι σε μια προσπάθεια RCE, το να εντοπίσουμε και να ξεχωρίσουμε μέσα στις χιλιάδες +εντολές αυτές που μας ενδιαφέρουν. + +Ένας καλός τρόπος να το πετύχουμε αυτό είναι να δούμε πως η εσωτερική αλλαγή/έλεγχος επηρεάζει εξωτερικά (προς το χρήστη) το πρόγραμμα και να ψάξουμε για το +σημείο στον κώδικα που γίνεται αυτή η εξωτερική αλλαγή. Επειδή η προηγούμενη περίοδος είναι κάπως ασαφής ας κάνουμε τα πράγματα πιο συγκεκριμένα. Αυτό που μας +ενδιαφέρει είναι να εντοπίσουμε που γίνεται ο χρονικός έλεγχος. Επειδή αυτό είναι κάπως δύσκολο, ας αναλογιστούμε πως το αποτέλεσμα του χρονικού ελέγχου (αλλαγή +της εσωτερικής κατάστασης) επηρεάζει τη συμπεριφορά του προγράμματος. Είδαμε στην αρχή πως, όταν δεν έχει λήξει η demo περίοδος, το πρόγραμμα εμφανίζει το +prompt \"Ready\>\" ενώ όταν έχει λήξει το \"Not Ready\>\". Ας ψάξουμε λοιπόν μήπως βρούμε κάποιο από αυτά τα strings. Με το F7 εμφανίζεται το παράθυρο +αναζήτησης όπου αν βάλουμε \"Ready\>\" θα βρεθούμε στο εξής + +> +> 8048fb1 db 00h ; ' ' +> 8048fb2 db 02h ; ' ' +> 8048fb3 db 00h ; ' ' +> 8048fb4 +> ....... strz_Not_ready___8048fb4: ;xref o8048bf3 +> ....... db "Not ready> \0" +> 8048fc0 +> ....... strz_Result:__8048fc0: ;xref o8048c25 +> ....... db "Result: \0" +> 8048fc9 +> ....... strz_Ready___8048fc9: ;xref o8048c8f +> ....... db "Ready> \0" +> 8048fd1 db 33h ; '3' +> 8048fd2 db 42h ; 'B' +> 8048fd3 db 75h ; 'u' +> 8048fd4 db 6ch ; 'l' +> 8048fd5 db 00h ; ' ' +> 8048fd6 db 33h ; '3' +> 8048fd7 db 44h ; 'D' +> 8048fd8 db 69h ; 'i' +> 8048fd9 db 76h ; 'v' +> 8048fda db 00h ; ' ' + +Ο disassembler έχει βρει τα strings και μάλιστα τους έχει δώσει και όνομα (πχ strz\_Ready\_\_\_8048fc9). To xref o8048c8f σημαίνει ότι αυτό το σύμβολο/διεύθυνση +έχει \"αναφερθεί\"/χρησιμοποιηθεί στη διεύθυνση 0x8048c8f ως offset σε κάποια εντολή. Ας πάμε εκεί λοιπόν : + +> +> ....... ! loc_8048c84: ;xref j8048c20 +> ....... ! lea esp, [ebp-0ch] +> 8048c87 ! pop ebx +> 8048c88 ! pop esi +> 8048c89 ! pop edi +> 8048c8a ! leave +> 8048c8b ! ret +> 8048c8c ! +> ....... ! loc_8048c8c: ;xref j8048bea +> ....... ! sub esp, 8 +> 8048c8f ! push strz_Ready___8048fc9 +> 8048c94 ! jmp loc_8048bf8 +> 8048c99 nop +> 8048c9a nop +> 8048c9b nop + +Παρατηρούμε ότι το offset του string χρησιμοποιήθηκε στην push. Σημειώστε τη διεύθυνση του τελικού jmp και ότι ο μόνος τρόπος για να φτάσουμε σε αυτό το κομμάτι +κώδικα είναι μέσω ενός jump που βρίσκεται στη διεύθυνση 0x8048bea (το xref μας έδωσε αυτές τις πληροφορίες). Δε μένει τίποτα παρά να πάμε εκεί να δούμε: + +> +> 8048bd4 ! +> ....... ! loc_8048bd4: ;xref j8048c73 +> ....... ! sub esp, 0ch +> 8048bd7 ! mov ebx, [edi] +> 8048bd9 ! push 0 +> 8048bdb ! call time +> 8048be0 ! mov edx, [ebx+8] +> 8048be3 ! add edx, [ebx] +> 8048be5 ! add esp, 10h +> 8048be8 ! cmp eax, edx +> 8048bea ! jng loc_8048c8c <------ Αυτό το jump μας ενδιαφέρει +> 8048bf0 ! sub esp, 8 +> 8048bf3 ! push strz_Not_ready___8048fb4 +> 8048bf8 ! +> ....... ! loc_8048bf8: ;xref j8048c94 +> ....... ! push _ZSt4cout +> 8048bfd ! call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc +> 8048c02 ! pop ebx +> 8048c03 ! pop esi +> 8048c04 ! push dword ptr [ebp-10h] +> 8048c07 ! push _ZSt3cin +> 8048c0c ! call _ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E +> 8048c11 ! mov [esp], edi +> 8048c14 ! call sub_8048c9c +> 8048c19 ! add esp, 10h +> 8048c1c ! test eax, eax +> 8048c1e ! mov ebx, eax +> 8048c20 ! jz loc_8048c84 +> 8048c22 ! sub esp, 8 +> 8048c25 ! push strz_Result:__8048fc0 +> 8048c2a ! push _ZSt4cout +> 8048c2f ! call _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc +> 8048c34 ! mov esi, eax + +Κάτι μου λέει πως φτάνουμε στη λύση του μυστηρίου! Το jump ψάχνουμε είναι ακριβώς μετά από μια σύγκριση του eax με τον edx. Από το listing βλέπουμε πως ο eax +περιέχει την τιμή επιστροφής της κλήσης της συνάρτησης time(0) (\@0x8048bdb). Αυτή επιστρέφει την τρέχουσα ώρα σε δευτερόλεπτα, μετρημένη από τις 1/1/1970 (το +λεγόμενο Epoch). Η τιμή στον edx προκύπτει από την πρόσθεση δύο τιμών που βρίσκονται στις διευθύνσεις ebx και ebx+8. Αν η τωρινή ώρα είναι μικρότερη από το +άθροισμα, τότε το πρόγραμμα κάνει άλμα, κάνει push \"Ready\>\" και γυρίζει στη διεύθυνση 0x8048bf8. Αντίθετα, αν η τρέχουσα ώρα είναι μεγαλύτερη ή ίση από το +άθροισμα, το άλμα δεν εκτελείται, γίνεται push \"Not Ready\>\" και φτάνουμε πάλι στη διεύθυνση 0x8048bf8. Μου φαίνεται ότι είναι πια ξεκάθαρο πως το άθροισμα +που παράγεται ( \[ebx\] + \[ebx+8\] ) αποτελεί τη χρονική στιγμή πέρα από την οποία λήγει το demo. + +Στη διεύθυνση 0x8048bf8 γίνεται push το σύμβολο cout και καλείται η συνάρτηση \_ZStlsISt11char\_traitsIcEERSt13basic\_ostreamIcT\_ES5\_PKc. Χμμ, όχι και πολύ +ξεκάθαρα πράγματα. Ας το κάνουμε demangle manually με το c++filt\ +[listing3.txt](rce2-files/listing3.txt)\ +Όλη η προηγούμενη ακολουθία μας λέει πως καλείται η συνάρτηση για τον overloaded τελεστή \<\<, με αριστερή πλευρά ένα αντικείμενο τύπου *basic\_ostream* (output +stream) και δεξιά *const char \**. Με απλά λόγια, η εντολή που εκτελέστηκε ήταν η std::cout\<\<\"Ready\>\" ή std::cout\<\<\"Not Ready\>\". + +Λίγο πιο κάτω (έχω αποπλέξει τα σύμβολα με το c++filt):\ +[listing4.txt](rce2-files/listing4.txt)\ +Το οποίο μεταφράζεται σε std::cin\>\>string1, όπου string1 ένα αντικείμενο τύπου *std::string*. Σε αυτό το string μπορούμε να υποθέσουμε πως αποθηκεύεται η +έκφραση που εισάγουμε. + +Ας αφήσουμε την ανάλυση του listing για λίγο και ας αναλογιστούμε πως μπορούμε να πειράξουμε το εκτελέσιμο ώστε να ξεπεράσουμε το χρονικό έλεγχο. Η πιο απλή +λύση είναι να αντικαταστήσουμε το jng στη διεύθυνση 0x8048bea με ένα jmp στη διεύθυνση 0x8048c8. Το πρόβλημα με αυτή την προσέγγιση είναι ότι αντιμετωπίζουμε το +αποτέλεσμα και όχι την αιτία. Θα πρέπει σε κάθε σημείο που γίνεται ένα τέτοιος έλεγχος να αλλάξουμε το άλμα. Εμείς βρήκαμε ένα τέτοιο σημείο αλλά πιθανότατα +υπάρχει τουλάχιστον ακόμα ένα. Θυμηθείτε πως όταν το πρόγραμμα είχε λήξει, εκτός από το prompt \"Not Ready\>\", κάτι δεν πήγαινε καλά και με τις πράξεις. Στο +σημείο που αναλύσαμε εμείς, ο έλεγχος φαίνεται να επηρεάζει μόνο το prompt, οπότε θα πρέπει να υπάρχει και κάποιο άλλο checkpoint. Σε ένα πλήρες πρόγραμμα τα +σημεία ελέγχου μπορεί να είναι εκατοντάδες και σίγουρα δεν είναι πρακτικό να τα αλλάξουμε όλα. Η πιο σωστή λύση είναι να βρούμε σε ποιο σημείο αρχικοποιούνται +οι μεταβλητές που περιέχουν τις πληροφορίες για τη λήξη του χρόνου και να τις \"πειράξουμε\" εκεί. Ας αρχίσουμε λοιπόν\... + +Επιστρέφοντας στο listing λίγο πιο πάνω από εκεί που είχαμε μείνει: + +> 8048bc0 ! +> ....... ! ;----------------------- +> ....... ! ; S U B R O U T I N E +> ....... ! ;----------------------- +> ....... ! sub_8048bc0: ;xref c8048a7d +> ....... ! push ebp +> 8048bc1 ! mov ebp, esp +> 8048bc3 ! push edi +> 8048bc4 ! push esi +> 8048bc5 ! push ebx +> 8048bc6 ! sub esp, 0ch +> 8048bc9 ! mov edi, [ebp+8] +> 8048bcc ! lea eax, [edi+4] +> 8048bcf ! mov [ebp-10h], eax +> 8048bd2 ! mov esi, esi +> 8048bd4 ! +> ....... ! loc_8048bd4: ;xref j8048c73 +> ....... ! sub esp, 0ch +> 8048bd7 ! mov ebx, [edi] +> 8048bd9 ! push 0 +> 8048bdb ! call time +> 8048be0 ! mov edx, [ebx+8] +> 8048be3 ! add edx, [ebx] +> 8048be5 ! add esp, 10h +> 8048be8 ! cmp eax, edx +> 8048bea ! jng loc_8048c8c +> 8048bf0 ! sub esp, 8 +> 8048bf3 ! push strz_Not_ready___8048fb4 + +Είπαμε πως ο edx περιέχει την ημερομηνία λήξης του demo. Αυτή προκύπτει από το άθροισμα των τιμών στις διευθύνσεις \[ebx+8\] και \[ebx\]. Προχωρώντας πιο πάνω +βλέπουμε πως ο ebx εξαρτάται από το edi (8048bd7 ! mov ebx, \[edi\]) το οποίο με τη σειρά του εξαρτάται από το ebp (8048bc9 ! mov edi, \[ebp+8\]). Μάλιστα το +ebp+8 είναι η πρώτη παράμετρος της συνάρτησης στην οποία είμαστε! Επομένως, κατά κάποιο τρόπο τα δεδομένα για τη λήξη έχουν περαστεί ως παράμετρος στη +συνάρτηση. Παρατηρήστε πως η παράμετρος γίνεται dereferenced 2 φορές και επομένως μπορούμε να υποθέσουμε πως είναι κάποιο είδος δείκτη σε δείκτη. Η συνάρτηση +στην οποία βρισκόμαστε καλείται από το σημείο 0x8048a7d (xref c8048a7d) οπότε καλό θα ήταν να ελέγξουμε τι συμβαίνει εκεί. + +> 80489c8 ! +> ....... ! offset_80489c8: ;xref o804892f +> ....... ! push ebp +> 80489c9 ! mov ebp, esp +> 80489cb ! push esi +> 80489cc ! push ebx +> 80489cd ! sub esp, 70h +> 80489d0 ! and esp, 0fffffff0h +> 80489d3 ! push eax +> 80489d4 ! lea ebx, [ebp-78h] +> 80489d7 ! push ebx +> 80489d8 ! mov eax, [ebp+0ch] +> 80489db ! push dword ptr [eax] +> 80489dd ! push 3 +> 80489df ! call __xstat +> 80489e4 ! mov eax, [ebp-38h] +> 80489e7 ! mov [ebp-18h], eax +> 80489ea ! mov eax, [ebp-40h] +> 80489ed ! mov [ebp-14h], eax +> 80489f0 ! lea esi, [ebp-18h] +> 80489f3 ! mov dword ptr [ebp-10h], 2a300h +> 80489fa ! mov edx, ?data_804a470 +> 80489ff ! mov eax, 1 +> 8048a04 ! lock add [edx], eax +> 8048a07 ! mov dword ptr [ebp-74h], ?data_804a474 +> 8048a0e ! mov dword ptr [ebp-6ch], 0 +> 8048a15 ! mov dword ptr [ebp-68h], 0 +> 8048a1c ! mov dword ptr [ebp-70h], data_804a0a8 +> 8048a23 ! mov dword ptr [ebp-60h], 0 +> 8048a2a ! mov dword ptr [ebp-5ch], 0 +> 8048a31 ! mov dword ptr [ebp-64h], data_804a098 +> 8048a38 ! mov dword ptr [ebp-54h], 0 +> 8048a3f ! mov dword ptr [ebp-50h], 0 +> 8048a46 ! mov dword ptr [ebp-58h], data_804a078 +> 8048a4d ! mov dword ptr [ebp-48h], 0 +> 8048a54 ! mov dword ptr [ebp-44h], 0 +> 8048a5b ! mov dword ptr [ebp-4ch], data_804a088 +> 8048a62 ! mov dword ptr [ebp-3ch], 0 +> 8048a69 ! mov dword ptr [ebp-38h], 0 +> 8048a70 ! mov dword ptr [ebp-40h], data_804a068 +> 8048a77 ! mov [ebp-78h], esi +> 8048a7a ! mov [esp], ebx <---- Ο ebx είναι παράμετρος της συνάρτησης +> 8048a7d ! call sub_8048bc0 <---- Η συνάρτηση στην οποία βρισκόμασταν +> 8048a82 ! mov edx, [ebp-74h] + +Πάνω από την call sub\_8048bc0 υπάρχει η εντολή *mov \[esp\],ebx*. Αυτή είναι ένας τρόπος να αντικαταστήσουμε την κορυφαία τιμή στο σωρό. Αντιστοιχεί με pop +\<κάπου\>, push ebx. Παρατηρήστε πιο πάνω πως η \_xstat δεν \"καθαρίζει\" το σωρό και επομένως, η τιμή που αντικαθίσταται είναι απλώς η πρώτη παράμετρος της +\_xstat, άχρηστη πια (για περισσότερες πληροφορίες περί σωρού βλ. προηγούμενο άρθρο \#1). + +Και τώρα αρχίζει το μπλέξιμο\...\ +Πιο πάνω: + +> 80489d4 ! lea ebx, [ebp-78h] (load effective address) + +Ο ebx, δηλαδή, περιέχει τη διεύθυνση ebp-78 (είναι ένας δείκτης προς αυτή). Ας προσπαθήσουμε να βρούμε τι περιέχει αυτή η διεύθυνση. Ψάχνοντας για μια άλλη +αναφορά στην ebp-78 βρίσκουμε λίγο πριν την κλήση της συνάρτησης sub\_8048bc0: + +> 8048a77 ! mov [ebp-78h], esi + +Ο καταχωρητής esi παίρνει τιμή πιο πάνω και περιέχει τη διεύθυνση της θέσης μνήμης ebp-18: + +> 80489f0 ! lea esi, [ebp-18h] + +Σχηματικά: + +![](/34/img/hands_on_stack.png) + +Στη συνάρτηση sub\_8048bc0 θυμηθείτε πως η παράμετρος edi=\[ebp+8\] (που είναι το ebx της καλούσας συνάρτησης και του σχήματος) γινόταν dereferenced μια φορά +στο 8048bd7 ! mov ebx, \[edi\] οπότε και το ebx περιέχει τη διεύθυνση ebp\'-18 (με τον ebp\' να είναι ο frame pointer της προηγούμενης (καλούσας) συνάρτησης). +Μετά είχαμε τα \[ebx\] και \[ebx+8\] που αναφέρονται τελικά στο \[ebp\'-18\] και \[ebp\'-10\]. Επομένως, επιστρέφοντας τη συζήτηση στην καλούσα συνάρτηση +(ebp=ebp\'), τo άθροισμα \[ebp-18\]+\[ebp-10\] καθορίζει πότε θα λήξει το πρόγραμμα! + +Στη διεύθυνση 0x80489f3 έχουμε mov dword ptr \[ebp-10h\], 2a300h δηλαδή το ένα από τα δύο μέρη του αθροίσματος έχει τη σταθερή τιμή 0x2a300=172800. Επειδή όλες +οι χρονικές συγκρίσεις γίνονται σε δευτερόλεπτα μπορούμε να υποθέσουμε πως και αυτή η τιμή είναι σε δευτερόλεπτα οπότε 172800sec=48h=2 μέρες! Το πρώτο κομμάτι +του αθροίσματος παίρνει τιμή μετά από μια κλήση στην stat. Μετά από λίγο ψάξιμο συμπεραίνουμε πως είναι η τιμή που έχει, είναι η χρονική στιγμή της τελευταίας +τροποποίησης του εκτελέσιμου αρχείου (βλέπε ασκήσεις\...). + +Με λίγα λόγια λοιπόν, το πρόγραμμα διαβάζει την ώρα τελευταίας τροποποίησης του αρχείου, προσθέτει σε αυτή 2 μέρες και ελέγχει αν η τρέχουσα ώρα είναι +μεγαλύτερη από αυτό το όριο. Αν αναλογιστεί κάποιος την προστασία αυτή, συμπεραίνει πως είναι εντελώς άχρηστη :) Εκτός από το γεγονός ότι αν γυρίσουμε το ρολόι +πίσω το ληγμένο πρόγραμμα λειτουργεί ξανά, μπορούμε απλώς να κάνουμε *touch* το εκτελέσιμο ώστε να αλλάξουμε το last modification time και έτσι να επεκτείνουμε +το όριο για 2 μέρες ακόμα! + +### [6.4 To patch]{#ss6.4} + +Αν θέλουμε να πειράξουμε το πρόγραμμα για να λειτουργεί για πάντα (σχεδόν\...), μια επιλογή είναι να αντικαταστήσουμε την + + 80489f3 ! mov dword ptr [ebp-10h], 2a300h + με + 80489f3 ! mov dword ptr [ebp-10h], 7fffffffh (η μεγαλύτερη θετική τιμή) + και την + 80489e4 ! mov eax, [ebp-38h] + με + 80489e4 ! xor eax, eax + +Η δεύτερη αλλαγή γίνεται ώστε να μην έχουμε αρνητικό αποτέλεσμα κατά την πρόσθεση των \[ebp-10h\] και \[ebp-18h\]. Αυτό θα είχε ως συνέπεια ο έλεγχος να +αποτυγχάνει πάντα! + +Αρκεί, λοιπόν, να βρούμε που στο αρχείο βρίσκεται η συγκεκριμένη εντολή. Θα μπορούσαμε να ψάξουμε το αρχείο για την ακολουθία από bytes που αποτελούν την εντολή +και μερικές άλλες γύρω της (βλέπε hands-on στο προηγούμενο τεύχος) αλλά αυτή τη φορά θα στηριχτούμε στον ELF Header. H έξοδος του objdump είναι: + +> bash$ objdump -x ./hands-on-unpacked +> +> ./hands-on-unpacked: file format elf32-i386 +> ./hands-on-unpacked +> architecture: i386, flags 0x00000112: +> EXEC_P, HAS_SYMS, D_PAGED +> start address 0x08048918 +> +> Program Header: +> PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2 +> filesz 0x000000e0 memsz 0x000000e0 flags r-x +> INTERP off 0x00000114 vaddr 0x08048114 paddr 0x08048114 align 2**0 +> filesz 0x00000013 memsz 0x00000013 flags r-- +> LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 +> filesz 0x00001050 memsz 0x00001050 flags r-x +> LOAD off 0x00001050 vaddr 0x0804a050 paddr 0x0804a050 align 2**12 +> filesz 0x000002f4 memsz 0x00000430 flags rw- +> DYNAMIC off 0x000011f8 vaddr 0x0804a1f8 paddr 0x0804a1f8 align 2**2 +> filesz 0x000000e0 memsz 0x000000e0 flags rw- +> NOTE off 0x00000128 vaddr 0x08048128 paddr 0x08048128 align 2**2 +> filesz 0x00000020 memsz 0x00000020 flags r-- +> EH_FRAME off 0x00001014 vaddr 0x08049014 paddr 0x08049014 align 2**2 +> filesz 0x0000003c memsz 0x0000003c flags r-- +> ... + +Η διεύθυνση 0x80489f3 βρίσκεται στο τρίτο segment διότι αυτό καταλαμβάνει τις διευθύνσεις 0x08048000-0x08049050 (*vaddr* μέχρι *vaddr+memsz-1*) στην οποία +ανήκει και η προηγούμενη. + +> LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 +> filesz 0x00001050 memsz 0x00001050 flags r-x + +Το virtual offset της 0x80489f3 από την αρχή του segment είναι 0x80489f3-0x08048000=0x09f3. Στο αρχείο, τώρα, το segment αρχίζει από το 0 και επομένως η +διεύθυνση 0x80489f3 αντιστοιχεί στο byte offset 0 + 0x09f3=0x09f3. Απλά μαθηματικά :) + +Η εντολή καταλαμβάνει 7 bytes (0x80489fa - 0x80489f3, όπου 0x8048bf0 η αρχή της επόμενης εντολής): 0xc7 0x45 0xf0 **0x00 0xa3 0x02 0x00**. Τα τονισμένα bytes +είναι η τιμή 0x0002a300 (σε little endian μορφή) τα οποία αρκεί να αντικαταστήσουμε με **0xff 0xff 0xff 0x7f**. + +Ομοίως, βρίσκουμε ότι η διεύθυνση 0x80489e4 αντιστοιχεί στο byte offset 0x09e4. Η εντολή καταλαμβάνει 3 bytes: 8b 45 c8. Αντικαθιστούμε το πρώτο byte με 0x31, +το δεύτερο με 0xc0 (xor eax, eax) και τo τελευταίο με 0x90 (nop). Τώρα το εκτελέσιμο θα λειτουργεί χωρίς πρόβλημα για τα επόμενα 30 χρόνια περίπου :) + +### [6.5 Ασκήσεις για το σπίτι :)]{#ss6.5} + +1. Πως φτάσαμε στο συμπέρασμα πως η εντολή *80489e7 ! mov \[ebp-18h\], eax* τοποθετεί στη διεύθυνση \[ebp-18h\] την ώρα τελευταίας τροποποίησης του + εκτελέσιμου; +2. Εκτός από τον χρονικό έλεγχο για την εκτύπωση του \"Ready\>\"/\"Not Ready\>\" γίνεται χρονικός έλεγχος και σε κάποιο άλλο σημείο. Που είναι αυτό και τι + επιπτώσεις έχει στο πρόγραμμα; + +Ο πηγαίος κώδικας του προγράμματος: [rce2-files/hands-on.cpp.gz](rce2-files/hands-on.cpp.gz). Το πρόγραμμα έχει γραφεί επίτηδες ώστε να χρησιμοποιεί στοιχεία +της C++ τα οποία στην προκειμένη περίπτωση δεν αποτελούν την καλύτερη, σχεδιαστικά, επιλογή. Για παράδειγμα, όλες οι μέθοδοι των κλάσεων έχουν δηλωθεί (έμμεσα) +να είναι inline και για αυτό δημιουργείται ένας μικρός χαμός στο εκτελέσιμο! + + +### [7. Πρόκληση]{#s7} + +### [7.1 Προηγούμενη Πρόκληση (\#1) - Λύση και Hall Of Fame]{#ss7.1} + +Σκοπός του προηγούμενου challenge ήταν να κάνετε authenticate. Αρχικά το πρόγραμμα διαβάζει 18 bytes από το αρχείο \"auth.key\". Αυτά αποτελούν το +authentication key. + +Στην όλη διαδικασία του authentication εμπλέκονται επίσης το username, το όνομα του υπολογιστή και την έκδοση του πυρήνα. Το πρόγραμμα βρίσκει το username με +την κλήση getpwuid(getuid()). Αυτή επιστρέφει έναν δείκτη σε struct passwd, το πεδίο pw\_name της οποίας περιέχει το login name. Οι υπόλοιπες δύο πληροφορίες +βρίσκονται με την κλήση uname() που επιστρέφει πληροφορίες για το σύστημα σε μια δομή struct utsname. + +Τα τρία στοιχεία συνδυάζονται για να παραχθεί ένα τελικό pass-string. Αυτό γίνεται στη συνάρτηση merge(). + +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- +> +> char *merge(char *u,char *n,char *v) +> { +> char u1[]="connor"; +> char n1[]="skynet"; +> char v1[]="tx2000"; +> int len=0; +> char *r; +> int i; +> +> replace(u1,6,u); +> Debug("New username: \'%s\'\n",u1); +> replace(n1,6,n); +> Debug("New nodename: \'%s\'\n",n1); +> replace(v1,6,v); +> Debug("New kver: \'%s\'\n",v1); +> +> r=malloc(18+1); +> if (r==NULL) { +> fprintf(stderr,"Internal Error #923\n"); +> exit(1); +> } +> +> i=0; +> while (i<6) { +> r[i*3]=u1[i]; +> r[i*3+1]=n1[i]; +> r[i*3+2]=v1[i]; +> i++; +> } +> Debug("Final pass-phrase: \'%s\'\n",r); +> +> return r; +> } +> +> ---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αρχικά τα strings u1, n1, v1 αντικαθίστανται με τους 6 πρώτους χαρακτήρες των username, nodename και kernel version αντίστοιχα. Αν κάποιο από τα προηγούμενα +έχει λιγότερους από 6 χαρακτήρες, αντικαθίστανται μόνο όσοι υπάρχουν. Όλα αυτά τα κάνει η replace(). + +Oι χαρακτήρες των strings γράφονται σε ένα καινούργιο string κατά *στήλες*. Δηλαδή, πρώτα γράφονται οι πρώτοι χαρακτήρες των u1, n1 και v1, μετά οι δεύτεροι +κτλ. Αυτό το αναδιοργανωμένο string αποτελεί το τελικό pass-string. + +Τέλος, καλείται η do\_math() με παραμέτρους το authentication key και το pass-string, η οποία αποφασίζει αν είναι το κλειδί είναι εντάξει. Ο έλεγχος είναι ο +ακόλουθος. Αρχικά τα δύο strings χωρίζονται σε τρεις ομάδες των 6 bytes η κάθε μια. Κάθε ομάδα προστίθεται byte-wise με την αντίστοιχη ομάδα του άλλου string +και έτσι παράγονται τρεις αριθμοί x, y και r. Όταν γράφω byte-wise εννοώ ότι κατά την πρόσθεση των ομάδων αθροίζονται όλα τα bytes των αντίστοιχων ομάδων από τα +δύο strings ένα προς ένα (τα bytes θεωρούνται προσημασμένα): + +> 1η Ομάδα 2η Ομάδα 3η Ομάδα +> k0 k1 k2 k3 k4 k5 | k6 k7 k8 k9 k10 k11 | k12 k13 k14 k15 k16 k17 +> p0 p1 p2 p3 p4 p5 | p6 p7 p8 p9 p10 p11 | p12 p13 p14 p15 p16 p17 +> +> 5 11 17 +> x=Σ(ki+pi) y=Σ(ki+pi) r=Σ(ki+pi) +> i=0 i=6 i=12 + +Για να είναι επιτυχής ο έλεγχος θα πρέπει x\^2 + y\^2 = r\^2 με r!=0. Οι τριάδες (x,y,r) που ικανοποιούν την προηγούμενη σχέση ονομάζονται πυθαγόρειες τριάδες. +Η πιο απλή είναι η (3,4,5). + +Εμείς γνωρίζουμε τα pi και ψάχνουμε τα ki ώστε να ισχύουν τα παραπάνω. Αν θέσουμε ki=-pi για όλα εκτός από ένα σε *κάθε ομάδα* πχ το πρώτο, τότε x=k0+p0, +y=k6+p6, r=k12+p12 =\> k0=x-p0 k6=y-p6, k12=r-p12. Επειδή τα (x,y,r) πρέπει να είναι πυθαγόρεια τριάδα επιλέγουμε x=3, y=4, r=5. Επομένως k0=3-p0, k6=4-p6, +k12=5-p12. Και αυτό ήταν! + +Παρακάτω θα βρείτε άλλους δύο key generators που είναι πιο πολύπλοκοι αλλά και πιο δημιουργικοί από αυτόν που προτείνω. + +#### Hall Of Fame + +Συγχαρητήρια για τη λύση και τους key generators στους: + +1. **Γιώργος Πρέκας** [Challenge \#1 Keygen](rce2-files/prekas_giorgos-rce1sol.tgz) + + > \...Το πρόγραμμα keygen είναι ένας ολοκληρωμένος key generator. Παρέχει περισσότερες δυνατότητες από όσες περιμένει κανείς από ένα key generator\... + +2. **Αντώνης Σταμπούλης** [Challenge \#1 Keygen](rce2-files/stampoulis_antonis-rce1sol.tgz) + + > \... Δουλεύει σχετικά απλά, ψάχνοντας να βρει μια πυθαγόρεια τριάδα κοντά στην περιοχή που βρίσκονται τα a, b και c που δημιουργούνται όταν το input + > string αποτελείται από χαρακτήρες κενού (ascii 32). Μετά προσθέτει τυχαίους αριθμούς στους χαρακτήρες του input string έτσι ώστε να βγαίνουν τελικά τα + > επιθυμητά a, b και c\... + +Ο δικός μου keygen και το source αρχείο του challenge \#1 : [Challenge \#1 source](rce2-files/alf-rce1sol.tgz) + +### [7.2 Πρόκληση \#2]{#ss7.2} + +Αγαπητοί αναγνώστες,\ +πρόσφατα στο υπόγειο των καινούργιων κτιρίων του περιοδικού μας ανακαλύφθηκε ένα κρυφό δωμάτιο. Μέσα σε αυτό βρέθηκε μια tamperproof θήκη που από ότι φαίνεται +περιέχει ένα υπολογιστικό σύστημα. Το μόνο που φαίνεται από το σύστημα είναι μια μικρή οθόνη και μια υποδοχή για rom memory modules που περιέχουν τον προς +εκτέλεση κώδικα. Ένας από τους εργαζόμενους θυμάται πως η εταιρεία που υπήρχε εδώ παλιότερα είχε ασχοληθεί με την υλοποίηση ενός πρότυπου υπολογιστικού +συστήματος τεχνολογίας RISC αλλά το project εγκαταλείφθηκε λόγω έλλειψης χρημάτων. + +Δυστυχώς οι προσπάθειες μας για επικοινωνία με άτομα που πιστεύουμε πως έχουν σχέση με το εν λόγω project δεν έχουν φέρει αποτέλεσμα. Ύστερα από διεξοδικότερη +έρευνα στο κρυφό δωμάτιο ήρθε στο φως μια δισκέτα που γράφει πάνω \"RISC-Emu v0.42rox\" και από ότι φαίνεται περιέχει και έναν emulator του επεξεργαστή. +Εικάζεται πως αυτός είχε χρησιμοποιηθεί για λόγους prototyping. Τα αρχεία που βρέθηκαν στη δισκέτα βρίσκονται στο αρχείο: +[rce2-files/challenge2.tar.gz](rce2-files/challenge2.tar.gz). + +Η tamperproof θήκη γράφει με μεγάλα γράμματα \"Προσοχή! Η θήκη μπορεί να ανοίξει μόνο από το ίδιο το σύστημα. Οποιαδήποτε προσπάθεια για παραβίαση θα έχει ως +αποτέλεσμα την απελευθέρωση χημικών που θα καταστρέψουν το hardware\". + +Η αποστολή σας, αν την αποδεχτείτε, είναι να βρείτε έναν τρόπο να ανοιχτεί η θήκη χωρίς να προκληθεί ζημιά στο hardware. Από όσα ξέρουμε ως τώρα αυτό θα πρέπει +να γίνεται με την εισαγωγή ενός σωστού memory module. Η ανταμοιβή θα είναι πλουσιοπάροχη και θα φθάνει το ύψος των 10000 δωρεάν συνδρομών στο περιοδικό μας. + +Με εκτίμηση, + + Ο Πρόεδρος + diff --git a/content/articles/35/01_X-Windows.md b/content/articles/35/01_X-Windows.md new file mode 100644 index 0000000..b6dde26 --- /dev/null +++ b/content/articles/35/01_X-Windows.md @@ -0,0 +1,416 @@ ++++ +title = 'X-windows, πως και γιατί;' +date = '' +description = '' +author = 'Καπελώνης Κωστής kkapelon _AT_ freemail.gr(mailto:kkapelonSPAM@SUXfreemail.gr)' +issue = ['Magaz 35'] +issue_weight = 1 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Στο άρθρο αυτό προσπαθούμε να αποκαλύψουμε τις πραγματικές δυνατότητες των X-windows οι οποίες συχνά είναι άγνωστες στους χρήστες τους. Βασικά θέλουμε να πούμε +ότι τα X-Windows ΔΕΝ είναι το γραφικό περιβάλλον του Linux. Αν και σήμερα (κυρίως μέσα από το KDE και το GNOME) χρησιμοποιούνται με αυτόν τον τρόπο, στην +πραγματικότητα η φιλοσοφία πίσω από τα X-Windows είναι λίγο διαφορετική. Το άρθρο απευθύνεται σε μέσους χρήστες GNU/Linux (και ορεξάτους αρχάριους).* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +------------------------------------------- + +**2. X-Windows το γιατί (η αλλιώς η θεωρία)** +------------------------------------------------------------------------- + +- [2.1 Αρχιτεκτονική](#ss2.1) +- [2.2 Περί ενοποίησης (Integration).](#ss2.2) +- [2.3 Όλα για το δίκτυο](#ss2.3) +- [2.4 Απόκρυψη των λεπτομερειών (abstraction)](#ss2.4) +- [2.5 Δύο εφαρμογές με ενδιαφέρον](#ss2.5) + +**3. X-Windows το πως (η αλλιώς η πράξη)** +---------------------------------------------------------------------- + +- [3.1 Ο εύκολος τρόπος](#ss3.1) +- [3.2 Ο δύσκολος τρόπος](#ss3.2) +- [3.3 Ο ασφαλής τρόπος](#ss3.3) + +**4. Άλλα θέματα και επίλογος** +----------------------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Χρησιμοποιείτε GNU/Linux εδώ και λίγο καιρό. Αν ανάμεσα στα χιλιάδες ερωτήματα σας είναι και τα παρακάτω\... + +- Γιατί το γραφικό περιβάλλον του Linux είναι τόσο αργό; +- Τι εννοούν οι \"παλιοί\" όταν λένε ότι τα X-Windows είναι \"network-transparent\"; +- Παλαιότερα λέγαν ότι το Linux ήταν πολύ πιο γρήγορο από τα MSWindows, σήμερα όμως είναι πιο αργό στην πραγματικότητα. Γιατί; +- Γιατί τα X-Windows αναφέρονται ως \"σύστημα\";. Δεν είναι απλά το γραφικό περιβάλλον του Linux; +- Τι εννοεί η τάδε διανομή όταν λέει ότι δεν χρησιμοποιεί πια XFREE86 αλλά τον server από το X.org ; +- Υπάρχει κάτι αντίστοιχο σε remote assistance/desktop για Linux συστήματα; + +\...τότε αυτό το άρθρο είναι γραμμένο για σας! Αν όχι τότε μπορείτε να γράψετε και να στείλετε το δικό σας άρθρο στο Magaz. Το περιμένουμε με αγωνία! + + +### [2. X-Windows το γιατί (η αλλιώς η θεωρία)]{#s2} + +Τα X-Windows δεν αποτελούν εξαίρεση στον κανόνα. Ακολουθούν και αυτά την φιλοσοφία του Unix. Δηλαδή κατασκευάζουμε μικρά προγράμματα που κάνουν μια δουλειά καλά +και δίνουμε στον προγραμματιστή την μέγιστη ελευθερία να προσαρμόσει το περιβάλλον του όπως θέλει. (το \"μικρά\" βέβαια σε αυτήν την περίπτωση είναι +αμφιλεγόμενο) + +Αυτό έρχεται σε αντίθεση με τα καταναλωτικά λειτουργικά συστήματα (γκουχ,γκουχ) που πιστεύουν ότι \"ξέρουμε τι θέλουν οι χρήστες μας πριν από αυτούς για αυτούς +και θα τους παρέχουμε εμείς το καλύτερο γραφικό περιβάλλον. Ξέρουμε βέβαια ότι αυτό θα ικανοποιήσει μόνο το 80% των χρηστών. Δεν πειράζει όμως, το υπόλοιπο 20% +ας πάει να πνιγεί\". + +### [2.1 Αρχιτεκτονική]{#ss2.1} + +Μετά από αυτήν την σύντομη αλλά αναγκαία προπαγάνδα μπορούμε να δούμε τα πράγματα από μια πιο ρεαλιστική σκοπιά. Έτσι λοιπόν ένα μονολιθικό λειτουργικό σύστημα +που βασίζεται στην πλήρης ενοποίηση (integration) όλων των υποσυστημάτων του μοιάζει κάπως έτσι [\[εικόνα\]](/35/img/integrated.png) + +Κύριο πλεονέκτημα αυτής της αρχιτεκτονικής είναι βέβαια ή ταχύτητα. Με αυτό εννοούμε ότι όλα τα υποσυστήματα (άρα και το γραφικό περιβάλλον) είναι πλήρως +εναρμονισμένα μεταξύ τους (αφού είναι εντελώς προβλέψιμη η σύνθεση τους) και τα κανάλια επικοινωνίας μεταξύ τους είναι τα βέλτιστα δυνατά. + +Αντιθέτως σε ένα GNU/Linux σύστημα όπου Linux σημαίνει μόνο ο πυρήνας (φαντάζομαι ότι το ξέρετε αυτό :-) τα πράγματα είναι κάπως έτσι +[\[εικόνα\]](/35/img/modular.png) . Η εικόνα δείχνει ένα σύστημα βασισμένο σε gtk+/GNOME αλλά ανάλογα πράγματα ισχύουν και για QT/KDE. + +Το όλο σύστημα δηλαδή αποτελείται από αυτοδύναμα κομμάτια τα οποία μπορούν να να συνεργαστούν με διάφορους τρόπους μεταξύ τους. Κύριο πλεονέκτημα αυτής της +αρχιτεκτονικής είναι η επεκτασιμότητα και η ευελιξία. Έτσι είναι δυνατόν κάποιος ανάλογα με τις ανάγκες του να αρχίσει να αφαιρεί από \"την κορυφή\" +υποσυστήματα φτάνοντας σε ένα πιο ελαφρύ σύστημα. + +Θα μπορούσατε ας πούμε να αφαιρέσετε το GNOME και να βάλετε έναν άλλο απλό window manager κρατώντας όμως τις Gtk βιβλιοθήκες. H να αφήσετε μόνο τα ίδια τα +X-windows για να τρέχετε μόνο μια συγκεκριμένη εφαρμογή σε Motif. Η ακόμα να αφαιρέσετε όλο το γραφικό περιβάλλον αφήνοντας μόνο τον πυρήνα και τις εφαρμογές +κονσόλας, έχοντας έτσι ένα πολύ γρήγορο σύστημα ιδανικό για server. + +Στην πραγματικότητα βέβαια επειδή κάποιος θέλει να τρέχει πολλά και διαφορετικά προγράμματα τα πράγματα δεν είναι τόσο απλά. Έτσι αν είστε στο KDE και σηκώσετε +το Mozilla θα φορτωθούν όλες οι βιβλιοθήκες του στην ίδια μνήμη που είναι ήδη φορτωμένες αυτές του KDE. Αν σηκώσετε και GIMP ας πούμε θα έχετε και το GTK+ να +καταναλώνει μνήμη. Ουσιαστικά δηλαδή σε ένα μηχάνημα έχετε 3 ειδών βιβλιοθήκες. Αυτήν την ευελιξία (πολλά είδη εφαρμογών) την πληρώνετε σε απόδοση (μνήμη) + +Επίσης είναι δυνατόν να αλλάξουν τα \"κάτω\" ή τα \"πάνω\" επίπεδα του συστήματος χωρίς καμία επίπτωση. Όπως θα ξέρετε τα X-windows δεν είναι αποκλειστικό +προνόμιο του Linux. Τα \*ΒSDς τρέχουν επίσης X-Windows όπως και μερικά εμπορικά Unix (π.χ. Solaris). Αυτό δίνει πάλι μεγάλη ευελιξία καθώς ένα πρόγραμμα που +χρησιμοποιεί μόνο γραφικές βιβλιοθήκες (Xlib και πάνω) τρέχει όπου υπάρχουν X-windows άσχετα με το αν \"από κάτω\" υπάρχει Linux/FreeBSD/Solaris ή οτιδήποτε +άλλο. + +Τα KDE/GNOME για παράδειγμα τρέχουν άνετα σε FreeBSD. Προφανώς θα μεταφέρθηκαν (ported) κάποια συγκεκριμένα κομμάτια από το ένα σύστημα στο άλλο, αλλά κανείς +δεν ξανάγραψε κώδικα \"από το γραφικό περιβάλλον του Linux\" στο \"γραφικό περιβάλλον του FreeBSD\". + +Τέλος, η αντικατάσταση των πάνω επιπέδων σημαίνει αντικατάσταση των X-Windows. Τι σημαίνει αυτό; Τι θα μπορούσαμε να βάλουμε στην θέση τους; Εδώ φτάνουμε σε ένα +σημαντικό σημείο του άρθρου. Τα x-windows (η επίσημα \"The X-Window system\") είναι απλά μια περιγραφή (specification). Ο XFree86 είναι απλά μια δωρεάν +υλοποίηση (implementation). Υπάρχουν και άλλες υλοποιήσεις. Προφανώς αρκετές είναι forks του XFree86 αλλά υπάρχουν και εμπορικές εκδόσεις με διάφορα +χαρακτηριστικά (π.χ. 3D επιτάχυνση). Τον τελευταίο καιρό λόγω διάφορων νομικών επιπλοκών με την άδεια χρήσης του XFree86 αρκετές διανομές ψάχνουν εναλλακτικές +λύσεις. Αυτό όμως δεν έχει καμία επίπτωση στο τεχνικό επίπεδο. Όλες οι γραφικές εφαρμογές μπορούν να λειτουργήσουν όπως και πριν. + +### [2.2 Περί ενοποίησης (Integration).]{#ss2.2} + +Μέχρι στιγμής δεν έχουμε πει τίποτα καινούριο. Γιατί λοιπόν αυτή η ευελιξία που προσφέρουν τα X-Windows μεταφράζεται σε μειωμένη απόδοση; (άσχετα με το μπάχαλο +με τις πολλές βιβλιοθήκες που έχει μεγαλύτερη επίπτωση στην μνήμη παρά σε επεξεργαστική ισχύ). Η απάντηση είναι η εξής. + +Κάθε γραφικό πρόγραμμα (Χ client) είναι μια εφαρμογή που στο 99% των περιπτώσεων αναλογεί σε μία διεργασία του Unix (process). Το ίδιο όμως το υποσύστημα +γραφικών (Χ server) που ελέγχει οθόνη, πληκτρολόγιο και ποντίκι είναι επίσης απλά άλλη μία διεργασία του συστήματος που τρέχει πάνω από τον πυρήνα (userspace). +Ξαναδιαβάστε την τελευταία πρόταση δύο φορές. Δεν υπάρχει καμία ειδική μεταχείριση μέσα στο πυρήνα του Linux για γραφικά ή για Χ servers ή για διάφορα άλλα +τέτοια. (Εδώ κλέβω λίγο βέβαια, αλλά αν το ξέρετε αυτό είστε αρκετά έμπειρος ώστε αυτό το άρθρο μάλλον δεν σας ενδιαφέρει). Το \"γραφικό περιβάλλον\" είναι +δηλαδή άλλο ένα πρόγραμμα που μοιράζεται τους πόρους του μηχανήματος στην ίδια βάση με τα υπόλοιπα προγράμματα που τρέχουν εκείνη την στιγμή (κονσόλας ή +γραφικά). + +Αυτό μπορείτε να το διαπιστώσετε και οι ίδιοι. Με ένα απλό ps μπορείτε να βρείτε τον ίδιο τον Xserver και \"σκοτώνοντας\" τον θα καταρρεύσει αυτομάτως όλο το +γραφικό περιβάλλον. Τόσο απλά. Μάλιστα μπορείτε να χρησιμοποιήσετε τις κλασσικές εντολές του Unix πάνω στον Xserver. Για παράδειγμα με την εντολή nice μπορείτε +να ανεβάσετε ή να μειώσετε την προτεραιότητα του Xserver σε σχέση με τα άλλα προγράμματα. Ακόμα και στα επίπεδα πάνω από τα ίδια τα X-Windows η λογική είναι η +ίδια. O window manager που σχεδιάσει τα περιγράμματα των παραθύρων και ασχολείται με την θέση τους είναι επίσης απλά άλλο ένα userspace πρόγραμμα. Τα ίδια +ισχύουν και για KDE/GNOME. Το πάνελ τους, o window manager, ο file manager κ.τ.λ είναι \"κανονικά\" προγράμματα χωρίς κάποιο ειδικό χαρακτηριστικό. + +Ξαναδείτε τις δύο εικόνες που αναφέρθηκαν προηγουμένως. Αν φανταστείτε ότι κάθε \"βελάκι\" αποτελεί μία σημαντική καθυστέρηση (communication overhead) μπορείτε +εύκολα να δείτε ότι ένα σύστημα βασισμένο σε GNOME/KDE και γενικά με X-Windows πληρώνει μερικές έξτρα καθυστερήσεις οι οποίες πολύ απλά δεν υπάρχουν σε ένα +μονολιθικό λειτουργικό σύστημα όπου τα πάντα είναι ενωμένα (και ο πυρήνας έχει και λειτουργίες για γραφικά). + +Αυτό είναι το τίμημα που πληρώνετε για την ευελιξία των X-Windows. Να το θυμάστε λοιπόν την επόμενη φορά που θα επιδοθείτε στο αγαπημένο σπορ των απανταχού +Unixάδων, αυτό δηλαδή της εύρεσης του κατάλληλου συνδυασμού window manager/background/theme/dockapps/desklets/toolbars/panels που θα σας δώσουν το \"τέλειο\" +υπολογιστικό περιβάλλον. + +Ειδικά το GNOME και το KDE πάσχουν σε ταχύτητα όσο καλός και αν είναι ο κώδικας τους (το KDE βέβαια πρέπει να παραδεχτώ ότι έχει κάνει τρομερή πρόοδο στον τομέα +ταχύτητα) γιατί είναι κατασκευασμένα για να παρέχουν λειτουργίες και να μιμούνται το περιβάλλον ενός μονολιθικού λειτουργικού συστήματος, κάτι που τα X-Windows +ποτέ δεν προορίζονταν να κάνουν. + +### [2.3 Όλα για το δίκτυο]{#ss2.3} + +Τώρα βέβαια θα πείτε: \"Και καλά, αν δεν είναι κατασκευασμένα τα X-Windows για να παρέχουν γραφικά σε ένα μονολιθικό λειτουργικό σύστημα, τότε για τι είναι +κατασκευασμένα;\", και θα έχετε κάθε δίκιο να το ρωτήσετε αυτό. + +Η μαγική φράση δεν είναι τόσο το \"μονολιθικό σύστημα\" όσο το \"σε ένα\". Τα X-Windows σχεδιάστηκαν για το δίκτυο. O σκοπός τους είναι να παρέχουν γραφικές +υπηρεσίες ανάμεσα σε πολλούς υπολογιστές που επικοινωνούν μεταξύ τους. Αναφερόμαστε βέβαια στο περιβόητο \"network transparency\". (Δεν νομίζω ότι μπορώ να βρω +καλή ελληνική μετάφραση του όρου.) + +Οι προγραμματιστές των X-Windows σκέφτηκαν ως εξής όταν τα σχεδίαζαν (όλα αυτά μέσα στα \'80s). \"Ξέρουμε ότι στο μέλλον τα δίκτυα θα είναι παντού. Και ξέρουμε +επίσης ότι πολλοί προγραμματιστές θα θέλουν να γράψουν γραφικά προγράμματα που θα τρέχουν πάνω από το δίκτυο. Θα ήταν επίσης κρίμα ο κάθε προγραμματιστής να +γράφει κάθε φορά κώδικα που αφορά μεταφορά δεδομένων μέσα από το δίκτυο, κάτι το οποίο δεν έχει σχέση με το ίδιο το πρόγραμμα. (γνωστό και ως plumbing +code/infrastructure ή και βαρετός κώδικας/εφεύρεση του τροχού για νιοστή φόρα στα ελληνικά :-). Θα κάνουμε λοιπόν το εξής: Θα γράψουμε μία φορά εμείς οι ίδιοι +τον κώδικα του δικτύου και θα δώσουμε στους άλλους προγραμματιστές την δυνατότητα να γράψουν τα προγράμματα τους βασισμένα στα X-Windows χωρίς πότε να πρέπει να +ασχοληθούν αυτοί με το δίκτυο άλλα να μπορούν να επικεντρώσουν την προσοχή τους στο ίδιο το πρόγραμμα τους\". + +Τι ακριβώς εννοούσαν λοιπόν οι προγραμματιστές των X-Windows και τι έλεγε αυτή η επαναστατική τους (ακόμα και σήμερα κατά την ταπεινή γνώμη του αρθρογράφου) +ιδέα; + +Ας δούμε ένα παράδειγμα. Έχετε δύο υπολογιστές συνδεδεμένους στο δίκτυο. Θέλετε να πάρετε κάποιες μετρήσεις από τον Α (οι οποίες μπορεί να είναι +θερμοκρασίες/hits σε ένα webserver/στατιστικά μιας βάσης δεδομένων και ότι άλλο μπορείτε να φανταστείτε) και να τις δείτε με ένα γραφικό πρόγραμμα στον Β στον +οποίο και κάθεστε. + +Αν οι δύο υπολογιστές τρέχουν ένα μονολιθικό λειτουργικό σύστημα πρέπει στην ουσία να γράψετε δύο προγράμματα. Το πρώτο (που δεν είναι απαραίτητο να είναι +γραφικό) θα τρέχει στον Α, θα μαζεύει τα δεδομένα και θα τα στέλνει μέσω δικτύου στο δεύτερο πρόγραμμα που θα τρέχει στον Β και το οποίο θα τα δείχνει γραφικά +στην οθόνη. Δείτε την [\[εικόνα\]](/35/img/client-server.png) .Στις περισσότερες περιπτώσεις ο κώδικας του δικτύου θα είναι χαμηλού επιπέδου (sockets) και θα είναι +στενά συνδεδεμένος με τα δεδομένα που μεταφέρονται. Παρατηρήστε επίσης ότι ο κώδικας αυτός δεν έχει καμία απολύτως σχέση ούτε με την συλλογή δεδομένων η οποία +μπορεί να είναι πολύ περίπλοκη από μόνη της ούτε με την επεξεργασία και γραφική τους αναπαράσταση που επίσης μπορεί να είναι πολύ περίπλοκη. + +Κλασσικά παραδείγματα αυτής της αρχιτεκτονικής είναι τα άπειρα γραφικά database frontends που επιτρέπουν σε κάποιον να χειριστούν γραφικά μια απομακρυσμένη βάση +δεδομένων, και τα διάφορα remote administration προγράμματα γενικότερα. Ακόμα και όλα τα κακόβουλα προγράμματα τύπου δούρειου ίππου (trojan horse) βασίζονται σε +αυτήν την ιδέα. + +Αν όμως έχετε X-Windows στους δύο υπολογιστές τα πράγματα είναι πολύ πιο απλά! Οι προγραμματιστές των X-Windows έχουν γράψει ήδη των κωδικά του δικτύου για εσάς +πριν από εσάς. Σε αυτήν την περίπτωσή θα γράψετε ένα μόνο πρόγραμμα (όπως και ήταν η αρχική σας επιδίωξη) το οποίο θα τρέξετε κανονικά στον Α και μετά με κάποιο +συγκεκριμένο τρόπο θα του πείτε \"Θέλω να δω την έξοδο του προγράμματος στην οθόνη του υπολογιστή Β και όχι στην οθόνη του υπολογιστή Α που το έτρεξα\". Και +αυτό ήταν! Δείτε την [\[εικόνα\]](/35/img/X-win.png) . Ο Α δεν χρειάζεται να τρέχει X-Windows. Στην πραγματικότητα ο Α δεν χρειάζεται να έχει καν οθόνη. Μπορεί να +είναι κάλλιστα ένας headless server που κάθεται στα φωτεινά υπόγεια μιας πολυεθνικής εταιρίας ή στο σκοτεινό πατάρι του γείτονα. Το μόνο που χρειάζεται ό Α +είναι οι βιβλιοθήκες γραφικών των X-Windows (xlib/Xt) και ότι άλλο toolkit χρησιμοποιεί (gtk+/qt/fltk/tk/motif κ.τ.λ) το πρόγραμμα. Κατά τα άλλα δεν χρειάζεται +να ασχοληθείτε εσείς ως προγραμματιστής, καθόλου με κώδικα για δίκτυο. Η μεταφορά των δεδομένων μέσα από τον δίκτυο γίνεται με τον τρόπο που έχουν +\"ενσωματωμένο\" (built-in) τα ίδια τα X-windows. + +Κάτι σημαντικό που πρέπει να παρατηρήσετε στην δεύτερη εικόνα και το οποίο έχει μπερδέψει αρκετούς ανθρώπους (μαζί και τον αρθρογράφο) είναι η ανάποδη +αντιστοίχηση των όρων client και server. Έχουμε συνηθίσει να έχουμε το client κομμάτι στον υπολογιστή που καθόμαστε (π.χ. ftp client/web browser/database +client) και το server κομμάτι στον απομακρυσμένο υπολογιστή (π.χ. ftp server/web server/database server). Στην περίπτωση των X-Windows όμως τα πράγματα είναι +ανάποδα. Ο χρήστης κάθεται στον X-Server (= οθόνη,πληκτρολόγιο και ποντίκι) ενώ το απομακρυσμένο πρόγραμμα είναι ο X-client. Αυτό είναι εύκολο να το θυμάστε αν +σκεφτείτε ότι ο client είναι πάντα αυτός που ξεκινάει την σύνδεση. Στην συγκεκριμένη περίπτωση ο χρήστης κάθεται στον X-Server που \"περιμένει\" συνδέσεις από +X-Clients σε άλλα μηχανήματα που θέλουν να χρησιμοποιήσουν την οθόνη του. + +Αυτά όσον αφορά το \"network\" κομμάτι. Τι ακριβώς όμως σημαίνει το \"transparency\" κομμάτι; (Στα ελληνικά transparent = διάφανος και transparency = +διαφάνεια). + +### [2.4 Απόκρυψη των λεπτομερειών (abstraction)]{#ss2.4} + +Φτάνουμε λοιπόν στην δεύτερη σημαντική απόφαση των προγραμματιστών των X-Windows. Η απόφαση αυτή έχει να κάνει με το τι γίνεται στην περίπτωση που ένα γραφικό +πρόγραμμα δείχνει την έξοδο του στον ίδιο τον υπολογιστή που τρέχει και άρα δεν χρειαζόμαστε μεταφορά δεδομένων μέσω δικτύου. Αυτή η περίπτωση μας ενδιαφέρει +πολύ γιατί έτσι τρέχουν το 99% των χρηστών GNU/Linux το KDE/GNOME στον υπολογιστή τους. Αυτή είναι η πλειοψηφία των περιπτώσεων της εφαρμογής των X-Windows +σήμερα δηλαδή. + +Είπαν λοιπόν οι προγραμματιστές των X-Windows: \"Το ξέρουμε ότι θα μπορούσαμε (για λόγους ταχύτητας) να γράψουμε διαφορετικό κώδικα που θα δίνει την δυνατότητα +στον προγραμματιστή να έχει απευθείας πρόσβαση στο υποσύστημα γραφικών όταν το πρόγραμμα του έχει την έξοδο στον ίδιο τον υπολογιστή που τρέχει. Κάτι τέτοιο +όμως θα ήταν πιο πολύπλοκο και επίσης θα χάλαγε \"την ομοιομορφία\" του συστήματος μας (τα X-Windows δηλαδή). Προτιμούμε να δώσουμε στον προγραμματιστή ένα +ενιαίο τρόπο κατασκευής γραφικών εφαρμογών άσχετα αν αυτές χρησιμοποιούν το δίκτυο τελικά ή όχι. Θα ακολουθήσουμε αυτήν μας την απόφαση παρόλο που ξέρουμε ότι +δεν είναι η βέλτιστη δυνατή από άποψη ταχύτητας, είναι όμως η βέλτιστη δυνατή λύση από άποψη ευελιξίας\". Έτσι ακριβώς έγινε. + +Τελικά δηλαδή τα X-Windows δεν ενδιαφέρονται αν υπάρχει στην μέση δίκτυο ή όχι. Ακόμα και όταν τα πάντα (Χ-server και X-Clients) τρέχουν σε έναν υπολογιστή +τοπικά, όλα τα δεδομένα πάλι μέσα από το \"δίκτυο\" θα σταλούν. Το \"δίκτυο\" βέβαια θα είναι το ιδεατό(virtual) δίκτυο που έχει πάντα ένας υπολογιστής με τον +εαυτό του. Αυτό πρακτικά σημαίνει ότι κάθε γραφικό πρόγραμμα που ξεκινάτε στον υπολογιστή σας συνδέεται μέσω δικτύου στην οθόνη του localhost/127.0.0.1 Δεν +υπάρχει κάποια ειδική ρύθμιση για να αποφασίσετε αν ένα γραφικό πρόγραμμα τρέχει μέσω δικτύου ή τοπικά. Είναι ακριβώς το ίδιο. Εκεί αναφέρεται και ο όρος +\"transparency\". + +Και βέβαια από όλα αυτά καταλαβαίνετε ότι ένα γραφικό πρόγραμμα δεν έχει ποτέ απευθείας πρόσβαση στην κάρτα γραφικών του μηχανήματος που θα τρέξει ακόμα και αν +τρέχει τοπικά. Τα πάντα θα περάσουν μέσα από το δίκτυο και μέσα από τον XServer (εδώ πάλι κλέβω αλλά αν το ξέρετε αυτό μπλα,μπλα). Θα μπορούσαν δηλαδή οι +προγραμματιστές των X-Windows να δώσουν ένα διαφορετικό API για την περίπτωση που το πρόγραμμα τρέχει τοπικά, προτίμησαν όμως να μην το κάνουν αυτό για χάρη της +ευελιξίας και ομοιομορφίας του συστήματος. + +Να λοιπόν ένας ακόμα λόγος που τα X-Windows δεν μπορούν να ανταγωνιστούν τα γραφικά περιβάλλοντα των μονολιθικών λειτουργικών συστημάτων στο θέμα της ταχύτητας. +Για άλλη μια φορά θυσίασαν την ταχύτητα για χάρη της ευελιξίας. + +### [2.5 Δύο εφαρμογές με ενδιαφέρον]{#ss2.5} + +Προφανώς υπάρχουν πολλές διαφορετικές περιπτώσεις όπου τα X-Windows μπορούν να χρησιμοποιηθούν για απομακρυσμένη εκτέλεση γραφικών εφαρμογών. Ανάλογα με τις +ανάγκες του καθενός είναι δυνατόν τα X-Windows τις καλύψουν χωρίς να χρειάζεται η προμήθεια εξωτερικών εφαρμογών. Εμείς θα θέλαμε να αναφέρουμε δύο περιβάλλοντα +που πιστεύουμε ότι αξίζουν την προσοχή σας. + +Περιβάλλον 1. Ας φανταστούμε έναν (δύστυχο) system administrator που κάθεται στο γραφείο του που τρέχει GNU/Linux και θα ήθελε να ξέρει ανά πάσα στιγμή των +σημαντικών πόρων/μηχανημάτων του δικτύου. Προφανώς μέσω SSH ο απομακρυσμένος έλεγχος (remote administration) των μηχανημάτων είναι δυνατόν να γίνει χωρίς καν να +σηκωθεί από την καρέκλα του. Δεν θα ήταν όμως ιδανικό να μπορούσε να σηκώσει και γραφικά προγράμματα απομακρυσμένα; + +Χωρίς λοιπόν την προσθήκη έξτρα προγραμμάτων ο system administrator αλλά με τις σωστές ρυθμίσεις θα μπορούσε να κάνει κάτι όπως την +[\[εικόνα\]](/35/img/central-control.png) + +Αυτός κάθεται λοιπόν σε ένα μηχάνημα χαμηλών/μέσων επιδόσεων και μπορεί να βλέπει στην (ας πούμε TFT 19\") οθόνη του ταυτόχρονα + +- Το γραφικό hit analyser που τρέχει στο Webserver του με FreeBSD +- Το γραφικό του network analyser που τρέχει στο router/firewall me OpenBSD +- Το γραφικό του database frontend που τρέχει στον application server με Solaris +- Το γραφικό του -βάλτε το δικό σας πρόγραμμα εδώ- που τρέχει στον server με GNU/Linux + +Στο όλο σύστημα δηλαδή τρέχει ένας μόνο X server (στον κεντρικό υπολογιστή) και οι υπόλοιποι X-clients τρέχουν περιφερειακά σε διαφορετικά μηχανήματα. Προφανώς +οι servers μπορούν κάλλιστα να είναι headless. + +Γιατί είναι σημαντική αυτή η σύνθεση (configuration); + +- Κεντρικός έλεγχος. O sys admin έχει όλα τα γραφικά προγράμματα σε μία οθόνη στο γραφείο του. +- Κατανεμημένοι πόροι. Συνήθως μια βάση δεδομένων είναι μια βαριά εφαρμογή. Επίσης ένας πολυάσχολος web server τείνει να ζορίζει ένα σύστημα. Σε αυτήν την + περίπτωση όμως ο system admin βλέπει σε μία οθόνη προγράμματα που θα ήταν αδύνατο να τρέξουν σε έναν υπολογιστή όλα μαζί. Επίσης ο ίδιος ο υπολογιστής του + sys admin έχει πολύ χαμηλό φόρτο αφού το μόνο που κάνει είναι να \"δείχνει\" τα δεδομένα και όχι να τα επεξεργάζεται. Έτσι η εταιρία μπορεί να επενδύσει + πολλά χρήματα στον database server και όχι στον υπολογιστή του sys admin. (Αυτή η λογική δεν ισχύει πάντα στην πραγματικότητα :-) +- Ανεξαρτησία. Αν ο sys admin είναι από τους νευρωτικούς που θέλουν να συνεχίσουν να έχουν τον έλεγχο ακόμα και όταν φεύγουν από την δουλειά δεν υπάρχει + κανένα πρόβλημα. Θα μπορούσε ας πούμε ο sys admin να πάει σπίτι του (θεωρητικά) και να σηκώσει το frontend της βάσης δεδομένων από το GNU/Linux μηχάνημα που + έχει στο υπνοδωμάτιο του. Θα έχει ακριβώς το ίδιο περιβάλλον που είχε και στην δουλειά. + +Περιβάλλον 2. Η δεύτερη περίπτωση είναι η λογικά αντίθετη (σχεδόν). Έχουμε στο κέντρο τον X-Client και διάφοροι X-Servers σηκώνουν το πρόγραμμα γραφικά. Τυπικό +παράδειγμα τέτοιας λύσεις αποτελούν τα πανεπιστήμια. Υπάρχει εγκατεστημένη σε ένα μηχάνημα μια σημαντική/εμπορική εφαρμογή και όλοι οι φοιτητές σηκώνουν το +γραφικό περιβάλλον από τον υπολογιστή που κάθονται. Η εφαρμογή δεν μπορεί να υπάρξει εγκατεστημένη σε άλλους υπολογιστές για διάφορους λόγους + +- Είναι εμπορική και το πανεπιστήμιο έχει μόνο μια άδεια +- Χρησιμοποιεί συγκεκριμένο υλικό συνδεδεμένο μόνο σε αυτόν τον αυτόν τον υπολογιστή +- Έχει πολύ μεγάλες απαιτήσεις σε πόρους (μπορεί να τρέξει μόνο σε αυτόν τον υπολογιστή) + +Δείτε την [\[εικόνα\]](/35/img/distributed.png). Τα χαρακτηριστικά αυτής της σύνθεσης είναι: + +- (Το κύριο) Πολλοί χρήστες χρησιμοποιούν μια γραφική εφαρμογή η οποία στην πραγματικότητα είναι εγκατεστημένη σε ένα μηχάνημα. +- Εύκολη αναβάθμιση της εφαρμογής, αφού βρίσκεται σε ένα κεντρικό σημείο. +- Οικονομική λύση. Ο μόνος απαιτητικός υπολογιστής είναι ο κεντρικός. Οι χρήστες μπορούν να έχουν απλούς thin clients. Εφόσον όμως δεν έχουν μπροστά τους μια + απλή εφαρμογή WEB αλλά μια κανονική εφαρμογή συστήματος που έχει διαθέσιμους όλους τους πόρους ενός μηχανήματος τελικά τα περιφερειακά μηχανήματα είναι + thick clients. + +Και τα δύο περιβάλλοντα που αναφέραμε δεν λειτουργούν ακριβώς έτσι στην πραγματική ζωή και για αυτό συμβάλλουν κυρίως δύο λόγοι. Ό ένας είναι ότι απαιτείται ένα +γρήγορο δίκτυο (αν ο sys admin έχει απλό dial-up σπίτι του δεν μπορεί να κάνει και πολλά). Ο δεύτερος λόγος είναι η ασφάλεια την οποία θα αναφέρουμε και στο +επόμενο τμήμα του άρθρου. + + +### [3. X-Windows το πως (η αλλιώς η πράξη)]{#s3} + +Και ερχόμαστε στο πρακτικό κομμάτι του άρθρου. Δεν πρόκειται όμως να αναφερθούμε εκτενώς στις λεπτομέρειες καθώς αυτές είναι ήδη μαζεμένες στο Remote-X-apps +HOWTO το οποίο οφείλετε να διαβάσετε αν θέλετε πραγματικά να ασχοληθείτε με το \"άθλημα\". Θα περιοριστούμε λοιπόν σε μερικά μόνο σημαντικά σημεία. + +Καταρχήν πρέπει να ξέρετε τρία πράγματα πριν ξεκινήσετε οποιοδήποτε πείραμα. Πρώτον προσέξτε το firewall της διανομή σας. Μερικές διανομές έχουν ανάμεσα στις +προκαθορισμένες (default) ρυθμίσεις τους και ένα απλό firewall. Επειδή τα X-Connections δεν τρέχουν σε χαμηλές πόρτες (ports) (1-1024) αλλά συνήθως +χρησιμοποιούν πόρτες με αριθμό 6000 και κάτι ψιλά είναι πολύ πιθανό να μην μπορεί ο υπολογιστής που έχει τον X-Server να δεχτεί συνδέσεις. + +Δεύτερον πρέπει να δώσετε μεγάλη σημασία στο θέμα της ασφάλειας. Τα Χ-Windows πάσχουν από διάφορα προβλήματα ασφαλείας (βλέπε και telnet/ftp/rlogin) αν δεν +ρυθμιστούν σωστά. Αναφερόμαστε τόσο στο ποιος μπορεί να συνδεθεί στον X-server (authentication) όσο και στην ίδια την μεταφορά των δεδομένων μέσα από το δίκτυο. +Μην ξεχνάτε ότι ένας X-server είναι οθόνη και ποντίκι και πληκτρολόγιο. Έτσι θα μπορούσε ένας κακόβουλος χρήστης να συνδεθεί στον X-server σας και να βάλει τα +δικά του παράθυρα στην οθόνη σας. (κάτι που μπορεί να είναι αστείο). Θα μπορούσε όμως να φτιάξει και ένα πρόγραμμα που συνδέεται στον X-Server σας και διαβάζει +τι γράφετε στο πληκτρολόγιο (κάτι που δεν είναι καθόλου αστείο). + +Έτσι θα πρέπει στην καλύτερη περίπτωση να κάνετε τα πειράματα σας σε ένα μικρό δίκτυο που δεν διαθέτει εξωτερική σύνδεση στο Internet, ενώ στην χειρότερη σε ένα +καλά προστατευμένο δίκτυο πίσω από ένα \"σοβαρό\" (π.χ. εταιρικό) firewall. Μερικοί μπορεί να τα θεωρήσουν γελοία όλα αυτά, αλλά είναι καλό να είστε λίγο +περισσότερο παρανοϊκοί από όσο πρέπει στο θέμα της ασφάλειας. Δείτε και τα άλλα τεύχη του Magaz με θέμα την ασφάλεια δικτύων. + +Και τρίτον θα πρέπει ο ίδιος ο X-server να είναι ρυθμισμένος ώστε να δέχεται εξωτερικές συνδέσεις. Πάλι για λόγους ασφάλειας μερικές διανομές μπορεί να έχουν +απενεργοποιήσει αυτήν την λειτουργία. Εδώ πρέπει να ψάξετε την τεκμηρίωση της διανομής σας. Για XFREE86 αυτό μπορεί να είναι κάτι απλό όπως η παράμετρος +\"-nolisten tcp\". Τις περισσότερες φορές όμως αυτό είναι \"θαμμένο\" πίσω από διάφορα startup scripts και ο χρήστης έχει επιλογές \"υψηλότερου επιπέδου\". Θα +μπορούσε ας πούμε η διανομή σας να έχει σε κάποιο αρχείο ρυθμίσεων την γραμμή \"ALLOW\_REMOTE\_X\_CONNECTIONS=no\" την οποία εσείς πρέπει να αλλάξετε βέβαια σε +\"yes\". Δείτε πάλι την τεκμηρίωση της διανομή σας. Δεν έχει νόημα να μπούμε σε περίπλοκες λεπτομέρειες για το θέμα. + +Από την μεριά του X-client τα πράγματα είναι σχετικά απλά. Η μαγική λέξη είναι DISPLAY. Κάθεστε στον υπολογιστή, βάζετε στην μεταβλητή περιβάλλοντος +(environment variable) DISPLAY το όνομα (hostname) του υπολογιστή με τον X-Server προσθέτοντας και το display στο τέλος (στο 99% των περιπτώσεων θα είναι :0.0) +και τέλος τρέχετε το γραφικό πρόγραμμα που θέλετε. Αν όλα πάνε καλά θα πρέπει το πρόγραμμα να εμφανίσει το περιβάλλον του στον X-Server χρησιμοποιώντας όμως +πάντα τους πόρους (resources) του Χ-Client. Για tcsh/csh ας πούμε αυτό γίνεται + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >setenv DISPLAY xserver.example.gr:0.0 + >gftp + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αντίστοιχα και για άλλα shells (π.χ bash). Για περισσότερες λεπτομέρειες δείτε το HOWTO. + +Ας δούμε και τις ρυθμίσεις από την πλευρά του X-Server. + +### [3.1 Ο εύκολος τρόπος]{#ss3.1} + +Στην πιο απλή περίπτωση ο X-Server κρατάει μία λίστα με υπολογιστές (hostnames) που μπορούν να ανοίξουν μια σύνδεση με αυτόν. Η λίστα αυτή παραμετροποιείται με +την εντολή xhost. Η παράμετρος είναι ένα όνομα (hostname) που θέλετε να βάλετε ή να βγάλετε από την λίστα. Αυτό καθορίζεται με ένα + η - πριν από το όνομα +(χωρίς κάποιο κενό). Έτσι στον X-Server μπορείτε να τρέξετε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + xhost +xclient.example.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Και μόλις τελειώσετε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + xhost -xclient.example.gr. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Υπάρχει επίσης ή xhost + που επιτρέπει σε οποιονδήποτε να συνδεθεί (απαγορεύεται δια ροπάλου) και η xhost - που δεν αφήνει κανέναν να συνδεθεί εκτός από +X-Clients που τρέχουν στον ίδιο τον X-Server (localhost δηλαδή μονό). + +Όπως καταλάβατε αυτός ο τρόπος πιστοποίησης (authentication) ασχολείται μόνο με hostnames και δεν είναι καθόλου ασφαλής. Αν χρησιμοποιήσετε αυτόν τον τρόπο +σημαίνει ότι ξέρετε πολύ καλά τι κάνετε και ότι εμπιστεύεστε την ασφάλεια του δικτύου σας. Εμείς τον προτείνουμε μόνο για δοκιμές σε ένα μικρό προστατευμένο +τοπικό δίκτυο χωρίς σύνδεση στο δίκτυο. + +Προσέξτε επίσης ότι ακόμα και το xhost - δεν είναι 100% ασφαλές. Είναι δυνατόν κάποιος κακόβουλος χρήστης αντί να τρέξει τον keylogger του απομακρυσμένα, να +πάρει πρόσβαση στον υπολογιστή που τρέχει ο X-Server με τους συνήθεις τρόπους και μετά να \"ανεβάσει\" τον keylogger του και να τον τρέξει τοπικά. Τότε o +keylogger θα συνδέεται από τον υπολογιστή \"localhost\" που έχει πάντα πρόσβαση στον X-Server άσχετα με τα αποτελέσματα της εντολής xhost. + +### [3.2 Ο δύσκολος τρόπος]{#ss3.2} + +Ο δεύτερος τρόπος είναι με χρήση της εντολής xauth (σύστημα MIT-MAGIC-COOKIE-1) Σε αυτήν την περίπτωση ο XServer ξέρει μία \"μαγική λέξη\"(magic-cookie). Μόνο +όσοι X-Clients ξέρουν επίσης την ίδια ακριβώς μαγική λέξη μπορούν να ανοίξουν σύνδεση. Το \"μαγικό\" στην όλη υπόθεση αναφέρεται στο γεγονός ότι δεν έχει +σημασία τόσο το περιεχόμενο αυτής της λέξης όσο το ότι πρέπει να είναι η ίδια και από τις δύο μεριές (X-Server/X-Client) ώστε να ανοιχτεί επιτυχώς η σύνδεση. +Στα \"νεοελληνικά\" δηλαδή συνδέονται στον X-server μόνο όσοι X-clients έχουν το κοκκαλάκι της νυχτερίδας. + +Εδώ θα μπορούσαμε να αναφέρουμε άπειρες λεπτομέρειες για το πως μπορείτε να φτιάξετε τα cookies αυτά, πώς θα τα μεταφέρετε από τον X-server στον Χ-client, και +άλλα τεχνικά ζητήματα. Κάτι τέτοιο δεν έχει νόημα όμως γιατί όλα αυτά είναι ήδη γραμμένα στο Remote-X-Apps HOWTO και δεν πρόκειται να ασχοληθούμε ξανά εδώ με τα +ίδια θέματα. + +Θα σταθούμε μόνο σε δύο σημαντικά σημεία. Το ένα είναι ότι με το xauth μπορείτε να καθορίσετε την πρόσβαση σε επίπεδο χρήστη πια (και όχι σε επίπεδο υπολογιστή +όπως το xhost) κάτι το οποίο είναι απαραίτητο σε ένα μέσο/μεγάλο τοπικό δίκτυο έτσι και αλλιώς. Το δεύτερο σημείο είναι ότι για να χρησιμοποιήσετε αυτόν τον +τρόπο πιστοποίησης πρέπει να τρέξετε τον XServer με την παράμετρο -auth και το όνομα του αρχείου που περιέχει το cookie ( /.Xauthority). + +### [3.3 Ο ασφαλής τρόπος]{#ss3.3} + +Σχεδόν πάντα βέβαια ο χρήστης κάθεται στον X-server (= οθόνη, πληκτρολόγιο και ποντίκι). Επομένως μέσα από telnet στον X-client ξεκινάει την γραφική εφαρμογή +που τον ενδιαφέρει και εφόσον έχει θέσει την μεταβλητή περιβάλλοντος DISPLAY το πρόγραμμα θα εμφανιστεί στην οθόνη που έχει μπροστά του. Αυτό όμως σημαίνει +βέβαια ότι τα δεδομένα περνάνε μέσα από το δίκτυο χωρίς καμία κάλυψη (αναφερόμαστε γενικότερα στην απομακρυσμένη σύνδεση). Υπάρχει ο όμως και η λύση του ssh +(secure shell). Σε αυτήν την περίπτωση έχετε αυτομάτως κρυπτογραφημένα δεδομένα. Πιο ενδιαφέρον είναι το γεγονός ότι μέσω της παραμέτρου -Χ λέτε στο ssh ότι +θέλετε X forwarding. Αυτό αυτοματοποιεί την όλη διαδικασία Δηλαδή + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + >ssh -X xclient.example.gr + >gftp. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Εννοείται βέβαια ότι πρέπει να έχετε στήσει τον αντίστοιχο δαίμονα (sshd) στο μηχάνημα. Για άλλη μία φορά δείτε το αντίστοιχο HOWTO για τις λεπτομέρειες. + + +### [4. Άλλα θέματα και επίλογος]{#s4} + +Θα μπορούσαμε να συνεχίσουμε να απαριθμούμε και άλλες δυνατότητες των X-Windows τότε όμως το άρθρο αυτό θα έχανε τον εισαγωγικό του χαρακτήρα. Οφείλετε ανάλογα +με τις ανάγκες σας να δείτε τι σας ενδιαφέρει και πως μπορείτε να το χρησιμοποιήσετε στο δικό σας περιβάλλον. Ορίστε μερικές άλλες ιδέες. + +Displays/screens. + +Μπορείτε να έχετε περισσότερα από ένα Χ displays σε έναν υπολογιστή και να αλλάζετε μεταξύ τους ακριβώς όπως αλλάζετε τις κονσόλες σας με Ctrl-alt-Fx. Έτσι +μπορείτε να έχετε και δύο χρήστες ταυτόχρονα στο ίδιο μηχάνημα με εντελώς διαφορετικό περιβάλλον την ίδια στιγμή. Επίσης είναι δυνατόν να έχετε δύο φυσικές +οθόνες σε έναν υπολογιστή αν η κάρτα γραφικών σας το επιτρέπει. Τα X-Windows το υποστηρίζουν και αυτό. + +Xinerama. + +Το xinerama είναι μια επέκταση (Extension) που σας επιτρέπει να έχετε ένα \"ενοποιημένο\" περιβάλλον από πολλές οθόνες. Φανταστείτε παράθυρα που τα κάνετε drag +and drop από την μία οθόνη στην άλλη και μακρόστενες ταπετσαρίες (backgrounds) στο υπολογιστικό σας περιβάλλον. + +x2x + +Το x2x είναι ένα μικρό προγραμματάκι που σας επιτρέπει να ενώσετε δύο X-displays. Προσέξτε όμως ότι δεν είναι απαραίτητο να είναι στον ίδιο υπολογιστή. Δεν +είμαστε σίγουροι για την σημερινή κατάσταση του προγράμματος μέχρι πρόσφατα πάντως ήταν μέσα στο Debian archive. + +xnest. + +Ένα διασκεδαστικό πρόγραμμα (κατά την γνώμη του αρθρογράφου). Σας επιτρέπει να έχετε ένα Χ-display μέσα σε ένα παράθυρο μέσα σε άλλο X-display. Φανταστείτε τον +άνθρωπο που κρατάει έναν καθρέφτη και επειδή είναι ο ίδιος μπροστά από έναν δεύτερο καθρέφτη η αντανάκλαση είναι ό ίδιος και μέσα στον καθρέφτη που κρατάει +φαίνεται ο ίδιος και μέσα στον καθρέφτη που κρατάει κ.τ.λ. + +XDMCP + +Το XDMCP είναι ένα πρωτόκολλό που σας επιτρέπει να πάτε ένα επίπεδο πιο πάνω. Αντί δηλαδή να έχετε X-clients μέσα από το δίκτυο έχετε ολόκληρα X-sessions. Αν +ασχοληθείτε προσέξτε πάλι το θέμα ασφάλειας. + +vnc. + +Το vnc (virtual network computing) δεν έχει άμεση σχέση με τα X-windows, δεν θα μπορούσαμε όμως να μην το αναφέρουμε. Σας επιτρέπει να έχετε remote desktops +ανάμεσα σε διαφορετικούς υπολογιστές ακόμα και αν αυτοί τρέχουν μονολιθικά λειτουργικά συστήματα. Ουσιαστικά δηλαδή μπορείτε να κάνετε αυτό που κάνουν τα +X-windows εγγενώς ακόμα και αν τα λειτουργικά σας δεν τρέχουν X-windows. Προφανώς πρέπει το ίδιο το λειτουργικό σύστημα να υποστηρίζεται από το vnc. ΤΟ vnc +βασίζεται στην λογική client-server. Εδώ όμως η ορολογία είναι η \"φυσική\". Ο υπολογιστής με τον vnc server σερβίρει το desktop του στον vnc client στον οποίο +κάθεται και ο χρήστης. Υπάρχει και java based client που μπορεί να τρέχει και σε Web browser. Ένα μειονέκτημα του vnc είναι ότι πραγματικά σας δίνει τον έλεγχο +του desktop δηλαδή δεν μπορεί και κάποιος άλλος να χρησιμοποιήσει τον server ταυτόχρονα με εσάς. Και αν κάποιος κάθεται εκεί δίπλα θα βλέπει στην οθόνη του +server ακριβώς αυτά που κάνετε από τον client (ναι ακόμα και την κίνηση του ίδιου του mouse pointer). Δείτε επίσης και το tightvnc. + +- Πηγές +- Remote-X-Apps howto +- Xwindow-USer-howto +- XDMCP HOWTO + diff --git a/content/articles/35/02_kernel-shrink.md b/content/articles/35/02_kernel-shrink.md new file mode 100644 index 0000000..95e85f4 --- /dev/null +++ b/content/articles/35/02_kernel-shrink.md @@ -0,0 +1,240 @@ ++++ +title = 'Αγάπη μου, Συρρίκνωσα τον Πυρήνα!' +date = '' +description = '' +author = 'Παντελής Κουκούσουλας' +issue = ['Magaz 35'] +issue_weight = 2 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Βελτιστοποιώντας ένα πυρήνα της σειράς 2.6 για χρήση σε παλαιότερα / ενσωματωμένα συστήματα.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +----------------------------------------------- + +**2. Ξεκινώντας - Διαμόρφωση του πυρήνα** +------------------------------------------------------------------------- + +**3. Παίζοντας με τις επιλογές του μεταγλωττιστή** +---------------------------------------------------------------------------------- + +**4. Το -tiny patchset** +-------------------------------------------------------- + +**5. Άλλες επεμβάσεις** +------------------------------------------------------- + +**6. Συμπεράσματα** +--------------------------------------------------- + +**7. Αναφορές** +----------------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Είναι γεγονός! Η νέα σειρά πυρήνων 2.6 είναι εδώ και υπόσχεται να κάνει τη συμβίωση με τον υπολογιστή μας αρκετά πιο ευχάριστη! Preemptible kernel, βελτιωμένο +σύστημα διαχείρισης μνήμης και άλλες αλλαγές όλα συμβάλλουν σε ακόμα καλύτερη απόδοση των μηχανημάτων μας! + +Στο άρθρο αυτό, θα προσπαθήσουμε να εκμεταλλευτούμε τα οφέλη από τις παραπάνω καινοτομίες και σε παλαιότερα μηχανήματα που πιθανώς χρησιμοποιούμε, μέσω μιας +σειράς παρεμβάσεων στον πυρήνα, οι οποίες στοχεύουν στη μείωση των απαιτήσεών του σε μνήμη, καθώς και του χρόνου που χρειάζεται για την εκκίνηση (booting time). +Για να βεβαιωθούμε ότι οι τεχνικές μας είναι εφαρμόσιμες σε όσο το δυνατόν περισσότερα συστήματα, θα τις δοκιμάσουμε σε ένα μηχάνημα που πλησιάζει τις ελάχιστες +απαιτήσεις του Linux, δηλ. σε ένα 386sx/25 με 4mb RAM και 40 Mb σκληρό. Έτσι, όσοι έχουν ανώτερα από αυτό συστήματα θα μπορέσουν να υιοθετήσουν μόνο τις +αναγκαίες γι αυτούς παρεμβάσεις από αυτές που θα παρουσιαστούν στη συνέχεια. + +Για την αξιολόγηση κάθε τεχνικής, μετράμε σε κάθε ενδιάμεσο στάδιο το μέγεθος του ασυμπίεστου πυρήνα (vmlinux), το μέγεθος του συμπιεσμένου πυρήνα (system size +- vmlinux.bin), το μέγεθος του συμπιεσμένου αρχείου (bzImage), την ελεύθερη μνήμη που αφήνει για τις εφαρμογές ο πυρήνας αμέσως μετά την εκκίνηση (από τα 4mb) +και το χρόνο από το πάτημα του κουμπιού \"power\" στον 386 μέχρι την εμφάνιση του prompt (χρόνος εκκίνησης). Ειδικά τα δύο τελευταία μετρούν σε μεγάλο βαθμό την +εφαρμοσιμότητα του πυρήνα σε κάποιο μηχάνημα. Για την εκκίνηση του μηχανήματος χρησιμοποιείται το init του busybox, το οποίο τρέχει ένα ιδιαίτερα στοιχειώδες +bootscript (/etc/rcS) που δεν αναμένεται να προσθέσει περισσότερο από μισό με ένα δευτερόλεπτο στο χρόνο εκκίνησης. Έτσι, ο τελευταίος καθορίζεται σε μεγάλο +βαθμό από τον πυρήνα. + +Εννοείται ότι καθώς οι επεμβάσεις στον πυρήνα και το BIOS είναι εξίσου επικίνδυνες για την υγεία του υλικού σας με τον υπερχρονισμό (overclocking), ο γράφων δεν +δίνει καμία εγγύηση ότι οι παρακάτω ενέργειες θα δουλέψουν για εσάς χωρίς προβλήματα κλπ. καθώς και παραιτείται από κάθε ευθύνη για τις επιπτώσεις του υπόλοιπου +άρθρου στη λειτουργία του Η/Υ σας, τις σχέσεις με το έτερον ήμισυ, την ψυχική υγεία του σκύλου σας ή οτιδήποτε άλλο. + +Ας μη σπαταλάμε όμως άλλο χρόνο στα εισαγωγικά και ας περάσουμε στην καθαυτό συρρίκνωση του πυρήνα μας! + + +### [2. Ξεκινώντας - Διαμόρφωση του πυρήνα]{#s2} + +Για να μπορούμε να μετρήσουμε το όφελος των βελτιστοποιήσεων μας, χρειαζόμαστε ένα σύστημα αναφοράς. Ξεκινάμε λοιπόν κατεβάζοντας ένα πυρήνα 2.6.5 από το +gr.kernel.org. Καθώς θέλουμε το ελάχιστο δυνατό μέγεθος για το bzImage του, (ώστε να φορτώνει γρήγορα στη μνήμη κατά την εκκίνηση), θα μεταγλωττίσουμε μόνο την +απαραίτητη λειτουργικότητα για την εκκίνηση και την προσάρτηση του θεμελιώδους (root) partition στον πυρήνα. Όλη η υπόλοιπη λειτουργικότητα (δηλ. οι δυνατότητες +που δεν θα χρησιμοποιούνται συνέχεια και ταυτόχρονα), θα μεταγλωττιστεί ως modules. Έτσι πετυχαίνουμε γρήγορη εκκίνηση χωρίς να θυσιάζουμε λειτουργικότητα (δεν +φορτώνουμε modules κατά την εκκίνηση παρά μόνο τη στιγμή που θα χρειαστούν). + +Στην περίπτωσή μου, έκανα τις εξής επιλογές: (όποιο μενού δεν αναφέρω, σημαίνει ότι τα αφήνουμε όλα ως έχουν): + +- Στο μενού General Setup: Επιλέγουμε μόνο την υποστήριξη για swap και System V IPC. Επίσης μπαίνουμε στο μενού Remove kernel features και αφήνουμε επιλεγμένα + μόνο τον deadline I/O scheduler και το futex support. Δεν επιλέγουμε το optimize for size γιατί θέλουμε να αρχίσουμε με ένα vanilla (και όσο το δυνατόν πιο + σταθερό) kernel. +- Στο μενού Loadable module Support: Επιλέγουμε μόνο τα \"Enable loadable module support\" και \"Module unloading\". +- Στο Μενού Processor type and features: Επιλέγουμε μόνο τον τύπο του επεξεργαστή μας (σε εμένα pc-compatible και 386), το \"preemptible kernel\" και το math + emulation (εκτός αν ο υπολογιστής μας έχει FPU - από 486dx και πάνω δηλαδή) +- Στο Μενού Power management options: Αποεπιλέγουμε τα πάντα (προσοχή γιατί το ACPI είναι επιλεγμένο). +- Στο Μενού Bus Options: Αφήνουμε μόνο το ISA Support (καθώς οι 386 έχουν μόνο ISA slots). +- Στο Executable File Formats: Αφήνουμε μόνο το elf. +- Στο device drivers: Επιλέγουμε μόνο τα ATA/ATAPI/κλπ support, Old hard disk driver, Networking support, Network device support, TCP Networking, i8042 PC + Keyboard controller, keyboards, AT Keyboard support, Virtual Terminal, console on virtual terminal και Unix98 PTY Support. +- Στο μενού file systems, επιλέγουμε μόνο το minix (ή το ext2) filesystem και το /proc filesystem. +- Αποεπιλέγουμε όλες τις επιλογές των υπόλοιπων μενού. (Ότι χρειαζόμαστε, το διαλέγουμε ως module) + +Για να μην πληκτρολογείτε άσκοπα, μπορείτε να βρείτε το .config που χρησιμοποίησα [εδώ](http://www.intelligence.tuc.gr/~pantelis/linuxlite/initial.config). Για +να το χρησιμοποιήσετε, απλώς το τοποθετείτε στον κύριο κατάλογο του κώδικα του Linux και το ονομάζετε .config. Μετά κάνετε: make oldconfig + +Ονομάζουμε τον πυρήνα που προέκυψε από αυτή τη διαδικασία (με make bzImage) \"kernel-initial\". Ο πυρήνας αυτός έχει τα ακόλουθα χαρακτηριστικά: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Μέγεθος vmlinux: 1.5Mb + Μέγεθος system: 604kb + Μέγεθος bzImage: 612kb + Ελεύθερη μνήμη: 1484kb + Χρόνος εκκίνησης: 32s + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για τη μεταγλώττιση του παραπάνω πυρήνα χρησιμοποιήσαμε τη gcc-2.95.3 που συνιστά η ομάδα ανάπτυξης του πυρήνα, για μέγιστη δυνατή σταθερότητα. Αν και όπως +παρατηρούμε ο πυρήνας που προέκυψε (στο εξής θα αναφερόμαστε σε αυτόν ως kernel-initial) είναι ήδη αρκετά μικρός, θα προσπαθήσουμε για ακόμα καλύτερα +αποτελέσματα, δεδομένου ότι στον 386 κάθε βελτίωση είναι αισθητή. + + +### [3. Παίζοντας με τις επιλογές του μεταγλωττιστή]{#s3} + +Ως γνωστόν, το μεγαλύτερο μέρος του Linux είναι γραμμένο στη γλώσσα προγραμματισμού C, η οποία όπως όλες οι γλώσσες υψηλού επιπέδου, βασίζεται σε ένα ειδικό +πρόγραμμα (το μεταγλωττιστή) για την μετατροπή της σε γλώσσα μηχανής. Είναι λοιπόν λογικό, ότι ενεργοποιώντας συγκεκριμένες επιλογές του τελευταίου, θα +μπορέσουμε να επηρεάσουμε λίγο ως πολύ τα χαρακτηριστικά του τελικού πυρήνα. + +Η μέθοδος των επιλογών του μεταγλωττιστή έχει το πλεονέκτημα ότι προσφέρει μείωση του μεγέθους του τελικού πυρήνα, χωρίς επέμβαση στον πηγαίο κώδικα, άρα είναι +πιο γενικά εφαρμόσιμη. Από την άλλη, λάθη στην υλοποίηση του μεταγλωττιστή τείνουν να παρουσιάζονται ευκολότερα αν έχουμε ενεργοποιήσει ασυνήθιστες επιλογές και +μπορούν να προξενήσουν ένα μη λειτουργικό πυρήνα! + +Καταρχήν, για να έχουμε τα καλύτερα δυνατά αποτελέσματα, θα χρησιμοποιήσουμε την πιο πρόσφατη έκδοση του μεταγλωττιστή gcc (3.4.0). Στην έκδοση αυτή, το +υποσύστημα που αναλαμβάνει τη βελτιστοποίηση έχει βελτιωθεί αρκετά, οδηγώντας σε μικρότερο και γρηγορότερο κώδικα. Οι επιλογές (options) που θα χρησιμοποιήσουμε +φαίνονται παρακάτω: + +- -Os. Η πιο γνωστή επιλογή για τέτοιες δουλειές, λέει στο μεταγλωττιστή να μικρύνει όσο μπορεί τον τελικό κώδικα ακόμη και σε βάρος της απόδοσης. Βέβαια, + λόγω του τρόπου με τον οποίο λειτουργούν τα σύγχρονα μηχανήματα, διάφορες φήμες λένε ότι στην πραγματικότητα οι πυρήνες γίνονται εξίσου ή ίσως και λίγο πιο + γρήγοροι με αυτή την επιλογή. Για να ενεργοποιήσουμε την -Os, επιλέγουμε \"optimize for size\" στο μενού \"Remove kernel features\" +- -funit-at-a-time. Επιλέγεται αυτόματα αν χρησιμοποιούμε τη gcc-3.4.0 ή νεώτερη. Λέει στο μεταγλωττιστή να φορτώνει ολόκληρο το κάθε αρχείο στη μνήμη, πριν + αρχίσει την παραγωγή τελικού κώδικα (μηχανής). Η περισσότερη πληροφορία που έχει έτσι ο μεταγλωττιστής στη διάθεσή του, οδηγεί στην καλύτερη απόρριψη + άχρηστου κώδικα μεταξύ άλλων. Το μόνο κόστος αυτής της επιλογής είναι λίγη παραπάνω μνήμη στο μηχάνημα που θα κάνει τη μεταγλώττιση. +- -mregparm=3. Η λιγότερο ασφαλής από τις επιλογές, αλλά και αυτή με το μεγαλύτερο όφελος. Αν ενεργοποιηθεί, αλλάζει τον τρόπο κλήσης των συναρτήσεων στον + κώδικα του πυρήνα. Έτσι, για τα πρώτα τρία ορίσματα κάθε συνάρτησης δεν θα χρησιμοποιείται πλέον η στοίβα (μικρή περιοχή της RAM) αλλά οι καταχωρητές, δηλ η + γρηγορότερη (και μικρότερη) μορφή μνήμης σε ένα υπολογιστή. Έτσι ο πυρήνας γίνεται όχι μόνο μικρότερος αλλά και γρηγορότερος. Το μειονέκτημα είναι ότι λόγω + αυτής της αλλαγής, τυχόν binary modules που χρησιμοποιούμε (π.χ. drivers της nVidia ή ασύρματων καρτών γραφικών) παύουν αυτομάτως να λειτουργούν! Βέβαια, + επειδή πρακτικά όλοι οι οδηγοί για ένα παλιό μηχάνημα είναι λογισμικό ανοιχτού κώδικα, η επιλογή αυτή θα μπορέσει να ωφελήσει τους περισσότερους, χωρίς + τέτοιου είδους προβλήματα. + +Θα ονομάσουμε τον πυρήνα που προέκυψε από αυτές τις αλλαγές kernel-opts. Τα χαρακτηριστικά του φαίνονται παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Μέγεθος vmlinux: 1.4Mb + Μέγεθος system: 527kb + Μέγεθος bzImage: 536kb + Ελεύθερη μνήμη: 1616Kb + Χρόνος εκκίνησης: 27s + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Όπως παρατηρούμε, καταφέραμε να γλιτώσουμε περίπου 100kb από ένα ήδη σχετικά μικρό πυρήνα, απλώς με την αναβάθμιση της gcc και την ενεργοποίηση 2 επιλογών! Σε +μεγαλύτερους πυρήνες μάλιστα έχουν αναφερθεί μειώσεις μεγέθους της τάξεως των 300kb. Τις παραπάνω επιλογές καλό θα ήταν να σκεφτούν και οι κάτοχοι καινούργιων +μηχανημάτων, τουλάχιστον όσοι δε χρησιμοποιούν binary drivers. + + +### [4. Το -tiny patchset]{#s4} + +Για ακόμα δραστικότερες μειώσεις μεγέθους, ο μόνος τρόπος είναι να επέμβουμε στον κώδικα του πυρήνα. Αυτό άλλωστε είναι ένα από τα σημαντικότερα πλεονεκτήματα +του open source! Ο μόνος κίνδυνος είναι ότι με τις επεμβάσεις μας μπορεί να εισάγουμε νέα λάθη τα οποία θα κάνουν ίσως κάποιο καιρό να ανακαλυφθούν, ανάλογα και +με τη δημοτικότητα των αλλαγών μας. Αν δεν είμαστε προγραμματιστές, ή θέλουμε κάποιο καλό σημείο εκκίνησης, ο Matt Mackall διατηρεί ένα σύνολο τέτοιων +επεμβάσεων (patches) που σκοπό έχουν να κάνουν τον καινούργιο πυρήνα φιλικότερο σε παλαιότερα ή ενσωματωμένα μηχανήματα, καθώς διαπιστώνει ότι η προσοχή του +Linux μετακινήθηκε από αυτά \"από τότε που ο Linus βρήκε μια πραγματική δουλειά\". + +Οι αλλαγές αυτές αποτελούν το -tiny patchset, διαθέσιμο στη διεύθυνση www.selenic.com/tiny. Εφαρμόζοντας το patch αυτό στον πυρήνα μας, παρατηρούμε ότι μια +σειρά από νέες επιλογές εμφανίζονται κάτω από το μενού \"Remove kernel features\", το οποίο μάλιστα αλλάζει όνομα σε \"Configure standard kernel features (for +small devices)\". Οι επιλογές αυτές ρυθμίζουν διάφορες παραμέτρους του \"εσωτερικού\" του πυρήνα δίνοντάς μας τη δυνατότητα να μικρύνουμε το μέγεθος διάφορων +εσωτερικών δομών αλλά και γενικότερα να προσαρμόσουμε τον πυρήνα στα ιδιαίτερα χαρακτηριστικά του μηχανήματός μας. + +Οι επιλογές που αξίζει να ενεργοποιήσουμε σε αυτό το μενού είναι: \"various size reductions for core\" (και networking), futex support, POSIX file locking API, +Deadline I/O Scheduler, Optimize for size (και with register passing), Set compiler arch flags .. (-march=i386), sys file system (υποχρεωτικά!), support for +executable shell scripts, block device support και από supported processor vendors, μόνο αυτόν που έχει φτιάξει τον επεξεργαστή μας (για μένα intel). Επίσης +number of swap files = 0 (δηλαδή επιτρέπουμε ένα μόνο swap file (δεν ξέρω κανένα να χρησιμοποιεί παραπάνω από 1 έτσι κι αλλιώς, πόσο μάλλον σε ένα σκληρό των +40Mb!), 4 tty line disciplines (είναι αρκετά), 10 realtime priority levels (μικραίνει τις δομές του δρομολογητή - scheduler) και 100Hz timer interrupts per +second. Η τελευταία επιλογή είναι πολύ σημαντική για τη γρήγορη λειτουργία του υπολογιστή μας καθώς με περισσότερα Hz έχουμε μεν μεγαλύτερη ακρίβεια και +καλύτερο χρόνο απόκρισης αλλά και μεγαλύτερο overhead το οποίο αφαιρεί πολύτιμους κύκλους από τους ήδη λίγους του επεξεργαστή μας. Τα 100Hz είναι κατά τη γνώμη +μου ένας καλός συμβιβασμός για προ pentium επεξεργαστές. + +Φυσικά και πάλι για να μην πληκτρολογείτε άσκοπα, το .config που χρησιμοποίησα βρίσκεται [εδώ](http://www.intelligence.tuc.gr/~pantelis/linuxlite/tiny.config). +Τα χαρακτηριστικά του πυρήνα που προκύπτει από αυτή τη διαμόρφωση (kernel-tiny) φαίνονται παρακάτω. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Μέγεθος vmlinux: 1.2Mb + Μέγεθος system: 446kb + Μέγεθος bzImage: 456kb + Ελεύθερη μνήμη: 2052kb + Χρόνος εκκίνησης: 43s + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Είναι εύκολο να παρατηρήσουμε τη σημαντική οικονομία σε μνήμη που πετύχαμε με τις παραπάνω επιλογές, διατηρώντας παράλληλα τη λειτουργικότητα που θέλαμε και ένα +σχετικά σταθερό πυρήνα. Το περίεργο που προέκυψε είναι ότι ο χρόνος αποσυμπίεσης του νέου πυρήνα έγινε σημαντικά μεγαλύτερος, πράγμα που αποτελεί την κύρια +αιτία για την (ομολογουμένως σημαντική) αύξηση του χρόνου εκκίνησης. Η αύξηση αυτή πιστεύω ότι οφείλεται στις αλλαγές στον κώδικα αποσυμπίεσης του πυρήνα που +περιλαμβάνονται στο -tiny patchset και σκοπό έχουν τη μείωση του μεγέθους εις βάρος της ταχύτητας. Παρόλα αυτά, το πρόβλημα αυτό δεν μας αφορά ιδιαίτερα καθώς +θα προτείνουμε μια πολύ καλύτερη λύση για τη συμπίεση στην επόμενη ενότητα. + + +### [5. Άλλες επεμβάσεις]{#s5} + +Έχοντας δοκιμάσει τον προηγούμενο πυρήνα και βεβαιωθεί ότι δουλεύει και μάλιστα πολύ καλά και σταθερά για τις εφαρμογές που θέλουμε να τον χρησιμοποιήσουμε, +μπορούμε να προβούμε και σε πιο δραστικές λύσεις, προκειμένου να ελευθερώσουμε ακόμα περισσότερη μνήμη, όπως το να απενεργοποιήσουμε τα μηνύματα του πυρήνα +(printk) και τον κώδικα ανίχνευσης και αναφοράς των kernel panics. Οι επιλογές αυτές είναι αρκετά πιο επικίνδυνες από τις προηγούμενες και επίσης δεν προσφέρουν +τόσα οφέλη, αλλά σε ένα μηχάνημα με π.χ. 2mb RAM είναι μάλλον αναγκαίες για να μπορέσει να λειτουργήσει έστω και στοιχειωδώς. + +Τέλος, για ιδιαίτερα γρηγορότερη αποσυμπίεση καθώς και ακόμα μικρότερο μέγεθος bzImage, μπορούμε να συμπιέσουμε τον πυρήνα μας με το upx 1.90. Αν και ο +συμπιεστής αυτός δεν είναι ανοιχτό λογισμικό, ο αποσυμπιεστής (που βάζει στο αρχείο του πυρήνα) είναι και μας δίνει το πλεονέκτημα αφενός της καλύτερης +συμπίεσης από το gzip (376kb αντί για 436kb τελικό αρχείο) και αφετέρου της τρομερά γρηγορότερης αποσυμπίεσης (περίπου 2x). Επίσης, ο αποσυμπιεστής έχει μέγεθος +μόνο μερικά bytes! (είναι γραμμένος σε assembly). + +Έτσι φτάνουμε στον τελικό πυρήνα που έχει τα παρακάτω χαρακτηριστικά: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Μέγεθος vmlinux: 1.2Mb + Μέγεθος system: 424kb + Μέγεθος bzImage: 376kb + Ελεύθερη μνήμη: 2112kb + Χρόνος εκκίνησης: 15s + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Από εδώ κι εμπρός, υπάρχουν μεν κι άλλα πράγματα που μπορεί κάποιος να κάνει για ακόμα μικρότερους πυρήνες αλλά όλα περιλαμβάνουν αρκετό κόπο για ελάχιστα +παραπάνω οφέλη, όποτε θα σταματήσουμε εδώ. Έτσι κι αλλιώς, τα 15s του χρόνου εκκίνησης είναι ήδη λιγότερα από τους χρόνους των περισσότερων φίλων μου με πολύ +γρηγορότερους υπολογιστές από τα 8.19 BogoM\*ps του 386! (οι οποίοι όμως τρέχουν μη βελτιστοποιημένους πυρήνες και init sequences). + + +### [6. Συμπεράσματα]{#s6} + +Εκμεταλλευόμενοι το νεότερο μεταγλωττιστή και τις μεγαλύτερες δυνατότητες διαμόρφωσης του νέου πυρήνα, καταφέραμε να μειώσουμε σημαντικά το μέγεθός του (από 612 +σε 376kb για το bzImage) καθώς και το χρόνο εκκίνησης του συστήματος (σε λιγότερο από το μισό - από 32 σε 15 second!) φέρνοντας μάλιστα τον τελευταίο κοντά στα +επίπεδα του dos ( 12s γιατί το dos χρειάζεται περισσότερες λειτουργίες από το BIOS τις οποίες μπορούμε να απενεργοποιήσουμε όταν χρησιμοποιούμε το Linux). + +Ο πυρήνας που προέκυψε μπορεί άνετα να χρησιμοποιηθεί σε μηχανήματα με ακόμα και 4 (ή και 3Mb) RAM, επιτρέποντάς τους να εκμεταλλευτούν τις νέες δυνατότητες που +προσφέρει (καλύτερη δικτύωση, καλύτερη υποστήριξη εφαρμογών πραγματικού χρόνου κλπ). Στη δική μου περίπτωση, ο 386 μπόρεσε με αυτό τον τρόπο να βγει από την +αχρησία και απέκτησε αρκετές πρωτότυπες εφαρμογές (streaming video σε ascii-art! αλλά αυτό είναι μια άλλη ιστορία). + +Αναστήστε λοιπόν κι εσείς τους παλιούς σας υπολογιστές και γελάστε άφοβα στα μούτρα όσων σας πουν ότι τα Longhorn θα χρειάζονται επεξεργαστή 2GHz και μνήμη +512Mb μόνο για να ξεκινήσουν!!!. + + +### [7. Αναφορές]{#s7} + +- Shrinking the kernel with gcc (LWN) - http://lwn.net/Articles/67175/ +- Linux: Reducing Disk And Memory Footprint - http://kerneltrap.org/node/view/1769 +- UPX 1.90: http://upx.sourceforge.net/ + diff --git a/content/articles/35/03_squid.md b/content/articles/35/03_squid.md new file mode 100644 index 0000000..86604c2 --- /dev/null +++ b/content/articles/35/03_squid.md @@ -0,0 +1,324 @@ ++++ +title = 'Bandwith Limiting using Squid Proxy Server with Delay Pools and CBQ' +date = '' +description = '' +author = 'Αντώνιος Χάψας' +issue = ['Magaz 35'] +issue_weight = 3 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένα από τα κοινά προβλήματα που αντιμετωπίζει κάποιος στο μοίρασμα μιας σύνδεσης είναι ο σωστός καταμερισμός του bandwith και ο τρόπος διαχείρισης των χρηστών +κατά τέτοιο τρόπο ώστε να υπάρξει η μέγιστη χρήση του δικτύου και η ισόποση κατανομή πακέτων σε όλους. Το παρακάτω κείμενο είναι μια μικρή προσπάθεια επίλυσης +ενός τέτοιου προβλήματος.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Σενάριο** +-------------------------------------- + +**2. Τι θα χρειαστούμε** +------------------------------------------------ + +**3. Εγκατάσταση Squid Proxy with Delay Pools Enabled** +------------------------------------------------------------------------------- + +- [3.1 Παράδειγμα 1](#ss3.1) +- [3.2 Παράδειγμα 2](#ss3.2) + +**4. Introducing CBQ (What is CBQ ?)** +-------------------------------------------------------------- + +**5. About** +------------------------------------ + +**6. Τέλος** +------------------------------------ + + +### [1. Σενάριο]{#s1} + +Ας υποθέσουμε ότι έχουμε μια dsl γραμμή και 5 χρήστες που μοιράζονται αυτή την σύνδεση μέσω ενός proxy server που τρέχει linux. Θα θέλαμε για παράδειγμα όταν +κατεβάζουν όλοι διάφορα αρχεία από internet να έχουν συγκεκριμένη ταχύτητα πχ. 15 kb/s, κάποιος που κατεβάζει παραπάνω από 2 ώρες να πέφτει η ταχύτητά του στα 5 +kb/s (ποίος κατεβάζει συνέχεια ταινίες ?!) και κάποιος που κατεβάζει π.χ. ένα αρχείο .avi η ταχύτητά του να μην ξεπερνάει τα 2kb/s (ας πρόσεχε !). Η λύση σε +αυτό γίνεται με την χρήση magic word πχ. .mp3,.exe,.zip. + + +### [2. Τι θα χρειαστούμε]{#s2} + +Καταρχήν ένα pc που τρέχει linux, (στην δικιά μας περίπτωση έτρεχε Mandrake 9.1 αλλά έχει δοκιμαστεί και σε RedHat 6.2, οπότε λογικά πρέπει να παίζει και σε +άλλες γνωστές εκδόσεις) μια κάρτα δικτύου σε αυτό και μπόλικη όρεξη. Αυτός ο οδηγός προϋποθέτει ότι υπάρχουν οι βασικές γνώσεις Linux και για αυτό δεν θα +σταθούμε αναλυτικά σε εντολές bash. Κατεβάζουμε το squid source από http://www.squid-cache.org, στην συγκεκριμένη περίπτωση το squid είχε έκδοση +squid-2.5.STABLE4 (έχει δοκιμαστεί και με παλιότερα sources). Για να υπάρχει καλύτερη απόδοση προτείνεται να υπάρχει ένας ξεχωριστός δίσκος που θα υπάρχει η +cache του proxy. + + +### [3. Εγκατάσταση Squid Proxy with Delay Pools Enabled]{#s3} + +Σε κονσόλα πάντα προσθέτουμε τον χρήστη squid (αν δεν υπάρχει, αν υπάρχει τον αφαιρούμε με userdel) αφού έχουμε φτιάξει ένα directory με όνομα cache: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Κανένας δεν μπορεί να κάνει login σαν χρήστης squid εννοείται και ο root. Αυτό είναι ένα βήμα βέλτιστης ασφάλειας που μπορεί βεβαίως να παραλειφθεί αν δεν +υπάρχει άμεσος κίνδυνος. (πάντα υπάρχει !) + +Αφού έχουμε κατεβάσει το squid source το αποσυμπιέζουμε πχ. στο /tmp: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # cd/tmp + # tar xzfv squid-2.5.STABLE4-src.tar.gz + # cd squid-2.5.STABLE4 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Είμαστε έτοιμοι για το compile. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #./configure --prefix=/opt/squid --exec-prefix=/opt/squid --enable-delay-pools --enable-cache-digests \ + --enable-poll --disable-ident-lookups --enable-truncate --enable-removal-policies + # make all + # make install + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αφού ολοκληρώσουμε επιτυχώς o squid έχει εγκατασταθεί στο /opt/squid. Και για να είμαστε σίγουροι ότι τα πάντα κάτω από το /opt/squid και /cache ανήκει στον +χρήστη squid γράφουμε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # chown -R squid:squid /opt/squid + # chown -R squid:squid /cache + + ή + + # chown -R squid.squid /opt/squid + # chown -R squid.squid /cache. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Υποθέτουμε ότι το δίκτυο μας είναι το 192.168.0.0/24. Μετά πάμε στο /opt/squid/etc/squid.conf που είναι το σημαντικότερο βήμα. Ένα τυπικό squid.conf είναι το +παρακάτω: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # SQUID CONFIGURATION FILE + # by Αντώνιος Χάψας © 2003. + visible_hostname Dias #Your name pc + http_port 8080 + icp_port 3130 + acl QUERY urlpath_regex cgi-bin ? + no_cache deny QUERY + cache_mem 64 MB + + cache_dir ufs /cache 250 16 256 + redirect_rewrites_host_header off + cache_replacement_policy GDSF + emulate_httpd_log on + + acl localnet src 192.168.0.0/255.255.255.0 + acl localhost src 127.0.0.1/255.255.255.255 + acl Safe_ports port 80 443 210 119 70 21 1025-65535 + acl CONNECT method CONNECT + acl all src 0.0.0.0/0.0.0.0 + http_access allow localnet + http_access allow localhost + http_access deny !Safe_ports + http_access deny CONNECT + http_access deny all + + maximum_object_size 3000 KB + store_avg_object_size 50 KB + + #Αυτό το κομμάτι το γουστάρω πολύ, + #για τους έξω χρήστες χρησιμοποιείται τον παρακάτω browser ! + anonymize_headers deny User-Agent + fake_user_agent Shit/1.0 (FuckWindows; U; WindowsShit 1.0 i8088) + + cache_mgr root + cache_effective_user squid + cache_effective_group squid + log_icp_queries off + buffered_logs on + + # Εδώ είναι το κρίσιμο κομμάτι που μας ενδιαφέρει + #DELAY POOLS + #Δεν θέλουμε να περιορίσουμε το κατέβασμα στο τοπικό μας δίκτυο + acl magic_words1 url_regex -i 192.168 + #Θέλουμε να περιορίσουμε το κατέβασμα των παρακάτω αρχείων + #Όλα σε μια σειρά + acl magic_words2 url_regex -i ftp .zip .exe .mp3 .rpm .zip .avi .mpeg + # Δεν βάζουμε .htm .html .jpg .gif γιατί συνήθως δεν καταναλώνουν μεγάλο bandwith. + #Εχουμε 2 διαφορετικά delay_pools + delay_pools 2 + #1st Delay pool + delay_class 1 2 + #-1/-1 σημαίνει ότι δεν έχουμε όρια + delay parameters 1 -1/-1 -1/-1 + delay_access 1 allow magic_words1 + + #2nd Delay pool + delay_class 2 2 + #Τα παρακάτω νούμερα είναι σε bytes + # 6000/15000 είναι τα νούμερα για όλο το δίκτυο + # 5000/15000 είναι για μια απλή ΙΡ + #για κατέβασμα αρχείων μεγαλύτερο από 150000 bytes + #οι χρήστες συνεχίζουν το κατέβασμα με 5000 bytes/s + delay_parameteres 2 6000/150000 5000/150000 + delay_access 2 alllow magic_words2 + #Τέλος Αρχείου. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αφού είμαστε σίγουροι ότι το παραπάνω αρχείο είναι σωστό γράφουμε για να δημιουργηθούν τα cache του directories: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # /opt/squid/sbin/squid -z + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Λογικά πρέπει να είμαστε εντάξει, κάνουμε ένα έλεγχο με τους browser μας βάζοντας την ip του server στο 8080. Γράφουμε ένα ps -A \| grep squid για να δούμε αν +τρέχει. Για να τρέχει κάθε φορά που ξεκινάει ο server μας βάζουμε την παρακάτω γραμμή στο τέλος του /etc/rc.d/rc.local + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + /opt/squid/sbin/squid -D + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Aλλες χρήσιμες εντολές θα μπορούσε να είναι η + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # /opt/squid/sbin/squid -κ reconfigure (κάνει reconfigure αν κάναμε αλλαγές στο squid.conf) + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +όπως και η + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # /opt/squid/sbin/squid -help. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [3.1 Παράδειγμα 1]{#ss3.1} + +Περιορισμός μιας γραμμής ολικού bandwith ας πούμε στα 512 Kbs. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + acl all src 0.0.0.0/0.0.0.0 #μπορεί να έχει επαναληφθεί πιο πάνω. + delay pools 1 + delay_class 1 1 + delay_access 1 allow alll + delay_parameteres 1 64000/64000 #512 kbits = 64 kbytes pes sec + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [3.2 Παράδειγμα 2]{#ss3.2} + +Περιορισμός μια γραμμής στα 128 Kbps. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + acl 128Kusers src 192.168.0.1/255.255.255.0 + acl all src 0.0.0.0/0.0.0.0 + delay_pools 1 + delay_class 1 3 + delay_access 1 allow 128kusers + delay_access 1 deny all + delay_parameters 1 64000/64000 -1/-1 16000/64000 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Το παραπάνω παράδειγμα δίνει μια λύση σε ένα δίκτυο από ένα σύνολο 512Kbits, και κάθε ΙΡ παίρνει μόνο 128Kbits από αυτό το pool. + +Περισσότερα παραδείγματα στο http://www.squid-cache.org/Doc/FAQ/FAQ-19.html. + + +### [4. Introducing CBQ (What is CBQ ?)]{#s4} + +Η παραπάνω διαδικασία ισχύει αν όλο το traffic διακινείται μέσω του squid proxy server από έναν browser πχ. Internet Explorer. Τι γίνεται όμως αν πχ. έχουμε +έναν υπολογιστή που βρίσκεται πίσω από Linux server με Ip Masquerade ? Η λύση λέγεται CBQ. Για να δούμε όμως τι γίνεται. Καταρχήν πρέπει να είναι εγκαταστημένο +στο linux μας το iproute2 (συνήθως είναι). Κατεβάζουμε το cbq.init-v0.7.2 από το https://sourceforge.net/projects/cbqinit και το βάζουμε στο /etc/sysconfig/cbq +(το directory αν δεν υπάρχει, το φτιάχνουμε). Φτιάχνουμε ένα αρχείο για να περιορίσουμε την κίνηση μέσω του ftp πρωτοκόλλου + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + # touch /etc/sysconfig/cbq/cbq-10.ftp-network + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Βάζουμε μέσα σε αυτό: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + DEVICE=eth0,10Kbit,1Mbit + RATE=10Kbit + WEIGHT=1Kbit + PRIO=5 + RULE=:20,192.168.0.0/24 + RULE=:21,192.168.0.0/24 + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Για κάθε μια από τις παραπάνω εντολές υπάρχει επεξήγηση στο cbq.init-v0.7.2 αρχείο. + +Μετά τρέχουμε ./cbq.init-v0.7.2 compile (είναι εκτελέσιμο, αν δεν είναι chmod +x cbq.init-v0.7.2) και κατόπιν ./cbq.init-v0.7.2 start και είμαστε έτοιμοι για +δοκιμές. Σε μένα λειτούργησε χωρίς κανένα πρόβλημα απολύτως. Με το παραπάνω ο server μας δεν θα στέλνει ftp data στο eth0 γρηγορότερα από 10kbits/sec και δεν θα +κατεβάζει γρηγορότερα από 10kbits/sec. Αν πχ μέσω squid υπάρχει καλύτερη απόδοση ο χρήστης θα αναγκαστεί να χρησιμοποιεί τον squid για τα downloads του. Ας +φτιάξουμε ένα ακόμα παράδειγμα πχ. για το Windows Media Player και το Emule. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + DEVICE=eth0,10Mbit,1Mbit + RATE=50Kbit + WEIGHT=5Kbit + PRIO=5 + #Windows Media Player + RULE=:1755,192.168.0.0/24 + #Emule + RULE=:4661,192.168.0.0/24 + RULE=:4671,192.168.0.0/24 # Διορθώστε με μήπως κάνω λάθος τις πόρτες. + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν θέλουμε να είμαστε πιο έξυπνοι μπορούμε να βάλουμε πολλούς ρόλους στο cbq και να είμαστε αυστηροί στο μοίρασμα του bandwith (με το σταγονόμετρο !) έτσι ώστε +να αναγκάσουμε όλο τον κόσμο να χρησιμοποιεί τον proxy server (θέλοντας και μη !). Αν τρέχουμε Ip-Masquerade για να έχουν οι χρήστες icq, email κ.α. ή για +κάποιο άλλο λόγο, καλό θα ήταν για τους εξυπνάκηδες του δικτύου μας, να τρέχαμε iptables με περιορισμούς (ipchains επίσης για παλαιότερες εκδόσεις Linux) έτσι +ώστε κανένας να μην συνδέετε απευθείας (Ip-Masquerade). + +Τέλος αφού βλέπουμε ότι όλα είναι εντάξει βάζουμε στο /etc/rc.d/rc.local στο τέλος το cbq.init-v0.7.2 start για να ξεκινάει κάθε φορά που γίνεται εκκίνηση στον +υπολογιστή μας. + +Υπάρχει ένας ακόμα εύκολος αλλά μάλλον ξεπερασμένος τρόπος για να γίνει αυτό το traffic shaping. Στην διαδρομή +/usr/src/linux-2.4.21-0.13mdk/Documentation/networking/ (σε έκδοση Mandrake 9.1) υπάρχει το αρχείο shaper.txt που αναφέρει πως, αλλά είναι μάλλον για μια εύκολη +και περιστασιακή περίπτωση και δεν δίνει ευελιξία στον server μας. + + +### [5. About]{#s5} + +Το παραπάνω κείμενο δημιουργήθηκε εξ ολοκλήρου σε Linux Mandrake 9.1 και γράφτηκε με την χρήση του προγράμματος OpenOffice 1.0.2. (Για να είμαι πάντως +ειλικρινής είχα εγκαταστήσει την γραμματοσειρά verdana από τα windows στο OpenOffice!) Οι παραπάνω οδηγίες έγιναν επιτυχώς στο ίδιο λειτουργικό χωρίς κανένα +απολύτως πρόβλημα. + + +### [6. Τέλος]{#s6} + +Η παραπάνω προσπάθεια έγινε εκ μέρους μου θέλοντας να βάλω και εγώ ένα λιθαράκι στην προσπάθεια μερικών administrators να ομαλοποιήσουν και να αυξήσουν τις +δυνατότητες των δικτύων τους, με την χρήση πάντα Open Source λειτουργικών συστημάτων και προγραμμάτων που είναι free. Το παραπάνω κείμενο λογικά θα περιέχει +κάποια λάθη γι αυτό θα εκτιμηθεί ιδιαίτερα οποιαδήποτε διόρθωση. Το email μου είναι το antonyhapsas\@hotmail.com και είναι δεκτή οποιαδήποτε +διόρθωση/παρατήρηση. Αυτή είναι η πρώτη έκδοση αυτού του tutorial, λογικά θα υπάρξει και νεότερη με περισσότερες τεχνικές και διορθώσεις. + +Και για να έχουμε φυλαγμένα τα νώτα μας + +ΔΕΝ ΥΠΑΡΧΕΙ ΚΑΜΙΑ ΑΠΟΛΥΤΩΣ ΕΓΓΥΗΣΗ ΟΤΙ ΤΑ ΠΑΡΑΠΑΝΩ ΔΕΝ ΠΡΟΚΕΙΤΑΙ ΝΑ ΚΑΤΑΣΤΡΕΨΟΥΝ ΤΟ ΛΕΙΤΟΥΡΓΙΚΟ ΣΑΣ Η ΝΑ ΔΗΜΙΟΥΡΓΗΣΟΥΝ ΑΝΕΠΑΝΟΡΘΩΤΗ ΒΛΑΒΗ ΣΤΟΝ ΥΠΟΛΟΓΙΣΤΗ ΣΑΣ. Η +ΠΑΡΑΠΑΝΩ ΔΙΑΔΙΚΑΣΙΑ ΓΙΝΕΤΑΙ ΠΑΝΤΑ ΜΕ ΔΙΚΗ ΣΑΣ ΕΥΘΥΝΗ. + diff --git a/content/articles/35/04_pubkey-gr.md b/content/articles/35/04_pubkey-gr.md new file mode 100644 index 0000000..9bb5ece --- /dev/null +++ b/content/articles/35/04_pubkey-gr.md @@ -0,0 +1,241 @@ ++++ +title = 'Passwordless public key authentication using SSH/OpenSSH' +date = '' +description = '' +author = 'Στέφανος Χαρχαλάκης' +issue = ['Magaz 35'] +issue_weight = 4 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*Ένας βήμα προς βήμα οδηγός για ενεργοποίηση public-key authentication σε SSH/OpenSSH.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +------------------------------------------- + +**2. Δημιουργία κλειδιών** +------------------------------------------------------ + +- [2.1 Δημιουργία DSA κλειδιών με χρήση SSH](#ss2.1) +- [2.2 Δημιουργία DSA κλειδιών με χρήση OpenSSH](#ss2.2) + +**3. Configuration του Client** +----------------------------------------------------------- + +- [3.1 Configuration του Client (SSH)](#ss3.1) +- [3.2 Configuration του Client (OpenSSH)](#ss3.2) +- [3.3 Μετατροπή του public key](#ss3.3) +- [3.4 Client: OpenSSH, Server: OpenSSH](#ss3.4) +- [3.5 Client: SSH, Server: SSH](#ss3.5) +- [3.6 Client: OpenSSH, Server: SSH](#ss3.6) +- [3.7 Client: SSH, Server: OpenSSH](#ss3.7) + +**4. Configuration του Server** +----------------------------------------------------------- + +- [4.1 Configuration του Server (SSH)](#ss4.1) +- [4.2 Configuration του Server (OpenSSH)](#ss4.2) + +**5. Δοκιμή** +----------------------------------------- + + +### [1. Εισαγωγή]{#s1} + +Το κείμενο αυτό περιγράφει τα βήματα τα οποία απαιτούνται για να πραγματοποιηθεί public key authentication χρησιμοποιώντας SSH ή/και OpenSSH. + +Για τις ανάγκες του κειμένου υποθέτουμε ότι: + +- Υπάρχει ένα μηχάνημα με το όνομα Client (hostname: Client.hell.gr, IP: 10.1.1.2). +- Υπάρχει ένα μηχάνημα με το όνομα Server (hostname: Server.hell.gr, IP: 10.1.1.3). +- Υπάρχει ένα account με το όνομα clntacnt στο Client. +- Υπάρχει ένα account με το όνομα srvacnt στο Server. +- Ο clntacnt\@Client θα προσπαθήσει να συνδεθεί στο srvacnt\@Server. +- Θα χρησιμοποιηθεί η έκδοση 2 του SSH πρωτοκόλλου και ο DSA σαν αλγόριθμος παραγωγής κλειδιού. + +Για να λειτουργήσει η πιστοποίηση δεν πρέπει να είναι κλειδωμένος ο srvacnt ούτε να έχει λήξει το password του. + +Για την πραγματοποίηση του public key authentication ο χρήστης πρέπει: + +- Να δημιουργήσει ένα ζευγάρι public/private DSA κλειδιών. +- Να έχει τα public και private κλειδιά στο Client. +- Να έχει το public κλειδί στο Server. + + +### [2. Δημιουργία κλειδιών]{#s2} + +Τα κλειδιά μπορούν να δημιουργηθούν στο Client ώστε να αποφευχθεί η μεταφορά του private κλειδιού μέσα από το δίκτυο εκτός και αν η μεταφορά γίνει με κάποιο +ασφαλή τρόπο όπως το sftp. + +Το κείμενο αυτό περιγράφει την διαδικασία δημιουργίας κλειδιών στη μεριά του Cleint χρησιμοποιώντας SSH ή OpenSSH. Το SSH χρησιμοποιεί το  /.ssh2 ενώ το OpenSSH +χρησιμοποιεί το  /.ssh για να αποθηκεύσουν τα αρχείου τους για το SSH2. + +### [2.1 Δημιουργία DSA κλειδιών με χρήση SSH]{#ss2.1} + +Για τη δημιουργία των κλειδιών με SSH χρησιμοποιείστε το ssh-keygen2 χωρίς να δώσετε κάποιο passphrase (πατήστε enter όταν ζητηθεί): + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ ssh-keygen2 + Generating 1024-bit dsa key pair + 3 o.oOo.ooOo.o + Key generated. + 1024-bit dsa, clntacnt@Client, Thu Mar 06 2003 17:20:35 +0200 + Passphrase : + Again : + Key is stored with NULL passphrase. + (You can ignore the following warning if you are generating hostkeys.) + This is not recommended. + Don't do this unless you know what you're doing. + If file system protections fail (someone can access the keyfile), + or if the super-user is malicious, your key can be used without + the deciphering effort. + Private key saved to /home/clntacnt/.ssh2/id_dsa_1024_a + Public key saved to /home/clntacnt/.ssh2/id_dsa_1024_a.pub + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [2.2 Δημιουργία DSA κλειδιών με χρήση OpenSSH]{#ss2.2} + +Στην περίπτωση του OpenSSH χρησιμοποιείστε το ssh-keygen χωρίς να δώσετε κάποιο passphrase: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ ssh-keygen -t dsa + Generating public/private dsa key pair. + Enter file in which to save the key (/home/clntacnt/.ssh/id_dsa): + Enter passphrase (empty for no passphrase): + Enter same passphrase again: + Your identification has been saved in /home/clntacnt/.ssh/id_dsa. + Your public key has been saved in /home/clntacnt/.ssh/id_dsa.pub. + The key fingerprint is: + 04:91:c8:22:7b:aa:2a:c4:e7:66:1e:61:1e:2b:32:d8 clntacnt@Client + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [3. Configuration του Client]{#s3} + +Αυτή τη στιγμή έχουν δημιουργηθεί τα κλειδιά και καλό είναι να μετονομαστούν σε κάτι που να έχει νόημα (π.χ. clntkey και clntkey.pub). Στη συνέχεια θα πρέπει να +δημιουργηθεί η να αλλαχθεί το configuration του Client ώστε να χρησιμοποιεί αυτό το κλειδί για πιστοποίηση στον Server: + +### [3.1 Configuration του Client (SSH)]{#ss3.1} + +Ανοίξτε το  clntacnt/.ssh2/identification και προσθέστε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Server.hell.gr: + IdKey clntkey + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [3.2 Configuration του Client (OpenSSH)]{#ss3.2} + +Ανοίξτε το  clntacnt/.ssh/config και προσθέστε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + Host Server.hell.gr + IdentityFile ~/.ssh/clntkey + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +### [3.3 Μετατροπή του public key]{#ss3.3} + +Το SSH και το OpenSSH έχουν διαφορετική μορφή για τα αρχεία των public και private κλειδιών. Αν οι δαίμονες στο Client και το Server δεν είναι ίδιοι θα πρέπει +να γίνει μετατροπή του public key χρησιμοποιώντας το ssh-keygen του OpenSSH. Αυτό θα γίνει στο μηχάνημα στο οποίο υπάρχει το OpenSSH. + +### [3.4 Client: OpenSSH, Server: OpenSSH]{#ss3.4} + +Στείλτε το clntkey.pub στο Server και τοποθετήστε το στο  srvacnt/.ssh/clntkey.pub. + +### [3.5 Client: SSH, Server: SSH]{#ss3.5} + +Στείλτε το clntkey.pub στο Server και τοποθετήστε το στο  srvacnt/.ssh2/clntkey.pub. + +### [3.6 Client: OpenSSH, Server: SSH]{#ss3.6} + +Πρώτα μετατρέψτε το public key στη μορφή που το χρειάζεται το SSH (στο Client): + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ ssh-keygen -e -f clntkey.pub > tmp + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +και στη συνέχεια στείλτε το στο Server και τοποθετήστε το στο  srvacnt/.ssh2/clntkey.pub. + +### [3.7 Client: SSH, Server: OpenSSH]{#ss3.7} + +Πρώτα στείλτε το public key στο Server τοποθετώντας το στο  srvacnt/.ssh/clntkey.pub και στη συνέχεια μετατρέψτε το: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ ssh-keygen -i -f clntkey.pub.tmp > clntkey.pub + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [4. Configuration του Server]{#s4} + +### [4.1 Configuration του Server (SSH)]{#ss4.1} + +Αυτή τι στιγμή το public key πρέπει να βρίσκεται στο  srvacnt/.ssh2/clntkey.pub. Ανοίξτε το  srvacnt/.ssh2/authorization και προσθέστε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + 10.1.1.2: + Key clntkey.pub + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +(Το 10.1.1.2 είναι η IP διεύθυνση του Client) + +### [4.2 Configuration του Server (OpenSSH)]{#ss4.2} + +Αυτή τι στιγμή το public key πρέπει να βρίσκεται στο  srvacnt/.ssh/clntkey.pub. Ανοίξτε το και προσθέστε στην αρχή του το \`\`from=\"Client.hell.gr\"\'\'. Το +όλο clntkey.pub πρέπει να δείχνει κάπως έτσι: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + from="client.hell.gr" ssh-dss AAAAB3NzaC1kc .... gSlSJA== + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Τέλος, προσθέστε το κλειδί αυτό στο τέλος του  srvacnt/.ssh/authorized\_keys: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ cat clntkey.pub >> authorized_keys + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + +### [5. Δοκιμή]{#s5} + +Πηγαίνετε στο Client και σαν clntacnt δώστε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ ssh srvacnt@Server.hell.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν όλα πήγαν καλά θα σας βάλει μέσα στο Server χωρίς να ζητήσει password. Πρέπει να δώσετε ολόκληρο το hostname, ακριβώς όπως υπάρχει μέσα στο configuration +file του Client. + + +### [6. Δοκιμή]{#s6} + +Πηγαίνετε στο Client και σαν clntacnt δώστε: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + $ ssh srvacnt@Server.hell.gr + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Αν όλα πήγαν καλά θα σας βάλει μέσα στο Server χωρίς να ζητήσει password. Πρέπει να δώσετε ολόκληρο το hostname, ακριβώς όπως υπάρχει μέσα στο configuration diff --git a/content/articles/35/05_rce4.md b/content/articles/35/05_rce4.md new file mode 100644 index 0000000..3f65b4e --- /dev/null +++ b/content/articles/35/05_rce4.md @@ -0,0 +1,1253 @@ ++++ +title = 'Reverse Engineering σε περιβάλλον Linux, Μέρος 3' +date = '' +description = '' +author = 'Αλέξανδρος Φραντζής' +issue = ['Magaz 35'] +issue_weight = 5 ++++ +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +*To άρθρο αυτό είναι το τέταρτο της σειράς \"Reverse Engineering σε περιβάλλον Linux\". Σκοπός της σειράς είναι να εξοικοιώσει τους αναγνώστες με τις βασικές +τεχνικές του Reverse Engineering, με έμφαση στο πως αυτές μπορούν να εφαρμοστούν στο Linux, και να τους προσφέρει πιο βαθιές γνώσεις για τη λειτουργία του +συστήματος τους.* + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +**1. Εισαγωγή** +-------------------------------------- + +**2. Εικονικές Μηχανές** +----------------------------------------------- + +- [2.1 Εισαγωγή](#ss2.1) +- [2.2 Ενδιάμεσες Μορφές Κώδικα](#ss2.2) +- [2.3 Java Virtual Machine](#ss2.3) + +**3. Μερικές σκέψεις για το μέλλον του RCE - Obfuscation** +--------------------------------------------------------------------------------- + +**4. Hands-on παράδειγμα: Java vs C** +------------------------------------------------------------ + +- [4.1 Το πείραμα](#ss4.1) +- [4.2 Η αναζήτηση](#ss4.2) +- [4.3 Η ανάλυση](#ss4.3) +- [4.4 Το συμπέρασμα](#ss4.4) + +**5. Πρόκληση** +-------------------------------------- + +- [5.1 Προηγούμενη Πρόκληση](#ss5.1) +- [5.2 Hall of Fame](#ss5.2) + + +### [1. Εισαγωγή]{#s1} + +Καλωσήρθατε στο τέταρτο άρθρο (η μέτρηση αρχίζει από το 0) για Reverse Code Engineering σε Linux! + +Το γενικό θέμα με το οποίο ασχολείται το παρόν άρθρο είναι οι εικονικές μηχανές (Virtual Machines). + +Στο πρώτο τμήμα θα ασχοληθούμε εν συντομία με την ιστορία και το γενικό σχεδιασμό των VMs. + +Στο δεύτερο τμήμα εκφράζονται μερικές σκέψεις μου για το μέλλον του RCE και το πως σχετίζεται η τεχνική του obfuscation με αυτό. + +Στο τρίτο τμήμα του άρθρου, θα μάθουμε γιατί ο κώδικας Java μπορεί να είναι πιο γρήγορος από τον ίδιο κώδικα σε C. + +Στο τέταρτο και τελευταίο τμήμα θα δώσουμε μια ενδεικτική λύση για την προηγούμενη πρόκληση και βέβαια το Hall of Fame. + +Καλό RCE! + + +### [2. Εικονικές Μηχανές]{#s2} + +### [2.1 Εισαγωγή]{#ss2.1} + +Η εικονική μηχανή (Virtual Μachine), όπως δηλώνει και το όνομα της, είναι μια μηχανή που υφίσταται μόνο στο βασίλειο του αφηρημένου. Πρόκειται για επεξεργαστή +υλοποιημένο μόνο με λογισμικό, με δικό του σετ εντολών και ιδιαίτερων χαρακτηριστικών. + +Μια προφανής και σημαντική χρήση των εικονικών μηχανών είναι η εξομοίωση και η μελέτη υπαρχόντων ή και υπό σχεδίαση hardware συστημάτων. Για αυτή την κατηγορία +έχει επικρατήσει η ονομασία εξομοιωτής (emulator) και σήμερα για σχεδόν όλα τα υπολογιστικά συστήματα περασμένων εποχών υπάρχει ένας εξομοιωτής. + +Ένας δεύτερος πολύ σημαντικός λόγος για την ύπαρξη VMs είναι η χρήση τους ως ένα \"μονωτικό στρώμα\" ανάμεσα στις εφαρμογές και το υλικό. Μια εφαρμογή που είναι +σχεδιασμένη για μια VM μπορεί να εκτελεστεί σε οποιοδήποτε επεξεργαστή για τον οποίο υπάρχει ένας διερμηνευτής για τον κώδικα της VM. Αυτή είναι η νοοτροπία του +\"Προγραμμάτισε μια φορά, τρέξε παντού\" (Code Once, Run Everywhere). + +Πολύ συχνά οι εικονικές μηχανές χρησιμοποιούνται για να δώσουν στο προγραμματιστή την ψευδαίσθηση πως δουλεύει σε ένα ιδιαίτερα εξελιγμένο σύστημα, με +χαρακτηριστικά ειδικά σχεδιασμένα για την εργασία του. Τέτοιες μηχανές χρησιμοποιούνται σε παιχνίδια όπου βασικές εντολές του εικονικού επεξεργαστή μπορεί να +είναι για παράδειγμα \"μετακίνησε το sprite A από τη θέση x στη θέση y\". + +Οι εικονικές μηχανές, αν και είναι πολύ στη μόδα σήμερα, δεν αποτελούν καινούργιο φαινόμενο. Ήδη από το 1970 η ανάγκη διαχωρισμού των διάφορων φάσεων της +μεταγλώττισης ενός προγράμματος οδήγησε τους δημιουργούς μεταγλωττιστών στην εισαγωγή και χρήση ενδιάμεσων μορφών κώδικα. Μια πολύ γνωστή ενδιάμεση μορφή είναι +η P-Code που χρησιμοποιήθηκε για τους μεταγλωττιστές της γλώσσας Pascal. Πολύ σύντομα η P-Code έπαψε να χρησιμοποιείται μόνο στους μεταγλωττιστές και έγινε η +βάση μιας εικονική μηχανής για το σύστημα της UCSD Pascal. + +![](/35/img/pcode.png) + +Παρ\' όλο που που η δεκαετία του \'70 μοιάζει μακρινή, τα πράγματα δεν έχουν αλλάξει πολύ στον συγκεκριμένο τομέα. Οι σύγχρονες γλώσσες προγραμματισμού +χρησιμοποιούν το ίδιο μοντέλο με μια μικρή αλλά σημαντική προσθήκη. Για λόγους ταχύτητας, οι πιο εξελιγμένοι διερμηνευτές δεν εκτελούν τον κώδικα σε ενδιάμεση +μορφή αλλά τον μετατρέπουν στη γλώσσα μηχανής του επεξεργαστή στον οποίο τρέχουν (native code). Η μετατροπή αυτή γίνεται την ώρα της εκτέλεσης και ονομάζεται +Just-In-Time (JIT) μεταγλώττιση, ενώ η κλασική μεταγλώττιση έχει την ονομασία Ahead-Of-Time (AOT). + +### [2.2 Ενδιάμεσες Μορφές Κώδικα]{#ss2.2} + +Οι ενδιάμεσες μορφές κώδικα αλλά και γενικά τα σετ εντολών μπορούν να χωριστούν σε δύο μεγάλες κατηγορίες, ανάλογα με το πως τροφοδοτούνται οι εντολές με +δεδομένα. + +Στην πρώτη κατηγορία ανήκουν οι μορφές κώδικα στις οποίες τα δεδομένα ανταλλάσσονται μέσω καταχωρητών. Οι μηχανές που υλοποιούν αυτό το μοντέλο ονομάζονται +register-based και αποτελούν τη πλειοψηφία των hardware επεξεργαστών. Η πράξη a=a+b\*c σε ένα τέτοιο σύστημα έχει τη μορφή: + + move t1, b ;; t1=b + multiply t1, t1, c ;; t1=t1*c + add a, a, t1 ;; a=a+t1 + +Αντίθετα, τα συστήματα όπου το μέσο ανταλλαγής δεδομένων είναι ο σωρός ονομάζονται stack-based. Ο σωρός αυτός έχει την ειδική ονομασία *σωρός τελεστέων (operand +stack)*. Οι περισσότερες εικονικές μηχανές ακολουθούν αυτό το μοντέλο διότι έχει αποδειχθεί ότι προσφέρει ταχύτερη εκτέλεση σε λογισμικό και είναι πιο απλή και +συμπαγής. Η πράξη a=a+b\*c εδώ έχει την εξής μορφή (στα σχόλια φαίνεται η κατάσταση του σωρού *μετά* την εκτέλεσης της εντολής): + + load b ;; Σωρός: [b] + load c ;; Σωρός: [b] [c] + multiply ;; Σωρός: [b*c] + load a ;; Σωρός: [b*c] [a] + add ;; Σωρός: [a+b*c] + store a ;; Σωρός: - , a=a+b*c + +Να σημειωθεί ότι και στις αρχιτεκτονικές βασισμένες σε καταχωρητές υπάρχει η έννοια του σωρού αλλά δεν έχει τον ίδιο σκοπό, δηλαδή να είναι το βασικό κανάλι +δεδομένων μεταξύ εντολών. + +Σήμερα, η Java της Sun και το .NET της Microsoft είναι ίσως τα δύο πιο διάσημα περιβάλλοντα που χρησιμοποιούν εικονικές μηχανές. Και τα δύο είναι βασισμένα στη +stack-based αρχιτεκτονική και τα σετ εντολών τους είναι παρεμφερή. Τα standards και για τις δύο περιβάλλοντα υπάρχουν ανοικτά στο internet. Στο Linux, +υλοποιήσεις της Java Virtual Machine προσφέρονται από τη Sun, την ΙΒΜ και επίσης υπάρχουν μερικές open source προτάσεις όπως το kaffe ( ). +Για το .NET στο Linux υπάρχει το open source Mono Project ( ). + +### [2.3 Java Virtual Machine]{#ss2.3} + +Η ενδιάμεση μορφή στην οποία αποθηκεύονται τα προγράμματα σε Java είναι τα Java Bytecodes. Κατά την εκτέλεση της Java Virtual Machine (JVM) κάθε thread +αποτελείται από τα παρακάτω στοιχεία: + +- PC (μετρητή προγράμματος): κάθε στιγμή δείχνει τη διεύθυνση της τρέχουσας εντολής. +- Normal Stack: περιέχει κυρίως τα πλαίσια (frames) των συναρτήσεων και ενδιάμεσες τιμές. +- Heap: περιοχή από την οποία μοιράζεται η μνήμη στα αντικείμενα. +- Method Area: περιοχή η οποία περιέχει τα bytecode των μεθόδων και τις σταθερές των κλάσεων. + +Κάθε στιγμή το πρόγραμμα βρίσκεται μέσα σε μία συνάρτηση και αποθηκεύει τις τοπικές πληροφορίες σε ένα πλαίσιο στον κανονικό σωρό. Το πλαίσιο περιέχει το σωρό +τελεστέων, έναν πίνακα τοπικών μεταβλητών και κάποιες άλλες πληροφορίες που σχετίζονται με τα δεδομένα της κλάσης στην οποία ανήκει η μέθοδος. Η πρώτη τοπική +μεταβλητή (index 0) περιέχει την αναφορά στο τρέχον instance της κλάσης. Πρόκειται ουσιαστικά για το *this* που σίγουρα έχουν χρησιμοποιήσει όσοι έχουν +ασχοληθεί με Java. Από εκεί και πέρα (index 1) οι τοπικές μεταβλητές περιέχουν τις παραμέτρους της συνάρτησης. Η έννοια των τοπικών μεταβλητών είναι πιο ευρεία +από αυτή που έχουμε συνηθίσει από άλλες γλώσσες (πχ C). + +Ένα μικρό παράδειγμα: + + public int alf(int x) + { + if (x > 3) + x++; + else + x--; + + return x; + } + +παράγει τα εξής bytecodes: + + || .. ! ;---------------------------------------------- + || .. ! ; public int test::alf(int) + || .. ! ;---------------------------------------------- + || .. ! alf_fd: + || .. ! iload_1 ;; Φόρτωσε στο σωρό τελεστέων τη δεύτερη τοπική + ;; μεταβλητή (την πρώτη παράμετρο της συνάρτησης). + || fe ! iconst_3 ;; Φόρτωσε στο σωρό τελεστέων τη σταθερά 3. + || ff ! if_icmpge loc_108 ;; Αν η κορυφαία τιμή στο σωρό τελεστέων είναι μεγαλύτερη ή ίση + ;; με την αμέσως προηγούμενη, πήγαινε στη διεύθυνση 108. + || 102 ! iinc 1, 1 ;; Πρόσθεσε στη δεύτερη τοπική μεταβλητή την τιμή 1. + || 105 ! goto loc_10b ;; Πήγαινε στη διεύθυνση 10b. + || 108 ! + || ... ! loc_108: + || ... ! iinc 1, 0ffh ;; Πρόσθεσε στη δεύτερη τοπική μεταβλητή την τιμή -1. + || 10b ! + || ... ! loc_10b: + || ... ! iload_1 ;; Φόρτωσε στο σωρό τελεστέων τη δεύτερη τοπική μεταβλητή. + || 10c ! ireturn ;; Πάρε την κορυφαία τιμή από τον τρέχον σωρό τελεστέων και + ;; τοποθέτησέ την στην κορυφή του σωρού τελεστέων του κώδικα + ;; που κάλεσε την τρέχουσα συνάρτηση. + +Για να κάνουμε disassemble κάποιο class αρχείο στις εντολές της JVM (όπως παραπάνω) μπορούμε να χρησιμοποιήσουμε τον ΗΤ editor ( ). +Όμως, μπορούμε να πάμε ακόμα πιο πέρα, χρησιμοποιώντας κάποιον decompiler για Java ο οποίος θα προσπαθήσει να μας δώσει τον αρχικό πηγαίο κώδικα! Δυο πολύ +γνωστοί Java decompilers είναι ο MOCHA ( ) και ο JAD ( ). + + +### [3. Μερικές σκέψεις για το μέλλον του RCE - Obfuscation]{#s3} + +Γλώσσες όπως η Java και η C\# που χρησιμοποιούν ενδιάμεσες μορφές κώδικα ως το βασικό μέσο μεταφοράς τους, εμφανίζουν μια νέα πρόκληση για το RCE. Οι ενδιάμεσες +μορφές μεταφέρουν αναπόφευκτα πολλές πληροφορίες για τον πηγαίο κώδικα και έτσι κάποιος θα μπορούσε να θεωρήσει πως είναι πιο εύκολο να τον ανασυνθέσουμε. Και +αυτό είναι, όντως, αλήθεια. + +Έπρεπε, λοιπόν, να βρεθεί ένας διαφορετικός τρόπος για προστασία του κώδικα από τα αδιάκριτα μάτια. Αυτό που έγινε, τελικά, είναι να δοθεί περισσότερο βάρος +στην παλιά τεχνική του code obfuscation. Οι ίδιες βασικές αρχές παρέμειναν αλλά προσαρμόστηκαν στη νέα πραγματικότητα του αντικειμενοστρεφούς μοντέλου. + +Σκοπός του obfuscation είναι να μετασχηματίσει ένα πρόγραμμα σε ένα άλλο, ισοδύναμο του, τέτοιο ώστε να είναι πιο δύσκολο να κατανοηθεί από ανθρώπους. Επιπλέον +χρειάζεται ο μετασχηματισμός αυτός να είναι δύσκολα αντιστρεπτός από κάποιο άλλο αυτόματο εργαλείο (deobfuscator). Στο παιχνίδι παίζουν ρόλο πολλοί +αντικρουόμενοι παράγοντες και έτσι πρέπει να βρεθεί μια ικανοποιητική λύση, ανάλογα με τις ανάγκες του χρήστη. Για παράδειγμα, αύξηση της πολυπλοκότητας του +κώδικα μπορεί να επιφέρει δραματική αλλαγή στην ταχύτητα εκτέλεσης, οπότε πρέπει να αποφασιστεί τι έχει μεγαλύτερη σημασία, η απόδοση ή η προστασία. + +Ο πιο απλός τρόπος obfuscation ενός προγράμματος είναι η μετονομασία των συμβόλων του (μεταβλητές, συναρτήσεις κτλ) σε ακατανόητες συμβολοσειρές. Άλλο είναι να +βλέπεις μια συνάρτηση \"CheckUser\" και άλλο αυτή να λέγεται \"mvkof89\". Πάντως, αν και έτσι δυσχεραίνονται οι RCE προσπάθειες, η κατάσταση δεν είναι τόσο +άσχημη. + +Το επόμενο βήμα είναι το λεγόμενο control-flow obfuscation. Σκοπός αυτής της τεχνικής είναι να μπερδευτεί τόσο πολύ η ροή του προγράμματος ώστε να είναι δύσκολο +να την ακολουθήσει κάποιος. Για παράδειγμα το απλό κομμάτι κώδικα: + + printf("OK"); + +μπορεί να μετασχηματιστεί στο ισοδύναμο: + + y=72; + ... + x=random(); + if ( (x*13) % 5 < 3) { + doit: + if (y > 61) + printf("OK"); + else + printf("KUKU"); + } + else { + if (y * 2 - 6 == 138) + goto doit; + printf("KUKU"); + } + +Φανταστείτε τι σύγχυση μπορεί να προκληθεί σε επίπεδο bytecodes (η και γλώσσα μηχανής)! Από τη μεριά τους, οι deobfuscators προσπαθούν να αντιμετωπίσουν τη +μέθοδο αυτή χρησιμοποιώντας αυτόματες τεχνικές για την απόδειξη θεωρημάτων. Για παράδειγμα, βλέποντας πως το y είναι 72 ξέρουν πως πάντα ισχύει y\>61 και +επομένως το printf(\"KUKU\") δεν πρόκειται να εκτελεστεί ποτέ. + +Για επιπλέον αύξηση του χάους σε ένα πρόγραμμα, μπορεί να εφαρμοστεί η τεχνική του data obfuscation. Εδώ στο στόχαστρο βρίσκονται πλέον τα δεδομένα του +προγράμματος τα οποία σπάνε, συγχωνεύονται, ψευδο-κρυπτογραφούνται και γενικώς υπόκεινται σε ένα σωρό μετασχηματισμούς. Ένα απλό παράδειγμα: + + ;; Έστω a ένας πίνακας 20 στοιχείων + x = 0; + + for(i = 0; i < 20; i++) { + x += a[i]; + } + + if (x == 10) + printf("Ok!"); + else + printf("Kuku!"); + + ;; Έστω a ένας πίνακας 20 στοιχείων + x = 100; + for(i = 0; i <20; i++) { + x += 2 * a[i] + i; + } + + if (x == 310) + printf("Ok!"); + else + printf("Kuku!"); + +Υπάρχουν πολλές ακόμη κατηγορίες obfuscating μετασχηματισμών και ένας σωστός συνδυασμός τους καθιστά την κατάσταση πολύ δύσκολη για τον reverse engineer. + +Στο μέλλον προβλέπω (κοιτώντας τη κρυστάλλινη σφαίρα :) ) πως το παιχνίδι του RCE σε ένα μεγάλο βαθμό θα έχει μετατραπεί σε ένα παιχνίδι +obfuscation/deobfuscation. Εδώ και καιρό υπάρχουν εργαλεία για obfuscation ενώ τον τελευταίο καιρό εμφανίζονται πρωτότυποι deobfuscators βασισμένοι σε σχετικές +δημοσιεύσεις. Ας αρχίσουν οι χοροί\... + + +### [4. Hands-on παράδειγμα: Java vs C]{#s4} + +> \...και την 42η μέρα ο Θεός δημιούργησε την C. Βλέποντας την απειλή οι δυνάμεις του Κακού αποφάσισαν να αντεπιτεθούν\... και έτσι γεννήθηκε η Java. + +Η Java από τότε που δημιουργήθηκε κλήθηκε να αντιμετωπίσει τις κυρίαρχες τότε (αλλά και σήμερα) C και C++. Η σύγκριση ήταν αναπόφευκτη΄ η Java διαφημιζόταν ως +μια πιο κομψή και ασφαλής C++, μια γλώσσα ικανή να χρησιμοποιηθεί σε ένα ευρύ πεδίο εφαρμογών, από ιστοσελίδες μέχρι ενσωματωμένες συσκευές. Όπως συνηθίζεται +στον κόσμο των υπολογιστών, ένας \"ιερός\" πόλεμος ξέσπασε. + +Οι πολέμιοι της Java είχαν κυρίως δύο λόγους για τους οποίους ήθελαν να την κάψουν στην πυρά. Καταρχάς υπήρχαν εκείνοι που στο άκουσμα της λέξης +\"αντικειμενοστρεφής\" έβγαζαν σκόρδα και προσπαθούσαν να ξορκίσουν τα δαιμόνια. Σε αυτούς, βέβαια, δεν άρεσε ούτε η C++, η οποία όμως έπαιρνε άφεση διότι +μπορούσε απλώς να χρησιμοποιηθεί ως βελτιωμένη C. Ο δεύτερος και πιο καταδικαστικός λόγος ενάντια στην Java ήταν ότι ήταν αργή. Ειδικά σε ότι είχε σχέση με +γραφικές διεπαφές (GUI) ήταν εκνευριστικά αργή και επιπλέον είχε μια μέτριας ποιότητας (εμφανισιακά, τουλάχιστον) βιβλιοθήκη χειριστηριών. + +Σήμερα, αρκετό καιρό ύστερα από την έναρξη της διαμάχης, τα πράγματα φαίνεται να έχουν μπει σε μια τάξη. Η Java έχει καταφέρει να βελτιωθεί θεαματικά στο φλέγον +θέμα της απόδοσης και έτσι έχει κατακτήσει μια αρκετά υψηλή θέση στις καρδιές των προγραμματιστών αλλά και των διοικητικών στελεχών. Η C παραμένει κυρίαρχη στον +τομέα για τον οποίο σχεδιάστηκε, τον προγραμματισμό συστημάτων, ενώ η C++ απολαμβάνει μια σταθερή θέση σε εφαρμογές που επωφελούνται από την αντικειμενοστρεφή +προσέγγιση και ταυτόχρονα έχουν αυξημένες απαιτήσεις απόδοσης. + +Δυστυχώς στις απόψεις πολλών η Java και γενικά οι διερμηνευόμενες (interpreted) γλώσσες έχουν στιγματιστεί από την αργοπορία που τις χαρακτήριζε στα πρώτα τους +βήματα. Στο πείραμα που ακολουθεί θα εξετάσουμε και θα εξηγήσουμε την απρόσμενα καλή απόδοση ενός προγράμματος σε Java. + +### [4.1 Το πείραμα]{#ss4.1} + +Στο πείραμα που ακολουθεί θα μετρήσουμε τους χρόνους εκτέλεσης του ίδιου προγράμματος σε C (gcc 3.2.3) και σε Java (Sun J2RE 1.4.2\_01). Το πρόγραμμα είναι η +αναδρομική συνάρτηση υπολογισμού των όρων της σειράς fibonacci fn = fn-1 + fn-2, με f0 = 0 και f1 = 1. + +Σε C: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + #include + #include + + unsigned long fib(unsigned long n) + { + if (n < 2) + return n; + else + return fib(n-1) + fib(n-2); + } + + int main(int argc, char *argv[]) + { + int n; + + if (argc < 2) + n = 1; + else + n = atoi(argv[1]); + + printf("%lu\n", fib(n)); + + return 0; + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Σε Java: + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + + public class fib { + + public static void main(String args[]) { + int n; + + if (args.length < 1) + n = 1; + else + n = Integer.parseInt(args[0]); + + System.out.println(fib(n)); + } + + public static int fib(int n) { + if (n < 2) + return n; + else + return fib(n-1) + fib(n-2); + } + } + +---------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Μεταγλωττίζουμε τα δύο προγράμματα και τα εκτελούμε 3 φορές το καθένα. Το J2RE της Sun προσφέρει δύο εικονικές μηχανές, την server και την client (default). Η +πρώτη έχει μεγαλύτερες απαιτήσεις μνήμης αλλά έχει ως αποτέλεσμα καλύτερη ταχύτητα εκτέλεσης ενώ η δεύτερη έχει πιο μικρές απαιτήσεις αλλά η ταχύτητα εκτέλεσης +δεν είναι η βέλτιστη. Εδώ χρησιμοποιούμε την παράμετρο \"-server\" που επιλέγει την server VM (εικονική μηχανή). + + $ gcc -O3 -fomit-frame-pointer -o fib.c.exe fib.c + $ time fib.c.exe 39 + 63245986 + + real 0m7.479s + user 0m7.361s + sys 0m0.017s + $ time fib.c.exe 39 + 63245986 + + real 0m7.478s + user 0m7.368s + sys 0m0.013s + $ time fib.c.exe 39 + 63245986 + + real 0m7.471s + user 0m7.366s + sys 0m0.016s + $ javac fib.java + $ time java -server fib 39 + 63245986 + + real 0m5.853s + user 0m5.618s + sys 0m0.049s + $ time java -server fib 39 + 63245986 + + real 0m5.848s + user 0m5.625s + sys 0m0.043s + $ time java -server fib 39 + 63245986 + + real 0m5.847s + user 0m5.622s + sys 0m0.044s + +Η Java φαίνεται να έχει αρκετά καλύτερες επιδόσεις από τη C!!! Είναι δυνατόν; Ευτυχώς ή δυστυχώς είναι! + +### [4.2 Η αναζήτηση]{#ss4.2} + +Αφού περάσει το πρώτο σοκ, ανασυντασσόμαστε και προσπαθούμε να φερθούμε όσο πιο επιστημονικά γίνεται. Έχουμε ένα πείραμα με απροσδόκητα αποτελέσματα και +καλούμαστε να τα εξηγήσουμε. + +Καταρχάς, γνωρίζουμε ότι o διερμηνευτής της Java περιέχει JIT μεταγλωττιστή οπότε γενικά θα περιμέναμε μια καλή απόδοση. Το βασικό ερώτημα είναι το τι έκανε ο +JIT μεταγλωττιστής, που δε μπόρεσε να κάνει ο gcc, ώστε να βελτιώσει την απόδοση κατά 20% περίπου. Για να απαντήσουμε σε αυτό το ερώτημα το καλύτερο που +μπορούμε να κάνουμε είναι να συγκρίνουμε τον κώδικα μηχανής που παρήγαγε καθένας από τους δύο αντιπάλους. + +Τον κώδικα μηχανής που παρήγαγε ο gcc είναι πολύ απλο να τον εξετάσουμε χρησιμοποιώντας τον HT Editor. Βεβαίως, μπορείτε να χρησιμοποιήσετε όποιο εργαλείο σας +βολεύει. + + || ....... ! ;******************************************************** + || ....... ! ; function fib (global) + || ....... ! ;******************************************************** + || ....... ! fib: ;xref c80483d7 c80483e4 c8048427 + || ....... ! ;xref c8048434 + || ....... ! push esi + || 8048411 ! push ebx + || 8048412 ! mov esi, [esp+0ch] ;; esi=n + || 8048416 ! cmp esi, 1 + || 8048419 ! mov eax, esi + || 804841b ! ja loc_8048420 + || 804841d ! + || ....... ! loc_804841d: ;xref j804843f + || ....... ! pop ebx + || 804841e ! pop esi + || 804841f ! ret + || 8048420 ! + || ....... ! loc_8048420: ;xref j804841b + || ....... ! sub esp, 0ch + || 8048423 ! lea edx, [esi-1] + || 8048426 ! push edx + || 8048427 ! call fib ;; fib(n-1) + || 804842c ! lea edx, [esi-2] + || 804842f ! mov ebx, eax + || 8048431 ! mov [esp], edx + || 8048434 ! call fib ;; fib(n-2) + || 8048439 ! lea eax, [eax+ebx] ;; eax = fib(n-1) + fib(n-2) + || 804843c ! add esp, 10h + || 804843f ! jmp loc_804841d + +Ένα πολύ χρήσιμο χαρακτηριστικό του HT editor είναι ότι υποστηρίζει πληθώρα εκτελέσιμων αρχείων, μεταξύ αυτών και τα .class αρχεία της Java! Έτσι είναι απλό να +εξετάσουμε και τα bytecodes στα οποία μεταφράστηκε η συνάρτηση fib: + + || ... ! ;---------------------------------------------- + || ... ! ; public static int fib::fib(int) + || ... ! ;---------------------------------------------- + || ... ! fib_1fa: + || ... ! iload_0 ;; Σωρός: [n] + || 1fb ! iconst_2 ;; Σωρός: [n] [2] + || 1fc ! if_icmpge loc_201 ;; Σωρός: -, if (n >= 2) goto loc_201 + || 1ff ! iload_0 ;; Σωρός: [n] + || 200 ! ireturn + || 201 ! + || ... ! loc_201: ;xref j1fc + || ... ! iload_0 ;; Σωρός: [n] + || 202 ! iconst_1 ;; Σωρός: [n] [1] + || 203 ! isub ;; Σωρός: [n-1] + || 204 ! invokestatic 4 ;; Σωρός: [fib(n-1)] + || 207 ! iload_0 ;; Σωρός: [fib(n-1)] [n] + || 208 ! iconst_2 ;; Σωρός: [fib(n-1)] [n] [2] + || 209 ! isub ;; Σωρός: [fib(n-1)] [n-2] + || 20a ! invokestatic 4 ;; Σωρός: [fib(n-1)] [fib(n-2)] + || 20d ! iadd ;; Σωρός: [fib(n-1)+fib(n-2)] + || 20e ! ireturn + +#### Φως στο τούνελ του Java JIT μεταγλωττιστή + +Η αποστολή μας, αν τη δεχθούμε, είναι να βρούμε και να αναλύσουμε τον κώδικα μηχανής που παρήγαγε ο JIT μεταγλωττιστής (native κώδικας). Το πρόβλημα είναι ότι +δε γνωρίζουμε καθόλου την εσωτερική λειτουργία του Sun Java διερμηνευτή (αφού ο κώδικας είναι κλειστός). Το μόνο σίγουρο είναι ότι ο εκτελέσιμος κώδικας μηχανής +δημιουργείται δυναμικά κάπου στο χώρο διευθύνσεων της Java και ο έλεγχος κάποια στιγμή περνάει στο σημείο αυτό. + +Αρχίζοντας την εξερεύνηση μας εκτελούμε την ltrace -i -o fib.ltr java -server fib 10 (βλέπε προηγούμενα τεύχη). Εξετάζοντας το fib.ltr τα αποτελέσματα δεν είναι +ιδιαίτερα ενθαρρυντικά, οπότε συνεχίζουμε με την strace -i -o fib.str java -server fib 10. Προς το τέλος του fib.str βρίσκουμε τα εξής: + + [400379db] open("/home/alf/projects/magaz/issue3/src/fib.class", O_RDONLY|O_LARGEFILE) = 5 + [401514e7] fstat64(5, {st_mode=S_IFREG|0644, st_size=561, ...}) = 0 + [401512f7] stat64("/home/alf/projects/magaz/issue3/src/fib.class", ... + [40036eeb] read(5, "\312\376\272\276\0\0\0.\0$\n\0\7\0\22\n\0\23\0\24\t\0\25"..., 561) = 561 + [40036f5f] close(5) = 0 + [40118b71] gettimeofday({1081166745, 55282}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 55460}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 55594}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 56101}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 56241}, NULL) = 0 + + ... + + [401516d7] lstat64("/home", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 + [401516d7] lstat64("/home/alf", {st_mode=S_IFDIR|0711, st_size=4096, ...}) = 0 + [401516d7] lstat64("/home/alf/projects", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 + [401516d7] lstat64("/home/alf/projects/magaz", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 + [401516d7] lstat64("/home/alf/projects/magaz/issue3", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 + [401516d7] lstat64("/home/alf/projects/magaz/issue3/src", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 + [40118b71] gettimeofday({1081166745, 82175}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 82915}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 83546}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 83719}, NULL) = 0 + [40118b71] gettimeofday({1081166745, 83851}, NULL) = 0 + + ... + + [40159ac5] brk(0) = 0x80c4000 + [40159ac5] brk(0x80c5000) = 0x80c5000 + [40159ac5] brk(0) = 0x80c5000 + [40159ac5] brk(0x80c6000) = 0x80c6000 + [40036e5b] write(1, "89", 2) = 2 + [40036e5b] write(1, "\n", 1) = 1 + + ... + + [400a8ac1] kill(789, SIGRTMIN) = 0 + [400a8ac1] kill(789, SIGRTMIN) = 0 + [40154c7d] unlink("/tmp/hsperfdata_alf/787") = 0 + + ... + +Παρατηρούμε πως η Java διαβάζει το .class αρχείο που περιέχει τα bytecodes της εφαρμογής μας. Ύστερα αρχίζει να διαβάζει συνεχώς την ώρα της ημέρας, μαθαίνει +κάποια πράγματα για το τρέχον directory, συνεχίζει να δειγματοληπτεί την ώρα, αυξάνει το μέγεθος του data segment κατά 0x2000 bytes και τελικά τυπώνει το +αποτέλεσμα (89). Ομολογουμένως οι πληροφορίες δεν είναι ιδιαίτερα χρήσιμες. + +Ένα ενδιαφέρον σημείο είναι το αρχείο /tmp/hsperfdata\_alf/787 το οποίο βλέπουμε να διαγράφεται. Παραπάνω στο fib.str υπάρχει το σημείο που ανοίγει: + + [400379b8] open("/tmp/hsperfdata_alf/787", O_RDWR|O_CREAT|O_TRUNC, 0600) = 3 + [4015bd61] ftruncate(3, 16384) = 0 + [4015d8ed] old_mmap(NULL, 16384, PROT_READ|PROT_WRITE, MAP_SHARED, 3, 0) = 0x4081e000 + [40036f41] close(3) = 0 + +Το /tmp/hsperfdata\_alf/787 αντιστοιχείται (mapped) στις διευθύνσεις μνήμης 0x4081e000-0x40822000 και περαιτέρω προσπελάσεις γίνονται μέσα από αυτές τις +διευθύνσεις. Μπορούμε να δούμε τα περιεχόμενα του αρχείου αν φροντίσουμε ώστε να αργήσει να τελειώσει το πρόγραμμα μας (πχ με java -server fib 100), για να μην +προλάβει να σβηστεί το προσωρινό αυτό αρχείο. + +Μια σύντομη εξέταση του αρχείου μας δείχνει πως πρόκειται για πληροφορίες που χρησιμοποιεί ο HotSpot(TM) JIT μεταγλωττιστής της Sun. Έτσι εξηγείται και το +\"hsperfdata\_alf\" που μάλλον σημαίνει HotSpot(TM) Performance Data για τον χρήστη alf. Επίσης, το αρχείο αρχίζει με τα bytes 0xCA 0xFE 0xC0 0xC0. Η αναζήτηση +στο internet για το νόημα των bytes ήταν άκαρπη, πάντως υποψιάζομαι ότι είναι το signature των αρχείων δεδομένων του JIT μεταγλωττιστή. + +Αν και (ελπίζω) ενδιαφέρουσα, η ως τώρα περιήγηση στον JIT μεταγλωττιστή δε μας οδήγησε πιο κοντά στη λύση. Παραμένει το καίριο ερώτημα για τη θέση του native +κώδικα. + +Ένας συλλογισμός που ίσως μας οδηγήσει στη λύση είναι ο παρακάτω: Ο java διερμηνευτής αφού δημιουργήσει τον native κώδικα περνάει τον έλεγχο σε αυτόν. Ο κώδικας +μας είναι αμιγώς cpu-intensive, δηλαδή χρησιμοποιεί πολύ τον επεξεργαστή και δεν έχει I/O που μπορούν να διακόψουν τη λειτουργία του. Αυτό σημαίνει πως αν σε +μια τυχαία χρονική στιγμή εξετάσουμε σε ποια διεύθυνση δείχνει ο instruction pointer (IP) της διεργασίας, αυτή με πολύ μεγάλη πιθανότητα θα βρίσκεται μέσα στις +διευθύνσεις που καταλαμβάνει ο native κώδικας. + +Επομένως, το πρόβλημα μας μετασχηματίστηκε στην εύρεση ενός τρόπου να παρακολουθούμε σε ποια διεύθυνση βρίσκεται η εκτέλεση κάποια διεργασίας! + +#### \...Σαν να ψάχνεις διεύθυνση στα άχυρα + +Μια πρώτη σκέψη είναι να εκτελέσουμε την java στο GDB, να διακόπτουμε το πρόγραμμα κάθε λίγο και να καταγράφουμε τις τιμές του IP. Απλό και αποτελεσματικό\... +μόνο που δε φαίνεται να λειτουργεί στη δική μας περίπτωση :( + + $ gdb -q java + (no debugging symbols found)...(gdb) r -server fib 10 + Starting program: /usr/lib/j2sdk1.4.2_01/bin/java -server fib 10 + (no debugging symbols found)...[New Thread 16384 (LWP 1536)] + (no debugging symbols found)... + (no debugging symbols found)...Cannot find user-level thread for LWP 1536: generic error + (gdb) info reg + No selected frame. + (gdb) q + The program is running. Exit anyway? (y or n) y + Cannot find thread 16384: generic error + (gdb) q + The program is running. Exit anyway? (y or n) y + Cannot find thread 16384: generic error + +Όχι μόνο δεν καταφέραμε να τρέξουμε τη Java αλλά \"τα πήρε\" και ο GDB. Αααργκ!!! Αν κάποιος ξέρει τι συμβαίνει παρακαλώ να μου γράψει\... + +Μην απελπίζεστε! Ευτυχώς για εμάς, το πάντα χρήσιμο /proc προσφέρει την υπηρεσία που χρειαζόμαστε (τον τρέχων IP μιας διεργασίας). Η πληροφορία βρίσκεται καλά +κρυμμένη μέσα στο /proc/\#/stat και θα χρησιμοποιήσουμε την εντολή ps για να τη φέρουμε στην επιφάνεια. Συγκεκριμένα θα χρησιμοποιήσουμε τη παράμετρο -ο για να +ορίσουμε τις πληροφορίες που θέλουμε να εμφανίζει η ps (βλέπε man page). + +Τώρα, λοιπόν, έχουμε όλα τα εργαλεία στα χέρια μας και μπορούμε να αρχίσουμε δουλειά! Με τις παρακάτω εντολές τρέχουμε τη java και κάθε 0.2 δευτερόλεπτα +τυπώνουμε τον IP της (30 δείγματα). + + $ java -server fib 100 & + [1] 1390 + $ for ((i=0;$i<30;i++)); do ps --pid=1390 -o eip; sleep 0.2; done + EIP + 42900340 + EIP + 429003b8 + EIP + 4290033b + EIP + 4290031c + EIP + 4290030f + EIP + 42900302 + EIP + 42900372 + EIP + 429002e0 + EIP + 429002e0 + EIP + 42900414 + EIP + 42900386 + EIP + 429003dc + EIP + 429003d3 + EIP + 429002e0 + EIP + 4290044d + EIP + 42900455 + EIP + 429003dc + EIP + 429003b4 + EIP + 42900369 + EIP + 42900453 + EIP + 42900409 + EIP + 42900350 + EIP + 42900441 + EIP + 429003c4 + EIP + 429002e7 + EIP + 42900372 + EIP + 42900390 + EIP + 42900311 + EIP + 429003b4 + EIP + 429003b4 + +Παρατηρούμε πως ο κώδικας βρίσκεται σε ένα βρόχο με μικρότερη διεύθυνση την 0x429002e0 και μέγιστη 0x42900453. Οι διευθύνσεις αυτές μπορεί να μην είναι τα +ακριβή άκρα του βρόχου, αφού έχουμε κάνει τυχαία δειγματοληψία, αλλά με μεγάλη πιθανότητα είναι κάπου εκεί κοντά. + +Το μόνο που μένει τώρα είναι να διαβάσουμε τον κώδικα που βρίσκεται σε αυτές τις θέσεις μνήμης. Για το σκοπό αυτό θα χρησιμοποιήσουμε και πάλι το /proc και +συγκεκριμένα το \"αρχείο\" /proc/\#/mem. Η πρόσβαση στο αρχείο γίνεται με τις γνωστές εντολές (open/fopen, lseek/fseek, read/fread) αλλά υπάρχουν δύο σημεία που +πρέπει να προσεχθούν. Καταρχάς, για να μας επιτραπεί να διαβάσουμε από το mem αρχείο θα πρέπει η δική μας διεργασία να έχει \"δεθεί\" με τη διεργασία της οποίας +τη μνήμη σκοπεύουμε να προσπελάσουμε. Αυτό το \"δέσιμο\" γίνεται μέσω της ptrace, η οποία μας δίνει το δικαίωμα να παρακολουθούμε τη διεργασία. Ένα δεύτερο +σημείο προσοχής είναι ότι θα πρέπει η διεργασία που μας ενδιαφέρει να μην είναι σε κατάσταση εκτέλεσης. Αυτό επιτυγχάνεται στέλνοντάς της το σήμα SIGSTOP. + + $ kill -SIGSTOP 1390 + $ memread 1390 0x429002e0 0x200 < fib.bin + Reading from Process: 1390 Address: 0x429002e0 Size: 512 + Successfully read 512 bytes! + +Ο αριθμός των 512 bytes επιλέχθηκε αυθαίρετα, με μόνη προϋπόθεση να είναι μεγαλύτερος από τα όρια του βρόχου που βρήκαμε προηγουμένως. + +Ο κώδικας του memread: [memread.c.gz](./memread.c.gz). + +### [4.3 Η ανάλυση]{#ss4.3} + +Τώρα που επιτέλους έχουμε στα χέρια μας τον native κώδικα μπορούμε να αρχίσουμε την ανάλυση. Τι μυστικά κρύβει, άραγε, αυτό το μικρό αρχείο των 512 bytes; + +Φορτώνουμε το αρχείο στον ht με ht fib.bin και επιλέγουμε disasm/x86 mode (πατώντας space ή F6). Παρακάτω φαίνεται ο κώδικας με κάποια σχόλια: + + 00000000 89842400d0ffff mov [esp-00003000], eax + 00000007 81ec24000000 sub esp, 0x24 + 0000000d 83f902 cmp ecx, 0x2 ;; ecx=n + 00000010 0f8c5d010000 jl 0x173 ;; n < 2 ? + 00000016 89742414 mov [esp+0x14], esi + 0000001a 896c2418 mov [esp+0x18], ebp + 0000001e 897c241c mov [esp+0x1c], edi + 00000022 8be9 mov ebp, ecx + 00000024 4d dec ebp ;; ebp=n-1 + 00000025 8bd9 mov ebx, ecx + 00000027 83c3fb add ebx, fffffffb ;; ebx=n-5 + 0000002a 8bf1 mov esi, ecx + 0000002c 83c6fe add esi, fffffffe ;; esi=n-2 + 0000002f 8bc1 mov eax, ecx + 00000031 83c0fc add eax, fffffffc ;; eax=n-4 + 00000034 8bd1 mov edx, ecx + 00000036 83c2fd add edx, fffffffd ;; edx=n-3 + + 00000039 83fd02 cmp ebp, 0x2 + 0000003c 0f8c96000000 jl 0xd8 ;; n-1 < 2 => n < 3 ? + 00000042 83fe02 cmp esi, 0x2 + 00000045 7c40 jl 0x87 ;; n-2 < 2 => n < 4 ? + 00000047 8954240c mov [esp+0xc], edx ;; + 0000004b 89442408 mov [esp+0x8], eax ;; Save registers (1) + 0000004f 895c2404 mov [esp+0x4], ebx ;; + 00000053 890c24 mov [esp], ecx ;; + 00000056 8bca mov ecx, edx + 00000058 90 nop + 00000059 90 nop + 0000005a 90 nop + 0000005b e8a0ffffff call 0x0 ;; call fib(n-3) + 00000060 89442410 mov [esp+0x10], eax + 00000064 8b4c2408 mov ecx, [esp+0x8] + 00000068 90 nop + 00000069 90 nop + 0000006a 90 nop + 0000006b e890ffffff call 0x0 ;; call fib(n-4) + 00000070 8bf8 mov edi, eax + 00000072 037c2410 add edi, [esp+0x10] ;; edi = fib(n-3)+fib(n-4) + 00000076 8b0c24 mov ecx, [esp] ;; + 00000079 8b5c2404 mov ebx, [esp+0x4] ;; Restore registers (1) + 0000007d 8b442408 mov eax, [esp+0x8] ;; + 00000081 8b54240c mov edx, [esp+0xc] ;; + 00000085 eb02 jmp 0x89 + + 00000087 8bfe mov edi, esi ;; edi = n-2 + 00000089 83fa02 cmp edx, 0x2 + 0000008c 7c26 jl 0xb4 ;; n-3 < 2 => n < 5 ? + 0000008e 8954240c mov [esp+0xc], edx ;; + 00000092 89442408 mov [esp+0x8], eax ;; Save registers (2) + 00000096 895c2404 mov [esp+0x4], ebx ;; + 0000009a 890c24 mov [esp], ecx ;; + 0000009d 8bc8 mov ecx, eax + 0000009f e85cffffff call 0x0 ;; call fib(n-4) + 000000a4 8be8 mov ebp, eax + 000000a6 8b4c2404 mov ecx, [esp+0x4] + 000000aa 90 nop + 000000ab e850ffffff call 0x0 ;; call fib(n-5) + 000000b0 03c5 add eax, ebp ;; eax = fib(n-4) + fib(n-5) + 000000b2 eb11 jmp 0xc5 + + 000000b4 8954240c mov [esp+0xc], edx ;; + 000000b8 89442408 mov [esp+0x8], eax ;; Save registers (3) + 000000bc 895c2404 mov [esp+0x4], ebx ;; + 000000c0 890c24 mov [esp], ecx ;; + 000000c3 8bc2 mov eax, edx + 000000c5 8be8 mov ebp, eax + 000000c7 03ef add ebp, edi + 000000c9 8b0c24 mov ecx, [esp] ;; + 000000cc 8b5c2404 mov ebx, [esp+0x4] ;; Restore registers (2,3) + 000000d0 8b442408 mov eax, [esp+0x8] ;; + 000000d4 8b54240c mov edx, [esp+0xc] ;; + + 000000d8 83fe02 cmp esi, 0x2 + 000000db 0f8c80000000 jl 0x161 ;; n-2 < 2 => n < 4 + 000000e1 83fa02 cmp edx, 0x2 + 000000e4 7c39 jl 0x11f ;; n-3 < 2 => n < 5 + 000000e6 8bfa mov edi, edx + 000000e8 89442408 mov [esp+0x8], eax ;; + 000000ec 895c2404 mov [esp+0x4], ebx ;; Save registers (4) + 000000f0 890c24 mov [esp], ecx ;; + 000000f3 8bc8 mov ecx, eax + 000000f5 90 nop + 000000f6 90 nop + 000000f7 e804ffffff call 0x0 ;; call fib(n-4) + 000000fc 8944240c mov [esp+0xc], eax + 00000100 8b4c2404 mov ecx, [esp+0x4] + 00000104 90 nop + 00000105 90 nop + 00000106 90 nop + 00000107 e8f4feffff call 0x0 ;; call fib(n-5) + 0000010c 8bf8 mov edi, eax + 0000010e 037c240c add edi, [esp+0xc] ;; edi = fib(n-4) + fib(n-5) + 00000112 8b0c24 mov ecx, [esp] ;; + 00000115 8b5c2404 mov ebx, [esp+0x4] ;; Restore registers (4) + 00000119 8b442408 mov eax, [esp+0x8] ;; + 0000011d eb02 jmp 0x121 + + 0000011f 8bfa mov edi, edx + 00000121 83f802 cmp eax, 0x2 + 00000124 7c37 jl 0x15d ;; n-4 < 2 => n < 6 + 00000126 890424 mov [esp], eax + 00000129 8bf1 mov esi, ecx + 0000012b 8bcb mov ecx, ebx + 0000012d 90 nop + 0000012e 90 nop + 0000012f e8ccfeffff call 0x0 ;; call fib(n-5) + 00000134 890424 mov [esp], eax + 00000137 8bce mov ecx, esi + 00000139 83c1fa add ecx, fffffffa ;; n' = n - 6 + 0000013c 90 nop + 0000013d 90 nop + 0000013e 90 nop + 0000013f e8bcfeffff call 0x0 ;; call fib(n-6) + 00000144 030424 add eax, [esp] ;; eax = fib(n-5) + fib(n-6) + 00000147 eb14 jmp 0x15d + 00000149 8b6c2418 mov ebp, [esp+0x18] + 0000014d 8b7c241c mov edi, [esp+0x1c] + 00000151 8b742414 mov esi, [esp+0x14] + 00000155 83c424 add esp, 0x24 + 00000158 e9a377ffff jmp ffff7900 + 0000015d 03c7 add eax, edi + 0000015f eb02 jmp 0x163 + 00000161 8bc6 mov eax, esi + 00000163 03c5 add eax, ebp + 00000165 8b6c2418 mov ebp, [esp+0x18] + 00000169 8b7c241c mov edi, [esp+0x1c] + 0000016d 8b742414 mov esi, [esp+0x14] + 00000171 eb02 jmp 0x175 + 00000173 8bc1 mov eax, ecx + 00000175 83c424 add esp, 0x24 + 00000178 c3 ret + + 00000179 90 nop ;; Από εδώ και κάτω είναι άχρηστος (για τους σκοπούς μας) κώδικας + 0000017a 90 nop + 0000017b 8bc8 mov ecx, eax + 0000017d ebca jmp 0x149 + 0000017f 8bc8 mov ecx, eax + 00000181 ebc6 jmp 0x149 + 00000183 8bc8 mov ecx, eax + 00000185 ebc2 jmp 0x149 + 00000187 8bc8 mov ecx, eax + 00000189 ebbe jmp 0x149 + 0000018b 8bc8 mov ecx, eax + 0000018d ebba jmp 0x149 + 0000018f 8bc8 mov ecx, eax + 00000191 ebb6 jmp 0x149 + 00000193 8bc8 mov ecx, eax + 00000195 ebb2 jmp 0x149 + 00000197 8bc8 mov ecx, eax + 00000199 ebae jmp 0x149 + +Το παραπάνω listing αν και μεγάλο σε μήκος είναι στην ουσία αρκετά απλό. Οι βασικοί λόγοι για τους οποίους φαίνεται μπερδεμένο είναι οι συνεχείς μετακινήσεις +προς και από το σωρό και οι επαναχρησιμοποίηση των καταχωρητών για εντελώς διαφορετικό σκοπό (πχ ο ebp αρχικά εκφράζει το n-1 ενώ αργότερα, από τη διεύθυνση +0xc7 και πέρα περιέχει κάποιο άλλο άθροισμα). + +[]{#advice} Το πρώτο βήμα για την ανάλυση κώδικα σε assembly είναι συνήθως η επισύναψη σχολίων πάνω στον κώδικα όπως παραπάνω. Ένας καλός τρόπος για να +συνεχίσουμε είναι η σταδιακή μετατροπή του κώδικα σε κάποια πιο υψηλή και γνώριμη μορφή, αγνοώντας περιττές λεπτομέρειες. Για παράδειγμα, το κομμάτι ανάμεσα +στις διευθύνσεις 0x39 και 0x87 θα μπορούσε ως επόμενο βήμα να γραφτεί: + + if (n-1 < 2) goto 0xd8 + if (n-4 < 2) goto 0x87 + edi = fib(n-3) + fib(n-4) + goto 89 + 87: edi = n-2 + 89: + +και ύστερα, αναγνωρίζοντας τη δομή if-else που υπάρχει: + + if (n-1 < 2) goto 0xd8 + if (n-4 >= 2) + edi = fib(n-3) + fib(n-4); + else + edi = n-2; + 89: + +Ακολουθώντας μια τέτοια διαδικασία τελικά καταλήγουμε στον παρακάτω Java/C κώδικα που εκφράζει πιο ξεκάθαρα την λειτουργία του assembly κώδικα: + + int fib_jit(int n) + { + int C,D; + + if (n < 2) + return n; + + if (n >= 3) { + int A,B; + + if (n >= 4) + A=fib_jit(n-3)+fib_jit(n-4); + else + A=n-2; + + if (n >= 5) + B=fib_jit(n-4)+fib_jit(n-5); + else + B=n-3; + + C=A+B; + } + else + C=n-1; + + if (n >= 4) { + int A,B; + + if (n >= 5) + A=fib_jit(n-4)+fib_jit(n-5); + else + A=n-3; + + if (n >= 6) + B=fib_jit(n-5)+fib_jit(n-6); + else + B=n-4; + + D=A+B; + } + else + D=n-2; + + return D+C; + } + +Βέβαια, ακόμη και με την παραπάνω μορφή το τι ακριβώς συμβαίνει και γιατί λειτουργεί το κατασκεύασμα του JIT μεταγλωττιστή παραμένει κάπως μυστήριο. Για να +ανακαλύψουμε όλη την αλήθεια θα πρέπει να θυμηθούμε την αρχική συνάρτηση fib. Αυτή μπορεί να ξαναγραφτεί ως: + + public static int fib(int n) { + int R; + + if (n >= 2) + R=fib(n-1) + fib(n-2); + else + R=n; + + return R; + } + +Σας θυμίζει τίποτα; Η δομή if-else που υπάρχει στη αρχική fib φαίνεται να μοιάζει πολύ με τις if-else που υπάρχουν διάσπαρτες στην fib\_jit. Για την ακρίβεια, +οι δομές που υπάρχουν στην fib\_jit *είναι* η fib() για διάφορες παραστάσεις του n!!! + +Για να γίνει πιο κατανοητό το παραπάνω θεωρήστε το: + + if (n >= 4) + A = fib_jit(n-3)+fib_jit(n-4); + else + A = n-2; + +το οποίο πρακτικά είναι το: + + Α=fib(n-2); + +Κάνοντας τις παραπάνω αντικαταστάσεις και κάποιες απλοποιήσεις προκύπτει η εξής fib\_jit1: + + int fib_jit1(int n) + { + int C,D; + + if (n < 2) + return n; + + if (n >= 3) + C = fib(n-2) + fib(n-3); + else + C = n-1; + + if (n >= 4) + D = fib(n-3) + fib(n-4); + else + D = n-2; + + return D+C; + } + +Χμμ, εμφανίστηκαν πάλι οι γνωστές δομές if-else. Είναι σαν τον κώδικα της μαρμότας\... ξαναζείς τον ίδιο κάθε φορά :) Αν αντικαταστήσουμε και αυτές τις δομές με +την αντίστοιχη fib προκύπτει: + + int fib_jit2(int n) + { + + if (n < 2) + return n; + + return fib(n-1) + fib(n-2); + } + +H παραπάνω συνάρτηση δεν είναι άλλη από τη αυθεντική fib! Επομένως φτάσαμε στο συμπέρασμα πως fib=fib\_jit και άρα όντως η fib\_jit λειτουργεί σωστά, αφού στην +ουσία είναι η ίδια η fib σε άλλη μορφή. + +Τώρα πιστεύω πως είναι σαφές τι \"μαγικά\" έκανε ο JIT μεταγλωττιστής της Java. Ουσιαστικά έκανε inlining των αναδρομικών κλήσεων της fib σε δύο επίπεδα βάθους! +Αυτό είχε ως αποτέλεσμα να αποφευχθεί ένα μέρος του κόστους των κλήσεων συναρτήσεων και επομένως να αυξηθεί η ταχύτητα εκτέλεσης. + +### [4.4 Το συμπέρασμα]{#ss4.4} + +Τελικά είναι η Java πιο γρήγορη από τη C; Θέλω να ελπίζω πως θα συμφωνήσετε μαζί στο ότι αυτή είναι η λάθος ερώτηση! Αυτό που πρέπει να ρωτήσουμε είναι αν ο JIT +μεταγλωττιστής παράγει πιο γρήγορο κώδικα από τον gcc. Η απάντηση είναι πως ειδικά σε αυτή τη περίπτωση ναι και σε γενικές γραμμές παράγει εξίσου καλό κώδικα. + +Αν συνεχίσουμε το πείραμα και μεταγλωττίσουμε τη συνάρτηση fib\_jit() (σε C) με τον gcc, το τελικό εκτελέσιμο θα έχει ελαφρώς καλύτερη απόδοση από αυτό της +Java. Το θέμα εδώ είναι ότι ο JIT μας απαλλάσσει από αυτή τη διαδικασία. Βέβαια, για να υπερασπιστούμε λίγο και τον gcc, o JIT μεταγλωττιστής έχει το +πλεονέκτημα πως έχει πρόσβαση και στις πληροφορίες δυναμικής εκτέλεσης του προγράμματος ενώ ο gcc μπορεί μόνο στατικά να ελέγξει τον κώδικα. + +Ηθικό δίδαγμα: οι γλώσσες δε μπορούν να συγκριθούν με κριτήριο την ταχύτητα, μόνο οι μεταγλωττιστές τους μπορούν. + + +### [5. Πρόκληση]{#s5} + +### [5.1 Προηγούμενη Πρόκληση]{#ss5.1} + +Η προηγούμενη πρόκληση είχε ως στόχο την ανακάλυψη ενός τρόπου για να ανοίξει η θήκη μέσα στην οποία βρίσκεται ένας πρότυπος RISC επεξεργαστής, μέσω της μελέτης +του emulator του. + +Καταρχάς, ο emulator περιείχε συνολικά τρία αρχεία: το εκτελέσιμο risc-emu, το change.txt και το log.txt. Παρ\' όλο που τα δύο τελευταία αρχεία έχουν .txt +κατάληξη, κάθε άλλο παρά text είναι! Θα μπορούσαμε να τα αγνοήσουμε τελείως αλλά για να υπάρχουν εκεί κάποιο ρόλο παίζουν\... Επιπλέον, δεν αισθάνεστε την +ανάγκη να ικανοποιήσετε την περιέργεια σας; Τι άραγε κρύβουν τα αρχεία αυτά; + +Μια προσεκτική παρατήρηση των στοιχείων μπορεί να φέρει στην επιφάνεια τέσσερα σημεία που οδηγούν στη λύση: + +1. Τα αρχεία έχουν κατάληξη .txt. Αν και τα ίδια δεν αποτελούνται από κείμενο, πιθανότατα να έχουν κάποια σχέση με κείμενο. Βέβαια, ίσως οι καταλήξεις να είναι + εντελώς παραπλανητικές {δαιμονικό γέλιο ακούγεται στο υπόβαθρο} :) + +2. Τα αρχεία έχουν ακριβώς το ίδιο μέγεθος. Αυτό είναι ισχυρό στοιχείο πως σχετίζονται μεταξύ τους έμμεσα ή άμεσα. + +3. Αν συνδυάσουμε τα ονόματα των δύο αρχείων λαμβάνουμε τη λέξη changelog η οποία είναι ένα αρκετά κοινό αρχείο που ακολουθεί προγράμματα. Το γεγονός αυτό + ενισχύει την άποψη πως τα δύο αρχεία συνδέονται μεταξύ τους. Το θέμα είναι πως υπάρχουν άπειροι τρόποι να συνδυαστούν δύο αρχεία! + +4. Αν προσέξετε το κείμενο της πρόκλησης, ο emulator ονομάζεται \"RISC-emu v0.42rox\". Η ύποπτη λέξη εδώ είναι το rox το οποίο είναι το ανάποδο του xor\... + +Πιστεύω πως τώρα πια το μυστήριο αρχίζει να ξεδιαλύνει. Αν εφαρμόσετε το δυαδικό τελεστή xor, byte προς byte μεταξύ των δύο αρχείων, θα καταλήξετε στο εξής: + + RISC-emu Changelog + -------------------- + v0.42 + ------ + - Preliminary support for sorting rom module authentication scheme. + The random values are stored at registers 0x90, 0x91, 0x92 after startup. + - Added support for the "random reg" instruction + + v0.41 + ----- + - Added Support for the new "swap reg1,reg2" instruction (opcode 0x82) + - Preliminary support for the "random reg" instruction + + v0.40 + ------ + - The CPU architecture has changed significantly so this version is + an almost complete rewrite. + *ram 1024 bytes, + *registers 256, 4-bytes each + *The instruction size is now 4 bytes. + +Οι πιο σημαντικές πληροφορίες που μας δίνει το παραπάνω changelog είναι ότι ο επεξεργαστής έχει μέγεθος εντολών 4 bytes και εφόσον πρόκειται για RISC +αρχιτεκτονική αυτό ισχύει για όλες τις εντολές. Επίσης μαθαίνουμε ότι υπάρχει μια εντολή swap με opcode 0x82 και μια εντολή random reg με άγνωστο opcode. Τέλος +στους καταχωρητές 0x90, 0x91 και 0x92 αρχικά τοποθετούνται τυχαίες τιμές που πρέπει να ταξινομήσουμε (sorting rom module authentication scheme). + +Αν τρέξουμε το πρόγραμμα μερικές φορές μας ζητάει να ταξινομήσουμε τρεις αριθμούς κάθε φορά: + + $ ./risc-emu + Welcome to Skynet. Please sort: 975 + $ ./risc-emu + Welcome to Skynet. Please sort: 396 + +Για να το καταφέρουμε αυτό θα πρέπει να φτιάξουμε ένα πρόγραμμα στον κώδικα μηχανής του συγκεκριμένου RISC επεξεργαστή. Το βασικό μας πρόβλημα είναι ότι δεν +ξέρουμε καν ποιο είναι το σετ εντολών του επεξεργαστή! Το μόνο που μπορούμε να κάνουμε είναι να το βρούμε αναλύοντας τον εξομοιωτή. + +Αν φορτώσουμε το εκτελέσιμο στον ht και κάνουμε μια βόλτα στο .text section θα παρατηρήσουμε ότι τα πράγματα δεν είναι και τόσο καλά. + + || ....... ;****************************************************************** + || ....... ; section 13 <.text> + || ....... ; virtual address 08048464 virtual size 000004b8 + || ....... ; file offset 00000464 file size 000004b8 + || ....... ;****************************************************************** + || ....... mov eax, 0d6b4dc0bh + || 804846a mov cl, 0a5h + || 804846c add eax, 493d0701h + || 8048471 fcom double ptr [ecx+5dh] + || 8048474 cmp eax, 5d51d6d9h + || 8048479 add al, 3 + || 804847b cmp eax, 5d51d041h + || 8048480 mov ebp, 0aaaaaa2ah + +Οι παραπάνω εντολές δεν είναι του είδους που θα περίμενε κάποιος σε ένα τέτοιο πρόγραμμα. Και το entry point που είναι χαμένο; Επιλέγοντας το mode elf/header +στον ht βρίσκουμε ότι το entry point είναι στη διεύθυνση 0x80489ea. Χμμ\... ελέγχοντας τη διεύθυνση, με έκπληξη διαπιστώνουμε πως δεν ανήκει σε κανένα +section!!! + + Sections: + Idx Name Size VMA LMA File off Algn + ... + + 11 .text 000004b8 08048464 08048464 00000464 2**2 + CONTENTS, ALLOC, LOAD, CODE + 12 .fini 0000001b 0804891c 0804891c 0000091c 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 13 .rodata 00000010 08048938 08048938 00000938 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 14 .data 000000a4 08049960 08049960 00000960 2**5 + CONTENTS, ALLOC, LOAD, DATA + ... + +To κοντινότερο section είναι το .rodata το οποίο όμως τελειώνει αρκετά πριν το entry point, στη διεύθυνση 0x8048947. Τι γίνεται εδώ; + +Θυμηθείτε πως για το φόρτωμα του προγράμματος βασική δομική μονάδα δεν είναι το section αλλά το segment. Με άλλα λόγια, δεν φορτώνονται sections αλλά segments +που μπορούν να περιέχουν παραπάνω από ένα sections. Για το risc-emu η λίστα με τα segments είναι (με objdump -p): + + Program Header: + PHDR off 0x00000034 vaddr 0x08048034 paddr 0x08048034 align 2**2 + filesz 0x000000c0 memsz 0x000000c0 flags r-x + INTERP off 0x000000f4 vaddr 0x080480f4 paddr 0x080480f4 align 2**0 + filesz 0x00000013 memsz 0x00000013 flags r-- + LOAD off 0x00000000 vaddr 0x08048000 paddr 0x08048000 align 2**12 + filesz 0x00000948 memsz 0x00000948 flags rwx + LOAD off 0x00000960 vaddr 0x08049960 paddr 0x08049960 align 2**12 + filesz 0x000001c0 memsz 0x000001c4 flags rwx + DYNAMIC off 0x00000a08 vaddr 0x08049a08 paddr 0x08049a08 align 2**2 + filesz 0x000000c8 memsz 0x000000c8 flags rw- + NOTE off 0x00000108 vaddr 0x08048108 paddr 0x08048108 align 2**2 + filesz 0x00000020 memsz 0x00000020 flags r-- + +Το πρώτο load segment είναι το code segment και το δεύτερο το data segment. Και πάλι το entry point δε φαίνεται να ανήκει σε κανένα segment! + +Το κλειδί στην όλη υπόθεση είναι το πεδίο align, με τιμή 2\^12= 0x1000 (μια σελίδα). Η τιμή αυτή μας λέει ταυτόχρονα τρία πράγματα: + +1. Τo segment μπορεί να φορτωθεί μόνο σε κομμάτια πολλαπλάσια των 0x1000 bytes. + +2. Τo segment μπορεί να φορτωθεί μόνο από file offsets πολλαπλάσια των 0x1000 bytes. + +3. Το segment μπορεί να τοποθετηθεί μόνο σε εικονικές διευθύνσεις πολλαπλάσιες των 0x1000 bytes. + +Αν το data segment αρχίζει από ένα άλλο σημείο μιας σελίδας τότε φορτώνεται όλη η σελίδα στην οποία ανήκει η αρχή του data segment και έτσι ίσως φορτωθεί ένα +μέρος από το τέλος του code segment. Επίσης σε περίπτωση που το text segment δεν τελειώνει σε όρια σελίδας τότε πάλι φορτώνεται όλη η σελίδα στην οποία ανήκει +και επομένως ίσως φορτωθεί και ένα μέρος από την αρχή του data segment. Αυτή η τελευταία παρατήρηση είναι ο λόγος που το πρόγραμμα μας με το άφαντο entry point +λειτουργεί. Το παρακάτω σχήμα ίσως ξεκαθαρίσει λίγο τα πράγματα: + +![](/35/img/mem.png) + +Τα δύο segments αντιστοιχούνται σε δύο διαφορετικά σημεία της εικονικής μνήμης αλλά υπάρχουν μόνο μια φορά στη φυσική μνήμη. Έτσι η διεύθυνση 0x80489ea (entry +point) έχει τα ίδια δεδομένα με τη διεύθυνση 0x80499ea η οποία ανήκει στο data segment! Ουσιαστικά το entry point δείχνει σε κώδικα που βρίσκεται μέσα στο data +segment στο αρχείο αλλά έχει φορτωθεί παρέα με το code segment στη μνήμη. Πολύ μπέρδεμα η όλη υπόθεση\... ελπίζω να βγάλατε άκρη τελικά ;) + +Για να δούμε τι υπάρχει στο entry point αρκεί λοιπόν να πάμε με τον ht στη διεύθυνση 0x80499ea. Εκεί, όμως, δε θα δούμε εντολές διότι ο ht δεν επεξεργάζεται τα +bytes που βρίσκονται στο .data section, αφού θεωρεί (δίκαια) πως δε περιέχουν κώδικα. Για να αναλύσει τη συγκεκριμένη διεύθυνση θα πρέπει να δηλώσουμε ότι όντως +εκεί υπάρχει κώδικας. Αρκεί στο mode elf/sections headers να επιλέξουμε to section .data και να αλλάξουμε το πεδίο flags ώστε το flag executable να είναι 1 +(πατώντας F4 όταν είμαστε στα flags μπαίνουμε σε edit mode). Τώρα στο elf/image θα έχει αναλυθεί και ο κώδικας στο entry point: + + || 80499ea mov ecx, 4b8h + || 80499ef mov eax, 8048464h + || 80499f4 xor byte ptr [eax], 55h + || 80499f7 inc eax + || 80499f8 dec ecx + || 80499f9 jnz 80499f4h + || 80499fb jmp 8049464h + || 8049a00 add [eax], al + || 8049a02 add [eax], al + +Ο κώδικας είναι πολύ απλός: αρχίζοντας από τη διεύθυνση 0x8048464 και για τα επόμενα 0x4b8 bytes, το κάθε byte (b) αντικαθίσταται με το (b xor 0x55). Πρόκειται +για έναν στοιχειώδη αλγόριθμο κρυπτογράφησης. Η διεύθυνση 0x8048464 (όπως και η διεύθυνση 0x8049464) είναι η αρχή του .text section και η τιμή 0x4b8 το μήκος +του section. Αυτός είναι και ο λόγος που τα περιεχόμενα του .text δεν έβγαζαν κάποιο νόημα όταν τα εξετάσαμε στην αρχή. + +Από εδώ και πέρα υπάρχουν δύο τρόποι για να προχωρήσουμε. Ο πρώτος είναι να \"παγώσουμε\" το πρόγραμμα αμέσως μετά την αποκρυπτογράφηση και να αποθηκεύσουμε την +εικόνα του σε κάποιο αρχείο (βλέπε προηγούμενο άρθρο Packed Executables - Συμπιεσμένα Εκτελέσιμα). Αυτό μπορεί να επιτευχθεί χρησιμοποιώντας το gdb, με την +τοποθέτηση ενός breakpoint στη διεύθυνση 0x80489fb. Αφού \"χτυπήσει\" το breakpoint μπορούμε με την εντολή dump να αποκτήσουμε την εικόνα της μνήμης του +προγράμματος. + +Επειδή ο αλγόριθμος κρυπτογράφησης είναι εξαιρετικά απλός, μπορούμε με κάποιο πρόγραμμα ή hex editor να αποκρυπτογραφήσουμε μόνοι μας το .text section. Αν +θέλουμε να μπορεί να εκτελείται το πρόγραμμα, δε θα πρέπει να αμελήσουμε να διορθώσουμε το entry point η τουλάχιστον να αδρανοποιήσουμε τον αλγόριθμο +κρυπτογράφησης (πχ αλλάζοντας το κλειδί από 0x55 σε 0x00). + +Από εδώ και πέρα μένει η ανάλυση του κώδικα που είναι το πιο χρονοβόρο και κουραστικό μέρος. Δε θα αναφερθώ περισσότερο σε αυτή διότι στηρίζεται σε μεγάλο βαθμό +στην εμπειρία του αναλυτή. Μερικές συμβουλές μπορείτε να βρείτε [εδώ](05_rce4-4.html#advice). To μόνο περίεργο που μπορεί να συναντήσετε είναι το γεγονός ότι η +δομή ελέγχου switch υλοποιείται σε χαμηλό επίπεδο (από τον gcc) με εμφωλευμένες δομές if, ακολουθώντας τη λογική της δυαδικής αναζήτησης. Για παράδειγμα το: + + switch(x) { + case 1: ...; break; + case 2: ...; break; + case 3: ...; break; + case 4: ...; break; + case 5: ...; break; + case 6: ...; break; + default: ...; break; + } + +μπορεί να μεταγλωττιστεί σα να είχατε γράψει κώδικα της μορφής: + + if (x<4) { + if (x<=2) { + if (x==1) ...; + if (x==2) ...; + } + else /* x==3 */ + ...; + } + else if (x<=6) + if (x<=5) { + if (x==4) ...; + if (x==5) ...; + } + else /* x==6 */ + ...; + } + else /* default */ + ...; + +O επεξεργαστής έχει εντολές των 4 bytes με το byte 0 να είναι το opcode. Οι διαθέσιμες εντολές είναι: + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + \ Opcode Περιγραφή + Όνομα + + HALT 0x00 halt + + ADD 0x01 reg{b1} = reg{b2} + reg{b3} + + LOADIL 0x02 low word(reg{b1}) = (b2b3) + + LOADIH 0x03 high word(reg{b1}) = (b2b3) + + STORE 0x04 mem{(b1b2)} = reg{b3} + + LOAD 0x05 reg{b3} = mem{(b1b2)} + + INDSTORE 0x06 mem{reg{b1} + reg{b2}} = b3 + + INDLOAD 0x07 b3 = mem{reg{b1} + reg{b2}} + + BE 0x08 if (reg{b1} == reg{b2}) ip += 4 \* b3 + + BNE 0x09 if (reg{b1} != reg{b2}) ip += 4 \* b3 + + BU 0x0A ip += 4 \* (b1b2) + + BR 0x0B ip += reg{b1} + + PRINT 0x0C τύπωσε τα δεδομένα με αρχή τη θέση μνήμης (b1b2) ως + δεκαεξαδικό, χαρακτήρα η συμβολοσειρά (b3=0,1,2) + + SETLT 0x0D if (reg{b2} \< reg{b3}) reg{b1} = 1; else reg{b1} = + 0; + + SWAP 0x82 reg{b1} \<=\> reg{b2} + + RANDOM 0xFF reg{b1} = random(0,9) + + + ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- + +όπου *reg\[i\]*: το περιεχόμενο του καταχωρητή i, *mem\[i\]*: το περιεχόμενο της θέσης μνήμης i, *(ij)*: η λέξη (16-bit) που δημιουργείται από τα bytes i και j +με i το λιγότερο σημαντικό byte, *ip*: δείκτης για την επόμενη εντολή που θα εκτελεστεί, *bi*: το byte i της τρέχουσας εντολής. + +Για να ταξινομήσουμε τους τρεις αριθμούς ένας απλός αλγόριθμος είναι: + + if (r91 < r90) swap(r90, r91); + if (r92 < r90) swap(r90, r92); + if (r92 < r91) swap(r91, r92); + +δηλαδή στη γλώσσα του δικού μας RISC: + + setlt r9,r91,r90 + be r0,r0,+1 + swap r91,r90 + setlt r9,r92,r90 + be r9,r0,+1 + swap r92,r90 + setlt r9,r92,r91 + be r9,r0,+1 + swap r92,r91 + +Αρκεί να σώσουμε το δυαδικό κώδικα σε ένα αρχείο και να το φορτώσουμε στον εξομοιωτή με risc-emu \<αρχείο\>. Βέβαια, μην περιμένετε ο εξομοιωτής να επιβεβαιώσει +την ορθότητα της λειτουργίας του προγράμματος\... όπως λέει και το changelog η υποστήριξη για το συγκεκριμένο χαρακτηριστικό δεν είναι πλήρης :) + +### [5.2 Hall of Fame]{#ss5.2} + +Αυτή τη φορά έλαβα μόνο μια απάντηση, η οποία όμως ήταν πραγματικά αξιόλογη! + +Συγχαρητήρια, λοιπόν, στον *Γιώργο Πρέκα* για τη [λύση](./prekas_geo-rce2sol.tar.gz) του ! + + Από το email του Γιώργου: + "Η λύση αποτελείται από τα εξής αρχεία: + + changelog.txt, το αποκρυπτογραφημένο changelog του εξομοιωτή. + + geo.c, το πρόγραμμα που αποκρυπτογραφεί το changelog.txt αρκεί να υπάρχουν + στον κατάλογο εκτέλεσής του τα αρχεία change.txt και log.txt. + + newprg, ο αποκρυπτογραφημένος εξομοιωτής. Φαίνεται πως κάποιο λάθος έκανα με + την εντολή dump του gdb και το αρχείο περιέχει δύο images: Ένα + αποκρυπτογραφημένο και ένα κρυπτογραφημένο. Δεν το διόρθωσα γιατί φοβόμουν + ότι μετά θα χάνονταν όλα τα σχόλια που είχα γράψει στον ht. + + newprg.ht*, αρχεία για τον ht. + + rom, αποτελεί ένα rom module, του οποίου η εκτέλεση μπορεί να εξομοιωθεί με + την εντολή ./risc-emu rom, και αφού πρώτα ταξινομήσει τις τιμές των + καταχωρητών 0x90, 0x91, 0x92, εκτελεί έναν ατέρμονα βρόχο, ώστε να μπορέσει + τελικά να ανοιχτεί η περιβόητη θήκη. Σημείωση: Από όσα κατάλαβα, για να + θεωρηθεί ένα rom module έγκυρο πρέπει να ταξινομήσει τους συγκεκριμένους + καταχωρητές. Αυτό δεν το ελέγχει ο εξομοιωτής, αν και έπειτα αφού + αποκρυπτογράφησα το changelog.txt, κατάλαβα πως δεν είναι ολοκληρωμένη η + υποστήριξη της συγκεκριμένης λειτουργίας." + +Τον source κώδικα της πρόκλησης και τη δική μου λύση μπορείτε να την κατεβάσετε από [εδώ](./alf-rce2sol.tar.gz). + +Ευτυχώς ή δυστυχώς, αυτό το άρθρο είναι μάλλον το τελευταίο της σειράς οπότε δεν υπάρχει επόμενη πρόκληση. Πάντως, όσοι πραγματικά ενδιαφέρονται για γρίφους +τέτοιου είδος δεν έχουν παρά να ψάξουν στο internet όπου θα βρουν αρκετές σχετικές σελίδες. Το μόνο αρνητικό στην όλη υπόθεση είναι πως οι περισσότερες από +αυτές ασχολούνται με εκτελέσιμα σε περιβάλλον Win32. Καλή συνέχεια! + diff --git a/content/articles/magaz_rebuild.sh b/content/articles/magaz_rebuild.sh new file mode 100755 index 0000000..17c237a --- /dev/null +++ b/content/articles/magaz_rebuild.sh @@ -0,0 +1,88 @@ +#!/bin/bash +# Work on a copy of the site or an extract of the tar files + +# Delete any non html. It should be located in the static/ dir +#find . -type f -not -name "*.html" -delete +#rm -r */img +#rm contents-full.html +# Initial Conversion to MarkDown +#find . -name "*.html" -exec sh -c "cat {} | sed -n '/Main content table/,/End of main content/p;/End of main content/q' | iconv -f iso8859-7 -t utf-8 | pandoc -s -r html -t markdown_github-raw_html | grep -vE '\[Περιεχόμενα\]|\[Επόμενο\]|\[Προηγούμενο\]' > {}.md_1" \; +# or +#find . -name "*.html" -exec sh -c "cat {} | sed -n '/Main content table/,/End of main content/p;/End of main content/q' | iconv -f iso8859-7 -t utf-8 | pandoc -s --columns=160 -r html -t markdown+pipe_tables-raw_html | grep -vE '\[Περιεχόμενα\]|\[Επόμενο\]|\[Προηγούμενο\]|^:::' > {}.md_1" \; + +for d in `find . -mindepth 1 -maxdepth 1 -type d`; do + echo \#Entering dir $d + cd $d + for chapter in $(ls [0-1]*html.md_1 | sed -e 's/\(.*\)-[0-9]*.html\.md_1/\1/' | cut -f1 -d\. | uniq); do + issue=$(basename $d) + # construct article header + intro=${chapter}.html.md_1 + title=$(cat $intro | sed '/^====.*/Q' | grep -v "^$" | tr -d "\'") + author="$(cat $intro | sed -n '/^\[\*.*/p;/.+\*\]/Q' | sed -e "s/\ <.*>//" | sed -e "s/{.*}//" | sed -e "s/ (.*)//" | tr -d "*,[]\\\'" )" + adate="$(cat $intro | sed -n '/^*\[/p' | sed -e 's/\*\[\(.*\)\].*/\1/' | tr -d "*\'")" + case "$adate" in + *Ιανουάριος* | *Ιανουαρίου*) + amonth="1" + ;; + *Φεβρουάριος* | *Φεβρουαρίου*) + amonth="2" + ;; + *Μάρτιος* | *Μαρτίου*) + amonth="3" + ;; + *Απρίλιος* | *Απριλίου*) + amonth="4" + ;; + *Μάϊος* | *Μαΐου*) + amonth="5" + ;; + *Ιούνιος* | *Ιουνίου*) + amonth="6" + ;; + *Ιούλιος* | *Ιουλίου*) + amonth="7" + ;; + *Αύγουστος* | *Αυγούστου*) + amonth="8" + ;; + *Σεπτέμβριος* | *Σεπτεμβρίου*) + amonth="9" + ;; + *Οκτώβριος* | *Οκτωβρίου*) + amonth="10" + ;; + *Νοέμβριος* | *Νοεμβρίου*) + amonth="11" + ;; + *Δεκέμβριος*) + amonth="12" + ;; + *) + echo -n "failed date" + ;; + esac + ayear=$(echo $adate | sed -e "s/.*\([[:digit:]]\{4\}\).*/\1/") + series="Magaz ${issue}" + order="$(basename $chapter | cut -d_ -f1|bc)" + # Start Template + # Start Front Matter + echo '+++' > ${chapter}.md + echo "title = '$title'">> ${chapter}.md + echo "date = '$(date -d $ayear-$amonth-01 +%Y-%m-%dT00:00:00Z)'" >> ${chapter}.md + echo "description = ''" >> ${chapter}.md + echo "author = '$author'">> ${chapter}.md + echo "issue = ['$series']">> ${chapter}.md + echo "issue_weight = $order">> ${chapter}.md + echo '+++'>> ${chapter}.md + # Append content + #cat ${intro} | sed -e "s/(${chapter}.*)//" | sed -e "s/^-.*\[\(.*\)\]$/- \1/" | sed -e "s/\([[:digit:]]\)\. \[\(.*\)\]$/\1. \2/" >> ${chapter}.md + cat ${intro} | sed -e "s/${chapter}.*\.html//" | sed -e 's/\[\(.*\)\]{.*} \[\(.*\)\](.*/**\1 \2**/' | tail +7 >> ${chapter}.md + cat ${chapter}-?.html.md_1 >> ${chapter}.md 2>/dev/null + cat ${chapter}-??.html.md_1 >> ${chapter}.md 2>/dev/null + + # Change image links to absolute paths + sed -i "s/(img\//(\/${issue}\/img\//g" ${chapter}.md + + done + cd .. + done diff --git a/static/03/img/gates.gif b/static/03/img/gates.gif new file mode 100755 index 0000000..a010543 Binary files /dev/null and b/static/03/img/gates.gif differ diff --git a/static/03/img/gates.jpg b/static/03/img/gates.jpg new file mode 100755 index 0000000..8e156d0 Binary files /dev/null and b/static/03/img/gates.jpg differ diff --git a/static/03/img/gates_ap.jpg b/static/03/img/gates_ap.jpg new file mode 100755 index 0000000..2310c93 Binary files /dev/null and b/static/03/img/gates_ap.jpg differ diff --git a/static/03/img/godin2.jpg b/static/03/img/godin2.jpg new file mode 100755 index 0000000..03d1dd3 Binary files /dev/null and b/static/03/img/godin2.jpg differ diff --git a/static/04/img/giatr1sm.jpg b/static/04/img/giatr1sm.jpg new file mode 100755 index 0000000..9542ff8 Binary files /dev/null and b/static/04/img/giatr1sm.jpg differ diff --git a/static/04/img/line2sm.jpg b/static/04/img/line2sm.jpg new file mode 100755 index 0000000..ea77c78 Binary files /dev/null and b/static/04/img/line2sm.jpg differ diff --git a/static/04/img/linv2sm.jpg b/static/04/img/linv2sm.jpg new file mode 100755 index 0000000..3024aa1 Binary files /dev/null and b/static/04/img/linv2sm.jpg differ diff --git a/static/04/img/mse4sm.jpg b/static/04/img/mse4sm.jpg new file mode 100755 index 0000000..9c3bbd4 Binary files /dev/null and b/static/04/img/mse4sm.jpg differ diff --git a/static/04/img/msv2sm.jpg b/static/04/img/msv2sm.jpg new file mode 100755 index 0000000..40c3138 Binary files /dev/null and b/static/04/img/msv2sm.jpg differ diff --git a/static/05/img/kala1.jpg b/static/05/img/kala1.jpg new file mode 100755 index 0000000..b93d307 Binary files /dev/null and b/static/05/img/kala1.jpg differ diff --git a/static/05/img/kala2.jpg b/static/05/img/kala2.jpg new file mode 100755 index 0000000..f09a51b Binary files /dev/null and b/static/05/img/kala2.jpg differ diff --git a/static/05/img/latexeq.png b/static/05/img/latexeq.png new file mode 100755 index 0000000..99cfee8 Binary files /dev/null and b/static/05/img/latexeq.png differ diff --git a/static/05/img/xisp1.png b/static/05/img/xisp1.png new file mode 100755 index 0000000..d5707fd Binary files /dev/null and b/static/05/img/xisp1.png differ diff --git a/static/05/img/xisp2.png b/static/05/img/xisp2.png new file mode 100755 index 0000000..6e46484 Binary files /dev/null and b/static/05/img/xisp2.png differ diff --git a/static/05/img/xisp3.png b/static/05/img/xisp3.png new file mode 100755 index 0000000..858b732 Binary files /dev/null and b/static/05/img/xisp3.png differ diff --git a/static/05/img/xisp4.png b/static/05/img/xisp4.png new file mode 100755 index 0000000..5e1e8f4 Binary files /dev/null and b/static/05/img/xisp4.png differ diff --git a/static/05/img/xisp5.png b/static/05/img/xisp5.png new file mode 100755 index 0000000..f352bbd Binary files /dev/null and b/static/05/img/xisp5.png differ diff --git a/static/06/img/badday-anim.gif b/static/06/img/badday-anim.gif new file mode 100755 index 0000000..5d13bea Binary files /dev/null and b/static/06/img/badday-anim.gif differ diff --git a/static/07/img/wacom.png b/static/07/img/wacom.png new file mode 100755 index 0000000..ac09413 Binary files /dev/null and b/static/07/img/wacom.png differ diff --git a/static/08/img/bolis.jpg b/static/08/img/bolis.jpg new file mode 100755 index 0000000..fadd71b Binary files /dev/null and b/static/08/img/bolis.jpg differ diff --git a/static/08/img/exidaridis.jpg b/static/08/img/exidaridis.jpg new file mode 100755 index 0000000..90159f5 Binary files /dev/null and b/static/08/img/exidaridis.jpg differ diff --git a/static/08/img/georgatos.jpg b/static/08/img/georgatos.jpg new file mode 100755 index 0000000..45a5896 Binary files /dev/null and b/static/08/img/georgatos.jpg differ diff --git a/static/08/img/kabrianisbw.jpg b/static/08/img/kabrianisbw.jpg new file mode 100755 index 0000000..4041313 Binary files /dev/null and b/static/08/img/kabrianisbw.jpg differ diff --git a/static/08/img/maistrelis.jpg b/static/08/img/maistrelis.jpg new file mode 100755 index 0000000..eca70da Binary files /dev/null and b/static/08/img/maistrelis.jpg differ diff --git a/static/08/img/manos.jpg b/static/08/img/manos.jpg new file mode 100755 index 0000000..69c2fdb Binary files /dev/null and b/static/08/img/manos.jpg differ diff --git a/static/08/img/papakostas.jpg b/static/08/img/papakostas.jpg new file mode 100755 index 0000000..0c36588 Binary files /dev/null and b/static/08/img/papakostas.jpg differ diff --git a/static/08/img/sanida.jpg b/static/08/img/sanida.jpg new file mode 100755 index 0000000..eb12dcc Binary files /dev/null and b/static/08/img/sanida.jpg differ diff --git a/static/08/img/tsakaloglou.jpg b/static/08/img/tsakaloglou.jpg new file mode 100755 index 0000000..f50efd4 Binary files /dev/null and b/static/08/img/tsakaloglou.jpg differ diff --git a/static/08/img/vryonis.jpg b/static/08/img/vryonis.jpg new file mode 100755 index 0000000..172e5a7 Binary files /dev/null and b/static/08/img/vryonis.jpg differ diff --git a/static/09/index.nif b/static/09/index.nif new file mode 100644 index 0000000..e28b4f3 --- /dev/null +++ b/static/09/index.nif @@ -0,0 +1,167 @@ +<--BarTags1--> + + +<--A--> + + +<--B--> + + +
+ + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + +
+
+
+ Magaz, The Greek Linux Magazine +
+
+
+
+ + + + + +
+
+ Magaz Logo +
+
+
+
+
+
+ + + + + +
+
+
+ #09 +
+
+
+ + + + + +
+
+
+

+ + +

+

+ + +

+

+ Mirrors +

+

+ Links +

+

+ +

+

+ +

+

+ +

+

+ +

+
+
+
+
+
+ + + + + + + + +
+ + + + + +
+
+ +<--C--> + +
+
+
+
+
+
+
+ + + + +
+
+ + Valid HTML 4.01! +   + + Valid CSS! +
+
+
+ +

+
\ No newline at end of file diff --git a/static/11/img/Hap1.jpg b/static/11/img/Hap1.jpg new file mode 100755 index 0000000..dd9ded0 Binary files /dev/null and b/static/11/img/Hap1.jpg differ diff --git a/static/11/img/Hap10.jpg b/static/11/img/Hap10.jpg new file mode 100755 index 0000000..b0bd686 Binary files /dev/null and b/static/11/img/Hap10.jpg differ diff --git a/static/11/img/Hap15.jpg b/static/11/img/Hap15.jpg new file mode 100755 index 0000000..70ca7bc Binary files /dev/null and b/static/11/img/Hap15.jpg differ diff --git a/static/11/img/Hap6.jpg b/static/11/img/Hap6.jpg new file mode 100755 index 0000000..a24678e Binary files /dev/null and b/static/11/img/Hap6.jpg differ diff --git a/static/11/img/Hap8.jpg b/static/11/img/Hap8.jpg new file mode 100755 index 0000000..43b02b5 Binary files /dev/null and b/static/11/img/Hap8.jpg differ diff --git a/static/11/img/members1.jpeg b/static/11/img/members1.jpeg new file mode 100755 index 0000000..4cd70a7 Binary files /dev/null and b/static/11/img/members1.jpeg differ diff --git a/static/11/img/projects1.jpeg b/static/11/img/projects1.jpeg new file mode 100755 index 0000000..5079eea Binary files /dev/null and b/static/11/img/projects1.jpeg differ diff --git a/static/15/img/arvanitidis.jpg b/static/15/img/arvanitidis.jpg new file mode 100755 index 0000000..13fdc38 Binary files /dev/null and b/static/15/img/arvanitidis.jpg differ diff --git a/static/15/img/arvanitidis_sm.jpg b/static/15/img/arvanitidis_sm.jpg new file mode 100755 index 0000000..1a80404 Binary files /dev/null and b/static/15/img/arvanitidis_sm.jpg differ diff --git a/static/15/img/ergastirio.jpg b/static/15/img/ergastirio.jpg new file mode 100755 index 0000000..96658ec Binary files /dev/null and b/static/15/img/ergastirio.jpg differ diff --git a/static/15/img/evris.jpg b/static/15/img/evris.jpg new file mode 100755 index 0000000..910d23b Binary files /dev/null and b/static/15/img/evris.jpg differ diff --git a/static/15/img/evris_sm.jpg b/static/15/img/evris_sm.jpg new file mode 100755 index 0000000..68511fa Binary files /dev/null and b/static/15/img/evris_sm.jpg differ diff --git a/static/15/img/kabrianis.jpg b/static/15/img/kabrianis.jpg new file mode 100755 index 0000000..da2bf4c Binary files /dev/null and b/static/15/img/kabrianis.jpg differ diff --git a/static/15/img/kabrianis_sm.jpg b/static/15/img/kabrianis_sm.jpg new file mode 100755 index 0000000..704dae3 Binary files /dev/null and b/static/15/img/kabrianis_sm.jpg differ diff --git a/static/15/img/karla.jpg b/static/15/img/karla.jpg new file mode 100755 index 0000000..5b437ca Binary files /dev/null and b/static/15/img/karla.jpg differ diff --git a/static/15/img/karla_sm.jpg b/static/15/img/karla_sm.jpg new file mode 100755 index 0000000..3dba490 Binary files /dev/null and b/static/15/img/karla_sm.jpg differ diff --git a/static/15/img/mama.jpg b/static/15/img/mama.jpg new file mode 100755 index 0000000..4d179e6 Binary files /dev/null and b/static/15/img/mama.jpg differ diff --git a/static/15/img/mama_sm.jpg b/static/15/img/mama_sm.jpg new file mode 100755 index 0000000..a85708e Binary files /dev/null and b/static/15/img/mama_sm.jpg differ diff --git a/static/15/img/martinos.jpg b/static/15/img/martinos.jpg new file mode 100755 index 0000000..9b201bc Binary files /dev/null and b/static/15/img/martinos.jpg differ diff --git a/static/15/img/martinos_sm.jpg b/static/15/img/martinos_sm.jpg new file mode 100755 index 0000000..f8fa409 Binary files /dev/null and b/static/15/img/martinos_sm.jpg differ diff --git a/static/15/img/panos.jpg b/static/15/img/panos.jpg new file mode 100755 index 0000000..8f88ca5 Binary files /dev/null and b/static/15/img/panos.jpg differ diff --git a/static/15/img/panos_sm.jpg b/static/15/img/panos_sm.jpg new file mode 100755 index 0000000..51187ad Binary files /dev/null and b/static/15/img/panos_sm.jpg differ diff --git a/static/15/img/papaioannou.jpg b/static/15/img/papaioannou.jpg new file mode 100755 index 0000000..a5c8855 Binary files /dev/null and b/static/15/img/papaioannou.jpg differ diff --git a/static/15/img/papaioannou_sm.jpg b/static/15/img/papaioannou_sm.jpg new file mode 100755 index 0000000..1d7612f Binary files /dev/null and b/static/15/img/papaioannou_sm.jpg differ diff --git a/static/15/img/pavloudis.jpg b/static/15/img/pavloudis.jpg new file mode 100755 index 0000000..3df3272 Binary files /dev/null and b/static/15/img/pavloudis.jpg differ diff --git a/static/15/img/pavloudis_sm.jpg b/static/15/img/pavloudis_sm.jpg new file mode 100755 index 0000000..f8d6715 Binary files /dev/null and b/static/15/img/pavloudis_sm.jpg differ diff --git a/static/15/img/prothimos.jpg b/static/15/img/prothimos.jpg new file mode 100755 index 0000000..5498cfe Binary files /dev/null and b/static/15/img/prothimos.jpg differ diff --git a/static/15/img/prothimos_sm.jpg b/static/15/img/prothimos_sm.jpg new file mode 100755 index 0000000..b0ef392 Binary files /dev/null and b/static/15/img/prothimos_sm.jpg differ diff --git a/static/15/img/some1.jpg b/static/15/img/some1.jpg new file mode 100755 index 0000000..ba751e1 Binary files /dev/null and b/static/15/img/some1.jpg differ diff --git a/static/15/img/some1_sm.jpg b/static/15/img/some1_sm.jpg new file mode 100755 index 0000000..da61871 Binary files /dev/null and b/static/15/img/some1_sm.jpg differ diff --git a/static/15/img/stavroulakis.jpg b/static/15/img/stavroulakis.jpg new file mode 100755 index 0000000..3b2ff0c Binary files /dev/null and b/static/15/img/stavroulakis.jpg differ diff --git a/static/15/img/stavroulakis_sm.jpg b/static/15/img/stavroulakis_sm.jpg new file mode 100755 index 0000000..db97488 Binary files /dev/null and b/static/15/img/stavroulakis_sm.jpg differ diff --git a/static/15/img/tsiounis.jpg b/static/15/img/tsiounis.jpg new file mode 100755 index 0000000..ae9487b Binary files /dev/null and b/static/15/img/tsiounis.jpg differ diff --git a/static/15/img/tsiounis_sm.jpg b/static/15/img/tsiounis_sm.jpg new file mode 100755 index 0000000..02e5894 Binary files /dev/null and b/static/15/img/tsiounis_sm.jpg differ diff --git a/static/15/img/voula.jpg b/static/15/img/voula.jpg new file mode 100755 index 0000000..ed3fe0a Binary files /dev/null and b/static/15/img/voula.jpg differ diff --git a/static/15/img/voula_sm.jpg b/static/15/img/voula_sm.jpg new file mode 100755 index 0000000..d752b0c Binary files /dev/null and b/static/15/img/voula_sm.jpg differ diff --git a/static/15/img/xristina.jpg b/static/15/img/xristina.jpg new file mode 100755 index 0000000..c83b6a7 Binary files /dev/null and b/static/15/img/xristina.jpg differ diff --git a/static/15/img/xristina_sm.jpg b/static/15/img/xristina_sm.jpg new file mode 100755 index 0000000..6148d39 Binary files /dev/null and b/static/15/img/xristina_sm.jpg differ diff --git a/static/16/img/buttons.jpg b/static/16/img/buttons.jpg new file mode 100755 index 0000000..4de8373 Binary files /dev/null and b/static/16/img/buttons.jpg differ diff --git a/static/16/img/toolbar.jpg b/static/16/img/toolbar.jpg new file mode 100755 index 0000000..f8918eb Binary files /dev/null and b/static/16/img/toolbar.jpg differ diff --git a/static/17/img/perm.png b/static/17/img/perm.png new file mode 100755 index 0000000..a9bfa0a Binary files /dev/null and b/static/17/img/perm.png differ diff --git a/static/18/img/applications.jpg b/static/18/img/applications.jpg new file mode 100755 index 0000000..6f2f6e5 Binary files /dev/null and b/static/18/img/applications.jpg differ diff --git a/static/18/img/logo.png b/static/18/img/logo.png new file mode 100755 index 0000000..94f85e7 Binary files /dev/null and b/static/18/img/logo.png differ diff --git a/static/18/img/menugr.jpg b/static/18/img/menugr.jpg new file mode 100755 index 0000000..abf85c5 Binary files /dev/null and b/static/18/img/menugr.jpg differ diff --git a/static/18/img/ntscpgr.jpg b/static/18/img/ntscpgr.jpg new file mode 100755 index 0000000..bd5d23d Binary files /dev/null and b/static/18/img/ntscpgr.jpg differ diff --git a/static/18/img/run.jpg b/static/18/img/run.jpg new file mode 100755 index 0000000..f612479 Binary files /dev/null and b/static/18/img/run.jpg differ diff --git a/static/18/img/rungr.jpg b/static/18/img/rungr.jpg new file mode 100755 index 0000000..eb14b37 Binary files /dev/null and b/static/18/img/rungr.jpg differ diff --git a/static/18/img/titlebar.jpg b/static/18/img/titlebar.jpg new file mode 100755 index 0000000..9f34445 Binary files /dev/null and b/static/18/img/titlebar.jpg differ diff --git a/static/18/img/wmclip.jpg b/static/18/img/wmclip.jpg new file mode 100755 index 0000000..19bac3a Binary files /dev/null and b/static/18/img/wmclip.jpg differ diff --git a/static/18/img/wmdock.jpg b/static/18/img/wmdock.jpg new file mode 100755 index 0000000..dcb3b49 Binary files /dev/null and b/static/18/img/wmdock.jpg differ diff --git a/static/18/img/wprefs.jpg b/static/18/img/wprefs.jpg new file mode 100755 index 0000000..e906340 Binary files /dev/null and b/static/18/img/wprefs.jpg differ diff --git a/static/20/img/12.png b/static/20/img/12.png new file mode 100755 index 0000000..d426d4d Binary files /dev/null and b/static/20/img/12.png differ diff --git a/static/20/img/12_sm.png b/static/20/img/12_sm.png new file mode 100755 index 0000000..94e3fb1 Binary files /dev/null and b/static/20/img/12_sm.png differ diff --git a/static/20/img/2.png b/static/20/img/2.png new file mode 100755 index 0000000..2a1714a Binary files /dev/null and b/static/20/img/2.png differ diff --git a/static/20/img/2_sm.png b/static/20/img/2_sm.png new file mode 100755 index 0000000..cd14849 Binary files /dev/null and b/static/20/img/2_sm.png differ diff --git a/static/20/img/9.png b/static/20/img/9.png new file mode 100755 index 0000000..8a849ef Binary files /dev/null and b/static/20/img/9.png differ diff --git a/static/20/img/9_sm.png b/static/20/img/9_sm.png new file mode 100755 index 0000000..21ff491 Binary files /dev/null and b/static/20/img/9_sm.png differ diff --git a/static/20/img/civ.png b/static/20/img/civ.png new file mode 100755 index 0000000..0a3d7ec Binary files /dev/null and b/static/20/img/civ.png differ diff --git a/static/20/img/civ_sm.png b/static/20/img/civ_sm.png new file mode 100755 index 0000000..4f68293 Binary files /dev/null and b/static/20/img/civ_sm.png differ diff --git a/static/23/img/xbasic.gif b/static/23/img/xbasic.gif new file mode 100755 index 0000000..03ecfcd Binary files /dev/null and b/static/23/img/xbasic.gif differ diff --git a/static/24/img/guiguide10.gif b/static/24/img/guiguide10.gif new file mode 100755 index 0000000..301b0fa Binary files /dev/null and b/static/24/img/guiguide10.gif differ diff --git a/static/24/img/guiguide11.gif b/static/24/img/guiguide11.gif new file mode 100755 index 0000000..3edc25d Binary files /dev/null and b/static/24/img/guiguide11.gif differ diff --git a/static/24/img/guiguide12.gif b/static/24/img/guiguide12.gif new file mode 100755 index 0000000..3c78c6e Binary files /dev/null and b/static/24/img/guiguide12.gif differ diff --git a/static/24/img/guiguide13.gif b/static/24/img/guiguide13.gif new file mode 100755 index 0000000..130edf2 Binary files /dev/null and b/static/24/img/guiguide13.gif differ diff --git a/static/24/img/guiguide14.gif b/static/24/img/guiguide14.gif new file mode 100755 index 0000000..203b2db Binary files /dev/null and b/static/24/img/guiguide14.gif differ diff --git a/static/24/img/guiguide15.gif b/static/24/img/guiguide15.gif new file mode 100755 index 0000000..17728ce Binary files /dev/null and b/static/24/img/guiguide15.gif differ diff --git a/static/24/img/guiguide16.gif b/static/24/img/guiguide16.gif new file mode 100755 index 0000000..82028ea Binary files /dev/null and b/static/24/img/guiguide16.gif differ diff --git a/static/24/img/guiguide17.gif b/static/24/img/guiguide17.gif new file mode 100755 index 0000000..955ac3b Binary files /dev/null and b/static/24/img/guiguide17.gif differ diff --git a/static/24/img/guiguide18.gif b/static/24/img/guiguide18.gif new file mode 100755 index 0000000..7072522 Binary files /dev/null and b/static/24/img/guiguide18.gif differ diff --git a/static/24/img/guiguide19.gif b/static/24/img/guiguide19.gif new file mode 100755 index 0000000..abf3652 Binary files /dev/null and b/static/24/img/guiguide19.gif differ diff --git a/static/24/img/guiguide2.gif b/static/24/img/guiguide2.gif new file mode 100755 index 0000000..4f47a60 Binary files /dev/null and b/static/24/img/guiguide2.gif differ diff --git a/static/24/img/guiguide20.gif b/static/24/img/guiguide20.gif new file mode 100755 index 0000000..26498f2 Binary files /dev/null and b/static/24/img/guiguide20.gif differ diff --git a/static/24/img/guiguide21.gif b/static/24/img/guiguide21.gif new file mode 100755 index 0000000..7279a59 Binary files /dev/null and b/static/24/img/guiguide21.gif differ diff --git a/static/24/img/guiguide22.gif b/static/24/img/guiguide22.gif new file mode 100755 index 0000000..cbb4a3b Binary files /dev/null and b/static/24/img/guiguide22.gif differ diff --git a/static/24/img/guiguide23.gif b/static/24/img/guiguide23.gif new file mode 100755 index 0000000..d80c6b3 Binary files /dev/null and b/static/24/img/guiguide23.gif differ diff --git a/static/24/img/guiguide24.gif b/static/24/img/guiguide24.gif new file mode 100755 index 0000000..ecc905d Binary files /dev/null and b/static/24/img/guiguide24.gif differ diff --git a/static/24/img/guiguide25.gif b/static/24/img/guiguide25.gif new file mode 100755 index 0000000..a36824a Binary files /dev/null and b/static/24/img/guiguide25.gif differ diff --git a/static/24/img/guiguide26.gif b/static/24/img/guiguide26.gif new file mode 100755 index 0000000..1d7e853 Binary files /dev/null and b/static/24/img/guiguide26.gif differ diff --git a/static/24/img/guiguide27.gif b/static/24/img/guiguide27.gif new file mode 100755 index 0000000..b1c6be0 Binary files /dev/null and b/static/24/img/guiguide27.gif differ diff --git a/static/24/img/guiguide28.gif b/static/24/img/guiguide28.gif new file mode 100755 index 0000000..f8c35f2 Binary files /dev/null and b/static/24/img/guiguide28.gif differ diff --git a/static/24/img/guiguide29.gif b/static/24/img/guiguide29.gif new file mode 100755 index 0000000..b108c46 Binary files /dev/null and b/static/24/img/guiguide29.gif differ diff --git a/static/24/img/guiguide3.gif b/static/24/img/guiguide3.gif new file mode 100755 index 0000000..6fbbed1 Binary files /dev/null and b/static/24/img/guiguide3.gif differ diff --git a/static/24/img/guiguide30.gif b/static/24/img/guiguide30.gif new file mode 100755 index 0000000..5a12183 Binary files /dev/null and b/static/24/img/guiguide30.gif differ diff --git a/static/24/img/guiguide31.gif b/static/24/img/guiguide31.gif new file mode 100755 index 0000000..5dd7197 Binary files /dev/null and b/static/24/img/guiguide31.gif differ diff --git a/static/24/img/guiguide32.gif b/static/24/img/guiguide32.gif new file mode 100755 index 0000000..cc721b1 Binary files /dev/null and b/static/24/img/guiguide32.gif differ diff --git a/static/24/img/guiguide33.gif b/static/24/img/guiguide33.gif new file mode 100755 index 0000000..fec3045 Binary files /dev/null and b/static/24/img/guiguide33.gif differ diff --git a/static/24/img/guiguide34.gif b/static/24/img/guiguide34.gif new file mode 100755 index 0000000..5404de1 Binary files /dev/null and b/static/24/img/guiguide34.gif differ diff --git a/static/24/img/guiguide35.gif b/static/24/img/guiguide35.gif new file mode 100755 index 0000000..5b7f1db Binary files /dev/null and b/static/24/img/guiguide35.gif differ diff --git a/static/24/img/guiguide36.gif b/static/24/img/guiguide36.gif new file mode 100755 index 0000000..326fbb4 Binary files /dev/null and b/static/24/img/guiguide36.gif differ diff --git a/static/24/img/guiguide4.gif b/static/24/img/guiguide4.gif new file mode 100755 index 0000000..6c56d8a Binary files /dev/null and b/static/24/img/guiguide4.gif differ diff --git a/static/24/img/guiguide5.gif b/static/24/img/guiguide5.gif new file mode 100755 index 0000000..bf2911e Binary files /dev/null and b/static/24/img/guiguide5.gif differ diff --git a/static/24/img/guiguide6.gif b/static/24/img/guiguide6.gif new file mode 100755 index 0000000..80d8236 Binary files /dev/null and b/static/24/img/guiguide6.gif differ diff --git a/static/24/img/guiguide7.gif b/static/24/img/guiguide7.gif new file mode 100755 index 0000000..aecd3d7 Binary files /dev/null and b/static/24/img/guiguide7.gif differ diff --git a/static/24/img/guiguide8.gif b/static/24/img/guiguide8.gif new file mode 100755 index 0000000..82acf97 Binary files /dev/null and b/static/24/img/guiguide8.gif differ diff --git a/static/24/img/guiguide9.gif b/static/24/img/guiguide9.gif new file mode 100755 index 0000000..892a1fa Binary files /dev/null and b/static/24/img/guiguide9.gif differ diff --git a/static/24/img/intro3.gif b/static/24/img/intro3.gif new file mode 100755 index 0000000..41bd262 Binary files /dev/null and b/static/24/img/intro3.gif differ diff --git a/static/24/img/xbdev1.gif b/static/24/img/xbdev1.gif new file mode 100755 index 0000000..d8d7a82 Binary files /dev/null and b/static/24/img/xbdev1.gif differ diff --git a/static/24/img/xbdev2.gif b/static/24/img/xbdev2.gif new file mode 100755 index 0000000..d3a5592 Binary files /dev/null and b/static/24/img/xbdev2.gif differ diff --git a/static/27/img/linux-greek-users.jpg b/static/27/img/linux-greek-users.jpg new file mode 100755 index 0000000..522a629 Binary files /dev/null and b/static/27/img/linux-greek-users.jpg differ diff --git a/static/27/img/lists-hellug-gr.jpg b/static/27/img/lists-hellug-gr.jpg new file mode 100755 index 0000000..72f9e6f Binary files /dev/null and b/static/27/img/lists-hellug-gr.jpg differ diff --git a/static/29/img/linux_counter.jpg b/static/29/img/linux_counter.jpg new file mode 100755 index 0000000..f26fb56 Binary files /dev/null and b/static/29/img/linux_counter.jpg differ diff --git a/static/29/img/ypepth1.gif b/static/29/img/ypepth1.gif new file mode 100755 index 0000000..6e5204b Binary files /dev/null and b/static/29/img/ypepth1.gif differ diff --git a/static/29/img/ypepth2.gif b/static/29/img/ypepth2.gif new file mode 100755 index 0000000..6c5e0ae Binary files /dev/null and b/static/29/img/ypepth2.gif differ diff --git a/static/29/img/ypepth3.gif b/static/29/img/ypepth3.gif new file mode 100755 index 0000000..a57fadb Binary files /dev/null and b/static/29/img/ypepth3.gif differ diff --git a/static/31/img/blues.jpg b/static/31/img/blues.jpg new file mode 100755 index 0000000..e786bc8 Binary files /dev/null and b/static/31/img/blues.jpg differ diff --git a/static/31/img/bottes.jpg b/static/31/img/bottes.jpg new file mode 100755 index 0000000..3fee327 Binary files /dev/null and b/static/31/img/bottes.jpg differ diff --git a/static/31/img/couteau.jpg b/static/31/img/couteau.jpg new file mode 100755 index 0000000..bc7e640 Binary files /dev/null and b/static/31/img/couteau.jpg differ diff --git a/static/31/img/cup.jpg b/static/31/img/cup.jpg new file mode 100755 index 0000000..6d65cc1 Binary files /dev/null and b/static/31/img/cup.jpg differ diff --git a/static/31/img/doogieducati.jpg b/static/31/img/doogieducati.jpg new file mode 100755 index 0000000..615665c Binary files /dev/null and b/static/31/img/doogieducati.jpg differ diff --git a/static/31/img/lagrangedwarf.jpg b/static/31/img/lagrangedwarf.jpg new file mode 100755 index 0000000..619a4e0 Binary files /dev/null and b/static/31/img/lagrangedwarf.jpg differ diff --git a/static/31/img/material.jpg b/static/31/img/material.jpg new file mode 100755 index 0000000..7a38ede Binary files /dev/null and b/static/31/img/material.jpg differ diff --git a/static/31/img/rgb.jpg b/static/31/img/rgb.jpg new file mode 100755 index 0000000..ac64480 Binary files /dev/null and b/static/31/img/rgb.jpg differ diff --git a/static/31/img/robot.jpg b/static/31/img/robot.jpg new file mode 100755 index 0000000..8ec7e19 Binary files /dev/null and b/static/31/img/robot.jpg differ diff --git a/static/31/img/smooth.jpg b/static/31/img/smooth.jpg new file mode 100755 index 0000000..d6274c2 Binary files /dev/null and b/static/31/img/smooth.jpg differ diff --git a/static/31/img/sphere.jpg b/static/31/img/sphere.jpg new file mode 100755 index 0000000..e067295 Binary files /dev/null and b/static/31/img/sphere.jpg differ diff --git a/static/31/img/tank.jpg b/static/31/img/tank.jpg new file mode 100755 index 0000000..dfe1e02 Binary files /dev/null and b/static/31/img/tank.jpg differ diff --git a/static/31/img/zippo.jpg b/static/31/img/zippo.jpg new file mode 100755 index 0000000..b4b93ca Binary files /dev/null and b/static/31/img/zippo.jpg differ diff --git a/static/32/challenge0.bz2 b/static/32/challenge0.bz2 new file mode 100755 index 0000000..d85fe02 Binary files /dev/null and b/static/32/challenge0.bz2 differ diff --git a/static/32/img/fig1.png b/static/32/img/fig1.png new file mode 100644 index 0000000..2df582b Binary files /dev/null and b/static/32/img/fig1.png differ diff --git a/static/32/img/fig2.png b/static/32/img/fig2.png new file mode 100644 index 0000000..64aee00 Binary files /dev/null and b/static/32/img/fig2.png differ diff --git a/static/32/img/fig3.png b/static/32/img/fig3.png new file mode 100644 index 0000000..e57b854 Binary files /dev/null and b/static/32/img/fig3.png differ diff --git a/static/32/img/fig4.png b/static/32/img/fig4.png new file mode 100644 index 0000000..1928f40 Binary files /dev/null and b/static/32/img/fig4.png differ diff --git a/static/32/img/fig5.png b/static/32/img/fig5.png new file mode 100644 index 0000000..53a8ac5 Binary files /dev/null and b/static/32/img/fig5.png differ diff --git a/static/32/img/fig6.png b/static/32/img/fig6.png new file mode 100644 index 0000000..2c3d45c Binary files /dev/null and b/static/32/img/fig6.png differ diff --git a/static/32/img/fig7.png b/static/32/img/fig7.png new file mode 100644 index 0000000..9de5705 Binary files /dev/null and b/static/32/img/fig7.png differ diff --git a/static/33/challenge1.bz2 b/static/33/challenge1.bz2 new file mode 100644 index 0000000..8347226 Binary files /dev/null and b/static/33/challenge1.bz2 differ diff --git a/static/33/img/net.gif b/static/33/img/net.gif new file mode 100644 index 0000000..fb47b2b Binary files /dev/null and b/static/33/img/net.gif differ diff --git a/static/33/img/stack01.png b/static/33/img/stack01.png new file mode 100644 index 0000000..bade9df Binary files /dev/null and b/static/33/img/stack01.png differ diff --git a/static/33/img/stack02.png b/static/33/img/stack02.png new file mode 100644 index 0000000..d6a2b0b Binary files /dev/null and b/static/33/img/stack02.png differ diff --git a/static/33/img/stack03.png b/static/33/img/stack03.png new file mode 100644 index 0000000..998f900 Binary files /dev/null and b/static/33/img/stack03.png differ diff --git a/static/33/img/stack04.png b/static/33/img/stack04.png new file mode 100644 index 0000000..4277be1 Binary files /dev/null and b/static/33/img/stack04.png differ diff --git a/static/33/magaz-ch0-src.tar.bz2 b/static/33/magaz-ch0-src.tar.bz2 new file mode 100644 index 0000000..8025894 Binary files /dev/null and b/static/33/magaz-ch0-src.tar.bz2 differ diff --git a/static/33/rce2.bz2 b/static/33/rce2.bz2 new file mode 100644 index 0000000..903773e Binary files /dev/null and b/static/33/rce2.bz2 differ diff --git a/static/34/fw.rules b/static/34/fw.rules new file mode 100644 index 0000000..170d0af --- /dev/null +++ b/static/34/fw.rules @@ -0,0 +1,159 @@ +#!/bin/bash + +if [ -z $1 ]; then + # command line argument, SSH . + echo Disallowing SSH access... + NOSSH=1 +else + # IP address , SSH. + echo Allowing SSH access for $1... +fi + +############################## +#### ##### +############################## + +## ping. +/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all + +## broadcasts. +/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts + +## source routed . +/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route + +## ICMP redirect. +/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects + +## . +/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses + +## reverse path filtering. +for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do + /bin/echo "1" > ${interface} + done + +## system logs (/var/log/messages by default) . +/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians + +## router ( ). +/bin/echo "0" > /proc/sys/net/ipv4/ip_forward + +################## +#### FIREWALL #### +################## + +## connection-tracking modules. +/sbin/modprobe ipt_state +/sbin/modprobe ip_conntrack +/sbin/modprobe ip_conntrack_ftp #ports=2121 +#/sbin/modprobe ipt_owner + +## rules +/sbin/iptables -F +## custom tables +/sbin/iptables -X +## +/sbin/iptables -Z + +## By default DROP () ( ) +/sbin/iptables -P INPUT DROP +/sbin/iptables -P OUTPUT DROP + + +##################### +#### #### +##################### + +## +/sbin/iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT + +## ( rules, ) +/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT + +if [ $NOSSH ]; then + # . + echo +else + ## SSH + /sbin/iptables -A INPUT -p tcp -s $1 --sport 1024: --dport 22 -j ACCEPT +fi + +###################### +##### ##### +###################### + +## +/sbin/iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT + +## SSH +/sbin/iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT + +## HTTP +/sbin/iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT + +## HTTPS +/sbin/iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT + +## POP3 +/sbin/iptables -A OUTPUT -p tcp --dport 110 -j ACCEPT + +## SMTP +/sbin/iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT + +## DNS +/sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT + +## FTP (command) +/sbin/iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT + +## FTP (data::Active) +/sbin/iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT + +## FTP (data::Passive) +/sbin/iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT + +if [ $NOSSH ]; then + echo +else + ## SSH server . + /sbin/iptables -A OUTPUT -p tcp --sport 22 --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT +fi + +## ICMP +/sbin/iptables -A OUTPUT -p icmp -j ACCEPT + +## dict.org:2628 +/sbin/iptables -A OUTPUT -p tcp -d 66.111.36.30 --dport 2628 -j ACCEPT + +## Importing OpenPGP keys pgp.mit.edu:11371 +/sbin/iptables -A OUTPUT -p tcp -d 18.7.14.139 --dport 11371 -j ACCEPT + +## JETDIRECT printing +/sbin/iptables -A OUTPUT -p tcp --dport 9100 -j ACCEPT + +## Whois queries +/sbin/iptables -A OUTPUT -p tcp --dport 43 -j ACCEPT + +## NTP updates +/sbin/iptables -A OUTPUT -p tcp -d 128.2.4.21/16 --dport 123 -j ACCEPT +/sbin/iptables -A OUTPUT -p udp --sport 123 -d 128.2.4.21/16 --dport 123 -j ACCEPT + + +################# +#### LOGGING #### +################# +## /var/log/messages +# tail -f /var/log/messages root + +## Log TCP . +/sbin/iptables -A INPUT -p tcp -j LOG --log-prefix "iptables:IN-TCP DROPPED:" + +## Log TCP . +/sbin/iptables -A OUTPUT -p tcp -j LOG --log-prefix "iptables:OUT-TCP DROPPED:" + +## Log +#/sbin/iptables -A INPUT -j LOG --log-prefix "iptables:INCOMING DROPPED:" +/sbin/iptables -A OUTPUT -j LOG --log-prefix "iptables:OUTGOING DROPPED:" + +## iptables script diff --git a/static/34/img/ads.png b/static/34/img/ads.png new file mode 100644 index 0000000..4fa1fe3 Binary files /dev/null and b/static/34/img/ads.png differ diff --git a/static/34/img/dynamic1.png b/static/34/img/dynamic1.png new file mode 100644 index 0000000..b663d5a Binary files /dev/null and b/static/34/img/dynamic1.png differ diff --git a/static/34/img/dynamic2.png b/static/34/img/dynamic2.png new file mode 100644 index 0000000..e4697c1 Binary files /dev/null and b/static/34/img/dynamic2.png differ diff --git a/static/34/img/dynamic3.png b/static/34/img/dynamic3.png new file mode 100644 index 0000000..18cebe0 Binary files /dev/null and b/static/34/img/dynamic3.png differ diff --git a/static/34/img/elf_header.png b/static/34/img/elf_header.png new file mode 100644 index 0000000..cb4fc3e Binary files /dev/null and b/static/34/img/elf_header.png differ diff --git a/static/34/img/elf_section.png b/static/34/img/elf_section.png new file mode 100644 index 0000000..191deb8 Binary files /dev/null and b/static/34/img/elf_section.png differ diff --git a/static/34/img/elf_segment.png b/static/34/img/elf_segment.png new file mode 100644 index 0000000..c198a71 Binary files /dev/null and b/static/34/img/elf_segment.png differ diff --git a/static/34/img/elf_string.png b/static/34/img/elf_string.png new file mode 100644 index 0000000..f2eff30 Binary files /dev/null and b/static/34/img/elf_string.png differ diff --git a/static/34/img/elf_views.png b/static/34/img/elf_views.png new file mode 100644 index 0000000..ee6ccc8 Binary files /dev/null and b/static/34/img/elf_views.png differ diff --git a/static/34/img/flexEMACS.png b/static/34/img/flexEMACS.png new file mode 100644 index 0000000..620fb9e Binary files /dev/null and b/static/34/img/flexEMACS.png differ diff --git a/static/34/img/flexINFO.png b/static/34/img/flexINFO.png new file mode 100644 index 0000000..821df80 Binary files /dev/null and b/static/34/img/flexINFO.png differ diff --git a/static/34/img/hands_on_stack.png b/static/34/img/hands_on_stack.png new file mode 100644 index 0000000..8955e65 Binary files /dev/null and b/static/34/img/hands_on_stack.png differ diff --git a/static/34/img/kmail.png b/static/34/img/kmail.png new file mode 100644 index 0000000..c156a5e Binary files /dev/null and b/static/34/img/kmail.png differ diff --git a/static/34/img/konqueror_cookie.png b/static/34/img/konqueror_cookie.png new file mode 100644 index 0000000..ffc07a8 Binary files /dev/null and b/static/34/img/konqueror_cookie.png differ diff --git a/static/34/img/linking.png b/static/34/img/linking.png new file mode 100644 index 0000000..46b87e6 Binary files /dev/null and b/static/34/img/linking.png differ diff --git a/static/34/img/mem_map.png b/static/34/img/mem_map.png new file mode 100644 index 0000000..68ed98b Binary files /dev/null and b/static/34/img/mem_map.png differ diff --git a/static/34/img/moz_mail.png b/static/34/img/moz_mail.png new file mode 100644 index 0000000..b3fc401 Binary files /dev/null and b/static/34/img/moz_mail.png differ diff --git a/static/34/img/mozilla_cookie.png b/static/34/img/mozilla_cookie.png new file mode 100644 index 0000000..0bad34b Binary files /dev/null and b/static/34/img/mozilla_cookie.png differ diff --git a/static/34/img/noads.png b/static/34/img/noads.png new file mode 100644 index 0000000..0c92d35 Binary files /dev/null and b/static/34/img/noads.png differ diff --git a/static/34/img/sampleHTML.png b/static/34/img/sampleHTML.png new file mode 100644 index 0000000..abebed1 Binary files /dev/null and b/static/34/img/sampleHTML.png differ diff --git a/static/34/img/sampleINFO.png b/static/34/img/sampleINFO.png new file mode 100644 index 0000000..be929d4 Binary files /dev/null and b/static/34/img/sampleINFO.png differ diff --git a/static/34/img/samplePDF.png b/static/34/img/samplePDF.png new file mode 100644 index 0000000..8691efc Binary files /dev/null and b/static/34/img/samplePDF.png differ diff --git a/static/34/img/unpacking1.png b/static/34/img/unpacking1.png new file mode 100644 index 0000000..3e1def3 Binary files /dev/null and b/static/34/img/unpacking1.png differ diff --git a/static/34/img/unpacking2.png b/static/34/img/unpacking2.png new file mode 100644 index 0000000..f5bb848 Binary files /dev/null and b/static/34/img/unpacking2.png differ diff --git a/static/34/img/unpacking3.png b/static/34/img/unpacking3.png new file mode 100644 index 0000000..c761d74 Binary files /dev/null and b/static/34/img/unpacking3.png differ diff --git a/static/34/rce2-files/alf-rce1sol.tgz b/static/34/rce2-files/alf-rce1sol.tgz new file mode 100644 index 0000000..1860f1c Binary files /dev/null and b/static/34/rce2-files/alf-rce1sol.tgz differ diff --git a/static/34/rce2-files/challenge2.tar.gz b/static/34/rce2-files/challenge2.tar.gz new file mode 100644 index 0000000..67b0fed Binary files /dev/null and b/static/34/rce2-files/challenge2.tar.gz differ diff --git a/static/34/rce2-files/hands-on.cpp.gz b/static/34/rce2-files/hands-on.cpp.gz new file mode 100644 index 0000000..6318230 Binary files /dev/null and b/static/34/rce2-files/hands-on.cpp.gz differ diff --git a/static/34/rce2-files/hands-on.gz b/static/34/rce2-files/hands-on.gz new file mode 100644 index 0000000..7caad29 Binary files /dev/null and b/static/34/rce2-files/hands-on.gz differ diff --git a/static/34/rce2-files/listing1.txt b/static/34/rce2-files/listing1.txt new file mode 100644 index 0000000..3963ed7 --- /dev/null +++ b/static/34/rce2-files/listing1.txt @@ -0,0 +1,32 @@ +bash$ ltrace -i -o hands-on.lt hands-on +Ready> 1+2 +Result: 3 +Ready> q +bash$ cat hands_on.lt +[08048939] __libc_start_main(0x080489c8, 1, 0xbffff774, 0x080487e0, 0x08048f90 +[08048b0f] _ZNSt8ios_base4InitC1Ev(0x0804a47c, 0xbffff6d4, 0x4006114a, 1, 65535) = 3 +[08048b23] __cxa_atexit(0x08048b28, 0, 0x0804a054, 1, 65535) = 0 +[080489e4] __xstat(3, "hands-on", 0xbffff6a0) = 0 +[08048be0] time(NULL) = 1062082695 +[08048c02] _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(0x0804a348, 0x08048fc9, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c11] _ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E(0x0804a3d8, 0xbffff6a4, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a3d8 +[08048d40] _ZNSs12_M_leak_hardEv(0xbffff6a4, 3, 10, 0x01048447, 0x400d31e0) = 0x0804a51c +[08048cf6] isdigit(49, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048d65] isdigit(49, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048d65] isdigit(43, 3, 10, 0x01048447, 0x400d31e0) = 0 +[08048e34] time(NULL) = 1062082700 +[08048ec5] isdigit(50, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048f0a] isdigit(50, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048c34] _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(0x0804a348, 0x08048fc0, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c82] _ZNSolsEl(0x0804a348, 3, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c70] _ZNSolsEPFRSoS_E(0x0804a348, 0x080488e8, 0x40014020, 0xbffff774, 0xbffff718 +[40094e0a] _ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(0x0804a348, 0x0804a348, 3, 0x08048421, 0x4002e201) = 0x0804a348 +[08048c70] <... _ZNSolsEPFRSoS_E resumed> ) = 0x0804a348 +[08048be0] time(NULL) = 1062082700 +[08048c02] _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(0x0804a348, 0x08048fc9, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c11] _ZStrsIcSt11char_traitsIcESaIcEERSt13basic_istreamIT_T0_ES7_RSbIS4_S5_T1_E(0x0804a3d8, 0xbffff6a4, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a3d8 +[08048d40] _ZNSs12_M_leak_hardEv(0xbffff6a4, 1, 10, 0x01048447, 0x400d31e0) = 0x0804a51c +[08048cf6] isdigit(113, 1, 10, 0x01048447, 0x400d31e0) = 0 +[08048aaf] _ZNSs4_Rep10_M_destroyERKSaIcE(0x0804a510, 0xbffff6f0, 0xbffff6a0, 1, 0xbffff700) = 0x0804a500 +[401312c1] _ZNSt8ios_base4InitD1Ev(0x0804a47c, 0, 172800, 0x40233234, 0x40014020) = 0x400bfd50 +[ffffffff] +++ exited (status 0) +++ diff --git a/static/34/rce2-files/listing2.txt b/static/34/rce2-files/listing2.txt new file mode 100644 index 0000000..ae85b75 --- /dev/null +++ b/static/34/rce2-files/listing2.txt @@ -0,0 +1,28 @@ +bash$ cat hands-on.lt | c++filt +[08048939] __libc_start_main(0x080489c8, 1, 0xbffff774, 0x080487e0, 0x08048f90 +[08048b0f] std::ios_base::Init::Init[in-charge]()(0x0804a47c, 0xbffff6d4, 0x4006114a, 1, 65535) = 3 +[08048b23] __cxa_atexit(0x08048b28, 0, 0x0804a054, 1, 65535) = 0 +[080489e4] __xstat(3, "hands-on", 0xbffff6a0) = 0 +[08048be0] time(NULL) = 1062082695 +[08048c02] std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*)(0x0804a348, 0x08048fc9, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c11] std::basic_istream >& std::operator>>, std::allocator >(std::basic_istream >&, std::basic_string, std::allocator >&)(0x0804a3d8, 0xbffff6a4, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a3d8 +[08048d40] std::basic_string, std::allocator >::_M_leak_hard()(0xbffff6a4, 3, 10, 0x01048447, 0x400d31e0) = 0x0804a51c +[08048cf6] isdigit(49, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048d65] isdigit(49, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048d65] isdigit(43, 3, 10, 0x01048447, 0x400d31e0) = 0 +[08048e34] time(NULL) = 1062082700 +[08048ec5] isdigit(50, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048f0a] isdigit(50, 3, 10, 0x01048447, 0x400d31e0) = 2048 +[08048c34] std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*)(0x0804a348, 0x08048fc0, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c82] std::basic_ostream >::operator<<(long)(0x0804a348, 3, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c70] std::basic_ostream >::operator<<(std::basic_ostream >& (*)(std::basic_ostream >&))(0x0804a348, 0x080488e8, 0x40014020, 0xbffff774, 0xbffff718 +[40094e0a] std::basic_ostream >& std::endl >(std::basic_ostream >&)(0x0804a348, 0x0804a348, 3, 0x08048421, 0x4002e201) = 0x0804a348 +[08048c70] <... std::basic_ostream >::operator<<(std::basic_ostream >& (*)(std::basic_ostream >&)) resumed> ) = 0x0804a348 +[08048be0] time(NULL) = 1062082700 +[08048c02] std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*)(0x0804a348, 0x08048fc9, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a348 +[08048c11] std::basic_istream >& std::operator>>, std::allocator >(std::basic_istream >&, std::basic_string, std::allocator >&)(0x0804a3d8, 0xbffff6a4, 0x40014020, 0xbffff774, 0xbffff718) = 0x0804a3d8 +[08048d40] std::basic_string, std::allocator >::_M_leak_hard()(0xbffff6a4, 1, 10, 0x01048447, 0x400d31e0) = 0x0804a51c +[08048cf6] isdigit(113, 1, 10, 0x01048447, 0x400d31e0) = 0 +[08048aaf] std::basic_string, std::allocator >::_Rep::_M_destroy(std::allocator const&)(0x0804a510, 0xbffff6f0, 0xbffff6a0, 1, 0xbffff700) = 0x0804a500 +[401312c1] std::ios_base::Init::~Init [in-charge]()(0x0804a47c, 0, 172800, 0x40233234, 0x40014020) = 0x400bfd50 +[ffffffff] +++ exited (status 0) +++ diff --git a/static/34/rce2-files/listing3.txt b/static/34/rce2-files/listing3.txt new file mode 100644 index 0000000..d507339 --- /dev/null +++ b/static/34/rce2-files/listing3.txt @@ -0,0 +1,3 @@ +bash$ c++filt _ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc +std::basic_ostream >& std::operator<< >(std::basic_ostream >&, char const*) + diff --git a/static/34/rce2-files/listing4.txt b/static/34/rce2-files/listing4.txt new file mode 100644 index 0000000..d89b7df --- /dev/null +++ b/static/34/rce2-files/listing4.txt @@ -0,0 +1,4 @@ +8048c04 ! push dword ptr [ebp-10h] +8048c07 ! push std::cin +8048c0c ! call std::basic_istream >& std::operator>>, std::allocator >(std::basic_istream >&, std::basic_string, std::allocator >&) + diff --git a/static/34/rce2-files/prekas_giorgos-rce1sol.tgz b/static/34/rce2-files/prekas_giorgos-rce1sol.tgz new file mode 100644 index 0000000..b845cc8 Binary files /dev/null and b/static/34/rce2-files/prekas_giorgos-rce1sol.tgz differ diff --git a/static/34/rce2-files/stampoulis_antonis-rce1sol.tgz b/static/34/rce2-files/stampoulis_antonis-rce1sol.tgz new file mode 100644 index 0000000..82b3255 Binary files /dev/null and b/static/34/rce2-files/stampoulis_antonis-rce1sol.tgz differ diff --git a/static/35/alf-rce2sol.tar.gz b/static/35/alf-rce2sol.tar.gz new file mode 100644 index 0000000..b7d18ca Binary files /dev/null and b/static/35/alf-rce2sol.tar.gz differ diff --git a/static/35/img/X-win.png b/static/35/img/X-win.png new file mode 100644 index 0000000..71a0c31 Binary files /dev/null and b/static/35/img/X-win.png differ diff --git a/static/35/img/central-control.png b/static/35/img/central-control.png new file mode 100644 index 0000000..83df113 Binary files /dev/null and b/static/35/img/central-control.png differ diff --git a/static/35/img/client-server.png b/static/35/img/client-server.png new file mode 100644 index 0000000..e6350c9 Binary files /dev/null and b/static/35/img/client-server.png differ diff --git a/static/35/img/distributed.png b/static/35/img/distributed.png new file mode 100644 index 0000000..e41aaa4 Binary files /dev/null and b/static/35/img/distributed.png differ diff --git a/static/35/img/integrated.png b/static/35/img/integrated.png new file mode 100644 index 0000000..ae297ab Binary files /dev/null and b/static/35/img/integrated.png differ diff --git a/static/35/img/mem.png b/static/35/img/mem.png new file mode 100644 index 0000000..d3d5c5a Binary files /dev/null and b/static/35/img/mem.png differ diff --git a/static/35/img/modular.png b/static/35/img/modular.png new file mode 100644 index 0000000..a4b8a8b Binary files /dev/null and b/static/35/img/modular.png differ diff --git a/static/35/img/pcode.png b/static/35/img/pcode.png new file mode 100644 index 0000000..0414735 Binary files /dev/null and b/static/35/img/pcode.png differ diff --git a/static/35/memread.c.gz b/static/35/memread.c.gz new file mode 100644 index 0000000..3b878bd Binary files /dev/null and b/static/35/memread.c.gz differ diff --git a/static/35/prekas_geo-rce2sol.tar.gz b/static/35/prekas_geo-rce2sol.tar.gz new file mode 100644 index 0000000..b42cef8 Binary files /dev/null and b/static/35/prekas_geo-rce2sol.tar.gz differ diff --git a/themes/archie-hellug/LICENSE b/themes/archie-hellug/LICENSE new file mode 100644 index 0000000..646ad35 --- /dev/null +++ b/themes/archie-hellug/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2020 ATHUL CYRIAC AJAY + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/themes/archie-hellug/README.md b/themes/archie-hellug/README.md new file mode 100644 index 0000000..de2d0e6 --- /dev/null +++ b/themes/archie-hellug/README.md @@ -0,0 +1,126 @@ +# Archie - Hugo theme +Archie is a minimal and clean theme for hugo with a markdown-ish UI. + +Forked from [Ezhil Theme](https://github.com/vividvilla/ezhil) + +## Demo + +[Check the Demo](https://athul.github.io/archie/) hosted on GitHub Pages :smile: . You can find the source code to that in the `site` branch of this repository + +![](/images/theme.png) +![](/images/archie-dark.png) +## Feature +- Google Analytics Script +- Callouts +- Tags +- Auto Dark Mode(based on system theme) +- Dark/Light Mode toggle +- tl:dr; frontamatter +- Cache busting for CSS files + +## Installation +In your Hugo website directory, create a new folder named theme and clone the repo +```bash +$ mkdir themes +$ cd themes +$ git clone https://github.com/athul/archie.git +``` +Edit the `config.toml` file with `theme="archie"` +For more information read the official [setup guide](https://gohugo.io/overview/installing/) of Hugo. + +## Writing Posts +Create a new `.md` file in the *content/posts* folder +```yml +--- +title: Title of the post +description: +date: +tldr: (optional) +draft: true/false (optional) +tags: [tag names] (optional) +--- +``` + +## Credits +Forked from [Ezhil Theme](https://github.com/vividvilla/ezhil) and Licensed under MIT License +Inspired by design of blog.jse.li + +---- + +## Config Options + +### Custom CSS +Custom CSS files can be included though the `customcss` config parameter. + +Note: CSS files should be placed under the `assets` directory e.g. `assets/css/first.css`. + +```toml +[params] + customcss = ["css/first.css", "css/second.css"] +``` + + +## Config of the Demo Site + +```toml +baseURL = "https://athul.github.io/archie/" +languageCode = "en-us" +title = "Archie" +theme="archie" +copyright = "© Athul" +# Code Highlight +pygmentsstyle = "monokai" +pygmentscodefences = true +pygmentscodefencesguesssyntax = true + +paginate=3 # articles per page + +[params] + mode="auto" # color-mode → light,dark,toggle or auto + useCDN=false # don't use CDNs for fonts and icons, instead serve them locally. + subtitle = "Minimal and Clean [blog theme for Hugo](https://github.com/athul/archie)" + +# Social Tags + +[[params.social]] +name = "GitHub" +icon = "github" +url = "https://github.com/athul/archie" + +[[params.social]] +name = "Twitter" +icon = "twitter" +url = "https://twitter.com/athulcajay/" + +[[params.social]] +name = "GitLab" +icon = "gitlab" +url = "https://gitlab.com/athul/" + +# Main menu Items + +[[menu.main]] +name = "Home" +url = "/" +weight = 1 + +[[menu.main]] +name = "All posts" +url = "/posts" +weight = 2 + +[[menu.main]] +name = "About" +url = "/about" +weight = 3 + +[[menu.main]] +name = "Tags" +url = "/tags" +weight = 4 +``` +--- + +If you liked my work please consider supporting me on [BuymeACoffee](https://www.buymeacoffee.com/athulca) + +Buy Me A Coffee diff --git a/themes/archie-hellug/archetypes/default.md b/themes/archie-hellug/archetypes/default.md new file mode 100644 index 0000000..ac36e06 --- /dev/null +++ b/themes/archie-hellug/archetypes/default.md @@ -0,0 +1,2 @@ ++++ ++++ diff --git a/themes/archie-hellug/assets/css/dark.css b/themes/archie-hellug/assets/css/dark.css new file mode 100644 index 0000000..f93adf1 --- /dev/null +++ b/themes/archie-hellug/assets/css/dark.css @@ -0,0 +1,159 @@ +body { + color: white; + background-color: #202124; +} + +::-moz-selection { + background: blue; + color: #fff; + text-shadow: none; +} + +::selection { + background: red; + color: #fff; + text-shadow: none; +} + +hr { + border-top: 3px dotted blue; +} +code { + background-color: lightblue; + color: black; + text-decoration: bold; + padding: 0.1em 0.2em; +} +pre { + background-color: #272822; + line-height: 1.4; + overflow-x: auto; + padding: 1em; +} +blockquote { + border-color: blue; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + color: #ddd; +} +h1::before { + color: var(--darkMaincolor); + content: "# "; +} +h2::before { + color: var(--darkMaincolor); + content: "## "; +} +h3::before { + color: var(--darkMaincolor); + content: "### "; +} +h4::before { + color: var(--darkMaincolor); + content: "#### "; +} +h5::before { + color: var(--darkMaincolor); + content: "##### "; +} +h6::before { + color: var(--darkMaincolor); + content: "###### "; +} + +a { + border-bottom: 3px solid var(--darkMaincolor); + color: inherit; +} +a:hover { + background-color: var(--darkMaincolor); + color: black; +} + +.site-description a { + color: #ddd; +} +.site-description a:hover { + color: black; +} + +.tags a { + border-bottom: 3px solid var(--darkMaincolor); +} +.tags a:hover { + background-color: var(--darkMaincolor); + color: black; +} + +.site-title a { + color: white; + text-decoration: none !important; +} + +.header nav, +.footer { + border-color: #333; +} + +.highlight { + background-color: #333; +} +.soc:hover { + color: black; +} +.draft-label { + color: var(--darkMaincolor); + background-color: blue; +} +.highlight pre code[class=language-javaScript]::before, +.highlight pre code[class="language-js"]::before { + content: "js"; + background: #f7df1e; + color: black; +} +.highlight pre code[class*='language-yml']::before, +.highlight pre code[class*='language-yaml']::before { + content: 'yaml'; + background: #f71e6a; + color: white; +} +.highlight pre code[class*='language-shell']::before, +.highlight pre code[class*='language-bash']::before, +.highlight pre code[class*='language-sh']::before { + content: 'shell'; + background: green; + color:white +} +.highlight pre code[class*='language-json']::before{ + content: 'json'; + background: dodgerblue; + color: #000000 +} +.highlight pre code[class*='language-python']::before, +.highlight pre code[class*='language-py']::before { + content: 'py'; + background: blue; + color: yellow ; +} +.highlight pre code[class*='language-css']::before{ + content: 'css'; + background: cyan; + color: black ; +} +.highlight pre code[class*='language-go']::before{ + content: 'Go'; + background: cyan; + color: royalblue ; +} +.highlight pre code[class*='language-md']::before, +.highlight pre code[class*='language-md']::before{ + content: 'Markdown'; + background: royalblue; + color: whitesmoke ; +} \ No newline at end of file diff --git a/themes/archie-hellug/assets/css/fonts.css b/themes/archie-hellug/assets/css/fonts.css new file mode 100644 index 0000000..156ee63 --- /dev/null +++ b/themes/archie-hellug/assets/css/fonts.css @@ -0,0 +1,38 @@ +/* fira-sans-regular - latin */ +@font-face { + font-family: 'Fira Sans'; + font-style: normal; + font-weight: 400; + src: url('../fonts/fira-sans-v10-latin-regular.eot'); /* IE9 Compat Modes */ + src: local('Fira Sans Regular'), local('FiraSans-Regular'), + url('../fonts/fira-sans-v10-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/fira-sans-v10-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/fira-sans-v10-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/fira-sans-v10-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/fira-sans-v10-latin-regular.svg#FiraSans') format('svg'); /* Legacy iOS */ +} +/* roboto-mono-regular - latin */ +@font-face { + font-family: 'Roboto Mono'; + font-style: normal; + font-weight: 400; + src: url('../fonts/roboto-mono-v12-latin-regular.eot'); /* IE9 Compat Modes */ + src: url('../fonts/roboto-mono-v12-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/roboto-mono-v12-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/roboto-mono-v12-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/roboto-mono-v12-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/roboto-mono-v12-latin-regular.svg#RobotoMono') format('svg'); /* Legacy iOS */ +} +/* ibm-plex-mono-500italic - latin */ +@font-face { + font-family: 'IBM Plex Mono'; + font-style: italic; + font-weight: 500; + src: url('../fonts/ibm-plex-mono-v6-latin-500italic.eot'); /* IE9 Compat Modes */ + src: local('IBM Plex Mono Medium Italic'), local('IBMPlexMono-MediumItalic'), + url('../fonts/ibm-plex-mono-v6-latin-500italic.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/ibm-plex-mono-v6-latin-500italic.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/ibm-plex-mono-v6-latin-500italic.woff') format('woff'), /* Modern Browsers */ + url('../fonts/ibm-plex-mono-v6-latin-500italic.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/ibm-plex-mono-v6-latin-500italic.svg#IBMPlexMono') format('svg'); /* Legacy iOS */ +} diff --git a/themes/archie-hellug/assets/css/main.css b/themes/archie-hellug/assets/css/main.css new file mode 100644 index 0000000..00fcfb4 --- /dev/null +++ b/themes/archie-hellug/assets/css/main.css @@ -0,0 +1,330 @@ +/* Markdown */ +:root{ +--maincolor: red; +--bordercl:rebeccapurple; +--callouctcolor:dodgerblue; +--hovercolor:navy; +--darkMaincolor: #50fa7b; +} +html { + color: #232333; + font-family: 'Roboto Mono', monospace; + font-size: 15px; + line-height: 1.6em; +} +body{ + display: block; + margin: 8px; +} +* { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +::selection { + background: var(--maincolor); + color: #fff; +} + +p { + font-family: 'Fira Sans', sans-serif; + line-height: 1.5; +} + +hr { + border: 0; + border-top: 3px dotted var(--bordercl); + margin: 1em 0; +} + +blockquote { + border-left: 3px solid var(--bordercl); + color: #737373; + margin: 0; + padding-left: 1em; +} + +a { + border-bottom: 3px solid var(--maincolor); + color: inherit; + text-decoration: none; +} +a:hover { + background-color: var(--hovercolor); + color: #fff; +} + +ul { + list-style: none; + padding-left: 2ch; +} +ul li { + text-indent: -2ch; +} +ul > li::before { + content: '* '; + font-weight: bold; +} + +/* Images */ +img { + border: 3px solid #ececec; + max-width: 100%; +} + +figure { + box-sizing: border-box; + display: inline-block; + margin: 0; + max-width: 100%; +} + +figure img { + max-height: 500px; +} + +@media screen and (min-width: 600px) { + figure { + padding: 0 40px; + } +} + +figure h4 { + font-size: 1rem; + margin: 0; + margin-bottom: 1em; +} +figure h4::before { + content: '↳ '; +} + +/* Code blocks */ +code { + background-color: #f1f1f1; + padding: .1em .2em; +} + +pre { + background-color: #ececec; + line-height: 1.4; + overflow-x: auto; + padding: 1em; +} + +.highlight pre ::selection { + background: rgba(255, 255, 255, 0.2); + color: inherit; +} + +pre code { + background-color: transparent; + color: inherit; + font-size: 100%; + padding: 0; +} + +/* Containers */ +.content { + margin-bottom: 4em; + margin-left: auto; + margin-right: auto; + max-width: 800px; + padding: 0 1ch; + word-wrap: break-word; +} + +/* Header */ +header { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + margin: 1em 0; +} + +header .main { + font-size: 1.5rem; +} +h1, h2, h3, h4, h5, h6 { + font-size: 1.2rem; + margin-top: 2em; +} + +h1::before { color: var(--maincolor); content: '# '; } +h2::before { color: var(--maincolor); content: '## '; } +h3::before { color: var(--maincolor); content: '### '; } +h4::before { color: var(--maincolor); content: '#### '; } +h5::before { color: var(--maincolor); content: '##### '; } +h6::before { color: var(--maincolor); content: '###### '; } + +.meta { + color: #999; + letter-spacing: -0.5px; +} + +/* Footer */ +footer { + display: flex; + align-items: center; + border-top: 0.4rem dotted var(--bordercl); + padding: 2rem 0rem; + margin-top: 2rem; +} +.soc { + display: flex; + align-items: center; + padding-right: 1rem; + margin-right: 1rem; + border-right: 2px solid; + border-bottom: none; +} +.footer-info { + padding: var(--footer-padding); +} + +/* Common */ +.title h1 { + margin-bottom: 0; +} + +time { + color: grey; +} + +/* Posts */ +article .title { + margin-bottom: 1em; +} + + +/* Callout */ +.callout { + background-color: var(--callouctcolor); + color: #fff; + padding: 1em; +} + +.callout p { + font-family: 'IBM Plex Mono', monospace; + margin: 0; +} + +.callout a { + border-bottom: 3px solid #fff; +} + +.callout a:hover { + background-color: #fff; + color: var(--callouctcolor); +} + +.site-description { +display: flex; +justify-content: space-between; +} +.tags li::before{ + content: "🏷 "; +} +.tags a{ + border-bottom: 3px solid var(--maincolor); +} +.tags a:hover{ + color:white; + background-color: var(--hovercolor); +} +svg{ + max-height: 15px; +} +.soc:hover{ + color: white; +} +.draft-label{ + color: var(--bordercl); + text-decoration: none; + padding: 2px 4px; + border-radius: 4px; + margin-left: 6px; + background-color: #f9f2f4; +} +.highlight { + position: relative; + -webkit-overflow-scrolling: touch; +} +.highlight pre code[class*="language-"] { + -webkit-overflow-scrolling: touch; +} +.highlight pre code[class*="language-"]::before { + background: black; + border-radius: 0 0 0.25rem 0.25rem; + color: white; + font-size: 12px; + letter-spacing: 0.025rem; + padding: 0.1rem 0.5rem; + position: absolute; + right: 1rem; + text-align: right; + text-transform: uppercase; + top: 0; +} + +.highlight pre code[class=language-javaScript]::before, +.highlight pre code[class="language-js"]::before { +content: "js"; +background: #f7df1e; +color: black; +} +.highlight pre code[class*='language-yml']::before, +.highlight pre code[class*='language-yaml']::before { +content: 'yaml'; +background: #f71e6a; +color: white; +} +.highlight pre code[class*='language-shell']::before, +.highlight pre code[class*='language-bash']::before, +.highlight pre code[class*='language-sh']::before { +content: 'shell'; +background: green; +color:white +} +.highlight pre code[class*='language-json']::before{ +content: 'json'; +background: dodgerblue; + color: #000000 +} +.highlight pre code[class*='language-python']::before, +.highlight pre code[class*='language-py']::before { +content: 'py'; +background: blue; +color: yellow ; +} +.highlight pre code[class*='language-css']::before{ +content: 'css'; +background: cyan; +color: black ; +} +.highlight pre code[class*='language-go']::before{ +content: 'Go'; +background: cyan; +color: royalblue ; +} +.highlight pre code[class*='language-md']::before, +.highlight pre code[class*='language-md']::before{ +content: 'Markdown'; +background: royalblue; +color: whitesmoke ; +} + +/* table */ +table { + border-spacing: 0; + border-collapse: collapse; +} + +table th{ + padding: 6px 13px; + border: 1px solid #dfe2e5; + font-size: large; +} + +table td{ + padding: 6px 13px; + border: 1px solid #dfe2e5; +} diff --git a/themes/archie-hellug/images/archie-dark.png b/themes/archie-hellug/images/archie-dark.png new file mode 100644 index 0000000..2bff9ed Binary files /dev/null and b/themes/archie-hellug/images/archie-dark.png differ diff --git a/themes/archie-hellug/images/screenshot.png b/themes/archie-hellug/images/screenshot.png new file mode 100644 index 0000000..1a262e7 Binary files /dev/null and b/themes/archie-hellug/images/screenshot.png differ diff --git a/themes/archie-hellug/images/theme.png b/themes/archie-hellug/images/theme.png new file mode 100644 index 0000000..c195540 Binary files /dev/null and b/themes/archie-hellug/images/theme.png differ diff --git a/themes/archie-hellug/images/tn.png b/themes/archie-hellug/images/tn.png new file mode 100644 index 0000000..628ac6c Binary files /dev/null and b/themes/archie-hellug/images/tn.png differ diff --git a/themes/archie-hellug/layouts/404.html b/themes/archie-hellug/layouts/404.html new file mode 100644 index 0000000..e69de29 diff --git a/themes/archie-hellug/layouts/_default/baseof.html b/themes/archie-hellug/layouts/_default/baseof.html new file mode 100644 index 0000000..b941097 --- /dev/null +++ b/themes/archie-hellug/layouts/_default/baseof.html @@ -0,0 +1,11 @@ + + + {{- partial "header.html" . -}} + +
+ {{- partial "head.html" . -}} + {{- block "main" . }}{{- end }} + {{- partial "footer.html" . -}} +
+ + diff --git a/themes/archie-hellug/layouts/_default/list.html b/themes/archie-hellug/layouts/_default/list.html new file mode 100644 index 0000000..41a4c6f --- /dev/null +++ b/themes/archie-hellug/layouts/_default/list.html @@ -0,0 +1,17 @@ +{{ define "main" }} +{{ if isset .Data "Term" }} +

Entries tagged - "{{ .Data.Term }}"

+{{ else }} +

All articles

+{{ end }} + +
    + {{- range .Data.Pages -}} + {{- if (not (in (.Site.Params.excludedTypes | default (slice "page")) .Type)) -}} +
  • + {{.Title}} {{ dateFormat "Jan 2, 2006" .Date }}{{ if .Draft }} DRAFT {{ end }} +
  • + {{- end -}} + {{- end -}} +
+{{ end }} diff --git a/themes/archie-hellug/layouts/_default/single.html b/themes/archie-hellug/layouts/_default/single.html new file mode 100644 index 0000000..aabc708 --- /dev/null +++ b/themes/archie-hellug/layouts/_default/single.html @@ -0,0 +1,32 @@ +{{ define "main" }} +
+
+
+

{{ .Title }}

+
Ημερομηνία δημοσίευσης {{ dateFormat "Jan 2006" .Date }}{{ if .Draft }} DRAFT {{ end }}
+
+ {{ if isset .Params "author" }} +
+ {{ .Params.author }} +
{{ end }} + +
+ {{ .Content }} +
+ + +
+
+{{ end }} diff --git a/themes/archie-hellug/layouts/_default/term.html b/themes/archie-hellug/layouts/_default/term.html new file mode 100644 index 0000000..41a4c6f --- /dev/null +++ b/themes/archie-hellug/layouts/_default/term.html @@ -0,0 +1,17 @@ +{{ define "main" }} +{{ if isset .Data "Term" }} +

Entries tagged - "{{ .Data.Term }}"

+{{ else }} +

All articles

+{{ end }} + +
    + {{- range .Data.Pages -}} + {{- if (not (in (.Site.Params.excludedTypes | default (slice "page")) .Type)) -}} +
  • + {{.Title}} {{ dateFormat "Jan 2, 2006" .Date }}{{ if .Draft }} DRAFT {{ end }} +
  • + {{- end -}} + {{- end -}} +
+{{ end }} diff --git a/themes/archie-hellug/layouts/_default/terms.html b/themes/archie-hellug/layouts/_default/terms.html new file mode 100644 index 0000000..fea9c2f --- /dev/null +++ b/themes/archie-hellug/layouts/_default/terms.html @@ -0,0 +1,20 @@ +{{ define "main" }} +

All tags

+ +{{ $biggest := 1 }} +{{ $smallest := 1 }} +{{ $max := 3 }} +{{ $min := 1 }} +{{ $size := $min }} + +{{ $data := .Data }} +
+
    + {{ range $key, $value := .Data.Terms.ByCount }} + {{ $size := (add (mul (div $value.Count $biggest) (sub $max $min)) $min) }} + {{ $size := (cond (eq $biggest $smallest) $min $size) }} +
  • {{ $value.Name }}
  • + {{ end }} +
+
+{{ end }} diff --git a/themes/archie-hellug/layouts/index.html b/themes/archie-hellug/layouts/index.html new file mode 100644 index 0000000..7602b87 --- /dev/null +++ b/themes/archie-hellug/layouts/index.html @@ -0,0 +1,38 @@ + + + {{ partial "header.html" . }} + +
+ {{ partial "head.html" . }} + +
+
+ {{- if isset .Site.Params "subtitle" -}} +

{{ .Site.Params.Subtitle | markdownify }}

+ {{- end -}} +
+

Το Magaz είναι το πρώτο ελληνικό on-line περιοδικό για το Linux και το Open Source. Απευθύνεται σε όλους τους θιασώτες του Linux, καλύπτοντας ποικίλα θέματα, για χρήστες χαμηλού, μέσου και υψηλού επιπέδου. Είναι πόνημα εθελοντών, της Ελληνικής κοινότητας του Linux και διατίθεται δωρεάν, μέσω του Web.

+ {{ range $key, $value := .Site.Taxonomies.issue.Alphabetical.Reverse }} +

{{ $value.Page.Title }}

+ {{ range .Pages }} +
+

{{.Title}}

+ +
+ {{ if isset .Params "description" }} + {{ .Description }} + {{ else }} + {{ .Summary }}… + {{ end }} +
+ Read more ⟶ +
+ {{ end }} + {{ end }} +
+ {{ partial "footer.html" . }} +
+ + + + diff --git a/themes/archie-hellug/layouts/partials/footer.html b/themes/archie-hellug/layouts/partials/footer.html new file mode 100644 index 0000000..405d947 --- /dev/null +++ b/themes/archie-hellug/layouts/partials/footer.html @@ -0,0 +1,19 @@ +
+
+ {{- range $index, $key := .Site.Params.Social -}} + + {{- end -}} +
+ +
+{{ if not .Site.IsServer }} +{{ template "_internal/google_analytics_async.html" . }} +{{ end }} + +{{- if (isset .Site.Params "social") -}} + +{{- end -}} diff --git a/themes/archie-hellug/layouts/partials/head.html b/themes/archie-hellug/layouts/partials/head.html new file mode 100644 index 0000000..e8a637a --- /dev/null +++ b/themes/archie-hellug/layouts/partials/head.html @@ -0,0 +1,14 @@ +
+ + +
diff --git a/themes/archie-hellug/layouts/partials/header.html b/themes/archie-hellug/layouts/partials/header.html new file mode 100644 index 0000000..f3c9e82 --- /dev/null +++ b/themes/archie-hellug/layouts/partials/header.html @@ -0,0 +1,63 @@ + + + + {{- $title := ( .Title ) -}} + {{- $siteTitle := ( .Site.Title ) -}} + {{- if .IsHome -}} + {{ $siteTitle }} | Home + {{- else -}} + {{ $title }} - {{ $siteTitle }} + {{- end -}} + + {{- if isset .Site.Params "favicon" -}} + + {{- end -}} + + + + + {{ with .OutputFormats.Get "rss" -}} + {{ printf `` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }} + {{ end -}} + + {{- template "_internal/opengraph.html" . -}} + {{- template "_internal/twitter_cards.html" . -}} + {{ if and (isset .Site.Params "social") (.Site.Params.useCDN | default false) -}} + + {{- else if or (isset .Site.Params "social") (eq .Site.Params.mode "toggle") -}} + + {{ end }} + {{ if .Site.Params.useCDN | default false -}} + + + + {{- else -}} + {{ $fontstyle := resources.Get "css/fonts.css" | fingerprint }} + + {{ end }} + + {{ $style := resources.Get "css/main.css" | fingerprint }} + + + {{- if or (eq .Site.Params.mode "auto") (eq .Site.Params.mode "dark") (eq .Site.Params.mode "toggle") -}} + {{ $darkstyle := resources.Get "css/dark.css" | fingerprint }} + + {{ end }} + + + {{- if isset .Site.Params "customcss" }} + {{ range .Site.Params.customCSS }} + {{ $customstyle := resources.Get . | fingerprint }} + + {{ end }} + {{- end -}} + {{- range .Site.Params.customJS }} + {{- if or (hasPrefix . "http://") (hasPrefix . "https://") }} + + {{- else if (hasPrefix . " + {{- end }} + {{- end }} + diff --git a/themes/archie-hellug/layouts/partials/paginator.html b/themes/archie-hellug/layouts/partials/paginator.html new file mode 100644 index 0000000..5ea9e6f --- /dev/null +++ b/themes/archie-hellug/layouts/partials/paginator.html @@ -0,0 +1,15 @@ +{{ $pag := $.Paginator }} +{{ if gt $pag.TotalPages 1 }} + +{{ end }} diff --git a/themes/archie-hellug/layouts/shortcodes/callout.html b/themes/archie-hellug/layouts/shortcodes/callout.html new file mode 100644 index 0000000..5557aad --- /dev/null +++ b/themes/archie-hellug/layouts/shortcodes/callout.html @@ -0,0 +1,6 @@ + +
+
+ 💡 {{ .Get "text" }} +
+
\ No newline at end of file diff --git a/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.eot b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.eot new file mode 100644 index 0000000..7abf4c2 Binary files /dev/null and b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.eot differ diff --git a/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.svg b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.svg new file mode 100644 index 0000000..1e52097 --- /dev/null +++ b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.svg @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.ttf b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.ttf new file mode 100644 index 0000000..572e442 Binary files /dev/null and b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.ttf differ diff --git a/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.woff b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.woff new file mode 100644 index 0000000..d99ba57 Binary files /dev/null and b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.woff differ diff --git a/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.woff2 b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.woff2 new file mode 100644 index 0000000..9bb5760 Binary files /dev/null and b/themes/archie-hellug/static/fonts/fira-sans-v10-latin-regular.woff2 differ diff --git a/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.eot b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.eot new file mode 100644 index 0000000..62b89b3 Binary files /dev/null and b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.eot differ diff --git a/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.svg b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.svg new file mode 100644 index 0000000..6423805 --- /dev/null +++ b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.svg @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.ttf b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.ttf new file mode 100644 index 0000000..e4d1ddf Binary files /dev/null and b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.ttf differ diff --git a/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.woff b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.woff new file mode 100644 index 0000000..4504b41 Binary files /dev/null and b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.woff differ diff --git a/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.woff2 b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.woff2 new file mode 100644 index 0000000..489745d Binary files /dev/null and b/themes/archie-hellug/static/fonts/ibm-plex-mono-v6-latin-500italic.woff2 differ diff --git a/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.eot b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.eot new file mode 100644 index 0000000..8c56483 Binary files /dev/null and b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.eot differ diff --git a/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.svg b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.svg new file mode 100644 index 0000000..1864328 --- /dev/null +++ b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.svg @@ -0,0 +1,405 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.ttf b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.ttf new file mode 100644 index 0000000..d5dee83 Binary files /dev/null and b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.ttf differ diff --git a/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.woff b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.woff new file mode 100644 index 0000000..f319fbf Binary files /dev/null and b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.woff differ diff --git a/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.woff2 b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.woff2 new file mode 100644 index 0000000..ed384d2 Binary files /dev/null and b/themes/archie-hellug/static/fonts/roboto-mono-v12-latin-regular.woff2 differ diff --git a/themes/archie-hellug/static/js/feather.min.js b/themes/archie-hellug/static/js/feather.min.js new file mode 100644 index 0000000..d229492 --- /dev/null +++ b/themes/archie-hellug/static/js/feather.min.js @@ -0,0 +1,13 @@ +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.feather=n():e.feather=n()}("undefined"!=typeof self?self:this,function(){return function(e){var n={};function i(l){if(n[l])return n[l].exports;var t=n[l]={i:l,l:!1,exports:{}};return e[l].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=e,i.c=n,i.d=function(e,n,l){i.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:l})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="",i(i.s=61)}([function(e,n,i){var l=i(20)("wks"),t=i(11),r=i(1).Symbol,o="function"==typeof r;(e.exports=function(e){return l[e]||(l[e]=o&&r[e]||(o?r:t)("Symbol."+e))}).store=l},function(e,n){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,n){var i=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=i)},function(e,n){var i={}.hasOwnProperty;e.exports=function(e,n){return i.call(e,n)}},function(e,n,i){e.exports=!i(27)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n,i){var l=i(13);e.exports=function(e){if(!l(e))throw TypeError(e+" is not an object!");return e}},function(e,n,i){var l=i(5),t=i(56),r=i(55),o=Object.defineProperty;n.f=i(4)?Object.defineProperty:function(e,n,i){if(l(e),n=r(n,!0),l(i),t)try{return o(e,n,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[n]=i.value),e}},function(e,n,i){var l=i(6),t=i(12);e.exports=i(4)?function(e,n,i){return l.f(e,n,t(1,i))}:function(e,n,i){return e[n]=i,e}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=o(i(35)),t=o(i(33)),r=o(i(32));function o(e){return e&&e.__esModule?e:{default:e}}n.default=Object.keys(t.default).map(function(e){return new l.default(e,t.default[e],r.default[e])}).reduce(function(e,n){return e[n.name]=n,e},{})},function(e,n,i){var l=i(20)("keys"),t=i(11);e.exports=function(e){return l[e]||(l[e]=t(e))}},function(e,n){e.exports={}},function(e,n){var i=0,l=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++i+l).toString(36))}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,n){var i=Math.ceil,l=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?l:i)(e)}},function(e,n,i){var l; +/*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +/*! + Copyright (c) 2016 Jed Watson. + Licensed under the MIT License (MIT), see + http://jedwatson.github.io/classnames +*/ +!function(){"use strict";var i=function(){function e(){}function n(e,n){for(var i=n.length,l=0;l0?t(l(e),9007199254740991):0}},function(e,n){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,n,i){var l=i(48),t=i(14);e.exports=function(e){return l(t(e))}},function(e,n,i){var l=i(54);e.exports=function(e,n,i){if(l(e),void 0===n)return e;switch(i){case 1:return function(i){return e.call(n,i)};case 2:return function(i,l){return e.call(n,i,l)};case 3:return function(i,l,t){return e.call(n,i,l,t)}}return function(){return e.apply(n,arguments)}}},function(e,n,i){var l=i(1),t=i(7),r=i(3),o=i(11)("src"),a=Function.toString,c=(""+a).split("toString");i(2).inspectSource=function(e){return a.call(e)},(e.exports=function(e,n,i,a){var y="function"==typeof i;y&&(r(i,"name")||t(i,"name",n)),e[n]!==i&&(y&&(r(i,o)||t(i,o,e[n]?""+e[n]:c.join(String(n)))),e===l?e[n]=i:a?e[n]?e[n]=i:t(e,n,i):(delete e[n],t(e,n,i)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[o]||a.call(this)})},function(e,n,i){var l=i(13),t=i(1).document,r=l(t)&&l(t.createElement);e.exports=function(e){return r?t.createElement(e):{}}},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n,i){var l=i(1),t=i(2),r=i(7),o=i(25),a=i(24),c=function(e,n,i){var y,p,h,x,s=e&c.F,u=e&c.G,d=e&c.S,f=e&c.P,v=e&c.B,g=u?l:d?l[n]||(l[n]={}):(l[n]||{}).prototype,m=u?t:t[n]||(t[n]={}),M=m.prototype||(m.prototype={});for(y in u&&(i=n),i)h=((p=!s&&g&&void 0!==g[y])?g:i)[y],x=v&&p?a(h,l):f&&"function"==typeof h?a(Function.call,h):h,g&&o(g,y,h,e&c.U),m[y]!=h&&r(m,y,x),f&&M[y]!=h&&(M[y]=h)};l.core=t,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,n){e.exports=!1},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=Object.assign||function(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};if("undefined"==typeof document)throw new Error("`feather.replace()` only works in a browser environment.");var n=document.querySelectorAll("[data-feather]");Array.from(n).forEach(function(n){return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=function(e){return Array.from(e.attributes).reduce(function(e,n){return e[n.name]=n.value,e},{})}(e),o=i["data-feather"];delete i["data-feather"];var a=r.default[o].toSvg(l({},n,i,{class:(0,t.default)(n.class,i.class)})),c=(new DOMParser).parseFromString(a,"image/svg+xml").querySelector("svg");e.parentNode.replaceChild(c,e)}(n,e)})}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l,t=i(8),r=(l=t)&&l.__esModule?l:{default:l};n.default=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."),!e)throw new Error("The required `key` (icon name) parameter is missing.");if(!r.default[e])throw new Error("No icon matching '"+e+"'. See the complete list of icons at https://feathericons.com");return r.default[e].toSvg(n)}},function(e){e.exports={activity:["pulse","health","action","motion"],airplay:["stream","cast","mirroring"],"alert-circle":["warning"],"alert-octagon":["warning"],"alert-triangle":["warning"],"at-sign":["mention"],award:["achievement","badge"],aperture:["camera","photo"],bell:["alarm","notification"],"bell-off":["alarm","notification","silent"],bluetooth:["wireless"],"book-open":["read"],book:["read","dictionary","booklet","magazine"],bookmark:["read","clip","marker","tag"],briefcase:["work","bag","baggage","folder"],clipboard:["copy"],clock:["time","watch","alarm"],"cloud-drizzle":["weather","shower"],"cloud-lightning":["weather","bolt"],"cloud-rain":["weather"],"cloud-snow":["weather","blizzard"],cloud:["weather"],codepen:["logo"],codesandbox:["logo"],coffee:["drink","cup","mug","tea","cafe","hot","beverage"],command:["keyboard","cmd"],compass:["navigation","safari","travel"],copy:["clone","duplicate"],"corner-down-left":["arrow"],"corner-down-right":["arrow"],"corner-left-down":["arrow"],"corner-left-up":["arrow"],"corner-right-down":["arrow"],"corner-right-up":["arrow"],"corner-up-left":["arrow"],"corner-up-right":["arrow"],"credit-card":["purchase","payment","cc"],crop:["photo","image"],crosshair:["aim","target"],database:["storage"],delete:["remove"],disc:["album","cd","dvd","music"],"dollar-sign":["currency","money","payment"],droplet:["water"],edit:["pencil","change"],"edit-2":["pencil","change"],"edit-3":["pencil","change"],eye:["view","watch"],"eye-off":["view","watch"],"external-link":["outbound"],facebook:["logo"],"fast-forward":["music"],figma:["logo","design","tool"],film:["movie","video"],"folder-minus":["directory"],"folder-plus":["directory"],folder:["directory"],frown:["emoji","face","bad","sad","emotion"],gift:["present","box","birthday","party"],"git-branch":["code","version control"],"git-commit":["code","version control"],"git-merge":["code","version control"],"git-pull-request":["code","version control"],github:["logo","version control"],gitlab:["logo","version control"],global:["world","browser","language","translate"],"hard-drive":["computer","server"],hash:["hashtag","number","pound"],headphones:["music","audio"],heart:["like","love"],"help-circle":["question mark"],hexagon:["shape","node.js","logo"],home:["house"],image:["picture"],inbox:["email"],instagram:["logo","camera"],key:["password","login","authentication"],"life-bouy":["help","life ring","support"],linkedin:["logo"],lock:["security","password"],"log-in":["sign in","arrow"],"log-out":["sign out","arrow"],mail:["email"],"map-pin":["location","navigation","travel","marker"],map:["location","navigation","travel"],maximize:["fullscreen"],"maximize-2":["fullscreen","arrows"],meh:["emoji","face","neutral","emotion"],menu:["bars","navigation","hamburger"],"message-circle":["comment","chat"],"message-square":["comment","chat"],"mic-off":["record"],mic:["record"],minimize:["exit fullscreen"],"minimize-2":["exit fullscreen","arrows"],monitor:["tv"],moon:["dark","night"],"more-horizontal":["ellipsis"],"more-vertical":["ellipsis"],"mouse-pointer":["arrow","cursor"],move:["arrows"],navigation:["location","travel"],"navigation-2":["location","travel"],octagon:["stop"],package:["box"],paperclip:["attachment"],pause:["music","stop"],"pause-circle":["music","stop"],"pen-tool":["vector","drawing"],play:["music","start"],"play-circle":["music","start"],plus:["add","new"],"plus-circle":["add","new"],"plus-square":["add","new"],pocket:["logo","save"],power:["on","off"],radio:["signal"],rewind:["music"],rss:["feed","subscribe"],save:["floppy disk"],search:["find","magnifier","magnifying glass"],send:["message","mail","paper airplane"],settings:["cog","edit","gear","preferences"],shield:["security"],"shield-off":["security"],"shopping-bag":["ecommerce","cart","purchase","store"],"shopping-cart":["ecommerce","cart","purchase","store"],shuffle:["music"],"skip-back":["music"],"skip-forward":["music"],slash:["ban","no"],sliders:["settings","controls"],smile:["emoji","face","happy","good","emotion"],speaker:["music"],star:["bookmark","favorite","like"],sun:["brightness","weather","light"],sunrise:["weather"],sunset:["weather"],tag:["label"],target:["bullseye"],terminal:["code","command line"],"thumbs-down":["dislike","bad"],"thumbs-up":["like","good"],"toggle-left":["on","off","switch"],"toggle-right":["on","off","switch"],trash:["garbage","delete","remove"],"trash-2":["garbage","delete","remove"],triangle:["delta"],truck:["delivery","van","shipping"],twitter:["logo"],umbrella:["rain","weather"],"video-off":["camera","movie","film"],video:["camera","movie","film"],voicemail:["phone"],volume:["music","sound","mute"],"volume-1":["music","sound"],"volume-2":["music","sound"],"volume-x":["music","sound","mute"],watch:["clock","time"],wind:["weather","air"],"x-circle":["cancel","close","delete","remove","times"],"x-octagon":["delete","stop","alert","warning","times"],"x-square":["cancel","close","delete","remove","times"],x:["cancel","close","delete","remove","times"],youtube:["logo","video","play"],"zap-off":["flash","camera","lightning"],zap:["flash","camera","lightning"]}},function(e){e.exports={activity:'',airplay:'',"alert-circle":'',"alert-octagon":'',"alert-triangle":'',"align-center":'',"align-justify":'',"align-left":'',"align-right":'',anchor:'',aperture:'',archive:'',"arrow-down-circle":'',"arrow-down-left":'',"arrow-down-right":'',"arrow-down":'',"arrow-left-circle":'',"arrow-left":'',"arrow-right-circle":'',"arrow-right":'',"arrow-up-circle":'',"arrow-up-left":'',"arrow-up-right":'',"arrow-up":'',"at-sign":'',award:'',"bar-chart-2":'',"bar-chart":'',"battery-charging":'',battery:'',"bell-off":'',bell:'',bluetooth:'',bold:'',"book-open":'',book:'',bookmark:'',box:'',briefcase:'',calendar:'',"camera-off":'',camera:'',cast:'',"check-circle":'',"check-square":'',check:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',"chevrons-down":'',"chevrons-left":'',"chevrons-right":'',"chevrons-up":'',chrome:'',circle:'',clipboard:'',clock:'',"cloud-drizzle":'',"cloud-lightning":'',"cloud-off":'',"cloud-rain":'',"cloud-snow":'',cloud:'',code:'',codepen:'',codesandbox:'',coffee:'',columns:'',command:'',compass:'',copy:'',"corner-down-left":'',"corner-down-right":'',"corner-left-down":'',"corner-left-up":'',"corner-right-down":'',"corner-right-up":'',"corner-up-left":'',"corner-up-right":'',cpu:'',"credit-card":'',crop:'',crosshair:'',database:'',delete:'',disc:'',"dollar-sign":'',"download-cloud":'',download:'',droplet:'',"edit-2":'',"edit-3":'',edit:'',"external-link":'',"eye-off":'',eye:'',facebook:'',"fast-forward":'',feather:'',figma:'',"file-minus":'',"file-plus":'',"file-text":'',file:'',film:'',filter:'',flag:'',"folder-minus":'',"folder-plus":'',folder:'',frown:'',gift:'',"git-branch":'',"git-commit":'',"git-merge":'',"git-pull-request":'',github:'',gitlab:'',globe:'',grid:'',"hard-drive":'',hash:'',headphones:'',heart:'',"help-circle":'',hexagon:'',home:'',image:'',inbox:'',info:'',instagram:'',italic:'',key:'',layers:'',layout:'',"life-buoy":'',"link-2":'',link:'',linkedin:'',list:'',loader:'',lock:'',"log-in":'',"log-out":'',mail:'',"map-pin":'',map:'',"maximize-2":'',maximize:'',meh:'',menu:'',"message-circle":'',"message-square":'',"mic-off":'',mic:'',"minimize-2":'',minimize:'',"minus-circle":'',"minus-square":'',minus:'',monitor:'',moon:'',"more-horizontal":'',"more-vertical":'',"mouse-pointer":'',move:'',music:'',"navigation-2":'',navigation:'',octagon:'',package:'',paperclip:'',"pause-circle":'',pause:'',"pen-tool":'',percent:'',"phone-call":'',"phone-forwarded":'',"phone-incoming":'',"phone-missed":'',"phone-off":'',"phone-outgoing":'',phone:'',"pie-chart":'',"play-circle":'',play:'',"plus-circle":'',"plus-square":'',plus:'',pocket:'',power:'',printer:'',radio:'',"refresh-ccw":'',"refresh-cw":'',repeat:'',rewind:'',"rotate-ccw":'',"rotate-cw":'',rss:'',save:'',scissors:'',search:'',send:'',server:'',settings:'',"share-2":'',share:'',"shield-off":'',shield:'',"shopping-bag":'',"shopping-cart":'',shuffle:'',sidebar:'',"skip-back":'',"skip-forward":'',slack:'',slash:'',sliders:'',smartphone:'',smile:'',speaker:'',square:'',star:'',"stop-circle":'',sun:'',sunrise:'',sunset:'',tablet:'',tag:'',target:'',terminal:'',thermometer:'',"thumbs-down":'',"thumbs-up":'',"toggle-left":'',"toggle-right":'',"trash-2":'',trash:'',trello:'',"trending-down":'',"trending-up":'',triangle:'',truck:'',tv:'',twitter:'',type:'',umbrella:'',underline:'',unlock:'',"upload-cloud":'',upload:'',"user-check":'',"user-minus":'',"user-plus":'',"user-x":'',user:'',users:'',"video-off":'',video:'',voicemail:'',"volume-1":'',"volume-2":'',"volume-x":'',volume:'',watch:'',"wifi-off":'',wifi:'',wind:'',"x-circle":'',"x-octagon":'',"x-square":'',x:'',youtube:'',"zap-off":'',zap:'',"zoom-in":'',"zoom-out":''}},function(e){e.exports={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=Object.assign||function(e){for(var n=1;n2&&void 0!==arguments[2]?arguments[2]:[];!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.name=n,this.contents=i,this.tags=t,this.attrs=l({},o.default,{class:"feather feather-"+n})}return t(e,[{key:"toSvg",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return""+this.contents+""}},{key:"toString",value:function(){return this.contents}}]),e}();n.default=c},function(e,n,i){"use strict";var l=o(i(8)),t=o(i(31)),r=o(i(30));function o(e){return e&&e.__esModule?e:{default:e}}e.exports={icons:l.default,toSvg:t.default,replace:r.default}},function(e,n,i){var l=i(0)("iterator"),t=!1;try{var r=[7][l]();r.return=function(){t=!0},Array.from(r,function(){throw 2})}catch(e){}e.exports=function(e,n){if(!n&&!t)return!1;var i=!1;try{var r=[7],o=r[l]();o.next=function(){return{done:i=!0}},r[l]=function(){return o},e(r)}catch(e){}return i}},function(e,n,i){var l=i(22),t=i(0)("toStringTag"),r="Arguments"==l(function(){return arguments}());e.exports=function(e){var n,i,o;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,n){try{return e[n]}catch(e){}}(n=Object(e),t))?i:r?l(n):"Object"==(o=l(n))&&"function"==typeof n.callee?"Arguments":o}},function(e,n,i){var l=i(38),t=i(0)("iterator"),r=i(10);e.exports=i(2).getIteratorMethod=function(e){if(void 0!=e)return e[t]||e["@@iterator"]||r[l(e)]}},function(e,n,i){"use strict";var l=i(6),t=i(12);e.exports=function(e,n,i){n in e?l.f(e,n,t(0,i)):e[n]=i}},function(e,n,i){var l=i(10),t=i(0)("iterator"),r=Array.prototype;e.exports=function(e){return void 0!==e&&(l.Array===e||r[t]===e)}},function(e,n,i){var l=i(5);e.exports=function(e,n,i,t){try{return t?n(l(i)[0],i[1]):n(i)}catch(n){var r=e.return;throw void 0!==r&&l(r.call(e)),n}}},function(e,n,i){"use strict";var l=i(24),t=i(28),r=i(17),o=i(42),a=i(41),c=i(21),y=i(40),p=i(39);t(t.S+t.F*!i(37)(function(e){Array.from(e)}),"Array",{from:function(e){var n,i,t,h,x=r(e),s="function"==typeof this?this:Array,u=arguments.length,d=u>1?arguments[1]:void 0,f=void 0!==d,v=0,g=p(x);if(f&&(d=l(d,u>2?arguments[2]:void 0,2)),void 0==g||s==Array&&a(g))for(i=new s(n=c(x.length));n>v;v++)y(i,v,f?d(x[v],v):x[v]);else for(h=g.call(x),i=new s;!(t=h.next()).done;v++)y(i,v,f?o(h,d,[t.value,v],!0):t.value);return i.length=v,i}})},function(e,n,i){var l=i(3),t=i(17),r=i(9)("IE_PROTO"),o=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=t(e),l(e,r)?e[r]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?o:null}},function(e,n,i){var l=i(1).document;e.exports=l&&l.documentElement},function(e,n,i){var l=i(15),t=Math.max,r=Math.min;e.exports=function(e,n){return(e=l(e))<0?t(e+n,0):r(e,n)}},function(e,n,i){var l=i(23),t=i(21),r=i(46);e.exports=function(e){return function(n,i,o){var a,c=l(n),y=t(c.length),p=r(o,y);if(e&&i!=i){for(;y>p;)if((a=c[p++])!=a)return!0}else for(;y>p;p++)if((e||p in c)&&c[p]===i)return e||p||0;return!e&&-1}}},function(e,n,i){var l=i(22);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==l(e)?e.split(""):Object(e)}},function(e,n,i){var l=i(3),t=i(23),r=i(47)(!1),o=i(9)("IE_PROTO");e.exports=function(e,n){var i,a=t(e),c=0,y=[];for(i in a)i!=o&&l(a,i)&&y.push(i);for(;n.length>c;)l(a,i=n[c++])&&(~r(y,i)||y.push(i));return y}},function(e,n,i){var l=i(49),t=i(19);e.exports=Object.keys||function(e){return l(e,t)}},function(e,n,i){var l=i(6),t=i(5),r=i(50);e.exports=i(4)?Object.defineProperties:function(e,n){t(e);for(var i,o=r(n),a=o.length,c=0;a>c;)l.f(e,i=o[c++],n[i]);return e}},function(e,n,i){var l=i(5),t=i(51),r=i(19),o=i(9)("IE_PROTO"),a=function(){},c=function(){var e,n=i(26)("iframe"),l=r.length;for(n.style.display="none",i(45).appendChild(n),n.src="javascript:",(e=n.contentWindow.document).open(),e.write("