Richtig chrooten unter Linux zur Reparatur

Problem:
Kurze Nachlässigkeit beim Updatevorgang und schon bootet der Rechner nach dem nächsten Neustart nicht mehr.

Lösung:
Es sollte ein Bootmedium zur Hand sein! Schön ist es, wenn man zB die GRML Bootdisk in GRUB eingebunden hat. Das vereinfacht die Prozedur natürlich ein wenig.

Wichtig: für eine 32bit Installation benötigt man auch ein 32bit Medium um die nachfolgenden Aktionen auszuführen. Kurzum: Die Architecture des Bootmediums muss stimmen!

Ich boote also das Rettungssystem ganz normal. Ich melde mich am System an, werde root und prüfe, wie die Partitionen des kaputten Systems lauten.
su root -
fdisk -l

Wenn die benötigten Partitionen bekannt sind, dann mountet man die Dateisysteme nach und nach an einen beliebigen Punkt. Ich finde /mnt passend. =)
# erstelle meinen Zielordner
mkdir -p /mnt/rescue
# auf /dev/sda2 befindet sich /
mount /dev/sda2 /mnt/rescue
# auf /dev/sda4 befindet sich /home
mount /dev/sda4 /mnt/rescue/home
# /dev wird für die Geräte benötigt
mount -o bind /dev /mnt/rescue/dev
# /proc wird auch benötigt
mount -t proc /proc /mnt/rescue/proc

Unterhalb von /mnt/rescue sind nun alle wichtigen Dinge gemountet und nun kann die Reparatur via chroot beginnen.
chroot /mnt/rescue /bin/bash
Ab hier sollten alle Systembefehle wie gewohnt verfügbar sein. Grub kann so zB neu geschrieben werden.
Nach der Reparatur einfach rebooten, sonst muss nichts beachtet werden.

snmpd – Basis Einrichtung unter Linux

Problem:
Ich möchte per SNMP einige Geräte mit Cacti überwachen.

Lösung:
Ich installiere snmpd und konfiguriere spartanisch
apt-get install snmpd
vi /etc/snmp/snmpd.conf

Meine modifizierten Variablen wie folgt:
agentAddress udp:161
view systemonly included .1.3.6.1.2.1
sysLocation Sitting on the Dock of the Bay
sysContact Me

Zuletzt den Dienst nochmal durchstarten, fertig!
/etc/init.d/snmpd restart

Der String .1.3.6.1.2.1 ist in der RFC1213-MIB spezifiziert und wird in einem O’relly Dokument recht gut erklärt wie ich finde.

Dazu gibt es im Debian Zweig noch ein MIB-Downloader Paket welches ich installiere

apt-get install snmp-mibs-downloader
# damit sind die MIBs auch schon runtergeladen

Dann muss in /etc/default/snmpd noch folgende Zeile ergänzt werden:

# Don't load any MIBs by default.
# You might comment this lines once you have the MIBs downloaded.
export MIBS=UCD-SNMP-MIB

Jetzt muss nur noch der snmpd neu gestartet werden.

Nachtrag:
Der Service loggt standardmäßig doch recht viel, das kann in der Datei /etc/default/snmpd abgeändert werden.

DebugLog:
# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'

WarningLog:
# snmpd options (use syslog, close stdin/out/err).
SNMPDOPTS='-LS0-5d -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'

Die -L Option wird auf der Projektseite des PerlModuls näher erklärt
http://net-snmp.sourceforge.net/docs/man/snmpcmd.html

Nachtrag:
Netzwerk-Verbindungsüberwachung, zB für klassisches DSL oder PPTP VPN funktioniert nur solange die Verbindung besteht. Wird diese getrennt, dann kann snmpd nichts mehr liefern – Auch wenn die Verbindung wieder hergestellt ist!!
Abhilfe schafft hier ein einfaches, ausführbares (chmod 755) Script /etc/ppp/ip-up.d/snmpd-restart.sh

#!/bin/sh
/etc/init.d/snmpd restart

Damit wird bei jeder neuen, erstellten Verbindung der SNMP Dienst neu gestartet. Quick & Dirty

OSX – DMG Datei via Terminal installieren

Problem:
Installation von einfachen DMG Dateien über die Kommandozeile via Remote Shell.

Lösung:
Im Prinzip meldet man sich via SSH am OSX Rechner an, lädt die Datei auf den Rechner und führt dann folgende Schritte aus

Man mountet die DMG
hdiutil mount ExampleApp.dmg

wechselt dann in das korrespondierende Verzeichnis in /Volume
cd /Volume/ExampleApp

kopiert die Applikation in den Zielordner
cp -R "Example App Demo.app" /Application

wechselt zurück und unmountet DMG Datei
cd -
hdutil unmount ExampleApp.dmg

Apache Rewrite Cheatsheet

Hier eine Auflistung sinniger und unsinniger Weiterleitungsregeln
Zu fehlerfreien Nutzung ist ein Grundwissen über Webserver Statuscodes (nach RFC 2616) nötig. Nachfolgende wichtige sind auf der Seite http://www.debianhelp.co.uk/errorcodes.htm zu finden. Auch auf Wikipedia findet sich eine detailierte Auflistung aller Codes.

Error code categories

Successful Client Requests:
200 OK
201 Created
202 Accepted
203 Non-Authorative Information
204 No Content
205 Reset Content
206 Partial Content

Client Request Redirected:
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
303 See Other
304 Not Modified
305 Use Proxy

Client Request Errors:
400 Bad Request
401 Authorization Required
402 Payment Required (not used yet)
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable (encoding)
407 Proxy Authentication Required
408 Request Timed Out
409 Conflicting Request
410 Gone
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type

Server Errors:
500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported

1. Einfache, permanente Weiterleitung (Status 301) an eine andere Adresse (kein DocumentRoot im Vhost notwendig!)

Redirect permanent / https://www.anderedomain.de/

2. URL Umschreibung zur Kanonisierung (SEO)

RewriteCond %{HTTP_HOST} !^www.kommuniziertedomain.de
RewriteRule (.*) http://www.kommuniziertedomain.de%{REQUEST_URI} [R=301,QSA,L]

3. URL immer auf https umschreiben

RewriteCond %{HTTPS} off
RewriteRule (.*)$ https://www.meinedomain.de%{REQUEST_URI} [R=301,QSA,L]

Postgres – Datenbank und User über die Konsole anlegen

Problem:
Ich habe eine Applikation welche eine Postgres Datenbank und zugehörigen User benötigt.

Lösung:
Per ssh auf dem Server anmelden und als root zum user postgres wechseln

ssh root@server
su postgres

Damit kann die Datenbank maintained werden.

Ich verwende dazu die verfügbaren Werkzeuge von PostGres, zuerst sollte der User angelegt werden:

# Anlegen eines Users mit Passwort Abfrage und encrypted Passwortstorage
createuser -E -P neuerusername
# Anlegen einer neuen Datenbank mit Ownerzuweisung an neuerusername
createdb -O neuerusername datenbankname

Und schon kann die neue Datenbank mit dem neuen User genutzt werden.