ISPCP – Probleme mit PHP update

Auf einem Kundenserver habe ich ISPCP am laufen und bei jedem PHP Update das Problem dass anschließend das System nicht mehr lief.

Beim letzten Update bin ich der Ursache auf die Spur gekommen – es wurde mit dem Update immer die Pakete „apache2-mpm-prefork“ und „libapache2-mod-php5“ installiert, gleichzeitig der „apache2-mpm-worker“ aber deinstalliert.

Und genau letzteren braucht das im ISPCP genutzte fast-cgi.

Heute war es wieder mal so weit – ein PHP Update, dieses Mal habe ich mich aber vor dem Update darum gekümmert dass das Problem nicht wieder auftritt!

Die Lösung ist eigentlich ganz einfach, ich habe mir in der Datei /var/lib/dpkg/status angeschaut welche Abhängigkeiten auf die beiden oben genannten Pakete bestehen und dort nur bei dem Paket „php5“ eine gefunden.
Das Entfernen vom php5-Paket reicht dann auch schon aus dass das Update ohne Probleme durchläuft und ISPCP weiterhin funktioniert wie es soll.

Kategorien
Linux

Datei auf Veränderung überwachen – Automatische Config für Thunderbird

Die Einstellungen von Thunderbird für eine größere Anzahl von Mitarbeitern vorzunehmen ist etwas mühsam. Jeden Mitarbeiter freie Hand bei den Einstellungen zu lassen ist allerdings bei mittleren bis großen Unternehmen auch nicht wirklich tragbar.

Also musste eine Lösung her – eine Datenbank in der wir die Konfiguration neutralisiert speichern, per Script auslesen, mit den Account Daten je User versorgen um anschließend die prefs.js vom Thunderbird im Verzeichnis des Benutzer ersetzen.

Das Profilverzeichnis von Thunderbird haben wir im Netzwerk auf das Home-Verzeichnis des Benutzers verlegt, es kann also bequem vom Linux Server (Samba) darauf zugegriffen werden.

Der schwierigste Teil war es das PHP Script zu bauen welches die neutralisierte Konfiguration aus der Datenbank liest und anschließend je nach Benutzer entsprechend mit den passenden Einstellungen versieht. Unser Script funktioniert jetzt mit bis zu 6 verschiedenen Mail-Accounts je Benutzer und unterstützt auch die verschiedenen von uns eingesetzen Mail-Server.

Thunderbird muss leider auf die prefs.js schreiben können, sonst funktionieren gewisse Sachen nicht z.B. die Darstellung von unterschiedlichen Schriftarten in den Mails.
Daher konnten wir nicht einfach die prefs.js Datei schreibgeschützt ablegen.

Als Lösung bietet sich an die prefs.js nach jeder Änderung einfach durch das Original aus der Datenbank zu ersetzen, stellt sich nur die Frage wie man mitbekommt dass die Datei verändert wurde!? 🙂

Für den Zweck gibt es auch eine ganz einfach Lösung, unter Ubuntu braucht es nur das zusätzliche Paket inotify-tools und anschließend läuft folgendes Script:

#!/bin/bash

while { X=$(inotifywait -e modify -e close_write -e create /srv/samba/home/*/thunderbird/prefs.js 2>/dev/null); }; do
 USER=$(echo $X|awk -F’/‘ ‚{print $5}‘)
 FILE=$(echo $X|awk -F‘ ‚ ‚{print $1}‘)
 wget -q „http://webserver/build_prefs.php?email=EMAILADRESSE“ -O „$FILE“
done

Und schon wird die Datei bei jeder Veränderung mit den vorgegebenen Einstellungen überschrieben.

Damit das Script permanent läuft braucht es noch eine Config Datei für upstart im Verzeichnis /etc/init/ die kann wie folgt aussehen:

start on stopped rc RUNLEVEL=[2345]
stop on runlevel [!2345]

respawn
exec /usr/local/sbin/watch_prefsjs.sh

Für mich zeigt sich hier wieder mal die Stärke von OpenSource und Linux – wofür man sonst viel Geld ausgeben müsste kann man sich hier schnell und einfach selber basteln.

Kategorien
Linux

ISPCP – fcgid läuft nach PHP Update nicht mehr

Nach einem PHP Update läuft auf einmal beim ISPCP das Login nicht mehr und bei den einzelnen Webseiten gibts diverse Probleme. Etwas Suche zeigt dann dass scheinbar die Prozesse nicht mehr unter fcgid mit dem jeweiligen User laufen sondern mit dem www-data.

An der Konfiguration hat sich ja nichts geändert, also musste das Problem irgendwo beim Update zu suchen sein.

Der Fehler war in dem Fall so einfach dass er schon wieder schwer zu finden war! 🙂

Während des Updates wurde das Paket „apache2-mpm-worker“ durch den „apache2-mpm-prefork“ ausgetauscht und bei eben diesem läuft kein fcgid!

Also einfach wieder das alte Paket installiert und schon rennt wieder alles…

Warum aber das Paket beim Update ausgetauscht wurde ist mir ein Rätsel.

Kategorien
Hardware Linux

Bilder direkt von der Netzwerkkamera auslesen – Digitus DN-16023

Gestern hatten wir die Idee für eine Anwendung direkt von einer Netzwerkkamera Bilder mittels PHP Script serverseitig auszulesen und gleich zu verarbeiten.


Die Digitus DN-16023 haben wir bereits seit längerem im Einsatz und sie funktioniert eigentlich sehr gut, allerdings habe ich im Internet keine Info dazu gefunden wie man’s bewerkstelligen kann dass ein Snapshot direkt von der Kamera gelesen wird.


Meine Support Anfrage bei Digitus hat gefruchtet, ich hab vom Support einen Link auf’s Wiki retour bekommen und dort gibts die Beschreibungen für alle Digitus Kameras.


Bei unserem Modell DN-16023 sieht das wie folgt aus:
http://IP:PORT/snapshot.jpg?account=“admin“&password=“password“

Leichter kann’s ja fast nicht mehr gehen, wir können also unsere Idee einfach und schnell umsetzen und dank der günstigen Digitus Netzwerkkamera ist das Ganze auch noch sehr günstig!

Kategorien
Hardware Linux

SPS S7 von Siemens mit PHP aulesen

Letzten Freitag habe ich noch Erfolg gehabt und die ersten paar Bytes unserer SPS Steuerung (S7-400) mit PHP ausgelesen.

War dann ein wirklich hartes Wochenende – ist echt schlimm wenn man’s kaum erwarten kann und dann darf man erst am Mittwoch weiter machen 🙂
Nur gut dass mir Sibille dabei geholfen hat die Zeit mit Wandern, Radfahren und Schifahren zu überbrücken. Spätherbst ist bei uns echt super, da kann man quasi alles machen!

Gestern und heute habe ich das Ganze dann verfeinert und inzwischen arbeite ich daran alles in vernünftige Funktionen zu gießen, damit künftig mittels include alles da ist was man so braucht.

Vom Ablauf her habe ich’s jetzt so gelöst dass mittels PHP 340 Bytes aus der S7 ausgelesen werden und anschließend zerstückle ich die 340 Bytes in die Datenfelder die ich benötige.

Für mich neu war auch Big Endian und das manuelle zurückrechnen der vier Bytes auf die darin gespeicherte Zahl. Eigentlich ganz einfach, aber bisher hab ich’s noch nie wirklich gebraucht!
Beim Prüfen welches Bit eines Bytes gesetzt ist hab ich dann auch wieder was dazu gelernt, vom Prinzip her war’s mir klar – aber eine einfache Umsetzung für PHP musste ich erst suchen. 🙂

Ich warte noch auf das OK vom Autor des PHP Scripts mit dem ich derzeit arbeite, wenn ich’s hab dann werde ich das ganze auch mal hier posten!
Wer Interesse daran hat kann natürlich auch direkt anfragen…

Kategorien
Linux

Siemens S7 mit PHP aulesen?

Das war ja eigentlich mein erster Gedanke – aber googeln hat absolut kein brauchbares Ergebnis dazu gebracht!

Heute stosse ich nun per Zufall über diesen Post im sps-forum und siehe da, es hat sich doch tatsächlich jemand die Mühe gemacht eine kleine PHP-Class zu schreiben mit der man Daten aus einer S7 auslesen kann. 🙂

Leider kann ich’s noch nicht bei uns austesten, unsere S7 lauscht noch nicht auf Port 102 – da muss wohl unser Steuerungs-Chef ran und das noch aktivieren. Bin gespannt ob und wie das dann funktioniert!

Wenn’s klappt dann spart das doch jede Menge Aufwand und auch Geld ein und libnodave ist ja auch noch als kostenlose Alternative im Rennen.

Mal sehen wer das Rennen macht…

Kategorien
Linux

Postfix/Goldfish Vacation nicht ganz reibungslos

Ich habe vor kurzem bei einem Mailserver mit Postfix Goldfish als Abwesenheits-Tool eingebaut – eigentlich funktioniert es sehr gut, bis auf eine Kleinigkeit:

Trifft man auf einen Absender in der Form:

From: =?ISO-8859-15?Q?Jens_B=FCrger?=
<jens@buerger.de>

Klappt alles wunderbar – aber wenn die Zeile wie folgt aussieht gibts Probleme:

From: jens@buerger.de

Dann wird beim der Vacation-Mail folgender Empfänger daraus konstruiert:

To: „rom:jens“@buerger.d

Also irgendwie scheint sich das Teil da ein wenig zu verwurschteln und nimmt einen Teil von From, ein Stück vom Namen und einen Teil der Domain – aber nicht ganz das Richtige! 🙂

Hab das Ganze mal an die Mailingliste weitergegeben, mal sehen wie gut die betreut ist und wie schnell sich jemand meldet. Ansonsten werd ich mich selbst um einen Patch kümmern müssen…

Anmerkung: Einen Patch habe ich inzwischen geschrieben, wer daran Interesse hat – bitte einfach melden!

Kategorien
Hardware Linux

Postfix Autoresponder/Vacation mit Goldfish

Heute haben wir unseren Mailserver umgestellt, Update auf Ubuntu 10.04 und etwas mehr Platz auf der Platte – 769.707 E-Mails auf über 90 GB an Mails, Tendenz stark steigend 🙂

Im Zuge der Umstellung wollte irgendwie unsere bisherige Vacation/Autoresponde Maillösung mit yaa.pl nicht mehr laufen und auf die Schnelle war auch keine Lösung zu finden…

Daher haben wir kurzerhand eine andere Lösung ausprobiert – Gofdfish – sehr einfach zu installieren und dank PHP ebenso einfach zu erweitern.

Bei der Gelegenheit habe ich gleich noch eine Kleinigkeit mit eingebaut, wer jetzt innerhalb eines definierten Zeitraums mehrere Mails an einen Benutzer schickt, der bekommt nur noch eine Vacation-Nachricht.

Unsere ersten Tests haben mal recht gut funktioniert, ob’s im Echtbetrieb dann auch so gut klappt das wird sich am Montag bzw. in der kommenden Woche zeigen!

Kategorien
Linux

PHP am Microsoft SQL Server Express Edition anhängen

So gestern aus dem Urlaub nach Hause gekommen (wunderschön war’s auf Teneriffa, wenn auch ein wenig durchwachsen vom Wetter her) und schon hat mich die Arbeit wieder…

Damit der heutige Tag nicht ganz in Routine ausartete habe ich mir was frisches gesucht, ein PHP Script soll aus einer SQL Datenbank (Microsoft SQL Server Express Edition 2005 oder so) Werte auslesen und weiterverarbeiten (LDAP).

In der Theorie ist das immer ganz einfach und man liest auch öfters dass es wunderbar klappt, allerdings gibts bei der Express Edition einen kleinen Stolperstein! Der Port zum Verbinden ist nicht wie üblich der 1433 sondern der im „SQL Server Configuration Manager“ unter IPAll eingestellt Dynamische TCP-Port – in meinem Fall 3357.

So lange nicht der korrekte Port verwendet wird klappt natürlich die Verbindung auch nicht – die Fehlermeldung lautet in etwa wie folgt:

Fehler bei der Anmeldung für den Benutzer blabla – (severity 14)

Kategorien
Linux

Videojet 1510 Drucker mit PHP ansteuern

Mal wieder komplettes Neuland für mich, mit PHP Socket-Programmierung hatte ich bisher noch nicht gebraucht – aber einmal ist immer das erste Mal! 🙂

Also hat unsere Qualitätssicherung den VJ1510 angeschafft, damit der Drucker UV-Tinte auf jedes Produkt spritzt und somit die Chargennummer und Datum/Uhrzeit auf dem Produkt vermerkt sind. Mit einer klassischen UV Lampe kann man das ganze dann wunderbar ablesen.

Soweit die Theorie – nur wie steuert man den Drucker am besten an?
Die Produktionsplanung läuft bei uns komplett in PHP ab und funktioniert wunderbar, also liegt es irgendwie nahe dass man das ganze verbindet und den Job von PHP erledigen lässt.

Vom Hersteller habe ich eine Beschreibung erhalten mit den wichtigsten Kommunikations-Befehlen mit derer man den Drucker ansteuern und die Benutzer-Felder mit Werten befüllen kann.
Die Software vom Hersteller kommt für uns nicht in Frage weil sie nur mit Windows läuft.

Der Drucker lauscht auf dem Port 3100 und nimmt dort Befehle entgegen, das Format ist recht einfach

startet ein Kommando und

beendet es. Dazwischen kann man seine Behle senden – ein „E“ liefert z.B. den Status des Druckers zurück „000000“ wäre das Ideal.

Ein wenig Suche im PHP-Manual und schon habe ich das Problem gelöst, der Drucker bekommt auf Knopfdruck mit dem kleinen PHP Script eine Chargennummer übergeben:

$address=“192.168.100.140″;
$port=“3100″;
$wert=“80123″;

verbinden($address, $port, 3);
if($serror) {
echo „$serrorn“;
}else{
# wert an drucker senden
# U – als startkuerzel fuer Userfeld
# CHARGENNR – bezeichnung des Userfeldes
$in=chr(2).“UCHARGENNR“.chr(10).$wert.chr(3).“n“;
socket_write($socket, $in, strlen($in));
socket_close($socket);
}

function verbinden($remote, $port, $timeout = 10) {
global $serror, $socket;

$ip = „“;
# pruefen ob es sich um eine ip-adresse handelt
if( !preg_match(‚/^d+.d+.d+.d+$/‘, $remote) ) {
$ip = gethostbyname($remote);
if ($ip == $remote) {
$serror = „F1-Fehler: Drucker unbekannt!“;
return NULL;
}
}else{
$ip = $remote;
}

if (!($socket = @socket_create(AF_INET, SOCK_STREAM, SOL_TCP))) {
$serror = „F2-Fehler: „.socket_strerror(socket_last_error());
return NULL;
}

socket_set_nonblock($socket);

$timeout *= 1000; # timeout mal 1000 weil in millisekunden gerechnet wird
$attempts = 0; # mehr als ein versuch?
$error = NULL;
$verbunden;

while (!($verbunden = @socket_connect($socket, $remote, $port+0)) && $attempts++ < $timeout) {
$error = socket_last_error();
if ($error != SOCKET_EINPROGRESS && $error != SOCKET_EALREADY) {
$serror = „F3-Fehler: „.socket_strerror($error);
socket_close($socket);
return NULL;
}
usleep(1000000);
}

if (!$verbunden) {
$serror = „F4-Fehler: Zeitüberschreitung ($timeout Sekunden) beim Verbinden. „.socket_strerror(socket_last_error());
socket_close($socket);
return NULL;
}

socket_set_block($socket);

}

Und wie Franz so treffend angemerkt hat, das Ding schaut aus wie eine Melkmaschine 🙂