-
Introduction
Dans ce didacticiel nous allons:
- Installer les outils de travail.
- Preparer l'hote.
- Configurer le fichier build.conf.
- Construire, configurer le conteneur.
- Executer la compilation du noyau linux-rt.
- Vérifier le résultat obtenu.
Développement
- 1) INSTALLATION DES OUTILS DE TRAVAIL
Vérifiez que le système d'exploitation est à jour:
sudo sh -c "pacman -Syu"
Installez le logiciel 'obarun-build':
sudo sh -c "pacman -S obarun-build"
Nous allons preparer le terrain a la configuration du ficher build.conf et creer quelques dossiers dans notre repertoire utilisateur. Les noms de dossiers reprendrons dans l'ordre le nom des variables contenu dans le fichier build.conf afin de simplifier la lecture du document.
L'arborescence sera la suivante:
[$HOME]
|
|---[ 00-Obarunbuild ] # # Dossier de travail avec pour indicatif '00' histoire de bien le demarquer des autres dossiers.
|
|----- [ worklxc ] # # Dossier qui contiendra les conteneurs LXC.
|----- [ sources ] # # Dossier qui contiendra les paquets ARCH.
|----- [ target ] # # Dossier qui contiendra les sources PKGBUILD.
|----- [ savepkg ] # # Dossier qui contiendra les outils LXC-*.
Creez les repertoires:
mkdir 00-Obarunbuild
mkdir 00-Obarunbuild/worklxc
mkdir 00-Obarunbuild/sources
mkdir 00-Obarunbuild/target
mkdir 00-Obarunbuild/savepkg
[color=# cd7900]NOTE: Vous etes libre du nom et de la disposition des dossiers. N'oubliez pas cependant d'adapter en consequence le fichier de configuration.[/color]
Le didacticiel ayant pour objectif la compilation du noyau linux ou linux-rt, le noyau linux-rt sera utilise comme exemple.
Nous utilisons GIT pour recuperer l'ensemble des documents. C'est dans le dossier sources que nous allons cloner le repo linux-rt.git.
Executez les commandes suivantes:
cd $HOME/00-Obarunbuild/sources
git clone https://aur.archlinux.org/linux-rt.git
[color=# FF0000]IMPORTANT ![/color]
Ne compilez pas un pkgbuild provenant de AUR sans avoir pris connaissance, lu et compris l'ensemble des documents fournis pour construire le paquet binaire.
- 3) CONFIGURATION DU FICHIER BUILD.CONF
Avant de travailler sur notre fichier build.conf, faisons une copie de sauvegarde du fichier original avec la commande:
sudo sh -c "cp /etc/obarun/build.conf /etc/obarun/build.conf.orig"
Le fichier build.conf.
# ###########################################################################################
# # Main variables
# ###########################################################################################
# allow you to update the script when it launched [yes|no]
# this is install the package from git if a new commit exist.
UPDATE="no"
# Be more/less verbose
# 1 for more, 0 for less
DEBUG=0
# git source of obarun-build package
GIT_ADDR="
https://github.com/Obarun/obarun-build.git"
# gpg directory used during the installation
GPG_DIR="/var/lib/obarun/gnupg"
# directory to use as template to build the container
# if not defined /usr/share/obarun/obarun-build/templates is taken by default
TEMPLATES=""
# working directory for lxc-* tools
# if not set /var/lib/lxc is taken by default
WORKLXC=""
# source directory to find PKGBUILD for building the package
SOURCES=""
# Place where container are saved
# if not defined /var/cache/obarun/pkgbuild is taken by default
TARGET=""
# Place where the builded packages are saved
# if not defined /var/cache/obarun/pkg is taken by default
SAVE_PKG=""
# name of the main container to use with snap option
MAIN_SNAP="base"
# ###########################################################################################
# # Container user configuration variables
# ###########################################################################################
# Hostname of the system onto the container
HOSTNAME="contbuild"
# locale of the system onto the container
LOCALE="en_US.UTF-8"
# zone/subzone of the system onto the container
ZONE="GMT"
SUBZONE=""
# Keymap the system onto the container
KEYMAP="us"
# Name of the newuser onto the container
NEWUSER="userbuild"
# Password for user and root user onto the container
PASSW_ROOT="toor"
PASSW_USER="toor"
# ###########################################################################################
# # Network configuration variables
# ###########################################################################################
# Allow script to create a bridge automaticaly
# 0 for no, 1 for yes
CREATE_BRIDGE=1
Examinons et configurons pas a pas la section 'Main variable'.
# allow you to update the script when it launched [yes|no]
# this is install the package from git if a new commit exist.
UPDATE="no"
[color=# cd7900]NOTE: Traduction > # vous permet de mettre à jour le script 'obarun-build' lors de son execution [oui|non]. En presence d'un nouveau commit, installe le paquet 'obarun-build' a partir de git.[/color]
Cette variable sert uniquement pour faire des hotfix et des testes avant de faire une release, l'utilisateur en regle generale n'est pas un testeur.
Nous pouvons conserver la valeur par defaut de
0
# Be more/less verbose
# 1 for more, 0 for less
DEBUG=0
[color=# cd7900]NOTE: Traduction > # debogueur plus/moins bavard. 1 pour plus, 0 pour moins[/color]
Cette variable sert au debogage du programme en cas de problemes. Pour un report de bug il conviendra de passer cette variable a la valeur '1'.
Nous pouvons conserver la valeur par defaut de
0
[color=# cd7900]NOTE: Traduction > # source git du paquet obarun-build[/color]
Cette variable symbolise l'url vers le dépôt obarun-build.git utilisee en complement a la variable UPDATE lorsque celle-ci a pour valeur 'yes'.
Nous pouvons conserver la valeur par defaut de
github.com/Obarun/obarun-build.git
# gpg directory used during the installation
GPG_DIR="/var/lib/obarun/gnupg"
[color=# cd7900]NOTE: Traduction > # repertoire gpg utilise pendant l'installation[/color]
Cette variable symbolise le chemin a suivre pour atteindre le dossier contenant un ensemble de clefs gpg.
Nous pouvons conserver la valeur par defaut de
/var/lib/obarun/gnupg
# directory to use as template to build the container
# if not defined /usr/share/obarun/obarun-build/templates is taken by default
TEMPLATES=""
[color=# cd7900]NOTE: Traduction > repertoire a utiliser comme modele pour construire le conteneur. Si la variable n'est pas definie alors '/usr/share/obarun/obarun-build/templates' sera utilise comme valeur par defaut.[/color]
Cette variable symbolise le chemin a suivre pour atteindre le dossier contenant le container.
Nous pouvons conserver la valeur par defaut de
/usr/share/obarun/obarun-build/templates
Pour une meilleur visualisation des variables contenus dans le fichier build.conf nous allons tout de meme completer la variable TEMPLATE.
Assignez la valeur de
/usr/share/obarun/obarun-build/templates pour la variable TEMPLATE.
# working directory for lxc-* tools
# if not set /var/lib/lxc is taken by default
WORKLXC=""
[color=# cd7900]NOTE: Traduction > Repertoire de travail pour les outils lxc-*.[/color]
Cette variable symbolise le chemin a suivre pour atteindre le dossier contenant les outils lxc-*
Nous pouvons conserver la valeur par defaut de
/var/lib/lxc
Cependant souvent solicite en ecriture, si vous utilisez un disque dur de type SSD, peut-etre est-il preferable de redefinir la variable.
Dans ce didactiel la valeur sera de
$HOME/00-Obarunbuild/worklxc pour la variable WORKLXC.
[color=# cd7900]NOTE:La variable $HOME correspond au chemin qui mene a la racine du repertoire utilisateur.[/color]
# source directory to find PKGBUILD for building the package
SOURCES=""
[color=# cd7900]NOTE: Traduction > Repertoire source contenant le/les PKGBUILD necessaires a la construction du/des paquets binaires.[/color]
Cette variable symbolise le chemin a suivre pour atteindre le dossier contenant le/les PKGBUILD.
Assignez la valeur de
$HOME/00-Obarunbuild/sources pour la variable SOURCES.
# Place where container are saved
# if not defined /var/cache/obarun/pkgbuild is taken by default
TARGET=""
[color=# cd7900]NOTE: Traduction > Le dossier ou sont sauvegardes les conteneurs. Si la variable n'est pas definie alors '/var/cache/obarun/pkgbuild' est utilise comme valeur par defaut.[/color]
Cette variable symbolise le chemin a suivre pour atteindre le dossier contenant le/les conteneurs.
Assignez la valeur de
$HOME/00-Obarunbuild/target pour la variable TARGET.
# Place where the builded packages are saved
# if not defined /var/cache/obarun/pkg is taken by default
SAVE_PKG=""
[color=# cd7900]NOTE: Traduction > Emplacement ou les paquets binaires sont sauvegardes. Si la variable n'est pas definie alors '/var/cache/obarun/pkg' est utilise comme valeur par defaut[/color]
Cette variable symbolise le chemin a suivre pour atteindre le dossier contenant le/les paquets binaires.
Assignez la valeur de
$HOME/00-Obarunbuild/savepkg pour la variable SAVE_PKG.
# name of the main container to use with snap option
MAIN_SNAP="base"
[color=# cd7900]NOTE: Traduction > Nom du container principal utilise avec l'option snap[/color]
Nous pouvons conserver la valeur par defaut ou bien librement redefinir la variable.
Dans ce didacticiel la valeur sera de
BaseContainer pour la variable MAIN_SNAP.
Examinons et configurons pas a pas la section 'Container user configuration variables'.
# Hostname of the system onto the container
HOSTNAME="contbuild"
[color=# cd7900]NOTE: Traduction > nom d'hôte du systeme dans le container[/color]
Cette variable symbolise le nom d'hôte utilise pour le systeme dans le conteneur.
Nous pouvons conserver la valeur par defaut ou bien librement redefinir la variable.
Dans ce didacticiel la valeur sera de
basecontainer pour la variable HOSTNAME.
# locale of the system onto the container
LOCALE="en_US.UTF-8"
[color=# cd7900]NOTE: Traduction > locale du systeme dans le container[/color]
Cette variable symbolise l'environnement linguistique utilise pour le systeme dans le conteneur.
Nous pouvons conserver la valeur par defaut ou redefinir la variable en fonction de votre langue.
Dans ce didacticiel la valeur sera de
en_US.UTF-8 pour la variable LOCALE.
# zone/subzone of the system onto the container
ZONE="GMT"
SUBZONE=""
[color=# cd7900]NOTE: Traduction > fuseau horaire du systeme dans le conteneur[/color]
Cette variable symbolise le fuseau horaire utilise pour le systeme dans le conteneur.
Nous pouvons conserver la valeur par defaut ou bien redefinir la variable en fonction de votre position geographique.
Dans ce didacticiel la valeur sera de
Europe pour la variable ZONE.
Dans ce didacticiel la valeur sera de
Warsaw pour la variable SUBZONE.
# Keymap the system onto the container
KEYMAP="us"
[color=# cd7900]NOTE: Traduction > disposition des touches pour le systeme dans le conteneur[/color]
Cette variable symbolise la disposition des touches utilisee pour le systeme dans le conteneur.
Nous pouvons conserver la valeur par defaut ou redefinir la variable pour l'adapter a la disposition des touches de votre clavier.
Dans ce didacticiel la valeur sera de
us pour la variable KEYMAP.
# Name of the newuser onto the container
NEWUSER="userbuild"
[color=# cd7900]NOTE: Traduction > nom du nouvel utilisateur dans le conteneur[/color].
Cette variable symbolise le nom de l'utilisateur ayant acces au systeme dans le conteneur.
Nous pouvons conserver la valeur par defaut ou librement redefinir la variable.
Dans ce didacticiel la valeur sera celle par defaut de
userbuild pour la variable NEWUSER.
# Password for user and root user onto the container
PASSW_ROOT="toor"
PASSW_USER="toor"
[color=# cd7900]NOTE: Traduction > mot de passe pour l'utilisateur et l'administrateur du systeme dans le conteneur[/color].
Cette variable symbolise le mot de passe assigne a l'utilisateur et administrateur du systeme dans le conteneur.
Nous pouvons conserver la valeur par defaut ou librement redefinir la variable.
Dans ce didacticiel la valeur sera de
rootbuild pour la variable PASSW_ROOT.
Dans ce didacticiel la valeur sera de
userbuild pour la variable PASSW_USER.
Examinons et configurons pas a pas la section 'Network configuration variables'.
# Allow script to create a bridge automaticaly
# 0 for no, 1 for yes
CREATE_BRIDGE=1
[color=# cd7900]NOTE: Traduction > Autorise le script a creer automatiquement un pont[/color]
Cette variable sert a creer un pont reseau pour le systeme dans le conteneur.
Nous pouvons conserver la valeur par defaut de
1
- 4) CONSTRUIRE, CONFIGURER LE CONTENEUR
Pour nos travaux nous allons utiliser l'outil obarun-build.
Dans un terminal, notre dossier courant $HOME, executez la commande suivante pour afficher les options de l'outil obarun-build.
sudo obarun-build
Usage: /usr/bin/obarun-build [General options] [Sub options] name
e.g obarun-build Create create container
obarun-build C c container
obarun-build B b cups
obarun-build M container
General options :
C, Create : create a container
B, Build : build a package onto a container
M, Manage : open an interactive shell to manage a named container
Sub options :
for Create :
c, create : create a container
for Build :
b, build : build a package onto a container
s, snap : build a package onto a snapshot container
r, remake : build a package onto an archived container
Obarun-build propose differentes methodes pour la compilation. Dans ce didacticiel nous allons utiliser la methode utilisant le snaphot.
- 4a) La creation du conteneur principal.
Vous vous rappellez, precedement dans le fichier de configuration build.conf pour la variable MAIN_SNAP nous avions defini une valeur qui est de BaseContainer. C'est cette valeur que nous allons utiliser a present poru creer le conteneur principal.
Executez la commande suivante:
sudo sh -c "obarun-build C c BaseContainer"
- 4b) Connection au shell interactif lxc
Les etapes pour acceder au conteneur, sont les suivantes: Choisir son container, acceder au shell interactif, demarrer le container et se loger dans le conteneur. Les etapes pour sortir du conteneur seront les suivantes: Se deloger, revenir au shell interactif, stopper le container et quitter le shell interactif.
Selection du container avec les commandes suivantes:
sudo sh -c "obarun-build M BaseContainer"
ou via le menu interactif
sudo sh -c "obarun-build M"
Vous l'avez remarque, nous avons change de shell. C'est le shell lxc et sa liste de commandes obtenu avec la commande help.
Type help to see option
Type quit for exit
Manage BaseContainer > help
attach start a process inside a running container
autostart start/stop/kill auto-started containers
cgroup start a process inside a running container
checkconfig start a process inside a running container
checkpoint checkpoint a container
config query LXC system configuration
console launch a console for the specified container
copy copy an existing container
create creates a container
destroy destroy a container
device manage devices of running containers
execute run an application inside a container
freeze freeze all the container's processes
info query information about a container
ls list the containers existing on the system
monitor monitor the container state
quit exit from this menu
snapshot snapshot an existing container
start start a container
stop stop a container
switch manage the named container
top monitor container statistics
unfreeze thaw all the container's processes
unshare run a task in a new set of namespaces
usernsexec run a task as root in a new user namespace
wait wait for a specific container state
- 4c) Demarage et acces a la console de BaseContainer
Dans le shell lxc executez la commande suivante:
start
Il existe deux methodes pour travailler dans le container.
La premiere methode consiste a se connecter au container avec la commande 'console'.
La seconde methode consiste a utiliser l'option 'attach -- ' suivi d'une commande.
Methode 1 avec la commande console:
console
A present utilisez l'indentifiant utilisateur defini dans le fichier build. conf pour se loger.
- 4d) Configuration du conteneur pour la compilation de linux-rt.
Le PKGBUILD lu et compris, celui-ci comporte une variable validpgpkeys. Nous avons besoin d'importer la totalite des clefs presentes dans le fichier PKGBUILD pour reussir la compilation du noyau linux-rt.
Ces clefs installees dans le conteneur principal seront disponibles a chaque nouveau snapshot.
Executez les commandes suivantes en tant qu'utilisateur userbuild pour recuperer l'ensemble des clefs gpg:
gpg --keyserver "hkp://keys.gnupg.net/" --recv-keys ABAF11C65A2970B130ABE3C479BE3E4300411886
gpg --keyserver "hkp://keys.gnupg.net/" --recv-keys 647F28654894E3BD457199BE38DBBDC86092693E
gpg --keyserver "hkp://keys.gnupg.net/" --recv-keys 64254695FFF0AA4466CC19E67B96E8162A8CF5D1
gpg --keyserver "hkp://keys.gnupg.net/" --recv-keys 5ED9A48FC54C0A22D1D0804CEBC26CDB5A56DE73
gpg --keyserver "hkp://keys.gnupg.net/" --recv-keys E644E2F1D45FA0B2EAA02F33109F098506FF0B14
- 4e) Revenir au shell de l'hote
Dans le shell du conteneur executez la commande suivante:
exit
pour quitter la console du conteneur effectuez la combinaison de touches suivantes:
[ CTRL+a ] puis presser la touche [ q ]
dans notre shell interactif lxc pour stopper le conteneur BaseContainer utilisons la methode avec l'option attach --
Executez la commande suivante:
attach -- poweroff
et pour quitter le shell lxc executez la commande:
quit
- 5) DEMARRER LA COMPILATION DU NOYAU LINUX-RT
[color=# FF0000]IMPORTANT ![/color]
Il est vivement recommande de savoir compiler un noyau linux manuellement et de comprendre les options et leurs fonctionnement. Compiler un noyau linux c'est la possibilite de configurer et d'optimiser le noyau pour sa station de travail. La configuration est enregistree dans un fichier cache nomme .config present a la racine du repertoire du noyau linux
Dans notre cas present, c'est PKGBUILD qui s'occupe de creer ou d'importer le fichier config selon les options utilisees dans le fichier PKGBUILD.
Nous utilisons la methode de snapshot pour compiler le noyau linux-rt. Executez la commande suivante pour demarrer la compilation:
sudo sh -c "obarun-build B s linux-rt"