DoudouLinux dev's blog

To content | To menu | To search

Wednesday 20 February 2013

Booting a DoudouLinux ISO from an USB key

The current stable version of DoudouLinux, Gondwana 1.x, requires to download a different file if you want to burn a CD or to write an USB key. Since Grub2 is now able to boot the kernel image that is contained into an ISO file, it is possible to boot a Live ISO written onto an USB key and then to only use the ISO file whatever the target support. This is of course very practical but doesn't work on Debian Squeeze Live images without a dedicated patch called findiso. We have included this patch in the latest development release, 2013-02, that will be turned into the next stable release Hyperborea 2.0 around April/May. Doing so provides several advantages:

  • Only one file to be downloaded, per language.
  • Easy system update on the USB key: just replace the ISO file with the newer one! (and update Grub parameters)
  • A single FAT partition can be preserved on the USB key, allowing the normal use of an USB key, especially on capricious systems that can only read FAT :p (do you really keep using these old-fashion systems???).
  • Ability to have several flavors of DoudouLinux on the same key, for example the stable release and the development one, or several languages.
  • Does not require to reformat the USB key and then should lead to better R/W access performances by preserving factory settings.

Of course it is better for DoudouLinux developers too since we don't need to test the USB image anymore. This also solves the issue we had with isohybrid images that don't run on every computer and also broke our persistence activation tool… So now let's see how to take benefit of this new feature :). Beware: the process to turn an ISO file into an USB live system is done from the command line! Ready?

Installing Grub2

NB: Here we are using Grub2 from a Debian system but, if you don't care about copying the kernel image and its ramdisk onto the USB key too, this should also be possible to use any other bootloader (no test ever achieved though).

You need to have Grub2 installed in your system. If not, install the corresponding package. A particularity of Grub2 is that it doesn't fit anymore on the very small 512 first bytes of a disk. It has then 2 alternatives:

  • If the first partition starts at the cylinder number 1 instead of number 0, there may be enough space after the first 512 bytes for Grub to copy all its files. As they are outside any partition, they should be preserved from any modification.
  • If there is not enough space before the first partition, Grub uses sectors in the first partition and records their position in the first 512 bytes. Of course the file system in the first partition may move these sectors without Grub knowing, this is then not 100% reliable.

If you are in the second situation and want to change to the first one, you have no other choice but reformatiing your USB disk. Grub displays a message during its installation when you are in the second situation.

So now let's install grub onto the USB key. We need to mount it and launch the Grub installation command:

$ sudo mount /dev/sdx1 /mnt/
$ sudo grub-install --force --no-floppy --root-directory=/mnt/ /dev/sdx

That's it! Take care of replacing the USB device path /dev/sdx by the actual path of your key ;).

Making the USB key bootable

(update of 2013/02/21)

Your USB key will probably not boot if you don't set its partition as active, the so-called boot flag. This operation can be quickly achieved with fdisk. First start fdisk onto your USB key:

$ sudo fdisk /dev/sdx

You should get a prompt. Type p to display information about your disk partitions:

Command (m for help): p

Disk /dev/sdh: 2 GB, 2070216704 bytes
64 heads, 62 sectors/track, 1019 cylinders
Units = cylinders of 3968 * 512 = 2031616 bytes

   Device Boot      Start         End      Blocks   Id  System 
/dev/sdh1               1        1019     2021665    b  FAT32
Command (m for help): 

As you can see, the boot flag (second column of the partition information table) is not set since there is no * sign in this column. So in the fdisk prompt, type a to activate the partition. fdisk will ask you to enter the partition number (ie. 1). You then just need to write the partition table by pressing w:

Command (m for help): a                                                   
Partition number (1-1): 1                                                 
Command (m for help): w                                                   

Copying files

You can now copy the ISO file – it takes few minutes, the Unicode font and the Grub background image:

$ sudo cp doudoulinux-2013-02-fr.iso /mnt/boot/
$ sudo cp /usr/share/grub/unicode.pf2 /mnt/boot/grub/
$ sudo mkdir /mnt/boot/grub/splash
$ wget
$ sudo mv witch-knight-grub.png /mnt/boot/grub/splash/background.png
$ sudo sync

We have chosen to put all the files into the /boot directory that Grub made, but you can choose any other directory on your USB key. The Unicode font is required if you want translated messages in the Grub splash screen. So now everything is ready to get DoudouLinux boot, except that Grub hasn't been configured…

Setting Grub2, quickly

The Grub configuration must be placed in the file “/mnt/boot/grub/grub.cfg” that does not exist yet. A very basic setting of Grub2, to start the ISO, is the following:

set timeout=5
set default=0

menuentry "DoudouLinux testing 2013-02" {
  set isofile=doudoulinux-2013-02-fr.iso
  loopback loop /boot/$isofile

  linux (loop)/live/vmlinuz findiso=boot/$isofile boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-variant=oss keyboard-options=grp:alt_shift_toggle,terminate:ctrl_alt_bksp utc=yes timezone=Europe/Paris nox11autologin quiet splash nomodeset video=uvesafb:mode_option=640x480-16,mtrr=3,scroll=ywrap persistent persistent-subtext=doudoulinux username=tux hostname=doudoulinux
  initrd (loop)/live/initrd.img

Of course isofile is the name of the ISO you want to boot, change it to fit your needs! In these settings we tell Grub to mount the ISO file so that he can access the kernel image and the ramdisk image file into it. This feature is only needed to launch the kernel with the minimalistic system in the ramdisk. This minimalistic system will then use the boot parameter findiso to find the ISO file and mount it into the final Linux system, DoudouLinux.

If you wonder how we could have written so long a boot parameter line, well, that's just the LiveCD boot line with few arguments removed or added :). To retrieve it, mount the DoudouLinux CD and look in the file “isolinux/live.cfg”. Note that you may have to change the localization parameters of this boot command for your particular use:

  • locales → your language settings
  • keyboard-layouts → your keyboard layout
  • keyboard-variant → your keyboard variant
  • keyboard-options → your keyboard options
  • utc → whether your computer clock is UTC or local time
  • timezone → your timezone

Don't forget to unmount your key:

$ sudo sync
$ sudo umount /mnt/

So now you should have a booting USB key that launches DoudouLinux, except that the Grub screen is not very nice. Let's see how to improve this.

(update of 2013/02/21) NB: once you've launched DoudouLinux on your USB key, you can use its persistence tool to make a persistence file on the USB key so that your DoudouLinux system won't loose user's work :).

Setting Grub2 for real

In the following Grub configuration file we have added:

  • language settings, to get translated Grub messages
  • video modules to show the background image
  • colors and background image
  • classes to the DoudouLinux system entry, in case you want to graphically customize this entry

This is a bit more complicated but the result is as expected: a graphical boot as early as Grub! You now have no reason to not have DoudouLinux everywhere with you since it can also be on your USB stick of everyday use :).

set lang=fr

set timeout=5
set default=0

function load_video {
  insmod vbe
  insmod vga
  insmod video_bochs
  insmod video_cirrus
  insmod png

if loadfont /boot/grub/unicode.pf2 ; then
  set gfxmode=640x480
  insmod gfxterm
terminal_output gfxterm

set locale_dir=/boot/grub/locale
insmod gettext

if background_image /boot/grub/splash/background.png; then
  set color_normal=black/black
  set color_highlight=black/white

menuentry "DoudouLinux testing 2013-02" --class doudoulinux --class gnu-linux --class gnu --class os {
  set isofile=doudoulinux-2013-02-fr.iso
  loopback loop /boot/$isofile

  linux (loop)/live/vmlinuz findiso=boot/$isofile noeject boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr keyboard-variant=oss keyboard-options=grp:alt_shift_toggle,terminate:ctrl_alt_bksp utc=yes timezone=Europe/Paris nox11autologin quiet splash nomodeset video=uvesafb:mode_option=640x480-16,mtrr=3,scroll=ywrap persistent persistent-subtext=doudoulinux username=tux hostname=doudoulinux
  initrd (loop)/live/initrd.img

Saturday 19 January 2013

DoudouLinux ISO relocalization

One issue we have with the DoudouLinux ISO images is that, since it is designed to start without any user interaction, localization parameters are preset inside the ISO and cannot be easily changed. While this can be acceptable for most language variations (eg. French from Canada and French from France do not differ that much), this can be a real issue for the keyboard layout and the timezone. Indeed, if you try to teach children the keyboard and that it outputs an Azerty layout while you only have Qwerty ones in your country, this is rather annoying… This is however the case between France (Azerty), Canada (Qwerty) and Switzerland (Qwertz) in which French is spoken. Currently the only official solution is to play with combinations of Left Alt+Shift to change between predefined CD keyboard layouts[1].

So, as we can't propose an ISO for each country and each timezone, we have created a ticket quite a long time ago about this issue[2]. The problem to solve is that localization parameters are computed at each CD boot. It is then not possible to make changes persistent without patching the Debian live tools we're using for DoudouLinux. The only solution right now is then to unpack an ISO, change whatever needed, then repack a new ISO. We are indeed lucky enough to not have to unpack the whole CD filesystem because the CD localization parameters need to be accessed during the early boot process and then are contained in the CD boot parameters. Our relocalization process is then simply the following:

  1. Unpack the ISO image
  2. Change the boot configuration file
  3. Repack the ISO image

To achieve this, we will use rsync and genisoimage from the Debian packages of the same name. So first let's “loop” mount the ISO then copy its content into an empty directory:

$ sudo mount -o loop doudoulinux-2012-10-fr.iso /mnt/
$ mkdir isofs
$ rsync -at --del /mnt/ isofs/

File copying just takes few seconds. Now we can directly edit the boot configuration file:

$ sudo nano isofs/isolinux/live.cfg

You will find inside two boot lines of the following form (it's a very long line):

append initrd=/live/initrd.img boot=live config locales=fr_FR.UTF-8 keyboard-layouts=fr,us,de keyboard-variant=oss,, keyboard-options=grp:alt_shift_toggle,lv3:ralt_switch,compose:menu,terminate:ctrl_alt_bksp notimezone nox11autologin quiet splash nomodeset video=uvesafb:mode_option=640x480-16,mtrr=3,scroll=ywrap live-media=removable  persistent persistent-subtext=doudoulinux username=tux hostname=doudoulinux  quiet

The first line is the default boot entry, the second one allows to disable any live persistence that would have been set formerly. You can change or add the following parameters:

  • locales, this is the interface language, eg. fr_FR.UTF-8
  • keyboard-layouts, self-explanatory, it can be a single layout, eg. fr, or a series, eg. fr,us,de
  • keyboard-variant if you need to use a particular variant, eg. the French variant in Canada fr-legacy
  • keyboard-options if you don't need all the stuff we added to DoudouLinux like Left Shift+Alt
  • notimezone can be replaced with a particular timezone, eg. timezone=America/Montreal
  • utc=yes sets the hardware clock to UTC, utc=no sets it to the local time

Note that if your machine is unluckily running Windows :p, you have to set the hardware clock to local time. If it runs Linux, you probably have to set it to UTC. On the other hand, if the hardware clock is the local time, preserving the setting no timezone should automatically get the correct date and time. A list of timezones can be found on Wikipedia. Concerning keyboard layouts, the answer is at the bottom of one of our README files. Finally language codes and country codes can be found on Wikipedia too.

So, for a Canadian/Québec setting, we might use the following parameters:


Now we have to recompute the MD5 checksum of the modified file since the ISO integrity can be checked using it:

$ MD5=$(md5sum isofs/isolinux/live.cfg | grep -o '^[^ ]*')
$ sudo sed -ri 's|^[^ ]+(\s+./isolinux/live.cfg)|'$MD5'\1|' isofs/md5sum.txt

And we now just have to repack the ISO:

$ TITLE=$(file doudoulinux-2012-10-fr.iso | grep -o "'[^']*'" | sed "s/'//g")
$ sudo genisoimage -o doudoulinux-2012-10-fr_CA.iso -b isolinux/isolinux.bin -c isolinux/ -no-emul-boot -boot-load-size 4 -boot-info-table -V "$TITLE" -cache-inodes -r -J -l isofs/

Of course, once the job is done, cleaning useless files is a good idea:

$ sudo rm -fr isofs/
$ sudo umount /mnt/

Here is a screenshot of the resulting environment that you can't currently get out of one of our CD's without modification:

DoudouLinux fr relocalized into fr_CA

That's it!

What we are now dreaming of is a simple set of web pages that would allow to queue such ISO customization online. Our web server would do the job of unpacking/setting/repacking using its own set of CD's and would then send an email to users for them to download the resulting ISO before it is removed to make room for other users :). Any volunteer?

PS: credits to the Linux Mint ISO relocalization tool for the source of the command lines.


[1] DoudouLinux CD's are often configured with Azerty, Qwerty and Qwertz keyboards

[2] Unfortunately our project management software is temporarily down…

Tuesday 1 May 2012

Unique-launch: launch each application once, no more

A current issue with young children is that they often click application launchers several times until the application shows. Depending on the overall system speed, this may lead to 3, 4 or 5 instances of the same application launched in the end… Although desktop environments usually change the mouse cursor while an application is being launched, this is not the case of LXDE sessions, from which advanced DoudouLinux sessions derive, and this may not be sufficient anyway because the meaning of such change is not so obvious for someone who discovers computers.

For these reasons we wanted for DoudouLinux a tool that:

  • avoids applications to be launched more than one time
  • clearly shows that the application is being launched using a notification message
  • brings focus to a previously launched application when it is launched once more, may the application be iconified or wound

To achieve this, we developed a dedicated tool named unique-launch. You can install it using its Debian package.

The result is shown in the screencast below. The user clicks several times to launch an application, but only one instance is actually launched. Later he toggles the window to its wound status (only the title bar is drawn). Clicking the application icon unwinds the application and brings focus to it. This avoids the user doesn't understand why clicking the launch icon doesn't do anything if he forgot the application has been wound.

Fichier vidéo intégré

(download in OGG format, 1.5MB)

All these improvements will be made available in our future stable release, the successor of Gondwana. In the meanwhile, dailybuilds are available for evaluation, their names are of the form doudoulinux-yyyy-mm-dd-ll.iso. We invite everyone to test and give feedback!

Sunday 22 April 2012

UI improvements: new panel design

We are still working on improving the DoudouLinux user interface (UI). The previous work has been focusing on the desktop, made of the LxLauncher tabs. Now we're focusing on the panel LxPanel for a better integration and a better user experience. Several improvements have been achieved:

  • look & feel integrated with the desktop
  • redesign of many network-manager icons because they couldn't be enlarged
  • code backported from the volume plugin to the alsavolume plugin to get a changing volume icon, depending on the volume value
  • nicer icons for the volume icon
  • fixed font size in clock, not correctly following the panel size
  • improved battery look & feel, it still requires some work though
  • the panel can now be covered by application windows

A dailybuild will be soon available in several languages to get feedback from our community. The result of this work is as follows:

New interface (2012-04)

If you're wondering what is the role of the country flag in the panel: this is the keyboard layout. Finally another screenshot with an application window:

New interface, with calculator (2012-04)

Other UI improvements are on the go and will be soon detailed in new posts :). Stay tuned!

Tuesday 17 January 2012

First “ready to use” DouDouLinux ARM™ images

Here it is, the promised DoudouLinux for Genesi Efika SmartBooks! It's a 4GB SD card image, ready to boot a DoudouLinux system built on top of Debian ARM™ Squeeze (armel flavour). This is a multi-language version of DoudouLinux (US English/French):

  • For Genesi/Efika SmartBook (armel)
  • Preconfigured for en_US/Qwerty keyboard
  • With iMX video driver
  • With GPU activated

Hare are some additional technical information:

  • root password efika
  • Genesi's Freescale source code
    • from Genesi's GIT
    • compiled by DrEagle
    • license Freescale “accepted”
  • non-free Freescale code (binary)
    • libz160 (GPU)
  • base distribution: Debian Squeeze, with the following sources
    • official Debian repositories
    • additional Debian-multimedia repository
    • custom DoudouLinux repository

You can get it from our official download pages:

If you wish to check the SHA1 sum, just issue the following command:

$ sha1sum efika-ddl-armel-ENU-gpu-4Go_20120116.img.xz
4630401386747fb2c46ef33e663795fd106bde45  efika-ddl-armel-ENU-gpu-4Go_20120116.img.xz

To build your LiveSD disk, you'll need a 4GB SD card. Then use this command:

$ xzcat efika-ddl-armel-ENU-gpu-4Go_20120116.img.xz | pv | sudo dd of=/dev/mmcblk0 bs=8192

Don't forget to replace /dev/mmcblk0 with the actual SD card device path (and please double check you're not using your internal HD!!!).

Saturday 17 December 2011

New architectures armel and armhf in our repository

Thanks to Genesi who graciously donated smartbooks to our project, porting DoudouLinux to ARM™ has started. It is then time to host new architectures in our Debian package repository: armel for both squeeze and wheezy, armhf for wheezy only.

Although we haven't started to generate ARM™-specific packages, we can first copy our architecture independent packages. The tool reprepro that we're using to make our own repository provides a convenient function flood that copies all the packages of architecture all from one architecture to another, in the same distribution codename. The following command is copying existing squeeze packages of architecture all to armel:

$ reprepro -V --basedir debian/ flood squeeze armel

As the previous command is not talkative at all, let's check it worked well:

$ reprepro -V --basedir debian/ --architecture armel list squeeze
squeeze|main|armel: childsplay-session 1.1-1
squeeze|main|armel: dansguardian-squid 1.0-2
squeeze|main|armel: doudou-hwreport 1.1-1
squeeze|main|armel: doudou-icons-extra 1.0-1
squeeze|main|armel: doudou-installer 1.0-3
squeeze|main|armel: doudoulinux-base 1.0-2
squeeze|main|armel: doudoulinux-desktop-environment 1.0-2
squeeze|main|armel: doudoulinux-dev-artists 1.0-1
squeeze|main|armel: doudoulinux-dev-build 1.0-1
squeeze|main|armel: doudoulinux-dev-l10n 1.0-1
squeeze|main|armel: doudoulinux-dev-system 1.0-1
squeeze|main|armel: doudoulinux-games 1.0-1
squeeze|main|armel: doudoulinux-keyring 2011.01.10
squeeze|main|armel: doudoulinux-kids 1.0-2
squeeze|main|armel: doudoulinux-mouse 2.1-1
squeeze|main|armel: doudoulinux-multimedia 1.0-2
squeeze|main|armel: doudoulinux-sessions 1.1-1
squeeze|main|armel: doudoulinux-sound 2.1-1
squeeze|main|armel: doudoulinux-splashimages 1.0-4
squeeze|main|armel: doudoulinux-timezone 1.0-2
squeeze|main|armel: doudoulinux-utils 1.4-1
squeeze|main|armel: doudoulinux-work 1.0-2
squeeze|main|armel: empathy-salut-nickname 1.0-3
squeeze|main|armel: epiphany-adblock-lists 1.0-1~20111122
squeeze|main|armel: gamine-session 1.0-3
squeeze|main|armel: gcompris-session 1.0-3
squeeze|main|armel: gdm-theme-doudoulinux 1.2-1
squeeze|main|armel: gnome-backgrounds-doudoulinux 1.0-3
squeeze|main|armel: grub-splashimages-doudoulinux 2.0-1
squeeze|main|armel: kde-l10n-doudou-es 4:4.4.5-1
squeeze|main|armel: kde-l10n-doudou-fr 4:4.4.5-1
squeeze|main|armel: kde-l10n-doudou-it 4:4.4.5-1
squeeze|main|armel: kde-l10n-doudou-ru 4:4.4.5-1
squeeze|main|armel: live-boot 2.0.15-1doudou1
squeeze|main|armel: live-boot-initramfs-tools 2.0.15-1doudou1
squeeze|main|armel: live-persistence 1.0-7
squeeze|main|armel: liveusb-write 1.0-14
squeeze|main|armel: lxlauncher-session 1.8-2
squeeze|main|armel: plymouth-themes-all 0.8.3-20doudou1
squeeze|main|armel: plymouth-themes-doudoulinux 1.0-1
squeeze|main|armel: plymouth-themes-fade-in 0.8.3-20doudou1
squeeze|main|armel: plymouth-themes-glow 0.8.3-20doudou1
squeeze|main|armel: plymouth-themes-script 0.8.3-20doudou1
squeeze|main|armel: plymouth-themes-solar 0.8.3-20doudou1
squeeze|main|armel: plymouth-themes-spinfinity 0.8.3-20doudou1
squeeze|main|armel: pysycache-session 1.0-4
squeeze|main|armel: python-editobj2 0.3-1.1
squeeze|main|armel: songwrite2 0.4.1-1+0.4.2
squeeze|main|armel: soundsetting-session 1.0-1
squeeze|main|armel: tbo-common-data 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-accesories 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-all 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-arcadia 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-bubble 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-dgm 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-doodle1 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-facilware 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-guadalinex 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-linuxhispano 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-political 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-southpark 0.98~git20110321-0doudou2
squeeze|main|armel: tbo-data-doodle-tbo 0.98~git20110321-0doudou2
squeeze|main|armel: ttf-lohit-font 2.4.6-1
squeeze|main|armel: tuxpaint-session 1.1-1

Everything is fine :). So now we can copy the squeeze packages to wheezy, still for the architecture all. The tool reprepro provides another convenient function copy that performs copies across different distribution code names. As we want to copy the architecture all only, we'll feed this copy command with the list of packages from the newly created armel architecture in squeeze:

$ reprepro -V --basedir debian/ copy wheezy squeeze \
    $(reprepro -V --basedir debian/ --architecture armel list squeeze | cut -d ' ' -f 2)

Finally, as wheezy has armhf while squeeze doesn't, we need to use flood again to populate armhf in wheezy:

$ reprepro -V --basedir debian/ flood wheezy armhf
$ reprepro --basedir debian/ list wheezy tuxpaint-session
wheezy|main|i386: tuxpaint-session 1.1-1
wheezy|main|amd64: tuxpaint-session 1.1-1
wheezy|main|armel: tuxpaint-session 1.1-1
wheezy|main|armhf: tuxpaint-session 1.1-1
wheezy|main|any: tuxpaint-session 1.1-1
wheezy|main|source: tuxpaint-session 1.1-1

That's it! Our first ARM™ repository is online and can be tested. Note however that all the wheezy packages may not be relevant (eg. Plymouth packages or KDE language packages). The objective is to start to play with packages that are really DoudouLinux-specific. Later we'll work on refining our ARM™ repository. We also plan to move it to a custom buildd server to avoid all the manual operations that reprepro is currently needing.

Sunday 13 November 2011

Source package repository now online

We've been providing a DoudouLinux Debian repository for binary packages since the beginning of the project but no source package repository. As we're now part of Debian Derivatives and as we're also moving to ARM™ architecture, we needed to setup a source repository too. For Debian Derivatives, this will allow our father project Debian to automatically fetch all our patches of standard Debian packages. For our ARM™ port, this will ease the compilation of binary packages targeting either the armel or armhf flavor.

Our source package is now online, although it is not complete yet. It can be fetched using the standard way to add source repositories, in /etc/apt/sources.list or /etc/apt/sources.list.d/:

deb-src lenny main
deb-src squeeze main

The source repository is completed for the stable version of DoudouLinux, based on Debian Lenny. The development branch, based on Squeeze is not completed yet, due to difficulties to deal with the new package format Quilt 3. Most of packages have their sources for the development version however :). Finally we now have to set up an experimental branch based on Wheezy to be able to build armhf packages (only armel can be built upon Squeeze).

The way we built the source repository consisted in changing first our package build script to make it automatically generate and collect source packages, then our repository build script to make it handle source packages too. To build the Debian repository, we're using reprepro, an official Debian tool which is quite simple to use:

  1. Create a directory for your Debian repository, say debian/.
  2. Create a file debian/conf/distributions that sets your repository parameters (name, architectures, codename, etc.).
  3. Invoke reprepro for each package to be added, with the options matching your package.

For a binary package:

reprepro -V --basedir debian/ --architecture <arch> includedeb <codename> <debfile>

where <arch> is i386, amd64, armel, etc., <codename> is your distribution codename and <debfile> the binary package to be added.

For a source package the command is slightly different:

reprepro -V --basedir debian/ --type dsc includedsc <codename> <dscfile>

where <dscfile> the DSC file of your source package. It will copy the corresponding .tar.gz file and .diff.gz file (whenever available) that are used to restore the patched source code.

In the future we intend to setup a buildd or buildd-like server that will build all our packages transparently, automatically from source code, whatever the target architecture and the distribution flavor. This way we won't have to do manual operations to update our repository any more.

Saturday 5 November 2011

Genesi supports DoudouLinux ARM™ port

Genesi logo We are very glad to announce that Genesi, which makes computing products using ARM™ and Power Architecture™ technology, has accepted our project DoudouLinux in its latest sponsorship program around the i.MX53 chip from Freescale. The team will benefit from Genesi hardware, graciously donated to help us port DoudouLinux on ARM™. Moreover, as Genesi is already running Debian on its ARM™ devices, this collaboration will undoubtedly speedup our work :).

This first partnership is just the beginning of our move to ARM™ architecture. As this platform is quickly increasing in popularity, we have understood during the early stages of the project that we could not miss this opportunity to provide children all around the world with adapted, efficient, easy, pleasant and… free software. Of course any volunteer willing to help the project is welcome! We are impatient to have DoudouLinux on ARM™: the more developers we are, the faster it will occur.

Stay tuned!

Saturday 9 April 2011

Clean install of DoudouLinux on hard disk

Currently the DoudouLinux installer just copies onto disk the Live media as is. While this is very practical for us and brings interesting features to users (rock-solid read-only system), this also has drawbacks:

  • the system is still compressed and slows down startup on old computers
  • you can not remove software
  • upgrading software creates a duplicate version of each software
  • many boot parameters cannot be changed (they're not persistent)

One of our most active contributors, Richard, suggested to use Remastersys. This is a tool whose goal is to perform full system backup onto a Live CD for Debian-based distributions. One of its features is to let users re-install a clean system onto hard disk from the Live CD: just what we need!

Thanks to it, on a laptop from 2003-2004, DoudouLinux is now booting in 40s instead of 120s from CD. I installed the system in 3 separate partitions: root, home and swap. The root system needs 1.9 GB so you have to setup at least a 2.5 GB root partition. Of course if you want to add software or don't want a separated home partition (bad idea), make it larger! Now let's look at the recipe :).

Remastersys is offered as a Debian package. The package provides a shell script to install the running Live system on disk: “remastersys-installer”. Reading the script showed that it is doing what we need. We have then successfully performed a clean install of DoudouLinux with the following operations:

  1. add Remastersys repository to a running DoudouLinux
  2. install Remastersys
  3. run the Remastersys script called “remastersys-installer”
  4. reboot!

Note that there are some issues to be corrected after the first boot (see after the source code below). We also have to customize the Remastersys script for use in an official future DoudouLinux release. In the meanwhile, if you want to test it by yourself, you need to type several code lines as root then as the main user to be able to use the graphical Gtk interface:

# log as root
su -

# define parameters

# register remastersys repository
echo 'deb debian/' >> $SOURCESLIST

# fix bug DansGuardian blocking some deb's files
# see:
echo '\\.deb$' >> $DANSREGEXPEXCEPT

# install remastersys
apt-get update
apt-get install --assume-yes --force-yes remastersys

# call installer as normal user
sudo remastersys-installer gui

Once completed, if you see messages complaining about the impossibility to unmount /TARGET and /TARGET/home, just unmount them manually in the console:

sudo umount /TARGET/home/
sudo umount /TARGET/

Finally please note that there are few details to be corrected:

  • at boot GRUB is complaining about a missing splash image
  • network may not work because the file /etc/network/interfaces is appended with another network configuration at each boot (which causes inconsistencies)
  • boot is hanging tens of seconds when network is not plugged because it is waiting for a DHCP lease

The first point can be solved by editing /boot/grub/menu.lst and adding “boot” between the double slash (//) in the line speaking of splash. Note that the Remastersys splash image is not childish at all. Prefer installing the package grub-splashimages-doudoulinux instead! (and replace the file /boot/grub/splash.xpm.gz)

The second one can be solved by removing the for loop of the 3rd block of code in /etc/rc.local.

The last one cannot be simply solved. We have to achieve additional experiments to find a solution. They'll be reported in the ticket related to this topic: Provide a way to do a real DDL installation.

Have nice DoudouLinux installs! ;)

Tuesday 1 February 2011

Graphical interface to set the session menu

A new tool to set the session menu has been developed. It has been designed to be dead easy to use: you are shown the list of possible sessions and just check or uncheck the sessions that you want to see or hide. You can then easily adapt the main screen to the audience: small or big children (or adults ;) ). In the future we may add an option to force autologin for a given activity.

Please note that sessions are called activities in the interface, which is certainly more easy to understand for people who are not familiar with computers. Here is a screenshot:


The tool is not available in CD's yet but will be added to next release, the 2011-02, due to late February. It is already available on our Debian package repository. In the meanwhile, if you really feel the need to use it, you can install it manually in a running DoudouLinux:

$ wget
$ sudo dpkg -i doudoulinux-sessions_1.0-3_all.deb

Of course everything is lost at shutdown if you have not activated persistence or not installed DoudouLinux definitively.

Wednesday 19 January 2011

Changing the session menu

A question that is regularly asked is how to remove some entries in the session menu (shown on the screenshot below). The standard session menu has 7 sessions. If you want a DoudouLinux for very young children, you may wonder how to remove the two most advanced sessions, Mini and Whole DoudouLinux. On the contrary the first 2 or 3 sessions are quite useless if your children are bigger.

GDM session menu (Chinese)

The solution is to enter the session Whole DoudouLinux and open a console. Because the session menu is based on GDM, the tool that will allow you to hide sessions is “gdmsetup”:

$ sudo gdmsetup

In the latest tab you can add or remove users in the list of users who are not shown in the menu:

gdmsetup – user's tab

Of course changes are lost after shutdown or reboot if you have not installed DoudouLinux on hard disk or if full persistence is not set. The session names to be used in the order of session difficulty are:


The resulting session menu with “5doudoulinux” and “tux” removed is the following:

GDM session menu modified (Chinese)

So everything is OK but you may have noticed that a problem occurs if you want to change the sound volume or to make removed sessions reappear: you do not have access to the required tools anymore through the remaining sessions… The solution is simple: just type the name of the Whole DoudouLinux session user, which is “tux”, then press Return. This is shown in the following screenshot:

GDM type user name (Chinese)

To conclude there is just one thing to add: it would be better to have a small but nice interface to set the session menu. Be patient, this will come!

Thursday 13 January 2011

Daily build section re-factored

After the current release was out, the dailybuild section naturally disappeared since all its contents simply moved to the official download section. We took the opportunity to change the location of this dailybuild section so please now visit:

Due to changes in the web server configuration, it is not possible to browse our public directories anymore. So we also wrote a Php script in this section to get a table of downloadable files, just as the official download section. Finally there are currently 2 ISO files available. One is the first Chinese build and the other one is a new Russian build with a translation file fixed (see ticket

Thursday 16 December 2010

Transifex project page in troubles

Update of Dec. 21th 2010: our TransiFex homepage is back but you have to be patient because they just increased the server timeout.

As you may have noticed, our project page on the translation portal TransiFex is not reachable anymore since several days. This is not due to TransiFex downtime but it seems to be due to the server load after they switched to version 1.0. The sad news is that I can't even post a bug report on their bug manager because it also has a bug preventing me from authenticating…

However almost all other pages on TransiFex are available, so you can still access the language teams:

Then clicking on a language will take you to the list of PO files for your language. You should then be able to work as you did before. We are sorry for the inconvenience and hope to be able to quickly contact TransiFex developers.

Thursday 21 October 2010

Parental controls: web content filtering activated

One feature that has been often said as being missing in DoudouLinux is parental controls. This is true, a web browser is shipped within DoudouLinux but no parental control was implemented to prevent children to visit “naughty” pages until recently. Of course this was not desirable for a system targeted at children and even small children. Filtering does not pretend to replace parents with software(!) but this is an additional security, simply because you cannot always be beside your children on the computer (and he doesn't want you to surely!).

Well, let's talk about technique now… There are different components in parental controls. Here we only focussed on web filtering. Other components, such as authorized hours of use, will be evaluated later. For web filtering we opted for the famous DansGuardian web content filtering solution. This tool provides two ways of avoiding naughty sites: a classical black list and a less classical real-time content filtering. The second is really an interesting feature: it can block a Google search which would otherwise give “naughty” results. The following screen capture shows a blocked Google search for the word “sex”. Yes this would give mainly naughty results…

DansGuardian error page (French)

However recent tests showed that DansGuardian is not perfect yet - so do not leave your children all day long on the Internet ;). We think that this is due to localization of black lists and keyword lists. Our translation team will then have to do some work to show if localization is really the source of malfunctioning or not.

Concerning the mechanics, a French article provides very good information on how to make DansGuardian run along with Squid, some proxy software. Using both tools and some firewalling rules in IPtables, we get a system in which web page requests cannot avoid DansGuardian[1]. However we had to do some more tuning to ensure that both Squid and DansGuardian are always started after network is actually setup. Without taking care, web access would not work at all whenever the network cable is plugged after DoudouLinux is fully working.


[1] except if a website is not using the standard port 80, but this never happens…

Saturday 9 October 2010

Daily builds available!

We have created a new download section named “Daily build”. There is a section for LiveCD images and section for USB key images. Please note that these files cannot be downloaded from the standard download web page because these files are uploaded onto the server for testing purposes only. As usual, this does not mean that they do not work correctly at all!

Unlike what its name suggests, we do not intend to build a DoudouLinux version every night in this directory for obvious upload bandwidth reasons. Instead you may find sometimes versions that are being developed and made available during several days (say at least 7 days). The page Release notes provide information about what has been changed from the latest official build (currently the 2010-08).

Wednesday 29 September 2010

Nouvelles interfaces pour la souris et la sortie son

Les premières interfaces dignes de ce nom ont été écrites pour l'outil de réglage de la souris et celui de réglage de la sortie son. Du point de vue fonctionnel c'est pareil qu'avant, mais du point de vue esthétisme, on pense avoir quand même fait beaucoup mieux ! Quelques heures à s'arracher les cheveux pour se perfectionner un peu en PyGtk et voilà le résultat :



Bon maintenant il n'y a plus qu'à patienter pour que ce soit sur les CD. Ou sinon faites un tour dans notre dépôt de code source. Les mises à jour des paquets Debian devraient aussi finir par arriver, avant les nouvelles versions des CD !

Sunday 22 August 2010

Installer DoudouLinux définitivement - suite

Dans le billet précédent Installer DoudouLinux définitivement, on a expliqué les détails techniques qui permettent d'installer DoudouLinux définitivement sur l'ordinateur - en détruisant tout ce qui est dessus au passage. Comme cette procédure va effrayer plus d'un utilisateur, j'avais sous-entendu en fin de billet que ça devrait pouvoir s'automatiser…

Et bien oui, c'est fait ! J'ai un script Python doudou-installer qui devine tout seul comme un grand où est la clef USB et où est le disque interne de la machine. L'utilisation est ultra simple lorsqu'il n'y a qu'un seul disque interne : il faut simplement valider le choix proposé par le script ! Il effectuera ensuite les opérations suivantes :

  • copie bas niveau de la clef USB
  • création d'une partition swap d'environ 350 Mo
  • utilisation de l'espace restant pour activer la persistance des données

Le type de persistance mis en place est persistance complète (système + données utilisateurs) avec stockage directement sur la partition, laquelle est formatée ext3. Par contre le système demande toujours à enlever le support à l'extinction (!), un bogue identifié fait qu'il croit toujours être sur un CD malgré mes tentatives…

Au niveau intégration à DoudouLinux, je précise tout de suite qu'il n'y aura pas d'icône pour installer facilement. Même si le script doit poser 3 fois la question « Êtes-vous vraiment sûr de vouloir tout écraser ? », les enfants ne doivent pas pouvoir accéder facilement à cet outil sinon comment papa et maman vont-ils garder l'esprit tranquille ?

NB: côté interface graphique, ne vous attendez pas à de beaux boutons translucides, je développe pour le moment dans l'urgence et je vais à l'essentiel → les fonctionnalités. On verra plus tard pour les beaux boutons !

Saturday 24 July 2010

Installer DoudouLinux définitivement

Pour le moment l'installation de DoudouLinux n'est pas activée via le système officiel des LiveCD Debian. Cependant, comme ceci ajoute une sur-couche logicielle de plusieurs dizaines de Mo, ceci veut dire qu'il faudra opérer des choix sur les logiciels installés… Une solution, pour ceux qui n'ont pas besoin de multiboot, c'est de copier tout simplement les données Live vers le disque dur local.

Avec le LiveCD, c'est compliqué car la structure d'un CD n'est pas celle d'un disque. Par contre avec la clef LiveUSB c'est très simple, il suffit de demander au système de faire une copie de bas niveau. C'est la commande dd qui permet de faire cela :

$ sudo dd if=/dev/sda of=/dev/hda
1434580+0 enregistrements lus
1434580+0 enregistrements écrits
734504960 bytes (735 MB) copied, 437,301 s, 1,7 MB/s

Toute la question est de retrouver les bons chemins /dev/sda et /dev/hda… Dans notre cas, manuel, on s'en sort en analysant les disques du système :

$ sudo fdisk -l

Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/hda doesn't contain a valid partition table

Disk /dev/sda: 2070 MB, 2070937600 bytes
255 heads, 63 sectors/track, 251 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x0005800f

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          92      738958+  83  Linux
/dev/sda2              93         251     1277167+  83  Linux

On a donc deux disques de 40 Go et 2 Go respectivement, le premier est forcément celui de la machine alors que le second est la clef USB. On peut vérifier en regardant ce qui est monté dans le système DoudouLinux en fonctionnement (via df -h). Cependant pour une utilisation en mode automatique (= interface graphique dans DoudouLinux), il faudra un processus de détermination des disques source et cible :

  • la clef USB est connectée sur le bus USB (!) et devrait être montée
  • le disque dur est forcément monté sur un bus interne (IDE ou SCSI)

La clef USB a peut-être aussi des partitions avec un nom en rapport avec DoudouLinux, comme l'image ISO de CD (à vérifier…).

Remarque : cette technique a été testée avec succès depuis une clef USB Live en cours de fonctionnement. Normalement on peut aussi activer la persistance des données avec l'outil intégré à DoudouLinux, mais ça n'a pas été testé. Le seul truc qui manque vraiment : retirer le message à l'extinction qui dit d'enlever la clef !

Sunday 28 February 2010

La construction de CD multi-lingue est opérationnelle !

Ça y'est ! Les modifications nécessaires ont été apportées au code source afin de pouvoir générer des LiveCD dans d'autres langues que le français. Il reste encore à organiser un peu mieux les répertoires et, notamment, ne plus faire de l'anglais la base du LiveCD mais une langue comme une autre ;-). Néanmoins n'importe quelle autre langue peut être créée dans la mesure où elle est gérée par Debian. Il suffit de lancer la commande suivante dans le répertoire doudoulinux/live/trunk :

$ ./ xx

xx est le code de la langue sur deux lettres. On trouve ces codes par exemple dans la page List of ISO 639-1 codes. Ensuite il faut modifier les fichiers placés dans le répertoire de la langue qui vient d'être créé. La liste est la suivante (fichiers en italiques) :

$ tree es/
|-- binary
|-- binary_local-hooks
|   `--
|-- bootstrap
|-- chroot
|-- chroot_local-hooks
|   `--
`-- chroot_local-includes
   |-- etc
   |   `-- skel
   |       |-- .profile
   |       `-- .vkeybdmap
   `-- usr
       `-- share
           `-- lxlauncher
               `-- default
                   `-- lxpanel
                       `-- panels
                           `-- panel

Toutes les explications se trouvent dans le fichier HOWTO, du moins en théorie ;-). Du coup j'ai envoyé sur le serveur deux nouvelles langues du CD :

NB: si les liens sont morts, il faut aller directement dans !

Sunday 31 January 2010

Dépôt de code source ouvert

Ça y'est le dépôt de code source de DoudouLinux vient d'être ouvert ! Il est hébergé sur Gna! :

Il n'y a pas encore grand chose à voir mais ça va venir… Parmi les sections qu'il faudra surveiller, outre le code source, il y a le gestionnaire de tâches et le gestionnaire de bogues :

NB: please speak english on the task/bug managers!

Le code source est public donc n'importe qui peut le récupérer. Par contre pour participer au développement, il faut ouvrir un compte chez Gna! afin de récupérer une copie versionnée du code. Cette opération nécessite une clef d'authentification SSH comme indiqué dans la page DoudouLinux - Dépôts Subversion[1]. Une fois votre compte créé, les instructions sont écrites dans un billet que j'avais publié il y a un certain temps sur mon blog[2]. Il faut ensuite que vous demandiez à intégrer le projet DoudouLinux, et que j'accepte cette requête ;-).

Pour récupérer le code, notez que pour le moment il y a bien un répertoire trunk à la racine, mais ceci est susceptible de changer car il y a pas mal de choses différentes à héberger. Je vous tiens au courant dès que l'arborescence et le premier code sont en place ;-) !


[1] z'êtes priés de mettre à votre clef une phrase de passe longue et compliquée ;-)

[2] c'était au sujet de CVS mais ça reste valable avec SVN

- page 1 of 2