Tag Archives: Blogger

PHP 5.3.3

Auf Dotdeb.org gibt es PHP in Version 5.3.3 im .deb-Format. Das nachfolgende kleine HowTo zeigt wie du dies auf Debian installieren kannst. Es gibt Pakete für Debian (Lenny), sowohl für amd64 als auch i386 Architekturen.

Install:

1.) als erstes benötigen wir eine Root-Shell

sudo bash

2.) nun können wir die zusätzlichen Quellen einfügen

echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
echo "deb-src http://php53.dotdeb.org stable all" >> /etc/apt/sources.list

3.) diese einmal aktualisieren

apt-get update

4.) und schon können wir PHP 5.3 installieren

aptitude safe-upgrade

Migration von PHP 5.2.x zu PHP 5.3.x:
de.php.net/migration53

Falls man bereits mit Debian (Squeeze) arbeitet oder die Lenny-Backports in den Quellen eingefügt hat und daher das Paket libtool > 2.2 installiert hat, muss man eine ältere Version per dpkg installieren, da man ansonsten php5-dev (5.3.1) nicht installieren kann, damit man selber Erweiterungen für PHP kompilieren kann (z.B. eaccelerator). Es folgt ein kleines HowTo:

wget http://ftp.de.debian.org/debian/pool/main/libt/libtool/libtool_1.5.26-4_i386.deb
dpkg --force-all -i libtool_1.5.26-4_i386.deb
aptitude install build-essential php5-dev

JavaScript richtig im HTML-Code platzieren

Zurück zur “Webseiten beschleunigen” – Übersicht

3.) JavaScript richtig im HTML-Code platzieren

Zudem sollte man sich überlegen wo man seinen JavaScript Code im HTML-Code platziert, da irgendwelche Effekte für das Menü usw. auch später geladen werden können, so dass erst-einmal die Webseite (Bilder… ) geladen werden kann, sollte jedoch vor dem  </body> platziert werden.


Im allgemeinen kann man jedoch sagen, dass CSS- sowie Javascript-Daten zusammen-gefasst werden können, um HTTP-Requests an dem Server zu verringern. So sollte man also seine CSS- und Javascript-Daten, welche gemeinsam jedoch in verschiedenen Dateien auf einer Webseite genutzt werden, jeweils zu einer einzigen Datei zusammengefasst werden.


Beispiel (ganz schlecht):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<script type="text/javascript" src="scriptfile1.js" />< script type="text/javascript" src="scriptfile2.js" />
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
</head>

Hier wird der Download der Dateien stylesheet2.css und stylesheet3.css blockiert, weil die JS-Dateien dazwischen den HTML-Baum verändern könnten.



Beispiel (besser aber noch immer schlecht):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
<script type="text/javascript" src="scriptfile1.js" />
<script type="text/javascript" src="scriptfile2.js" />
</head>

In diesem Beispiel kann man schon mal 100ms einsparen, jedoch können Javascript-Daten nicht parallel heruntergeladen werden…



Beispiel (auch schlecht):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<script type="text/javascript" > document.write("Hello world!");</script>
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
</head>

Zuerst wird die Ausführung des Inline-Style-Befehls durch stylesheet1.css verzögert. Anschließend verhindert die Inline-Anweisung wiederum, dass die Stylesheets parallel heruntergeladen werden können.


Beispiel (gut):

<head>
<link rel="stylesheet" type="text/css" href="stylesheet1.css" />
<link rel="stylesheet" type="text/css" href="stylesheet2.css" />
<link rel="stylesheet" type="text/css" href="stylesheet3.css" />
<script type="text/javascript" > document.write("Hello world!");</script>
</head>


Zuerst alle externen Ressourcen einbinden. Alle werden parallel heruntergeladen. Anschließend das Inline-Script. Natürlich sollte das JavaScript möglichst weit unten in den Body stehen, da es genauso das laden von Bildern verzögert.


weitere derartige Beispiele:
code.google.com


Mit folgendem Code können auch JavaScript-Daten parallel geladen werden. Einfach das Array anpassen und fertig…

<script type="text/javascript"> (function() {
var s = [
"/javascripts/script1.js",
"/javascripts/script2.js",
"/javascripts/script3.js",
"/javascripts/script4.js",
"/javascripts/script5.js"
];
var sc = "script", tp = "text/javascript", sa = "setAttribute", doc = document, ua = window.navigator.userAgent;
for(var i=0, l=s.length; i<l; ++i) {
if(ua.indexOf("MSIE")!==-1 || ua.indexOf("WebKit")!==-1) {
doc.writeln("<" + sc + " type="" + tp + "" src="" + s[i] + "" defer></" + sc + "<");
t[sa]("src", s[i]);
t[sa]("type", tp);
doc.getElementsByTagName("head")[0].appendChild(t);
} else {
var t=doc.createElement(sc);
t.setAttribute("src", s[i]);
t.setAttribute("type", tp);
doc.getElementsByTagName("head")[0].appendChild(t);
}
}
})();
</script>


Außerdem könnte man JavaScript Dateien dynamisch nachladen, so dass diese nur geladen werden wenn man diese auch braucht.

Include ("com.iskitz.ajile.examples.IncludeExample");
function testInclude()
{
if("undefined" != typeof com.iskitz.ajile.examples)
if("undefined" != typeof com.iskitz.ajile.examples.IncludeExample)
com.iskitz.ajile.examples.IncludeExample();
else alert( "Include test was unsuccessful :(nn"
+ "Failed to Include [ com.iskitz.ajile.examples.IncludeExample.js ]");
}
/** InludeExample.js: **********************************************************/
Namespace ("com.iskitz.ajile.examples");
com.iskitz.ajile.examples.IncludeExample = function()
{
var wasImported = typeof window["IncludeExample"] != "undefined";
alert( "[ com.iskitz.ajile.examples.IncludeExample ] was "
+ (wasImported ? "Included *and* Imported." : "successfully Included!"));
};

weitere derartige Beispiele:
ajile.iskitz.com


Tipps:

  • alle CSS-Datei per link-tag im Header-Bereich direkt hintereinander schreiben
  • alle Script-Tags direkt vor Body-Bereich (wenn möglich)
  • möglichst keine JS-Anweisungen (inline oder extern) zwischen CSS-Dateien setzen
  • keine JS-Inline-Anweisungen zwischen mehreren Referenzierungen auf JS-Dateien
  • JS-Inline-Anweisungen vermeiden, da diese vom Browser nicht als Datei zwischengespeichert werden können

Software Updates

Updates sind in der heutigen Zeit sehr wichtig, da so sicherheitsrelevante Dinge wie Online-Banking, eBay, Passwörter oder unverschlüsselte Persönliche Daten, meist auf demselben Computer liegen, wo wir auch chaten, telefonieren, Filme schauen und vielen mehr. Eine klein (böse) Sicherheitslücke im Firefox, Flash, ICQ oder sonst wo, kann somit schon schwerwiegende Folgen haben, daher hier einige Webseiten und Programme womit Ihr euren Windows-PC auf den neusten Stand halten könnt.

Update-Tool:

1. SUMo


 SUMo
SUMo


Sehr Übersichtlich und leicht zu bedienen, zudem findet es viel Updates.

2.) Filehippo.com – UpdateChecker


Filehippo.com - UpdateChecker
Filehippo.com - UpdateChecker


Das Programm ist sehr klein und prüft das System schnell, jedoch hat es bei mir nicht alle anstehenden Updates gefunden, es reicht jedoch aus, um die Standart-Programme (Firefox, Adobe Flash Player, Apple QuickTime…) zu überprüfen.

3.) Software.Informer


Software.Informer
Software.Informer


Mit eigener Community und User-Webseite, wo die verfügbaren Updates zusätzlich angezeigt/verwalte werden können.

4.) Secunia Personal Software Inspector (PSI)

 


Secunia Personal Software Inspector (PSI)
Secunia Personal Software Inspector (PSI)


Sehr Umfangreiches Programm, welches bei mir relativ lange gebraucht hat, bis es die Festplatte komplett durchsucht hat und leider nicht sofort Funktioniert hat, da dieses Programm nicht hinter einem Proxy verwendet werden kann.

Hier noch einige Webseiten, auf denen neue Updates veröffentlicht werden:

winfuture.de – only for Windows

filehippo.com – only for Windows (sehr Übersichtlich)

computerbase.de – for Windows, Linux and Mac OS X

heise.de – for Windows, Linux and Mac OS X

pro-linux.de – sehr umfangreiches Archiv und sehr aktuell

Wem das alles zu kompliziert und/oder zu unsicher ist, sollte sich, falls dies noch nicht geschehen ist, “Ubuntu” ansehen. Da können Updates für das System und für alle installierten Programme automatisch installiert werden, ohne diese einzeln herunterladen zu müssen. :-)

Postfix: E-Mails weiterleiten

Da ich momentan noch eine dynamische IP-Adresse zu-hause habe und somit keine E-Mails direkt verschicken kann, jedoch meine E-Mails welche von intern verschickt werden mit meiner Astaro-Firewall transparent auf Viren scanne, diese somit abgefangen werden und daher an einen anderen Mail-Server weiterleiten muss müssen, habe ich meinen entsprechenden Mail-Server, welche diese E-Mails erhält, so konfiguriert das alle E-Mails welche nicht intern zugestellt werden können, zum Relayhost weitergeleitet werden.

1.) als erstes müssen wir die Postfix-Konfiguration ein wenig anpassen

vim /etc/postfix/main.cf

[…]
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/saslpasswd
smtp_always_send_ehlo = yes
relayhost = smtp.deinProvider.de
[…]

“smtp.deinProvider.de” muss natürlich durch den DNS-Namen bzw. IP-Adresse ersetzt werden, zu der du die E-Mails schicken willst, bzw. welcher diese annimmt.

falls du die Mails an einen bestimmten Port weiterleiten musst,
Z.B. weil dein Provider die Authentifiezierung nur auf Port 587 zulasst, kannst du dies wie folgt bewerkstelligen.

relayhost = [smtp.deinProvider.de]:587

2.) nun müssen wir den entsprechenden Benutzernamen und das Passwort hinterlegen

wie bereits soeben in der Konfiguration angegeben hinterlegen wir den entsprechenden Benutzernamen und das Passwort an folgender Stelle…

vim /etc/postfix/saslpasswd

smtp.deinProvider.de Benutzernamen:Passwort

… mehr als diese eine Zeile muss/darf nicht in der Datei stehen.

3.) Hash /etc/postfix/saslpasswd

nun müssen wir die Datei noch kurz für Postfix vorbereiten

postmap /etc/postfix/saslpasswd

Postfix noch fix neu-starten und schon kannst du deine E-Mails auch von zu-hause aus verschicken.

/etc/init.d/postfix restart

Google startet Browser-Größen-Tool

Google startet Browser-Größen-Tool, damit wir sehen können, wie andere unserer Webseite sehen.

Da ich das Teil auch nicht auf Anhieb verstanden habe, starte ich einfach mal mit einem Beispiel:

Google Test Bild
Google Test Bild

Wie man erkennen kann, können 20% (100% – 80% = 20%) der Besucher meine Buttons nicht sehen. :(

Google:
For example, on the download page for Google Earth, the install rate increased by 10% when we moved the “Download” button 100 pixels upward. We can attribute that increase to users who wanted to try out Google Earth, but didn’t see the button before.

Link:
browsersize.googlelabs.com

Konvertiere Ext3 zu Ext4

Falls du dein Ubuntu nicht ständig neu installierst, sondern ein dist-upgrade ausführst, dann kannst du nicht alle neue Funktionen der neuen Ubuntu-Version nutzen, daher dieses HowTo, um dein ext3-Dateisystem zu einem ext4-Dateisystem zu konvertieren.

Bitte beachte, dass dieser Schritt nicht nötig ist und bevor du beginnst, werfe einen Blick auf die bekannten Probleme mit ext4!

1.) Upgrade als erstes dein Ubuntu mindestens zu Jaunty.

2.) Erstelle eine Sicherungskopie aller Ihrer (wichtige) Daten.

3.) Starte von einer (>= jaunty) Live-CD …

deine Partitionen kannst du wie folgt anzeigen lassen

cat /proc/partitions

sd[ a-z ][ 1-9 ] -> muss natürlich an dein System angepasst werden

… und führe die folgenden Befehle aus.

sudo bash
tune2fs -O extents,uninit_bg,dir_index /dev/sda1
e2fsck -fpDC0 /dev/sd[ a-z ][ 1-9 ]

4.) Mounte die entsprechende Partition…

mount -t ext4 /dev/sd[ a-z ][ 1-9 ] /mnt

… und ändere deine fstab …

vim /mnt/etc/fstab

Wandel “ext3″ in “ext4″ wie in dem folgenden Beispiel:

/dev/sda1UUID=XXXX / ext3 relatime,errors=remount-ro 0 1

wird zu:

/dev/sda1UUID=XXXX / ext4 relatime,errors=remount-ro 0 1

Nun speichern wir noch schnell die Änderungen und beenden den Editor. (wq)

5.) Grub – Boot-Loader aktualisieren

Es kann sein, dass beim booten nun ein (tödlichen) Fehler 13 auftaucht, daher verwenden wir folgenden Befehl, um grub zu aktualisieren.

Wenn du nicht über eine separate / boot-Partition verfügst, dann z.B.:

mount /dev/sda1 /mnt
grub-install /dev/sda --root-directory=/mnt --recheck

Wenn du eine separate / boot-Partition hast, dann z.B.:

mkdir /mnt/boot
mount /dev/sda1 /mnt/bootgrub-install
/dev/sda --root-directory=/mnt --recheck

Nach einem Neustart läuft dein System nun mit einem Ext4-Dateisystem, jedoch können nur alle neuen geschriebenen Dateien von diesem profitieren, da die alten Dateien auf die Festplatte geschrieben wurden, als die ext3-Technologie lief.

Link:
ext4.wiki.kernel.org

Systeminfos anzeigen lassen

Wer seinem Linux (als Beispiel dient hier Debian) Informationen zur Hardware entlocken möchte, kann dies unter-anderem mit den folgenden Kommandos machen.

1.) Allgemeine Hardware-Infos

dmidecode ist ein Tool um das DMI (SMBIOS) eines Computers ausliest, es wird eine Tabelle erzeugt, in welche eine Beschreibung der Hardware Komponenten deines PC aufgeführt wird… z.B. Informationen wie Serien-Nummern und BIOS Version.

aptitude install dmidecode
dmidecode | less

Alternativ wäre hier auch noch lshw bzw. hwinfo zu erwähnen, diese beiden Programme zeigt eine Hardware Liste deines PC/Servers an.

aptitude install lshw
lshw | less

bzw. mittels w3m anzeigen lassen

lshw -html | w3m -T text/html
lshw -short | less


H/W path Device Class Description
====================================================
system A7N8X2.0
/0 bus A7N8X2.0
/0/0 memory 64KiB BIOS
/0/4 processor AMD Athlon(tm) XP 2600+
/0/4/9 memory 128KiB L1 cache
/0/4/a memory 512KiB L2 cache
/0/26 memory 2560MiB System Memory
[...]

aptitude install hwinfo
hwinfo | less
hwinfo --short | less


cpu:
AMD Athlon(tm) XP 2600+, 1921 MHz

keyboard:
/dev/input/event0 AT Translated Set 2 keyboard

graphics card:
ATI RV280 5c63

sound:
ASUSTeK nForce2 AC97 Audio Controler (MCP)

storage:
nVidia nForce2 IDE

network:
eth0 nVidia nForce2 Ethernet Controller
eth1 Realtek RT8139

[…]

Des-weitern können wir mittels lm-sensors die Lüfter-Geschwindigkeit (RPM), die Temperatur (°C) und die Spannung (V) anliegt ausgelesen werden.

Wie immer installiern wir als erstes das entsprechende Programm…

aptitude install lm-sensors

nun einmal den folgenden Befehl ausführen um nach den Sensoren auf dem Motherboad usw. zu suchen ->

sensors-detect

nun können wir uns die gewünschten Informationen ausgeben lassen ->

sensors

Adapter: SMBus nForce2 adapter at 5500
[...]
in6: +3.07 V (min = +0.00 V, max = +0.00 V)
fan1: 4299 RPM (min = 112500 RPM, div = 2)
fan2: 0 RPM (min = 10546 RPM, div = 2)
fan3: 0 RPM (min = -1 RPM, div = 2)
temp1: +31.0°C (high = +80.0°C, hyst = +75.0°C)
temp2: +28.0°C (high = +80.0°C, hyst = +75.0°C)
temp3: -0.5°C (high = +80.0°C, hyst = +75.0°C)
temp4: +25.0°C (high = +80.0°C, hyst = +75.0°C)
[...]

2.) Arbeitsspeicher (RAM)

Mit dem folgenden Kommando, werden die Informationen zu den “Memory Module” angezeigt ->

sudo dmidecode --type 6

bzw.

sudo dmidecode --type 17

Alternativ kann man sich die Infos auch mit lshw anzeigen lassen, dafür müssen wir als erst-einmal, wir zuvor Beschrieben, dass entsprechende Paket installieren und dann die entsprechenden Infos zum RAM anzeigen lassen ->

lshw -class memory

einige Infos über den aktuellen Speicherverbrauch kann man mit folgenden Kommando in Erfahrung bringen ->

cat /proc/meminfo

bzw.

free -mt

3.) PCI Hardware-Infos

lspci zeigt eine Liste mit allen PCI Geräten an. (z.B. Grafikkarte, Soundkarte, Netzwerkkarte…)

aptitude install pciutils
lspci

folgendes Kommando zeigt deine Soundkarte an ->

lspci | grep

folgendes Kommando zeigt deine Grafikkarte an ->

lspci | grep VGA

folgendes Kommando zeigt deine Netzwerkkarte an ->

lspci | grep Ethernet

4.) CPU Hardware-Infos

Folgende zeigt Infos zur CPU an (z.B. Beschreibung, Version, MHZ, FSB…)

lshw -class cpu

bzw.

cat /proc/cpuinfo

und dies die Auslastung (load) der CPU

cat /proc/loadavg

bzw.

top

5.) Festplatten Hardware-Infos

Folgendes Kommando zeigt alle Partitionen an

cat /proc/partitions

bzw.

fdisk -l

und mit dem nächsten Befehl kannst du mittels S.M.A.R.T. herausfinden, ob es deiner Festplatte gut geht, oder ob du diese baldmöglichst austauschen solltest. (die SMART Unterstützung muss im BIOS aktiviert werden)

Als erstes installieren wir dies einmal…

aptitude install smartmontools

… dann Kommentieren wir alles mit “#” in der folgenden Datei aus, so dass der Daemon nicht automatisch gestartet wird.

vim /etc/default/smartmontools

folgendes zeigt alle Infos zu einer Festplatte an ->

smartctl --all /dev/h(s)da

zeigt nur an, ob die Festplatte noch OK ist ->

smartctl -H /dev/h(s)da

und dies zeigt Festplatten-Infos an (z.B. Model, Seriennummer, Firmware…)

smartctl -i /dev/h(s)da