[pbs-devel] [PATCH proxmox-offline-mirror] mirror: add support for trixie repositories

Shannon Sterz s.sterz at proxmox.com
Wed Aug 27 16:35:55 CEST 2025


small note: this now allows configuring a pmg trixie repository. this
does not exist, yet. however, i think adding a special case for that now
and removing it in the not so distant future, when it exists again seems
unlikely to be worth the effort to me.

On Wed Aug 27, 2025 at 4:24 PM CEST, Shannon Sterz wrote:
> Signed-off-by: Shannon Sterz <s.sterz at proxmox.com>
> ---
>  src/bin/proxmox-offline-mirror.rs | 99 +++++++++++++++++++++----------
>  1 file changed, 69 insertions(+), 30 deletions(-)
>
> diff --git a/src/bin/proxmox-offline-mirror.rs b/src/bin/proxmox-offline-mirror.rs
> index 6a5063a..9aaf058 100644
> --- a/src/bin/proxmox-offline-mirror.rs
> +++ b/src/bin/proxmox-offline-mirror.rs
> @@ -46,6 +46,7 @@ impl Display for Distro {
>  }
>
>  enum Release {
> +    Trixie,
>      Bookworm,
>      Bullseye,
>      Buster,
> @@ -54,6 +55,7 @@ enum Release {
>  impl Display for Release {
>      fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
>          match self {
> +            Release::Trixie => write!(f, "trixie"),
>              Release::Bookworm => write!(f, "bookworm"),
>              Release::Bullseye => write!(f, "bullseye"),
>              Release::Buster => write!(f, "buster"),
> @@ -135,6 +137,17 @@ fn derive_debian_repo(
>          skip_sections,
>      };
>      let url = match (release, variant) {
> +        (Release::Trixie, DebianVariant::Main) => "http://deb.debian.org/debian trixie",
> +        (Release::Trixie, DebianVariant::Security) => {
> +            "http://deb.debian.org/debian-security trixie-security"
> +        }
> +        (Release::Trixie, DebianVariant::Updates) => "http://deb.debian.org/debian trixie-updates",
> +        (Release::Trixie, DebianVariant::Backports) => {
> +            "http://deb.debian.org/debian trixie-backports"
> +        }
> +        (Release::Trixie, DebianVariant::Debug) => {
> +            "http://deb.debian.org/debian-debug trixie-debug"
> +        }
>          (Release::Bookworm, DebianVariant::Main) => "http://deb.debian.org/debian bookworm",
>          (Release::Bookworm, DebianVariant::Security) => {
>              "http://deb.debian.org/debian-security bookworm-security"
> @@ -176,6 +189,13 @@ fn derive_debian_repo(
>
>      let url = format!("{url} {components}");
>      let key = match (release, variant) {
> +        (Release::Trixie, DebianVariant::Security) => {
> +            "/usr/share/keyrings/debian-archive-trixie-security-automatic.gpg"
> +        }
> +        (Release::Trixie, DebianVariant::Updates) | (Release::Trixie, DebianVariant::Backports) => {
> +            "/usr/share/keyrings/debian-archive-trixie-automatic.gpg"
> +        }
> +        (Release::Trixie, _) => "/usr/share/keyrings/debian-archive-trixie-stable.gpg",
>          (Release::Bookworm, DebianVariant::Security) => {
>              "/usr/share/keyrings/debian-archive-bookworm-security-automatic.gpg"
>          }
> @@ -217,6 +237,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
>          let dist = read_selection_from_tty("Select distro to mirror", distros, None)?;
>
>          let releases = &[
> +            (Release::Trixie, "Trixie"),
>              (Release::Bookworm, "Bookworm"),
>              (Release::Bullseye, "Bullseye"),
>              (Release::Buster, "Buster"),
> @@ -238,7 +259,9 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
>                      read_selection_from_tty("Select repository variant", variants, Some(0))?;
>
>                  let default_components = match release {
> -                    Release::Bookworm => "main contrib non-free non-free-firmware",
> +                    Release::Bookworm | Release::Trixie => {
> +                        "main contrib non-free non-free-firmware"
> +                    }
>                      _ => "main contrib non-free",
>                  };
>
> @@ -259,6 +282,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
>                  }
>
>                  let releases = match release {
> +                    Release::Trixie => vec![(CephRelease::Squid, "Squid (19.x)")],
>                      Release::Bookworm => vec![
>                          (CephRelease::Quincy, "Quincy (17.x)"),
>                          (CephRelease::Reef, "Reef (18.x)"),
> @@ -286,41 +310,46 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
>                      Some(releases.len() - 1),
>                  )?;
>
> -                let (base_url, components) = if matches!(release, Release::Bookworm) {
> -                    let variants = &[
> -                        (ProxmoxVariant::Enterprise, "Enterprise repository"),
> -                        (ProxmoxVariant::NoSubscription, "No-Subscription repository"),
> -                        (ProxmoxVariant::Test, "Test repository"),
> -                    ];
> +                let (base_url, components) =
> +                    if matches!(release, Release::Bookworm | Release::Trixie) {
> +                        let variants = &[
> +                            (ProxmoxVariant::Enterprise, "Enterprise repository"),
> +                            (ProxmoxVariant::NoSubscription, "No-Subscription repository"),
> +                            (ProxmoxVariant::Test, "Test repository"),
> +                        ];
>
> -                    let variant =
> -                        read_selection_from_tty("Select repository variant", variants, Some(0))?;
> +                        let variant = read_selection_from_tty(
> +                            "Select repository variant",
> +                            variants,
> +                            Some(0),
> +                        )?;
>
> -                    match variant {
> -                        ProxmoxVariant::Enterprise => {
> -                            use_subscription = Some(ProductType::Pve);
> -                            (
> -                                "https://enterprise.proxmox.com/debian/ceph",
> -                                "enterprise".to_string(),
> -                            )
> +                        match variant {
> +                            ProxmoxVariant::Enterprise => {
> +                                use_subscription = Some(ProductType::Pve);
> +                                (
> +                                    "https://enterprise.proxmox.com/debian/ceph",
> +                                    "enterprise".to_string(),
> +                                )
> +                            }
> +                            ProxmoxVariant::NoSubscription => (
> +                                "http://download.proxmox.com/debian/ceph",
> +                                "no-subscription".to_string(),
> +                            ),
> +                            ProxmoxVariant::Test => (
> +                                "http://download.proxmox.com/debian/ceph",
> +                                "test".to_string(),
> +                            ),
>                          }
> -                        ProxmoxVariant::NoSubscription => (
> +                    } else {
> +                        (
>                              "http://download.proxmox.com/debian/ceph",
> -                            "no-subscription".to_string(),
> -                        ),
> -                        ProxmoxVariant::Test => (
> -                            "http://download.proxmox.com/debian/ceph",
> -                            "test".to_string(),
> -                        ),
> -                    }
> -                } else {
> -                    (
> -                        "http://download.proxmox.com/debian/ceph",
> -                        read_string_from_tty("Enter repository components", Some("main test"))?,
> -                    )
> -                };
> +                            read_string_from_tty("Enter repository components", Some("main test"))?,
> +                        )
> +                    };
>
>                  let key = match release {
> +                    Release::Trixie => "/etc/apt/trusted.gpg.d/proxmox-release-trixie.gpg",
>                      Release::Bookworm => "/etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg",
>                      Release::Bullseye => "/etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg",
>                      Release::Buster => "/etc/apt/trusted.gpg.d/proxmox-release-buster.gpg",
> @@ -353,6 +382,15 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
>
>                  // TODO enterprise query for key!
>                  let url = match (release, variant) {
> +                    (Release::Trixie, ProxmoxVariant::Enterprise) => format!(
> +                        "https://enterprise.proxmox.com/debian/{product} trixie {product}-enterprise"
> +                    ),
> +                    (Release::Trixie, ProxmoxVariant::NoSubscription) => format!(
> +                        "http://download.proxmox.com/debian/{product} trixie {product}-no-subscription"
> +                    ),
> +                    (Release::Trixie, ProxmoxVariant::Test) => {
> +                        format!("http://download.proxmox.com/debian/{product} trixie {product}test")
> +                    }
>                      (Release::Bookworm, ProxmoxVariant::Enterprise) => format!(
>                          "https://enterprise.proxmox.com/debian/{product} bookworm {product}-enterprise"
>                      ),
> @@ -390,6 +428,7 @@ fn action_add_mirror(config: &SectionConfigData) -> Result<Vec<MirrorConfig>, Er
>                  };
>
>                  let key = match release {
> +                    Release::Trixie => "/etc/apt/trusted.gpg.d/proxmox-release-trixie.gpg",
>                      Release::Bookworm => "/etc/apt/trusted.gpg.d/proxmox-release-bookworm.gpg",
>                      Release::Bullseye => "/etc/apt/trusted.gpg.d/proxmox-release-bullseye.gpg",
>                      Release::Buster => "/etc/apt/trusted.gpg.d/proxmox-release-buster.gpg",





More information about the pbs-devel mailing list