2019年6月現在公開されているRaspberry Pi 3 Model B/B+用64bitUbuntuイメージを使ってオフラインでUbuntuをセットアップしようとすると、外部ネットワークへの接続待ちで数分待つことがあります。長いんですよね…… 素直にLANケーブルを接続すればよいのですが、そうでなくても動くようにしたいなと思ってイメージに手を加えたのでその方法とその成果物をシェアしたいと思います。
動作確認をしたのは64bit版イメージのみですが、32bit版も同じように対処できると思います。今回紹介する方法で編集するイメージは本ページの「作成したイメージ」からダウンロードすることもできます。
発生する問題
Ubuntu Wikiにリンクが張られているイメージ(ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz)をmicroSDに書き込み、LANケーブルを接続せずにそのまま起動すると、以下の画像のように「A start job is running for Wait for Network to be Configured」と表示されなかなかログインさせてくれません。eth0がIPアドレスを取得できないためにsystemd-networkdがずっと待っていることが問題のようです。

環境
以下の環境でイメージ(ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz)を編集しました。
- Ubuntu Desktop16.04.6と18.04.2でどちらでも問題なくイメージを編集できました
手順
まずはじめにUbuntu Wikiから64bit版のイメージをダウンロードして展開します。ダウンロードするディレクトリはどこでも問題ありません。今回は~/Downloads以下に展開することにしました。

cd ~/Downloadscurl -O http://cdimage.ubuntu.com/ubuntu/releases/bionic/release/ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xzxz -kdv ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img.xz次に/mnt以下に展開したイメージファイルをマウントします。/dev/mapper/loop11p2のところのloopNp2のNの値は使用しているPCの環境によって変わります。
sudo kpartx -a ubuntu-18.04.2-preinstalled-server-arm64+raspi3.imgsudo mount /dev/mapper/loop11p2 /mntマウントしたイメージの中身を編集します。aptのauto-upgradesとsystemd-networkdのwait-onlineサービスを無効にします((systemd-networkd-wait-online.serviceを無効にしてよいのか正直判断し切れていないのですが、以下のページでは無効にすれば動く(動きそう)という記述が、
Raspberry Pi 3にROS2をインストール – RT Robot Shop Blog
https://www.rt-shop.jp/blog/archives/11061
RaspberryPi 3B+でUbuntu 18.04を起動させる方法 【無線LAN動作確認済み】 - ASRobot
https://www.asrobot.me/entry/2018/07/05/045832/
以下のページでは無効にしても大丈夫そうという記述が見られるので、大丈夫なのだと思います。
NetworkManager-wait-online.serviceはどのような場合にenableにすれば良いか、を理詰めで考える - Qiita
https://qiita.com/yunano/items/8636a6dd6becad84920d
何かわかれば追記します。))。
cd /mnt/etc/apt/apt.conf.d/sudo sed -i 's/1/0/g' 20auto-upgradescd /mnt/etc/systemd/system/network-online.target.wantssudo rm -rf systemd-networkd-wait-online.servicesudo ln -s '/dev/null' systemd-networkd-wait-online.serviceこのあとイメージを圧縮する際にできる限りイメージサイズを小さくできるよう、未使用領域をゼロ埋めします((ここで紹介している方法です。 /archives/1101#PC))。
sudo dd if=/dev/zero of=/mnt/dummy bs=4096sudo rm /mnt/dummyイメージをアンマウントします。
cd ~/Downloadssudo umount /mntsudo kpartx -d /dev/loop11sudo losetup -d /dev/loop11アンマウントしたイメージをxzで圧縮します。
mv ubuntu-18.04.2-preinstalled-server-arm64+raspi3.img ubuntu-18.04.2-preinstalled-server-arm64+raspi3-20190303.imgxz -kvz ubuntu-18.04.2-preinstalled-server-arm64+raspi3-20190303.img以上でイメージの編集は完了です。
作成したイメージ
作成したイメージは以下のページに公開しました。
https://github.com/Tiryoh/RaspberryPi_Ubuntu/releases
- ubuntu-18.04.2-preinstalled-server-arm64+raspi3-20190303.img.xzMD5 hash:
8cf92c0eb9ee51e719a56e27307193a0
イメージの書き込みと起動
今回編集したイメージをmicroSDに書き込み、起動すると比較的すぐに(1分程度?)ログインできるようになります。
cloud-initがubuntuアカウントのセットアップをしてくれているようで、初回はubuntu login:と表示されていてもCloud-init v(略) finished at (略)と表示されるまで待つ必要があります。

balenaEtcherを使うと簡単にmicroSDにイメージを書き込みができますので、おすすめです。 balenaEtcherはWindows/macOS/Linuxで使用できます。Windowsでの使い方は以下に書いていますので是非。
/archives/1708#Etcher
まとめ
Ubuntu Wikiにて紹介されているRaspberry Pi 3 Model B/B+用のイメージを編集してオフライン環境でも待たずに起動できるようにする方法を紹介しました。紹介した方法を用いて編集したイメージを用いることで起動時にsystemd-networkdがIPアドレス取得待ちでログインできるまで長時間待たされないようになることを確認しました。
関連記事
- (Updated )Raspberry Pi 3用UbuntuMATEのイメージ書き込み方このエントリではRaspberry Pi 3で使えるUbuntuMATEのイメージの書き込み手順を説明します。
- (Updated )Raspberry Pi 3用Ubuntu MATEのカーネルのアップデート方法ディスプレイに接続しなくても、Raspberry Pi用Ubuntu MATEのイメージをセットアップし、Raspberry Pi 3で使えるように編集しました。
- (Updated )Raspberry PiのUbuntu MATEでデバイスドライバをビルドする方法Raspberry PiのUbuntuMATEでデバイスドライバをビルドする方法をメモしておきます。
- (Updated )Raspberry Pi 3にUbuntu 14.04をインストールする方法RaspberryPi2までは公式のファームウェアをmicroSDカードに書き込むだけで使えていました(RaspberryPi2にUbuntu14.04をインストールする方法 | Memoteki)が、RaspberryPi3からはそう簡単ではなくなってしまったので対応方法を2種類メモしておきます。
- Raspberry Pi 3(Raspbian)をディスプレイなしでセットアップする方法[Windows][Etcher]Raspberry Pi 3にRaspbianをインストールし、HDMIディスプレイ、キーボード、マウスなしでセットアップする方法を紹介します。PCからSSHでログインできるように設定します。 作業する際に使用するPCのOSはWindowsです。今回は前回よりもmicroSDへの書き込みに便利なソフトウェアを紹介します