[[OS]] >

* 目次 [#d1264725]

#contents

* システムのセットアップ [#b63d6615]

- &ref(images/note.png,nolink);以下の手順は確定したものではなく、試行錯誤の結果で作業ログに近いものです。環境によっては同じ結果が得られないかもしれませんのでご注意ください。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 [#y0c05970]

- [[LibreELEC>https://libreelec.tv/]]は、[[Kodi>https://kodi.tv/]]ベースのメディアセンターOSです。

*** OSのインストール [#o318a52d]

+ [[ダウンロードサイト>https://libreelec.tv/downloads/]]からRaspberryPi3用のイメージをダウンロードします。
+ ダウンロードしたイメージをmicroSDに書き込みます。
#geshi{{
$ gzip -dc LibreELEC-RPi2.arm-8.2.5.img.gz | sudo dd bs=4M of=/dev/sdX
}}
+ Raspberry Pi に挿入の上、システムを起動させます。ウィザートに従い設定を行います。

** Raspbian [#z2cb4517]

- [[Raspbian>https://www.raspberrypi.org/downloads/raspbian/]]は、DebianベースのOSです。

*** OSのインストール [#z57e99ab]

+ [[ダウンロードサイト>https://www.raspberrypi.org/downloads/raspbian/]]から好みのイメージをダウンロードします。
+ ダウンロードしたイメージをmicroSDに書き込みます。うまく書き込めない場合がありましたが、そのような時には何度か試してみるとよいでしょう。
#geshi{{
$ 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アドレス固定 [#pe60ae50]

- ''/etc/dhcpcd.conf'' に最後に以下の要領で設定を追加します。デスクトップ版であればGUIからも設定可能です。
#geshi(bash,number){{
interface eth0
static ip_address=192.168.1.6/24
static routers=192.168.1.1
static domain_name_servers=192.168.1.53 8.8.8.8
}}

** Ubuntu 18.04 LTS Classic (armhf) [#a1c51c05]

- &ref(images/info.png,nolink);[['''RaspberryPi'''>https://wiki.ubuntu.com/ARM/RaspberryPi]] の説明にある通り、Raspberry Pi 3 の''公式イメージ''は Pi 2 と同じもので Pi 3 用に使用する場合には追加の設定が必要となります。

*** OSのインストール [#k7707acb]

+ ダウンロードしたイメージを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'': ブート設定ファイルを以下のように変更します。
#geshi(diff,number){{
$ 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/'' ディレクトリ以下をブートパーティションにコピーします。
#geshi{{
$ 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ファームウェアとブートローダが更新されます。
#geshi{{
$ 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ファイルの最後に以下の内容を追加します。
#geshi(yaml,number){{
# 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 によるネットワーク設定を抑止します。
#geshi(yaml,number){{
network: {config: disabled}
}}
+ ''cloudimg-rootfs/etc/systemd/network/20-wired.network'': 以下の要領でIPアドレスを固定します。
#geshi(ini,number){{
[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
+ &ref(images/note.png,nolink);現時点(2018年12月)ではシステムを最新に更新するとネットワークデバイスがアップせずその設定が行われなく問題があるようです。後述の[[ネットワーク不通問題>./#m4908356]]を参照の上、netplat によるネットワーク設定を行います。
+ 後はホスト名や利用ユーザなどを適宜設定していきます。

*** オプションのPPA [#xbadbb92]

- vcgencmd コマンドなどを利用できるようにします。

+ PPAを追加します。
#geshi{{
$ sudo add-apt-repository ppa:ubuntu-raspi2/ppa
$ sudo apt-get update
}}
+ 試しに、libraspberrypi-bin をインストールしてみます。
#geshi{{
$ sudo apt-get install libraspberrypi-bin
...
$ sudo vcgencmd otp_dump | grep 17:
17:3020000a
}}

*** 自動アップグレードの抑止 [#zb918afb]

+ Ubuntu 18.04はデフォルトで自動アップグレードするように設定されていますので、不都合がある場合には以下の修正により自動アップグレードを無効にします。
++ ''/etc/apt/apt.conf.d/20auto-upgrades''
#geshi(c,number){{
APT::Periodic::Update-Package-Lists "1";
//APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Unattended-Upgrade "0";
}}

*** 時刻合わせ [#p31c5338]

+ Raspberry Piにはリアルタイムクロックがなく停止時には時刻を保持できませんので、''fake-hwclock'' パッケージをインストールし擬似的に保持させます(ただし停止時間が長くなれば時刻のズレが大きくなります)。
 $ sudo apt-get install fake-hwclock
+ 起動中の時刻同期のために ntp デーモンをインストールします。
 $ sudo apt-get install ntp 

*** chef-clientのセットアップ [#la948e2d]

+ 公式のインストーラはARMをサポートしていませんので、knife bootstrap 実行前にあらかじめノードに chef-client をインストールしておきます。ディストリビューションのパッケージも古め(12.14.60)ですのでgemコマンドで比較的新しいバージョンのパッケージをインストールします。
#geshi{{
$ 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 を実行し、ノードとして登録します。

*** [[Docker]] [#q0038e9e]

- &ref(images/info.png,nolink);[['''Get Docker CE for Ubuntu'''>https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/]]
- 公式に armhf もサポートされていますのでインストールが可能です。環境要件には64bitサーバとありますが、ARMアーキテクチャの場合 armhf サポートとありますので32bitサポートになります。Raspberry Pi 3 Model B+のARMプロセッサは64bitですが、提供されているOSもまだほとんど32bit版ですのでこのDockerで問題なく動作します。(ややバージョンが古い(17.12)ですが)もちろんUbuntuディストリビューションのパッケージ(docker.io)を利用することもできます。ただし、現時点ではARM向けにビルドされたイメージはあまり多くありません。
#geshi{{
$ docker -v
Docker version 18.06.1-ce, build e68fc7a
$ docker run --rm -it arm32v7/ubuntu:18.04 bash
...
}}

*** DockerCompose [#dc68364e]

- 公式にはARM向けの提供はありませんので、ディストリビューションの docker-compose パッケージ(1.17)をインストールします。
#geshi{{
$ sudo apt-get install docker-compose
}}
- あるいは最新バージョンをインストールしたい場合には、[[PyPI>https://pypi.org/project/docker-compose/]]からインストールします。
#geshi{{
$ 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
}}

*** [[LXD]] [#x5d16ed6]

- [[LXD]]はすでにインストール済みですので、sudo lxd init コマンドにより初期設定を行えばすぐに利用できます。ストレージバックエンドはデフォルトの btrfs で問題ないでしょう。
#geshi{{
$ sudo lxd init
...
$ lxc launch ubuntu:18.04
}}
-  &ref(images/note.png,nolink);公式リポジトリには、arm64向けにビルドされたイメージがありますが、OSが32bit版ですのでそれらはまだ利用できません。
#geshi{{
$ lxc launch ubuntu:18.04/arm64
...
error: Requested architecture isn't supported by this host
}}

*** MinimServer [#h99c860e]

- [[こちら>MinimServer]]をご参照ください。

*** Samba [#o02dca64]

- 問題なく利用できます。
#geshi{{
$ sudo apt-get install samba
}}
- SambaのSystemd移行は最終的に samba ユニットが作成されなかった模様です。''/etc/init.d/samba'' コマンドもすでに存在していませんので systemctl コマンドで起動させます。
#geshi{{
$ 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
}}
- 統合認証については以下をご参照ください。
-- [[Samba+LDAP+smbldap-toolsでワークグループの統合認証]]

* 既知の問題 [#vb58ec52]

** Ubuntu 18.04 LTS Classic (armhf) [#yb6d0581]

*** 有線ネットワーク不通(systemd-networkd) [#j16820eb]

+ 直接の因果関係は不明ですが、以下のバージョンにアップグレードしたところネットワーク設定が正常に行われなくなりました。
#geshi{{
$ uname -rv
4.15.0-1022-raspi2 #24-Ubuntu SMP PREEMPT Wed Aug 29 10:43:16 UTC 2018
}}
-- &ref(images/info.png,nolink);現在以下のバージョンでは、systemd-networkdによる設定が正常に動作しているようです。
#geshi{{
$ uname -rv
4.15.0-1030-raspi2 #32-Ubuntu SMP PREEMPT Fri Dec 7 09:15:28 UTC 2018
}}
+ /var/log/cloud-init-output.log を確認したところ、以前はUPしていたeth0デバイスがUPしなくなっています。また起動後に明示的に systemd-networkd サービスを再起動しても設定が行われませんので、(より上位の)netplan による設定に切り替えます。まず以下のような設定ファイルを追加します。
-- ''/etc/netplan/01-netcfg.yaml''
#geshi(yaml,number){{
network:
  version: 2
  renderer: networkd
  ethernets:
    eth0:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.1.6/24]
      gateway4: 192.168.1.1
      nameservers:
        addresses: [192.168.1.53, 8.8.8.8]
}}
+ 以下のコマンドで反映し、確認します。
#geshi{{
$ sudo netplan apply
$ ip addr show
...
}}
+ ところが起動時に自動でこの設定が反映されませんので、応急処置として netpla apply 実行を ''/etc/rc.local'' に追加し、念のため cron にも以下のようなジョブを設定しておきます。
#geshi(bash,number){{
@reboot root sleep 180s && netplan apply
}}
+ なお、systemd-networkd-wait-online サービスは時間がかかる上、結局失敗しますのでこちらは無効にしてしまいます。
#geshi{{
$ sudo systemctl disable systemd-networkd-wait-online
$ sudo systemctl mask systemd-networkd-wait-online
}}

*** 有線ネットワーク不通(netplan) [#gd5c6c77]

+ さらに、以下のバージョンにアップグレードしたところNetplanによるネットワーク設定も正常に行われなくなる場合が発生するようになりました。ネットワークデバイスが(接続されているにもかかわらず) ''LOWER_UP'' していませんので、うまく起動していないか非常に起動が遅くなっているようです。
#geshi{{
$ uname -rv
4.15.0-1029-raspi2 #31-Ubuntu SMP PREEMPT Sat Nov 17 00:03:01 UTC 2018
}}
+ 試みに ifupdown をインストールして、以前のように ''/etc/network/interfaces'' で設定を行うとうまく設定されるようです。設定については、[[こちら>Debian]]をご参照ください。
#geshi{{
$ sudo apt-get install ifupdown
...
$ sudo systemctl restart networking
}}

&ref(images/info.png,nolink);''netplan.io-0.40.1~18.04.3'' 以降で解消しているようです。
- [['''Netplan generates systemd-networkd config files with incorrect file permissions'''>https://bugs.launchpad.net/ubuntu/+source/netplan.io/+bug/1768560]]
- 以下のように、systemd-networkd用の設定ファイルが生成されていれば問題ありません。
#geshi{{
$ ls -l /run/systemd/network
total 4
-rw-r--r-- 1 root root 136 Jan 29  2018 10-netplan-eth0.network
}}

** 3.5mmミニプラグからの音声出力のノイズ [#qbf2f76d]

- Model B+ の3.5mmミニプラグは4極の音声および映像信号出力プラグなので、変換ケーブルを介して適切に分離して音声を出力させた((Fuji Parts AD-511を使用、黄と赤ピンを入れ替えて接続))ところ個体によってはかなりのノイズが認められました。
-- 他の外部接続は、電源とLANケーブルのみ。
-- レンダラには LibreELEC を使用しネットワーク経由(DLNA)でオーディオファイルを再生(コントロールポイントはBubbleUPnP、メディアサーバはMinimServer)。
-- 非再生時に、個体によっては全くノイズがないものもあり、かなりのノイズがあるものもありました。
-- ノイズの認められる個体については、無線のポインティングデバイスをUSB接続して試してみたところ操作によってノイズの変動が認められました。
-- ノイズが気になる場合には、とりあえずHDMI経由の音声出力を利用するとよいでしょう。

* USBブート [#n8b228bd]

- 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フォーマットで書き換えます。
--- ''/flash/cmdline.txt''
#geshi(ini,number){{
boot=/dev/mmcblk0p1 disk=/dev/mmcblk0p2 quiet
}}

* バックアップとリストア [#ce3ed710]

- [[RaspberryPi3ModelB]]と同様です。

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS