WordPress mit Hilfe von XAMPP (oder einem anderen Ableger der lokalen Webserver) auf dem eigenen PC zu installieren, ist leichter als je zuvor. Die Installation macht sich eigentlich von ganz allein solange man die wp-config.php mit den korrekten Daten füllt. Nach der Installation ist der Blog über localhost erreichbar. Beispielsweise: Easy peasy.
UND
Wenn man nun versucht von einem anderen PC aus dem eigenen Netzwerk auf diesen Blog zuzugreifen, muss man statt localhost logischerweise den Computernamen oder die IP des Hosts nehmen: http://barketing055:8080/wsp/wp-login.php Funktioniert auch.
ABER
Nach einem erfolgreichen Login erfolgt eine automatische Weiterleitung, normalerweise nach wb-admin. Blöderweise erfolgt die Weiterleitung immer nach localhost, also nach http://localhost:8080/wsp/wp-admin was auf dem entfernten Rechner natürlich einen 404 Fehler erzeugt.
Lösung
Mit ein paar Änderungen kann diese Weiterleitung angepasst werden: wp-login.php: Folgende Zeile:
Ich hatte letzte Woche mit einem eigenartigen Problem zu kämpfen. Die 2 nagelneuen Drucker auf Arbeit – beides HP Laserjet Pro 8600 Plus via Druckerserver – hingen sich regelmäßig, ja fast täglich, an irgendwelchen Dokumenten auf. Dieses Dokument kann dann auch auf keinem Wege abgebrochen werden.
Das Problem trat bei uns fast zur selben Zeit an beiden Druckern auf.
Fehlersymptome:
Ein Dokument in der Druckerwarteschlange wird einfach nicht gedruckt. Alle weiteren Dokumente reihen sich ein, werden aber nicht gedruckt weil dieses Dokumente die Warteschlange blockiert.
Dieses dann aus der Druckerwarteschlange zu löschen funktioniert nicht. Es wird „Wird gelöscht…“ angezeigt und nichts passiert.
Drucker aus- und wieder anschalten löscht weder die Dokumente noch setzt es den Druck fort.
net stop spooler und net start spooler brachte nichts.
Drucker per LAN statt WLAN anschließen ändert auch nichts daran.
Am Druckerserver konnte man den Druckauftrag ebenfalls nicht erfolgreich entfernen. Druckerwarteschlange öffnen -> Drucker -> Alle Druckaufträge abbrechen zeigte ebenfalls keine Wirkung.
Auch das Anhalten des Druckers am Server und das Wiederholen der obigen Schritte bewirkte nichts.
Am Ende half nur eins: Neustart der Druckerserverrolle in Verbindung mit Drucker und PC, auf dem das verklemmte Dokument gedruckt wurde. Das ist natürlich keine Lösung.
Lösung
Grundsätzlicher Tipp: Firmware- und Treiberupdate, hilft oftmals schon. Falls nicht: Öffnet die Druckereigenschaften am Druckerserver und ändert folgende Einstellungen:
Freigabe -> „Druckauftragsbearbeitung auf Clientcomputern durchführen“ deaktivieren
Erweitert -> „Drucken nachdem die letzte Seite gespoolt wurde“ und „Fehlerhafte Druckaufträge anhalten“ aktivieren
Falls das Problem noch besteht, Anschlüsse -> „Bidirektionale Unterstützung aktivieren“ deaktivieren
Dies kann vielleicht zulasten der Dauer gehen, die benötigt wird bis ein Dokument vom PC über den Server auf den Drucker gelangt, aber dabei handelt es sich vermutlich um Millisekunden oder sehr wenige Sekunden. Bei uns trat das oben beschriebene Problem seit dem nicht mehr auf.
Windows Update Fehler Code 80072EE2… verdammt nochmal, was ist das für ein Fehler?!
Laut Microsoft Hilfe werden „möglicherweise ungewöhnlich viele Updates von den Windows Update-Servern angefordert.“. Also die Server oder das Netzwerk sind überlastet. Bei einem lokalen WSUS Server im Netzwerk an einem ruhigen Freitag kann man das eher ausschließen.
Es gibt aber auch Meinungen, nach denen der Fehler an fehlender oder geblockten Verbindung zum Update Server liegt, wie in diesem Video angesprochen. Also die Verbindung zum WSUS Server prüfen, Antivirenprogramme prüfen, ggf. vorübergehend deaktivieren.
Hilft nicht? Dann helfen vielleicht folgende Tools:
Hilft nicht? Bei mir auch nicht. Weiter mit dem PC-WELT-Fix für Windows Update: Dieses Tool ist relativ aktuell und dadurch für die Systeme XP bis Windows 8 geeignet. Auf älteren Systemen (XP/Vista) kann man es ggf. auch mit dem pcwUpdateRepair probieren. Vermutlich sind diese Fixes aber im aktuellen Fix It mit enthalten.
Bei der Gelegenheit ein Hinweis für Admins: das PC-WELT Fix It Pack enthält ein paar nette kleine Tools im schnellen Zugriff für die Erste Hilfe am PC. Manche sind bereits fertig installiert, andere müssen noch schnell installiert werden. Die Installer sind aber in den Pack schon enthalten. Die Software ist neben der mächtigen Sammlung WSCC, welche alle nirsoft und sysinternals Tools enthält, eine kleine Alternative:
Hilft uns jetzt aber erstmal nicht weiter.
Der Fehler bleibt ungelöst und es geht wieder zurück zum Troubleshooting:
Ping/Remotezugriff zum WSUS Server (bzw. Windows Update) funktioniert?
Hat der WSUS Server den Computer in seiner Computerliste gelistet?
Wann war die letzte Aktualisierung laut WSUS?
Werden dort Fehler oder fehlerhafte Updates angezeigt?
Ggf. die Updates des WSUS bereinigen lassen (WSUS -> Optionen -> Assistent für die Serverbereinigung).
Antivirenprogramme/Firewalls/andere Verbindungsblocker sowohl auf dem Client als auch auf dem Server temporär deaktivieren. Achtung, natürlich alles so schnell wie möglich wieder aktivieren.
Ich vermute der Fehler liegt am Netzwerk des PCs. Zwar funktionieren Pings und Serverzugriffe, jedoch zeigen die Netzwerkfunktionen teilweise abnormales Verhalten. Die Netzlaufwerke spinnen; sobald ich versuche Daten dort abzuspeichern, stürzt der Explorer (auch der Total Commander) ab und alle Netzlaufwerke sind nicht mehr erreichbar. Trotz WSUS Ping wird der Rechner nicht in der Computerliste des WSUS gelistet. Vielleicht Fehler in der Netzwerkkarte.
Weitere Windows Update Fehler und ihre Lösung findet ihr hier.
In einem aktuellen Webprojekt verwende ich MongoDB als Datenbank und die Node Erweiterung mongoose als Aufsatz. mongoose ist für alle Entwickler, die bisher pur auf der MongoDB arbeiten, definitiv einen Blick wert. Anfangs wurde lokal auf dem PC programmiert, mittlerweile beginnen wir den Umstieg auf einen Webhoster. Dabei ergab sich ein Problem, dass ich kurz erläutern möchte.
Die Mongoose Verbindung zur Datenbank erfolgt anhand eines Connection Strings, der bei einer Standardinstallation aller Komponenten sehr einfach aussehen kann:
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/proorg-test");
Dieser String verwendet localhost als Server, den Standardport von MongoDB 27017, die Datenbank „proorg-test“ und keine Authentifizierung. Das reicht für den Anfang und funktioniert gut.
Nach dem Umstieg auf einen (shared) Webserver trifft man jedoch meistens eine andere MongoDB Installation an. Oftmals wird diese mit dem Parameter –auth eine Authentifizierung erfordern, einen anderen Port nutzen und vielleicht auch einen anderen Server verwenden. Neben den zusätzlichen Angaben für Server, Port und User muss man Mongoose jetzt auch befehlen, sich explizit an der „Admin Tabelle“ zu authentifizieren. Dies ist meisten die admin Tabelle, in der auch ein Admin Nutzer, dessen Daten im Connection String stehen, enthalten sein sollte.
var mongoose = require("mongoose");
mongoose.connect("mongodb://mongodb_admin:r0OtP4s$w0rd@localhost:20718/proganizer", {auth:{authdb:"admin"}});
Dieser String enthält jetzt den wichtigen Teil {auth:{authdb:“admin“}}, damit Mongoose sich mit dem mongodb_admin an der admin Tabelle authentifiziert.
An dieser Stelle auch big shoutouts an uberspace.de, der sympathische deutsche Webhoster mit „Preis-selber-wählen“ Prinzip und einem riesigen Arsenal an vorinstallierten, vorkonfigurierten und bestens dokumentierten Server- und Entwickler-Tools. Ein kleiner Einblick: „SSH. Perl. PHP. Python. Ruby. node.js. Erlang. Lua. Compiler. FastCGI. MySQL. CouchDB. MongoDB. Cronjobs. HTTPS. IMAP. SMTP. Webmail. qmail. vmailmgr. maildrop. SpamAssassin. ezmlm-idx. DSPAM. ~/service. runwhen. Eigene Logs. Backups. 10 GB Plattenplatz. Und das ist nur der Anfang.“
Mögliche Fehlermeldungen: Dieser Fehler würde auftreten, wenn trotz –auth Parameter bei MongoDB der Standard Connection String benutzt würde: assertion 16550 not authorized for query on proganizer.users ns:proganizer.users query:{ username: „SchurigH“ } Wenn man nur Benutzername und Passwort eingibt, ohne den auth Parameter von Mongoose einzustellen, also
, dann kommt: auth: couldn’t find user schurigh_mongoadmin@proganizer, proganizer.system.users Und selbst wenn man jetzt in proganizer.system.users einen neuen Admin User erstellt – das ginge mit db.addUser({user:“proganizer_admin“, pwd: „*****“, roles: [ „readWrite“, „dbAdmin“ ]}); – würde das nicht funktionieren. Ohne {auth:{authdb:“admin“}} geht es nicht.
Meine letzten Posts zum Firefox Script Deployment sind schon etwas älter: 17.0.2, 9.0, 8.0.1. Sie beschreiben die zugrundeliegende Technik, mit der Firefox verteilt werden kann.
Update 19.09.2016: aktualisiertes Script beachtet jetzt die beiden verfügbaren 32/64bit-Architekturen von Firefox und updatet die installierte Architektur passend. Dafür müssen beide Installer in dem Format „Firefox48.0.2-32.exe“ und „Firefox48.0.2-64.exe“ vorliegen. Info: Das im Skript verwendete Programm VersionCompare ist eine Eigenprogrammierung und hier als Download verfügbar.
Firefox 47.0.1
Das Installationsscript:
@echo off & Color 9f & setlocal
set wd=\\lea\Deployment\Software\Firefox
set log=%wd%\firefox.log
set tools=\\lea\Deployment\Sonstiges\tools
set instversion=0.0
set updateretry=0
set retry=0
set versionEL=9
set instEL=999
REM:: ######## EDIT THIS ####
set newversion=48.0.2
REM:: #######################
REM:: Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
::for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto check
::goto end
REM:: Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end
:check
REM:: prüfe ob eine 32bit Version von Firefox schon installiert ist
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c
REM:: falls keine 32bit Version von Firefox gefunden wurde, prüfe 64bit
if "%instversion%"=="0.0" for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set instversion=%%c
REM:: Wenn Version nicht gleich: vergleiche Versionen mit dem Versionchecker
%tools%\VersionCompare.exe %instversion% %newversion%
set versionEL=%errorlevel%
if "%versionEL%"=="-1" goto install
if "%versionEL%"=="0" echo %date% %time:~0,8% - %computername% hat bereits %instversion% installiert >> %log% & goto end
if "%versionEL%"=="1" echo %date% %time:~0,8% - %computername% hat bereits %instversion% (neuer) installiert >> %log% & goto end
:install
if "%processor_architecture%"=="AMD64" goto inst64
echo %date% %time% - %computername% (%instversion%) installiert %newversion% (32bit)... >> %log%
taskkill /F /IM firefox.exe
ping localhost -n 4
"%wd%\Firefox%newversion%-32.exe" -ms
goto cont
:inst64
echo %date% %time% - %computername% (%instversion%) installiert %newversion% (64bit)... >> %log%
taskkill /F /IM firefox.exe
ping localhost -n 4
"%wd%\Firefox%newversion%-64.exe" -ms
goto cont
:cont
set instEL=%errorlevel%
if %instEL%==1618 goto retry REM:: msiexec process in use, installation already in progress (eg. windows updates running)
if %instEL%==1602 goto retry REM:: user canceled installation (eg. taskkill)
if %instEL%==1603 goto retry REM:: fatal error, some use it for "already installed" (eg. java)
::if %instEL%==1638 goto uninstall REM:: another product is already installed, denies an update
echo %date% %time% - %computername% Installation abgeschlossen, Errorlevel %instEL% >> %log%
goto settings
:settings
REM:: Install 32-bit customisations
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%programfiles%\Mozilla Firefox\"
if exist "%programfiles%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%programfiles%\Mozilla Firefox\defaults\preferences"
REM:: Install 64-bit customisations
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\override.ini" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\mozilla.cfg" "%ProgramFiles(x86)%\Mozilla Firefox\"
if exist "%ProgramFiles(x86)%\Mozilla Firefox\" copy /Y "%wd%\local-settings.js" "%ProgramFiles(x86)%\Mozilla Firefox\defaults\preferences"
goto end
:retry
if %retry%==1 goto retryfailed
echo %date% %time:~0,8% - %computername% hatte den Fehler %instEL%, retry in 5min... >> %log%
set retry=1
REM:: 5 Minuten warten
ping localhost -n 300 > nul
goto install
:retryfailed
echo _!_ %date% %time:~0,8% - %computername% hat die Installation abgebrochen, %instEL%, RETRY FAILED! >> %log%
goto end
:uninstall
if %retry%==1 goto retryfailed
echo %date% %time:~0,8% - %computername% deinstalliert Version %instversion% aufgrund EL 1638 Fehler... >> %log%
taskkill /F /IM firefox.exe
start /w "%programfiles%\Mozilla Firefox\uninstall\helper.exe" -ms
start /w "%programfiles(x86)%\Mozilla Firefox\uninstall\helper.exe" -ms
echo %date% %time:~0,8% - %computername% - %instversion% fertig deinstalliert, retry... >> %log%
set retry=1
goto install
REM:: Removes Firefox Desktop Icon - Windows XP
::if exist "%allusersprofile%\Desktop\Mozilla Firefox.lnk" del "%allusersprofile%\Desktop\Mozilla Firefox.lnk" /S
REM:: Removes Firefox Desktop Icon - Windows 7
::if exist "C:\Users\Public\Desktop\Mozilla Firefox.lnk" del "C:\Users\Public\Desktop\Mozilla Firefox.lnk"
:end
endlocal
exit
Datei install.ini hatte ich in den letzten Posts immer noch mit drin. Ich glaube jedoch, dass die Datei gar nicht mehr benutzt wird und habe sie mittlerweile aus meiner Verteilung entfernt.
Die Verteilung läuft bereits seit Langem ohne Probleme.
Flash ist eine weitere Standardsoftware auf den meisten Windows PCs, die regelmäßig aktualisiert werden muss. Also wieder ein Fall für eine Verteilung im Netzwerk. Nach den letzten Deployments [Skype, Java, Reader (Update), Firefox/Thunderbird (Update)] ist die Verteilung von Flash fast ein Kinderspiel.
Anmerkungen
Wie üblich wird zuerst die Version aus der Registry gelesen, überprüft und schlussendlich erfolgt die Installation .exe Dateien:
Achtung: Flash muss in 2 verschiedenen Ausführungen installiert werden. Auf der Downloadseite ist die Rede vom Internet Explorer und „Plug-In basierten Browsern“; also praktisch allen anderen Browsern. Daher 2 aufeinanderfolgende Installationen. In 99% der Fälle bereitet die Installation keine Probleme. Für die restlichen 1% habe ich auch in diese Verteilung Fehlererkennung und ein Retry eingebaut. Die Fehler 1618, 1602 und 1603 resultieren in einem erneuten Installationsversuch 5 Minuten später.
Konfiguration
Nach der Installation wird noch eine Konfigdatei kopiert, die Flash mit einigen wenigen Einstellungen versieht. mms.cfg:
Die Datei könnt ihr natürlich so anpassen, wie ihr die Einstellungen wollt.
Deployment
Update 19.09.2016: Version 23.0 getestet und läuft. Info: Das im Skript verwendete Programm VersionCompare ist eine Eigenprogrammierung und hier als Download verfügbar.
flash-installer.bat:
@echo off & Color 9f & setlocal
set wd=\\server\Deployment\Software\Flash
set log=%wd%\flash-log.txt
REM:: --- Version hier ändern ---
set version=23.0
REM:: ---------------------------
set tools=\\lea\Deployment\Sonstiges\tools
set flashieEL=999
set flashplEL=999
set combinedEL=999
set versionEL=999
set instversion=000
set retry=0
REM:: Clientfilter: nur die Computer aus der allowedPCs.txt dürfen installieren
::for /f %%f in (%wd%\allowedPCs.txt) do if "%computername%"=="%%f" goto check
::goto end
REM:: Clientfilter: die Computer aus der deniedPCs.txt dürfen nicht installieren
for /f %%f in (%wd%\deniedPCs.txt) do if "%computername%"=="%%f" goto end
:check
REM:: check installed version
for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Macromedia\FlashPlayerPlugin" /v "Version"^|findstr "Version"') do set instversion=%%c
if "%instversion%"=="000" goto install
%tools%\VersionCompare.exe %instversion% %version%
set versionEL=%errorlevel%
if "%versionEL%"=="-1" goto install
if "%versionEL%"=="0" echo %date% %time:~0,8% - %computername% hat bereits %instversion% installiert >> %log% & goto end
if "%versionEL%"=="1" echo %date% %time:~0,8% - %computername% hat bereits %instversion% (neu) installiert >> %log% & goto end
:install
echo %date% %time:~0,8% - %computername% (%instversion%) startet die Installation... >> %log%
start /w %wd%\flash-%version%_IE.exe -install
set flashieEL=%errorlevel%
start /w %wd%\flash-%version%_OTHER.exe -install
set flashplEL=%errorlevel%
if %flashieEL%==1618 goto retry REM:: msiexec process in use, installation already in progress
if %flashieEL%==1602 goto retry REM:: user canceled installation
if %flashieEL%==1603 goto retry REM:: fatal error, some use it for "already installed" (eg. java)
if %flashplEL%==1618 goto retry REM:: msiexec process in use, installation already in progress
if %flashplEL%==1602 goto retry REM:: user canceled installation
if %flashplEL%==1603 goto retry REM:: fatal error, some use it for "already installed" (eg. java)
if %flashieEL%==1041 echo %date% %time:~0,8% - %computername% strange 1041 open browser fail, end >> %log% & goto end
if %flashplEL%==1041 echo %date% %time:~0,8% - %computername% strange 1041 open browser fail, end >> %log% & goto end
set combinedEL=%flashieEL%%flashplEL%
echo %date% %time:~0,8% - %computername% hat die Installation von %version% abgeschlossen, errorlevel: %combinedEL% >> %log%
goto finish
:retry
if %retry%==1 goto retryfailed
echo %date% %time:~0,8% - %computername% hat nicht Errorlevel 00 erreicht, retry in 200Sek... >> %log%
set retry=1
ping localhost -n 200 > nul
goto install
:retryfailed
echo _!_ %date% %time:~0,8% - %computername% hat die Installation abgebrochen, RETRY FAILED! EL: %flashieEL% %flashplEL% >> %log%
goto end
:finish
REM:: copy flash config file for silent background updates
if "%processor_architecture%"=="x86" xcopy "%wd%\mms.cfg" "%systemroot%\System32\Macromed\Flash" /y & goto end
xcopy "%wd%\mms.cfg" "%systemroot%\SysWOW64\Macromed\Flash" /y
xcopy "%wd%\mms.cfg" "%systemroot%\System32\Macromed\Flash" /y
goto end
:end
endlocal
exit
Anpassungen
In dem Script tragt ihr in Zeile 8 immer die gewünschte Version ein und benennt die Installationsdateien nach folgendem Schema um: flash-[Version]_IE.exe (z.B. flash-21.0_IE.exe) flash-[Version]_OTHER.exe (z.B. flash-21.0_OTHER.exe) Die Verteilung besteht wie üblich aus den üblichen Verteilungsdateien, eurer angepassten Konfigurationsdatei mms.cfg und den umbenannten Installationsdateien.
Letzte Woche hatte ich das skriptbasierte Skype Deployment im AD gezeigt. Dieser Beitrag soll zeigen, wie die Vorbereitung und Verteilung des Updates im Schnelldurchlauf aussieht.
Wenige Sekunden nach dem Befehl sollten alle Daten entpackt worden sein:
Schritt 3: MST erstellen/überprüfen (optional)
Anmerkung: Dieser Schritt ist optional, die Installation ist auch ohne MST möglich. Dabei wird dann eine Standardinstallation durchgeführt. Mit msiexec Parametern wie „FEATURE_IEPLUGIN=0 FEATURE_FFPLUGIN=0“ lassen sich bestimmte Einstellungen auch ohne MST anpassen. Mehr Links dazu im originalen Artikel. MSI mit Orca öffnen, die bereits von der vorherigen Version existierende MST (Download) anwenden und nachschauen ob alle Änderungen noch stimmen:
Schritt 4: Kopieren
Damit die Skriptverteilung mit meinem Deployment Skript (siehe unten) funktioniert, müssen die in Schritt 2 entpackten AIP Installationsdateien sowie die MST aus Schritt 3 in einem bestimmten Ordner liegen. Und zwar, relativ vom Skype Deployment Ordner gesehen, in einem Unterordner \deploy\[Version]\, also in diesem Fall: \\server\Software\Skype\deploy\6.11.32.102\*AIP-Daten*
Schritt 5: Deployment
Holt euch das Installationsskript aus meinem Skype Deployment Post, es wurde seit dem nicht verändert. Dann muss nur noch in Zeile 13 die neue Version eingetragen werden. Und los gehts!