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.

Lighttpd logrotate

Ik heb recent wat aanpassingen gedaan aan de logrotate. Dit om het maken van statistieken voor de website wat makkelijker te maken.

Helaas is er iets foutgegaan, afgelopen nacht heeft om 00:02 de logrotate zijn werk gedaan. Ik had echter een regel vergeten terug te voeren die lighttpd zou moeten stoppen en de rechten van de access.log werden niet voor user/group www-data aangemaakt maar voor root. Hierdoor mis ik de statistieken van 00:02 t/m 10:47

Uitvoeren snelheidstest

Zoals in mijn vorige snelheidsbericht te lezen valt heb ik een aanbod gekregen om mijn snelheid te bepalen met een door Henk van de Kamer beschikbaar gestelde server.

Op 17 juni kreeg ik van Henk dan ook een leuk mailtje, de logingegevens voor de testserver zat er namelijk in. Het gaat hier om een virtuele machine die op een Strato rootserver draait. Meer informatie over deze server vindt je hier.

Als eerste zal ik de login gemakkelijk maken door een aantal zaken te regelen. Ik maak volgens deze beschrijving een configuratiebestand aan voor ssh waardoor ik geen loginnaam en ip-adres meer hoef te onthouden. Hierin voer ik de volgende gegevens in:

host=Armorica
hostname=ve120.armorica.tk
port=12022
User=root

Hiermee kan ik in elk geval een eerste login doen:

tecumseh@Athlan:~$ ssh Armorica
The authenticity of host '[ve120.armorica.tk]:12022 ([85.214.61.55]:12022)' can't be established.
RSA key fingerprint is 80:76:12:8b:1c:95:ee:b8:3b:71:b0:18:be:d7:7b:a5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[ve120.armorica.tk]:12022,[85.214.61.55]:12022' (RSA) to the list of known hosts.
tecumseh@ve120.armorica.tk's password:
Linux ve120.armorica.tk 2.6.18-openvz-amd64-k8 #1 Fri Mar 14 12:52:28 CET 2008 x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
ve120:~#

Vervolgens kan ik een publieke en persoonlijke sleutel aanmaken zoals ik al eerder heb gedaan. Nu is het best leuk dat ik de commando’s handmatig invoer maar dan moet je natuurlijk geen typefout maken. Zoals je hier kan lezen kwam ik een dag later achter de oorzaak van het probleem.

Nog even een laatste toevoeging doen aan ~/.ssh/config en dat is de parameter IdentityFile, die laat ik wijzen naar mijn prive sleutel waardoor ik helemaal geen invoer hoef te doen om op de testserver in te loggen.

Awstats logging

Nu draait dit blog al wel een paar maanden maar nog steeds heb ik de statistieken niet voor elkaar. Het wordt hoog tijd om daar verandering in aan te brengen. De keuze is voor mij gevallen op AWStats. Deels omdat ik hier in mijn Freesco verleden al mee gewerkt heb. Deze keer ga ik het echter niet als actieve CGI pagina installeren, de statistieken moeten dagelijks in de nachtelijke uren geupdate gaan worden waarna de statische pagina’s beschikbaar komen op de webserver.

Als eerste Awstats en de geoip plugin installeren vanuit de Debian archieven:

Arkon:~# aptitude install awstats libgeo-ipfree-perl

De configuratie heb ik in de eerste instantie vrij grof gedaan. Simpelweg de basisconfiguratie geconfigureerd naar een apart bestand voor dit domein, dat werdt dus awstats.tecumseh.homeip.net.conf. Hierin de juiste variabelen aanpassen en kijken of ik een statische pagina aanmaken kan.

Ik kom er achter dat de bestanden niet allemaal op dezelfde plek staat. Eerst dus maar zorgen dat het script om de statische pagina’s te maken op dezelfde plaats aangeroepen kan worden als het hoofdscript van awstats:

Arkon:/usr/lib/cgi-bin# ln -s /usr/share/doc/awstats/examples/awstats_buildstaticpages.pl awstats_buildstaticpages.pl

Hierna kan ik een update uitvoeren en een set statische pagina’s aanmaken, dit moet straks vanuit een bash script gedaan worden:

Arkon:~$ /usr/lib/cgi-bin/awstats.pl -config=tecumseh.homeip.net -update
Arkon:~$ /usr/lib/cgi-bin/awstats_buildstaticpages.pl -awstatsprog=/usr/lib/cgi-bin/awstats.pl -config=tecumseh.homeip.net -year=2008 -month=06 -dir=~/awstats/200806

Dit werkt in elk geval, ik krijg statistieken maar het is allemaal wel heel kaal. De icoontjes worden niet gevonden. Deze dus maar aanmaken via een symlink:

Arkon:~/tecumseh.homeip.net/awstats$ ln -s /usr/share/awstats/icon/ icon

Zorg er trouwens wel voor dat de locatie van de icoontjes in de configuratiebestanden aangepast wordt naar deze locatie.

Nu nog even een opschoning doen in het configuratiebestand. Ik wil hier niets meer in hebben staat wat ook in een algemeen configuratiebestand kan staan. We kopieren awstats.conf dus naar awstats.conf.local, hiermee zorgen we ervoor dat er bij een update van het pakket de originele configuratie niet verloren gaat. In dit bestand commenten we een aantal regels die we per domein apart in willen stellen, die regels laten we dus terugkomen in aparte configuratiebestanden:

LogFile="/var/log/lighttpd/access.log"
SiteDomain="tecumseh.homeip.net"
DirData="/var/lib/awstats"
DefaultFile="index.php"
SkipFiles="REGEX[^\/phpmyadmin] REGEX[^\/postfixadmin]"
NotPageList="css js class gif jpg jpeg png bmp ico swf"
MiscTrackerUrl="/js/awstats_misc_tracker.js"
DetailedReportsOnNewWindows=0
LoadPlugin="geoipfree"
Include "/etc/awstats/awstats.conf.local"

Als we nu de statistieken opnieuw aanmaken dan krijgen we ineens de volgende regel bovenaan de pagina te staan:

Warning: Perl versions before 5.6 cannot handle nested includes

Na lang zoeken kwam ik erachter dat ik een fout gemaakt heb in de configuratiebestanden. Het probleem bleek te zitten in awstats.conf.local, deze verwees namelijk naar zichzelf in de laatste regel aangezien dit een kopie is van awstats.conf, door deze regel te commenten verdwijnt de foutmelding.

Nu kunnen we de domeinconfiguratiebestanden copieren en per domein aanpassen.

Als ik vervolgens bij een domein wat ik tot nu toe enkel nog voor testdoeleinden gebruikt heb de statistieken bekijk dan zijn die verdacht gelijk aan mijn hoofdaccount. Ik kan me niet voorstellen dat dit de bedoeling is.

Ik heb namelijk LogFormat op 1 staan, wat de volgende zoekstring opleverd:

# LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

Het 2e veld %other is echter de naam van de virtualhost, als ik het format verander naar:

LogFormat = "%host %virtualname %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"

Dan krijg ik de statistieken wel bij de site waar ze thuishoren.

Er staat nog wel het een en ander op het programma, dit is nog verre van volmaakt.

  • Logrotate aanpassen waardoor ik logbestanden per maand heb.
  • Script maken voor automatische verwerking
  • Statistieken in de site verwerken, deze site publiek en de overige achter een wachtwoord
  • Extra statistieken actief maken door het gebruik te maken van awstats_misc_tracker.js

Nu heb ik voor bovenstaande items wel wat leesvoer gevonden, dit is echter op apache geschreven en ik heb een lighttpd server.

Wordt vervolgt dus.

Snelheidstest glasvezel

Ik heb het in diverse posts al gehad over de snelheid van mijn glasvezelverbinding. Nu is er nog geen test uitgevoerd die voldoende data gebruikt heeft om betrouwbare resultaten te geven. In het laatste glasvezel topic bied Henk aan om een Strato testserver te mogen gebruiken om mijn snelheid op wetenschappelijke wijze te bepalen.

Voor het wetenschappelijke verhaal heb ik een stukje in de mail gekregen van Henk:

> Ik wil dus nog uitzoeken of je met behulp van een script
> snelheidswaarde’s kunt meten op meerdere momenten tijdens een grote
> upload. Ik ga daarbij aannemen dat de 1e 20% van een upload niet
> representatief is. Wellicht heb jij daar nog ideeën over.

Dit klinkt heel goed. Alleen gaat die handshake en window scaling vrij snel, ofwel de eerste 20% gaat wat ver. Zelf neem ik altijd een bestand dat minimaal een minuut kost. Je moet namelijk aannemen dat de gemeten tijdsduur ± 1 seconde is. Ofwel als jij 120 MiB weet te uploaden in een minuut kom je uit op:

120 / 59 = 2,03
120 / 61 = 1,97

Je ziet dat allebei afgerond kan worden op 2,0 MiB/s ofwel één cijfer achter de komma en dat is goed genoeg voor dit soort testen.

Als je snelheid een heel stuk meer is, wordt één minuut mogelijk al te weinig:

240 / 59 = 4,07
240 / 61 = 3,93

Kortom je moet dus zoveel data gebruiken dat met de gevonden tijd een nauwkeurig uitspraak is te doen…

Aangezien mijn theoretische snelheid op 35 mbit zit volgens Concepts ICT heb ik een snelheid van:

35 / 8 = 4,375 MiB/s

Een test die een duur heeft tussen de 1,5 en 2 minuten heeft dus een bestand nodig van minimaal 393,75 MiB (90 * 4,375) en maximaal 525 MiB (120 * 4,375). Aangezien het TCP/IP protocol een verlies van zo’n 10% heeft neem ik de laagste waarde en rond die iets naar boven af en zo kom ik uit op een testbestand van 400 MiB. Deze maak ik dan ook aan:

Arkon:~/test# dd if=/dev/zero of=400MB.test bs=1M count=400
400+0 records in
400+0 records out
419430400 bytes (419 MB) copied, 28.3245 seconds, 14.8 MB/s

Om zeker te zijn dat mijn machine’s de test wel volledig uit kunnen voeren zal ik de test eerst uitvoeren tussen mijn server Arkon en mijn werkstation. Als ik daarmee niet boven de 4,5 MiB/s uitkom dan heeft het verder testen geeneens nut.

Voor het testen maak ik gebruik van een bash script. Na lang zoeken heb ik er een gevonden, zo’n ster ben ik nog niet in het zelf bedenken van scripts. Wel heb ik hierin ondertussen de sed regel gecomment en uiteraard de variabelen aangepast. Er werdt me wel heel veel weggelaten, zoals bijvoorbeeld de snelheid. En daar gaat het uiteindelijk om.

***FTP SERVER UPLOAD SPEED***

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
Using binary mode to transfer files.
331 User tecumseh OK. Password required
200 TYPE is now 8-bit binary
local: 400MB.test remote: 400MB.test
226-File successfully transferred
226 39.745 seconds (measured here), 10.06 Mbytes per second
419430400 bytes sent in 39.73 secs (10308.5 kB/s)
221 Logout.

***FTP SERVER DOWNLOAD SPEED***

220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
Using binary mode to transfer files.
331 User tecumseh OK. Password required
200 TYPE is now 8-bit binary
local: 400MB.test remote: 400MB.test
226-File successfully transferred
226 48.714 seconds (measured here), 8.21 Mbytes per second
419430400 bytes received in 48.21 secs (8495.7 kB/s)
221 Logout.

Ruim 10 MiB/s voor de upload en ruim 8 MiB/s voor de download. Dit ligt ruim 2x boven de hierboven genoemde theoretische snelheid van mijn verbinding. De systemen hier kunnen het dus aan.

MySQL Backup

Ik loop al een tijdje achter met het automatisch correct afhandelen van de backup. Ik heb wel een backup script draaiende maar die functioneerd nog niet naar wens. Eigenlijk wil ik namelijk een dagelijkse, wekelijkse en maandelijkse backup hebben van elke database apart. Het liefst ook nog met de mogelijkheid om de backup extern op te slaan.

Aangezien ik nog maar net begin met het schrijven van bash-scripts ben ik dus een zoektocht begonnen. En daarmee is meteen de kans een stuk groter dat je een script vindt dat heel dicht bij je wensen in de buurt komt. En dat is Automatic MySQL Backup geworden.

Als eerste nog even een aparte database user aanmaken die enkel select rechten heeft:

CREATE USER 'mysqlbackupuser'@'localhost' IDENTIFIED BY '************';

GRANT SELECT ON * . *
TO 'mysqlbackupuser'@'localhost'
IDENTIFIED BY '************'

De rest van de instellingen spreken voor zich, ik heb er even over zitten te denken om me elke keer de backupfiles toe te laten zenden per mail. De meest logische mailbox is dan gmail in verband met het extern opslaan. Bij nader inzien doe ik dat maar niet, je weet nooit wat google ermee zou willen en kunnen doen.

Voor het wegzetten van de backup moet ik dus nog iets anders gaan doen, hiervoor kan ik een apart script gaan gebruiken die ik in dit script aanroep:

# Command to run before backups (uncomment to use)
#PREBACKUP="/etc/mysql-backup-pre"

# Command run after backups (uncomment to use)
#POSTBACKUP="/etc/mysql-backup-post"

Ik zit er dus aan te denken om het backuppen van de gegevens op schijf (/var/www, /etc, /home) in het pre script uit te voeren en om het wegzetten van de data naar een externe locatie in het post script te verwerken.

Na een testrun zie ik dat ik de database-user nog iets meer rechten moet geven. Lock-tables is ook wel handig zodat je geen conflicterende backup krijgt:

REVOKE ALL PRIVILEGES ON * . * FROM 'mysqlbackupuser'@'localhost';

REVOKE GRANT OPTION ON * . * FROM 'mysqlbackupuser'@'localhost';

GRANT SELECT ,
LOCK TABLES ON * . *
TO 'mysqlbackupuser'@'localhost';

Hierna krijg ik na een tweede test netjes een berichtje in mijn mailbox wat me de resultaten verteld:

======================================================================
AutoMySQLBackup VER 2.5
http://sourceforge.net/projects/automysqlbackup/

Backup of Database Server - Arkon
======================================================================
Backup Start Time Fri Jun 6 13:59:17 CEST 2008
======================================================================
Daily Backup of Database ( information_schema )
Rotating last weeks Backup...

Backup Information for
/backup/mysql/daily/information_schema/information_schema_2008-06-06_13h59m.Friday.sql
         compressed        uncompressed  ratio uncompressed_name
                479                1241  66.7%
/backup/mysql/daily/information_schema/information_schema_2008-06-06_13h59m.Friday.sql
----------------------------------------------------------------------
Daily Backup of Database ( database1 )
Rotating last weeks Backup...

Backup Information for
/backup/mysql/daily/database1/database1_2008-06-06_13h59m.Friday.sql
         compressed        uncompressed  ratio uncompressed_name
             130792              669262  80.5%
/backup/mysql/daily/database1/database1_2008-06-06_13h59m.Friday.sql
----------------------------------------------------------------------
Daily Backup of Database ( database2 )
Rotating last weeks Backup...

Backup Information for
/backup/mysql/daily/database2/database2_2008-06-06_13h59m.Friday.sql
         compressed        uncompressed  ratio uncompressed_name
              43350              167174  74.1%
/backup/mysql/daily/database2/database2_2008-06-06_13h59m.Friday.sql
----------------------------------------------------------------------
Daily Backup of Database ( database3 )
Rotating last weeks Backup...

Backup Information for /backup/mysql/daily/database3/database3_2008-06-06_13h59m.Friday.sql
         compressed        uncompressed  ratio uncompressed_name
               1685                8489  80.8%
/backup/mysql/daily/database3/database3_2008-06-06_13h59m.Friday.sql
----------------------------------------------------------------------
Daily Backup of Database ( mysql )
Rotating last weeks Backup...

Backup Information for /backup/mysql/daily/mysql/mysql_2008-06-06_13h59m.Friday.sql
         compressed        uncompressed  ratio uncompressed_name
              95645              315867  69.7%
/backup/mysql/daily/mysql/mysql_2008-06-06_13h59m.Friday.sql
----------------------------------------------------------------------
Daily Backup of Database ( database4 )
Rotating last weeks Backup...

Backup Information for
/backup/mysql/daily/database4/database4_2008-06-06_13h59m.Friday.sql
         compressed        uncompressed  ratio uncompressed_name
               1014                2595  63.1%
/backup/mysql/daily/database4/database4_2008-06-06_13h59m.Friday.sql
----------------------------------------------------------------------
Daily Backup of Database ( database5 )
Rotating last weeks Backup...

Backup Information for
/backup/mysql/daily/database5/database5_2008-06-06_13h59m.Friday.sql
         compressed        uncompressed  ratio uncompressed_name
             141987              652025  78.2%
/backup/mysql/daily/database5/database5_2008-06-06_13h59m.Friday.sql
----------------------------------------------------------------------
Backup End Fri Jun 6 13:59:22 CEST 2008
======================================================================
Total disk space used for backup storage..
Size - Location
944K /backup/mysql

Ik heb in dit overzicht overigens wat bestands- en databasenamen verandert.

Nu nog even dit script in de crontab zetten en dan is ook dat weer geregeld.

ssh automatisch inloggen (2)

In een eerder bericht heb ik al gezorgd dat ik met behulp van een private key kan inloggen op verschillende servers. Ook heb ik toen een aantal alliassen aangemaakt zodat ik niet zoveel typewerk heb. Dat kan echter nog makkelijker omdat openssh daarin al voorziet in de configfiles. Je kan namelijk een naam geven aan een host en daarbij de parameters opgeven die je normaal op de commandline meegeeft. Hier kun je behoorlijk wat mee doen. Er zijn 2 mogelijke bestanden die je kunt aanpassen/bewerken. Een globale (/etc/ssh/ssh_config) of een userspecifieke (~/.ssh/config). Ik neem de laatste om mijn gegevens in te zetten, niet omdat er meerdere gebruikers zijn op mijn werksysteem maar het lijkt me wel de juiste manier.

Een mogelijke configfile:

host=host1
user=root
hostname=10.0.0.1
identityfile=~/.ssh/host1

Vervolgens kan ik inloggen met het commando ssh host1.

Je kunt trouwens elke variabele die je het commando ssh kunt geven in de configfile stoppen. Een afwijkende poort of iets dergelijks is dus ook geen probleem. Voor een overzicht zie de man-pagina

Het Lab backports

Aangezien ik bezig ben om in WordPress een gallery toe te voegen heb ik de php gd library nodig. Als ik die probeer te installeren dan schrik ik echter van de dependency’s:

Arkon:~# aptitude install php5-gd
Reading package lists... Done
Building dependency tree... Done
Reading extended state information
Initializing package states... Done
Writing extended state information... Done
Building tag database... Done
The following NEW packages will be automatically installed:
  defoma file fontconfig-config libexpat1 libfontconfig1 libfreetype6
  libft-perl libgd2-xpm libjpeg62 libpng12-0 libt1-5 libttf2 libx11-6
  libx11-data libxau6 libxdmcp6 libxpm4 ttf-dejavu x11-common
The following packages have been kept back:
  linux-image-2.6.18-6-486
The following NEW packages will be installed:
  defoma file fontconfig-config libexpat1 libfontconfig1 libfreetype6
  libft-perl libgd2-xpm libjpeg62 libpng12-0 libt1-5 libttf2 libx11-6
  libx11-data libxau6 libxdmcp6 libxpm4 php5-gd ttf-dejavu x11-common
0 packages upgraded, 20 newly installed, 0 to remove and 1 not upgraded.
Need to get 6345kB of archives. After unpacking 15.0MB will be used.
Do you want to continue? [Y/n/?] n
Abort.

Ik heb dus blijkbaar X-Windows nodig op mijn server, enkel en alleen om de webserver een plaatje te kunnen laten bewerken. Dat moet ook anders kunnen. Voor de oplettenden, er staat inderdaad ook een kernel upgrade tussen die nog uitgevoerd moet worden. Ik had het mailtje daarover al gehad.

Om een uitgeklede php5 versie te installeren kan ik op zoek gaan naar iemand die dat al gedaan heeft en dan moet ik die persoon nog vertrouwen. Gelukkig heeft Henk van de Kamer dit gedaan en vertrouw ik hem al, anders had ik niet gebruik gemaakt van zijn handleidingen voor de installatie en de bijbehorende configuratiebestanden. Als eerste even het toevoegen van zijn server aan de sources.list:

deb http://backports.armorica.tk/ etch php5

En vervolgens nog zorgen dat apt die sources vertrouwd:

Arkon:~# nano /etc/apt/sources.list
Arkon:~# wget http://backports.armorica.tk/backports.gpg
--23:43:38--  http://backports.armorica.tk/backports.gpg
           => `backports.gpg'
Resolving backports.armorica.tk... 88.198.41.48
Connecting to backports.armorica.tk|88.198.41.48|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1,336 (1.3K) [application/octet-stream]

100%[====================================>] 1,336         --.--K/s

23:43:58 (15.30 MB/s) - `backports.gpg' saved [1336/1336]

Arkon:~# apt-key add backports.gpg
OK
Arkon:~# aptitude update
Get:1 http://ftp.nl.debian.org etch Release.gpg [378B]
Hit http://ftp.nl.debian.org etch Release
Get:2 http://backports.armorica.tk etch Release.gpg [189B]
Get:3 http://backports.armorica.tk etch Release [6848B]
Get:4 http://security.debian.org etch/updates Release.gpg [189B]
Get:5 http://security.debian.org etch/updates Release [37.6kB]
Ign http://ftp.nl.debian.org etch/main Packages/DiffIndex
Hit http://ftp.nl.debian.org etch/main Packages
Get:6 http://backports.armorica.tk etch/php5 Packages [8161B]
Ign http://security.debian.org etch/updates/main Packages/DiffIndex
Hit http://security.debian.org etch/updates/main Packages
Fetched 53.3kB in 21s (2524B/s)
Reading package lists... Done

Hierna voer ik een upgrade uit om alle debian pakketten voor php5 te vervangen door zijn versie’s. Hier komt ook meteen de kernel upgrade mee:

Arkon:~# aptitude upgrade
Reading package lists... Done
Building dependency tree... Done
Reading extended state information
Initializing package states... Done
Building tag database... Done
The following packages will be upgraded:
  linux-image-2.6.18-6-486 php5-cgi php5-common php5-mysql
4 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 21.2MB of archives. After unpacking 0B will be used.
Do you want to continue? [Y/n/?] y

Na het toevoegen van de backports van Henk van de Kamer in mijn sources.list ziet de installatie er een stuk prettiger uit:

Arkon:~# aptitude install php5-gd
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:
  libfreetype6 libgd2-noxpm libjpeg62 libpng12-0
The following NEW packages will be installed:
  libfreetype6 libgd2-noxpm libjpeg62 libpng12-0 php5-gd
0 packages upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 841kB of archives. After unpacking 1982kB will be used.
Do you want to continue? [Y/n/?] y

Toch geen X11 nodig 😀

Nog even de webserver herstarten en we kunnen gebruik maken van de nieuwe library:

Arkon:~# /etc/init.d/lighttpd restart
Stopping web server: lighttpd.
Starting web server: lighttpd.

Helaas moet ik vanwege de kernel update wel even het systeem rebooten. Ik raak dus mijn mooie uptime kwijt:

Arkon:~# uptime
 00:00:49 up 96 days, 11:03,  1 user,  load average: 0.08, 0.24, 0.25