OSインストールに使ったメモリカードが遅かったので改めてベンチマークをとってみた

Twitterのタイムラインをみていたら以下のような情報を見かけました。

ちょうど同じタイミングでRaspberryPi 3BにUbuntu20.04LTSをインストールしていたということもあったので、インストールという名の動作検証でOSイメージをUSBメモリやSDカードに書き込むといった作業していて、割と時間がかかるなと思ったりしていたので、手持ちのメモリのスピードを測ってみようと思いました。

CrystalDiskMark 7.0を使用しています。

ストアから

www.microsoft.com

公式サイトから

crystalmark.info

続きを読む

【RaspberryPi】Ubuntu 20.04 LTSをインストールする

前回、USBメモリを復活させることができるようになったのでこのUSBメモリを使用して、RaspberryPiでUbuntu 20.04 LTSをインストールしてみようと思います。

f:id:ueponx:20200504231433p:plain

RaspberryPi 3BからはSoCが64bit対応していますが、よく使われているRaspbianは32bitOSです。今回はインストールするのはUbuntu 20.04 LTSの64bit版になります。 Ubuntuも公式でRaspberryPiに対応したリリースが行われているので、今後の選択肢としてのUbuntuの動向も気になります。以下の公式ページからもUtunbuのイメージがダウンロードでできます。ただ、今回はこちらからはダウンロードせず、最近リリースされたRaspberryPi Imagerを使用してイメージのダウンロード、メモリデバイスへの書き込みを行います。

※若干追記しました(2020.05.06)

参考

ubuntu.com

Raspberry PiがUSBデバイスから起動できるかを確認

今回使用したRaspberry PiRaspberryPi 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をインストールしたときに設定を行っていたようです。

参考

uepon.hatenadiary.com

これでUSBデバイスからの起動できることが確認できました。

RaspberryPi Imagerを使用して、UbuntuのイメージをUSBメモリ書き込む

これまではOSインストールの作業は

  1. OSイメージをダウンロード
  2. Etcherなどを使用してメモリデバイスへ書き込み

という手順を行っていたと思いますが、Raspberry Pi公式のダウンロード・書き込みツールが登場しました。こちらのツールはメモリデバイスのフォーマットや、手動でダウンロードしたイメージファイルの書き込みなどにも対応しているので、ほぼこれだけでいままでの作業が完了できるスグレモノです。以下のリンクから、作業を行うPCにあったものをダウンロードしてインストールします。(Windows版はダウンロードしたものがインストーラになります)

www.raspberrypi.org

インストール後に起動すると以下のような画面になります。

f:id:ueponx:20200502104207p:plain

まずはイメージファイルの選択になります。【CHOOSE OS】ボタンをクリックします。

f:id:ueponx:20200502104446p:plain

すると書き込むOSのイメージの選択になります。

f:id:ueponx:20200502104607p:plain

今回はUbuntuをインストールするので選択します。

f:id:ueponx:20200502105202p:plain

クリックするとOSのバージョン選択画面が表示されるので

f:id:ueponx:20200502105719p:plain

2020/04/23にリリースされたUbuntu 20.04LTS(arm64)を選択します。armfの方は32bit版になるのでインストールするものを確認して選んでください。

f:id:ueponx:20200502105842p:plain

すると初期画面に戻り、OSイメージが選択された形になります。

f:id:ueponx:20200502110004p:plain

続いては書き込み先のメモリデバイスを選択します。UIにはSD Cardと書いてありますが、USBメモリも選択できます。 【CHOOSE SD CARD】ボタンをクリックします。

f:id:ueponx:20200502110332p:plain

メモリデバイスが表示されるので、書き込みする対象を選択します。まちがえないように注意します。

f:id:ueponx:20200502110613p:plain

選択が終わると以下のように、全ての選択項目が表示され、【WRITE】ボタンがアクティブになります。

f:id:ueponx:20200502110703p:plain

念の為、内容を確認してクリックします。

f:id:ueponx:20200502111025p:plain

クリック後はダウンロードとメモリデバイスへの書き込みが行われます。

f:id:ueponx:20200502111156p:plain

書き込みが終了すると以下のような表示がされます。

f:id:ueponx:20200502111700p:plain

【CONTINUE】ボタンをクリックし、アプリを終了します。これでイメージ書き込み作業は終了になります。 一つのアプリで複数の事ができるのでかなり便利になりました。というかなぜ以前からなかったのだろうかと思うほどです。 NOOBSの存在があったからなのかもしれませんし、そこまで対応OSが増えると思っていなかったのかも?

Ubuntuをヘッドレスでインストールしていく(無線ネットワーク部分は調査中)

あとはUbuntuUSBメモリRaspberry Piにセットして起動し、Ubuntuのインストール設定を行います。 基本的には公式ページの内容をなぞる形で設定ができます。今回はヘッドレスで行ってみたいと思います。HDMI、キーボード、マウスを接続をしてもできますが、面倒なのでヘッドレスで挑戦してみます。

参考

ubuntu.com

すでに、イメージ書き込みまでできているので、参考ページの3番目のセクションまで来ている状態からになります。

How to install Ubuntu on your Raspberry Pi | Ubuntu

有線LANであれば、そのままケーブルを接続すればよいのですが、WiFiを使用するには以下の作業が必要となります。 まず、先程作成したUSBメモリを再度PCに接続します。system-bootというラベルのついたドライブが認識されたら そのドライブにあるnetwork-configを編集をしていきます。

f:id:ueponx:20200502114942p:plain

ファイルの内容はデフォルトでは以下のようになっています。この状態は有線LANがDHCPIPアドレスを取得する設定のみが記述されています。 ここに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.0420.04でも同様な現象になっています。 ちなみに、RaspbianではSDカード、USBメモリでも問題なくネットワークに現れるので、メモリには問題はなさそうでした。

SDカードでも同じ症状となると、どうも設定ファイルに問題があるのかなという感じです。ここまでの試行錯誤で1日費やしてしまったので とても残念ですが、有線LANのみの設定(オリジナルの)network-configを使用して起動することにしました。

あらため、有線LANのケーブルを接続し、USBメモリを挿して起動しました。これでもarpコマンドによる認識は行われないようでした。(自宅のネットワーク構成によって何故かarpテーブルの更新が遅くなることがあるようです。遅れますが、ネットワーク上に存在している状態になっています。)

時間が経つとarpテーブルにも反映されて検出できます。

f:id:ueponx:20200504224422p:plain

そこで、以下のようなコマンドを実行し、自宅の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クライアントから接続し

  • 初期ユーザID … ubuntu
  • 初期パスワード … ubuntu

とすることでログインが可能です。初回のログイン後にパスワードの変更を求められるので変更を行います。

f:id:ueponx:20200504225058p:plain

パスワードを変更すると強制的にログアウトさせられるので、再度新しいパスワードでログインを行います。

f:id:ueponx:20200504224833p:plain

これでようやく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.yamlWiFi設定の追記後)

# 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設定はうまくいきませんでしたが、今回の設定は問題なく認識されました。

f:id:ueponx:20200504231129p:plain

※本当は/etc/netplan/50-cloud-init.yamlを直接編集するのは良くないようです。

参考

qiita.com

デスクトップ環境を整える

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 MATERaspberry Piにインストールしてもいいのではないかとおもいますが、まあなんとなくlubuntuなどがあっさりした見た目過ぎて物足りないかなというところでこちらの選択にしてみました。

インストールは以下の様に行います。

$ sudo apt update
$ sudo apt upgrage
$ sudo apt install ubuntu-mate-desktop

このインストール作業はかなり長いのですが、途中以下のような画面が表示され選択を求められます。 ディスプレイマネージャーのデフォルトをどちらにするかというものですが、gdm3GNOMEディスプレイマネージャーの後継)としました。

ディスプレイマネージャーは、ユーザーにログイン画面を表示します。ユーザーがユーザー名とパスワードの有効な組み合わせを正常に入力すると、セッションが開始されます。(Wikipediaより参照)

f:id:ueponx:20200504142133p:plain

選択後、約40分ぐらいインストールにかかりますが、あとの処理では特にキー入力などは不要です。

このインストールでVNCも使用可能になるので、後はxrdpをインストールすればWindows10デフォルトのリモートデスクトップアプリからも接続ができるようになります。

xrdpのインストール

$ sudo apt install xrdp

リモートデスクトップアプリを起動し、ホスト名をubuntu.localを入力し接続を行います。 Ubuntuのインストール直後からavahiも起動しているのでmDNSでの名前参照も可能になっています。

f:id:ueponx:20200504220937p:plain

ユーザ名、パスワードを入力してログインするとXの画面が開きます。

f:id:ueponx:20200504220946p:plain

MATEの画面が開きました。結構負荷が高く処理が重たい感じです(もっさりというのではなく重いという表現が正しい)。RaspberryPi3はメモリが少ないのでlubuntuの方が良いのかも?

f:id:ueponx:20200504221644p:plain

MATEの画面を日本語化するには、画面左上の【Menu】をクリックして【Preferences】→【Language Support】の順に選択して

f:id:ueponx:20200504221652p:plain

設定ダイアログを開きます。

f:id:ueponx:20200504221700p:plain

ダイアログの【Install/Remove Languages…】をくりっくして、リストから【Japanese】を選択して、【Apply】ボタンをクリックします。

f:id:ueponx:20200504222615p:plain

するとかなり時間(10分?)が経って、インストールするために管理者ユーザ(ubuntu)のパスワードが尋ねられるので入力します。

f:id:ueponx:20200505113842p:plain

その後、環境への適応処理が行われますが、ここでOSが落ちます…

f:id:ueponx:20200505113909p:plain

これで操作には問題ないのですが、ここから先何度やっても成功しません。

【追記】日本語化に関してはHDMI経由でディスプレイ接続を行ったところファン冷却なしでも可能でした。毎回失敗していたのはリモートデスクトップによる処理のキャパオーバーだったのではと予想します。処理が止まるのはサイズの大きいnotoフォントのダウンロード時かな。

最初は熱暴走の可能性を疑ったのですが、ヒートシンクとファン(扇風機に近い)を取り付けたのですが、動作温度は10℃ほど下がりましたが、処理は失敗しています(3回とも)。

リモートデスクトップ経由だからなのかも?と思い、lubuntuの環境でやり直したところ、リモートデスクトップでも日本語化はうまくいきました。 ただ、こちらの動作もかなり重たい感じなので、常用で使用する気にはならなかったのと、Firefoxの動作中にRaspberryPiは動作が固まって復帰ができない状況になりました。

lubuntuの動作

f:id:ueponx:20200505210642p:plain

おわりに

さらっと終わってしまうかなと思ってやってみた作業でしたが、思いの外トラブルが多く時間がかかってしまいました。特にネットワークの設定にかなり手間取ってしまいましたが、これは自宅の環境によりそうな感じなので、他の方はもっとあっさり終わってしまうのかなと思います。

所感ですが、UbuntuがRaspberryPiでも使えるようになったことはアプリ資源の活用の幅がかなり広がるのではないかと思います。ただ、PC的や高度な処理用途を行う場合の話ではあるので、GPIOを使用するとかそういったことではあまり関係は薄そうです。

今回設定を行う中で強く感じたのは、Raspberry Pi 4B以降でメモリが増えたものでないと少し処理が重い印象かなと思いました。発熱もかなりのものなので、可能であればファンによる冷却をオススメします。特にX Windowの環境では尚更です。個人的には3B+までの機種はRaspbianを使用、4B以降は選択肢になりうるかなというところでしょうか。

ちなみにですが、UbuntuCLI環境では処理が遅いなどということはありません。Raspbianもコマンドラインで使用しているというのであれば全く問題ないと思います。

今回もそうですが、それにしてもトラブルの引きが強すぎる…

OSのインストールをしすぎてWindowsからアクセスできなくなったUSBメモリを復活させた話

追記しました(2020/05/20)

原因はパーティションとかフォーマットの問題ではなかったので、追記しました。 追記はこちらとなります


個人的には新しいOSが出てくる古いノートPCやRaspberryPiでインストールしたり色々遊ぶのが好きなのですが、いろいろやっていてUSBメモリにアクセスできなくなる状況が発生しました。正直やりすぎたかなと思いました。

ただ、その後WindowsPCにUSBメモリを挿入しても認識されないし、ディスク管理ツールからも見ることができないのでどうにかならないかなと思ったのでLinuxベースのOSから復帰を試みました。LinuxベースといってもRaspbianなのですが…。

ただ、その方法で過去の自分の経験でやっていることでいろいろ混乱があったのでメモを残しておこうと思います。

今回の解決手段を早く知りたい方は本エントリー下の方にあるアプローチを変えて復帰を御覧ください。

チェック~作業

USBをPCに挿してもディスク管理ツールでも表示されません。

f:id:ueponx:20200314133013p:plain

もちろん、diskpartコマンドからも認識されていません。

f:id:ueponx:20200314133029p:plain

正常なUSBメモリであれば以下のように表示が行われています(使用したものの容量は小さいものを使っています)。

f:id:ueponx:20200314133043p:plain

続きを読む

iPadでタッチ操作した部分をみえるようにしたい(外部モニタ出力・録画・キャプチャ)

知っている人は割といそうなのですが、自分の仕事で使用しそうな感じだったのでメモ。

やりたいことは、iPadで操作部分にカーソルを表示させたいということになります。iPadは操作する動画を撮ろうとすると、どこのボタンをタッチしているかが画面だけではわかりません。そのままでは、再撮(操作している様子を別カメラで撮影する)をする必要があります。

再撮も指で触っている様子がわかることもあり、臨場感があっていいのですが2つほど弱点があって、

  1. 指で画面を隠してしまい全体像が見えなくなってしまうことがある
  2. 撮影をする場所のライティングが難しくなる

が問題としてあります。ただ、これはマウスの使用により解決に向かいそうです。 以前のiOSではマウスが使用できませんでした。ただ、現在ではマウスを使用可能になっています。 そこで、マウスカーソルを画面上に表示させ操作動画(外部モニタ表示・キャプチャも含む)の作成ができるようにしたいと思います。

大したネタではないですけどね。

iPadBluetoothマウスを使用する

設定するのはBluetoothマウスになります。

今回使用したのはAmazonで購入した以下のものになります。

このマウスわりと良くて2.4GHzでもBluetoothでも動作するデュアル仕様のマウスになります。2.4GHzのドングルもマウスに埋め込める様になっています。値段もお安い感じで、厚さも薄いので持ち運びも便利です。あと、USBでの充電が可能なので電池の必要もありません。個人的にイケてないのは、表面がラバーっぽい質感というところでしょうか。この手のラバー素材は時間が立つとニチャニチャしてしまう可能性があるが微妙かなと思います。

また、iOSでマウスが使用できるようになったのはバージョンがiOS13以降です。今回使用したiPadiPad mini (第5世代)iOSバージョン13.3.1でした。

続きを読む

【RaspberryPi】Node-REDでTwitterを使用する

なかなかやることが見つけられないということもあり、久しぶりにNode-REDを触ろうかなと思いました。 そこで、まだやっていないことをリストアップしてみたところTwitter関連はまだやっていなかったので、 いいタイミングなのでチャレンジします!

また、Node-REDでツイート収集ができればBotやその他のWeb APIとの連携も容易になると思います。

続きを読む
/* -----codeの行番号----- */