network-manager で管理できない。
network-manager で unmanaged になって、ubuntu desktop (gnome) からネットワークが管理できなかった。
依存関係が多くて、問題がわかりにくい。
ubuntu は 1年前から、 netplan が導入されているので、ubuntu server は systemd-networkd で管理、 ubuntu desktop は NetworkManager で管理することになっている。
それでは、/etc/network/interfaces はどうなったのか?
network-manager のときは、 network-manager が /etc/network/inteface をparsing して管理デバイスを見つけた上で除外し、残ったデバイスを管理するようになっている。
ただし、この設定はキャッシュされるらしい。(マジだったら、コレはホントめんどくさいわ)
networkd のときは、 networkd の起動後に /etc/network/intefaces を取得して管理する。こっちも面倒くさい。
デスクトップubuntu では networkd はいらない
使ってもいいんだけど、依存関係が多くて面倒くさいので、除外して切り分ける
sudo systemctl stop systemd-networkd.service
sudo systemctl disable systemd-networkd.service
sudo systemctl mask systemd-networkd.service
netplan の設定をシンプルにする。
netplan は networkmanager を使う設定にして、シンプルにする。
takuya@:~$ cat /etc/netplan/01-netcfg.yaml
network:
version: 2
renderer: NetworkManager
netplanの設定を再生成してあげる
sudo netplan generate
これで、余計なものは動かなくなる。
ただし、場合分けのために除外し過ぎくらい除外してる。なので、netplan apply すら動かない。
この辺は、正直言ってubuntu の問題だろうなぁ。 networkmanager を指定してるのに 一旦 networkd を経由しようとしている。
takuya@:~$ sudo netplan generate
takuya@:~$ sudo netplan apply
Failed to start systemd-networkd.service: Unit systemd-networkd.service is masked.
Traceback (most recent call last):
File "/usr/sbin/netplan", line 23, in <module>
netplan.main()
File "/usr/share/netplan/netplan/cli/core.py", line 50, in main
self.run_command()
File "/usr/share/netplan/netplan/cli/utils.py", line 130, in run_command
self.func()
File "/usr/share/netplan/netplan/cli/commands/apply.py", line 44, in run
self.run_command()
File "/usr/share/netplan/netplan/cli/utils.py", line 130, in run_command
self.func()
File "/usr/share/netplan/netplan/cli/commands/apply.py", line 153, in command_apply
utils.systemctl_networkd('start', sync=sync, extra_services=netplan_wpa)
File "/usr/share/netplan/netplan/cli/utils.py", line 82, in systemctl_networkd
subprocess.check_call(command)
File "/usr/lib/python3.7/subprocess.py", line 363, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['systemctl', 'start', '--no-block', 'systemd-networkd.service']' returned non-zero exit status 1.
NetworkManager の設定は多ファイルに分割されている
NetworkManager の設定ファイルは、/etc/NetworkManager だけでなく、 /usr/lib/NetworkManager などにデフォルト設定あったりして、それらがマージされて /etc/NetworkManager で上書きするようになっている。
takuya@:~$ sudo NetworkManager --print-config
# NetworkManager configuration:
/etc/NetworkManager/NetworkManager.conf (lib: 10-dns-resolved.conf, no-mac-addr-change.conf)
(run: netplan.conf)
(etc: 10-globally-managed-devices.conf, default-wifi-powersave-on.conf)
## 略
/etc/NetworkManager で設定ファイルを見てもすべてが記載されているわけでじゃないので、 --print-config で最終的な設定を確認するのがポイント
ifupdown を使わないようにする。
ifupdown は /etc/network/interfaceを管理するので、 ifupdown も切り分けのために一旦無効化する。
sudo apt uninstall ifupdown
sudo apt uninstall ifupdown2
sudo apt uninstall netscript-2.4
NetworkManager.conf でunamanged デバイスをすべて上書きして無効化する。
設定方法は、いくつか考えられるのだけど、umamanged になる問題を解決するために、すべての設定をOFFにしたり消していく。
takuya@:~$ cat /etc/NetworkManager/NetworkManager.conf
[main]
#plugins=ifupdown,keyfile
plugins=keyfile
dns=default
[keyfile]
unmanaged-devices=
#[ifupdown]
#managed=true
[device]
wifi.scan-rand-mac-address=yes
ちなみに、ifupdownのmanaged は ifup/ifdown で管理される /etc/network/intefacesを nmcli で管理するかどうか。
restart する
あれこれ、余計なものを排除した結果動くようになる、
takuya@:~$ sudo systemctl status network-manager.service
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-10-21 17:20:33 JST; 10s ago
Docs: man:NetworkManager(8)
Main PID: 4474 (NetworkManager)
Tasks: 4 (limit: 4915)
Memory: 4.0M
CGroup: /system.slice/NetworkManager.service
└─4474 /usr/sbin/NetworkManager --no-daemon
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9682] device (enp3s0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'assume')
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9809] device (enp3s0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'assume')
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9813] device (enp3s0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'assume')
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9819] manager: NetworkManager state is now CONNECTED_LOCAL
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9832] manager: NetworkManager state is now CONNECTED_SITE
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9834] policy: set '有線接続 1' (enp3s0) as default for IPv4 routing and DNS
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9876] device (enp3s0): Activation: successful, device activated.
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9885] manager: NetworkManager state is now CONNECTED_GLOBAL
10月 21 17:20:33 j5005 NetworkManager[4474]: <info> [1571646033.9892] manager: startup complete
10月 21 17:20:34 j5005 NetworkManager[4474]: <info> [1571646034.0348] bluez5: NAP: added interface 00:09:DD:50:6C:BF
管理下に置かれる
takuya@:~$ nmcli d
DEVICE TYPE STATE CONNECTION
enp3s0 ethernet 接続済み 有線接続 1
lo loopback 管理無し --
unmanaged だったのが
managed になる。
なんでこんなにめんどくさいのか
過渡期とはいえ、systemd 関連の更新と整合性を保つために、あれこれ機能が追加されている。
あれこれ過渡期だからでしょうね。 nmcli や netplan を諦めて /etc/network/interfacesだけに戻すか、素直にnetworkd だけにしたほうが将来的に楽なのかなぁ。
今回驚いたのは ifup/down のコマンドを提供するパッケージが3つもあったことだった。ネットワーク周りはカオスですね。