Linux Raspberry Pi

RaspberryPi3にUbuntu14.04をインストールする方法

2017/07/23

LINEで送る
Pocket

RasPi2

RaspberryPi2までは公式のファームウェアをmicroSDカードに書き込むだけで使えていました(RaspberryPi2にUbuntu14.04をインストールする方法 | Memoteki)が、RaspberryPi3からはそう簡単ではなくなってしまったので対応方法を2種類メモしておきます。

用意するもの

  • Raspberry Pi 3 Model B
  • 8GB以上、Class10以上のmicroSDHC
    (Ubuntuのインストールだけなら4GB、Class6あれば十分)
  • 5V、2.5A以上供給できる電源
    (RaspberryPi3から2.5A以上推奨になりましたが、実測値ではほとんどの場合0.5A以下でした。PCのUSB2.0ポートでもおそらく問題ないです。)
  • USBキーボード
  • HDMI対応モニタ(とHDMIケーブル)
  • LANケーブル

TranscendのmicroSDHCは相性問題があるとの話ですが、私の環境では今まで一度も問題が起きたことはありません。
16GB Class10 UHS-I対応のものがオススメです。リンク貼っておきます。

キーボードはTouchPadとセットになったものを用意しておくとRaspbianなどGUIの操作が必要になった場合にもそのまま使えて便利です。MicrosoftのAll-in-One Media Keyboardがオススメです。

手順

書き込むイメージの準備

今回作成するイメージは2つの方法で作成できます。

  1. Ubuntu14.04をRaspberry Pi 2で起動し、カーネルとブートローダをアップデートする
  2. Ubuntu14.04のイメージにUbuntu MATE 16.04のイメージから抜き出したカーネルとブートローダのファイル類を書き込んで作成する

どちらでも作成できましたが、なんとなくRaspberry Pi 2でアップデートしたイメージを使用しています。
imgファイルの中身を書き換えた後、書き込みをしています。
imgファイルのマウントにはkpartxを使用するため、イメージの準備の際にはUbuntu 14.04 (64bit)マシンを使用しました。

Raspberry Pi 2からアップデートする場合

イメージをダウンロードしてきます。

ARM/RaspberryPi - Ubuntu Wiki
2015-04-06-ubuntu-trusty.zipを上記サイトからダウンロードします。159.3MBありました。
今回はDownloads直下にそのままunzipコマンドで2015-04-06-ubuntu-trusty.imgを展開しました。

「microSDの準備」の項目と同じようにして、Raspberry Pi 2にUbuntu14.04をインストールして起動します。

起動時に日付が1970年1月1日になってしまっているので以下のコマンドで正しい日付を設定します。これを実行しないとSSLの証明書関連でエラーが出てしまいます。

2016年7月1日20:30の例です。

sudo date -s "160701 20:30:00"

最低限必要なパッケージを用意します。

sudo apt-get update
sudo apt-get install curl binutils

rpi-updateコマンドでカーネルを更新するのでrpi-updateをインストールしておきます。
以下のコマンドでは4.1.19-v7+を指定しています。rpi-firmwareのリポジトリのコミット履歴から該当するSHA(今回は'6e8b794')を指定することでそのほかのバージョンも指定できます。

sudo curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update && sudo chmod +x /usr/bin/rpi-update
sudo BOOT_PATH=/boot/firmware ROOT_PATH=/ rpi-update 6e8b794

カーネルのアップデートのあとは初期RAMディスクの設定をアップデート&ブートローダのアップデート禁止設定をします。
その前に 大きい方のパーティションの/bootディレクトリ以下にあるファイルを削除します。このとき、/boot/firmwareだけは残しておきます。 (起動すると/boot/firmware以下に小さい方のパーティションの中身が割り当てられるため、空です。空ですが、念のため。)
以下のコマンドで初期RAMディスクの設定をアップデートします。特にエラーは出ないですが、設定に必要なファイルはそろっていないのでうまくいっていない可能性が高いです。

sudo update-initramfs -c -k 4.1.19-v7+

以下のコマンドでapt-getで自動アップデートされないよう、設定します。

sudo apt-mark hold raspberrypi-bootloader-nokernel

ここまで設定したら、諸々のパッケージをアップデートし、問題なく再起動できることを確認します。

sudo apt-get upgrade

これでRaspberryPi3でも使えるイメージが完成しました。
ただ、このままほかのRaspberryPiにmicroSDを差し替えても、eth0が認識しません。
LinuxマシンにmicroSDを読み込ませるか、シャットダウン前に /etc/udev/rules.d/70-persistent-net.rules削除しておく必要があります。

所有者がrootなのでシャットダウン前に削除する場合は以下のコマンドで削除できます。

sudo rm /etc/udev/rules.d/70-persistent-net.rules

ここまで設定したイメージ、一応公開しておきます。(md5sum:a8b8bc20994ce6e89f6db9b80b23e139)
検証していないことがたくさんありますので、エラーが出る可能性があります。
使用する際は起動しなくなっても問題ない環境でテストしてからお願いします。

2017年6月25日追記。iragamoさんよりご指摘いただきました。

ユーザ名、パスワードともに変更していませんので、どちらも"ubuntu"でログインできます。

追記ここまで。

http://www.mediafire.com/download/lguvc0mgllyxy8l/2016-07-02-ubuntu-trusty.img
https://mega.nz/#!PVQXhbQb!SLIfMbeTJ97iYO3liPKPxzUAnLlPvPCDhu-cqEvg_UQ

Ubuntu MATE 16.06のファイルを使用する場合

イメージをダウンロードしてきます。

ARM/RaspberryPi - Ubuntu Wiki
2015-04-06-ubuntu-trusty.zipを上記サイトからダウンロードします。159.3MBありました。
Downloads直下にそのままunzipコマンドで2015-04-06-ubuntu-trusty.imgを展開しました。

Download Ubuntu MATE | Ubuntu MATE
ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img.xzを上記サイトからダウンロードします。1.1GBありました。
Downloads直下にubuntu-mate-16.04-desktop-armhf-raspberry-pi.imgを展開しました。

kpartxでimgファイルのデバイスマップを作成し、マウントします。
kpartxコマンドについてはこちら。kpartx(8) - Linux man page

sudo kpartx -av ~/Downloads/2015-04-06-ubuntu-trusty.img
sudo kpartx -av ~/Downloads/ubuntu-mate-16.04-desktop-armhf-raspberry-pi.img

ここでそれぞれ2つのパーティション、合計4つマウントされます。
2015-04-06-ubuntu-trusty.imgの

  • BOOTパーティションの中身を丸ごと
  • ROOTパーティションの /lib/modprobe.d の中身すべて
  • ROOTパーティションの /lib/modules の中身すべて

以上3つをubuntu-mate-16.04-desktop-armhf-raspberry-pi.imgのものに置き換えます。
あとは2015-04-06-ubuntu-trusty.imgの

  • ROOTパーティションの /boot

に今回は使わない3.18.0-20-rpi2のカーネルのファイルがありますので削除しておきます。

ここまでできたら、2015-04-06-ubuntu-trusty.imgをアンマウントしてから、以下のコマンドでデバイスマップを削除します。

sudo kpartx -dv ~/Downloads/2015-04-06-ubuntu-trusty.img

この後、「microSDの準備」の項目と同じようにして、Raspberry Pi 3にUbuntu14.04をインストールして起動します。

最低限必要なパッケージを用意します。

sudo apt-get update
sudo apt-get install curl binutils

rpi-updateコマンドでカーネルを更新するのでrpi-updateをインストールしておきます。
以下のコマンドでは4.1.17-v7+を指定しています。rpi-firmwareのリポジトリのコミット履歴から該当するSHA(今回は'6e8b794')を指定することでそのほかのバージョンも指定できます。

sudo curl -L --output /usr/bin/rpi-update https://raw.githubusercontent.com/Hexxeh/rpi-update/master/rpi-update && sudo chmod +x /usr/bin/rpi-update
sudo BOOT_PATH=/boot/firmware ROOT_PATH=/ rpi-update 6e8b794

カーネルのアップデートのあとは初期RAMディスクの設定をアップデート&ブートローダのアップデート禁止設定をします。

以下のコマンドで初期RAMディスクの設定をアップデートします。特にエラーは出ないですが、設定に必要なファイルはそろっていないのでうまくいっていない可能性が高いです。

sudo update-initramfs -c -k 4.1.19-v7+

以下のコマンドでapt-getで自動アップデートされないよう、設定します。

sudo apt-mark hold raspberrypi-bootloader-nokernel

ここまで設定したら、諸々のパッケージをアップデートし、問題なく再起動できることを確認します。

sudo apt-get upgrade

これでRaspberryPi3でも使え、更新までできるイメージができます。

※ここから先はRaspberry Pi 2のときとほぼ同じです。

microSDの準備

今回はMacで実行します。Linuxでも概ね同じようにできるようです。

WindowsではWin32 Disk Imagerなどを使えば簡単です。

microSDを指す前と指す後で2回以下のコマンドを実行します。

diskutil list

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

diskutil umountDisk /dev/disk2
sudo dd if=~/Downloads/2016-07-02-ubuntu-trusty.img of=/dev/rdisk2 bs=1m

ここで、ofに/dev/disk2ではなく、/dev/rdisk2を指定します。
rdiskはdiskと違い、アンバッファモードなのでバッファモードより書き込みが数倍速いです。
時間がかかりますが、Ctrl+Tできちんと動いている確認できます。
書き込みが終わったら、EjectしてmicroSDの準備完了です。

diskutil eject /dev/disk2

Ubuntuでは以下のコマンドで書き込みができます。

sudo dd if=~/Downloads/2016-07-02-ubuntu-trusty.img of=/dev/mmcblock00

接続

microSD、LANケーブル、HDMIケーブルを所定の位置に接続し、最後にmicroUSBの電源をつなぎます。
このときにHDMIケーブルでモニタとRaspberry Pi 3が接続されていないと途中から接続しても認識されません。
ssh接続テストを行うまでHDMI対応モニタとUSBキーボードを使用します。

キーボード、タイムゾーンの設定

デフォルトのログインユーザは"ubuntu"、パスワードも"ubuntu"です。

sudo dpkg-reconfigure keyboard-configuration
sudo dpkg-reconfigure tzdata

パッケージリスト・パッケージの更新

sudo apt-get update && sudo apt-get upgrade

mDNSとOpenSSHサーバのインストール

マルチキャストDNS(mDNS)はMacやWindowsではBonjourと呼ばれているサービスです。
IPアドレスを直接入力しなくても同じネットワーク内で"HOSTNAME.local"が名前解決できるようになります、
Windowsで使うにはBonjour for Windowsが必要になります。
単体でもインストールできますが、iTunesのインストール時にインストールされます。
LinuxではAvahiを使います。

sudo apt-get install avahi-daemon openssh-server

お気に入りのエディタをインストール

VimでもEmacsでもnanoでも。

sudo apt-get install vim

hostnameの変更

mDNSを入れたのでhostnameを変更します。
ほかのhostnameと同じにならないように設定する必要があります。
今回は"raspberrypi001"に変更しています。

sudo vim /etc/hostname
sudo vim /etc/hosts

/etc/hostnameの中身はこんな感じ。

raspberrypi001

/etc/hostsの中身はこんな感じ。127.0.0.1のところだけ書き換えればよいでしょう。

#127.0.0.1    ubuntu
127.0.0.1    raspberrypi001

ここで一度再起動

sudo reboot

ssh接続テスト

ここからはsshで接続できるはずです。
同じネットワーク内で"HOSTNAME.local"(今回は"raspberrypi001.local")で接続できるようになっています。
MacやLinxからならターミナルを起動して以下のコマンドで接続できるはずです。

ssh ubuntu@raspberrypi001.local

Windowsの場合はTeraTermで接続できます。

Wi-Fi接続に必要なパッケージのインストール

Wi-Fi接続に必要なドライバなど各種パッケージをインストールします。

sudo apt-get install linux-firmware wireless-tools wpasupplicant

Wi-Fi設定ファイルの編集

sudo vim /etc/network/interfaces
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf


ちなみに、以下のコマンドを実行することでWi-Fiのアクセスポイントをスキャンすることができ、プロトコル等を調べることができます。

sudo iwlist wlan0 scan

wlan0がないよ!と言う旨のエラーが出たらifupしてあげればwlan0が起動します。

sudo ifup wlan0

Wi-Fi設定の確認

Wi-Fiの設定ができたら、以下のコマンドでcompletedと言われるか確認します。

sudo wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf

最終行がこんな感じになります。

CTRL-EVENT-CONNECTED - Connection to xx:xx:xx:xx:xx:xx completed

オプションに-Bをつければバックグラウンドでの起動に切り替わります。

ファイルシステムの拡張

raspi-configならexpand_rootfsで済む部分ですが、Ubuntuでは手作業が必要です。
以下のコマンドで/dev/rootのsizeが1.7GBぐらいだと思います。

df -h
sudo fdisk /dev/mmcblk0

Welcome to fdisk (util-linux 2.22.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p # pを入力

Disk /dev/mmcblk0: 15.8 GB, 15798894592 bytes, 30857216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a

Device Boot Start End Blocks Id System
/dev/mmcblk0p1 * 2048 186367 92160 c W95 FAT32 (LBA)
/dev/mmcblk0p2 186368 3667967 1740800 83 Linux

Command (m for help): d # dを入力
Partition number (1-4): 2 # 2を削除する

Command (m for help): n # nを入力
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p # pを入力
Partition number (1-4, default 2): 2 # 2を新規パーティションに
First sector (186368-30857215, default 186368): # Enter
Last sector, +sectors or +size{K,M,G} (186368-30857215, default 30857215): # ENter
Using default value 30857215

Command (m for help): w # wを入力

RaspberryPiでSDカード容量を最大まで使うようにする – hello-world.jp.net

開始と終了のセクターアドレスはデフォルトで正しく指定される場合がほとんどです。

一度再起動

sudo reboot

パーティション拡張

sudo resize2fs /dev/mmcblk0p2

これでセットアップは終了です。
あとは通常のUbuntuと同様に使用することができます。

このあと、ROS Indigoをインストールして、Raspberry Pi Mouse V2が動くところまでは動作確認できました。

そのほか

積み上げる際はM2.6のスペーサ取り付けると素敵なタワーになりますが、単体ならケースつけると便利です。
ヒートシンク&ケース付きが特におすすめです。

参考サイト

m_mzr: Raspberry PI 3 and ROS lastvisit:2016/07/01

Raspberry Pi • View topic - [solved] Converting from rpi2 to rpi3? lastvisit:2016/07/01

LINEで送る
Pocket

-Linux, Raspberry Pi
-, , , , , , ,