diff --git a/ansible/MANUAL_STEPS.md b/ansible/MANUAL_STEPS.md
index 16a47d44a..d8d2ac84d 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.
+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](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.
-### 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 from 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)