public/proxmox/pin-interface-names.sh

73 lines
2.3 KiB
Bash
Raw Permalink Normal View History

2024-06-03 16:18:25 +02:00
#!/bin/bash
# Verzeichnis für die systemd-Netzwerk-Units
output_dir="/etc/systemd/network"
2024-06-03 17:18:14 +02:00
interfaces_file="/etc/network/interfaces"
2024-06-03 16:18:25 +02:00
# Überprüfen, ob das Ausgabe-Verzeichnis existiert, ansonsten erstellen
if [ ! -d "$output_dir" ]; then
mkdir -p "$output_dir"
fi
# Alle Netzwerk-Interfaces auslesen und unerwünschte Interfaces herausfiltern
interfaces=$(ls /sys/class/net | grep -Ev '^(lo|tap|vlan|vmbr|bonding|fw|veth)')
2024-06-03 17:18:14 +02:00
# Speichern der alten und neuen Interface-Namen in einer Assoziativen Liste
declare -A interface_map
# Speichern der alten und neuen Bridge-Ports in einer Assoziativen Liste
declare -A bridge_port_map
2024-06-03 16:18:25 +02:00
# Für jedes Interface ein systemd-Netzwerk-File erstellen
for interface in $interfaces; do
mac_address=$(cat /sys/class/net/$interface/address)
2024-06-03 17:18:14 +02:00
# Neuer Interface-Name mit "net" am Anfang
new_interface_name="net$interface"
file="$output_dir/10-$new_interface_name.link"
2024-06-03 16:18:25 +02:00
cat <<EOF > $file
[Match]
MACAddress=$mac_address
[Link]
2024-06-03 17:18:14 +02:00
Name=$new_interface_name
2024-06-03 16:18:25 +02:00
EOF
echo "Datei erstellt: $file"
2024-06-03 17:18:14 +02:00
# Hinzufügen zur Assoziativen Liste
interface_map[$interface]=$new_interface_name
2024-06-03 16:18:25 +02:00
done
2024-06-03 17:18:14 +02:00
echo "systemd-Netzwerk-Units wurden erfolgreich in $output_dir erstellt."
# Aktualisieren der /etc/network/interfaces Datei
echo "Aktualisiere /etc/network/interfaces Datei..."
while IFS= read -r line; do
if [[ $line =~ ^bridge_ports ]]; then
# Extrahieren der Bridge-Ports
bridge_ports=$(echo "$line" | awk '{for (i=2;i<=NF;i++) print $i}')
new_bridge_ports=""
# Aktualisieren der Bridge-Ports
for port in $bridge_ports; do
if [[ -n ${interface_map[$port]} ]]; then
new_bridge_ports+=" ${interface_map[$port]}"
bridge_port_map[$port]=${interface_map[$port]}
else
new_bridge_ports+=" $port"
fi
done
echo "bridge_ports$new_bridge_ports" >> "$interfaces_file.new"
else
echo "$line" >> "$interfaces_file.new"
fi
done < "$interfaces_file"
# Die neue Datei über die alte Datei kopieren
mv "$interfaces_file.new" "$interfaces_file"
echo "/etc/network/interfaces Datei erfolgreich aktualisiert."
# Ausgabe der aktualisierten Bridge-Ports
echo "Aktualisierte Bridge-Ports:"
for old_port in "${!bridge_port_map[@]}"; do
new_port=${bridge_port_map[$old_port]}
echo "$old_port -> $new_port"
done