複数のコンピュータのホスト名をMACアドレスの最後の8桁に設定するスクリプトを作成しました。 MACアドレスはすべてのコンピュータに組み込まれている一意の番号なので、うまく機能します。
ネットワークが起動する前に、起動時にホスト名を設定するsystemdサービスを作成しました(したがって、ネットワークはこの新しいホスト名を使用します)。
# .service file
Before=network.target NetworkManager.service dhcpcd.service
しかし、残念な副作用は、現在のMACアドレスを読み取るようにネットワークが機能するまで、MACアドレスが空であることです。したがって、これはキャッチ22の状況です。ネットワークが起動する前にMACアドレスを取得する必要があり、ネットワークが起動した後にのみMACアドレスを取得できます。 MACアドレスが固定されているため、ネットワークの電源を入れる前でも読み取れませんか?
私はPythonを使用しています。from getmac import get_mac_address
しかし、シェルスクリプトも使用できます。ネットワークが確立される前にMACアドレスを読み取る方法はありますか?
答え1
まあ、私はこれを書き、ネットワークが表示される前に動作するようです(少し荒いですが動作します):
from pathlib import Path
interfaces = ['eth0', 'enp3s0', 'eno1']
for interface in interfaces:
file = f'/sys/class/net/{interface}/address'
if not Path(file).exists():
continue
with open(file, 'r') as f:
contents = f.read()
mac = contents.strip().upper()
return mac