Introduction ============ À propos de ce document ----------------------- Ce document présente l'utilisation du client `iRODS `_ avec le `service FG-iRODS `_ proposé par France Grilles. Il est basé sur sur le contenu de la documentation en ligne du service FG-iRODS rédigée initialement par Catherine Biscarat, Pierre Gay et Jérôme Pansanel. La dernière version de ce document est disponible sur : https://github.com/FranceGrilles/user-docs/tree/main/irods-fr. | Copyright (c) 2014-2025 CNRS, Université de Bordeaux et Université de Strasbourg. | Ce document est distribué sous la licence `Creative Commons Attribution 4.0 International license `_. Le service FG-iRODS ------------------- Le service FG-iRODS, proposé par l'infrastructure de recherche `France Grilles `_, a pour objectif de faciliter la gestion des données de recherche. Il repose sur : * une infrastructure de stockage géographiquement distribuée de niveau *production* hautement disponible ; * l'utilisation du logiciel iRODS ; * un accompagnement personnalisé des utilisateurs ; * un ensemble d'outils permettant d'en simplifier l'usage. L'accès à ce service est nominatif et réalisé par une simple demande adressée à `info@france-frilles.fr `_. Après étude de la demande et avant création des comptes, il est demandé aux utilisateurs : * de signer les conditions d'accès au service FG-iRODS : https://www.france-grilles.fr/wp-content/uploads/2025/07/fg_irods_user_policy.pdf ; * de fournir un plan de gestion de données (PGD). Plusieurs exemples de PGD sont disponibles sur le site de DMP OPIDoR ``_. Une fois les documents reçus, l'accès au service est ouvert, les identifiants et la documentation du service transmis aux utilisateurs. Installation du client ====================== Prérequis --------- L'installation du client iRODS nécessite de disposer d'un poste client fonctionnant avec le système Redhat, Ubuntu et leurs dérivés, sur lequel il est possible d'installer de nouveaux logiciels. Environnement ------------- Le client en ligne de commande iRODS utilise un fichier pour stocker la configuration pour se connecter à l'infrastructure iRODS. Ce fichier est ``~/irods/irods_environment.json`` et doit être créé avec le contenu suivant : .. code-block:: console { "irods_host": "sbgirodsfg.in2p3.fr", "irods_port": 5555, "irods_zone_name": "FranceGrillesZone", "irods_user_name": "", "irods_default_resource": "iphc", "irods_client_server_negotiation": "request_server_negotiation", "irods_client_server_policy": "CS_NEG_REQUIRE", "irods_default_hash_scheme": "SHA256", "irods_default_number_of_transfer_threads": 4, "irods_encryption_algorithm": "AES-256-CBC", "irods_encryption_key_size": 32, "irods_encryption_num_hash_rounds": 16, "irods_encryption_salt_size": 8, "irods_match_hash_policy": "compatible", "irods_maximum_size_for_single_buffer_in_megabytes": 32, "irods_ssl_verify_server": "cert" } La valeur ** doit être remplacées par les valeurs qui vous ont été transmises lors de l'enregistrement auprès du service. Installation des paquets ------------------------ Les paquets pour le client iRODS sont disponibles pour les systèmes détaillés sur la page de `téléchargement d'iRODS `_. Les instructions d'installation pour les systèmes de gestion de paquets *APT* et *YUM* sont détaillées sur la page https://packages.irods.org. Une fois que le dépôt est correctement configuré, il faut installer le paquet ``irods-icommands``. La vérification de l'installation du client est réalisée avec : .. code-block:: shell-session $ iinit La commande **iinit** permets d'ouvrir une session vers l'instance iRODS. Elle vous demande le mot de passe pour vous connecter. Une fois que vous avez terminé votre transfert de données, vous pouvez terminer la session avec la commande **iexit**. La commande **ienv** affiche l'environnement iRODS : .. code-block:: console irods_version - 4.3.2 irods_client_server_negotiation - request_server_negotiation irods_encryption_key_size - 32 irods_environment_file - /home//.irods/irods_environment.json irods_default_hash_scheme - SHA256 irods_default_number_of_transfer_threads - 4 irods_host - sbgirodsfg.in2p3.fr irods_client_server_policy - CS_NEG_REQUIRE irods_session_environment_file - /home//.irods/irods_environment.json.15934 irods_default_resource - irods_encryption_algorithm - AES-256-CBC irods_encryption_num_hash_rounds - 16 irods_encryption_salt_size - 8 irods_match_hash_policy - compatible irods_ssl_verify_server - cert irods_maximum_size_for_single_buffer_in_megabytes - 32 irods_port - 5555 irods_user_name - irods_zone_name - FranceGrillesZone Image Singularity ----------------- Afin de rendre le client disponible sur la majorité des OS, nous maintenons une image du client iRODS utilisable avec Singularity (Apptainer) : https://scigne.fr/resources/CLOUD/irods.sif Les instructions pour l'utiliser sont sur : https://github.com/FranceGrilles/singularity-images/tree/main Utilisation du service FG-iRODS =============================== Aide interactive ---------------- **ihelp** permet d'afficher la liste des commandes iRODS, ainsi que l'aide sur une commande spécifique : .. code-block:: shell-session $ ihelp ils Usage: ils [-ArlLv] dataObj|collection ... Usage: ils --bundle [-r] dataObj|collection ... Display data Objects and collections stored in irods. Options are: -A ACL (access control list) and inheritance format -l long format -L very long format -r recursive - show subcollections -t ticket - use a read (or write) ticket to access collection information -v verbose -V Very verbose -h this help --bundle - list the subfiles in the bundle file (usually stored in the /myZone/bundle collection) created by iphybun command. iRODS Version 4.3.2 ils La liste complète des commandes disponibles est également disponible dans la `documentation officielle iRODS `_. Répertoire de travail --------------------- La commande **ils** affiche le contenu du répertoire courant avec lequel vous travaillez sur le système FG-iRODS (par défaut, il s'agit de votre répertoire utilisateur) : .. code-block:: shell-session $ ils /FranceGrillesZone/home/: * *FranceGrillesZone* : le nom de la zone iRODS * */home/* : votre répertoire personnel Il est possible de modifier le répertoire sur lequel le client iRODS se connecte en ajoutant la lignes suivante au fichier de configuration iRODS : .. code-block:: console "irods_cwd": "", "irods_home": "", Il faut remplacer ** par le chemin souhaité par défaut. Chargement des données ---------------------- Dans cette section, des fichiers vont être chargés vers FG-iRODS. Le fichier utilisé pour ces exemples est ``foo.bin``, il peut être remplacé par un autre fichier de votre choix. Si vous souhaitez travailler avec le fichier ``foo.bin``, vous pouvez le créer avec la commande suivante : .. code-block:: shell-session $ dd if=/dev/urandom of=foo.bin count=65536 Le fichier est copié vers l'infrastructure iRODS avec la commande : .. code-block:: shell-session $ iput -K foo.bin L'option *-K* permet de vérifier le *checksum* et de le stocker dans la base de données. Il est recommandé de l'utiliser systématiquement. Le fichier est maintenant disponible sur FG-iRODS : .. code-block:: shell-session $ ils /FranceGrillesZone/home/: foo.bin Le fichier peut être supprimé avec la commande suivante : .. code-block:: shell-session $ irm foo.bin Espace de nom et chemin physique -------------------------------- iRODS fournit une abstraction de l'emplacement physique des fichiers. Par exemple, ``/FranceGrillesZone/home//foo.bin`` est le chemin logique utilisé par iRODS. Pour savoir où sont réellement stockées les données, il faut utiliser l'option **-L** avec la commande **ils** : .. code-block:: shell-session $ ils -L /FranceGrillesZone/home/: 0 iphc;iphc-random;iphc-storage_01 33554432 2020-11-20.09:30 & foo.bin sha2:veVzp+ApMzyVRzZN0BZIkDyFuqUp/4tM4sLVACp00B8= generic /storage/irods_01/home//foo.bin Le résultat de cette commande nous indique que : * le fichier ``foo.bin`` est enregistré par FG-iRODS comme : ``/FranceGrillesZone/home//foo.bin`` ; * son propriétaire est ** ; * il a été chargé sur la ressource de stockage *iphc* ; * il n'y a qu'un seul réplica, dont l'identifiant est *0* ; * sa taille est de 33554432 octets ; * son *checksum* a été enregistréi (*sha:veVzp+ApMzyVRzZN0BZIkDyFuqUp/4tM4sLVACp00B8=*). Téléchargement de données ------------------------- Le fichier stocké dans FG-iRODS peut être téléchargé avec : .. code-block:: shell-session $ iget -K foo.bin foo-restore.txt Le fichier ``foo.bin`` a été téléchargé et nommé ``foo-restore.txt``. Avec l'option **-K** option, le *checksum* du fichier local est comparé avec le *checksum* du fichier sur FG-iRODS. Structuration des données ------------------------- Création d'une collection +++++++++++++++++++++++++ Sur votre ordinateur, les données sont organisées dans des répertoires. Avec iRODS, elles sont organisées de la même manière, sauf que ces dossiers sont appelés des *collections*. Pour créer une collection iRODS : .. code-block:: shell-session $ imkdir mycollection Le fichier ``foo.bin`` peut être déplacé dans la collection *mycollection* avec : .. code-block:: shell-session $ imv foo.bin mycollection $ ils -L mycollection /FranceGrillesZone/home//mycollection: 0 iphc;iphc-random;iphc-storage_01 33554432 2020-11-20.10:18 & foo.bin sha2:veVzp+ApMzyVRzZN0BZIkDyFuqUp/4tM4sLVACp00B8= generic /storage/irods_01/home//mycollection/foo.bin Vous pouver voir que le chemin logique de la collection ``/FranceGrillesZone/home//mycollection`` a un répertoire physique : ``/storage/irods_01/home//mycollection``. Ainsi, les données n'arrivent pas n'importe où sur un serveur iRODS, mais se placent dans cette structure. Les données peuvent être chargées directement dans une collection : .. code-block:: shell-session $ iput -K -r bar.txt mycollection $ ils /FranceGrillesZone/home//mycollection /FranceGrillesZone/home//mycollection: bar.txt foo.bin L'option **-r** permet un chargement récursif. Naviguer à travers les collections ++++++++++++++++++++++++++++++++++ Le répertoire courant de travail correspond à l'emplacement sur lequel vous travaillez dans l'arborescence iRODS. Pour afficher votre répertoire courant sur iRODS, utilisez : .. code-block:: shell-session $ ipwd /FranceGrillesZone/home/ Si vous ne spécifiez pas le chemin complet, mais uniquement un chemin relatif tel que ``mycollection/``, iRDS utilise automatiquement le répertoire courant de travail comme préfixe. Vous pouvez vous déplacer dans l'arborescence et modifier ce répertoire courant de travail avec la commande **icd** : .. code-block:: shell-session $ icd mycollection Gestion des métadonnées ----------------------- iRODS est un logiciel disposant de nombreuses fonctionnalités reposant sur l'utilisation des métadonnées. Création de métadonnées +++++++++++++++++++++++ Il est possible d'ajouter à chaque fichier une ou plusieurs métadonnées représentées sous forme de triplet *Attribute*, *Value*, *Unit* (AVU). Ces triplets sont ajoutés dans la base iCAT d'iRODS et peuvent être recherchés. Les métadonnées sont ajoutées avec la commande : .. code-block:: shell-session $ imeta add -d foo.bin 'length' '20' 'words' Le champ *Unit* peut être vide : .. code-block:: shell-session $ imeta add -d foo.bin 'project' 'example' Les métadonnées peuvent également être ajoutées à une collection : .. code-block:: shell-session $ imeta add -C mycollection 'author' 'John Smith' Affichage des métadonnées +++++++++++++++++++++++++ Pour afficher les métadonnées d'un objet de données (fichier), il faut entrer : .. code-block:: shell-session $ imeta ls -d foo.bin AVUs defined for dataObj /FranceGrillesZone/home//mycollection/foo.bin: attribute: length value: 20 units: words et pour une collection, la commande suivante : .. code-block:: shell-session $ imeta ls -C mycollection AVUs defined for collection /FranceGrillesZone/home//mycollection: attribute: author value: John Smith units: Recherche avec les métadonnées ++++++++++++++++++++++++++++++ La recherche de fichiers ou de collections à l'aide des métadonnées est effectuée avec la commande suivante : .. code-block:: shell-session $ imeta qu -d 'length' = '20' collection: /FranceGrillesZone/home//mycollection dataObj: foo.bin Recherche avancée +++++++++++++++++ Afin d'effectuer une recherche plus fine de fichiers ou de collections, il est possible d'interroger directement le catalogue iCAT avec la commande **iquest** : .. code-block:: shell-session $ iquest "select COLL_NAME, META_COLL_ATTR_VALUE where META_COLL_ATTR_NAME like 'author'" COLL_NAME = /FranceGrillesZone/home//mycollection META_COLL_ATTR_VALUE = John Smith ------------------------------------------------------------ Les résultats peuvent être filtrés à l'aide d'un ou plisusieurs attributs : .. code-block:: shell-session $ iquest "select COLL_NAME, META_COLL_ATTR_VALUE where META_COLL_ATTR_NAME like 'author' \ and META_COLL_ATTR_VALUE like 'John%'" COLL_NAME = /FranceGrillesZone/home//mycollection META_COLL_ATTR_VALUE = John Smith ------------------------------------------------------------ **NOTE** : le caractère '%' est un caractère générique (*wildcard*). Si vous recherchez un objet de données plutôt qu'une collection, il faut remplacer *META_COLL_ATTR_NAME* par *META_DATA_ATTR_NAME*. De nombreux attributs peuvent être utilisés pour les recherches. Pour les afficher, utilisez : .. code-block:: shell-session $ iquest attrs Contrôle d'accès ---------------- iRODS propose un mécanisme de droits d'accès similaire au système disponible sur les systèmes UNIX (ACL). Il permet de contrôler les droits de lecture, d'écriture et de propriété. Pour afficher les droits d'accès à la collection actuelle : .. code-block:: shell-session $ ils -r -A /FranceGrillesZone/home//mycollection: ACL - #FranceGrillesZone:own Inheritance - Disabled bar.txt ACL - #FranceGrillesZone:own foo.bin ACL - #FranceGrillesZone:own Les droits d'accès à un fichier sont spécifiés après le mot-clé *ACL*. Dans cet exemple, ** est propriétaire de tous les fichiers affichés. Aucune autre personne ne peut y accéder. Les collections ont un attribut *Inheritance*. Lorsque la valeur de cet attribut est égale à *Enabled*, l'ensemble du contenu de la collection hérite des droits d'accès de la collection. Cet héritage ne s'applique qu'aux nouveaux fichiers copiés dans la collection. La modification des droits d'accès pour autoriser un collègue à accéder à ses données se fait avec : .. code-block:: shell-session $ ichmod read foo.bin L'utilisateur ** peut maintenant accéder en lecture au fichier ``foo.bin``.