Posts Tagged with linux

posted by qubix on May 15, 2017

Ξαφνικά χωρίς λόγο και αιτία, το webmail δεν δείχνει κανένα email, τα emails κολλάνε στην ουρά και όταν κοιτάς το log βλέπεις ένα κάρο debug info σχεδόν ακατανόητο.

Φυσικά μιλάμε για τον dovecot server που αναλαμβάνει τις συνδέσεις pop/imap.
Το κλειδί εδώ είναι μέσα στο χάος του log να βρούμε το σημείο που αρχίζει το πρόβλημα. Αν λοιπόν δούμε τη γραμμή:

Panic: file mail-index-sync-keywords.c: assertion failed

τα πράγματα ξεκαθαρίζουν γρήγορα. Ο dovecot μας λέει πως δεν μπορεί να κάνει sync το index του mailbox.
Ο λόγος είναι πως το αρχείο dovecot.index είναι corrupted και η λύση απλή:
σβήνουμε το αρχείο dovecot.index και κάνουμε εκ νέου ένα login στο webmail για να ξαναδημιουργηθεί!

posted by qubix on June 22, 2016

αν αναρωτιέστε γιατί δεν μπορείτε να στείλετε email από το νέο vps σας σε webmin, μην ψάχνετε πολύ μακρυά. Στο /var/log/mail.warn αν δείτε την παρακάτω γραμμή:

warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory

o server σας λέει πως δεν μπορεί να βρει τον sasl daemon, συνεπώς δεν μπορεί να κάνει authentication. Ο λόγος είναι πως λείπει το αρχείο

/var/run/saslauthd

το οποίο προσπαθεί να προσπελάσει για να διαπιστώσει αν τρέχει ο δαίμονας.

Στην πραγματικότητα το αρχείο βρίσκεται στο

/var/spool/postfix/var/run/saslauthd

οπότε με ένα symlink θα διορθωθεί το πρόβλημα:

ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd

posted by qubix on April 30, 2016

Αν διαχειρίζεστε cpanel server και λάβετε email σχετικά με κάποιο process upcp που ήδη τρέχει τα πράγματα είναι απλά:

μην πάτε να κλείσετε το process! Εκτός από κάποιες κουφές περιπτώσεις όπου το cpanel update process έχει κολλήσει από την προηγούμενη φορά που έτρεξε, το πιθανότερο είναι απλά να έχει ξεμείνει κάποιο process του crond.

Τρέξτε

ps aux | grep crond

και αν δείτε παραπάνω από ένα process ή σκοτώστε αυτό που νομίζετε πως είναι περιττό ή σκοτώστε τα όλα και τρέξτε ξανά το crond

easy ;)

posted by qubix on March 26, 2016

Ως γνωστόν με διάφορες κάρτες wifi της intel όπως 4859, 5100, 5300 κλπ υπάρχει το θέμα πως ότι linux distro και να βάλεις απλά έχεις ταχύτητα χελώνας.

Ο λόγος είναι πως o iwlwifi driver έχει διάφορα θέματα (για παράδειγμα κακή υποστήριξη n πρωτοκόλλου) και ως εκ τούτου στο thinkpad laptop μου, σε σύγκριση με τα windows, η ταχύτητα είναι 5 φορές μικρότερη περίπου.

Μετά από ψάξιμο, βρήκα κάποια λύση:

sudo rmmod iwlwifi
sudo modprobe iwlwifi 11n_disable=1 bt_coex_active=0 power_save=0 auto_agg=0 swcrypto=1

Τι κάνουν αυτά ρωτάτε?

11n_disable=1 απενεργοποιεί το n support
bt_coex_active=0 απενεργοποιεί το bluetooth
power_save=0 η κάρτα δεν μπαίνει σε powersave mode όταν δε χρησιμοποιείται
auto_agg=0 disable Aggregate MAC Protocol Data Unit (AMPDU)
swcrypto=1 enable software encryption

Δεν είναι απαραίτητο πως χρειάζεστε όλες αυτές τις παραμέτρους, το πρόβλημα μπορεί να λύνεται και μόνο πχ με 11n_disable ή με auto_agg & swcrypto

Υπάρχουν και άλλες παράμετροι με τις οποίες μπορείτε να πειραματιστείτε, περισσότερα στο forums.debian.net/viewtopic.php?f=16&t=121696

Για να κάνετε μόνιμες τις όποιες αλλαγές θέλετε κατά την φόρτωση του driver στην εκκίνηση 1) φτιάχτε, αν δεν υπάρχει, το αρχείο
/etc/modprobe.d/iwlwifi.conf
Γράψτε σε αυτό κάτι σαν το παρακάτω (σύμφωνα με τις ανάγκες σας)
options iwlwifi 11n_disable=1

Στο επόμενο boot, θα ισχύουν οι ρυθμίσεις που θα βάλετε στο αρχείο αυτό

posted by qubix on March 22, 2016

Ίσως γνωρίζετε το vinagre, το default app στο gnome για remote desktop connections. Είναι πολύ απλό στη χρήση, υποστηρίζει rdp,vnc,ssh, spice και είναι αρκετά γρήγορο.

Σε περίπτωση λοιπόν που την πατήσετε σαν εμένα που πήγα να δω ένα κολλημένο vm και δεν μπορούσα να επανέλθω στο desktop μου με τίποτα, το ..μαγικό key για να πάρετε πίσω τον έλεγχο του mouse είναι το.. F10


posted by qubix on December 29, 2015

Σε περίπτωση που χρειαστεί να φτιάξετε ένα iso από κάποιο dvd, στον κόσμο του linux είναι το πιο εύκολο πράγμα

cat /dev/sr0 > /path/to/myisofile.iso

ο λόγος που αυτό είναι δυνατό είναι επειδή το dvdrom σας στο linux είναι ένα block level device στο οποίο έχετε πρόσβαση από το ειδικό αρχείο /dev/sr0

brw-rw----+ 1 root cdrom 11, 0 Dec 29 12:39 /dev/sr0

Αν τώρα χρειαστεί να γράψετε αυτό το iso σε ένα usb disk/stick, και πάλι είναι μια γραμμή όλη κι όλη

dd bs=4 if=/path/to/myisofile.iso of=/dev/sdX

το bs είναι προαιρετικό αλλά καλό είναι να το βάλετε για να πάει λίγο πιο γρήγορα η αντιγραφή

/dev/sdX είναι το usb drive στο οποίο θέλετε να γράψετε το iso

για να βρείτε πιο είναι στο σύστημά σας, μπορείτε να γράψετε fdisk -l και να δείτε γενικά τους δίσκους -οπότε και να βρείτε ποιος είναι το usb drive-

τέλος, για να δείτε την πρόοδο μπορείτε να στείλετε ένα SIGINFO σήμα από ένα δεύτερο terminal

kill -USR1 $(pidof dd)

και στο terminal που τρέχει το dd θα δείτε στατιστικά όπως:

464300033+0 records in
464300033+0 records out
1857200132 bytes (1.9 GB) copied, 1438.94 s, 1.3 MB/s


posted by qubix on December 27, 2015

Πρόσφατα μου ανατέθηκε το task να μεγαλώσω ένα partition σε ένα vm. Μια χαρά λέω, πάμε. Τα είχα υπολογίσει όμως χωρίς τον ξενοδόχο..ο οποίος είχε κάνει την εγκατάσταση ΧΩΡΙΣ lvm οπότε το μόνο που έμενε ήταν το live resize...

Και πως γίνεται αυτό με ρωτάτε??

Ω ναι ... πρέπει να σβηστεί το partition και να ξαναγραφτεί..

αρχίζουμε κοιτάζοντας την υπάρχουσα κατάσταση:

# fdisk /dev/sda

Command (m for help): p

Disk /dev/sda: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders, total 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d11b8

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   100663295    50330624   83  Linux
/dev/sda2       100665342   104855551     2095105    5  Extended
/dev/sda5       100665344   104855551     2095104   82  Linux swap / Solaris

Σβήνουμε τα partitions από το partition table
Command (m for help): d
Partition number (1-5): 1

Command (m for help): d
Partition number (1-5): 2

τσεκάρουμε και όντως έχουν σβηστεί
Command (m for help): p

Disk /dev/sda: 128.8 GB, 128849018880 bytes
255 heads, 63 sectors/track, 15665 cylinders, total 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000d11b8

Device Boot      Start         End      Blocks   Id  System

Φτιάχνουμε το νέο partition
Command (m for help): n
Partition type:
p   primary (0 primary, 0 extended, 4 free)
e   extended
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-251658239, default 2048): 2048
Last sector, +sectors or +size{K,M,G} (2048-251658239, default 251658239): 247468030

αν προσέξετε έχω αφήσει 251658239 - 247468030 = 4190209 sectors, το οποίο χοντρικά είναι 2G

Command (m for help): p
Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   247468030   123732991+  83  Linux

Πάμε τώρα να φτιάξουμε και το extended partition στο οποίο μέσα θα είναι και το ..swap (μη με ρωτάτε γιατί...)
Command (m for help): n
Partition type:
p   primary (1 primary, 0 extended, 3 free)
e   extended
Select (default p): e
Partition number (1-4, default 2): 2
First sector (247468031-251658239, default 247468031):
Using default value 247468031
Last sector, +sectors or +size{K,M,G} (247468031-251658239, default 251658239):
Using default value 251658239

Command (m for help): p

Disk /dev/sda: 128.8 GB, 128849018880 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   247468030   123732991+  83  Linux
/dev/sda2       247468031   251658239     2095104+   5  Extended

Και τέλος φτιάχνουμε και το μελλοντικό swap
Command (m for help): n
Partition type:
p   primary (1 primary, 1 extended, 2 free)
l   logical (numbered from 5)
Select (default p): l
Adding logical partition 5
First sector (247470079-251658239, default 247470079):
Using default value 247470079
Last sector, +sectors or +size{K,M,G} (247470079-251658239, default 251658239):
Using default value 251658239

Ιδού το νέο partition table
Command (m for help): p

Disk /dev/sda: 128.8 GB, 128849018880 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   247468030   123732991+  83  Linux
/dev/sda2       247468031   251658239     2095104+   5  Extended
/dev/sda5       247470079   251658239     2094080+  83  Linux

αλλάζουμε το partition type στο swap
Command (m for help): t
Partition number (1-5): 5
Hex code (type L to list codes): 82
Changed system type of partition 5 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sda: 128.8 GB, 128849018880 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   247468030   123732991+  83  Linux
/dev/sda2       247468031   251658239     2095104+   5  Extended
/dev/sda5       247470079   251658239     2094080+  82  Linux swap / Solaris

βάζουμε το boot flag στο 1ο partition
Command (m for help): a
Partition number (1-5): 1

Command (m for help): p

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048   247468030   123732991+  83  Linux
/dev/sda2       247468031   251658239     2095104+   5  Extended
/dev/sda5       247470079   251658239     2094080+  82  Linux swap / Solaris

και τέλος γράφουμε τις αλλαγές στον δίσκο
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

όπως βλέπετε οι αλλαγές δεν είναι ορατές από τον kernel οπότε πρέπε να δοκιμάσετε είτε με το partprobe, είτε με το kpartx. Αν κανένα από τα δύο δεν πιάσει, απλά κάνετε reboot και μπαίνετε σε single user mode

Αφού καταφέραμε να μεγαλώσουμε το partition, πρέπει τώρα να μεγαλώσουμε και το filesystem μέσα σε αυτό. Ευτυχώς για εμάς αυτό το κάνει το resize2fs

# resize2fs /dev/sda1
resize2fs 1.42.9 (4-Feb-2014)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 8
The filesystem on /dev/sda1 is now 30933247 blocks long.

# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/sda1      ext4      117G   20G   92G  18% /
none           tmpfs     4.0K     0  4.0K   0% /sys/fs/cgroup
udev           devtmpfs  991M   12K  991M   1% /dev
tmpfs          tmpfs     201M  488K  200M   1% /run
none           tmpfs     5.0M     0  5.0M   0% /run/lock
none           tmpfs    1001M     0 1001M   0% /run/shm
none           tmpfs     100M     0  100M   0% /run/user

===================

Για το τέλος αφήσαμε το swap:

# free -m
total       used       free     shared    buffers     cached
Mem:          2001        592       1409          0         62        459
-/+ buffers/cache:         71       1930
Swap:            0          0          0

όντως δεν υπάρχει swap αφού δεν το φτιάξαμε οπότε πάμε να το "φορμάρουμε"

# mkswap /dev/sda5
Setting up swapspace version 1, size = 2094076 KiB
no label, UUID=8d78c3dc-5ed9-42c1-a04f-050b99b8a39d

είμαστε έτοιμοι και χωρίς απώλειες ελπίζω!

posted by qubix on May 18, 2015

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

Προφανώς μία λύση είναι να ..αγοράσουμε περισσότερη RAM. Αυτό όμως δεν είναι πάντα εφικτό. Ίσως το μηχάνημα να μην παίρνει περισσότερη μνήμη, ίσως δεν υπάρχουν άλλα slots για να μπει, ίσως είναι κάποιο εταιρικό laptop το οποίο δεν μπορούμε ή δε θέλουμε να πειράξουμε.

Ήρθε η ώρα λοιπόν για τη δημιουργία ενός swapfile! Τι είναι αυτό καταρχάς. Το swapfile είναι ένα αρχείο το οποίο το λειτουργικό μπορεί να χρησιμοποιήσει ως εικονική μνήμη RAM όταν η κανονική τελειώσει. Αυτό έχει τα υπερ του, όπως για παράδειγμα το οτι μπορούμε να βάλουμε 64Gb αν θέλουμε και να σηκώσουμε 10 Virtual machines με windozzzee, αλλά έχει και το κατά πως οι σκληροί δίσκοι -ακόμη και οι ssd- είναι αργοί σα χελώνες σε σύγκριση με τη RAM και όλα θα σέρνονται.

Εν πάση περιπτώσει η διαδικασία είναι πολύ απλή. Χρειάζεται βέβαια να έχουμε δικαιώματα root ή παραπλήσια ώστε να την πραγματοποιήσουμε.

Πάμε παρακάτω λοιπόν:

1) τσεκάρουμε αν υπάρχει ήδη swap file ή κάποιο swap partition

free -m

αν δεν υπάρχει swap θα πρέπει να δείτε μια γραμμή

Swap: 0 0 0

2) εφόσον δεν υπάρχει κάποιο swap, πάμε να φτιάξουμε ένα με το utility fallocate

fallocate /swapfile -l 2G

έβαλα εγώ τώρα 2G, μπορείτε εσείς να βάλετε όσο θέλετε, κατά προτίμηση όσο και η διαθέσιμη RAM που έχετε, εκτός και έχετε πολύ λίγη οπότε βάλτε επί δύο ή τρία

3) κάνουμε το αρχείο swapfile format ως swap

mkswap /swapfile

4) του δίνουμε τα κατάλληλα δικαιώματα για να μη διαμαρτύρεται το σύστημα πως είναι "insecure"

chmod 600 /swapfile

5) του δίνουμε μία να ξεκινήσει :]

swapon /swapfile

6) τσεκάρουμε πως τώρα υπάρχει swap

swapon (σκέτο χωρίς ορίσματα)

πρέπει να δούμε κάτι σαν το παρακάτω:

NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -1

7) πάμε τώρα στο αρχείο /etc/fstab να το δηλώσουμε ώστε σε κάθε εκκίνηση να γίνεται mount

nano /etc/fstab (ή vim, emacs ότι editor προτιμάτε)

και προσθέτουμε τη γραμμή

/swapfile1 none swap sw 0 0

8) σώζουμε το αρχείο και είμαστε έτοιμοι!

posted by qubix on May 9, 2014

Ποιος 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
 

posted by qubix on March 4, 2014

Λοιπόν σε αρκετά 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, περίπτωση που δεν ταιριάζει σε όλα τα σενάρια χρήσης.

hyperworks