Skip to content

Commit ac71498

Browse files
author
lara
committed
merge with main
2 parents 9afba68 + ff131ff commit ac71498

22 files changed

+264
-69
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import os
2+
import json
3+
from bs4 import BeautifulSoup
4+
5+
path = os.path.dirname(os.path.realpath(__file__))
6+
path_overview = "/../../../docs/available_software/overview.md"
7+
path_data = "/../../../docs/available_software/data/json_data.json"
8+
if os.path.exists(path + path_overview) and os.path.exists(path + path_data):
9+
with open(path + path_data) as json_data:
10+
data = json.load(json_data)
11+
with open(path + path_overview) as f:
12+
soup = BeautifulSoup(f, "html.parser")
13+
else:
14+
os.write(1, b'Error: Could not find overview.md and/or data/json_data.json')
15+
16+
# parse the numbers for the different targets
17+
targets = data["targets"]
18+
ARM_targets = []
19+
x86_targets = []
20+
amd_targets = []
21+
intel_targets = []
22+
nvidia_targets = []
23+
24+
for target in targets:
25+
t = target.split('/')
26+
if t[7] == 'aarch64':
27+
ARM_targets.append(target)
28+
else:
29+
x86_targets.append(target)
30+
if t[8] == "amd":
31+
amd_targets.append(target)
32+
elif t[8] == "intel":
33+
intel_targets.append(target)
34+
elif t[8] == 'nvidia':
35+
nvidia_targets.append(target)
36+
37+
# parse the overview.md page to check the number of colums in rows
38+
table = soup.find("table", {"class": "table"})
39+
for row in table.find_all("tr"):
40+
for column in row.find_all('th'):
41+
if column.text == "x86_64":
42+
print(f'the value for x86_64 is {column.get("colspan")} in the overview page and there are {len(x86_targets)} targets in json_data.json.')
43+
if int(column.get("colspan")) != len(x86_targets):
44+
os.write(2, b'Error: Please make sure the values for x86_64 in json_data.json and overview.md are the same.')
45+
elif column.text == "aarch64":
46+
print(f'the value for aarch64 is {column.get("colspan")} in the overview page and there are {len(ARM_targets)} targets in json_data.json.')
47+
if int(column.get("colspan")) != len(ARM_targets):
48+
os.write(2, b'Error: Please make sure the values for aarch64 in json_data.json and overview.md are the same.')
49+
elif column.text == "amd":
50+
print(f'the value for amd is {column.get("colspan")} in the overview page and there are {len(amd_targets)} targets in json_data.json.')
51+
if int(column.get("colspan")) != len(amd_targets):
52+
os.write(2, b'Error: Please make sure the values for amd in json_data.json and overview.md are the same.')
53+
elif column.text == "intel":
54+
print(f'the value for intel is {column.get("colspan")} in the overview page and there are {len(intel_targets)} targets in json_data.json.')
55+
if int(column.get("colspan")) != len(intel_targets):
56+
os.write(2, b'Error: Please make sure the values for intel in json_data.json and overview.md are the same.')
57+
elif column.text == "nvidia":
58+
print(f'the value for nvidia is {column.get("colspan")} in the overview page and there are {len(nvidia_targets)} targets in json_data.json.')
59+
if int(column.get("colspan")) != len(nvidia_targets):
60+
os.write(2, b'Error: Please make sure the values for nvidia in json_data.json and overview.md are the same.')
61+
last_row = table.find_all("tr")[-1]
62+
print(f'there are {len(last_row.find_all("th"))} columns in the overview page and {len(targets)} targets in json_data.json.')
63+
if len(last_row.find_all("th")) != len(targets):
64+
os.write(2, b'Error: Please make sure there are correct number of <th> elements in the last <tr> element in overview.md for JavaScript to generate the table.')
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
name: Test overview of available software in EESSI
2+
on:
3+
push:
4+
paths:
5+
- ".github/**"
6+
- "docs/available_software/data/**"
7+
jobs:
8+
check_targets:
9+
name: check targets in overview.md and json_data.json
10+
runs-on: ubuntu-22.04
11+
steps:
12+
- uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6
13+
14+
- name: set up Python
15+
uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
16+
with:
17+
python-version: '3.10'
18+
architecture: x64
19+
20+
- name: test overview available software
21+
id: test_overview_available_software
22+
run: |
23+
# install required Python packages in virtual environment
24+
python -m venv venv
25+
. venv/bin/activate
26+
pip install -r mkdocs-ldjson-plugin/requirements.txt
27+
28+
python .github/workflows/scripts/test_overview_available_software.py

docs/available_software/data/json_data.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/available_software/data/json_data_detail.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

docs/available_software/detail/Java.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ json_ld:
2525
softwareRequirements: See https://www.eessi.io/docs/ for how to make EESSI available
2626
on your system
2727
softwareVersion: '[''Java/11(@Java/11.0.20)'', ''Java/11.0.20'', ''Java/17(@Java/17.0.6)'',
28-
''Java/17.0.6'']'
28+
''Java/17.0.6'', ''Java/21(@Java/21.0.5)'', ''Java/21.0.5'']'
2929
url: ''
3030
---
3131

@@ -40,13 +40,15 @@ The overview below shows which Java installations are available per target archi
4040
To start using Java, load one of these modules using a `module load` command like:
4141

4242
```shell
43-
module load Java/17.0.6
43+
module load Java/21.0.5
4444
```
4545

4646
*(This data was automatically generated on {{ generated_time }})*
4747

4848
| |aarch64/generic|aarch64/neoverse_n1|aarch64/neoverse_v1|x86_64/generic|x86_64/amd/zen2|x86_64/amd/zen3|x86_64/amd/zen4|x86_64/intel/haswell|x86_64/intel/sapphirerapids|x86_64/intel/skylake_avx512|
4949
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
50+
|Java/21.0.5|x|x|x|x|x|x|x|x|x|x|
51+
|Java/21(@Java/21.0.5)|x|x|x|x|x|x|x|x|x|x|
5052
|Java/17.0.6|x|x|x|x|x|x|x|x|x|x|
5153
|Java/17(@Java/17.0.6)|x|x|x|x|x|x|x|x|x|x|
5254
|Java/11.0.20|x|x|x|x|x|x|x|x|x|x|

docs/available_software/detail/Nextflow.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ json_ld:
2525
ratingValue: 5
2626
softwareRequirements: See https://www.eessi.io/docs/ for how to make EESSI available
2727
on your system
28-
softwareVersion: '[''Nextflow/23.10.0'']'
28+
softwareVersion: '[''Nextflow/23.10.0'', ''Nextflow/24.10.2'']'
2929
url: https://www.nextflow.io/
3030
---
3131

@@ -44,11 +44,12 @@ The overview below shows which Nextflow installations are available per target a
4444
To start using Nextflow, load one of these modules using a `module load` command like:
4545

4646
```shell
47-
module load Nextflow/23.10.0
47+
module load Nextflow/24.10.2
4848
```
4949

5050
*(This data was automatically generated on {{ generated_time }})*
5151

5252
| |aarch64/generic|aarch64/neoverse_n1|aarch64/neoverse_v1|x86_64/generic|x86_64/amd/zen2|x86_64/amd/zen3|x86_64/amd/zen4|x86_64/intel/haswell|x86_64/intel/sapphirerapids|x86_64/intel/skylake_avx512|
5353
| :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
54+
|Nextflow/24.10.2|x|x|x|x|x|x|x|x|x|x|
5455
|Nextflow/23.10.0|x|x|x|x|x|x|x|x|x|x|

docs/available_software/overview.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,28 @@ This table gives an overview of all the available software in EESSI per specific
77
<thead>
88
<tr>
99
<th rowspan="3">Name</th>
10-
<th colspan="7">x86_64</th>
1110
<th colspan="4">aarch64</th>
11+
<th colspan="7">x86_64</th>
1212
</tr>
13-
</tr>
13+
<tr>
14+
<th colspan="3"></th>
15+
<th colspan="1">nvidia</th>
1416
<th colspan="1"></th>
1517
<th colspan="3">amd</th>
1618
<th colspan="3">intel</th>
17-
<th colspan="3"></th>
18-
<th colspan="1">nvidia</th>
1919
</tr>
2020
<tr>
21-
<th colspan="1">generic</th>
22-
<th colspan="1">zen2</th>
23-
<th colspan="1">zen3</th>
24-
<th colspan="1">zen4</th>
25-
<th colspan="1">haswell</th>
26-
<th colspan="1">skylake_avx512</th>
27-
<th colspan="1">sapphirerapids</th>
28-
<th colspan="1">generic</th>
29-
<th colspan="1">neoverse_n1</th>
30-
<th colspan="1">neoverse_v1</th>
31-
<th colspan="1">grace</th>
21+
<th colspan="1"></th>
22+
<th colspan="1"></th>
23+
<th colspan="1"></th>
24+
<th colspan="1"></th>
25+
<th colspan="1"></th>
26+
<th colspan="1"></th>
27+
<th colspan="1"></th>
28+
<th colspan="1"></th>
29+
<th colspan="1"></th>
30+
<th colspan="1"></th>
31+
<th colspan="1"></th>
3232
</tr>
3333
</thead>
3434
</table>

docs/training/2025/webinar-series-2025Q2.md

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@ All sessions will be recorded. Recordings, slides, and materials used will be ma
2323

2424
## Sessions
2525

26-
- Monday 5 May 2025 (13:30-15:30 CEST): **Introduction to EESSI**
27-
- Monday 12 May 2025 (13:30-15:30 CEST): **Introduction to CernVM-FS**
26+
- Monday 5 May 2025 (13:30-15:30 CEST): **Introduction to EESSI** ([slides](EESSI-webinars-MayJune-2025-001-Introduction-to-EESSI-20250505.pdf), [recording](https://www.youtube.com/watch?v=FvVbzKLn-C8))
27+
- Monday 12 May 2025 (13:30-15:30 CEST): **Introduction to CernVM-FS** ([slides](EESSI-webinars-MayJune-2025-001-Introduction-to-CernVM-FS-20250512.pdf), [recording](https://www.youtube.com/watch?v=5-IYnxCz_aQ))
2828
- Monday 19 May 2025 (13:30-15:30 CEST): **Introduction to EasyBuild** (incl. EasyBuild 5.0.0)
2929
- Monday 26 May 2025 (13:30-15:30 CEST): **EESSI for CI/CD**
3030
- Monday 2 June 2025 (13:30-15:30 CEST): **Using EESSI as the base for a system stack**
3131

32+
[YouTube playlist with recordings](https://www.youtube.com/playlist?list=PL6_PkP_6pUtbPSfa7Upa0R0_P4NAbqC9a)
33+
3234
## Format
3335

3436
- Online webinars (via Zoom)
@@ -40,6 +42,15 @@ Attendance is free of cost, but registration is required.
4042

4143
**Register via [https://event.ugent.be/registration/eessi202505](https://event.ugent.be/registration/eessi202505)**
4244

45+
## Q&A via Slack
46+
47+
For posting questions or comments during the webinar, we strongly prefer that you post them
48+
in the **`#webinar-series-2025q2` channel in the EESSI Slack** ([direct link to that channel](https://eessi-hpc.slack.com/archives/C068DV7GY3V)).
49+
50+
If you haven't joined the EESSI Slack yet, first use the "`Slack channel`" link on the [EESSI website (https://eessi.io)](https://eessi.io).
51+
52+
There will also be an opportunity at the end of the webinar to ask questions directly to the speakers, should you wish to do so.
53+
4354
## Useful links
4455

4556
- EESSI website: [https://eessi.io](https://eessi.io)
@@ -74,6 +85,17 @@ a fully pre-built, modular software environment — no matter where you compute.
7485
sysadmin, or developer, this webinar will show how EESSI can help you save time, improve reproducibility,
7586
and simplify your scientific workflows.
7687

88+
#### Materials
89+
90+
- [slides (PDF)](EESSI-webinars-MayJune-2025-001-Introduction-to-EESSI-20250505.pdf)
91+
- [recording (YouTube)](https://www.youtube.com/watch?v=FvVbzKLn-C8)
92+
93+
<div align="center">
94+
<iframe width="560" height="315" src="https://www.youtube.com/embed/FvVbzKLn-C8?si=WSTP8vw51zcpdtRB" title="YouTube video player"
95+
frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
96+
referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
97+
</div>
98+
7799
---
78100

79101
### Introduction to CernVM-FS
@@ -95,6 +117,15 @@ cover some aspects specific to using CernVM-FS on HPC systems.
95117
It is intended for people who are interested in CernVM-FS (system administrators, support team members, researchers, etc.),
96118
no specific prior knowledge or experience with it is required.
97119

120+
#### Materials
121+
122+
- [slides (PDF)](EESSI-webinars-MayJune-2025-001-Introduction-to-CernVM-FS-20250512.pdf)
123+
- [recording (YouTube)](https://www.youtube.com/watch?v=5-IYnxCz_aQ)
124+
125+
<div align="center">
126+
<iframe width="560" height="315" src="https://www.youtube.com/embed/5-IYnxCz_aQ?si=zqgYBiZCdY5islK8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
127+
</div>
128+
98129
---
99130

100131
### Introduction to EasyBuild

docs/tutorial/access/proxy.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@ You can use the following template for this:
6767
acl local_nodes src YOUR_CLIENT_IPS
6868
6969
# Destination domains that are allowed
70-
acl stratum_ones dstdomain .YOURDOMAIN.ORG
70+
# cern.ch + opensciencegrid.org domains because of cvmfs-config.cern.ch repository,
71+
# which are provided via Stratum-1 mirror servers hosted by CERN and OSG
72+
acl stratum_ones dstdomain .cern.ch .opensciencegrid.org .YOURDOMAIN.ORG
7173
7274
# Squid port
7375
http_port 3128
@@ -103,7 +105,8 @@ In this template, you *must* change two things in the Access Control List (ACL)
103105
For example, to allow connecting to the EESSI Stratum 1 replica servers, use:
104106

105107
```{ .apache .copy }
106-
acl stratum_ones dstdomain .eessi.science
108+
# public Stratum-1 mirror servers for EESSI are hosted under eessi.science domain
109+
acl stratum_ones dstdomain .cern.ch .opensciencegrid.org .eessi.science
107110
```
108111

109112
Note that this configuration assumes that port 3128 is accessible on the proxy server.

docs/tutorial/cvmfs/flagship-repositories.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,25 +29,26 @@ Examples include *(click to browse repository contents)*:
2929

3030
## LCG Releases
3131

32-
The LCG Software Stack which is distributed via the CernVM-FS repository `/cvmfs/sft.cern.ch`
33-
contains over 450 external packages as well as HEP specific tools and generators.
34-
35-
There are usually two releases per year as well as development builds every night.
32+
The [LCG Software Stacks](https://lcginfo.cern.ch/) which is distributed via the CernVM-FS repository
33+
`/cvmfs/sft.cern.ch` contains in total over 800 external packages as well as HEP-specific tools and generators.
3634

3735
Software installations included often come with a script that updates your shell environment
3836
for using them by sourcing it. In addition, through so-called *views* a complete software stack
3937
can be made available in your shell environment.
4038

41-
For more information, see <https://ep-dep-sft.web.cern.ch/document/lcg-releases> and
42-
<https://lcgdocs.web.cern.ch/lcgdocs/lcgreleases/introduction>.
39+
For example, loading software for the specific view [*LCG_107*](https://lcginfo.cern.ch/release/107/) for RHEL9 can be dona via:
40+
```
41+
source /cvmfs/sft.cern.ch/lcg/views/LCG_107/x86_64-el9-gcc14-opt/setup.sh
42+
```
43+
4344

4445
## The Alliance
4546

4647
The [Digital Research Alliance of Canada](https://alliancecan.ca/en/about/alliance), a.k.a. *The Alliance* and formerly
4748
known as *Compute Canada*, uses CernVM-FS to distribute the software stack for the Canadian national compute clusters.
4849

49-
Documentation on using their CernVM-FS repository `/cvmfs/soft.computecanada.ca` is available
50-
[here](https://docs.alliancecan.ca/wiki/Accessing_CVMFS/en), and an overview of available software is available
50+
Documentation on using their CernVM-FS repository `/cvmfs/soft.computecanada.ca` can be found
51+
[here](https://docs.alliancecan.ca/wiki/Accessing_CVMFS/en), and an overview of all available software can be found
5152
[here](https://docs.alliancecan.ca/wiki/Available_software).
5253

5354
## Unpacked containers
@@ -69,7 +70,7 @@ More information on `unpacked.cern.ch` is available in the CernVM-FS documentati
6970

7071
The [*European Environment for Scientific Software Installations (EESSI)*](https://eessi.io) provides optimized installations
7172
of scientific software for `x86_64` (Intel + AMD) and `aarch64` (64-bit Arm) systems that work on any Linux
72-
distribution.
73+
distribution via the CernVM-FS repository `/cvmfs/software.eessi.io`.
7374

7475
We will use EESSI as an example CernVM-FS repository throughout this tutorial.
7576

docs/tutorial/cvmfs/what-is-cvmfs.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ In certain cases, the CernVM-FS has also been used to
5757
The metadata and content of files included in a CernVM-FS repository are **automatically downloaded on-demand**
5858
as files and directories are being accessed, which is akin to *streaming* services for music, movies, and TV series.
5959

60-
This happens fully transparently, as the contents of a repository are exposed by CernVM-FS as if it were
60+
This happens fully transparently, all the contents of a repository are exposed by CernVM-FS as if they were
6161
a local (read-only) file system. Hence, clients that access a CernVM-FS repository typically do not
62-
actually have a local copy of all files included in that repository, but only have a limited set of files and
62+
have a local copy of all the files included in that repository, but only have a limited set of files and
6363
metadata directly available: those which were most recently accessed.
6464

6565

@@ -115,6 +115,8 @@ This can result in a significant reduction in storage capacity that is required
115115
especially when identical files are spread out across the repository,
116116
as often happens with particular files like example data files across multiple versions of the same software.
117117

118+
For the CernVM-FS client, data de-duplication will also happen across repositories when the local client cached is shared across all repositories (the default).
119+
118120

119121
### Compression of data { #features-compression }
120122

docs/tutorial/monitoring.md

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,54 @@
1111

1212
# Monitoring CernVM-FS
1313

14-
*(coming soon)*
14+
There are multiple options available to automate the monitoring of CernVM-FS clients (see [CernVM-FS documentation](https://cvmfs.readthedocs.io/en/stable/cpt-configure.html#monitoring) ):
15+
16+
- Nagios
17+
- Telemetry Aggregator
18+
- HTTP Tracing Header
19+
20+
## Nagios
21+
CernVM-FS supports the Nagios monitoring system. A checker plugin is available on the [CernVM-FS download page](https://cernvm.cern.ch/fs/#download).
22+
23+
## Telemetry Aggregator
24+
25+
The [Telemetry Aggregator](https://cvmfs.readthedocs.io/en/stable/cpt-telemetry.html#cpt-telemetry) allows remote monitoring of the internal state of the client. These counters count access to internal data structures and number of errors, and can be accessed locally via `cvmfs_talk -i <repo> internal affairs`. The Telemetry Aggregator extends this data by also providing the timestamp of the counter collection, the current revision of the repository, and providing these counters in absolute values and delta values relative to the previous measurement. This e.g. allows monitoring if some clients fall behind in updating the repository to the latest revision.
26+
27+
By default, the data is sent in Influx data format. The Influx Telemetry Aggregator also allows defining custom user-defined, static tags and fields.
28+
Other formats are possible but must be provided as a source code plugin.
29+
30+
To activate it the following lines need to be added to the client config (e.g. `/etc/cvmfs/default.local`):
31+
```
32+
CVMFS_TELEMETRY_SEND=ON
33+
CVMFS_TELEMETRY_RATE=<rate in seconds> # minimum send rate >= 5 sec
34+
CVMFS_INFLUX_HOST=localhost # IP address
35+
CVMFS_INFLUX_PORT=8092 # Port
36+
CVMFS_INFLUX_METRIC_NAME=<measurement name> # "Table" name
37+
CVMFS_INFLUX_EXTRA_TAGS="some_tag=42,some_tag2=27" # optional // tags are always sent
38+
CVMFS_INFLUX_EXTRA_FIELDS="somefield=3" # optional // fields are only sent in absolute data
39+
```
40+
41+
## HTTP Tracing Header
42+
43+
CernVM-FS offers to add user-defined, static key-value pairs to the HTTP header for any of its client HTTP request. This includes download of uncached files, selection of proxy and servers (S0/S1).
44+
45+
For this the following lines need to be added to the client config (e.g. `/etc/cvmfs/default.local`):
46+
```
47+
CVMFS_HTTP_TRACING=on
48+
CVMFS_HTTP_TRACING_HEADERS='node:pn214|tag2:some_tag'
49+
```
50+
51+
This results to the following header
52+
```
53+
(download) CURL Header for URL: /data/81/7c882d4a2e9dd7f9c5c2bfb4e04ff316e436dfC is:
54+
Connection: Keep-Alive
55+
Pragma:
56+
User-Agent: cvmfs Fuse 2.12.6
57+
X-CVMFS-node: pn214
58+
X-CVMFS-tag2: some_tag
59+
X-CVMFS-PID: 481270
60+
X-CVMFS-GID: 0
61+
X-CVMFS-UID: 0
62+
```
63+
64+

0 commit comments

Comments
 (0)