From ead6065ca83b7164ef2b8911539a8657c951f86a Mon Sep 17 00:00:00 2001 From: Padraig O'Connor Date: Mon, 30 Mar 2026 15:47:53 +0100 Subject: [PATCH 1/6] initial draft --- src/content/formats/alpine-repository.mdx | 260 ++++++++++++++++--- src/content/repositories/upstreams/index.mdx | 35 ++- 2 files changed, 253 insertions(+), 42 deletions(-) diff --git a/src/content/formats/alpine-repository.mdx b/src/content/formats/alpine-repository.mdx index 87d5b749..8cd1c61e 100644 --- a/src/content/formats/alpine-repository.mdx +++ b/src/content/formats/alpine-repository.mdx @@ -5,26 +5,39 @@ import { Tag, Note, Video } from '@/components'; -Alpine Linux is a lightweight Linux Distribution that is designed to be smaller and more resource efficient, and as such has grown popular as the basis for Docker containers. +Cloudsmith supports hosting and distributing packages in the APK format, used by both **Alpine Linux** and **Wolfi**. Although both distributions use the same package format, they are distinct and incompatible — packages built for Alpine Linux cannot be used on Wolfi, and vice versa. -For more information on Alpine, please see: +- **Alpine Linux** is a lightweight Linux distribution popular as a Docker container base image. It uses versioned releases (e.g., v3.20, v3.21) and the `apk` package manager. +- **Wolfi** is a minimal, container-optimized Linux distribution from Chainguard. Unlike Alpine, it follows a rolling release model with no versioned releases. -- [Alpine Linux](https://alpinelinux.org/): The official website for Alpine Linux -- [Alpine Linux Wiki](https://wiki.alpinelinux.org): The official wiki for Alpine Linux +For more information, see: + +- [Alpine Linux](https://alpinelinux.org/) — official Alpine Linux website +- [Alpine Linux Wiki](https://wiki.alpinelinux.org) — Alpine Linux documentation +- [Wolfi OS](https://wolfi.dev/) — official Wolfi website + +## What Cloudsmith Supports + +Cloudsmith repositories for the Alpine format support: + +- **Public and private package hosting** — serve APK packages to authenticated users or publicly +- **RSA signing** — all repositories are signed with an RSA key that clients can verify via `apk` +- **Upstream proxying and caching** — proxy and cache packages from Alpine Linux mirrors, Wolfi, or Chainguard (see [Upstream Proxying / Caching](#upstream-proxying--caching)) +- **Both Alpine Linux and Wolfi** — a single repository format handles both distributions; the distribution is selected at upload time and automatically detected at install time The examples in this document are generic. Cloudsmith provides contextual setup instructions within each repository, complete with copy and paste snippets (with your namespace/repo/rsa-key pre-configured). -In the following examples: +In the following examples: | Identifier | Description | | :-------------- | :------------------------------------------------------------------------------------------------------------------------------ | | OWNER | Your Cloudsmith account name or organization name (namespace) | | REPOSITORY | Your Cloudsmith Repository name (also called "slug") | -| VERSION | Alpine distribution version, i.e. v3.8. You can also use "any-version" if your package is compatible with more than one version | -| FINGERPRINT | the 8 Byte fingerprint of the Public RSA key for the repository | -| TOKEN | Your Cloudsmith Entitlement Token (see [Entitlements](/software-distribution/entitlement-tokens) for more details) | +| VERSION | Alpine distribution version, e.g. `v3.21`. Use `any-version` if your package is compatible with more than one version | +| FINGERPRINT | The 8-byte fingerprint of the public RSA key for the repository | +| TOKEN | Your Cloudsmith Entitlement Token (see [Entitlements](/software-distribution/entitlement-tokens) for more details) | | USERNAME | Your Cloudsmith username | | PASSWORD | Your Cloudsmith password | | API-KEY | Your Cloudsmith API Key | @@ -37,39 +50,65 @@ In the following examples: For full details of how to install and setup the Cloudsmith CLI, see [Command Line Interface](/developer-tools/cli). -The command to upload an Alpine package via the Cloudsmith CLI is: +#### Alpine Linux + +The command to upload an Alpine Linux package is: ```shell cloudsmith push alpine OWNER/REPOSITORY/alpine/VERSION PACKAGE_NAME-PACKAGE_VERSION.apk ``` -Example: Upload a package for Alpine v3.8 +Upload a package for Alpine v3.21: ```shell -cloudsmith push alpine org/repo/alpine/v3.8 libjq-1.0.3.apk +cloudsmith push alpine org/repo/alpine/v3.21 libjq-1.0.3.apk ``` -Example: Upload a package for any version of Alpine +Upload a package compatible with any Alpine version: ```shell cloudsmith push alpine org/repo/alpine/any-version libjq-1.0.3.apk ``` +#### Wolfi + +Wolfi has no versioned releases. All Wolfi packages use `any-version`: + +```shell +cloudsmith push alpine OWNER/REPOSITORY/wolfi/any-version PACKAGE_NAME-PACKAGE_VERSION.apk +``` + +Example: + +```shell +cloudsmith push alpine org/repo/wolfi/any-version glibc-2.38-r1.apk +``` + ### Upload via Cloudsmith Website Please see [Upload a Package](/artifact-management/package-upload) for details of how to upload via the Cloudsmith web app. ## Download / Install a Package -You have a choice of 3 methods to setup your Cloudsmith repository: +You have a choice of 3 methods to set up your Cloudsmith repository: - Automatic configuration (recommended) - Force a specific distribution/release (if your system is compatible but not identical) - Manual configuration -### Public Repositories + +Private Cloudsmith repositories require authentication. You can choose between Entitlement Token Authentication or HTTP Basic Authentication. The setup method will differ depending on what authentication type you choose to use. + + + +Entitlement Tokens, User Credentials, and API-Keys should be treated as secrets. You should ensure that you do not commit them in configuration files along with source code, or expose them in any logs. + + +### Alpine Linux -To install Alpine packages from a public Cloudsmith repository , you can quickly set up the repository automatically: +#### Public Repositories + +Automatic setup: ```shell sudo apk add --no-cache bash @@ -78,7 +117,7 @@ curl -sLf \ | sudo bash ``` -If you need to force a specific distribution: +Force a specific version: ```shell sudo apk add --no-cache bash @@ -87,24 +126,17 @@ curl -sLf \ | sudo distro=alpine codename=VERSION bash ``` -Or, you can manually configure the repository +Manual configuration: ```shell curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` -### Private Repositories - -Private Cloudsmith repositories require authentication. You can choose between two types of authentication, Entitlement Token Authentication or HTTP Basic Authentication. -The setup method will differ depending on what authentication type you choose to use. - +#### Private Repositories - -Entitlement Tokens, User Credentials and API-Keys should be treated as secrets, and you should ensure that you do not commit them in configurations files along with source code, or expose them in any logs. - -To install Alpine packages from a private Cloudsmith repository, you can quickly set up the repository automatically: +Automatic setup: ```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ @@ -129,7 +161,7 @@ curl -u "token:TOKEN" -sLf \ | sudo bash ``` -If you need to force a specific distribution: +Force a specific version: ```shell Entitlement Token Auth sudo apk add --no-cache bash @@ -155,7 +187,7 @@ curl -u "token:TOKEN" -sLf \ | sudo distro=alpine codename=VERSION bash ``` -Or, you can manually configure the repository: +Manual configuration: ```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub @@ -177,9 +209,83 @@ curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/ curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` -### Installing a package -After you have set up the repository, to install a package you do: +### Wolfi + +Wolfi uses a rolling release model with no version concept. Use `distro=wolfi` when running the setup script. + +#### Public Repositories + +Automatic setup: + +```shell +sudo apk add --no-cache bash +curl -sLf \ + 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ + | sudo distro=wolfi bash +``` + +Manual configuration: + +```shell +curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub +curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +apk update +``` + +#### Private Repositories + +Automatic setup: + +```shell Entitlement Token Auth +curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ +| sudo distro=wolfi bash +``` +```shell HTTP Basic Auth (User & Pass) +sudo apk add --no-cache bash +curl -u "USERNAME:PASSWORD" -sLf \ + 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ + | sudo distro=wolfi bash +``` +```shell HTTP Basic Auth (API-Key) +sudo apk add --no-cache bash +curl -u "USERNAME:API-KEY" -sLf \ + 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ + | sudo distro=wolfi bash +``` +```shell HTTP Basic Auth (Token) +sudo apk add --no-cache bash +curl -u "token:TOKEN" -sLf \ + 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ + | sudo distro=wolfi bash +``` + +Manual configuration: + +```shell Entitlement Token Auth +curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub +curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +apk update +``` +```shell HTTP Basic Auth (User & Pass) +curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub +curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +apk update +``` +```shell HTTP Basic Auth (API-Key) +curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub +curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +apk update +``` +```shell HTTP Basic Auth (Token) +curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub +curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +apk update +``` + +### Installing a Package + +After setting up the repository, install a package with: ```shell sudo apk add PACKAGE_NAME=PACKAGE_VERSION --update-cache @@ -193,7 +299,11 @@ If you no longer want to install packages from your Cloudsmith repository, you c $EDITOR /etc/apk/repositories ``` -Remove the `/alpine/VERSION/main` line, save then execute: +**Alpine Linux:** remove the `/alpine/VERSION/main` line. + +**Wolfi:** remove the `/os` line. + +Save the file, then remove the RSA key and refresh: ```shell rm -f /etc/apk/keys/REPOSITORY@cloudsmith-FINGERPRINT.rsa.pub @@ -202,7 +312,93 @@ apk update ## Upstream Proxying / Caching -Not Supported +Supported + +The Alpine format supports upstream proxying and caching for both Alpine Linux and Wolfi repositories. When a package is requested, Cloudsmith checks for a local copy. If missing, it fetches the package from the upstream, caches it as a first-class local package, and serves it. + + +Alpine and Wolfi upstream proxying and caching is in Early Access. [Contact us](https://cloudsmith.com/company/contact-us) to enable it for your organization. + + +### Alpine Linux and Wolfi + +Both Alpine Linux and Wolfi use the APK package format, but they are distinct, incompatible distributions and **cannot be mixed in the same upstream**. The key difference is in their URL structures: + +- **Alpine Linux** uses a versioned path structure: `/{version}/{branch}/{arch}/` (e.g., `/v3.21/main/x86_64/`) +- **Wolfi** uses a flat structure with no version hierarchy: `/{arch}/` (e.g., `/x86_64/`) + +Cloudsmith automatically detects the distribution type from the upstream URL domain — you do not need to configure it manually. + +### Supported Upstream Sources + +| Distribution | Upstream URL | Notes | +| :----------- | :----------- | :---- | +| Alpine Linux | `https://dl-cdn.alpinelinux.org/alpine/` | Official Alpine CDN mirror | +| Wolfi | `https://packages.wolfi.dev/os/` | Official Wolfi OS packages | +| Chainguard | `https://apk.cgr.dev/chainguard/` | Chainguard hardened packages (Wolfi-compatible) | + +Any valid Alpine Linux mirror can also be used as an upstream URL — Cloudsmith detects the distribution type from the domain. + +### Indexing + +Alpine and Wolfi upstreams use **Ahead-of-Time indexing**: + +- **Alpine Linux**: Cloudsmith indexes all known Alpine distribution versions (e.g., v3.19, v3.20, v3.21) across all supported architectures (`x86_64`, `aarch64`, `armhf`, `armv7`, `ppc64le`, `s390x`, `riscv64`, `loongarch64`, `x86`) before packages become available. +- **Wolfi**: Cloudsmith indexes both supported architectures (`x86_64`, `aarch64`). Wolfi has no version concept — all packages belong to a single rolling release. + +### Configure an Upstream + +To configure an upstream for your Alpine repository, browse to your repository overview page and click the **Upstreams** tab. Then, click **+ Add Upstream Proxy** and choose the **Alpine** format upstream. + +Please see our [Upstream Proxying](/repositories/upstreams#create-an-alpine-upstream) documentation for further instructions on form fields and configuration options. + +### Configure via the CLI + +You can create upstreams without leaving your terminal using the Cloudsmith CLI. + +#### Alpine Linux Upstream + +1. Create an `upstream_config.json` file: + +```json +{ + "name": "Alpine Linux Official", + "upstream_url": "https://dl-cdn.alpinelinux.org/alpine/", + "mode": "Cache and Proxy", + "auth_mode": "None", + "priority": 1 +} +``` + +2. Use the Cloudsmith CLI to create the upstream in your workspace `OWNER` and repository `REPOSITORY`: + +```bash +cloudsmith upstream apk create OWNER/REPOSITORY ./upstream_config.json +``` + +#### Wolfi Upstream + +1. Create an `upstream_config.json` file: + +```json +{ + "name": "Wolfi OS Official", + "upstream_url": "https://packages.wolfi.dev/os/", + "mode": "Cache and Proxy", + "auth_mode": "None", + "priority": 1 +} +``` + +2. Use the Cloudsmith CLI to create the upstream: + +```bash +cloudsmith upstream apk create OWNER/REPOSITORY ./upstream_config.json +``` + + +The distribution type (Alpine Linux or Wolfi) is automatically determined from the upstream URL domain. You do not need to specify it in the configuration. + ## Key Signing Support diff --git a/src/content/repositories/upstreams/index.mdx b/src/content/repositories/upstreams/index.mdx index 3207e350..2ac07f9f 100644 --- a/src/content/repositories/upstreams/index.mdx +++ b/src/content/repositories/upstreams/index.mdx @@ -59,6 +59,7 @@ A good approach when determining what priority to apply to upstreams is to ensur |Format|
Configurable Proxy
|
Caching
|
Indexing
|
Indexing Type
|
API Reference
| |:---|:---|:---|:---|:---|:---| +|[Alpine / Wolfi](/formats/alpine-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/apk/create) | |[Cargo (Rust)](/formats/cargo-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cargo/create) | |[Conda](/formats/conda-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/conda/create) | |[Composer](/formats/composer-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/composer/create) | @@ -66,12 +67,11 @@ A good approach when determining what priority to apply to upstreams is to ensur |[Dart](/formats/dart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/dart/create) | |[Debian](/formats/debian-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/deb/create) | |[Docker](/formats/docker-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/docker/create) | -|[Generic](/formats/generic-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time / Just-in-Time
| [API](/api/repos/upstream/generic/create) | +|[Generic](/formats/generic-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/generic/create) | |[Golang ](/formats/go-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/go/create) | |[Gradle ](/formats/gradle-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | |[Helm](/formats/helm-chart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/helm/create) | |[Hex](/formats/hex-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/hex/create) | -|[Hugging Face](/formats/hugging-face-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/huggingface/create) | |[Maven](/formats/maven-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | |[npm](/formats/npm-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/npm/create) | |[NuGet](/formats/nuget-feed) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/nuget/create) | @@ -127,6 +127,27 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to +#### Create an Alpine / Wolfi Upstream + +| Form Field | Description | +| :------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Name | A descriptive name for this upstream source. A shortened version of this name will be used for tagging cached packages retrieved from this upstream. | +| Priority | The weighting of the Upstream source. Upstream sources are selected for resolving requests by sequential order (1..n), followed by creation date. | +| Upstream URL | The URL for this upstream source. For Alpine Linux, use the mirror root (e.g., `https://dl-cdn.alpinelinux.org/alpine/`). For Wolfi, use `https://packages.wolfi.dev/os/`. The distribution type (Alpine or Wolfi) is automatically detected from the domain — you do not need to configure it separately. | +| Proxy Only | Proxy requests through to upstream sources in order to match assets that are not present in this repository. | +| Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. | +| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. | +| Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible. | +| Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request. | + + +Cloudsmith automatically detects whether an upstream is Alpine Linux or Wolfi based on the URL domain. URLs containing `alpinelinux.org` are treated as Alpine Linux; URLs containing `wolfi.dev` or `cgr.dev` are treated as Wolfi. For unrecognized domains, Alpine Linux is assumed by default. + + + +Alpine Linux and Wolfi both use the APK package format but are distinct, incompatible distributions. Do not mix Alpine and Wolfi packages in the same Cloudsmith repository — create separate repositories for each distribution. + + #### Create a Cargo (Rust) Upstream @@ -311,21 +332,15 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to | Name | A descriptive name for this upstream source. A shortened version of this name will be used for tagging cached packages retrieved from this upstream. | | Priority | The weighting of the Upstream source. Upstream sources are selected for resolving requests by sequential order (1..n), followed by creation date. | | Upstream URL | The URL for this upstream source. This must be a fully qualified URL including any path elements required to reach the root of the repository. | -| Upstream Prefix | The path prefix to prevent file collisions when using multiple upstreams. All files from this upstream will be grouped under this path (e.g., `node_distributions/`). | +| Upstream Prefix (optional)| Optional path prefix to prevent file collisions when using multiple upstreams. All files from this upstream will be grouped under this path (e.g., `node_distributions/`). | | Proxy Only | Proxy requests through to upstream sources in order to match assets that are not present in this repository. | | Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. | | Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. | | Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible. | | Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request. | -**HTML-based upstreams** + Generic upstreams work with simple HTML-based sources. The upstream must consist of simple, unstyled HTML pages with no JavaScript. Each page should contain only links to package files or subdirectories. Examples include Gradle distributions, Apache releases, and Node distributions. - -**Authentication requirements** -Some upstream sources require authentication to access packages or interact with their APIs. For example, GitHub package registries require token-based authentication for API access. Review the documentation for your upstream source to determine if credentials are needed and configure them accordingly in the upstream settings. - - -Enterprise repository managers like Artifactory and Sonatype Nexus require additional configuration and will not work out of the box. These sources also have practical size limits—repositories with millions of packages may not be processable. [Contact support](/support) to discuss setup for these upstream sources. #### Create a Go Upstream From 6181df39b2c6ade1db627306244e4aecadd632fc Mon Sep 17 00:00:00 2001 From: Kyle Harrison Date: Tue, 31 Mar 2026 09:45:27 +0100 Subject: [PATCH 2/6] docs: refactor documentation to include clarifying statements --- src/content/formats/alpine-repository.mdx | 171 ++++++------------- src/content/repositories/upstreams/index.mdx | 59 ++++--- 2 files changed, 90 insertions(+), 140 deletions(-) diff --git a/src/content/formats/alpine-repository.mdx b/src/content/formats/alpine-repository.mdx index 8cd1c61e..a1273cf5 100644 --- a/src/content/formats/alpine-repository.mdx +++ b/src/content/formats/alpine-repository.mdx @@ -7,10 +7,10 @@ import { Tag, Note, Video } from '@/components'; Cloudsmith supports hosting and distributing packages in the APK format, used by both **Alpine Linux** and **Wolfi**. Although both distributions use the same package format, they are distinct and incompatible — packages built for Alpine Linux cannot be used on Wolfi, and vice versa. -- **Alpine Linux** is a lightweight Linux distribution popular as a Docker container base image. It uses versioned releases (e.g., v3.20, v3.21) and the `apk` package manager. -- **Wolfi** is a minimal, container-optimized Linux distribution from Chainguard. Unlike Alpine, it follows a rolling release model with no versioned releases. +- **Alpine Linux** is a lightweight Linux distribution popular as a Docker container base image. It uses versioned releases (e.g., v3.00, .., v3.22, v3.23, etc) grouped by architecture e.g. `v3.23/main/aarch64/` via the `apk` package manager. +- **Wolfi** is a minimal, container-optimized Linux distribution from Chainguard. Unlike Alpine, it follows a rolling release model in which packages are removed after 12 months. -For more information, see: +For more information: - [Alpine Linux](https://alpinelinux.org/) — official Alpine Linux website - [Alpine Linux Wiki](https://wiki.alpinelinux.org) — Alpine Linux documentation @@ -20,10 +20,10 @@ For more information, see: Cloudsmith repositories for the Alpine format support: -- **Public and private package hosting** — serve APK packages to authenticated users or publicly -- **RSA signing** — all repositories are signed with an RSA key that clients can verify via `apk` -- **Upstream proxying and caching** — proxy and cache packages from Alpine Linux mirrors, Wolfi, or Chainguard (see [Upstream Proxying / Caching](#upstream-proxying--caching)) -- **Both Alpine Linux and Wolfi** — a single repository format handles both distributions; the distribution is selected at upload time and automatically detected at install time +- **Public and private package hosting** serve APK packages to authenticated users or publicly +- **RSA signing** all repositories are signed with an RSA key that clients can verify via `apk`. Alpine uses SHA-1 and Wolfi uses SHA-256. +- **Upstream proxying and caching** proxy and cache packages from Alpine Linux mirrors, Wolfi, or Chainguard (see [Upstream Proxying / Caching](#upstream-proxying--caching)) +- **Both Alpine Linux and Wolfi** a single repository format handles both distributions; the distribution is selected at upload time and automatically detected at install time The examples in this document are generic. Cloudsmith provides contextual setup instructions within each repository, complete with copy and paste snippets (with your namespace/repo/rsa-key pre-configured). @@ -35,7 +35,7 @@ In the following examples: | :-------------- | :------------------------------------------------------------------------------------------------------------------------------ | | OWNER | Your Cloudsmith account name or organization name (namespace) | | REPOSITORY | Your Cloudsmith Repository name (also called "slug") | -| VERSION | Alpine distribution version, e.g. `v3.21`. Use `any-version` if your package is compatible with more than one version | +| VERSION | Alpine distribution version, e.g. `v3.23`. Use `any-version` if your package is compatible with more than one version | | FINGERPRINT | The 8-byte fingerprint of the public RSA key for the repository | | TOKEN | Your Cloudsmith Entitlement Token (see [Entitlements](/software-distribution/entitlement-tokens) for more details) | | USERNAME | Your Cloudsmith username | @@ -50,7 +50,7 @@ In the following examples: For full details of how to install and setup the Cloudsmith CLI, see [Command Line Interface](/developer-tools/cli). -#### Alpine Linux +#### Alpine Linux - Package Upload The command to upload an Alpine Linux package is: @@ -58,21 +58,21 @@ The command to upload an Alpine Linux package is: cloudsmith push alpine OWNER/REPOSITORY/alpine/VERSION PACKAGE_NAME-PACKAGE_VERSION.apk ``` -Upload a package for Alpine v3.21: +Upload a package for Alpine v3.23: ```shell -cloudsmith push alpine org/repo/alpine/v3.21 libjq-1.0.3.apk +cloudsmith push alpine org/repo/alpine/v3.23 libjq-1.0.3.apk ``` -Upload a package compatible with any Alpine version: +Example: Upload a package for any version of Alpine ```shell cloudsmith push alpine org/repo/alpine/any-version libjq-1.0.3.apk ``` -#### Wolfi +#### Wolfi package upload -Wolfi has no versioned releases. All Wolfi packages use `any-version`: +Wolfi has a single index that typically contains all versions available within the past 12 months. When uploading a Wolfi package to Cloudsmith, use the `wolfi/any-version` distribution. ```shell cloudsmith push alpine OWNER/REPOSITORY/wolfi/any-version PACKAGE_NAME-PACKAGE_VERSION.apk @@ -96,19 +96,11 @@ You have a choice of 3 methods to set up your Cloudsmith repository: - Force a specific distribution/release (if your system is compatible but not identical) - Manual configuration - -Private Cloudsmith repositories require authentication. You can choose between Entitlement Token Authentication or HTTP Basic Authentication. The setup method will differ depending on what authentication type you choose to use. - - - -Entitlement Tokens, User Credentials, and API-Keys should be treated as secrets. You should ensure that you do not commit them in configuration files along with source code, or expose them in any logs. - - ### Alpine Linux #### Public Repositories -Automatic setup: +To install Alpine packages from a public Cloudsmith repository, you can set up the repository using the following: ```shell sudo apk add --no-cache bash @@ -117,7 +109,7 @@ curl -sLf \ | sudo bash ``` -Force a specific version: +If you need to force a specific distribution: ```shell sudo apk add --no-cache bash @@ -126,7 +118,7 @@ curl -sLf \ | sudo distro=alpine codename=VERSION bash ``` -Manual configuration: +Or, you can manually configure the repository: ```shell curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub @@ -136,24 +128,35 @@ apk update #### Private Repositories -Automatic setup: + +Private Cloudsmith repositories require authentication. You can choose between Entitlement Token Authentication or HTTP Basic Authentication. The setup method will differ depending on what authentication type you choose to use. + + + +Entitlement Tokens, User Credentials, and API-Keys should be treated as secrets. You should ensure that you do not commit them in configuration files along with source code, or expose them in any logs. + + +To install Alpine packages from a private Cloudsmith repository, you can set up the repository using the following: ```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo bash ``` + ```shell HTTP Basic Auth (User & Pass) sudo apk add --no-cache bash curl -u "USERNAME:PASSWORD" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo bash ``` + ```shell HTTP Basic Auth (API-Key) sudo apk add --no-cache bash curl -u "USERNAME:API-KEY" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo bash ``` + ```shell HTTP Basic Auth (Token) sudo apk add --no-cache bash curl -u "token:TOKEN" -sLf \ @@ -161,25 +164,28 @@ curl -u "token:TOKEN" -sLf \ | sudo bash ``` -Force a specific version: +If you need to force a specific distribution: ```shell Entitlement Token Auth sudo apk add --no-cache bash curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=alpine codename=VERSION bash ``` + ```shell HTTP Basic Auth (User & Pass) sudo apk add --no-cache bash curl -u "USERNAME:PASSWORD" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=alpine codename=VERSION bash ``` + ```shell HTTP Basic Auth (API-Key) sudo apk add --no-cache bash curl -u "USERNAME:API-KEY" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=alpine codename=VERSION bash ``` + ```shell HTTP Basic Auth (Token) sudo apk add --no-cache bash curl -u "token:TOKEN" -sLf \ @@ -187,23 +193,26 @@ curl -u "token:TOKEN" -sLf \ | sudo distro=alpine codename=VERSION bash ``` -Manual configuration: +Or, you can manually configure the repository: ```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` + ```shell HTTP Basic Auth (User & Pass) curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` + ```shell HTTP Basic Auth (API-Key) curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` + ```shell HTTP Basic Auth (Token) curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories @@ -216,7 +225,7 @@ Wolfi uses a rolling release model with no version concept. Use `distro=wolfi` w #### Public Repositories -Automatic setup: +To install Wolfi packages from a public Cloudsmith repository, set up the repository using the following: ```shell sudo apk add --no-cache bash @@ -225,7 +234,7 @@ curl -sLf \ | sudo distro=wolfi bash ``` -Manual configuration: +Or, you can manually configure the repository: ```shell curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub @@ -235,24 +244,27 @@ apk update #### Private Repositories -Automatic setup: +To install Wolfi packages from a private Cloudsmith repository, set up the repository using the following: ```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=wolfi bash ``` + ```shell HTTP Basic Auth (User & Pass) sudo apk add --no-cache bash curl -u "USERNAME:PASSWORD" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=wolfi bash ``` + ```shell HTTP Basic Auth (API-Key) sudo apk add --no-cache bash curl -u "USERNAME:API-KEY" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=wolfi bash ``` + ```shell HTTP Basic Auth (Token) sudo apk add --no-cache bash curl -u "token:TOKEN" -sLf \ @@ -260,23 +272,26 @@ curl -u "token:TOKEN" -sLf \ | sudo distro=wolfi bash ``` -Manual configuration: +Or, you can manually configure the repository: ```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories apk update ``` + ```shell HTTP Basic Auth (User & Pass) curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories apk update ``` + ```shell HTTP Basic Auth (API-Key) curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories apk update ``` + ```shell HTTP Basic Auth (Token) curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories @@ -299,106 +314,32 @@ If you no longer want to install packages from your Cloudsmith repository, you c $EDITOR /etc/apk/repositories ``` -**Alpine Linux:** remove the `/alpine/VERSION/main` line. - -**Wolfi:** remove the `/os` line. - -Save the file, then remove the RSA key and refresh: - -```shell -rm -f /etc/apk/keys/REPOSITORY@cloudsmith-FINGERPRINT.rsa.pub -apk update -``` - ## Upstream Proxying / Caching Supported The Alpine format supports upstream proxying and caching for both Alpine Linux and Wolfi repositories. When a package is requested, Cloudsmith checks for a local copy. If missing, it fetches the package from the upstream, caches it as a first-class local package, and serves it. - -Alpine and Wolfi upstream proxying and caching is in Early Access. [Contact us](https://cloudsmith.com/company/contact-us) to enable it for your organization. - - -### Alpine Linux and Wolfi - -Both Alpine Linux and Wolfi use the APK package format, but they are distinct, incompatible distributions and **cannot be mixed in the same upstream**. The key difference is in their URL structures: +However, they are distinct, incompatible distributions and **cannot be mixed in the same upstream**. The key difference is in their URL structures — these paths only return packages for the given distribution: -- **Alpine Linux** uses a versioned path structure: `/{version}/{branch}/{arch}/` (e.g., `/v3.21/main/x86_64/`) +- **Alpine Linux** uses a versioned path structure: `/{version}/{branch}/{arch}/` (e.g., `/v3.23/main/x86_64/`) - **Wolfi** uses a flat structure with no version hierarchy: `/{arch}/` (e.g., `/x86_64/`) -Cloudsmith automatically detects the distribution type from the upstream URL domain — you do not need to configure it manually. + +Alpine and Wolfi upstream proxying and caching is in Early Access. [Contact us](https://cloudsmith.com/company/contact-us) to enable it for your Workspace. + ### Supported Upstream Sources -| Distribution | Upstream URL | Notes | -| :----------- | :----------- | :---- | +| Distribution | Upstream URL | Notes | +|:-------------|:-----------------------------------------|:---------------------------| | Alpine Linux | `https://dl-cdn.alpinelinux.org/alpine/` | Official Alpine CDN mirror | -| Wolfi | `https://packages.wolfi.dev/os/` | Official Wolfi OS packages | -| Chainguard | `https://apk.cgr.dev/chainguard/` | Chainguard hardened packages (Wolfi-compatible) | - -Any valid Alpine Linux mirror can also be used as an upstream URL — Cloudsmith detects the distribution type from the domain. - -### Indexing +| Wolfi | `https://packages.wolfi.dev/os/` | Official Wolfi OS packages | -Alpine and Wolfi upstreams use **Ahead-of-Time indexing**: - -- **Alpine Linux**: Cloudsmith indexes all known Alpine distribution versions (e.g., v3.19, v3.20, v3.21) across all supported architectures (`x86_64`, `aarch64`, `armhf`, `armv7`, `ppc64le`, `s390x`, `riscv64`, `loongarch64`, `x86`) before packages become available. -- **Wolfi**: Cloudsmith indexes both supported architectures (`x86_64`, `aarch64`). Wolfi has no version concept — all packages belong to a single rolling release. ### Configure an Upstream -To configure an upstream for your Alpine repository, browse to your repository overview page and click the **Upstreams** tab. Then, click **+ Add Upstream Proxy** and choose the **Alpine** format upstream. - -Please see our [Upstream Proxying](/repositories/upstreams#create-an-alpine-upstream) documentation for further instructions on form fields and configuration options. - -### Configure via the CLI - -You can create upstreams without leaving your terminal using the Cloudsmith CLI. - -#### Alpine Linux Upstream - -1. Create an `upstream_config.json` file: - -```json -{ - "name": "Alpine Linux Official", - "upstream_url": "https://dl-cdn.alpinelinux.org/alpine/", - "mode": "Cache and Proxy", - "auth_mode": "None", - "priority": 1 -} -``` - -2. Use the Cloudsmith CLI to create the upstream in your workspace `OWNER` and repository `REPOSITORY`: - -```bash -cloudsmith upstream apk create OWNER/REPOSITORY ./upstream_config.json -``` - -#### Wolfi Upstream - -1. Create an `upstream_config.json` file: - -```json -{ - "name": "Wolfi OS Official", - "upstream_url": "https://packages.wolfi.dev/os/", - "mode": "Cache and Proxy", - "auth_mode": "None", - "priority": 1 -} -``` - -2. Use the Cloudsmith CLI to create the upstream: - -```bash -cloudsmith upstream apk create OWNER/REPOSITORY ./upstream_config.json -``` - - -The distribution type (Alpine Linux or Wolfi) is automatically determined from the upstream URL domain. You do not need to specify it in the configuration. - +Please see our [Upstream Proxying](/repositories/upstreams#create-a-alpine-upstream) documentation for further instructions on form fields and configuration options. ## Key Signing Support diff --git a/src/content/repositories/upstreams/index.mdx b/src/content/repositories/upstreams/index.mdx index 2ac07f9f..4c23cae1 100644 --- a/src/content/repositories/upstreams/index.mdx +++ b/src/content/repositories/upstreams/index.mdx @@ -57,29 +57,30 @@ A good approach when determining what priority to apply to upstreams is to ensur ## Supported Formats -|Format|
Configurable Proxy
|
Caching
|
Indexing
|
Indexing Type
|
API Reference
| -|:---|:---|:---|:---|:---|:---| -|[Alpine / Wolfi](/formats/alpine-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/apk/create) | -|[Cargo (Rust)](/formats/cargo-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cargo/create) | -|[Conda](/formats/conda-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/conda/create) | -|[Composer](/formats/composer-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/composer/create) | -|[CRAN](/formats/cran-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cran/create) | -|[Dart](/formats/dart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/dart/create) | -|[Debian](/formats/debian-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/deb/create) | -|[Docker](/formats/docker-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/docker/create) | -|[Generic](/formats/generic-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/generic/create) | -|[Golang ](/formats/go-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/go/create) | -|[Gradle ](/formats/gradle-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | -|[Helm](/formats/helm-chart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/helm/create) | -|[Hex](/formats/hex-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/hex/create) | -|[Maven](/formats/maven-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | -|[npm](/formats/npm-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/npm/create) | -|[NuGet](/formats/nuget-feed) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/nuget/create) | -|[Python](/formats/python-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/python/create) | -|[RedHat](/formats/redhat-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/rpm/create) | -|[Ruby](/formats/ruby-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/ruby/create) | -|[sbt ](/formats/sbt-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | -|[Swift](/formats/swift-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/swift/create) | +| Format |
Configurable Proxy
|
Caching
|
Indexing
|
Indexing Type
|
API Reference
| +|-:----------------------------------------|-:-----------------------------------------------|-:------------------------------------|-:-------------------------------------|-:------------------------------------------|-:------------------------------------------| +| [Alpine](/formats/alpine-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/apk/create) | +| [Cargo (Rust)](/formats/cargo-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cargo/create) | +| [Conda](/formats/conda-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/conda/create) | +| [Composer](/formats/composer-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/composer/create) | +| [CRAN](/formats/cran-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cran/create) | +| [Dart](/formats/dart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/dart/create) | +| [Debian](/formats/debian-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/deb/create) | +| [Docker](/formats/docker-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/docker/create) | +| [Generic](/formats/generic-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/generic/create) | +| [Golang ](/formats/go-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/go/create) | +| [Gradle ](/formats/gradle-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | +| [Helm](/formats/helm-chart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/helm/create) | +| [Hex](/formats/hex-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/hex/create) | +| [Maven](/formats/maven-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | +| [npm](/formats/npm-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/npm/create) | +| [NuGet](/formats/nuget-feed) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/nuget/create) | +| [Python](/formats/python-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/python/create) | +| [RedHat](/formats/redhat-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/rpm/create) | +| [Ruby](/formats/ruby-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/ruby/create) | +| [sbt ](/formats/sbt-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | +| [Swift](/formats/swift-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/swift/create) | + You can can also create and manage upstreams via the [Cloudsmith API](/api). @@ -127,7 +128,7 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to -#### Create an Alpine / Wolfi Upstream +#### Create a Alpine Upstream | Form Field | Description | | :------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -141,7 +142,7 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to | Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request. | -Cloudsmith automatically detects whether an upstream is Alpine Linux or Wolfi based on the URL domain. URLs containing `alpinelinux.org` are treated as Alpine Linux; URLs containing `wolfi.dev` or `cgr.dev` are treated as Wolfi. For unrecognized domains, Alpine Linux is assumed by default. +Cloudsmith automatically detects whether an upstream is Alpine Linux or Wolfi based on the URL domain. URLs containing `alpinelinux.org` are treated as Alpine Linux; URLs containing `wolfi.dev` are treated as Wolfi. For unrecognized domains, Alpine Linux is assumed by default. @@ -343,6 +344,14 @@ Alpine Linux and Wolfi both use the APK package format but are distinct, incompa Generic upstreams work with simple HTML-based sources. The upstream must consist of simple, unstyled HTML pages with no JavaScript. Each page should contain only links to package files or subdirectories. Examples include Gradle distributions, Apache releases, and Node distributions. +**Authentication requirements** + +Some upstream sources require authentication to access packages or interact with their APIs. For example, GitHub package registries require token-based authentication for API access. Review the documentation for your upstream source to determine if credentials are needed and configure them accordingly in the upstream settings. + + +Enterprise repository managers like Artifactory and Sonatype Nexus require additional configuration and will not work out of the box. These sources also have practical size limits—repositories with millions of packages may not be processable. [Contact support](/support) to discuss setup for these upstream sources. + + #### Create a Go Upstream From 81753929a18c7d7f666bf4630e403c05cede96cf Mon Sep 17 00:00:00 2001 From: Kyle Harrison Date: Tue, 31 Mar 2026 11:09:41 +0100 Subject: [PATCH 3/6] docs: simplify wolfi setup to specify replacing the distro/version --- src/content/formats/alpine-repository.mdx | 123 +++++----------------- 1 file changed, 29 insertions(+), 94 deletions(-) diff --git a/src/content/formats/alpine-repository.mdx b/src/content/formats/alpine-repository.mdx index a1273cf5..0a87519d 100644 --- a/src/content/formats/alpine-repository.mdx +++ b/src/content/formats/alpine-repository.mdx @@ -52,7 +52,7 @@ For full details of how to install and setup the Cloudsmith CLI, see [Command Li #### Alpine Linux - Package Upload -The command to upload an Alpine Linux package is: +The command to upload an Alpine package via the Cloudsmith CLI is: ```shell cloudsmith push alpine OWNER/REPOSITORY/alpine/VERSION PACKAGE_NAME-PACKAGE_VERSION.apk @@ -96,9 +96,7 @@ You have a choice of 3 methods to set up your Cloudsmith repository: - Force a specific distribution/release (if your system is compatible but not identical) - Manual configuration -### Alpine Linux - -#### Public Repositories +### Public Repositories To install Alpine packages from a public Cloudsmith repository, you can set up the repository using the following: @@ -164,137 +162,67 @@ curl -u "token:TOKEN" -sLf \ | sudo bash ``` -If you need to force a specific distribution: +If you need to force a specific distribution, set `distro` and `codename` (for Alpine) or just `distro` (for Wolfi): -```shell Entitlement Token Auth +```shell Alpine (Entitlement Token) sudo apk add --no-cache bash curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ -| sudo distro=alpine codename=VERSION bash -``` - -```shell HTTP Basic Auth (User & Pass) -sudo apk add --no-cache bash -curl -u "USERNAME:PASSWORD" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=alpine codename=VERSION bash ``` -```shell HTTP Basic Auth (API-Key) +```shell Alpine (HTTP Basic Auth) sudo apk add --no-cache bash -curl -u "USERNAME:API-KEY" -sLf \ +curl -u "CREDENTIALS" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=alpine codename=VERSION bash ``` -```shell HTTP Basic Auth (Token) -sudo apk add --no-cache bash -curl -u "token:TOKEN" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo distro=alpine codename=VERSION bash -``` - -Or, you can manually configure the repository: - -```shell Entitlement Token Auth -curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update -``` - -```shell HTTP Basic Auth (User & Pass) -curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update -``` - -```shell HTTP Basic Auth (API-Key) -curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update -``` - -```shell HTTP Basic Auth (Token) -curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update -``` - -### Wolfi - -Wolfi uses a rolling release model with no version concept. Use `distro=wolfi` when running the setup script. - -#### Public Repositories - -To install Wolfi packages from a public Cloudsmith repository, set up the repository using the following: - -```shell +```shell Wolfi (Entitlement Token) sudo apk add --no-cache bash -curl -sLf \ - 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo distro=wolfi bash -``` - -Or, you can manually configure the repository: - -```shell -curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -sLf 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories -apk update -``` - -#### Private Repositories - -To install Wolfi packages from a private Cloudsmith repository, set up the repository using the following: - -```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ -| sudo distro=wolfi bash -``` - -```shell HTTP Basic Auth (User & Pass) -sudo apk add --no-cache bash -curl -u "USERNAME:PASSWORD" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=wolfi bash ``` -```shell HTTP Basic Auth (API-Key) +```shell Wolfi (HTTP Basic Auth) sudo apk add --no-cache bash -curl -u "USERNAME:API-KEY" -sLf \ +curl -u "CREDENTIALS" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=wolfi bash ``` -```shell HTTP Basic Auth (Token) -sudo apk add --no-cache bash -curl -u "token:TOKEN" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo distro=wolfi bash -``` +Replace `CREDENTIALS` with one of: + +| Method | Value | +|:--------------|:--------------------| +| User & Pass | `USERNAME:PASSWORD` | +| API Key | `USERNAME:API-KEY` | +| Token | `token:TOKEN` | Or, you can manually configure the repository: +# TODO: fix the following as it's not how we manually configure a repo + ```shell Entitlement Token Auth curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` ```shell HTTP Basic Auth (User & Pass) curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` ```shell HTTP Basic Auth (API-Key) curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` ```shell HTTP Basic Auth (Token) curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=wolfi' >> /etc/apk/repositories +curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories apk update ``` @@ -314,6 +242,13 @@ If you no longer want to install packages from your Cloudsmith repository, you c $EDITOR /etc/apk/repositories ``` +Remove the cloudsmith repository line, save then execute: + +```shell +rm -f /etc/apk/keys/REPOSITORY@cloudsmith-FINGERPRINT.rsa.pub +apk update +``` + ## Upstream Proxying / Caching Supported From 9bc2a3d0388a808f7982b62663063507ace719e6 Mon Sep 17 00:00:00 2001 From: Padraig O'Connor Date: Tue, 31 Mar 2026 12:19:11 +0100 Subject: [PATCH 4/6] remove wolfi setup desc, update wolfi install guide --- src/content/formats/alpine-repository.mdx | 137 ++++++++++--------- src/content/repositories/upstreams/index.mdx | 49 +++---- 2 files changed, 94 insertions(+), 92 deletions(-) diff --git a/src/content/formats/alpine-repository.mdx b/src/content/formats/alpine-repository.mdx index 0a87519d..04a6a50c 100644 --- a/src/content/formats/alpine-repository.mdx +++ b/src/content/formats/alpine-repository.mdx @@ -7,7 +7,7 @@ import { Tag, Note, Video } from '@/components'; Cloudsmith supports hosting and distributing packages in the APK format, used by both **Alpine Linux** and **Wolfi**. Although both distributions use the same package format, they are distinct and incompatible — packages built for Alpine Linux cannot be used on Wolfi, and vice versa. -- **Alpine Linux** is a lightweight Linux distribution popular as a Docker container base image. It uses versioned releases (e.g., v3.00, .., v3.22, v3.23, etc) grouped by architecture e.g. `v3.23/main/aarch64/` via the `apk` package manager. +- **Alpine Linux** is a lightweight Linux distribution popular as a Docker container base image. It uses versioned releases (e.g., v3.0, …, v3.22, v3.23, etc.) grouped by architecture e.g. `v3.23/main/aarch64/` via the `apk` package manager. - **Wolfi** is a minimal, container-optimized Linux distribution from Chainguard. Unlike Alpine, it follows a rolling release model in which packages are removed after 12 months. For more information: @@ -39,7 +39,6 @@ In the following examples: | FINGERPRINT | The 8-byte fingerprint of the public RSA key for the repository | | TOKEN | Your Cloudsmith Entitlement Token (see [Entitlements](/software-distribution/entitlement-tokens) for more details) | | USERNAME | Your Cloudsmith username | -| PASSWORD | Your Cloudsmith password | | API-KEY | Your Cloudsmith API Key | | PACKAGE_NAME | The name of your package | | PACKAGE_VERSION | The version number of your package | @@ -58,30 +57,25 @@ The command to upload an Alpine package via the Cloudsmith CLI is: cloudsmith push alpine OWNER/REPOSITORY/alpine/VERSION PACKAGE_NAME-PACKAGE_VERSION.apk ``` -Upload a package for Alpine v3.23: +Upload a package for specific Alpine version: ```shell -cloudsmith push alpine org/repo/alpine/v3.23 libjq-1.0.3.apk -``` +cloudsmith push alpine OWNER/REPOSITORY/alpine/v3.23 libjq-1.0.3.apk``` -Example: Upload a package for any version of Alpine +Upload a package for any version of Alpine: ```shell -cloudsmith push alpine org/repo/alpine/any-version libjq-1.0.3.apk +cloudsmith push alpine OWNER/REPOSITORY/alpine/any-version libjq-1.0.3.apk ``` -#### Wolfi package upload +Upload a WOLFI package: + Wolfi has a single index that typically contains all versions available within the past 12 months. When uploading a Wolfi package to Cloudsmith, use the `wolfi/any-version` distribution. + ```shell -cloudsmith push alpine OWNER/REPOSITORY/wolfi/any-version PACKAGE_NAME-PACKAGE_VERSION.apk -``` - -Example: - -```shell -cloudsmith push alpine org/repo/wolfi/any-version glibc-2.38-r1.apk +cloudsmith push alpine OWNER/REPOSITORY/wolfi/any-version glibc-2.38-r1.apk ``` ### Upload via Cloudsmith Website @@ -131,9 +125,16 @@ Private Cloudsmith repositories require authentication. You can choose between E -Entitlement Tokens, User Credentials, and API-Keys should be treated as secrets. You should ensure that you do not commit them in configuration files along with source code, or expose them in any logs. +Entitlement Tokens and API-Keys should be treated as secrets. You should ensure that you do not commit them in configuration files along with source code, or expose them in any logs. +Replace `CREDENTIALS` with one of: + +| Method | Value | +|:--------|:-------------------| +| API Key | `USERNAME:API-KEY` | +| Token | `token:TOKEN` | + To install Alpine packages from a private Cloudsmith repository, you can set up the repository using the following: ```shell Entitlement Token Auth @@ -141,28 +142,14 @@ curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine | sudo bash ``` -```shell HTTP Basic Auth (User & Pass) -sudo apk add --no-cache bash -curl -u "USERNAME:PASSWORD" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo bash -``` - -```shell HTTP Basic Auth (API-Key) -sudo apk add --no-cache bash -curl -u "USERNAME:API-KEY" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo bash -``` - -```shell HTTP Basic Auth (Token) +```shell HTTP Basic Auth sudo apk add --no-cache bash -curl -u "token:TOKEN" -sLf \ +curl -u "CREDENTIALS" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo bash ``` -If you need to force a specific distribution, set `distro` and `codename` (for Alpine) or just `distro` (for Wolfi): +If you need to force a specific distribution, set `distro` and `codename` (for Alpine): ```shell Alpine (Entitlement Token) sudo apk add --no-cache bash @@ -177,53 +164,67 @@ curl -u "CREDENTIALS" -sLf \ | sudo distro=alpine codename=VERSION bash ``` -```shell Wolfi (Entitlement Token) -sudo apk add --no-cache bash -curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo distro=wolfi bash -``` +Or, you can manually configure the repository: -```shell Wolfi (HTTP Basic Auth) -sudo apk add --no-cache bash -curl -u "CREDENTIALS" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo distro=wolfi bash +```shell Entitlement Token Auth +curl -1sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/rsa.FINGERPRINT.key' \ + > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub +echo "https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/alpine/VERSION/main" \ + > /etc/apk/repositories +apk update ``` -Replace `CREDENTIALS` with one of: +```shell HTTP Basic Auth +curl -u "CREDENTIALS" -1sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/rsa.FINGERPRINT.key' \ + > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub +echo "https://CREDENTIALS@dl.cloudsmith.io/basic/OWNER/REPOSITORY/alpine/VERSION/main" \ + > /etc/apk/repositories +apk update +``` -| Method | Value | -|:--------------|:--------------------| -| User & Pass | `USERNAME:PASSWORD` | -| API Key | `USERNAME:API-KEY` | -| Token | `token:TOKEN` | +### Wolfi -Or, you can manually configure the repository: + +The automated setup script (`bash.alpine.sh`) does not support Wolfi. Use the manual setup below instead. + -# TODO: fix the following as it's not how we manually configure a repo +Wolfi uses a flat repository path (`alpine/os`) with no version hierarchy. The setup differs from Alpine in two ways: the existing Chainguard/Wolfi keys must be removed, and the repository path uses `alpine/os` rather than `alpine/VERSION/main`. ```shell Entitlement Token Auth -curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update -``` +apk add curl -```shell HTTP Basic Auth (User & Pass) -curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "USERNAME:PASSWORD" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update -``` +# Remove existing Wolfi/Chainguard keys and repository list +rm -f /etc/apk/keys/chainguard-* +rm -f /etc/apk/keys/wolfi-signing.rsa.pub +rm -f /etc/apk/repositories -```shell HTTP Basic Auth (API-Key) -curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "USERNAME:API-KEY" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update +# Download the Cloudsmith RSA key +curl -L -o /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub \ + 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/rsa.FINGERPRINT.key' + +# Configure the repository +echo "https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/alpine/os" \ + > /etc/apk/repositories + +apk update -v --no-cache +apk add -v --no-cache PACKAGE_NAME ``` -```shell HTTP Basic Auth (Token) -curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/rsa/rsa.FINGERPRINT.key' > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -curl -u "token:TOKEN" -sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/config.alpine.txt?distro=alpine&codename=VERSION' >> /etc/apk/repositories -apk update +```shell HTTP Basic Auth +apk add curl + +rm -f /etc/apk/keys/chainguard-* +rm -f /etc/apk/keys/wolfi-signing.rsa.pub +rm -f /etc/apk/repositories + +curl -u "CREDENTIALS" -L -o /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub \ + 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/rsa.FINGERPRINT.key' + +echo "https://CREDENTIALS@dl.cloudsmith.io/basic/OWNER/REPOSITORY/alpine/os" \ + > /etc/apk/repositories + +apk update -v --no-cache +apk add -v --no-cache PACKAGE_NAME ``` ### Installing a Package diff --git a/src/content/repositories/upstreams/index.mdx b/src/content/repositories/upstreams/index.mdx index 4c23cae1..20dff0e1 100644 --- a/src/content/repositories/upstreams/index.mdx +++ b/src/content/repositories/upstreams/index.mdx @@ -57,29 +57,30 @@ A good approach when determining what priority to apply to upstreams is to ensur ## Supported Formats -| Format |
Configurable Proxy
|
Caching
|
Indexing
|
Indexing Type
|
API Reference
| -|-:----------------------------------------|-:-----------------------------------------------|-:------------------------------------|-:-------------------------------------|-:------------------------------------------|-:------------------------------------------| -| [Alpine](/formats/alpine-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/apk/create) | -| [Cargo (Rust)](/formats/cargo-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cargo/create) | -| [Conda](/formats/conda-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/conda/create) | -| [Composer](/formats/composer-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/composer/create) | -| [CRAN](/formats/cran-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cran/create) | -| [Dart](/formats/dart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/dart/create) | -| [Debian](/formats/debian-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/deb/create) | -| [Docker](/formats/docker-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/docker/create) | -| [Generic](/formats/generic-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/generic/create) | -| [Golang ](/formats/go-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/go/create) | -| [Gradle ](/formats/gradle-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | -| [Helm](/formats/helm-chart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/helm/create) | -| [Hex](/formats/hex-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/hex/create) | -| [Maven](/formats/maven-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | -| [npm](/formats/npm-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/npm/create) | -| [NuGet](/formats/nuget-feed) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/nuget/create) | -| [Python](/formats/python-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/python/create) | -| [RedHat](/formats/redhat-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/rpm/create) | -| [Ruby](/formats/ruby-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/ruby/create) | -| [sbt ](/formats/sbt-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | -| [Swift](/formats/swift-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/swift/create) | +| Format |
Configurable Proxy
|
Caching
|
Indexing
|
Indexing Type
|
API Reference
| +| :------------------------------------------------- | :---------------------------------------------- | :----------------------------------- | :------------------------------------ | :----------------------------------------- | :------------------------------------------------------ | +| [Alpine](/formats/alpine-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/apk/create) | +| [Cargo (Rust)](/formats/cargo-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cargo/create) | +| [Conda](/formats/conda-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/conda/create) | +| [Composer](/formats/composer-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/composer/create) | +| [CRAN](/formats/cran-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/cran/create) | +| [Dart](/formats/dart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/dart/create) | +| [Debian](/formats/debian-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/deb/create) | +| [Docker](/formats/docker-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/docker/create) | +| [Generic](/formats/generic-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/generic/create) | +| [Golang](/formats/go-registry) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/go/create) | +| [Gradle](/formats/gradle-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | +| [Helm](/formats/helm-chart-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/helm/create) | +| [Hex](/formats/hex-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/hex/create) | +| [Hugging Face](/formats/hugging-face-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/huggingface/create) | +| [Maven](/formats/maven-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | +| [npm](/formats/npm-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/npm/create) | +| [NuGet](/formats/nuget-feed) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/nuget/create) | +| [Python](/formats/python-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/python/create) | +| [RedHat](/formats/redhat-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/rpm/create) | +| [Ruby](/formats/ruby-repository) | ✅ | ✅ | ✅ |
Ahead-of-Time
| [API](/api/repos/upstream/ruby/create) | +| [sbt](/formats/sbt-repository) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/maven/create) | +| [Swift](/formats/swift-registry) | ✅ | ✅ | ✅ |
Just-in-Time
| [API](/api/repos/upstream/swift/create) | @@ -137,7 +138,7 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to | Upstream URL | The URL for this upstream source. For Alpine Linux, use the mirror root (e.g., `https://dl-cdn.alpinelinux.org/alpine/`). For Wolfi, use `https://packages.wolfi.dev/os/`. The distribution type (Alpine or Wolfi) is automatically detected from the domain — you do not need to configure it separately. | | Proxy Only | Proxy requests through to upstream sources in order to match assets that are not present in this repository. | | Cache and Proxy | Proxy the initial request for an asset through to the upstream source and then store (cache) resolved assets in this repository for future requests. | -| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommended leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. | +| Verify SSL Certificates | If enabled, SSL certificates are verified when requests are made to this upstream. We recommend leaving this enabled for all public sources to help mitigate Man-In-The-Middle (MITM) attacks. | | Authentication (optional) | Optional credentials that can be provided if the upstream is not publicly accessible. | | Headers (optional) | Optional Key-Value headers that can be passed to upstreams with each request. | From bf29705a61cffcdc64b0e360e5cf1d5c922b85b3 Mon Sep 17 00:00:00 2001 From: Kyle Harrison Date: Tue, 31 Mar 2026 14:01:42 +0100 Subject: [PATCH 5/6] docs: restores explicit examples with credentials --- src/content/formats/alpine-repository.mdx | 78 +++++++++-------------- 1 file changed, 29 insertions(+), 49 deletions(-) diff --git a/src/content/formats/alpine-repository.mdx b/src/content/formats/alpine-repository.mdx index 04a6a50c..5c65c067 100644 --- a/src/content/formats/alpine-repository.mdx +++ b/src/content/formats/alpine-repository.mdx @@ -5,6 +5,8 @@ import { Tag, Note, Video } from '@/components'; +Alpine Linux is a lightweight Linux Distribution that is designed to be smaller and more resource efficient, and as such has grown popular as the basis for Docker containers. + Cloudsmith supports hosting and distributing packages in the APK format, used by both **Alpine Linux** and **Wolfi**. Although both distributions use the same package format, they are distinct and incompatible — packages built for Alpine Linux cannot be used on Wolfi, and vice versa. - **Alpine Linux** is a lightweight Linux distribution popular as a Docker container base image. It uses versioned releases (e.g., v3.0, …, v3.22, v3.23, etc.) grouped by architecture e.g. `v3.23/main/aarch64/` via the `apk` package manager. @@ -60,7 +62,8 @@ cloudsmith push alpine OWNER/REPOSITORY/alpine/VERSION PACKAGE_NAME-PACKAGE_VERS Upload a package for specific Alpine version: ```shell -cloudsmith push alpine OWNER/REPOSITORY/alpine/v3.23 libjq-1.0.3.apk``` +cloudsmith push alpine OWNER/REPOSITORY/alpine/v3.23 libjq-1.0.3.apk +``` Upload a package for any version of Alpine: @@ -68,16 +71,16 @@ Upload a package for any version of Alpine: cloudsmith push alpine OWNER/REPOSITORY/alpine/any-version libjq-1.0.3.apk ``` -Upload a WOLFI package: +Upload a package for Wolfi: + +```shell +cloudsmith push alpine OWNER/REPOSITORY/wolfi/any-version libjq-1.0.3.apk +``` Wolfi has a single index that typically contains all versions available within the past 12 months. When uploading a Wolfi package to Cloudsmith, use the `wolfi/any-version` distribution. -```shell -cloudsmith push alpine OWNER/REPOSITORY/wolfi/any-version glibc-2.38-r1.apk -``` - ### Upload via Cloudsmith Website Please see [Upload a Package](/artifact-management/package-upload) for details of how to upload via the Cloudsmith web app. @@ -96,6 +99,7 @@ To install Alpine packages from a public Cloudsmith repository, you can set up t ```shell sudo apk add --no-cache bash + curl -sLf \ 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo bash @@ -105,6 +109,7 @@ If you need to force a specific distribution: ```shell sudo apk add --no-cache bash + curl -sLf \ 'https://dl.cloudsmith.io/public/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo distro=alpine codename=VERSION bash @@ -128,13 +133,6 @@ Private Cloudsmith repositories require authentication. You can choose between E Entitlement Tokens and API-Keys should be treated as secrets. You should ensure that you do not commit them in configuration files along with source code, or expose them in any logs. -Replace `CREDENTIALS` with one of: - -| Method | Value | -|:--------|:-------------------| -| API Key | `USERNAME:API-KEY` | -| Token | `token:TOKEN` | - To install Alpine packages from a private Cloudsmith repository, you can set up the repository using the following: ```shell Entitlement Token Auth @@ -142,9 +140,16 @@ curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine | sudo bash ``` -```shell HTTP Basic Auth +```shell HTTP Basic Auth (API-Key) sudo apk add --no-cache bash -curl -u "CREDENTIALS" -sLf \ +curl -u "USERNAME:API-KEY" -sLf \ + 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ + | sudo bash +``` + +```shell HTTP Basic Auth (Token) +sudo apk add --no-cache bash +curl -u "token:TOKEN" -sLf \ 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ | sudo bash ``` @@ -157,14 +162,7 @@ curl -sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/cfg/setup/bash.alpine | sudo distro=alpine codename=VERSION bash ``` -```shell Alpine (HTTP Basic Auth) -sudo apk add --no-cache bash -curl -u "CREDENTIALS" -sLf \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/cfg/setup/bash.alpine.sh' \ - | sudo distro=alpine codename=VERSION bash -``` - -Or, you can manually configure the repository: +Or, you can manually configure the repository for Alpine: ```shell Entitlement Token Auth curl -1sLf 'https://dl.cloudsmith.io/TOKEN/OWNER/REPOSITORY/rsa.FINGERPRINT.key' \ @@ -175,22 +173,16 @@ apk update ``` ```shell HTTP Basic Auth -curl -u "CREDENTIALS" -1sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/rsa.FINGERPRINT.key' \ +curl -u "token:TOKEN" -1sLf 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/rsa.FINGERPRINT.key' \ > /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub -echo "https://CREDENTIALS@dl.cloudsmith.io/basic/OWNER/REPOSITORY/alpine/VERSION/main" \ +echo "https://token:TOKEN@dl.cloudsmith.io/basic/OWNER/REPOSITORY/alpine/VERSION/main" \ > /etc/apk/repositories apk update ``` -### Wolfi - - -The automated setup script (`bash.alpine.sh`) does not support Wolfi. Use the manual setup below instead. - - -Wolfi uses a flat repository path (`alpine/os`) with no version hierarchy. The setup differs from Alpine in two ways: the existing Chainguard/Wolfi keys must be removed, and the repository path uses `alpine/os` rather than `alpine/VERSION/main`. +Alternatively, for Wolfi distributions: -```shell Entitlement Token Auth +```shell Manual Configuration apk add curl # Remove existing Wolfi/Chainguard keys and repository list @@ -210,22 +202,10 @@ apk update -v --no-cache apk add -v --no-cache PACKAGE_NAME ``` -```shell HTTP Basic Auth -apk add curl - -rm -f /etc/apk/keys/chainguard-* -rm -f /etc/apk/keys/wolfi-signing.rsa.pub -rm -f /etc/apk/repositories - -curl -u "CREDENTIALS" -L -o /etc/apk/keys/REPOSITORY@OWNER-FINGERPRINT.rsa.pub \ - 'https://dl.cloudsmith.io/basic/OWNER/REPOSITORY/rsa.FINGERPRINT.key' - -echo "https://CREDENTIALS@dl.cloudsmith.io/basic/OWNER/REPOSITORY/alpine/os" \ - > /etc/apk/repositories + +The automated setup script (`bash.alpine.sh`) does not support Wolfi. Use the manual setup for this distribution. + -apk update -v --no-cache -apk add -v --no-cache PACKAGE_NAME -``` ### Installing a Package @@ -256,7 +236,7 @@ apk update The Alpine format supports upstream proxying and caching for both Alpine Linux and Wolfi repositories. When a package is requested, Cloudsmith checks for a local copy. If missing, it fetches the package from the upstream, caches it as a first-class local package, and serves it. -However, they are distinct, incompatible distributions and **cannot be mixed in the same upstream**. The key difference is in their URL structures — these paths only return packages for the given distribution: +The key difference between Alpine and Wolfi upstreams is in their URL structures — these paths only return packages for the given distribution: - **Alpine Linux** uses a versioned path structure: `/{version}/{branch}/{arch}/` (e.g., `/v3.23/main/x86_64/`) - **Wolfi** uses a flat structure with no version hierarchy: `/{arch}/` (e.g., `/x86_64/`) From 672177149cc2418faddd8e375d67a506b5f58418 Mon Sep 17 00:00:00 2001 From: Padraig O'Connor Date: Wed, 1 Apr 2026 15:02:57 +0100 Subject: [PATCH 6/6] add block image for upstream creation --- src/content/formats/alpine-repository.mdx | 4 ---- .../repositories/upstreams/images/alpine.png | Bin 0 -> 122472 bytes src/content/repositories/upstreams/index.mdx | 5 ++++- 3 files changed, 4 insertions(+), 5 deletions(-) create mode 100644 src/content/repositories/upstreams/images/alpine.png diff --git a/src/content/formats/alpine-repository.mdx b/src/content/formats/alpine-repository.mdx index 5c65c067..47b60c84 100644 --- a/src/content/formats/alpine-repository.mdx +++ b/src/content/formats/alpine-repository.mdx @@ -241,10 +241,6 @@ The key difference between Alpine and Wolfi upstreams is in their URL structures - **Alpine Linux** uses a versioned path structure: `/{version}/{branch}/{arch}/` (e.g., `/v3.23/main/x86_64/`) - **Wolfi** uses a flat structure with no version hierarchy: `/{arch}/` (e.g., `/x86_64/`) - -Alpine and Wolfi upstream proxying and caching is in Early Access. [Contact us](https://cloudsmith.com/company/contact-us) to enable it for your Workspace. - - ### Supported Upstream Sources | Distribution | Upstream URL | Notes | diff --git a/src/content/repositories/upstreams/images/alpine.png b/src/content/repositories/upstreams/images/alpine.png new file mode 100644 index 0000000000000000000000000000000000000000..ccfafd5786b05e341111e056ad48c711204604fa GIT binary patch literal 122472 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 Xw}|JOtzu&|P=vwL)z4*}Q$iB}qt>jt literal 0 HcmV?d00001 diff --git a/src/content/repositories/upstreams/index.mdx b/src/content/repositories/upstreams/index.mdx index 20dff0e1..a909433e 100644 --- a/src/content/repositories/upstreams/index.mdx +++ b/src/content/repositories/upstreams/index.mdx @@ -3,7 +3,7 @@ import { Note, BlockImage } from '@/components' import quick_configure from './images/quick_configure.png' import upstream_formats from './images/upstream_formats.png' import edit_upstream from './images/edit_upstream.png' - +import alpine from './images/alpine.png' import cargo from './images/cargo.png' import conda from './images/conda.png' import composer from './images/composer.png' @@ -131,6 +131,9 @@ Click the "+ Add Upstream Proxy" button, and then select the format you want to #### Create a Alpine Upstream + + + | Form Field | Description | | :------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Name | A descriptive name for this upstream source. A shortened version of this name will be used for tagging cached packages retrieved from this upstream. |