all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements
@ 2021-07-07 21:09 Stoiko Ivanov
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 1/5] proxmox-boot: ignore call to grub-install from grub maintscripts Stoiko Ivanov
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Stoiko Ivanov @ 2021-07-07 21:09 UTC (permalink / raw)
  To: pve-devel

The following patchset addresses a few small issues reported during the PVE
7.0 beta and after the 7.0 stable release.

* patches 1+2 deal with grub-install being called during a distribution
  upgrade on some systems (I did not manage to get a VM installed with PVE
  6.4 to run into the issue)
* patch 3 addresses an issue where once someone removes pve-kernel-helper
  (without purging it) it becomes quite difficult to get it installed again
  (to remove pve-kernel-helper you need also to remove proxmox-ve, but as
  our forum shows [0] - this happens without the user noticing sometimes)
* patch 4+5 are a few improvements to the `p-b-t status` I consider
  worthwhile


Stoiko Ivanov (5):
  proxmox-boot: ignore call to grub-install from grub maintscripts
  proxmox-boot: divert call to grub-install to p-b-t init
  proxmox-boot: maintscript: change logic whether to add diversion
  proxmox-boot: print current boot mode with status output
  proxmox-boot: status: print present kernel versions

 bin/grub-install-wrapper         | 27 +++++++++++++++++++++++++++
 bin/proxmox-boot-tool            | 13 ++++++++++---
 debian/pve-kernel-helper.preinst |  2 +-
 3 files changed, 38 insertions(+), 4 deletions(-)

-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH pve-kernel-meta 1/5] proxmox-boot: ignore call to grub-install from grub maintscripts
  2021-07-07 21:09 [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Stoiko Ivanov
@ 2021-07-07 21:09 ` Stoiko Ivanov
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: divert call to grub-install to p-b-t init Stoiko Ivanov
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stoiko Ivanov @ 2021-07-07 21:09 UTC (permalink / raw)
  To: pve-devel

in certain cases the postinst script of grub-pc runs grub-install on
the disks it gets from debconf. Simply warn and exit with 0 if
grub-install is called by dpkg and from a grub related package

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 bin/grub-install-wrapper | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/bin/grub-install-wrapper b/bin/grub-install-wrapper
index a61e984..35f03fa 100755
--- a/bin/grub-install-wrapper
+++ b/bin/grub-install-wrapper
@@ -4,6 +4,12 @@ set -e
 . /usr/share/pve-kernel-helper/scripts/functions
 
 if proxmox-boot-tool status --quiet; then
+	#detect when being called by dpkg (e.g. grub-pc.postinst
+	if [ -n "$DPKG_RUNNING_VERSION" ] && \
+	echo "$DPKG_MAINTSCRIPT_PACKAGE" | grep -sq "^grub-"; then
+		warn "This system is booted via proxmox-boot-tool, ignoring dpkg call to grub-install"
+		exit 0
+	fi
 	warn "grub-install is disabled because this system is booted via proxmox-boot-tool, if you really need to run it, run /usr/sbin/grub-install.real"
 	exit 1
 else
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: divert call to grub-install to p-b-t init
  2021-07-07 21:09 [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Stoiko Ivanov
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 1/5] proxmox-boot: ignore call to grub-install from grub maintscripts Stoiko Ivanov
@ 2021-07-07 21:09 ` Stoiko Ivanov
  2021-07-08  7:06   ` Fabian Grünbichler
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 3/5] proxmox-boot: maintscript: change logic whether to add diversion Stoiko Ivanov
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 8+ messages in thread
From: Stoiko Ivanov @ 2021-07-07 21:09 UTC (permalink / raw)
  To: pve-devel

This way all ESPs (in case of a legacy booted system) get an
updated grub installation.

running only once between reboots (the markerfile is in /tmp) should
be enough. Sadly the environment does not provide a hint which version
grub is installed to.

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 bin/grub-install-wrapper | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/bin/grub-install-wrapper b/bin/grub-install-wrapper
index 35f03fa..2e70789 100755
--- a/bin/grub-install-wrapper
+++ b/bin/grub-install-wrapper
@@ -3,12 +3,33 @@ set -e
 
 . /usr/share/pve-kernel-helper/scripts/functions
 
+init_boot_disks() {
+	if ! (echo "${curr_uuid}" | grep -qE '[0-9a-fA-F]{4}-[0-9a-fA-F]{4}'); then
+		warn "WARN: ${curr_uuid} read from ${ESP_LIST} does not look like a VFAT-UUID - skipping"
+		return
+	fi
+
+	path="/dev/disk/by-uuid/$curr_uuid"
+	if [ ! -e "${path}" ]; then
+		warn "WARN: ${path} does not exist - clean '${ESP_LIST}'! - skipping"
+		return
+	fi
+	proxmox-boot-tool init "$path"
+}
+
 if proxmox-boot-tool status --quiet; then
 	#detect when being called by dpkg (e.g. grub-pc.postinst
 	if [ -n "$DPKG_RUNNING_VERSION" ] && \
 	echo "$DPKG_MAINTSCRIPT_PACKAGE" | grep -sq "^grub-"; then
-		warn "This system is booted via proxmox-boot-tool, ignoring dpkg call to grub-install"
-		exit 0
+		MARKER_FILE="/tmp/proxmox-boot-tool.dpkg.marker"
+		if [ ! -e "$MARKER_FILE" ]; then
+		    warn "This system is booted via proxmox-boot-tool, running proxmox-boot-tool init for all configured bootdisks"
+		    loop_esp_list init_boot_disks
+		    touch "$MARKER_FILE"
+		    exit 0
+		else
+		    exit 0
+		fi
 	fi
 	warn "grub-install is disabled because this system is booted via proxmox-boot-tool, if you really need to run it, run /usr/sbin/grub-install.real"
 	exit 1
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH pve-kernel-meta 3/5] proxmox-boot: maintscript: change logic whether to add diversion
  2021-07-07 21:09 [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Stoiko Ivanov
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 1/5] proxmox-boot: ignore call to grub-install from grub maintscripts Stoiko Ivanov
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: divert call to grub-install to p-b-t init Stoiko Ivanov
@ 2021-07-07 21:09 ` Stoiko Ivanov
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 4/5] proxmox-boot: print current boot mode with status output Stoiko Ivanov
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Stoiko Ivanov @ 2021-07-07 21:09 UTC (permalink / raw)
  To: pve-devel

Deciding whether or not to add the diversion based on the version
alone fails quite hard in case pve-kernel-helper is in dpkg-state 'rc'
(removed not purged) as reported in our community forum[0]:
* removing pve-kernel-helper removes the diversion of grub-install
* if config-files are still present the preinst script gets called
  with the version of the config-files (the version that got removed)
* if the version was newer than 6.4-1~ then no diversion is added
* unpacking fails, because grub-install would be overwritten leaving
  pve-kernel-helper in state 'ic'

Explicitly checking whether the diversion is in place sounds like a
robust approach here.

downside: documentation on dpkg-divert in maintainer scripts [1] uses
the version approach.

[0] https://forum.proxmox.com/threads/pve-kernel-helper-wont-install.90029/
[1] https://www.debian.org/doc/debian-policy/ap-pkg-diversions.html

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 debian/pve-kernel-helper.preinst | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/debian/pve-kernel-helper.preinst b/debian/pve-kernel-helper.preinst
index 9ec726d..e2464c9 100644
--- a/debian/pve-kernel-helper.preinst
+++ b/debian/pve-kernel-helper.preinst
@@ -4,7 +4,7 @@ set -e
 
 case "$1" in
     install|upgrade)
-        if dpkg --compare-versions "$2" lt "6.4-1~"; then
+        if ! dpkg -S /usr/sbin/grub-install|grep -q 'diversion by pve-kernel-helper'; then
             dpkg-divert --package pve-kernel-helper --add --rename \
                 --divert /usr/sbin/grub-install.real /usr/sbin/grub-install
         fi
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH pve-kernel-meta 4/5] proxmox-boot: print current boot mode with status output
  2021-07-07 21:09 [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Stoiko Ivanov
                   ` (2 preceding siblings ...)
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 3/5] proxmox-boot: maintscript: change logic whether to add diversion Stoiko Ivanov
@ 2021-07-07 21:09 ` Stoiko Ivanov
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 5/5] proxmox-boot: status: print present kernel versions Stoiko Ivanov
  2021-07-08  8:05 ` [pve-devel] applied-series: [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Thomas Lamprecht
  5 siblings, 0 replies; 8+ messages in thread
From: Stoiko Ivanov @ 2021-07-07 21:09 UTC (permalink / raw)
  To: pve-devel

most support questions w.r.t. proxmox-boot-tool do have us
asking for `stat /sys/firmware/efi` output anyways

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 bin/proxmox-boot-tool | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bin/proxmox-boot-tool b/bin/proxmox-boot-tool
index 079fa26..1e984d6 100755
--- a/bin/proxmox-boot-tool
+++ b/bin/proxmox-boot-tool
@@ -381,6 +381,11 @@ status() {
 		exit 2
 	fi
 	if [ -z "$quiet" ]; then
+		if [ -d /sys/firmware/efi ]; then
+		    echo "System currently booted with uefi"
+		else
+		    echo "System currently booted with legacy bios"
+		fi
 		loop_esp_list _status_detail
 	fi
 }
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] [PATCH pve-kernel-meta 5/5] proxmox-boot: status: print present kernel versions
  2021-07-07 21:09 [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Stoiko Ivanov
                   ` (3 preceding siblings ...)
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 4/5] proxmox-boot: print current boot mode with status output Stoiko Ivanov
@ 2021-07-07 21:09 ` Stoiko Ivanov
  2021-07-08  8:05 ` [pve-devel] applied-series: [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Thomas Lamprecht
  5 siblings, 0 replies; 8+ messages in thread
From: Stoiko Ivanov @ 2021-07-07 21:09 UTC (permalink / raw)
  To: pve-devel

gives a better overview in case the system was switched at one time
from uefi to legacy (or the other way around).

Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
 bin/proxmox-boot-tool | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/bin/proxmox-boot-tool b/bin/proxmox-boot-tool
index 1e984d6..93760fb 100755
--- a/bin/proxmox-boot-tool
+++ b/bin/proxmox-boot-tool
@@ -353,16 +353,18 @@ _status_detail() {
 
 	result=""
 	if [ -f "${mountpoint}/$PMX_LOADER_CONF" ]; then
-		result="uefi"
 		if [ ! -d "${mountpoint}/$PMX_ESP_DIR" ]; then
 			warn "${path}/$PMX_ESP_DIR does not exist"
 		fi
+		versions_uefi=$(ls -1 ${mountpoint}/$PMX_ESP_DIR | awk '{printf (NR>1?", ":"") $0}')
+		result="uefi (versions: ${versions_uefi})"
 	fi
 	if [ -d "${mountpoint}/grub" ]; then
+		versions_grub=$(ls -1 ${mountpoint}/vmlinuz-* | awk '{ gsub(/.*\/vmlinuz-/, ""); printf (NR>1?", ":"") $0 }')
 		if [ -n "$result" ]; then
-		    result="${result},grub"
+		    result="${result}, grub (versions: ${versions_grub})"
 		else
-		    result="grub"
+		    result="grub (versions: ${versions_grub})"
 		fi
 	fi
 	echo "$curr_uuid is configured with: $result"
-- 
2.30.2





^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: divert call to grub-install to p-b-t init
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: divert call to grub-install to p-b-t init Stoiko Ivanov
@ 2021-07-08  7:06   ` Fabian Grünbichler
  0 siblings, 0 replies; 8+ messages in thread
From: Fabian Grünbichler @ 2021-07-08  7:06 UTC (permalink / raw)
  To: Proxmox VE development discussion

On July 7, 2021 11:09 pm, Stoiko Ivanov wrote:
> This way all ESPs (in case of a legacy booted system) get an
> updated grub installation.
> 
> running only once between reboots (the markerfile is in /tmp) should
> be enough. Sadly the environment does not provide a hint which version
> grub is installed to.
> 
> Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
> ---
>  bin/grub-install-wrapper | 25 +++++++++++++++++++++++--
>  1 file changed, 23 insertions(+), 2 deletions(-)
> 
> diff --git a/bin/grub-install-wrapper b/bin/grub-install-wrapper
> index 35f03fa..2e70789 100755
> --- a/bin/grub-install-wrapper
> +++ b/bin/grub-install-wrapper
> @@ -3,12 +3,33 @@ set -e
>  
>  . /usr/share/pve-kernel-helper/scripts/functions
>  
> +init_boot_disks() {
> +	if ! (echo "${curr_uuid}" | grep -qE '[0-9a-fA-F]{4}-[0-9a-fA-F]{4}'); then
> +		warn "WARN: ${curr_uuid} read from ${ESP_LIST} does not look like a VFAT-UUID - skipping"
> +		return
> +	fi
> +
> +	path="/dev/disk/by-uuid/$curr_uuid"
> +	if [ ! -e "${path}" ]; then
> +		warn "WARN: ${path} does not exist - clean '${ESP_LIST}'! - skipping"
> +		return
> +	fi
> +	proxmox-boot-tool init "$path"
> +}
> +
>  if proxmox-boot-tool status --quiet; then
>  	#detect when being called by dpkg (e.g. grub-pc.postinst
>  	if [ -n "$DPKG_RUNNING_VERSION" ] && \
>  	echo "$DPKG_MAINTSCRIPT_PACKAGE" | grep -sq "^grub-"; then

this could have another guard for whether the system is even booted with 
grub (as if the system was booted using EFI, re-initing all ESPs is just 
busy-work), but the current iteration is better than what we currently 
have so that can be a follow-up..

> -		warn "This system is booted via proxmox-boot-tool, ignoring dpkg 
> call to grub-install"
> -		exit 0
> +		MARKER_FILE="/tmp/proxmox-boot-tool.dpkg.marker"
> +		if [ ! -e "$MARKER_FILE" ]; then
> +		    warn "This system is booted via proxmox-boot-tool, running 
> proxmox-boot-tool init for all configured bootdisks"
> +		    loop_esp_list init_boot_disks
> +		    touch "$MARKER_FILE"
> +		    exit 0
> +		else

this else branch could also have some output - it will be rarely hit 
(basically only with repeated reinstalls of grub-pc or systems that are 
never rebooted), but we still ignore the grub-install call here..

> +		    exit 0
> +		fi
>  	fi
>  	warn "grub-install is disabled because this system is booted via 
>  	proxmox-boot-tool, if you really need to run it, run 
>  	/usr/sbin/grub-install.real"
>  	exit 1
> -- 2.30.2
> 
> 
> 
> _______________________________________________
> pve-devel mailing list
> pve-devel@lists.proxmox.com
> https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
> 
> 
> 




^ permalink raw reply	[flat|nested] 8+ messages in thread

* [pve-devel] applied-series: [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements
  2021-07-07 21:09 [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Stoiko Ivanov
                   ` (4 preceding siblings ...)
  2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 5/5] proxmox-boot: status: print present kernel versions Stoiko Ivanov
@ 2021-07-08  8:05 ` Thomas Lamprecht
  5 siblings, 0 replies; 8+ messages in thread
From: Thomas Lamprecht @ 2021-07-08  8:05 UTC (permalink / raw)
  To: Proxmox VE development discussion, Stoiko Ivanov

On 07.07.21 23:09, Stoiko Ivanov wrote:
> The following patchset addresses a few small issues reported during the PVE
> 7.0 beta and after the 7.0 stable release.
> 
> * patches 1+2 deal with grub-install being called during a distribution
>   upgrade on some systems (I did not manage to get a VM installed with PVE
>   6.4 to run into the issue)
> * patch 3 addresses an issue where once someone removes pve-kernel-helper
>   (without purging it) it becomes quite difficult to get it installed again
>   (to remove pve-kernel-helper you need also to remove proxmox-ve, but as
>   our forum shows [0] - this happens without the user noticing sometimes)
> * patch 4+5 are a few improvements to the `p-b-t status` I consider
>   worthwhile
> 
> 
> Stoiko Ivanov (5):
>   proxmox-boot: ignore call to grub-install from grub maintscripts
>   proxmox-boot: divert call to grub-install to p-b-t init
>   proxmox-boot: maintscript: change logic whether to add diversion
>   proxmox-boot: print current boot mode with status output
>   proxmox-boot: status: print present kernel versions
> 
>  bin/grub-install-wrapper         | 27 +++++++++++++++++++++++++++
>  bin/proxmox-boot-tool            | 13 ++++++++++---
>  debian/pve-kernel-helper.preinst |  2 +-
>  3 files changed, 38 insertions(+), 4 deletions(-)
> 



applied series with Fabians comments as followup, thanks!




^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-07-08  8:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-07-07 21:09 [pve-devel] [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Stoiko Ivanov
2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 1/5] proxmox-boot: ignore call to grub-install from grub maintscripts Stoiko Ivanov
2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 2/5] proxmox-boot: divert call to grub-install to p-b-t init Stoiko Ivanov
2021-07-08  7:06   ` Fabian Grünbichler
2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 3/5] proxmox-boot: maintscript: change logic whether to add diversion Stoiko Ivanov
2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 4/5] proxmox-boot: print current boot mode with status output Stoiko Ivanov
2021-07-07 21:09 ` [pve-devel] [PATCH pve-kernel-meta 5/5] proxmox-boot: status: print present kernel versions Stoiko Ivanov
2021-07-08  8:05 ` [pve-devel] applied-series: [PATCH pve-kernel-meta 0/5] proxmox-boot-tool improvements Thomas Lamprecht

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