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 November 1, 2015

Είπα να γράψω ένα απλό extension για firefox και αφού εγκατέστησα το node.js και το jpm tool, φτιάχνω το directory στο οποίο θα έβαζα το extension και περιχαρής πατάω jpm init για να φάω χυλόπιτα:
<br/> /usr/bin/env: node: No such file or directory

Well..δεν ήθελε και πολύ μυαλό βασικά, στο debian που δουλεύω εδώ, το πακέτο λέγεται nodejs και μαντέψτε: έτσι λέγεται και το node binary. Δεν υπάρχει λοιπόν node αλλά nodejs και η λύση είναι ένα απλό symlink:
ln -s /usr/bin/nodejs /usr/bin/node

Και ως δια συνδέσμου λοιπόν, λύθηκε το πρόβλημα

posted by qubix on October 31, 2015

Ναι, το joomla 1.5.x είναι αρχαιολογία. Έλα όμως που υπάρχουν ακόμη sites σε αυτό από ανθρώπους που δε θέλουν να τα αναβαθμίσουν, δεν ξέρουν πως ή απλά τα έχουν παρατήσει στο έλεος της μοίρας τους...

Σε ένα τέτοιο site λοιπόν, ξαφνικά αντί για χαρακτήρες, παντού εμφάνισε αγγλικά ερωτηματικά ?????
Τελικά όμως δεν ήταν και τόσο ξαφνικά. Στον server αυτό, για λόγους performance, οι ιδιοκτήτες πήγανε από mysql 5.5 σε mariaDB 10.1 και από τότε και μετά το utf8 πήγε περίπατο στο παλιό αυτό joomla.

Γιατί όμως; Η απάντηση βρέθηκε στο αρχείο:

libraries/joomla/database/database/mysql.php

και συγκεκριμένα στη function hasUTF() στην οποία η γραμμή

return ($verParts[0] == 5 || ($verParts[0] == 4 && $verParts[1] == 1 && (int)$verParts[2] >= 2));

είναι φανερό πως δεν μπορεί να αναγνωρίσει οτιδήποτε μεγαλύτερο του 5.x ως version του όποιου SQL server είναι εν χρήση, και η mariaDB όπως προείπα είναι..10.1..
To ίδιο ακριβώς ισχύει και στο αρχείο:

libraries/joomla/database/database/mysqli.php

Η λύση είναι η αντικατάσταση της εν λόγω γραμμής με την παρακάτω:

return ($verParts[0] >= 5 || ($verParts[0] == 4 && $verParts[1] == 1 && (int)$verParts[2] >= 2));

Τώρα το αγαπημένο σας παλιό site θα παίξει κανονικά :]

posted by qubix on October 24, 2015

Ως γνωστόν το plain FTP θεωρείται και είναι ανασφαλές. Στο πνεύμα αυτό λοιπόν, το filezilla αποφάσισε και καλά έκανε να βάλει default τη σύνδεση με FTP over TLS...

Κάπου εκεί λοιπόν ανακάλυψα πως ο server στον οποίο ήθελα να συνδεθώ, μετά από ένα warning για το tls certificate, όταν έφτανε στην εντολή MLSD για να δείξει τα περιεχόμενα του directory (PWD -> TYPE I -> PASV -> MLSD) πέταξε ένα ωραιότατο timeout..

Προφανώς το πρόβλημα ήταν στην PASV όπου προσπαθούσε να συνάψει σύνδεση σε passive mode(*). Έλα που όμως δεν υπήρχαν πόρτες ανοιχτές για το σκοπό αυτό...

O server αυτός έτρεχε cpanel και pureftpd οπότε ήταν απλά ..θέμα configuration:

1) κάνουμε uncomment τη γραμμή
PassivePortRange 30000 50000

στο αρχείο /etc/pure-ftpd.conf

προφανώς μπορούμε να βάλουμε οποιοδήποτε port range θέλουμε

2) κάνουμε restart τον pureftp daemon

/etc/init.d/pureftpd restart

3) για να κάνουμε τις αλλαγές μόνιμα πρέπει να πειράξουμε το conf του cpanel για τον pureftpd

/var/cpanel/conf/pureftpd/main

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

PassivePortRange: '30000 50000'

4) σιγουρευόμαστε πως οι πόρτες είναι ανοιχτές στο firewall

- αν δεν χρησιμοποιούμε κάποιο plugin (πχ csf)
iptables -t filter -I INPUT -p tcp –dport 30000:50000 -j ACCEPT

- αν χρησιμοποιούμε το csf (ή οποιοδήποτε άλλο plugin) πάμε στο interface του και σετάρουμε από εκεί τις πόρτες

5) δοκιμάζουμε τη νέα μας ασφαλή FTP over TLS σύνδεση :]

Τις παραπάνω εντολές τις τρέχουμε ως root ή ως privileged user


(*) passive ftp mode είναι ο τρόπος σύνδεσης ενός client με τον ftp server κατά τον οποίο ο client συνδέεται ο ίδιος με τον server και στο command channel και στο data channel σε κάποιες τυχαίες unprivileged ports, σε αντίθεση με τον active mοde, στον οποίο ο server συνδέεται με τον client στο data channel, πράγμα το οποίο συνήθως δεν επιτρέπουν τα firewalls και πρόβλημα το οποίο λύνει ο passive τρόπος σύνδεσης.

posted by qubix on October 11, 2015

I tried some days ago to transfer some accounts from a plesk vps to a cpanel one. Having root access to both machines and using cpanel's transfer tool I thought it would be a simple task but upon the first transfer something went wrong..

------------------------------------------------
Starting “TRANSFER” for “Account” “asdasd”.
Copy Destination: /home
Remote server type: “plesk”.
Packaging the account with the command: /scripts/pkgacct.MYSERVERHOST.com asdasd '' --split --compressed --mysql 5.5 --allow-multiple …
Unknown option: compressed
Unknown option: mysql
MySQL error: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) at /tmp/.perl-ppk-Kh2FBV/lib/Cpanel/Foreign/Plesk/DB.pm line 117.
Done
Target “/home” on host “myserver.net” has 412 GB free and requires at least 0 bytes free, which includes space for temporary files.
WARNING: The remote server failed to send the location of the transfer archive.
WARNING: Attempting to guess the location of the remote transfer archive.
Fetching md5sum of “/home/cpmove-asdasd.tar.gz” from the remote server … …
Done
Removing copied archive on remote server. …
Done

Failed: The remote execution of “pkgacct.myserver.net” was not sucessful, or the requested account, “asdasd” was not found on the server: “IP ADDRESS”.
-----------------------------

as we can see, the process stopped because the migration script could not connect to plesks mysql.

trying to find out what happened I realized that I couldn't connect either manually.

In plesk the password is stored in a file: /etc/psa/.psa.shadow
that ".shadow" doesn't look good and indeed tha password in that file is AES encrypted,something like
$AES-128-CBC$xR2nUGJY6HA8q8eGQUT38w==$EiTB+LFuWnRSHWFkqOgtKg==

According to plesk documentation you can see the password with the command:
/usr/local/psa/bin/admin --show-password

Amazingly it worked. What it didn't work is logging into mysql with it...again the same error trying
mysql -uadmin -ptheabovepassword

It turns out that mysql in plesk wants the encrypted version of it not the plaintext.So the correct command would be:
mysql -uadmin -p`cat /etc/psa/.psa.shadow`

well..that was weird :P

Now you can populate the file /root/.my.cnf with the correct credentials so cpanel can connect to plesk mysql and account transfer be completed successfully!

And the contents of .my.cnf file (place them without the lines!)
----------------
[client]
user=admin
password='$AES-128-CBC$xR2nUGJY6HA8q8eGQUT38w==$EiTB+LFuWnRSHWFkqOgtKg=='
----------------
 

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 April 19, 2015

Τι γίνεται όταν ξαφνικά δεν μπορούμε να κάνουμε install καμία εφαρμογή στο android tablet/mobile που έχουμε;

Πριν δοκιμάσουμε τα παρακάτω, ας σιγουρευτούμε πως
1) έχουμε χώρο στη συσκευή
2) έχουμε external storage διαθέσιμο

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

μπορούμε να χρησιμοποιήσουμε κάποιο app οπως πχ το android assistant για να καθαρίσουμε caches και να απεγκαταστήσουμε τυχόν άχρηστες πλέον εφαρμογές. Επίσης μπορούμε να μετακινήσουμε με το app2sd κάποιες εφαρμογές στην κάρτα από την εσωτερική μνήμη της συσκευής

αφού κάνουμε τον καθαρισμό προχωράμε παρακάτω

Καταρχήν δε χρειάζεται να έχουμε rootάρει τη συσκευή, όλα θα γίνουν με το adb

Αν δεν ξέρετε τι είναι αυτό, μην προχωρήσετε άλλο, ψάχτε το πρώτα γιατί θα πρέπει να το έχετε εγκαταστήσει και να βλέπει σωστά τη συσκευή!

Υποθέτουμε λοιπόν πως όλα είναι οκ και πατώντας adb devices στην κονσόλα (είτε linux,είτε windozze) θα δούμε κάτι σαν αυτό:

adb devices List of devices attached 032c1967e89500000000 device

αν δεν έχει αναγνωριστεί η συσκευή δεν μπορούμε να κάνουμε τίποτα. Αν είστε σε windoze θα χρειαστείτε drivers, αν είστε σε linux θα πρέπει να βάλετε κάποια στοιχεία από το lsusb output στο αρχείο ~/.android_usb.ini

anywayz, προχωράμε

γράφουμε τώρα adb shell για να ανοίξουμε μια root κονσόλα στη συσκευή μας

Ως root μπορούμε να κάνουμε πολλά και διάφορα οπότε προσωχή μη τα διαλύστε όλα :]

Για να δούμε που γίνεται εκ του default η εγκατάσταση των εφαρμογών στη συσκευή μας γράφουμε

pm get-install-location

θα επιστρέψει κάποια τιμή που μπορεί να είναι

0 default
1 internal
2 external

αναλόγως με τη συσκευή το 1 μπορεί να είναι και external και το 2 κάποια sdcard. Αυτό συμβαίνει γιατί κάποιες συσκευές έχουν ενσωματωμένη κάποια

αν ήδη είμαστε σε external, δεν μπορούμε να κάνουμε κάτι περισσότερο, το πρόβλημα είναι αλλού...

Αν τώρα δούμε 0 ή 1 και ξέρουμε πως έχουμε και κάποια sdcard memory, μπορούμε να δοκιμάσουμε να αλλάξουμε τη ρύθμιση με:

pm set-install-location 1 (ή 2)

κάνουμε ένα reboot
adb reboot

και δοκιμάζουμε να εγκαταστήσουμε την εφαρμογή που πριν κολλούσε

posted by qubix on February 19, 2015

Πρόσφατα χρειάστηκε να μεταφέρω κάποια mail accounts με αρκετά gbytes μέγεθος και κάποια χιλιάδες mail το καθένα από έναν cpanel server σε έναν ubuntu based zimbra.
Αρχικά πήγα με την "πεπατημένη" οδό, το imapsync αλλά δυστυχώς στο ubuntu έπαψε να υπάρχει στα repos από την έκδοση 11.10 και εγώ είχα μπροστά μου έναν 14.04, οπότε πήγα με το imapcopy, ένα παλαιό utility γραμμένο σε ..pascal το οποίο υπήρχε στα repos μιας που γίνεται crosscompile με τη freepascal

Προφανώς για να γίνει το migration πρέπει να έχουμε δημιουργήσει τα accounts που θέλουμε και στον zimbra server, ίδια με του cpanel

Ενημερωτικά, τα logs που μας ενδιαφέρουν είναι:
/opt/zimbra/log/mailbox.log
/var/log/zimbra.log

όταν και αν κάτι προκύψει μπορούμε να ίσως να βρούμε άκρη κοιτάζοντας τα εν λόγω logs

εγκατάσταση
apt-get install imapcopy

χρηση
πολύ απλά γράφουμε ένα αρχείο το imapcopy.cfg όπου νομίζουμε πχ στο /root/imapcopy/

τα περιεχόμενα έχουν ως εξής:
SourceServer imap.server.tld
SourcePort 143

DestServer imap.server.tld
DestPort 143

# SourceUser SourcePassword DestinationUser DestinationPassword

Copy "user@domain.tld" "Passowrd" "user@domain.tld" "Password"
Copy "user2@domain.tld" "Passowrd" "user2@domain.tld" "Password"

και εκτελούμε από εκεί την εντολή
imapcopy -t

για να τεστάρουμε πως οι συνδέσεις γίνονται κανονικά

σε περίπτωση που έχουμε προβλήματα και βλέπουμε μηνύματα αποτυχίας σύνδεσης χρειάζεται να γνωρίζουμε 2 πράγματα:
1) στον zimbra πρέπει να είναι ενεργοποιημένη η επιλογή "Enable Cleartext Login" για τον server (home->configure->servers->o_server_mas->edit (κλίκ πάνω στον σέρβερ)->IMAP
2) για κάποιο λόγο όταν το password αρχίζει με συγκεκριμένους χαρακτήρες δεν μπορεί να γίνει login οπότε καλύτερα στα passwords στα accounts του zimbra να είναι της μορφής 123456 ή κάτι ανάλογο "ασφαλές" :P

Αν όλα πάνε καλά λοιπόν μπορούμε να προχωρήσουμε στο migration των email. Αλλά πριν το κάνουμε, για να αποφύγουμε μηνύματα του στυλ

BAD maximum literal size exceeded

χρειάζεται να αλλάξουμε τα διάφορα default size restrictions που χρησιμοποιεί το zimbra

1) γινόμαστε zimbra user
su zimbra

2) εκτελούμε τις παρακάτω εντολές και σημειώνουμε κάπου τα default values
zmprov getConfig zimbraFileUploadMaxSize
zmprov getConfig zimbraImapMaxRequestSize
zmprov getConfig zimbraMailContentMaxSize
zmprov getConfig zimbraMtaMaxMessageSize

3) βάζουμε κάποιο μεγάλο limit σε όλα (εδώ είναι 150Μ)
zmprov modifyConfig zimbraFileUploadMaxSize 150000000
zmprov modifyConfig zimbraImapMaxRequestSize 150000000
zmprov modifyConfig zimbraMailContentMaxSize 150000000
zmprov modifyConfig zimbraMtaMaxMessageSize 150000000

4) κάνουμε restart τον postfix και το mailbox
postfix reload
zmmailboxdctl restart

5) βεβαιωνόμαστε πως περάσανε οι νέες τιμές
zmprov getConfig zimbraFileUploadMaxSize
zmprov getConfig zimbraImapMaxRequestSize
zmprov getConfig zimbraMailContentMaxSize
zmprov getConfig zimbraMtaMaxMessageSize
postconf message_size_limit

6) βγαίνουμε από zimbra user και εκτελούμε το imagecopy. Λογικά τώρα η μεταφορά θα γίνει χωρίς απρόοπτα!

posted by qubix on January 10, 2015

Πάμε λοιπόν να εγκαταστήσουμε τον κλειστό driver της AMD για την κάρτα μας. Όλα πάνε καλά μέχρι που στην κονσόλα βλέπουμε το εξής error:

Error! Bad return status for module build on kernel: 3.17-1-amd64 (x86_64)
Consult /var/lib/dkms/fglrx/14.9+ga14.201/build/make.log for more information.

ή κάποιο παρόμοιο ανάλογα με την έκδοση του kernel και τη διανομή που χρησιμοποιούμε

Τι σημαίνει αυτό το error ακριβώς; Για να παίξει ο driver χρειάζεται ένα module που θα φτιαχτεί για τον kernel που χρησιμοποιούμε και που θα φορτώνεται με την εκκίνηση.
Απότι φαίνεται κατά το "χτίσιμο" (build) του module από τον πηγαίο κώδικα, κάποιο λάθος συνέβη το οποίο εμπόδισε το module από το να φτιαχτεί με το πρόγραμμα dkms (dynamic kernel module support) το οποίο καταγράφηκε σε κάποιο αρχείο log.

Αν πάμε όντως να δούμε τι λέει το build log του module, θα δούμε κάποιο προγραμματιστικό λάθος του c compiler (o κώδικας του fglrx module είναι σε C γλώσσα) που λέει πως το struct ‘acpi_device_flags’ has no member named ‘no_hotplug’ στο αρχείο kcl_acpi.c. Δε θα επεκταθούμε στο γιατί συμβαίνει αυτό, είναι ένα γνωστό bug.

Πως το φτιάχνουμε:

1) βρίσκουμε τα sources του module. Στη δική μου περίπτωση είναι στο
/usr/src/fglrx-14.9+ga14.201
μπορείτε να βρείτε το εν λόγω αρχείο είτε με find, είτε με locate.
Στην περίπτωση που βρείτε 2 αρχεία, αυτό που θα χρειαστούμε είναι στον φάκελο /usr/src/...

2) ανοίγουμε το αρχείο kcl_acpi.c (με δικαιώματα root)

3) βρίσκουμε τη γραμμή που λέει:

if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,7)

και βεβαιωνόμαστε πως είναι κάτω από το

static acpi_status KCL_ACPI_Slot_No_Hotplug(KCL_ACPI_DevHandle handle, u32 lvl, void *data, void **rv)
{

4) σβήνουμε το

if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,7)

και βάζουμε στη θέση του το

if LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,7) && LINUX_VERSION_CODE < KERNEL_VERSION(3,17,0)

5) κοιτάμε τις επόμενες 3εις γραμμές κώδικα και προσέχουμε να είναι ίδιες με τις παρακάτω:

struct acpi_device *tdev = NULL;
struct pci_dev *pdev = (struct pci_dev *)data;
int device = 0;

6) σώζουμε το αρχείο

7) κανονικά χρειάζεται πρώτα να κάνουμε dkms add -m module -v ώστε να προστεθεί το module στο kernel tree. Παρόλο όμως που η αρχική μας προσπάθεια ήταν αποτυχημένη -κατά την πρώτη εγκατάσταση-, το module έχει ήδη προστεθεί απλά απέτυχε το build. Εν πάση περιπτώσει, δε χρειάζεται να κάνουμε το βήμα αυτό

8) κάνουμε compile το module

dkms build -m fglrx -v 14.9+ga14.201

(την ακριβή έκδοσή σας θα την βρείτε από το πακέτο του driver, είτε από το /usr/share/fglrx-VERSION/)

Θα πρέπει να δουμε στο τέλος το μήνυμα

DKMS: build completed.

9) κάνουμε εγκατάσταση το module

dkms install -m fglrx -v 14.9+ga14.201

θα πρέπει να δούμε το μήνυμα

DKMS: install completed.

10) τώρα είμαστε έτοιμοι με το ati-config να φτιάξουμε ένα καλό αρχείο για τον x.org (ή το κάνουμε manual αν το'χουμε!)



posted by qubix on January 2, 2015

Εάν έχετε την ατυχία να δείτε το μήνυμα

Command: MLSD
Error: Connection timed out
Error: Failed to retrieve directory listing

σημαίνει πως ο client που χρησιμοποιείτε (πχ filezilla) προσπαθεί να ανοίξει κάποιες πόρτες για να επικοινωνήσει με τον server και δεν τα καταφέρνει.

Η λύση λοιπόν είναι να πούμε στον ftp server να ακούει σε συγκεκριμένο port range για passive connections.

Βήματα:

1) Ανοίγουμε το αρχείο /etc/pure-ftpd.conf
2) Ψάχνουμε για τη γραμμή που γράφει “PassivePortRange 30000 35000″
3) Βγάζουμε το comment "#" και αλλάζουμε τις πόρτες σε αυτές που θέλουμε (πχ 6000 6100)
4) Σώζουμε το αρχείο
5) Κάνουμε restart τον pure ftp server

Αν ακόμη έχετε πρόβλημα, τσεκάρετε μήπως σας κόβει κάποιο firewall

hyperworks