Maintenance-Seite aufschalten

Während man eine Webseite upgraded, sollten die Leute nicht darauf zugreifen können und stattdessen eine „Maintenance-Seite“ zu sehen bekommen.

Dies geht ganz einfach mittels einer .htaccess Daezi, welche im web-root der Webseite erstellt wird:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_HOST} !10.1.1.10
RewriteRule $ /maintenance.html [R=302,L]

Dabei ist: 10.1.1.10 mit deiner eigenen IP zu ersetzten, damit du während dem upgrade immer noch auf die Seite Zugreifen kannst. 🙂

Nun erstellt man noch die Maintenance-Seite:

<HTML>
  <HEAD>
    <TITLE>Maintenance</TITLE>
  </HEAD>
  <BODY>
    <H1>Down for Maintenance</H1>
    This page is currently down for maintenance. Please come back later.
  </BODY>
<HTML>

[stextbox id=“tip“ caption=“Zentrale maintenance Seite“]Man kann auch eine Zentrale Maintenance Seite erstellen, falls man z.B. viele VirtualHosts hat und dann auf diese Weiter leiten:

#RewriteEngine on
RewriteCond %{REMOTE_HOST} !10.1.1.10
RewriteRule $ http://maintenance.example.com/maintenance.html [R=302,L]

[/stextbox]

[stextbox id=“tip“ caption=“HTTP Header für Maintenance Seite“]Um die Suchmaschinen-Indexer, wie z.B. google nicht zu verwirren sollte die HTTP Status Seite den HTTP Status Code 503 (Service Unavailable) senden. – Ansonsten denkt die Suchmaschine, dass es sich bei der Maintenance Seite um die aktuelle Seite handelt!

Um dies zu Berwerkstelligen, kann man anstelle der maintenance.html eine maintenance.php Seite erstellen und oben folgenden Code einfügen:

$protocol = "HTTP/1.0";
if ( "HTTP/1.1" == $_SERVER["SERVER_PROTOCOL"] )
  $protocol = "HTTP/1.1";
header( "$protocol 503 Service Unavailable", true, 503 );
header( "Retry-After: 3600" );

Die Angabe Retry-After gibt dabei die Zeit an in der die Seite wieder Verfügbar ist (hier: 3600 Sekunden = 1 Stunde).
[/stextbox]

Quellen

Mehrere Zeilen in Datei „grep’en“

Manachmal möchte man in eienr Datei nicht nur nach einer Zeile "grep’en", sondern nach mehreren.

Dies geht einfach mit awk:

awk '/abc/,/xyz/' datei

Weitere Bespiele finden sich auf: [http://stackoverflow.com/questions/2686147/how-to-find-patterns-across-multiple-lines-using-grep|How to find patterns across multiple lines using grep?]

NFS debuggen

Um NFS-Probleme zu debuggen ist das tool: rpcdebug sehr nützlich.

Auf dem Server wird es aktiviert mittels ausführen von:

rpcdebug -m nfsd -s proc

Zum Deaktivieren:

rpcdebug -m nfsd -c

Auf dem Client wird es aktiviert mittels ausführen von:

rpcdebug -m nfs -s proc

Zum Deaktivieren:

rpcdebug -m nfs -c

Die debug log-messages werden in die syslog facility kern.debug geschrieben.

Quelle: [https://www.serverstack.com/blog/2012/11/21/debugging-nfs-file-access-on-server-and-client-side/|Debugging NFS File Access on Server and Client Side]

mysql: Incorrect key file for table ‚/tmp/#sql_[…]

mysql bringt im log die Meldung:

[ERROR] /usr/libexec/mysqld: Incorrect key file for table '/tmp/#sql_[...]

Diese Fehlermeldung ist etwas verwirrend, da temporäre Tabellen sicher nicht repariert werden müssen.

Stattdessen heisst diese Meldung einfach, dass das /tmp Filesystem voll ist und mysql seine temporären Tabellen nicht mehr speichern kann.

Abhilfe schafft ein mysql Restart und ggf. ein vergrössern des tmp Filesystems.

Quelle: mysqlperformancetuning.com: [http://www.mysqlperformancetuning.com/a-fix-for-incorrect-key-file-for-table-mysql|A fix for "Incorrect key file for table ‚/tmp/#sql_xxxx_x.MYI’" in MySQL]

Oracle Client installieren

Falls man von Linux aus auf Oracle-Datenbanken connecten muss (z.B. via dem nagios-plugin check_oracle_health), ist der oracleclient vonnöten, sowie entsprechend gesetzte Umgebungsvariablen.

Um dies zu erreichen ist wie folgt vorzugehen:

Diese beiden files:

  • oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm
  • oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm

downloaden und auf das Zielsystem unter: /usr/local/src/ kopieren.

Dann installieren (zuvor muss noch libaio installiert werden):

yum install libaio
cd /usr/local/src/
rpm -ihv oracle-instantclient11.2-{basic,sqlplus}-*.rpm

Nun die Datei: /etc/profile.d/oracle.sh (alternativ auch .bash_profile) erstellen:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export TNS_ADMIN=$ORACLE_HOME
export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
 
PATH=$PATH:$ORACLE_HOME/bin
export PATH

[stextbox id=“note“ caption=“Hinweis“]Will man die shell variablen von nagios/icinga nutzen, reicht es unter Umständen nicht, diese einfach ins .bash_profile des nagios/icinga users zu kopieren. Man muss sie dann im .bash_profile von root rein tun, oder alternativ in /etc/profile, bzw. /etc/profile.d/[/stextbox]

Für den Zugriff via Oracle Internet Directory (OID)

Nun die Datei /usr/lib/oracle/11.2/client64/sqlnet.ora ertsellen:

NAMES.DIRECTORY_PATH= (LDAP)
TRACE_LEVEL_CLIENT = OFF
names.default_domain = world

Und die Datei /usr/lib/oracle/11.2/client64/ldap.ora:

DIRECTORY_SERVERS= (OID:3060:3131)
DEFAULT_ADMIN_CONTEXT = ""
DIRECTORY_SERVER_TYPE = OID

Ggf., müssen diese zwei files noch World-Readable gemacht werden:

chmod -v 644 /usr/lib/oracle/11.2/client64/*.ora

Windows Firewall: Lokale subnets erlauben

Wenn man verschiedene Netzwerke (z.B. per VPN) zusammen geschlossen hat, kann es sein, dass die Windows firewall diese nicht als lokale (freundliche) Netzte sieht und alles blockt.

Möchte man mit einer simplen Regel, z.B. alles von einem anderen subnet, oder einer VPN-IP zulassen sind folgende Schritte nötig:

START -> Systemsteuerung -> Windows Firewall -> Erweiterte Einstellungen
In der linken spalte klickt man nun auf: "Eingehende Regel" und wählt in der rechten Spalte: "Neue Regel".
Dann geht man auf: Benutzerdefiniert -> WEITER (Alle Programme) -> WEITER (Protokolltyp: Alle)
Oben lässt man: "Beliebige IP-Adressen"
Unten wählt man: "Diese IP-Adressen" und klickt auf: HINZUFÜGEN und gibt die IP’s oder Netze an.
Nun auf: WEITER ("Verbindung zulassen")
Hier lässt/setzt man das Häkchen bei: "Domäne" und "Privat": bei "Öffentlich" kann es ggf. deaktiviert werden.
Nun nochmals auf: WEITER, einen Namen eingeben und: FERTIG STELLEN.

Weiterführende Ressourcen

bugzilla: Welche CentOS/RHEL Perl-Module braucht es?

Bugzilla braucht viele perl-module um zu laufen.

Wenn man diese lieber über yum anstatt über CPAN installieren möchte sind folgende nötig:

yum install --enablerepo=rpmforge-extras --disablerepo=base mod_perl mod_perl-devel perl-Apache-SizeLimit perl-Authen-SASL perl-CGI perl-Chart perl-Class-Inspector perl-Daemon-Generic perl-DateTime perl-DateTime-TimeZone perl-DBD-mysql perl-DBI perl-Digest-SHA perl-Email-MIME perl-Email-MIME-Attachment-Stripper perl-Email-Reply perl-Email-Send perl-Encode-Detect perl-File-MimeInfo perl-GD perl-GDGraph perl-GDTextUtil perl-HTML-FormatText-WithLinks perl-HTML-Parser perl-HTML-Scrubber perl-IO-stringy perl-JSON perl-JSON-RPC perl-JSON-XS perl-LDAP perl-libwww-perl perl-List-MoreUtils perl-Math-Random perl-MIME-tools perl-Net-SMTP-SSL perl-PatchReader perl-RadiusPerl perl-SOAP-Lite perl-Template-GD perl-Template-Toolkit perl-Test-Taint perl-TheSchwartz perl-TimeDate perl-URI perl-XML-Twig perl-YAML

Um alle dependencies auflösen zu können ist das rpmforge repository (und ggf. sogar das rpmforge extras repo) zu installieren/aktivieren.

Allerdings sind einige bei neueren Bugzilla-Versionen zu alt und müssen über CPAN installiert werden.

Die perl-module welche (Stand CentOS 6) unbedingt per CPAN installiert werden müssen sind:

perl-Date-Format perl-Email-MIME perl-List-MoreUtils perl-Math-Random-ISAAC

Weitere Info: [https://wiki.mozilla.org/Bugzilla:Prerequisites|Bugzilla:Prerequisites]

vSphere CLI: http_proxy not set / ftp_proxy not set

Wenn man das vSphere CLI installieren möchte, bricht die Installation mit folgender Meldung ab:

http_proxy not set. please set environment variable 'http_proxy' e.g. export
http_proxy=<a href="http://myproxy.mydomain.com:0000" target="blank">http://myproxy.mydomain.com:0000</a> .
 
ftp_proxy not set. please set environment variable 'ftp_proxy' e.g. export
ftp_proxy=<a href="http://myproxy.mydomain.com:0000" target="blank">http://myproxy.mydomain.com:0000</a> .

Um dieses Problem zu lösen, muss man das vmware-install.pl script "patchen".

Suche nach folendem Abschnitt:

if ( !( $ftpproxy && $httpproxy)) {
  uninstall_file($gInstallerMainDB);
  exit 1;
}
require CPAN;

Und kommentiere die Zeilen: "uninstall_file", so wie das "exit 1" aus:

if ( !( $ftpproxy && $httpproxy)) {
  <b>#uninstall_file($gInstallerMainDB);</b>
  <b>#exit 1;</b>
 }
require CPAN;

Nun sollte die Installation klappen.