Added a simple INI handler, and a helper function under Installer().configure_nic() to help with nic configuration. Supports a crude DHCP configuration and a minimal static IP handler.

This commit is contained in:
Anton Hvornum 2020-11-11 19:11:22 +00:00
parent 9a1199333a
commit 07d70a0a91
3 changed files with 61 additions and 0 deletions

2
.gitignore vendored
View File

@ -17,3 +17,5 @@ SAFETY_LOCK
**/**.pkg.*.xz
**/**archinstall-*.tar.gz
**/**.zst
**/**.network
**/**.target

View File

@ -6,6 +6,7 @@ from .general import *
from .user_interaction import *
from .profiles import Profile
from .mirrors import *
from .systemd import Networkd
from .output import log, LOG_LEVELS
from .storage import storage
@ -149,6 +150,24 @@ class Installer():
def arch_chroot(self, cmd, *args, **kwargs):
return self.run_command(cmd)
def configure_nic(self, nic, dhcp=True, ip=None, gateway=None, dns=None, *args, **kwargs):
if dhcp:
conf = Networkd(Match={"Name": nic}, Network={"DHCP": "yes"})
else:
assert ip
network = {"Address": ip}
if gateway:
network["Gateway"] = gateway
if dns:
assert type(dns) == list
network["DNS"] = dns
conf = Networkd(Match={"Name": nic}, Network=network)
with open(f"{self.mountpoint}/etc/systemd/network/10-{nic}.network", "a") as netconf:
netconf.write(str(conf))
def minimal_installation(self):
## Add nessecary packages if encrypting the drive
## (encrypted partitions default to btrfs for now, so we need btrfs-progs)

View File

@ -0,0 +1,40 @@
class Ini():
def __init__(self, *args, **kwargs):
"""
Limited INI handler for now.
Supports multiple keywords through dictionary list items.
"""
self.kwargs = kwargs
def __str__(self):
result = ''
first_row_done = False
for top_level in self.kwargs:
if first_row_done:
result += f"\n[{top_level}]\n"
else:
result += f"[{top_level}]\n"
first_row_done = True
for key, val in self.kwargs[top_level].items():
if type(val) == list:
for item in val:
result += f"{key}={item}\n"
else:
result += f"{key}={val}\n"
return result
class Systemd(Ini):
def __init__(self, *args, **kwargs):
"""
Placeholder class to do systemd specific setups.
"""
super(Systemd, self).__init__(*args, **kwargs)
class Networkd(Systemd):
def __init__(self, *args, **kwargs):
"""
Placeholder class to do systemd-network specific setups.
"""
super(Networkd, self).__init__(*args, **kwargs)