Posts Tagged ‘HowTo’

How to set up a personal git repository in 10 minutes

Posted in HowTo, Internet & technology on July 24th, 2009 by atma – Be the first to comment

I’ve been looking at Google for some quick howto’s on how to setup a git repository on my home server. I’ve lost a couple of minutes reading the howto’s on-line and then a couple of hours trying to figure out what I was doing wrong. The entire process is plain simple and takes less then 1 minute if you know how git works. Most people who write the howto’s, probably don’t, because they don’t work. For instance, you can’t push/pull an empty repository with git. It complaints and comes out with an error. Then if you Google on the error you find any kind of possible blog post and forum post and you end up losing… time.

Enough whinny, here is how it works. I assume that you use ssh + keys for your server. If you don’t use ssh, you’re on your own. Google on how to create and use ssh keys and come back if you don’t know how to create rsa keys.

We will create the remote repository first.

$ mkdir -p Projects/myeliteproject.git && cd Projects/myeliteproject.git
$ git init --bare
$ exit

We need the “–bare” flag. If you want to know why, read the manual and have in mind that this is a remote repository.

At this point we go on the desktop computer where the actual development will take place. I assume that you will use the same directory and project for the sake of coherence.

$ mkdir -p Projects/myeliteproject.git && cd Projects/myeliteproject.git
$ git init
$ git remote add origin ssh://[user]@[hostname]/full/path/to/the/repo.git
$ git push origin master
$ echo \"We need this commit in order to avoid errors\" > first_commit.txt
$ git add first_commit.txt
$ git commit
(write a reason here... \"first needed commit\" is a good one)
$ git push
$ git config branch.master.merge 'refs/heads/master'
$ git config branch.master.remote origin
$ git config --global push.default matching
(This config is to avoid warning messages. Please read here and consult documentation for refspecs)
$ git pull
	
Already up-to-date.

You should be able to see the “Already up-to-date” flag also. Now on how to proceed from here, read the git tutorial. Apart from gitweb there several others solutions for viewing your repository online. The php-ones are the most easy to install and configure.

PHP Support for HTTP View of the Branch

I will give you a quick tip on how to setup gitview with Objective-C for it is simple and straight forward.

Gitview is a simple php script that can take advance of Geshi, for syntax highlighting. Now if you just setup gitview it will use geshi, which must be manually installed and used. No big deal, just download geshi adjust the path in the config.php:

// Whether to use GeSHi for source highlighting
$conf['geshi'] = true;
 
// Path to geshi.php
$conf['geshi_path'] = '/path/to/geshi.php'; // depends on where you put this...

Then you just adjust the “index.php” file to use the specific language by changing this line:

$lang = Geshi::get_language_name_from_extension($ext);

To this:

 $lang = "objc";

Note that this is for Objective-C but Geshi supports an awful lot of languages. The problem with geshi is that it can’t understand on the fly which programming language you want to use, according to the developers the reason for this is:

[...]
	
00:41 < atmosx> It's easy for languages like perl, python,
bash or ruby but how can you tell if an .m extension is C++ or Objective-C? :-) 
	
[...]
	
00:54 < BenBE2> atmosx That's the problem with the current approach:
It doesn't even look at the content and thus gives the first language it finds for a language.
	
00:54 < BenBE2> New approaches will look
at the actual content or try other means to get around this.
	
[...]

Got them on Freenode. Mr BenBE gave me the correct syntax to put into that index.php file to make it work as it should. Thanks for the support!

You can find the development team of Geshi at Freenode channel “#Geshi“.

That’s all! :-)

NOTE: If you get this kind of error:

warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated.  This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, by configuring 'push.default' to:
warning:   'nothing'  : Do not push anything
warning:   'matching' : Push all matching branches (default)
warning:   'tracking' : Push the current branch to whatever it is tracking
warning:   'current'  : Push the current branch

Just take a look at the here is the answer. Don’t panic it’s just a design “flaw” from overzealous developers!

For Textmate users: install the git-bundle!

UPDATE: For a more detailed howto with Rails etc. Look here

Πως να στήσουμε έναν τοπικό DNS στο Mac Mini με το DNSMASQ

Posted in Apple, HowTo, Internet & technology on July 22nd, 2009 by atma – Be the first to comment

Εισαγωγή

Όταν έχουμε ένα σπιτικό δίκτυο με περισσότερο από ένα μηχανήματα, όπως συμβαίνει συχνά, είναι χρήσιμο να έχει το κάθε μηχάνημα το όνομα του, το στατικό ip του, κλπ. Είναι σαν να βάζετε σε τάξη το συρτάρι με τα εσώρουχα!

Ένας υπολογιστής με Macintosh που είναι ανοιχτός 24/7 μας κάνει άνετα αυτήν την δουλειά. Στην περίπτωση μου είναι ο μικρός mac mini που έχω για media centre στο σαλόνι. Ανάμεσα στα άλλα κάνει κι αυτό τρέχοντας το πρόγραμμα dnsmasq. Το DNSmasq έχει πάρα πολλές και ενδιαφέρουσες χρήσεις. Είναι υπερβολικά απλό για το τοπικό μας δίκτυο και μπορεί να χρησιμοποιηθεί για τον λόγο που περιέγραψα πιο πάνω.

Για να καταλάβουμε τι ακριβώς κάνει, πρέπει να έχουμε μια μικρή, ελάχιστη, γνώση του πως λειτουργεί το πρωτόκολλο DNS. Εν συντομία, θα μπορούσαμε να πούμε ότι το Domain Name Service (DNS) είναι αυτό που δίνει ονομασία στους υπολογιστές ενός δικτύου. Όταν ανοίγουμε έναν πλοηγητή (Sarafi, Firefox, Opera, IE, etc)  και πληκτρολογούμε μια διεύθυνση URL ο υπολογιστής μας στέλνει αυτόματα ένα request σε έναν DNS server, ο οποίος του δίνει την διεύθυνση που αντιστοιχεί στον συγκεκριμένο server. Για να δούμε το πραγματικό ip αρκεί να κάνουμε ping. Για παράδειγμα:

angel:~ atma$ ping -c 1 www.maclife.com
PING www.maclife.com (72.3.244.42): 56 data bytes
64 bytes from 72.3.244.42: icmp_seq=0 ttl=115 time=171.743 ms
	
--- www.maclife.com ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/stddev = 171.743/171.743/171.743/0.000 ms
angel:~ atma$

Όπως βλέπεται πιο πάνω είδαμε το IP του server. Το IP του είναι η διεύθυνση του υπολογιστή στον οποίο βρίσκεται η συγκεκριμένη ιστοσελίδα, στο διαδίκτυο.  Κάθε provider έχει τους δικούς του Name Servers (NS) τους οποίους οι ADSL γραμμές τους παίρνουν αυτόματα. Όταν γίνεται το handshake ανάμεσα στον router μας και στον provider μέσω τηλεφωνικής γραμμής, ο provider δίνει τα απαραίτητα στοιχεία στον router. Έπειτα ο router δηλώνει τον εαυτό του ως DNS server στο τοπικό δίκτυο κι αναλαμβάνει να “μοιράσει” τα ip’s στο subnet του σπιτιού μας. Το πρωτόκολλο που διαχειρίζεται την διαδικασία ανάθεσης διευθύνσεων IP και καθορισμού DNS server για να μπαίνουμε στο διαδίκτυο χωρίς προβλήματα λέγετε DHCP. Αυτό καθορίζει πια διεύθυνση θα έχει ο υπολογιστής όταν τον ανοίξουμε. Για την ακρίβεια, ο υπολογιστής στέλνει DHCPD request σε όλο το δίκτυο ο server παίρνει το request και στέλνει reply με τα ανάλογα στοιχεία στον client (mac/pc). Γι αυτό πολλοί έχουμε ip’s όπως 192.168.0.1 άλλοι 192.168.1.1 κι άλλοι 192.168.2.1, κλπ. Πολλές φορές οι routers διαχωρίζουν το ασύρματο από το ενσύρματο δίκτυο, δίνοντας π.χ. ξεχωριστό subnet στα ασύρματα δίκτυα. Κάτι παρόμοιο κάνει και η airport base extreme δίνοντας άλλο IP subnet στους “guests” μην επιτρέποντας τους να επικοινωνήσουν με το σπιτικό δίκτυο, για λόγους ασφαλείας.

Πολλοί, θέλουν να έχουν πρόσβαση από το διαδίκτυο στο τοπικό τους δίκτυο. Όμως οι περισσότεροι στο σπίτι έχουν dymanic IP address. Κάθε φορά που συνδεόμαστε στο διαδίκτυο, ο provider αντί δώσει την ίδια διεύθυνση κάθε φορά, μας δίνει διαφορετική. Αυτό διευκολύνει τον provider, για λόγους που δεν θα εξηγήσω εδώ, αλλά δημιουργεί ένα πρόβλημα σε εμάς. Δεν μπορούμε να θέσουμε ένα domain name π.χ. www.spitimou.gr σε ένα συγκεκριμένο IP γιατί την επόμενη φορά που θα πέσει το ρεύμα, η διεύθυνση IP θα αλλάξει, γιατί είναι δυναμική διεύθυνση κι όχι στατική. Για να πάρουμε στατική διεύθυνση από τον provider μας πρέπει να πληρώσουμε, αλλά κάτι τέτοιο πλέον δεν είναι απαραίτητο. Υπάρχουν υπηρεσίες όπως η DynDNS οι οποίες φροντίζουν να εξαλείψουν αυτό το πρόβλημα, περισσότερες λεπτομέρειες για την υπηρεσία αυτή θα βρείτε στην ιστοσελίδα της. Κάποιοι ADSL routers όπως ο Linksys WAG160N έχουν build-in client για να ανανεώνει αυτόματα την IP του σπιτικού δικτύου μέσω DynDNS.

Βάζοντας dnsmasq μπορούμε να ελέγξουμε απόλυτα το σπιτικό μας δίκτυο, να ξέρουμε ποιος και πότε συνδέθηκε, να καθορίσουμε πιο subnet θα χρησιμοποιήσουμε κι άλλες λεπτομέρειες. Επίσης για όσους έχουν DyDNS και δεν μπορούν να δουν τον server τους μέσα από το δίκτυο τους, με το dnsmasq αυτό μπορεί να γίνει, πλέον, πολύ εύκολα.

MacPorts & Dnsmasq configuration
Τα MacPorts ένα εξαιρετικό πρόγραμμα διαχείρισης πακέτων για MacOSX. Είναι βασισμένο στα FreeBSD ports. Η εγκατάσταση τους είναι αρκετά απλή, μπορείτε να ακολουθήσετε κατά γράμμα τις οδηγίες στην ιστοσελίδα τους. Για λεπτομέρειες, αν αντιμετωπίσετε κάποιο πρόβλημα, μην διστάσετε να ρωτήσετε αφήνοντας κάποιο σχόλιο εδώ ή στην mailing list.

Δυστυχώς για όσους δεν είναι συνηθισμένοι με την γραμμή εντολών, θα είναι λίγο δύσκολο να συνηθίσουν, αλλά αξίζει τον κόπο! Η γραμμή εντολών έχει εκπληκτικές δυνατότητες σε συστήματα Unix based. Προτείνω επίσης, για όσους θα χρησιμοποιήσουν την γραμμή εντολών να κατεβάσουν το iTerm. Είναι σαφώς ανώτερο από το Terminal.app.

Για να εγκαταστήσουμε τα MacPorts θα χρειαστούμε το xCode. Όσοι δεν το έχετε εγκαταστήσει, ήρθε η ώρα. Κάντε εγγραφή στο website της Apple και κατεβάστε το xCode. Μετά την εγκατάσταση θα έχετε πλέον GCC στον Mac σας. Ο GCC είναι ο Gnu C Compiler. Ένας μεταγλωττιστής γλωσσών προγραμματισμού ανοιχτού κώδικα, τον οποίο χρησιμοποιεί η Apple καθώς και πληθώρα εταιριών / λειτουργικών συστημάτων. Το τελευταίο xCode που παίζει κανονικά σε Tiger είναι το 2.5!!!

Έπειτα κατεβάζουμε τα MacPorts. Υπάρχει DMG image το οποίο το κατεβάζουμε και το κάνουμε install κανονικά, όπως κάθε άλλο πακέτο σε MacOSX. Κατεβάστε στο αντίστοιχο image για την διανομή σας.

Μόλις εγκαταστήσουμε τα macports καλό είναι να διαβάσουμε το guide από την ιστοσελίδα. Αφού εγκαταστήσουμε τα macports με τις απαραίτητες ρυθμίσεις στο αρχείο $HOME/.bash_profile αρχίζουμε την εγκατάσταση του dnsmasq με μια απλή εντολή:

$ echo 'PATH=/opt/local/bin:/opt/local/sbin:/bin:/sbin:/usr/bin:/usr/sbin' > .bash_profile
$ source .bash_profile
$ sudo port install dnsmasq

Τώρα θα γίνει η εγκατάσταση του dnsmasq στον κατάλογο /opt/local/ . Από εδώ κι έπειτα όλα τα προγράμματα που θα εγκαθιστούμε θα είναι στον κατάλογο /opt/local έτσι ώστε να μην έχουμε προβλήματα ασυμβατότητας με το σύστημα στο / (root). Υπάρχουν τρίτα προγράμματα της Apple που χρειάζονται της εκδόσεις το προγραμμάτων (python, php, κλπ) που υπάρχουν στο / γι αυτό είναι κάκιστη ιδέα να τα σβήνουμε ή να γίνονται overwrite.

Αρχικά δημιουργούμε το αρχείο: /opt/local/etc/mhosts.conf

Σε αυτό το αρχείο θα βάλουμε όλα τα στοιχεία και τα ονόματα που θέλουμε να χρησιμοποιούνται στο τοπικό μας δίκτυο. Θα μπορούσαμε να το κάνουμε απευθείας μέσα από το dnsmasq αλλά διάφορους λόγους, ίσως και συνήθειας, μου είναι πολύ πιο εύκολο να έχω τα πάντα στο mhosts.conf. Η σύνταξη του είναι σχετικά απλή:

# /opt/local/etc/mhosts.conf file
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
	
192.168.0.1 router
192.168.0.2 karida.ath.cx mac1
192.168.0.3 angel.karida.ath.cx mac2

Τις πρώτες 3 γραμμές αφήστε τες ανέγγιχτες. Οι επόμενες γραμμές κάτω, δηλώνουν IP και όνομα. Μπορούμε να βάλουμε όσες ονομασίες θέλουμε, για παράδειγμα έναν υπολογιστή μπορεί να τον λένε: iMac devil pingo pam pim boum macosx. Αρκεί να έχω αυτήν την γραμμούλα:

192.168.0.2 iMac devil pingo pam pim boum macosx

στο συγκεκριμένο αρχείο. Ότι ονομασία και IP βάλετε εδώ αυτό θα βλέπουν κι όλα τα άλλα μηχανήματα στο δίκτυο σας. Για παράδειγμα όταν θέλετε να συνδεθείτε σε ένα PC με Windows και smb θα γράφεται smb:// αντί για smb://ip στο τοπικό δίκτυο. Γενικότερα, θα πάρει όνομα ο υπολογιστής.

Αφού στήσουμε αυτό το αρχείο. Πάμε στο επόμενο το /opt/local/etc/mresolv.conf:

# otenet name servers
nameserver 195.170.0.2
nameserver 195.170.2.1
nameserver 195.170.0.1
nameserver 66.33.206.206
nameserver 195.170.2.2

Αυτό το αρχείο θα έχει τους nameservers που χρησιμοποιούμε. Στην περίπτωση μου έχω, αυτούς της OTENET. Μπορείτε να βάλετε όσους nameservers θέλετε. Υπάρχουν πολλές θεωρίες σχετικά με το ποιους να χρησιμοποιείτε. Επειδή ο server θα τους ψάξει με την σειρά, από πάνω προς τα κάτω, καλύτερα επάνω να είναι αυτοί του δικού σας provider. Αν είναι η otenet τότε αντιγράψτε το αρχείο αν έχετε κάποιον άλλο, τότε ψάξτε στο διαδίκτυο, στην ιστοσελίδα του provider σας θα βρείτε τους Name Server του. Μπορείτε να τους βρείτε κι από γραμμή εντολών, google it!

Αφού τελειώσει η εγκατάσταση του dnsmasq ανοίγουμε το αρχείο /opt/local/etc/dnsmasq.conf . Το configuration που θα προτείνω είναι ένα απλό configuration σχετικά με τις δυνατότητες του dnsmasq αλλά πιστεύω ότι είναι καλό για τους περισσότερους χρήστες. Θα γράφω ένα ένα τα options και την περιγραφή από κάτω:

addn-hosts=/opt/local/etc/mhosts.conf

Ορίζουμε το αρχείο από το οποίο θα διαβάζει τις ονομασίες των υπολογιστών στο τοπικό δίκτυο κι όχι μόνο. Λεπτομέρειες γι αυτό το αρχείο υπάρχουν λίγο πιο πάνω.

address=/karida.ath.cx/192.168.0.2

Μπορούμε να έχουμε όσες γραμμές “address” θέλουμε. Εδώ δρομολογούμε το όποιο DNS request για το domain karida.ath.cx στο IP 192.168.0.2 . Αρχικά να πω ότι κάνω χρήση του DyDNS για συνδέομαι στο τοπικό δίκτυο από οπουδήποτε. Το hostname μου είναι το karida.ath.cx. Τρέχω διάφορες υπηρεσίες στο karida.ath.cx . Όταν είμαι σε εξωτερικό δίκτυο συνδέομαι στο σπίτι χρησιμοποιώντας το “karida.ath.cx” ως hostname. Όταν είμαι στο εσωτερικό του δικτύου όμως, η OTENET δεν με αφήνει να συνδεθώ στο εξωτερικό IP μου. Με αποτέλεσμα να μην μπορώ να συνδεθώ με το όνομα “karida.ath.cx” που είναι το Domain Name για τον υπολογιστή που έχω ορίσει σαν server, με port foward στον router, κι έτσι πρέπει να δώσω το εσωτερικό IP. Αυτό σε υπηρεσίες όπως το OpenVPN μπορεί να δημιουργεί προβλήματα, πέραν του ότι γενικότερα, είναι εξαιρετικά άβολο. Σε αυτό το πρόβλημα έρχεται να δώσει λύση αυτή η μαγική γραμμή στο dnsmasq.conf. Όποιος κάνει request το karida.ath.cx από το εσωτερικό του δικτύου πάει αυτόματα στο 192.168.0.2 χωρίς να ψάχνει στο διαδίκτυο. Στην ουσία χωρίς να κάνει forward το request στου NS της Otenet. Έτσι είτε είμαι εντός, είτε εκτός δικτύου σαν karida.ath.cx βλέπω πάντα τον ίδιο υπολογιστή.

bind-interfaces

Αυτό αφήστε το έτσι όπως είναι. Είναι τα interfaces που θα τρέχει το πρόγραμμα. Εμείς θέλουμε να τρέχει στο en0.

bogus-nxdomain=64.94.110.11
bogus-priv
cache-size=150
dhcp-authoritative

αυτά αφήστε τα όπως έχουν. Αν θέλετε μάθεται λεπτομέρειες ρίξτε μια ματιά στο manual του dnsmasq.

dhcp-host=00:1D:4F:C2:68:8D,iTouch

Αυτή η γραμμή μου δίνει την δυνατότητα να δώσω συγκεκριμένο hostname στην συσκευή που έχει το συγκεκριμένο MAC address. Όποτε συνδέσω το iPod Touch στο διαδίκτυο από εδώ και πέρα θα το βλέπω σαν iTouch. Το ίδιο ισχύει για όποιον άλλο υπολογιστή ή μηχάνημα θέλουμε. Όλα τα μηχανήματα που έχουν κάρτα δικτύου, ενσύρματη ή ασύρματη έχουν MAC Addresses.

dhcp-leasefile=/opt/local/var/dnsmasq.leases

Αυτό είναι το αρχείο στο οποίο κρατάει τα δεδομένα το dnsmasq. Το αφήνουμε ως έχει.

dhcp-option=23,50

Αυτά είναι λίγα από “πολλά” αριθμητικά που έχει το dnsmasq. Διαβάστε το τις επεξηγήσεις στα σχόλια του dnsmasq.conf .

dhcp-option=option:router,192.168.0.1

Αυτή η γραμμή είναι επίσης πολύ σημαντική καθώς δηλώνει σε όλους τους υπολογιστές που περιμένουν να πάρουν IP / hostname από το dnsmasq ποιος είναι ο router. Στην περίπτωση μου είναι το 192.168.0.1.

dhcp-option=vendor:MSFT,2,1i

Αυτά είναι επιπλέον options, διαβάστε τα σχόλια στο dnsmasq.conf

dhcp-range=192.168.0.4,192.168.0.20,12h

Εδώ ορίζουμε το “range” από που έως που θα μοιράζει IP’s το DNSMASQ. Όρισα τα συγκεκριμένα range για να έχω τον έλεγχο. Καλό είναι να αφήσετε τουλάχιστον 20 θέσεις ανάμεσα. Όπως θα προσέξατε πιο πάνω, κάποια μηχανήματα έχουν στατικές ip (τις ορίσαμε στο mhosts.conf). Εδώ είναι τα μηχανήματα που θα συνδεθούν αργότερα.

domain-needed

Αφήστε το ως έχει στο dnsmasq θα το χρειαστείτε οι περισσότεροι, λεπτομέρειες στο dnsmasq.conf .

domain=karida.ath.cx

Ορίζω το domain του δικτύου μου.

expand-hosts

Όπως έγραψα και πριν το dyndns μου δίνει ένα domain, το karida.ath.cx. Αυτό το option μου δίνει την δυνατότητα να έχουν τα μηχανήματα ονομασίες του στυλ “iTouch.karida.ath.cx”. Μου αρέσει αυτό γι αυτό το χρησιμοποιώ.

filterwin2k

Windows specific option. Καλύτερα κρατήστε το. Τα Windows δεν είναι χάλια μόνο σαν λειτουργικό, είναι και σαν λειτουργικό για networking…

interface=en0

Ορίζουμε το interface. Εκτός κι αν για κάποιο λόγο έχετε 2 κάρτες δικτύου, αυτό είναι το standard σε OSX.

log-queries
no-hosts
no-negcache

Διάφορα options αφήστε τα έτσι. Διαβάστε το manual για επεξηγήσεις.

resolv-file=/opt/local/etc/mresolv.conf
strict-order

Το πρώτο αρχείο το αναλύσαμε πιο πάνω. Είναι το αρχείο που έχει μέσα τους Name Servers στου οποίους θα κάνει forward τα requests τα οποία δεν μπορεί να διαχειριστεί το dnsmasq τοπικά. Στο mresolv.conf θα πρέπει να βάλετε τους name server του provider σας. Το strict-order λέει dnsmasq να χρησιμοποιεί σε κάθε περίπτωση την ιεραρχία του mresolv.conf από πάνω προς τα κάτω. Υπάρχει περίπτωση, σπάνια αλλά υπάρχει, ένα domain name να έχει αλλάξει ip στο διαδίκτυο, π.χ. ένα website να αλλάξει hosting. Αν ο server της otenet δεν ανανεωθεί εγκαίρως και είναι πιο ψηλά στην λίστα δεν θα μπορέσετε να δείτε την ιστοσελίδα.

Λεπτομέρειες και περισσότερες ρυθμίσεις σχετικά με το dnsmasq μπορείτε να διαβάσετε στο manual page. Να σημειώσω ότι υποστηρίζει και tftp boot για εγκατάσταση λειτουργικό συστήματος μέσω δικτύου (PXE protocol)

Σύνδεση με SSH και SSH-Keys

Για να αρχίσουμε την εγκατάσταση στο Mac Mini server καλό είναι να συνδεθούμε με secure shell, χωρίς κωδικούς πρόσβασης κάθε φορά που κάνουμε login. Για να το επιτύχουμε αυτό πρέπει να δημιουργήσουμε έναν χρήστη με το ίδιο ακριβώς username με αυτό στο desktop (imac, laptop, κλπ).

Αφού συνδεθούμε με remote desktop στο mac mini και σιγουρευτούμε ότι έχουμε το “remote login” ανοιχτό σαν υπηρεσία. Ανοίγουμε το Terminal.app ή το iTerm.app και δίνουμε την εξής εντολή:

ssh-keygen -t rsa

Έπειτα περιμένουμε μέχρι να δημιουργηθούν τα “κλειδιά” μας. Κάποια στιγμή θα μας ζητήσει password, αν θέλετε βάζετε ένα password αλλιώς πατάτε enter. Τα κλειδιά Secure Shell είναι αυτά που θα μας επιτρέπουν να τα φορτώσουμε μια φορά στο ξεκίνημα της σύνδεσης τοπικά κι έπειτα να χρησιμοποιούμε για κάθε σύνδεση σε οποιοδήποτε secure shell connection. Απαρτίζονται από ένα ιδιωτικό (private) κι ένα δημόσιο (public) κλειδί. Το ιδιωτικό το έχουμε μόνο εμείς. Το δημόσιο το τοποθετούμε σε όλους τους servers που θέλουμε να έχουμε σύνδεση χωρίς κωδικό. Είναι εξαιρετικά εύχρηστη η χρήση κλειδιών ssh για απομακρυσμένη διαχείριση υπολογιστή. Το φόρτομα στο οποίο αναφέρομαι γίνεται στην αρχή. Το MacOSX Leopard έχει build-in keychain και φορτώνει αυτόματα τα κλειδιά με το password σε κάθε εκκίνηση αρκεί να πάρει μια φορά το password. Παρόλα αυτά, καλό είναι το password να μπορείτε να το βρείτε σε περίπτωση που δεν φορτωθεί από το OSX.

Όταν τελειώσουμε με το key generation λοιπόν πρέπει να βλέπουμε τα ακόλουθα στο $HOME/.ssh/:

angel:~ atma$ ls $HOME/.ssh/
id_rsa      id_rsa.pub

Το αρχείο id_rsa είναι το ιδιωτικό κλειδί, για τα μάτια μας και μόνο, ενώ το id_rsa.pub είναι το δημόσιο κλειδί. Στέλνουμε το δημόσιο κλειδί στον server μας με την εντολή ‘scp’.

desktop:~ user$ ssh devo
Password:
Last login: Wed Jul 22 19:27:44 2009 from 192.168.0.3
Welcome to Darwin!
server:~ user$ mkdir ssh
mkdir: ssh: File exists
server:~ user$ mkdir .ssh
server:~ user$ exit
logout
scp Connection to server closed.
desktop:~ user$ scp .ssh/id_rsa.pub user@192.168.0.2:/Users/user/.ssh/authorized_keys
Password:
id_rsa.pub                                                                                                                                                         100%  398     0.4KB/s   00:00
desktop:~ user$

Τώρα το μόνο που μένει είναι να ενεργοποιήσουμε το PubKeyAuth στον sshd server. Το αρχείο σε MacOSX είναι το /etc/sshd_config. Κάνουμε uncomment τις δύο γραμμούλες:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Και restart τον sshd server. Αυτό μπορείτε να το κάνετε από το System Preferences -> Sharing -> Remote Login. Σταματήστε και ξεκινήστε πάλι το service μετά την αλλαγή.

Επίλογος
Μην ξεχάσετε αφού ενεργοποιήσετε το dnsmasq να απενεργοποιήσετε το DNS από τον router σας αλλιώς μπορεί να προκληθεί ένας μικρός χαμός στο τοπικό σας δίκτυο. Η χρήση dnsmasq θα σας διευκολύνει εξαιρετικά σε περίπτωση που έχετε πολλά μηχανήματα στο LAN σας. Επίσης θα σας δώσει την δυνατότητα να στήσετε υπηρεσίες όπως HTTPD, SSHD, OpenVPN κλπ. με ευκολία καθώς θα μπορείτε να κάνετε transparent browsing τόσο μέσα όσο κι έξω από το δίκτυο σας,  κάτι πολύ χρήσιμο.

Ο συγκεκριμένος οδηγός δεν είναι για αρχάριους. Πρέπει να έχετε κάνει μια πρώτη γνωριμία με την γραμμή εντολών και να γνωρίζεται τα βασικά των δικτύων και πως λειτουργούν, αλλιώς πιθανών να δημιουργηθεί πρόβλημα. Βέβαια κι εγώ έτσι έμαθα, από το troubleshooting αλλά δεν θέλω να πάρω κανένα στον λαιμό μου, οπότε όλη η ευθύνη δική σας!

Για ερωτήσεις αφήστε comments  και χρησιμοποιείστε πολύ το Google  γιατί πιο απλά από όσο τα έγραψα, πραγματικά δεν γίνεται! :-)

MacOSX load TUN driver through cli

Posted in Apple, Internet & technology on July 4th, 2009 by atma – Be the first to comment
Excellent tutorial on OpenVPN2 and macosx cli! It has some tips for ssh and on how to load the TUN/TAP drivers via cli on the mach kernel!

Εγκατάσταση Ubuntu Intredip με dnsmasq και PXE

Posted in HowTo, Internet & technology on October 31st, 2008 by atma – Be the first to comment

Έχω έναν φορητό υπολογιστή Fujitsu Siemens (AMILO). Τα specs δεν τα γνωρίζω καλά καλά, αλλά υπολογίζω 1.5 Ghz / 512 MB Ram / 40 GB HD. Το CDRom είναι χαλασμένο. Θέλει καρφίτσα, τσιμπιδάκι για να σφηνώσει έτσι ώστε να μην αναπηδά το CD. Το συγκεκριμένο laptop έχει δυνατότητα PXE boot. Συγκεκριμένα το PXE-2 της intel.

Οπότε αποφάσισα να χρησιμοποιήσω το Dnsmasq έτσι ώστε να κάνει boot σε Ubuntu το μηχάνημα μέσω δικτύου. Το πρώτο που πρέπει να κάνω είναι το setup του server.

Κάνω edit το dnsmasq.conf. Η διανομή του server είναι Gentoo GNU/Linux. Οι ρυθμίσεις στην ουσία είναι για Gentoo αλλά με ευκολία μπορούν να λειτουργήσουν σε όλες τις διανομές Linux.

# mkdir /mnt/tftp ; cd /mnt/tftp

# screen lftp -c “open http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-i386/current/images/netboot/; mirror”

#ln -s /mnt/tftp/pxelinux.cfg/default /mnt/tftp/pxelinux.cfg/000AE42EA642

# cat /etc/dnsmasq.conf
dhcp-boot=pxelinux.0,gentoo-server,192.168.3.45 #boot image, server και ip του server
enable-tftp # Λέμε στο dnsmasq να κάνει start τον tftp demon. Αλλιώς θέλουμε κάτι σαν το tftp-hpa.
tftp-root=/mnt/tftp #Θέτουμε το root directory του TFTP server

Αφού κάνουμε start το dnsmasq, χρησιμοποιούμε το netstat ή το lsof για να δούμε αν οι υπηρεσίες που μας ενδιαφέρουν λειτουργούν κανονικά:

egasus tftp # lsof -i|grep -i dns

# lsof -i|grep -i dns
dnsmasq 23683 nobody 5u IPv4 137982 UDP *:bootps

dnsmasq 23683 nobody 6u IPv4 137987 UDP *:domain
dnsmasq 23683 nobody 7u IPv4 137988 TCP *:domain (LISTEN)
dnsmasq 23683 nobody 8u IPv6 137989 UDP *:domain
dnsmasq 23683 nobody 9u IPv6 137990 TCP *:domain (LISTEN)
dnsmasq 23683 nobody 10u IPv4 137991 UDP *:tftp

ή

# netstat -lu|grep tftp
udp 0 0 *:tftp *:*

Στο παραπάνω παράδειγμα κάνω χρήση της εντολής “ln”. Το αρχείο default κάνει link στην MAC Address του client που θέλουμε να κάνει boot. Πως την βρίσκουμε; Κάνοντας ένα ping στο target και χρησιμοποιώντας την εντολή “arp -a” σαν root!
Προσοχή, στο ln -s, το mac address που βάζουμε ως link είναι χωρίς τα “:”. Κάπως έτσι:

pegasus ~ # ping -c 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.451 ms

— 192.168.0.1 ping statistics —
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.451/0.451/0.451/0.000 ms
pegasus ~ # arp -a
router (192.168.0.1) at 00:1d:7e:b4:78:da [ether] on eth0
pegasus ~ # ln -s /mnt/tftp/pxelinux.cfg/default /mnt/tftp/pxelinux.cfg/001d7eb478da

Έπειτα ανοίγουμε τον υπολογιστή που θέλουμε να εγκαταστήσουμε το σύστημα και κάνουμε boot κι απλά ακολουθούμε τις οδηγίες στην οθόνη!

EDIT: Εάν για κάποιο λόγο κολλάει η εγκατάσταση στο “Release” και δεν σας βγάζει πληροφορίες για τα πακέτα που κατεβάζει, αλλάξτε το mirror! Το Ελληνικό δεν είναι ενημερωμένο συνήθως, καλύτερα δοκιμάστε το Ιταλικό “it.archives.ubuntu.com”.


Convalesco is using WP-Gravatar