Closed6
ttl.sh へ Dev Container の feature などを push してみる
oras を試しているときに ttl.sh の存在を知る。
匿名で Container の image を push pull できるサービスらしい
-
保存期間が 1 時間から最大で 24 時間特定のフォーマットでないと存在し続ける - pull が速いらしい
イメージ名に guid などを使うことでアクセス制限的なことを行えるとしている(Google Drive のアドレスを知ってる人は 書き込み可能権限 でアクセスできるのと似た状態になる)。
OCI Artifact で試してみる
oras cli で push と pull ができるか?
push
$ IMAGE=$(uuidgen)
$ oras push "ttl.sh/${IMAGE}:1h" cover_image43.jpg:iamge/jpeg
Uploading b337e09356cb cover_image43.jpg
Uploaded b337e09356cb cover_image43.jpg
Pushed [registry] ttl.sh/xxxxxx-xxxx-xxxx-84bb-0ff4d78a5a86:1h
Digest: sha256:c969b655ddd498871e5bae46b4654ee7140f5c8afd118163942addb538eee834
pull
$ mkdir chk
$ cd chk/
$ oras pull ttl.sh/xxxxxx-xxxx-xxxx-84bb-0ff4d78a5a86:1h
Downloading b337e09356cb cover_image43.jpg
Downloaded b337e09356cb cover_image43.jpg
Pulled [registry] ttl.sh/xxxxxx-xxxx-xxxx-84bb-0ff4d78a5a86:1h
Digest: sha256:c969b655ddd498871e5bae46b4654ee7140f5c8afd118163942addb538eee834
$ sha256sum -c <(sha256sum ../cover_image43.jpg | sed -e "s/..\\//.\\//")
./cover_image43.jpg: OK
ということで OCI artifact でも利用できる。
Dev Containers の Features で利用してみる
テンプレートだと、publish するまでは registry からのインストールを試すことができないのでどうしたものかなと思っていた。利用できならば結構うれしいかも。
devcontainer-cli で publish
$ NAMESPACE=$(uuidgen)
$ echo $NAMESPACE
xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e
$ devcontainer features publish --registry ttl.sh --namespace "${NAMESPACE}" src/github-copilot-cli
[1 ms] @devcontainers/cli 0.29.0. Node.js v16.17.0. linux 5.15.63 x64.
[1 ms] Packaging single feature...
[22 ms] Packaged feature 'github-copilot-cli'
[25 ms] Processing feature: github-copilot-cli...
[25 ms] Fetching published versions...
[340 ms] Publishing versions: 1,1.1,1.1.0,latest...
[342 ms] sha256:89e328476e6c442338add33318394b1a5d85506193dec5d89c885584301949c3 (size: 8192)
[342 ms] Computed Content-Digest -> sha256:d774d766b19cb6e8e8bfd12c612cf3707d7afa76d7614b58425e840fef7d87ec (size: 64)
[1686 ms] Starting PUT of configLayer blob 'sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' (size=0)
[4467 ms] Starting PUT of tgzLayer blob 'sha256:89e328476e6c442338add33318394b1a5d85506193dec5d89c885584301949c3' (size=8192)
[7741 ms] Tagged: 1 -> https://ttl.sh/v2/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli/manifests/sha256:d774d766b19cb6e8e8bfd12c612cf3707d7afa76d7614b58425e840fef7d87ec
[8734 ms] Tagged: 1.1 -> https://ttl.sh/v2/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli/manifests/sha256:d774d766b19cb6e8e8bfd12c612cf3707d7afa76d7614b58425e840fef7d87ec
[9691 ms] Tagged: 1.1.0 -> https://ttl.sh/v2/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli/manifests/sha256:d774d766b19cb6e8e8bfd12c612cf3707d7afa76d7614b58425e840fef7d87ec
[10680 ms] Tagged: latest -> https://ttl.sh/v2/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli/manifests/sha256:d774d766b19cb6e8e8bfd12c612cf3707d7afa76d7614b58425e840fef7d87ec
[10680 ms] Published feature: 'github-copilot-cli'
[10680 ms] Publishing collection metadata...
[10681 ms] sha256:da1fb234cc33f977fae649b619b1e749939bb8141754263b29b4c6996f73c0c7 (size: 1063)
[10681 ms] Computed Content-Digest -> sha256:ed461f07f4e6797015f3b3448e9236398054b38f2957b31458734472b3563577 (size: 64)
[11961 ms] Starting PUT of configLayer blob 'sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855' (size=0)
[14710 ms] Starting PUT of collectionLayer blob 'sha256:da1fb234cc33f977fae649b619b1e749939bb8141754263b29b4c6996f73c0c7' (size=1063)
[17959 ms] Tagged: latest -> https://ttl.sh/v2/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/manifests/sha256:ed461f07f4e6797015f3b3448e9236398054b38f2957b31458734472b3563577
[17959 ms] Published collection metadata.
{"github-copilot-cli":{"publishedVersions":["1","1.1","1.1.0","latest"],"digest":"d774d766b19cb6e8e8bfd12c612cf3707d7afa76d7614b58425e840fef7d87ec","version":"1.1.0"}}
pull
$ oras pull ttl.sh/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli:latest
Downloading 89e328476e6c devcontainer-feature-github-copilot-cli.tgz
Downloaded 89e328476e6c devcontainer-feature-github-copilot-cli.tgz
Pulled [registry] ttl.sh/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli:latest
Digest: sha256:d774d766b19cb6e8e8bfd12c612cf3707d7afa76d7614b58425e840fef7d87ec
$ tar -tf devcontainer-feature-github-copilot-cli.tgz
./
./README.md
./devcontainer-feature.json
./helper-gh-copilot-cli.sh
./install.sh
manifest
$ oras manifest fetch ttl.sh/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli:latest| jq
{
"schemaVersion": 2,
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"config": {
"mediaType": "application/vnd.devcontainers",
"digest": "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"size": 0
},
"layers": [
{
"mediaType": "application/vnd.devcontainers.layer.v1+tar",
"digest": "sha256:89e328476e6c442338add33318394b1a5d85506193dec5d89c885584301949c3",
"size": 8192,
"annotations": {
"org.opencontainers.image.title": "devcontainer-feature-github-copilot-cli.tgz"
}
}
]
}
VSCode で利用(Dev Containers 拡張機能のデフォルトの features へ指定)
{
"features": {
"ttl.sh/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli:1": {
"helper": true
}
},
}
ログ
[2/2] STEP 6/10: RUN --mount=type=bind,from=dev_containers_feature_content_source,source=github-copilot-cli_1,target=/tmp/build-features-src/github-copilot-cli_1 cp -ar /tmp/build-features-src/github-copilot-cli_1 /tmp/dev-container-features && chmod -R 0755 /tmp/dev-container-features/github-copilot-cli_1 && cd /tmp/dev-container-features/github-copilot-cli_1 && chmod +x ./devcontainer-features-install.sh && ./devcontainer-features-install.sh && rm -rf /tmp/dev-container-features/github-copilot-cli_1
===========================================================================
Feature : @githubnext/github-copilot-cli (via npm)
Description : Install the @githubnext/github-copilot-cli package via NPM registry
Id : ttl.sh/xxxxxxxx-xxxx-xxxx-ae28-d285a3dfbb7e/github-copilot-cli
Version : 1.1.0
Documentation :
Options :
VERSION="latest"
HELPER="true"
===========================================================================
Installing npm package: @githubnext/github-copilot-cli@latest
npm WARN tar TAR_ENTRY_ERROR EINVAL: invalid argument, fchown
npm WARN tar TAR_ENTRY_ERROR EINVAL: invalid argument, fchown
npm WARN tar TAR_ENTRY_ERROR EINVAL: invalid argument, fchown
npm WARN tar TAR_ENTRY_ERROR EINVAL: invalid argument, fchown
npm WARN deprecated @opentelemetry/api-metrics@0.33.0: Please use @opentelemetry/api >= 1.3.0
added 232 packages in 21s
47 packages are looking for funding
run `npm fund` for details
Installing helper script: helper-gh-copilot-cli.sh
インストールされている。
とくに問題なく利用できている。
ちょっと気になるのはタグが 1h
のようにできないこと。24 時間で消えるはずだが、1
や latest
で問題おきないかというのはある。
24 時間経過しても消えなかった。念のためさらに 12 時間まったが消えなかった。調べてみたら、特定のフォーマットでないと消えないという issue が結構前から出来ていた。
このスクラップは2023/04/11にクローズされました