adamant-kite-43734
03/03/2026, 8:04 PMbland-article-62755
03/03/2026, 8:05 PMbland-article-62755
03/03/2026, 8:05 PMchilly-agency-73377
03/03/2026, 8:05 PMchilly-agency-73377
03/03/2026, 8:06 PMbland-article-62755
03/03/2026, 8:06 PMbland-article-62755
03/03/2026, 8:06 PMbland-article-62755
03/03/2026, 8:06 PMchilly-agency-73377
03/03/2026, 8:07 PMbland-article-62755
03/03/2026, 8:08 PMchilly-agency-73377
03/03/2026, 8:09 PMbland-article-62755
03/03/2026, 8:09 PMchilly-agency-73377
03/03/2026, 8:10 PMconfig:
cloud-config:
stages:
after-install-chroot:
- commands:
- sed -i "s/ net.ifnames=0//g" /etc/elemental/bootargs.cfg
- >-
echo "After install chroot executed" >
/etc/elemental/after-install-chroot
name: Enable predictable ifnames
that file gets created, it might be something with my sedbland-article-62755
03/03/2026, 8:12 PMstages:
after-install-chroot:
- name: "Set ifnames"
commands:
- sed -i 's/net.ifnames=0/net.ifnames=1/g' /etc/elemental/bootargs.cfg
after-install:
- name: "Longhorn Disk Setup"
commands:
- curl <http://server/elemental/elementaldisks.sh> | bash
- curl <http://server/elemental/95_disks.yaml> -o /run/elemental/oem/95_disks.yaml
- name: "Network Persistence Script"
commands:
- grub2-editenv /run/elemental/oem/grubenv set extra_cmdline=net.ifnames=1
- curl <http://server/elemental/90_network.yaml> -o /run/elemental/oem/90_network.yaml
- curl <http://server/elemental/bondsetup.sh> -o /run/elemental/oem/bondsetup.sh ; chmod +x /run/elemental/oem/bondsetup.shbland-article-62755
03/03/2026, 8:12 PMifnames=0 I think I had to specify ifnames=1bland-article-62755
03/03/2026, 8:13 PMgrub2-editenv /run/elemental/oem/grubenv set extra_cmdline=net.ifnames=1 will override it if/when the base image gets updated.bland-article-62755
03/03/2026, 8:14 PMchilly-agency-73377
03/03/2026, 8:14 PMbland-article-62755
03/03/2026, 8:16 PMafter-install the oem is still mounted and writeable under /run/elemental/oem it gets mounted under /oem in the next bootchilly-agency-73377
03/03/2026, 8:16 PMbland-article-62755
03/03/2026, 8:16 PMetc stuff, but good for oem.bland-article-62755
03/03/2026, 8:16 PMThe next several files are networkmanager connection files that will bring up the bond on the installation boot. In this example, there's only a few that it might bond together. Extra configs for devices that don't exist will be ignored.
stages - There's a few portions here that were simplified through the use of scripts.
stages.after-install-chroot - this happens immediately after the installer finishes writing the files. The system/shell is still chrooted into the mounted systems and it remains writeable. We're swapping out grub lines here to get the unique names to populate in the next boot. We're also doing it later. Why in two places? Because computers suck and we're hosed if we don't get that parameter set for the subsequent boot.
stages.after-install - This happens right after the previous stage, but now we're no longer in chroot. Here there are two sections. One sets up the longhorn disks, and the other sets up the networking. The partitions are still mounted in RW but the pathing is slightly different. We're using grub2-editenv to inject the net.ifnames=1 into grub via /oem, because if we don't get that kernel line in there, we're hosed on the next boots and the node will never join. Next we curl the 90_network.yaml and put it in place so the bond will come up. It's very similar to the write_files: section, but is using `files` and the boot stage to put them in place. The idea of doing it this way (instead of using write files again) is to limit the duplication of effort needed to maintain different servers and server types and having to copy and paste this into as few places as possible when changes are needed. Last is a script that is downloaded and setup on the node so if for whatever reason the bond goes away, it can be recreated more quickly. (kinda a break glass in case of emergency).bland-article-62755
03/03/2026, 8:17 PMCopy codeWe're also doing it later. Why in two places? Because computers suck and we're hosed if we don't get that parameter set for the subsequent boot.
chilly-agency-73377
03/03/2026, 8:17 PMchilly-agency-73377
03/03/2026, 8:18 PMbland-article-62755
03/03/2026, 8:18 PMchilly-agency-73377
03/03/2026, 8:19 PMchilly-agency-73377
03/03/2026, 8:19 PMbland-article-62755
03/03/2026, 8:19 PMbland-article-62755
03/03/2026, 8:19 PMchilly-agency-73377
03/03/2026, 8:20 PMbland-article-62755
03/03/2026, 8:22 PMchilly-agency-73377
03/03/2026, 8:24 PMchilly-agency-73377
03/03/2026, 8:40 PMbland-article-62755
03/03/2026, 8:40 PMbland-article-62755
03/03/2026, 8:40 PMchilly-agency-73377
03/03/2026, 8:41 PMbland-article-62755
03/03/2026, 8:43 PMchilly-agency-73377
03/03/2026, 8:44 PMbland-article-62755
03/03/2026, 8:46 PMjournalctl -f running during that 3 min mark. Then you can review the logs that way.chilly-agency-73377
03/03/2026, 8:46 PMchilly-agency-73377
03/03/2026, 8:48 PMchilly-agency-73377
03/04/2026, 5:44 PMnet.ifnames=0 is actually enough to get the new nic names back.
I might be able to explain why. But first: Any chance you have 2 root-disks in your servers? And specified both as valid install targets?bland-article-62755
03/04/2026, 6:57 PMbland-article-62755
03/04/2026, 6:58 PMbland-article-62755
03/04/2026, 6:58 PMbland-article-62755
03/04/2026, 6:58 PMchilly-agency-73377
03/04/2026, 6:58 PMchilly-agency-73377
03/04/2026, 6:59 PMbland-article-62755
03/04/2026, 6:59 PMchilly-agency-73377
03/04/2026, 7:00 PMchilly-agency-73377
03/04/2026, 7:01 PMchilly-agency-73377
03/04/2026, 7:05 PM