Über den Beitrag WordPress Kommentare sperren wurde dargestellt, wie mittels eines einfachen Windows-Skripts die Kommentarfunktion veröffentlichter Posts deaktiviert werden kann. Die bei diesem Vorgang erzeugte Protokolldatei soll nun dazu dienen diesen Vorgang wieder rückgängig zu machen:
Die Batchdatei benötigt zunächst zwingend den Namen der Protokolldatei. Er wird dem Batchaufruf als Parameter beigefügt. Zusätzlich folgt noch eine Prüfung, ob diese Datei im Verzeichnis tatsächlich existiert.
Anschließend wird das passende SQL-Statement für ein Update der MySQL-Tabelle wp_posts erzeugt.
In einer Schleife (for) wird die Protokolldatei ab der zweiten Zeile (die erste Zeile enthält die Spaltenüberschriften) eingelesen, die ID dem SQL-Statement hinzugefügt und per plink an den Server gesendet.
Dieser Ablauf scheint relativ aufwendig zu sein, da für jeden Protokolleintrag eine Verbindung zum Server hergestellt werden muß. Da das Datenvolumen selbst aber sehr begrenzt ist, läuft die Übertragung im Sekundentakt ab. Die Batch-Datei könnte dabei folgende Struktur haben:
@echo off
::
set Nachricht=Update der Post-Kommentarfunktionen erfolgt
::
if [%1] equ [] (
set Nachricht=die Protokolldatei muß angegeben werden ^
& goto batchend)
::
if not exist %1 (
set Nachricht=die Protokolldatei wurde nicht gefunden ^
& goto batchend)
::
set sql=
set sql=%sql% update wp_posts
set sql=%sql% set comment_status = 'open'
set sql=%sql% where ID = %%r and
set sql=%sql% post_type = 'post' and
set sql=%sql% post_status = 'publish' and
set sql=%sql% comment_status = 'closed';
::
:: Protokolldatei ab zweiter Zeile einlesen und Tabelle updaten
::
for /F "skip=1" %%r in (%1) do (
c:\"program files (x86)"\putty\plink -ssh -P 22 ^
-l ssh-user -pw ssh-password ^
hostname_oder_ip ^
/usr/bin/mysql -u mysql-user -pmysql-password wordpress-database ^
--execute=\"%sql%\"
if %ERRORLEVEL% gtr 0 (
set Nachricht=Fehler beim Update der Post-Kommentarfunktionen ^
& goto batchend)
echo.update ID %%r
)
:batchend
echo.%Nachricht%
Der Hinweis darf erlaubt sein, daß man derartige Manipulationen nur dann vornehmen sollte, wenn man die Folgen selbst richtig einschätzen kann. rh2011-12-003
Wenn man genau weiß, was man tut und keine Plug-Ins einsetzen möchte, von denen man nicht immer genau weiß, was sie tun, kann man verschiedene Aufgaben in WordPress von jedem Terminal aus steuern oder anstoßen. In dem Beitrag PuTTY wurde bereits auf den Bereich der Datensicherung eingegangen. Nachfolgend geht es darum die Kommentarfunktion aller aktuell veröffentlichten Posts mit einem Befehl zu deaktivieren bzw. zu schließen; als Notschalter sozusagen. Das Skript in der Windows-Batchdatei, das in dieser Version nur auf das Wesentliche reduziert ist, läuft in drei Schritten ab:
Es wird eine Protokolldatei erstellt, die den Index und den Namen des Posts aufnimmt, dessen Kommentarfunktion gesperrt werden soll, bzw. gesperrt worden ist. Dies dient dazu den gesamten Vorgang reversibel zu machen. Zudem ist Teil des Dateinamens ein Zeitstempel in der Form JJJJMMTT_HHMMSS. Die Protokolldatei könnte also den Namen closedcomments_20111223_145738.data tragen. Damit wird bei jedem Aufruf des Skripts jeweils eine neue Protokolldatei mit neuem Zeitstempel erstellt. Dies erhöht die Nachvollziehbarkeit. Auf das Thema der fehlenden Null bei Uhrzeiten vor 10 Uhr wird hier nicht eingegangen.
Im zweiten Schritt wird ein SQL-Query formuliert in dem ID und Post-Name der Posts abgefragt werden, die vom Typ Post sind, den Status Public tragen und deren Kommentarfunktion als Open gekennzeichnet sind. Diese Abfrage wird dann per plink an den Server geschickt. Das Ergebnis der Abfrage wird dann in die Protokolldatei geschrieben.
Abschließend wird ein SQL-Statement für ein Update der MySQL-Tabelle wp_posts erzeugt und ebenfalls per plink an den Server gesendet.
Die Batch-Datei könnte dabei folgende Struktur haben:
@echo off
::
set Nachricht=alle Post-Kommentarfunktionen geschlossen
::
:: 1. Sicherungsdatei (closedcomments_jjjjmmtt_hhmmss.data) anlegen
::
echo.Sicherungsdatei anlegen ...
::
for /f "tokens=1-3 delims=/.- " %%A in ('date /T') do (
set TT=%%A& set MM=%%B& set JJJJ=%%C
)
set Datum=%JJJJ%%MM%%TT%
for /f "tokens=1-3 delims=:, " %%A in ('echo %time%') do (
set hh=%%A& set mm=%%B& set ss=%%C
)
set Uhrzeit=%hh%%mm%%ss%
set CC-PROT=closedcomments_%Datum%_%Uhrzeit%.data
type NUL > %CC-PROT%
if %ERRORLEVEL% gtr 0 (
set Nachricht=Fehler beim Erstellen der Sicherungsdatei ^
& goto batchend)
::
:: 2. Servereinwahl
:: a. suche offene Post-Kommentarfunktionen
::
echo.offene Post-Kommentarfunktionen suchen ...
::
set sql=
set sql=%sql% select ID, post_name as Name
set sql=%sql% from wp_posts
set sql=%sql% where post_type = 'post' and
set sql=%sql% post_status = 'publish' and
set sql=%sql% comment_status = 'open';
c:\"program files (x86)"\putty\plink -ssh -P 22 ^
-l ssh-user -pw ssh-password ^
hostname_oder_ip ^
/usr/bin/mysql -u mysql-user -pmysql-password wordpress-database ^
--execute=\"%sql%\" >> c:\users\user-name\%CC-PROT%
if %ERRORLEVEL% gtr 0 (
set Nachricht=Fehler beim Suchen offener Post-Kommentarfunktionen ^
& goto batchend)
::
:: b. schließe offene Post-Kommentarfunktionen
::
echo.offene Post-Kommentarfunktionen schließen ...
::
set sql=
set sql=%sql% update wp_posts set comment_status = 'closed'
set sql=%sql% where post_type = 'post' and
set sql=%sql% post_status = 'publish' and
set sql=%sql% comment_status = 'open';
c:\"program files (x86)"\putty\plink -ssh -P 22 ^
-l ssh-user -pw ssh-password ^
hostname_oder_ip ^
/usr/bin/mysql -u mysql-user -pmysql-password wordpress-database ^
--execute=\"%sql%\"
if %ERRORLEVEL% gtr 0 (
set Nachricht=Fehler beim Schließen offener Post-Kommentarfunktionen ^
& goto batchend)
:batchend
echo.%Nachricht%
Das Blockieren der Kommentarfunktion ließe sich auch noch auf bestimmte Autoren oder Kategorien beschränken. Sofern die Protokolldatei verfügbar bleibt, kann der gesamte Vorgang jederzeit wieder rückgängig gemacht werden. rh2011-12-002
Das Einbinden einer Netzlaufwerk-Freigabe hat zwar unmittelbar nichts mit der Virtualisierung über die Oracle VM VirtualBox zu tun, steht hier aber zumindest in mittelbarem Zusammenhang mit diesem Miniprojekt. Der Ubuntu-Gast ist bisher lauffähig eingerichtet worden, hat aber noch keinen Kontakt zur Außenwelt. Daher soll im nächsten Schritt die Einbindung einer Netzlaufwerk-Freigabe in sein Dateisystem erfolgen. Zugriffe auf Freigaben seines Wirts sind nicht vorgesehen. Ein Dateiaustausch wird ausschließlich über ein NAS, hier ein Synology DS110+ mit DSM 3.2, erfolgen. Das Mounten der Freigaben soll durch den User und nur auf dessen Anforderung geschehen.
Zur Umsetzung sind folgende Schritte notwendig:
Installation des Samba-Clients cifs-utils
Anpassung der Datei /etc/fstab
Mountpunkt im User-Verzeichnis anlegen
Paßwortdatei im User-Verzeichnis anlegen
Start-/Stop-Skript anlegen
Der erste Punkt ist selbstverständlich nur einmal durchzuführen. Die Punkte zwei bis fünf müssen allerdings für jeden User einzeln abgearbeitet werden. So erhält also jeder User, der auf eine Freigabe zugreifen darf, einen eigenen Eintrag in der /etc/fstab. Der Ubuntu-User muß natürlich zusätzlich auch auf auf dem Datei-Server bekannt sein. Zusätzliche Freigaben erfordern jeweils das Abarbeiten der Punkte zwei, drei und fünf.
1. Über das Protokoll CIFS (Common Internet File System) stellen Windows- und Samba-Server ihre Freigaben bereit. Das entsprechende Paket muß nachgeladen und installiert werden.
$ sudo apt-get install cifs-utils
Es wurde noch das zusätzliche Paket keyutils installiert. Vorgeschlagen, aber nicht installiert, wurde außerdem winbind.
2. In diesem Beispiel soll der User »karl« auf die Freigabe Zentraldaten lesend und schreibend zugreifen können, die auf dem Server 192.168.2.3 liegt. Gemountet werden soll alles auf /home/karl/Zentraldaten, und zur Authorisierung liegen Username und Paßwort in der Datei /home/karl/.cifscredentials bereit.
$ tail -n 1 /etc/fstab
//192.168.2.3/Zentraldaten /home/karl/Zentraldaten cifs
noauto,user,uid=1002,gid=1003,nounix,iocharset=utf8,
credentials=/home/karl/.cifscredentials 0 0
Die uid und gid läßt sich so ermitteln:
$ id
uid=1002(karl) gid=1003(karl) Gruppen=1003(karl)
4. Die Berechtigung/Beglaubigung (credentials) liegt in der Datei ~/.cifscredentials im Home-Verzeichnis, andernfalls hätte das Paßwort in die /etc/fstab eingetragen werden müssen:
$ cat /home/karl/.cifscredentials
username=karl
password=karl-sein-passwort
Die Sicherheit könnte noch durch die weitere Einschränkung der Zugriffsberechtigung erhöht werden:
$ cd ~
$ chmod 0600 .cifscredentials
An dieser Stelle sind bereits alle Anforderungen an das mounten der Freigabe per cifs erfüllt:
$ sudo mount -a
$ mount /home/karl/Zentraldaten
$ mount | grep 'Zentraldaten'
//192.168.2.3/Zentraldaten on /home/karl/Zentraldaten type cifs
(rw,nosuid,nodev,user=karl)
$ umount /home/karl/Zentraldaten
5. Tatsächlich ist ein Ein/Aus-Skript zum mounten/unmounten gar nicht erforderlich. Der Dateimanager Nautilus 3.2.0 zeigt links oben unter »Geräte« die NAS Freigabe Zentraldaten bereits an. Mit einem einfachen Mausklick kann nun diese Freigabe in das bestehende Dateisystem eingebunden und wieder entfernt werden. Komfortabler geht das nicht. Hier dennoch das einfache Skript mountzentraldaten:
$ cd ~
$ mkdir bin
$ source ./.profile
$ cd bin
...
$ cat mountzentraldaten
#!/bin/bash
#
# Freigabe //192.168.2.3/Zentraldaten nach ~/Zentraldaten
# mounten oder un-mounten (als Ein-/Ausschalter ausgelegt).
#
log() {
logger -t user.info -p user.info "$1";
}
mountpoint=`echo $HOME`/Zentraldaten
# wenn Freigabe Zentraldaten bereits gemountet ist, dann un-mounten ...
if [ $(mount | grep $mountpoint | wc -l) -eq "1" ]; then
umount $mountpoint
log "Nachricht von `basename $0` = umount //192.168.2.3/Zentraldaten"
else
# ... sonst mounten
mount $mountpoint
log "Nachricht von `basename $0` = mount //192.168.2.3/Zentraldaten"
fi
Es gibt noch eine Vielzahl weiterer Möglichkeiten eine Netzlaufwerk-Freigabe in das Dateisystem einzubinden. Diese Lösung ist einfach und nachvollziehbar, auch wenn sie etwas Konfigurationsaufwand benötigt. Sie kommt sogar ohne ein zusätzliches Skript aus, wenn die Freigabe über Nautilus, Geräte, rechte Maustaste und Einhängen/Aushängen erfolgt. Die Stabilität muß sich noch beweisen. Denn gedit 3.2 hat offensichtlich Probleme Dateien, die auf dem Datei-Server liegen, zu editieren. Hier gibt es noch unplausible Störungsmeldungen über veränderte Dateiinhalte. rh2011-10-007
Das beste Windows Betriebssystem seit MS-DOS ist zweifelsfrei Windows 7. Das beste Desktop-Betriebssystem – auch unter Berücksichtigung von Mac-OS – ist ganz entschieden Linux in seinen verschiedenen Ausprägungen (Distributionen/Flavours). Natürlich ist das eine rein subjektive Einschätzung. Aber nach Erfahrungen mit allen vorgenannten Betriebssystemen in der täglichen Büroumgebung überwiegen die Vorteile von Linux doch eindeutig. Wenn man nicht ganz auf Windows verzichten konnte oder wollte, mußte man sogenannte Dual- oder Multibootsysteme vorsehen. Für diesen Zweck waren aber die Festplatten entsprechend einzurichten und der Wechsel von Windows nach Linux erfolgte jedesmal mit einem Neustart. Eine Alternative läuft über eine Virtualisierungslösung. Hier wird auf einem Intel-/Windows-Rechner, der auch als Wirt oder Host bezeichnet wird, eine Virtualisierungs-Software installiert. Ein Host, so ausgestattet, bietet die Möglichkeit Linux-Distributionen – die als Gäste bezeichnet werden – entgegenzunehmen, sie zu installieren und auszuführen, so, als stünde ihnen die gesamte Host-Hardware zur Verfügung. Je nach eingesetzter Virtualisierungssoftware kann der Host/Wirt auch unter Linux laufen und die Gäste dürfen Windows und/oder Linux heißen. Wie auch immer, im konkreten Beispiel fiel die Wahl auf Oracle VM VirtualBox. Die Software kann auf der Oracle Projektseite geladen werden. Eine Registrierung ist weder vor noch nach der Installation erforderlich. Da die Virtualisierung auf einem Intel/Windows-Host (Wirt) erfolgen soll, kommen demzufolge diese beiden Dateien zum Download:
VirtualBox 4.1.4 for Windows hosts
VirtualBox 4.1.4 Oracle VM VirtualBox Extension Pack
Der Host, der mit Ubuntu Linux virtuell bestückt werden soll:
Host-Hardware: Intel(R) Core(TM) i5 CPU 760 @ 2.80GHz, 8 GB RAM, ASUS EAH5450 Series Grafik, 460 GB Festplatte
Host-Betriebssystem: Windows 7 Professional, 64-bit
Gast-Betriebssystem (geplant): Linux Ubuntu 11.10, 32-bit
Nach den Downloads liegen also die folgenden drei Dateien vor:
Ubuntu empfiehlt immer noch die 32-bit Version als Standard.
VirtualBox
Die Installation der VirtualBox ist einfach, selbsterklärend und gibt keine Rätsel auf. Als Administrator ein Doppelklick auf die Exe-Datei und die Default-Einstellungen der Installationsroutine können so akzeptiert werden. Nach erfolgter Installation und bei geöffneter VirtualBox ein weiterer Doppelklick im Datei-Explorer auf die Extension_Pack-Datei. Nach ein paar weiteren Sekunden ist die Oracle VM VirtualBox 4.1.4 vollständig auf dem Wirt-System installiert. Im Windows 7 Verzeichnis C:\Program Files\Oracle\VirtualBox\ sind alle gerade installierten Dateien, übrigens auch die hervorragende Dokumentation als PDF-Datei, zu finden.
Gast Ubuntu
Noch bevor der Windows-Gastgeber seinem ersten Linux-Gast Logis bieten kann, muß via VirtualBox zunächst ein virtueller Bereich hierfür erstellt werden, und für alle weiteren Gäste dann entsprechend. Nach dem Start der VirtualBox und einem Klick auf die Schaltfläche »Neu« kann in sechs, sieben Schritten eine neue virtuelle Maschine für den Gast erstellt werden. Die Eckdaten hierfür sind:
virtuelle Festplatte: Bootfestplatte erzeugen, Dateityp: VDI (VirtualBoxDiskImage), Art der Abspeicherung: feste Größe
Lage und Größe der virtuellen Festplatte: V:\Ubuntu_11-10_32bit.vdi, Größe: 20,27 GB
Zusammenfassung der virtuellen Maschine für den Gast UbuntuHinweis: Aus Dual-Boot-Zeiten stand noch eine primäre Partition mit ca. 65 GB zur Verfügung. Diese wurde mit NTFS formatiert und hier zur Verfügung gestellt. Eine eigene Partition zur Aufnahme der VDI-Dateien ist jedoch nicht Bedingung. Die rechte Seite der abschließenden Zusammenfassung sieht nach diesen Schritten so aus:
Ubuntu Installation
Im nächsten Schritt wird Ubuntu selbst installiert. Der »First Start Wizard« der VirtualBox macht die Installation sehr einfach. Dazu wird die VirtualBox neu gestartet, der Eintrag links Ubuntu_11-10_32bit wird mit einem Klick markiert und anschließend die Schaltfläche »Starten« angeklickt. Der Wizard startet und fragt nach dem Speicherort des Installationsmediums, also der zuvor per Download erhaltenen Ubuntu ISO-Datei (ubuntu-11.10-desktop-i386.iso). Der Umweg über eine CD-ROM ist also nicht erforderlich. Die Installation von Ubuntu beginnt ab hier. Alle Daten und Programme landen jetzt ausschließlich in der zuvor eingerichteten virtuellen Maschine, genauer in der VDI-Datei V:\Ubuntu_11-10_32bit.vdi. Folgerichtig erkennt der Ubuntu-Installer: »[…] auf diesem Rechner befindet sich momentan kein erkanntes Betriebssystem.« Das Löschen der gesamten Festplatte und die anschließende Installation gehen also in diesem Fall in Ordnung. Daten Laufwerk: SCSI3 (0,0,0) (sda) 21,8 GB ATA VBox Harddisk, /dev/sda/ (ext4).
Guest Additions
Nach erfolgter Ubuntu Installation, dem Neustart der VirtualBox und dem Starten der virtuellen Maschine mit Ubuntu erfolgt zunächst Ernüchterung. Die Bildschirmauflösung ist nicht veränderbar, der Mauszeiger bewegt sich hakelig und verschmilzt sogar mit einigen Buttons zur Unsichtbarkeit. So wäre produktives Arbeiten nicht möglich. Abhilfe schaffen hier die sogenannten Guest Additions for Linux (siehe auch Oracle VM VirtualBox User Manual). Ein passendes ISO-Abbild, das im nächsten Schritt gemountet wird, liegt im Verzeichnis C:\Program Files\Oracle\VirtualBox\VBoxGuestAdditions.iso bereits vor. Es enthält alle zur Installation notwendigen Routinen. Laut User Manual soll Ubuntu allerdings zuvor noch mit dem Paket dkms (Dynamic Kernel Module Support) ausgestattet werden. Sofern es noch nicht installiert ist, wird dies jetzt nachgeholt und ein Reboot durchgeführt.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo dpkg –l | grep dkms
$ sudo apt-get install dkms
$ sudo shutdown –r now
Innerhalb Ubuntus soll jetzt die ISO-Datei VBoxGuestAdditions gemountet werden. In dem Menüpunkt »Geräte« der VirtualBox den Punkt »CD/DVD Laufwerke« und dann »Datei für virtuelles CD/DVD-ROM-Medium auswählen …«. Nach Auswahl der ISO-Datei läuft das Setup ohne weiteres Zutun ab und rüstet Ubuntu mit dem zusätzlichen Kernelmodul aus. Sollte diese Autorun-Routine nicht anspringen, erklärt das User Manual die notwendigen Schritte.
Vorläufiges Fazit
Der Unterschied nach einem Neustart zeigt deutlich, daß eine Linux-Virtualisierung nur nach dem Einbinden der VBoxGuestAdditions sinnvoll möglich ist. Damit verbunden ist natürlich die Frage, ob es auch Linux-Distributionen gibt, die keine Integration der VBoxGuestAdditions ermöglichen. Ubuntu 11.10 paßt scheinbar optimal in dieses Konzept. Mit der Maus kann man jetzt übergangslos zwischen Linux und Windows hin und her wechseln oder das Linux-Fenster der VirtualBox rahmenlos auf Bildschirmgröße aufziehen. Bequemer kann das Arbeiten nicht sein.
Im direkten Vergleich zu Dual-Boot-Systemen, die eine gewisse Sorgfalt bei der Partitionsbestimmung der Festplatte erfordern, ist der Einrichtungsaufwand der VirtualBox deutlich geringer und der praktische Nutzen in der täglichen Arbeit zudem wesentlich höher. Um das neue System effektiv nutzen zu können, muß noch der vollständige Konfigurationsumfang der VirtualBox erkundet werden. Zudem muß Ubuntu selbst noch konfiguriert werden: Zusätzliche User einrichten, E-Mail Konten einrichten, Netzwerkdrucker verbinden und den Kontakt zum Netzwerkspeicher herstellen. rh2011-10-005