Skip to content

Commit

Permalink
Added a simple INI handler, and a helper function under Installer().c…
Browse files Browse the repository at this point in the history
…onfigure_nic() to help with nic configuration. Supports a crude DHCP configuration and a minimal static IP handler.
  • Loading branch information
Torxed committed Nov 11, 2020
1 parent 9a11993 commit 07d70a0
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,5 @@ SAFETY_LOCK
**/**.pkg.*.xz
**/**archinstall-*.tar.gz
**/**.zst
**/**.network
**/**.target
19 changes: 19 additions & 0 deletions archinstall/lib/installer.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
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

Expand Down Expand Up @@ -149,6 +150,24 @@ def run_command(self, cmd, *args, **kwargs):
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)
Expand Down
40 changes: 40 additions & 0 deletions archinstall/lib/systemd.py
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit 07d70a0

Please sign in to comment.