Tips en Trucs 2011

Live Linux DVD

Live Linux werd Speciaal voor de cursus gemaakt (zie beschrijving hieronder) om thuis te kunnen oefenen. Live Linux kun je als iso-bestand (ca. 800 MB) downloaden. Na het downloaden moet je het iso-bestand als een DVD-image op een DVD branden. Met deze DVD kun je dan de computer opstarten en werken met openSUSE 11.4 vanaf de DVD zonder openSUSE zelf te installeren. Meer informatie vind je in de cursus (Menu - bol onderaan rechts op deze pagina -, klikken op Cursus Ontdekken, gebruiken en beheersen, klikken op Live Linux).

KIWI Image SystemKIWI Image System

Het openSUSE KIWI Image System levert een oplossing om een compleet Linux besturingssysteem in een beeld (image) voor Linux ondersteunende hardware platformen en virtuele systemen als Xen, Qemu en VMware te plaatsen. De KIWI architectuur werkt op twee niveau's. Het eerste niveau, gebaseerd op een valide softwarebron, maakt een fysieke uitbreiding (physical extend) op basis van een beschrijving (image description). Het tweede niveau zet de uitbreiding om naar een beeld van een besturingssysteem. Het resultaat van het tweede niveau noemen we een logische uitbreiding (logical extend) of kortweg een beeld.

Een gewone installatie start vanaf een softwarebron en installeert software tot het systeem compleet is. Tijdens dit proces moet de gebruiker soms tussenkomen. Een beeld van een besturingssysteem bestaat reeds uit een volledig in een bestand ingekapseld besturingssysteem dat eventueel voor een bepaalde taak werd voorgeconfigureerd. Zo'n besturingssysteem werkt vanaf het ogenblik dat het op opslagmedia wordt geplaatst, zowel op vluchtige (volatile) als niet vluchtige media. Het maken van een beeld gebeurt zonder tussenkomst van de gebruiker.

Dit betekend dat alle benodigdheden voor het ingekapselde systeem moeten voldaan zijn voor het beeld wordt aangemaakt. Deze benodigdheden worden vastgelegd in een beschrijving (image description tree) die alle informatie bevat om het beeld aan te maken.

Kenmerken

Aanleiding

Bij de cursus Linux Deel 1 krijgen de cursisten een Live Linux DVD. Dit kunnen ze gebruiken om te oefenen. De Live Linux DVD moet aan enkele voorwaarden voldoen. De Live Linux DVD moet op zoveel mogelijk pc-systemen werken. Daarnaast moet de Live Linux DVD aansluiten op het gebruikte systeem in klas. En als laatste moest ik de Live Linux DVD zelf kunnen aanpassen (taal, land, software, edm.). Dit alles vond ik bij KIWI.

Zelf een openSUSE Live Linux DVD bouwen

Om ervoor te zorgen dat de Live Linux DVD op zoveel mogelijk pc-systemen werkt, koos ik voor de architectuur x86. Dit kan eenvoudig door KIWI te installeren op een x86 systeem en daarop het beeld aan te maken. Standaard gebruikt KIWI de architectuur waarop het beeld wordt aangemaakt. M.a.w. ik ben op zoek gegaan naar een x86-systeem (VMWare Player) en heb daarop het beeld aangemaakt. Dualcore of niet speelt daarbij geen rol.

Installeer de pakketten kiwi, kiwi-config-openSUSE, kiwi-doc en kiwi-desc-isoboot. Daarbij installeert Yast de afhankelijke pakketten syslinux, kiwi-tools, clicfs, squashfs en enkele perl onderdelen. De KIWI-scripts zijn hoofdzakelijk geschreven in perl en gebruiken XML om de beschrijving van het beeld te lezen. syslinux wordt gebruikt om op te starten van een CD/DVD. squashfs en clicfs zijn bestandssystemen die compressie gebruiken om het beeld zo klein mogelijk te maken (zo past ruim 2000 MB data op een CD van 700 MB).

Nederlandstalig met AZERTY toetsenbord

Zelf een Live Linux DVD bouwen is pas noodzakelijk als je een Live Linux DVD wilt die afwijkt van degene die je kunt downloaden van de site van openSUSE. Onze Live Linux DVD moet standaard (zonder tussenkomst van de gebruiker) het azerty-toetsenbord gebruiken en alle software nederlandstalig aanbieden. Dit kan door de beeldbeschrijving als volgt aan te passen. Open als root de beeldbeschrijving in het bestand /usr/share/openSUSE-kiwi/livecd-kde/config.xml met kwrite.

Met de tags

  <preferences>
    ...
    <keytable>be-latin1</keytable>
    <locale>nl_NL</locale>
    ...
  </preferences>

in de groep <preferences> kun je het toetsenbord en de taal instellen zoals die in nederlandstalig België gebruikt worden. Indien de tags standaard niet gebruikt worden, voeg je ze toe anders pas je ze aan.

Als softwarebron gebruik ik de gedownloade openSUSE-11.3-Oss softwarebron die ik met de root-opdracht rsync -rlptDvuh --progress --chmod=Dugo+w --delete ftp5.gwdg.de::pub/opensuse/distribution/11.4/repo/oss/ /var/backup/opensuse4pinda/repos/oss/ afgehaald heb. Deze lokale softwarebron kun je met de volgende opdrachten via http beschikbaar maken:
sudo zypper install thttpd
sudo /usr/sbin/thttpd -r -d /var/backup/opensuse4snt/repos/
sudo yast2 firewall services add zone=EXT tcpport=http

Pas de repository-tags aan tot

  <repository type="yast2">
    <!--source path="http://download.opensuse.org/distribution/11.3/repo/oss/"/-->
    <source path="http://192.168.92.3/oss/"/>
  </repository>
  <repository type="rpm-md">
    <source path="http://download.opensuse.org/repositories/openSUSE:/11.4:/Live/standard/"/>
  </repository>
  <repository type="rpm-md"> 
    <!--source path="http://download.opensuse.org/update/11.4/"/-->
    <source path="http://192.168.92.3/update/"/>
  </repository>

De tweede softwarebron bevat extra pakketten die enkel nodig zijn voor live systemen. De derde softwarebron bevat de gedownloade officiële update's. Als je de softwarebronnen op het internet wilt gebruiken, gebruik je de licht grijze regels. Deze regels beginnen met <!-- en eindigen op --> waardoor het commentaar wordt en ze dus uitgeschakeld zijn. Het uitschakelen van regels door er commentaar van te maken is handig bij het testen van een aanpassing. Verander de originele regel in commentaar en plaats de aanpassing in een nieuwe regel. Als je later dan naar de originele configuratie wilt terugkeren, verwijder je de pas aangemaakte nieuwe regel en activeer je de oorspronkelijke regel door de commentaar-tekens te verwijderen. Na het opstarten van de Live Linux DVD krijg je de kans openSuSE vanaf de Live Linux DVD op de harde schijf van de computer te installeren. Na de installatie wordt bij de eerste start vanaf harde schijf direct via het internet gezocht naar eventuele updates die dan uitgevoerd kunnen worden. Zolang deze zoektocht naar updates blijft duren kan geen hardware- en/of software geïnstalleerd worden. M.a.w. even geduld.

Om alle software nederlandstalig te kunnen gebruiken ging ik ten rade bij een reeds geïnstalleerd openSUSE-systeem bij Software installeren/verwijderen. Via Beeld Talen kon ik bij de Code nl opsporen welke softwarepakketten noodzakelijk zijn om nederlandstalig te kunnen werken. Na een vergelijkende studie tussen het geïnstalleerde systeem en het beeld kwam ik tot het toevoegen van de volgende tags in de groep waar de packages staan.

    <!-- PACKAGES BEGIN -->
    <!-- Nederlands BEGIN -->
    <package name="aspell-nl"/>
    <package name="bundle-lang-common-nl"/>
    <package name="bundle-lang-kde-nl"/>
    <package name="kde4-l10n-nl"/>
    <package name="desktop-translations"/>
    <package name="OpenOffice_org-LanguageTool-nl"/>
    <package name="libreoffice-l10n-nl"/>
    <package name="translation-update-nl"/>
    <package name="yast2-trans-nl"/>
    <!-- Nederlands EINDE -->

Om ruimte te besparen voeg ik niet alleen pakketten toe, maar heb ik de taal-pakketten voor het Duits en Russisch verwijderd (in commentaar geplaatst). Daar we de ondertussen verschenen updates in de Live DVD opnemen, zijn enkele pakketten overbodig of vervangen door recentere exemplaren. Verwijder de volgende overbodig geworden pakketten:

    <!--package name="libktcore12"/-->
    <!--package name="opensuse-codecs-installer"/-->

Om een opstartbare USB-stick te kunnen aanmaken, installeer je het pakket imagewriter door de volgende regel toe te voegen:

    <package name="imagewriter"/>

Naast de beeldbeschrijving in het config.xml bestand wordt het script config.sh gebruikt om het beeld aan te maken. Om onze doelstelling te bereiken, pas je als root het script /usr/share/openSUSE-kiwi/livecd-kde/config.sh aan.

#chkconfig boot.langset on

Deze regel schakelde ik met het # uit en zorgt bij het opstarten van de Live Linux DVD voor het instellen van de taalspecifieke instellingen. Dit gaat voor de combinatie azerty-toetsenbord en Nederlands helemaal fout. Door het aanpassen van de twee volgende regels gaat het wel goed.

baseUpdateSysConfig /etc/sysconfig/keyboard KEYTABLE be-latin1.map.gz
baseUpdateSysConfig /etc/sysconfig/keyboard YAST_KEYBOARD belgian,pc104

Zelf onderdelen toevoegen

Nieuw aan Live Linux is de mogelijkheid om deze op een USB-stick te plaatsen. Live Linux wordt dan vanaf de USB-stick opgestart. Indien de USB-stick een capaciteit van minstens 2 GB heeft, gebruikt Live Linux de resterende ruimte als opslagplaats voor bestanden en instellingen (persistent). Persistente Live Linux USB-sticks worden bij de eerste start voorzien van een data-partitie, waarop bestanden en instellingen opgeslagen worden. Na deze eerste start bevat deze partitie instellingen die specifiek zijn voor de hardware waarop de Live Linux USB-stick voor de eerste maal werd gestart. M.a.w. een persistente Live Linux USB-stick werkt alleen goed op één computer. Het voordeel van de beschrijfbare Live Linux heeft als nadeel dat het de Live Linux USB-stick slechts op één toestel goed werkt. Op de site van openSUSE staat beschreven hoe je een iso-bestand op een USB-stick plaatst (ook via Windows). Daar deze bewerking nogal wat risico's inhoud (per ongeluk overschrijven van de harde schijf) heb ik een script geschreven die de procedure grafisch en veiliger laat verlopen.

De scripts plaats je in de map /usr/share/openSUSE-kiwi/livecd-kde/root/usr/local/bin/. Alle bestanden die je in de map /usr/share/openSUSE-kiwi/livecd-kde/root/ plaatst, komen in het beeld in de hoofdmap terecht. De scripts zullen dus in het beeld in de map /usr/local/bin/ staan.

#!/bin/bash
#
# Copyright (c) 2009-2011 SNT Brugge. All rights reserved.
#
# Author: Dany Pinoy <dany.p@snt-brugge.be>
#
# Create a Live USB disk
#
dialoogtitel="Live USB Flash Drive aanmaken"
if [ -d /livecd ]; then # opgestart vanaf Live Linux
	isofile=$(more /proc/mounts | grep "/livecd" | cut -d ' ' -f 1)
	password=""
else
	isofile=$(kdialog --title "Selecteer het Live ISO-bestand" --getopenfilename ~ "*.iso")
	if [ $? == "1" ]; then
		exit
	fi
	password=$(kdialog --title "$dialoogtitel" --password "Om de Live USB aan te maken, zijn root-rechten nodig.")
	if [ $? == "1" ]; then
		exit
	fi
fi
if [ /dev/$(ls -l /dev/dvd | awk '{ print $11 }') == $isofile ]; then # opgestart vanaf DVD
    for i in $(echo $password | su -c "/sbin/fdisk -l" | /usr/bin/grep "/dev/[sh]d[ab][123456789]" | /usr/bin/grep "7  HPFS/NTFS" | /usr/bin/cut -f 1 -d ' '); do
      echo $password | su -c "/bin/mkdir $(/bin/echo $i | /usr/bin/sed -e s/dev/mnt/)"
      echo $password | su -c "/bin/mount -t ntfs-3g $i $(/bin/echo $i | /usr/bin/sed -e s/dev/mnt/)"
    done
    # Aanwezige Linux-partities mounten
    for i in $(echo $password | su -c "/sbin/fdisk -l" | /usr/bin/grep "/dev/[sh]d[ab][123456789]" | /usr/bin/grep "83  Linux" | /usr/bin/cut -f 1 -d ' '); do
      echo $password | su -c "/bin/mkdir $(/bin/echo $i | /usr/bin/sed -e s/dev/mnt/)"
      echo $password | su -c "/bin/mount $i $(/bin/echo $i | /usr/bin/sed -e s/dev/mnt/)"
    done
    # Aanwezige FAT-partities mounten
    for i in $(echo $password | su -c "/sbin/fdisk -l" | /usr/bin/grep "/dev/[sh]d[ab][123456789]" | /usr/bin/grep "b  W95 FAT" | /usr/bin/cut -f 1 -d ' '); do
      echo $password | su -c "/bin/mkdir $(/bin/echo $i | /usr/bin/sed -e s/dev/mnt/)"
      echo $password | su -c "/bin/mount $i $(/bin/echo $i | /usr/bin/sed -e s/dev/mnt/)"
    done
    isofile=$(kdialog --title "Selecteer het Live ISO-bestand" --getopenfilename /mnt/ "*.iso")
    if [ $? == "1" ]; then
      exit
    fi
fi 
kdialog --title "$dialoogtitel" --msgbox "Steek de aan te maken USB Flash Drive in de computer."
sleep 3
for i in /sys/class/block/sd?; do 
  /sbin/udevadm info -a -p $i | grep -qx '    SUBSYSTEMS=="usb"' && radiolist=$radiolist${i##*/}" \""$(/sbin/udevadm info --query=property -p $i | grep ID_MODEL= | /usr/bin/cut -f 2 -d '=')"\" off "; 
done
# of
# for i in *; do 
#   [[ $(cd $i; pwd -P) = */usb*/* ]] && echo $i; 
# done
device="/dev/"$(eval kdialog --title "'Live USB Flash Drive aanmaken'" --radiolist "'Selecteer uw USB Flash Drive'" $radiolist)
if [ $? == "1" ]; then
  exit
fi

if [ $(echo $isofile | cut -c -8) == $device ]; then
  kdialog --title "$dialoogtitel" --sorry "Doel en bron zijn dezelfde USB-stick.\n\nLive USB Flash Drive aanmaken wordt afgebroken."
  exit
fi 
echo $password | su -c "/bin/umount -l $device"
kdialog --title "$dialoogtitel" --yesno "Bij het aanmaken van de Live USB Flash Drive zullen alle gegevens op de USB Flash Drive verloren gaan?\n\nWilt U nog doorgaan?"
if [ $? == "1" ]; then
  exit
fi

if [ -f $isofile] ]; then
  isogrootte=`ls -s --block-size=M $isofile | cut -f 1 -d 'M'`
else
  isogrootte=$[`echo $password | su -c "/sbin/fdisk -s $isofile"` / 1024]
fi

dbusref=$(kdialog --title "$dialoogtitel" --progressbar "Aanmaken Live USB Flash Drive op $device" $[$isogrootte / 4]) # 755 is de grootte van het iso-bestand in MB
for i in `seq 0 $[$isogrootte / 4]`; # 755 is de grootte van het iso-bestand in MB
do 
  echo $password | su -c "dd if=$isofile of=$device bs=4M seek=$i skip=$i count=1"
#  echo $password | su -c "dd if=$isofile of=/tmp/test.iso bs=4M seek=$i skip=$i count=1" # test
  qdbus $dbusref org.freedesktop.DBus.Properties.Set org.kde.kdialog.ProgressDialog value $i
done
sync
qdbus $dbusref org.kde.kdialog.ProgressDialog.close

kdialog --title "$dialoogtitel" --msgbox "De persistente (beschrijfbare) Live USB Flash Drive is klaar om gebruikt te worden."
Een Live Linux USB-stick kan niet meer gebruikt worden als een gewone USB-stick. Als je Linux definitief op de harde schijf van de computer geplaatst hebt, moet je de USB-stick aanpassen voor normaal gebruik. Dit kan met het volgende script.
#!/bin/bash
#
# Copyright (c) 2009-2011 SNT Brugge. All rights reserved.
#
# Author: Dany Pinoy <dany.p@snt-brugge.be>
#
# Wipe a Live USB disk
#
dialoogtitel="Live USB Flash Drive wissen"
if [ -d /livecd ]; then
	password=""
else
	password=$(kdialog --title "$dialoogtitel" --password "Om de Live USB te wissen, zijn root-rechten nodig.")
	if [ $? == "1" ]; then
		exit
	fi
fi
isofile=$(more /proc/mounts | grep "/livecd" | cut -d ' ' -f 1)
kdialog --title "$dialoogtitel" --msgbox "Steek de te wissen USB Flash Drive in de computer."
sleep 3
for i in /sys/class/block/sd?; do 
  /sbin/udevadm info -a -p $i | grep -qx '    SUBSYSTEMS=="usb"' && radiolist=$radiolist${i##*/}" \""$(/sbin/udevadm info --query=property -p $i | grep ID_MODEL= | /usr/bin/cut -f 2 -d '=')"\" off "; 
done
# of
# for i in *; do 
#   [[ $(cd $i; pwd -P) = */usb*/* ]] && echo $i; 
# done
device="/dev/"$(eval kdialog --title "'Live USB Flash Drive wissen'" --radiolist "'Selecteer uw USB Flash Drive'" $radiolist)
if [ $? == "1" ]; then
  exit
fi
if [ $(echo $isofile | cut -c -8) == $device ]; then
  kdialog --title "$dialoogtitel" --sorry "Live USB Flash drive wordt gebruikt.\n\nLive USB Flash Drive verwijderen wordt afgebroken."
  exit
fi 
kdialog --title "$dialoogtitel" --yesno "Bij het wissen van de Live USB Flash Drive zullen alle gegevens op de USB Flash Drive verloren gaan?\n\nWilt U nog doorgaan?"
if [ $? == "1" ]; then
  exit
fi

mount | grep $device
if [ $? == "0" ]; then
  kdialog --title "$dialoogtitel" --sorry "De te wissen USB Flash Drive is gekoppeld.\n\nLive USB Flash Drive verwijderen wordt afgebroken."
  exit
fi

dbusref=$(kdialog --title "$dialoogtitel" --progressbar "Wissen Live USB Flash Drive $device" 60)
echo $password | su -c "mkfs.vfat -I -F 32 ${device}"
qdbus $dbusref org.kde.kdialog.ProgressDialog.close

kdialog --title "$dialoogtitel" --msgbox "De Live USB Flash Drive kan nu terug als gewone USB Flash Drive gebruikt worden."

Om het starten van de scripts te vereenvoudigen, plaats ik deze in het K menu. Dit kan door de twee volgende bestanden in de map /usr/share/openSUSE-kiwi/livecd-kde/root/usr/share/applications/ te plaatsen. De in deze map geplaatste desktop-bestanden bevatten K menu items die verschijnen in de categorie Programma's > Programma's.

Het bestand /usr/share/openSUSE-kiwi/livecd-kde/root/usr/share/applications/Live USB aanmaken.desktop

[Desktop Entry]
Exec=sh /usr/local/bin/createliveusb.sh
GenericName[nl]=Live USB aanmaken
GenericName=Live USB creator
Icon=drive-removable-media-usb-pendrive
Name[nl]=Live USB aanmaken
Name=Live USB creator
Type=Application
Categories=System;Utility;Archiving;
X-SuSE-translate=true

Het bestand /usr/share/openSUSE-kiwi/livecd-kde/root/usr/share/applications/Live USB verwijderen.desktop

[Desktop Entry]
Exec=sh /usr/local/bin/wipeliveusb.sh
GenericName[nl]=Live USB verwijderen
GenericName=Live USB wiper
Icon=drive-removable-media-usb-pendrive
Name[nl]=Live USB verwijderen
Name=Live USB wiper
Type=Application
Categories=System;Utility;Archiving;
X-SuSE-translate=true

Zelf bestanden aan de Live Linux DVD toevoegen.

Voeg de bestanden toe aan het gecomprimeerde bestand /usr/share/openSUSE-kiwi/livecd-kde/config-cdroot.tgz. Dit gecomprimeerde bestand bevat alle bestanden die later uitgepakt op de root van de Live Linux DVD terechtkomen.

Het beeld aanmaken

Nu we klaar zijn met de beschrijving van het beeld kunnen we het beeld voorbereiden met de root opdrachten

rm -r /tmp/myiso
cd /usr/share/openSUSE-kiwi
kiwi --prepare ./livecd-kde --root /tmp/myiso

De eerste opdracht is enkel nodig indien je al eens een beeld hebt voorbereid. Wees geduldig.

Het iso-bestand wordt aangemaakt met de root opdracht
kiwi --create /tmp/myiso --type iso -d /tmp/myiso-result

Deze opdracht heeft eveneens tijd nodig om het iso-bestand in de map /tmp/myiso-result aan te maken. Het Live Linux systeem kun je testen door een virtuele computer (VMware Player) via het iso-bestand te starten. Een tweede test bestaat uit het branden van het iso-bestand op een DVD-schijf en deze schijf te gebruiken als opstartschijf op verschillende computers. Voor een derde test start je een computer met de Live Linux DVD en maak je een Live Linux USB-stick aan. Start daarna een computer via de pas aangemaakte Live Linux USB-stick op en controleer of deze persistent is. Persistentie kun je testen door een ander bureaublad in te stellen en de computer opnieuw vanaf de Live Linux USB-stick op te starten. De aanpassing moet de heropstart overleven. Nogmaals de opmerking: een Live Linux USB-stick werkt maar op één computer, nml. de eerste waarvan hij opstarte.

De aangepaste bestanden: Download.