Projet RIM Linux
Création du RIM-Linux
Younesse Kaddar
En ligne :
- http://younesse.net/Architecture-systeme/RIM-Linux
-
Dépôt github : https://github.com/youqad/RIM-Linux
- version PDF
-
Le fichier de configuration du noyau utilisé est le fichier
config_kernel
-
L’image iso est
output.iso
Le noyau Linux
mkdir -p build kernel RIM-Linux/rootbase
cd kernel
wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.tar.xz
tar -xJf linux-4.9.tar.xz
rm linux-4.9.tar.xz
cd linux-4.9
make nconfig
- Décocher
Enable loadable module support
-
Dans General Setup :
- ne laisser que le support de l’initrd/l’initramfs
make -j11 bzImage
BusyBox
cd ../build
wget http://www.busybox.net/downloads/busybox-1.26.0.tar.bz2
bzip2 -d busybox-1.26.0.tar.bz2
tar xvf busybox-1.26.0.tar
rm busybox-1.26.0.tar
cd busybox-1.26.0
make menuconfig
make -j11
make -j11 install
cp -a ./_install/* ../../RIM-Linux/rootbase
cd ../../RIM-Linux/
ldd rootbase/bin/busybox
qui renvoie :
linux-vdso.so.1 => (0x00007ffc42a9b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ffa52a51000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ffa5268c000)
/lib64/ld-linux-x86-64.so.2 (0x00007ffa52d57000)
Puis :
mkdir -p rootbase/lib/x86_64-linux-gnu/ rootbase/lib64
cp /lib/x86_64-linux-gnu/{libm.so.6,libc.so.6} rootbase/lib/x86_64-linux-gnu/
cp /lib64/ld-linux-x86-64.so.2 rootbase/lib64/
strip -v rootbase/lib/x86_64-linux-gnu/* rootbase/lib64/*
cd rootbase
rm linuxrc
ln -s bin/busybox init
On va récupérer la trame mise à notre disposition :
cp ~fhh/share/tp/projet/rim.linux.template.tbz2 ./
bzip2 -d rim.linux.template.tbz2
tar xvf rim.linux.template.tar
rm rim.linux.template.tar
Puis :
-
On change le nom de l’utilisateur dans
etc/passwd
-
Dans
etc/init.d/rcS
:- on décommente la ligne
busybox loadkmap < /etc/fr.kmap
pour activer le clavier français (on ajoutera un fichieretc/fr.kmap
est bien présent) - on change le nom d’hôte :
/bin/hostname RIM-Linux
- on décommente la ligne
Archive cpio de l’initramfs et isolinux
cd ..
mkdir -p rootcd/{boot,isolinux}
cp ../kernel/linux-4.9/arch/x86_64/boot/bzImage rootcd/boot/vmlinuz
find rootbase/* -print | cpio -o -Hnewc > root
cat root | gzip -9 > rootcd/boot/root.gz
rm root
On récupère isolinux
cd ../build
wget https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.03.tar.xz
tar xJf syslinux-6.03.tar.xz
rm syslinux-6.03.tar.xz
cd ..
cp build/syslinux-6.03/bios/core/isolinux.bin RIM-Linux/rootcd/isolinux
cp build/syslinux-6.03/bios/com32/elflink/ldlinux/ldlinux.c32 RIM-Linux/rootcd/isolinux
Puis, on crée les fichiers
RIM-Linux/rootcd/isolinux/isolinux.cfg
:
display boot.txt
default 1
label 1
kernel /boot/vmlinuz
append initrd=/boot/root.gz
RIM-Linux/rootcd/isolinux/boot.txt
: le message de bienvenue
cd RIM-Linux
mkisofs -o output.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table rootcd
Shell personnalisé
On se place à la racine du répertoire RIM-Linux
.
Dans rootbase/etc/inittab
, on remplace /bin/sh
par /bin/shell
, en ayant pris soin de placer notre shell personnalisé shell
dans rootbase/bin/shell
.
Il reste à ajouter les bibliothèques qu’utilise shell
:
ldd shell
renvoie
linux-vdso.so.1 => (0x00007ffe3ba9a000)
libreadline.so.6 => /lib/x86_64-linux-gnu/libreadline.so.6 (0x00007fb5dd018000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb5dcc53000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fb5dca2a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb5dd25e000)
cp /lib/x86_64-linux-gnu/libreadline.so.6 rootbase/lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libc.so.6 rootbase/lib/x86_64-linux-gnu/
cp /lib/x86_64-linux-gnu/libtinfo.so.5 rootbase/lib/x86_64-linux-gnu/
(cp /lib64/ld-linux-x86-64.so.2 rootbase/lib64/
: déjà fait précédemment).
Puis, ne pas oublier :
strip -v lib/x86_64-linux-gnu/*
Clavier
Dans rootbase/etc/init.d/rcS
, on veillera bien à décommenter la ligne busybox loadkmap < /etc/fr.kmap
.
Puis :
- Si on a les droits administrateurs (ce qui n’est pas le cas sur les machines de l’ENS) :
su
../build/busybox-1.26.0/_install/bin/busybox dumpkmap > rootbase/etc/fr.kmap
- Sinon :
cd rootbase/etc/
wget http://younesse.net/assets/ArchiSysteme/fr.kmap
wget http://younesse.net/assets/ArchiSysteme/us.kmap
wget http://younesse.net/assets/ArchiSysteme/uk.kmap
cd ../..
Pour le message d’accueil indiquant comment passer le système en clavier français ou anglais, créer :
-
rootbase/etc/motd
: le message de bienvenue/ __\/ \/ \__/| / \ / \/ \ /|/ \ /\\ \// | \/|| || |\/|| | | | || |\ ||| | || \ / | /| || | || | |_/\| || | \||| \_/| / \ \_/\_\\_/\_/ \| \____/\_/\_/ \|\____//__/\\ .--. |o_o | |:_/ | // \ \ (| | ) /'\_ _/`\ \___)=(___/ Use: 'loadkmap < /etc/us.kmap' (en_US), 'loadkmap < /etc/uk.kmap' (en_UK) or 'loadkmap < /etc/fr.kmap' (fr_FR) to change the keyboard mapping To display this message again : 'cat /etc/motd'
-
Puis :
-
dans
rootbase/etc/init.d/rcS
, ajouter la ligne :/etc/init.d/monscript
-
créer
rootbase/etc/init.d/monscript
:cat /etc/motd
-
-
Réseau
mkdir -p rootbase/usr/share/udhcpc/
cp ../build/busybox-1.26.0/examples/udhcp/simple.script rootbase/usr/share/udhcpc/default.script
chmod +x rootbase/usr/share/udhcpc/default.script
Puis ajouter les lignes suivantes au fichier rootbase/etc/init.d/rcS
:
ifconfig eth0 up
udhcpc -i eth0
Enfin :
cd rootbase
echo "127.0.0.1 localhost" > etc/hosts
echo "localnet 127.0.0.1" > etc/networks
echo "RIM-Linux" > etc/hostname
echo "order hosts,bind" > etc/host.conf
echo "multi on" >> etc/host.conf
Configurations supplémentaires
Pour une configuration plus exhaustive, on peut créer les fichiers :
rootbase/etc/nsswitch.conf
:
# /etc/nsswitch.conf: GNU Name Service Switch config.
passwd: files
group: files
shadow: files
hosts: files dns
networks: files
rootbase/etc/securetty
:
# /etc/securetty: List of terminals on which root is allowed to login.
console
# For people with serial port consoles
ttyS0
# Standard consoles
tty1
tty2
tty3
tty4
tty5
tty6
tty7
rootbase/etc/shells
:
# /etc/shells: valid login shells.
/bin/shell
/bin/sh
/bin/ash
/bin/hush
rootbase/etc/issue
:RIM-Linux, Younesse Kaddar \r \l
rootbase/etc/busybox.conf
:
# /etc/busybox.conf: Busybox configuration.
[SUID]
# Allow command to be run by anyone.
su = ssx root.root
passwd = ssx root.root
loadkmap = ssx root.root
mount = ssx root.root
reboot = ssx root.root
halt = ssx root.root
⟶ on veillera aussi à protéger ce fichier :
chmod 600 rootbase/etc/busybox.conf
Utilitaires
Les scripts cpio_creator
, kernel_copy
, rebuild_iso
, send_home
créés à la racine de RIM-Linux/
automatisent certaines tâches répétitives effectuées pendant les tests.
cpio_creator
:
#!/bin/sh
HERE=$(pwd)
ROOTBASE=./rootbase
echo "The path is : $ROOTBASE."
echo "Creating ..."
cd $ROOTBASE
find ./* -print | cpio -o -Hnewc > $HERE/root
cd $HERE
cat root | gzip -9 > root.gz
rm root
mv root.gz rootcd/boot
echo "Done."
kernel_copy
:
#!/bin/sh
cp ../kernel/linux-4.9/arch/x86_64/boot/bzImage rootcd/boot/vmlinuz
-
rebuild_iso [options]
: crée l’image iso du RIM Linux et la lit avecqemu
- options :
-kernel
: copie le noyaubzImage
créé dans le répertoire../kernel
-kvm
: lanceqemu
avec l’option-enable-kvm
- options :
#!/bin/sh
./cpio_creator
if [ "$1" == "-kernel" ] || [ "$2" == "-kernel" ] ; then
./kernel_copy
echo "Kernel copied"
else
echo "Kernel not copied"
fi
mkisofs -o output.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table rootcd
if [ "$1" == "-kvm" ] || [ "$2" == "-kvm" ] ; then
echo "Qemu : KVM enabled"
qemu-system-x86_64 -m 4G -enable-kvm -cdrom output.iso
else
echo "Qemu : KVM disabled"
qemu-system-x86_64 -m 4G -cdrom output.iso
fi
send_home
:
#!/bin/sh
rm -rf ~/RIM-Linux
cp -R ../RIM-Linux/ ~/
Leave a comment