Skip to content
46 changes: 10 additions & 36 deletions ansible/MANUAL_STEPS.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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.

<details>
<summary>IBM OpenXL 17 Runtime (Note: Requires IBM login)</summary>
Expand All @@ -428,32 +428,6 @@ playbooks in the future)

</details>

<details>
<summary>IBM Open XL C/C++ Utilities</summary>
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)

</details>

## 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.
Expand Down
2 changes: 1 addition & 1 deletion ansible/roles/baselayout/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}"
Expand Down
2 changes: 1 addition & 1 deletion ansible/roles/baselayout/vars/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could install python3-pip in ansible/roles/jenkins-worker/tasks/partials/tap2junit/aix73.yml as it'd be nearer to where it is actually needed.

And on that subject, it's probably my fault (or necessary when we supported older versions of AIX) but ansible/roles/jenkins-worker/tasks/partials/tap2junit/aix.yml and ansible/roles/jenkins-worker/tasks/partials/tap2junit/aix73.yml could likely be unified.

Copy link
Copy Markdown
Member Author

@sxa sxa May 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I was a bit torn as to whether to leave that in the tap2junt role but I erred on the side of putting it next to some of the existing setup commands to keep those roles just for their intended installation. A philosophical question really, happy to move it if you'd prefer.

Yeah I agree that those could likely be unified into a common aix.yml but did it this way for now as i was only playing with 7.3 boxed and I wouldn't want to unify without verifying that it definitely worked on 7.2 (and also whether running the playbooks with it being pulled from the repos on 7.2 would conflict with machines already set up by the "outside dnf" setup)

],

ibmi: [
Expand Down
55 changes: 53 additions & 2 deletions ansible/roles/bootstrap/tasks/partials/aix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
2 changes: 1 addition & 1 deletion ansible/roles/java-base/vars/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}"
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
ansible.builtin.pip:
name: tap2junit=={{ tap2junit_version }}
state: present
executable: /usr/bin/pip3
executable: /opt/freeware/bin/pip3
2 changes: 1 addition & 1 deletion ansible/roles/package-upgrade/tasks/partials/dnf.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion ansible/roles/package-upgrade/tasks/partials/yum.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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).