From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <pve-devel-bounces@lists.proxmox.com>
Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68])
	by lore.proxmox.com (Postfix) with ESMTPS id 610E71FF15C
	for <inbox@lore.proxmox.com>; Fri,  2 May 2025 13:01:07 +0200 (CEST)
Received: from firstgate.proxmox.com (localhost [127.0.0.1])
	by firstgate.proxmox.com (Proxmox) with ESMTP id 8B3101EE0E;
	Fri,  2 May 2025 13:01:18 +0200 (CEST)
Date: Fri, 02 May 2025 13:00:42 +0200
Message-Id: <D9LMFUUXXTVX.1JB2J0GGXJ27E@proxmox.com>
From: "Christoph Heiss" <c.heiss@proxmox.com>
To: "Aaron Lauterer" <a.lauterer@proxmox.com>
Mime-Version: 1.0
X-Mailer: aerc 0.20.1
References: <20250423132825.1194271-1-a.lauterer@proxmox.com>
In-Reply-To: <20250423132825.1194271-1-a.lauterer@proxmox.com>
X-SPAM-LEVEL: Spam detection results:  0
 AWL 0.029 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DMARC_MISSING             0.1 Missing DMARC policy
 KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment
 RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to
 Validity was blocked. See
 https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more
 information.
 SPF_HELO_NONE           0.001 SPF: HELO does not publish an SPF Record
 SPF_PASS               -0.001 SPF: sender matches SPF record
 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See
 http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more
 information. [pveceph.pm]
Subject: Re: [pve-devel] [RFC manager 1/2] fix #5244 pveceph: install: add
 new repository for offline installation
X-BeenThere: pve-devel@lists.proxmox.com
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com>
List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe>
List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/>
List-Post: <mailto:pve-devel@lists.proxmox.com>
List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help>
List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, 
 <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe>
Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Cc: Proxmox VE development discussion <pve-devel@lists.proxmox.com>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Errors-To: pve-devel-bounces@lists.proxmox.com
Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com>

Tested both patches on a fresh PVE 8.4 installation, setting up Ceph by
manually providing a repo in /etc/apt/sources.list.d/ and then
installing it
- through the web interface and
- with `pveceph -repository offline -version squid`

Tested-by: Christoph Heiss <c.heiss@proxmox.com>

On Wed Apr 23, 2025 at 3:28 PM CEST, Aaron Lauterer wrote:
> by adding a 4th repository option called 'offline'. If set, the ceph
> installation step will not touch the repository configuration.
>
> We add a simple version check to make sure that the latest version
> available (and to be installed) does match the selected major Ceph
> version.
>
> Signed-off-by: Aaron Lauterer <a.lauterer@proxmox.com>
> ---
> I am not sure if we should call the new repo option "offline" or
> something like "dont-set". Maybe someone else has another idea.

Maybe just call it 'manual'?

In patch #2, the (user-facing) description is "Offline (manual setup)" -
IMHO "manual setup" for the repos fits pretty good for what the option
does.

>
> I am sending this as an RFC to get feedback if the approach is in the
> right direction.
>
> One TODO that is missing, is to figure out which repo would be used and
> print some metadata about it, so that the admins can verify that the
> right manually configured repo is the source.
>
>  PVE/CLI/pveceph.pm | 46 +++++++++++++++++++++++++++++++++-------------
>  1 file changed, 33 insertions(+), 13 deletions(-)
>
> diff --git a/PVE/CLI/pveceph.pm b/PVE/CLI/pveceph.pm
> index 488aea04..f5fde026 100755
> --- a/PVE/CLI/pveceph.pm
> +++ b/PVE/CLI/pveceph.pm
> @@ -3,6 +3,7 @@ package PVE::CLI::pveceph;
>  use strict;
>  use warnings;
>
> +use AptPkg::Cache;
>  use Data::Dumper;
>  use Fcntl ':flock';
>  use File::Path;
> @@ -135,9 +136,12 @@ __PACKAGE__->register_method ({
>  	    },
>  	    repository => {
>  		type => 'string',
> -		enum => ['enterprise', 'no-subscription', 'test'],
> +		enum => ['enterprise', 'no-subscription', 'test', 'offline'],
>  		default => 'enterprise',
> -		description => "Ceph repository to use.",
> +		description => "Ceph repository to use. The 'offline' repository will not configure"
> +		    ." any repositories. Use it if the host cannot access the public repositories,"
> +		    ." for example if Proxmox Offline Mirror is used. A repository that contains"
> +		    ." the Ceph packages for the version needs to be manually configured beforehand!",
>  		optional => 1,

Since this parameter is optional anyway, what about only configuring
repositories when it is set? Instead of introducing another enum value
and defaulting to 'enterprise'.

Would seem a bit cleaner, but API breaking - so if, could only go in
with 9.0. Do we rely on that behaviour somewhere else?

>  	    },
>  	    'allow-experimental' => {
> @@ -166,6 +170,9 @@ __PACKAGE__->register_method ({
>  	} elsif ($repo eq 'no-subscription') {
>  	    warn "\nHINT: The no-subscription repository is not the best choice for production setups.\n"
>  	        ."Proxmox recommends using the enterprise repository with a valid subscription.\n";
> +	} elsif ($repo eq 'offline') {
> +	    warn "\nHINT: The offline repository option expects that the Ceph repository is already correctly configured."
> +		." For example, when used in combination with Proxmox Offline Mirror.\n";
>  	} else {
>  	    warn "\nWARN: The test repository should only be used for test setups or after consulting"
>  		." the official Proxmox support!\n\n"
> @@ -186,19 +193,21 @@ __PACKAGE__->register_method ({
>  	    die "Aborting installation as requested\n" if !$continue;
>  	}
>
> -	PVE::Tools::file_set_contents("/etc/apt/sources.list.d/ceph.list", $repolist);
> +	if ($repo ne "offline") {
> +	    PVE::Tools::file_set_contents("/etc/apt/sources.list.d/ceph.list", $repolist);
>
> -	if ($available_ceph_releases->{$cephver}->{unsupported}) {
> -	    if ($param->{'allow-experimental'}) {
> -		warn "NOTE: installing experimental/tech-preview Ceph release ${rendered_release}!\n";
> -	    } elsif (-t STDOUT) {
> -		print "Ceph ${rendered_release} is currently considered a technology preview for Proxmox VE - continue (y/N)? ";
> -		my $answer = <STDIN>;
> -		my $continue = defined($answer) && $answer =~ m/^\s*y(?:es)?\s*$/i;
> +	    if ($available_ceph_releases->{$cephver}->{unsupported}) {
> +		if ($param->{'allow-experimental'}) {
> +		    warn "NOTE: installing experimental/tech-preview Ceph release ${rendered_release}!\n";
> +		} elsif (-t STDOUT) {
> +		    print "Ceph ${rendered_release} is currently considered a technology preview for Proxmox VE - continue (y/N)? ";
> +		    my $answer = <STDIN>;
> +		    my $continue = defined($answer) && $answer =~ m/^\s*y(?:es)?\s*$/i;
>
> -		die "Aborting installation as requested\n" if !$continue;
> -	    } else {
> -		die "refusing to install tech-preview Ceph release ${rendered_release} without 'allow-experimental' parameter!\n";
> +		    die "Aborting installation as requested\n" if !$continue;
> +		} else {
> +		    die "refusing to install tech-preview Ceph release ${rendered_release} without 'allow-experimental' parameter!\n";

tiny nit: All other messages here are started capitalized, so this one
should as well for consistency.

> +		}
>  	    }
>  	}
>
> @@ -212,6 +221,17 @@ __PACKAGE__->register_method ({
>  	    )
>  	};
>
> +	if ($repo eq "offline") {
> +	    # TODO: get used repo metadata and print it as additional info
> +	    my $apt_cache = AptPkg::Cache->new() || die "unable to initialize AptPkg::Cache\n";
> +	    my @ceph_versions = $apt_cache->{'ceph-common:amd64'}->{'VersionList'}->@*;
> +	    my $latest_available = $ceph_versions[0]->{'VerStr'};
> +	    my $selected_version = PVE::Ceph::Releases::get_ceph_release_info($cephver)->{'release'};
> +
> +	    die "Selected Ceph version '${selected_version}' does not match the available version in the repository '${latest_available}' \n"
> +		if ($latest_available !~ "^$selected_version");
> +	}
> +
>  	my @apt_install = qw(apt-get --no-install-recommends -o Dpkg::Options::=--force-confnew install --);
>  	my @ceph_packages = qw(
>  	    ceph



_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel