Categorie archief: Linux

Homebrew MariaDB MySQL server has gone away

Bij het importeren van een grote WordPress database in mijn lokale MariaDB database server liep ik tegen de volgende fout aan:

ERROR 2006 (HY000) at line 40786: MySQL server has gone away

Na wat zoeken op internet kom je al snel berichten tegen dat dit te maken heeft met de ‘max_allowed_packet‘ configuratie instelling.

Na wat zoeken heb ik in mijn gebruikersmap (~) een MySQL configuratie bestand (~/.my.cnf) aangemaakt volgens de MariaDB documentatie.

https://mariadb.com/kb/en/mariadb/documentation/getting-started/configuring-mariadb-with-mycnf/#location-in-linux-unix-mac

Door hier het volgende in te zetten is de ‘max_allowed_packet’ instelling eenvoudig te verhogen.

[mysqld]
max_allowed_packet=1073741824

Vervolgens kan MariaDB database server eenvoudig herstart worden met behulp van het volgende commando:

mysql.server restart

Samba via SSH/terminal

Vanavond moest ik vanaf een externe locatie een Samba share benaderen die alleen via een lokaal netwerk beschikbaar was. Gelukkig had ik wel toegang tot een Debian systeem op dit zelfde netwerk. Na een zoektocht via Google vond ik een eenvoudig manier om de Samba share via het Debian systeem te benaderen:

Via een aantal snelle commando’s kon ik een map op de Samba share kopiëren naar het Debian systeem. Vanuit daar kon ik de map inpakken en eenvoudig downloaden naar mijn eigen werkplek. In het kort waren de volgende commando’s nodig:

ssh remco@debian
smbclient //share -U remco
tarmode
recure
prompt
mget folder\
exit
tar -cvf folder.tar folder/

Erg handige om even snel een map vanaf een lokale Samba share te halen.

Linux /var map opschonen

Onlangs had ik op een test- en ontwikkel server wat problemen met een /var map die vol aan het lopen was. Bij de installatie en configuratie van de server had ik waarschijnlijk de /var map partitie iets te klein ingesteld. Minder handig, maar via de volgende commando’s was er gelukkig vrij snel weer wat ruimte vrij te maken.

df -h

Via de ‘df -h’ commando zijn eenvoudig de verschillende partities en de beschikbare ruimte te raadplagen. Hieruit kon ik opmaken dat het het bestandssysteem gekoppeld aan /var aan het vollopen was.

Bron: http://www.cyberciti.biz/faq/howto-find-out-or-learn-harddisk-size-in-linux-or-unix/

Vervolgens was ik wel benieuwd wat zoveel ruimte in nam binnen de /var map. Via de ‘du‘ commando zijn samenvattingen over het gebruik op te vragen. Via de volgende commando kon ik de 20 grootste bestanden opvragen:

du -a /var | sort -n -r | head -n 20

Bron: http://www.unixmen.com/how-to-find-large-files-and-directories-in-linux/

Update 15 mei 2013: Met volgende commando krijg je alleen bestanden te zien en niet mappen.

find . -type f -exec du -a {} + | sort -n -r | less

Bron: http://unix.stackexchange.com/a/22448

Hieruit bleek dat met name de log bestanden vrij veel ruimte in namen. Het wordt niet geadviseerd om de log bestanden verwijderen. Het is beter om deze periodiek op te schonen en te archiveren. Hiervoor kan ‘logrotate‘ gebruikt worden, deze is handmatig aan te roepen via het volgende commando:

logrotate -vf /etc/logrotate.conf

Bron: http://www.randomsequence.com/articles/running-logrotate.d-manually/

CentOS tijd instellen / synchroniseren

Tijd op een server is erg belangrijk, het is heel vervelend als de tijd van een server onjuist is. Ik had onlangs wel te maken met een Linux machine waarop de tijd verkeerd stond. Dit is gelukkig eenvoudig op te lossen door de tijd te synchroniseren met een NTP server.

Om binnen CentOS te controleren of de tijd goed is ingesteld kun je de volgende commando uitvoeren:

[ ~]# date
Fri Mar 18 21:50:43 CET 2011

Hier staat CET voor de tijdzone “Central European Time”, dit is de tijdzone voor de wintertijd. In de zomertijd zal CEST zijn, wat staat voor “Central European Summer Time. Mocht de tijd bij jou niet correct staan dan kun je hier voor NTP installeren. Dit kun je doen door de volgende commando uit te voeren:

[ ~]# yum install ntp

Als het goed is wordt nu NTP geïnstalleerd of krijg je de melding “Nothing to do” als dit pakket al op je machine staan. Vervolgens kun je het volgende commando uitvoeren om de tijd te synchroniseren:

[ ~]# ntpdate pool.ntp.org

Als je de melding krijgt dat de NTP socket al in gebruik is dan is er waarschijnlijk al een NTP proces (daemon) actief. Deze kun je uitschakelen door het volgende commando uit te voeren:

[ ~]# /etc/init.d/ntpd stop

Als het goed moet je vervolgens wel de ntpdate commando kunnen uitvoeren.

[ ~]# ntpdate pool.ntp.org
18 Mar 22:05:57 ntpdate[24291]: adjust time server 204.62.14.98 offset -0.010934 sec

Vervolgens kun je de NTP deamon weer starten door het volgende commando
uit te voeren:

[ ~]# /etc/init.d/ntpd start

Als ik het goed begrepen heb worden processen binnen CentOS niet automatisch gestart. Als je het NTP proces automatisch wilt laten starten dan dien je het volgende commando uit te voeren:

[ ~]# chkconfig ntpd on

Het kan overigens ook zijn dat de tijdzone niet correct staat ingesteld op je machine. Voor het instellen van de tijdzone moet je een symlink maken naar een zoneinfo bestand. Voor de Nederlandse tijdzone zal dat er zo moeten uitzien:

/etc/localtime -> /usr/share/zoneinfo/Europe/Amsterdam

Je kunt deze symlink aanmaken door het voglende commando uit
te voeren:

[ ~]# ln -sf /usr/share/zoneinfo/Europe/Amsterdam /etc/localtime

OpenSSL fout Twinfield API

Een aantal weken terug wilde ik bij Pronamic wat experimenteren met de Twinfield API. De Twinfield API werkt met behulp van SOAP over een beveiligde HTTP verbinding. Volgens Twinfield zou je op de volgende manier een verbinding moeten kunnen maken:

$soapClient = new SoapClient('https://login.twinfield.com/webservices/session.asmx?wsdl', array('trace' => 1));

Helaas resulteerde het uitvoeren van bovenstaande PHP code in een foutmelding:

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14092073:SSL routines:SSL3_GET_SERVER_HELLO:bad packet length in Twinfield.php on line 8

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0003     651896   2. file_get_contents() Twinfield.php:8

Warning: file_get_contents(): Failed to enable crypto in Twinfield.php on line 8

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0003     651896   2. file_get_contents() Twinfield.php:8

Warning: file_get_contents(https://login.twinfield.com/webservices/session.asmx?wsdl): failed to open stream: operation failed in Twinfield.php on line 8

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0003     651896   2. file_get_contents() Twinfield.php:8

Fatal error: SoapClient::SoapClient(): 'uri' option is required in nonWSDL mode in Twinfield.php on line 13

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0686     653888   2. SoapClient->SoapClient() Twinfield.php:13

Dezelfde code werkte echter wel op een andere server, maar helaas niet op mijn ontwikkel- en test server. Dat was toch wel erg vervelend, daarom ben ik opzoek gegaan naar een oplossing. Ik kwam na een speurtocht al snel anderen tegen met vergelijkbare problemen. Zo rapporteerde ns@centralservices.nl een vergelijkbare fout in PHP’s bug tracking systeem.

Ik kon echter erg lastig een oplossing vinden voor het probleem. Ik las wel op verschillende websites dat het om een probleem in het OpenSSL pakket ging. Op mijn Debian ontwikkel- en test server had ik OpenSSL/0.9.8g geïnstalleerd. Dit is momenteel de stabiele versie van het OpenSSL pakket op het debian platform. Aangezien ik geen concrete oplossing kon vinden voor het probleem heb ik de test versie van OpenSSL geïnstalleerd.

Hiervoor heb ik eerst de volgende regels toegevoegd aan /etc/apt/sources.list.

deb http://ftp.nl.debian.org/debian squeeze main
deb-src http://ftp.nl.debian.org/debian/ squeeze main

Vervolgens heb ik OpenSSL en Apache opnieuw geïnstalleerd met behulp van de volgende commando’s:

# apt-get install openssl

# apt-get install apache

Sindsdien heb ik OpenSSL/0.9.8o draaien op mijn server en is mijn probleem opgelost. Ik kan nu zonder problemen de Twinfield SOAP API aanroepen.