PINE A64+ 雑感と初期設定の備忘録

Gadget
Photo by hyt.

今日は2018年1月3日です.まずは,ご挨拶から.

あけましておめでとうございます.2018年も本 blog をよろしくお願いいたします.

さて,正月3日ですが,本ブログの管理人は新しく手に入れたオモチャ PINE A64+ 2G で遊んでいます.え,家族サービスは?って言われそうですけど,私以外の家族は遊びに行ってるんですよね……私だけ居残りです.

PINE A64+ 2Gって何?

Raspberry pi と同様の SBP(Single Board Computer) です.

もともとは Kickstarter で世界初の 64bit SBP の触れ込みで資金募集され(結果的には世界初には結局なれなかったんじゃないかと思いますが),その後事業化された製品です.

Just a moment...

製品サイトは以下の通りで,今だと ROCK64 とかいろいろ出ています.

PINE64 Community
PINE64 is a large, vibrant and diverse community and creates software, documentation and projects.

製品の特徴は,Raspberry pi3 との比較で(あくまで私が興味のあった部分),

  • 若干高速である.
  • 若干安い(ただし日本だと送料等の問題からそうでもない)
  • Gigabit Ethernet に対応してる

でしょうか.今回はかなりお安く,某オークションサイトでケース込みで3000円程度で手に入りました.ケースは真っ黒な VESA マウント穴が付いたもので,ネジ等は付属していませんでした.

Photo by hyt.

そのままだと基盤が泳ぐので,適当なネジ(M2.6だとジャストサイズです)とボルトで固定しましたが,そもそもこのケース国内で取り扱いがありません.基盤については,国内だと,秋月電子通商さんが販売しているみたいですが,ケースはない.Amazon には他のケースはあります(しかしとても高価)が,このケースは見当たりません.元の所有者の方はどうやってこのケースを手に入れたのかちょっと疑問です.

届いてまず感じたのは,

大きいなぁ〜

です.Raspberry pi を想像していたのですが,一回り以上大きい.比較写真は,

Pine64: The Un-Review
Even before the announcement and introduction of the Raspberry Pi 3, word of a few very powerful single board ARM Linux ...

がわかりやすい.Raspberry pi と Raspberry pi zero を合わせたより大きいです.

あと,今回購入したものには無線機能はありません(冒頭写真の右側の端子部分に基盤が追加されるみたい)ので,技適の問題はありません.

さて,遊ぶためには電源の確保と何かの OS を microSD にインストールしないといけません.今回,電源として使ったのは,Anker の24W 2-Port USB Charger

Anker | Charge Fast, Live More
Discover Anker and shop chargers, batteries, hubs, docks, portable power stations, conferencing gear, and more.

で,microSD は ELECOM のお安い 8G のものを使いました.

初期イメージの選択

PINE A64+,Android, openSUSE, Armbian など,結構色々な OS に対応していますが,元サイト

PINE A64 Software Releases

の説明を見ると,今のところ Ubuntu Xenial じゃないといろいろ問題がありそうな感じです(個人的には RedHat 系か gentoo が好きなんですが……).安定したものを使いたいですし,私の場合,SBP にデスクトップは期待していないということもあり,今回は素直に Xenial Base Image をインストールすることにしました(Xenial Minimal Image でもよかったのですが,公式は Base Image の方みたいです).

と言っても,インストーラーは共通で,Ether を改変した

https://github.com/pine64dev/PINE64-Installer/blob/master/README.md

を使って導入します.導入手順は以下の通り.

microSD を PC に入れ,インストーラーを起動します.

Photo by hyt.

Choose an os を選んで,ボードとして PINE A64+ を選んで Xenial Base Image を選び,OKを押します.

Photo by hyt.

あとは,Flush! を選ぶとダウンロードから書き込み,ベリファイまで完全に自動です.

Photo by hyt.

書き込みが完了すると,初期IDとパスワードがそれぞれ ubuntu, ubuntu だというメッセージまで出してくれます.ビックリするほど手軽で簡単です.

Photo by hyt.

しかし,簡単なのはここまで.何にも入ってない Base Image ですので,これ以後はコマンドラインから色々設定していく必要があります.

Xenial Base Image の初回起動

PINE A64+ に miniSD カードを入れ,起動します.Raspberry pi3 と違い,microSD の挿入部分はカチッと音がして,少し押し込まないと microSD が外れない仕様のものです.

特にスイッチなどはなく,microUSB 端子に電源を接続するとすぐに起動します.先ほど見た通り,初期 ID とパスワードはそれぞれ,

  • ID: ubuntu
  • PASSWORD: ubuntu

です.キーボードやモニタ(HDMI)を繋ぐのは最初だけで,あとは面倒なので別の PC から SSH 経由で設定することにしました.そのために,まずは IP アドレスを確認します.

$ ifconfig
eth0      Link encap:Ethernet  HWaddr **:**:**:**:**:**
          inet addr:192.168.0.***  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::****:****:****:****/64 Scope:Link
          inet6 addr: fd00::****:****:****:****/64 Scope:Global
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5363 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1439 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6506579 (6.5 MB)  TX bytes:130732 (130.7 KB)
          Interrupt:114

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:160 errors:0 dropped:0 overruns:0 frame:0
          TX packets:160 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:11840 (11.8 KB)  TX bytes:11840 (11.8 KB)

sshd ははじめから起動しているので,アドレスさえ分かれば十分です.実際に ssh でログインして,初期カーネルを調べる手順は以下の通りです.

$ ssh -l ubuntu 192.168.0.***
$ uname -a
Linux pine64 3.10.104-2-pine64-longsleep #113 SMP PREEMPT Thu Dec 15 21:46:07 CET 2016 aarch64 aarch64 aarch64 GNU/Linux

3.10 の何やら longsleep に対応したカーネルがインストールされていることがわかります.

u-boot と kernel のアップデートとファイルシステムのリサイズ

さて,ここまで来れば,最低限の Linux マシンとして使えるのですが,このままだとなぜか再起動に対応してくれません(電源を入れ直すと起動する).

この問題は,u-boot と kernel を専用のスクリプト(はじめから /usr/local/sbin に入ってるし,パスも通っている)でアップデートすると解消します.

$ sudo pine64_update_uboot.sh
[sudo] password for ubuntu:
Checking for update ...
Downloading U-Boot image ...
######################################################################## 100.0%
Downloading signature ...
######################################################################## 100.0%
Downloading public key ...
######################################################################## 100.0%
Verifying signature ...
[GNUPG:] SIG_ID HnhH+IP3x5sSYWysk+FxKR9uvzw 2017-03-11 1489251094
[GNUPG:] GOODSIG 7C03F26B090EF0DB Simon Eisenmann <[email protected]>
[GNUPG:] VALIDSIG 6FC96963C3D26AA8800974A17C03F26B090EF0DB 2017-03-11 1489251094 0 4 0 1 2 00 9DDB6CAD455D63112CAD26D8CA499C410B3C3354
Processing ...
Flashing boot0 ...
64+0 records in
64+0 records out
65536 bytes (66 kB, 64 KiB) copied, 0.178669 s, 367 kB/s
Flashing U-Boot ...
1384+0 records in
1384+0 records out
1417216 bytes (1.4 MB, 1.4 MiB) copied, 4.24756 s, 334 kB/s
Done - you should reboot now.
$
$ sudo pine64_update_kernel.sh
Checking for update ...
Downloading Linux Kernel ...
######################################################################## 100.0%
Downloading signature ...
######################################################################## 100.0%
Downloading public key ...
######################################################################## 100.0%
Verifying signature ...
[GNUPG:] SIG_ID uobXqzSdyGQtD48Cgolff09/5Lg 2017-03-11 1489251421
[GNUPG:] GOODSIG 7C03F26B090EF0DB Simon Eisenmann <[email protected]>
[GNUPG:] VALIDSIG 6FC96963C3D26AA8800974A17C03F26B090EF0DB 2017-03-11 1489251421 0 4 0 1 2 00 9DDB6CAD455D63112CAD26D8CA499C410B3C3354
Extracting ...
Fixing up ...
Running postinst for 3.10.105-0-pine64-longsleep ...
Done - you should reboot now.
$
$ sudo reboot

結果は以下の通りです.

$ uname -a
Linux pine64 3.10.105-0-pine64-longsleep #3 SMP PREEMPT Sat Mar 11 16:05:53 CET 2017 aarch64 aarch64 aarch64 GNU/Linux

3.10.104-2 ⇒ 3.10.105-0 にアップデートされていることが分かります.

次にファイルシステムをリサイズします.初期状態だと 8G の miniSD カード全体が使われないためです.このための専用のコマンドも用意されています.実行の様子は以下の通りです.

$ df -m
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/mmcblk0p2      3649  1286      2164  38% /
devtmpfs             962     0       962   0% /dev
tmpfs                995     0       995   0% /dev/shm
tmpfs                995    17       978   2% /run
tmpfs                  5     1         5   1% /run/lock
tmpfs                995     0       995   0% /sys/fs/cgroup
/dev/mmcblk0p1        50    13        38  26% /boot
$
$ sudo resize_rootfs.sh
[sudo] password for ubuntu:
+ DEVICE=/dev/mmcblk0
+ PART=2
+ resize
+ fdisk -l /dev/mmcblk0
+ grep /dev/mmcblk0p2
+ awk {print $2}
+ start=143360
+ echo 143360
143360
+ set +e
+ fdisk /dev/mmcblk0

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


Command (m for help): Disk /dev/mmcblk0: 7.4 GiB, 7956594688 bytes, 15540224 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: 0x62b90133

Device         Boot  Start     End Sectors  Size Id Type
/dev/mmcblk0p1       40960  143359  102400   50M  c W95 FAT32 (LBA)
/dev/mmcblk0p2      143360 7679999 7536640  3.6G 83 Linux

Command (m for help): Partition number (1,2, default 2):
Partition 2 has been deleted.

Command (m for help): Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): Partition number (2-4, default 2): First sector (2048-15540223, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (143360-15540223, default 15540223):
Created a new partition 2 of type 'Linux' and of size 7.4 GiB.

Command (m for help): The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Device or resource busy

The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).

+ set -e
+ partx -u /dev/mmcblk0
+ resize2fs /dev/mmcblk0p2
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 1924608 (4k) blocks long.

+ echo Done!
Done!
$
$ df -m
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/mmcblk0p2      7459  1286      5821  19% /
devtmpfs             962     0       962   0% /dev
tmpfs                995     0       995   0% /dev/shm
tmpfs                995     9       986   1% /run
tmpfs                  5     1         5   1% /run/lock
tmpfs                995     0       995   0% /sys/fs/cgroup
/dev/mmcblk0p1        50    13        38  26% /boot

エラーが出ているように見えますが,df -m の結果を見るときちんと拡張できていることが分かります.カーネルのアップデート等を行いましたので,ここまででいったん再起動をかけます.

パッケージのアップデート

次はシステムに導入されているパッケージのアップデートを行います.ubuntu なので,apt-get update; apt-get upgrade するだけです.

$ sudo apt-get update
[sudo] password for ubuntu:
Hit:1 http://ports.ubuntu.com xenial InRelease
Hit:2 http://ppa.launchpad.net/longsleep/ubuntu-pine64-flavour-makers/ubuntu xenial InRelease
...
Reading package lists... Done
$
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
 apt apt-utils base-files bsdutils console-setup console-setup-linux
 coreutils dbus distro-info-data dpkg gcc-5-base ifupdown init
 init-system-helpers initramfs-tools initramfs-tools-bin initramfs-tools-core
 iproute2 isc-dhcp-client isc-dhcp-common keyboard-configuration klibc-utils
 kmod krb5-locales less libapparmor1 libapt-inst2.0 libapt-pkg5.0 libblkid1
 libcryptsetup4 libdbus-1-3 libdns-export162 libfdisk1 libglib2.0-0
 libglib2.0-data libgnutls-openssl27 libgnutls30 libgomp1 libgssapi-krb5-2
 libisc-export160 libk5crypto3 libklibc libkmod2 libkrb5-3 libkrb5support0
 libmount1 libprocps4 libsmartcols1 libstdc++6 libsystemd0 libudev1 libuuid1
 logrotate makedev mount openssh-client openssh-server openssh-sftp-server
 procps python3-software-properties resolvconf software-properties-common
 sudo sunxi-disp-tool systemd systemd-sysv udev unattended-upgrades
 util-linux zlib1g
70 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 19.1 MB of archives.
After this operation, 2807 kB disk space will be freed.
Do you want to continue? [Y/n]
Get:1 http://ports.ubuntu.com xenial-updates/main arm64 base-files arm64 9.4ubuntu4.5 [67.2 kB]
....
$
$ sudo reboot

かなり大量にアップデートされます.途中でコンソールで使う言語について聞かれますが,その選択肢の回答は以下の様にしました(これでホントに良いかどうかは分からない).

  • Encoding to use on the console ⇒ UTF-8
  • Character set to support ⇒ Latin1 and Latin 5

設定をやり直したい場合は,

$ sudo dpkg-reconfigure console-setup

とすれば可能です.

tzdata/locale の再設定

さて,この段階だと,言語やロケールの設定が en_US.UTF-8 です.ssh 経由で設定していることから普通に日本語が表示できますので,タイムゾーンとか LANG とかを日本語に設定することにします.まずはタイムゾーンからですが,

$ dpkg-reconfigure tzdata

で, Asia/Tokyo を選択すれば良いだけです.

次にロケールの設定ですが,

$ sudo dpkg-reconfigure locales

とやっても良いのですが,今回は地道にひとつひとつ確認しながら行いました.詳細は以下の通りです.

まず,現在の locale の確認を行います:

$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

次に,システムに登録されているロケールの確認をします:

$ locale -a
C
C.UTF-8
en_US.utf8
POSIX

また,Ubuntu のロケールとして,ja を含むものがどれだけあるのかを確認します:

$ grep ja /usr/share/i18n/SUPPORTED
ja_JP.UTF-8 UTF-8
ja_JP.EUC-JP EUC-JP

システムのロケールに ja_JP.UTF-8 を登録して:

$ sudo locale-gen ja_JP.UTF-8
Generating locales (this might take a while)...
  ja_JP.UTF-8... done
Generation complete.

追加できていることを確認:

$ locale -a
C
C.UTF-8
en_US.utf8
ja_JP.utf8
POSIX

最後に OS 起動時の locale を設定します:

$ sudo update-locale LANG=ja_JP.UTF-8
$ cat /etc/default/locale
#  File generated by update-locale
LANG=ja_JP.UTF-8

ここまででロケールの設定は完了です.反映させるため,ここまででまた再起動します.

ユーザーの追加と削除

標準ユーザーの ubuntu のままだとなんとなくセキュリティ的に心配ですし,慣れてなくて使いにくいので,作業用のユーザーを別に作り,ubuntu を削除します.もちろん新たに作る作業用のユーザーは sudo ができなければなりません.今回は,作業用のユーザーとして hyt を作ることにします.

$ sudo adduser hyt
[sudo] password for ubuntu:
Adding user `hyt' ...
Adding new group `hyt' (1001) ...
Adding new user `hyt' (1001) with group `hyt' ...
Creating home directory `/home/hyt' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for hyt
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]
$
$ sudo gpasswd -a hyt sudo
Adding user hyt to group sudo

ここまでで一旦ログアウトし,ユーザー ubuntu を消します.なお,userdel のオプション -r はホームディレクトリを含め削除するためのものです.

$ sudo userdel -r ubuntu
[sudo] password for hyt:
userdel: ubuntu mail spool (/var/mail/ubuntu) not found

固定アドレス化

すでに書いた通り,私の場合は本機をデスクトップとして使うつもりはありませんので,固定アドレス化して ssh でアクセスしやすいようにします.ubuntu の場合は,/etc/network/interfaces.d/eth0 の内容を以下の様に変更するだけです.

$ cd /etc/network/interfaces.d/
$ sudo vi eth0
auto eth0
iface eth0 inet static
address 192.168.0.10
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 192.168.0.1
dns-search labohyt.net

いくつかのパッケージの追加

PINE A64+ の初期設定の最後の作業は,いくつかのパッケージの追加です.さすがに Base Image と言うだけあって,dnsutils はともかく man でさえ入っていません.このままだとあまりにも不便なので,日常的に使いそうなものをいくつか以下のように入れておきます.

$ sudo apt-get install dnsutils
$ sudo apt-get install bmon
$ sudo apt-get install iftop
$ sudo apt-get install tmux
$ sudo apt-get install git
$ sudo apt-get install man-db
$ sudo apt-get install unzip

次回予告

とりあえずここまでで最低限使える状態になりました.あとは実際になにに使うかですが,その前にあまり見ない SBP なので,どの程度の性能なのか簡単にチェックしてみました.ただし,すでにかなり長くなりましたので,本件は次の記事

PINE A64+ の性能と AES-NI 備忘録
の続き.PINE A64+ がどの程度の性能なのかを調べてみた備忘録です.まずは,UnixBench の結果から. UnixBench on PINE A64+ 性能評価と言えば,ベンチマークだろってことで,Unix 系のベンチマークソフト...

で紹介したいと思います.

タイトルとURLをコピーしました