diff --git a/configs/sites/tier1/aws-ubuntu/README.md b/configs/sites/tier1/aws-ubuntu/README.md new file mode 100644 index 0000000000..31562e81a3 --- /dev/null +++ b/configs/sites/tier1/aws-ubuntu/README.md @@ -0,0 +1,421 @@ +## spack-stack AMI (Ubuntu 26.04) + +This document covers building and using the spack-stack 2.2 AMI for Ubuntu 26.04 LTS. This image has two environments: gnu (gcc-14.3.0), and intel (intel-oneapi 2026.1.1). You can use either one of these environments for development purposes. + +### Using the Snapshot + +Here is an example `aws cli` command-line to run a pre-built snapshot with your designated key-pair. + +```bash +aws ec2 run-instances \ + --image-id "ami-0eec3117bdb2e6147" --instance-type "m6i.4xlarge" \ + --key-name YOUR-KEYPAIR \ + --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"Encrypted":false,"DeleteOnTermination":true,"Iops":3000,"SnapshotId":"snap-XXXXXXXXXXXXXXXXX","VolumeSize":200,"VolumeType":"gp3","Throughput":125}}' \ + --network-interfaces '{"SubnetId":"subnet-072fb62ff85b32a7a","AssociatePublicIpAddress":true,"DeviceIndex":0,"Groups":["sg-0091fa8e748fbe355"]}' \ + --tag-specifications '{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"ubuntu2604-spack-stack-2.2-gcc-oneapi"}]}' \ + --metadata-options '{"HttpEndpoint":"enabled","HttpPutResponseHopLimit":2,"HttpTokens":"required"}' \ + --private-dns-name-options '{"HostnameType":"ip-name","EnableResourceNameDnsARecord":false,"EnableResourceNameDnsAAAARecord":false}' \ + --count 1 +``` + +## Using this Site Config + +This site tracks the current Ubuntu LTS. It started on 20.04, was +`tier2/aws-ubuntu2404` for spack-stack 2.0–2.1, and is 26.04 as of 2.2. When the +next LTS comes out, update this directory in place; don't create a new +versioned site. + +JCSDA publishes a fully configured and built installation of spack stack derived +from this config as an AWS Snapshot. The easiest way to use this +configuration of spack stack is to launch a VM using that AMI. The instructions +below are included for maintainance of the history of this site config and +their possible relevance to debugging issues should they arise. + +### Base Instance + +This AMI was built on an instance with these properties: + +* OS: Ubuntu 26.04.1 LTS (Resolute Raccoon), kernel 7.0.0-1014-aws +* AMI Name / ID: TODO +* 8 vCPU, 30 GiB RAM +* 200GB of gp3 storage as / + +### Differences from the Ubuntu 24.04 site + +* **Lmod comes from apt.** Ubuntu 26.04 packages Lmod 8.7.60 (on Lua 5.3), + which meets spack's requirement, so the manual Lua 5.1 + Lmod 8.7 source + build is gone. The package installs `/etc/profile.d/lmod.sh`, so `module` + is available in every login shell. +* **The default system gcc is 15.2.0**, which is newer than spack-stack + supports (up to 14.x). We install gcc/g++/gfortran 14.3.0 next to it and + point spack at the `-14` binaries by full path. `/usr/bin/gcc` stays + `gcc-15`. We don't use `update-alternatives` anymore: `/usr/bin/gcc` and + `/usr/bin/g++` are symlinks owned by the `gcc`/`g++` packages, and an + `apt upgrade` would reset them. The stack-gcc meta-module still exports + `CC/CXX/FC` as the gcc-14 paths, so builds that load it use gcc-14. No + unversioned `gfortran` is installed at all. +* **llvm-14 is not available** on 26.04 and nothing in the stack needs it, + so it has been dropped, along with the `llvm-config` alternative. +* **coreutils is uutils (Rust)**, Ubuntu's default since 25.10 + (`ls (uutils coreutils) 0.10.0`). We keep the system default: switching to + `coreutils-from-gnu` would remove the `build-essential` metapackage, which + depends on `coreutils-from-uutils`. Spack doesn't detect uutils as a + coreutils external. If a build fails in an `install`/`cp`/`sort`/`date` + step, suspect uutils first. +* **`/tmp` is a RAM-backed tmpfs** (half of RAM, with per-user quotas). The + 24.04 site's `config.yaml` staged builds and cached sources in `/tmp`, + which fills it with `Disk quota exceeded`. The site now uses the common + default `${SPACK_STACK_DIR}/cache` on the root disk. +* The system ships Python 3.14 and CMake 4.2. Spack runs fine on Python 3.14, + and both are still excluded from `spack external find`. + +## Pre-requisites (For All Compilers) + +### Installing Packages + +```bash +# Update system software. +sudo apt update +sudo apt upgrade -y + +# Build tools. build-essential pulls in the default gcc-15. We add gcc-14 +# alongside it, since spack-stack supports gcc up to 14.x. +sudo apt install -y build-essential gcc-14 g++-14 gfortran-14 cpp-14 make cmake automake autoconf apt-utils + +# Other requirements. +sudo apt install -y libgomp1 git git-lfs autopoint mysql-server libmysqlclient-dev qtbase5-dev qt5-qmake libqt5svg5-dev qt5dxcb-plugin wget curl file tcl-dev gnupg2 iproute2 locales unzip less bzip2 gettext libtree pkg-config libcurl4-openssl-dev libtool flex + +# Lmod (8.7.60 on 26.04; installs /etc/profile.d/lmod.sh). +sudo apt install -y lmod + +# Editors +sudo apt install -y vim nano + +# Python develop. +sudo apt install -y python3 python3-pip python3-setuptools + +# Configure git credential caching and git lfs for the ubuntu user and root. +git config --global credential.helper 'cache --timeout=3600' +git lfs install +sudo -H bash -c "git config --global credential.helper 'cache --timeout=3600' && git lfs install" + +# Log out and back in (or `source /etc/profile.d/lmod.sh`), then check: +module --version # Modules based on Lua: Version 8.7.60 +gcc-14 --version # gcc-14 (Ubuntu 14.3.0-14ubuntu1) 14.3.0 +``` + +### Clone `spack-stack` + +```bash +cd /opt +sudo git clone -b release/2.2 --depth 1 --recursive https://github.com/jcsda/spack-stack.git +sudo chown -R ubuntu:ubuntu /opt/spack-stack +``` + +Everything from here on runs as the `ubuntu` user. Use `sudo` only where it's +shown. These AMIs are single-user dev and test machines and everyone logs in +as `ubuntu`, so building as that user keeps the environments user-owned and +avoids root-owned files in `envs/`. + +## Install Spack-Stack Steps by Compiler + +
+GCC Installation + +**Shortcut:** the committed site config reproduces this environment exactly +(verified: identical concretized hashes). On a prepared image you can skip +the external/compiler derivation and the `spack config add` steps below: + +```bash +umask 0022 +cd /opt/spack-stack && source setup.sh +spack stack create env --site aws-ubuntu --template unified-dev --name unified-gcc --compiler gcc +cd envs/unified-gcc && spack env activate -p . +spack concretize --fresh 2>&1 | tee log.concretize +``` + +The full steps below show how the site config was derived from +`linux.default`. Use them when moving to a new Ubuntu LTS. + +```bash +# Ubuntu gives regular users umask 0002; spack-stack expects 0022 or 0027. +umask 0022 +cd /opt/spack-stack +source setup.sh +# Swap default module type for default linux. +sed -i 's/tcl/lmod/g' configs/sites/tier2/linux.default/modules.yaml +spack stack create env --site linux.default --template unified-dev --name unified-gcc --compiler gcc +cd envs/unified-gcc +spack env activate -p . +unset SPACK_DISABLE_LOCAL_CONFIG +export SPACK_SYSTEM_CONFIG_PATH="$(pwd)/site" +spack external find --scope system \ + --exclude cmake \ + --exclude curl --exclude openssl \ + --exclude openssh --exclude python \ + --exclude zlib +# zlib: the system external (prefix /usr) breaks pmix's configure, which +# looks for libz in /usr/lib{,64} and not the multiarch +# /usr/lib/x86_64-linux-gnu ("ZLIB SUPPORT REQUESTED AND NOT FOUND"). +spack external find --scope system wget grep +spack compiler find --scope system +# ACTION: Edit the generated compiler config (site/compilers.yaml and/or the +# compiler entries in site/packages.yaml) with the following. +# 1) Keep a single gcc@14.3.0 spec and delete the system default gcc@15.2.0 +# and any empty or duplicate gcc specs. Redundant/empty specs cause +# cryptic build errors later. The entry should read: +# gcc: +# buildable: false +# externals: +# - spec: gcc@14.3.0 languages:='c,c++,fortran' +# prefix: /usr +# extra_attributes: +# compilers: +# c: /usr/bin/gcc-14 +# cxx: /usr/bin/g++-14 +# fortran: /usr/bin/gfortran-14 +# 2) Delete or comment clang/llvm refs. +# 3) Add `buildable: false` to the tar and wget entries. +# coreutils (uutils on stock 26.04) and binutils (2.46, no gold) are not +# detected; let spack build them if needed. qt5 isn't detected either (qmake +# is a qtchooser shim), so declare the apt qtbase5-dev install by hand. +# common/packages.yaml requires qt@5. +cat << 'EOF' >> ${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml + qt: + buildable: false + externals: + - spec: qt@5.15.18 + prefix: /usr +EOF +export SPACK_DISABLE_LOCAL_CONFIG=true +unset SPACK_SYSTEM_CONFIG_PATH + +# Continue configuration. Don't use "packages:all:prefer:['%gcc']": gcc-14 is +# the only compiler, and that setting acts as a dependency constraint that +# pushes spack to rebuild system externals (gmake, perl, m4, ...) instead of +# using them. Pin MPI the way the Ubuntu CI does. +spack config add "packages:mpi:require:['openmpi@5.0.10']" +spack config add "packages:fontconfig:variants:+pic" +spack config add "packages:pixman:variants:+pic" +spack config add "packages:cairo:variants:+pic" +# met: with gcc 14, +lidar2nc and +modis can't be honored (they need hdf-eos2, +# and common pins hdf-eos2@2.20v1.00, which conflicts with %gcc@14:), so met +# builds without them. +spack config add "packages:met:variants:+python +grib2 +graphics +lidar2nc +modis" +spack config add "packages:ewok-env:require:[+ecflow]" +# Pin py-netcdf4 +spack config add "packages:py-netcdf4:require:[\"@1.7.2\"]" +# Avoid duplicates: jedi-ufs-env needs jedi-python-env +bufrquery. Left +# unconstrained, jedi-tools-env falls back to py-myst-parser@1 and py-sphinx@6, +# which cap py-attrs@:21 and py-docutils@:0.19 and split py-attrs, py-eccodes, +# py-rasterio, jedi-python-env and awscli-v2. myst-parser 5 + sphinx 9 share +# docutils 0.22 with the rest of the stack. +spack config add "packages:jedi-python-env:require:[+bufrquery]" +spack config add "packages:py-myst-parser:require:['@5:']" +spack config add "packages:py-sphinx:require:['@9:']" + +# Concretize and install +spack concretize --fresh 2>&1 | tee log.concretize +# py-versioneer is a known, unavoidable duplicate (see common/packages.yaml). +${SPACK_STACK_DIR}/util/show_duplicate_packages.py -i fms -i crtm -i crtm-fix -i esmf -i mapl -i py-cython -i py-versioneer +spack stack check-preferred-compiler +spack install --fail-fast -j 8 2>&1 | tee log.install + +# Install modules +spack module lmod refresh -y --delete-tree +spack stack setup-meta-modules + +# Add a number of default module locations to the lmod startup script. +echo 'module use /opt/spack-stack/envs/unified-gcc/modules/Core' | sudo tee -a /etc/profile.d/z01_lmod.sh +``` + +
+ +
+Intel OneAPI Installation + +#### Install Intel OneAPI Compiler + +Intel's `all` apt repo works unchanged on 26.04. 2026.1.1 is the latest +2026.1.x and is the release-tested version. Don't pick up 2026.2, which is +also in the repo. + +```bash +wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null +echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list +sudo apt update +sudo apt install -y intel-oneapi-compiler-dpcpp-cpp-2026.1 intel-oneapi-compiler-fortran-2026.1 intel-oneapi-mpi-devel-2021.18 intel-oneapi-tbb-devel-2023.1 intel-oneapi-mkl-devel-2026.1 +``` + +**GCC toolchain note:** icx/icpx use the newest installed GCC for libstdc++ +headers and libraries, and ifx uses it to link its runtime. On 26.04 that's +gcc-15, not the gcc-14 this stack uses (`icpx -v` prints +`Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/15`). +`packages_oneapi.yaml` pins them back to gcc 14 with compiler `flags:` +(`--gcc-install-dir=.../14` for C/C++, `-gcc-name`/`-gxx-name` for ifx), the +same way acorn and wcoss2 pin theirs. + +#### Setup OneAPI Modules + +```bash +# Create all modulefiles. +sudo /opt/intel/oneapi/modulefiles-setup.sh --output-dir=/opt/intel/oneapi/modulefiles +module use /opt/intel/oneapi/modulefiles + +# Add the oneapi module files to lmod init (z01 sorts after the apt lmod.sh). +echo 'module use /opt/intel/oneapi/modulefiles' | sudo tee -a /etc/profile.d/z01_lmod.sh + +# Create combined module file. Note that the compiler modulefile has a "tcm" +# prerequisite; omitting it fails the load with "Cannot load module +# compiler/2026.1.1. At least one of these module(s) must be loaded: tcm". +sudo mkdir -p /opt/intel/oneapi/modulefiles/intel-oneapi-full-env/ +sudo tee /opt/intel/oneapi/modulefiles/intel-oneapi-full-env/2026.1.1 > /dev/null << 'EOF' +#%Module1.0 +## +## intel-oneapi-full-env/2026.1.1 +## Intel oneAPI full module environment + +proc ModulesHelp { } { + puts stderr "intel-oneapi-full-env defines the entire module set used for spack-stack intel builds" +} +module-whatis "intel-oneapi-full-env defines the entire module set used for spack-stack intel builds" +module load umf/1.1.0 +module load tcm/1.5 +module load tbb/2023.1 +module load compiler-rt/2026.1.1 +module load compiler/2026.1.1 +module load mkl/2026.1 +module load compiler-intel-llvm/2026.1.1 +EOF +``` + +#### Install Intel OneAPI Spack-Stack Environment + +The committed `packages_oneapi.yaml` is complete. Create the environment +straight from the site; don't re-run `spack external find` or +`spack compiler find` against it. Run everything in a **login shell with no +oneAPI modules loaded** (see "The module-load trap" below). Spack loads the +compiler's modules itself, even during concretization, so the oneAPI +modulefiles must be on `MODULEPATH` via `/etc/profile.d/z01_lmod.sh`. + +```bash +module purge +umask 0022 +cd /opt/spack-stack +source setup.sh + +spack stack create env --site aws-ubuntu --template unified-dev --name unified-oneapi --compiler oneapi +cd envs/unified-oneapi +spack env activate -p . + +spack concretize --fresh 2>&1 | tee log.concretize +${SPACK_STACK_DIR}/util/show_duplicate_packages.py -i fms -i crtm -i crtm-fix -i esmf -i mapl -i py-cython -i py-versioneer +spack stack check-preferred-compiler +spack install --fail-fast -j 8 2>&1 | tee log.install + +spack module lmod refresh -y --delete-tree +spack stack setup-meta-modules + +echo 'module use /opt/spack-stack/envs/unified-oneapi/modules/Core' | sudo tee -a /etc/profile.d/z01_lmod.sh +``` + +How `packages_oneapi.yaml` relates to the 24.04 version (check these when +moving to a new LTS or oneAPI release): + +* `intel-oneapi-compilers` external: the 2026.1.1 compilers, `+fix_rt_linkage` + (common requires it, PR #2150), the module chain + `umf -> tcm -> tbb -> compiler-rt -> compiler`, and the gcc-14 `flags:` + above. To regenerate it, `module load intel-oneapi-full-env/2026.1.1` and run + `spack compiler find` in a scratch env, then copy the entry and `module purge`. +* `gcc` external: gcc@14.3.0 using the `-14` binaries, as in `packages_gcc.yaml`. + common/packages_oneapi.yaml builds a handful of packages (cmake, rust, py-numpy, ...) with gcc. +* MPI is `intel-oneapi-mpi@2021.18` (`mpi: require:`, openmpi/mpich not + buildable). MKL and TBB are externals, and MKL deliberately has no `modules:`. +* Dropped `all: prefer: ['%oneapi']`. common/packages_oneapi.yaml already + prefers oneAPI per language (c/cxx/fortran), and the `all:` form makes spack + rebuild system externals. +* New for 26.04, to avoid duplicates: `py-dask@2024.12.1` (otherwise + py-setuptools-scm splits 8/9 and cascades) and `met +graphics +shared-intel` + (otherwise one met concretizes `~graphics`). met's `+lidar2nc +modis` stay + off, as in the gcc env (hdf-eos2 pin vs gcc 14). +* The shared `packages.yaml` (externals, jedi-python-env `+bufrquery`, + myst-parser/sphinx) applies to both compilers. + +#### The module-load trap + +Spack loads an external's `modules:` itself and treats a load that does not change +`LOADEDMODULES` as a failure. So any oneAPI module already loaded in your shell +makes `spack install` die with a misleading `ModuleLoadError` partway through. +Purge before installing, and let spack do the loading. + +For the same reason no two externals may list the same module. That is why +`intel-oneapi-mkl` above has no `modules:`: it would load before the compilers +entry and miss its `tbb`/`compiler-rt` prereqs, but listing those on mkl collides +with the compilers entry. It needs neither -- the recipe sets `MKLROOT` from +`prefix`. + +
+ +## Test Installation + +
+GCC + +```bash +# Example given for building jedi-bundle +module use /opt/spack-stack/envs/unified-gcc/modules/Core +module load stack-gcc/14.3.0 +module load stack-openmpi/5.0.10 +module load base-env +module load jedi-mpas-env +module load jedi-fv3-env +module load ewok-env +module load sp + +mkdir ~/jedi +cd ~/jedi +git clone https://github.com/JCSDA-internal/jedi-bundle.git +cd jedi-bundle +mkdir build && cd build +ecbuild ../ +make update +make -j10 +ctest +``` + +
+ +
+Intel OneAPI + +```bash +# Build jedi-bundle with oneapi +# stack-intel-oneapi-compilers exports CFLAGS/CXXFLAGS/FFLAGS that pin icx/icpx/ifx +# to gcc 14 (see packages_oneapi.yaml). Keep them: if you override them, the +# compilers fall back to the system gcc 15. +# ifx puts large temporary arrays on the stack. With the default 8 MB limit, the +# saber GSI and dirac_multiscale tests segfault. Raise the limit before running: +ulimit -s unlimited +module use /opt/spack-stack/envs/unified-oneapi/modules/Core +module load stack-intel-oneapi-compilers/2026.1.1 +module load stack-intel-oneapi-mpi/2021.18 +module load base-env +module load jedi-mpas-env +module load jedi-fv3-env +module load ewok-env +module load sp + +mkdir ~/jedi +cd ~/jedi +git clone https://github.com/JCSDA-internal/jedi-bundle.git +cd jedi-bundle +mkdir build && cd build +ecbuild ../ +make update +make -j10 2>&1 | tee log.make +ctest +``` + +
+ +The installation and configuration is now complete for the instance. diff --git a/configs/sites/tier1/aws-ubuntu/config.yaml b/configs/sites/tier1/aws-ubuntu/config.yaml new file mode 100644 index 0000000000..b372c83669 --- /dev/null +++ b/configs/sites/tier1/aws-ubuntu/config.yaml @@ -0,0 +1,7 @@ +config: + build_jobs: 8 + + # Build stage and caches use the common defaults under + # ${SPACK_STACK_DIR}/cache on the root disk. Don't point them at /tmp: on + # Ubuntu 26.04 /tmp is a RAM-backed tmpfs (half of RAM, with per-user quotas), + # and a unified-env build fills it ("Disk quota exceeded"). diff --git a/configs/sites/tier2/aws-ubuntu2404/modules.yaml b/configs/sites/tier1/aws-ubuntu/modules.yaml similarity index 100% rename from configs/sites/tier2/aws-ubuntu2404/modules.yaml rename to configs/sites/tier1/aws-ubuntu/modules.yaml diff --git a/configs/sites/tier1/aws-ubuntu/packages.yaml b/configs/sites/tier1/aws-ubuntu/packages.yaml new file mode 100644 index 0000000000..22ec66785f --- /dev/null +++ b/configs/sites/tier1/aws-ubuntu/packages.yaml @@ -0,0 +1,121 @@ +packages: + # Package constraints. + ewok-env: + require: + - +ecflow + # Soft preference, as on other tier1 sites. With gcc 14, +lidar2nc and +modis + # are dropped: they need hdf-eos2, and common pins hdf-eos2@2.20v1.00, which + # conflicts with %gcc@14: (3.0+ is required). + met: + variants: +python +grib2 +graphics +lidar2nc +modis + py-netcdf4: + require: + - "@1.7.2" + jedi-base-env: + require: [+fftw, +hdf4] + # jedi-ufs-env needs +bufrquery; unconstrained, the root splits in two. + jedi-python-env: + require: [+bufrquery] + # Unconstrained, jedi-tools-env falls back to py-myst-parser@1/py-sphinx@6, + # which cap py-attrs@:21 and py-docutils@:0.19 and split py-attrs, py-eccodes, + # py-rasterio, jedi-python-env and awscli-v2. common/packages_oneapi.yaml + # already requires py-sphinx@9: for the same reason. + py-myst-parser: + require: ['@5:'] + py-sphinx: + require: ['@9:'] + fontconfig: + variants: +pic + pixman: + variants: +pic + cairo: + variants: +pic + + # System packages (Ubuntu 26.04). Derived with `spack external find` + # excluding cmake, curl, openssl, openssh, python and zlib (the multiarch + # libdir breaks pmix's zlib detection). coreutils (uutils) and binutils + # (2.46, no gold) aren't detected and are left for spack to build if needed. + autoconf: + externals: + - spec: autoconf@2.72 + prefix: /usr + automake: + externals: + - spec: automake@1.18.1 + prefix: /usr + diffutils: + externals: + - spec: diffutils@3.12 + prefix: /usr + findutils: + externals: + - spec: findutils@4.10.0 + prefix: /usr + flex: + externals: + - spec: flex@2.6.4+lex + prefix: /usr + gawk: + externals: + - spec: gawk@5.3.2 + prefix: /usr + gettext: + externals: + - spec: gettext@0.23.2 + prefix: /usr + git: + externals: + - spec: git@2.53.0~tcltk + prefix: /usr + git-lfs: + externals: + - spec: git-lfs@3.7.1 + prefix: /usr + gmake: + externals: + - spec: gmake@4.4.1 + prefix: /usr + grep: + externals: + - spec: grep@3.12 + prefix: /usr + groff: + externals: + - spec: groff@1.23.0 + prefix: /usr + libtool: + externals: + - spec: libtool@2.5.4 + prefix: /usr + m4: + externals: + - spec: m4@1.4.21 + prefix: /usr + perl: + externals: + - spec: perl@5.40.1~cpanm+opcode+open+shared+threads + prefix: /usr + pkgconf: + externals: + - spec: pkgconf@2.5.1 + prefix: /usr + sed: + externals: + - spec: sed@4.9 + prefix: /usr + tar: + buildable: false + externals: + - spec: tar@1.35 + prefix: /usr + wget: + buildable: false + externals: + - spec: wget@1.25.0 + prefix: /usr + # Not auto-detected (qmake is a qtchooser shim); apt qtbase5-dev. common requires qt@5. + qt: + buildable: false + externals: + - spec: qt@5.15.18 + prefix: /usr diff --git a/configs/sites/tier1/aws-ubuntu/packages_gcc.yaml b/configs/sites/tier1/aws-ubuntu/packages_gcc.yaml new file mode 100644 index 0000000000..d1638e17a4 --- /dev/null +++ b/configs/sites/tier1/aws-ubuntu/packages_gcc.yaml @@ -0,0 +1,13 @@ +packages: + gcc: + buildable: false + externals: + - spec: gcc@14.3.0 languages:='c,c++,fortran' + prefix: /usr + extra_attributes: + compilers: + c: /usr/bin/gcc-14 + cxx: /usr/bin/g++-14 + fortran: /usr/bin/gfortran-14 + mpi: + require: ['openmpi@5.0.10'] diff --git a/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml b/configs/sites/tier1/aws-ubuntu/packages_oneapi.yaml similarity index 68% rename from configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml rename to configs/sites/tier1/aws-ubuntu/packages_oneapi.yaml index d56b47ec40..6c2018614f 100644 --- a/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml +++ b/configs/sites/tier1/aws-ubuntu/packages_oneapi.yaml @@ -1,9 +1,10 @@ packages: # Compilers. + # Language preferences for oneAPI come from common/packages_oneapi.yaml. Don't + # add "all: prefer: ['%oneapi']": it acts as a dependency constraint and makes + # spack rebuild system externals. all: - prefer: - - '%oneapi' conflict: - '%c=oneapi %fortran=gcc' - '%c,cxx=oneapi %fortran=gcc' @@ -13,8 +14,6 @@ packages: - '%fortran=oneapi %c,cxx=gcc' - '%fortran=gcc %c,cxx=oneapi' - '%fortran=gcc %c=oneapi' - providers: - mpi:: [intel-oneapi-mpi@2021.18] intel-oneapi-compilers: buildable: false @@ -33,6 +32,13 @@ packages: fortran: /opt/intel/oneapi/compiler/2026.1/bin/ifx c: /opt/intel/oneapi/compiler/2026.1/bin/icx cxx: /opt/intel/oneapi/compiler/2026.1/bin/icpx + # Ubuntu 26.04's default gcc is 15. Left alone, icx/icpx pick the newest + # installed GCC for libstdc++ headers and libs, and ifx links its + # runtime. Pin them to gcc 14 so they match the gcc env. + flags: + cflags: --gcc-install-dir=/usr/lib/gcc/x86_64-linux-gnu/14 + cxxflags: --gcc-install-dir=/usr/lib/gcc/x86_64-linux-gnu/14 + fflags: -gcc-name=/usr/bin/gcc-14 -gxx-name=/usr/bin/g++-14 openmpi: buildable: false mpich: @@ -43,13 +49,13 @@ packages: - intel-oneapi-mpi@2021.18 gcc: externals: - - spec: gcc@13.3.0 languages:='c,c++,fortran' + - spec: gcc@14.3.0 languages:='c,c++,fortran' prefix: /usr extra_attributes: compilers: - c: /usr/bin/gcc - cxx: /usr/bin/g++ - fortran: /usr/bin/gfortran + c: /usr/bin/gcc-14 + cxx: /usr/bin/g++-14 + fortran: /usr/bin/gfortran-14 buildable: false intel-oneapi-mkl: buildable: false @@ -83,6 +89,15 @@ packages: - tbb/2023.1 # Package constraints. + # Avoid duplicates. Unpinned, gmao-swell-env and py-pyresample pull two + # py-dask versions, which splits py-setuptools-scm (8 vs 9) and cascades into + # py-netcdf4, py-xarray, py-zarr and jedi-python-env. The gcc env settles on + # 2024.12.1 without a pin. + py-dask: + require: ['@2024.12.1'] + # Unconstrained, one met concretizes ~graphics. Keep common's +shared-intel. + met: + require: ['+graphics +shared-intel'] jedi-base-env: require: [+fftw, +hdf4] jedi-python-env: diff --git a/configs/sites/tier2/aws-ubuntu2404/README.md b/configs/sites/tier2/aws-ubuntu2404/README.md deleted file mode 100644 index c5527c8bb0..0000000000 --- a/configs/sites/tier2/aws-ubuntu2404/README.md +++ /dev/null @@ -1,463 +0,0 @@ -## spack-stack AMI (Ubuntu 24.04) - -This document is to go over the the running and usage of this specific AMI for Ubuntu 24.04 LTS. This image has two environments: gnu (gcc-13.3.0), and intel (intel-oneapi 2026.1.1). You can use either one of these environments for development purposes. - -### Using the Snapshot - -Here is an example `aws cli` command-line to run a pre-built snapshot with your designated key-pair. - -```bash -aws ec2 run-instances \ - --image-id "ami-0ea3c35c5c3284d82" --instance-type "m6i.4xlarge" \ - --key-name YOUR-KEYPAIR \ - --block-device-mappings '{"DeviceName":"/dev/sda1","Ebs":{"Encrypted":false,"DeleteOnTermination":true,"Iops":3000,"SnapshotId":"snap-05fb00e35af5550e7","VolumeSize":150,"VolumeType":"gp3","Throughput":125}}' \ - --network-interfaces '{"SubnetId":"subnet-072fb62ff85b32a7a","AssociatePublicIpAddress":true,"DeviceIndex":0,"Groups":["sg-0091fa8e748fbe355"]}' \ - --tag-specifications '{"ResourceType":"instance","Tags":[{"Key":"Name","Value":"ubuntu2404-spack-stack-1.9-gcc-oneapi"}]}' \ - --metadata-options '{"HttpEndpoint":"enabled","HttpPutResponseHopLimit":2,"HttpTokens":"required"}' \ - --private-dns-name-options '{"HostnameType":"ip-name","EnableResourceNameDnsARecord":false,"EnableResourceNameDnsAAAARecord":false}' \ - --count 1 -``` - -## Using this Site Config - -JCSDA publishes a fully configured and built installation of spack stack derived -from this config as an AWS Snapshot. The easiest way to use this -configuration of spack stack is to launch a VM using that AMI. The instructions -below are included for maintainance of the history of this site config and -their possible relevance to debugging issues should they arise. - -### Base Instance - -This AMI was built on an instance with these properties: - -* AMI Name: ubuntu/images/hvm-ssd-gp3/ubuntu-noble-24.04-amd64-server-20240927 -* AMI ID: ami-0ea3c35c5c3284d82 -* Instance m6i.4xlarge (uses Intel Xeon processor) -* 150GB of gp3 storage as / - -## Pre-requisites (For All Compilers) - -### Installing Packages - -```bash -# Update system software and start a tmux session. -sudo su - -apt update -apt upgrade -y - -# Build tools -apt install -y build-essential g++-13 gcc-13 gfortran-13 make cmake automake autoconf apt-utils - -#Install other requirements. -apt install -y cpp-13 libgomp1 git git-lfs autopoint mysql-server libmysqlclient-dev qtbase5-dev qt5-qmake libqt5svg5-dev qt5dxcb-plugin wget curl file tcl-dev gnupg2 iproute2 locales unzip less bzip2 gettext libtree pkg-config libcurl4-openssl-dev mysql-server libtool flex llvm-14 - -# Set llvm config. -update-alternatives --install /usr/bin/llvm-config llvm-config /usr/bin/llvm-config-14 10 - -# Editors -apt install -y vim nano - -# Python develop. -apt install -y python3 python3-pip python3-setuptools - -# Configure git credential caching and git lfs for the rocky user and root. -git config --global credential.helper 'cache --timeout=3600' -git lfs install -# Change the gcc, g++, and gfortran version to 13 and give it the highest priority -update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-13 100 -update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-13 100 -update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-13 100 - -exit # Exit root access -``` - -**Important**: Running the `update-alternatives` changes defaults, and if you need to use a different version of gcc/g++/gfortran you can run: `update-alternatives --config [gcc|g++|gfortran]` and select the version you want that is installed. - -### Install Lmod - -```bash -# Install lua/lmod manually because apt only has older versions -# that are not compatible with the modern lua modules spack produces -# https://lmod.readthedocs.io/en/latest/030_installing.html#install-lua-x-y-z-tar-gz -sudo su - -mkdir -p /opt/lua/5.1.4.9/src && cd $_ -wget https://sourceforge.net/projects/lmod/files/lua-5.1.4.9.tar.bz2 -tar -xvf lua-5.1.4.9.tar.bz2 -cd lua-5.1.4.9 -./configure --prefix=/opt/lua/5.1.4.9 2>&1 | tee log.config -make VERBOSE=1 2>&1 | tee log.make -make install 2>&1 | tee log.install - -cat << 'EOF' >> /etc/profile.d/02-lua.sh -# Set environment variables for lua -export PATH="/opt/lua/5.1.4.9/bin:$PATH" -export LD_LIBRARY_PATH="/opt/lua/5.1.4.9/lib:$LD_LIBRARY_PATH" -export CPATH="/opt/lua/5.1.4.9/include:$CPATH" -export MANPATH="/opt/lua/5.1.4.9/man:$MANPATH" -EOF - -source /etc/profile.d/02-lua.sh -mkdir -p /opt/lmod/8.7/src -cd /opt/lmod/8.7/src -wget https://sourceforge.net/projects/lmod/files/Lmod-8.7.tar.bz2 -tar -xvf Lmod-8.7.tar.bz2 -cd Lmod-8.7 -# Note the weird prefix, lmod installs in PREFIX/lmod/X.Y automatically -./configure --prefix=/opt/ \ - --with-lmodConfigDir=/opt/lmod/8.7/config \ - 2>&1 | tee log.config -make install 2>&1 | tee log.install -ln -sf /opt/lmod/lmod/init/profile /etc/profile.d/z00_lmod.sh -ln -sf /opt/lmod/lmod/init/cshrc /etc/profile.d/z00_lmod.csh -ln -sf /opt/lmod/lmod/init/profile.fish /etc/profile.d/z00_lmod.fish - -# Log out completely, ssh back into the instance and check if lua modules work -exit -exit -``` - -### Clone `spack-stack` - -```bash -cd /opt -sudo git clone -b release/2.1 --depth 1 --recursive https://github.com/jcsda/spack-stack.git -``` - -## Install Spack-Stack Steps by Compiler - -
-GCC Installation - -```bash -sudo su - - -cd /opt/spack-stack -source setup.sh -# Swap default module type for default linux. -sed -i 's/tcl/lmod/g' configs/sites/tier2/linux.default/modules.yaml -spack stack create env --site linux.default --template unified-dev --name unified-gcc --compiler gcc -cd envs/unified-gcc -spack env activate -p . -unset SPACK_DISABLE_LOCAL_CONFIG -export SPACK_SYSTEM_CONFIG_PATH="$(pwd)/site" -spack external find --scope system \ - --exclude cmake \ - --exclude curl --exclude openssl \ - --exclude openssh --exclude python -spack compiler find --scope system -export SPACK_DISABLE_LOCAL_CONFIG=true -unset SPACK_SYSTEM_CONFIG_PATH -# ACTION: Edit the generated compiler config (site/compilers.yaml and/or the -# compiler entries in site/packages.yaml) with the following. -# 1) Keep a single gcc@13.3.0 spec (the system compiler installed above); -# delete any empty or duplicate gcc specs. Redundant/empty specs cause -# cryptic build errors later. -# 2) Delete or comment clang/llvm refs. - -# Continue configuration. -spack config add "packages:all:prefer:['%gcc']" -spack config add "packages:all:providers:mpi:[openmpi@5.0.8]" -spack config add "packages:fontconfig:variants:+pic" -spack config add "packages:pixman:variants:+pic" -spack config add "packages:cairo:variants:+pic" -spack config add "packages:met:variants:+python +grib2 +graphics +lidar2nc +modis" -spack config add "packages:ewok-env:require:[+ecflow]" -# Pin py-netcdf4 -spack config add "packages:py-netcdf4:require:[\"@1.7.2\"]" - -# Concretize and install -spack concretize 2>&1 | tee log.concretize -${SPACK_STACK_DIR}/util/show_duplicate_packages.py -i fms -i crtm -i crtm-fix -i esmf -i mapl -i py-cython -spack install --fail-fast -j 14 2>&1 | tee log.install - -# Install modules -spack module lmod refresh -spack stack setup-meta-modules - -# Add a number of default module locations to the lmod startup script. -cat << 'EOF' >> /etc/profile.d/z01_lmod.sh -module use /opt/spack-stack/envs/unified-gcc/install/modulefiles/Core -EOF -``` - -
- -
-Intel OneAPI Installation - -#### Install Intel OneAPI Compiler - -```bash -sudo su - - -wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null -echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | tee /etc/apt/sources.list.d/oneAPI.list -apt update -apt install intel-oneapi-compiler-dpcpp-cpp-2026.1 intel-oneapi-compiler-fortran-2026.1 intel-oneapi-mpi-devel-2021.18 intel-oneapi-tbb-devel-2023.1 intel-oneapi-mkl-devel-2026.1 -y - -exit -``` - -#### Setup OneAPI Modules - -```bash -sudo su - -# Create all modulefiles. -/opt/intel/oneapi/modulefiles-setup.sh --output-dir=/opt/intel/oneapi/modulefiles -module use /opt/intel/oneapi/modulefiles - -# Add the oneapi module files to lmod init (confirm that this file does not exist) -cat << 'EOF' >> /etc/profile.d/z01_lmod.sh -module use /opt/intel/oneapi/modulefiles -EOF - -# Create combined module file. Note that the compiler modulefile has a "tcm" -# prerequisite; omitting it fails the load with "Cannot load module -# compiler/2026.1.1. At least one of these module(s) must be loaded: tcm". -mkdir /opt/intel/oneapi/modulefiles/intel-oneapi-full-env/ -cat << 'EOF' >> /opt/intel/oneapi/modulefiles/intel-oneapi-full-env/2026.1.1 -#%Module1.0 -## -## intel-oneapi-full-env/2026.1.1 -## Intel oneAPI full module environment - -proc ModulesHelp { } { - puts stderr "intel-oneapi-full-env defines the entire module set used for spack-stack intel builds" -} -module-whatis "intel-oneapi-full-env defines the entire module set used for spack-stack intel builds" -module load umf/1.1.0 -module load tcm/1.5 -module load tbb/2023.1 -module load compiler-rt/2026.1.1 -module load compiler/2026.1.1 -module load mkl/2026.1 -module load compiler-intel-llvm/2026.1.1 -EOF -``` - -#### Install Intel OneAPI Spack-Stack Environment - -The steps below are how this site config was generated. Note that the oneAPI -modules must **not** be loaded during `spack install` -- see "The module-load -trap" at the end of this section. - -```bash -sudo su - - -module load intel-oneapi-full-env/2026.1.1 -export FC=ifx -export CXX=icpx -export CC=icx - -cd /opt/spack-stack -source ./setup.sh - -spack stack create env --site linux.default --template unified-dev --name unified-oneapi --compiler oneapi -cd envs/unified-oneapi -spack env activate -p . - - -# Find external packages for the site config. -unset SPACK_DISABLE_LOCAL_CONFIG -export SPACK_SYSTEM_CONFIG_PATH="$(pwd)/site" -spack external find --scope system --exclude bison --exclude openssl --exclude python --exclude gettext --exclude m4 --exclude cmake --exclude curl -spack external find --scope system wget -spack external find --scope system grep - -# Here we are doing some manual configuration to address the -# following tricky situations -# - External find doesn't work well for pre-installed intel-oneapi-mpi -# and we are using an external module load for this. -# - Disable "buildable" on all intel modules. -cat << 'EOF' >> ${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml - intel-oneapi-runtime: - buildable: false - externals: - - spec: intel-oneapi-runtime@2026.1.1 - prefix: /opt/intel/oneapi - modules: - - compiler-rt/2026.1.1 - intel-oneapi-mkl: - buildable: false - externals: - # No "modules:" here on purpose - see "The module-load trap" below. - - spec: intel-oneapi-mkl@2026.1 - prefix: /opt/intel/oneapi - intel-oneapi-mpi: - buildable: false - externals: - - spec: intel-oneapi-mpi@2021.18 - prefix: /opt/intel/oneapi - modules: - - mpi/2021.18 - intel-oneapi-tbb: - buildable: false - externals: - - spec: intel-oneapi-tbb@2023.1 - prefix: /opt/intel/oneapi - modules: - - tbb/2023.1 -EOF - -spack compiler find --scope system - -# Edit site/packages.yaml -pico ${PWD}/site/packages.yaml -# Your intel compiler should look something like this below -# and any non-preferred GCC toolchains should be removed. Note -# that GCC should reference languages c, c++, but not fortran. -# -# NOTE! watch out for redundant empty gcc specs which will cause -# unintelligible build errors later. There should only be one spec -# under "externals:". -# -# intel-oneapi-compilers: -# buildable: false -# externals: -# - spec: intel-oneapi-compilers@2026.1.1 +fix_rt_linkage -# prefix: /opt/intel/oneapi -# modules: -# - umf/1.1.0 -# - tcm/1.5 -# - tbb/2023.1 -# - compiler-rt/2026.1.1 -# - compiler/2026.1.1 -# extra_attributes: -# compilers: -# c: /opt/intel/oneapi/compiler/2026.1/bin/icx -# fortran: /opt/intel/oneapi/compiler/2026.1/bin/ifx -# cxx: /opt/intel/oneapi/compiler/2026.1/bin/icpx -# gcc: -# buildable: false -# externals: -# - spec: gcc@13.3.0 languages:='c,c++,fortran' -# .... - -# Edit the spack.yaml to include these clauses. Note this must happen before -# SPACK_SYSTEM_CONFIG_PATH is unset, or it writes to /packages.yaml. -cat << 'EOF' >> ${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml - all: - prefer: - - '%oneapi' - conflict: - - '%c=oneapi %fortran=gcc' - - '%c,cxx=oneapi %fortran=gcc' - - '%c=gcc %fortran=oneapi' - - '%c,cxx=gcc %fortran=oneapi' - - '%fortran=oneapi %c=gcc' - - '%fortran=oneapi %c,cxx=gcc' - - '%fortran=gcc %c,cxx=oneapi' - - '%fortran=gcc %c=oneapi' - providers: - mpi: [intel-oneapi-mpi@2021.18] - met: - variants: +python +grib2 +graphics +lidar2nc +modis - openmpi: - buildable: false - mpich: - buildable: false - py-scipy: - require: - #- '%c,cxx,fortran=gcc' - - 'cxxflags="-O1"' - jedi-base-env: - require: - - +fftw - - +hdf4 - jedi-python-env: - require: - - ~bufrquery - py-pyyaml: - require: - - +libyaml -EOF - -export SPACK_DISABLE_LOCAL_CONFIG=true -unset SPACK_SYSTEM_CONFIG_PATH - -# Purge the oneAPI modules before installing - see the trap below. -module purge - -spack concretize 2>&1 | tee log.concretize -${SPACK_STACK_DIR}/util/show_duplicate_packages.py -spack install --fail-fast -j 12 2>&1 | tee log.install -spack module lmod refresh && \ -spack stack setup-meta-modules - -cat << 'EOF' >> /etc/profile.d/z01_lmod.sh -module use /opt/spack-stack/envs/unified-oneapi/install/modulefiles/Core -EOF -``` - -#### The module-load trap - -Spack loads an external's `modules:` itself and treats a load that does not change -`LOADEDMODULES` as a failure. So any oneAPI module already loaded in your shell -makes `spack install` die with a misleading `ModuleLoadError` partway through. -Purge before installing, and let spack do the loading. - -For the same reason no two externals may list the same module. That is why -`intel-oneapi-mkl` above has no `modules:`: it would load before the compilers -entry and miss its `tbb`/`compiler-rt` prereqs, but listing those on mkl collides -with the compilers entry. It needs neither -- the recipe sets `MKLROOT` from -`prefix`. - -
- -## Test Installation - -
-GCC - -```bash -# Example given for building jedi-bundle -module use /opt/spack-stack/envs/unified-gcc/install/modulefiles/Core -module load stack-gcc/13.3.0 -module load stack-openmpi/5.0.8 -module load base-env -module load jedi-mpas-env -module load jedi-fv3-env -module load ewok-env -module load sp - -mkdir ~/jedi -cd ~/jedi -git clone https://github.com/JCSDA-internal/jedi-bundle.git -cd jedi-bundle -mkdir build && cd build -ecbuild ../ -make update -make -j10 -ctest -``` - -
- -
-Intel OneAPI - -```bash -# Build jedi-bundle with oneapi -module use /opt/spack-stack/envs/unified-oneapi/install/modulefiles/Core -module load stack-intel-oneapi-compilers/2026.1.1 -module load stack-intel-oneapi-mpi/2021.18 -module load base-env -module load jedi-mpas-env -module load jedi-fv3-env -module load ewok-env -module load sp - -mkdir /opt/jedi -cd /opt/jedi -git clone https://github.com/JCSDA-internal/jedi-bundle.git -cd jedi-bundle -mkdir build && cd build -ecbuild ../ -make update -make -j10 2>&1 | tee log.make -ctest -``` - -
- -The installation and configuration is now complete for the instance. diff --git a/configs/sites/tier2/aws-ubuntu2404/config.yaml b/configs/sites/tier2/aws-ubuntu2404/config.yaml deleted file mode 100644 index cf54e6360f..0000000000 --- a/configs/sites/tier2/aws-ubuntu2404/config.yaml +++ /dev/null @@ -1,9 +0,0 @@ -config: - build_jobs: 8 - - # Overrides for spack build and staging areas to speed up builds - # by using a local directory instead of the EFS shared filesystem - build_stage: /tmp/spack-stack/cache/build_stage - test_stage: /tmp/spack-stack/cache/test_stage - source_cache: /tmp/spack-stack/cache/source_cache - misc_cache: /tmp/spack-stack/cache/misc_cache diff --git a/configs/sites/tier2/aws-ubuntu2404/packages.yaml b/configs/sites/tier2/aws-ubuntu2404/packages.yaml deleted file mode 100644 index 8ee1d27dd4..0000000000 --- a/configs/sites/tier2/aws-ubuntu2404/packages.yaml +++ /dev/null @@ -1,117 +0,0 @@ -packages: - # Package constraints. - ewok-env: - require: - - +ecflow - met: - require: [+python, +grib2, +graphics, +lidar2nc, +modis] - py-awscrt: - require: - - "@0.19.19" - py-botocore: - require: - - "@1.34.162" - py-boto3: - require: - - "@1.34.162" - py-netcdf4: - require: - - "@1.7.2" - jedi-base-env: - require: [+fftw, +hdf4] - jedi-python-env: - require: [+bufrquery] - - # System packages. - autoconf: - externals: - - spec: autoconf@2.71 - prefix: /usr - automake: - externals: - - spec: automake@1.16.5 - prefix: /usr - binutils: - externals: - - spec: binutils@2.42+gold~headers - prefix: /usr - coreutils: - externals: - - spec: coreutils@9.4 - prefix: /usr - diffutils: - externals: - - spec: diffutils@3.10 - prefix: /usr - findutils: - externals: - - spec: findutils@4.9.0 - prefix: /usr - flex: - externals: - - spec: flex@2.6.4+lex - prefix: /usr - gawk: - externals: - - spec: gawk@5.2.1 - prefix: /usr - gettext: - externals: - - spec: gettext@0.21 - prefix: /usr - git: - externals: - - spec: git@2.43.0~tcltk - prefix: /usr - git-lfs: - externals: - - spec: git-lfs@3.4.1 - prefix: /usr - grep: - externals: - - spec: grep@3.11 - prefix: /usr - gmake: - externals: - - spec: gmake@4.3 - prefix: /usr - groff: - externals: - - spec: groff@1.23.0 - prefix: /usr - libtool: - externals: - - spec: libtool@2.4.7 - prefix: /usr - m4: - externals: - - spec: m4@1.4.19 - prefix: /usr - perl: - externals: - - spec: perl@5.38.2~cpanm+opcode+open+shared+threads - prefix: /usr - pkgconf: - externals: - - spec: pkgconf@1.8.1 - prefix: /usr - qt:: - buildable: false - externals: - - spec: qt@5.15.3 - prefix: /usr - version: [5.15.3] - sed: - externals: - - spec: sed@4.9 - prefix: /usr - tar:: - buildable: false - externals: - - spec: tar@1.35 - prefix: /usr - wget:: - buildable: false - externals: - - spec: wget@1.21.4 - prefix: /usr diff --git a/configs/sites/tier2/aws-ubuntu2404/packages_gcc.yaml b/configs/sites/tier2/aws-ubuntu2404/packages_gcc.yaml deleted file mode 100644 index c0451c82d2..0000000000 --- a/configs/sites/tier2/aws-ubuntu2404/packages_gcc.yaml +++ /dev/null @@ -1,15 +0,0 @@ -packages: - gcc: - buildable: false - externals: - - spec: gcc@13.3.0 languages:='c,c++,fortran' - prefix: /usr - extra_attributes: - compilers: - c: /usr/bin/gcc - cxx: /usr/bin/g++ - fortran: /usr/bin/gfortran - gcc-runtime: - externals: - - spec: gcc-runtime@13.3.0 - prefix: /usr diff --git a/configs/sites/tier2/ubuntu2404-nvhpc/packages.yaml b/configs/sites/tier2/ubuntu2404-nvhpc/packages.yaml index c4241e9caa..ff0c62809e 100644 --- a/configs/sites/tier2/ubuntu2404-nvhpc/packages.yaml +++ b/configs/sites/tier2/ubuntu2404-nvhpc/packages.yaml @@ -116,7 +116,7 @@ packages: pkg-config: buildable: False # No system python external: Ubuntu 24.04 ships 3.12 and common requires - # python@3.13, so spack builds it (as on aws-ubuntu2404). + # python@3.13, so spack builds it (the tier1 aws-ubuntu site also excludes it). sed: externals: - spec: sed@4.9