Run Rocky10 on x86_64-v2, x86_64-v1 initiative

Hello,

RockyLinux is a great project, but unfortunately, newer versions reduce the hardware support, in contrast to Debian, which runs on older hardware as well as on the newest.

I’m proposing to do a rebuild of packages for Rocky Linux 10 to support x86-64-v2, and then on x86-64-v1. This should be no problem as long as there is no unconditional AVX instructions in the assembly code. The idea is to provide people, who use old systems for one reason or another, a choice to run the newest Rocky.

I worked as a release engineer for Red Hat, I don’t think this would take a significant amount of effort, since it is mainly about configuring the builders — compiler flags.

I’m ready to lead this effort full-time at least until April. This will be sufficient time to configure Koji builders and make RHEL 10 packages rebuilt. Funny enough, this would be another, significant for some, advantage to use Rocky, compared to RHEL, apart from cost :slight_smile:

The same approach can be applied to build a select set of packages for x86_64-v4 and armv9 in the future, and then for Rocky9.

As per my reply here: Future of x86_64-v2 support - #8 by iwalker

You need to liaise with the Rocky team first. You mention doing it full time at least until April, but then what? BTW, we don’t use Koji for 9 or 10.

The Rocky team need to be the ones to make the decision before pushing something like this. Also, since Rocky is 1:1 with RHEL, that would mean making two builds. One that stay in line with the Rocky ethos if being 1:1 with RHEL, and one for older hardware support, so effectively a SIG project.

And let’s not keep opening multiple threads on this, let’s stick to one.

@iwalker , thanks for response.
I mentioned that I have capacity to do it full-time until April, and within a month, I expect the work to complete. After that, the builds would be automated, requiring no ongoing support (except for paying AWS bills). Then I will be doing best-effort support.

It is a matter of just setting-up once. The effort would be much easier, than setting up Rocky10 for RISC-V, which I have seen in the other thread.

I’ve spoken with @neil who will be joining in the discussion later today on this with his response.

1 Like

Hello. I recommend joining mattermost if this is something you wish to do. Joining this channel will allow you to introduce yourself and document your progress.

I do appreciate and respect the initiative. I’ve personally not seen anyone else with interest in building and maintaining this (or even wanting this for Rocky Linux 10). I understand the desire for many out there that will have older hardware and simply cannot obtain newer supported hardware

I believe it will be more than just compiler flags. Off the top of my head, I can see these changes being required:

  • redhat-rpm-config adjustments (I cannot see these being minor changes, there is a chance that this will be more invasive than riscv64)
  • every package with ExclusiveArch: x86_64 will need x86_64_v2 (and others?) added
  • kernel configs may be required if symlinking/copying from the working x86_64 is not possible.

There may be others that I’m not thinking of or aware of.

Any changes that are needed for this effort, I would recommend that they are fully documented so that in the event that it becomes a truly desired architecture, release engineering can take care of making the direct changes to the spec files/packages as needed to ensure its longevity for the life of 10’s life cycle. Documenting and discussing your progress in mattermost will be highly recommended here.

Note: The architecture will need to be x86_64_v2. Having a second set of x86_64 packages will only create confusion and potentially make it difficult to merge in with our other work.

While I feel it is true that it is a matter of setting it up once, I imagine that it will be easier than RISC-V in some places, but not for others. For example, x86_64_v2 will have speed and reliable hardware whereas in RISC-V, this hasn’t been the case. (gcc takes close to 5 days to complete on some of our hardware, it takes the kernel 7 hours on our strongest hardware, the list goes on with varying lengths of time). So you have this advantage over RISC-V.

RISC-V took 3+ months to get the first bootstrap done. It took 2 months after that to get it bootable. One month after, we were able to declare it self-sustainable. When peridot v2 is ready, we will be importing all this work to sit alongside our primary architectures.

The difficulty will be tracking down all the changes needed to make this a reality. Really at the end of the day, the primary concern is redhat-rpm-config and adjusting it to support x86_64_v2 properly without causing issues with the rest of our architectures. If all of this can be caught within a month or two of time and effort, then yes, it will be much faster than the time we’ve spent on RISC-V thus far.

Will this be your own koji on the side? If so, then it may be possible to take these packages and import them into our build system once they’re determined to be good and can live side-by-side with the other architectures. We are generally not fans of having separate build systems or even diverging ones (we use koji only for Rocky Linux 8 while Rocky Linux 9 and 10 are built in peridot). This does not mean the effort has to start in our build system; this is simply informational.

As mentioned earlier, I would highly recommend joining our mattermost and discussing further there.


As an aside, 1:1 is marketing and does not reflect reality. We are close to 1:1 and thus fully compatible (bugs and all), but we cannot claim to be “1:1”. This is due to changes we’ve made along the way to ensure our builds work, we are patched in for support in software that can’t be done upstream, and as simple things such as assets. For Rocky Linux 10, this will be very apparent, due to the adjustments we’ve made to ensure RISC-V will be supported, even though these changes do not affect the primary architectures.

2 Likes

@nazunalika , thank you for a very comprehensive technical response. It will be my pleasure to work on all the things needed to bring this to a reality. I’d prefer to do it on the Rocky build system in staging, than myself, due to amount of packages.

I have introduced myself to SIG/AltArch on mattermost channel, where we discussed the idea. In my opinion, there is no real reason why this can’t move forward. I have doubts that the reason of AWS disallowing to use compute to rebuild for x86-64-v1 is a valid one. I asked for more details: specifically if there is credit budget to do a rebuild on AWS for the arch. If the issue is only with budget, it can be solved. I may be able to provide personal contribution for the rebuild. I estimate the rebuild could cost be in the lower thousands in EC2 costs — a rough guess, if we’re not counting recurring price of storage, and data transfer. A sum, which can be easily absorbed with RESF, possibly even without my contribution. But considering AWS could provide the resources for free, the cost may not be a problem at all.

Let’s have x86-64-v1 build for the community!

1 Like

Crishna from AltArch channel generously agreed to give access to a powerful Rocky9 VM with storage, which I’ll use to do a proof of concept rebuild of the core packages for a minimal graphical system running. I’ll document the steps.

I’m setting up the peridot buildsystem on my local VM, just to have the documentation, which could be applied on Rocky production. If the setup won’t be successful, I would write a simple for loop to rebuild the .srpms for the x86-64-v1 architecture.

2 Likes

Good luck! I hope things work out!

I have done all steps to setup peridot, but it doesn’t launch, as it depends on the hydra service listening https.

I’m researching more how to make that service running, I’d appreciate more information.

Full error text

bazel run //peridot/ui:peridot.server
DEBUG: /home/bkhomuts/.cache/bazel/_bazel_bkhomuts/3f053816c8a1f3014e87fff44ff9a1a3/external/rules_python/python/pip.bzl:72:10: DEPRECATED: the pip_repositories rule has been replaced with pip_install, please see rules_python 0.1 release notes
INFO: Analyzed target //peridot/ui:peridot.server (0 packages loaded, 0 targets configured).
INFO: Found 1 target…
Target //peridot/ui:peridot.server up-to-date:
bazel-bin/peridot/ui/peridot.server.server.bash
INFO: Elapsed time: 0.516s, Critical Path: 0.01s
INFO: 1 process: 1 internal.
INFO: Build completed successfully, 1 total action
INFO: Build completed successfully, 1 total action
Browserslist: caniuse-lite is outdated. Please run:
npx update-browserslist-db@latest
Why you should do it regularly: GitHub - browserslist/update-db: CLI tool to update caniuse-lite to refresh target browsers from Browserslist config
node:internal/process/promises:246
triggerUncaughtException(err, true /* fromPromise */);
^

<ref *1> Error: connect ECONNREFUSED 127.0.0.1:443
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1133:16) {
errno: -111,
code: ‘ECONNREFUSED’,
syscall: ‘connect’,
address: ‘127.0.0.1’,
port: 443,
config: {
url: ‘https://hdr-dev.internal.rdev.ciq.localhost/.well-known/openid-configuration’,
method: ‘get’,
headers: {
Accept: ‘application/json, text/plain, /’,
‘User-Agent’: ‘axios/0.21.4’
},
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
adapter: [Function: httpAdapter],
xsrfCookieName: ‘XSRF-TOKEN’,
xsrfHeaderName: ‘X-XSRF-TOKEN’,
maxContentLength: -1,
maxBodyLength: -1,
validateStatus: [Function: validateStatus],
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
},
data: undefined
},
request: <ref *4> Writable {
_writableState: WritableState {
objectMode: false,
highWaterMark: 16384,
finalCalled: false,
needDrain: false,
ending: false,
ended: false,
finished: false,
destroyed: false,
decodeStrings: true,
defaultEncoding: ‘utf8’,
length: 0,
writing: false,
corked: 0,
sync: true,
bufferProcessing: false,
onwrite: [Function: bound onwrite],
writecb: null,
writelen: 0,
afterWriteTickInfo: null,
buffered: ,
bufferedIndex: 0,
allBuffers: true,
allNoop: true,
pendingcb: 0,
constructed: true,
prefinished: false,
errorEmitted: false,
emitClose: true,
autoDestroy: true,
errored: null,
closed: false,
closeEmitted: false,
[Symbol(kOnFinished)]:
},
_events: [Object: null prototype] {
response: [Function: handleResponse],
error: [Function: handleRequestError]
},
_eventsCount: 2,
_maxListeners: undefined,
_options: {
maxRedirects: 21,
maxBodyLength: 10485760,
protocol: ‘https:’,
path: ‘/.well-known/openid-configuration’,
method: ‘GET’,
headers: {
Accept: ‘application/json, text/plain, /’,
‘User-Agent’: ‘axios/0.21.4’
},
agent: undefined,
agents: { http: undefined, https: undefined },
auth: undefined,
hostname: ‘hdr-dev.internal.rdev.ciq.localhost’,
port: null,
nativeProtocols: {
‘http:’: {
_connectionListener: [Function: connectionListener],
METHODS: [
‘ACL’, ‘BIND’, ‘CHECKOUT’,
‘CONNECT’, ‘COPY’, ‘DELETE’,
‘GET’, ‘HEAD’, ‘LINK’,
‘LOCK’, ‘M-SEARCH’, ‘MERGE’,
‘MKACTIVITY’, ‘MKCALENDAR’, ‘MKCOL’,
‘MOVE’, ‘NOTIFY’, ‘OPTIONS’,
‘PATCH’, ‘POST’, ‘PROPFIND’,
‘PROPPATCH’, ‘PURGE’, ‘PUT’,
‘REBIND’, ‘REPORT’, ‘SEARCH’,
‘SOURCE’, ‘SUBSCRIBE’, ‘TRACE’,
‘UNBIND’, ‘UNLINK’, ‘UNLOCK’,
‘UNSUBSCRIBE’
],
STATUS_CODES: {
‘100’: ‘Continue’,
‘101’: ‘Switching Protocols’,
‘102’: ‘Processing’,
‘103’: ‘Early Hints’,
‘200’: ‘OK’,
‘201’: ‘Created’,
‘202’: ‘Accepted’,
‘203’: ‘Non-Authoritative Information’,
‘204’: ‘No Content’,
‘205’: ‘Reset Content’,
‘206’: ‘Partial Content’,
‘207’: ‘Multi-Status’,
‘208’: ‘Already Reported’,
‘226’: ‘IM Used’,
‘300’: ‘Multiple Choices’,
‘301’: ‘Moved Permanently’,
‘302’: ‘Found’,
‘303’: ‘See Other’,
‘304’: ‘Not Modified’,
‘305’: ‘Use Proxy’,
‘307’: ‘Temporary Redirect’,
‘308’: ‘Permanent Redirect’,
‘400’: ‘Bad Request’,
‘401’: ‘Unauthorized’,
‘402’: ‘Payment Required’,
‘403’: ‘Forbidden’,
‘404’: ‘Not Found’,
‘405’: ‘Method Not Allowed’,
‘406’: ‘Not Acceptable’,
‘407’: ‘Proxy Authentication Required’,
‘408’: ‘Request Timeout’,
‘409’: ‘Conflict’,
‘410’: ‘Gone’,
‘411’: ‘Length Required’,
‘412’: ‘Precondition Failed’,
‘413’: ‘Payload Too Large’,
‘414’: ‘URI Too Long’,
‘415’: ‘Unsupported Media Type’,
‘416’: ‘Range Not Satisfiable’,
‘417’: ‘Expectation Failed’,
‘418’: “I’m a Teapot”,
‘421’: ‘Misdirected Request’,
‘422’: ‘Unprocessable Entity’,
‘423’: ‘Locked’,
‘424’: ‘Failed Dependency’,
‘425’: ‘Too Early’,
‘426’: ‘Upgrade Required’,
‘428’: ‘Precondition Required’,
‘429’: ‘Too Many Requests’,
‘431’: ‘Request Header Fields Too Large’,
‘451’: ‘Unavailable For Legal Reasons’,
‘500’: ‘Internal Server Error’,
‘501’: ‘Not Implemented’,
‘502’: ‘Bad Gateway’,
‘503’: ‘Service Unavailable’,
‘504’: ‘Gateway Timeout’,
‘505’: ‘HTTP Version Not Supported’,
‘506’: ‘Variant Also Negotiates’,
‘507’: ‘Insufficient Storage’,
‘508’: ‘Loop Detected’,
‘509’: ‘Bandwidth Limit Exceeded’,
‘510’: ‘Not Extended’,
‘511’: ‘Network Authentication Required’
},
Agent: [Function: Agent] { defaultMaxSockets: Infinity },
ClientRequest: [Function: ClientRequest],
IncomingMessage: [Function: IncomingMessage],
OutgoingMessage: [Function: OutgoingMessage],
Server: [Function: Server],
ServerResponse: [Function: ServerResponse],
createServer: [Function: createServer],
validateHeaderName: [Function: _node_internal],
validateHeaderValue: [Function: _node_internal],
get: [Function: get],
request: [Function: request],
maxHeaderSize: [Getter],
globalAgent: [Getter/Setter]
},
‘https:’: {
Agent: [Function: Agent],
globalAgent: Agent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: ‘https:’,
options: [Object: null prototype],
requests: [Object: null prototype] {},
sockets: [Object: null prototype],
freeSockets: [Object: null prototype] {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: ‘lifo’,
maxTotalSockets: Infinity,
totalSocketCount: 1,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false
},
Server: [Function: Server],
createServer: [Function: createServer],
get: [Function: get],
request: [Function: request]
}
},
pathname: ‘/.well-known/openid-configuration’
},
_ended: true,
_ending: true,
_redirectCount: 0,
_redirects: ,
_requestBodyLength: 0,
_requestBodyBuffers: ,
_onNativeResponse: [Function (anonymous)],
_currentRequest: <ref *2> ClientRequest {
_events: [Object: null prototype] {
response: [Function: bound onceWrapper] {
listener: [Function (anonymous)]
},
abort: [Function (anonymous)],
aborted: [Function (anonymous)],
connect: [Function (anonymous)],
error: [Function (anonymous)],
socket: [Function (anonymous)],
timeout: [Function (anonymous)]
},
_eventsCount: 7,
_maxListeners: undefined,
outputData: ,
outputSize: 0,
writable: true,
destroyed: false,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
_contentLength: 0,
_hasBody: true,
_trailer: ‘’,
finished: true,
_headerSent: true,
_closed: false,
socket: <ref *3> TLSSocket {
_tlsOptions: {
allowHalfOpen: undefined,
pipe: false,
secureContext: SecureContext { context: SecureContext {} },
isServer: false,
requestCert: true,
rejectUnauthorized: true,
session: undefined,
ALPNProtocols: undefined,
requestOCSP: undefined,
enableTrace: undefined,
pskCallback: undefined,
highWaterMark: undefined,
onread: undefined,
signal: undefined
},
_secureEstablished: false,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
secureConnecting: true,
_SNICallback: null,
servername: null,
alpnProtocol: null,
authorized: false,
authorizationError: null,
encrypted: true,
_events: [Object: null prototype] {
close: [
[Function: onSocketCloseDestroySSL],
[Function],
[Function: onClose],
[Function: socketCloseListener]
],
end: [ [Function: onConnectEnd], [Function: onReadableStreamEnd] ],
newListener: [Function: keylogNewListener],
connect: [ [Function], [Function], [Function] ],
secure: [Function: onConnectSecure],
session: [Function (anonymous)],
free: [Function: onFree],
timeout: [Function: onTimeout],
agentRemove: [Function: onRemove],
error: [Function: socketErrorListener],
drain: [Function: ondrain]
},
_eventsCount: 11,
connecting: false,
_hadError: true,
_parent: null,
_host: ‘hdr-dev.internal.rdev.ciq.localhost’,
_readableState: ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: ,
flowing: true,
ended: false,
endEmitted: false,
reading: true,
constructed: true,
sync: false,
needReadable: true,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
errorEmitted: true,
emitClose: false,
autoDestroy: true,
destroyed: true,
errored: [Circular *1],
closed: true,
closeEmitted: true,
defaultEncoding: ‘utf8’,
awaitDrainWriters: null,
multiAwaitDrain: false,
readingMore: false,
decoder: null,
encoding: null,
[Symbol(kPaused)]: false
},
_maxListeners: undefined,
_writableState: WritableState {
objectMode: false,
highWaterMark: 16384,
finalCalled: false,
needDrain: false,
ending: false,
ended: false,
finished: false,
destroyed: true,
decodeStrings: false,
defaultEncoding: ‘utf8’,
length: 181,
writing: true,
corked: 0,
sync: false,
bufferProcessing: false,
onwrite: [Function: bound onwrite],
writecb: [Function: bound onFinish],
writelen: 181,
afterWriteTickInfo: null,
buffered: ,
bufferedIndex: 0,
allBuffers: true,
allNoop: true,
pendingcb: 1,
constructed: true,
prefinished: false,
errorEmitted: true,
emitClose: false,
autoDestroy: true,
errored: [Circular *1],
closed: true,
closeEmitted: true,
[Symbol(kOnFinished)]:
},
allowHalfOpen: false,
_sockname: null,
_pendingData: ‘GET /.well-known/openid-configuration HTTP/1.1\r\n’ +
‘Accept: application/json, text/plain, /\r\n’ +
‘User-Agent: axios/0.21.4\r\n’ +
‘Host: hdr-dev.internal.rdev.ciq.localhost\r\n’ +
‘Connection: close\r\n’ +
‘\r\n’,
_pendingEncoding: ‘latin1’,
server: undefined,
_server: null,
ssl: null,
_requestCert: true,
_rejectUnauthorized: true,
parser: null,
_httpMessage: [Circular *2],
[Symbol(res)]: TLSWrap {
_parent: TCP {
reading: [Getter/Setter],
onconnection: null,
[Symbol(owner_symbol)]: [Circular *3],
[Symbol(handle_onclose)]: [Function: done]
},
_parentWrap: undefined,
_secureContext: SecureContext { context: SecureContext {} },
reading: false,
onkeylog: [Function: onkeylog],
onhandshakestart: {},
onhandshakedone: [Function (anonymous)],
onocspresponse: [Function: onocspresponse],
onnewsession: [Function: onnewsessionclient],
onerror: [Function: onerror],
[Symbol(owner_symbol)]: [Circular *3]
},
[Symbol(verified)]: false,
[Symbol(pendingSession)]: null,
[Symbol(async_id_symbol)]: 36,
[Symbol(kHandle)]: null,
[Symbol(kSetNoDelay)]: false,
[Symbol(lastWriteQueueSize)]: 0,
[Symbol(timeout)]: null,
[Symbol(kBuffer)]: null,
[Symbol(kBufferCb)]: null,
[Symbol(kBufferGen)]: null,
[Symbol(kCapture)]: false,
[Symbol(kBytesRead)]: 0,
[Symbol(kBytesWritten)]: 0,
[Symbol(connect-options)]: {
rejectUnauthorized: true,
ciphers: ‘TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA’,
checkServerIdentity: [Function: checkServerIdentity],
minDHSize: 1024,
maxRedirects: 21,
maxBodyLength: 10485760,
protocol: ‘https:’,
path: null,
method: ‘GET’,
headers: {
Accept: ‘application/json, text/plain, /’,
‘User-Agent’: ‘axios/0.21.4’
},
agent: undefined,
agents: { http: undefined, https: undefined },
auth: undefined,
hostname: ‘hdr-dev.internal.rdev.ciq.localhost’,
port: 443,
nativeProtocols: { ‘http:’: [Object], ‘https:’: [Object] },
pathname: ‘/.well-known/openid-configuration’,
_defaultAgent: Agent {
_events: [Object: null prototype],
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: ‘https:’,
options: [Object: null prototype],
requests: [Object: null prototype] {},
sockets: [Object: null prototype],
freeSockets: [Object: null prototype] {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: ‘lifo’,
maxTotalSockets: Infinity,
totalSocketCount: 1,
maxCachedSessions: 100,
_sessionCache: [Object],
[Symbol(kCapture)]: false
},
host: ‘hdr-dev.internal.rdev.ciq.localhost’,
servername: ‘hdr-dev.internal.rdev.ciq.localhost’,
_agentKey: ‘hdr-dev.internal.rdev.ciq.localhost:443:::::::::::::::::::::’,
encoding: null,
singleUse: true
}
},
_header: ‘GET /.well-known/openid-configuration HTTP/1.1\r\n’ +
‘Accept: application/json, text/plain, /\r\n’ +
‘User-Agent: axios/0.21.4\r\n’ +
‘Host: hdr-dev.internal.rdev.ciq.localhost\r\n’ +
‘Connection: close\r\n’ +
‘\r\n’,
_keepAliveTimeout: 0,
_onPendingData: [Function: nop],
agent: Agent {
_events: [Object: null prototype] {
free: [Function (anonymous)],
newListener: [Function: maybeEnableKeylog]
},
_eventsCount: 2,
_maxListeners: undefined,
defaultPort: 443,
protocol: ‘https:’,
options: [Object: null prototype] { path: null },
requests: [Object: null prototype] {},
sockets: [Object: null prototype] {
‘hdr-dev.internal.rdev.ciq.localhost:443:::::::::::::::::::::’: [ [TLSSocket] ]
},
freeSockets: [Object: null prototype] {},
keepAliveMsecs: 1000,
keepAlive: false,
maxSockets: Infinity,
maxFreeSockets: 256,
scheduling: ‘lifo’,
maxTotalSockets: Infinity,
totalSocketCount: 1,
maxCachedSessions: 100,
_sessionCache: { map: {}, list: },
[Symbol(kCapture)]: false
},
socketPath: undefined,
method: ‘GET’,
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
path: ‘/.well-known/openid-configuration’,
_ended: false,
res: null,
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: ‘hdr-dev.internal.rdev.ciq.localhost’,
protocol: ‘https:’,
_redirectable: [Circular *4],
[Symbol(kCapture)]: false,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype] {
accept: [ ‘Accept’, ‘application/json, text/plain, /’ ],
‘user-agent’: [ ‘User-Agent’, ‘axios/0.21.4’ ],
host: [ ‘Host’, ‘hdr-dev.internal.rdev.ciq.localhost’ ]
}
},
_currentUrl: ‘https://hdr-dev.internal.rdev.ciq.localhost/.well-known/openid-configuration’,
[Symbol(kCapture)]: false
},
response: undefined,
isAxiosError: true,
toJSON: [Function: toJSON]
}