A comprehensive toolkit for setting up and maintaining EESSI (European Environment for Scientific Software Installations) infrastructure, including Stratum 1 server deployment, client configuration, and monitoring tools.
The EESSI Setup Project provides a set of scripts and tools to:
- Deploy EESSI Stratum 1 servers - Create and maintain local CVMFS replicas of the EESSI software repository
- Configure EESSI clients - Easily set up workstations and compute nodes to access EESSI software
- Monitor EESSI infrastructure - Track performance, synchronization status, and health of EESSI components
- Integrate with HPC environments - Environment modules and system services for seamless EESSI integration
EESSI (pronounced "easy") provides a shared repository of scientific software installations that can be used across different Linux distributions and processor architectures, from laptops to HPC clusters.
.
├── client
│ ├── bin
│ │ ├── eessi_client_setup.sh # Client installation script
│ │ └── eessi_diagnostics.sh # Client diagnostics utility
│ ├── modules
│ │ └── EESSI-2023.06.lua # Example Lmod module file
│ └── systemd
│ └── eessi-mount.service # Systemd service for auto-mounting
├── README.md # Main project documentation
└── stratum1
└── bin
├── eessi_stratum1_monitoring.sh # Monitoring utility
└── eessi_stratum1_setup.sh # Stratum 1 deployment script
The European Environment for Scientific Software Installations (EESSI) is a collaborative project that provides a common stack of scientific software for HPC systems and other computing environments. EESSI works like a streaming service for scientific software, making it available on demand across different platforms.
Key features:
- Compatible across systems - Works on various Linux distributions and processor architectures
- Optimized for performance - Software is built with architecture-specific optimizations
- Easy to deploy and use - Minimal system requirements and straightforward configuration
- Community-maintained - Developed and maintained by HPC centers across Europe
EESSI uses the CernVM File System (CVMFS) for efficient distribution of software.
EESSI is built on the CernVM File System (CVMFS), which provides a reliable and scalable software distribution system. The architecture consists of:
- Stratum 0 Server - The central repository where software is published
- Stratum 1 Servers - Distribution points that replicate content from Stratum 0
- CVMFS Clients - End-user systems that mount the repositories
In this architecture:
- Software is published to the Stratum 0 server
- Stratum 1 servers periodically synchronize with Stratum 0
- Clients connect to Stratum 1 servers to access software
- Local caching ensures efficient access to frequently used content
- A Linux server with at least 4GB RAM and sufficient storage (recommend 500GB+)
- Root or sudo access
- Network connectivity to the internet and to client machines
- Open port: 80 (HTTP)
sudo stratum1/bin/eessi_stratum1_setup.shThis script will:
- Install required dependencies (Ansible, CVMFS, Apache)
- Clone the EESSI filesystem-layer repository
- Configure the server as a Stratum 1 replica
- Set up the web server
- Verify the installation
The eessi_stratum1_setup.sh script accepts several command-line options and environment variables to customize the deployment:
# Command-line options
sudo stratum1/bin/eessi_stratum1_setup.sh -i IP_ADDRESS -s STORAGE_DIR -r REPOSITORY -u SSH_USER -l LOG_LEVEL -y
# Options:
# -i IP_ADDRESS IP address of Stratum 1 server
# -u SSH_USER SSH username for Ansible connection (default: current user)
# -s STORAGE_DIR Custom storage location for CVMFS (default: /lscratch/cvmfs)
# -r REPOSITORY Repository to replicate (default: software.eessi.io)
# -l LOG_LEVEL Set logging level: INFO, DEBUG, ERROR (default: INFO)
# -y Assume yes to all prompts (non-interactive mode)
# -h Show help message
# Or environment variables
EESSI_STRATUM1_IP=10.1.1.8 EESSI_STORAGE_DIR=/data/cvmfs EESSI_SSH_USER=admin \
EESSI_LOG_LEVEL=DEBUG sudo -E ./stratum1/bin/eessi_stratum1_setup.shThe eessi_stratum1_monitoring.sh script provides comprehensive monitoring for EESSI Stratum 1 servers.
Basic usage:
sudo stratum1/bin/eessi_stratum1_monitoring.shAdvanced options:
# Options:
# -r REPO Repository name (default: software.eessi.io)
# -o FILE Generate HTML report to specified file
# -e EMAIL Send report to email address
# -s SERVER Stratum 0 server to check against (can be specified multiple times)
# -S FILE File containing a list of Stratum 0 servers (one per line)
# -h Show help
# Examples
sudo stratum1/bin/eessi_stratum1_monitoring.sh -o /var/www/html/eessi-report.html
sudo stratum1/bin/eessi_stratum1_monitoring.sh -e [email protected] -o /var/www/html/eessi-report.html
sudo stratum1/bin/eessi_stratum1_monitoring.sh -s cvmfs-stratum0.example.orgFor automated monitoring, set up a cron job:
# Create a cron job to run every hour
echo "0 * * * * root /path/to/stratum1/bin/eessi_stratum1_monitoring.sh -o /var/www/html/eessi-report.html" | sudo tee /etc/cron.d/eessi-monitoringTo manually trigger synchronization:
sudo cvmfs_server snapshot software.eessi.ioTo synchronize all repositories:
sudo cvmfs_server snapshot -aThe default storage location for CVMFS repositories is /srv/cvmfs. If storage space is running low:
-
Check current usage:
df -h /srv/cvmfs
-
Garbage collection runs automatically with each snapshot, but can be manually triggered:
sudo cvmfs_server gc software.eessi.io
For Stratum 1 servers with high load:
-
Adjust Apache configuration:
- Increase
MaxClientsin Apache configuration - Consider using the "worker" or "event" MPM instead of "prefork"
- Increase
-
Optimize file system performance:
- Consider using SSD storage for repository data
- Adjust file system mount options for better performance
-
Synchronization failures
- Check network connectivity to Stratum 0 servers
- Verify that Stratum 0 servers are accessible
- Check for errors in
/var/log/cvmfsor systemd journal
-
Web server issues
- Verify Apache configuration:
sudo apachectl configtest - Check Apache logs:
/var/log/httpd/error_logor/var/log/apache2/error.log - Restart Apache:
sudo systemctl restart httpdorsudo systemctl restart apache2
- Verify Apache configuration:
-
Storage issues
- Ensure sufficient disk space for repository growth
- Check file system for errors:
sudo fsck /dev/sdXY - Monitor I/O performance:
sudo iotop
-
Check repository status:
sudo cvmfs_server info software.eessi.io
-
Check server health:
sudo cvmfs_server check software.eessi.io
-
Verify web server configuration:
curl -I http://localhost/cvmfs/software.eessi.io/.cvmfspublished
- Linux operating system (RHEL/CentOS/Rocky/Fedora or Debian/Ubuntu)
- Root or sudo access
- Network connectivity to EESSI Stratum 1 servers
sudo client/bin/eessi_client_setup.shThis will:
- Install CVMFS and the EESSI configuration
- Configure CVMFS for accessing EESSI repositories
- Test the connection to the EESSI repositories
- Display available EESSI versions
The script accepts several environment variables to customize the installation:
# Environment variables with defaults:
# EESSI_STRATUM1_IP - IP address of local Stratum 1 server (default: 10.1.12.2)
# EESSI_CACHE_SIZE - CVMFS cache size in MB (default: 10000)
# EESSI_LOG_FILE - Path to log file (default: /var/log/eessi_client_install.log)
# EESSI_CACHE_BASE - Custom location for CVMFS cache (default: /var/lib/cvmfs)
# Examples:
# Use a specific Stratum 1 server
EESSI_STRATUM1_IP=10.1.12.5 sudo -E client/bin/eessi_client_setup.sh
# Configure a larger cache size (in MB)
EESSI_CACHE_SIZE=20000 sudo -E client/bin/eessi_client_setup.sh
# Use a custom cache location
EESSI_CACHE_BASE=/data/cvmfs-cache sudo -E client/bin/eessi_client_setup.sh
# Specify a custom log file
EESSI_LOG_FILE=/var/log/eessi-client.log sudo -E client/bin/eessi_client_setup.sh
# Combine multiple options
EESSI_STRATUM1_IP=10.1.12.5 EESSI_CACHE_SIZE=20000 sudo -E client/bin/eessi_client_setup.shTo ensure EESSI repositories are properly mounted when the system boots:
# Copy the service file
sudo cp client/systemd/eessi-mount.service /etc/systemd/system/
# Enable and start the service
sudo systemctl enable eessi-mount.service
sudo systemctl start eessi-mount.serviceAfter installation, there are two main ways to access EESSI software:
source /cvmfs/software.eessi.io/versions/2023.06/init/bashThis will initialize the EESSI environment for the current shell session, making all EESSI software available.
If your system uses environment modules (such as Lmod), you can use the provided module file:
# Copy the module file to your modules directory
sudo mkdir -p /etc/modulefiles/eessi
sudo cp client/modules/EESSI-2023.06.lua /etc/modulefiles/eessi/2023.06.lua
# Load the EESSI module
module load eessi/2023.06
# List available software
module avail
# Load specific software
module load Python/3.9.6For environments with their own EESSI mirror servers, create or modify /etc/cvmfs/domain.d/eessi.io.local:
CVMFS_SERVER_URL="http://your-local-mirror.example.org/cvmfs/@fqrn@;${CVMFS_SERVER_URL}"
CVMFS_USE_GEOAPI=noTo ensure clients connect directly to Stratum 1 servers without any intermediate proxy:
echo 'CVMFS_HTTP_PROXY="DIRECT"' | sudo tee -a /etc/cvmfs/default.local
sudo cvmfs_config reloadThis example demonstrates a full setup with a local Stratum 1 server and multiple clients.
# On the Stratum 1 server (e.g., 10.0.0.1)
git clone https://github.com/yourusername/eessi-setup.git
cd eessi-setup
sudo stratum1/bin/eessi_stratum1_setup.sh -i 10.0.0.1 -s /data/cvmfs
# Verify installation
curl --head http://localhost/cvmfs/software.eessi.io/.cvmfspublished
# Set up monitoring
sudo stratum1/bin/eessi_stratum1_monitoring.sh -o /var/www/html/eessi-report.html
echo "0 * * * * root $(pwd)/stratum1/bin/eessi_stratum1_monitoring.sh -o /var/www/html/eessi-report.html" | sudo tee /etc/cron.d/eessi-monitoring# On each client
git clone https://github.com/yourusername/eessi-setup.git
cd eessi-setup
# Configure with the local Stratum 1 server
EESSI_STRATUM1_IP=10.0.0.1 sudo -E client/bin/eessi_client_setup.sh
# Set up auto-mounting
sudo cp client/systemd/eessi-mount.service /etc/systemd/system/
sudo systemctl enable eessi-mount.service
sudo systemctl start eessi-mount.service
# Set up environment module
sudo mkdir -p /etc/modulefiles/eessi
sudo cp client/modules/EESSI-2023.06.lua /etc/modulefiles/eessi/2023.06.lua# On each client, test EESSI repository access
cvmfs_config probe software.eessi.io
# Test software access via direct initialization
source /cvmfs/software.eessi.io/versions/2023.06/init/bash
python3 --version # Example of using EESSI-provided software
# Test via environment modules
module load eessi/2023.06
module avail # Should show available EESSI software- The EESSI project: https://www.eessi.io/
- CernVM-FS: https://cernvm.cern.ch/fs/