BeagleBoneBlack 再発掘

持ち運びが容易なテスト環境

NUCでも大きいので更に小さなサイズで何かないか。
Linuxが動けば良いのでスペックは低くて良い。(CLIでOK)

最初はVMひとつ立てればいいんじゃないかと考えていたけど、物理的な場所の移動が難しいのがちょっと問題。

ということで、最適なのって「Raspberry Pi なのでは!?」と。
そして、更に「いつだったか、BeagleBoneBlack とかっての1台買ったよな!?」になったので探した。

ただし、Raspberry Pi4B を注文した後で…
どこに仕舞ったか忘れ捜索を諦めて発注した後、割とすぐに見つかるという、あるある…

まぁ、Raspberry Pi ってのに触れるのも悪くないとキャンセルはせずにそのまま到着を待とう。

しかし、2万円もあればいろいろとフルセットで買えるんだから安くなったよなぁ~

さて、発掘したBBBをとりあえず使えるようにしてみよう。

Ubuntu 18.04 のインストール

2GBのmicroSDが挿さってたので、電源挿して起動してみる。

ケースに入っていたとはいえ、数年放置されていたわりにはあっさり何事もなく起動してきて、しかもUbuntu16.04が立ち上がってきた。

が、さすがに古い。
現状、BBBで動く最新のバージョンは18.04のようなので、そっちに書き換える。

イメージの取得

まずはOSのイメージを取得しよう。操作はWindows機からでOK。

取得先は下記から。

BeagleBoardUbuntu - eLinux.org

次に「4.3 raw microSD img」の「4.3.2 All BeagleBone Variants and PocketBeagle」に飛ぶ。

次に下記をクリックしてイメージデータをダウンロード。
(2020年3月と古いのはまぁしょうがないのかなぁ・・・)

ダウンロードが完了したら7zip等の圧縮解凍ソフトで展開する。

bone-ubuntu-18.04.4-console-armhf-2020-03-12-2gb

というフォルダができ、その中にimgという拡張子のファイルがひとつできあがる。

microSDカードに書き込む

imgファイルを何らかの手段でmicroSDに書き込むわけだけど、個人的にはESXiのカスタムイメージを作るときにもお世話になっている Rufus というツールを使った。

Rufus - 起動可能なUSBドライブを簡単に作成できます
Rufus: Create bootable USB drives the easy way

「デバイス」欄でちゃんとmicroSDが選択されているかを確認し、
「選択」で先ほどダウンロード、解凍したイメージを指定し、
「スタート」を押せばイメージデータの書込が始まる。

当然、microSDのデータは全て綺麗さっぱり消えるのでデバイスの選択や実行にはご注意を。

そして、こんな感じで進捗状況が確認出来る。

完了したらこんな感じ。

BBBの電源を入れる

イメージの書込が完了したらmicroSDをBBBに取り付け、電源を入れる。
その際、画像右下にあるボタンを押しながら起動する。
このボタンを押さないと、オンボードのeMMCから起動してしまうため。

そうそう、初期設定だけはモニタとキーボードを繋げておかないとやりづらいので予め繋げておこう。

初期状態ではdhcpでIPアドレスが割り振られるようになっていて、起動すると画面上にそのIPアドレスが表示されるので、少なくともモニタ接続はしておいた方が良い。

キーボードはなくても、IPアドレスさえわかればSSHで接続出来るので。

最低限の初期設定

管理者パスワードの変更

初期値は ID:ubuntu PW:temppwd となっている。
完全ローカルでのテスト用とはいっても、デフォルトのまま使うのは抵抗があるので

$ passwd ubuntu

でパスワードを変更。

タイムゾーンの設定

UTC が標準で設定されているので、それを Asia/Tokyo に変更。

$ sudo timedatectl set-timezone Asia/Tokyo

viの設定変更

この後、viで設定ファイルの編集等を行う際、矢印キーでAやB、C、Dというキーが入力されてしまうというケースがある。

これはそれぞれのユーザーディレクトリに .vimrc というファイルを下記内容で作っておけばOK。

set nocompatible

IPアドレスを固定

環境によってIPアドレスは適宜変えてしまうんだけれども、基本的には固定しておいた方が、こうしたデバイスの性質的に使いやすいでしょう。

$ sudo vi 50-netcfg.yaml
network:
   version: 2
   ethernets:
      eth0:
         dhcp4: false
         addresses: [192.168.x.y/24]
         gateway4: 192.168.x.1
         nameservers:
            addresses: [192.168.x.z]
$ sudo netplan apply

作成するファイル名の先頭の数字は優先順位になっていて、数値が大きい方が後から読み込まれて優先される。
また、ファイルの内容として addresses となっているところは当然複数指定ができる項目だけど、ひとつしか設定しない場合でも[]で囲む必要あり。
([]省略してたら netplan apply を実行したときにエラーが吐かれる)

microSDの内容をeMMCに映してeMMCから起動させる

どっちがいいのか迷ったけど、出所不明の2GBのmicroSDなんて信頼性の欠片もない。
eMMCなKingstoneのNANDの方が圧倒的に安心なので、microSDからeMMCにフラッシュすることに。

BBBはmicroSDがmmcblk0に接続され、eMMCがmmcblk1につながっている。

念の為、microSDから起動した状態で df コマンドを見る。

$ df

Filesystem     1K-blocks    Used Available Use% Mounted on
udev              219260       0    219260   0% /dev
tmpfs              49500    4292     45208   9% /run
/dev/mmcblk0p1   1777428 1191764    477328  72% /
tmpfs             247496       0    247496   0% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs             247496       0    247496   0% /sys/fs/cgroup
tmpfs              49496       0     49496   0% /run/user/1000

確かにルート(/)がマウントされているパーティションが /dev/mmcblk0p1なので
microSDが /dev/mmcblk0

さらに念の為、/dev/内を覗いてみたり、fdiskなんかもしてみる。

$ ls -al /dev/mmcblk*

brw-rw---- 1 root disk 179,  0 May  3 13:21 /dev/mmcblk0
brw-rw---- 1 root disk 179,  1 May  3 13:21 /dev/mmcblk0p1
brw-rw---- 1 root disk 179,  8 May  3 13:23 /dev/mmcblk1
brw-rw---- 1 root disk 179, 16 May  3 13:17 /dev/mmcblk1boot0
brw-rw---- 1 root disk 179, 24 May  3 13:17 /dev/mmcblk1boot1
brw-rw---- 1 root disk 179,  9 May  3 13:23 /dev/mmcblk1p1
crw------- 1 root root 242,  0 May  3 13:17 /dev/mmcblk1rpmb
$ sudo fdisk /dev/mmcblk0


Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/mmcblk0: 1.9 GiB, 2032664576 bytes, 3970048 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
Disklabel type: dos
Disk identifier: 0xa27544e0

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk0p1 *     8192 3686399 3678208  1.8G 83 Linux

Command (m for help): q
$ sudo fdisk /dev/mmcblk1


Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p
Disk /dev/mmcblk1: 3.6 GiB, 3867148288 bytes, 7553024 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
Disklabel type: dos
Disk identifier: 0xa27544e0

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk1p1 *     8192 3686399 3678208  1.8G 83 Linux

Command (m for help): q

microSDが /dev/emmcblk0、eMMCが /dev/emmcblk1 ということを確認。

次のコマンドで、microSDの内容をeMMCにコピーするけど、デバイス名逆にしちゃったりすると、microSDの中身綺麗さっぱり消えたりするので実行には十分な確認を。

$ sudo dd if=/dev/mmcblk0 of=/dev/mmcblk1

これでしばらく待っていると、コピーが完了します。(だいぶ長かった記憶が・・・)

eMMC側のパーティションを拡張して容量を全て使えるようにする

fdiskでパーティションを確認。

$ sudo fdisk /dev/mmcblk1


Welcome to fdisk (util-linux 2.31.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p

Disk /dev/mmcblk1: 3.6 GiB, 3867148288 bytes, 7553024 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
Disklabel type: dos
Disk identifier: 0xa27544e0

Device         Boot   Start     End Sectors  Size Id Type
/dev/mmcblk1p1 *       8192 3686399 3678208  1.8G 83 Linux

Command (m for help):

ディスクとしては容量3.6GiBとして認識されていても、mmcblk1p1というパーティションで1.8GBしか確保されていない状態。

いったん、このパーティションを削除して全容量確保し直す。
で、この時、パーティションの開始セクタを覚えておくorメモしておくこと。

Command (m for help): d

Selected partition 1
Partition 1 has been deleted.

Command (m for help): p

Disk /dev/mmcblk1: 3.6 GiB, 3867148288 bytes, 7553024 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
Disklabel type: dos
Disk identifier: 0xa27544e0

Command (m for help): n

Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p

Partition number (1-4, default 1): 1
First sector (2048-7553023, default 2048): 8192

Last sector, +sectors or +size{K,M,G,T,P} (8192-7553023, default 7553023):
7553023

Created a new partition 1 of type 'Linux' and of size 3.6 GiB.
Partition #1 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: y


The signature will be removed by a write command.

Command (m for help): p
Disk /dev/mmcblk1: 3.6 GiB, 3867148288 bytes, 7553024 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
Disklabel type: dos
Disk identifier: 0xa27544e0

Device         Boot Start     End Sectors  Size Id Type
/dev/mmcblk1p1       8192 7553023 7544832  3.6G 83 Linux

Filesystem/RAID signature on partition 1 will be wiped.

Command (m for help):

問題なさそうなので w で書き込んで終了し、再起動。

$ reboot

起動してきたら下記コマンドを実行すると容量が増える。

$ sudo resize2fs /dev/mmcblk1p1

dfで確認。

$ df

Filesystem     1K-blocks    Used Available Use% Mounted on
udev              219260       0    219260   0% /dev
tmpfs              49500    4304     45196   9% /run
/dev/mmcblk1p1   3683788 1205248   2297956  35% /
tmpfs             247496       0    247496   0% /dev/shm
tmpfs               5120       4      5116   1% /run/lock
tmpfs             247496       0    247496   0% /sys/fs/cgroup
tmpfs              49496       0     49496   0% /run/user/1000

最初、未定義の部分を二つ目のパーティションとして作成して resize2fs やってたけど、どうにも上手くいかず。
全体を定義し直して上手くいった。

2021年5月現在では・・・

BeagleBoneBlack よりも RaspberryPi の方が圧倒的ですね。

なので、敢えてこれからBBBで、ということはほとんどないでしょうけど、手元にある以上、使えるシーンでは使ってみようかと、備忘録としてここに残しておきます。

この記事にコメントしてみる