XHTML specificaties

Ik kwam op de site van Henk van de Kamer weer wat tegen, iets wat overigens al van een tijd terug is. Het gaat om een controle over correcte HTML. Nu heb ik ook een mooi XHTML 1.0 logo op de site staan maar heb hier na een 1e controle nooit meer naar omgekeken. Tijd dus om hier even verandering in aan te brengen.

Als eerste het bash script maar even aanpassen naar mijn situatie:

#!/bin/bash

let i=1
while [ $i -le 141 ]; do
wget -q -O index.htm "http://validator.w3.org/check?uri=http%3A%2F%2Ftecumseh.homeip.net%2F%3Fp%3D$i"
echo "$i is "`grep -E '^( *)\[(Valid|Invalid)\]$' index.htm | sed -re 's/.*\[(.*)\]$/\1/'` >> checked.txt
rm index.htm
sleep 15
let i=i+1
done

Hieruit volgen een aantal fouten, het merendeel is overigens correct. De meeste fouten zitten tussen de <pre> tags. WordPress negeert hier over het algemeen de opmaak, zoals het hoort overigens.

Hier een opsomming van de aanpassingen:

  • Bericht 6: Het verwijderen van een harde return lost de fout op (<hr />)
  • Bericht 10: Het vervangen van de haakjes < en > door &lt; en &gt; in het fstab stukje
  • Bericht 63: Ik heb in tussen de <pre> tags een stuk staan waarin tekstueel een smiley zit, wordpress vervangt deze maar moet er eigenlijk vanaf blijven. Ik heb er dus een punt achter gezet zodat de smiley niet geconverteerd wordt.
  • Bericht 70: In het commentaar heb ik in een reactie een stuk van mijn fstab staan, hierin moesten de tekens < en > geconverteerd worden naar &lt; en &gt;
  • Bericht 82: WordPress geeft de <img> tag een backslash op het eind, na het toevoegen van een aantal extra parameters (width, heigt en class) vindt de validator dit geen probleem mee
  • Bericht 99: Ook hier weer een aantal < en > tekens die vervangen zijn door &lt; en &gt;

WordPress file uploads

Iets wat ik tot nu toe nog niet gebruikt heb zijn de file-uploads. Nu ben ik gisteravond even bezig geweest om te controleren of mijn berichten wel Xhtml valid zijn. Ik kwam meteen al een 1e post tegen die destijds vanuit blogger overgenomen is. Hierin zat nog de afbeelding vanuit blogger, die heb ik dus maar op deze server gezet. WordPress sputterde echter nogal tegen, de juiste directory kon niet aangemaakt worden.

Het koste uiteindelijk nogal zoeken, eerst de directory rechten aangepast naar 775 en zelfs 777. De eigenaar veranderd in www-data (de gebruiker die de webserver bedient) maar ook dat mocht niet baten. Uiteindelijk heb ik in WordPress een optie gevonden die het aanmaken van subdirectory’s kan uitschakelen. Hiermee krijg ik echter alles op 1 grote hoop. Het werkt wel voorlopig maar ideaal is het dus niet.

Vandaag even verder gezocht op php safe mode, dat zou namelijk de boosdoener zijn. Dit uitschakelen lijkt me niet een goed plan maar na een stukje lezen (onvoorstelbaar hoeveel sites er eigenlijk niets over schrijven) ben ik er eindelijk uit. De safe mode beperking zorgt er namelijk voor dat een script met een bepaald uid en guid enkel bestanden aan mag maken op de webserver onder zijn eigen gebruikersnaam. De webserver maakt ze echter aan en die heeft een ander uid. De oplossing is dus dat ik de scripts (de php bestanden) van eigenaar moet veranderen. Het volstaat al om de groep te veranderen, dus:

Arkon:~/web/tecumseh.homeip.net$ chgrp -R www-data wordpress/

Na het herstellen van de wordpress optie zodat er weer subdirectory’s aangemaakt mogen worden kan ik netjes georganiseerd bestanden toevoegen.

Vervallen email adres in gebruik

Ik kom met het updaten er ook achter dat ik voor deze wordpress installatie een mailadres gebruik wat niet meer bestaat. Het is dan ook vrij rustig in de mailbox. Helaas lijdt het veranderen van het mailadres bij de gebruikersnaam niet tot het updaten van alle instantie’s hiervan. Zo blijft het oude adres bij alle commentaren staan. Dat wordt weer prutsen met SQL in phpmyadmin:

UPDATE `wordpress`.`wp_comments` SET `comment_author_email` = 'mgdijkerman@gmail.nscom' WHERE `wp_comments`.`comment_author` = "Tecumseh";

WordPress update naar 2.6.0

Recent is er een nieuwe versie van WordPress uitgekomen. De update procedure die ik nu gevolgd heb is ietswat anders verlopen. Ik heb deze keer geen patch gemaakt waarmee de verschillen in de 2 versies eruit gehaald kunnen worden. Ik kwam namelijk na de wijziging van 2.3.1 naar 2.5 een paar onhebbelijkheden tegen. Bijvoorbeeld het niet inladen van de afbeeldingen in de editor.

Ik heb dus nu bijna de lelijke manier gebruikt die WordPress zelf voorsteld. Namelijk het volledige vervangen van alle bestanden terwijl de database intact gehouden wordt. Uiteraard heb ik de wijzigingen die ik zelf gedaan heb (slechts enkele kleine dingen) wel weer doorgevoerd. Deze omschakeling heb ik niet live gedaan, ik heb de database eerst gekopieerd om vervolgens de nieuwe versie van WordPress op een ander domein neer te zetten. Deze heb ik vervolgens stukje bij beetje veranderd zodat ik geen missende onderdelen meer heb.

De grootste wijziging is het thema geweest. Niet aan de oppervlakte maar wat betreft de vertaling. Ik heb dit thema namelijk ooit van een site afgehaald wat de boel al volledig vertaald had, te volledig helaas omdat ook de variabelen en dergelijke meevertaald werden. Vervolgens heb ik de vertaalslag in een schoon thema nogmaals gedaan maar dan op de correcte manier. Althans dat dacht ik. Het blijkt namelijk dat dit thema al volledig multi-talig was. Het enige wat nodig is dat is een taalbestand voor het nederlands. Geheel in de stijl van WordPress wordt dit gedaan met gettext. Ik heb hiervoor dus de .mo en .po bestanden aangemaakt. Deze zijn hier te vinden.

De andere wijziging die ik doorgevoerd heb is het verplaatsen van de wordpress bestanden. Ik had deze voorheen in de documentroot van dit domein staan. Ik kwam er echter achter dat dit netter kan. Je kunt namelijk wordpress in een subdirectory zetten en vervolgens het index.php bestand en het configuratiebestand 1 niveau lager zetten. Je moet in index.php wel 1 klein dingetje aanpassen:

/** Loads the WordPress Environment and Template */
require('./wp-blog-header.php');

Moet worden:

/** Loads the WordPress Environment and Template */
require('./wordpress/wp-blog-header.php');

Hiermee is meteen de weg vrij om meerdere blogs vanuit 1 wordpress installatie te bedienen. Hiervoor hoef je dan enkel een symlink te plaatsen naar de algemene wordpress bestanden. Wat er dan nog overblijft is de wp-content directory waarin bijvoorbeeld de uploads geplaatst worden. Die moet ook nog verplaatst kunnen worden maar dat is voor een volgende keer.

Debian installatie op Arkon (3)

Aangezien ik geen fan ben van de browser Konqueror wil ik toch Firefox geinstalleerd hebben. Onder Debian is deze hernoemt naar Iceweasel in verband met schending van een trademark. We installeren dus Iceweasel:

Athlan:~# aptitude install iceweasel
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following NEW packages will be installed:
iceweasel libatk1.0-0{a} libatk1.0-data{a} libcairo2{a} libdatrie0{a}
libgtk2.0-0{a} libgtk2.0-bin{a} libgtk2.0-common{a} libhunspell-1.2-0{a}
libnspr4-0d{a} libnss3-1d{a} libpango1.0-0{a} libpango1.0-common{a}
libsqlite3-0{a} libthai-data{a} libthai0{a} libxp6{a} myspell-en-us{a}
x-ttcidfont-conf{a}
0 packages upgraded, 19 newly installed, 0 to remove and 0 not upgraded.
Need to get 20.3MB of archives. After unpacking 62.4MB will be used.
Do you want to continue? [Y/n/?] y

Nu zien de pagina’s er nog steeds niet geweldig uit, dit komt omdat vele websites truetype fonts gebruiken die door Microsoft zijn uitgegeven. Deze moeten we dus nog installeren:

Athlan:~# aptitude install msttcorefonts
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
No candidate version found for msttcorefonts
No candidate version found for msttcorefonts
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 0B of archives. After unpacking 0B will be used.

Helaas is er niets te installeren omdat dit pakket niet gevonden wil worden. Ik moet dus mijn sources.list uitbreiden. Momenteel heb ik enkel de main repository aanstaan, hier voeg ik contrib en non-free aan toe.

deb http://ftp.nl.debian.org/debian lenny main contrib non-free
deb-src http://ftp.nl.debian.org/debian lenny main contrib non-free

Na een aptitude update zijn er wat meer pakketten beschikbaar:

Current status: 12 updates [+12], 21841 new [+612].

Als eerste installeer ik de Truetype fonts:

Athlan:~# aptitude install msttcorefonts
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following NEW packages will be installed:
cabextract{a} msttcorefonts
0 packages upgraded, 2 newly installed, 0 to remove and 12 not upgraded.
Need to get 84.5kB of archives. After unpacking 385kB will be used.
Do you want to continue? [Y/n/?] y

Vervolgens nog een upgrade aangezien het update commando me al aangaf dat er 12 update’s vanuit de toegevoegde pakketbronnen zijn:

Athlan:~# aptitude upgrade
W: The "upgrade" command is deprecated; use "safe-upgrade" instead.
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
Resolving dependencies...
Resolving dependencies...
The following NEW packages will be installed:
xserver-xorg-video-radeonhd{a}
The following packages will be upgraded:
console-data fontconfig fontconfig-config libfontconfig1 libpaper-utils
libpaper1 login passwd x11-common xserver-xorg xserver-xorg-input-all
xserver-xorg-video-all
12 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 4496kB of archives. After unpacking 631kB will be used.
Do you want to continue? [Y/n/?] y

We zijn nu weer helemaal bij en na een herstart van Iceweasel (moet nog wel wennen aan de naam) zien een aantal site’s er een stuk beter uit. Ik zie ook dat ik toch een keer iets moet doen aan het template van mijn site. Dat moet toch ook kunnen met vrije fonts.

Debian installatie op Arkon (2)

Na het opnieuw opstarten kom ik zoals vanouds terecht in het grub menu van Kubuntu. Hier staat ook de optie Lenny en als ik die kies krijg ik een volgend grub menu. Het chainloaden werkt dus.

Na het toevoegen van een user en het zetten van een wachtwoord op het root account kan ik verder. Eigenlijk had ik dit al moeten doen voor de herstart maar dat is nu dus rechtgezet.

Als eerste maar even kijken of het internet werkt. Wellicht overbodig om hiervoor wederom een aptitude update te doen maar het werkt in elk geval:

Athlan:~# aptitude update
Hit http://ftp.nl.debian.org lenny Release.gpg
Ign http://ftp.nl.debian.org lenny/main Translation-en_US
Hit http://ftp.nl.debian.org lenny Release
Hit http://ftp.nl.debian.org lenny/main Packages/DiffIndex
Hit http://security.debian.org lenny/updates Release.gpg
Ign http://security.debian.org lenny/updates/main Translation-en_US
Hit http://ftp.nl.debian.org lenny/main Sources/DiffIndex
Hit http://security.debian.org lenny/updates Release
Ign http://security.debian.org lenny/updates/main Packages/DiffIndex
Ign http://security.debian.org lenny/updates/main Sources/DiffIndex
Hit http://security.debian.org lenny/updates/main Packages
Hit http://security.debian.org lenny/updates/main Sources
Reading package lists...

Het werken vanaf een prompt kan best interesant lijken maar voor het dagelijkse werk heb ik toch graag een grafische schil. Hiervoor installeer ik kde en daarvoor heb ik 2 pakketten nodig, kde-core en kdm om in te loggen:

Athlan:~# aptitude install kde-core kdm
Reading package lists...
Building dependency tree...
Reading state information...
Reading extended state information...
Initializing package states...
Reading task descriptions...
The following NEW packages will be installed:
  arts{a} aspell{a} aspell-en{a} avahi-daemon{a} bind9-host{a}
  console-common{a} console-data{a} cpp{a} cpp-4.3{a} dbus{a} dbus-x11{a}
  defoma{a} dictionaries-common{a} eject{a} enscript{a} esound-clients{a}
  esound-common{a} fam{a} file{a} fontconfig{a} fontconfig-config{a}
  ghostscript{a} ghostscript-x{a} gs-gpl{a} gsfonts{a} hal{a} hal-info{a}
  hicolor-icon-theme{a} htdig{a} kamera{a} kappfinder{a} kate{a} kbd{a}
  kcontrol{a} kde-core kdebase{a} kdebase-bin{a} kdebase-bin-kde3{a}
  kdebase-data{a} kdebase-kio-plugins{a} kdeeject{a} kdelibs{a}
  kdelibs-data{a} kdelibs4c2a{a} kdemultimedia-kio-plugins{a} kdepasswd{a}
  kdeprint{a} kdesktop{a} kdm kfind{a} khelpcenter{a} kicker{a} klipper{a}
  kmenuedit{a} konqueror{a} konqueror-nsplugins{a} konsole{a} kpager{a}
  kpersonalizer{a} kregexpeditor{a} ksmserver{a} ksplash{a} ksysguard{a}
  ksysguardd{a} ktip{a} kwin{a} libakode2{a} libart-2.0-2{a}
  libarts1-akode{a} libarts1c2a{a} libartsc0{a} libasound2{a}
  libaspell15{a} libaudio2{a} libaudiofile0{a} libavahi-client3{a}
  libavahi-common-data{a} libavahi-common3{a} libavahi-compat-libdnssd1{a}
  libavahi-core5{a} libavahi-qt3-1{a} libavc1394-0{a} libbind9-30{a}
  libcap1{a} libcdparanoia0{a} libcups2{a} libcupsimage2{a} libcupsys2{a}
  libdaemon0{a} libdbus-1-3{a} libdbus-glib-1-2{a} libdbus-qt-1-1c2{a}
  libdirectfb-1.0-0{a} libdirectfb-extra{a} libdns32{a} libdrm2{a}
  libesd0{a} libexif12{a} libexpat1{a} libfam0{a} libflac8{a}
  libfontconfig1{a} libfontenc1{a} libfreebob0{a} libfreetype6{a}
  libgl1-mesa-dri{a} libgl1-mesa-glx{a} libglib2.0-0{a} libglib2.0-data{a}
  libglu1-mesa{a} libgmp3c2{a} libgphoto2-2{a} libgphoto2-port0{a}
  libgs8{a} libhal-storage1{a} libhal1{a} libice6{a} libidn11{a}
  libiec61883-0{a} libilmbase6{a} libisc32{a} libisccc30{a} libisccfg30{a}
  libjack0{a} libjasper1{a} libjpeg62{a} libkcddb1{a} libkeyutils1{a}
  libkonq4{a} libkrb53{a} liblcms1{a} liblockfile1{a} libltdl3{a}
  liblua50{a} liblualib50{a} liblwres30{a} libmad0{a} libmagic1{a}
  libmng1{a} libmpfr1ldbl{a} libnss-mdns{a} libogg0{a} libopenexr6{a}
  libpaper-utils{a} libpaper1{a} libpci3{a} libpcre3{a} libpixman-1-0{a}
  libpng12-0{a} libqt3-mt{a} libraw1394-8{a} libsamplerate0{a}
  libsasl2-modules{a} libsm6{a} libsmbclient{a} libsmbios-bin{a}
  libsmbios1{a} libsmbiosxml1{a} libspeex1{a} libsplashy1{a} libsysfs2{a}
  libtiff4{a} libts-0.0-0{a} libvorbis0a{a} libvorbisenc2{a}
  libvorbisfile3{a} libx11-6{a} libx11-data{a} libx86-1{a} libxau6{a}
  libxaw7{a} libxcb-xlib0{a} libxcb1{a} libxcomposite1{a} libxcursor1{a}
  libxdamage1{a} libxdmcp6{a} libxext6{a} libxfixes3{a} libxfont1{a}
  libxft2{a} libxi6{a} libxinerama1{a} libxkbfile1{a} libxml2{a} libxmu6{a}
  libxmuu1{a} libxpm4{a} libxrandr2{a} libxrender1{a} libxslt1.1{a}
  libxss1{a} libxt6{a} libxtrap6{a} libxtst6{a} libxxf86misc1{a}
  libxxf86vm1{a} lockfile-progs{a} menu{a} menu-xdg{a} oss-compat{a}
  pciutils{a} perl{a} perl-doc{a} perl-modules{a} pm-utils{a} pmount{a}
  portmap{a} poster{a} powermgmt-base{a} psfontmgr{a} psmisc{a} psutils{a}
  radeontool{a} sgml-base{a} ttf-dejavu{a} ttf-dejavu-core{a}
  ttf-dejavu-extra{a} ucf{a} usbutils{a} uswsusp{a} vbetool{a}
  x11-common{a} x11-xkb-utils{a} x11-xserver-utils{a} xauth{a}
  xfonts-base{a} xfonts-encodings{a} xfonts-utils{a} xkb-data{a}
  xml-core{a} xserver-xorg{a} xserver-xorg-core{a}
  xserver-xorg-input-all{a} xserver-xorg-input-evdev{a}
  xserver-xorg-input-kbd{a} xserver-xorg-input-mouse{a}
  xserver-xorg-input-synaptics{a} xserver-xorg-input-wacom{a}
  xserver-xorg-video-all{a} xserver-xorg-video-apm{a}
  xserver-xorg-video-ark{a} xserver-xorg-video-ati{a}
  xserver-xorg-video-chips{a} xserver-xorg-video-cirrus{a}
  xserver-xorg-video-cyrix{a} xserver-xorg-video-dummy{a}
  xserver-xorg-video-fbdev{a} xserver-xorg-video-glint{a}
  xserver-xorg-video-i128{a} xserver-xorg-video-intel{a}
  xserver-xorg-video-mga{a} xserver-xorg-video-neomagic{a}
  xserver-xorg-video-nv{a} xserver-xorg-video-rendition{a}
  xserver-xorg-video-s3{a} xserver-xorg-video-s3virge{a}
  xserver-xorg-video-savage{a} xserver-xorg-video-siliconmotion{a}
  xserver-xorg-video-sis{a} xserver-xorg-video-sisusb{a}
  xserver-xorg-video-tdfx{a} xserver-xorg-video-tga{a}
  xserver-xorg-video-trident{a} xserver-xorg-video-tseng{a}
  xserver-xorg-video-v4l{a} xserver-xorg-video-vesa{a}
  xserver-xorg-video-vga{a} xserver-xorg-video-via{a}
  xserver-xorg-video-vmware{a} xserver-xorg-video-voodoo{a}
0 packages upgraded, 271 newly installed, 0 to remove and 0 not upgraded.
Need to get 148MB of archives. After unpacking 422MB will be used.
Do you want to continue? [Y/n/?]

271 pakketten verder kunnen we met het volgende commando dadelijk gaan inloggen:

Athlan:~# /etc/init.d/kdm start

Na het doen van een aantal instellingen start kde netjes op. Hierna krijg ik echter een aantal foutmeldingen te zien en blijft mijn panel leeg 

Stom natuurlijk, ik heb dezelfde gebruikersnaam gebruikt als in Kubuntu. Ook heb ik dezelfde home partitie aangehouden. Hiermee maak ik dus nu gebruik van de configuratie van Kubuntu en een aantal dingen zullen wel elders staan. Hopelijk gaat dat straks nog goed onder Kubuntu. Dit lossen we dus voorlopig op door een andere user aan te maken en daarmee verder te werken. Hiervoor schakel ik even over naar de commandprompt in terminal 1. Dit doe ik met de sneltoets Alt + F1.

Na het uitloggen en weer inloggen krijg ik dezelfde instellingen te doen maar verloopt de rest voorspoedig en is kde in elk geval compleet tot en met een gevuld panel aan toe.

Tijdens het dichtdoen van de cd-lade krijg ik een volgende foutmelding, de cd is niet te mounten. Na enig speurwerk kom ik erachter dat debian de cdrom niet als /dev/scd0 herkent maar als /dev/hdb. Na deze aanpassing werkt ook dat stukje.

Nu kunnen we langzaam aan de dingen die ik mis gaan toevoegen. Als het goed is werkt is stukje bij beetje een stuk minder onder Kubuntu.

Debian installatie Arkon

Aangezien ik bij Kubuntu tegen steeds meer dingen aanloop die ik zelf moet oplossen kan ik net zo goed Debian installeren. Ik heb dan niet de mix met pakketten die Kubuntu voor me uitkiest maar ook daar kan ik invloed op uitoefenen door bijvoorbeeld de testing branch te gebruiken. Maar eens kijken hoe het werkt in dualboot, ik heb hiervoor tenslotte al een paar extra partities aangemaakt. De installatie ga ik vanuit Kubuntu uitvoeren met behulp van debootstrap.

Als eerste de partitie formateren en mounten:

tecumseh@Athlan:~$ sudo mke2fs -j /dev/sda5
mke2fs 1.40.8 (13-Mar-2008)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
983040 inodes, 3931900 blocks
196595 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4026531840
120 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208

Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
tecumseh@Athlan:~$ sudo mkdir /media/sda5/
tecumseh@Athlan:~$ sudo mount /dev/sda5 /media/sda5/

Vervolgens met synaptic package manager debootstrap installeren. Hopelijk kan ik met deze versie ook direct een debian debootstrap doen.

En dat lukt ook:

tecumseh@Athlan:~$ sudo /usr/sbin/debootstrap --arch amd64 lenny /media/sda5/ ftp.nl.debian.org/debian/
I: Retrieving Release
E: unknown location ftp.nl.debian.org/debian/dists/lenny/Release
tecumseh@Athlan:~$ sudo /usr/sbin/debootstrap --arch amd64 lenny /media/sda5/

Er gaat in eerste instantie iets mis met het gebruiken van een lokale mirror, geen idee waarom aangezien ik de Release file op die locatie namelijk wel vinden kan… Maar goed, ook vanuit de USA kan ik pakketten binnenhalen. Straks stel ik apt wel in om de spullen wat dichterbij te halen.

Er wordt een berg binnengehaald en geinstalleerd, enkel het basissysteem uiteraard. Na een tijdje stopt de voortgang bij deze melding:

I: Base system installed successfully.

We kunnen dus verdergaan met de installatie.

tecumseh@Athlan:~$ sudo LANG=C chroot /media/sda5/ /bin/bash
root@Athlan:/#

Vervolgens maken we een fstab aan zodat de partitie’s en overige media gevonden kan worden:

root@Athlan:/# nano /etc/fstab
# /etc/fstab: static file system information.
#
# file system    mount point   type    options                  dump pass
proc              /proc         proc    defaults                 0    0
/dev/sda5         /             ext3    defaults                 0    1
/dev/sda7         /home         ext3    rw,nosuid,nodev          0    2
/dev/sda8         none          swap    sw                       0    0
/dev/fd0          /media/floppy auto    noauto,rw,sync,user,exec 0    0
/dev/scd0         /media/cdrom  iso9660 noauto,ro,user,exec      0    0

Na het mounten van alle mountpunten krijg ik wel een foutmelding:

root@Athlan:/# mount -a
mount: special device /dev/sda7 does not exist

Dit laat ik nog even voor wat het is, als ik straks geboot heb met deze installatie dan kijk ik wel hoe het dan gaat. Er gaat trouwens wel meer mis met het mounten, ook een kijkje wat er in /proc is geeft me een maagdelijk leeg overzicht. Die mount ik dus hier nog even handmatig en dat lukt meteen. Anders had ik deze van buiten de chroot moeten mounten.

Het instellen van de tijdszone gaat in lenny blijkbaar anders dan in etch:

root@Athlan:/# tzconfig
bash: tzconfig: command not found

Een berichtje op irc doet wonderen. Ik ben er nu achter dat er inderdaad vanaf lenny een wijziging is doorgevoerd. Ik moet nu dpkg-reconfigure gebruiken:

root@Athlan:/# dpkg-reconfigure tzdata

Current default timezone: 'Europe/Amsterdam'
Local time is now:      Wed Jul  2 21:29:27 CEST 2008.
Universal Time is now:  Wed Jul  2 19:29:27 UTC 2008.

Netwerk is ook handig om te hebben, hiervoor moeten we een aantal dingen aanpassen. Als eerste de interfaces om de netwerkkaart werkend te krijgen:

root@Athlan:/# nano /etc/network/interfaces

Met de volgende inhoud:

# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

# We always want the loopback interface.
#
auto lo
iface lo inet loopback

# To use dhcp:
#
auto eth0
iface eth0 inet dhcp

Ook de hosts file moet aangemaakt worden:

root@Athlan:/# nano /etc/hosts
127.0.0.1       localhost
127.0.1.1       Athlan

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

De oplettende lezer merkt dat ik 2 bestanden vergeten ben, namelijk resolf.conf en hostname. Nu zijn deze blijkbaar al overgenomen vanuit Kubuntu dus deze laat ik even staan. Mocht ik ze straks missen dan kan ik die alsnog instellen. De hostname verander ik nu ook nog niet aangezien ik daarmee meteen de hostname van de Kubuntu installatie meeverander.

Ook apt moet geconfigureerd worden, anders kunnen we geen pakketten installeren. We beginnen met een redelijk kale configuratie, uitbreiden kan later nog wel:

root@Athlan:/# nano /etc/apt/sources.list
deb http://ftp.nl.debian.org/debian lenny main
deb-src http://ftp.nl.debian.org/debian lenny main

deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main

Hierna kunnen we de locales installeren en instellen:

root@Athlan:/# aptitude install locales
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following NEW packages will be installed:
  locales
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 4431kB of archives. After unpacking 12.0MB will be used.
Writing extended state information... Done
Get:1 http://ftp.nl.debian.org lenny/main locales 2.7-10 [4431kB]
Fetched 4431kB in 30s (148kB/s)
Preconfiguring packages ...
Can not write log, openpty() failed (/dev/pts not mounted?)
Selecting previously deselected package locales.
(Reading database ... 7353 files and directories currently installed.)
Unpacking locales (from .../locales_2.7-10_all.deb) ...
Processing triggers for man-db ...
Can not write log, openpty() failed (/dev/pts not mounted?)
Setting up locales (2.7-10) ...
Generating locales (this might take a while)...
Generation complete.
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Writing extended state information... Done
Reading task descriptions... Done
root@Athlan:/# dpkg-reconfigure locales
Generating locales (this might take a while)...
  en_US.UTF-8... done
Generation complete.

Ik zie hier een foutmelding langskomen over /dev die incompleet zou zijn. Na een tijdje zoeken kom ik erachter dat het installeren met behulp van de etch handleiding wat problemen kan veroorzaken, ik schakel dus over naar de testing handleiding en doe de missende stap nog even over. Er is namelijk slechts een basisgedeelte van /dev gevuld, om deze aan te vullen doe ik:

root@Athlan:/dev# MAKEDEV generic

Aangezien de foutmelding slechts gaat over het niet kunnen vullen van een logbestand ga ik de locales niet nogmaals installeren.

We komen in de buurt, nu is de kernel aan bod. Als eerste maken we een configuratiebestand aan volgens de handleiding:

root@Athlan:/# nano /etc/kernel-img.conf
# Kernel image management overrides
# See kernel-img.conf(5) for details
do_symlinks = yes
relative_links = yes
do_bootloader = yes
do_bootfloppy = no
do_initrd = yes
link_in_boot = no

Hierna installeren we de kernel. Eerst maar eens kijken welke kernels er beschikbaar zijn:

root@Athlan:/# aptitude search linux-image
v   linux-image                     -
v   linux-image-2.6                 -
p   linux-image-2.6-amd64           - Linux 2.6 image on AMD64
p   linux-image-2.6.22-3-amd64      - Linux 2.6.22 image on AMD64
p   linux-image-2.6.22-3-vserver-am - Linux 2.6.22 image on AMD64
p   linux-image-2.6.24-1-amd64      - Linux 2.6.24 image on AMD64
p   linux-image-amd64               - Linux image on AMD64

Ik kies hieruit het metapakket linux-image-2.6-amd64:

root@Athlan:/# aptitude install linux-image-2.6-amd64
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following NEW packages will be installed:
  busybox{a} initramfs-tools{a} klibc-utils{a} libklibc{a} libvolume-id0{a}
  linux-image-2.6-amd64 linux-image-2.6.24-1-amd64{a} udev{a}
0 packages upgraded, 8 newly installed, 0 to remove and 0 not upgraded.
Need to get 20.5MB of archives. After unpacking 80.2MB will be used.
Do you want to continue? [Y/n/?] y

Een 32-bits kernel vindt je hier niet tussen omdat ik als arch amd64 ingegeven heb.

Nu de installatie van de bootloader nog. Ik gebruik vooralsnog de bootloader van Kubuntu nog even. Deze staat namelijk al in de MBR. In een 2e terminal pas ik hiervoor grub van Kubuntu aan. Hier zet ik het volgende erbij in /boot/grub/menu.lst:

title           Debian Lenny op sda5
root            (hd0,4)
chainloader     +1

Vervolgens installeer ik in de chroot debian installatie grub:

root@Athlan:/# aptitude install grub
Reading package lists… Done
Building dependency tree
Reading state information… Done
Reading extended state information
Initializing package states… Done
Reading task descriptions… Done
The following NEW packages will be installed:
grub grub-common{a}
0 packages upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 1115kB of archives. After unpacking 2351kB will be used.
Do you want to continue? [Y/n/?] y

Vervolgens installeer ik grub op /dev/sda5:

root@Athlan:/# grub-install /dev/sda5
Probing devices to guess BIOS drives. This may take a long time.
Searching for GRUB installation directory ... found: /boot/grub
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0)   /dev/fd0
(hd0)   /dev/sda
root@Athlan:/# update-grub
Searching for GRUB installation directory ... found: /boot/grub
Searching for default file ... found: /boot/grub/default
Testing for an existing GRUB menu.lst file ...

Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for you? (y/N) y
Searching for splash image ... none found, skipping ...
Found kernel: /boot/vmlinuz-2.6.24-1-amd64
Updating /boot/grub/menu.lst ... done

Vervolgens doen we dadelijk een reboot om te kijken of dit werkt. Daarna is het toch handig om een gui te installeren. Daarover later meer.

Uitvoeren snelheidstest (4)

Naar aanleiding van het vorige bericht heb ik maar even een hele simpele test uitgevoerd vanaf mijn servertje. Ik heb namelijk even een iso binnengehaald vanaf de debian ftp server, de nederlandse mirror uiteraard:

ftp> get debian-40r3-amd64-kde-CD-1.iso
local: debian-40r3-amd64-kde-CD-1.iso remote: debian-40r3-amd64-kde-CD-1.iso
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for debian-40r3-amd64-kde-CD-1.iso (678758400 bytes).
226 File send OK.
678758400 bytes received in 168.75 secs (3927.9 kB/s)

Ik heb trouwens het eerste stukje weggelaten, het was nog even zoeken waar de iso’s geplaatst waren. Maar het geeft in elk geval aan dat ik wat betreft de downloads de snelheid van 35 mbit/s redelijk halen kan. Dit komt namelijk neer op 35 / 8 * 1024 = 4480 KiB/s, er gaat echter nog een stukje overhead af van het TCP/IP protocol. Dit is tussen de 10% en 20%, dus tussen de 3584 KiB/s en 4032 KiB/s, de gehaalde waarde ligt rond de 12% dus dat is netjes.

Ook aan de kant van Armorica gaat het goed trouwens:

ftp> get debian-40r3-amd64-netinst.iso
local: debian-40r3-amd64-netinst.iso remote: debian-40r3-amd64-netinst.iso
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for debian-40r3-amd64-netinst.iso (151877632 bytes).
226 File send OK.
151877632 bytes received in 32.19 secs (4607.3 kB/s)

Ik heb hier wel een iets kleiner bestand binnengehaald, de nauwkeurigheid zal dus iets lager zijn maar ik mag er wel vanuit gaan dat er snelheden haalbaar zijn van boven de 4000 KiB/s.

Ik moet dus echt verder zoeken naar de oorzaak van de slechte resultaten tijdens de vorige tests.

Uitvoeren snelheidstest (3)

Het duurt nogal voordat er resultaten komen van de snelheidstesten waar ik mee bezig ben. Ik kom namelijk nog niet aan de waarde die ik hoor te hebben. Nu kan het natuurlijk best zijn dat mijn werkelijke snelheid bij lange na niet in de buurt komt van de geadverteerde snelheid. Maar ik denk eerder dat er iets misgaat bij het testen. Ik kreeg namelijk gisteravond met het installeren van OpenArena een downloadsnelheid die schommelde tussen de 3500 en 4000 KiB/s, vlak daarna heb ik nog een test uitgevoerd en die zie je onderin de volgende lijst:

Datum	Tijd	Download	Upload
18-06	16:23	2,62		1,56
18-06	21:52	0,82		0,98
18-06	22:58	1,55		1,29
18-06	23:47	2,04		1,49
19-06	0:19	2,45		1,40
19-06	6:18	2,85		1,59
19-06	9:18	2,49		1,60
19-06	12:18	2,71		1,63
19-06	15:18	2,58		1,65
19-06	18:19	2,07		1,45
20-06	0:20	1,95		1,43
20-06	6:18	2,82		1,64
21-06	0:18	2,48		1,60
21-06	6:18	2,85		1,61
25-06	22:03	1,61		1,26

De gemeten waarde’s hier zijn in MiB/s, de downloadsnelheid is hier nog niet de helft van de waarde die ik even daarvoor gehaalt heb op mijn werkstation.

Voor de volledigheid hier nog even het script wat ik gebruik om de snelheidstesten uit te voeren:

#!/bin/sh

cd ~/test
filename="400MB.test"
hostname="tecumseh.homeip.net"
username="supergeheimtestgebruiker"
password="supergeheimwachtwoord"
echo -e "***tecumseh.homeip.net Download snelheid***\n" >> speedtest.log
ftp -inv $hostname >> speedtest.log << EOF
quote USER $username
quote PASS $password
binary
put $filename
bye
EOF

echo -e "\n"
echo -e "***tecumseh.homeip.net Upload snelheid***\n" >> speedtest.log
ftp -inv $hostname >> speedtest.log << EOF
quote USER $username
quote PASS $password
binary
get $filename
bye
EOF

#REMOVE GARBAGE (REMOVE EVERY LINE EXCEPT FOR ONES CONTAINING '*' AND 'MB') FROM LOG FILE AND EMAIL IT
#sed -n -e '/*/p' -e '/MB/p' speedtest.log >> email.log
mail -s "Speed Test Results" ********@provider.nl < speedtest.log
rm speedtest.log
#rm email.log

Uiteraard zijn de logingegevens en het mailadres hier even veranderd. Zoals je ziet heb ik de sed regel weggelaten. Dit leverde nogal onverwachte resultaten op. Namelijk een bijna leeg mailtje waarin enkel de regels kwamen waarin het testbestand genoemd wordt (400MB.test)

Ik moet nu dus nog even op zoek naar een manier om uit te vogelen waar de bottleneck zit.

Uitvoeren snelheidstest (2)

Mijn idee was om de testen uit te voeren met behulp van een ftp-server. Deze moet dus geïnstalleerd worden op de Strato testserver:

ve120:~# aptitude install pure-ftpd
Reading package lists... Done
Building dependency tree... Done
Reading extended state information
Initializing package states... Done
Building tag database... Done
The following NEW packages will be automatically installed:
  libdb4.4 perl perl-doc perl-modules pure-ftpd-common
The following NEW packages will be installed:
  libdb4.4 perl perl-doc perl-modules pure-ftpd pure-ftpd-common
0 packages upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 14.7MB of archives. After unpacking 45.1MB will be used.
Do you want to continue? [Y/n/?] y

Voor het lokaal testen van de ftp server installeer ik het pakket ftp. Deze kan ik door het gebruik van aptitude na de lokale test volledig verwijderen. Dit in tegenstelling tot apt-get wat de dependency’s die meegeïnstalleerd worden niet meeneemt met het verwijderen:

ve120:~# aptitude install ftp
Reading package lists... Done
Building dependency tree... Done
Reading extended state information
Initializing package states... Done
Building tag database... Done
The following NEW packages will be automatically installed:
  libreadline5 readline-common
The following NEW packages will be installed:
  ftp libreadline5 readline-common
0 packages upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 246kB of archives. After unpacking 688kB will be used.
Do you want to continue? [Y/n/?] y

Nu ik bedenk dat ik met het pakket ftp ook lokaal testen uit kan voeren, dan zou ik de testen toch eigenlijk net zo goed vanuit de testserver naar mijn eigen server kunnen doen. In een moment van verstandsverbijstering heb ik dan ook het volgende gedaan:

ve120:/etc# aptitude remove --purge pure-ftpd
Reading package lists... Done
Building dependency tree... Done
Reading extended state information
Initializing package states... Done
Building tag database... Done
The following packages are unused and will be REMOVED:
  libdb4.4{p} perl{p} perl-doc{p} perl-modules{p} pure-ftpd-common{p}
The following packages will be REMOVED:
  pure-ftpd
0 packages upgraded, 0 newly installed, 6 to remove and 0 not upgraded.
Need to get 0B of archives. After unpacking 45.1MB will be freed.
Do you want to continue? [Y/n/?] y
ftp> open tecumseh.homeip.net
Connected to tecumseh.homeip.net.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 2 of 50 allowed.
220-Local time is now 23:39. Server port: 21.
220-This is a private system - No anonymous login
220 You will be disconnected after 15 minutes of inactivity.
Name (tecumseh.homeip.net:root): USER *
331 User USER uploadtest OK. Password required
Password:
530 Login authentication failed
Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> exit
221-Goodbye. You uploaded 0 and downloaded 0 kbytes.
221 Logout.

Op de een of andere manier kom ik dus niet eens bij mijn server. Na het uitloggen zie ik wel de volgende melding:

ftp: bind: Address already in use

Op het eerder genoemde forum van Henk noem ik ook dit probleem. Hij heeft gelukkig het probleem snel gevonden en de oplossing aangeleverd, dit is op de openvz machine doorgevoerd waardoor ik er niets meer mee hoefde te doen. Ik kwam trouwens zelf al op het idee om in plaats van actieve ftp passieve ftp te gebruiken, dit door de ftp server te starten met het commando pftp, hiermee word dus direct een passieve sessie geopend. Hierdoor zou Henk dus de module ip_nat_ftp kunnen verwijderen. Iets wat ik ook best wil testen maar ik wil eerst nog een en ander doen met de ftp-server.

In de tijd die zat tussen het melden van het probleem en de aangedragen oplossing heb ik een paar testen uitgevoerd met SCP, als eerste het versturen van tecumseh.homeip.net naar armorica.tk:

Arkon:~# scp test/400MB.test Armorica:400MB.test
root@ve120.armorica.tk's password:
400MB.test                                    100%  400MB   2.0MB/s   03:21
Arkon:~# scp -c blowfish test/400MB.test Armorica:400MB.test
root@ve120.armorica.tk's password:
400MB.test                                    100%  400MB   2.2MB/s   03:04
Arkon:~# scp -c blowfish -i ~/.ssh/Armorica test/400MB.test Armorica:400MB.test
400MB.test                                    100%  400MB   2.2MB/s   03:04

De blowfish toevoeging heb ik gedaan omdat volgens verschillende pagina’s op het internet hiermee een hogere snelheid behaalt wordt omdat de encryptie minder sterk is. Zoals je kunt zien zit hier ook daadwerkelijk een verschil van 0.2 MiB/s.

Het terughalen van dit bestand gaat ook prima:

Arkon:~# scp -c blowfish -i ~/.ssh/Armorica Armorica:400MB.test .
400MB.test                                    100%  400MB   2.2MB/s   03:06

Helaas zijn de snelheden wat magertjes, ik verwacht namelijk ongeveer het dubbele. Mijn vermoeden is dat dit aan de encryptie ligt die scp er overheen zet.

Het uitzoeken van de syntax van scp heeft me nog wel wat hoofdbrekers gekost. Deze pagina heeft me in elk geval een heel eind op weg geholpen.