Χιουμοριστικό βίντεο για το τέλος του κόσμου που θα έρθει όταν η java ξαφνικά θα σταματήσει να χρησιμοποιείται!
http://youtu.be/_9oq475Ndu8
Τώρα που αρκετά ύποπτα το truecrypt έχει πάψει να υφίσταται (βλ.http://truecrypt.sourceforge.net/ και οδηγίες εκεί για migrate σε..bitlocker!!) σκέφτηκα κάποιος τρόπος θα υπάρχει για να χρησιμοποιώ τα υπάρχοντα containers που έχω.
Ε λοιπόν, με βασικά εργαλεία του linux, γίνεται η δουλειά:
0) γινόμαστε root ή αποκτάμε τα κατάλληλα priviledges
1) καταρχήν θα κάνουμε attach το container σε μια loopback device
losetup /dev/loop0 /path/to/truecrypt.file
2) ώρα να κάνουμε decrypt το containerdecrypt/open the truecrypt container
cryptsetup --type tcrypt open /dev/loop0 Container
3)δίνουμε το password όταν ζητηθεί. Όπου Container βάζουμε ότι όνομα θέλουμε
4)κάνουμε mount το container σε κάποιον φάκελο που έχουμε φτιάξει
mount /dev/mapper/myContainer /mnt/somefolder
Τώρα τα περιεχόμενα θα πρέπει να είναι εμφανή στο /mnt/somefolder/ ή σε όποιο mountpoint έχουμε επιλέξει!
Για να κάνουμε unmount και γενικώς να κλείσουμε ότι ανοίξαμε:
1) umount /mnt/somefolder
2) cryptsetup --type tcrypt close container
3) losetup -d /dev/loop0
Υπάρχει και μια εφαρμογή η zuluCrypt η οποία απλοποιεί την παραπάνω διαδικασία με ένα frontend που δίνει, αλλά δεν την έχω δοκιμάσει
Gzip compresses by replacing text with pointers to earlier parts of the text. Here’s a visualization of what actually happens when you decompress “The Raven”. It highlights the bits of text that are copied from previously in the poem.
δείτε το AWESOME βιντεάκι που δείχνει πως δουλεύει πάνω σε ένα ποίημα το gzip :D
Original blog post: http://jvns.ca/blog/2013/10/24/day-16-gzip-plus-poetry-equals-awesome/
youtube link: https://www.youtube.com/watch?v=SWBkneyTyPU
Ποιος linuxας δεν έχει ονειρευτεί να κάνει build τον δικό του linux kernel? Ευτυχώς τα πράγματα δεν είναι τόσο δύσκολα όσο παλιότερα και με μερικές εντολές μπορούμε να κάνουμε το όνειρο πραγματικότητα!
χρειαζόμαστε καταρχήν τα παρακάτω
apt-get install libncurses5-dev gcc make git exuberant-ctags
φτιάχνουμε έναν φάκελο στο /usr/src ή όπου θέλουμε και κάνουμε clone το kernel tree κατευθείαν από τον linus
git clone https://github.com/torvalds/linux.git
μπορούμε να δούμε πληροφορίες για τα τελευταία commits και τα περιεχόμενα του tree με τις παρακάτω git εντολές
git tag -l | less
git show
σε περίπτωση που χρειαστεί να ενημερώσουμε το tree, αρκεί να κάνουμε ένα pull ενώ είμαστε στον φάκελο που φτιάξαμε
git pull
με το git log, βλέπουμε τις τελευταίες αλλαγές πχ το τελευταίο commit που έγινε
git log
χρειάζεται τώρα να κάνουμε ένα checkout στην έκδοση του kernel που θέλουμε να ετοιμάσουμε ώστε να μη γίνει compile όλο το tree :)
git checkout -v3.15-rc4
οι επιλογές για το compilation του kernel είναι..1652(!!) οπότε μπορούμε να αντιγράψουμε το υπάρχον working configuration από το σύστημά μας. Καταρχήν εάν είναι ρυθμισμένος ο kernel να κάνει output στο proc το configuration, εύκολα μπορούμε να το πάρουμε κάνοντας:
zcat /proc/config.gz > .config
αν τώρα αυτό δεν υπάρχει, μπορούμε πάντα να το πάρουμε από το /boot/
cp /boot/config-`uname -r` .config
το uname -r το χρησιμοποιούμε για να δούμε την έκδοση kernel που τρέχουμε και το όνομα του config αρχείου είναι απαραίτητα το
.config
σε περίπτωση που θέλουμε να αλλάξουμε ρυθμίσεις όπως πχ να προσθέσουμε μια custom string στο όνομα του kernel, πατάμε nconfig και εξερευνούμε τις ρυθμίσεις
make nconfig
για να γίνει το compilation αρκεί ένα απλό make. Αν τώρα έχουμε πολυπύρηνο επεξεργαστή, μπορούμε να αφιερώσουμε παραπάνω πυρήνες με το -jX όπου Χ o αριθμός πυρήνων. Αν έχουμε 4-πύρηνο επεξεργαστή μπορούμε να βάλουμε οποιονδήποτε αριθμό μεταξύ 2 και 5 (ναι είναι +1 το maximum). Φυσικά αν ταυτόχρονα έχουμε σχέδια όπως να σερφάρουμε για περάσει η ώρα, βάζουμε μικρότερο αριθμό από τον διαθέσιμο.
make -jX
αφού το compilation τελειώσει και το οποίο θα πάρει κάποια ώρα οπότε φτιάξτε κανένα καφέ, φάτε τίποτα κ.ο.κ, ήρθε η στιγμή να κάνουμε στο σύστημα install τα modules του kernel στο /lib/modules/.
Ευτυχώς είναι πολύ εύκολο:
make modules_install
και μετά κάνουμε install τον kernel που περιλαμβάνει αντιγραφή του στο /boot/ αντιγραφή του config, update τον grub και πάει λέγοντας. Μπορείτε να το κάνετε manual όλο αυτό αλλά καλύτερα να πατήσετε:
make install
θα δείτε διάφορα όπως:
sh /media/shared/linux/kernel/linus/linux/arch/x86/boot/install.sh 3.15.0-rc4gdimi-2bab43e2528f arch/x86/boot/bzImage \ System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.15.0-rc4gdimi-2bab43e2528f /boot/vmlinuz-3.15.0-rc4gdimi-2bab43e2528f
run-parts: executing /etc/kernel/postinst.d/dkms 3.15.0-rc4gdimi-2bab43e2528f /boot/vmlinuz-3.15.0-rc4gdimi-2bab43e2528f
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.15.0-rc4gdimi-2bab43e2528f /boot/vmlinuz-3.15.0-rc4gdimi-2bab43e2528f
update-initramfs: Generating /boot/initrd.img-3.15.0-rc4gdimi-2bab43e2528f
κλπ κλπ
Είμαστε έτοιμοι, κάνουμε reboot και παρακολουθούμε χαροπά τον kernel μας να φορτώνει κατά την εκκίνηση :D
Πάμε τώρα να εγκαταστήσουμε το snmp σε έναν centos server, ώστε με κάποιο cacti πχ να κάνουμε monitoring εκ του μακρώθεν...
Αρχίζουμε με τα βασικά, δηλαδή να εγκαταστήσουμε τα απαραίτητα πακέτα στο σύστημα:
yum install net-snmp net-snmp-utils
αφού μπούν τα πακέτα και κάνα δυο εξαρτήσεις, πάμε να βάλουμε τον snmp daemon να ξεκινά με την κάθε εκκίνηση του συστήματος:
chkconfig snmpd on
τώρα στα ενδιαφέροντα πράγματα, το configuration. Χωρίς πολλά πολλά αυτό είναι ένα minimal configuration:
rwuser noauth
rouser noauth
rocommunity mycommunity 8.8.8.8
syslocation "datacenter"
proc init 1 1
proc httpd 10 1
disk /
load 12 12 12
Όπως λοιπόν είναι προφανές:
- δεν έχουμε authentication
- βάλαμε μια community read-only η οποία είναι συγκεκριμένη ip και της δώσαμε το όνομα mycommunity
- και καλά το location είναι το "datacenter", προφανώς μπορεί να έχει κάποιο όνομα με ..νόημα!
- τσεκάρουμε την init process ώστε να ξέρουμε αν τρέχει ο server
- τσεκάρουμε την process του web server και βάζουμε όρια να τρέχουν 10 το πολύ και μία το λιγότερο processes
- τσεκάρουμε το μέγεθος του root partition, προφανώς μπορούμε να προσθέσουμε και άλλα partions/δισκους/arrays σε ανάλογες directives
- και τέλος τσεκάρουμε το load με 1minute, 5minutes, 15minutes max averages
μετά από αυτά, κάνουμε restart τον snmpd και βλέπουμε αν όλα παίζουν καλά από το remote cacti μας
προφανώς πρέπει να έχουμε ανοίξει την 161 udp port για να παίξει το οτιδήποτε!
Λοιπόν, φτάνει κάποια στιμγή η ώρα που θέλουμε να δούμε τι δεν πάει καλά με τα 1241234 plugins που έχουμε βάλει και κάπου σπάει το wordpress που έχουμε φτιάξει ή ίσως για να κάνουμε debug κάποιο δικό μας plugin.
Εκτός από τα κλασσικά logs του apache (ή όποιου http server), υπάρχει ένα πολύ χρήσιμο plugin, το debug bar!To εν λόγω plugin βάζει μια μπάρα με διάφορα στοιχεία όπως php debug errors, memory usage, cache κλπ κλπ. Αν θέλουμε να δούμε και περισσότερα πράγματα υπάρχουν αρκετά plugins του..plugin όπως το Debug Bar Actions and Filters Addon που προσθέτει δύο επιλογές για να βλέπουμε τι actions/filters κλήθηκαν στην σελίδα που είμαστε και φυσικά προϋποθέτει την ύπαρξη του debug bar που προείπα.
Το κατεβάζουμε και κάνουμε install με τον κλασσικό τρόπο και φροντίζουμε στο wp-config.php να έχουμε τα
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
ώστε να ενεργοποιήσουμε το debug του wordpress για να βλέπουμε τα php warnings/errors, να τα κρατά σε ένα log (wp-content/debug.log) και να μην τα δείχνει ώστε να μην βλέπουμε ένα τεράστιο κατεβατό αλλά να τα κοιτάμε από το debug bar.
Happy debuggin' !
Λοιπόν..μόλις βάλαμε το ωραίο μας theme και διαπιστώνουμε πως έχει κάνει register ένα menu το οποίο δεν είναι πουθενά στο admin panel και φυσικά δεν υπάρχει καμία page 'Home'..πριν πάθουμε εγκεφαλικό, ας πούμε λίγο πως ένα theme δημιουργεί ένα menu από το πουθενά.
Κάπου λοιπόν στον φάκελο του εκάστοτε theme έχει κάποιο αρχείο header.php ή κάπως έτσι.
Μέσα στο αρχείο θα βρείτε ένα κομμάτι κώδικα σαν τον παρακάτω
wp_nav_menu( array(
'theme_location' => 'header-menu',
'container' => false,
'menu_class' => 'menu horizontal-menu header-menu',
'menu_id' => 'header-menu',
'items_wrap' => '%3$s') );
Ο παραπάνω κώδικας χρησιμοποιεί μια function του wordpress framework ώστε να πει πως ένα μενού, το header-menu, έχει τα παρακάτω χαρακτηριστικά που περιγράφει.
Το ερώτημα είναι πως ακριβώς και το σημαντικότερο, που ορίζει το theme πως θέλει το μενού και ποια στοιχεία έχει;
Ο κώδικας που ψάχνουμε είναι κάτι σαν το παρακάτω:
register_nav_menus( array(
'header-menu' => __( 'Header Menu', 'decode' ),
'sidebar-menu' => __( 'Sidebar Menu', 'decode' ),
'footer-menu' => __( 'Footer Menu', 'decode' )
) );
Το παραπάνω είναι πιθανό να το βρείτε σε κάποιο αρχείο functions.php και όπως βλέπουμε λέει στο wordpress να αναγνωρίζει όχι ένα, αλλά τρία μενού.
Και πάλι όμως δεν έχουμε ιδέα τι γίνεται με τα στοιχεία του μενού...
Δυστυχώς κάπου τώρα θα πρέπει να υπάρχει κάτι σαν το παρακάτω:
function _page_menu_args( $args ) {
$args['show_home'] = true;
return $args;
}
Όπου το βρείτε λοιπόν, αρκεί να αλλάξετε το "true" σε ότι θέλετε πχ Αρχική, Σπιτάκι οτιδήποτε και θα αλλάξει και στο menu που βλέπετε!
Ξαφνικά και ενώ πήγαιναν όλα καλά, το cpanel το οποίο συνδέεται με το mysql server μέσω ενός socket file, πέταξε το μήνυμα
cpanel Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
Μετά τον αρχικό πανικό, διαπίστωσα πως τα site στον server έπαιζαν κανονικά, o mysql server ήταν επάνω χωρίς προβλήματα..άρα..σε κάποιο update του cpanel κάτι άλλαξε..
Τέλος πάντων, η λύση είναι στο /tmp να γίνει symlink ένα mysql.sock στο /var/lib/mysql/mysql.sock . Το ωραίο είναι πως στο /tmp υπήρχε ένα mysql.sock αρχείο το οποίο όμως δεν ήταν ούτε socket, ούτε symlink στο socket. Συνεπώς:
rm /tmp/mysql.sock
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
chown mysql.mysql /tmp/mysql.sock
Λοιπόν σε αρκετά datacenters η ανοιχτή πόρτα για vnc viewing είναι η 5900. Το πρόβλημα είναι πως κάποια προγράμματα σε linux που ανοίγουν χωριστό X session σε κάθε login, υπολογίζουν την πόρτα σε 5900+number_of_display. Οπότε αν θέτε να ανοίξετε ένα vnc για κάποιον πελάτη/χρήστη ή τον εαυτό σας, τζίφος..ένα παραδειγμά τέτοιο είναι το xtightvnc.
Η λύση? Πάμε και κάνουμε edit το αρχείο
/usr/bin/vncserver
Μη φοβάστε, είναι ένα perl script...
Βρίσκουμε τη γραμμή
$vncPort = 5900 + $displayNumber;
και αλλάζουμε το 5900 σε...5899..
Οκ δεν είναι και πολύ intuitive λύση αλλά για έναν χρήστη κάνει τη δουλειά!
Φυσικά μπορούμε να χρησιμοποιήσουμε κάποιον άλλο vnc server πχ x11vnc ο οποίος ακούει στην 5900 αλλά χρησιμοποιεί ένα ήδη υπάρχον X session, περίπτωση που δεν ταιριάζει σε όλα τα σενάρια χρήσης.
install on cpanel centos server svn
mkdir /usr/local/src/subversion
cd /usr/local/src/subversion
wget http://www.apache.org/dist/subversion/subversion-1.7.14.tar.bz2
tar xjvf subversion-1.7.14.tar.bz2
cd subversion-1.7.14
./configure --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apache/bin/apr-1-config --with-apr-util=/home/cpeasyapache/src/httpd-2.2/srclib/apr-util/apu-1-config
Θα δούμε το σφάλμα:
checking for sqlite3.h... no
checking sqlite library version (via pkg-config)... no
An appropriate version of sqlite could not be found. We recommmend
3.7.6.3, but require at least 3.6.18.
Please either install a newer sqlite on this system
or
get the sqlite 3.7.6.3 amalgamation from:
http://www.sqlite.org/sqlite-amalgamation-3.7.6.3.tar.gz
unpack the archive using tar/gunzip and copy sqlite3.c from the
resulting directory to:
/usr/local/src/subversion/subversion-1.7.14/sqlite-amalgamation/sqlite3.c
Οπότε πάμε να βάλουμε το αρχείο που λείπει!
wget http://www.sqlite.org/2013/sqlite-amalgamation-3080200.zip
mkdir sqlite-amalgamation
mv sqlite-amalgamation-3080200.zip sqlite-amalgamation/
cd sqlite-amalgamation/
unzip sqlite-amalgamation-3080200.zip
cp sqlite-amalgamation-3080200/sqlite3.c ../
Ξανά configure το svn και make , make install
./configure --with-apxs=/usr/local/apache/bin/apxs --with-apr=/usr/local/apache/bin/apr-1-config --with-apr-util=/home/cpeasyapache/src/httpd-2.2/srclib/apr-util/apu-1-config
make
make install

