public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
	Filip Schauer <f.schauer@proxmox.com>
Subject: Re: [pve-devel] [PATCH container v5 08/17] configure static IP in LXC config for custom entrypoint
Date: Wed, 12 Nov 2025 20:33:07 +0100	[thread overview]
Message-ID: <bd1cdd73-de86-4a21-aaf5-f5ad0bf25bd8@proxmox.com> (raw)
In-Reply-To: <20251008171028.196998-9-f.schauer@proxmox.com>

Am 08.10.25 um 19:12 schrieb Filip Schauer:
> When a container uses the default `/sbin/init` entrypoint, network
> interface configuration is usually managed by processes within the
> container. However, containers with a different entrypoint might not
> have any internal network management process. Consequently, IP addresses
> might not be assigned.
> 
> This change ensures that a static IP address is explicitly set in the
> LXC config for the container.
> 
> Signed-off-by: Filip Schauer <f.schauer@proxmox.com>
> ---
> Changed since v2:
> * rebase onto newest master (5a8b3f962f16) and re-format with
>   proxmox-perltidy
> * add an "ipmanagehost" property to pct.conf to control whether network
>   interface IP configuration should be handled by the host.
> 
>  src/PVE/API2/LXC.pm   |  4 ++++
>  src/PVE/LXC.pm        | 15 +++++++++++++++
>  src/PVE/LXC/Config.pm | 14 ++++++++++++++
>  3 files changed, 33 insertions(+)
> 
> diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
> index 546f4ee..c8aa984 100644
> --- a/src/PVE/API2/LXC.pm
> +++ b/src/PVE/API2/LXC.pm
> @@ -598,6 +598,10 @@ __PACKAGE__->register_method({
>                                  # An entrypoint other than /sbin/init breaks the tty console mode.
>                                  # This is fixed by setting cmode: console
>                                  $conf->{cmode} = 'console';
> +
> +                                # Manage the IP configuration for the container. A container with a
> +                                # custom entrypoint likely lacks internal network management.
> +                                $conf->{ipmanagehost} = 1;
>                              }
>                          }
>  
> diff --git a/src/PVE/LXC.pm b/src/PVE/LXC.pm
> index 5eaa57c..6fdef79 100644
> --- a/src/PVE/LXC.pm
> +++ b/src/PVE/LXC.pm
> @@ -886,6 +886,21 @@ sub update_lxc_config {
>          if ($lxc_major >= 4) {
>              $raw .= "lxc.net.$ind.script.up = /usr/share/lxc/lxcnetaddbr\n";
>          }
> +
> +        if ((!defined($d->{link_down}) || $d->{link_down} != 1) && $conf->{ipmanagehost}) {
> +            if (defined($d->{ip})) {
> +                die "$k: DHCP is not supported with a custom entrypoint\n" if $d->{ip} eq 'dhcp';
> +                $raw .= "lxc.net.$ind.ipv4.address = $d->{ip}\n" if $d->{ip} ne 'manual';
> +            }
> +            $raw .= "lxc.net.$ind.ipv4.gateway = $d->{gw}\n" if defined($d->{gw});
> +            if (defined($d->{ip6})) {
> +                die "$k: DHCPv6 and SLAAC are not supported with a custom entrypoint\n"
> +                    if $d->{ip6} =~ /^(auto|dhcp)$/;
> +                $raw .= "lxc.net.$ind.ipv6.address = $d->{ip6}\n" if $d->{ip6} ne 'manual';
> +            }
> +            $raw .= "lxc.net.$ind.ipv6.gateway = $d->{gw6}\n" if defined($d->{gw6});
> +            $raw .= "lxc.net.$ind.flags = up\n";
> +        }
>      }
>  
>      my $had_cpuset = 0;
> diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
> index 56cb01c..afa2fcf 100644
> --- a/src/PVE/LXC/Config.pm
> +++ b/src/PVE/LXC/Config.pm
> @@ -594,6 +594,12 @@ my $confdesc = {
>              . " This is saved as comment inside the configuration file.",
>          maxLength => 1024 * 8,
>      },
> +    ipmanagehost => {

I know the existing code base does not leads as best example in this regard, but
I'd *really* like to avoid having glued together words as options or parameter
names in the future, zero benefit but makes life for everybody a tiny bit harder.

This here is also not really telling when written as kebab-case though, so if this
option is required (and not a Setup::OCI module + ostype: oci can be enough, see
my reply to 06/17) I'd rather spell it as, e.g., one of 'network-setup-by-host' or
'network-managed-by-host'. Or slightly shorter 'network-host-managed', or make it
an enum like `network-managed-by: ['ct', 'host']`

Surely there are other/better variants, so no need to take my proposed ones, just
lets node "code-golf" optimize away names all to much in general though. And yes,
no need for to much bikeshedding, but these become part of the public config API
that we will need to support for basically ever (even if we update to a new config
version we will still need to support the old one to allow restore), so these things
deserve a bit more care.

> +        type => 'boolean',
> +        description =>
> +            "Whether this interface's IP configuration should be managed by the host.",
> +        optional => 1,
> +    },
>      searchdomain => {
>          optional => 1,
>          type => 'string',
> @@ -1288,6 +1294,14 @@ sub update_pct_config {
>                  die "$opt: MTU size '$mtu' is bigger than bridge MTU '$bridge_mtu'\n"
>                      if ($mtu > $bridge_mtu);
>              }
> +
> +            if ((!defined($res->{link_down}) || $res->{link_down} != 1) && $conf->{ipmanagehost}) {
> +                die "$opt: DHCP is not supported with a custom entrypoint\n"
> +                    if defined($res->{ip}) && $res->{ip} eq 'dhcp';
> +
> +                die "$opt: DHCPv6 and SLAAC are not supported with a custom entrypoint\n"
> +                    if defined($res->{ip6}) && $res->{ip6} =~ /^(auto|dhcp)$/;
> +            }
>          } elsif ($opt =~ m/^dev(\d+)$/) {
>              my $device = $class->parse_device($value);
>  



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


  reply	other threads:[~2025-11-12 19:32 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-08 17:10 [pve-devel] [PATCH container/docs/manager/proxmox{, -perl-rs}/storage v5 00/17] support OCI images as container templates Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH proxmox v5 01/17] io: introduce RangeReader for bounded reads Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH proxmox v5 02/17] add proxmox-oci crate Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH proxmox v5 03/17] proxmox-oci: add tests for whiteout handling Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH proxmox-perl-rs v5 04/17] add Perl mapping for OCI container image parser/extractor Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH container v5 05/17] config: add `lxc.environment.runtime`/`hooks` Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH container v5 06/17] add support for OCI images as container templates Filip Schauer
2025-11-12 19:22   ` Thomas Lamprecht
2025-10-08 17:10 ` [pve-devel] [PATCH container v5 07/17] config: add entrypoint parameter Filip Schauer
2025-11-12 18:58   ` Thomas Lamprecht
2025-10-08 17:10 ` [pve-devel] [PATCH container v5 08/17] configure static IP in LXC config for custom entrypoint Filip Schauer
2025-11-12 19:33   ` Thomas Lamprecht [this message]
2025-10-08 17:10 ` [pve-devel] [PATCH container v5 09/17] setup: debian: create /etc/network path if missing Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH container v5 10/17] setup: recursively mkdir /etc/systemd/{network, system-preset} Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH container v5 11/17] implement host-managed DHCP for containers with `ipmanagehost` Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH storage v5 12/17] allow .tar container templates Filip Schauer
2025-11-12 19:38   ` [pve-devel] applied: " Thomas Lamprecht
2025-10-08 17:10 ` [pve-devel] [PATCH storage v5 13/17] api: add storage/{storage}/oci-registry-pull method Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH manager v5 14/17] ui: storage upload: accept *.tar files as vztmpl Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH manager v5 15/17] api: add nodes/{node}/query-oci-repo-tags method Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH manager v5 16/17] ui: template view: add OCI registry pull dialog Filip Schauer
2025-10-08 17:10 ` [pve-devel] [PATCH docs v5 17/17] ct: add OCI image docs Filip Schauer
2025-11-12 19:41 ` [pve-devel] partially-applied: [PATCH container/docs/manager/proxmox{, -perl-rs}/storage v5 00/17] support OCI images as container templates Thomas Lamprecht
2025-11-12 19:43 ` [pve-devel] [FOLLOW-UP container 1/2] d/control: record versioned dependency for libpve-rs-perl Thomas Lamprecht
2025-11-12 19:43   ` [pve-devel] [FOLLOW-UP container 2/2] d/control: record dependency for isc-dhcp-client Thomas Lamprecht
2025-11-14 21:36 ` [pve-devel] partially-applied: [PATCH container/docs/manager/proxmox{, -perl-rs}/storage v5 00/17] support OCI images as container templates Thomas Lamprecht

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=bd1cdd73-de86-4a21-aaf5-f5ad0bf25bd8@proxmox.com \
    --to=t.lamprecht@proxmox.com \
    --cc=f.schauer@proxmox.com \
    --cc=pve-devel@lists.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal