Difference between revisions of "2022 02 18 Container docker pour vieux BSP"

From ArmadeusWiki
Jump to: navigation, search
(Lancement de Docker)
(Lancement de Docker)
Line 88: Line 88:
  
 
Ach! Très vite on se rend compte que la distribution fournie par docker est bien trop minimaliste pour que l'on puisse travailler avec. Nous allons donc devoir construire notre propre container qui partira de cette distribution pour la customiser.
 
Ach! Très vite on se rend compte que la distribution fournie par docker est bien trop minimaliste pour que l'on puisse travailler avec. Nous allons donc devoir construire notre propre container qui partira de cette distribution pour la customiser.
 +
 +
== Construction d'un container ==
 +
 +
Pour construire son propre container, il faut créer un fichier de configuration avec le nom '''Dockerfile'''. Dans lequel on donnera le container de départ :
 +
<source lang="INI">
 +
#Simple commentaire d'entête
 +
FROM ubuntu:12.04
 +
 +
# on ajoute les dépots apt encore accessible aujourd'hui
 +
 +
# Sources from https://gist.github.com/ivomts/4558134
 +
RUN echo "deb http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >  /etc/apt/sources.list && \
 +
    echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list && \
 +
    echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >> /etc/apt/sources.list && \
 +
    echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list && \
 +
    echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list
 +
</source>
 +
 +
Et on construit le container en lui donnant un nom et une version :
 +
<source lang="sh">
 +
$ sudo docker build -t apf27bsp:0.1 .
 +
Sending build context to Docker daemon  2.56kB
 +
Step 1/2 : FROM ubuntu:12.04
 +
---> 5b117edd0b76
 +
Step 2/2 : RUN echo "deb http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >  /etc/apt/sources.list &&    echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list &&    echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >> /etc/apt/sources.list &&    echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list &&    echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list
 +
---> Running in 0b854be1e236
 +
Removing intermediate container 0b854be1e236
 +
---> 9c3cb7850267
 +
Successfully built 9c3cb7850267
 +
Successfully tagged apf27bsp:0.1
 +
</source>
 +
 +
Le container ainsi construit peut être lancer avec la commande que l'on connaît bien maintenant :
 +
<source>
 +
 +
</source>

Revision as of 16:52, 18 February 2022

Introduction

Avec la pénurie de composants actuelle beaucoup d'entreprises sont contraintes de modifier leurs cartes électroniques de manière à supporter des variantes de leurs composants. Ce changement de composants impose souvent de retoucher le logiciel et de «remettre les mains dans le code» archivé depuis belle lurette. Le temps du développement n'étant pas celui de la production, les projets sont souvent «figés» de longue date. Et les machines qui permettaient de compiler le matériel sont totalement obsolète quand le produit est en «full-prod».

Réinstaller les vieux logiciels qui ont permis de développer le produit se révèle souvent une gageur sur des systèmes actuels.

Heureusement pour Armadeus, tout le développement de ses cartes se fait sous Linux. Et nous avons aujourd'hui un outils formidable pour faire tourner de vieux logiciel sur des systèmes «à jour» : la virtualisation légère, avec notamment le logiciel docker.

Docker, la virtualisation légère

Selon Wikipedia Docker est «une plateforme permettant de lancer certaines applications dans des conteneurs logiciels. Docker étend le format de conteneur Linux standard, LXC, avec une API de haut niveau fournissant une solution pratique de virtualisation qui exécute les processus de façon isolée2.»

Dit simplement, Docker est une machine virtuelle qui émule le système d'exploitation et les librairies mais pas les instructions machine. Ce qui en fait une machine virtuelle très performante.

Docker est très intéressant pour faire tourner un programme dans un environnement logiciels contrôlé avec des versions figées. C'est par exemple le cas pour compiler un BSP en utilisant une vieille distribution linux.

Compilation du BSP armadeus pour APF27

L'APF27 est typiquement la carte qui est encore actuellement en production chez armadeus mais dont le BSP n'est plus utilisable avec les outils actuels. À l'origine, le BSP de l'apf27 était compilé sur des version d'ubuntu datant des années 2010 !

Si l'on veut pouvoir reprendre son projet sans avoir à redémarrer un ordinateur de cette époque, voici comment faire avec docker. L'exemple de cet article a été réalisé sur une distribution ubuntu version Ubuntu 20.04.3 LTS.

Lancement de Docker

Docker est un «deamon» qu'il faut lancer en tâche de fond sur son système. Sur Ubuntu c'est systemd qui contrôle ça :

$ sudo systemctl start docker

Une fois que docker tourne en tâche de fond, on peu lancer directement une console `bash` ubuntu version 12.04 avec la commande

$ sudo docker run -it ubuntu:12.04 /bin/bash
root@1a5b88e1759c:/# cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.5 LTS"
root@1a5b88e1759c:/#

Un container existe déjà sur les serveurs docker avec une version minimaliste. En tapant la commande ci-dessus, docker va simplement télécharger le container pour le lancer sur la machine.

Notre shell bash tourne bien dans une distribution ubuntu version 12.04. Pour visualiser les container actifs dans docker on lancera la commande suivant dans une autre console :

$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS         PORTS     NAMES
1a5b88e1759c   ubuntu:12.04   "/bin/bash"   2 minutes ago   Up 2 minutes             stoic_noether

Si l'on quitte la console avec `exit`, le container sera mis en inactif et il faudra le relancer pour pouvoir s'y ré-attacher :

root@1a5b88e1759c:/# exit
exit
$ sudo docker container start stoic_noether
stoic_noether
$ sudo docker attach stoic_noether
root@1a5b88e1759c:/# history
    1  ls
    2  top
    3  cat /etc/lsb-release 
    4  exit
    5  history
root@1a5b88e1759c:/#

Une fois que l'on se trouve dans la console on peut tenter de télécharger et compiler le bsp armadeus-7.0 par exemple :

root@3264de07ca45:/# cd /opt/
root@3264de07ca45:/opt# mkdir bsp
root@3264de07ca45:/opt# cd bsp/
root@3264de07ca45:/opt/bsp# wget https://sourceforge.net/projects/armadeus/files/armadeus/armadeus-7.0/armadeus-7.0.tar.bz2/download
bash: wget: command not found
root@3264de07ca45:/opt/bsp# apt-get install wget
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package wget
root@3264de07ca45:/opt/bsp# apt-get update
Ign http://archive.ubuntu.com precise Release.gpg
[...]
E: Some index files failed to download. They have been ignored, or old ones used instead.
root@3264de07ca45:/opt/bsp#

Ach! Très vite on se rend compte que la distribution fournie par docker est bien trop minimaliste pour que l'on puisse travailler avec. Nous allons donc devoir construire notre propre container qui partira de cette distribution pour la customiser.

Construction d'un container

Pour construire son propre container, il faut créer un fichier de configuration avec le nom Dockerfile. Dans lequel on donnera le container de départ :

#Simple commentaire d'entête
FROM ubuntu:12.04

# on ajoute les dépots apt encore accessible aujourd'hui

# Sources from https://gist.github.com/ivomts/4558134
RUN echo "deb http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >  /etc/apt/sources.list && \
    echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list && \
    echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >> /etc/apt/sources.list && \
    echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list && \
    echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list

Et on construit le container en lui donnant un nom et une version :

$ sudo docker build -t apf27bsp:0.1 .
Sending build context to Docker daemon   2.56kB
Step 1/2 : FROM ubuntu:12.04
 ---> 5b117edd0b76
Step 2/2 : RUN echo "deb http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >  /etc/apt/sources.list &&     echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list &&     echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise main restricted" >> /etc/apt/sources.list &&     echo "deb http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list &&     echo "deb-src http://old-releases.ubuntu.com/ubuntu/ precise-updates main restricted" >> /etc/apt/sources.list
 ---> Running in 0b854be1e236
Removing intermediate container 0b854be1e236
 ---> 9c3cb7850267
Successfully built 9c3cb7850267
Successfully tagged apf27bsp:0.1

Le container ainsi construit peut être lancer avec la commande que l'on connaît bien maintenant :