Hardening consulting

Sortie d'accendino, un installeur pour ogon

Un post après une longue période sans rien publier. Récemment j'ai fait beaucoup de choses autour d'ogon, et j'ai dû déployer à la chaine sur plusieurs machines pour des tests. Le guide de déploiement est bien, mais c'est long et répétitif, et puis sutout si c'est consignable dans un manuel d'installation, c'est que c'est automatisable par un script.


Accendino

J'ai donc créé pour ça ce petit logiciel accendino (briquet en italien) qui va nous permettre d'allumer un grand feu (ogon en russe). Le script va faire passer toutes les instructions du manuel d'installation (sauf celles orientées système pour l'instant) en automatisant tout: installation des packages nécessaire à la compilation, descente des différents dépôts, compilation et installation. Le tout en respectant les dépendances entre paquets: par exemple pour installer le greeter (la mire de login), il faut installer avant: FreeRDP, ogon, ogon-apps et ogon-platform-qt.

Environnement de développement d'ogon

Accendino permet de choisir le type de déploiement, ça en fait donc l'outil idéal pour déployer un environnement de développement d'ogon, par exemple:

$ python accendino.py --prefix=/opt/ogon --build-type=debug

On aura tous les dépôts dans le répertoire work, et un déploiement compilé en debug. Il n'y aura plus qu'à jouer avec les sources et recompiler à la main ou relancer accendino.

Installer des sources alternative d'ogon

Accendino permet aussi de spécifier un fichier de "sources", qui va permettre de compiler ses propres versions de dépôts et aussi de nouvelles choses à compiler. Par exemple le fichier correspondant à ogon forgiare permet d'avoir des nouveautés intéressantes pour ogon.

Petite explication du fichier de sources correspondant:

from accendino import CMakeBuildItem, DepsBuildItem, AutogenBuildItem, XOGON_ENV, OGON_opts, pkgItemsCopy
from accendino import ITEMS_PKG as BASE_ITEMS_PKG

BUILD_ITEMS = [
    CMakeBuildItem('ogon-forgiare', ['freerdp2'], ('https://github.com/forgiare/ogon.git', 'future'),
                                    OGON_opts, parallelJobs=False, provides='ogon'),
    AutogenBuildItem('ogon-xserver-forgiare', ['ogon'], ('https://github.com/linuxrrze/xorg-xserver.git', 'master'),
        extraEnv=XOGON_ENV, runInstallDir='hw/xogon',
        configureArgs=['--disable-xfree86-utils', '--disable-linux-acpi', '--disable-linux-apm', '--disable-xorg', '--disable-xvfb',
                       '--disable-xquartz', '--disable-standalone-xpbproxy', '--disable-xwin', '--disable-glamor', '--disable-kdrive',
                       '--disable-xephyr', '--disable-xfake', '--disable-xfbdev', '--disable-kdrive-kbd', '--disable-kdrive-mouse',
                       '--disable-kdrive-evdev', '--with-vendor-web="http://www.ogon-project.com"', '--disable-xquartz', '--disable-xnest',
                       '--disable-xorg', '--enable-xogon', '--disable-xwayland', '--with-xkb-output=/usr/share/X11/xkb/compiled',
                       '--with-xkb-path=/usr/share/X11/xkb', '--with-xkb-bin-directory=/usr/bin/',
                       'LDFLAGS=-Wl,-rpath={prefix}/{libdir}:{prefix}/lib/x86_64-linux-gnu/'],
                       provides='ogon-xserver'),

    DepsBuildItem('forgiare', ['ogon-forgiare', 'ogon-xserver-forgiare', 'full-ogon-freerdp2']),
]


ITEMS_PKG = {}
pkgItemsCopy(ITEMS_PKG, 'ogon-forgiare', 'ogon') # just copy entries of 'ogon' for all distrib
pkgItemsCopy(ITEMS_PKG, 'ogon-xserver-forgiare', 'ogon-xserver') # just copy entries of 'ogon' for all distrib


DEFAULT_TARGETS='forgiare'

Le fichier est interprété comme un fichier python, d'ou les directives d'imports en début de fichier, et la grande expressivité des fichiers sources (on a toute la puissance de python).

BUILD_ITEMS contient une liste des définitions de paquets. On a une source git à descendre, des dépendances à d'autres paquets accendino et en fonction de l'outil de build (cmake, base autotools ou encore meson), on peut donner des options de compilations. À noter, que l'utilisation de la directive provides permet d'avoir son paquet qui se substitue à une source définie dans accendino, pour peu qu'on demande à ce quelle soit construite avant. Par exemple ogon-forgiare exprime que quand on le construit on construit une version d'ogon. Le fichier de forgiare remplace les builds d'ogon et du serveur X ogon par des versions avec des améliorations.

ITEMS_PKG contient les packages systèmes à installer par distribution et par paquet. La plupart du temps on recopie les dépendences du paquets qu'on surcharge.

Finalement DEFAULT_TARGETS va surcharger les paquets qui sont construits quand on ne donne rien en ligne de commande.

On peut bien sûr ajouter des paquets maison qui iraient avec son déploiement.

Conclusion

En écrivant un fichier de sources personnel, j'ai pû déployer rapidement des développements autour d'ogon. Accendino nécessite sans doute des adaptations pour certaines plate-formes, pour l'instant je l'ai utilisé avec succès sur des distributions debian, Ubuntu et Fedora. Quand il y aura des paquets .deb ou .rpm l'outil perdra peut-être un peu de son intérêt, mais en attendant l'essayer c'est l'adopter.