* [pve-devel] [PATCH installer v2 0/4] adaptation to kernel cmdline handling and 2 small ZFS related improvements
@ 2023-11-16 16:37 Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 1/4] fix #4747: pass kernel cmdline parameters to target system Stoiko Ivanov
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Stoiko Ivanov @ 2023-11-16 16:37 UTC (permalink / raw)
To: pve-devel
v1->v2:
* adapted the creation of /var/lib/vz as separate dataset to be only done
for PVE and not for our other products
original cover-letter for v1:
This patch-series contains mostly unrelated patches, which still can be
tested well together:
* patch 1/4 fixes the parsing of our kernel cmdline parameters during the
install (they were ignored if being the last on the line).
additionally everything not used by our installer now end up in the
target system's kernel cmdline - so if you need to add something for
the system to boot - you do not need to do so 3 times (for the install,
for the first boot, for the boot-loader config)
* patch 2/4 is a minor glitch I introduced, which caused me to debug the
wrong thing for too long
* patch 3/4 has been a long-standing and quite sensible request
* patch 4/4 fixes a minor inconvenience on machines with local users and
ZFS on root (dmesg gets filled with journald-messages upon
journal-rotation and user-logins)
Tested the changes a bit (4/4 on my machine, 3/4 was straight-forward, 2/4
with a quick look, 1/4 with a few installer-options and net.ifnames=0)
Stoiko Ivanov (4):
fix #4747: pass kernel cmdline parameters to target system
unconfigured.sh: set serial to a number to prevent warning
fix #1410: zfs: create /var/lib/vz as separate dataset
zfs: set acltype=posix for root-dataset
Proxmox/Install.pm | 21 ++++++++++++---------
Proxmox/Install/Config.pm | 25 +++++++++++++------------
unconfigured.sh | 1 +
3 files changed, 26 insertions(+), 21 deletions(-)
--
2.39.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH installer v2 1/4] fix #4747: pass kernel cmdline parameters to target system
2023-11-16 16:37 [pve-devel] [PATCH installer v2 0/4] adaptation to kernel cmdline handling and 2 small ZFS related improvements Stoiko Ivanov
@ 2023-11-16 16:37 ` Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 2/4] unconfigured.sh: set serial to a number to prevent warning Stoiko Ivanov
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Stoiko Ivanov @ 2023-11-16 16:37 UTC (permalink / raw)
To: pve-devel
Parameters needed for booting during installation are best preserved
in the target cmdline as well - e.g. if you need a particular
cmdline switch for your system to boot at all - not having to add it
for the first boot of the installed system and manually adding it to
the bootloader config is an improvement.
This additionally enables us to drop the console parameter handling
for serial consoles (it is just one of the parameters to pass along).
Finally it fixes the regular expressions for the installer settings we
read from the cmdline (swapsize, maxroot,...) which were broken if
added as last entry.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
Proxmox/Install.pm | 11 +++++------
Proxmox/Install/Config.pm | 25 +++++++++++++------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/Proxmox/Install.pm b/Proxmox/Install.pm
index 66adb2d..c868992 100644
--- a/Proxmox/Install.pm
+++ b/Proxmox/Install.pm
@@ -1152,11 +1152,10 @@ _EOD
}
update_progress(0.8, 0.95, 1, "make system bootable");
- my $console_param='';
- if (my $console = Proxmox::Install::Config::get_console()) {
- $console_param="console=$console";
- my $console_snippet = "GRUB_CMDLINE_LINUX=\"\$GRUB_CMDLINE_LINUX $console_param\"";
- file_write_all("$targetdir/etc/default/grub.d/console.cfg", $console_snippet);
+ my $target_cmdline='';
+ if ($target_cmdline = Proxmox::Install::Config::get_target_cmdline()) {
+ my $target_cmdline_snippet = "GRUB_CMDLINE_LINUX=\"\$GRUB_CMDLINE_LINUX $target_cmdline\"";
+ file_write_all("$targetdir/etc/default/grub.d/installer.cfg", $target_cmdline_snippet);
}
if ($use_zfs) {
@@ -1164,7 +1163,7 @@ _EOD
my $zfs_snippet = "GRUB_CMDLINE_LINUX=\"\$GRUB_CMDLINE_LINUX root=ZFS=$zfs_pool_name/ROOT/$zfs_root_volume_name boot=zfs\"";
file_write_all("$targetdir/etc/default/grub.d/zfs.cfg", $zfs_snippet);
- file_write_all("$targetdir/etc/kernel/cmdline", "root=ZFS=$zfs_pool_name/ROOT/$zfs_root_volume_name boot=zfs $console_param\n");
+ file_write_all("$targetdir/etc/kernel/cmdline", "root=ZFS=$zfs_pool_name/ROOT/$zfs_root_volume_name boot=zfs $target_cmdline\n");
zfs_setup_module_conf($targetdir);
}
diff --git a/Proxmox/Install/Config.pm b/Proxmox/Install/Config.pm
index 5e80255..b1acebc 100644
--- a/Proxmox/Install/Config.pm
+++ b/Proxmox/Install/Config.pm
@@ -16,36 +16,37 @@ my sub parse_kernel_cmdline {
my $cmdline = Proxmox::Install::RunEnv::get('kernel_cmdline');
- if ($cmdline =~ m/\s(ext4|xfs)(\s.*)?$/) {
+ if ($cmdline =~ s/\b(ext4|xfs)\s?//i) {
$cfg->{filesys} = $1;
}
- if ($cmdline =~ m/hdsize=(\d+(\.\d+)?)[\s\n]/i) {
+ if ($cmdline =~ s/\bhdsize=(\d+(\.\d+)?)\s?//i) {
$cfg->{hdsize} = $1;
}
- if ($cmdline =~ m/swapsize=(\d+(\.\d+)?)[\s\n]/i) {
+ if ($cmdline =~ s/\bswapsize=(\d+(\.\d+)?)\s?//i) {
$cfg->{swapsize} = $1;
}
- if ($cmdline =~ m/maxroot=(\d+(\.\d+)?)[\s\n]/i) {
+ if ($cmdline =~ s/\bmaxroot=(\d+(\.\d+)?)\s?//i) {
$cfg->{maxroot} = $1;
}
- if ($cmdline =~ m/minfree=(\d+(\.\d+)?)[\s\n]/i) {
+ if ($cmdline =~ s/\bminfree=(\d+(\.\d+)?)\s?//i) {
$cfg->{minfree} = $1;
}
my $iso_env = Proxmox::Install::ISOEnv::get();
if ($iso_env->{product} eq 'pve') {
- if ($cmdline =~ m/maxvz=(\d+(\.\d+)?)[\s\n]/i) {
+ if ($cmdline =~ s/\bmaxvz=(\d+(\.\d+)?)\s?//i) {
$cfg->{maxvz} = $1;
}
}
- if ($cmdline =~ m/console=(\S+)[\s\n]?/i) {
- $cfg->{console} = $1;
- }
+ $cmdline =~ s/(?:BOOT_IMAGE|root|ramdisk_size|splash|vga)=\S+\s?//gi;
+ $cmdline =~ s/ro|rw|quiet|proxdebug|proxtui|nomodeset//gi;
+
+ $cfg->{target_cmdline}= $cmdline;
return $cfg;
}
@@ -101,7 +102,7 @@ my sub init_cfg {
cidr => undef,
gateway => undef,
dns => undef,
- console => undef,
+ target_cmdline => undef,
};
$initial = parse_kernel_cmdline($initial);
@@ -235,8 +236,8 @@ sub get_gateway { return get('gateway'); }
sub set_dns { set_key('dns', $_[0]); }
sub get_dns { return get('dns'); }
-sub set_console { set_key('console', $_[0]); }
-sub get_console { return get('console'); }
+sub set_target_cmdline { set_key('target_cmdline', $_[0]); }
+sub get_target_cmdline { return get('target_cmdline'); }
1;
--
2.39.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH installer v2 2/4] unconfigured.sh: set serial to a number to prevent warning
2023-11-16 16:37 [pve-devel] [PATCH installer v2 0/4] adaptation to kernel cmdline handling and 2 small ZFS related improvements Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 1/4] fix #4747: pass kernel cmdline parameters to target system Stoiko Ivanov
@ 2023-11-16 16:37 ` Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 3/4] fix #1410: zfs: create /var/lib/vz as separate dataset Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 4/4] zfs: set acltype=posix for root-dataset Stoiko Ivanov
3 siblings, 0 replies; 5+ messages in thread
From: Stoiko Ivanov @ 2023-11-16 16:37 UTC (permalink / raw)
To: pve-devel
caught me off-guard while debugging other things - the message:
` [: : integer expression expected`
made me look a bit too long at the wrong place.
Fixes: a31259b1597447a0b431cd5c81a6db2bc80f1ddf
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
unconfigured.sh | 1 +
1 file changed, 1 insertion(+)
diff --git a/unconfigured.sh b/unconfigured.sh
index a361a20..6b3a8bf 100755
--- a/unconfigured.sh
+++ b/unconfigured.sh
@@ -7,6 +7,7 @@ trap "err_reboot" ERR
parse_cmdline() {
proxdebug=0
proxtui=0
+ serial=0
# shellcheck disable=SC2013 # per word splitting is wanted here
for par in $(cat /proc/cmdline); do
case $par in
--
2.39.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH installer v2 3/4] fix #1410: zfs: create /var/lib/vz as separate dataset
2023-11-16 16:37 [pve-devel] [PATCH installer v2 0/4] adaptation to kernel cmdline handling and 2 small ZFS related improvements Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 1/4] fix #4747: pass kernel cmdline parameters to target system Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 2/4] unconfigured.sh: set serial to a number to prevent warning Stoiko Ivanov
@ 2023-11-16 16:37 ` Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 4/4] zfs: set acltype=posix for root-dataset Stoiko Ivanov
3 siblings, 0 replies; 5+ messages in thread
From: Stoiko Ivanov @ 2023-11-16 16:37 UTC (permalink / raw)
To: pve-devel
this enables the users to set reservations on / separate from
/var/lib/vz - where backups, ISOs, and other data might fill the
complete pool.
moved the creation of the root-dataset above the creation of
rpool/data, so that the pve-specifics can remain in one if block.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
Proxmox/Install.pm | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/Proxmox/Install.pm b/Proxmox/Install.pm
index c868992..48c157a 100644
--- a/Proxmox/Install.pm
+++ b/Proxmox/Install.pm
@@ -182,13 +182,15 @@ sub zfs_create_rpool {
syscmd("zfs create $pool_name/ROOT") == 0 || die "unable to create zfs $pool_name/ROOT volume\n";
+ syscmd("zfs create $pool_name/ROOT/$root_volume_name") == 0 ||
+ die "unable to create zfs $pool_name/ROOT/$root_volume_name volume\n";
+
if ($iso_env->{product} eq 'pve') {
syscmd("zfs create $pool_name/data") == 0 || die "unable to create zfs $pool_name/data volume\n";
+ syscmd("zfs create -p $pool_name/ROOT/$root_volume_name/var/lib/vz") == 0 ||
+ die "unable to create zfs $pool_name/ROOT/$root_volume_name/var/lib/vz volume\n";
}
- syscmd("zfs create $pool_name/ROOT/$root_volume_name") == 0 ||
- die "unable to create zfs $pool_name/ROOT/$root_volume_name volume\n";
-
# default to `relatime` on, fast enough for the installer and production
syscmd("zfs set atime=on relatime=on $pool_name") == 0 || die "unable to set zfs properties\n";
--
2.39.2
^ permalink raw reply [flat|nested] 5+ messages in thread
* [pve-devel] [PATCH installer v2 4/4] zfs: set acltype=posix for root-dataset
2023-11-16 16:37 [pve-devel] [PATCH installer v2 0/4] adaptation to kernel cmdline handling and 2 small ZFS related improvements Stoiko Ivanov
` (2 preceding siblings ...)
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 3/4] fix #1410: zfs: create /var/lib/vz as separate dataset Stoiko Ivanov
@ 2023-11-16 16:37 ` Stoiko Ivanov
3 siblings, 0 replies; 5+ messages in thread
From: Stoiko Ivanov @ 2023-11-16 16:37 UTC (permalink / raw)
To: pve-devel
journald as a core component tries setting a ACL on the journal files
for (non-root) users and fails on our ZFS installs.
Resulting in dmesg being spammed with messages from journald upon each
journal-rotation for each user upon their first login.
This is also suggested by OpenZFS in their Debian guide for root on
ZFS:
https://openzfs.github.io/openzfs-docs/Getting%20Started/Debian/Debian%20Bookworm%20Root%20on%20ZFS.html
Tested by setting this on a machine of mine, where this has been
bugging for quite a while.
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
---
Proxmox/Install.pm | 2 ++
1 file changed, 2 insertions(+)
diff --git a/Proxmox/Install.pm b/Proxmox/Install.pm
index 48c157a..1a4ee93 100644
--- a/Proxmox/Install.pm
+++ b/Proxmox/Install.pm
@@ -202,6 +202,8 @@ sub zfs_create_rpool {
$value = $zfs_opts->{copies} // 1;
syscmd("zfs set copies=$value $pool_name") if defined($value) && $value != 1;
+
+ syscmd("zfs set acltype=posix $pool_name/ROOT/$root_volume_name");
}
my $get_raid_devlist = sub {
--
2.39.2
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2023-11-16 16:38 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-16 16:37 [pve-devel] [PATCH installer v2 0/4] adaptation to kernel cmdline handling and 2 small ZFS related improvements Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 1/4] fix #4747: pass kernel cmdline parameters to target system Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 2/4] unconfigured.sh: set serial to a number to prevent warning Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 3/4] fix #1410: zfs: create /var/lib/vz as separate dataset Stoiko Ivanov
2023-11-16 16:37 ` [pve-devel] [PATCH installer v2 4/4] zfs: set acltype=posix for root-dataset Stoiko Ivanov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox