今日は2018年1月3日です.まずは,ご挨拶から.
あけましておめでとうございます.2018年も本 blog をよろしくお願いいたします.
さて,正月3日ですが,本ブログの管理人は新しく手に入れたオモチャ PINE A64+ 2G で遊んでいます.え,家族サービスは?って言われそうですけど,私以外の家族は遊びに行ってるんですよね……私だけ居残りです.
PINE A64+ 2Gって何?
Raspberry pi と同様の SBP(Single Board Computer) です.
もともとは Kickstarter で世界初の 64bit SBP の触れ込みで資金募集され(結果的には世界初には結局なれなかったんじゃないかと思いますが),その後事業化された製品です.
製品サイトは以下の通りで,今だと ROCK64 とかいろいろ出ています.
製品の特徴は,Raspberry pi3 との比較で(あくまで私が興味のあった部分),
- 若干高速である.
- 若干安い(ただし日本だと送料等の問題からそうでもない)
- Gigabit Ethernet に対応してる
でしょうか.今回はかなりお安く,某オークションサイトでケース込みで3000円程度で手に入りました.ケースは真っ黒な VESA マウント穴が付いたもので,ネジ等は付属していませんでした.
そのままだと基盤が泳ぐので,適当なネジ(M2.6だとジャストサイズです)とボルトで固定しましたが,そもそもこのケース国内で取り扱いがありません.基盤については,国内だと,秋月電子通商さんが販売しているみたいですが,ケースはない.Amazon には他のケースはあります(しかしとても高価)が,このケースは見当たりません.元の所有者の方はどうやってこのケースを手に入れたのかちょっと疑問です.
届いてまず感じたのは,
大きいなぁ〜
です.Raspberry pi を想像していたのですが,一回り以上大きい.比較写真は,
がわかりやすい.Raspberry pi と Raspberry pi zero を合わせたより大きいです.
あと,今回購入したものには無線機能はありません(冒頭写真の右側の端子部分に基盤が追加されるみたい)ので,技適の問題はありません.
さて,遊ぶためには電源の確保と何かの OS を microSD にインストールしないといけません.今回,電源として使ったのは,Anker の24W 2-Port USB Charger
で,microSD は ELECOM のお安い 8G のものを使いました.
初期イメージの選択
PINE A64+,Android, openSUSE, Armbian など,結構色々な OS に対応していますが,元サイト
の説明を見ると,今のところ Ubuntu Xenial じゃないといろいろ問題がありそうな感じです(個人的には RedHat 系か gentoo が好きなんですが……).安定したものを使いたいですし,私の場合,SBP にデスクトップは期待していないということもあり,今回は素直に Xenial Base Image をインストールすることにしました(Xenial Minimal Image でもよかったのですが,公式は Base Image の方みたいです).
と言っても,インストーラーは共通で,Ether を改変した
を使って導入します.導入手順は以下の通り.
microSD を PC に入れ,インストーラーを起動します.
Choose an os を選んで,ボードとして PINE A64+ を選んで Xenial Base Image を選び,OKを押します.
あとは,Flush! を選ぶとダウンロードから書き込み,ベリファイまで完全に自動です.
書き込みが完了すると,初期IDとパスワードがそれぞれ ubuntu, ubuntu だというメッセージまで出してくれます.ビックリするほど手軽で簡単です.
しかし,簡単なのはここまで.何にも入ってない 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 なので,どの程度の性能なのか簡単にチェックしてみました.ただし,すでにかなり長くなりましたので,本件は次の記事
で紹介したいと思います.