From b6284cadf907431143b309dbe48507e13691f6a9 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Thu, 14 May 2026 18:13:12 +0100 Subject: [PATCH 01/12] doc: bring AIX steps up to date with reality Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 252 +++++++++++----------------------------- 1 file changed, 68 insertions(+), 184 deletions(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 16a47d44a..65940406c 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -117,6 +117,9 @@ need to have enough disk space available to fit the requested disk space. On IBM Cloud, for example, this involves having a second disk added in addition to the default one (e.g. 20Gb standard disk and an additional 100Gb one). +
+If you get an error with the automated disk expansion, expand this section + If not enough space is availble the Jenkins worker create playbook will fail with an `allocp` error, e.g. @@ -144,7 +147,9 @@ hdisk1 00f6db0a6c7aece5 rootvg active shows two disks attached to one volume group named `rootvg`. If this shows one of the disks as `None` this indicates that the disk has not been included in -the volume group. +the volume group. If you only have one physical volume attached and don't +have enough space, then you should add a second through your provider which +you can then add to the volume group as per the instructions below. ```console hdisk0 00fa00d6b552f41b rootvg active @@ -287,10 +292,16 @@ ENCRYPTION: no # ``` +
+ ### OpenSSL -On AIX OpenSSL is not available as an rpm via yum/dnf and is instead an -installp fileset that must be manually downloaded and installed. +On AIX the OpenSSL is packaged as part of the base AIX operating systems and +not via the AIX Toolbox dnf repositories. When deploying a new system it +is possible that it will already be at the latest version. + +
+If you need to update OpenSSL then expand this section and follow the instructions The following instructions are based on https://www.ibm.com/support/pages/downloading-and-installing-or-upgrading-openssl-and-openssh. @@ -319,81 +330,62 @@ To see a list of installed packages, run: lslpp -L all ``` -### Remove en1 network interface +
+ +### Remove unused network interface (typically `en1`) -Some libuv/Node.js tests currently fail on AIX with a network interface -containing a link local address. This is being tracked in -https://github.com/nodejs/node/issues/46792. In the meantime the `en1` -interface containing the link local address is removed. +Some libuv/Node.js tests currently +(`parallel/test-dgram-udp6-link-local-address` is an example](https://github.com/nodejs/node/issues/46792) +fail on AIX with a network interface containing a link local address. +Until the underlying reason is resolved In the meantime the +interface containing the link local address should be removed by running the +following command as root on the appropriate interface. ``` -sudo ifconfig en1 down detach +chdev -l en1 -a state=down ``` Use ``` ifconfig -a ``` -to list the available interfaces. To add back the `en1` interface, run -``` -sudo autoconf6 -i en1 -``` +to list the available interfaces and shut down the the one that doesn't have +an IPv4 configured on it (Listed after `inet` in the `ifconfig` output if it's configured). -## AIX 7.1 - -### Update XL C/C++ Runtime - -Java 17 requires XL C/C++ Runtime 16.1 available from https://www.ibm.com/support/pages/fix-list-xl-cc-runtime-aix#161X. -Once downloaded, unpack the files with `zcat`: -``` -zcat 16.1.0.9-IBM-xlCrte-AIX-FP009.tar.Z | tar -xvf - -``` -and then install with `installp`: -``` -installp -aXYgd . -e /tmp/install.log all -``` - -Use `lslpp -l xlC\*` to view the curently installed version. - -``` -# lslpp -l xlC\* - Fileset Level State Description - ---------------------------------------------------------------------------- -Path: /usr/lib/objrepos - xlC.aix61.rte 13.1.3.3 COMMITTED IBM XL C++ Runtime for AIX 6.1 - and later - xlC.cpp 9.0.0.0 COMMITTED C for AIX Preprocessor - xlC.rte 13.1.3.3 COMMITTED IBM XL C++ Runtime for AIX - xlC.sup.aix50.rte 9.0.0.1 COMMITTED XL C/C++ Runtime for AIX 5.2 -# -``` ## AIX 7.2 Install -Most packages should be installed via ansible. +Most packages required by Node.js build and test can be installed via the +normal ansible playbooks. This will typically install various open-source +packages via the [IBM AIX toolbox](https://www.ibm.com/support/pages/aix-toolbox-open-source-software-downloads-alpha). -If there are any missing they should be installed via yum +Some exceptions are as follows (all done automatically by the playbooks): +- [ccache](https://github.com/nodejs/build/blob/main/ansible/roles/baselayout/tasks/partials/ccache/aix.yml) (not in the AIX toolbox - we build from source) +- [clang](https://github.com/nodejs/build/blob/main/ansible/roles/baselayout/tasks/partials/clang/aix.yml) +- Potentially `rust` in the future if we need a version not in the AIX toolbox for V8 ... -What you do need to install manually is **ccache** +You may need to set up the AIX toolbox if it is not configured by default by +your provider, and potentially update python and pip to allow ansible to +communicate with it properly (`dnf install python3-pip` will often be enough) +### Enable the AIX Event Infrastructure with AHAFS -```bash -mkdir -p /opt/gcc-6.3 && cd /opt/gcc-6.3 -curl -L https://ci.nodejs.org/downloads/aix/gcc-6.3-aix7.2.ppc.tar.gz | /opt/freeware/bin/tar -xzf - -``` +The AIX Event Infrastructure is [required for the file watcher +tests](https://github.com/nodejs/node/pull/10085). Check if it is installed +on your machine by looking in the `/aha` directory and verify if it is +present and non-empty. -### ccache 3.7.4 on AIX 7.2 +
+If `/aha` is not available or is empty expand this section: -```bash -mkdir -p /opt/ccache-3.7.4 && cd /opt/ccache-3.7.4 -curl -L https://ci.nodejs.org/downloads/aix/ccache-3.7.4.aix7.2.ppc.tar.gz | /opt/freeware/bin/tar -xzf - +Ensure that the `bos.ahafs` package is installed: ``` +lslpp -l bos.ahafs` +``` +which will tell you if it is not already installed. If it is not, then you will +need to get it installed form the AIX install media, which may involve contacting +the provider of the system. -### Enable the AHA fs - -For AIX 7 and 6.1, needed for the file watcher unit tests. - -Add the following to /etc/filesystems: - +Once the package is installed, ensure that the following is in `/etc/filesystems` ``` /aha: dev = /aha @@ -409,104 +401,19 @@ mkdir /aha mount /aha ``` -### Install XL compilers +
-1. Download 16.1.0 packages from: https://testcase.boulder.ibm.com (username: - xlcomp4, password: ask @mhdawson) -2. scp them to target:/opt/ibm-xlc -3. on target: -```bash -cd /opt/ibm-xlc -uncompress 16.1.0.3-IBM-xlCcmp-AIX-FP003.tar.Z -tar -xvf 16.1.0.3-IBM-xlCcmp-AIX-FP003.tar -uncompress IBM_XL_C_CPP_V16.1.0.0_AIX.tar.Z -tar -xvf IBM_XL_C_CPP_V16.1.0.0_AIX.tar -installp -aXYgd ./usr/sys/inst.images -e /tmp/install.log all -inutoc -installp -aXgd ./ -e /tmp/install.log all -``` -4. Find compilers in `/opt/IBM/xl[cC]/16.1.0/bin/` - -### Preparing gcc distributables - -1. download gcc-c++ (with dependencies) from bullfreeware.com -2. `scp 15412gcc-c++-6.3.0-1.aix7.2.ppc.rpm-with-deps.zip TARGET:/ramdisk0` - - Note: / is too small -3. `unzip 15412gcc-c++-6.3.0-1.aix7.2.ppc.rpm-with-deps.zip` -4. contained wrong libstdc++-9.1, so downloaded bundle for libstdc++ 6.3.0-1 -5. unpack the RPMs: - `$ for f in *gcc* *stdc*; do rpm2cpio $f | /opt/freeware/bin/cpio_64 -idmv; done` -5. Find absolute symlinks, and make them relative, example: - ``` - $ find . -type l | xargs file - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/ppc64/libatomic.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/libatomic.a. - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/ppc64/libgcc_s.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/libgcc_s.a. - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/ppc64/libstdc++.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/libstdc++.a. - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/ppc64/libsupc++.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/libsupc++.a. - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/ppc64/libatomic.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libatomic.a. - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/ppc64/libgcc_s.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libgcc_s.a. - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/ppc64/libstdc++.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libstdc++.a. - ./opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/ppc64/libsupc++.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libsupc++.a. - ``` - ``` - bash-5.0# pwd - /ramdisk0/aixtoolbox/opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/ppc64 - ``` - ``` - bash-5.0# ln -fs ../libatomic.a ../libgcc_s.a ../libstdc++.a ../libsupc++.a ./ - ``` - ``` - bash-5.0# find . -type l | xargs file - ./ppc64/libatomic.a: archive (big format) - ./ppc64/libgcc_s.a: archive (big format) - ./ppc64/libstdc++.a: archive (big format) - ./ppc64/libsupc++.a: archive (big format) - ./pthread/ppc64/libatomic.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libatomic.a. - ./pthread/ppc64/libgcc_s.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libgcc_s.a. - ./pthread/ppc64/libstdc++.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libstdc++.a. - ./pthread/ppc64/libsupc++.a: symbolic link to /opt/freeware/lib/gcc/powerpc-ibm-aix7.2.0.0/6.3.0/pthread/libsupc++.a. - ``` - ``` - bash-5.0# cd pthread/ppc64/ - ``` - ``` - bash-5.0# ln -fs ../libatomic.a ../libgcc_s.a ../libstdc++.a ../libsupc++.a ./ - ``` - ``` - bash-5.0# file *.a - libatomic.a: archive (big format) - libgcc.a: archive (big format) - libgcc_eh.a: archive (big format) - libgcc_s.a: archive (big format) - libgcov.a: archive (big format) - libstdc++.a: archive (big format) - libsupc++.a: archive (big format) - ``` - -6. Move to target location and create a tarball with no assumptions on leading -path prefix: - ``` - $ mkdir /opt/gcc-6.3 - $ cd /opt/gcc-6.3 - $ mv .../opt/freeware/* ./ - $ tar -cvf ../gcc-6.3-aix7.2.ppc.tar * - ``` - - -Example above was for 6.3.0, but process for 4.8.5 is identical, other than -the version numbers. - -Example search for 4.8.5 gcc on bullfreeware: -- http://www.bullfreeware.com/?searching=true&package=gcc&from=&to=&libraries=false&exact=true&version=5 - -### Install Clang Backend +### Install `clang` prerequisites The clang frontend will be auto installed via ansible playbook from: https://github.com/IBM/llvm-project/releases -The clang backend requires manually installing xl runtime and xl utilities +The clang backend requires the installation of the IBM OpenXL17 runtime and +utilities package (Note that the utilities install will be added the +playbooks in the future) -runtime: +
+IBM OpenXL 17 Runtime (Note: Requires IBM login) 1. Download the current *.tar.Z from https://www.ibm.com/support/pages/fix-list-xl-cc-runtime-aix @@ -515,60 +422,37 @@ runtime: 3. On the target ```sh - uncompress IBM_OPEN_XL_CPP_RUNTIME_17.1.4.1_AIX.tar.Z - tar -xf IBM_OPEN_XL_CPP_RUNTIME_17.1.4.1_AIX.tar + uncompress IBM_OPEN_XL_CPP_RUNTIME_17.1.4.1_AIX.tar.Z | tar xpf - installp -aFXYd . ALL ``` +
+
+IBM Open XL C/C++ Utilities utilities: 1. Download the current *.tar.Z from https://www.ibm.com/support/pages/ibm-open-xl-cc-utilities-aix-1713 2. scp tar onto the target -3. On the target +3. On the target (Note `inutoc` will only be needed if you extracted to the same directory as the RUNTIME package above ```sh - uncompress IBM_OPEN_XL_CPP_UTILITIES_17.1.3.0_AIX.tar.Z - tar -xf IBM_OPEN_XL_CPP_UTILITIES_17.1.3.0_AIX.tar + uncompress IBM_OPEN_XL_CPP_UTILITIES_17.1.3.0_AIX.tar.Z | tar xpf - inutoc . installp -aFXYd . ALL ``` -After installing these packages we will need to update dnf: +After installing these packages we will need to sync up the RPM database with +the files from the AIX OOM used by native package installs: ```sh /usr/sbin/updtvpkg ``` +If you want more details on this command check out +[this IBM documentation](https://www.ibm.com/support/pages/understanding-aix-virtual-rpm-package-rpmrte) - -### Preparing ccache distributables - -Notes: -- AIX tar doesn't know about the "z" switch, so use GNU tar. -- Build tools create 32-bit binaries by default, so explicitly create 64-bit - ones. - - ``` - $ curl -L -O https://github.com/ccache/ccache/releases/download/v3.7.4/ccache-3.7.4.tar.gz - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed - 100 607 0 607 0 0 3281 0 --:--:-- --:--:-- --:--:-- 3281 - 100 490k 100 490k 0 0 586k 0 --:--:-- --:--:-- --:--:-- 60.4M - $ /opt/freeware/bin/tar -xzf ccache-3.7.4.tar.gz - $ cd ccache-3.7.4 - $ ./configure CC="gcc -maix64" && gmake - $ mkdir -p /opt/ccache-3.7.4/libexec /opt/ccache-3.7.4/bin - $ cp ccache /opt/ccache-3.7.4/bin - $ cd /opt/ccache-3.7.4/libexec - $ ln -s ../bin/ccache c++ - $ ln -s ../bin/ccache cpp - $ ln -s ../bin/ccache g++ - $ ln -s ../bin/ccache gcc - $ ln -s ../bin/ccache gcov - $ cd cd /opt/ccache-3.7.4 - $ tar -cf /opt/ccache-3.7.4.aix7.2.ppc.tar.gz * - ``` +
## Windows (Azure/Rackspace) From fb9411819b6c52b55bb0e7b2cc8baba9ccbf90bd Mon Sep 17 00:00:00 2001 From: Stewart X Addison <6487691+sxa@users.noreply.github.com> Date: Fri, 15 May 2026 17:15:44 +0100 Subject: [PATCH 02/12] Update ansible/MANUAL_STEPS.md Co-authored-by: Richard Lau --- ansible/MANUAL_STEPS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 65940406c..c3d6886fb 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -382,7 +382,7 @@ Ensure that the `bos.ahafs` package is installed: lslpp -l bos.ahafs` ``` which will tell you if it is not already installed. If it is not, then you will -need to get it installed form the AIX install media, which may involve contacting +need to get it installed from the AIX install media, which may involve contacting the provider of the system. Once the package is installed, ensure that the following is in `/etc/filesystems` From f0cc29e09e3c85664bdbe7ee81fa507525edcda4 Mon Sep 17 00:00:00 2001 From: Stewart X Addison <6487691+sxa@users.noreply.github.com> Date: Fri, 15 May 2026 17:16:00 +0100 Subject: [PATCH 03/12] Update ansible/MANUAL_STEPS.md Co-authored-by: Richard Lau --- ansible/MANUAL_STEPS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index c3d6886fb..7e3497ffa 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -369,7 +369,7 @@ communicate with it properly (`dnf install python3-pip` will often be enough) ### Enable the AIX Event Infrastructure with AHAFS -The AIX Event Infrastructure is [required for the file watcher +The [AIX Event Infrastructure](https://www.ibm.com/docs/en/aix/7.3.0?topic=management-aix-event-infrastructure-aix-aix-clusters-ahafs) is [required for the file watcher tests](https://github.com/nodejs/node/pull/10085). Check if it is installed on your machine by looking in the `/aha` directory and verify if it is present and non-empty. From 84961c90a9613898d2c26dfa1c91371abb00bd4a Mon Sep 17 00:00:00 2001 From: Stewart X Addison <6487691+sxa@users.noreply.github.com> Date: Fri, 15 May 2026 17:16:21 +0100 Subject: [PATCH 04/12] Update ansible/MANUAL_STEPS.md Co-authored-by: Richard Lau --- ansible/MANUAL_STEPS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 7e3497ffa..0a2322e2c 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -337,7 +337,7 @@ lslpp -L all Some libuv/Node.js tests currently (`parallel/test-dgram-udp6-link-local-address` is an example](https://github.com/nodejs/node/issues/46792) fail on AIX with a network interface containing a link local address. -Until the underlying reason is resolved In the meantime the +In the meantime the interface containing the link local address should be removed by running the following command as root on the appropriate interface. ``` From d0b27d5e9f9c14e8de95a7db29f57b4cb3214af7 Mon Sep 17 00:00:00 2001 From: Stewart X Addison <6487691+sxa@users.noreply.github.com> Date: Fri, 15 May 2026 17:16:34 +0100 Subject: [PATCH 05/12] Update ansible/MANUAL_STEPS.md Co-authored-by: Richard Lau --- ansible/MANUAL_STEPS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 0a2322e2c..d8d2ac84d 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -335,7 +335,7 @@ lslpp -L all ### Remove unused network interface (typically `en1`) Some libuv/Node.js tests currently -(`parallel/test-dgram-udp6-link-local-address` is an example](https://github.com/nodejs/node/issues/46792) +([`parallel/test-dgram-udp6-link-local-address` is an example](https://github.com/nodejs/node/issues/46792)) fail on AIX with a network interface containing a link local address. In the meantime the interface containing the link local address should be removed by running the From dabc70cf6040558bcbd9fddf123875e813ebf474 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Mon, 18 May 2026 13:30:41 +0100 Subject: [PATCH 06/12] update AIX playbooks for python, OpenXL utilities, java 25 etc. Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 46 ++++------------ ansible/roles/baselayout/tasks/main.yml | 2 +- ansible/roles/baselayout/vars/main.yml | 2 +- .../roles/bootstrap/tasks/partials/aix.yml | 55 ++++++++++++++++++- ansible/roles/java-base/vars/main.yml | 2 +- .../tasks/partials/tap2junit/aix73.yml | 2 +- .../package-upgrade/tasks/partials/dnf.yml | 2 +- .../package-upgrade/tasks/partials/yum.yml | 2 +- 8 files changed, 69 insertions(+), 44 deletions(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index d8d2ac84d..543d8ef52 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -267,17 +267,18 @@ ENCRYPTION: no ``` and use [`chlv -x`](https://www.ibm.com/docs/en/aix/7.3?topic=c-chlv-command) -to increase the maximum logical partitions (`MAX LPs`). For our 100Gb we use -`6000` (to match what we have for our AIX 7.1 IBM Cloud instances): +to increase the maximum logical partitions (`MAX LPs`). For the 50GB file +system `2048` should be adequate as that typically allows up to a 64GB file +system. ``` -# chlv -x 6000 hd1 +# chlv -x 2048 hd1 # lslv hd1 LOGICAL VOLUME: hd1 VOLUME GROUP: rootvg LV IDENTIFIER: 00fa00d600004c000000017d43623707.8 PERMISSION: read/write VG STATE: active/complete LV STATE: opened/syncd TYPE: jfs2 WRITE VERIFY: off -MAX LPs: 6000 PP SIZE: 32 megabyte(s) +MAX LPs: 2048 PP SIZE: 32 megabyte(s) COPIES: 1 SCHED POLICY: parallel LPs: 1 PPs: 1 STALE PPs: 0 BB POLICY: relocatable @@ -352,7 +353,7 @@ to list the available interfaces and shut down the the one that doesn't have an IPv4 configured on it (Listed after `inet` in the `ifconfig` output if it's configured). -## AIX 7.2 Install +## AIX package Install Most packages required by Node.js build and test can be installed via the normal ansible playbooks. This will typically install various open-source @@ -361,11 +362,9 @@ packages via the [IBM AIX toolbox](https://www.ibm.com/support/pages/aix-toolbox Some exceptions are as follows (all done automatically by the playbooks): - [ccache](https://github.com/nodejs/build/blob/main/ansible/roles/baselayout/tasks/partials/ccache/aix.yml) (not in the AIX toolbox - we build from source) - [clang](https://github.com/nodejs/build/blob/main/ansible/roles/baselayout/tasks/partials/clang/aix.yml) -- Potentially `rust` in the future if we need a version not in the AIX toolbox for V8 ... You may need to set up the AIX toolbox if it is not configured by default by -your provider, and potentially update python and pip to allow ansible to -communicate with it properly (`dnf install python3-pip` will often be enough) +your provider. ### Enable the AIX Event Infrastructure with AHAFS @@ -409,8 +408,9 @@ The clang frontend will be auto installed via ansible playbook from: https://github.com/IBM/llvm-project/releases The clang backend requires the installation of the IBM OpenXL17 runtime and -utilities package (Note that the utilities install will be added the -playbooks in the future) +parts of the utilities package. The utilties packages should be downloaded and +installed automatically be the playbooks but the Runtime packages need to be +done manually as per the collapsed section below.
IBM OpenXL 17 Runtime (Note: Requires IBM login) @@ -428,32 +428,6 @@ playbooks in the future)
-
-IBM Open XL C/C++ Utilities -utilities: - -1. Download the current *.tar.Z from https://www.ibm.com/support/pages/ibm-open-xl-cc-utilities-aix-1713 -2. scp tar onto the target -3. On the target (Note `inutoc` will only be needed if you extracted to the same directory as the RUNTIME package above - - ```sh - uncompress IBM_OPEN_XL_CPP_UTILITIES_17.1.3.0_AIX.tar.Z | tar xpf - - inutoc . - installp -aFXYd . ALL - ``` - -After installing these packages we will need to sync up the RPM database with -the files from the AIX OOM used by native package installs: - -```sh -/usr/sbin/updtvpkg -``` - -If you want more details on this command check out -[this IBM documentation](https://www.ibm.com/support/pages/understanding-aix-virtual-rpm-package-rpmrte) - -
- ## Windows (Azure/Rackspace) In order to get Windows machines to a state where Ansible can be run against them, some manual steps need to be taken so that Ansible can connect. diff --git a/ansible/roles/baselayout/tasks/main.yml b/ansible/roles/baselayout/tasks/main.yml index 08f1d558f..a841b8693 100644 --- a/ansible/roles/baselayout/tasks/main.yml +++ b/ansible/roles/baselayout/tasks/main.yml @@ -57,7 +57,7 @@ stat: path="{{ binary_dest }}" register: has_git -- name: install packages +- name: install native packages when: not os|startswith("zos") and not os|startswith("macos") package: name: "{{ package }}" diff --git a/ansible/roles/baselayout/vars/main.yml b/ansible/roles/baselayout/vars/main.yml index 74d7b32b0..ddfadd088 100644 --- a/ansible/roles/baselayout/vars/main.yml +++ b/ansible/roles/baselayout/vars/main.yml @@ -47,7 +47,7 @@ packages: { # Appears to be some issue with the Ansible dnf task on AIX and gcc10-c++, so handle separately. aix73: [ - 'gcc8-c++,gcc12-c++' + 'gcc8-c++,gcc12-c++,python3-pip' ], ibmi: [ diff --git a/ansible/roles/bootstrap/tasks/partials/aix.yml b/ansible/roles/bootstrap/tasks/partials/aix.yml index 4debcefa4..68b5f8950 100644 --- a/ansible/roles/bootstrap/tasks/partials/aix.yml +++ b/ansible/roles/bootstrap/tasks/partials/aix.yml @@ -28,7 +28,7 @@ size: 2G state: present -- name: Set size of /home to 50G +- name: Set size of /home to 50G (If it fails try chlv -x 2048 on the LV for /home) aix_filesystem: filesystem: /home size: 50G @@ -53,7 +53,7 @@ path: /aha state: directory -- name: Mount /aha filesystem +- name: Mount /aha filesystem (if this fails install bos.ahafs) shell: cmd: mount -v ahafs /aha /aha when: ahafs.matched == 0 @@ -74,7 +74,58 @@ ansible.builtin.command: hostname {{ inventory_hostname }} when: current_hostname.stdout != inventory_hostname +- name: Ensure the python3-dnf package is up to date + shell: + cmd: /opt/freeware/bin/dnf install -y python3-dnf + - name: set pkg_mgr ansible.builtin.set_fact: ansible_facts: pkg_mgr: dnf + +- name: Check for presence of C++ ADT headers + changed_when: no + check_mode: no + command: "lslpp -l libc++.adt.include" + register: adtheaders_installed + ignore_errors: yes + +# This is from https://www.ibm.com/support/pages/open-xl-cc-aix-utilities + +- name: Download OpenXL utilities to /var/cache if needed + get_url: + checksum: sha256:0d8aba8d06ad403b00a44d5a4466cf55aaeb3a912f071ec840d2ff762a738e28 + dest: "/var/cache/IBM_OPEN_XL_CPP_UTILITIES_17.1.4.1_AIX.tar.Z" + url: "https://public.dhe.ibm.com/aix/products/ccpp/xlc.rte.aix.17.1.4/IBM_OPEN_XL_CPP_UTILITIES_17.1.4.1_AIX.tar.Z" + register: clang_local + when: adtheaders_installed.rc != 0 + +- name: Create /tmpopenxlUtilities + file: + path: /tmp/openxlUtilities + state: directory + mode: 0700 + when: adtheaders_installed.rc != 0 + +# "unarchive" function can't handle the tar.Z file, so call to shell instead +# which also makes it a bit easier to extract only the fileset we require + +- name: Unpack OpenXL utilities + shell: "uncompress -c /var/cache/IBM_OPEN_XL_CPP_UTILITIES_17.1.4.1_AIX.tar.Z | tar xpf - -C /tmp/openxlUtilities libc++.adt.include" + when: adtheaders_installed.rc != 0 + +- name: Install C++ ADT headers from OpenXL utilities + command: "installp -qaFXYd /tmp/openxlUtilities libc++.adt.include" + when: adtheaders_installed.rc != 0 + +- name: Cleanup /tmp/openxlUtilities + file: + path: "/tmp/openxlUtilities" + state: absent + when: adtheaders_installed.rc != 0 + +# Ref: https://www.ibm.com/support/pages/understanding-aix-virtual-rpm-package-rpmrte + +- name: Run updtvpkg to get ODM and DNF databases in sync + command: /usr/sbin/updtvpkg + when: adtheaders_installed.rc != 0 diff --git a/ansible/roles/java-base/vars/main.yml b/ansible/roles/java-base/vars/main.yml index 69a4ea227..3ed5d6a29 100644 --- a/ansible/roles/java-base/vars/main.yml +++ b/ansible/roles/java-base/vars/main.yml @@ -39,5 +39,5 @@ adoptopenjdk: { adoptopenjdk_arch: "{{ adoptopenjdk[os+'_'+arch].arch | default(ansible_architecture) }}" adoptopenjdk_os: "{{ adoptopenjdk[os+'_'+arch].os | default(ansible_system | lower) }}" -adoptopenjdk_version: "{{ adoptopenjdk[os+'_'+arch].version | default('17') }}" +adoptopenjdk_version: "{{ adoptopenjdk[os+'_'+arch].version | default('25') }}" use_adoptopenjdk: "{{ adoptopenjdk[os+'_'+arch] is defined | bool }}" diff --git a/ansible/roles/jenkins-worker/tasks/partials/tap2junit/aix73.yml b/ansible/roles/jenkins-worker/tasks/partials/tap2junit/aix73.yml index ddb5fff53..80fe5e359 100644 --- a/ansible/roles/jenkins-worker/tasks/partials/tap2junit/aix73.yml +++ b/ansible/roles/jenkins-worker/tasks/partials/tap2junit/aix73.yml @@ -2,4 +2,4 @@ ansible.builtin.pip: name: tap2junit=={{ tap2junit_version }} state: present - executable: /usr/bin/pip3 + executable: /opt/freeware/bin/pip3 diff --git a/ansible/roles/package-upgrade/tasks/partials/dnf.yml b/ansible/roles/package-upgrade/tasks/partials/dnf.yml index b8cbbe154..20c79b932 100644 --- a/ansible/roles/package-upgrade/tasks/partials/dnf.yml +++ b/ansible/roles/package-upgrade/tasks/partials/dnf.yml @@ -4,7 +4,7 @@ # Updates all packages for fedora-based distributions # - - name: upgrade installed packages + - name: upgrade installed packages using dnf ansible.builtin.dnf: name: "*" state: latest diff --git a/ansible/roles/package-upgrade/tasks/partials/yum.yml b/ansible/roles/package-upgrade/tasks/partials/yum.yml index bda347827..39d2e821a 100644 --- a/ansible/roles/package-upgrade/tasks/partials/yum.yml +++ b/ansible/roles/package-upgrade/tasks/partials/yum.yml @@ -6,7 +6,7 @@ - name: clean yum packages cache ansible.builtin.command: yum clean packages -- name: upgrade installed packages +- name: upgrade installed packages using yum yum: name=* state=latest use_backend=yum expire-cache=yes # If difficulty recognizing yum is encountered, see https://github.com/ansible/ansible/pull/69484, it is possible # to apply that patch manually to a local install of ansible (if necessary). From 868ae947d80f1261e9e9480256fc75356b2495e0 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Mon, 18 May 2026 17:29:30 +0100 Subject: [PATCH 07/12] AIX 7.3 already has the OpenXL17 runtime filesets installed Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 543d8ef52..30190c3a3 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -408,9 +408,10 @@ The clang frontend will be auto installed via ansible playbook from: https://github.com/IBM/llvm-project/releases The clang backend requires the installation of the IBM OpenXL17 runtime and -parts of the utilities package. The utilties packages should be downloaded and -installed automatically be the playbooks but the Runtime packages need to be -done manually as per the collapsed section below. +parts of the utilities package. The utilties packages should be downloaded +and installed automatically be the playbooks but if you are on AIX 7.2 then +the Runtime packages need to be done manually as per the collapsed section +below. AIX 7.3 already has the appropriate filesets preinstalled.
IBM OpenXL 17 Runtime (Note: Requires IBM login) From 57bebd3fa221e1ad390b950945622d0c95a24fce Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Mon, 18 May 2026 18:25:10 +0100 Subject: [PATCH 08/12] Update index for AIX Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 30190c3a3..97c572f78 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -7,16 +7,10 @@ - [AIX](#aix) - [Disk Layout](#disk-layout) - [OpenSSL](#openssl) - - [Remove en1 network interface](#remove-en1-network-interface) - - [AIX 7.1](#aix-71) - - [Update XL C/C++ Runtime](#update-xl-cc-runtime) - - [AIX 7.2 Install](#aix-72-install) - - [ccache 3.7.4 on AIX 7.2](#ccache-374-on-aix-72) - - [Enable the AHA fs](#enable-the-aha-fs) - - [Install XL compilers](#install-xl-compilers) - - [Preparing gcc distributables](#preparing-gcc-distributables) - - [Install Clang Backend](#install-clang-backend) - - [Preparing ccache distributables](#preparing-ccache-distributables) + - [Remove unused network interface](#remove-unused-network-interface) + - [AIX package Install](#aix-package-install) + - [AIX Event Infrastructure - ahafs](#enable-the-aix-event-infrastructure-with-ahafs) + - [AIX OpenXL runtime/utilities packages for clang](#install-clang-prerequesities) - [Windows (Azure/Rackspace)](#windows-azurerackspace) - [Control machine (where Ansible is run)](#control-machine-where-ansible-is-run) - [Target machines](#target-machines) From 8ec7568718d8fb793102dee36b9e21207411a632 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Mon, 18 May 2026 18:27:27 +0100 Subject: [PATCH 09/12] fixup of index formatting Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 97c572f78..7c3ff97dd 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -327,7 +327,7 @@ lslpp -L all
-### Remove unused network interface (typically `en1`) +### Remove unused network interface Some libuv/Node.js tests currently ([`parallel/test-dgram-udp6-link-local-address` is an example](https://github.com/nodejs/node/issues/46792)) @@ -396,7 +396,7 @@ mount /aha -### Install `clang` prerequisites +### Install clang prerequisites The clang frontend will be auto installed via ansible playbook from: https://github.com/IBM/llvm-project/releases From 4bf5e0a849f8f720fab485f5ff307b355112c184 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Mon, 18 May 2026 18:28:25 +0100 Subject: [PATCH 10/12] fixup of index formatting Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 7c3ff97dd..a30536461 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -10,7 +10,7 @@ - [Remove unused network interface](#remove-unused-network-interface) - [AIX package Install](#aix-package-install) - [AIX Event Infrastructure - ahafs](#enable-the-aix-event-infrastructure-with-ahafs) - - [AIX OpenXL runtime/utilities packages for clang](#install-clang-prerequesities) + - [AIX OpenXL runtime/utilities packages for clang](#install-clang-prerequisites) - [Windows (Azure/Rackspace)](#windows-azurerackspace) - [Control machine (where Ansible is run)](#control-machine-where-ansible-is-run) - [Target machines](#target-machines) From b2b1a8adc85453f17a1a0356d774725c0689ed69 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Mon, 18 May 2026 18:30:58 +0100 Subject: [PATCH 11/12] specify 90GiB minimum for the volume group on AIX Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 9 +++++---- ansible/inventory.yml | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index a30536461..3ad04233d 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -139,10 +139,11 @@ hdisk0 00c8d470fdbc3b5e rootvg active hdisk1 00f6db0a6c7aece5 rootvg active ``` -shows two disks attached to one volume group named `rootvg`. If this shows one -of the disks as `None` this indicates that the disk has not been included in -the volume group. If you only have one physical volume attached and don't -have enough space, then you should add a second through your provider which +shows two disks attached to one volume group named `rootvg`. If this shows +one of the disks as `None` this indicates that the disk has not been +included in the volume group. If you only have one physical volume attached +and don't have enough space, then you should add a second through your +provider (You want to total of at least 90GiB across the volume group) which you can then add to the volume group as per the instructions below. ```console diff --git a/ansible/inventory.yml b/ansible/inventory.yml index 6d58cf500..d3a01fa01 100644 --- a/ansible/inventory.yml +++ b/ansible/inventory.yml @@ -131,6 +131,20 @@ hosts: remote_env: PATH: /opt/freeware/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin server_jobs: 6 + aix73-ppc64_be-4: +# ansible_python_interpreter: /opt/freeware/bin/python3 + ansible_remote_tmp: /tmp/.ansible + ip: 169.54.113.139 + remote_env: + PATH: /opt/freeware/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin + server_jobs: 6 + aix73-ppc64_be-5: + ansible_python_interpreter: /opt/freeware/bin/python3-xxx + ansible_remote_tmp: /tmp/.ansible + ip: 169.54.115.60 + remote_env: + PATH: /opt/freeware/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin + server_jobs: 6 debian12-x64-1: {ip: 169.60.150.84, swap_file_size_mb: 4096} rhel8-ppc64_le-1: {ip: 169.54.113.162, build_test_v8: yes, server_jobs: 4, swap_file_size_mb: 4096} rhel8-s390x-1: {ip: 148.100.84.98, user: linux1, build_test_v8: yes, swap_file_size_mb: 4096} From ad1010f885916b453d2ff7286485d1337c9fd0c7 Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Tue, 19 May 2026 15:09:43 +0100 Subject: [PATCH 12/12] Final changes to clarify parts which are AIX 7.2 specific Signed-off-by: Stewart X Addison --- ansible/MANUAL_STEPS.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md index 3ad04233d..f08f4ee53 100644 --- a/ansible/MANUAL_STEPS.md +++ b/ansible/MANUAL_STEPS.md @@ -405,8 +405,9 @@ https://github.com/IBM/llvm-project/releases The clang backend requires the installation of the IBM OpenXL17 runtime and parts of the utilities package. The utilties packages should be downloaded and installed automatically be the playbooks but if you are on AIX 7.2 then -the Runtime packages need to be done manually as per the collapsed section -below. AIX 7.3 already has the appropriate filesets preinstalled. +the OpenXL 17 Runtime packages need to be downloaded and installed manually +as per the collapsed section below. AIX 7.3 already has the appropriate +filesets preinstalled so are not explicitly required.
IBM OpenXL 17 Runtime (Note: Requires IBM login) @@ -419,7 +420,7 @@ below. AIX 7.3 already has the appropriate filesets preinstalled. ```sh uncompress IBM_OPEN_XL_CPP_RUNTIME_17.1.4.1_AIX.tar.Z | tar xpf - - installp -aFXYd . ALL + installp -aFXYd . libc++.rte libc++abi.rte libunwind.rte ```