all lists on lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
	Hannes Duerr <h.duerr@proxmox.com>
Cc: Thomas Lamprecht <t.lamprecht@proxmox.com>
Subject: Re: [pve-devel] [PATCH pve-nvidia-vgpu-helper v2 3/4] add pve-nvidia-vgpu-helper and Makefile to make dependency installtion more convenient
Date: Tue, 21 Jan 2025 11:47:34 +0100	[thread overview]
Message-ID: <e77f92e5-2634-4f77-8f2b-170abc35c091@proxmox.com> (raw)
In-Reply-To: <20250121100415.64884-4-h.duerr@proxmox.com>

looked (&tested) mostly the script itself, not at the Makefile

Looks mostly OK to me, the only thing i noticed is that we only look at the current running kernel,
maybe we should also check if the opt in kernel is installed?

e.g. my test was:

install pve + this package
run 'pve-nvidia-vgpu-helper' => installs default headers
install proxmox-kernel-6.11
run 'pve-nvidia-vgpu-helper' again => says "all required packages are installed' but for dkms i
    think it wouldn't work (and not loading the module after a reboot)

It's probably not a bad idea to install the packages for all installed kernel versions? (@Thomas ?)
Not super sure about how exactly DKMS works, but i think it tries to compile for all installed 
kernel versions no?

On 1/21/25 11:04, Hannes Duerr wrote:
> we add the pve-nvidia-vgpu-helper script to make the installation of the
> required nvidia vgpu driver dependencies more convenient.
> We also add a Makefile to assist in building the debian package and
> installing the script
> 
> Signed-off-by: Hannes Duerr <h.duerr@proxmox.com>
> ---
>   Makefile               | 54 ++++++++++++++++++++++++++++++++++
>   pve-nvidia-vgpu-helper | 66 ++++++++++++++++++++++++++++++++++++++++++
>   2 files changed, 120 insertions(+)
>   create mode 100644 Makefile
>   create mode 100755 pve-nvidia-vgpu-helper
> 
> diff --git a/Makefile b/Makefile
> new file mode 100644
> index 0000000..c6e461d
> --- /dev/null
> +++ b/Makefile
> @@ -0,0 +1,54 @@
> +include /usr/share/dpkg/default.mk
> +
> +PACKAGE=pve-nvidia-vgpu-helper
> +
> +BINDIR=/usr/bin/
> +DESTDIR=
> +
> +GITVERSION:=$(shell git rev-parse HEAD)
> +
> +BUILDDIR ?= $(PACKAGE)-$(DEB_VERSION)
> +DSC=$(PACKAGE)_$(DEB_VERSION).dsc
> +
> +DEB=$(PACKAGE)_$(DEB_VERSION_UPSTREAM_REVISION)_all.deb
> +
> +all:
> +deb: $(DEB)
> +
> +$(BUILDDIR): debian
> +	rm -rf $@ $@.tmp
> +	rsync -a * $@.tmp/
> +	echo "git clone git://git.proxmox.com/git/pve-nvidia-vgpu-helper.git\\ngit checkout $(GITVERSION)" > $@.tmp/debian/SOURCE
> +	mv $@.tmp $@
> +
> +$(DEB): $(BUILDDIR)
> +	cd $(BUILDDIR); dpkg-buildpackage -b -uc -us
> +	lintian $(DEB)
> +
> +dsc: $(DSC)
> +	$(MAKE) clean
> +	$(MAKE) $(DSC)
> +	lintian $(DSC)
> +
> +$(DSC): $(BUILDDIR)
> +	cd $(BUILDDIR); dpkg-buildpackage -S -uc -us
> +
> +sbuild: $(DSC)
> +	sbuild $(DSC)
> +
> +.PHONY: install
> +install: pve-nvidia-vgpu-helper
> +	install -d $(DESTDIR)$(BINDIR)
> +	install -m 0755 pve-nvidia-vgpu-helper $(DESTDIR)$(BINDIR)
> +
> +.PHONY: upload
> +upload: UPLOAD_DIST ?= $(DEB_DISTRIBUTION)
> +upload: $(DEB)
> +	tar cf - $(DEB)|ssh repoman@repo.proxmox.com -- upload --product pve --dist $(UPLOAD_DIST)
> +
> +.PHONY: distclean
> +distclean: clean
> +
> +.PHONY: clean
> +clean:
> +	rm -rf *~ $(PACKAGE)-[0-9]*/ $(PACKAGE)*.tar.* *.deb *.dsc *.changes *.build *.buildinfo
> diff --git a/pve-nvidia-vgpu-helper b/pve-nvidia-vgpu-helper
> new file mode 100755
> index 0000000..fc0856e
> --- /dev/null
> +++ b/pve-nvidia-vgpu-helper
> @@ -0,0 +1,66 @@
> +#!/usr/bin/perl
> +
> +use strict;
> +use warnings;
> +
> +use PVE::Tools qw(run_command);
> +use AptPkg::Cache;
> +
> +my @apt_install = qw(apt-get --no-install-recommends -o Dpkg:Options::=--force-confnew install --);
> +my @dependencies = qw(dkms libc6-dev);
> +my @missing_packages;
> +
> +die "Please execute the script with root privileges\n" if $>;
> +
> +my $apt_cache = AptPkg::Cache->new();
> +die "unable to initialize AptPkg::Cache\n" if !$apt_cache;
> +
> +sub package_is_installed {
> +    my ($package) = @_;
> +    my $p = $apt_cache->{$package};
> +    if (!defined($p->{CurrentState}) || $p->{CurrentState} ne "Installed") {
> +	push(@missing_packages, $package);
> +    }
> +}
> +
> +foreach my $dependency (@dependencies) {
> +    package_is_installed($dependency);
> +}
> +
> +
> +my $running_kernel;
> +run_command( ['/usr/bin/uname', '-r' ],
> +    outfunc => sub { $running_kernel = shift } );
> +
> +my $default_major_minor_version;
> +run_command(['/usr/bin/dpkg-query', '-f', '${Depends}', '-W', 'proxmox-default-kernel'],
> +    outfunc => sub { $default_major_minor_version = shift } );
> +
> +my $default_full_version;
> +run_command(['/usr/bin/dpkg-query', '-f', '${Version}', '-W', $default_major_minor_version],
> +    outfunc => sub { $default_full_version = shift } );
> +
> +if ($running_kernel =~ /$default_full_version-pve/) {
> +    print "You are running the proxmox default kernel `proxmox-kernel-$running_kernel`\n";
> +    package_is_installed("proxmox-default-headers");
> +} elsif ($running_kernel =~ /pve/) {
> +    print "You are running the non default proxmox kernel `proxmox-kernel-$running_kernel`\n";
> +    package_is_installed("proxmox-headers-$running_kernel");
> +} else {
> +    die "You are not using a proxmox-kernel, please make sure that the appropriate header package is installed.\n";
> +}
> +
> +if (!@missing_packages){
> +    print "All required packages are installed, you can continue with the Nvidia vGPU driver installation.\n";
> +    exit;
> +} else {
> +    print "The following packages are missing:\n" . join("\n", @missing_packages) ."\n";
> +    print "Would you like to install them now (y/n)?\n";
> +}
> +
> +my $answer = <STDIN>;
> +if (defined($answer) && $answer =~ m/^\s*y(?:es)?\s*$/i) {
> +    if (system(@apt_install, @missing_packages) != 0) {
> +	die "apt failed during the installation: ($?)\n";
> +    }
> +}



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


  reply	other threads:[~2025-01-21 10:48 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-21 10:04 [pve-devel] [PATCH manager/nvidia-vgpu-helper v2 0/5] reduce setup steps for nvidia vgpu drivers Hannes Duerr
2025-01-21 10:04 ` [pve-devel] [PATCH pve-nvidia-vgpu-helper v2 1/4] create a debian package to make the installation of Nvidia vGPU drivers more convenient Hannes Duerr
2025-01-21 10:04 ` [pve-devel] [PATCH pve-nvidia-vgpu-helper v2 2/4] debian/control: add dependency for helper script Hannes Duerr
2025-01-21 10:04 ` [pve-devel] [PATCH pve-nvidia-vgpu-helper v2 3/4] add pve-nvidia-vgpu-helper and Makefile to make dependency installtion more convenient Hannes Duerr
2025-01-21 10:47   ` Dominik Csapak [this message]
2025-01-21 15:36     ` Thomas Lamprecht
2025-01-21 16:12       ` Hannes Dürr
2025-01-22 15:23         ` Hannes Dürr
2025-01-22 16:04           ` Thomas Lamprecht
2025-01-23 12:38             ` Hannes Dürr
2025-01-21 10:04 ` [pve-devel] [PATCH pve-nvidia-vgpu-helper v2 4/4] debian: add and install nvidia-vgpu systemd template unit file Hannes Duerr
2025-01-21 10:36   ` Dominik Csapak
2025-01-21 11:58     ` Hannes Dürr
2025-01-22 13:14     ` Thomas Lamprecht
2025-01-21 10:04 ` [pve-devel] [PATCH pve-manager v2 1/1] debian/control: add pve-nvidia-vgpu-helper as dependency Hannes Duerr

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e77f92e5-2634-4f77-8f2b-170abc35c091@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=h.duerr@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=t.lamprecht@proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal