前回、USBメモリを復活させることができるようになったのでこのUSBメモリを使用して、RaspberryPiでUbuntu 20.04 LTS
をインストールしてみようと思います。
RaspberryPi 3B
からはSoCが64bit対応していますが、よく使われているRaspbian
は32bitOSです。今回はインストールするのはUbuntu 20.04 LTS
の64bit版になります。
Ubuntuも公式でRaspberryPiに対応したリリースが行われているので、今後の選択肢としてのUbuntuの動向も気になります。以下の公式ページからもUtunbuのイメージがダウンロードでできます。ただ、今回はこちらからはダウンロードせず、最近リリースされたRaspberryPi Imager
を使用してイメージのダウンロード、メモリデバイスへの書き込みを行います。
※若干追記しました(2020.05.06)
参考
Raspberry PiがUSBデバイスから起動できるかを確認
今回使用したRaspberry PiはRaspberryPi 3B
です。
$ cat /proc/device-tree/model Raspberry Pi 3 Model B Rev 1.2
RaspberryPi 3B+
からはデフォルトでUSBデバイスからの起動できるようになっていますが、それより以前のモデルではデフォルトではそのような状態になっていません。現在の状態を以下のコマンドで調べてみます。実行結果が17:3020000a
となっていればUSBデバイスからの起動が可能です。
$ vcgencmd otp_dump | grep 17:
17:3020000a
もし出力されたものが違う値だった場合には、以下のエントリを参考に設定を変更します。自分はARM版のWindows10をインストールしたときに設定を行っていたようです。
参考
これでUSBデバイスからの起動できることが確認できました。
RaspberryPi Imager
を使用して、UbuntuのイメージをUSBメモリ書き込む
これまではOSインストールの作業は
- OSイメージをダウンロード
Etcher
などを使用してメモリデバイスへ書き込み
という手順を行っていたと思いますが、Raspberry Pi公式のダウンロード・書き込みツールが登場しました。こちらのツールはメモリデバイスのフォーマットや、手動でダウンロードしたイメージファイルの書き込みなどにも対応しているので、ほぼこれだけでいままでの作業が完了できるスグレモノです。以下のリンクから、作業を行うPCにあったものをダウンロードしてインストールします。(Windows版はダウンロードしたものがインストーラになります)
インストール後に起動すると以下のような画面になります。
まずはイメージファイルの選択になります。【CHOOSE OS】ボタンをクリックします。
すると書き込むOSのイメージの選択になります。
今回はUbuntuをインストールするので選択します。
クリックするとOSのバージョン選択画面が表示されるので
2020/04/23にリリースされたUbuntu 20.04LTS(arm64)
を選択します。armf
の方は32bit版になるのでインストールするものを確認して選んでください。
すると初期画面に戻り、OSイメージが選択された形になります。
続いては書き込み先のメモリデバイスを選択します。UIにはSD Cardと書いてありますが、USBメモリも選択できます。 【CHOOSE SD CARD】ボタンをクリックします。
メモリデバイスが表示されるので、書き込みする対象を選択します。まちがえないように注意します。
選択が終わると以下のように、全ての選択項目が表示され、【WRITE】ボタンがアクティブになります。
念の為、内容を確認してクリックします。
クリック後はダウンロードとメモリデバイスへの書き込みが行われます。
書き込みが終了すると以下のような表示がされます。
【CONTINUE】ボタンをクリックし、アプリを終了します。これでイメージ書き込み作業は終了になります。
一つのアプリで複数の事ができるのでかなり便利になりました。というかなぜ以前からなかったのだろうかと思うほどです。
NOOBS
の存在があったからなのかもしれませんし、そこまで対応OSが増えると思っていなかったのかも?
Ubuntuをヘッドレスでインストールしていく(無線ネットワーク部分は調査中)
あとはUbuntuのUSBメモリをRaspberry Piにセットして起動し、Ubuntuのインストール設定を行います。 基本的には公式ページの内容をなぞる形で設定ができます。今回はヘッドレスで行ってみたいと思います。HDMI、キーボード、マウスを接続をしてもできますが、面倒なのでヘッドレスで挑戦してみます。
参考
すでに、イメージ書き込みまでできているので、参考ページの3番目のセクションまで来ている状態からになります。
How to install Ubuntu on your Raspberry Pi | Ubuntu
有線LANであれば、そのままケーブルを接続すればよいのですが、WiFiを使用するには以下の作業が必要となります。
まず、先程作成したUSBメモリを再度PCに接続します。system-boot
というラベルのついたドライブが認識されたら
そのドライブにあるnetwork-config
を編集をしていきます。
ファイルの内容はデフォルトでは以下のようになっています。この状態は有線LANがDHCPでIPアドレスを取得する設定のみが記述されています。 ここにWiFiの設定を追記していくことになります。
network-config(デフォルト)
# This file contains a netplan-compatible configuration which cloud-init # will apply on first-boot. Please refer to the cloud-init documentation and # the netplan reference for full details: # # https://cloudinit.readthedocs.io/ # https://netplan.io/reference # # Some additional examples are commented out below version: 2 ethernets: eth0: dhcp4: true optional: true #wifis: # wlan0: # dhcp4: true # optional: true # access-points: # myhomewifi: # password: "S3kr1t" # myworkwifi: # password: "correct battery horse staple" # workssid: # auth: # key-management: eap # method: peap # identity: "me@example.com" # password: "passw0rd" # ca-certificate: /etc/my_ca.pem```
ファイル内のwifis:
以降のエントリが該当する部分です。行頭の#
に入っている部分を削除し以下に差し替えます。
<wifi network name>
… SSID<wifi password>
… パスワード
として、ご自身のものと差し替えてください。
ネットワーク名にスペースが含まれている場合は、ネットワーク名を引用符で囲む必要があります。
とのことなのですが、念の為以下の差し替えにはSSIDの部分(<wifi network name>
)に引用符(ダブルクォート
)を追加しています。
network-config(差し替え後)
# This file contains a netplan-compatible configuration which cloud-init # will apply on first-boot. Please refer to the cloud-init documentation and # the netplan reference for full details: # # https://cloudinit.readthedocs.io/ # https://netplan.io/reference # # Some additional examples are commented out below version: 2 ethernets: eth0: dhcp4: true optional: true wifis: wlan0: dhcp4: true optional: true access-points: "【SSID】": password: "【XXXXXXXXXXXXX】"
このファイルを上書き保存して、RaspberryPi 3B
に挿入し電源をオンします。
※SDカードが刺さっている場合には必ず抜きます。
自分はここ抜くのを忘れていて、普通にRaspbianが起動しているにも関わらず、Ubuntuへ接続しようとして悩んでいました。 起動優先順位はSDカードのほうが高いので刺さりっぱなしでは、Ubuntuは起動しません。
ネットワーク接続の確認
起動し時間が経ったら以下のコマンドを実行することでIPアドレスを調べられます。(結構時間が必要のようです。)
Ubuntu・rasnpbian・MacOSの場合(ちなみにWindowsの場合は> arp -a | findstr b8-27-eb
)
$ arp -na | grep -i "b8:27:eb"
しかし、なぜかコマンドを打ち込んでも起動する様子がありません…。なんで?
時間が経過してから、アクセスランプの状況をみると、定期的にアクセスランプが点滅しているようです。定期的になにか処理をしているのかなという具合でしたのでWiFIの認識処理を行っている?のかなと推測しました。
そこで、Ubuntuのバージョンの問題も考えましたが、正式対応しているLTSバージョンの18.04LTS
を使って実験してみましたが、
同様の問題が発生。USBだと駄目なのかなと思ったのですが、SDカードからの18.04
、20.04
でも同様な現象になっています。
ちなみに、Raspbian
ではSDカード、USBメモリでも問題なくネットワークに現れるので、メモリには問題はなさそうでした。
SDカードでも同じ症状となると、どうも設定ファイルに問題があるのかなという感じです。ここまでの試行錯誤で1日費やしてしまったので
とても残念ですが、有線LANのみの設定(オリジナルの)network-config
を使用して起動することにしました。
あらため、有線LANのケーブルを接続し、USBメモリを挿して起動しました。これでもarp
コマンドによる認識は行われないようでした。(自宅のネットワーク構成によって何故かarp
テーブルの更新が遅くなることがあるようです。遅れますが、ネットワーク上に存在している状態になっています。)
時間が経つとarpテーブルにも反映されて検出できます。
そこで、以下のようなコマンドを実行し、自宅のDHCP範囲のIPに連続してping
コマンドを送信し、機器が存在するかチェックすることにしました。Windows10で行う場合には必ずcmd
から実行を行います。
> for /l %i in (0,1,32) do ping -w 1 -n 1 192.168.0.%i
この出力を元にRaspberry PiのIPを特定するとSSHでのアクセスができました。 ようやくネットワーク認識ができたので、SSHで接続します。SSHクライアントから接続し
とすることでログインが可能です。初回のログイン後にパスワードの変更を求められるので変更を行います。
パスワードを変更すると強制的にログアウトさせられるので、再度新しいパスワードでログインを行います。
これでようやくUbuntuが使用可能になりました。
WiFiの設定を行う
有線LANでの接続はできましたが、まだ無線LANでの接続ができていません。まずは無線LANの設定を行います。
Ubuntuのネットワークの設定はnetplan
というサービスを経由して行ようで、その設定ファイルにSSIDとそのパスワードを記載することになります。 編集を行うのは/etc/netplan/50-cloud-init.yaml
になります。
/etc/netplan/50-cloud-init.yaml(オリジナル)
# This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-init's # network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: eth0: dhcp4: true optional: true version: 2
/etc/netplan/50-cloud-init.yaml(WiFi設定の追記後)
# This file is generated from information provided by the datasource. Changes # to it will not persist across an instance reboot. To disable cloud-init's # network configuration capabilities, write a file # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following: # network: {config: disabled} network: ethernets: eth0: dhcp4: true optional: true version: 2 # ここから下の行を追加 wifis: wlan0: optional: true dhcp4: true access-points: "【SSID】": password: "【パスワード】"
初回起動時のヘッドレスのWiFi設定と同じようなフォーマットで記載していくことになります。
設定が終わったら、以下のコマンドでファイル記述にエラーがないかを確認します。
$ sudo netplan --debug try $ sudo netplan --debug generate
エラーがないことが確認できたら反映をさせます。
$ sudo netplan --debug apply
初回起動時のWiFi設定はうまくいきませんでしたが、今回の設定は問題なく認識されました。
※本当は/etc/netplan/50-cloud-init.yaml
を直接編集するのは良くないようです。
参考
デスクトップ環境を整える
Ubuntuで公式に対応しているのはdesktopイメージではなく、Serverイメージになります。そのため、インストール後はコマンドラインしか使用できない状況です。
ただ、後からdesuktop環境のパッケージをインストールすれば基本的にはX Windowベース
に変更することができます。
公式ページには以下の3つから好きなものを選んでねという風に記載があります。
sudo apt install xubuntu-desktop
… デスクトップ環境にXfce
を使用sudo apt install lubuntu-desktop
… デスクトップ環境にLXQt
を使用(軽量)sudo apt install kubuntu-desktop
… デスクトップ環境にKDE
を使用
Raspberry Piはメモリも少ないのでlubuntu
にするのがいいかなという気もしますが、ここではあえてUbuntu MATE
のデスクトップ環境にしてみたいと思います。
とはいえ、それなら最初から公式に対応しているUbuntu MATE
をRaspberry Piにインストールしてもいいのではないかとおもいますが、まあなんとなくlubuntu
などがあっさりした見た目過ぎて物足りないかなというところでこちらの選択にしてみました。
インストールは以下の様に行います。
$ sudo apt update $ sudo apt upgrage $ sudo apt install ubuntu-mate-desktop
このインストール作業はかなり長いのですが、途中以下のような画面が表示され選択を求められます。
ディスプレイマネージャーのデフォルトをどちらにするかというものですが、gdm3
(GNOMEディスプレイマネージャーの後継)としました。
ディスプレイマネージャーは、ユーザーにログイン画面を表示します。ユーザーがユーザー名とパスワードの有効な組み合わせを正常に入力すると、セッションが開始されます。(Wikipediaより参照)
選択後、約40分ぐらいインストールにかかりますが、あとの処理では特にキー入力などは不要です。
このインストールでVNCも使用可能になるので、後はxrdpをインストールすればWindows10デフォルトのリモートデスクトップアプリ
からも接続ができるようになります。
xrdpのインストール
$ sudo apt install xrdp
リモートデスクトップアプリ
を起動し、ホスト名をubuntu.localを入力し接続を行います。
Ubuntuのインストール直後からavahi
も起動しているのでmDNS
での名前参照も可能になっています。
ユーザ名、パスワードを入力してログインするとXの画面が開きます。
MATEの画面が開きました。結構負荷が高く処理が重たい感じです(もっさりというのではなく重いという表現が正しい)。RaspberryPi3はメモリが少ないのでlubuntu
の方が良いのかも?
MATEの画面を日本語化するには、画面左上の【Menu】をクリックして【Preferences】→【Language Support】の順に選択して
設定ダイアログを開きます。
ダイアログの【Install/Remove Languages…】をくりっくして、リストから【Japanese】を選択して、【Apply】ボタンをクリックします。
するとかなり時間(10分?)が経って、インストールするために管理者ユーザ(ubuntu)のパスワードが尋ねられるので入力します。
その後、環境への適応処理が行われますが、ここでOSが落ちます…
これで操作には問題ないのですが、ここから先何度やっても成功しません。
【追記】日本語化に関してはHDMI経由でディスプレイ接続を行ったところファン冷却なしでも可能でした。毎回失敗していたのはリモートデスクトップによる処理のキャパオーバーだったのではと予想します。処理が止まるのはサイズの大きいnotoフォントのダウンロード時かな。
最初は熱暴走の可能性を疑ったのですが、ヒートシンクとファン(扇風機に近い)を取り付けたのですが、動作温度は10℃ほど下がりましたが、処理は失敗しています(3回とも)。
リモートデスクトップ経由だからなのかも?と思い、lubuntu
の環境でやり直したところ、リモートデスクトップでも日本語化はうまくいきました。
ただ、こちらの動作もかなり重たい感じなので、常用で使用する気にはならなかったのと、Firefoxの動作中にRaspberryPiは動作が固まって復帰ができない状況になりました。
lubuntuの動作
おわりに
さらっと終わってしまうかなと思ってやってみた作業でしたが、思いの外トラブルが多く時間がかかってしまいました。特にネットワークの設定にかなり手間取ってしまいましたが、これは自宅の環境によりそうな感じなので、他の方はもっとあっさり終わってしまうのかなと思います。
所感ですが、UbuntuがRaspberryPiでも使えるようになったことはアプリ資源の活用の幅がかなり広がるのではないかと思います。ただ、PC的や高度な処理用途を行う場合の話ではあるので、GPIOを使用するとかそういったことではあまり関係は薄そうです。
今回設定を行う中で強く感じたのは、Raspberry Pi 4B以降でメモリが増えたものでないと少し処理が重い印象かなと思いました。発熱もかなりのものなので、可能であればファンによる冷却をオススメします。特にX Windowの環境では尚更です。個人的には3B+までの機種はRaspbianを使用、4B以降は選択肢になりうるかなというところでしょうか。
ちなみにですが、UbuntuのCLI環境では処理が遅いなどということはありません。Raspbianもコマンドラインで使用しているというのであれば全く問題ないと思います。
今回もそうですが、それにしてもトラブルの引きが強すぎる…