1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
/**
* Test helpers for identifying OS
*/
function isLinux() {
return getBuildInfo().buildEnvironment.target_os == "linux";
}
function isMacOS() {
return getBuildInfo().buildEnvironment.target_os == "macOS";
}
// See "man 5 os-release" for documentation
function readOsRelease() {
try {
const os_release = cat("/etc/os-release");
let lines = os_release.split("\n");
let tags = {};
for (let line of lines) {
let vp = line.replaceAll("\"", "").split("=");
tags[vp[0]] = vp[1];
}
return tags;
} catch {
// ignore
}
assert(!isLinux(), "Linux hosts should always have /etc/os-release.");
return {};
}
/**
* Check if Linux OS is given identifier. Identifiers are always lower case strings.
*
* @param {string} distro ID of the distro in os-release
* @returns
*/
function isDistro(distro) {
let tags = readOsRelease();
return tags.hasOwnProperty("ID") && tags["ID"] === distro;
}
/**
* Check if Linux OS is given identifier and specific version. Do not use for matching major
* versions like RHEL 8, isRHELMajorVerison.
*
* @param {string} distro ID of the distro in os-release
* @returns
*/
function isDistroVersion(distro, version) {
let tags = readOsRelease();
return tags.hasOwnProperty("ID") && tags["ID"] === distro &&
tags.hasOwnProperty("VERSION_ID") && tags["VERSION_ID"] === version;
}
/**
* Is it RHEL and is it 7, 8 or 9?
* @param {string} majorVersion
* @returns True if majorVersion = 8 and version is 8.1, 8.2 etc.
*/
function isRHELMajorVerison(majorVersion) {
let tags = readOsRelease();
return tags.hasOwnProperty("ID") && tags["ID"] === "rhel" &&
tags.hasOwnProperty("VERSION_ID") && tags["VERSION_ID"].startsWith(majorVersion);
}
/**
* Example
NAME="Red Hat Enterprise Linux"
VERSION="8.7 (Ootpa)"
ID="rhel"
ID_LIKE="fedora"
VERSION_ID="8.7"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Red Hat Enterprise Linux 8.7 (Ootpa)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:redhat:enterprise_linux:8::baseos"
HOME_URL="https://www.redhat.com/"
DOCUMENTATION_URL="https://access.redhat.com/documentation/red_hat_enterprise_linux/8/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_BUGZILLA_PRODUCT_VERSION=8.7
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="8.7"
*/
function isRHEL8() {
// RHEL 8 disables TLS 1.0 and TLS 1.1 as part their default crypto policy
// We skip tests on RHEL 8 that require these versions as a result.
return isRHELMajorVerison("8");
}
function isSUSE15SP1() {
if (_isWindows()) {
return false;
}
// SUSE 15 SP1 FIPS module does not work. SP2 does work.
// The FIPS code returns FIPS_R_IN_ERROR_STATE in what is likely a race condition
// since it only happens in sharded clusters.
const grep_result = runProgram('grep', '15-SP1', '/etc/os-release');
if (grep_result == 0) {
return true;
}
return false;
}
function isUbuntu() {
// Ubuntu 18.04 and later compiles openldap against gnutls which does not
// support SHA1 signed certificates. ldaptest.10gen.cc uses a SHA1 cert.
return isDistro("ubuntu");
}
/**
* Example:
NAME="Ubuntu"
VERSION="18.04.6 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.6 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
*/
function isUbuntu1804() {
// Ubuntu 18.04's TLS 1.3 implementation has an issue with OCSP stapling. We have disabled
// stapling on this build variant, so we need to ensure that tests that require stapling
// do not run on this machine.
return isDistroVersion("ubuntu", "18.04");
}
function isUbuntu2004() {
// Ubuntu 20.04 disables TLS 1.0 and TLS 1.1 as part their default crypto policy
// We skip tests on Ubuntu 20.04 that require these versions as a result.
return isDistroVersion("ubuntu", "20.04");
}
/**
* Example:
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
*/
function isDebian() {
return isDistro("debian");
}
/**
* Example:
NAME="Fedora Linux"
VERSION="38 (Workstation Edition)"
ID=fedora
VERSION_ID=38
VERSION_CODENAME=""
PLATFORM_ID="platform:f38"
PRETTY_NAME="Fedora Linux 38 (Workstation Edition)"
ANSI_COLOR="0;38;2;60;110;180"
LOGO=fedora-logo-icon
CPE_NAME="cpe:/o:fedoraproject:fedora:38"
DEFAULT_HOSTNAME="fedora"
HOME_URL="https://fedoraproject.org/"
DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f38/system-administrators-guide/"
SUPPORT_URL="https://ask.fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=38
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=38
SUPPORT_END=2024-05-14
VARIANT="Workstation Edition"
VARIANT_ID=workstation
*/
function isFedora() {
return isDistro("fedora");
}
/**
* Note: Amazon 2022 was never released for production. It became Amazon 2023.
*
* Example:
NAME="Amazon Linux"
VERSION="2022"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2022"
PLATFORM_ID="platform:al2022"
PRETTY_NAME="Amazon Linux 2022"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2022"
HOME_URL="https://aws.amazon.com/linux/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2022"
*/
function isAmazon2023() {
return isDistroVersion("amzn", "2022") || isDistroVersion("amzn", "2023");
}
|