先日、自宅の環境でUbuntu Serverをインストールすると、DHCP周りがおかしいことに気がつきました。 いや、実を言うと随分前から「ん?」って思うことが度々発生していました。
アップデート中とか、少々SSH接続していたものを放置するとセッションが切れたりするんです。 なんでかなと思ってUbuntu Serverの systemd-netwokd サービスを再起動してみると、確実にIPアドレスが変わりました。当然ながら再起動してもIPアドレスが変化します。IPアドレスが変わっちゃったら当然セッションは切れるわなー。
このことを社内Slackで愚痴ってみたところ、再現しないとの声が多数。つまり、環境依存みたいですね。
NetworkManagerを使った場合は、IPアドレスがコロコロ変わるなどという現象は起きないことがわかりました。どうやら家のDHCPサーバーとnetworkdとの相性が悪いようです。
Ubuntuのネットワーク周り
Ubuntu 17.10以降ではNetplan.ioが、Ubuntuのネットワークを簡単に構成するためのユーティリティとして実装されています。Ubuntu DesktopはバックエンドとしてNetworkManager、Ubuntu Serverはsystemdのnetworkdを利用しています。
この問題はUbuntu Desktopでは起きていませんでした。というわけで、Ubuntu Serverのセットアップ後に network-manager
パッケージのセットアップと、以下のようなインターフェイスの定義を行って再起動して回避することにしました。
% sudo vi /etc/netplan/00-installer-config.yaml network: version: 2 renderer: NetworkManager
この設定はUbuntu Desktopのデフォルトと同じ設定です。IPアドレスなどはNetwork Managerのツール(例えば nmcliやnmtui)で設定を行います。
カスタムISOを作ることにした
ただ、インストールごとに毎回 network-manager
をインストールするのも面倒です。そこで、カスタムISOを作ることにしました。Ubuntuでは色々なカスタムISOイメージを作るツールがある(例えばubuntu-defaults-builderとか)ようですが、今回利用したのはCubicというものです。
使い方はこちらのブログにまとめられていたので参考にしました。
実行中にCLIの画面が現れるので、追加インストールしたいパッケージを入れるだけで良いそうです。これならおバカな私にも使える!
Ubuntu Archive上に公開されているパッケージ、PPA上のパッケージ、サードパーティのリポジトリー上のパッケージなどを入れることができるようです。Zabbix AgentとかPrometheusのなんとかExpoterのインストール済みUbuntuインストーラーとかも作れそうですね。
今回はこのCubicを使って、次のように実行しました。ISOを作った時の最新パッチの適用、あとはNetwork Managerのインストールとサービス起動です。
sudo apt update && sudo apt upgrade && sudo apt install network-manager && sudo systemctl enable NetworkManager
こんな感じでISOイメージが出来上がります。
ちなみにこのままだとNetplan.io + networkdの構成でUbuntu Serverが動作しますので、困ったときに renderer: NetworkManager
をNetplan.ioのconfigに仕込むことにしました。
今回は自宅の環境依存の対応のためにCubicを使いましたが、これ、割と便利ですね。定期的に新しいイメージを作れば、インストール毎にアップデートなどしないで済むので良いですね。