Add IWD standalone option to network configuration + fix NM_IWD (#4528)
* Add iwd standalone option to network configuration Adds NicType.IWD as a third option alongside NM and NM_IWD: install iwd, write /etc/iwd/main.conf with EnableNetworkConfiguration=true and NameResolvingService=systemd, enable iwd.service + systemd-resolved.service. iwd handles DHCP itself and resolved picks up its DNS via the symlink, so no NetworkManager pulled in. Also fills in parse_arg cases for NM_IWD and IWD so config files round-trip both nic types. Assisted-By: Flint * wire up resolv stub and networkd service * exclude virtual devices, dont harcode iface name instead match 'ether' similar pattern to .network files shipped in /etc/systemd/network * use dedent and rename menu option
This commit is contained in:
parent
13944f3cca
commit
b81fe955f0
|
|
@ -12,6 +12,7 @@ class NicType(Enum):
|
||||||
ISO = 'iso'
|
ISO = 'iso'
|
||||||
NM = 'nm'
|
NM = 'nm'
|
||||||
NM_IWD = 'nm_iwd'
|
NM_IWD = 'nm_iwd'
|
||||||
|
IWD = 'iwd'
|
||||||
MANUAL = 'manual'
|
MANUAL = 'manual'
|
||||||
|
|
||||||
def display_msg(self) -> str:
|
def display_msg(self) -> str:
|
||||||
|
|
@ -22,6 +23,8 @@ class NicType(Enum):
|
||||||
return tr('Use Network Manager (default backend)')
|
return tr('Use Network Manager (default backend)')
|
||||||
case NicType.NM_IWD:
|
case NicType.NM_IWD:
|
||||||
return tr('Use Network Manager (iwd backend)')
|
return tr('Use Network Manager (iwd backend)')
|
||||||
|
case NicType.IWD:
|
||||||
|
return tr('Use standalone iwd')
|
||||||
case NicType.MANUAL:
|
case NicType.MANUAL:
|
||||||
return tr('Manual configuration')
|
return tr('Manual configuration')
|
||||||
|
|
||||||
|
|
@ -131,6 +134,10 @@ class NetworkConfiguration(SubConfig):
|
||||||
return cls(NicType.ISO)
|
return cls(NicType.ISO)
|
||||||
case NicType.NM:
|
case NicType.NM:
|
||||||
return cls(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:
|
case NicType.MANUAL:
|
||||||
nics_arg = config.get('nics', [])
|
nics_arg = config.get('nics', [])
|
||||||
if nics_arg:
|
if nics_arg:
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import textwrap
|
||||||
|
|
||||||
from archinstall.lib.installer import Installer
|
from archinstall.lib.installer import Installer
|
||||||
from archinstall.lib.models.network import NetworkConfiguration, NicType
|
from archinstall.lib.models.network import NetworkConfiguration, NicType
|
||||||
from archinstall.lib.models.profile import ProfileConfiguration
|
from archinstall.lib.models.profile import ProfileConfiguration
|
||||||
|
|
@ -32,6 +34,13 @@ def install_network_config(
|
||||||
_configure_nm_iwd(installation)
|
_configure_nm_iwd(installation)
|
||||||
installation.disable_service('iwd.service')
|
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:
|
case NicType.MANUAL:
|
||||||
for nic in network_config.nics:
|
for nic in network_config.nics:
|
||||||
installation.configure_nic(nic)
|
installation.configure_nic(nic)
|
||||||
|
|
@ -45,3 +54,36 @@ def _configure_nm_iwd(installation: Installer) -> None:
|
||||||
|
|
||||||
iwd_backend_conf = nm_conf_dir / 'wifi_backend.conf'
|
iwd_backend_conf = nm_conf_dir / 'wifi_backend.conf'
|
||||||
_ = iwd_backend_conf.write_text('[device]\nwifi.backend=iwd\n')
|
_ = 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_content = textwrap.dedent("""\
|
||||||
|
[General]
|
||||||
|
EnableNetworkConfiguration=true
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
NameResolvingService=systemd
|
||||||
|
""")
|
||||||
|
_ = main_conf.write_text(main_conf_content)
|
||||||
|
|
||||||
|
networkd_dir = installation.target / 'etc/systemd/network'
|
||||||
|
networkd_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
wired_conf = networkd_dir / '20-wired.network'
|
||||||
|
wired_conf_content = textwrap.dedent("""\
|
||||||
|
[Match]
|
||||||
|
Type=ether
|
||||||
|
Kind=!*
|
||||||
|
|
||||||
|
[Network]
|
||||||
|
DHCP=yes
|
||||||
|
""")
|
||||||
|
_ = wired_conf.write_text(wired_conf_content)
|
||||||
|
|
||||||
|
resolv = installation.target / 'etc/resolv.conf'
|
||||||
|
resolv.unlink(missing_ok=True)
|
||||||
|
resolv.symlink_to('/run/systemd/resolve/stub-resolv.conf')
|
||||||
|
|
|
||||||
|
|
@ -202,6 +202,8 @@ async def select_network(preset: NetworkConfiguration | None) -> NetworkConfigur
|
||||||
return NetworkConfiguration(NicType.NM)
|
return NetworkConfiguration(NicType.NM)
|
||||||
case NicType.NM_IWD:
|
case NicType.NM_IWD:
|
||||||
return NetworkConfiguration(NicType.NM_IWD)
|
return NetworkConfiguration(NicType.NM_IWD)
|
||||||
|
case NicType.IWD:
|
||||||
|
return NetworkConfiguration(NicType.IWD)
|
||||||
case NicType.MANUAL:
|
case NicType.MANUAL:
|
||||||
preset_nics = preset.nics if preset else []
|
preset_nics = preset.nics if preset else []
|
||||||
nics = await ManualNetworkConfig(tr('Configure interfaces'), preset_nics).show()
|
nics = await ManualNetworkConfig(tr('Configure interfaces'), preset_nics).show()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue