Skip to content

Commit

Permalink
bpo-43666: Lib/_aix_support.py routines may fail in a WPAR environment (
Browse files Browse the repository at this point in the history
GH-25095) (#25880)

Since WPAR and LPAR both have a builddate for teh fileset bos.rte
The name of the fileset checked is modified.
To prevent a similiar situation (no builddate in ODM) a value
sufficient for pep425 activity if retrieved buildate is zero or NULL
Patch by M Felt.
(cherry picked from commit 5017cde)

Co-authored-by: Michael Felt <aixtools@users.noreply.github.com>
  • Loading branch information
miss-islington and aixtools committed May 4, 2021
1 parent 7ec94cd commit 7a92bee
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
26 changes: 14 additions & 12 deletions Lib/_aix_support.py
Expand Up @@ -15,8 +15,9 @@ def _aix_tag(vrtl, bd):
# type: (List[int], int) -> str
# Infer the ABI bitwidth from maxsize (assuming 64 bit as the default)
_sz = 32 if sys.maxsize == (2**31-1) else 64
_bd = bd if bd != 0 else 9988
# vrtl[version, release, technology_level]
return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], bd, _sz)
return "aix-{:1x}{:1d}{:02d}-{:04d}-{}".format(vrtl[0], vrtl[1], vrtl[2], _bd, _sz)


# extract version, release and technology level from a VRMF string
Expand All @@ -26,19 +27,20 @@ def _aix_vrtl(vrmf):
return [int(v[-1]), int(r), int(tl)]


def _aix_bosmp64():
def _aix_bos_rte():
# type: () -> Tuple[str, int]
"""
Return a Tuple[str, int] e.g., ['7.1.4.34', 1806]
The fileset bos.mp64 is the AIX kernel. It's VRMF and builddate
reflect the current ABI levels of the runtime environment.
The fileset bos.rte represents the current AIX run-time level. It's VRMF and
builddate reflect the current ABI levels of the runtime environment.
If no builddate is found give a value that will satisfy pep425 related queries
"""
# We expect all AIX systems to have lslpp installed in this location
out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.mp64"])
# All AIX systems to have lslpp installed in this location
out = subprocess.check_output(["/usr/bin/lslpp", "-Lqc", "bos.rte"])
out = out.decode("utf-8")
out = out.strip().split(":") # type: ignore
# Use str() and int() to help mypy see types
return (str(out[2]), int(out[-1]))
_bd = int(out[-1]) if out[-1] != '' else 9988
return (str(out[2]), _bd)


def aix_platform():
Expand All @@ -47,11 +49,11 @@ def aix_platform():
AIX filesets are identified by four decimal values: V.R.M.F.
V (version) and R (release) can be retreived using ``uname``
Since 2007, starting with AIX 5.3 TL7, the M value has been
included with the fileset bos.mp64 and represents the Technology
included with the fileset bos.rte and represents the Technology
Level (TL) of AIX. The F (Fix) value also increases, but is not
relevant for comparing releases and binary compatibility.
For binary compatibility the so-called builddate is needed.
Again, the builddate of an AIX release is associated with bos.mp64.
Again, the builddate of an AIX release is associated with bos.rte.
AIX ABI compatibility is described as guaranteed at: https://www.ibm.com/\
support/knowledgecenter/en/ssw_aix_72/install/binary_compatability.html
Expand All @@ -60,7 +62,7 @@ def aix_platform():
e.g., "aix-6107-1415-32" for AIX 6.1 TL7 bd 1415, 32-bit
and, "aix-6107-1415-64" for AIX 6.1 TL7 bd 1415, 64-bit
"""
vrmf, bd = _aix_bosmp64()
vrmf, bd = _aix_bos_rte()
return _aix_tag(_aix_vrtl(vrmf), bd)


Expand All @@ -79,7 +81,7 @@ def aix_buildtag():
Return the platform_tag of the system Python was built on.
"""
# AIX_BUILDDATE is defined by configure with:
# lslpp -Lcq bos.mp64 | awk -F: '{ print $NF }'
# lslpp -Lcq bos.rte | awk -F: '{ print $NF }'
build_date = sysconfig.get_config_var("AIX_BUILDDATE")
try:
build_date = int(build_date)
Expand Down
@@ -0,0 +1,6 @@
AIX: `Lib/_aix_support.get_platform()` may fail in an AIX WPAR.
The fileset bos.rte appears to have a builddate in both LPAR and WPAR
so this fileset is queried rather than bos.mp64.
To prevent a similiar situation (no builddate in ODM) a value (9988)
sufficient for completing a build is provided.
Patch by M Felt.

0 comments on commit 7a92bee

Please sign in to comment.