• [deleted]

  • Edited
-

Introduction

Dans ce didacticiel nous allons:
  1. Installer les outils de travail.
  2. Preparer l'hote.
  3. Configurer le fichier build.conf.
  4. Construire, configurer le conteneur.
  5. Executer la compilation du noyau linux-rt.
  6. 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"
  • 2) PREPARATION DE L'HOTE
    • 2a) 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]

    • 2b) PKGBUILD
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

# git source of obarun-build package
GIT_ADDR="https://github.com/Obarun/obarun-build.git"
[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"
commence et je corrigerai les erreurs si j'en trouve :)

EDIT: installation du service avant de verifier si celui-ci est actif.
EDIT:le service cgmanager n'est plus necessaire avec la version 3.0.0 de lxc

4e) Revenir au shell de l'hote
Il serait peut-être mieux de stopper le container par un poweroff au lieu de le shooter a la sauvage après etre sortie de celui-ci OU peut-être en profiter pour montrer comment on lance une commande dans le container sans être connecter par le biais de la commande attach donc dans le shell interactif : attach -- poweroff

Ton didacticiel commence a être pret, je vais pas tarder a le mettre sur le wiki. Je suis en train de me dire que tu t'embete avec le forum alors que m'envoyer un mail au fur et a mesure aurait été plus simple pour toi vu que je vais le retranscrire sur le wiki :(
2 months later
  • [deleted]

  • Edited
Il serait peut-être mieux de stopper le container par un poweroff au lieu de le shooter a la sauvage après etre sortie de celui-ci OU peut-être en profiter pour montrer comment on lance une commande dans le container sans être connecter par le biais de la commande attach donc dans le shell interactif : attach -- poweroff
Je note.

EDIT: J'ai toujours ce message si je stop le container avec la commande 'stop'
lxc-stop: BaseContainer: commands_utils.c: lxc_cmd_sock_rcv_state: 72 Failed to receive message: Resource temporarily unavailable

EDIT2: Avec la methode qui consiste a utiliser attach -- lorsque j'execute cette commande:
attach -- gpg --keyserver "hkp://keys.gnupg.net/" --recv-keys ABAF11C65A2970B130ABE3C479BE3E4300411886
c'est dans /root/.gnupg que les clefs sont enregistrees.

Etant donne que cela fonctionne bien lorsque les clefs sont enregistrees chez l'utilisateur, j'ai des doutes sur la pertinence d'utiliser /root a cet effet.
Y aurait-il un moyen avec attach -- d'avoir ces clefs chez l'utilisateur et non root ?
Je suis en train de me dire que tu t'embete avec le forum alors que m'envoyer un mail au fur et a mesure aurait été plus simple pour toi vu que je vais le retranscrire sur le wiki
Je procederai de cette facon la prochaine fois. Pour cette fois, ce n'est pas grave du tout.
Tu comptes aussi le traduire en Anglais ?

Quand tu aura mis en ligne la version wiki, je m'occuperai de traduire le didacticiel en Polonais.
Ton didacticiel commence a être pret, je vais pas tarder a le mettre sur le wiki.
Wait encore un peu. Il y a des tournures de phrases a revoir, j'etudie aussi un code couleur et une mise en forme ( gras, italique, ... ) a utiliser pour faciliter la lecture entre les variables, les valeurs, les notes, les infos, etc ...
3 years later
bonjour
je suis tout nouveau. ai découvert le site dans distrowatch aujourd'hui même dans les notices en haut de la marge gauche.
super intéressant, passionnant même! merci de ce développement!

6. Vérifier le résultat obtenu.

?

est-ce un point qui va suivre, ou une simple chose naturelle qui ne demande pas plus d'explications?

comment est défini container dans obarun?

va-t-on / peut-on réaliser tout son système par compilation (un peu comme NuTyx par le passé, car leur script ou marche à suivre semble avoir disparu de leur site), ou SliTaz tout au début?

conditions d'accès au wiki? wiki mono-lingue anglophone uniquement?

cordialement
6. Vérifier le résultat obtenu.
Ceci paraît évident.

Cela fait très longtemps que je n'ai pas utilisé obarun-build (depuis que nous utilisons framagit) et je ne suis même pas sûr que obarun-build soit encore opérationnel :/
comment est défini container dans obarun?
Obarun-build ce sert de lxc comme container.
va-t-on / peut-on réaliser tout son système par compilation (un peu comme NuTyx par le passé, car leur script ou marche à suivre semble avoir disparu de leur site), ou SliTaz tout au début?
C'est possible mais fastidieux. Tu peux très bien prendre chaque PKGBUILD des softs que tu veux "builder" et le faire toi même.
conditions d'accès au wiki? wiki mono-lingue anglophone uniquement?
uniquement en anglais et accés uniquement sur demande et par des utilisateurs d'Obarun de longue date. Je suis désolé, mais nous avons beaucoup trop vu passé de personne ici qui s'enflamme et finisse par tout laisser tomber en plein milieu....
merci! parfaitement compréhensible (pour la langue, hum... je pensais sans l'avoir exploré du tout que le français y était tout naturellement et voulais vous offrir de participer si besoin à l'allemand que je parle comme Bildungsausländer (personne ayant acquis rétroactivement la langue) mais la parlant parfaitement, car, on le voit sur foule de forums parfois très fréquentés, par ex. celui de https://forum.openstreetmap.org/viewforum.php?id=14, bien que depuis 40 ans et plus les allemands s'acharnent à vouloir devenir bilingues, l'anglais y est obligatoire de fait et la seule matière enseignée dès le jardin d'enfants (!) qui ne sont autrement que des garderies sans buts didactiques, à l'exception de la ville de Karlsruhe, où c'est le français, les allemands ne se sentent toujours pas à l'aise en anglais 40 ans après, presque 1/2 siècles d'échec à la mise en place d'un bilinguisme, car commençant au jardin d'enfant aux années duquel s'ajoutent 13 ans (!!!) jusqu'au BAC, on devrait être bilingue, sinon étudier ne sert à rien! Et il est bien connu que les francophones non plus... Ors les 3 distros helvétiques ancien refuge des anglo-allergiques, que je connaissais, Mandrake, Nutyx et Slitaz ont abandonné aussi le français comme langue principale (et, en ce qui concerne l'allemand, en plus l'ex distro de Suisse allemande de Beatrix etc. n'a jamais été, en langue européenne continentale quelconque (car l'anglais N'EST PAS DU TOUT continental en Europe)! Quand à Suse, je ne sais pas / plus. Avant Suse publiait un admirable Manuel Suse en français, donc à plus forte raison en allemand sans doute aussi...).

Powered by Obarun