Créer une image debian minimale (non graphique) pour booter un compulab utilite standard depuis une microsd

Comment créer une image bootable de debian minimale à jour pour un français avec un kernel stable pour une machine compulab utilite standard. (admirez la beauté de l’utilisation de qemu de façon transparente grâce à binfmt-support)

Je recommande de récupérer certains fichiers de l’installation qui figurent dans la distribution de base qui vient avec votre OS…. Typiquement il faut récupérer au minimum les firmwares qui sont installés dans /lib/firmware.

Depuis un PC sur lequel on montera la microsd (ici dans un mini-lecteur que l’on met dans un port USB d’où sdc au lieu de mmcxxxxyyyyypt)…. Le contenu sera vide sauf le répertoire boot sur le fs ext4 de la microsd

mount /dev/sdc2 /mnt
mount /dev/sdc1 /mnt/boot

apt-get install qemu binfmt-support qemu-user-static dpkg-cross debootstrap

debootstrap --foreign --arch armhf wheezy /mnt/ http://ftp.fr.debian.org/debian

root@jylenhof-XPS-L701X:/mnt# cp /usr/bin/qemu-arm-static usr/bin/
root@jylenhof-XPS-L701X:/mnt# LC_ALL=C LANGUAGE=C LANG=C chroot . /debootstrap/debootstrap --second-stage
root@jylenhof-XPS-L701X:/mnt# echo utilite > etc/hostname
root@jylenhof-XPS-L701X:/mnt# echo nameserver 8.8.8.8 >> etc/resolv.conf
root@jylenhof-XPS-L701X:/mnt# echo nameserver 8.8.4.4 >> etc/resolv.conf
root@jylenhof-XPS-L701X:/mnt# echo deb http://ftp.fr.debian.org/debian wheezy main contrib non-free > etc/apt/sources.list
root@jylenhof-XPS-L701X:/mnt# echo deb-src http://ftp.fr.debian.org/debian wheezy main contrib non-free >> etc/apt/sources.list
root@jylenhof-XPS-L701X:/mnt# echo deb http://security.debian.org/ wheezy/updates main contrib non-free >> etc/apt/sources.list
root@jylenhof-XPS-L701X:/mnt# echo deb-src http://security.debian.org/ wheezy/updates main contrib non-free >> etc/apt/sources.list
root@jylenhof-XPS-L701X:/mnt# echo auto eth0 >> etc/network/interfaces
root@jylenhof-XPS-L701X:/mnt# echo allow-hotplug eth0 >> etc/network/interfaces
root@jylenhof-XPS-L701X:/mnt# echo iface eth0 inet dhcp >> etc/network/interfaces
root@jylenhof-XPS-L701X:/mnt# echo T0:2345:respawn:/sbin/getty -L ttymxc3 115200 vt100 >> etc/inittab
root@jylenhof-XPS-L701X:/mnt#
root@jylenhof-XPS-L701X:/mnt# LC_ALL=C LANGUAGE=C LANG=C chroot . apt-get update
root@jylenhof-XPS-L701X:/mnt# LC_ALL=C LANGUAGE=C LANG=C chroot . apt-get upgrade
LC_ALL=C LANGUAGE=C LANG=C chroot . apt-get install openssh-server locales ntpdate ntp usbutils pciutils less lsof most sysfsutils ntfs-3g exfat-utils exfat-fuse
chroot . /etc/init.d/ssh stop
chroot . /etc/init.d/ntp stop
root@jylenhof-XPS-L701X:/mnt# LC_ALL=C LANGUAGE=C LANG=C chroot . dpkg-reconfigure locales
Generating locales (this might take a while)…
en_US.ISO-8859-1… done
en_US.ISO-8859-15… done
en_US.UTF-8… done
fr_FR.ISO-8859-1… done
fr_FR.UTF-8… done
fr_FR.ISO-8859-15@euro… done
Generation complete.

root@jylenhof-XPS-L701X:/mnt# chroot . apt-get clean
root@jylenhof-XPS-L701X:/mnt# chroot . dpkg-reconfigure tzdata

Current default time zone: ‘Europe/Paris’
Local time is now: Sun Apr 20 19:39:31 CEST 2014.
Universal Time is now: Sun Apr 20 17:39:31 UTC 2014.

root@jylenhof-XPS-L701X:/mnt#

Puis on créé le fichier etc/fstab

root@jylenhof-XPS-L701X:/mnt# cat etc/fstab
#the Kernel image
/dev/mmcblk0p1 /boot vfat noatime,errors=remount-ro 0 1
#Mount the rootfs partition
/dev/mmcblk0p2 / ext4 noatime 0 1
proc /proc proc defaults 0 0
root@jylenhof-XPS-L701X:/mnt#

On positionne le mot de passe de root (ici, 111111 comme l’image ubuntu de base)

root@jylenhof-XPS-L701X:/mnt# chroot . /usr/bin/passwd
Entrez le nouveau mot de passe UNIX :
Retapez le nouveau mot de passe UNIX :
passwd : le mot de passe a été mis à jour avec succès
root@jylenhof-XPS-L701X:/mnt#
root@jylenhof-XPS-L701X:/mnt# rm usr/bin/qemu-arm-static
root@jylenhof-XPS-L701X:/mnt#

On efface les clés générées de façon à rendre générique l’image ainsi créée :
root@jylenhof-XPS-L701X:/mnt# rm etc/ssh/moduli etc/ssh/ssh_host*
root@jylenhof-XPS-L701X:/mnt#

 

Puis pour compiler le kernel, récupérer les sources du kernel 3.15-rc1 (les sources essentielles pour cette carte ont été intégrées)

Patcher ce kernel avec le patch suivant :
http://www.lenhof.eu.org/utilite/imx6q-cm-fx6.dts.patch

root@jylenhof-XPS-L701X:/home/jylenhof/Téléchargements/utilite/linux-3.15-rc1# patch -p0 < ../imx6q-cm-fx6.dts.patch
patching file arch/arm/boot/dts/imx6q-cm-fx6.dts
root@jylenhof-XPS-L701X:/home/jylenhof/Téléchargements/utilite/linux-3.15-rc1#

apt-get install gcc-arm-linux-gnueabihf
export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm
make imx_v6_v7_defconfig

make gconfig, pour ajouter les trois options suivantes (dans boot options) :
CONFIG_ARM_APPENDED_DTB=y
CONFIG_ARM_ATAG_DTB_COMPAT=y
CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND=y

mkdir -p /mnt/lib/modules/3.15.0-rc1
INSTALL_MOD_PATH=/mnt/ INSTALL_PATH=/mnt/boot/ make zImage modules_install

cat arch/arm/boot/zImage arch/arm/boot/dts/imx6q-cm-fx6.dtb > /tmp/zImage-cm-fx6

On recopie le kernel à la main :
cp /tmp/zImage-cm-fx6 /mnt/boot/

On récupère les infos du kernel existant avant d’en faire l’image U-Boot :
root@jylenhof-XPS-L701X:/home/jylenhof/Téléchargements/linux-3.15-rc1# mkimage -l /mnt/boot/uImage-cm-fx6.old
Image Name:   Linux-3.0.35-cm-fx6-5.3
Created:      Sun Jan 26 13:38:22 2014
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    4061524 Bytes = 3966.33 kB = 3.87 MB
Load Address: 10008000
Entry Point:  10008000
root@jylenhof-XPS-L701X:/home/jylenhof/Téléchargements/linux-3.15-rc1#

mkimage -A arm -O linux -T kernel -C none -a 0x10008000 -e 0x10008000 -n Linux-3.15-rc1-cm-fx6-byjyl -d zImage-cm-fx6 uImage-cm-fx6

Je n’aurais pas réussi à écrire ce billet sans les informations précieuses trouvées sur certaines pages sur Internet, dont notamment :
http://www.yoovant.com/debian-wheezy-rootfs/

Share

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *