🛜

新MacでLinux VM版:Kubuntu24.04LTS ⑧ Network

2024/05/23に公開

本連載では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.servicemaskedになっていますね。しかし他にもあります。ややこしいので詳細は書きませんが、fwupd-refresh.timerenableでまだ動いています。
これが動いていると、上の2つ(右にstaticとある)が起こされてしまう事があります。

これを次のコマンドでLinux起動時に自動で動作しないようにします。

sudo systemctl disable fwupd-refresh.timer

すると、次のコマンドで再確認した時にこうなります。

4.完了です!!!

さて、ここまで設定をすればDiscoverのアップデート機能もきちんと動きます。今何か出るようなら、どうぞアップデートして下さい!

以上でNetworkの設定は完了です。
そして、この時点でKubuntuは基本的に完全動作するようになりました!!
おめでとうございます。

でもまだ続きます。より完全なKubuntu体験をするためにお勧めの調整を紹介しますので、お楽しみに。

この連載の全記事目次にもどる

Discussion