From a6502b290009664b326344cfc551c483719ea723 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 12:16:34 +0200 Subject: [PATCH 01/20] Upgrade to Ubuntu 26.04 --- Vagrantfile | 13 ++++++------- provisioning/install-fenics.sh | 5 +---- provisioning/install-precice.sh | 7 ++++--- provisioning/install-su2.sh | 27 +++++++++++++++++++++------ provisioning/install-training-fsi.sh | 2 +- 5 files changed, 33 insertions(+), 21 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 4960a2e..6427284 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -6,7 +6,7 @@ Vagrant.configure("2") do |config| # This allows us to create performance oriented images for Linux (libvirt) and Windows (hyperv). # However, it does not build: https://github.com/precice/vm/issues/83 # config.vm.box = "generic/ubuntu2004" - config.vm.box = "bento/ubuntu-24.04" + config.vm.box = "bento/ubuntu-26.04" # We don't want the box to automatically update every time it starts. # We can instead handle updates internally, without destroying the machine. @@ -18,9 +18,9 @@ Vagrant.configure("2") do |config| # Display the VirtualBox GUI when booting the machine vb.gui = true # Number of cores - vb.cpus = 2 + vb.cpus = 4 # Customize the amount of memory on the VM: - vb.memory = "2048" + vb.memory = "4096" # Video memory (the default may be too low for some applications) vb.customize ["modifyvm", :id, "--vram", "64"] # The default graphics controller is VboxSVGA. This seems to cause issues with auto-scaling. @@ -32,8 +32,8 @@ Vagrant.configure("2") do |config| config.vm.provider :libvirt do |lv| lv.forward_ssh_port = true lv.title = "preCICE-VM" - lv.cpus = 2 - lv.memory = 2048 + lv.cpus = 4 + lv.memory = 4096 end # Install a desktop environment and basic tools @@ -56,8 +56,7 @@ Vagrant.configure("2") do |config| # NOTE: In Ubuntu 24.04, building ASTE will succeed, but running the aste-turbine tutorial, for example, will break. # See the documentation: https://precice.org/tooling-aste.html#dependencies - # Disabling until the upgrade to Ubuntu 26.04 - # config.vm.provision "shell", path: "provisioning/install-aste.sh", privileged: false + config.vm.provision "shell", path: "provisioning/install-aste.sh", privileged: false # Install additional packages for training config.vm.provision "shell", path: "provisioning/install-training-python.sh", privileged: false diff --git a/provisioning/install-fenics.sh b/provisioning/install-fenics.sh index e4ec5e5..3d1e916 100755 --- a/provisioning/install-fenics.sh +++ b/provisioning/install-fenics.sh @@ -1,11 +1,8 @@ #!/usr/bin/env bash set -ex -# Install FEniCS from APT -sudo apt-get install -y software-properties-common -sudo add-apt-repository -y ppa:fenics-packages/fenics sudo apt-get -y update -sudo apt-get -y install --no-install-recommends fenics +sudo apt-get -y install fenics # Install the FEniCS-preCICE adapter from PIP # python -m venv ~/python-venvs/fenicsprecice diff --git a/provisioning/install-precice.sh b/provisioning/install-precice.sh index 434e5d0..a6bf9e2 100755 --- a/provisioning/install-precice.sh +++ b/provisioning/install-precice.sh @@ -13,6 +13,10 @@ fi ( cd precice git pull + + # Patch for Ubuntu 26.04, see https://github.com/precice/precice/commit/6a0be7aa64087f21740c566921e83e97e03e1067 + sed -i 's/libxml2/libxml2-dev/g' cmake/CPackConfig.cmake + mkdir -p build && cd build/ cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_SHARED_LIBS=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo -DPRECICE_RELEASE_WITH_DEBUG_LOG=ON -DBUILD_TESTING=OFF -Wno-dev .. make -j "$(nproc)" @@ -43,9 +47,6 @@ fi ( cd tutorials/quickstart/solid-cpp/ && cmake . && make ) -( - cd tutorials/heat-exchanger && ./download-meshes.sh -) sudo apt-get -y install gnuplot # needed for watchpoint scripts of tutorials diff --git a/provisioning/install-su2.sh b/provisioning/install-su2.sh index fd65b96..5700516 100755 --- a/provisioning/install-su2.sh +++ b/provisioning/install-su2.sh @@ -9,14 +9,12 @@ python -m pip install mpi4py setuptools # pyprecice is installed by the tutorial sudo apt-get -y install swig # Get SU2 7.5.1 from GitHub -wget --quiet https://github.com/su2code/SU2/archive/refs/tags/v7.5.1.tar.gz -tar -xzf v7.5.1.tar.gz -rm -fv v7.5.1.tar.gz +git clone --depth=1 --branch=v7.5.1 --recurse-submodules https://github.com/su2code/SU2.git # Add SU2 and the SU2 adapter to PATH and apply. # We first export to a separate script, so that we can load it here (non-interactive shell). { - echo "export SU2_HOME=\"\${HOME}/SU2-7.5.1\"" + echo "export SU2_HOME=\"\${HOME}/SU2\"" echo "export SU2_RUN=\"\${SU2_HOME}/SU2_CFD\"" echo "export PATH=\"\${SU2_RUN}/bin/:\${HOME}/su2-adapter/run/:\${PATH}\"" echo "export PYTHONPATH=\"\${SU2_RUN}/bin/:\${PYTHONPATH}\"" @@ -42,12 +40,29 @@ fi # Add a previously implied header (compatibility with Ubuntu 24.04) sed -i '1s/^/#include \n/' SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp + sed -i '1s/^/#include \n/' SU2_CFD/src/SU2_CFD.cpp - ./meson.py build -Denable-pywrapper=true --prefix="${SU2_RUN}" &&\ + # Replace pipes with shlex in Ninja configure (compatibility with Ubuntu 26.04 and Python >= 3.13) + # See https://github.com/ninja-build/ninja/commit/9cf13cd1ecb7ae649394f4133d121a01e191560b + sed -i 's/pipes/shlex/g' externals/ninja/configure.py + + # Disable CGNS with -Denable-cgns=false. Workaround for: + # default: FAILED: externals/cgns/libcgns.a.p/adf_ADF_internals.c.o + # default: cc -Iexternals/cgns/libcgns.a.p -Iexternals/cgns -I../externals/cgns -Iexternals/cgns/hdf5 -I../externals/cgns/hdf5 -I/usr/lib/x86_64-linux-gnu/openmpi/include -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -std=c99 -O3 -fPIC -Wno-unused-result -Wno-unused-parameter -Wno-unused-variable -Wno-unused-but-set-variable -Wno-sign-compare -Wno-error=unused-function -Wno-pedantic -Wno-error=stringop-truncation -Wno-stringop-truncation -Wno-error=absolute-value -Wno-error=class-memaccess -MD -MQ externals/cgns/libcgns.a.p/adf_ADF_internals.c.o -MF externals/cgns/libcgns.a.p/adf_ADF_internals.c.o.d -o externals/cgns/libcgns.a.p/adf_ADF_internals.c.o -c ../externals/cgns/adf/ADF_internals.c + # default: ../externals/cgns/adf/ADF_internals.c: In function ‘ADFI_open_file’: + # default: ../externals/cgns/adf/ADF_internals.c:194:17: error: implicit declaration of function ‘fileno’ [-Wimplicit-function-declaration] + # default: 194 | # define FILENO fileno + # default: | ^~~~~~ + # default: ../externals/cgns/adf/ADF_internals.c:5531:32: note: in expansion of macro ‘FILENO’ + # default: 5531 | f_ret = ftmp == NULL ? -1 : FILENO(ftmp); + # default: | ^~~~~~ + # + # Also set -Denable-tecio=false, as it is not needed, to save space. + ./meson.py build -Denable-pywrapper=true -Denable-cgns=false -Denable-tecio=false --prefix="${SU2_RUN}" &&\ ./ninja -C build install ) # Remove the libSU2Core.a library to save space (approx. 500MB) -rm -fv ~/SU2-7.5.1/SU2_CFD/obj/libSU2Core.a +rm -fv ~/SU2/SU2_CFD/obj/libSU2Core.a deactivate diff --git a/provisioning/install-training-fsi.sh b/provisioning/install-training-fsi.sh index 238e66d..ef2e72c 100755 --- a/provisioning/install-training-fsi.sh +++ b/provisioning/install-training-fsi.sh @@ -11,7 +11,7 @@ pipx install ccx2paraview # FreeCAD AppImage from https://www.freecad.org/downloads.php (~780MB) ( cd ~/Desktop - wget https://github.com/FreeCAD/FreeCAD/releases/download/1.1.1/FreeCAD_1.1.1-Linux-x86_64-py311.AppImage + wget --quiet https://github.com/FreeCAD/FreeCAD/releases/download/1.1.1/FreeCAD_1.1.1-Linux-x86_64-py311.AppImage mv FreeCAD_1.1.1-Linux-x86_64-py311.AppImage FreeCAD.AppImage chmod +x FreeCAD.AppImage ) \ No newline at end of file From 5ca6ed44de8f7353c0cae5a40c457a1ab25e9853 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 12:19:01 +0200 Subject: [PATCH 02/20] Update comments in install-su2.sh --- provisioning/install-su2.sh | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/provisioning/install-su2.sh b/provisioning/install-su2.sh index 5700516..b97b595 100755 --- a/provisioning/install-su2.sh +++ b/provisioning/install-su2.sh @@ -8,7 +8,7 @@ source ~/python-venvs/su2precice/bin/activate python -m pip install mpi4py setuptools # pyprecice is installed by the tutorials sudo apt-get -y install swig -# Get SU2 7.5.1 from GitHub +# Get SU2 from GitHub git clone --depth=1 --branch=v7.5.1 --recurse-submodules https://github.com/su2code/SU2.git # Add SU2 and the SU2 adapter to PATH and apply. @@ -46,18 +46,7 @@ fi # See https://github.com/ninja-build/ninja/commit/9cf13cd1ecb7ae649394f4133d121a01e191560b sed -i 's/pipes/shlex/g' externals/ninja/configure.py - # Disable CGNS with -Denable-cgns=false. Workaround for: - # default: FAILED: externals/cgns/libcgns.a.p/adf_ADF_internals.c.o - # default: cc -Iexternals/cgns/libcgns.a.p -Iexternals/cgns -I../externals/cgns -Iexternals/cgns/hdf5 -I../externals/cgns/hdf5 -I/usr/lib/x86_64-linux-gnu/openmpi/include -I/usr/lib/x86_64-linux-gnu/openmpi/include/openmpi -fdiagnostics-color=always -D_FILE_OFFSET_BITS=64 -std=c99 -O3 -fPIC -Wno-unused-result -Wno-unused-parameter -Wno-unused-variable -Wno-unused-but-set-variable -Wno-sign-compare -Wno-error=unused-function -Wno-pedantic -Wno-error=stringop-truncation -Wno-stringop-truncation -Wno-error=absolute-value -Wno-error=class-memaccess -MD -MQ externals/cgns/libcgns.a.p/adf_ADF_internals.c.o -MF externals/cgns/libcgns.a.p/adf_ADF_internals.c.o.d -o externals/cgns/libcgns.a.p/adf_ADF_internals.c.o -c ../externals/cgns/adf/ADF_internals.c - # default: ../externals/cgns/adf/ADF_internals.c: In function ‘ADFI_open_file’: - # default: ../externals/cgns/adf/ADF_internals.c:194:17: error: implicit declaration of function ‘fileno’ [-Wimplicit-function-declaration] - # default: 194 | # define FILENO fileno - # default: | ^~~~~~ - # default: ../externals/cgns/adf/ADF_internals.c:5531:32: note: in expansion of macro ‘FILENO’ - # default: 5531 | f_ret = ftmp == NULL ? -1 : FILENO(ftmp); - # default: | ^~~~~~ - # - # Also set -Denable-tecio=false, as it is not needed, to save space. + # Disable unnecessary dependencies to save space and to workaround an issue that CGNS does not build. ./meson.py build -Denable-pywrapper=true -Denable-cgns=false -Denable-tecio=false --prefix="${SU2_RUN}" &&\ ./ninja -C build install ) From 1b8c9732999e41ffbaad10be697eee477ed0f242 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 12:22:40 +0200 Subject: [PATCH 03/20] Refine comments --- Vagrantfile | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 6427284..ca69503 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -54,7 +54,7 @@ Vagrant.configure("2") do |config| config.vm.provision "shell", path: "provisioning/install-micro-manager.sh", privileged: false config.vm.provision "shell", path: "provisioning/install-paraview.sh", privileged: false - # NOTE: In Ubuntu 24.04, building ASTE will succeed, but running the aste-turbine tutorial, for example, will break. + # NOTE: On Ubuntu 24.04, building ASTE will succeed, but running the aste-turbine tutorial, for example, will break. # See the documentation: https://precice.org/tooling-aste.html#dependencies config.vm.provision "shell", path: "provisioning/install-aste.sh", privileged: false @@ -68,11 +68,10 @@ Vagrant.configure("2") do |config| config.vm.provision "shell", path: "provisioning/install-dune.sh", privileged: false config.vm.provision "shell", path: "provisioning/install-su2.sh", privileged: false - # Rust tutorials incompatible with cargo 1.75.0, shipped with Ubuntu 24.04 - # Error: The package requires the Cargo feature called `edition2024`, but that feature is not stabilized in this version of Cargo (1.75.0). - # config.vm.provision "shell", path: "provisioning/install-rust-bindings.sh", privileged: false + # NOTE: On Ubuntu 24.04, the Rust cargo installation is too old. + config.vm.provision "shell", path: "provisioning/install-rust-bindings.sh", privileged: false - # code_aster does not build on Ubuntu 22.04/24.04 due to multiple issues: https://github.com/precice/code_aster-adapter/issues/26 + # code_aster does not build on Ubuntu 22.04 or later due to multiple issues: https://github.com/precice/code_aster-adapter/issues/26 # config.vm.provision "shell", path: "provisioning/install-code_aster.sh", privileged: false # Post-installation steps From 0b271c0a5e9f144c5b034b0a96af04f9c35afdd9 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 18:46:07 +0200 Subject: [PATCH 04/20] Install file-roller (archive manager) --- provisioning/install-basics.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provisioning/install-basics.sh b/provisioning/install-basics.sh index 74d429c..43df04e 100755 --- a/provisioning/install-basics.sh +++ b/provisioning/install-basics.sh @@ -11,7 +11,7 @@ sudo apt-get upgrade -qy # Install the Xfce desktop environment and basic applications sudo apt-get install -y xubuntu-core -sudo apt-get install -y thunar xfce4-terminal terminator bash-completion tree atril firefox firefox-locale-en baobab catfish +sudo apt-get install -y thunar xfce4-terminal terminator bash-completion tree atril firefox firefox-locale-en baobab catfish file-roller sudo apt-get install -y python3-dev pipx python-is-python3 python3-venv python3-pip python3-pybind11 # Setup auto-login for the graphical session From 872a0a7a545624fb9a1f4114cda9c0b4712d978c Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 18:47:12 +0200 Subject: [PATCH 05/20] Patch dune-elastodynamics --- provisioning/install-dune.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/provisioning/install-dune.sh b/provisioning/install-dune.sh index 7dc6e35..c1dfbc4 100755 --- a/provisioning/install-dune.sh +++ b/provisioning/install-dune.sh @@ -51,6 +51,8 @@ fi ( cd dune-elastodynamics git pull + # Apply patch https://github.com/maxfirmbach/dune-elastodynamics/pull/2 + sed -i 's/VERSION 3.1/VERSION 3.13/g' CMakeLists.txt ) # Get the plain DUNE-preCICE adapter From c49995f0b078d3d1e84d8f1245b942378e4470c5 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 19:02:13 +0200 Subject: [PATCH 06/20] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1af6fee..03dd8da 100644 --- a/README.md +++ b/README.md @@ -51,9 +51,11 @@ This box is based on the [bento/ubuntu-24.04](https://github.com/chef/bento) bas - preCICE latest from the master branch (built in release-with-debug-info mode) - preCICE config visualizer with its GUI (PyPI, latest) - preCICE Python bindings (PyPI, latest), under `~/python-venvs/pyprecice`. +- preCICE Rust bindings (Cargo, latest) - preCICE Julia bindings (Pkg, latest) - preCICE FMI Runner (PyPI, latest) - preCICE Micro Manager (PyPI, latest) +- ASTE (Git, develop branch) - OpenFOAM v2512 and the OpenFOAM-preCICE adapter (Git, develop branch) - deal.II 9.5 from the official PPA and the deal.II-preCICE adapter (Git, develop branch) - CalculiX 2.20 from source and the CalculiX-preCICE adapter (Git, develop branch) @@ -75,8 +77,6 @@ At the end, it cleans up all object files and the APT cache (see `cleanup.sh`). ## What should be there but is currently not included? -- ASTE (Git, develop branch) -> Cannot build using the VTK packages bundled in Ubuntu 24.04. Will enable again in the next upgrade. -- preCICE Rust bindings (Cargo, latest) -> Cargo too old in Ubuntu 24.04. - code_aster 14.6 and the code_aster-preCICE adapter -> Adapter currently unmaintained. ## Troubleshooting From afe0fbb465f1b9d9b1e8a8bb2ce919c9f925bb5f Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 20:54:46 +0200 Subject: [PATCH 07/20] Reload the VM during provisioning --- README.md | 2 +- Vagrantfile | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 03dd8da..f412c75 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Ready-to-use boxes are available on [Vagrant Cloud](https://app.vagrantup.com/pr **Note:** If you only want to directly get a pre-built box, look at the [documentation](https://www.precice.org/installation-vm.html). 1. Get a Virtual Machine provider, such as [VirtualBox](https://www.virtualbox.org/) -2. Get [Vagrant](https://www.vagrantup.com/) +2. Get [Vagrant](https://www.vagrantup.com/) and the [vagrant-reload plugin](https://github.com/aidanns/vagrant-reload) 3. Go to the root folder of this repository and start with `vagrant up`. 4. Be patient. Vagrant will now setup your virtual machine. You don't have to do anything and your terminal will be very busy. 5. After the provisioning finishes, restart the machine with `vagrant reload` to get a full GUI diff --git a/Vagrantfile b/Vagrantfile index ca69503..c53b138 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -39,6 +39,9 @@ Vagrant.configure("2") do |config| # Install a desktop environment and basic tools config.vm.provision "shell", path: "provisioning/install-basics.sh", privileged: false + # Reload the VM (requires https://github.com/aidanns/vagrant-reload) + config.vm.provision :reload + # Install common development tools config.vm.provision "shell", path: "provisioning/install-devel.sh", privileged: false From 94713e005e7ea0c1e721445cd0e073c2770c61dc Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 21:58:10 +0200 Subject: [PATCH 08/20] Fix paraview icons --- provisioning/install-paraview.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/provisioning/install-paraview.sh b/provisioning/install-paraview.sh index 46df4c6..c7c0d8e 100755 --- a/provisioning/install-paraview.sh +++ b/provisioning/install-paraview.sh @@ -2,3 +2,6 @@ set -ex sudo apt-get install -y --no-install-recommends paraview + +# Workaround for https://bugs.launchpad.net/ubuntu/+source/paraview/+bug/2155064 +sudo apt-get install -y qt6-svg-plugins \ No newline at end of file From 961f72cbc1d026027619bd340f68adf8a022a1d0 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 22:20:52 +0200 Subject: [PATCH 09/20] Mark scripts as executable --- provisioning/install-aste.sh | 0 provisioning/install-training-python.sh | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 provisioning/install-aste.sh mode change 100644 => 100755 provisioning/install-training-python.sh diff --git a/provisioning/install-aste.sh b/provisioning/install-aste.sh old mode 100644 new mode 100755 diff --git a/provisioning/install-training-python.sh b/provisioning/install-training-python.sh old mode 100644 new mode 100755 From 7904c864e4a08627e885162309a33f287d015f9a Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Tue, 2 Jun 2026 23:05:35 +0200 Subject: [PATCH 10/20] Install thunar-archive-plugin --- provisioning/install-basics.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provisioning/install-basics.sh b/provisioning/install-basics.sh index 43df04e..b608560 100755 --- a/provisioning/install-basics.sh +++ b/provisioning/install-basics.sh @@ -11,7 +11,7 @@ sudo apt-get upgrade -qy # Install the Xfce desktop environment and basic applications sudo apt-get install -y xubuntu-core -sudo apt-get install -y thunar xfce4-terminal terminator bash-completion tree atril firefox firefox-locale-en baobab catfish file-roller +sudo apt-get install -y thunar thunar-archive-plugin xfce4-terminal terminator bash-completion tree atril firefox firefox-locale-en baobab catfish sudo apt-get install -y python3-dev pipx python-is-python3 python3-venv python3-pip python3-pybind11 # Setup auto-login for the graphical session From f9f17fe79572c06f5d4355ef007fda4d3e4e7d14 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Sun, 4 Oct 2026 14:50:36 +0200 Subject: [PATCH 11/20] Various fixes and upgrades --- README.md | 4 ++-- provisioning/install-basics.sh | 26 ++++++++++++++++++++++---- provisioning/install-openfoam.sh | 12 ++++++------ provisioning/post-install.sh | 5 ++++- 4 files changed, 34 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index f412c75..bcd61ab 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ A few things you may need: ## What is included? -This box is based on the [bento/ubuntu-24.04](https://github.com/chef/bento) base box and installs: +This box is based on the [bento/ubuntu-26.04](https://github.com/chef/bento) base box and installs: - Xubuntu-core (Xfce desktop environment) and related tools - VirtualBox guest additions @@ -56,7 +56,7 @@ This box is based on the [bento/ubuntu-24.04](https://github.com/chef/bento) bas - preCICE FMI Runner (PyPI, latest) - preCICE Micro Manager (PyPI, latest) - ASTE (Git, develop branch) -- OpenFOAM v2512 and the OpenFOAM-preCICE adapter (Git, develop branch) +- OpenFOAM v2606 and the OpenFOAM-preCICE adapter (Git, develop branch) - deal.II 9.5 from the official PPA and the deal.II-preCICE adapter (Git, develop branch) - CalculiX 2.20 from source and the CalculiX-preCICE adapter (Git, develop branch) - FEniCS latest from the FEniCS PPA. The FEniCS-preCICE adapter is installed automatically in the Python virtual environment of each tutorial. diff --git a/provisioning/install-basics.sh b/provisioning/install-basics.sh index b608560..d2f2484 100755 --- a/provisioning/install-basics.sh +++ b/provisioning/install-basics.sh @@ -1,13 +1,31 @@ #!/usr/bin/env bash set -ex -# Some repos are a bit fragile and need multiple download tries -echo 'APT::Acquire::Retries "4";' | sudo tee /etc/apt/apt.conf.d/80-retries +# Make APT calls non-interactive +echo 'debconf debconf/frontend select Noninteractive' | sudo debconf-set-selections + +# Pre-seeding of interactive dialogs (keyboard configuration, gdm3) +cat <> ~/.bashrc +echo ". /usr/lib/openfoam/openfoam2606/etc/bashrc" >> ~/.bashrc # Get the OpenFOAM-preCICE adapter if [ ! -d "openfoam-adapter/" ]; then @@ -16,9 +16,9 @@ fi ( cd openfoam-adapter git pull - openfoam2512 ./Allclean - openfoam2512 ./Allwmake + openfoam2606 ./Allclean + openfoam2606 ./Allwmake ) # Build the tutorials partitioned-heat-conduction solver -cd ~/tutorials/partitioned-heat-conduction/solver-openfoam && openfoam2512 wmake +cd ~/tutorials/partitioned-heat-conduction/solver-openfoam && openfoam2606 wmake diff --git a/provisioning/post-install.sh b/provisioning/post-install.sh index 9c66bb6..997cd1e 100755 --- a/provisioning/post-install.sh +++ b/provisioning/post-install.sh @@ -18,4 +18,7 @@ chmod +x ~/Desktop/terminator.desktop { echo "source ${HOME}/.alias" echo "source ${HOME}/python-venvs/pyprecice/bin/activate" -} >> ~/.bashrc \ No newline at end of file +} >> ~/.bashrc + +# Workaround for the network timeout at boot +sudo systemctl mask systemd-networkd-wait-online.service \ No newline at end of file From 2ca4fc927c53aef1d4af3ed1ddd7cfb871125031 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Sun, 4 Oct 2026 21:06:19 +0200 Subject: [PATCH 12/20] Remove GNOME that is added as a dependency of other packages --- provisioning/install-basics.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/provisioning/install-basics.sh b/provisioning/install-basics.sh index d2f2484..5ecf28a 100755 --- a/provisioning/install-basics.sh +++ b/provisioning/install-basics.sh @@ -28,10 +28,14 @@ sudo DEBIAN_FRONTEND=noninteractive apt-get -y \ echo 'APT::Acquire::Retries "4";' | sudo tee /etc/apt/apt.conf.d/80-retries # Install the Xfce desktop environment and basic applications -sudo apt-get install -y xubuntu-core +sudo apt-get install -y xubuntu-core lightdm sudo apt-get install -y thunar thunar-archive-plugin xfce4-terminal terminator bash-completion tree atril firefox firefox-locale-en baobab catfish sudo apt-get install -y python3-dev pipx python-is-python3 python3-venv python3-pip python3-pybind11 +# Remove GNOME display manager and desktop packages +sudo apt-get purge -y gdm3 gnome-shell ubuntu-desktop +sudo apt-get autoremove -y --purge + # Setup auto-login for the graphical session # Disabled due to https://github.com/precice/vm/issues/40 # echo "autologin-user=vagrant" | sudo tee --append /usr/share/lightdm/lightdm.conf.d/60-xubuntu.conf From b85ad195abf8a760828ff063e3d81f9642605069 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Sun, 4 Oct 2026 21:07:15 +0200 Subject: [PATCH 13/20] Move the timeout workaround earlier --- provisioning/install-basics.sh | 3 +++ provisioning/post-install.sh | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/provisioning/install-basics.sh b/provisioning/install-basics.sh index 5ecf28a..feabdcc 100755 --- a/provisioning/install-basics.sh +++ b/provisioning/install-basics.sh @@ -54,3 +54,6 @@ chmod +x ~/Desktop/xfce-keyboard-settings.desktop # Set a hostname echo "precicevm" | sudo tee /etc/hostname + +# Workaround for the network timeout at boot +sudo systemctl mask systemd-networkd-wait-online.service \ No newline at end of file diff --git a/provisioning/post-install.sh b/provisioning/post-install.sh index 997cd1e..a7ef9b8 100755 --- a/provisioning/post-install.sh +++ b/provisioning/post-install.sh @@ -19,6 +19,3 @@ chmod +x ~/Desktop/terminator.desktop echo "source ${HOME}/.alias" echo "source ${HOME}/python-venvs/pyprecice/bin/activate" } >> ~/.bashrc - -# Workaround for the network timeout at boot -sudo systemctl mask systemd-networkd-wait-online.service \ No newline at end of file From da358f63a4fce0066caa01bcd209cba6536aa612 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Sun, 4 Oct 2026 21:13:38 +0200 Subject: [PATCH 14/20] Add OpenMPI options --- provisioning/post-install.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/provisioning/post-install.sh b/provisioning/post-install.sh index a7ef9b8..fb7cb06 100755 --- a/provisioning/post-install.sh +++ b/provisioning/post-install.sh @@ -8,14 +8,16 @@ ln -sf /vagrant/ ~/Desktop/shared cp /usr/share/applications/terminator.desktop ~/Desktop/ chmod +x ~/Desktop/terminator.desktop -# Disable the screensaver and automatic screen lock { + # Disable the screensaver and automatic screen lock echo "xset s off -dpms" echo "gsettings set org.gnome.desktop.screensaver lock-enabled false" -} >> ~/.bashrc - -# Add aliases and enable the python venv by default -{ + + # Add aliases and enable the python venv by default echo "source ${HOME}/.alias" echo "source ${HOME}/python-venvs/pyprecice/bin/activate" + + # Add OpenMPI settings + echo "export OMPI_MCA_btl='self,sm'" + echo "export PRTE_MCA_rmaps_default_mapping_policy=:oversubscribe" } >> ~/.bashrc From bf5c8e78ccf54ebaa5d0ed3bd825a33da9867a2e Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Sun, 4 Oct 2026 22:24:11 +0200 Subject: [PATCH 15/20] Add workaround for shutdown --- provisioning/install-basics.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/provisioning/install-basics.sh b/provisioning/install-basics.sh index feabdcc..4927562 100755 --- a/provisioning/install-basics.sh +++ b/provisioning/install-basics.sh @@ -56,4 +56,7 @@ chmod +x ~/Desktop/xfce-keyboard-settings.desktop echo "precicevm" | sudo tee /etc/hostname # Workaround for the network timeout at boot -sudo systemctl mask systemd-networkd-wait-online.service \ No newline at end of file +sudo systemctl mask systemd-networkd-wait-online.service + +# Workaround for not being able to shut down the VM from inside itself +sudo DEBIAN_FRONTEND=noninteractive systemctl mask systemd-timesyncd \ No newline at end of file From a0b25d07378e3fc1914385ef8eb336c3c99ece5b Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Mon, 5 Oct 2026 08:48:22 +0200 Subject: [PATCH 16/20] Adjust compatibility comments --- README.md | 2 +- Vagrantfile | 2 -- provisioning/install-su2.sh | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bcd61ab..f46013d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ ## What does this do? -Vagrant pulls an Ubuntu 24.04 "base box" and asks e.g. VirtualBox to start a virtual machine. +Vagrant pulls an Ubuntu 26.04 "base box" and asks, e.g., VirtualBox to start a virtual machine. It then installs basic tools (such as a desktop environment), a preCICE release, several solvers and adapters, as well as example and tutorial files. diff --git a/Vagrantfile b/Vagrantfile index c53b138..60f4f89 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -57,8 +57,6 @@ Vagrant.configure("2") do |config| config.vm.provision "shell", path: "provisioning/install-micro-manager.sh", privileged: false config.vm.provision "shell", path: "provisioning/install-paraview.sh", privileged: false - # NOTE: On Ubuntu 24.04, building ASTE will succeed, but running the aste-turbine tutorial, for example, will break. - # See the documentation: https://precice.org/tooling-aste.html#dependencies config.vm.provision "shell", path: "provisioning/install-aste.sh", privileged: false # Install additional packages for training diff --git a/provisioning/install-su2.sh b/provisioning/install-su2.sh index b97b595..beaf6db 100755 --- a/provisioning/install-su2.sh +++ b/provisioning/install-su2.sh @@ -38,7 +38,7 @@ fi ( cd "${SU2_HOME}" - # Add a previously implied header (compatibility with Ubuntu 24.04) + # Add a previously implied header (compatibility with Ubuntu 24.04 and later) sed -i '1s/^/#include \n/' SU2_CFD/src/output/filewriter/CParaviewXMLFileWriter.cpp sed -i '1s/^/#include \n/' SU2_CFD/src/SU2_CFD.cpp From ade1f6671dffafb5813af2fb3dc72fa7f455ed35 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Mon, 5 Oct 2026 17:02:04 +0200 Subject: [PATCH 17/20] Change Julia installer --- README.md | 3 ++- provisioning/install-julia-bindings.sh | 7 ++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f46013d..e7b2dd8 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,8 @@ This box is based on the [bento/ubuntu-26.04](https://github.com/chef/bento) bas - Xubuntu-core (Xfce desktop environment) and related tools - VirtualBox guest additions - Terminator (a nice split-window terminal emulator, find it in `Applications > System`) +- GNU C++, C, Fortran compilers +- Python, Julia, Rust - Git, CMake, ccmake - Editors: nano, vim, gedit - Diff viewer: meld @@ -52,7 +54,6 @@ This box is based on the [bento/ubuntu-26.04](https://github.com/chef/bento) bas - preCICE config visualizer with its GUI (PyPI, latest) - preCICE Python bindings (PyPI, latest), under `~/python-venvs/pyprecice`. - preCICE Rust bindings (Cargo, latest) -- preCICE Julia bindings (Pkg, latest) - preCICE FMI Runner (PyPI, latest) - preCICE Micro Manager (PyPI, latest) - ASTE (Git, develop branch) diff --git a/provisioning/install-julia-bindings.sh b/provisioning/install-julia-bindings.sh index 341a870..e7f221e 100755 --- a/provisioning/install-julia-bindings.sh +++ b/provisioning/install-julia-bindings.sh @@ -1,11 +1,8 @@ #!/usr/bin/env bash # install latest julia -pipx install jill -jill install --confirm - -# install preCICE bindings -julia -e 'using Pkg; Pkg.add("PreCICE")' +curl -fsSL https://install.julialang.org | sh -s -- --yes +echo "export PATH=\"\${HOME}/.juliaup/bin:$PATH\"" >> ~/.bashrc # to test the installation, run the following command: # julia -e 'using Pkg; Pkg.test("PreCICE")' From 8a04efa74a12b59ad2ae6d0f9ac14085cbcae9f5 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Mon, 5 Oct 2026 18:03:43 +0200 Subject: [PATCH 18/20] Add dune-adapter example to PATH --- provisioning/install-dune.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/provisioning/install-dune.sh b/provisioning/install-dune.sh index c1dfbc4..af19087 100755 --- a/provisioning/install-dune.sh +++ b/provisioning/install-dune.sh @@ -84,8 +84,8 @@ CMAKE_FLAGS="$CMAKE_FLAGS -DCMAKE_DISABLE_FIND_PACKAGE_Kokkos=TRUE" ./dune-commo # Set the DUNE_CONTROL_PATH (DUNE recursively finds modules in this directory) echo "export DUNE_CONTROL_PATH=\"\${HOME}/dune-dumux\"" >> ~/.bashrc -# Copy the built example code to the tutorials -cp ~/dune-dumux/dune-adapter/dune-precice-howto/build-cmake/examples/dune-perpendicular-flap ~/tutorials/perpendicular-flap/solid-dune +# Make the built example code discoverable +echo "export PATH=\"\${HOME}/dune-dumux/dune-adapter/dune-precice-howto/build-cmake/examples:\${PATH}\"" >> ~/.bashrc # We are done with DUNE, let's do back home cd ~ From b86906a4cf531b42b652d1a7e2516cafabb3fddf Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Mon, 5 Oct 2026 18:32:51 +0200 Subject: [PATCH 19/20] Fix Julia PATH --- provisioning/install-julia-bindings.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/provisioning/install-julia-bindings.sh b/provisioning/install-julia-bindings.sh index e7f221e..1c2d041 100755 --- a/provisioning/install-julia-bindings.sh +++ b/provisioning/install-julia-bindings.sh @@ -2,7 +2,7 @@ # install latest julia curl -fsSL https://install.julialang.org | sh -s -- --yes -echo "export PATH=\"\${HOME}/.juliaup/bin:$PATH\"" >> ~/.bashrc +echo "export PATH=\"\${HOME}/.juliaup/bin:\${PATH}\"" >> ~/.bashrc # to test the installation, run the following command: # julia -e 'using Pkg; Pkg.test("PreCICE")' From 3b11e440db9db69ea40f7d3f88f386614730a3f8 Mon Sep 17 00:00:00 2001 From: Gerasimos Chourdakis Date: Mon, 5 Oct 2026 22:00:57 +0200 Subject: [PATCH 20/20] Disable ccx2paraview --- provisioning/install-training-fsi.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/provisioning/install-training-fsi.sh b/provisioning/install-training-fsi.sh index ef2e72c..ddce774 100755 --- a/provisioning/install-training-fsi.sh +++ b/provisioning/install-training-fsi.sh @@ -6,7 +6,9 @@ set -ex source ~/python-venvs/pyprecice/bin/activate python -m pip install pyfoam deactivate -pipx install ccx2paraview + +# ccx2paraview is incompatible with newer vtk versions: https://github.com/calculix/ccx2paraview/issues/58 +# pipx install ccx2paraview # FreeCAD AppImage from https://www.freecad.org/downloads.php (~780MB) (