@dsh-enhanced/lark-channel 0.1.65 → 0.1.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -5
- package/cordis.patch.yml +1 -0
- package/docs/operations.md +1 -1
- package/docs/progress-security.md +3 -0
- package/docs/rsi-setup.md +11 -7
- package/docs/setup.md +2 -1
- package/lib/adapter.d.ts +8 -0
- package/lib/adapter.d.ts.map +1 -1
- package/lib/adapter.js +34 -2
- package/lib/adapter.js.map +1 -1
- package/lib/config.d.ts +4 -0
- package/lib/config.d.ts.map +1 -1
- package/lib/config.js +52 -8
- package/lib/config.js.map +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +24 -1
- package/lib/index.js.map +1 -1
- package/lib/progress.d.ts +11 -1
- package/lib/progress.d.ts.map +1 -1
- package/lib/progress.js +13 -1
- package/lib/progress.js.map +1 -1
- package/lib/rsi-authority-runtime.d.ts +1 -0
- package/lib/rsi-authority-runtime.d.ts.map +1 -1
- package/lib/rsi-authority-runtime.js +17 -7
- package/lib/rsi-authority-runtime.js.map +1 -1
- package/lib/rsi-bootstrap-manifest.d.ts +12 -5
- package/lib/rsi-bootstrap-manifest.d.ts.map +1 -1
- package/lib/rsi-bootstrap-manifest.js +63 -9
- package/lib/rsi-bootstrap-manifest.js.map +1 -1
- package/lib/rsi-bootstrap.js +3 -3
- package/lib/rsi-bootstrap.js.map +1 -1
- package/lib/rsi-build.d.ts +12 -0
- package/lib/rsi-build.d.ts.map +1 -1
- package/lib/rsi-build.js +55 -5
- package/lib/rsi-build.js.map +1 -1
- package/lib/rsi-creation-build.d.ts +3 -0
- package/lib/rsi-creation-build.d.ts.map +1 -1
- package/lib/rsi-creation-build.js +45 -0
- package/lib/rsi-creation-build.js.map +1 -1
- package/lib/rsi-host-update.d.ts +51 -0
- package/lib/rsi-host-update.d.ts.map +1 -1
- package/lib/rsi-host-update.js +61 -1
- package/lib/rsi-host-update.js.map +1 -1
- package/lib/rsi-install.d.ts +10 -3
- package/lib/rsi-install.d.ts.map +1 -1
- package/lib/rsi-install.js +65 -15
- package/lib/rsi-install.js.map +1 -1
- package/lib/rsi-linux-cgroup-roots.d.ts +3 -0
- package/lib/rsi-linux-cgroup-roots.d.ts.map +1 -0
- package/lib/rsi-linux-cgroup-roots.js +3 -0
- package/lib/rsi-linux-cgroup-roots.js.map +1 -0
- package/lib/rsi-linux-creation-build.d.ts +36 -0
- package/lib/rsi-linux-creation-build.d.ts.map +1 -0
- package/lib/rsi-linux-creation-build.js +213 -0
- package/lib/rsi-linux-creation-build.js.map +1 -0
- package/lib/rsi-linux-native-materialize.d.ts +31 -0
- package/lib/rsi-linux-native-materialize.d.ts.map +1 -0
- package/lib/rsi-linux-native-materialize.js +162 -0
- package/lib/rsi-linux-native-materialize.js.map +1 -0
- package/lib/rsi-linux-native-relocation.d.ts +120 -0
- package/lib/rsi-linux-native-relocation.d.ts.map +1 -0
- package/lib/rsi-linux-native-relocation.js +1555 -0
- package/lib/rsi-linux-native-relocation.js.map +1 -0
- package/lib/rsi-linux-native-resources.d.ts +97 -0
- package/lib/rsi-linux-native-resources.d.ts.map +1 -0
- package/lib/rsi-linux-native-resources.js +521 -0
- package/lib/rsi-linux-native-resources.js.map +1 -0
- package/lib/rsi-linux-repository-bootstrap.d.ts +17 -0
- package/lib/rsi-linux-repository-bootstrap.d.ts.map +1 -0
- package/lib/rsi-linux-repository-bootstrap.js +317 -0
- package/lib/rsi-linux-repository-bootstrap.js.map +1 -0
- package/lib/rsi-linux-runner-states.d.ts +20 -0
- package/lib/rsi-linux-runner-states.d.ts.map +1 -0
- package/lib/rsi-linux-runner-states.js +70 -0
- package/lib/rsi-linux-runner-states.js.map +1 -0
- package/lib/rsi-linux-runtime-bootstrap.d.ts +10 -0
- package/lib/rsi-linux-runtime-bootstrap.d.ts.map +1 -0
- package/lib/rsi-linux-runtime-bootstrap.js +38 -0
- package/lib/rsi-linux-runtime-bootstrap.js.map +1 -0
- package/lib/rsi-linux-source-build.d.ts +28 -0
- package/lib/rsi-linux-source-build.d.ts.map +1 -0
- package/lib/rsi-linux-source-build.js +43 -0
- package/lib/rsi-linux-source-build.js.map +1 -0
- package/lib/rsi-local-install.d.ts +2 -0
- package/lib/rsi-local-install.d.ts.map +1 -1
- package/lib/rsi-local-install.js +42 -1
- package/lib/rsi-local-install.js.map +1 -1
- package/lib/rsi-local-pair-install.d.ts +15 -0
- package/lib/rsi-local-pair-install.d.ts.map +1 -1
- package/lib/rsi-local-pair-install.js +21 -6
- package/lib/rsi-local-pair-install.js.map +1 -1
- package/lib/rsi-local-resources.d.ts +2 -2
- package/lib/rsi-local-resources.d.ts.map +1 -1
- package/lib/rsi-local-resources.js +5 -0
- package/lib/rsi-local-resources.js.map +1 -1
- package/lib/rsi-local-update-build.d.ts +25 -6
- package/lib/rsi-local-update-build.d.ts.map +1 -1
- package/lib/rsi-local-update-build.js +46 -7
- package/lib/rsi-local-update-build.js.map +1 -1
- package/lib/rsi-local-update.d.ts +5 -2
- package/lib/rsi-local-update.d.ts.map +1 -1
- package/lib/rsi-local-update.js +6 -5
- package/lib/rsi-local-update.js.map +1 -1
- package/lib/rsi-plugin-creation.d.ts +16 -1
- package/lib/rsi-plugin-creation.d.ts.map +1 -1
- package/lib/rsi-plugin-creation.js +60 -14
- package/lib/rsi-plugin-creation.js.map +1 -1
- package/lib/rsi-plugin-revision.d.ts +35 -0
- package/lib/rsi-plugin-revision.d.ts.map +1 -0
- package/lib/rsi-plugin-revision.js +200 -0
- package/lib/rsi-plugin-revision.js.map +1 -0
- package/lib/rsi-profile.d.ts +8 -0
- package/lib/rsi-profile.d.ts.map +1 -1
- package/lib/rsi-profile.js +55 -2
- package/lib/rsi-profile.js.map +1 -1
- package/lib/rsi-release-build.d.ts +24 -8
- package/lib/rsi-release-build.d.ts.map +1 -1
- package/lib/rsi-release-build.js +89 -37
- package/lib/rsi-release-build.js.map +1 -1
- package/lib/rsi-scanner-retirement-config.d.ts +34 -0
- package/lib/rsi-scanner-retirement-config.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-config.js +272 -0
- package/lib/rsi-scanner-retirement-config.js.map +1 -0
- package/lib/rsi-scanner-retirement-runtime.d.ts +23 -0
- package/lib/rsi-scanner-retirement-runtime.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-runtime.js +98 -0
- package/lib/rsi-scanner-retirement-runtime.js.map +1 -0
- package/lib/rsi-scanner-retirement-stage.d.ts +55 -0
- package/lib/rsi-scanner-retirement-stage.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-stage.js +183 -0
- package/lib/rsi-scanner-retirement-stage.js.map +1 -0
- package/lib/rsi-scanner-retirement-transition.d.ts +57 -0
- package/lib/rsi-scanner-retirement-transition.d.ts.map +1 -0
- package/lib/rsi-scanner-retirement-transition.js +320 -0
- package/lib/rsi-scanner-retirement-transition.js.map +1 -0
- package/lib/rsi-setup.d.ts +20 -0
- package/lib/rsi-setup.d.ts.map +1 -1
- package/lib/rsi-setup.js +102 -5
- package/lib/rsi-setup.js.map +1 -1
- package/lib/rsi-source-maintenance.d.ts +9 -1
- package/lib/rsi-source-maintenance.d.ts.map +1 -1
- package/lib/rsi-source-maintenance.js +64 -5
- package/lib/rsi-source-maintenance.js.map +1 -1
- package/lib/rsi-source-update.js +2 -2
- package/lib/rsi-source-update.js.map +1 -1
- package/lib/service.d.ts.map +1 -1
- package/lib/service.js +1 -0
- package/lib/service.js.map +1 -1
- package/lib/setup-profile.d.ts.map +1 -1
- package/lib/setup-profile.js +1 -0
- package/lib/setup-profile.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +21 -21
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { constants } from 'node:fs';
|
|
3
|
+
import { lstat, open } from 'node:fs/promises';
|
|
4
|
+
import { isAbsolute, join, resolve } from 'node:path';
|
|
5
|
+
import { openLinuxRsiNativeRelocatedFamily, relocateLinuxRsiNativeFamily, } from './rsi-linux-native-relocation.js';
|
|
6
|
+
/** Compose the relocation primitive into the stage seam the owner-program
|
|
7
|
+
* transaction needs: move the five Linux-native families from a candidate Home
|
|
8
|
+
* into the staged Home, then hand back the typed build environments, the
|
|
9
|
+
* prepared source build and the creation-receipt digests the caller compares
|
|
10
|
+
* against the candidate preparation.
|
|
11
|
+
*
|
|
12
|
+
* This runs strictly before the rename(2) cutover, so it never calls the stock
|
|
13
|
+
* readers (`readLinuxRsiRuntime`, `readLinuxRsiRepositoryRuntime`,
|
|
14
|
+
* `readLinuxRsiCreationBuildEnvironment`, `readRsiReleaseBuildEnvironment`):
|
|
15
|
+
* they probe the host or the logical Home and only accept a Home at its final
|
|
16
|
+
* path. The relocation proof itself is the pre-cutover acceptance gate; the
|
|
17
|
+
* stock readers remain the post-cutover acceptance test.
|
|
18
|
+
*
|
|
19
|
+
* The seam is replayable. A caller that already relocated this pair of Homes in
|
|
20
|
+
* an earlier process passes the sealed proof back in; the proof is re-verified
|
|
21
|
+
* against the staged Home instead of relocating a second time (a second
|
|
22
|
+
* relocation would fail on the existing destinations).
|
|
23
|
+
*
|
|
24
|
+
* When the caller is staging an in-place cutover, the logical Home is the live
|
|
25
|
+
* Home and already exists; `existingLogicalHome` attests that fact so the
|
|
26
|
+
* relocation stages beside it instead of refusing an occupied Home. The staged
|
|
27
|
+
* receipts still record the logical Home and the sealed proof is unchanged.
|
|
28
|
+
*
|
|
29
|
+
* It never cleans up. On any failure — including a crash or abort after the
|
|
30
|
+
* first copy — the staged Home holds an unsealed partial relocation and the
|
|
31
|
+
* sealed proof is gone, so a retry without that proof fails closed on the
|
|
32
|
+
* occupied destinations. The caller owns `stagePhysicalHome` as a disposable
|
|
33
|
+
* directory and must delete and recreate it before retrying. */
|
|
34
|
+
const PROFILE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
|
|
35
|
+
const COMMIT = /^[a-f0-9]{40}$/u;
|
|
36
|
+
const MAX_RECEIPT_BYTES = 4 * 1024 * 1024;
|
|
37
|
+
const stamp = (info) => JSON.stringify([info.dev, info.ino, info.uid, info.mode, info.size,
|
|
38
|
+
info.mtimeMs, info.ctimeMs]);
|
|
39
|
+
function fail(message) { throw new Error(`rsi Linux native materialize: ${message}`); }
|
|
40
|
+
function sha256(bytes) { return createHash('sha256').update(bytes).digest('hex'); }
|
|
41
|
+
function canonicalHome(value, name) {
|
|
42
|
+
if (typeof value !== 'string' || !isAbsolute(value) || value !== resolve(value) || value === '/'
|
|
43
|
+
|| [...value].some(character => character.charCodeAt(0) < 32))
|
|
44
|
+
fail(`invalid ${name}`);
|
|
45
|
+
return value;
|
|
46
|
+
}
|
|
47
|
+
function overlap(first, second) {
|
|
48
|
+
return first === second || first.startsWith(`${second}/`) || second.startsWith(`${first}/`);
|
|
49
|
+
}
|
|
50
|
+
function identity(input) {
|
|
51
|
+
const candidateHome = canonicalHome(input.candidateHome, 'candidate Home');
|
|
52
|
+
const stagePhysicalHome = canonicalHome(input.stagePhysicalHome, 'staged Home');
|
|
53
|
+
const logicalHome = canonicalHome(input.logicalHome, 'logical Home');
|
|
54
|
+
if (input.existingLogicalHome !== undefined) {
|
|
55
|
+
canonicalHome(input.existingLogicalHome, 'existing logical Home');
|
|
56
|
+
if (input.existingLogicalHome !== logicalHome)
|
|
57
|
+
fail('existing logical Home is not this logical Home');
|
|
58
|
+
}
|
|
59
|
+
if (typeof input.profile !== 'string' || !PROFILE.test(input.profile))
|
|
60
|
+
fail('invalid profile');
|
|
61
|
+
if (overlap(candidateHome, stagePhysicalHome) || overlap(candidateHome, logicalHome)
|
|
62
|
+
|| overlap(stagePhysicalHome, logicalHome))
|
|
63
|
+
fail('candidate, staged and logical Homes must be disjoint');
|
|
64
|
+
}
|
|
65
|
+
/** Read one receipt exactly once, requiring the same owner-private, single-link,
|
|
66
|
+
* no-symlink shape the stock readers accept. Hashing and parsing the same buffer
|
|
67
|
+
* keeps the recorded digest bound to the parsed program identity. */
|
|
68
|
+
async function readReceipt(path) {
|
|
69
|
+
let info;
|
|
70
|
+
try {
|
|
71
|
+
info = await lstat(path);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error.code === 'ENOENT')
|
|
75
|
+
fail(`missing creation receipt: ${path}`);
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.size > MAX_RECEIPT_BYTES
|
|
79
|
+
|| info.uid !== process.getuid?.() || info.mode & 0o077 || info.size === 0) {
|
|
80
|
+
fail(`unsafe creation receipt: ${path}`);
|
|
81
|
+
}
|
|
82
|
+
const fd = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
83
|
+
try {
|
|
84
|
+
if (stamp(await fd.stat()) !== stamp(info))
|
|
85
|
+
fail(`creation receipt changed: ${path}`);
|
|
86
|
+
const bytes = await fd.readFile();
|
|
87
|
+
if (bytes.byteLength !== info.size || stamp(await fd.stat()) !== stamp(info)
|
|
88
|
+
|| stamp(await lstat(path)) !== stamp(info))
|
|
89
|
+
fail(`creation receipt changed: ${path}`);
|
|
90
|
+
return { path, bytes, sha256: sha256(bytes) };
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
await fd.close();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function receiptSha256(path) { return (await readReceipt(path)).sha256; }
|
|
97
|
+
/** The candidate receipt names the program being staged; reject a mismatch
|
|
98
|
+
* before spending minutes on the relocation copy. */
|
|
99
|
+
function candidateReceipt(bytes, path, home, profile) {
|
|
100
|
+
let parsed;
|
|
101
|
+
try {
|
|
102
|
+
parsed = JSON.parse(Buffer.from(bytes).toString('utf8'));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
fail(`invalid creation receipt: ${path}`);
|
|
106
|
+
}
|
|
107
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
108
|
+
fail(`invalid creation receipt: ${path}`);
|
|
109
|
+
const receipt = parsed;
|
|
110
|
+
if (receipt.schemaVersion !== 3 || receipt.backend !== 'linux-native'
|
|
111
|
+
|| receipt.dshHome !== home || receipt.profile !== profile)
|
|
112
|
+
fail(`candidate creation receipt differs: ${path}`);
|
|
113
|
+
}
|
|
114
|
+
async function readCandidateReceipt(home, profile) {
|
|
115
|
+
const path = join(home, 'rsi-linux-creation-builds', profile, 'bootstrap.json');
|
|
116
|
+
const receipt = await readReceipt(path);
|
|
117
|
+
candidateReceipt(receipt.bytes, path, home, profile);
|
|
118
|
+
const record = JSON.parse(Buffer.from(receipt.bytes).toString('utf8'));
|
|
119
|
+
if (typeof record.sourceCommit !== 'string' || !COMMIT.test(record.sourceCommit)) {
|
|
120
|
+
fail(`candidate creation receipt lacks a source commit: ${path}`);
|
|
121
|
+
}
|
|
122
|
+
return { path, sha256: receipt.sha256, sourceCommit: record.sourceCommit };
|
|
123
|
+
}
|
|
124
|
+
export async function materializeLinuxRsiNativeInStage(input) {
|
|
125
|
+
identity(input);
|
|
126
|
+
input.signal?.throwIfAborted();
|
|
127
|
+
const { candidateHome, stagePhysicalHome, logicalHome, profile } = input;
|
|
128
|
+
const candidate = await readCandidateReceipt(candidateHome, profile);
|
|
129
|
+
input.signal?.throwIfAborted();
|
|
130
|
+
let relocation = input.relocation;
|
|
131
|
+
if (relocation === undefined) {
|
|
132
|
+
relocation = await relocateLinuxRsiNativeFamily({ sourceHome: candidateHome, physicalHome: stagePhysicalHome,
|
|
133
|
+
logicalHome, profile, ...(input.existingLogicalHome === undefined
|
|
134
|
+
? {} : { existingLogicalHome: input.existingLogicalHome }),
|
|
135
|
+
...(input.signal === undefined ? {} : { signal: input.signal }) });
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
proofIdentity(relocation, input);
|
|
139
|
+
}
|
|
140
|
+
const family = await openLinuxRsiNativeRelocatedFamily(relocation);
|
|
141
|
+
input.signal?.throwIfAborted();
|
|
142
|
+
if (family.runtime.sourceCommit !== candidate.sourceCommit)
|
|
143
|
+
fail('staged program differs from candidate');
|
|
144
|
+
const receipt = await receiptSha256(join(stagePhysicalHome, 'rsi-linux-creation-builds', profile, 'bootstrap.json'));
|
|
145
|
+
return {
|
|
146
|
+
relocation,
|
|
147
|
+
family,
|
|
148
|
+
sourceBuild: { backend: 'linux-native', repository: family.repository, cgroupRoots: family.creationBuild.cgroupRoots },
|
|
149
|
+
candidateReceiptSha256: candidate.sha256,
|
|
150
|
+
receiptSha256: receipt,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
function proofIdentity(proof, input) {
|
|
154
|
+
const record = proof;
|
|
155
|
+
if (record.schemaVersion !== 1 || record.backend !== 'linux-native')
|
|
156
|
+
fail('invalid replay relocation proof');
|
|
157
|
+
if (record.sourceHome !== input.candidateHome || record.physicalHome !== input.stagePhysicalHome
|
|
158
|
+
|| record.logicalHome !== input.logicalHome || record.profile !== input.profile) {
|
|
159
|
+
fail('replay relocation proof does not describe this Home pair');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=rsi-linux-native-materialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-linux-native-materialize.js","sourceRoot":"","sources":["../src/rsi-linux-native-materialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { LinuxPluginBehaviorRuntime } from '@dsh-enhanced/assistant-verifier/linux-behavior-runtime';
|
|
2
|
+
import type { LinuxRsiCreationBuildEnvironment } from './rsi-linux-creation-build.js';
|
|
3
|
+
import type { LinuxRsiRepositoryBuildEnvironment } from './rsi-linux-repository-bootstrap.js';
|
|
4
|
+
import type { LinuxRsiBuildEnvironment } from './rsi-linux-runtime-bootstrap.js';
|
|
5
|
+
import type { NativeRsiReleaseBuildEnvironment } from './rsi-release-build.js';
|
|
6
|
+
/** Receipt-relocation primitive for moving one prepared Linux-native DSH Home
|
|
7
|
+
* from a Docker volume onto a native filesystem without re-preparing it.
|
|
8
|
+
* Source receipts are authenticated before any byte is copied; the copied
|
|
9
|
+
* trees and the rewritten receipts are bound together in a sealed proof whose
|
|
10
|
+
* logical paths survive the later same-filesystem rename(2). */
|
|
11
|
+
export interface LinuxRsiNativeRelocationInput {
|
|
12
|
+
sourceHome: string;
|
|
13
|
+
physicalHome: string;
|
|
14
|
+
logicalHome: string;
|
|
15
|
+
profile: string;
|
|
16
|
+
/** Attests that `logicalHome` is the live Home already occupying its final
|
|
17
|
+
* path (the in-place Docker -> Linux-native cutover case). It must be the
|
|
18
|
+
* exact `logicalHome` value and resolve to itself; it then substitutes for
|
|
19
|
+
* the "logical Home already exists" refusal instead of weakening any other
|
|
20
|
+
* check, and the relocated receipts still record the logical Home. */
|
|
21
|
+
existingLogicalHome?: string;
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
}
|
|
24
|
+
export interface LinuxRsiNativeRelocationElement {
|
|
25
|
+
name: 'runtime' | 'repository-runtime' | 'system' | 'behavior-runtime' | 'release-toolchain' | 'release-store' | 'release-cache';
|
|
26
|
+
logicalPath: string;
|
|
27
|
+
physicalPath: string;
|
|
28
|
+
dev: number;
|
|
29
|
+
ino: number;
|
|
30
|
+
sha256: string;
|
|
31
|
+
entries: number;
|
|
32
|
+
bytes: number;
|
|
33
|
+
}
|
|
34
|
+
export interface LinuxRsiNativeRelocationProof {
|
|
35
|
+
schemaVersion: 1;
|
|
36
|
+
backend: 'linux-native';
|
|
37
|
+
profile: string;
|
|
38
|
+
sourceHome: string;
|
|
39
|
+
physicalHome: string;
|
|
40
|
+
logicalHome: string;
|
|
41
|
+
behaviorRootRelative: string;
|
|
42
|
+
elements: LinuxRsiNativeRelocationElement[];
|
|
43
|
+
digests: {
|
|
44
|
+
runtime: string;
|
|
45
|
+
repository: string;
|
|
46
|
+
behavior: string;
|
|
47
|
+
creation: string;
|
|
48
|
+
release: string;
|
|
49
|
+
relocation: string;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/** Relocate one prepared Linux-native DSH Home onto a fresh physical Home.
|
|
53
|
+
* The source is authenticated before copying and never modified. An
|
|
54
|
+
* `existingLogicalHome` attestation only replaces the "logical Home already
|
|
55
|
+
* exists" refusal; every other check and the proof shape stay the same. */
|
|
56
|
+
export declare function relocateLinuxRsiNativeFamily(input: LinuxRsiNativeRelocationInput): Promise<LinuxRsiNativeRelocationProof>;
|
|
57
|
+
/** Re-derive a relocation proof from its physical Home without ever reading the
|
|
58
|
+
* logical Home; the proof must still describe a byte-identical, un-opened copy. */
|
|
59
|
+
export declare function verifyLinuxRsiNativeRelocation(proof: LinuxRsiNativeRelocationProof): Promise<void>;
|
|
60
|
+
/** The prepared families a verified relocation proof stands for, projected back
|
|
61
|
+
* into their typed build-environment shapes. Callers get the same values the
|
|
62
|
+
* stock readers would produce after the rename(2) cutover, without any host
|
|
63
|
+
* probe or logical-Home read (both are only valid post-cutover). */
|
|
64
|
+
export interface LinuxRsiNativeRelocatedFamily {
|
|
65
|
+
runtime: LinuxRsiBuildEnvironment;
|
|
66
|
+
repository: LinuxRsiRepositoryBuildEnvironment;
|
|
67
|
+
behavior: LinuxPluginBehaviorRuntime;
|
|
68
|
+
creationBuild: LinuxRsiCreationBuildEnvironment;
|
|
69
|
+
release: NativeRsiReleaseBuildEnvironment;
|
|
70
|
+
}
|
|
71
|
+
/** Verify a relocation proof and return its typed families in one pass, so the
|
|
72
|
+
* ~585 MB release trees are hashed once instead of twice. */
|
|
73
|
+
export declare function openLinuxRsiNativeRelocatedFamily(proof: LinuxRsiNativeRelocationProof): Promise<LinuxRsiNativeRelocatedFamily>;
|
|
74
|
+
/** Re-open a verified relocation at another physical Home; callers may only
|
|
75
|
+
* supply the proof's own physical Home or its logical Home.
|
|
76
|
+
*
|
|
77
|
+
* The one supported case is the rename(2) cutover: `rename` preserves dev/ino,
|
|
78
|
+
* so the staged trees keep their sealed content identity while their paths move
|
|
79
|
+
* under the live Home. Receipts record logical paths, so only the element and
|
|
80
|
+
* receipt roots change; the proof itself stays the sealed staged record and is
|
|
81
|
+
* never rewritten. */
|
|
82
|
+
export declare function openLinuxRsiNativeRelocatedFamilyAt(proof: LinuxRsiNativeRelocationProof, physicalHome: string): Promise<LinuxRsiNativeRelocatedFamily>;
|
|
83
|
+
/** A resource-only proof; this neither establishes pre-owner eligibility nor
|
|
84
|
+
* reads, creates or migrates owner authority. The outer installer owns that gate. */
|
|
85
|
+
type BaseElementName = 'runtime' | 'release-toolchain' | 'release-store' | 'release-cache';
|
|
86
|
+
export interface LinuxRsiNativeBaseRelocationProof {
|
|
87
|
+
schemaVersion: 1;
|
|
88
|
+
backend: 'linux-native';
|
|
89
|
+
purpose: 'pre-owner-base';
|
|
90
|
+
profile: string;
|
|
91
|
+
sourceHome: string;
|
|
92
|
+
physicalHome: string;
|
|
93
|
+
logicalHome: string;
|
|
94
|
+
elements: (Omit<LinuxRsiNativeRelocationElement, 'name'> & {
|
|
95
|
+
name: BaseElementName;
|
|
96
|
+
})[];
|
|
97
|
+
digests: {
|
|
98
|
+
runtime: string;
|
|
99
|
+
release: string;
|
|
100
|
+
relocation: string;
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export interface LinuxRsiNativeRelocatedBase {
|
|
104
|
+
runtime: LinuxRsiBuildEnvironment;
|
|
105
|
+
release: NativeRsiReleaseBuildEnvironment;
|
|
106
|
+
}
|
|
107
|
+
/** Read existing receipts through their canonical logical Home spelling. Only
|
|
108
|
+
* same-inode moves are supported: ordinary copied runtime roots fail dev/ino.
|
|
109
|
+
* Release schema 2 carries content pins, not historical root inode fields. */
|
|
110
|
+
export declare function inspectLinuxRsiNativeBaseAt(input: {
|
|
111
|
+
logicalHome: string;
|
|
112
|
+
physicalHome: string;
|
|
113
|
+
profile: string;
|
|
114
|
+
signal?: AbortSignal;
|
|
115
|
+
}): Promise<LinuxRsiNativeRelocatedBase>;
|
|
116
|
+
export declare function openLinuxRsiNativeRelocatedBase(proof: LinuxRsiNativeBaseRelocationProof): Promise<LinuxRsiNativeRelocatedBase>;
|
|
117
|
+
export declare function openLinuxRsiNativeRelocatedBaseAt(proof: LinuxRsiNativeBaseRelocationProof, physicalHome: string): Promise<LinuxRsiNativeRelocatedBase>;
|
|
118
|
+
export declare function relocateLinuxRsiNativeBase(input: LinuxRsiNativeRelocationInput): Promise<LinuxRsiNativeBaseRelocationProof>;
|
|
119
|
+
export {};
|
|
120
|
+
//# sourceMappingURL=rsi-linux-native-relocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsi-linux-native-relocation.d.ts","sourceRoot":"","sources":["../src/rsi-linux-native-relocation.ts"],"names":[],"mappings":"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"}
|