all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups
@ 2023-08-09 13:44 Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 1/6] tui: drop some leftover, commented-out code Christoph Heiss
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: Christoph Heiss @ 2023-08-09 13:44 UTC (permalink / raw)
  To: pve-devel

#1-#4 are pretty self-explanatory, #5 and #6 might be worth bit more
attention.

Christoph Heiss (6):
  tui: drop some leftover, commented-out code
  tui: password: include minimum password length in error message
  tui: network: select matching NIC for IP configuration
  tui: setup: fix disk size for 4Kn block devices
  sys: block: fix possible use of `undef`-value when detecting disk
    sizes
  tui: setup: handle missing disk block size gracefully

 Proxmox/Sys/Block.pm                        | 11 +++++++----
 proxmox-tui-installer/src/main.rs           | 13 +++++++++----
 proxmox-tui-installer/src/options.rs        |  2 +-
 proxmox-tui-installer/src/setup.rs          |  8 ++++++--
 proxmox-tui-installer/src/views/bootdisk.rs | 16 ++++++++++++----
 5 files changed, 35 insertions(+), 15 deletions(-)

--
2.41.0





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

* [pve-devel] [PATCH installer 1/6] tui: drop some leftover, commented-out code
  2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
@ 2023-08-09 13:44 ` Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 2/6] tui: password: include minimum password length in error message Christoph Heiss
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Christoph Heiss @ 2023-08-09 13:44 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 proxmox-tui-installer/src/main.rs | 2 --
 1 file changed, 2 deletions(-)

diff --git a/proxmox-tui-installer/src/main.rs b/proxmox-tui-installer/src/main.rs
index 7bfaf9b..83a4d60 100644
--- a/proxmox-tui-installer/src/main.rs
+++ b/proxmox-tui-installer/src/main.rs
@@ -354,8 +354,6 @@ fn yes_no_dialog(
     siv: &mut Cursive,
     title: &str,
     text: &str,
-    // callback_yes: &'static dyn Fn(&mut Cursive),
-    // callback_no: &'static dyn Fn(&mut Cursive),
     callback_yes: Box<dyn Fn(&mut Cursive)>,
     callback_no: Box<dyn Fn(&mut Cursive)>,
 ) {
-- 
2.41.0





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

* [pve-devel] [PATCH installer 2/6] tui: password: include minimum password length in error message
  2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 1/6] tui: drop some leftover, commented-out code Christoph Heiss
@ 2023-08-09 13:44 ` Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 3/6] tui: network: select matching NIC for IP configuration Christoph Heiss
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Christoph Heiss @ 2023-08-09 13:44 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 proxmox-tui-installer/src/main.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/proxmox-tui-installer/src/main.rs b/proxmox-tui-installer/src/main.rs
index 83a4d60..4782fa2 100644
--- a/proxmox-tui-installer/src/main.rs
+++ b/proxmox-tui-installer/src/main.rs
@@ -514,7 +514,7 @@ fn password_dialog(siv: &mut Cursive) -> InstallerView {
                         .unwrap();
 
                 if root_password.len() < 5 {
-                    Err("password too short")
+                    Err("password too short, must be at least 5 characters long")
                 } else if root_password != confirm_password {
                     Err("passwords do not match")
                 } else if email == "mail@example.invalid" {
-- 
2.41.0





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

* [pve-devel] [PATCH installer 3/6] tui: network: select matching NIC for IP configuration
  2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 1/6] tui: drop some leftover, commented-out code Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 2/6] tui: password: include minimum password length in error message Christoph Heiss
@ 2023-08-09 13:44 ` Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 4/6] tui: setup: fix disk size for 4Kn block devices Christoph Heiss
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Christoph Heiss @ 2023-08-09 13:44 UTC (permalink / raw)
  To: pve-devel

Instead of always just selecting an essentially random NIC (depending on
the enumeration), use the correct one for the rest of the
(DHCP-obtained) IP configuration.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 proxmox-tui-installer/src/main.rs | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/proxmox-tui-installer/src/main.rs b/proxmox-tui-installer/src/main.rs
index 4782fa2..580cb34 100644
--- a/proxmox-tui-installer/src/main.rs
+++ b/proxmox-tui-installer/src/main.rs
@@ -548,13 +548,20 @@ fn password_dialog(siv: &mut Cursive) -> InstallerView {
 fn network_dialog(siv: &mut Cursive) -> InstallerView {
     let state = siv.user_data::<InstallerState>().unwrap();
     let options = &state.options.network;
+    let ifnames = state.runtime_info.network.interfaces.keys();
 
     let inner = FormView::new()
         .child(
             "Management interface",
             SelectView::new()
                 .popup()
-                .with_all_str(state.runtime_info.network.interfaces.keys()),
+                .with_all_str(ifnames.clone())
+                .selected(
+                    ifnames
+                        .clone()
+                        .position(|ifname| ifname == &options.ifname)
+                        .unwrap_or_default(),
+                ),
         )
         .child(
             "Hostname (FQDN)",
-- 
2.41.0





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

* [pve-devel] [PATCH installer 4/6] tui: setup: fix disk size for 4Kn block devices
  2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
                   ` (2 preceding siblings ...)
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 3/6] tui: network: select matching NIC for IP configuration Christoph Heiss
@ 2023-08-09 13:44 ` Christoph Heiss
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes Christoph Heiss
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: Christoph Heiss @ 2023-08-09 13:44 UTC (permalink / raw)
  To: pve-devel

This can be tested by creating a block device with 4K sectorsize using
the following QEMU args:
  -device virtio-blk,drive=testdrive4k,logical_block_size=4096,physical_block_size=4096
  -drive file=/path/to/4k-testdisk.img,if=none,id=testdrive4k

The 4k-testdisk.img was created with:
  qemu-img create -f qcow2 /path/to/4k-testdisk.img 16G

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 proxmox-tui-installer/src/setup.rs | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/proxmox-tui-installer/src/setup.rs b/proxmox-tui-installer/src/setup.rs
index e51bb4d..c071b80 100644
--- a/proxmox-tui-installer/src/setup.rs
+++ b/proxmox-tui-installer/src/setup.rs
@@ -283,7 +283,10 @@ where
         .map(
             |(index, device, size_mb, model, logical_bsize, _syspath)| Disk {
                 index: index.to_string(),
-                size: (size_mb * logical_bsize as f64) / 1024. / 1024. / 1024.,
+                // Linux always reports the size of block devices in sectors, where one sector is
+                // defined as being 2^9 = 512 bytes in size.
+                // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/blk_types.h?h=v6.4#n30
+                size: (size_mb * 512.) / 1024. / 1024. / 1024.,
                 block_size: logical_bsize,
                 path: device,
                 model: (!model.is_empty()).then_some(model),
-- 
2.41.0





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

* [pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes
  2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
                   ` (3 preceding siblings ...)
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 4/6] tui: setup: fix disk size for 4Kn block devices Christoph Heiss
@ 2023-08-09 13:44 ` Christoph Heiss
  2023-08-23  8:31   ` Wolfgang Bumiller
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 6/6] tui: setup: handle missing disk block size gracefully Christoph Heiss
  2023-08-23  8:30 ` [pve-devel] applied-series: [PATCH installer 0/6] some small, assorted fixes & cleanups Wolfgang Bumiller
  6 siblings, 1 reply; 10+ messages in thread
From: Christoph Heiss @ 2023-08-09 13:44 UTC (permalink / raw)
  To: pve-devel

`$size` and `$logical_bsize` might get unset if there invalid, but then
are unconditionally converted to an int - which throws an error.
This was reported on the forum by a user [0].

Fix it by changing the check a bit to skip the disk immediately if
detecting either of those two values are invalid or simply not present.
The fix for `$logical_bsize` simply avoids trying to convert to value to
an int if invalid.

tl;dr: Should have no impact at all, in the end. The same
`run-env-info.json` is generated w/ and w/o the patch if all disks are
fine. I then also hacked up the script a bit to actually have an invalid
size, this resulted in the "affected" disk simply missing from the disk
array - the expected behavior in this case.

[0] https://forum.proxmox.com/threads/error-installing-proxmox-8.131921/

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 Proxmox/Sys/Block.pm | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/Proxmox/Sys/Block.pm b/Proxmox/Sys/Block.pm
index 26085e3..f76e0f1 100644
--- a/Proxmox/Sys/Block.pm
+++ b/Proxmox/Sys/Block.pm
@@ -90,10 +90,10 @@ my sub hd_list {
 	}
 
 	my $size = file_read_firstline("$bd/size");
+	next if !$size;
 	chomp $size;
-	$size = undef if !($size && $size =~ m/^\d+$/);
+	next if $size !~ m/^\d+$/;
 	$size = int($size);
-	next if !$size;
 
 	my $model = file_read_firstline("$bd/device/model") || '';
 	$model =~ s/^\s+//;
@@ -104,8 +104,11 @@ my sub hd_list {
 
 	my $logical_bsize = file_read_firstline("$bd/queue/logical_block_size") // '';
 	chomp $logical_bsize;
-	$logical_bsize = undef if !($logical_bsize && $logical_bsize =~ m/^\d+$/);
-	$logical_bsize = int($logical_bsize);
+	if ($logical_bsize && $logical_bsize !~ m/^\d+$/) {
+	    $logical_bsize = int($logical_bsize);
+	} else {
+	    $logical_bsize = undef;
+	}
 
 	push @$res, [$count++, $dev_path, $size, $model, $logical_bsize, "/sys/block/$name"];
     }
-- 
2.41.0





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

* [pve-devel] [PATCH installer 6/6] tui: setup: handle missing disk block size gracefully
  2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
                   ` (4 preceding siblings ...)
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes Christoph Heiss
@ 2023-08-09 13:44 ` Christoph Heiss
  2023-08-23  8:30 ` [pve-devel] applied-series: [PATCH installer 0/6] some small, assorted fixes & cleanups Wolfgang Bumiller
  6 siblings, 0 replies; 10+ messages in thread
From: Christoph Heiss @ 2023-08-09 13:44 UTC (permalink / raw)
  To: pve-devel

As that value can indeed be undefined, handle that (edge-)case
gracefully. There is only one place where it is checked, in the ZFS RAID
setup dialog. Aligns it with how the low-level installer handles that
case too.

Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
---
 proxmox-tui-installer/src/options.rs        |  2 +-
 proxmox-tui-installer/src/setup.rs          |  3 ++-
 proxmox-tui-installer/src/views/bootdisk.rs | 16 ++++++++++++----
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/proxmox-tui-installer/src/options.rs b/proxmox-tui-installer/src/options.rs
index dab1730..f18c813 100644
--- a/proxmox-tui-installer/src/options.rs
+++ b/proxmox-tui-installer/src/options.rs
@@ -222,7 +222,7 @@ pub struct Disk {
     pub path: String,
     pub model: Option<String>,
     pub size: f64,
-    pub block_size: usize,
+    pub block_size: Option<usize>,
 }
 
 impl fmt::Display for Disk {
diff --git a/proxmox-tui-installer/src/setup.rs b/proxmox-tui-installer/src/setup.rs
index c071b80..dec91cb 100644
--- a/proxmox-tui-installer/src/setup.rs
+++ b/proxmox-tui-installer/src/setup.rs
@@ -277,7 +277,8 @@ fn deserialize_disks_map<'de, D>(deserializer: D) -> Result<Vec<Disk>, D::Error>
 where
     D: Deserializer<'de>,
 {
-    let disks = <Vec<(usize, String, f64, String, usize, String)>>::deserialize(deserializer)?;
+    let disks =
+        <Vec<(usize, String, f64, String, Option<usize>, String)>>::deserialize(deserializer)?;
     Ok(disks
         .into_iter()
         .map(
diff --git a/proxmox-tui-installer/src/views/bootdisk.rs b/proxmox-tui-installer/src/views/bootdisk.rs
index a018e71..d01495e 100644
--- a/proxmox-tui-installer/src/views/bootdisk.rs
+++ b/proxmox-tui-installer/src/views/bootdisk.rs
@@ -642,7 +642,9 @@ fn check_zfs_raid_config(
     // See also Proxmox/Install.pm:get_zfs_raid_setup()
 
     for disk in disks {
-        if runinfo.boot_type != BootType::Efi && disk.block_size == 4096 {
+        if runinfo.boot_type != BootType::Efi
+            && disk.block_size.map(|v| v == 4096).unwrap_or_default()
+        {
             return Err("Booting from 4Kn drive in legacy BIOS mode is not supported.".to_owned());
         }
     }
@@ -728,7 +730,7 @@ mod tests {
             path: format!("/dev/dummy{index}"),
             model: Some("Dummy disk".to_owned()),
             size: 1024. * 1024. * 1024. * 8.,
-            block_size: 512,
+            block_size: Some(512),
         }
     }
 
@@ -799,14 +801,20 @@ mod tests {
 
     #[test]
     fn zfs_raid_bios() {
-        let disks = dummy_disks(10);
         let runinfo = dummy_runinfo(BootType::Bios);
 
+        let mut disks = dummy_disks(10);
+        zfs_common_tests(&disks, &runinfo);
+
+        for disk in &mut disks {
+            disk.block_size = None;
+        }
+        // Should behave the same as if an explicit block size of 512 was set
         zfs_common_tests(&disks, &runinfo);
 
         for i in 0..10 {
             let mut disks = dummy_disks(10);
-            disks[i].block_size = 4096;
+            disks[i].block_size = Some(4096);
 
             // Must fail if /any/ of the disks are 4Kn
             assert!(check_zfs_raid_config(&runinfo, ZfsRaidLevel::Raid0, &disks).is_err());
-- 
2.41.0





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

* [pve-devel] applied-series: [PATCH installer 0/6] some small, assorted fixes & cleanups
  2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
                   ` (5 preceding siblings ...)
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 6/6] tui: setup: handle missing disk block size gracefully Christoph Heiss
@ 2023-08-23  8:30 ` Wolfgang Bumiller
  6 siblings, 0 replies; 10+ messages in thread
From: Wolfgang Bumiller @ 2023-08-23  8:30 UTC (permalink / raw)
  To: Christoph Heiss; +Cc: pve-devel

applied series




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

* Re: [pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes
  2023-08-09 13:44 ` [pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes Christoph Heiss
@ 2023-08-23  8:31   ` Wolfgang Bumiller
  2023-08-23  8:49     ` Christoph Heiss
  0 siblings, 1 reply; 10+ messages in thread
From: Wolfgang Bumiller @ 2023-08-23  8:31 UTC (permalink / raw)
  To: Christoph Heiss; +Cc: pve-devel

On Wed, Aug 09, 2023 at 03:44:24PM +0200, Christoph Heiss wrote:
> `$size` and `$logical_bsize` might get unset if there invalid, but then
> are unconditionally converted to an int - which throws an error.
> This was reported on the forum by a user [0].
> 
> Fix it by changing the check a bit to skip the disk immediately if
> detecting either of those two values are invalid or simply not present.
> The fix for `$logical_bsize` simply avoids trying to convert to value to
> an int if invalid.
> 
> tl;dr: Should have no impact at all, in the end. The same
> `run-env-info.json` is generated w/ and w/o the patch if all disks are
> fine. I then also hacked up the script a bit to actually have an invalid
> size, this resulted in the "affected" disk simply missing from the disk
> array - the expected behavior in this case.
> 
> [0] https://forum.proxmox.com/threads/error-installing-proxmox-8.131921/
> 
> Signed-off-by: Christoph Heiss <c.heiss@proxmox.com>
> ---
>  Proxmox/Sys/Block.pm | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/Proxmox/Sys/Block.pm b/Proxmox/Sys/Block.pm
> index 26085e3..f76e0f1 100644
> --- a/Proxmox/Sys/Block.pm
> +++ b/Proxmox/Sys/Block.pm
> @@ -90,10 +90,10 @@ my sub hd_list {
>  	}
>  
>  	my $size = file_read_firstline("$bd/size");
> +	next if !$size;
>  	chomp $size;
> -	$size = undef if !($size && $size =~ m/^\d+$/);
> +	next if $size !~ m/^\d+$/;
>  	$size = int($size);
> -	next if !$size;

^ not sure it makes sense to remove this, but OTOH, file_read_firstline
already chomps, so the first one already catches at least the zero-sized
device case (which btw. is easily reproducible by simply plugging in a
card reader without a card inserted ;-) )




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

* Re: [pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes
  2023-08-23  8:31   ` Wolfgang Bumiller
@ 2023-08-23  8:49     ` Christoph Heiss
  0 siblings, 0 replies; 10+ messages in thread
From: Christoph Heiss @ 2023-08-23  8:49 UTC (permalink / raw)
  To: Wolfgang Bumiller; +Cc: pve-devel



On Wed, Aug 23, 2023 at 10:31:29AM +0200, Wolfgang Bumiller wrote:
>
> On Wed, Aug 09, 2023 at 03:44:24PM +0200, Christoph Heiss wrote:
> > [..]
> > diff --git a/Proxmox/Sys/Block.pm b/Proxmox/Sys/Block.pm
> > index 26085e3..f76e0f1 100644
> > --- a/Proxmox/Sys/Block.pm
> > +++ b/Proxmox/Sys/Block.pm
> > @@ -90,10 +90,10 @@ my sub hd_list {
> >  	}
> >
> >  	my $size = file_read_firstline("$bd/size");
> > +	next if !$size;
> >  	chomp $size;
> > -	$size = undef if !($size && $size =~ m/^\d+$/);
> > +	next if $size !~ m/^\d+$/;
> >  	$size = int($size);
> > -	next if !$size;
>
> ^ not sure it makes sense to remove this, but OTOH, file_read_firstline
> already chomps, so the first one already catches at least the zero-sized
> device case
Yeah, that was my thought here as well. It's chomped and the regex
should take care of empty values / anything that is not some integer in
any case.

> (which btw. is easily reproducible by simply plugging in a card reader
> without a card inserted ;-) )
I was wondering how such a case could even happen - makes sense tho, TIL
:^)




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

end of thread, other threads:[~2023-08-23  8:49 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-08-09 13:44 [pve-devel] [PATCH installer 0/6] some small, assorted fixes & cleanups Christoph Heiss
2023-08-09 13:44 ` [pve-devel] [PATCH installer 1/6] tui: drop some leftover, commented-out code Christoph Heiss
2023-08-09 13:44 ` [pve-devel] [PATCH installer 2/6] tui: password: include minimum password length in error message Christoph Heiss
2023-08-09 13:44 ` [pve-devel] [PATCH installer 3/6] tui: network: select matching NIC for IP configuration Christoph Heiss
2023-08-09 13:44 ` [pve-devel] [PATCH installer 4/6] tui: setup: fix disk size for 4Kn block devices Christoph Heiss
2023-08-09 13:44 ` [pve-devel] [PATCH installer 5/6] sys: block: fix possible use of `undef`-value when detecting disk sizes Christoph Heiss
2023-08-23  8:31   ` Wolfgang Bumiller
2023-08-23  8:49     ` Christoph Heiss
2023-08-09 13:44 ` [pve-devel] [PATCH installer 6/6] tui: setup: handle missing disk block size gracefully Christoph Heiss
2023-08-23  8:30 ` [pve-devel] applied-series: [PATCH installer 0/6] some small, assorted fixes & cleanups Wolfgang Bumiller

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