@lakutata/containerd 0.0.0-stage → 3.0.0-beta.0
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/LICENSE +23 -0
- package/README.md +409 -2
- package/THIRD_PARTY_NOTICES.md +310 -0
- package/dist/cjs/client/BuildKit.d.ts +176 -0
- package/dist/cjs/client/BuildKit.js +536 -0
- package/dist/cjs/client/BuildKitMessages.d.ts +35 -0
- package/dist/cjs/client/BuildKitMessages.js +123 -0
- package/dist/cjs/client/ContainerStore.d.ts +558 -0
- package/dist/cjs/client/ContainerStore.js +1384 -0
- package/dist/cjs/client/ContainerdClient.d.ts +244 -0
- package/dist/cjs/client/ContainerdClient.js +455 -0
- package/dist/cjs/client/DockerIgnore.d.ts +44 -0
- package/dist/cjs/client/DockerIgnore.js +186 -0
- package/dist/cjs/client/Fifo.d.ts +31 -0
- package/dist/cjs/client/Fifo.js +66 -0
- package/dist/cjs/client/ImageStore.d.ts +258 -0
- package/dist/cjs/client/ImageStore.js +636 -0
- package/dist/cjs/client/Messages.d.ts +103 -0
- package/dist/cjs/client/Messages.js +397 -0
- package/dist/cjs/client/Networks.d.ts +221 -0
- package/dist/cjs/client/Networks.js +630 -0
- package/dist/cjs/client/Platforms.d.ts +53 -0
- package/dist/cjs/client/Platforms.js +169 -0
- package/dist/cjs/client/Reference.d.ts +33 -0
- package/dist/cjs/client/Reference.js +70 -0
- package/dist/cjs/client/Registry.d.ts +145 -0
- package/dist/cjs/client/Registry.js +272 -0
- package/dist/cjs/client/Rootfs.d.ts +83 -0
- package/dist/cjs/client/Rootfs.js +245 -0
- package/dist/cjs/client/Seccomp.d.ts +36 -0
- package/dist/cjs/client/Seccomp.js +156 -0
- package/dist/cjs/client/Spec.d.ts +151 -0
- package/dist/cjs/client/Spec.js +227 -0
- package/dist/cjs/client/Volumes.d.ts +42 -0
- package/dist/cjs/client/Volumes.js +80 -0
- package/dist/cjs/containerd/Containerd.d.ts +442 -0
- package/dist/cjs/containerd/Containerd.js +929 -0
- package/dist/cjs/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdConnectionException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
- package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.js +17 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageExportException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageImportException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePullException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdImagePushException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
- package/dist/cjs/containerd/exceptions/ContainerdPlatformException.js +16 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.js +15 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
- package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.js +15 -0
- package/dist/cjs/containerd/lib/ContainerdContainer.d.ts +292 -0
- package/dist/cjs/containerd/lib/ContainerdContainer.js +536 -0
- package/dist/cjs/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
- package/dist/cjs/containerd/lib/ContainerdContainerTTY.js +178 -0
- package/dist/cjs/containerd/lib/ContainerdErrors.d.ts +6 -0
- package/dist/cjs/containerd/lib/ContainerdErrors.js +37 -0
- package/dist/cjs/containerd/lib/ContainerdImage.d.ts +149 -0
- package/dist/cjs/containerd/lib/ContainerdImage.js +222 -0
- package/dist/cjs/containerd/options/ContainerdPruneOptions.d.ts +44 -0
- package/dist/cjs/containerd/options/ContainerdPruneOptions.js +51 -0
- package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
- package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.js +45 -0
- package/dist/cjs/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
- package/dist/cjs/containerd/options/container/ContainerCommitOptions.js +66 -0
- package/dist/cjs/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
- package/dist/cjs/containerd/options/container/ContainerCreateOptions.js +239 -0
- package/dist/cjs/containerd/options/container/ContainerExecOptions.d.ts +53 -0
- package/dist/cjs/containerd/options/container/ContainerExecOptions.js +63 -0
- package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
- package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.js +45 -0
- package/dist/cjs/containerd/options/container/ContainerKillOptions.d.ts +30 -0
- package/dist/cjs/containerd/options/container/ContainerKillOptions.js +41 -0
- package/dist/cjs/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
- package/dist/cjs/containerd/options/container/ContainerLogsOptions.js +44 -0
- package/dist/cjs/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
- package/dist/cjs/containerd/options/container/ContainerRemoveOptions.js +34 -0
- package/dist/cjs/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
- package/dist/cjs/containerd/options/container/ContainerResourceOptions.js +67 -0
- package/dist/cjs/containerd/options/container/ContainerStopOptions.d.ts +30 -0
- package/dist/cjs/containerd/options/container/ContainerStopOptions.js +41 -0
- package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
- package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.js +40 -0
- package/dist/cjs/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
- package/dist/cjs/containerd/options/container/ContainerTTYOptions.js +63 -0
- package/dist/cjs/containerd/options/image/ImageBuildOptions.d.ts +88 -0
- package/dist/cjs/containerd/options/image/ImageBuildOptions.js +95 -0
- package/dist/cjs/containerd/options/image/ImageExportOptions.d.ts +25 -0
- package/dist/cjs/containerd/options/image/ImageExportOptions.js +39 -0
- package/dist/cjs/containerd/options/image/ImageImportOptions.d.ts +38 -0
- package/dist/cjs/containerd/options/image/ImageImportOptions.js +47 -0
- package/dist/cjs/containerd/options/image/ImagePullOptions.d.ts +53 -0
- package/dist/cjs/containerd/options/image/ImagePullOptions.js +66 -0
- package/dist/cjs/containerd/options/image/ImagePushOptions.d.ts +44 -0
- package/dist/cjs/containerd/options/image/ImagePushOptions.js +58 -0
- package/dist/cjs/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
- package/dist/cjs/containerd/options/network/NetworkCreateOptions.js +83 -0
- package/dist/cjs/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
- package/dist/cjs/containerd/options/volume/VolumeCreateOptions.js +40 -0
- package/dist/cjs/containerd/types/ContainerdBind.d.ts +28 -0
- package/dist/cjs/containerd/types/ContainerdBind.js +2 -0
- package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
- package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
- package/dist/cjs/containerd/types/ContainerdContainerNetwork.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerPort.d.ts +22 -0
- package/dist/cjs/containerd/types/ContainerdContainerPort.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerState.d.ts +42 -0
- package/dist/cjs/containerd/types/ContainerdContainerState.js +2 -0
- package/dist/cjs/containerd/types/ContainerdContainerStats.d.ts +107 -0
- package/dist/cjs/containerd/types/ContainerdContainerStats.js +2 -0
- package/dist/cjs/containerd/types/ContainerdDevice.d.ts +25 -0
- package/dist/cjs/containerd/types/ContainerdDevice.js +2 -0
- package/dist/cjs/containerd/types/ContainerdExecResult.d.ts +18 -0
- package/dist/cjs/containerd/types/ContainerdExecResult.js +2 -0
- package/dist/cjs/containerd/types/ContainerdImageConfig.d.ts +46 -0
- package/dist/cjs/containerd/types/ContainerdImageConfig.js +2 -0
- package/dist/cjs/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
- package/dist/cjs/containerd/types/ContainerdNetworkInfo.js +2 -0
- package/dist/cjs/containerd/types/ContainerdProgressCallback.d.ts +29 -0
- package/dist/cjs/containerd/types/ContainerdProgressCallback.js +2 -0
- package/dist/cjs/containerd/types/ContainerdPruneResult.d.ts +21 -0
- package/dist/cjs/containerd/types/ContainerdPruneResult.js +2 -0
- package/dist/cjs/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
- package/dist/cjs/containerd/types/ContainerdRestartPolicy.js +2 -0
- package/dist/cjs/containerd/types/ContainerdTmpfs.d.ts +20 -0
- package/dist/cjs/containerd/types/ContainerdTmpfs.js +2 -0
- package/dist/cjs/containerd/types/ContainerdVolume.d.ts +19 -0
- package/dist/cjs/containerd/types/ContainerdVolume.js +2 -0
- package/dist/cjs/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
- package/dist/cjs/containerd/types/ContainerdVolumeInfo.js +2 -0
- package/dist/cjs/exports/Containerd.d.ts +69 -0
- package/dist/cjs/exports/Containerd.js +87 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/client/BuildKit.js +488 -0
- package/dist/esm/client/BuildKitMessages.js +120 -0
- package/dist/esm/client/ContainerStore.js +1339 -0
- package/dist/esm/client/ContainerdClient.js +416 -0
- package/dist/esm/client/DockerIgnore.js +179 -0
- package/dist/esm/client/Fifo.js +59 -0
- package/dist/esm/client/ImageStore.js +628 -0
- package/dist/esm/client/Messages.js +393 -0
- package/dist/esm/client/Networks.js +621 -0
- package/dist/esm/client/Platforms.js +156 -0
- package/dist/esm/client/Reference.js +66 -0
- package/dist/esm/client/Registry.js +263 -0
- package/dist/esm/client/Rootfs.js +234 -0
- package/dist/esm/client/Seccomp.js +152 -0
- package/dist/esm/client/Spec.js +220 -0
- package/dist/esm/client/Volumes.js +73 -0
- package/dist/esm/containerd/Containerd.js +923 -0
- package/dist/esm/containerd/exceptions/ContainerdConnectionException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdContainerNameConflictException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdContainerNotFoundException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdContainerStateException.js +13 -0
- package/dist/esm/containerd/exceptions/ContainerdImageBuildException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImageExportException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImageImportException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImageNotFoundException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImagePullException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdImagePushException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdNetworkConflictException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdNetworkNotFoundException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdPathNotFoundException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdPlatformException.js +12 -0
- package/dist/esm/containerd/exceptions/ContainerdVolumeInUseException.js +11 -0
- package/dist/esm/containerd/exceptions/ContainerdVolumeNotFoundException.js +11 -0
- package/dist/esm/containerd/lib/ContainerdContainer.js +533 -0
- package/dist/esm/containerd/lib/ContainerdContainerTTY.js +175 -0
- package/dist/esm/containerd/lib/ContainerdErrors.js +34 -0
- package/dist/esm/containerd/lib/ContainerdImage.js +219 -0
- package/dist/esm/containerd/options/ContainerdPruneOptions.js +47 -0
- package/dist/esm/containerd/options/ContainerdRegistryAuthOptions.js +41 -0
- package/dist/esm/containerd/options/container/ContainerCommitOptions.js +62 -0
- package/dist/esm/containerd/options/container/ContainerCreateOptions.js +235 -0
- package/dist/esm/containerd/options/container/ContainerExecOptions.js +59 -0
- package/dist/esm/containerd/options/container/ContainerExportDirectoryOptions.js +41 -0
- package/dist/esm/containerd/options/container/ContainerKillOptions.js +37 -0
- package/dist/esm/containerd/options/container/ContainerLogsOptions.js +40 -0
- package/dist/esm/containerd/options/container/ContainerRemoveOptions.js +30 -0
- package/dist/esm/containerd/options/container/ContainerResourceOptions.js +63 -0
- package/dist/esm/containerd/options/container/ContainerStopOptions.js +37 -0
- package/dist/esm/containerd/options/container/ContainerTTYConsoleSizeOptions.js +36 -0
- package/dist/esm/containerd/options/container/ContainerTTYOptions.js +59 -0
- package/dist/esm/containerd/options/image/ImageBuildOptions.js +91 -0
- package/dist/esm/containerd/options/image/ImageExportOptions.js +35 -0
- package/dist/esm/containerd/options/image/ImageImportOptions.js +43 -0
- package/dist/esm/containerd/options/image/ImagePullOptions.js +62 -0
- package/dist/esm/containerd/options/image/ImagePushOptions.js +54 -0
- package/dist/esm/containerd/options/network/NetworkCreateOptions.js +79 -0
- package/dist/esm/containerd/options/volume/VolumeCreateOptions.js +36 -0
- package/dist/esm/containerd/types/ContainerdBind.js +1 -0
- package/dist/esm/containerd/types/ContainerdBuildOutputCallback.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerNetwork.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerPort.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerState.js +1 -0
- package/dist/esm/containerd/types/ContainerdContainerStats.js +1 -0
- package/dist/esm/containerd/types/ContainerdDevice.js +1 -0
- package/dist/esm/containerd/types/ContainerdExecResult.js +1 -0
- package/dist/esm/containerd/types/ContainerdImageConfig.js +1 -0
- package/dist/esm/containerd/types/ContainerdNetworkInfo.js +1 -0
- package/dist/esm/containerd/types/ContainerdProgressCallback.js +1 -0
- package/dist/esm/containerd/types/ContainerdPruneResult.js +1 -0
- package/dist/esm/containerd/types/ContainerdRestartPolicy.js +1 -0
- package/dist/esm/containerd/types/ContainerdTmpfs.js +1 -0
- package/dist/esm/containerd/types/ContainerdVolume.js +1 -0
- package/dist/esm/containerd/types/ContainerdVolumeInfo.js +1 -0
- package/dist/esm/exports/Containerd.js +68 -0
- package/dist/types/client/BuildKit.d.ts +176 -0
- package/dist/types/client/BuildKitMessages.d.ts +35 -0
- package/dist/types/client/ContainerStore.d.ts +558 -0
- package/dist/types/client/ContainerdClient.d.ts +244 -0
- package/dist/types/client/DockerIgnore.d.ts +44 -0
- package/dist/types/client/Fifo.d.ts +31 -0
- package/dist/types/client/ImageStore.d.ts +258 -0
- package/dist/types/client/Messages.d.ts +103 -0
- package/dist/types/client/Networks.d.ts +221 -0
- package/dist/types/client/Platforms.d.ts +53 -0
- package/dist/types/client/Reference.d.ts +33 -0
- package/dist/types/client/Registry.d.ts +145 -0
- package/dist/types/client/Rootfs.d.ts +83 -0
- package/dist/types/client/Seccomp.d.ts +36 -0
- package/dist/types/client/Spec.d.ts +151 -0
- package/dist/types/client/Volumes.d.ts +42 -0
- package/dist/types/containerd/Containerd.d.ts +442 -0
- package/dist/types/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
- package/dist/types/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
- package/dist/types/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
- package/dist/types/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
- package/dist/types/containerd/lib/ContainerdContainer.d.ts +292 -0
- package/dist/types/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
- package/dist/types/containerd/lib/ContainerdErrors.d.ts +6 -0
- package/dist/types/containerd/lib/ContainerdImage.d.ts +149 -0
- package/dist/types/containerd/options/ContainerdPruneOptions.d.ts +44 -0
- package/dist/types/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
- package/dist/types/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
- package/dist/types/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
- package/dist/types/containerd/options/container/ContainerExecOptions.d.ts +53 -0
- package/dist/types/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
- package/dist/types/containerd/options/container/ContainerKillOptions.d.ts +30 -0
- package/dist/types/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
- package/dist/types/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
- package/dist/types/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
- package/dist/types/containerd/options/container/ContainerStopOptions.d.ts +30 -0
- package/dist/types/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
- package/dist/types/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
- package/dist/types/containerd/options/image/ImageBuildOptions.d.ts +88 -0
- package/dist/types/containerd/options/image/ImageExportOptions.d.ts +25 -0
- package/dist/types/containerd/options/image/ImageImportOptions.d.ts +38 -0
- package/dist/types/containerd/options/image/ImagePullOptions.d.ts +53 -0
- package/dist/types/containerd/options/image/ImagePushOptions.d.ts +44 -0
- package/dist/types/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
- package/dist/types/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
- package/dist/types/containerd/types/ContainerdBind.d.ts +28 -0
- package/dist/types/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
- package/dist/types/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
- package/dist/types/containerd/types/ContainerdContainerPort.d.ts +22 -0
- package/dist/types/containerd/types/ContainerdContainerState.d.ts +42 -0
- package/dist/types/containerd/types/ContainerdContainerStats.d.ts +107 -0
- package/dist/types/containerd/types/ContainerdDevice.d.ts +25 -0
- package/dist/types/containerd/types/ContainerdExecResult.d.ts +18 -0
- package/dist/types/containerd/types/ContainerdImageConfig.d.ts +46 -0
- package/dist/types/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
- package/dist/types/containerd/types/ContainerdProgressCallback.d.ts +29 -0
- package/dist/types/containerd/types/ContainerdPruneResult.d.ts +21 -0
- package/dist/types/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
- package/dist/types/containerd/types/ContainerdTmpfs.d.ts +20 -0
- package/dist/types/containerd/types/ContainerdVolume.d.ts +19 -0
- package/dist/types/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
- package/dist/types/exports/Containerd.d.ts +69 -0
- package/package.json +51 -4
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { Stats } from 'node:fs';
|
|
2
|
+
import type { SnapshotMount } from './ContainerdClient.js';
|
|
3
|
+
/**
|
|
4
|
+
* The user of a process: its identifiers and its groups
|
|
5
|
+
*/
|
|
6
|
+
export type ProcessUser = {
|
|
7
|
+
uid: number;
|
|
8
|
+
gid: number;
|
|
9
|
+
additionalGids: number[];
|
|
10
|
+
home: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* The directories of the layers of the mounts of a snapshot, the top one first (overlay: its upper directory and its
|
|
14
|
+
* lower ones, bind: its source)
|
|
15
|
+
* @param mounts
|
|
16
|
+
*/
|
|
17
|
+
export declare function layerDirectories(mounts: SnapshotMount[]): string[];
|
|
18
|
+
/**
|
|
19
|
+
* Read a file of the root file system of a snapshot from the directories of its layers (the snapshotter of the host,
|
|
20
|
+
* readable by root): the top layer having it first, its deletions (the whiteouts of overlay) honoured, its symbolic
|
|
21
|
+
* links resolved in the root file system
|
|
22
|
+
* @param mounts
|
|
23
|
+
* @param file an absolute path in the root file system
|
|
24
|
+
* @param depth
|
|
25
|
+
*/
|
|
26
|
+
export declare function readRootfsFile(mounts: SnapshotMount[], file: string, depth?: number): Promise<Buffer | undefined>;
|
|
27
|
+
/**
|
|
28
|
+
* Resolve the user of a process in a root file system (its /etc/passwd and /etc/group): user, user:group, uid, uid:gid
|
|
29
|
+
* @param mounts
|
|
30
|
+
* @param user empty for root
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveUser(mounts: SnapshotMount[], user: string | undefined): Promise<ProcessUser>;
|
|
33
|
+
/**
|
|
34
|
+
* A file system read from the host: a directory (the root of a process), or the directories of the layers of a snapshot
|
|
35
|
+
*/
|
|
36
|
+
export interface FileTree {
|
|
37
|
+
/**
|
|
38
|
+
* A path whose symbolic links are resolved in the file system (not in the one of the host)
|
|
39
|
+
* @param file an absolute path in the file system
|
|
40
|
+
*/
|
|
41
|
+
resolve(file: string): Promise<string>;
|
|
42
|
+
/**
|
|
43
|
+
* The stats of a path (its link not followed) and the path of the host to read it, undefined when it does not exist
|
|
44
|
+
* @param file
|
|
45
|
+
*/
|
|
46
|
+
lstat(file: string): Promise<{
|
|
47
|
+
stats: Stats;
|
|
48
|
+
path: string;
|
|
49
|
+
} | undefined>;
|
|
50
|
+
/**
|
|
51
|
+
* The names of the entries of a directory, sorted
|
|
52
|
+
* @param directory
|
|
53
|
+
*/
|
|
54
|
+
readdir(directory: string): Promise<string[]>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* A file system of a directory of the host (/proc/<pid>/root: the one of a running container, its mounts with it)
|
|
58
|
+
*/
|
|
59
|
+
export declare class DirectoryTree implements FileTree {
|
|
60
|
+
protected readonly root: string;
|
|
61
|
+
constructor(root: string);
|
|
62
|
+
resolve(file: string): Promise<string>;
|
|
63
|
+
lstat(file: string): Promise<{
|
|
64
|
+
stats: Stats;
|
|
65
|
+
path: string;
|
|
66
|
+
} | undefined>;
|
|
67
|
+
readdir(directory: string): Promise<string[]>;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* A file system of the layers of a snapshot (the directories of overlay, the top one first): the deletions of the upper
|
|
71
|
+
* layers (their whiteouts) hide the entries of the lower ones
|
|
72
|
+
*/
|
|
73
|
+
export declare class LayersTree implements FileTree {
|
|
74
|
+
protected readonly layers: string[];
|
|
75
|
+
constructor(layers: string[]);
|
|
76
|
+
resolve(file: string): Promise<string>;
|
|
77
|
+
protected stat(file: string): Promise<Stats | undefined>;
|
|
78
|
+
lstat(file: string): Promise<{
|
|
79
|
+
stats: Stats;
|
|
80
|
+
path: string;
|
|
81
|
+
} | undefined>;
|
|
82
|
+
readdir(directory: string): Promise<string[]>;
|
|
83
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LayersTree = exports.DirectoryTree = void 0;
|
|
7
|
+
exports.layerDirectories = layerDirectories;
|
|
8
|
+
exports.readRootfsFile = readRootfsFile;
|
|
9
|
+
exports.resolveUser = resolveUser;
|
|
10
|
+
const promises_1 = require("node:fs/promises");
|
|
11
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
12
|
+
/**
|
|
13
|
+
* The directories of the layers of the mounts of a snapshot, the top one first (overlay: its upper directory and its
|
|
14
|
+
* lower ones, bind: its source)
|
|
15
|
+
* @param mounts
|
|
16
|
+
*/
|
|
17
|
+
function layerDirectories(mounts) {
|
|
18
|
+
const directories = [];
|
|
19
|
+
for (const mount of mounts) {
|
|
20
|
+
if (mount.type === 'bind' || mount.type === 'rbind') {
|
|
21
|
+
directories.push(mount.source);
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (mount.type !== 'overlay')
|
|
25
|
+
continue;
|
|
26
|
+
for (const option of mount.options) {
|
|
27
|
+
if (option.startsWith('upperdir='))
|
|
28
|
+
directories.unshift(option.slice(9));
|
|
29
|
+
if (option.startsWith('lowerdir='))
|
|
30
|
+
directories.push(...option.slice(9).split(':'));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return directories;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read a file of the root file system of a snapshot from the directories of its layers (the snapshotter of the host,
|
|
37
|
+
* readable by root): the top layer having it first, its deletions (the whiteouts of overlay) honoured, its symbolic
|
|
38
|
+
* links resolved in the root file system
|
|
39
|
+
* @param mounts
|
|
40
|
+
* @param file an absolute path in the root file system
|
|
41
|
+
* @param depth
|
|
42
|
+
*/
|
|
43
|
+
async function readRootfsFile(mounts, file, depth = 0) {
|
|
44
|
+
if (depth > 8)
|
|
45
|
+
return undefined;
|
|
46
|
+
const relative = node_path_1.default.posix.normalize(file).replace(/^\/+/, '');
|
|
47
|
+
for (const directory of layerDirectories(mounts)) {
|
|
48
|
+
const target = node_path_1.default.join(directory, relative);
|
|
49
|
+
let stats;
|
|
50
|
+
try {
|
|
51
|
+
stats = await (0, promises_1.lstat)(target);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
//Deleted by this layer
|
|
57
|
+
if (stats.isCharacterDevice() && stats.rdev === 0)
|
|
58
|
+
return undefined;
|
|
59
|
+
if (stats.isSymbolicLink()) {
|
|
60
|
+
const link = await (0, promises_1.readlink)(target);
|
|
61
|
+
return await readRootfsFile(mounts, link.startsWith('/') ? link : node_path_1.default.posix.join(node_path_1.default.posix.dirname('/' + relative), link), depth + 1);
|
|
62
|
+
}
|
|
63
|
+
if (!stats.isFile())
|
|
64
|
+
return undefined;
|
|
65
|
+
return await (0, promises_1.readFile)(target);
|
|
66
|
+
}
|
|
67
|
+
return undefined;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The entries of a file of the database of the users or of the groups (name:x:id:…)
|
|
71
|
+
* @param content
|
|
72
|
+
*/
|
|
73
|
+
function readEntries(content) {
|
|
74
|
+
if (!content)
|
|
75
|
+
return [];
|
|
76
|
+
return content.toString('utf8').split('\n').filter((line) => !!line.trim() && !line.startsWith('#')).map((line) => line.split(':'));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Resolve the user of a process in a root file system (its /etc/passwd and /etc/group): user, user:group, uid, uid:gid
|
|
80
|
+
* @param mounts
|
|
81
|
+
* @param user empty for root
|
|
82
|
+
*/
|
|
83
|
+
async function resolveUser(mounts, user) {
|
|
84
|
+
const [userPart, groupPart] = (user ?? '').split(':');
|
|
85
|
+
const passwd = readEntries(await readRootfsFile(mounts, '/etc/passwd'));
|
|
86
|
+
let uid = 0;
|
|
87
|
+
let gid = 0;
|
|
88
|
+
let home = '/';
|
|
89
|
+
let name = 'root';
|
|
90
|
+
if (userPart) {
|
|
91
|
+
const entry = passwd.find((fields) => fields[0] === userPart) ?? (/^\d+$/.test(userPart) ? passwd.find((fields) => fields[2] === userPart) : undefined);
|
|
92
|
+
if (entry) {
|
|
93
|
+
uid = Number(entry[2]);
|
|
94
|
+
gid = Number(entry[3]);
|
|
95
|
+
home = entry[5] || '/';
|
|
96
|
+
name = entry[0];
|
|
97
|
+
}
|
|
98
|
+
else if (/^\d+$/.test(userPart)) {
|
|
99
|
+
uid = Number(userPart);
|
|
100
|
+
gid = Number(userPart);
|
|
101
|
+
name = undefined;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
throw new Error(`The user "${userPart}" is not in the /etc/passwd of the image`);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const root = passwd.find((fields) => fields[2] === '0');
|
|
109
|
+
if (root)
|
|
110
|
+
home = root[5] || '/';
|
|
111
|
+
}
|
|
112
|
+
const groups = readEntries(await readRootfsFile(mounts, '/etc/group'));
|
|
113
|
+
if (groupPart) {
|
|
114
|
+
const entry = groups.find((fields) => fields[0] === groupPart);
|
|
115
|
+
if (entry)
|
|
116
|
+
gid = Number(entry[2]);
|
|
117
|
+
else if (/^\d+$/.test(groupPart))
|
|
118
|
+
gid = Number(groupPart);
|
|
119
|
+
else
|
|
120
|
+
throw new Error(`The group "${groupPart}" is not in the /etc/group of the image`);
|
|
121
|
+
}
|
|
122
|
+
//The groups the user is a member of (supplementary)
|
|
123
|
+
const additionalGids = name ? groups
|
|
124
|
+
.filter((fields) => (fields[3] ?? '').split(',').includes(name) && Number(fields[2]) !== gid)
|
|
125
|
+
.map((fields) => Number(fields[2])) : [];
|
|
126
|
+
return { uid: uid, gid: gid, additionalGids: [...new Set(additionalGids)], home: home };
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The resolution of the symbolic links of a path in a file tree
|
|
130
|
+
* @param tree
|
|
131
|
+
* @param file
|
|
132
|
+
*/
|
|
133
|
+
async function resolveInTree(tree, file) {
|
|
134
|
+
const pending = node_path_1.default.posix.normalize(`/${file}`).split('/').filter(Boolean);
|
|
135
|
+
let current = '/';
|
|
136
|
+
let links = 0;
|
|
137
|
+
while (pending.length) {
|
|
138
|
+
const part = pending.shift();
|
|
139
|
+
if (part === '..') {
|
|
140
|
+
current = node_path_1.default.posix.dirname(current);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const candidate = node_path_1.default.posix.join(current, part);
|
|
144
|
+
const found = await tree.lstat(candidate);
|
|
145
|
+
if (found?.stats.isSymbolicLink()) {
|
|
146
|
+
if (++links > 40)
|
|
147
|
+
throw new Error(`The path ${file} has too many symbolic links`);
|
|
148
|
+
const target = await (0, promises_1.readlink)(found.path);
|
|
149
|
+
if (target.startsWith('/'))
|
|
150
|
+
current = '/';
|
|
151
|
+
pending.unshift(...target.split('/').filter(Boolean));
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
current = candidate;
|
|
155
|
+
}
|
|
156
|
+
return current;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* A file system of a directory of the host (/proc/<pid>/root: the one of a running container, its mounts with it)
|
|
160
|
+
*/
|
|
161
|
+
class DirectoryTree {
|
|
162
|
+
constructor(root) {
|
|
163
|
+
this.root = root;
|
|
164
|
+
}
|
|
165
|
+
resolve(file) {
|
|
166
|
+
return resolveInTree(this, file);
|
|
167
|
+
}
|
|
168
|
+
async lstat(file) {
|
|
169
|
+
const real = node_path_1.default.join(this.root, node_path_1.default.posix.normalize(`/${file}`));
|
|
170
|
+
try {
|
|
171
|
+
return { stats: await (0, promises_1.lstat)(real), path: real };
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return undefined;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async readdir(directory) {
|
|
178
|
+
return (await (0, promises_1.readdir)(node_path_1.default.join(this.root, node_path_1.default.posix.normalize(`/${directory}`)))).sort();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
exports.DirectoryTree = DirectoryTree;
|
|
182
|
+
/**
|
|
183
|
+
* Whether stats are the ones of a whiteout of overlay (a deletion of a layer)
|
|
184
|
+
* @param stats
|
|
185
|
+
*/
|
|
186
|
+
function isWhiteout(stats) {
|
|
187
|
+
return stats.isCharacterDevice() && stats.rdev === 0;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* A file system of the layers of a snapshot (the directories of overlay, the top one first): the deletions of the upper
|
|
191
|
+
* layers (their whiteouts) hide the entries of the lower ones
|
|
192
|
+
*/
|
|
193
|
+
class LayersTree {
|
|
194
|
+
constructor(layers) {
|
|
195
|
+
this.layers = layers;
|
|
196
|
+
}
|
|
197
|
+
resolve(file) {
|
|
198
|
+
return resolveInTree(this, file);
|
|
199
|
+
}
|
|
200
|
+
async stat(file) {
|
|
201
|
+
try {
|
|
202
|
+
return await (0, promises_1.lstat)(file);
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return undefined;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async lstat(file) {
|
|
209
|
+
const parts = node_path_1.default.posix.normalize(`/${file}`).split('/').filter(Boolean);
|
|
210
|
+
for (const layer of this.layers) {
|
|
211
|
+
//An ancestor deleted (or replaced by a file) by this layer hides the path in the lower layers
|
|
212
|
+
for (let length = 1; length < parts.length; length++) {
|
|
213
|
+
const ancestor = await this.stat(node_path_1.default.join(layer, ...parts.slice(0, length)));
|
|
214
|
+
if (ancestor && (isWhiteout(ancestor) || !ancestor.isDirectory()))
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
const real = node_path_1.default.join(layer, ...parts);
|
|
218
|
+
const stats = await this.stat(real);
|
|
219
|
+
if (!stats)
|
|
220
|
+
continue;
|
|
221
|
+
return isWhiteout(stats) ? undefined : { stats: stats, path: real };
|
|
222
|
+
}
|
|
223
|
+
return undefined;
|
|
224
|
+
}
|
|
225
|
+
async readdir(directory) {
|
|
226
|
+
const parts = node_path_1.default.posix.normalize(`/${directory}`).split('/').filter(Boolean);
|
|
227
|
+
const names = new Map();
|
|
228
|
+
for (const layer of this.layers) {
|
|
229
|
+
const stats = await this.stat(node_path_1.default.join(layer, ...parts));
|
|
230
|
+
if (!stats)
|
|
231
|
+
continue;
|
|
232
|
+
//Deleted or replaced by this layer: the lower layers are hidden
|
|
233
|
+
if (!stats.isDirectory())
|
|
234
|
+
break;
|
|
235
|
+
for (const name of await (0, promises_1.readdir)(node_path_1.default.join(layer, ...parts))) {
|
|
236
|
+
if (names.has(name))
|
|
237
|
+
continue;
|
|
238
|
+
const entry = await this.stat(node_path_1.default.join(layer, ...parts, name));
|
|
239
|
+
names.set(name, !!entry && !isWhiteout(entry));
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return [...names].filter(([, present]) => present).map(([name]) => name).sort();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
exports.LayersTree = LayersTree;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A rule of a profile of seccomp (OCI)
|
|
3
|
+
*/
|
|
4
|
+
export type SeccompSyscall = {
|
|
5
|
+
names: string[];
|
|
6
|
+
action: string;
|
|
7
|
+
errnoRet?: number;
|
|
8
|
+
args?: {
|
|
9
|
+
index: number;
|
|
10
|
+
value: number;
|
|
11
|
+
valueTwo?: number;
|
|
12
|
+
op: string;
|
|
13
|
+
}[];
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A profile of seccomp (the linux.seccomp of the specification of OCI)
|
|
17
|
+
*/
|
|
18
|
+
export type SeccompProfile = {
|
|
19
|
+
defaultAction: string;
|
|
20
|
+
defaultErrnoRet?: number;
|
|
21
|
+
architectures?: string[];
|
|
22
|
+
flags?: string[];
|
|
23
|
+
syscalls?: SeccompSyscall[];
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Whether the kernel filters the system calls (the Seccomp field of the status of the processes)
|
|
27
|
+
* @param status the status of a process
|
|
28
|
+
*/
|
|
29
|
+
export declare function seccompSupported(status?: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* The default profile of seccomp of a container, by its capabilities (its bounding set)
|
|
32
|
+
* @param capabilities
|
|
33
|
+
* @param arch the architecture of the machine, as Node.js names it
|
|
34
|
+
* @param kernel the release of its kernel
|
|
35
|
+
*/
|
|
36
|
+
export declare function defaultSeccompProfile(capabilities: string[], arch?: string, kernel?: string): SeccompProfile;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.seccompSupported = seccompSupported;
|
|
4
|
+
exports.defaultSeccompProfile = defaultSeccompProfile;
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_os_1 = require("node:os");
|
|
7
|
+
const ALLOWED = [
|
|
8
|
+
'accept', 'accept4', 'access', 'adjtimex', 'alarm', 'bind', 'brk', 'cachestat', 'capget', 'capset', 'chdir', 'chmod',
|
|
9
|
+
'chown', 'chown32', 'clock_adjtime', 'clock_adjtime64', 'clock_getres', 'clock_getres_time64', 'clock_gettime',
|
|
10
|
+
'clock_gettime64', 'clock_nanosleep', 'clock_nanosleep_time64', 'close', 'close_range', 'connect', 'copy_file_range',
|
|
11
|
+
'creat', 'dup', 'dup2', 'dup3', 'epoll_create', 'epoll_create1', 'epoll_ctl', 'epoll_ctl_old', 'epoll_pwait',
|
|
12
|
+
'epoll_pwait2', 'epoll_wait', 'epoll_wait_old', 'eventfd', 'eventfd2', 'execve', 'execveat', 'exit', 'exit_group',
|
|
13
|
+
'faccessat', 'faccessat2', 'fadvise64', 'fadvise64_64', 'fallocate', 'fanotify_mark', 'fchdir', 'fchmod', 'fchmodat',
|
|
14
|
+
'fchmodat2', 'fchown', 'fchown32', 'fchownat', 'fcntl', 'fcntl64', 'fdatasync', 'fgetxattr', 'flistxattr', 'flock',
|
|
15
|
+
'fork', 'fremovexattr', 'fsetxattr', 'fstat', 'fstat64', 'fstatat64', 'fstatfs', 'fstatfs64', 'fsync', 'ftruncate',
|
|
16
|
+
'ftruncate64', 'futex', 'futex_requeue', 'futex_time64', 'futex_wait', 'futex_waitv', 'futex_wake', 'futimesat',
|
|
17
|
+
'getcpu', 'getcwd', 'getdents', 'getdents64', 'getegid', 'getegid32', 'geteuid', 'geteuid32', 'getgid', 'getgid32',
|
|
18
|
+
'getgroups', 'getgroups32', 'getitimer', 'getpeername', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getpriority',
|
|
19
|
+
'getrandom', 'getresgid', 'getresgid32', 'getresuid', 'getresuid32', 'getrlimit', 'get_robust_list', 'getrusage',
|
|
20
|
+
'getsid', 'getsockname', 'getsockopt', 'get_thread_area', 'gettid', 'gettimeofday', 'getuid', 'getuid32', 'getxattr',
|
|
21
|
+
'inotify_add_watch', 'inotify_init', 'inotify_init1', 'inotify_rm_watch', 'io_cancel', 'ioctl', 'io_destroy',
|
|
22
|
+
'io_getevents', 'io_pgetevents', 'io_pgetevents_time64', 'ioprio_get', 'ioprio_set', 'io_setup', 'io_submit',
|
|
23
|
+
'io_uring_enter', 'io_uring_register', 'io_uring_setup', 'ipc', 'kill', 'landlock_add_rule', 'landlock_create_ruleset',
|
|
24
|
+
'landlock_restrict_self', 'lchown', 'lchown32', 'lgetxattr', 'link', 'linkat', 'listen', 'listxattr', 'llistxattr',
|
|
25
|
+
'_llseek', 'lremovexattr', 'lseek', 'lsetxattr', 'lstat', 'lstat64', 'madvise', 'membarrier', 'memfd_create',
|
|
26
|
+
'memfd_secret', 'mincore', 'mkdir', 'mkdirat', 'mknod', 'mknodat', 'mlock', 'mlock2', 'mlockall', 'map_shadow_stack',
|
|
27
|
+
'mmap', 'mmap2', 'mprotect', 'mq_getsetattr', 'mq_notify', 'mq_open', 'mq_timedreceive', 'mq_timedreceive_time64',
|
|
28
|
+
'mq_timedsend', 'mq_timedsend_time64', 'mq_unlink', 'mremap', 'msgctl', 'msgget', 'msgrcv', 'msgsnd', 'msync',
|
|
29
|
+
'munlock', 'munlockall', 'munmap', 'name_to_handle_at', 'nanosleep', 'newfstatat', '_newselect', 'open', 'openat',
|
|
30
|
+
'openat2', 'pause', 'pidfd_open', 'pidfd_send_signal', 'pipe', 'pipe2', 'pkey_alloc', 'pkey_free', 'pkey_mprotect',
|
|
31
|
+
'poll', 'ppoll', 'ppoll_time64', 'prctl', 'pread64', 'preadv', 'preadv2', 'prlimit64', 'process_mrelease', 'pselect6',
|
|
32
|
+
'pselect6_time64', 'pwrite64', 'pwritev', 'pwritev2', 'read', 'readahead', 'readlink', 'readlinkat', 'readv', 'recv',
|
|
33
|
+
'recvfrom', 'recvmmsg', 'recvmmsg_time64', 'recvmsg', 'remap_file_pages', 'removexattr', 'rename', 'renameat',
|
|
34
|
+
'renameat2', 'restart_syscall', 'rmdir', 'rseq', 'rt_sigaction', 'rt_sigpending', 'rt_sigprocmask', 'rt_sigqueueinfo',
|
|
35
|
+
'rt_sigreturn', 'rt_sigsuspend', 'rt_sigtimedwait', 'rt_sigtimedwait_time64', 'rt_tgsigqueueinfo', 'sched_getaffinity',
|
|
36
|
+
'sched_getattr', 'sched_getparam', 'sched_get_priority_max', 'sched_get_priority_min', 'sched_getscheduler',
|
|
37
|
+
'sched_rr_get_interval', 'sched_rr_get_interval_time64', 'sched_setaffinity', 'sched_setattr', 'sched_setparam',
|
|
38
|
+
'sched_setscheduler', 'sched_yield', 'seccomp', 'select', 'semctl', 'semget', 'semop', 'semtimedop',
|
|
39
|
+
'semtimedop_time64', 'send', 'sendfile', 'sendfile64', 'sendmmsg', 'sendmsg', 'sendto', 'setfsgid', 'setfsgid32',
|
|
40
|
+
'setfsuid', 'setfsuid32', 'setgid', 'setgid32', 'setgroups', 'setgroups32', 'setitimer', 'setpgid', 'setpriority',
|
|
41
|
+
'setregid', 'setregid32', 'setresgid', 'setresgid32', 'setresuid', 'setresuid32', 'setreuid', 'setreuid32',
|
|
42
|
+
'setrlimit', 'set_robust_list', 'setsid', 'setsockopt', 'set_thread_area', 'set_tid_address', 'setuid', 'setuid32',
|
|
43
|
+
'setxattr', 'shmat', 'shmctl', 'shmdt', 'shmget', 'shutdown', 'sigaltstack', 'signalfd', 'signalfd4', 'sigprocmask',
|
|
44
|
+
'sigreturn', 'socketcall', 'socketpair', 'splice', 'stat', 'stat64', 'statfs', 'statfs64', 'statx', 'symlink',
|
|
45
|
+
'symlinkat', 'sync', 'sync_file_range', 'syncfs', 'sysinfo', 'tee', 'tgkill', 'time', 'timer_create', 'timer_delete',
|
|
46
|
+
'timer_getoverrun', 'timer_gettime', 'timer_gettime64', 'timer_settime', 'timer_settime64', 'timerfd_create',
|
|
47
|
+
'timerfd_gettime', 'timerfd_gettime64', 'timerfd_settime', 'timerfd_settime64', 'times', 'tkill', 'truncate',
|
|
48
|
+
'truncate64', 'ugetrlimit', 'umask', 'uname', 'unlink', 'unlinkat', 'utime', 'utimensat', 'utimensat_time64', 'utimes',
|
|
49
|
+
'vfork', 'vmsplice', 'wait4', 'waitid', 'waitpid', 'write', 'writev'
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* The architectures of the system calls filtered, by the architecture of the machine (the emulated containers run its
|
|
53
|
+
* system calls: their emulators are processes of the machine)
|
|
54
|
+
*/
|
|
55
|
+
const ARCHITECTURES = {
|
|
56
|
+
x64: ['SCMP_ARCH_X86_64', 'SCMP_ARCH_X86', 'SCMP_ARCH_X32'],
|
|
57
|
+
arm64: ['SCMP_ARCH_ARM', 'SCMP_ARCH_AARCH64'],
|
|
58
|
+
mips64: ['SCMP_ARCH_MIPS', 'SCMP_ARCH_MIPS64', 'SCMP_ARCH_MIPS64N32'],
|
|
59
|
+
mips64el: ['SCMP_ARCH_MIPSEL', 'SCMP_ARCH_MIPSEL64', 'SCMP_ARCH_MIPSEL64N32'],
|
|
60
|
+
s390x: ['SCMP_ARCH_S390', 'SCMP_ARCH_S390X'],
|
|
61
|
+
riscv64: ['SCMP_ARCH_RISCV64']
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* The system calls of the architectures of the machine
|
|
65
|
+
*/
|
|
66
|
+
const ARCHITECTURE_SYSCALLS = {
|
|
67
|
+
ppc64: ['sync_file_range2', 'swapcontext'],
|
|
68
|
+
arm: ['arm_fadvise64_64', 'arm_sync_file_range', 'sync_file_range2', 'breakpoint', 'cacheflush', 'set_tls'],
|
|
69
|
+
arm64: ['arm_fadvise64_64', 'arm_sync_file_range', 'sync_file_range2', 'breakpoint', 'cacheflush', 'set_tls'],
|
|
70
|
+
x64: ['arch_prctl', 'modify_ldt'],
|
|
71
|
+
ia32: ['modify_ldt'],
|
|
72
|
+
s390x: ['s390_pci_mmio_read', 's390_pci_mmio_write', 's390_runtime_instr'],
|
|
73
|
+
riscv64: ['riscv_flush_icache']
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* The system calls allowed with the capabilities
|
|
77
|
+
*/
|
|
78
|
+
const CAPABILITY_SYSCALLS = {
|
|
79
|
+
CAP_DAC_READ_SEARCH: ['open_by_handle_at'],
|
|
80
|
+
CAP_SYS_ADMIN: [
|
|
81
|
+
'bpf', 'clone', 'clone3', 'fanotify_init', 'fsconfig', 'fsmount', 'fsopen', 'fspick', 'lookup_dcookie', 'mount',
|
|
82
|
+
'mount_setattr', 'move_mount', 'open_tree', 'perf_event_open', 'quotactl', 'quotactl_fd', 'setdomainname',
|
|
83
|
+
'sethostname', 'setns', 'syslog', 'umount', 'umount2', 'unshare'
|
|
84
|
+
],
|
|
85
|
+
CAP_SYS_BOOT: ['reboot'],
|
|
86
|
+
CAP_SYS_CHROOT: ['chroot'],
|
|
87
|
+
CAP_SYS_MODULE: ['delete_module', 'init_module', 'finit_module'],
|
|
88
|
+
CAP_SYS_PACCT: ['acct'],
|
|
89
|
+
CAP_SYS_PTRACE: ['kcmp', 'pidfd_getfd', 'process_madvise', 'process_vm_readv', 'process_vm_writev', 'ptrace'],
|
|
90
|
+
CAP_SYS_RAWIO: ['iopl', 'ioperm'],
|
|
91
|
+
CAP_SYS_TIME: ['settimeofday', 'stime', 'clock_settime', 'clock_settime64'],
|
|
92
|
+
CAP_SYS_TTY_CONFIG: ['vhangup'],
|
|
93
|
+
CAP_SYS_NICE: ['get_mempolicy', 'mbind', 'set_mempolicy', 'set_mempolicy_home_node'],
|
|
94
|
+
CAP_SYSLOG: ['syslog'],
|
|
95
|
+
CAP_BPF: ['bpf'],
|
|
96
|
+
CAP_PERFMON: ['perf_event_open']
|
|
97
|
+
};
|
|
98
|
+
const AF_VSOCK = 40;
|
|
99
|
+
const ENOSYS = 38;
|
|
100
|
+
/**
|
|
101
|
+
* The flags of clone creating namespaces (NEWNS, NEWUTS, NEWIPC, NEWUSER, NEWPID, NEWNET, NEWCGROUP)
|
|
102
|
+
*/
|
|
103
|
+
const CLONE_NAMESPACES = 0x00020000 | 0x04000000 | 0x08000000 | 0x10000000 | 0x20000000 | 0x40000000 | 0x02000000;
|
|
104
|
+
/**
|
|
105
|
+
* Whether a release of Linux (6.1.0-13-arm64) is at least a version
|
|
106
|
+
* @param kernel
|
|
107
|
+
* @param major
|
|
108
|
+
* @param minor
|
|
109
|
+
*/
|
|
110
|
+
function kernelAtLeast(kernel, major, minor) {
|
|
111
|
+
const match = kernel.match(/^(\d+)\.(\d+)/);
|
|
112
|
+
if (!match)
|
|
113
|
+
return false;
|
|
114
|
+
return Number(match[1]) > major || (Number(match[1]) === major && Number(match[2]) >= minor);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Whether the kernel filters the system calls (the Seccomp field of the status of the processes)
|
|
118
|
+
* @param status the status of a process
|
|
119
|
+
*/
|
|
120
|
+
function seccompSupported(status) {
|
|
121
|
+
try {
|
|
122
|
+
return /^Seccomp:/m.test(status ?? (0, node_fs_1.readFileSync)('/proc/self/status', 'utf8'));
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* The default profile of seccomp of a container, by its capabilities (its bounding set)
|
|
130
|
+
* @param capabilities
|
|
131
|
+
* @param arch the architecture of the machine, as Node.js names it
|
|
132
|
+
* @param kernel the release of its kernel
|
|
133
|
+
*/
|
|
134
|
+
function defaultSeccompProfile(capabilities, arch = process.arch, kernel = (0, node_os_1.release)()) {
|
|
135
|
+
const allow = (names, args) => ({ names: names, action: 'SCMP_ACT_ALLOW', args: args ?? [] });
|
|
136
|
+
const syscalls = [
|
|
137
|
+
allow([...ALLOWED]),
|
|
138
|
+
allow(['socket'], [{ index: 0, value: AF_VSOCK, op: 'SCMP_CMP_NE' }]),
|
|
139
|
+
...[0x0, 0x0008, 0x20000, 0x20008, 0xffffffff].map((value) => allow(['personality'], [{ index: 0, value: value, op: 'SCMP_CMP_EQ' }]))
|
|
140
|
+
];
|
|
141
|
+
if (kernelAtLeast(kernel, 4, 8))
|
|
142
|
+
syscalls.push(allow(['process_vm_readv', 'process_vm_writev', 'ptrace']));
|
|
143
|
+
if (ARCHITECTURE_SYSCALLS[arch])
|
|
144
|
+
syscalls.push(allow([...ARCHITECTURE_SYSCALLS[arch]]));
|
|
145
|
+
for (const capability of capabilities) {
|
|
146
|
+
if (CAPABILITY_SYSCALLS[capability])
|
|
147
|
+
syscalls.push(allow([...CAPABILITY_SYSCALLS[capability]]));
|
|
148
|
+
}
|
|
149
|
+
if (!capabilities.includes('CAP_SYS_ADMIN')) {
|
|
150
|
+
//clone without the flags creating namespaces (its second argument on s390x)
|
|
151
|
+
syscalls.push(allow(['clone'], [{ index: arch === 's390x' ? 1 : 0, value: CLONE_NAMESPACES, valueTwo: 0, op: 'SCMP_CMP_MASKED_EQ' }]));
|
|
152
|
+
//clone3 refused with ENOSYS: the C libraries fall back to clone
|
|
153
|
+
syscalls.push({ names: ['clone3'], action: 'SCMP_ACT_ERRNO', errnoRet: ENOSYS });
|
|
154
|
+
}
|
|
155
|
+
return { defaultAction: 'SCMP_ACT_ERRNO', architectures: [...ARCHITECTURES[arch] ?? []], syscalls: syscalls };
|
|
156
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import type { SeccompProfile } from './Seccomp.js';
|
|
2
|
+
/**
|
|
3
|
+
* The capabilities of the containers by default (the ones of containerd, Docker and nerdctl)
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_CAPABILITIES: readonly string[];
|
|
6
|
+
/**
|
|
7
|
+
* All the capabilities of Linux (the privileged containers)
|
|
8
|
+
*/
|
|
9
|
+
export declare const ALL_CAPABILITIES: readonly string[];
|
|
10
|
+
/**
|
|
11
|
+
* A bind mount of a container
|
|
12
|
+
*/
|
|
13
|
+
export type SpecMount = {
|
|
14
|
+
type?: string;
|
|
15
|
+
source: string;
|
|
16
|
+
destination: string;
|
|
17
|
+
options?: string[];
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* A device of the host given to a container
|
|
21
|
+
*/
|
|
22
|
+
export type SpecDevice = {
|
|
23
|
+
path: string;
|
|
24
|
+
containerPath: string;
|
|
25
|
+
type: 'c' | 'b';
|
|
26
|
+
major: number;
|
|
27
|
+
minor: number;
|
|
28
|
+
fileMode?: number;
|
|
29
|
+
uid?: number;
|
|
30
|
+
gid?: number;
|
|
31
|
+
permissions: string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* A rule of the devices of the cgroup of a container: the devices of a type (a: all), of a major and a minor number
|
|
35
|
+
* (all when they are not given), and their access (r, w, m)
|
|
36
|
+
*/
|
|
37
|
+
export type DeviceCgroupRule = {
|
|
38
|
+
type: 'a' | 'c' | 'b';
|
|
39
|
+
major?: number;
|
|
40
|
+
minor?: number;
|
|
41
|
+
access: string;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Parse a rule of the devices of a cgroup as Docker writes it: "c 188:* rwm", "b 8:16 r", "a *:* rwm"
|
|
45
|
+
* @param rule
|
|
46
|
+
*/
|
|
47
|
+
export declare function parseDeviceCgroupRule(rule: string): DeviceCgroupRule;
|
|
48
|
+
/**
|
|
49
|
+
* The options of the specification of a container
|
|
50
|
+
*/
|
|
51
|
+
export type SpecOptions = {
|
|
52
|
+
id: string;
|
|
53
|
+
namespace: string;
|
|
54
|
+
args: string[];
|
|
55
|
+
env: string[];
|
|
56
|
+
cwd: string;
|
|
57
|
+
uid: number;
|
|
58
|
+
gid: number;
|
|
59
|
+
additionalGids: number[];
|
|
60
|
+
hostname: string;
|
|
61
|
+
terminal?: boolean;
|
|
62
|
+
privileged?: boolean;
|
|
63
|
+
readonlyRootfs?: boolean;
|
|
64
|
+
capAdd?: string[];
|
|
65
|
+
capDrop?: string[];
|
|
66
|
+
mounts?: SpecMount[];
|
|
67
|
+
devices?: SpecDevice[];
|
|
68
|
+
/**
|
|
69
|
+
* The devices the cgroup allows besides the ones given (the ones plugged later, by a bind mount of /dev)
|
|
70
|
+
*/
|
|
71
|
+
deviceCgroupRules?: DeviceCgroupRule[];
|
|
72
|
+
/**
|
|
73
|
+
* The network: the one of the host, or a namespace of its own (only its loopback, or the path of the one prepared)
|
|
74
|
+
*/
|
|
75
|
+
network: {
|
|
76
|
+
mode: 'host';
|
|
77
|
+
} | {
|
|
78
|
+
mode: 'none';
|
|
79
|
+
} | {
|
|
80
|
+
mode: 'path';
|
|
81
|
+
path: string;
|
|
82
|
+
} | {
|
|
83
|
+
mode: 'cni';
|
|
84
|
+
};
|
|
85
|
+
pidHost?: boolean;
|
|
86
|
+
ipcHost?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* A cgroup namespace of its own (the private one of Docker and nerdctl on cgroup v2): its cgroup is the root of its
|
|
89
|
+
* /sys/fs/cgroup
|
|
90
|
+
*/
|
|
91
|
+
cgroupNamespace?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* The path of the cgroup (/default/id with cgroupfs, system.slice:lakutata:id with systemd)
|
|
94
|
+
*/
|
|
95
|
+
cgroupsPath: string;
|
|
96
|
+
memory?: number;
|
|
97
|
+
memorySwap?: number;
|
|
98
|
+
cpuQuota?: number;
|
|
99
|
+
cpuPeriod?: number;
|
|
100
|
+
cpuShares?: number;
|
|
101
|
+
cpuset?: string;
|
|
102
|
+
pidsLimit?: number;
|
|
103
|
+
oomKillDisable?: boolean;
|
|
104
|
+
sysctls?: Record<string, string>;
|
|
105
|
+
shmSize?: number;
|
|
106
|
+
rlimits?: {
|
|
107
|
+
type: string;
|
|
108
|
+
hard: number;
|
|
109
|
+
soft: number;
|
|
110
|
+
}[];
|
|
111
|
+
annotations?: Record<string, string>;
|
|
112
|
+
/**
|
|
113
|
+
* The profile of seccomp of the processes (none: unconfined)
|
|
114
|
+
*/
|
|
115
|
+
seccomp?: SeccompProfile;
|
|
116
|
+
/**
|
|
117
|
+
* The hooks of the runtime (createRuntime, poststop…)
|
|
118
|
+
*/
|
|
119
|
+
hooks?: Record<string, {
|
|
120
|
+
path: string;
|
|
121
|
+
args?: string[];
|
|
122
|
+
env?: string[];
|
|
123
|
+
timeout?: number;
|
|
124
|
+
}[]>;
|
|
125
|
+
};
|
|
126
|
+
/**
|
|
127
|
+
* The capabilities of a container: the ones by default (all for the privileged containers), the ones added, without
|
|
128
|
+
* the ones dropped (ALL drops all)
|
|
129
|
+
* @param options
|
|
130
|
+
*/
|
|
131
|
+
export declare function containerCapabilities(options: Pick<SpecOptions, 'privileged' | 'capAdd' | 'capDrop'>): string[];
|
|
132
|
+
/**
|
|
133
|
+
* The specification of the runtime (OCI) of a container on Linux, as containerd and nerdctl generate it
|
|
134
|
+
* @param options
|
|
135
|
+
*/
|
|
136
|
+
export declare function generateSpec(options: SpecOptions): Record<string, any>;
|
|
137
|
+
/**
|
|
138
|
+
* The specification of a process executed in a container (exec): the one of the container, its arguments, its
|
|
139
|
+
* environment, its directory, its user and its terminal changed
|
|
140
|
+
* @param spec the specification of the container
|
|
141
|
+
* @param options
|
|
142
|
+
*/
|
|
143
|
+
export declare function execProcessSpec(spec: Record<string, any>, options: {
|
|
144
|
+
args: string[];
|
|
145
|
+
env?: string[];
|
|
146
|
+
cwd?: string;
|
|
147
|
+
uid?: number;
|
|
148
|
+
gid?: number;
|
|
149
|
+
additionalGids?: number[];
|
|
150
|
+
terminal?: boolean;
|
|
151
|
+
}): Record<string, any>;
|