148 lines
4.3 KiB
Rust
148 lines
4.3 KiB
Rust
use log::info;
|
|
use std::path::Path;
|
|
|
|
use crate::error::PeachConfigError;
|
|
use crate::utils::{cmd, conf};
|
|
|
|
/// Idempotent script to configure a Debian installation to use
|
|
/// systemd-networkd for general networking. The script configures the eth0,
|
|
/// wlan0 and ap0 interfaces. This configuration allows switching between
|
|
/// wireless client mode (wlan0) and wireless access point mode (ap0)
|
|
pub fn configure_networking() -> Result<(), PeachConfigError> {
|
|
info!("[ INSTALLING SYSTEM REQUIREMENTS ]");
|
|
cmd(&["apt", "install", "-y", "libnss-resolve"])?;
|
|
|
|
info!("[ SETTING HOST ]");
|
|
cmd(&["cp", &conf("hostname"), "/etc/hostname"])?;
|
|
cmd(&["cp", &conf("hosts"), "/etc/hosts"])?;
|
|
|
|
info!("[ DEINSTALLING CLASSIC NETWORKING ]");
|
|
cmd(&[
|
|
"apt-get",
|
|
"autoremove",
|
|
"-y",
|
|
"ifupdown",
|
|
"dhcpcd5",
|
|
"isc-dhcp-client",
|
|
"isc-dhcp-common",
|
|
"rsyslog",
|
|
])?;
|
|
cmd(&[
|
|
"apt-mark",
|
|
"hold",
|
|
"ifupdown",
|
|
"dhcpcd5",
|
|
"isc-dhcp-client",
|
|
"isc-dhcp-common",
|
|
"rsyslog",
|
|
"openresolv",
|
|
])?;
|
|
cmd(&["rm", "-rf", "/etc/network", "/etc/dhcp"])?;
|
|
|
|
info!("[ SETTING UP SYSTEMD-RESOLVED & SYSTEMD-NETWORKD ]");
|
|
cmd(&["apt-get", "autoremove", "-y", "avahi-daemon"])?;
|
|
cmd(&["apt-mark", "hold", "avahi-daemon", "libnss-mdns"])?;
|
|
cmd(&[
|
|
"ln",
|
|
"-sf",
|
|
"/run/systemd/resolve/stub-resolv.conf",
|
|
"/etc/resolv.conf",
|
|
])?;
|
|
cmd(&[
|
|
"systemctl",
|
|
"enable",
|
|
"systemd-networkd.service",
|
|
"systemd-resolved.service",
|
|
])?;
|
|
|
|
info!("[ CREATING INTERFACE FILE FOR WIRED CONNECTION ]");
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/04-wired.network"),
|
|
"/etc/systemd/network/04-wired.network",
|
|
])?;
|
|
|
|
info!("[ SETTING UP WPA_SUPPLICANT AS WIFI CLIENT WITH WLAN0 ]");
|
|
// to avoid overwriting previous credentials, only copy file if it doesn't already exist
|
|
let wlan0 = "/etc/wpa_supplicant/wpa_supplicant-wlan0.conf";
|
|
if !Path::new(wlan0).exists() {
|
|
cmd(&["cp", &conf("network/wpa_supplicant-wlan0.conf"), wlan0])?;
|
|
cmd(&["chmod", "660", wlan0])?;
|
|
cmd(&["chown", "root:netdev", wlan0])?;
|
|
}
|
|
cmd(&["systemctl", "disable", "wpa_supplicant.service"])?;
|
|
cmd(&["systemctl", "enable", "wpa_supplicant@wlan0.service"])?;
|
|
|
|
info!("[ CREATING BOOT SCRIPT TO COPY NETWORK CONFIGS ]");
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/copy-wlan.sh"),
|
|
"/usr/local/bin/copy-wlan.sh",
|
|
])?;
|
|
cmd(&["chmod", "770", "/usr/local/bin/copy-wlan.sh"])?;
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/copy-wlan.service"),
|
|
"/etc/systemd/system/copy-wlan.service",
|
|
])?;
|
|
cmd(&["systemctl", "enable", "copy-wlan.service"])?;
|
|
|
|
info!("[ SETTING UP WPA_SUPPLICANT AS ACCESS POINT WITH AP0 ]");
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/wpa_supplicant-ap0.conf"),
|
|
"/etc/wpa_supplicant/wpa_supplicant-ap0.conf",
|
|
])?;
|
|
cmd(&[
|
|
"chmod",
|
|
"600",
|
|
"/etc/wpa_supplicant/wpa_supplicant-ap0.conf",
|
|
])?;
|
|
|
|
info!("[ CONFIGURING INTERFACES ]");
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/08-wlan0.network"),
|
|
"/etc/systemd/network/08-wlan0.network",
|
|
])?;
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/12-ap0.network"),
|
|
"/etc/systemd/network/12-ap0.network",
|
|
])?;
|
|
|
|
info!("[ MODIFYING SERVICE FOR ACCESS POINT TO USE AP0 ]");
|
|
cmd(&["systemctl", "disable", "wpa_supplicant@ap0.service"])?;
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/wpa_supplicant@ap0.service"),
|
|
"/etc/systemd/system/wpa_supplicant@ap0.service",
|
|
])?;
|
|
|
|
info!("[ SETTING WLAN0 TO RUN AS CLIENT ON STARTUP ]");
|
|
cmd(&["systemctl", "enable", "wpa_supplicant@wlan0.service"])?;
|
|
cmd(&["systemctl", "disable", "wpa_supplicant@ap0.service"])?;
|
|
|
|
info!("[ CREATING ACCESS POINT AUTO-DEPLOY SCRIPT ]");
|
|
cmd(&[
|
|
"cp",
|
|
&conf("ap_auto_deploy.sh"),
|
|
"/usr/local/bin/ap_auto_deploy",
|
|
])?;
|
|
|
|
info!("[ CONFIGURING ACCESS POINT AUTO-DEPLOY SERVICE ]");
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/ap-auto-deploy.service"),
|
|
"/etc/systemd/system/ap-auto-deploy.service",
|
|
])?;
|
|
cmd(&[
|
|
"cp",
|
|
&conf("network/ap-auto-deploy.timer"),
|
|
"/etc/systemd/system/ap-auto-deploy.timer",
|
|
])?;
|
|
|
|
info!("[ NETWORKING HAS BEEN CONFIGURED ]");
|
|
Ok(())
|
|
}
|