Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions archinstall/lib/models/network.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ class NicType(Enum):
ISO = 'iso'
NM = 'nm'
NM_IWD = 'nm_iwd'
IWD = 'iwd'
MANUAL = 'manual'

def display_msg(self) -> str:
Expand All @@ -21,6 +22,8 @@ def display_msg(self) -> str:
return tr('Use Network Manager (default backend)')
case NicType.NM_IWD:
return tr('Use Network Manager (iwd backend)')
case NicType.IWD:
return tr('Use iwd standalone (no Network Manager)')
case NicType.MANUAL:
return tr('Manual configuration')

Expand Down Expand Up @@ -125,6 +128,10 @@ def parse_arg(cls, config: _NetworkConfigurationSerialization) -> Self | None:
return cls(NicType.ISO)
case NicType.NM:
return cls(NicType.NM)
case NicType.NM_IWD:
return cls(NicType.NM_IWD)
case NicType.IWD:
return cls(NicType.IWD)
case NicType.MANUAL:
nics_arg = config.get('nics', [])
if nics_arg:
Expand Down
25 changes: 25 additions & 0 deletions archinstall/lib/network/network_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ def install_network_config(
_configure_nm_iwd(installation)
installation.disable_service('iwd.service')

case NicType.IWD:
installation.add_additional_packages(['iwd'])
_configure_iwd_standalone(installation)
installation.enable_service('iwd.service')
installation.enable_service('systemd-networkd.service')
installation.enable_service('systemd-resolved.service')

case NicType.MANUAL:
for nic in network_config.nics:
installation.configure_nic(nic)
Expand All @@ -45,3 +52,21 @@ def _configure_nm_iwd(installation: Installer) -> None:

iwd_backend_conf = nm_conf_dir / 'wifi_backend.conf'
_ = iwd_backend_conf.write_text('[device]\nwifi.backend=iwd\n')


def _configure_iwd_standalone(installation: Installer) -> None:
# iwd manages wireless only; systemd-networkd handles wired DHCP.
iwd_conf_dir = installation.target / 'etc/iwd'
iwd_conf_dir.mkdir(parents=True, exist_ok=True)

main_conf = iwd_conf_dir / 'main.conf'
_ = main_conf.write_text('[General]\nEnableNetworkConfiguration=true\n\n[Network]\nNameResolvingService=systemd\n')

networkd_dir = installation.target / 'etc/systemd/network'
networkd_dir.mkdir(parents=True, exist_ok=True)
wired_conf = networkd_dir / '20-wired.network'
_ = wired_conf.write_text('[Match]\nType=ether\nKind=!*\n\n[Network]\nDHCP=yes\n')

resolv = installation.target / 'etc/resolv.conf'
resolv.unlink(missing_ok=True)
resolv.symlink_to('/run/systemd/resolve/stub-resolv.conf')
2 changes: 2 additions & 0 deletions archinstall/lib/network/network_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ async def select_network(preset: NetworkConfiguration | None) -> NetworkConfigur
return NetworkConfiguration(NicType.NM)
case NicType.NM_IWD:
return NetworkConfiguration(NicType.NM_IWD)
case NicType.IWD:
return NetworkConfiguration(NicType.IWD)
case NicType.MANUAL:
preset_nics = preset.nics if preset else []
nics = await ManualNetworkConfig(tr('Configure interfaces'), preset_nics).show()
Expand Down