LAG / VLAN on node setup

ChrisTG74

Member
Nov 12, 2025
40
2
8
Hi there,
I tried the search-function but did not find any fruitful to my question:

Is it planned that the VE-installer will support definition of link-aggregation (like 802.3ad) and VLAN already while installing the node?
It is really a hassle to manually type-in an interfaces-file via the console after installation.

Other possibility would be to support some kind of "answer-file" for unattended installation. For example the installer could check for an XML-file on the media and if present read the values from there instead of the UI.

IMHO a decent soilution for this really needs to be considered to be "enterprise ready" as LAG and usage of VLANs are common practice in datacenters today.

Many thanks in advance.
 
There's already an open feature request: https://bugzilla.proxmox.com/show_bug.cgi?id=2164

So yes, it is planned down the line.

ChrisTG74 said:
Other possibility would be to support some kind of "answer-file" for unattended installation. For example the installer could check for an XML-file on the media and if present read the values from there instead of the UI.
FWIW, if you are already doing automated installations, using a first-boot script could be used to automate that.
 
Last edited:
  • Like
Reactions: ChrisTG74
Hi Christoph,
thanks for the information. Do you have any clue when the next round of installer-features will be released? It that done on a regular schedule?
TIA!
 
PS: For the "first-boot script" - is there any documentation how to us it along with the Proxmox VE installer? Thanks!
 
Do you have any clue when the next round of installer-features will be released? It that done on a regular schedule?
The installer is updated with each new major/minor release, i.e. when new ISOs are provided for any product.
 
  • Like
Reactions: ChrisTG74
This is part of my first-boot script that detects network interfaces and forms them into a bond.
For me, it's not an 802.3ad, but by adjusting some parameters, you should be able to get that too:


Bash:
# Set network configuration - BEGIN
nodename=$(hostname)

interfaces=$(pvesh get nodes/${nodename}/network --type eth  --output-format json | jq -r '[.[].iface] | join(" ")')
interface_array=($interfaces)
IFS=$'\n' interfaces_sorted=($(sort <<<"${interface_array[*]}"))

IPADDR_JSON=$(pvesh get /nodes/${nodename}/network/vmbr0 --output-format=json)
IPADDR=$(echo $IPADDR_JSON | jq -r '.cidr')
GATEWAY=$(echo $IPADDR_JSON | jq -r '.'gateway)

for i in `pvesh get nodes/${nodename}/network --type eth  --output-format json | jq -r '.[].iface'`; do
  pvesh set /nodes/${nodename}/network/${i} --mtu 9000 --type eth
done

pvesh delete /nodes/${nodename}/network/vmbr0
pvesh create /nodes/${nodename}/network --type bond --iface bond0 --bond_mode balance-rr --mtu 9000 --bond-primary "${interfaces_sorted[0]}" --slaves "${interfaces_sorted[0]} ${interfaces_sorted[1]}" --cidr "${IPADDR}" --gateway "${GATEWAY}" --autostart 1 --comments "Bond for Management-Traffic"
pvesh set /nodes/${nodename}/network
# END

This code deletes the initial vmbr0 device, sets the MTU to 9000, creates a new "balance-rr" bond and adds the first 2 hardware network interfaces to it.
Then it "applies" the new network configuration via "pvesh set".
 
  • Like
Reactions: ChrisTG74
A last question: Is it okay to integrate the script into the installer-ISO? If so, were do I actually put it and how does it have to be named so that the installer finds and executes it? This is something the docs are not really clear about IMHO.
TIA!
 
Thanks for the answer, but it does not answer my questions.
I already know the article and it leaves exactly my questions open. I still do not understand were this needs to be put. If you call it automated installation, okay, but how do I practically prepare it read all input from an answer-file? The article is missing the name and place of this file(s).
 
how do I practically prepare it read all input from an answer-file?
There are multiple ways, you can have it either bake it into the ISO file itself, have it read from a labeled partition or from an HTTP server.
First off, you need our proxmox-auto-install-assistant tool, which is available via our repositories.

This is described, for each type, extensively here: https://pve.proxmox.com/wiki/Automated_Installation#Prepare_an_Installation_ISO

So if you specify
Code:
[first-boot]
source = "from-iso"
in your answer file, you have to bake the script into the ISO.

Say your script is in the current directory and named initial-network-setup.sh, you'd need to prepare the ISO using e.g.
Code:
proxmox-auto-install-assistant prepare-iso --fetch-from [..] --on-first-boot initial-network-setup.sh
Now, the resulting ISO will contain the script directly.

The value given to --fetch-from can be one of iso, http or partition, depending on what you choose.
Further, if you use the http method, the --url argument is also required.

To have the script fetched from a HTTP server during installation, you'd need the following in your answer file:
Code:
[first-boot]
source = "from-url"
url = "https://my.endpoint.local/first-boot.sh"
The URL is arbitrary, any valid HTTP URL works of course.
There are also two additional options, cert-fingerprint and ordering, which you may or may not want or need depending on your setup.
If you choose this variant, it's fetched from the given URL during the installation and you do not specify the --on-first-boot argument to proxmox-auto-install-assistant.

And to further clarify; if a first-boot script is given, then a one-shot systemd service is created which will run the script on the first boot after the installation once. This service will not activate during further boots.
 
  • Like
Reactions: ChrisTG74