Старый postinstall
This commit is contained in:
commit
4337a3f94e
349 changed files with 21945 additions and 0 deletions
243
deb_dist/postinstall-1.5.0/postinstall/option/network.py
Normal file
243
deb_dist/postinstall-1.5.0/postinstall/option/network.py
Normal file
|
|
@ -0,0 +1,243 @@
|
|||
import subprocess
|
||||
import ipaddress
|
||||
from dialog import Dialog
|
||||
|
||||
|
||||
class NetworkConfig:
|
||||
def __init__(self):
|
||||
self.d = Dialog(dialog="dialog")
|
||||
self.temp_network_settings = {}
|
||||
|
||||
def select_interface(self):
|
||||
interfaces = self.get_network_interfaces()
|
||||
if not interfaces:
|
||||
self.d.msgbox("Нет доступных сетевых интерфейсов.")
|
||||
return None
|
||||
|
||||
code, tag = self.d.menu(
|
||||
"Выберите интерфейс:", choices=[(iface, "") for iface in interfaces]
|
||||
)
|
||||
|
||||
if code == self.d.OK:
|
||||
self.d.msgbox(f"Выбран интерфейс: {tag}")
|
||||
self.show_current_settings(tag) # Добавлено окно с текущими настройками
|
||||
return tag
|
||||
else:
|
||||
self.d.msgbox("Интерфейс не выбран.")
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def get_network_interfaces():
|
||||
try:
|
||||
result = subprocess.run(
|
||||
["ls", "/sys/class/net/"], capture_output=True, text=True, check=True
|
||||
)
|
||||
interfaces = result.stdout.strip().split("\n")
|
||||
return interfaces
|
||||
except subprocess.CalledProcessError:
|
||||
return []
|
||||
|
||||
def show_current_settings(self, interface):
|
||||
try:
|
||||
result = subprocess.run(
|
||||
["ip", "-o", "addr", "show", interface], capture_output=True, text=True, check=True
|
||||
)
|
||||
current_settings = result.stdout.strip()
|
||||
|
||||
ip_address = None
|
||||
if "inet " in current_settings:
|
||||
ip_address = current_settings.split("inet ")[1].split("/")[0]
|
||||
|
||||
if "dhcp" in current_settings:
|
||||
config_type = "DHCP"
|
||||
elif ip_address:
|
||||
config_type = "Static"
|
||||
else:
|
||||
config_type = "Неизвестно"
|
||||
|
||||
message = f"Тип настройки: {config_type}\nIP-адрес: {ip_address}" if ip_address else "IP-адрес не настроен"
|
||||
|
||||
self.d.msgbox(f"Текущие настройки интерфейса {interface}:\n\n{message}", height=10, width=50)
|
||||
except subprocess.CalledProcessError as e:
|
||||
self.d.msgbox(f"Ошибка получения настроек для интерфейса {interface}: {e}")
|
||||
|
||||
def configure_dhcp(self, interface):
|
||||
code, dns = self.d.inputbox("Введите DNS сервер (опционально):")
|
||||
if code == self.d.OK:
|
||||
self.temp_network_settings[interface] = {
|
||||
"type": "dhcp",
|
||||
"dns": dns,
|
||||
"interface": interface,
|
||||
}
|
||||
self.d.msgbox("DHCP настройка сохранена.")
|
||||
else:
|
||||
self.d.msgbox("DHCP настройка отменена.")
|
||||
|
||||
def configure_static(self, interface):
|
||||
code, ip = self.d.inputbox("Введите IP адрес:")
|
||||
if code != self.d.OK:
|
||||
return
|
||||
code, mask = self.d.inputbox("Введите маску подсети:")
|
||||
if code != self.d.OK:
|
||||
return
|
||||
code, gateway = self.d.inputbox("Введите шлюз:")
|
||||
if code != self.d.OK:
|
||||
return
|
||||
code, dns = self.d.inputbox("Введите DNS сервер (опционально):")
|
||||
|
||||
if ip and mask and gateway:
|
||||
self.temp_network_settings[interface] = {
|
||||
"type": "static",
|
||||
"ip": ip,
|
||||
"mask": mask,
|
||||
"gateway": gateway,
|
||||
"dns": dns,
|
||||
"interface": interface,
|
||||
}
|
||||
self.d.msgbox("Статические настройки сохранены.")
|
||||
else:
|
||||
self.d.msgbox("Некоторые параметры не заданы.")
|
||||
|
||||
def configure_cidr(self, interface):
|
||||
code, cidr = self.d.inputbox("Введите CIDR (например, 192.168.1.154/24):")
|
||||
if code != self.d.OK:
|
||||
return
|
||||
code, gateway = self.d.inputbox("Введите шлюз:")
|
||||
if code != self.d.OK:
|
||||
return
|
||||
code, dns = self.d.inputbox("Введите DNS сервер (опционально):")
|
||||
|
||||
if cidr:
|
||||
try:
|
||||
ip = ipaddress.ip_interface(cidr).ip
|
||||
network = ipaddress.ip_network(cidr, strict=False)
|
||||
mask = network.netmask
|
||||
self.temp_network_settings[interface] = {
|
||||
"type": "static",
|
||||
"ip": str(ip),
|
||||
"mask": str(mask),
|
||||
"gateway": gateway,
|
||||
"dns": dns,
|
||||
"interface": interface,
|
||||
}
|
||||
self.d.msgbox("CIDR конфигурация сохранена.")
|
||||
except ValueError as e:
|
||||
self.d.msgbox(f"Неверный формат CIDR: {e}")
|
||||
else:
|
||||
self.d.msgbox("CIDR не задан.")
|
||||
|
||||
def run(self):
|
||||
while True:
|
||||
interface = self.select_interface()
|
||||
if not interface:
|
||||
break
|
||||
|
||||
code, tag = self.d.menu(
|
||||
"Выберите действие для интерфейса:",
|
||||
choices=[
|
||||
("1", "Настроить DHCP"),
|
||||
("2", "Настроить статический IP"),
|
||||
("3", "Настроить CIDR"),
|
||||
("4", "Выбрать другой интерфейс"),
|
||||
("5", "Выход"),
|
||||
],
|
||||
)
|
||||
|
||||
if code == self.d.OK:
|
||||
if tag == "1":
|
||||
self.configure_dhcp(interface)
|
||||
elif tag == "2":
|
||||
self.configure_static(interface)
|
||||
elif tag == "3":
|
||||
self.configure_cidr(interface)
|
||||
elif tag == "4":
|
||||
continue
|
||||
elif tag == "5":
|
||||
break
|
||||
else:
|
||||
break
|
||||
|
||||
return self.temp_network_settings
|
||||
|
||||
def save_and_apply_network_settings(self):
|
||||
for interface, settings in self.temp_network_settings.items():
|
||||
try:
|
||||
if settings["type"] == "dhcp":
|
||||
self.save_dhcp(interface, settings)
|
||||
elif settings["type"] == "static":
|
||||
self.save_static(interface, settings)
|
||||
if settings.get("dns"):
|
||||
self.update_resolv_conf(settings["dns"])
|
||||
except Exception as e:
|
||||
self.d.msgbox(f"Ошибка применения настроек для {interface}: {e}")
|
||||
return False
|
||||
|
||||
try:
|
||||
subprocess.run(["systemctl", "restart", "networking"], check=True)
|
||||
self.d.msgbox("Сетевые настройки успешно применены.")
|
||||
return True
|
||||
except Exception as e:
|
||||
self.d.msgbox(f"Ошибка перезапуска сетевой службы: {e}")
|
||||
return False
|
||||
|
||||
def save_dhcp(self, interface, settings):
|
||||
interface_config = f"""
|
||||
auto {interface}
|
||||
iface {interface} inet dhcp
|
||||
"""
|
||||
self.update_interface_config(interface, interface_config)
|
||||
|
||||
def save_static(self, interface, settings):
|
||||
ip = settings["ip"]
|
||||
mask = settings["mask"]
|
||||
gateway = settings["gateway"]
|
||||
interface_config = f"""
|
||||
auto {interface}
|
||||
iface {interface} inet static
|
||||
address {ip}
|
||||
netmask {mask}
|
||||
"""
|
||||
if gateway:
|
||||
interface_config += f"gateway {gateway}\n"
|
||||
self.update_interface_config(interface, interface_config)
|
||||
|
||||
def update_interface_config(self, interface, interface_config):
|
||||
try:
|
||||
with open("/etc/network/interfaces", "r") as f:
|
||||
lines = f.readlines()
|
||||
|
||||
with open("/etc/network/interfaces", "w") as f:
|
||||
skip_section = False
|
||||
for line in lines:
|
||||
if interface in line:
|
||||
skip_section = True
|
||||
continue
|
||||
if skip_section and line.strip() == "":
|
||||
skip_section = False
|
||||
if not skip_section:
|
||||
f.write(line)
|
||||
f.write(interface_config.strip() + "\n")
|
||||
except Exception as e:
|
||||
self.d.msgbox(f"Ошибка обновления конфигурации интерфейса: {e}")
|
||||
|
||||
def update_resolv_conf(self, dns):
|
||||
if not dns:
|
||||
return
|
||||
|
||||
dns_entry = f"nameserver {dns}"
|
||||
try:
|
||||
with open("/etc/resolv.conf", "r") as f:
|
||||
resolv_lines = f.readlines()
|
||||
|
||||
if any(line.strip() == dns_entry for line in resolv_lines):
|
||||
return
|
||||
|
||||
with open("/etc/resolv.conf", "a") as f:
|
||||
f.write(dns_entry + "\n")
|
||||
except Exception as e:
|
||||
self.d.msgbox(f"Ошибка обновления /etc/resolv.conf: {e}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
configurator = NetworkConfig()
|
||||
configurator.run()
|
||||
Loading…
Add table
Add a link
Reference in a new issue