結論
systemd-networkdではなくNetworkManagerを使って解決しました。
Ubuntu Serverではsystemd-networkdがデフォルトになっており、Desktop版ではNetworkManagerがデフォルトになっているようです。
Desktop版ではWi-Fiが繋がっていたのに、Server版では繋がりませんでした。そこで、Desktop版と同様にNetworkManagerを利用してみたところWi-Fiモジュールが上手く動作してくれました。
以下、大いなる余談
使っていなかったノートPCを活用しようと思い立ち、Linuxでも入れて自宅内のサーバとして使ってみることにした。
使用するノートPCは2011年に東芝から発売されたR731/Bである。2016年頃にジャンク品として数千円で購入した気がする。(7,000円くらいで購入したジャンクのノートPCにBIOSロックが掛かっていて、仕方なく捨てた悲しい記憶の方が鮮明に残っている。秋葉原から自宅までゴミを運んでいたんだなぁ)
以下、簡単なスペック。購入後に中古でRAMを増設して、SSDを新調していた。
仕様 | 詳細 |
---|---|
型式 | R731/B |
CPU | Core i5-2520M |
RAM | 8GB |
SSD | 120GB |
NIC | Intel Centrino Advanced-N 6205 |
ノートPCを久々に開いてみると、Ubuntu Desktopを入れていたようで22.04が起動した。そういえば、入れただけで何も活用していなかった。今回も、そうなるやもしれない。
化石のようなノートPCなのと、サーバ用途ということからUbuntu Serverを入れてみることにした。一番の理由はただの興味本位だけど。
思い出話:Ubuntu君との出会い
初めてUbuntuと出会った時期を思い出す。あれは、Windows Vistaが重くて使いようもなくなった時だった。当時使っていたノートPCの構成はCPUがCeleronの32bitで、RAMが2GB、SSDなんて物は無かったのでストレージは勿論HDD。
今となっては原始時代かのような性能だ。そういえばPSP発売当初なんて、メモリースティックなんか32MBの物を使っていた。
使っていく内に発熱するようになり、CPU温度が100℃に張り付いてファンがグルグル回るだけの悲しい怪物になってしまった。OSをUbuntuに入れ替えたところ、何とか普通に動くようになって感動した記憶がある。
今思えば、Windowsもクリーンインストールすればまともに動作したのかもしれない。
おいおい、Wi-Fiが繋がらないぞ
さて、Ubuntu Serverをインストールしてみたはいいものの、Wi-Fiが繋がらないではないか。インターネットに繋げられなければ、ただの光る板とボタンの集合になってしまう。
まずはnetworkctl
を実行してネットワークデバイスの状態を確認。下記のようになり、インストール時にWi-Fiの設定をしたものの接続されていない。
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0x25 ether off unmanaged
3 wlp4s0 wlan no-carrier configuring
物理的にLANケーブルを差してみようにも持ってないし、どうしようかと思いながらネットを調べていると、USBテザリングすればええじゃないか、というコメントを発見。なるほど……で、Ubuntu ServerでUSBテザリングってどうやるんじゃ。
という訳で、調べたことを下記にまとめました。
- USBケーブルでスマホを接続してUSBテザリングをオンに変更
-
networkctl
でUSBテザリングしているNICの名前を把握 - 対象のNICに対してnetplanの設定を記述
-
netplan apply
で設定を適用 -
networkctl
で状態を確認
USBテザリングをONにすると、networkctl
の結果が下記のように変わる。
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0x25 ether off unmanaged
3 wlp4s0 wlan no-carrier configuring
4 enx7e7710db0f44 wlan no-carrier unmanaged
新しく追加されたものがUSBテザリングで認識されたものである。しかし、unmanagedの状態なのでsystemd-networkdで管理されていないため、設定しなければならない。
Ubuntuのネットワーク関係はnetplanというもので管理されているらしい。IPアドレスをDHCPで設定するなら99_config.yamlを作成して設定してね、とかなっているようだ。これに関しては下記が参考になった。
なお設定ファイルのversionで2と記述するのはMAAS/curtinというツールでversion 1を使用しているかららしい。rendererにはnetworkdやNetworkManagerを設定する。また、IPv4のDHCPを有効にするのでdhcp4をtrueに設定。
network:
version: 2
renderer: networkd
ethernets:
enx7e7710db0f44:
dhcp4: true
netplan apply
をして設定を適用するのだけど、下記のように「権限が広すぎるよ。Netplanの設定は他人からアクセスされないようにしてよね」、と怒られる。
WARNING 11:15:10:211: Permissions for /etx/netplan/99_config.yaml are too open. Netplan configuration should NOT be accessible by others.
確かにls -l
でファイルの属性を見ると権限部分が-rw-r--r--
となっているのでsudo chmod 600 /etc/netplan/99_config.yaml
を実行して権限を変更して、再度netplan apply
をして設定を適用する。
すると、ネットワークデバイスの状態が下記のように変化する。
$ networkctl
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback carrier unmanaged
2 enp0x25 ether off unmanaged
3 wlp4s0 wlan no-carrier configuring
4 enx7e7710db0f44 wlan routable configured
こうして、何とかUSBテザリングでネットワークに繋げることができた。とりあえずsudo apt upgrade -U
でもして最新化しておこう。
内蔵のWi-Fiモジュールで繋ぎたいよね
余っているスマホがあって、それをずっとUSBテザリングして使うんで問題なければいいけれど、やっぱりノートPCに内蔵されているWi-Fiモジュールを利用したい。
そこで、ふと思った。 Desktop版ではWi-Fiが繋がっていたではないか、と。ならばと、Desktop版をインストールして確認してみることに。(インストールする必要はなく、ライブ版で試せば十分だった)
Desktop版でのnetworkctl
の実行結果は下記の通りで、systemd-networkdは動作していなかった。
$ networkctl
systemd-networkd is not running, output might be incomplete.
IDX LINK TYPE OPERATIONAL SETUP
1 lo loopback - unmanaged
2 enp0x25 ether - unmanaged
3 wlp4s0 wlan - unmanaged
本記事の冒頭でも書いたように、Ubuntu Serverではsystemd-networkdがデフォルトになっており、Desktop版ではNetworkManagerがデフォルトになっているようだ。
という訳でNetworkManagerをsudo apt install network-manager
でインストールしよう。installするとrestartを推奨する文言が出るのでreboot
するのだけど、その前にnetplanの設定をしておこう。(下記のipアドレスとかは適当)
network:
version: 2
renderer: NetworkManager
wifis:
wlp4s0:
dhcp4: false
access-points:
Buffalo-D-Raemon:
password: nobita
addresses:
- 192.168.0.2/24
nameservers:
addresses:
- 192.168.0.1
search: []
routes:
-to: default
via: 192.168.0.1
次にNICの管理をNetworkManagerに設定し、systemd-networkd関連のサービスを無効化して再起動後、nmcli
でNICがNetworkManagerで管理されているか確認する。
$ nmcli d set wlp4s0 managed yes
$ sudo systemctl stop systemd-networkd.socket
$ sudo systemctl stop systemd-networkd
$ sudo systemctl disable systemd-networkd
$ reboot
$ nmcli d
DEVICE TYPE STATE CONNECTION
wlp4s0 ethernet connected netplan-ens160
lo loopback connected (externally) lo
enp0s25 ethernet unavailable --
こうして、Wi-Fiでの通信に成功したのでした。
最後に
こういったエラー解決というのは面白く、根気強くやって少しずつ解決していく過程が楽しいけど、疲れる。
NetworkManagerだと動いて、systemd-networkdだと動かない理由は分かりませんでした。誰か御存知であれば教えてください。
参考
networkctl
に関して。OPERATIONALやSETUP欄の値の意味なども載っている。
ls -l
の結果の見方など。
systemd-networkからNetworkManagerへ変更する方法など。