新MacでLinux VM版:Kubuntu24.04LTS ⑧ Network
本連載ではAppleSilicon(M1系)で仮想マシン上にLinuxを入れる方法を、全くの初心者の方でも理解できるように説明しています。
この連載の全記事目次はこちら
1.Networkの設定
今回はネットワークの設定をしていきます。と言っても、複雑なネットワークの設定ではなく、Kubuntuを使用する際に今まで進めてきたやり方だと不具合があるのでそれを修正します。
1-1.何が問題なのか
きっとこの記事を読んで進めて来た人は、先に色々触って試したのではないでしょうか?そして下のような画面を見たかも知れません。
でもFirefoxを起動すると繋がります。aptコマンドも使えます。何が起きているのでしょう???
実はこれ、Server版をベースにKubuntuを入れた為に起きています。ネットワークは繋がっているのに、Plasmaデスクトップがネットワークを認識していない状態です。
Ubuntuのネットワーク管理方法
解決方法だけ書くなら数行なのですが、そこはこのシリーズ。背景を説明しましょう。
Netplan
KubuntuはUbuntuをベースにPlasmaを被せたもの。つまりネットワーク設定はUbuntuの仕組みを使っています。そしてUbuntuは、ネットワークの設定にNetplanというプログラムを利用しています。
これは簡単にネットワークの設定が出来るよう、次に説明するどちらのバックエンドを利用していても、同じルールで設定ファイルを書く事ができる仕組みです。(ただしまだ全てを記述できる訳ではなく不完全です)
バックエンド
netplanでコントロールする仕組み(バックエンド)には2種類あります。
- systemd-networkd
- NetworkManager
systemd-networkdはsystemdというLinuxのシステム起動を管理する仕組みの一部です。複雑な記載も出来てシンプルな構造。しかし近年モバイル機器の増加やWifiに対する動的な設定などデスクトップ向けに新しい機能が求められるようになり、これには対応していません。
そこで登場したのがNetworkManager。こちらはWifiへの動的接続対応やデスクトップとの連携が可能になっています。UbuntuのデスクトップであるGnomeやKubuntuで使われているPlasmaも、このNetworkManagerを使って動作するように成っています。
ところが、server版のデフォルトはsystmd-networkdになっています。 サーバではnetworkdの方がフィットするということですね。デスクトップも基本的に使いませんし、動的なWifi接続ではなく有線が基本です。
2.NetworkManageの設定
それでは設定をしてみます。まず現状がどうなっているのか確認します。
まずはこのコマンド
2-1.状態の確認
systemctl status systemd-networkd
これは先程書いた、sytemd-networkd
の動作を確認するコマンド。緑色の文字でactive
とあります。動いています。
同様にNetworkManager
の動作を確認すると、こちらもactive
。つまりどちらも動いています。
systemctl status NetworkManager
これはnetplan
の状況を確認するコマンド。enp0s5
という名前のネットが仮想マシンで動いているMacOSから分けてもらっているネットワークです。(名前は仮想マシンによって異なる可能性があります。実際の名前をメモして置いて下さい。)
その横に(networkd)
とありますね?これは、systemd-networkd
で動作しているという意味です。
netplan status
もう一つ、nmcli
というNetworkManagerの管理コマンド。connection
の結果は空白。device status
の結果は、unmanaged
になっています。
つまりNetworkManagerから見ると、ネットワークは管理されていない状態です。
nmcli connection
nmcli device status
2-2.Netplanの設定を書き換えて、NetworkManagerを使用するように変更
Netplanの設定は、/etc/netplan/にあります。今どうなっているか見てみましょう。
cd /etc/netplan
sudo less 50-cloud-init.yaml (一つしかファイルがないので5と入力してTabキーで補完)
下の様にになっています。書き方の詳細は必要になったら調べてみるとしましょう。これを書き換える必要があります。
実はNetplanの設定ファイルの書き方はサンプルがあります。ネットで検索しても出てきますが、既にインストールされています。
ここにはNetworkManagerを使用する際のサンプルもあります。
cd /usr/share/doc/netplan/examples
ls
cat network_manager.yaml
3行の内容だけですね。これを使います。次のようにして書き換えましょう。
# もともとの設定を逃がす場所をつくります。/etc は管理者権限でないと触れません
sudo mkdir /etc/netplan/original
# 今作ったディレクトリに、もとからあったファイルを移動します。
sudo mv /etc/netplan/50-cloud-init.yaml /etc/netplan/original
cd /usr/share/doc/netplan/examples
# 先ほど見つけたサンプルをコピーします。今居るディレクトリに在るファイルを指定する場合、ファイル名だけでOKです。
sudo cp network_manager.yaml /etc/netplan
# ファイルに番号を付けます。(理由はあとで書きます)
sudo mv /etc/netplan/network_manager.yaml /etc/netplan/99-network_manager.yaml
# ファイルの所有権を変更します。これをしないと、後で警告が出ます。
sudo chmod 600 /etc/netplan/99-network_manager.yaml
さて、準備したファイルそのままでも動くのですが、より完璧な状態にします。
# nanoエディタを起動して編集
sudo nano /etc/netplan/99-network_manager
下3行を次の図のように様に入力します。が、この時注意が必要です。ネットワークの名前については、仮想マシン毎に違う可能性があります。
Parallelsなら、先程状態を確認したenp0s5
になっていると思います。しかしUTMの場合私の環境ではenp0s1
でした。必ず確認するようにして下さい。
Ctrl+o
で書き出し、Ctrl+X
で終了したら、準備OK。
次のコマンドでこのファイルをNetplanに読ませて、設定ファイルを作らせます。
sudo netplan try
すると変更した後、画面の様にこの状態で良いかと聞いてきます。
変更するコマンドはnetplan apply
もありますが、例えば外部から接続して操作している時に設定を間違えるとそのマシンにアクセスできなくなる可能性があるため、try
を使う癖を付けた方が安全です。
try
の場合、数十秒立ってもEnter
が押され確定しない場合、元の状態に戻します。
次に、もう一つだけやる事があります。上の画像の下半分です。これをしないと、起動時にsystemd-networkdが起動してしまいます。
sudo systemctl disable systemd-networkd
それでも良さそうですが、networkdには連動して起動する他のプログラムがあり、ネットワークが起動した事を確認するまで待つのです。
ところがNetworkManagerに切り替えた為いつまで待っても確認が取れない。結果、Linuxの起動時に下の所で止まりエラーとなるまで待ち続けます。
もしこうなったら、1分くらいのんびり待つと起動しますから、上のコマンドを入れましょう。
さて、ここまでで再起動してください!
2-3.設定完了の確認
再起動したら再度コマンドで確認します。まずnetplan status
。NetworkManager管理に成っていますね。
設定アプリのconnectionを見てもきちんと出ています。
もし、先程の設定で"サンプルファイルのまま”実行した場合(つまり下3行を追加しなかった場合)下のように、unmanaged
になります。実はこの状態でもNetworkManagerの管理にはなっていて動きます。しかしunmanagedも気持ち悪いですし、直しておきましょう。
3.それでも動かないDiscoverアプリ
ここまででネットは動いているのですが、Discoverはアップデート機能が動きません。コマンドでも可能ですが(apt upgrade)、気になります。
アップデートの画面を開くと、データを取りに行ったまま戻ってきません。
私も散々調べて分かったのですが、fwupd
というプログラムが邪魔をしていると突き止めました、これはファームウェアをアップデートする機能の裏側で動くプログラムなのですが、仮想マシンの場合そもそもファームウェアはこのプログラムでアップデート出来ません。止めてしまいましょう。
まず状態を見ます。
systemctl status fwupd
動いてますね。では止めます。mask
は完全に起動しなくするコマンドです。同じようなコマンドにdisable
がありますが、こちらを使った場合Linuxの起動時には自動で起動しませんが、何かのプログラムに呼ばれると起動します。fwupdはDiscoverアプリが起動すると呼び出されてしまうのです・・・
その後stop
コマンドで今既に動いているfwupd
を止めます。そしてもう一度確認すると、maskedかつinactiveですね。OKです。
sudo systemctl mask fwupd
sudo systemctl disable fwupd-refresh.timer
sudo systemctl stop fwupd
sudo systemctl status fwupd
実は細かい所でもう一つやっておくと無駄な動作がなくなります。(正確に検証していませんが、Discoverの表示が速くなった気がしてます)
やらなくても動きますが、一応紹介します。
systemctl list-unit-files fw*
上記のコマンドを実行すると、fwから始まるサービス(ひとまずはLinuxの裏で動いているプログラムだと思って良いです)の一覧が出ます。
いまmask
したfwupd.service
はmasked
になっていますね。しかし他にもあります。ややこしいので詳細は書きませんが、fwupd-refresh.timer
がenable
でまだ動いています。
これが動いていると、上の2つ(右にstatic
とある)が起こされてしまう事があります。
これを次のコマンドでLinux起動時に自動で動作しないようにします。
sudo systemctl disable fwupd-refresh.timer
すると、次のコマンドで再確認した時にこうなります。
4.完了です!!!
さて、ここまで設定をすればDiscoverのアップデート機能もきちんと動きます。今何か出るようなら、どうぞアップデートして下さい!
以上でNetworkの設定は完了です。
そして、この時点でKubuntuは基本的に完全動作するようになりました!!
おめでとうございます。
でもまだ続きます。より完全なKubuntu体験をするためにお勧めの調整を紹介しますので、お楽しみに。
Discussion