LVM: Physical Volume entfernen

Manchmal merkt man, dass man eine Disk „zu viel“ in der VG hat und diese anderweitig verwenden möchte.

Mittels pvmove kann man die Daten von einer Disk (physical volume) auf andere in der gleichen volume group (VG) verschieben, danach kann man mittels vgreduce die Disk aus der VG entfernen und schliesslich mit pvremove das physical volume komplett entfernen.

Das ganze sieht so aus:

pvmove /dev/sdX
vgreduce <volume_group> /dev/sdX
pvremove /dev/sdX

Achtung: Möchte man danach die Festplatte im laufenden Betrieb „physisch“ aus dem System entfernen, muss man vorher ebenfalls die System-Referenzen entfernen!

Gewaltsamer Reset

In gewissen Situation muss man ein system mit einem hängenden Prozess neu starten, weiss aber, dass es mit dem normalen "reboot" Kommando beim herunterfahren hängen bleiben wird. Dies passiert z.B. besonders häufig bei Filesystem-Prozessen, die vom Kernel ausgeführt werden und sich somit nicht "killen" lassen, wie copy, rsync, nfs, usw.

Somit hilft dann nur noch der "Hard Reset", bei dem man jedoch physischen Zugang zum Server haben muss.

Hat man diesen gerade nicht gibt es noch eine andere Möglichkeit, das System sofort neu zu starten, ohne durch den Prozess des "herunterfahrens" zu gehen: Über das in den Linux-Kernel integrierte sysrq-Interface.

Dies schaltet man zuerst mittels:

echo s > /proc/sysrq-trigger

an und löst dann den "brutalen" reset über:

echo b > /proc/sysrq-trigger

aus.

Quellen:

c’t: [http://www.heise.de/ct/hotline/Gewaltsamer-Reset-unter-Linux-321064.html|Gewaltsamer Reset unter Linux]

Gebräuchliche OpenSSL Befehle

Allgmeine OpenSSL Befehle

Diese Kommandos dienen zum erstellen von CSRs, Zetifikaten, PrivateKeys und anderen verschiedenen Dingen.

PrivateKey erstellen

openssl genrsa -out example.com.key 4096

Zertifikat erstellen

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

CSR erstellen

openssl req -out CSR.csr -key privateKey.key -new

Siehe dazu auch: SSL CSR erstellen für weitere Optionen, wie z.B: ein CSR für ein SAN Zertifikat.

Zertifikat aus CSR erstellen

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

Neuer PrivateKey aus altem erstellen

openssl rsa -in privateKey.pem -out newPrivateKey.pem

Neuer CSR inklusive key erstellen

openssl req -new -newkey rsa:4096 -nodes -keyout www.example.com.key -out www.example.com.csr -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"

Neues selbst signiertes Zertifikat inklusive key erstellen

openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout www.example.com.key -out www.example.com.crt

Überprüfen mit OpenSSL

Zertifikate, CSRs oder PrivateKeys überpüfen:

Certificate Request (CSR) prüfen

openssl req -text -noout -verify -in CSR.csr

PrivateKey prüfen

openssl rsa -in privateKey.key -check

Zertifikat anschauen

openssl x509 -in certificate.crt -text -noout

Einzelne Felder aus dem Zertifikat ausgeben

openssl x509 -enddate -noout -in certificate.crt
openssl x509 -subject -noout -in certificate.crt

PKCs12 file prüfen

openssl pkcs12 -info -in keyStore.p12

Debuggen mit OpenSSL

Falls man einen Fehler bekommt wie: „private doesn’t match the certificate“ oder einem installierten Zertifikat wird nicht vertraut, dann kann man das mit diesem Kommandos herausfinden.

Prüfen ob ein Zetifikat (.crt) zu einem Schlüssel (.key) passt

openssl x509 -noout -modulus -in certificate.crt | openssl md5; openssl rsa -noout -modulus -in privateKey.key | openssl md5; openssl req -noout -modulus -in CSR.csr | openssl md5

(alle md5-summen müssen gleich sein)

Mit der Website verbinden und Zertifikat sehen

openssl s_client -connect www.paypal.com:443

Hinweis: Bei der Verwendung von name based virtualhosts mittels SNI muss zusätzlich noch der Parameter -servername angefügt werden:

openssl s_client -servername www.paypal.com -connect www.paypal.com:443

Konvertieren mit OpenSSL

Mit den folgenden Kommandos kann man Zertifikate und Schlüssel in andere Format konvertieren um diese mit spezifischen Server- und Software- typen kompatibel zu machen.
z.B. eine normale PEM Datei, welche mit apache funktionieren würde in eine PFX (PKCS#12) Datei umwandeln und mit Tomcat oder IIS zu benutzen.

DER nach PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

PEM nach DER

openssl x509 -outform der -in certificate.pem -out certificate.der

PKCS12/PFX (.p12/.pfx) nach PEM

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

(You can add -nocerts to only output the private key or add -nokeys to only output the certificates)

PEM nach PKCS12/PFX (.p12/.pfx)

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

Quelle: SSLShopper: The Most Common OpenSSL Commands

CA erstellen und mit dieser ein Zertifikat erstellen

Mit den nachfolgenden Befehlen kann man schnell eine CA erstellen udn damit ein Zertifikat signieren:

# Key erstellen
openssl genrsa -out ca.key 2048
# Root-CA Zertifikat mit diesem key erstellen
openssl req -x509 -new -nodes -key ca.key -sha256 -days 1024 -out ca.crt

## Zertifikat für domain: "example.org" erstellen
# Key für cert erstellen:
openssl genrsa -out example.org.key 2048
# CSR mit diesem key erstellen
openssl req -new -key example.org.key -out example.org.csr
# Zertifikat erstellen und mit der Root-CA signieren:
openssl x509 -req -in example.org.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out example.org.crt -days 500 -sha256

Festplatten im laufenden Betrieb entfernen („hot-remove“)

Will man unter Linux eine Disk „hot removen“, also im laufenden Betrieb herausziehen, muss man danach auch die Referenzen auf das Device entfernen.

Macht man dies nicht und „reisst die Disk einfach heraus“, erhält man solche unschönen Fehler im messages log, bzw. mit dmesg:

end_request: I/O error, dev sdd, sector 209715192
sd 0:0:3:0: SCSI error: return code = 0x00010000
end_request: I/O error, dev sdd, sector 0
sd 0:0:3:0: SCSI error: return code = 0x00010000
end_request: I/O error, dev sdd, sector 0

oder im LVM:

[root@server ~]# vgs
  /dev/sdd: read failed after 0 of 4096 at 0: Input/output error
  VG     #PV #LV #SN Attr   VSize   VFree
  [...]

Um die Festplatte im laufenden Betrieb richtig entfernen zu können, muss man nebst dem obligatorischen korrektem unmounten / aus der VG removen / pvremove / usw. folgendes tun um die System-Referenz auf das Device entfernen:

echo 1 > /sys/block/<DEVICE>/device/delete

Wobei <DEVICE> hier mit dem Device-Namen ersetzt werden muss, in unserem Fall z.b. „sdd“.

Man kann diese Prozedur im übrigen auch machen, wenn man die Festplatte schon heraus gezogen hat, um diese Meldungen verschwinden zu lassen. (:wink:)

Quellen

Mehrere Linux Konsolenfenster mit screen

Auch in einem Linux Terminal kann man mehrere "Fenster" haben – Und das praktische dabei ist: Diese laufen automatisch weiter, wenn man sich aus der aktuellen SSH Session ausloggt! (:wink:)

Möglich wird dies mit dem Programm "screen", einem sogenannten "Terminal-multiplexer".

Hinweis
screen gilt mittlerweile als veraltet und ausserdem ist die Entwicklung tot.
Als bessere alternative wird tmux angesehen, welches jedoch sehr ähnlich funktioniert und die Bedienung von dieser Seite abgeleitet werden kann.

Zum Benutzen gibt man in der Linux Session einfach "screen" ein.

Hier kann man dann ganz normal Programme laufen lassen. Will man sich nun aus dieser screen-session ausloggen, drückt man CTRL+A und gibt dann: "d" (für dettach) ein. Und schon ist man wieder in der normalen Linux shell, wo man sich nun aus- und nach dem einloggen das laufende Programm einfach mit "screen -r" (re-attach) zurückholen kann.

Die Bedienung von screen erfolgt im allgemeinen immer mittels: [[CTRL]+a, gefolgt von einem Buchstaben als Befehl; also ähnlich wie ESC beim vi.

Die folgenden Befehle sind in einer screen session sehr nützlich:

  • [[CTRL]+a c

[c]reate, erzeugt ein neues screen Fenster.

  • [[CTRL]+a n

[n]ext, springt zum nächsten screen Fenster.

  • [[CTRL]+a p

[p]revious, springt zum vorherigen screen Fenster

  • [[CTRL]+a #

Das # steht für eine Nummer, mit der man direkt zum entsprechenden Terminal springen kann. Das erste Fenster startet ab 0, welches also mittels CTRL+a 0 erreicht werden kann.

  • [[CTRL]+a A

Damit kann man dem Fesnter einen Namen geben

  • [[CTRL]+a "

Eine Übersicht aller screen Fenster anzeigen

  • [[CTRL]+a K

[K]ill, schliesst das screen Fenster und beendet die darin laufenden Programme.

  • [[CTRL]+a S

[S]plit, erzeugt einen horizontalen splitscreen (im neuen screen muss noch mit [CTRL]+a c ein neues Fenster erzeugt werden)

  • [[CTRL]+a |

Wie oben, aber mit einem horizontalem splitscreen

  • [[CTRL]+a [[TAB]

Wechselt zwischen den splitscreens

  • [[CTRL]+a X

Schliesst den aktuellen splitscreen

  • [[CTRL]+a Q

Schliesst alle splitscreens

Quellen

linux screen terminal
Screen auf wiki.archlinux.de

Mit vi ganze Textblöcke bearbeiten

Immer wieder steht man vor dem Problem mit dem VI schnell mal einen ganzen Codeblock auskommentieren zu müssen. Mit dem Blockmodus von VI geht das auch ganz einfach:

In die Anfangszeile wechseln und CTRL+V drücken, dies aktiviert den Blockmodus (im Status erscheint: – VISUAL BLOCK –)

Jetzt den Cursor bis zur gewünschten Zeile nach unten (Cursortaste oder j) verschieben, der Block dazwischen wird dadurch ausgewählt

Mit shift+i (großes I) in den Eingabemodus wechseln und das gewünschte Kommentarzeichen (#, // ) eingeben.

Mit ESC zurück in den Befehlsmodus, VI hat jetzt an den Anfang jeder Zeile das gewünschte Zeichen eingefügt.

Sollen die Zeilen wieder einkommentiert werden muss der Block zuerst wie vorher wieder markiert werden. Bei mehr als einem Zeichen werden die weiteren mit der Cursortaste oder l markiert. Zum löschen x drücken.

Dies funktioniert übrigens auch mit Einrückungen.

Suchen und Ersetzen in Variablen

In einem anderen KB-Eintrag ging es um das suchen & ersetzen von strings in Dateien. Dies geht jedoch auch in Variablen:

Will man Beispielsweise in der folgenden variable:

VAR1=“Ich fahre Velo“

Den Text „Velo“ mit „Auto“ ersetzen geht dies wie folgt:

VAR2=${VAR1//Velo/Auto}

Quellen

unix.com: search & replace in variable

Suchen und Ersetzen in mehreren Dateien

Manchmal will man in mehreren Datei ein „Suchen & Ersetzten machen.
Dies geht mit folgendem sed Konstrukt ganz einfach:

sed -e 's/search/replace/g' -i *.txt

Die Option bedeuten:
-e Führe den folgenden code (expression) aus
-i editiere das file

Tip: Ersetzten von Strings mit slash (/)
Falls man einen String mit slash (z.B. einen Pfad) ersetzten will, kann man % als alternatives Trennungszeichen verwenden. Z.B.
sed -e ’s%/alter/pfad%/neuer/pfad%g‘ -i *.txt

Will man in einem Verzeichnis und allen Unterverzeichnissen in allen Dateien einen String ersetzen, so kann man noch find miteinbeziehen:

find ./ -type f -exec sed -i 's/search/replace/g' {} \;

Quelle: http://www.liamdelahunty.com/tips/linux_search_and_replace_multiple_files.php

DSH auf CentOS installieren

[http://www.netfort.gr.jp/~dancer/software/dsh.html.en|DSH] (Dancer’s shell) ist ein exzellenter weg um Shell Kommandos auf verschiedenen Linux-Systemen gleichzeitig abzusetzen.
Bevor es jedoch los geht braucht es unter CentOS ein wenig "Handarbeit".

Zuerst muss man compiler, make, usw. installieren, dann erst [http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz|libdshconfig] kompilieren und dann [http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz|dsh] selbst.

Zum Schluss muss man noch einen neuen library pfad hinzufügen:

yum install gcc make cpp gcc-c++ wget
 
wget <a href="http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz" target="blank">http://www.netfort.gr.jp/~dancer/software/downloads/libdshconfig-0.20.9.tar.gz</a>
wget <a href="http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz" target="blank">http://www.netfort.gr.jp/~dancer/software/downloads/dsh-0.25.9.tar.gz</a>
 
tar -xvzf libdshconfig-0.20.9.tar.gz
cd libdshconfig-0.20.9
./configure
make install
 
tar -xvzf dsh-0.25.9.tar.gz
cd ../dsh-0.25.9/
./configure
make install
 
echo "/usr/local/lib/" >> /etc/ld.so.conf.d/dsh.conf
ldconfig -v |grep dsh

stdout und stderr gleichzeitig umleiten

Häufig möchte man bei Script- oder Programm Ausgaben, diese komplett, also stdout und stder in ein file oder /dev/null Umleiten.

Dazu existieren häufig falsche annahmen, wie z.B. "script.sh 2>&1 /dev/null", was falsch ist.

Richtigerweise muss man zuerst die Ausgabe Umleiten und dann stderr auf stdout schreiben lassen, was mit dem & in der Form: "2>&1" geht.

Praktisch sieht das dann so aus:

script.sh > /dev/null 2>&1