10.02.2017

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.

Kategorie: Linux, CentOS


21.10.2016

Verzeichnisdatum korrigieren

Oft ist es sinnvoll, wenn in Linux Datum/Uhrzeit eines Verzeichnisses mit dem des neuesten Files in diesem Verzeichnis übereinstimmt.

Lösen kann man dies am elegantesten mit der zsh (Z-Shell). Man geht in das Verzeichnis, das aktualisiert werden soll und tippt (in der zsh) folgendes ein:

touch -r *(Dom[1]) .

Wenn alle Unterverzeichnisse rekursiv ebenfalls angepasst werden sollen:

for d (**/*(D/)) touch -r $d/*(D.om[1]) -- $d

Dies muss händisch durchgeführt werden. Soll das immer automatisch gehen, könnte man eine Lösung mit incron basteln. Dies sei dem geneigten Leser als Übung überlassen...

Kategorie: Linux


29.07.2016

Routing mit openconnect-VPN

Unter Linux gibt es openconnect, mit dem z. B. zu einem Cisco AnyConnect-VPN verbunden werden kann. Das Problem ist, dass die gesamte Routingtable verändert wird, und man nur mehr in das VPN kommt. Ein Zugriff auf das "normale" Internet ist nicht mehr möglich.

Abhilfe schafft ein kleines Script, das für die VPN-Verbindung einen eigenen Networknamespace generiert:

#!/bin/bash

IP=`hostname -I | cut -d' ' -f1`

ip netns add myvpn
ip link add veth0 type veth peer name veth1
ip link set veth1 netns myvpn
ip netns exec myvpn ifconfig veth1 192.168.99.1/24 up
ifconfig veth0 192.168.99.2/24 up
ip netns exec myvpn route add default gw 192.168.99.2
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.99.0/24 -j SNAT --to-source $IP
ip netns exec myvpn openconnect -b --no-cert-check -u myvpnuser --passwd-on-stdin https://123.123.123.123 < pw.txt
ip netns exec myvpn sudo -u myunixuser /bin/bash

killall openconnect
iptables -t nat -D POSTROUTING -o eth0 -s 192.168.99.0/24 -j SNAT --to-source $IP
ifconfig veth0 down
ip netns exec myvpn ifconfig veth1 down
ip link delete veth0
ip netns delete myvpn

123.123.123.123 ist dabei die Adresse des VPN-Servers
myvpnuser der Username für das VPN
myunixuser der Username im lokalen Linux-System, mit dem gearbeitet werden soll
Das Skript muss als root aufgerufen werden.

In der Datei pw.txt muss das VPN-Passwort stehen. Alternativ kann man es jedesmal eingeben, wenn man --passwd-on-stdin weglässt.

Nach Aufruf des Skriptes startet eine bash-Shell, in der das VPN aktiv ist. Außerhalb dieser Shell ist das VPN nicht erreichbar, dafür ist das Routing dort unverändert. Es kann also ganz normal auf das Internet zugegriffen werden. Braucht man eine zweite VPN-Shell, ruft man diese Zeile einfach in einer weiteren Shell auf:

ip netns exec myvpn /bin/bash

Jede dieser VPN-Shells kann mit exit beendet werden. Die erste Shell (die vom Skript geöffnet wurde) sollte als letztes beendet werden.

Kategorie: Linux


21.12.2014

Resize vmware HD with ext4

1. Resize virtual disk in VMware
2. delete and recreate partition with fdisk
3. echo 1 > /sys/class/scsi_device/devicename/device/rescan
4. stop all processes that access the partition
5. umount /dev/sdX
6. partprobe /dev/sdX
7. e2fsck -f /dev/sdbX
8. resize2fs /dev/sdbX
9. mount -a
10. start all processes you stopped before



14.09.2014

Openstack: Resize und Migration

Soll eine Instanz auf einen anderen Host wandern, müssen die beiden Hosts aufeinander per SSH zugreifen können. Beim Resize wird die VM in geänderte Größe auf einen anderen Host migriert. Um diesen SSH-Zugriff zu ermöglichen, müssen die public keys der anderen Hosts in der authorized_keys eines jeden Hosts sein.

Um das bei einer größeren Zahl von Hosts nicht unüberschaubar werden zu lassen, empfiehlt es sich, für alle Compute-Hosts den selben Schlüssel zu verwenden. Jeder hat also den selben public und private key und ersteren auch in der authorized_hosts.

# usermod -s /bin/bash nova
# su - nova

# mkdir -p -m 700 .ssh

# cat > config <<EOF
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
EOF

# ssh-keygen -f id_rsa -b 1024 -P ""
# cp /var/lib/nova/.ssh/id_rsa.pub /var/lib/nova/.ssh/authorized_keys

Die Dateien config,id_rsa, id_rsa.pub und authorized_keys dann auf alle compute hosts verteilen!

Kategorie: Linux, Virtualization


21.03.2014

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

Kategorie: Linux, CentOS


03.02.2014

Textdatei ohne Kommentare ausgeben

Manchmal ist es sinnvoll zB eine Konfigurationsdatei ohne Kommentare und Leerzeilen anzusehen. Bei den sehr großen Konfiguration von zB der apache httpd.conf oder der freeradius radiusd.conf fällt es im Normalzustand oft schwer Konfigurationen von zwei Servern zu vergleichen oder sogar automatisch mit diff zu vergleichen.

Ein bisschen egrep und grep helfen uns dabei wirklich nur die Zeilen auszugeben die wirkliche Konfiguration beinhalten.

Ausganskonfiguration:

# Multi-language error messages
#Include /etc/httpd/extra/httpd-multilang-errordoc.conf
# Fancy directory listings
#Include /etc/httpd/extra/httpd-autoindex.conf
# Language settings
#Include /etc/httpd/extra/httpd-languages.conf
# User home directories
#Include /etc/httpd/extra/httpd-userdir.conf
# Real-time info on requests and configuration
Include /etc/httpd/extra/httpd-info.conf
# Virtual hosts
#Include /etc/httpd/extra/httpd-vhosts.conf
# Local access to the Apache HTTP Server Manual
#Include /etc/httpd/extra/httpd-manual.conf
# Distributed authoring and versioning (WebDAV)
#Include /etc/httpd/extra/httpd-dav.conf
# Various default settings
#Include /etc/httpd/extra/httpd-default.conf
# Configure mod_proxy_html to understand HTML4/XHTML1

Include /etc/httpd/extra/proxy-html.conf

# Secure (SSL/TLS) connections
#Include /etc/httpd/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
# starting without SSL on platforms with no /dev/random equivalent
# but a statically compiled-in mod_ssl.
#

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

# Deal with user agents that deliberately violate open standards


BrowserMatch "MSIE 10.0;" bad_DNT



RequestHeader unset DNT env=bad_DNT


Suexec On
Include /etc/httpd/extra/httpd-fcgid.conf
Include /etc/httpd/extra/httpd-mod_security.conf 

Nun können mit einem einfach cat und grep die unnötigen Kommentare und Leerzeilen eliminiert werden.

cat /etc/httpd/httpd.conf | egrep -v "^[^a-z0-9]*#" | grep -v "^$"


Include /etc/httpd/extra/proxy-html.conf


SSLRandomSeed startup builtin
SSLRandomSeed connect builtin


BrowserMatch "MSIE 10.0;" bad_DNT


RequestHeader unset DNT env=bad_DNT

Suexec On
Include /etc/httpd/extra/httpd-fcgid.conf
Include /etc/httpd/extra/httpd-mod_security.conf

Diese "stilisierte Config" kann zB mittels diff von 2 Servern analysiert werden um Unterschiede schnell aufzuzeigen.

Kategorie: Linux


31.01.2014

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//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/

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!

Kategorie: CentOS


12.01.2014

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!

Kategorie: Linux, CentOS


29.10.2013

UTF8-Probleme in mysql-Datenbanken

Beim Import einer Datenbank, die auf einem anderen Server exportiert wurde kann es zu Problemen mit den UTF8-Zeichen kommen.

Besonders ärgerlich ist, wenn die einzelnen Bytes eines UTF8-Zeichens fälschlicherweise beim Export selbst in UTF8 konvertiert wurden. Dann hat man Quargel wie ü statt den Umlauten dort stehen. Da nutzen auch keine Tools wie iconv mehr etwas, weil der Text eigentlich schon in perfektem UTF8 vorliegt. Nur halt mit kryptischen Zeichen statt Umlauten.

Da hilft ein kleines Skript, das das Tool "sed", das auf jedem Linuxsystem vorinstalliert sein sollte, verwendet:

#!/bin/bash

sed -i 's/Ä/Ä/g' $1
sed -i 's/ä/ä/g' $1
sed -i 's/Ö/Ö/g' $1
sed -i 's/ö/ö/g' $1
sed -i 's/Ãœ/Ü/g' $1
sed -i 's/ü/ü/g' $1
sed -i 's/ß/ß/g' $1

 Aufgerufen mit

./scriptname dateiname

kann das mit mysqldump exportierte File korrigiert und mit dem mysql-Befehl wieder importiert werden. Wahlweise können auch andere Sonderzeichen-Ersetzungen im Skript hinzugefügt werden.

Kategorie: Linux


 
Telefon:
E-Mail:
Fax:
Web:

+43 2682 24080
office(at)epb.at
+43 2682 205 7700 9963
zum Kontaktformular