Instructions pour configurer DPM avec ncm-puppet¶
au dernier WC LCG-FR (Nov 2017), pendant la session QVPDQ certain sites ont manifesté l’intérêt pour la méthode de configuration de DPM via ncm-puppet
. Cette méthode permet d'utiliser, à l’intérieur de quattor, les modules puppet standard fournis par les développeurs DPM.
Actuellement la méthode est utilisée en production à GRIF_LLR et GRIF_LPNHE.
Après discussion nous avons décidé trois actions à faire avant (et afin) que les autres sites puissent tester (et éventuellement adopter) ce système de configuration:
1. terminer le développement de la composante quattor ncm-puppet
pour la rendre compatible avec puppet v5. done
2. changer les templates standard pour DPM de façon qu'ils utilisent la version officielle du meta-module dpm (lcgdm-dpm) plutôt que la version legacy (sartiran-dpm). done
3. préparer une documentation. cette page
Composant ncm-puppet et templates puppet généraux¶
la version de ncm-puppet et des templates compatible avec puppet v5 est la 17.12.0. Si vous n'avez pas encore installé cette version vous pouvez trouver ici le rpm de la nouvelle composant ncm-puppet et récupérer sur GIT les templates suivantes
il faut aussi les packets puppet et leurs dépendances (ici et ici pour centos 7). Vous pouvez faire un miroir ou pointer spma directement a ces répertoires.
Templates DPM pour ncm-puppet¶
certaines fonctionnalités sont disponibles seulement dans les versions plus récentes des templates Quattor. Assurez vous d’être a jour avec GIT
Configurer DPM avec NCM-puppet¶
pour pouvoir configurer DPM avec ncm-puppet il faut inclure la configuration générale puppet
variable PUPPET_VERSION?='5.0.0'; include 'features/puppet/config';
et déclarer, avant l'inclusion de machine-types/grid/se_dpm
,
variable DPM_USE_PUPPET_CONFIG=true;
Configurer les services DPM¶
pour configurer les services DPM il faut déclarer les paramètres pour la votre BDD
variable DPM_DB_PARAMS ?= nlist( "password", "<db password>", "adminuser", "root", "adminpwd", "<db admin password>", );
pour dmlite,
variable DMLITE_TOKEN_PASSWORD ?= 'XXXX'; # WARNING: it must be of at least 32 chars # old templates version may have a default value, please change it
et la composition de votre stockage
variable DPM_HOSTS = dict( "dpm", list(<headnode>), "dpns", list(<headnode>), "srmv1", list(<headnode>), "srmv22", list(<headnode>), "disk", list( "<disknode>", "<disknode>", .... ); );
et déclarer qui activent/désactivent des fonctionnalités. Les valeurs ici sont les valeurs par default. Si vous les gardez vous pouvez éviter de définir la variable.
#Fixing some default values variable GRIDFTP_REDIR_ENABLED ?= false; variable HTTPS_ENABLED ?= false; variable DPM_MEMCACHED_ENABLED ?= false; variable GRIDFTP_REDIR_ENABLED ?= false; variable DOME_ENABLED ?= false; variable DOME_FLAVOUR ?= false; variable DPM_LOG_LEVEL ?= 0; variable DPM_DISK_LOG_LEVEL ?= DPM_LOG_LEVEL; variable DPM_HEAD_LOG_LEVEL ?= DPM_LOG_LEVEL; variable DPMMGR_UID ?= 970; #!!!!WARNING: pay attention to this variable DPMMGR_GID ?= 970; # the default may not be what you want
il faut aussi choisir la version du module. Le default est la version actuelle mais il est mieux regarder sur puppetforge pour vérifier quel est la dernière version.
#Including the needed modules variable DPM_PUPPET_MODULE_VERSION ?= '0.6.0'; variable DPM_PUPPET_MODULE ?= 'lcgdm-dpm'; #you really do not need to change this
une autre solution, qui est préférable, est d'utiliser les modules officiels qui dont dans epel. Pour utiliser ces modules.
variable DPM_PUPPET_RELEASE_MODULES = true;
Attention: depuis 05/2018 le metapackage lcg-CA n'existe plus. Comme c'est le package défini par default dans les modules puppet pour fetchcrl, il faut le changer en ajoutant à vos profiles la ligne
'/software/components/puppet/hieradata/{fetchcrl::capkgs}' = list('ca-policy-egi-core');
Configurer xrootd et les fédérations¶
pour configurer xrootd
variable XROOTD_SITE_NAME='<your name>'; variable DPM_XROOTD_SHARED_KEY='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=';
la configuration spécifique dépend de la VO
CMS¶
Attention: la configuration détaillée ici nécessite d'une version récente (>0.5.5) des modules puppet lcgdm-dmlite.
ajouter un éventuel template avec une configuration additionnelle pour le site (par exemple écrire le TFC dans le bon endroit)
variable XROOTD_FEDERATION_SITE_CONFIG = 'path/tosite/config';
Après on définit les paramètres de la fédération. Attention, il faut changer namelib_prefix
et namelib
.
variable XROOTD_FEDERATION_PARAMS ?= dict(); variable XROOTD_FEDERATION_PARAMS = { cms = nlist(); cms[escape('name')]='cms'; cms[escape('fed_host')]='xrootd-cms.infn.it'; cms[escape('xrootd_port')]= null; cms[escape('direct')]= 'true'; cms[escape('cmsd_port')]=1413; cms[escape('local_port')]=11001; cms[escape('namelib_prefix')]="/dpm/in2p3.fr/home/cms"; cms[escape('namelib')]="libXrdCmsTfc.so file:/etc/xrootd/storage.xml?protocol=cms"; cms[escape('paths')]=list( '/store' ); cms[escape('dpm_enablecmsclient')]= 'true'; cms[escape('sec_protocol')]= list('/usr/lib64 gsi -crl:3 -key:/etc/grid-security/dpmmgr/dpmkey.pem -cert:/etc/grid-security/dpmmgr/dpmcert.pem -md:sha256:sha1 \ -ca:2 -gmapopt:10 -vomsfun:/usr/lib64/libXrdSecgsiVOMS.so','/usr/lib64 unix'); SELF[escape('cms')]=cms; cmslocal = nlist(); cmslocal[escape('name')]='cmslocal'; cmslocal[escape('fed_host')]='xrootd-cms.infn.it'; cmslocal[escape('xrootd_port')]= 1294; cmslocal[escape('cmsd_port')]=null; cmslocal[escape('local_port')]=11011; cmslocal[escape('namelib_prefix')]="/dpm/in2p3.fr/home/cms"; cmslocal[escape('namelib')]="libXrdCmsTfc.so file:/etc/xrootd/storage.xml?protocol=cms"; cmslocal[escape('paths')]=list( '/store' ); cmslocal[escape('dpm_enablecmsclient')]= 'true'; cmslocal[escape('sec_protocol')]= list('/usr/lib64 gsi -crl:3 -key:/etc/grid-security/dpmmgr/dpmkey.pem -cert:/etc/grid-security/dpmmgr/dpmcert.pem -md:sha256:\ sha1 -ca:2 -gmapopt:10 -vomsfun:/usr/lib64/libXrdSecgsiVOMS.so','/usr/lib64 unix'); SELF[escape('cmslocal')]=cmslocal; SELF; };
et le monitoring
variable XROOTD_REPORTING_OPTIONS='xrootd.t2.ucsd.edu:9931 every 60s all sync'; variable XROOTD_MONITORING_OPTIONS='all auth flush 30s mbuff 1472 window 5s dest files io info redir user cms-aaa-eu-collector.cern.ch:9330';
Atlas¶
Note: est-ce que Atlas AAA est encore d'actualité?
pour Atlas il faut definir les répertoires base.
Attention, il faut changer la répertoire racine en mettant le bon domain name.
# A bit of work to get the rucio and name lib prefixes variable ATLAS_XROOTD_NAMELIB_PREFIX ?= '/dpm/in2p3.fr/home/atlas'; variable ATLAS_XROOTD_N2N_DIRECTORIES ?= list( 'atlasdatadisk', 'atlasgroupdisk/perf-egamma', 'atlaslocalgroupdisk', 'atlasscratchdisk', ); variable ATLAS_XROOTD_RUCIO_PREFIX ?= { this = ''; foreach(k; v; ATLAS_XROOTD_N2N_DIRECTORIES) { if (this == '') { this = this + ATLAS_XROOTD_NAMELIB_PREFIX + '/' + v + '/rucio/'; } else { this = this + ',' + ATLAS_XROOTD_NAMELIB_PREFIX + '/' + v + '/rucio/'; }; }; this; };
definir les parametres de la federation
variable XROOTD_FEDERATION_PARAMS ?= dict(); variable XROOTD_FEDERATION_PARAMS = { atlas = dict(); atlas['name'] = 'fedredir_atlas'; atlas['fed_host'] = 'atlas-xrd-fr.cern.ch'; atlas['xrootd_port'] = 1094; atlas['cmsd_port'] = 1098; atlas['local_port'] = 11000; atlas['namelib_prefix'] = ATLAS_XROOTD_NAMELIB_PREFIX; atlas['namelib'] = 'XrdOucName2NameLFC.so pssorigin=localhost sitename=' + XROOTD_SITE_NAME + ' rucioprefix=' + ATLAS_XROOTD_RUCIO_PREFIX; atlas['paths'] = list('/atlas'); atlas['dpm_enablecmsclient'] = 'true'; atlas['sec_protocol'] = list( '/usr/lib64 gsi -crl:3 -key:/etc/grid-security/dpmmgr/dpmkey.pem -cert:/etc/grid-security/dpmmgr/dpmcert.pem -md:sha256:sha1 -ca:2 -gmapopt:10 -vomsfun:/usr/lib64/libXrdSecgsiVOMS.so', '/usr/lib64 unix', ); SELF[escape('atlas')] = atlas; SELF; };
et le monitioring
# XrootD reporting variable XROOTD_REPORTING_OPTIONS = 'uct2-int.mwt2.org:9931 every 60s all -buff -poll sync'; # XrootD monitoring variable XROOTD_MONITORING_OPTIONS = 'all auth flush 30s window 5s fstat 60 lfn ops xfr 5 dest redir fstat info user uct2-int.mwt2.org:9930 dest redir fstat info user atlas-fax-eu-collector.cern.ch:9330';
Autres paramètres¶
on peut aussi ajouter des paramètres additionnels pour configurer les modules puppet.
Par exemple en pas quelque paramètre non standard configuré a l'LPNHE
prefix '/software/components/puppet/hieradata'; # enabling core dump in /var/tmp '{dmlite::dav::config::coredump_dir}' = "/var/tmp"; # proxy for fetchcrl '{fetchcrl::http_proxy}' = "http://" + SQUID_HOST + ":" + PROXY_PORT; # limiting max number of gftp connections '{gridftp::params::connections_max}' = 512; # changing request clean timeout (3m is the default) '{lcgdm::dpm::config::reqcleantimeout}' = "1m";
Utiliser SPMA pour gérer les modules puppet¶
la composant ncm-puppet
utilise la commande "puppet module" pour installer et mettre a jour les modules sur puppetforge. Mais il y a aussi a possibilité de creer des paquets rpm avec les modules et utiliser ncm-spma
pour les installer.
Il faut désactiver la gestion des modules via ncm-puppet
et importer le rpm avec le modules
# Let ncm-spma handle the modules '/software/components/puppet/modules' = null; # Installing the lcgdm-dpm puppet modules rpm '/software/packages/{dpm-puppet-modules}' ?= dict();
Il faut aussi générer des paquets les mettre en ligne dans une repository yum.
La procédure utilisée à l'LPNHE est:
1. yum update
2. effacer le répertoire des modules puppet
3. puppet module install lcgdm-dpm
4. créer un fichier tar avec le répertoire des module puppet
5. créer un RPM en utilisant le tar file et le .spec file
Name: dpm-puppet-modules Version: 0.5.9 Release: 1 Source: puppet_lcgdm-dpm-v0.5.9.tar.xz License: Apache License v2.0 Prefix: /etc/puppetlabs/code/environments/production/modules Group: puppet/modules AutoReqProv: no BuildRoot: %{_tmppath}/%{name}-root BuildArch: noarch Summary: DPM puppet module + dependencies URL: https://forge.puppet.com/lcgdm/dpm # Requires: # Obsoletes: %prep %setup -n modules %description DPM puppet module + dependencies %build %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT/etc/puppetlabs/code/environments/production/modules rsync -aPv ./ $RPM_BUILD_ROOT/etc/puppetlabs/code/environments/production/modules/ %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) /etc/puppetlabs/code/environments/production/modules/
6. copier le RPM dans une répertoire locale
Au LLR des scripts génèrent les rpm directement sur le serveur qui héberge les miroirs des répertoires yum.
Vous pouvez trouver les scripts ici mais cette solution n'est pas en production au LLR donc les scripts ne sont pas censés marcher out of the box.