OmniCube: Guide d'installation et de configuration

EFit-partners

Mars 2026

Chapter 1
Installation d'OmniOS

1.1  Nouvelle installation

Le système de virtualisation OmniCube est basé sur le système d'exploitation OmniOS lui-même dérivé de Solaris. L'installation d'OmniCube commence donc par l'installation d'OmniOS telle que vous pouvez la retrouver sur site même d'OmniOS (https://omnios.org/setup/freshinstall.html)
Pour effectuer cette installation, il est possible d'utiliser un CD bootable, une clé USB ou PXE. Les images pour ces formats sont disponibles sur la page de téléchargements https://omnios.org/download.html.
Les informations ci-dessous concernent l'installation de la version r151054. L'installation d'une version LTS ultérieure peut légèrement différer sans toutefois présenter de différence rédhibitoire pour l'utilisateur.
OmniOS est un système d'exploitation dédié à la virtualisation qui nécessite la configuration minimale suivante:
A celle-ci s'ajoutent les besoins des machines virtuelles hébergées.

1.2  Démarrage à partir de l'image

Lors du démarrage à partir d'un CD, d'une clé USB ou d'un PXE, le programme d'installation d'OmniOS affiche plusieurs options dont l'installation est celle par défaut. Pour procéder à l'installation, il suffit donc d'appuyer sur la touche return ou de laisser s'écouler le temps nécessaire pour que l'installation se poursuive.

Figure 1.1: Écran du loader
Une fois le programme d'installation démarré, il est possible d'utiliser l'ancien programme d'installation en mode texte en appuyant sur T dans les 10 secondes. Si l'on presse la touche return ou si le délai expire, le programme d'installation par défaut en mode dialogue sera lancé.

Figure 1.2: Selection de l'installer
Sélectionnez la disposition de clavier souhaitée dans le menu affiché. Les touches fléchées permettent de se déplacer vers le haut et vers le bas, ou la première lettre de la sélection souhaitée permet de passer aux entrées commençant par cette lettre; appuyez plusieurs fois pour faire défiler les dispositions commençant par la même lettre. Une fois votre choix effectué, appuyez sur return pour continuer.

Figure 1.3: Selection du type de clavier
Après avoir sélectionné la disposition du clavier, le menu d'installation de niveau supérieur s'affiche. Cela offre plusieurs options, mais pour une installation simple sur un disque dur vierge, sélectionnez l'option en surbrillance Find disks, create rpool, and install OmniOS et appuyez sur return.

Figure 1.4: Install, shell ou reboot
L'écran suivant affiche la liste des disques durs détectés par le système. Sélectionnez les disques à utiliser pour l'installation en vous déplaçant vers le haut et vers le bas à l'aide des touches fléchées et en appuyant sur la barre d'espace pour cocher la case en regard de chaque élément. Une fois terminé, appuyez sur return pour continuer.
Si plusieurs disques sont sélectionnés et en fonction de leur nombre, l'écran suivant vous invitera à choisir le niveau RAID souhaité pour le zpool d'installation.

Figure 1.5: Sélection des disques
Ensuite, si plusieurs disques ont été sélectionnés, choisissez le type de configuration RAID souhaité pour le pool racine. Les options affichées ici dépendront du nombre de disques sélectionnés à l'étape précédente.

[b]0.49 RAID 4 disques [b]0.49 RAID 2 disques Sélection RAID
Ceci fait, la configuration du rpool s'affiche proposant d'éventuellement changer son nom, le schéma de partitionnement (UEFI), la compression ou la taille des secteurs.

Figure 1.6: Configuratnio du rpool
Entrez un nom d'hôte pour le nouveau système, puis appuyez sur return.

Figure 1.7: Choix du hostname
Pour sélectionner un fuseau horaire, choisissez d'abord un continent ou un océan dans le menu affiché, puis sélectionnez une région et enfin le fuseau horaire souhaité. Si vous souhaitez entrer directement une chaîne de fuseau horaire POSIX, sélectionnez la dernière option affichée (none) ou, si vous souhaitez utiliser UTC, choisissez directement cette option.
Il est important de noter ici que, si la fonctionnalité de snapshot automatique de l'OmniCube est utilisée, le fuseau horaire doit être UTC. Dans le cas contraire, lors du passage de l'heure d'été à l'heure d'hiver, des snapshots seront perdus. De plus, si une infrastructure couvre plusieurs fuseaux horaires, il est plus simple que les snapshots pris à intervalles réguliers aient une nomenclature cohérente entre les sites.

[b]0.49 [b]0.49 Choix du fuseau horaire
Le programme d'installation commence alors à installer l'image du système d'exploitation sur le zpool et affiche la progression à l'écran.

Figure 1.8: Barre de progression ZFS
Une fois l'écriture sur le zpool terminée, le programme d'installation affiche des informations sur l'état actuel du système qui a maintenant le rpool monté, prêt à être configuré. Appuyez sur return pour continuer.

Figure 1.9: Installation complète
Le menu post-installation offre la possibilité de configurer certains paramètres système de base avant le premier démarrage, ainsi que des options pour redémarrer ou arrêter le système.

Figure 1.10: Post-installation

Figure 1.11: Post-configuration
La sélection de la première option affiche un menu permettant de configurer certains paramètres système initiaux tels que l'adresse IP et les mots de passe.
Une configuration réseau simple peut être effectuée via le menu présenté. Toutefois, dans le cadre d'une installation d'OmniCube dont l'utilisation réclame en général disponibilité et sécurité, il est recommandé de configurer un agrégat LACP et des VLANs. Ce genre de configuration plus sophistiquée se fait en ligne de commande, comme nous le verrons par la suite.

Figure 1.12: Configuration réseau
Pour l'installation d'OmniCube, il est recommandé de:
OmniOS est livré avec deux méthodes différentes pour l'élévation des privilèges. pfexec est la norme Solaris/OmniOS/Illumos qui utilise des profils pour spécifier les privilèges, mais sudo, bien que déconseillé, est également inclus et pris en charge. Lors de la création de l'utilisateur il est conseillé de lui attribuer le rôle Administrateur principal qui lui permet d'accéder au compte root via pfexec.

[b]0.32 [b]0.32 [b]0.32 Création d'un user
Une fois terminé, la clé USB ou le CD peut être retiré et le système peut être redémarré via le menu.
L'écran de démarrage qui s'affiche à partir du disque dur est presque identique à celui du CD ou de la clé USB. Vous pouvez appuyer sur return ou attendre la fin du délai pour démarrer le système d'exploitation.

Figure 1.13: Premier boot
Au premier démarrage, la base de données des manifestes des services est créée et un compte à rebours s'affiche. Les démarrages suivants seront beaucoup plus rapides.
Sauf configuration explicite dans le menu de configuration post-installation, le mot de passe de l'utilisateur root sera vide (appuyez simplement sur return). L'installation est terminée et root est connecté.

1.3  Configuration réseau avancée

Chapter 2
Mise à jour du système

2.1  Packaging

2.1.1  Dépôts IPS

OmniOS adopte une approche par couches pour le packaging. En plus du logiciel assez minimaliste fourni avec le système d'exploitation de base, des packages supplémentaires sont fournis via des dépôts supplémentaires. Il existe un dépôt supplémentaire géré par l'OmniOS Association et plusieurs autres gérés par des tiers dont celui d'OmniCube.
Une installation de base d'OmniOS présente ses dépôts comme suit:
root@omnicube:~# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
omnios                      origin   online F https://pkg.omnios.org/r151054/core/
omnios                      mirror   online F https://us-west.mirror.omnios.org/r151054/core/
extra.omnios                origin   online F https://pkg.omnios.org/r151054/extra/
extra.omnios                mirror   online F https://us-west.mirror.omnios.org/r151054/extra/

OmniCube

Comme tous les éléments de l'OmniCube sont packagés, pour pouvoir l'installer, il suffit d'ajouter son dépôt aux serveurs:
~# pkg set-publisher -m https://omnios.efit-partners.eu/r151054/ omnicube

La configuration de publishers est alors la suivante:
user@server:~$ pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
omnios                      origin   online F https://pkg.omnios.org/r151054/core/
extra.omnios                origin   online F https://pkg.omnios.org/r151054/extra/
omnicube                    origin   online F https://omnios.efit-partners.eu/r151054/

Dépôt OmniCube LTS

Les versions paires d'OmniOS sont stables et les versions impaires sont instables (bloody). Une version stable sur quatre est une version de support à long terme (LTS). Les versions LTS bénéficient d'un support pendant trois ans.
Bien que l'utilisation des dépôts OmniOS soit parfaitement compatible avec l'OmniCube, l'utilisation de versions LTS est recommandée pour leur stabilité dans le temps.
Cependant, comme tout logiciel libre, OmniOS est en constante évolution ce qui signifie qu'une version installée sur un nouveau serveur pourrait diverger des précédentes. Pour permettre une homogénéité des versions à travers de tous les nodes d'un OmniCube, il est possible d'utiliser les dépôts proposant toutes les différentes versions des LTS, actuellement sans limite dans le temps.
Pour ce faire, il suffit de remplacer les dépôts d'OmniOS comme suit:
user@server:~# pfexec su -
root@server:~# pkg unset-publisher omnios
PHASE                                          ITEMS
Updating package cache                           1/1 
root@server:~# pkg unset-publisher extra.omnios
PHASE                                          ITEMS
Updating package cache                           1/1 
root@server:~# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
root@server:~# pkg set-publisher -r -O https://pkg.omnicube.org/r151054bj/ omnios
root@server:~# pkg set-publisher -r -O https://pkg.omnicube.org/r151054bj/ extra.omnios

root@server:~$ pkg set-publisher -r -O https://pkgdev.efit-partners.eu/r151054/ efit-partners
root@server:~$ pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
omnios                      origin   online F https://pkg.omnicube.org/r151054bj/
extra.omnios                origin   online F https://pkg.omnicube.org/r151054bj/
efit-partners               origin   online F https://pkgdev.efit-partners.eu/r151054/

2.2  Patching d'OmniOS

2.2.1  Mettre à jour tous les packages

La première chose à faire après avoir installé OmniOS est de s'assurer que tous les paquets sont à jour. Les paquets dans OmniOS sont gérés à l'aide de l'utilitaire de ligne de commande pkg. Commencez par vous assurer que la liste des paquets disponibles est à jour
~$ pfexec pkg refresh
Actualisation du catalogue 1/1 omnios

et affichez les mises à jour disponibles (aucun privilège requis)
~$ pkg list -u
NOM (ÉDITEUR)                                  VERSION                    IFO
archiver/gnu-tar                                  1.29-0.151024              i--
...

et pour appliquer toutes les mises à jour, il suffit de
~$ pfexec pkg update

Si l'une des mises à jour nécessite un redémarrage, un nouvel environnement de démarrage sera créé et cela sera indiqué dans la sortie. Un clone d'OmniOS existe et a été mis à jour et activé. Au prochain démarrage, l'environnement de démarrage omnios-1 sera monté sur « / ». Redémarrez lorsque vous êtes prêt à passer à cet environnement de démarrage mis à jour.
Redémarrez à l'aide de shutdown ou init:
~$ pfexec init 6...

ou ...
~$ pfexec shutdown -i 6

Ne soyez pas tenté d'utiliser reboot now, car cela entraînerait le chargeur d'amorçage à essayer de charger un noyau nommé "now", ce qui échouerait et le ferait passer à son quatrième interpréteur avec une invite ok. Si vous faites cela, la récupération est possible via les deux commandes suivantes
ok set bootfile=platform/i86pc/kernel/amd64/unix
ok boot

Chapter 3
Installation d'OmniCube

3.1  Prérequis

3.1.1  NTP

Tous les nodes constitutifs de l'OmniCube doivent être parfaitement synchronisés via NTP: le consensus Raft entre orderers et la validité des certificats TLS en dépendent directement.
~$ pfexec su -
~# pkg install pkg:/service/network/ntpsec

Éditez /etc/inet/ntp.conf pour y déclarer vos serveurs de temps, ceux de votre réseau, pas une source publique si l'OmniCube est isolé (exemple ici: 10.155.252.[1,2]):
server 10.155.252.1 iburst
server 10.155.252.2 iburst

Forcez une première synchronisation avant de démarrer le service, sans quoi un écart trop important au premier lancement peut le faire refuser de démarrer:
~# ntpdate -b 10.155.252.1
~# svcadm enable network/ntp

Vérifiez enfin que le service est bien synchronisé sur chaque node avant de lancer oc-install:
~# ntpq -p

3.1.2  Réseau

L'adresse IP du réseau de management doit être configurée sur l'interface avant de lancer l'installation: oc-install propose un choix parmi les adresses déjà présentes (ipadm show-addr), il n'en crée aucune.

3.1.3  Installation des packages

Toute l'installation logicielle tient en une seule commande:
~# pkg install omnicube/omnicube

Ce package dépend de omnicube/hyperledger-fabric (les binaires peer, orderer, osnadmin, configtxgen, configtxlator, cryptogen), ainsi que des brands de zones (bhyve, ipkg, lipkg, lx, sparse), du service iSCSI (cible et initiateur), d'OpenJDK 21 et de jq; tous sont installés automatiquement.

3.2  Vue d'ensemble

Chaque node de l'OmniCube héberge son propre orderer et son propre peer Hyperledger Fabric, tous deux membres d'un unique canal nommé omnicube sur lequel est déployé un unique chaincode, également nommé omnicube. Un node correspond à une organisation Fabric à part entière, identifiée par son hostname (à la fois côté orderer, sous la forme <hostname>Orderer, et côté peer/application, sous la forme <hostname>).
Une fois l'installation terminée, chaque node fait tourner quatre services SMF:
svc:/omnicube/hyperledger-orderer
Un orderer node, ou simplement orderer, se charge de l'ordonnancement des transactions soumises sur le canal omnicube et, avec les autres orderer nodes, forme le service d’ordonnancement. La conception de Fabric reposant sur des algorithmes de consensus déterministes, tout bloc validé par les pairs est garanti comme étant définitif et correct. Les registres ne peuvent donc pas diverger comme c’est le cas dans de nombreux autres réseaux de blockchain.
svc:/omnicube/hyperledger-peer
Un élément fondamental d’un réseau blockchain Hyperledger Fabric est l’ensemble des peer nodes ou, simplement, les peers. OmniCube a par défaut un peer par node lancé par le service svc:/omnicube/hyperledeger-peer. Il gère les registres, endosse et valide les transactions, et expose l'API gRPC locale utilisée par le daemon.
svc:/omnicube/omnicube-chaincode
Le chaincode omnicube lui-même (classe OmniCubeContract). Il tourne en Chaincode as a Service (CCaaS): c'est un process autonome, à l'écoute sur 127.0.0.1:9999, auquel le peer se connecte. Il porte la logique métier: une suite de transactions par type d'objet (zone, zpool, disk, diskview, node), les erreurs étant remontées comme des exceptions qui annulent la transaction.
svc:/omnicube/omnicube-daemon
Le daemon OmniCube (classe OcDaemon), exécuté en root. C'est l'agent du node: il maintient le ledger comme un miroir fidèle de ce que Solaris détient réellement, à partir de trois sources - un scan initial de rattrapage, les sysevents Solaris en régime permanent, et les commandes envoyées par la GUI. Il s'appuie pour cela sur la librairie native libomnicube (via Java FFM/Panama) pour dialoguer avec OmniOS. Il faut enfin insister sur le fait que la seule source autoritative est OmniOS, le ledger n'étant que le reflet de la réalité des nodes.
Toute la configuration passe par un unique utilitaire interactif:
~# /opt/omnicube/utils/oc-install

Select your OmniCube configuration option:
1) New OmniCube installation
2) Join node to existing OmniCube
3) Admit a new node
4) Authentication configuration
5) Quit

New OmniCube installation
initialise un OmniCube depuis zéro (premier node, bloc de genèse local).
Join node to existing OmniCube
fait rejoindre ce node à un OmniCube existant.
Admit a new node
s'exécute sur un node déjà membre, en réponse à un join en cours ailleurs: c'est ce qui fait réellement accepter le nouveau node dans le canal.
Authentication configuration
n'est pas encore implémentée à ce jour (option présente dans le menu mais sans effet); l'intégration LDAP/AD se fait aujourd'hui exclusivement au niveau du système d'exploitation (voir chapitre Intégration Active Directory).
Join et Admit forment une paire: le premier se lance sur le nouveau node, le second sur un node déjà en place, et les deux options doivent être exécutées à peu près en parallèle, dans deux sessions séparées.

3.3  Installation du premier node

Sur le tout premier node de l'OmniCube, choisissez 1) New OmniCube installation. Sélectionnez d'abord l'adresse IP du réseau de management:
What is the network dedicated to the Hypercube?
1) 127.0.0.1/8
2) 10.155.252.14/24
3)::1/128

Le script substitue alors cette adresse (et le hostname local) dans les fichiers de configuration Fabric (crypto-config.yaml, configtx.yaml, orderer.yaml, core.yaml, sous /etc/opt/omnicube/hyperledger/), génère le matériel cryptographique de l'organisation (MSP + certificats TLS orderer/peer, réémis avec les bons SAN), puis produit le bloc de genèse du canal omnicube:
Network configuration
	/etc/opt/omnicube/hyperledger/crypto-config.yaml... updated
	/etc/opt/omnicube/hyperledger/configtx.yaml... updated
	/etc/opt/omnicube/hyperledger/orderer.yaml... updated
	/etc/opt/omnicube/hyperledger/core.yaml... updated
done

Cryptographic material generation...
done

Genesis block generation...
done

L'orderer est ensuite démarré, puis rejoint lui-même le canal à partir de ce bloc de genèse local:
~# svcadm enable -s svc:/omnicube/hyperledger-orderer:default

Channel join...
done

Le peer est démarré à son tour et rejoint le même canal:
~# svcadm enable -s svc:/omnicube/hyperledger-peer:default

Peer join...
done

Enfin, le chaincode omnicube est installé, approuvé et committé (le canal ne connaît encore aucune définition, donc à la séquence 1), et les services applicatifs sont démarrés:
Chain code import...
done

Chain code approve...
	package id: omnicube_1.0:1a2b3c...
	sequence: 1
done

Chain code commit...
done

Chain code service...
~# svcadm enable -s svc:/omnicube/omnicube-chaincode:default
~# svcadm enable -s svc:/omnicube/omnicube-daemon:default
done

3.4  Vérification

~# svcs -xv "*omnicube*"
svc:/omnicube/hyperledger-orderer:default (Hyperledger orderer daemon)
 State: online since September 23, 2026 at 12:22:21 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-hyperledger-orderer:default.log
Impact: None.

svc:/omnicube/omnicube-chaincode:default (Omnicube chaincode)
 State: online since September 23, 2026 at 12:23:29 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-omnicube-chaincode:default.log
Impact: None.

svc:/omnicube/hyperledger-peer:default (Hyperledger peer daemon)
 State: online since September 23, 2026 at 12:22:24 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-hyperledger-peer:default.log
Impact: None.

svc:/omnicube/omnicube-daemon:default (Omnicube chaincode)
 State: online since September 26, 2026 at 02:44:06 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-omnicube-daemon:default.log
Impact: None.

3.5  Ajout d'un nouveau node

Ajouter un node à un OmniCube existant nécessite une action sur deux machines: le nouveau node (join) et un node déjà membre disposant des droits d'administration du canal (admit). Les deux étapes s'entrelacent: le join attend que l'admit soit fait ailleurs avant de continuer.

3.5.1  Sur le nouveau node

Lancez oc-install, choisissez 2) Join node to existing OmniCube, puis sélectionnez l'adresse IP du réseau de management comme pour le premier node. Le matériel cryptographique de l'organisation est généré localement, puis le script publie les descripteurs de cette nouvelle organisation (au format attendu par un channel update) sur un petit serveur HTTP embarqué et attend:
Run oc-install "Admit a new node" on an existing node and hit enter when finished...

Ne validez pas encore: passez à l'étape suivante sur un node existant.

3.5.2  Sur un node existant

Sur un node déjà membre de l'OmniCube, lancez oc-install et choisissez 3) Admit a new node. Le script récupère la configuration courante du canal depuis son propre peer, puis demande l'adresse IP du nouveau node:
Enter the IP of the new node: 10.155.252.18

Il télécharge alors les descripteurs d'organisation publiés par le nouveau node à l'étape précédente, construit une mise à jour de la configuration du canal (ajout de l'organisation dans le groupe Application, dans le groupe Orderer, et ajout du nouveau consenter Raft), la signe avec les identités administrateur orderer et peer de ce node, puis la soumet:
consenter admitted and verified

Ce message ne s'affiche que lorsque le nouveau consenter Raft est effectivement retrouvé dans la configuration committée du canal, pas seulement accepté pour ordonnancement.

3.5.3  Retour sur le nouveau node

Une fois l'admission confirmée sur le node existant, revenez au terminal du nouveau node et validez l'invite laissée en attente. Le script demande alors l'adresse IP de ce node admettant:
Enter the IP of the admitting node: 10.155.252.14

Il y récupère la configuration courante du canal ainsi que le bloc de genèse (bloc 0), démarre l'orderer local et le fait rejoindre le canal, démarre le peer local et le fait rejoindre le canal à partir du bloc de genèse récupéré, puis installe le chaincode omnicube et l'approuve à la séquence déjà committée par les autres nodes (aucun nouveau commit n'est nécessaire, la définition existe déjà sur le canal):
Chain code already defined at sequence 1, adopting it.

Comme pour le premier node, les services omnicube-chaincode et omnicube-daemon sont démarrés en dernier. Vérifiez l'état des services avec la même commande svcs -xv "*omnicube*" que pour le premier node.

3.6  Installation de l'interface graphique

Il manque encore l'interface graphique en tant que telle.
~# pkg install hypercube/gui
           Packages to install:  1
            Services to change:  2
       Create boot environment: No
Create backup boot environment: No

Planning linked: 0/1 done; 1 working: zone:test-lipkg-second
Linked image 'zone:test-lipkg-second' output:
`
Planning linked: 1/1 done
DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1   28741/28741    46.1/46.1  544k/s

Downloading linked: 0/1 done; 1 working: zone:test-lipkg-second
Downloading linked: 1/1 done
PHASE                                          ITEMS
Installing new actions                   32888/32888
Updating package state database                 Done
Updating package cache                           0/0
Updating image state                            Done
Creating fast lookup database                   Done
Reading search index                            Done
Updating search index                            1/1
Executing linked: 0/1 done; 1 working: zone:test-lipkg-second
Executing linked: 1/1 done
Updating package cache                           3/3

Il ne reste plus qu'à démarrer le service de l'interface graphique.
~# svcadm enable svc:/hypercube/gui:default
~# svcs -xv *"hypercube"*
svc:/hypercube/gui:default (node_guid daemon and vue server)
 State: online since May 14, 2025 at 10:01:01 PM UTC
   See: man -M /usr/share/man -s 8 node_gui
   See: https://www.efit-partners.eu/
   See: /var/svc/log/hypercube-gui:default.log
Impact: None.

svc:/hypercube/hypercubed:default (OmniCube daemon)
 State: online since May 14, 2025 at 09:54:26 PM UTC
   See: man -M /usr/share/man -s 8 hypercubed
   See: https://www.efit-partners.eu/
   See: /var/svc/log/hypercube-hypercubed:default.log
Impact: None.

svc:/hypercube/ethereum:geth (SMF for go-ethereum.)
 State: online since May 14, 2025 at 09:51:56 PM UTC
   See: man -M /usr/share/man -s 8 geth
   See: https://geth.ethereum.org/
   See: /var/svc/log/hypercube-ethereum:geth.log
Impact: None.

L'interface graphique est désormais accessible via l'adresse IP du node ou de la zone sur lequel elle a été installée.

Chapter 4
Intégration Active Directory

4.1  Introduction

OmniOS peut s'intégrer dans un domaine Active Directory en tant que serveur de fichiers SMB et utiliser un serveur Active Directory à la fois pour l'authentification de connexion, pour fournir des services de noms aux comptes utilisateurs et pour le contrôle d'accès basé sur les rôles (RBAC).

4.2  Prérequis

Pour pouvoir gérer la plupart des fonctionnalités listées ci-dessus dans l'AD, il est nécessaire de modifier le schéma de ce dernier en utilisant ADextend.ldif. L'explication pour modifier un schéma AD dépasse le cadre du présent document.

4.3  Préparation du système

4.3.1  DNS

Utilisez votre AD comme serveur DNS ou un server qui redirige les requêtes de votre domaine ad-domain.intra et _msdcs.ad-domain.intra.
# cat <<CFG_END >/etc/resolv.conf
nameserver 10.1.1.1
domain ad-domain.intra
search ad-domain.intra
CFG_END

4.3.2  NTP

Activez NTP, car une heure précise est essentielle pour le fonctionnement de Kerberos. La synchronisation peut être forcée en cas de forte différence de temps.
~$ pfexec su -
~#pkg install pkg:/service/network/ntpsec
~# ntpdate -b 10.0.0.1
~# svcadm enable network/ntp

4.3.3  LDAP

Le plugin OmniOS Active Directory ne prend pas en charge l'intégration complète de la connexion. Nous devons donc configurer un utilisateur ldap proxy, puis configurer le client LDAP pour activer les connexions Unix avec des comptes LDAP. L'utilisateur AD proxy doit disposer des droits appropriés pour lire les entrées du compte utilisateur.

4.3.4  Kerberos

4.3.5  PAM

Enfin, PAM doit être configuré pour utiliser kerberos lorsque cela est approprié via /etc/pam.conf. Les entrées sont probablement déjà présentes, il vous suffit de supprimer le caractère de commentaire #1.
login   auth sufficient         pam_krb5.so.1
krlogin auth required           pam_krb5.so.1
krsh    auth required           pam_krb5.so.1
ktelnet auth required           pam_krb5.so.1
other   auth sufficient         pam_krb5.so.1

4.3.6  Utilisateurs

Pour chaque utilisateur (SAMAccountName ou uid), il y a lieu de créer un home directory et d'y copier les skeletons.
~$ pfexec su -
~# mkdir /export/home/{SAMAccountName}
~# cp -p /etc/skel/.[a-z]* /export/home/{SAMAccountName}
~# chown -R {SAMAccountName}:other /export/home/{SAMAccountName}

Éventuellement, l'utilisateur peut se voir attribuer les droits d'administrateur (root) par ajout de [SAMAccountName]::::type=normal;profiles=Primary Administrator à un fichier nommé librement dans le directory /etc/user_attr.d/
~$ pfexec vi /etc/user_attr.d/

4.3.7  SMB

Activer le partage de fichiers SMB. Pour nous assurer que nous avons les mêmes identifiants utilisateur partout, nous voulons les conserver dans Active Directory.
~# svccfg -s svc:/system/idmap setprop config/directory_based_mapping=astring: idmu
~# svcadm refresh svc:/system/idmap

~# sharectl set -p lmauth_level=5 smb
~# sharectl set -p system_comment=« My Funny Fileserver » smb
~# svcadm enable -r smb/server

4.3.8  Tests

Votre serveur OmniOS devrait maintenant être accessible en tant que serveur de fichiers smb depuis les clients Windows, permettant ainsi l'accès SSO. Sur la ligne de commande OmniOS, vous devriez voir tous les comptes utilisés avec getent passwd.

4.4  Multifactor Authentication (MFA)

Une fois OmniOS connecté à un directory quelqu'il soit, c'est ce dernier qui prendra en charge le Multifactor Authentication. Bien que nombre de produit implémente leur propre système d'authentification voir un MFA indépendant, cette approche est délétère simplement parce qu'elle nécessite de maintenir les comptes utilisateurs dans plusieurs produits différents. L'OmniCube n'a pas vocation à se substituer à un directory mais bien à l'utiliser pour l'authentification.

Chapter 5
Configuration d'une console série

5.1  Introduction

De nombreuses cartes mères modernes prennent en charge l'accès à une console à distance. Intel appelle sa solution "Baseboard Management Controller" (BMC). HPE la nomme "Integrated Lights-Out" (iLO), ... Outre leur interface Web conviviale, BMC/iLO offrent également une fonctionnalité appelée SOL SSH. Celle-ci permet d'accéder au premier port série (ttya/com1) via ssh. Une fois configurée, vous pouvez accéder aux paramètres du BIOS et à d'autres éléments liés au démarrage, tels que la sélection du support de démarrage, via ssh, ce qui est très pratique. Mais mieux encore, vous pouvez également configurer OmniOS pour fournir un accès à une console série via ce chemin. Ce qui constitue une excellente option de récupération. Les exemples suivants sont des captures d'écran d'une carte mère Intel S2600ST utilisant donc BMC.

5.2  Configuration du BMC

Configurer le port SSH SOL

Figure 5.1: Configuration du port SSH SOL
Activer SSH SOL

Figure 5.2: Activation du port SSH SOL

5.3  Paramètres BIOS

Activer le port série

Figure 5.3: Activation du port série
Activer la redirection de la console. Comme nous exécutons la console sur une interface Ethernet dédiée, SOL est uniquement activé à cet endroit.

Figure 5.4: Activation du port série

5.4  Configurer la console série dans OmniOS

Configurer les ports ttya.
~# sttydefs -r ttya
~# sttydefs -a ttya -i '115200 hupcl opost onlcr ofill' -f '115200'

Configurez une nouvelle instance de connexion à la console
~# svccfg -s svc:/system/console-login delete -f ttya
~# svccfg -f - <<EOF
select svc:/system/console-login
add ttya
select svc:/system/console-login:ttya
addpg ttymon application
setprop ttymon/device = astring: /dev/term/a
setprop ttymon/terminal_type = astring: xterm
setprop ttymon/label = astring: ttya
setprop ttymon/modules = astring: ldterm,ttcompat
setprop ttymon/nohangup = boolean: true
setprop ttymon/prompt = astring: "`uname -n` ttya login:"
addpg general framework
EOF

Activez les nouvelles connexions à la console
~# svcadm enable svc:/system/console-login:ttya

Autorisez les connexions root sur toutes les consoles
~# perl -i -p -e 's/\s*(CONSOLE.+)/# $1/' /etc/default/login

5.5  Configurez le boot loader pour utiliser la console série

Vous pouvez également configurer le chargeur de démarrage d'Omnios pour communiquer via la série:
~# cat >/boot/conf.d/serial <<EOF
boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
os_console="text"
console="ttya,text"
ttya-mode="115200,8,n,1,-"
EOF

Enfin effectuez un update du boot archive et redémarrez
~# bootadm update-archive
~# init 6

5.6  Tests

. Vous pouvez maintenant vous connecter en ssh sur la console
~# ssh -p 66 server-console-ip

5.7  Redimentionnement de la console

Si vous avez essayé vim sur votre nouvelle console série, vous avez probablement été déçu: l'écran s'est affiché de manière confuse.
Cela s'explique par le fait que, via la connexion à la console série, stty ne semble pas être correctement informé de la taille de l'écran et de ses modifications. Exécutez stty et il indiquera que le nombre de lignes et de colonnes est égal à 0, ce qui n'est pas idéal.
Il existe toutefois un moyen de résoudre ce problème. Le plus simple est de taper resize pour régler le problème... Malheureusement, la commande resize fait partie du paquet xterm qui n'est probablement pas installé sur votre GZ OmniOS. Si vous utilisez bash, il existe toutefois une autre solution en passant par une petite fonction shell que vous n'aurez qu'à mettre dans votre profile.
# .bash_profile
if [ ! -f /usr/bin/resize ]; then
resize() {
  old=$(stty -g)
  stty -echo
  printf '\033[18t'
  IFS=';' read -d t _ rows cols _
  stty "$old"
  stty cols "$cols" rows "$rows"
}
fi
# resize terminal
if [ "$(tty)" = '/dev/term/a' ]; then
   resize
fi


Footnotes:

1Voir man pam_krb5 pour plus de détails OmniCube: Guide d'installation et de configuration

OmniCube: Guide d'installation et de configuration

EFit-partners

Mars 2026

Chapter 1
Installation d'OmniOS

1.1  Nouvelle installation

Le système de virtualisation OmniCube est basé sur le système d'exploitation OmniOS lui-même dérivé de Solaris. L'installation d'OmniCube commence donc par l'installation d'OmniOS telle que vous pouvez la retrouver sur site même d'OmniOS (https://omnios.org/setup/freshinstall.html)
Pour effectuer cette installation, il est possible d'utiliser un CD bootable, une clé USB ou PXE. Les images pour ces formats sont disponibles sur la page de téléchargements https://omnios.org/download.html.
Les informations ci-dessous concernent l'installation de la version r151054. L'installation d'une version LTS ultérieure peut légèrement différer sans toutefois présenter de différence rédhibitoire pour l'utilisateur.
OmniOS est un système d'exploitation dédié à la virtualisation qui nécessite la configuration minimale suivante:
A celle-ci s'ajoutent les besoins des machines virtuelles hébergées.

1.2  Démarrage à partir de l'image

Lors du démarrage à partir d'un CD, d'une clé USB ou d'un PXE, le programme d'installation d'OmniOS affiche plusieurs options dont l'installation est celle par défaut. Pour procéder à l'installation, il suffit donc d'appuyer sur la touche return ou de laisser s'écouler le temps nécessaire pour que l'installation se poursuive.

Figure 1.1: Écran du loader
Une fois le programme d'installation démarré, il est possible d'utiliser l'ancien programme d'installation en mode texte en appuyant sur T dans les 10 secondes. Si l'on presse la touche return ou si le délai expire, le programme d'installation par défaut en mode dialogue sera lancé.

Figure 1.2: Selection de l'installer
Sélectionnez la disposition de clavier souhaitée dans le menu affiché. Les touches fléchées permettent de se déplacer vers le haut et vers le bas, ou la première lettre de la sélection souhaitée permet de passer aux entrées commençant par cette lettre; appuyez plusieurs fois pour faire défiler les dispositions commençant par la même lettre. Une fois votre choix effectué, appuyez sur return pour continuer.

Figure 1.3: Selection du type de clavier
Après avoir sélectionné la disposition du clavier, le menu d'installation de niveau supérieur s'affiche. Cela offre plusieurs options, mais pour une installation simple sur un disque dur vierge, sélectionnez l'option en surbrillance Find disks, create rpool, and install OmniOS et appuyez sur return.

Figure 1.4: Install, shell ou reboot
L'écran suivant affiche la liste des disques durs détectés par le système. Sélectionnez les disques à utiliser pour l'installation en vous déplaçant vers le haut et vers le bas à l'aide des touches fléchées et en appuyant sur la barre d'espace pour cocher la case en regard de chaque élément. Une fois terminé, appuyez sur return pour continuer.
Si plusieurs disques sont sélectionnés et en fonction de leur nombre, l'écran suivant vous invitera à choisir le niveau RAID souhaité pour le zpool d'installation.

Figure 1.5: Sélection des disques
Ensuite, si plusieurs disques ont été sélectionnés, choisissez le type de configuration RAID souhaité pour le pool racine. Les options affichées ici dépendront du nombre de disques sélectionnés à l'étape précédente.

[b]0.49 RAID 4 disques [b]0.49 RAID 2 disques Sélection RAID
Ceci fait, la configuration du rpool s'affiche proposant d'éventuellement changer son nom, le schéma de partitionnement (UEFI), la compression ou la taille des secteurs.

Figure 1.6: Configuratnio du rpool
Entrez un nom d'hôte pour le nouveau système, puis appuyez sur return.

Figure 1.7: Choix du hostname
Pour sélectionner un fuseau horaire, choisissez d'abord un continent ou un océan dans le menu affiché, puis sélectionnez une région et enfin le fuseau horaire souhaité. Si vous souhaitez entrer directement une chaîne de fuseau horaire POSIX, sélectionnez la dernière option affichée (none) ou, si vous souhaitez utiliser UTC, choisissez directement cette option.
Il est important de noter ici que, si la fonctionnalité de snapshot automatique de l'OmniCube est utilisée, le fuseau horaire doit être UTC. Dans le cas contraire, lors du passage de l'heure d'été à l'heure d'hiver, des snapshots seront perdus. De plus, si une infrastructure couvre plusieurs fuseaux horaires, il est plus simple que les snapshots pris à intervalles réguliers aient une nomenclature cohérente entre les sites.

[b]0.49 [b]0.49 Choix du fuseau horaire
Le programme d'installation commence alors à installer l'image du système d'exploitation sur le zpool et affiche la progression à l'écran.

Figure 1.8: Barre de progression ZFS
Une fois l'écriture sur le zpool terminée, le programme d'installation affiche des informations sur l'état actuel du système qui a maintenant le rpool monté, prêt à être configuré. Appuyez sur return pour continuer.

Figure 1.9: Installation complète
Le menu post-installation offre la possibilité de configurer certains paramètres système de base avant le premier démarrage, ainsi que des options pour redémarrer ou arrêter le système.

Figure 1.10: Post-installation

Figure 1.11: Post-configuration
La sélection de la première option affiche un menu permettant de configurer certains paramètres système initiaux tels que l'adresse IP et les mots de passe.
Une configuration réseau simple peut être effectuée via le menu présenté. Toutefois, dans le cadre d'une installation d'OmniCube dont l'utilisation réclame en général disponibilité et sécurité, il est recommandé de configurer un agrégat LACP et des VLANs. Ce genre de configuration plus sophistiquée se fait en ligne de commande, comme nous le verrons par la suite.

Figure 1.12: Configuration réseau
Pour l'installation d'OmniCube, il est recommandé de:
OmniOS est livré avec deux méthodes différentes pour l'élévation des privilèges. pfexec est la norme Solaris/OmniOS/Illumos qui utilise des profils pour spécifier les privilèges, mais sudo, bien que déconseillé, est également inclus et pris en charge. Lors de la création de l'utilisateur il est conseillé de lui attribuer le rôle Administrateur principal qui lui permet d'accéder au compte root via pfexec.

[b]0.32 [b]0.32 [b]0.32 Création d'un user
Une fois terminé, la clé USB ou le CD peut être retiré et le système peut être redémarré via le menu.
L'écran de démarrage qui s'affiche à partir du disque dur est presque identique à celui du CD ou de la clé USB. Vous pouvez appuyer sur return ou attendre la fin du délai pour démarrer le système d'exploitation.

Figure 1.13: Premier boot
Au premier démarrage, la base de données des manifestes des services est créée et un compte à rebours s'affiche. Les démarrages suivants seront beaucoup plus rapides.
Sauf configuration explicite dans le menu de configuration post-installation, le mot de passe de l'utilisateur root sera vide (appuyez simplement sur return). L'installation est terminée et root est connecté.

1.3  Configuration réseau avancée

Chapter 2
Mise à jour du système

2.1  Packaging

2.1.1  Dépôts IPS

OmniOS adopte une approche par couches pour le packaging. En plus du logiciel assez minimaliste fourni avec le système d'exploitation de base, des packages supplémentaires sont fournis via des dépôts supplémentaires. Il existe un dépôt supplémentaire géré par l'OmniOS Association et plusieurs autres gérés par des tiers dont celui d'OmniCube.
Une installation de base d'OmniOS présente ses dépôts comme suit:
root@omnicube:~# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
omnios                      origin   online F https://pkg.omnios.org/r151054/core/
omnios                      mirror   online F https://us-west.mirror.omnios.org/r151054/core/
extra.omnios                origin   online F https://pkg.omnios.org/r151054/extra/
extra.omnios                mirror   online F https://us-west.mirror.omnios.org/r151054/extra/

OmniCube

Comme tous les éléments de l'OmniCube sont packagés, pour pouvoir l'installer, il suffit d'ajouter son dépôt aux serveurs:
~# pkg set-publisher -m https://omnios.efit-partners.eu/r151054/ omnicube

La configuration de publishers est alors la suivante:
user@server:~$ pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
omnios                      origin   online F https://pkg.omnios.org/r151054/core/
extra.omnios                origin   online F https://pkg.omnios.org/r151054/extra/
omnicube                    origin   online F https://omnios.efit-partners.eu/r151054/

Dépôt OmniCube LTS

Les versions paires d'OmniOS sont stables et les versions impaires sont instables (bloody). Une version stable sur quatre est une version de support à long terme (LTS). Les versions LTS bénéficient d'un support pendant trois ans.
Bien que l'utilisation des dépôts OmniOS soit parfaitement compatible avec l'OmniCube, l'utilisation de versions LTS est recommandée pour leur stabilité dans le temps.
Cependant, comme tout logiciel libre, OmniOS est en constante évolution ce qui signifie qu'une version installée sur un nouveau serveur pourrait diverger des précédentes. Pour permettre une homogénéité des versions à travers de tous les nodes d'un OmniCube, il est possible d'utiliser les dépôts proposant toutes les différentes versions des LTS, actuellement sans limite dans le temps.
Pour ce faire, il suffit de remplacer les dépôts d'OmniOS comme suit:
user@server:~# pfexec su -
root@server:~# pkg unset-publisher omnios
PHASE                                          ITEMS
Updating package cache                           1/1 
root@server:~# pkg unset-publisher extra.omnios
PHASE                                          ITEMS
Updating package cache                           1/1 
root@server:~# pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
root@server:~# pkg set-publisher -r -O https://pkg.omnicube.org/r151054bj/ omnios
root@server:~# pkg set-publisher -r -O https://pkg.omnicube.org/r151054bj/ extra.omnios

root@server:~$ pkg set-publisher -r -O https://pkgdev.efit-partners.eu/r151054/ efit-partners
root@server:~$ pkg publisher
PUBLISHER                   TYPE     STATUS P LOCATION
omnios                      origin   online F https://pkg.omnicube.org/r151054bj/
extra.omnios                origin   online F https://pkg.omnicube.org/r151054bj/
efit-partners               origin   online F https://pkgdev.efit-partners.eu/r151054/

2.2  Patching d'OmniOS

2.2.1  Mettre à jour tous les packages

La première chose à faire après avoir installé OmniOS est de s'assurer que tous les paquets sont à jour. Les paquets dans OmniOS sont gérés à l'aide de l'utilitaire de ligne de commande pkg. Commencez par vous assurer que la liste des paquets disponibles est à jour
~$ pfexec pkg refresh
Actualisation du catalogue 1/1 omnios

et affichez les mises à jour disponibles (aucun privilège requis)
~$ pkg list -u
NOM (ÉDITEUR)                                  VERSION                    IFO
archiver/gnu-tar                                  1.29-0.151024              i--
...

et pour appliquer toutes les mises à jour, il suffit de
~$ pfexec pkg update

Si l'une des mises à jour nécessite un redémarrage, un nouvel environnement de démarrage sera créé et cela sera indiqué dans la sortie. Un clone d'OmniOS existe et a été mis à jour et activé. Au prochain démarrage, l'environnement de démarrage omnios-1 sera monté sur « / ». Redémarrez lorsque vous êtes prêt à passer à cet environnement de démarrage mis à jour.
Redémarrez à l'aide de shutdown ou init:
~$ pfexec init 6...

ou ...
~$ pfexec shutdown -i 6

Ne soyez pas tenté d'utiliser reboot now, car cela entraînerait le chargeur d'amorçage à essayer de charger un noyau nommé "now", ce qui échouerait et le ferait passer à son quatrième interpréteur avec une invite ok. Si vous faites cela, la récupération est possible via les deux commandes suivantes
ok set bootfile=platform/i86pc/kernel/amd64/unix
ok boot

Chapter 3
Installation d'OmniCube

3.1  Prérequis

3.1.1  NTP

Tous les nodes constitutifs de l'OmniCube doivent être parfaitement synchronisés via NTP: le consensus Raft entre orderers et la validité des certificats TLS en dépendent directement.
~$ pfexec su -
~# pkg install pkg:/service/network/ntpsec

Éditez /etc/inet/ntp.conf pour y déclarer vos serveurs de temps, ceux de votre réseau, pas une source publique si l'OmniCube est isolé (exemple ici: 10.155.252.[1,2]):
server 10.155.252.1 iburst
server 10.155.252.2 iburst

Forcez une première synchronisation avant de démarrer le service, sans quoi un écart trop important au premier lancement peut le faire refuser de démarrer:
~# ntpdate -b 10.155.252.1
~# svcadm enable network/ntp

Vérifiez enfin que le service est bien synchronisé sur chaque node avant de lancer oc-install:
~# ntpq -p

3.1.2  Réseau

L'adresse IP du réseau de management doit être configurée sur l'interface avant de lancer l'installation: oc-install propose un choix parmi les adresses déjà présentes (ipadm show-addr), il n'en crée aucune.

3.1.3  Installation des packages

Toute l'installation logicielle tient en une seule commande:
root@server:~# pkg install omnicube/omnicube
           Packages to install:  2
            Services to change:  2
       Create boot environment: No
Create backup boot environment: No

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                2/2         72/72  146.9/146.9 30.9M/s

PHASE                                          ITEMS
Installing new actions                       139/139
Updating package state database                 Done 
Updating package cache                           0/0 
Updating image state                            Done 
Creating fast lookup database                   Done 
Reading search index                            Done 
Updating search index                            2/2 
Updating package cache                           3/3 

Ce package dépend de omnicube/hyperledger-fabric (les binaires peer, orderer, osnadmin, configtxgen, configtxlator, cryptogen), ainsi que des brands de zones (bhyve, ipkg, lipkg, lx, sparse), du service iSCSI (cible et initiateur), d'OpenJDK 21 et de jq; tous sont installés automatiquement.

3.2  Vue d'ensemble

Chaque node de l'OmniCube héberge son propre orderer et son propre peer Hyperledger Fabric, tous deux membres d'un unique canal nommé omnicube sur lequel est déployé un unique chaincode, également nommé omnicube. Un node correspond à une organisation Fabric à part entière, identifiée par son hostname (à la fois côté orderer, sous la forme <hostname>Orderer, et côté peer/application, sous la forme <hostname>).
Une fois l'installation terminée, chaque node fait tourner quatre services SMF:
svc:/omnicube/hyperledger-orderer
Un orderer node, ou simplement orderer, se charge de l'ordonnancement des transactions soumises sur le canal omnicube et, avec les autres orderer nodes, forme le service d’ordonnancement. La conception de Fabric reposant sur des algorithmes de consensus déterministes, tout bloc validé par les pairs est garanti comme étant définitif et correct. Les registres ne peuvent donc pas diverger comme c’est le cas dans de nombreux autres réseaux de blockchain.
svc:/omnicube/hyperledger-peer
Un élément fondamental d’un réseau blockchain Hyperledger Fabric est l’ensemble des peer nodes ou, simplement, les peers. OmniCube a par défaut un peer par node lancé par le service svc:/omnicube/hyperledeger-peer. Il gère les registres, endosse et valide les transactions, et expose l'API gRPC locale utilisée par le daemon.
svc:/omnicube/omnicube-chaincode
Le chaincode omnicube lui-même (classe OmniCubeContract). Il tourne en Chaincode as a Service (CCaaS): c'est un process autonome, à l'écoute sur 127.0.0.1:9999, auquel le peer se connecte. Il porte la logique métier: une suite de transactions par type d'objet (zone, zpool, disk, diskview, node), les erreurs étant remontées comme des exceptions qui annulent la transaction.
svc:/omnicube/omnicube-daemon
Le daemon OmniCube (classe OcDaemon), exécuté en root. C'est l'agent du node: il maintient le ledger comme un miroir fidèle de ce que Solaris détient réellement, à partir de trois sources - un scan initial de rattrapage, les sysevents Solaris en régime permanent, et les commandes envoyées par la GUI. Il s'appuie pour cela sur la librairie native libomnicube (via Java FFM/Panama) pour dialoguer avec OmniOS. Il faut enfin insister sur le fait que la seule source autoritative est OmniOS, le ledger n'étant que le reflet de la réalité des nodes.
Toute la configuration passe par un unique utilitaire interactif:
~# /opt/omnicube/utils/oc-install

Select your OmniCube configuration option:
1) New OmniCube installation
2) Join node to existing OmniCube
3) Admit a new node
4) Authentication configuration
5) Quit

New OmniCube installation
initialise un OmniCube depuis zéro (premier node, bloc de genèse local).
Join node to existing OmniCube
fait rejoindre ce node à un OmniCube existant.
Admit a new node
s'exécute sur un node déjà membre, en réponse à un join en cours ailleurs: c'est ce qui fait réellement accepter le nouveau node dans le canal.
Authentication configuration
n'est pas encore implémentée à ce jour (option présente dans le menu mais sans effet); l'intégration LDAP/AD se fait aujourd'hui exclusivement au niveau du système d'exploitation (voir chapitre Intégration Active Directory).
Join et Admit forment une paire: le premier se lance sur le nouveau node, le second sur un node déjà en place, et les deux options doivent être exécutées à peu près en parallèle, dans deux sessions séparées.

3.3  Installation du premier node

Sur le tout premier node de l'OmniCube, choisissez 1) New OmniCube installation. Sélectionnez d'abord l'adresse IP du réseau de management:
root@sr02efit-alt100:~# /opt/omnicube/utils/oc-install 

1) New OmniCube installation
2) Join node to existing OmniCube
3) Admit a new node
4) Authentication configuration
5) Quit
Select your OmniCube configuration option: 1

No updates necessary for this image.

1) 127.0.0.1/8
2) 10.255.0.14/24
3) 10.155.252.14/24
4) ::1/128
What is the network dedicated to the Hypercube? 3

Network configuration
        /etc//opt/omnicube/hyperledger/crypto-config.yaml... updated
        /etc//opt/omnicube/hyperledger/configtx.yaml... updated
        /etc//opt/omnicube/hyperledger/orderer.yaml... updated
        /etc//opt/omnicube/hyperledger/core.yaml... updated
done

Le script substitue alors cette adresse (et le hostname local) dans les fichiers de configuration Fabric (crypto-config.yaml, configtx.yaml, orderer.yaml, core.yaml, sous /etc/opt/omnicube/hyperledger/), génère le matériel cryptographique de l'organisation (MSP + certificats TLS orderer/peer, réémis avec les bons SAN), puis produit le bloc de genèse du canal omnicube:
Cryptographic material generation...
sr02efit-alt100.omnicube.org
Certificate request self-signature ok
subject=CN=orderer.sr02efit-alt100.omnicube.org
Certificate request self-signature ok
subject=CN=peer0.sr02efit-alt100.omnicube.org
done

Genesis block generation...
2026-10-01 12:54:49.096 UTC 0001 INFO [common.tools.configtxgen] main -> Loading configuration
2026-10-01 12:54:49.097 UTC 0002 INFO [common.tools.configtxgen.localconfig] completeInitialization -> orderer type: etcdraft
2026-10-01 12:54:49.097 UTC 0003 INFO [common.tools.configtxgen.localconfig] completeInitialization -> Orderer.EtcdRaft.Options unset, setting to tick_interval:"500ms" election_tick:10 heartbeat_tick:1 max_inflight_blocks:5 snapshot_interval_size:16777216
2026-10-01 12:54:49.098 UTC 0004 INFO [common.tools.configtxgen.localconfig] Load -> Loaded configuration: /etc/opt/omnicube/hyperledger/configtx.yaml
2026-10-01 12:54:49.099 UTC 0005 INFO [common.tools.configtxgen] doOutputBlock -> Generating genesis block
2026-10-01 12:54:49.099 UTC 0006 INFO [common.tools.configtxgen] doOutputBlock -> Creating application channel genesis block
2026-10-01 12:54:49.099 UTC 0007 INFO [common.tools.configtxgen] doOutputBlock -> Writing genesis block
done

L'orderer est ensuite démarré, puis rejoint lui-même le canal à partir de ce bloc de genèse local:

Channel join...
Status: 201
{
        "name": "omnicube",
        "url": "/participation/v1/channels/omnicube",
        "consensusRelation": "consenter",
        "status": "active",
        "height": 1
}

done

Le peer est démarré à son tour et rejoint le même canal:
Peer join...
2026-10-01 12:54:55.306 UTC 0001 INFO [grpc] Infof -> [core] original dial target is: "10.155.252.14:7051"
2026-10-01 12:54:55.306 UTC 0002 INFO [grpc] AddTraceEvent -> [core] [Channel #1]Channel created
2026-10-01 12:54:55.306 UTC 0003 INFO [grpc] AddTraceEvent -> [core] [Channel #1]parsed dial target is: resolver.Target{URL:url.URL{Scheme:"passthrough", Opaque:"", User:(*url.Userinfo)(nil), Host:"", Path:"/10.155.252.14:7051", Fragment:"", RawQuery:"", RawPath:"", RawFragment:"", ForceQuery:false, OmitHost:false}}

...

done

Enfin, le chaincode omnicube est installé, approuvé et committé (le canal ne connaît encore aucune définition, donc à la séquence 1), et les services applicatifs sont démarrés:
Chain code import...
2026-10-01 12:54:55.402 UTC 0001 INFO [grpc] Infof -> [core] original dial target is: "10.155.252.14:7051"
2026-10-01 12:54:55.402 UTC 0002 INFO [grpc] AddTraceEvent -> [core] [Channel #1]Channel created
2026-10-01 12:54:55.402 UTC 0003 INFO [grpc] AddTraceEvent -> [core] [Channel #1]parsed dial target is: resolver.Target{URL:url.URL{Scheme:"passthrough", Opaque:"", User:(*url.Userinfo)(nil), Host:"", Path:"/10.155.252.14:7051", Fragment:"", RawQuery:"", RawPath:"", RawFragment:"", ForceQuery:false, OmitHost:false}}

...

Installed chaincodes on peer:
Package ID: omnicube:15fe3881832ee8b1d6acb35332349270c9a625605a3a66061fc64a010571e6c7, Label: omnicube
done


Chain code approve...
        package id: omnicube:15fe3881832ee8b1d6acb35332349270c9a625605a3a66061fc64a010571e6c7
        sequence: 1
2026-10-01 12:54:55.608 UTC 0001 INFO [grpc] Infof -> [core] original dial target is: "10.155.252.14:7051"

...

}
done

Chain code approve...
	package id: omnicube_1.0:1a2b3c...
	sequence: 1
done

Chain code commit...
2026-10-01 12:55:01.481 UTC 0001 INFO [grpc] Infof -> [core] original dial target is: "10.155.252.14:7051"
2026-10-01 12:55:01.481 UTC 0002 INFO [grpc] AddTraceEvent -> [core] [Channel #1]Channel created
2026-10-01 12:55:01.481 UTC 0003 INFO [grpc] AddTraceEvent -> [core] [Channel #1]parsed dial target is: resolver.Target{URL:url.URL{Scheme:"passthrough", Opaque:"", User:(*url.Userinfo)(nil), Host:"", Path:"/10.155.252.14:7051", Fragment:"", RawQuery:"", RawPath:"", RawFragment:"", ForceQuery:false, OmitHost:false}}

...

Committed chaincode definition for chaincode 'omnicube' on channel 'omnicube':
Version: 1.0, Sequence: 1, Endorsement Plugin: escc, Validation Plugin: vscc, Approvals: [sr02efit-alt100: true]
done


Chain code service...
done

3.4  Vérification

Les quatre services constitutifs de l'OmniCube sont en principe démarrés par l'oc-install. Un svc -xv permet de le vérifier.
~# svcs -xv "*omnicube*"
svc:/omnicube/hyperledger-orderer:default (Hyperledger orderer daemon)
 State: online since September 23, 2026 at 12:22:21 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-hyperledger-orderer:default.log
Impact: None.

svc:/omnicube/omnicube-chaincode:default (Omnicube chaincode)
 State: online since September 23, 2026 at 12:23:29 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-omnicube-chaincode:default.log
Impact: None.

svc:/omnicube/hyperledger-peer:default (Hyperledger peer daemon)
 State: online since September 23, 2026 at 12:22:24 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-hyperledger-peer:default.log
Impact: None.

svc:/omnicube/omnicube-daemon:default (Omnicube chaincode)
 State: online since September 26, 2026 at 02:44:06 PM UTC
   See: man -M /usr/share/man -s 8 omnicube
   See: https://www.efit-partners.eu/
   See: /var/svc/log/omnicube-omnicube-daemon:default.log
Impact: None.

Le log du daemon montre l'ajout des différents éléments (zones, disques et zpools) du serveur être ajoutés à la blockchain.
~#: tail -f /var/svc/log/omnicube-omnicube-daemon:default.log
[ Oct  1 12:55:04 Enabled. ]
[ Oct  1 12:55:04 Executing start method ("/lib/svc/method/omnicube/omnicube-daemon start"). ]
[ Oct  1 12:55:04 Method "start" exited with status 0. ]
Oct 01 12:55:05 notice  mirroring as sr02efit-alt100
Oct 01, 2026 12:55:05 PM io.grpc.netty.shaded.io.grpc.netty.TcpMetrics loadEpollInfo
INFO: Epoll available during static init of TcpMetrics:false
Oct 01 12:55:06 notice  zone global: added

...

Oct 01 12:58:21 notice  listening for requests

3.5  Ajout d'un nouveau node

Ajouter un node à un OmniCube existant commence de manière identique au premier node par l'installation du package omnicube et l'exécution de la commande oc-install.
root@sr03efit-alt100:~# pkg install omnicube/omnicube
           Packages to install:  2
            Services to change:  2
       Create boot environment: No
Create backup boot environment: No

DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                2/2         72/72  146.9/146.9 10.3M/s

PHASE                                          ITEMS
Installing new actions                       139/139
Updating package state database                 Done 
Updating package cache                           0/0 
Updating image state                            Done 
Creating fast lookup database                   Done 
Reading search index                            Done 
Updating search index                            2/2 
Updating package cache                           3/3 

La commande oc-install nécessite une action sur deux machines: le nouveau node (join) et un node déjà membre disposant des droits d'administration du canal (admit). Les deux étapes s'entrelacent: le join attend que l'admit soit fait ailleurs avant de continuer.

3.5.1  Sur le nouveau node

Lancez oc-install, choisissez 2) Join node to existing OmniCube, puis sélectionnez l'adresse IP du réseau de management comme pour le premier node. Le matériel cryptographique de l'organisation est généré localement, puis le script publie les descripteurs de cette nouvelle organisation (au format attendu par un channel update) sur un petit serveur HTTP embarqué et attend:
root@sr03efit-alt100:~# /opt/omnicube/utils/oc-install 

1) New OmniCube installation
2) Join node to existing OmniCube
3) Admit a new node
4) Authentication configuration
5) Quit
Select your OmniCube configuration option: 2

No updates necessary for this image.

1) 127.0.0.1/8
2) 10.155.252.16/24
3) ::1/128
What is the network dedicated to the Hypercube? 2

Network configuration
        /etc//opt/omnicube/hyperledger/crypto-config.yaml... updated
        /etc//opt/omnicube/hyperledger/configtx.yaml... updated
        /etc//opt/omnicube/hyperledger/orderer.yaml... updated
        /etc//opt/omnicube/hyperledger/core.yaml... updated
done

Cryptographic material generation...
sr03efit-alt100.omnicube.org
Certificate request self-signature ok
subject=CN=orderer.sr03efit-alt100.omnicube.org
Certificate request self-signature ok
subject=CN=peer0.sr03efit-alt100.omnicube.org
done
2026-10-01 13:15:29.812 UTC 0001 INFO [common.tools.configtxgen] main -> Loading configuration
2026-10-01 13:15:29.814 UTC 0002 INFO [common.tools.configtxgen.localconfig] completeInitialization -> orderer type: etcdraft
2026-10-01 13:15:29.814 UTC 0003 INFO [common.tools.configtxgen.localconfig] completeInitialization -> Orderer.EtcdRaft.Options unset, setting to tick_interval:"500ms" election_tick:10 heartbeat_tick:1 max_inflight_blocks:5 snapshot_interval_size:16777216
2026-10-01 13:15:29.814 UTC 0004 INFO [common.tools.configtxgen.localconfig] LoadTopLevel -> Loaded configuration: /etc/opt/omnicube/hyperledger/configtx.yaml
2026-10-01 13:15:29.843 UTC 0001 INFO [common.tools.configtxgen] main -> Loading configuration
2026-10-01 13:15:29.844 UTC 0002 INFO [common.tools.configtxgen.localconfig] completeInitialization -> orderer type: etcdraft
2026-10-01 13:15:29.844 UTC 0003 INFO [common.tools.configtxgen.localconfig] completeInitialization -> Orderer.EtcdRaft.Options unset, setting to tick_interval:"500ms" election_tick:10 heartbeat_tick:1 max_inflight_blocks:5 snapshot_interval_size:16777216
2026-10-01 13:15:29.844 UTC 0004 INFO [common.tools.configtxgen.localconfig] LoadTopLevel -> Loaded configuration: /etc/opt/omnicube/hyperledger/configtx.yaml
\nRun oc-install "Admit a new node" on an existing node and hit enter when finished...Serving HTTP on :: port 8000 (http://[::]:8000/) ...

Ne validez pas encore: passez à l'étape suivante sur un node existant.

3.5.2  Sur un node existant

Sur un node déjà membre de l'OmniCube, lancez oc-install et choisissez 3) Admit a new node. Le script récupère la configuration courante du canal depuis son propre peer, puis demande l'adresse IP du nouveau node:
Enter the IP of the new node: 10.155.252.18

Il télécharge alors les descripteurs d'organisation publiés par le nouveau node à l'étape précédente, construit une mise à jour de la configuration du canal (ajout de l'organisation dans le groupe Application, dans le groupe Orderer, et ajout du nouveau consenter Raft), la signe avec les identités administrateur orderer et peer de ce node, puis la soumet:
consenter admitted and verified

Ce message ne s'affiche que lorsque le nouveau consenter Raft est effectivement retrouvé dans la configuration committée du canal, pas seulement accepté pour ordonnancement.

3.5.3  Retour sur le nouveau node

Une fois l'admission confirmée sur le node existant, revenez au terminal du nouveau node et validez l'invite laissée en attente. Le script demande alors l'adresse IP de ce node admettant:
Enter the IP of the admitting node: 10.155.252.14

Il y récupère la configuration courante du canal ainsi que le bloc de genèse (bloc 0), démarre l'orderer local et le fait rejoindre le canal, démarre le peer local et le fait rejoindre le canal à partir du bloc de genèse récupéré, puis installe le chaincode omnicube et l'approuve à la séquence déjà committée par les autres nodes (aucun nouveau commit n'est nécessaire, la définition existe déjà sur le canal):
Chain code already defined at sequence 1, adopting it.

Comme pour le premier node, les services omnicube-chaincode et omnicube-daemon sont démarrés en dernier. Vérifiez l'état des services avec la même commande svcs -xv "*omnicube*" que pour le premier node.

3.6  Installation de l'interface graphique

Il manque encore l'interface graphique en tant que telle.
~# pkg install hypercube/gui
           Packages to install:  1
            Services to change:  2
       Create boot environment: No
Create backup boot environment: No

Planning linked: 0/1 done; 1 working: zone:test-lipkg-second
Linked image 'zone:test-lipkg-second' output:
`
Planning linked: 1/1 done
DOWNLOAD                                PKGS         FILES    XFER (MB)   SPEED
Completed                                1/1   28741/28741    46.1/46.1  544k/s

Downloading linked: 0/1 done; 1 working: zone:test-lipkg-second
Downloading linked: 1/1 done
PHASE                                          ITEMS
Installing new actions                   32888/32888
Updating package state database                 Done
Updating package cache                           0/0
Updating image state                            Done
Creating fast lookup database                   Done
Reading search index                            Done
Updating search index                            1/1
Executing linked: 0/1 done; 1 working: zone:test-lipkg-second
Executing linked: 1/1 done
Updating package cache                           3/3

Il ne reste plus qu'à démarrer le service de l'interface graphique.
~# svcadm enable svc:/hypercube/gui:default
~# svcs -xv *"hypercube"*
svc:/hypercube/gui:default (node_guid daemon and vue server)
 State: online since May 14, 2025 at 10:01:01 PM UTC
   See: man -M /usr/share/man -s 8 node_gui
   See: https://www.efit-partners.eu/
   See: /var/svc/log/hypercube-gui:default.log
Impact: None.

svc:/hypercube/hypercubed:default (OmniCube daemon)
 State: online since May 14, 2025 at 09:54:26 PM UTC
   See: man -M /usr/share/man -s 8 hypercubed
   See: https://www.efit-partners.eu/
   See: /var/svc/log/hypercube-hypercubed:default.log
Impact: None.

svc:/hypercube/ethereum:geth (SMF for go-ethereum.)
 State: online since May 14, 2025 at 09:51:56 PM UTC
   See: man -M /usr/share/man -s 8 geth
   See: https://geth.ethereum.org/
   See: /var/svc/log/hypercube-ethereum:geth.log
Impact: None.

L'interface graphique est désormais accessible via l'adresse IP du node ou de la zone sur lequel elle a été installée.

Chapter 4
Intégration Active Directory

4.1  Introduction

OmniOS peut s'intégrer dans un domaine Active Directory en tant que serveur de fichiers SMB et utiliser un serveur Active Directory à la fois pour l'authentification de connexion, pour fournir des services de noms aux comptes utilisateurs et pour le contrôle d'accès basé sur les rôles (RBAC).

4.2  Prérequis

Pour pouvoir gérer la plupart des fonctionnalités listées ci-dessus dans l'AD, il est nécessaire de modifier le schéma de ce dernier en utilisant ADextend.ldif. L'explication pour modifier un schéma AD dépasse le cadre du présent document.

4.3  Préparation du système

4.3.1  DNS

Utilisez votre AD comme serveur DNS ou un server qui redirige les requêtes de votre domaine ad-domain.intra et _msdcs.ad-domain.intra.
# cat <<CFG_END >/etc/resolv.conf
nameserver 10.1.1.1
domain ad-domain.intra
search ad-domain.intra
CFG_END

4.3.2  NTP

Activez NTP, car une heure précise est essentielle pour le fonctionnement de Kerberos. La synchronisation peut être forcée en cas de forte différence de temps.
~$ pfexec su -
~#pkg install pkg:/service/network/ntpsec
~# ntpdate -b 10.0.0.1
~# svcadm enable network/ntp

4.3.3  LDAP

Le plugin OmniOS Active Directory ne prend pas en charge l'intégration complète de la connexion. Nous devons donc configurer un utilisateur ldap proxy, puis configurer le client LDAP pour activer les connexions Unix avec des comptes LDAP. L'utilisateur AD proxy doit disposer des droits appropriés pour lire les entrées du compte utilisateur.

4.3.4  Kerberos

4.3.5  PAM

Enfin, PAM doit être configuré pour utiliser kerberos lorsque cela est approprié via /etc/pam.conf. Les entrées sont probablement déjà présentes, il vous suffit de supprimer le caractère de commentaire #1.
login   auth sufficient         pam_krb5.so.1
krlogin auth required           pam_krb5.so.1
krsh    auth required           pam_krb5.so.1
ktelnet auth required           pam_krb5.so.1
other   auth sufficient         pam_krb5.so.1

4.3.6  Utilisateurs

Pour chaque utilisateur (SAMAccountName ou uid), il y a lieu de créer un home directory et d'y copier les skeletons.
~$ pfexec su -
~# mkdir /export/home/{SAMAccountName}
~# cp -p /etc/skel/.[a-z]* /export/home/{SAMAccountName}
~# chown -R {SAMAccountName}:other /export/home/{SAMAccountName}

Éventuellement, l'utilisateur peut se voir attribuer les droits d'administrateur (root) par ajout de [SAMAccountName]::::type=normal;profiles=Primary Administrator à un fichier nommé librement dans le directory /etc/user_attr.d/
~$ pfexec vi /etc/user_attr.d/

4.3.7  SMB

Activer le partage de fichiers SMB. Pour nous assurer que nous avons les mêmes identifiants utilisateur partout, nous voulons les conserver dans Active Directory.
~# svccfg -s svc:/system/idmap setprop config/directory_based_mapping=astring: idmu
~# svcadm refresh svc:/system/idmap

~# sharectl set -p lmauth_level=5 smb
~# sharectl set -p system_comment=« My Funny Fileserver » smb
~# svcadm enable -r smb/server

4.3.8  Tests

Votre serveur OmniOS devrait maintenant être accessible en tant que serveur de fichiers smb depuis les clients Windows, permettant ainsi l'accès SSO. Sur la ligne de commande OmniOS, vous devriez voir tous les comptes utilisés avec getent passwd.

4.4  Multifactor Authentication (MFA)

Une fois OmniOS connecté à un directory quelqu'il soit, c'est ce dernier qui prendra en charge le Multifactor Authentication. Bien que nombre de produit implémente leur propre système d'authentification voir un MFA indépendant, cette approche est délétère simplement parce qu'elle nécessite de maintenir les comptes utilisateurs dans plusieurs produits différents. L'OmniCube n'a pas vocation à se substituer à un directory mais bien à l'utiliser pour l'authentification.

Chapter 5
Configuration d'une console série

5.1  Introduction

De nombreuses cartes mères modernes prennent en charge l'accès à une console à distance. Intel appelle sa solution "Baseboard Management Controller" (BMC). HPE la nomme "Integrated Lights-Out" (iLO), ... Outre leur interface Web conviviale, BMC/iLO offrent également une fonctionnalité appelée SOL SSH. Celle-ci permet d'accéder au premier port série (ttya/com1) via ssh. Une fois configurée, vous pouvez accéder aux paramètres du BIOS et à d'autres éléments liés au démarrage, tels que la sélection du support de démarrage, via ssh, ce qui est très pratique. Mais mieux encore, vous pouvez également configurer OmniOS pour fournir un accès à une console série via ce chemin. Ce qui constitue une excellente option de récupération. Les exemples suivants sont des captures d'écran d'une carte mère Intel S2600ST utilisant donc BMC.

5.2  Configuration du BMC

Configurer le port SSH SOL

Figure 5.1: Configuration du port SSH SOL
Activer SSH SOL

Figure 5.2: Activation du port SSH SOL

5.3  Paramètres BIOS

Activer le port série

Figure 5.3: Activation du port série
Activer la redirection de la console. Comme nous exécutons la console sur une interface Ethernet dédiée, SOL est uniquement activé à cet endroit.

Figure 5.4: Activation du port série

5.4  Configurer la console série dans OmniOS

Configurer les ports ttya.
~# sttydefs -r ttya
~# sttydefs -a ttya -i '115200 hupcl opost onlcr ofill' -f '115200'

Configurez une nouvelle instance de connexion à la console
~# svccfg -s svc:/system/console-login delete -f ttya
~# svccfg -f - <<EOF
select svc:/system/console-login
add ttya
select svc:/system/console-login:ttya
addpg ttymon application
setprop ttymon/device = astring: /dev/term/a
setprop ttymon/terminal_type = astring: xterm
setprop ttymon/label = astring: ttya
setprop ttymon/modules = astring: ldterm,ttcompat
setprop ttymon/nohangup = boolean: true
setprop ttymon/prompt = astring: "`uname -n` ttya login:"
addpg general framework
EOF

Activez les nouvelles connexions à la console
~# svcadm enable svc:/system/console-login:ttya

Autorisez les connexions root sur toutes les consoles
~# perl -i -p -e 's/\s*(CONSOLE.+)/# $1/' /etc/default/login

5.5  Configurez le boot loader pour utiliser la console série

Vous pouvez également configurer le chargeur de démarrage d'Omnios pour communiquer via la série:
~# cat >/boot/conf.d/serial <<EOF
boot_multicons="YES"
boot_serial="YES"
comconsole_speed="115200"
os_console="text"
console="ttya,text"
ttya-mode="115200,8,n,1,-"
EOF

Enfin effectuez un update du boot archive et redémarrez
~# bootadm update-archive
~# init 6

5.6  Tests

. Vous pouvez maintenant vous connecter en ssh sur la console
~# ssh -p 66 server-console-ip

5.7  Redimentionnement de la console

Si vous avez essayé vim sur votre nouvelle console série, vous avez probablement été déçu: l'écran s'est affiché de manière confuse.
Cela s'explique par le fait que, via la connexion à la console série, stty ne semble pas être correctement informé de la taille de l'écran et de ses modifications. Exécutez stty et il indiquera que le nombre de lignes et de colonnes est égal à 0, ce qui n'est pas idéal.
Il existe toutefois un moyen de résoudre ce problème. Le plus simple est de taper resize pour régler le problème... Malheureusement, la commande resize fait partie du paquet xterm qui n'est probablement pas installé sur votre GZ OmniOS. Si vous utilisez bash, il existe toutefois une autre solution en passant par une petite fonction shell que vous n'aurez qu'à mettre dans votre profile.
# .bash_profile
if [ ! -f /usr/bin/resize ]; then
resize() {
  old=$(stty -g)
  stty -echo
  printf '\033[18t'
  IFS=';' read -d t _ rows cols _
  stty "$old"
  stty cols "$cols" rows "$rows"
}
fi
# resize terminal
if [ "$(tty)" = '/dev/term/a' ]; then
   resize
fi


Footnotes:

1Voir man pam_krb5 pour plus de détails