OS >
目次 †
システムのセットアップ †
以下の手順は確定したものではなく、試行錯誤の結果で作業ログに近いものです。環境によっては同じ結果が得られないかもしれませんのでご注意ください。microSDについては以下のものを使用しています。同一メーカーの同(容量)製品でも容量が若干異なる場合があります。
No. プロダクト 実容量 備考 1 SanDisk? Ultra microSDHC UHS-I Class10 16GB (SDSDQUL-016G-EPK)15,193.5MB 2 Toshiba microSDHC 16GB Class10 UHS-I (MSDAR40N16G) 14,772.0MB -421.5MB
microSDへの書き込みや編集作業には Ubuntu Desktop を使用しています。
LibreELEC †
OSのインストール †
ダウンロードサイト からRaspberryPi3用のイメージをダウンロードします。
ダウンロードしたイメージをmicroSDに書き込みます。
$ gzip -dc LibreELEC-RPi2.arm-8.2.5.img.gz | sudo dd bs=4M of=/dev/sdX
Raspberry Pi に挿入の上、システムを起動させます。ウィザートに従い設定を行います。
Raspbian †
OSのインストール †
ダウンロードサイト から好みのイメージをダウンロードします。
ダウンロードしたイメージをmicroSDに書き込みます。うまく書き込めない場合がありましたが、そのような時には何度か試してみるとよいでしょう。
$ unzip 2018-11-13-raspbian-stretch-lite.zip
$ cat 2018-11-13-raspbian-stretch-lite.img | sudo dd bs=4M of=/dev/sdX
起動後、初期ユーザ(pi、初期パスワードは raspberry)でログインし直ちにパスワードを変更しましょう。初期ユーザを削除し任意のユーザを追加し、自動ログインを無効にするとよりセキュアです。追加ユーザは pi ユーザと同じグループに所属させておくとよいでしょう。
有線ネットワークのIPアドレス固定 †
Ubuntu 18.04 LTS Classic (armhf) †
RaspberryPi の説明にある通り、Raspberry Pi 3 の公式イメージ は Pi 2 と同じもので Pi 3 用に使用する場合には追加の設定が必要となります。
OSのインストール †
ダウンロードしたイメージをmicroSDに書き込みます。うまく書き込めない場合がありましたが、そのような時には何度か試してみるとよいでしょう。
$ xzcat ubuntu-18.04.1-preinstalled-server-armhf+raspi2.img.xz | sudo dd bs=4M of=/dev/sdX
microSDに書き込まれた2つのパーティションをマウントして必要な変更を加えていきます。Ubuntuでのオートマウントの場合、2つのパーティションは以下のようにマウントされますので、これらを前提として説明します。
No. パーティション マウントポイント 説明 1 1st /media/$USER/system-boot ブートパーティション 2 2nd /media/$USER/cloudimg-rootfs ルートファイルシステム
$ cd /media/$USER
system-boot/config.txt : ブート設定ファイルを以下のように変更します。
$ diff -u system-boot/config.txt{ .org,}
--- system-boot/config.txt.org 2018-08-29 20:51:44.000000000 +0900
+++ system-boot/config.txt 2018-08-29 20:52:52.000000000 +0900
@@ -2,8 +2,8 @@
# http://www.raspberrypi.org/documentation/configuration/config-txt.md
# Some settings may impact device functionality. See link above for details
-kernel=uboot.bin
-device_tree_address=0x02000000
+kernel=vmlinuz
+initramfs initrd.img followkernel
# enable i2c
dtparam=i2c_arm=on
ハードウェアに合わせた .dtb ファイルと overlays/ ディレクトリ以下をブートパーティションにコピーします。
$ sudo cp cloudimg-rootfs/lib/firmware/4.15.0-1017-raspi2/device-tree/*-rpi-3-b*.dtb system-boot/
$ sudo cp -r cloudimg-rootfs/lib/firmware/4.15.0-1017-raspi2/device-tree/overlays system-boot/
ブートローダ一式をダウンロードし、ブートパーティションにコピーします。これでGPUファームウェアとブートローダが更新されます。
$ sudo wget http://archive.raspberrypi.org/debian/pool/main/r/raspberrypi-firmware/raspberrypi-bootloader_1.20180417-1_armhf.deb
$ dpkg-deb -x raspberrypi-bootloader_1.20180417-1_armhf.deb /tmp/pi-bootloader
$ sudo cp /tmp/pi-bootloader/boot/* system-boot/
cloudimg-rootfs/usr/share/flash-kernel/db/all.db : flash-kernel のDBファイルの最後に以下の内容を追加します。
# Raspberry Pi 3 Plus (BCM2710)
Machine : BCM2710
Machine : Raspberry Pi 3 Model B Plus Rev 1.3
DTB-Id : bcm2710-rpi-3 -b-plus.dtb
U-Boot-Script-Name : bootscr.rpi3
Required-Packages : u-boot-tools
Boot-DTB-Path : /boot/firmware/bcm2710-rpi-3 -b-plus.dtb
Boot-Kernel-Path : /boot/firmware/vmlinuz
Boot-Initrd-Path : /boot/firmware/initrd.img
Boot-Script-Path : /boot/firmware/boot.scr
WiFi? ドライバの追加は割愛しています。
cloudimg-rootfs/etc/cloud/cloud.cfg.d/99-disable-network-config.cfg : 以下の内容を書き込み、cloud-init によるネットワーク設定を抑止します。
network : { config: disabled}
cloudimg-rootfs/etc/systemd/network/20-wired.network : 以下の要領でIPアドレスを固定します。
[ Match]
Name = eth0
[ Network]
Address = 192.168.1.6/24
Gateway = 192.168.1.1
DNS = 192.168.1.53
DNS = 8.8.8.8
以上で設定が完了しましたのでmicroSDをアンマウントして取り出し Raspberry Pi に挿入の上、システムを起動させます。起動時にSSHの設定等が自動で行われます。初期ユーザのIDとパスワードは、ubuntu/ubuntu です。
ログインし、システムを最新に更新して必要に応じて再起動します。
$ sudo apt-get update
$ sudo apt-get dist-upgrade
$ sudo reboot
現時点(2018年12月)ではシステムを最新に更新するとネットワークデバイスがアップせずその設定が行われなく問題があるようです。後述のネットワーク不通問題 を参照の上、netplat によるネットワーク設定を行います。
後はホスト名や利用ユーザなどを適宜設定していきます。
オプションのPPA †
vcgencmd コマンドなどを利用できるようにします。
PPAを追加します。
$ sudo add-apt-repository ppa:ubuntu-raspi2/ppa
$ sudo apt-get update
試しに、libraspberrypi-bin をインストールしてみます。
$ sudo apt-get install libraspberrypi-bin
...
$ sudo vcgencmd otp_dump | grep 17:
17:3020000a
自動アップグレードの抑止 †
Ubuntu 18.04はデフォルトで自動アップグレードするように設定されていますので、不都合がある場合には以下の修正により自動アップグレードを無効にします。
/etc/apt/apt.conf.d/20auto-upgrades
APT:: Periodic :: Update - Package- Lists "1" ;
//APT::Periodic::Unattended-Upgrade "1";
APT:: Periodic :: Unattended - Upgrade "0" ;
時刻合わせ †
Raspberry Piにはリアルタイムクロックがなく停止時には時刻を保持できませんので、fake-hwclock パッケージをインストールし擬似的に保持させます(ただし停止時間が長くなれば時刻のズレが大きくなります)。
$ sudo apt-get install fake-hwclock
起動中の時刻同期のために ntp デーモンをインストールします。
$ sudo apt-get install ntp
chef-clientのセットアップ †
公式のインストーラはARMをサポートしていませんので、knife bootstrap 実行前にあらかじめノードに chef-client をインストールしておきます。ディストリビューションのパッケージも古め(12.14.60)ですのでgemコマンドで比較的新しいバージョンのパッケージをインストールします。
$ sudo apt-get install ruby-ffi ruby-ffi-yajl
$ gem query -ra -n "^chef$"
$ sudo gem install chef -v 13.12.3 --no-rdoc --no-ri
ワークステーションから knife bootstrap を実行し、ノードとして登録します。
公式にはARM向けの提供はありませんので、ディストリビューションの docker-compose パッケージ(1.17)をインストールします。
$ sudo apt-get install docker-compose
あるいは最新バージョンをインストールしたい場合には、PyPI からインストールします。
$ sudo apt-get install python-setuptools python-pip
$ sudo -H pip install docker-compose
...
$ docker-compose version
docker-compose version 1.22.0, build f46880f
docker-py version: 3.5.0
CPython version: 2.7.15rc1
OpenSSL version: OpenSSL 1.1.0g 2 Nov 2017
Samba †
問題なく利用できます。
$ sudo apt-get install samba
SambaのSystemd移行は最終的に samba ユニットが作成されなかった模様です。/etc/init.d/samba コマンドもすでに存在していませんので systemctl コマンドで起動させます。
$ sudo systemctl is-enabled samba
Failed to get unit file state for samba.service: No such file or directory
$ sudo systemctl is-enabled nmbd smbd
enabled
enabled
$ sudo systemctl start nmbd smbd
統合認証については以下をご参照ください。
既知の問題 †
Ubuntu 18.04 LTS Classic (armhf) †
有線ネットワーク不通(systemd-networkd) †
直接の因果関係は不明ですが、以下のバージョンにアップグレードしたところネットワーク設定が正常に行われなくなりました。
$ uname -rv
4.15.0-1022-raspi2 #24-Ubuntu SMP PREEMPT Wed Aug 29 10:43:16 UTC 2018
/var/log/cloud-init-output.log を確認したところ、以前はUPしていたeth0デバイスがUPしなくなっています。また起動後に明示的に systemd-networkd サービスを再起動しても設定が行われませんので、(より上位の)netplan による設定に切り替えます。まず以下のような設定ファイルを追加します。
以下のコマンドで反映し、確認します。
$ sudo netplan apply
$ ip addr show
...
ところが起動時に自動でこの設定が反映されませんので、応急処置として netpla apply 実行を /etc/rc.local に追加し、念のため cron にも以下のようなジョブを設定しておきます。
@ reboot root sleep 180s && netplan apply
なお、systemd-networkd-wait-online サービスは時間がかかる上、結局失敗しますのでこちらは無効にしてしまいます。
$ sudo systemctl disable systemd-networkd-wait-online
$ sudo systemctl mask systemd-networkd-wait-online
有線ネットワーク不通(netplan) †
さらに、以下のバージョンにアップグレードしたところNetplanによるネットワーク設定も正常に行われなくなる場合が発生するようになりました。ネットワークデバイスが(接続されているにもかかわらず) LOWER_UP していませんので、うまく起動していないか非常に起動が遅くなっているようです。
$ uname -rv
4.15.0-1029-raspi2 #31-Ubuntu SMP PREEMPT Sat Nov 17 00:03:01 UTC 2018
試みに ifupdown をインストールして、以前のように /etc/network/interfaces で設定を行うとうまく設定されるようです。設定については、こちら をご参照ください。
$ sudo apt-get install ifupdown
...
$ sudo systemctl restart networking
netplan.io-0.40.1~18.04.3 以降で解消しているようです。
3.5mmミニプラグからの音声出力のノイズ †
Model B+ の3.5mmミニプラグは4極の音声および映像信号出力プラグなので、変換ケーブルを介して適切に分離して音声を出力させた*1 ところ個体によってはかなりのノイズが認められました。
他の外部接続は、電源とLANケーブルのみ。
レンダラには LibreELEC を使用しネットワーク経由(DLNA)でオーディオファイルを再生(コントロールポイントはBubbleUPnP、メディアサーバはMinimServer )。
非再生時に、個体によっては全くノイズがないものもあり、かなりのノイズがあるものもありました。
ノイズの認められる個体については、無線のポインティングデバイスをUSB接続して試してみたところ操作によってノイズの変動が認められました。
ノイズが気になる場合には、とりあえずHDMI経由の音声出力を利用するとよいでしょう。
USBブート †
Model B+ はデフォルトでUSBブートが有効になっています。microSD、USBの優先順位でOSの起動が行われます。
microSDにインストールしたOSをカードリーダーを介して起動させてみましたが、Raspbianはそのまま問題なく起動します。
Ubuntuはそのままでは起動できませんので、起動パーティションの設定を変更する必要があります。 /boot/firmware/cmdline.txt の中の root=/dev/mmcblk0p2 を root=LABEL=cloudimg-rootfs を変更しても構いませんが、以下のようにUUIDを設定した方がよいかもしれません。
まずUUIDを調べます。
$ blkid /dev/mmcblk0p2
root=UUID=xxxx... と設定します。
LibreELECの場合には、設定が以下のようになっていますので同様にUUIDフォーマットで書き換えます。
バックアップとリストア †