Memoteki

メモ的な何か。https://tiryoh.com/blog/about-blog をお読みください。

Linux Raspberry Pi

RaspberryPi3用UbuntuMATEのカーネルのアップデート方法

2017/11/29

LINEで送る
Pocket

ディスプレイに接続しなくても、Raspberry Pi用Ubuntu MATEのイメージをセットアップし、Raspberry Pi 3で使えるように編集しました。

その編集手順をメモしておきます。


書き込み手順のページはこちらです。
https://tiryoh.com/blog/archives/1308

背景

Ubuntu CoreがRaspberry Pi 3できちんと動くようですが、Ubuntu SSOアカウントが必要です。(https://developer.ubuntu.com/core/get-started/raspberry-pi-2-3
また、Ubuntu WikiでRaspberry Pi 3用のイメージファイルが公開されていますが、そのままではapt upgradeコマンドで起動しなくなってしまったりと扱いにくい状態1)Ubuntu Wikiで配布されているイメージファイルは/boot/config.txtを編集することで問題なくアップデートできるそうです。
詳細はこちら
なのでUbuntu MATEのイメージファイルを編集し、公開しています。

RaspberryPi3用Ubuntuイメージの作成方法(Server版)

公開後、しばらくは問題なく扱えていました。以下の方法でのデバイスドライバの開発も問題なく行えていました。

Raspberry PiのUbuntuMATEでデバイスドライバをビルドする方法

2017年2月17日に、アップデートが発表されました。
https://ubuntu-mate.org/blog/ubuntu-mate-xenial-point-2-raspberry-pi/

個人的に大きな変化だと思っているのは

  • カーネルのアップデート(4.1.19-v7+ -> 4.4.38-v7+)
  • raspi-config の追加(今までは手動でのインストールが必要)
  • SSHサーバがデフォルトではオフ(今まではデフォルトでオン)
  • 初回起動時はWiFiが有効にならない(https://bugs.launchpad.net/bugs/1572956)

以上4点です。

このアップデートにより、以前のイメージ作成方法で作成したイメージは、カーネルのヘッダが実際のカーネルのバージョンと一致しなくなってしまいました。
(apt-getでインストールせず、debパッケージをダウンロードしてインストールしたためです。)
そこで、再度Ubuntu MATEのイメージを編集し、書き込み後そのまま使用できる状態にします。

作成したイメージファイル

今回作成したイメージを以下に公開しておきます。

ユーザ名、パスワードはどちらも"ubuntu"です。必要に応じて変更してください。

ある程度の動作確認はすませてありますが、すべてについて検証できているわけではありません。
不具合が出ても対処できる環境で先にテストしてからの使用をお願いします。

初期設定済み版

https://tiryoh.com/blog/wp-content/uploads/2017/08/ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi-configured-20170807.img.xz
File size : 1018MB
MD5 hash : f9866e712fef03280c1e98ecbcc9bf92

ライセンス表記

  • Ubuntu MATE 16.04.3
    • https://ubuntu-mate.org/
    • GPLv3 License

初期設定済み+GUI削除版

https://tiryoh.com/blog/wp-content/uploads/2017/08/ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi-configured-nogui-20170806.img.xz
File size : 806MB
MD5 hash : 41c2a68d9fd3052a2350667b2c70f1ef

ライセンス表記

  • Ubuntu MATE 16.04.3
    • https://ubuntu-mate.org/
    • GPLv3 License

初期設定済み+GUI削除+ROS Kineticインストール版

https://tiryoh.com/blog/wp-content/uploads/2017/08/ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi-configured-nogui-rospreinstalled-20170806.img.xz
File size : 910MB
MD5 hash : 461d624b427f9a9c7333024ee625bfa2

ライセンス表記

  • Ubuntu MATE 16.04.3
    • https://ubuntu-mate.org/
    • GPLv3 License
  • ROS Kinetic
    • http://www.ros.org/
    • BSD License

手順

  1. 公式サイトからUbuntu MATEのイメージファイルをダウンロード
  2. Raspberry Piで初期設定
  3. イメージファイルをバックアップ
  4. バックアップしたイメージファイルの編集
  5. 編集したイメージファイルの圧縮

以上の手順でイメージファイルの作成をします。
作成したイメージファイルはこのエントリの最初で公開しています。

イメージファイルの準備と書き込み

Ubuntu MATEのイメージファイルをダウンロードし、microSDに書き込みます。

まずは、ダウンロードしてきます。ブラウザでUbuntu MATEのサイトから、または以下のコマンドでダウンロードします。

cd ~/Downloads
wget https://ubuntu-mate.org/raspberry-pi/ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz

Ubuntu

書き込む前に、/dev/mmcblk*として認識されているディスクがないことを確認します。

ls /dev/mmcblk*

ここで、ls: /dev/mmcblk* にアクセスできません: そのようなファイルやディレクトリはありませんと返ってくることを確認してください。

UbuntuでmicroSDに書き込む際は以下のコマンドで書き込みできます。

sudo umount /dev/mmcblk0
xzcat ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz | sudo dd of=/dev/mmcblk0 bs=1M

書き込みが終わったら、microSDの準備完了です。

macOS/OS X

macOSの場合はddコマンドのオプションが異なります。
microSDを指す前と指す後で2回以下のコマンドを実行します。

diskutil list

/dev/disk2 (external, physical)が増えており、これがmicroSDであることがわかります。
ここで違うdiskを選択すると、最悪の場合OSが起動しなくなる場合があります。

diskutil umountDisk /dev/disk2
xzcat ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz | sudo dd of=/dev/rdisk2 bs=1m

ここで、ofに/dev/disk2ではなく、/dev/rdisk2を指定します。
rdiskはdiskと違い、アンバッファモードなのでバッファモードより書き込みが数倍速いです。
時間がかかりますが、Ctrl+Tできちんと動いている確認できます。
Raspbianのイメージ書き込みの場合はconv=syncオプションが必須なようですが、逆にこのイメージではこのオプションをつけると書き込みがうまくいきません。
書き込みが終わったら、EjectしてmicroSDの準備完了です。

diskutil eject /dev/disk2

Raspberry Piのセットアップ

GUIでの設定が必須ですので、Raspberry Pi 3にモニタとキーボード、マウスを接続します。
設定に関してはこちらのサイトが大変丁寧にまとまっていましたので紹介しておきます。
第48回「ラズベリーパイにUbuntu MATEをインストール!」 | Device Plus - デバプラhttp://deviceplus.jp/hobby/raspberrypi_entry_048/

初期設定後、Terminalを起動します。Ctrl+Alt+Tで起動します。
まずは自動アップデートを無効にします。

sudo systemctl disable apt-daily.service
sudo systemctl disable apt-daily.timer 

aptのパッケージリストを更新してアップグレードしておきます。少々時間がかかります。

sudo apt update
sudo apt upgrade

よく使うパッケージでまだインストールされていない、gitをインストールしておきます。
curl、wget、raspi-configなどはすでにインストールされているようです。

sudo apt install git

デバイスドライバのビルドの際に必要なカーネルのソースをダウンロード・インストールしておきます。

sudo apt install dkms raspberrypi-kernel-headers

net.ifnames=0/boot/cmdline.txtに書き加えます。これを書き換えることによって有線LANがeth0として認識されるようになります。
/etc/udev/rules.d/70-persistent-net.rulesではなく、/lib/udev/rules.d/80-net-setup-link.rulesによってeth0が認識されているのでこのイメージを書き込んだmicroSDはどのRaspberry Piに差しても起動させることができます。
/etc/udev/rules.d/70-persistent-net.rulesで認識させている場合、MACアドレスでethの番号が決まります。初回起動時とは異なるRaspberry Piに接続するとeth0ではなく、eth1やeth2として認識されます。)

sudo vi /boot/cmdline.txt

書き換え後は以下のようになります。

ubuntu@ubuntu:~$ cat /boot/cmdline.txt
net.ifnames=0 dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait quiet splash

ここまでの作業が完了したら再起動し、再びきちんと起動することを確認しておいてください。

Raspberry Piを何かに組み込んだまま使う場合はGUIを使うことはないと思いますので、アンインストールします。
これだけで1GB以上空き容量を確保できますのでお勧めです。
アンインストールするにあたり、起動時にConsoleで起動するように設定します。ついでにSSHを有効にしておきます。
raspi-configを起動します。

sudo raspi-config

"Boot Options"を起動します。

"Console"を選択します。

"Finish"を選択します。

再起動するか確認されるので"Yes"を選択し、再起動します。

再起動後、使用しないパッケージをアンインストールします。
GUI関連のパッケージをアンインストールしています。
こうすることでmicroSDの空き容量を増やせますし、apt upgradeで更新の際に更新するパッケージの数を減らすことができます。

sudo apt purge libreoffice-* youtube-* sonic-pi thunderbird mincraft-pi scratch
sudo apt autoremove 

完全にGUIを無効にする場合はさらにパッケージを削除します。

sudo apt purge mate-* ubuntu-mate-* account-plugin-* gnome-* network-manager brltty brasero dvd+rw-tools firefox vlc* rhythmbox
sudo apt autoremove 

ここまでの作業が完了したら再起動し、再びきちんと起動することを確認しておいてください。
Ubuntuマシンでの操作に移るのでシャットダウンします。

sudo poweroff

PCでのセットアップ

シャットダウン後、microSDを取り外してUbuntuマシンに差し込みます。
先ほどとは異なり、今回はmicroSDのデータを読み込みます。

cd ~/
sudo dd if=/dev/mmcblk0 of=ubuntu.img

ディスクイメージをマウントします。

sudo kpartx -a ~/ubuntu.img
sudo mount /dev/mapper/loop0p2 /mnt/

マウントしたイメージを編集します。

cd /mnt/home/ubuntu
rm .sudo_as_admin_successful
rm .bash_history && touch .bash_history
rm .viminfo
rm .lesshst
cd /mnt/etc
sudo rm -rf NetworkManager

ついでにログファイルもきれいに消しておきます。

sudo find /mnt/var/log/ -type f -name \* -exec cp -f /dev/null {} \;

ディスクイメージの圧縮時に圧縮率が高まるように、未使用領域をゼロ埋めします。

sudo dd if=/dev/zero of=/mnt/dummy bs=4096
sudo rm /mnt/dummy

ゼロ埋めした/mnt/dummyを削除したらアンマウントして圧縮します。

cd ~/
sudo umount /mnt
sudo kpartx -d /dev/loop0
xz -vk ubuntu.img ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi-no-gui-20170806.img.xz

以上でイメージファイルの準備は完了です。

まとめ

参考サイト

LINEで送る
Pocket

   [ + ]

1. Ubuntu Wikiで配布されているイメージファイルは/boot/config.txtを編集することで問題なくアップデートできるそうです。
詳細はこちら

-Linux, Raspberry Pi
-, ,