Yum Version Lock
Manchmal kommt es vor dass man verhindern will das automatisch Pakete upgedatet werden.
zB macht es manchmal Sinn das automatische Update des check-mk-agent auf Centos 7 zu verhindern wenn man das epel Repository eingebunden hat.
Dies erreicht man einfach mit dem YUM Plugin versionlock
yum install yum-plugin-versionlock
yum versionlock check-mk-agent
Das kann man dann noch relativ einfach nachprüfen indem man in das lockfile schaut.
cat /etc/yum/pluginconf.d/versionlock.list
# Added locks on Fri Feb 10 13:50:57 2017
0:check-mk-agent-1.2.6p12-1.*
Danach macht ein yum update kein automatisches Update des check-mk-agent mehr.
Netzwerk trace nach prozess id
wenn man zB ein bestimmtes Email netzwerkseitig debuggen möchte, ist es auf einem Mailserver mit sehr viel Traffic oft sehr schwierig da das abhören des Port 25 sehr viel anderen Traffic der nicht relevant ist ebenfalls aufzeichnet.
Besser ist es da, den Netzwerktraffic des expliziten Prozesses mitzuschneiden. Der Output ist leider kein pcap kompatibles Format, aber für den kurzen Check reicht es allemal.
Hier wurde zB.: nachgesehen welche Spamlists der sendmail verwendet und ob diese auch schnell antworten. Hinter dass -p gehört dann natürlich die entsprechende Prozess-ID
strace -p 3636 -f -e trace=network -s 10000
send(8, "\331\314\1\0\0\1\0\0\0\0\0\0\3icb\2at\0\0\1\0\1"..., 24, MSG_NOSIGNAL) = 24
recvfrom(8, "\331\314\205\200\0\1\0\1\0\2\0\2\3icb\2at\0\0\1\0\1\300\f\0\1\0\1\0\1Q\200\0\4\303\346\250X\300\ f\0\2\0\1\0\1Q\200\0\21\7goliath\3icb\2co\300\20\300\f\0\2\0\1\0\1Q\200\0\7\4puck\300socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 8
connect(8, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("195.230.xx.xx")}, 28) = 0
send(8, "jB\1\0\0\1\0\0\0\0\0\0\00231\003160\003230\003195\2ix\5dnsbl\6manitu\3net\0\0\1\0\1"..., 52, MSG_NOS IGNAL) = 52
recvfrom(8, "jB\201\203\0\1\0\0\0\1\0\0\00231\003160\003230\003195\2ix\5dnsbl\6manitu\3net\0\0\1\0\1\300\33\0 \6\0\1\0\0\0connect(8, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("195.230.xx.xx")}, 28) = 0
send(8, "\377\375\1\0\0\1\0\0\0\0\0\0\00231\003160\003230\003195\3zen\10spamhaus\3org\0\0\1\0\1"..., 49, MSG_ NOSIGNAL) = 49
recvfrom(8, "\377\375\201\203\0\1\0\0\0\1\0\0\00231\003160\003230\003195\3zen\10spamhaus\3org\0\0\1\0\1\300\3 3\0\6\0\1\0\0\0\226\0004\4need\2to\4know\4only\0\nhostmaster\300\37S\243M\204\0\0\16\20\0\0\2X\0\6\227\200\0\ 0\0\226"..., 1024, 0, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("195.230.xx.xx")}, [16]) = 113
Centos 6 add disk space with LVM on Server without reboot
Überarbeitet Variante des Artikels für CentOS6!
Des öfteren kommt es vor, dass man bei einem virtuellen Server eine Partition vergrößern muss. Dank Virtualisierung und LVM2 ist das kein Problem.
Als Erstes erstellen wir einen Snapshot der virtuellen Maschine. Sicher ist sicher...
Als Nächstes vergrößern wir die physische Festplatte der virtuellen Maschine. Nach einem Vergößern der "physischen" Festplatte einer virtuellen Maschine (zB Vmware) kann es vorkommen dass der Linux Server immernoch die alte Blockgröße kennt. So erscheint die gerade vergrößerte Festplatte immer noch als kleine Platte. Nun kann man warten bis das Linux System das selbst erkennt, den Server rebooten oder dem Linux-Kernel einen kleinen Tip geben ;)
Mit dem Befehl:
echo 1 > /sys/class/scsi_device/
kann ein Neuscan des SCSI devices veranlasst werden. Danach sollte die Festplatte die neue größe haben.
Als nächstes sollte man die entsprechen Paritition unmounten. (Dies kann beim vergrößern auch übersprungen werden, ist aber nicht 100% Risiko frei)
umount /var/tmp/
Nun legt man am besten eine neue Partition mit cfdisk an. Diese sollte wieder vom Typ "Linux LVM 8e" sein. Danach muss die Partition Table neu eingelesen werden, da dies CentOS6 per default nicht mehr macht. Mit dem Befehl:
partx -a /dev/sda
kann man diesen Vorgang händisch anstoßen.
Nun müssen wir die neue Partition dem LVM zur Verfügung stellen.
pvcreate /dev/sda5
Jetzt müssen wir noch die gewünschte Volume Group um die hinzugefügte Partition vergrößern.
vgextend vg_webc0101 /dev/sda5
Danach kann das lvm Volume bequem vergrößert werden. In unsrem Falle auf die neue größe von 10Gb. Das richtige logical Volume findet man übrigens ganz einfach mittels df -h heraus. Mit dem Schalter -r resizen wir auch gleich das filesystem mit.
lvextend -r -l+100%FREE /dev/vg_webc0101/lv_root
Extending logical volume lv_root to 12.54 GiB
Logical volume lv_root successfully resized
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/mapper/vg_webc0101-lv_root is mounted on /; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/mapper/vg_webc0101-lv_root to 3286016 (4k) blocks.
The filesystem on /dev/mapper/vg_webc0101-lv_root is now 3286016 blocks long.
Danach einfach noch die vergrößerte Partition wieder mounten.
mount /var/tmp/
Nachdem sich versichert hat dass alles funktioniert sollte auch der virtuelle Maschinen Snapshot wieder entfernt werden!
Virtueller Linux Maschine eine Festplatte hinzufügen
Hier kurz ein paar Tips wie man einer virtuellen Linux Maschine eine neue Festplatte hinzufügt.
- fügt ihr die Festplatte in eurer Virtualisierungsplattform euer Wahl der virtuellen Maschine hinzu
- muss man nun einen rescan des scsi Bus initaliesieren damit die neue Platte erkannt wird. Ansonsten müsste man die Maschine neu starten, was man natürlich gerne vermeiden will
echo "- - -" > /sys/class/scsi_host/host#/scan
danach kann man mittels
fdisk -l
nachsehen ob die neue Festplatte erkannt wurde. Nachdem die Festplatte nun vom System erkannt wird, kann Sie ganz normal mittels fdisk, cfdisk, etc. partitioniert werden. Zb eine große Partition vom Typ Linux.
fdisk /dev/sdb
Nach dem partitionieren muss man die neue Partition nur noch formatieren und mounten.
mkfs.ext4 /dev/sdb1
mount /dev/sdb1 /mnt
Und schon können wir auf die neue Disk zugreifen. Virtuelle Disken eignen sich übrigens auch hervorragend als "USB-Stick Ersatz" beim kopieren von Daten zwischen virtuellen Maschinen ohne Netzwerkverbindung!
Postfix Mails aus der queue löschen
Wenn man beim postfix gezielt Mails aus der queue löschen möchte kann man das mit diesem Befehl tun, wobei searchstring durch den string ersetzt werden sollte nachdem man suchen möchte. zB yahoo.com, etc.
find /var/spool/postfix/deferred/ -type f -exec grep -l 'searchstring' '{}' \; | xargs -n1 basename | xargs -n1 postsuper -d
Debug php mit strace und mod_fcgid
Speziell bei timeout Problemen kann es vorkommen dass der php Prozess einfach nach 30 sec. austimed und bei der Webseite ein HTTP ERROR 500 ausgegeben wird. Jetzt ist es oft schwierig den Fehler zu erkennen man ja den Programmcode nicht kennt.
Die Fehlermeldung dazu im Apache Log sieht oft wie folgt aus:
[info] mod_fcgid: process /etc/apache2/phpconf/xxxxx/php-fcgi-starter(12813) exit(communication error), terminated by calling exit(), return code: 0
www.webseite.at.at 195.230.xxx.xxx - - [16/Aug/2012:11:38:36 +0200] "GET / HTTP/1.1" 500 534 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1"
Ein nützliches tool ist hierbei strace, da es alle Systemaufrufe aufzeichnet die der php Prozess ausführt. Hierbei erkennt man zB wenn ein file nicht gelesen werden kann, oder eine tcp Verbindung steht aber keine connection zustande kommt.
Bei php mittels fcgi hat man aber das Problem dass der php Prozess meist erst gestartet wird mit einer neuen pid und bis man diese weis, ist auch schon der interessante Teil vorbei. Abhilfe schafft hier wenn schon beim starten des php Prozesses den strace mitstarten. Eintragen kann man dies am besten im php-fcgi-starter script.
#!/bin/sh
PHPRC="/etc/apache2/phpconf/xxx/"
export PHPRC
export TMPDIR=/tmp
# Set desired PHP_FCGI_* environment variables.
# Example:
# PHP FastCGI processes exit after 500 requests by default.
PHP_FCGI_MAX_REQUESTS=500
export PHP_FCGI_MAX_REQUESTS
FcgidMaxRequestsPerProcess=500
export FcgidMaxRequestsPerProcess
FcgidProcessLifeTime=600
export FcgidProcessLifeTime
PHP_FCGI_CHILDREN=0
export PHP_FCGI_CHILDREN
#### PHP Prozess mit strace
exec strace -o /tmp/strace.out /opt/php5/php5standard
#exec /opt/php5/php5standard
wie wir schön sehen landet der output nun im /tmp Verzeichnis. So sieht das ganze dann zB aus wenn ein Zugriff auf einen externen Webserver ein timeout verursacht.
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 6
fcntl(6, F_GETFL) = 0x2 (flags O_RDWR)
fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0
connect(6, {sa_family=AF_INET, sin_port=htons(1080), sin_addr=inet_addr("195.202.xxx.xxx")}, 16) = -1 EINPROGRESS (Operation now in progress)
poll([{fd=6, events=POLLIN|POLLOUT|POLLERR|POLLHUP}], 1, 5000) = 1 ([{fd=6, revents=POLLOUT}])
getsockopt(6, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
fcntl(6, F_SETFL, O_RDWR) = 0
sendto(6, "GET 69.171.xxx.xxx/feeds/p"..., 82, MSG_DONTWAIT, NULL, 0) = 82
sendto(6, "Host: 69.171.xxx.xxx\r\n", 21, MSG_DONTWAIT, NULL, 0) = 21
sendto(6, "User-Agent: Mozilla/5.0 (Windows"..., 104, MSG_DONTWAIT, NULL, 0) = 104
sendto(6, "\r\n", 2, MSG_DONTWAIT, NULL, 0) = 2
poll([{fd=6, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 0 (Timeout)
poll([{fd=6, events=POLLIN|POLLPRI|POLLERR|POLLHUP}], 1, 0) = 0 (Timeout)
poll([{fd=6, events=POLLIN|POLLERR|POLLHUP}], 1, 5000) = 0 (Timeout)
close(6) = 0
Nachdem man nun festgestellt hat dass der Zugriff auf 69.171.xxx.xxx anscheinend ein Timeout Problem hat muss man diesen Code Teil nur noch ausfindig machen und fixen ;)
Resize ext3 mit LVM2 / Neuscannen der SCSI Festplatten
Des öfteren kommt es vor, dass man bei einem virtuellen Server eine Partition vergrößern muss. Dank Virtualisierung und LVM2 ist das kein Problem.
Als Erstes erstellen wir einen Snapshot der virtuellen Maschine. Sicher ist sicher...
Als Nächstes vergrößern wir die physische Festplatte der virtuellen Maschine. Nach einem Vergößern der "physischen" Festplatte einer virtuellen Maschine (zB Vmware) kann es vorkommen dass der Linux Server immernoch die alte Blockgröße kennt. So erscheint die gerade vergrößerte Festplatte immer noch als kleine Platte. Nun kann man warten bis das Linux System das selbst erkennt, den Server rebooten oder dem Linux-Kernel einen kleinen Tip geben ;)
Mit dem Befehl:
echo 1 > /sys/class/scsi_device/<device>/device/rescan
kann ein Neuscan des SCSI devices veranlasst werden. Danach sollte die Festplatte die neue größe haben.
Als nächstes sollte man die entsprechen Paritition unmounten. (Dies kann beim vergrößern auch übersprungen werden, ist aber nicht 100% Risiko frei)
umount /var/tmp/
Danach kann das lvm Volume bequem vergrößert werden. In unsrem Falle auf die neue größe von 10Gb. Das richtige logical Volume findet man übrigens ganz einfach mittels df -h heraus.
lvresize -L 10G /dev/mapper/VolGroup00-LogVol05
Extending logical volume LogVol05 to 10.00 GB Logical volume LogVol05 successfully resized
Um ganz sicher zu gehen machen wir vor dem vergrößern des ext Filesystems einen Filesystem Check.
e2fsck -f /dev/mapper/VolGroup00-LogVol05
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information /dev/mapper/VolGroup00-LogVol05: 11/1048576 files (9.1% non-contiguous), 67697/1048576 blocks
Nun kann das Filesystem vergößert werden.
resize2fs /dev/mapper/VolGroup00-LogVol05 10G
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/mapper/VolGroup00-LogVol05 to 2621440 (4k) blocks.
The filesystem on /dev/mapper/VolGroup00-LogVol05 is now 2621440 blocks long.
Danach einfach noch die vergrößerte Partition wieder mounten.
mount /var/tmp/
Nachdem sich versichert hat dass alles funktioniert sollte auch der virtuelle Maschinen Snapshot wieder entfernt werden!