Παξοί survival guide

August 14, 2014

Συνεχίσουμε την παράδοση των survival guides μετά από τις διακοπές (και αφού έχουν περάσει μερικές μέρες να έχουμε τις εμπειρίες κατασταλαγμένες). Το συγκεκριμένο survival guide θα μπορούσε να είναι η εξής φράση:

Πάμε στον Μπάμπη μένουμε εκεί αν έχει δωμάτια, κάνουμε τις καταδύσεις μας και ακούμε τις συμβουλές.

 

Pro Tip που ισχύει ακόμη και σήμερα: Για να μην γυρίσουμε όλο το Γάιο ψάχνοντας τον Μπάμπη, αντί να δούμε το χάρτη που έχει στο site, βλέπουμε τον χάρτη που υπάρχει στο paxos-map

Αλλά για να μην το κάνουμε τόσο σύντομο ας τα πούμε τα tips και πιο αναλυτικά:

  • Τα νερά είναι κλασσικό Ιόνιο, πρασινογάλανα και τα σχετικά (Αλόννησος δεν είναι θα πώ εγώ, αλλά ποιος με ακούει πάλι). Πολύ καθαρά και πολύ όμορφα.
  • Μικρό νησί, άρα τα βασικά γίνονται πολύ εύκολα και μετά μένει και χρόνος να ξεκουραστείς (Αντίθετα με τις κακές γλώσσες και μετά από 9 μέρες δεν βαρεθήκαμε και καθόμασταν και επιπλέον άνετα).
  • Γενικά ακριβό νησί, τόσο σε διαμονή όσο και σε φαγητό/προμήθειες. Από την άλλη η ποιότητα ήταν πάντα καλή, επομένως ήταν κάπως σε φάση ό,τι πληρώνεις παίρνεις.
  • Πού θα μείνουμε; Αν δεν πάμε στον Μπάμπη επειδή δεν έχει, τότε μια άλλη καλή επιλογή είναι το Angela Studios, που ζητάμε να μείνουμε στα πάνω διαμερίσματα διότι έχουν μπαλκόνι με πολύ καλή θέα. Θέλει μια προσοχή στο ψυγείο, γιατί για κάποιο λόγο όταν καθαρίζαν το δωμάτιο κλείναν και το ψυγείο.  Από εκεί και πέρα η θέα αξίζει και ήταν και καθαρά. Το κουλό: το κλείνουμε μέσω booking.com  διότι το απευθείας κοστίζει πολύ περισσότερο. (η ανάπτυξη έφτασε). (Ο Μπάμπης από του χρόνου στο booking). (Αυτά βέβαια ισχύουν αν δεν μένετε σε μια από τις τόσες βίλλες στους Παξούς .. που τότε μάλλον λάθος blog διαβάζετε)
  • Πού θα φάμε; Πρώτη επιλογή το παξοιμάδι στον Γάιο, οι τιμές είναι οκ για τις μερίδες (οι πατάτες του είναι καταπληκτικές) και στο τέλος φέραν και κέρασμα waffle. Για ψάρια είτε στο Απάγκιο (Γάιος), είτε στον Γιό (Λογγός) που οι σαρδέλλες είναι πολύ καλές. Για κατι πιο “ψαγμένο” μπορούμε να φάμε στον Μπύρο που εκεί θα γνωρίσουμε και τον εστιάτορα και θα ακούσουμε και ωραίες ιστορίες (ρωτήστε για το όνομα του μαγαζιού). Για γλυκό στο capriccio στον Γάιο. Έχει κρέπες και waffles με δικό τους παγωτό. Αν πάμε βράδυ (μετά τις 8:00) δοκιμάζουμε το παγωτό φουντούκι – nutella.
  • Πού θα πιούμε καφέ; Εδώ τα πράγματα δύσκολα. Ο καφές στους παξούς χωρίζεται σε 2 κατηγορίες: Δεν πίνεται, και ίσα που πίνεται. Τα μόνα 2 καφέ που ήταν στην δεύτερη κατηγορία είναι το Pio-Pio στον Γάιο και ο Μπουρνάος στο δρόμο Γάιος – Λάκκα (μετά τα μαγαζιά). Για τον Μπουρνάο ο καφές δεν, αλλά είχε γλυκά του κουταλιού και υποβρύχιο βανίλλια που έλεγαν πολύ. Γενικά, νεράκι εμφιαλωμένο, φακελάκια nescafe, γάλα νουνου και γυμναστική στα χέρια
  • Παραλίες: Όπως είπε μια ψυχή (Ο Μπάμπης ντε) οι παραλίες στους Παξούς είναι “copy – paste” και δεν έχει άδικο. Θα βρούμε στις παραλίες, βότσαλο, πιο μεγάλο βότσαλο, κοτρόνες and that’s about it. Η Λάκκα αποτελεί εξαίρεση διότι αφού μπούμε στη θάλασσα, μετά από 2-3 βήματα έχει κάτω άμμο. Επίσης η παραλία του Ερημίτη είναι ιδανική για να δούμε το ηλίοβασίλεμα (έχει χωματόδρομο μέχρι να φτάσουμε). Αν όμως πάμε Αντίπαξους (που θα πρέπει να πάμε) έχουμε τις 2 παραλίες Βρίκα και Βουτούμι που έχουν απίστευτη άμμο. Προτιμάμε Βουτούμι, διότι στη Βρίκα τα μαγαζιά είναι μέχρι έξω. Tip: πάμε όσο πιο νωρίς μπορούμε για να προλάβουμε τις free ξαπλώστρες και ομπρέλες να τις βάλουμε στην άμμο. Επίσης στην επιστροφή παίρνουμε όποιο βαρκάκι θέλουμε και δεν περιμένουμε να πετύχουμε αυτό που μας πήγε (ολοι την ίδια δουλειά κάνουν).
  • Όταν πάμε στους Αντίπαξους πάμε και μια βόλτα να δούμε και τις σπηλιές και τον τριπητό (αν δεν έχουμε άλλο τρόπο να πάμε να τα δούμε).
  • Καταδύσεις ΝΑΙ. Ιδίως η νυχτερινή έλεγε πάρα πολύ. Και βέβαια καταδύσεις που δεν παθαίνουμε κοκο-μπλόκο και δεν θέλουμε να είναι complicated πάμε με τον Μπάμπη διότι και έχει όλα τα comfort (κακομαθαίνει τον κόσμο φτιάχνοντας εξοπλισμούς) και εμπειρία έχει και καλό εξοπλισμό έχει. Μην σας παραπλανήσει το χαλαρό του στύλ, είναι πολύ προσεχτικός και δεν θα σας αφήσει να γίνει βλακεία. Μην περιμένετε να δείτε άπειρα ψαράκια, αλλά όλο κάτι βλέπουμε
  • Εκτός από καταδύσεις αξίζει να νοικιάσουμε σκάφος. Το νησί ειναι πολύ μικρό και μπορείς να το γυρίσεις εύκολα. Έχει και αρκετά σημεία που αξίζουν και μπορείς να πας μόνο με σκάφος.
  • Για night-life, ποτό αξίζει και στον Erimitis bar and restaurant που έχει θέα την παραλία του Ερημίτη και από εκεί θα είναι ωραίο το ηλιοβασίλεμα, αλλά και στο Μουράγιο στον Γάιο που και τα ποτά ήταν καλά, και η ποσότητα καλή και οι τιμές λογικότατες.

 

Advertisements

Following the previous post I wanted to make it possible to automatically provide the vfat partition I have to the windows VM. The best way to accomplish that was to use the shared folder abstraction from virtualbox together with the udev automounting. The solution is as follows:

  1. Create the correct /etc/fstab entry:
    UUID="XXXX-XXXX"                /media/external-win    vfat    rw,users,noauto,uid=YYYY,gid=ZZZZZ         0 0
    

    where the XXXX-XXXX is the UUID of the vfat partition found by blkid, YYYY and ZZZZ are the uid and gid of the user that is using it.

  2. Create the corresponding entries for the udev rules. (file /etc/udev/rules.d/10-externalhd.rules )
    KERNEL=="sd?2", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="lllll", ATTRS{idProduct}=="mmmm", ATTRS{serial}=="kkkkklllllmmmmm", RUN+="/bin/mount /media/external-win", RUN+="/bin/su - user -c '/home/user/bin/windows-attach.sh start'"
    KERNEL=="sd?2", ACTION=="remove", SUBSYSTEMS=="usb", ATTRS{idVendor}=="lllll", ATTRS{idProduct}=="mmmm", ATTRS{serial}=="kkkkklllllmmmmm", RUN+="/bin/mount /media/external-win", RUN+="/bin/su - user -c '/home/user/bin/windows-attach.sh stop'"
    
    

    where user is the username you use. And the remove action is done to remove the folder when the HD is removed.

  3. The script that is run as the user. The script checks whether the windows vm is running  and if yes uses the sharedfolder virtual box command to attach the folder to the vm. It is saved under /home/user/bin/windows-attach.sh
    #!/bin/sh
    
    PATH=/bin:/usr/bin
    
    
    case "$1" in
        start)
    	vboxmanage list runningvms | grep 'windows-vm' > /dev/null
    	if [ $? -eq 0 ]
    	then 
    	    vboxmanage sharedfolder add windows-vm --name "external-win" --hostpath /media/external-win --transient --automount
    	fi
    	;;
        stop)
    	vboxmanage list runningvms | grep 'windows-vm' > /dev/null
    	if [ $? -eq 0 ]
    	then
    	    vboxmanage showvminfo windows-vm | grep '/media/external-win' > /dev/null
    	    if [ $? -eq 0 ]
    	    then
    		vboxmanage sharedfolder remove windows-vm --name "external-win" --transient
    	    fi
    	fi
    	;;
        *)
    	echo "Usage: $0 {start|stop}" >&2
    	exit 3
    	;;
    esac
    
    

This way in the windows vm when I plug the HD, I can get at NETWORK \\VBOXSRV\external-win the vfat partition. The automount feature doesn’t work as I would wish together with the the transient option, but perhaps having a script on windows to monitor the existence of this directory and provide the automatic mapping, could possibly even solve this situation.

For being on the safe side, after following the advice of two friends, I decided to use full encryption on the HD of my laptop. Since this is an SSD, and I’m a bit worried for the use, and also I want to have more storage, I also opted for an external 1TB HD. In order to be on the safe side I also decided to break the external HD to two partitions, one encrypted with ext4 for linux use, and more critical data, and one with vfat, for portability reasons, and less critical data (Monty pythons rips go to first partition 😉 ).

Since in such cases I have the manual mounting etc. I decided to make the process in such a way, that the when the HD is inserted, I will be automatically mounted to a proper locations, and ready to use. In order to achieve that I used LUKS with a key file. The process I used is the following.

  1. Create the two partitions on the HD. Both of them are primary partitions. I used gparted for this, although fdisk could be yalso sufficient. The HD is on /dev/sdb, and I created /dev/sdb1 as unallocated space and /dev/sdb2 as vfat partition.
  2. Create the LUKS encrypted volume.
    mkdir -p /etc/keys
    head -c 256 /dev/randon > /etc/keys/externalhd
    cryptsetup open --type luks /dev/sdb1 externalhd --key-file /etc/keys/externalhd
    mkfs -t ext4 /dev/mapper/externalhd
    cryptsetup close --type luks externalhd
    
  3. Using blkid I got the UUID of the LUKS partition on the HD and added the corresponding line to /etc/crypttab
    externalhd UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /etc/keys/externalhd luks,noauto,noearly,quiet

    with this it is easy to have the disk decrypted by running cryptodisks_start externalhd

  4. From blkid I use the UUID of the ext4 partition inside to add to /etc/fstab
    #for the external HD
    UUID="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyy"    /media/external        ext4    rw,noauto,nodev,nosuid,errors=remount-ro 0 0

    therefore mount /media/external works like a charm

  5. The last part was to have the automount functionality. For this purpose I used udev to execute the commands when the external HD was attached. The first step is to get the information needed from udev to recognize the HD. The commands was
    udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

    after some poking to see what was the best combination, I created the following /etc/udev/rules.d/10-externalhd.rules

    #external HD
    KERNEL=="sd?1", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{idVendor}=="lllll", ATTRS{idProduct}=="mmmm", ATTRS{serial}=="kkkkklllllmmmmm", RUN+="/usr/sbin/cryptdisks_start externalhd", RUN+="/bin/mount /media/external"

Now after unplugging and plugging back the HD and waiting a few seconds, I have it automount on /media/external and ready to use. Perhaps it is not the best solution, but it is something that seems to work. Some thoughts on different options

  • I could use LVM on top of LUKS (as on the normal installation) and also have a vfat partition encrypted. But at the momend I didn’t bother much
  • I should backup the LUKS superblock (this is done easilty with luksHeaderBackup)
  • I should also add a key, and not rely only on the key file, So that I can mount the external HD to another machines if needed, or if my laptop SSD fails. This is easily done with luksAddKey

 

Linux T440s lid script

April 11, 2014

I wouldn’t like to start talking about the sorry state about the Linux Power Management in laptops, because the whole situation is at least disappointing.  (Having digged the situation only a little bit, power management is done by systemd-logind, acpid, and pm-utils, and the way all these interact if you add laptop-mode is not clear at all).  I use my new T440s either as is, or as “desktop” replacement using external monitor, keyboard and mouse. In the second case when I “docked” and connected the peripherals, I didn’t want by closing the lid to activate screensaver, or suspending the system, on the other hand, whenever I was using the laptop undocked, when I closed the lid I wanted to be put in sleep mode. After having fiddled a little bit with the configuration I thought that the best way was to create the following script which I put in /etc/acpi/local/lid.sh.pre

#!/bin/sh

# This script affects the way lid behaves. The logic is described
# If the laptop is connected to an external display 
#   If we have a display in the active displays that is not the built in
#       unset everything (do nothing)
# else
#	don't touch anything

#getting the outputs
d=/tmp/.X11-unix
for x in $d/X*; do
    displaynum=${x#$d/X}
    getXuser;
    if [ x$XAUTHORITY != x ]; then
       export DISPLAY=:$displaynum
       connectedOutputs=$(su $XUSER -s /bin/sh -c "xrandr" | grep " connected" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/")
       activeOutput=$(su $XUSER -s /bin/sh -c "xrandr" | grep -e " connected [^(]" | sed -e "s/\([A-Z0-9]\+\) connected.*/\1/") 
       connected=$(echo $connectedOutputs | wc -w)
    fi
done

#if we have one display do nothing
if [ $connected -gt 1 ]
then
	for display in $activeOutput
	do
		if [ x$display != x$XRANDR_OUTPUT ] 
		then
			LID_SLEEP=""
			LOCK_SCREEN=""
		fi
	done
fi

This scipt is called by /etc/acpi/lid.sh which in turn is called when an lid event is received which is defined in /etc/acpi/events/lidbtn

I just wanted to create an ssh key that can be used only for port forwarding and the user couldn’t login to the machine.

I think as a first attempt i managed to do that, just by putting the following options to the public part of the key and then adding it to .ssh/authorized_keys. The 2 options are: command=””,no-pty

Port forward seems to work ok, and no matter which command i try to execute nothing happens. 🙂

At work I had to set up as fast as possible a server to be acting as a backup for some of our main servers.

So this post is about setting up a “poor mans” backup server using FTP.

  1. Grab your favourite OpenBSD distro
  2. add the ftp user and group account:
    backup:*:1000:1000:Ftp Backup Account:/backup:/sbin/nologin
  3. add the account to /etc/ftpchroot
  4. Add the new class for setting the file creation mask for this account:
    backup:\
    :umask=0777:\
    :tc=default:
  5. add the login class to /etc/master.passwd  (with vipw) for the account
  6. create the $HOME directory for the user
    mkdir /backup
    chown backup:backup /backup
  7. create the different directories for the backup
    mkdir /backup/machine1
    mkdir /backup/machine2
    chown -R backup:backup /backup
    chmod -R 300 /backup
  8. Apply the following patch to ftpd :

    diff -Naur /usr/src/libexec/ftpd/ftpcmd.y ./ftpd/ftpcmd.y
    --- /usr/src/libexec/ftpd/ftpcmd.y      Thu Nov  5 16:43:15 2009
    +++ ./ftpd/ftpcmd.y     Tue Nov 10 16:50:04 2009
    @@ -82,6 +82,7 @@
    extern int portcheck;
    extern union sockunion his_addr;
    extern int umaskchange;
    +extern  int no_dele;

    off_t  restart_point;

    @@ -394,10 +395,16 @@
    }
    | DELE check_login SP pathname CRLF
    {
    –                       if ($2 && $4 != NULL)
    –                               delete($4);
    –                       if ($4 != NULL)
    –                               free($4);
    +                        if (no_dele) {
    +                                reply(550,
    +                                    “No permission to delete files”);

    +                        }
    +                        else {
    +                                if ($2 && $4 != NULL)
    +                                        delete($4);
    +                                if ($4 != NULL)
    +                                        free($4);
    +                        }
    }
    | RNTO check_login SP pathname CRLF
    {
    diff -Naur /usr/src/libexec/ftpd/ftpd.c ./ftpd/ftpd.c
    — /usr/src/libexec/ftpd/ftpd.c        Thu Nov  5 16:43:16 2009
    +++ ./ftpd/ftpd.c       Tue Nov 10 16:51:13 2009
    @@ -154,6 +154,7 @@
    #endif
    mode_t defumask = CMASK;               /* default umask value */
    int    umaskchange = 1;                /* allow user to change umask value. */
    +int     no_dele = 0 ;          /* disallow ftp delete */
    char   tmpline[7];
    char   hostname[MAXHOSTNAMELEN];
    char   remotehost[MAXHOSTNAMELEN];
    @@ -252,13 +253,13 @@
    return (guest ? path+1 : path);
    }

    -char *argstr = “AdDhnlMSt:T:u:UvP46”;
    +char *argstr = “AdDhnlMSt:T:u:UvP46p”;

    static void
    usage(void)
    {
    syslog(LOG_ERR,
    –           “usage: ftpd [-46ADdlMnPSU] [-T maxtimeout] [-t timeout] [-u mask]”);
    +           “usage: ftpd [-46ADdlMnPSUp] [-T maxtimeout] [-t timeout] [-u mask]”);
    exit(2);
    }

    @@ -371,7 +372,9 @@
    case ‘6’:
    family = AF_INET6;
    break;

    +                case ‘p’:
    +                        no_dele = 1;
    +                        break;
    default:
    usage();
    break;

  9. start ftpd in inetd.conf with the new option:
    ftp             stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -USnp -u 0777

I put the permission of all folders as d-wx—— so that the user can create the necessary files but not being able to list the files that already exist. FTP is not an encrypted protocol, and even if all the tranfers are done in the local network I have the paranoia that someone might sniff the username/password. Being unable to list the files just gives a smaller surface of attacks. All the files created have mode 000 , so that after the file creation the file cannot be tampered. Finaly the purpose of the patch is to prevent someone from sniffing the password and logging in to the backup server and removing all the backup files (not much for a backup solution, is it then?? 😉 ).

After setting up the “backup server”, i installed scripts to the servers in order to push there their backup data.

Not the best solution, but having this ready in < 1 hour, was really ok 🙂

The famous quote for errors :

«At the source of every error which is blamed on the computer, you will find at least two human errors, including the error of blaming it on the computer

has been adapted by a friend for the recent fires and the reaction of the press officer you blamed the forest:

«At the source of every fire which is blamed on the forest, you will find at least two human errors, including the error of blaming it on the forest.

.

Credits to stef.