RaspberryPiでサービスを扱いたいと考えて調べたところ、SysVinit
を使った記事をよく見かけました。
さらに、RaspberryPiに限らずに調べてみたところ、Upstart
を知り、最近の記事ではsystemd
が出てきました。
そのため、RaspberryPiでsystemdを試してみようと考え、セットアップしてみました。
環境
開発PC
RaspberryPi 2
- Raspberry Pi 2 Model B
- Raspbian 2015-02-16
- systemdはbackportのパッケージ
- systemd 204
- systemd-sysv 204
- microSD
- Transcend TS16GUSDHC10E
- 相性あるのか、あまり調子よくない...
- Transcend TS16GUSDHC10E
各種アップデート
アップデートしておきます。
pi@raspberrypi ~ $ sudo apt-get update pi@raspberrypi ~ $ sudo apt-get upgrade pi@raspberrypi ~ $ sudo rpi-update
Raspbian wheezy用パッケージのインストール
まずはRaspbianの状態を調べてみたところ、systemdはインストールされていないようでした。
pi@raspberrypi ~ $ dpkg -l systemd Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==============-============-============-================================= un systemd <none> (no description available)
そのため、systemdのインストールを行います。
# systemdのインストール pi@raspberrypi ~ $ sudo apt-get install systemd ... Setting up libpam-systemd:armhf (44-11+deb7u4) ... # 念のためRaspberryPiを再起動 pi@raspberrypi ~ $ sudo reboot # バージョン確認 pi@raspberrypi ~ $ systemctl --version systemd 44 debian +PAM +LIBWRAP +AUDIT +SELINUX +SYSVINIT +LIBCRYPTSETUP
動作を確認しようと、systemctl
だけを叩いてみたところ、以下のエラーで動作しませんでした。
pi@raspberrypi ~ $ systemctl Failed to get D-Bus connection: No connection to service manager.
調べてみると、systemd-sysv
パッケージが不足しているため、動作しないようでした。
Debian -- Details of package systemd in wheezy-backports
そのため、systemd-sysvをインストールします。
# systemd-sysvのインストール pi@raspberrypi ~ $ sudo apt-get install systemd-sysv ... # 入力を求められる You are about to do something potentially harmful. To continue type in the phrase 'Yes, do as I say!' ?] Yes, do as I say! # 入力した Get:1 http://mirrordirector.raspbian.org/raspbian/ wheezy/main systemd-sysv armhf 44-11+deb7u4 [15.1 kB] ... Setting up systemd-sysv (44-11+deb7u4) ... # 再起動 pi@raspberrypi ~ $ sudo reboot # 再起動後、動作確認 pi@raspberrypi ~ $ systemctl UNIT LOAD ACTIVE SUB JOB DESCRIPTION proc-sys...misc.automount loaded active waiting Arbitrary Executable File sys-devi...ttyAMA0.device loaded active plugged /sys/devices/dev:f1/tty/tt sys-devi...et-eth0.device loaded active plugged ec00
問題なく動作しているようでした。
ここまででも良いのですが、手元の環境ではsystemdに切り替えた後、起動しないことがよくありました。
使用しているmicroSDとの相性なのかもしれませんが、systemdをバージョンアップすれば変わるかもしれないと考えて、wheezy-backports版のsystemdを入れてみることにしました。
なお、backportsについては
backportsに含まれるものの中には,単に次のリリース(のベータ版)からリビルドしただけの安易なパッケージも少なくなく,導入によってシステムに不具合が発生する可能性もあります。どうしても使いたいパッケージが-backportsに存在する場合を除いては,有効にするべきではありません。
ということですので、ここらへんは自己責任で...。
wheezy-backports版のインストール
/etc/apt/sources.list への追記
/etc/apt/sources.list
を開きます。
pi@raspberrypi ~ $ sudo nano /etc/apt/sources.list
ドキュメントを参考にして、最後の行に以下の内容を追加します。なお、サイトのURLは一番近そうなミラーサイトを指定しました。
deb http://ftp.jp.debian.org/debian/ wheezy-backports main
apt-get update
以下の警告が出ました。
pi@raspberrypi ~ $ sudo apt-get update Reading package lists... Done W: GPG error: http://ftp.jp.debian.org wheezy-backports Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 8B48AD6246925553 NO_PUBKEY 7638D0442B90D010
キーが無さそうなエラーでしたので、以下を参考にapt-getのキーを調べてみました。
Linux: apt-get 時の GPG error (NO_PUBKEY) の解決例
たしかにキーが無いようです。
pi@raspberrypi ~ $ sudo apt-key list /etc/apt/trusted.gpg -------------------- pub 2048R/90FDDD2E 2012-04-01 uid Mike Thompson (Raspberry Pi Debian armhf ARMv6+VFP) <mpthompson@gmail.com> sub 2048R/5373DC6C 2012-04-01 pub 2048R/7FA3303E 2012-06-17 uid Raspberry Pi Archive Signing Key sub 2048R/EDD83D6C 2012-06-17 pub 4096R/0C50B1C5 2013-05-11 uid Collabora Raspbian Archive Signing Key <daniels@collabora.com> sub 4096R/D107BAE1 2013-05-11
キーサーバーより、GPGキーを入手
エラーが出ている2つのキーを、キーサーバーより入手します。
なお、キーサーバーにsubkeys.pgp.net
を指定したところ、
pi@raspberrypi ~ $ sudo gpg --keyserver subkeys.pgp.net --recv-keys 8B48AD6246925553 gpg: directory `/root/.gnupg' created gpg: new configuration file `/root/.gnupg/gpg.conf' created gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run gpg: keyring `/root/.gnupg/secring.gpg' created gpg: keyring `/root/.gnupg/pubring.gpg' created gpg: requesting key 46925553 from hkp server subkeys.pgp.net
と表示された後ハングしたような感じになりました。
そのため、NSEG#41 白馬合宿でも使った pgpkeys.mit.edu
を指定しました。
Windowsでキーサインパーティに参加した時のまとめ & caffっぽいツールを作ってみた - メモ的な思考的な
8B48AD6246925553用
pi@raspberrypi ~ $ sudo gpg --keyserver pgpkeys.mit.edu --recv-keys 8B48AD6246925553 gpg: requesting key 46925553 from hkp server pgpkeys.mit.edu gpg: /root/.gnupg/trustdb.gpg: trustdb created gpg: key 46925553: public key "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
7638D0442B90D010用
pi@raspberrypi ~ $ sudo gpg --keyserver pgpkeys.mit.edu --recv-keys 7638D0442B90D010 gpg: requesting key 2B90D010 from hkp server pgpkeys.mit.edu gpg: key 2B90D010: public key "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>" imported gpg: no ultimately trusted keys found gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1)
入手したキーを確認し、確かに追加されていることが分かりました。
pi@raspberrypi ~ $ sudo gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 4096R/46925553 2012-04-27 [expires: 2020-04-25] uid Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org> pub 4096R/2B90D010 2014-11-21 [expires: 2022-11-19] uid Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>
apt-keyへ追加
GPGのものをapt-keyへ追加します。
pi@raspberrypi ~ $ sudo gpg -a --export 8B48AD6246925553 | sudo apt-key add - OK pi@raspberrypi ~ $ sudo gpg -a --export 7638D0442B90D010 | sudo apt-key add - OK
apt-keyに追加されていることを確認します。
pi@raspberrypi ~ $ sudo apt-key list /etc/apt/trusted.gpg -------------------- pub 2048R/90FDDD2E 2012-04-01 uid Mike Thompson (Raspberry Pi Debian armhf ARMv6+VFP) <mpthompson@gmail.com> sub 2048R/5373DC6C 2012-04-01 pub 2048R/7FA3303E 2012-06-17 uid Raspberry Pi Archive Signing Key sub 2048R/EDD83D6C 2012-06-17 pub 4096R/0C50B1C5 2013-05-11 uid Collabora Raspbian Archive Signing Key <daniels@collabora.com> sub 4096R/D107BAE1 2013-05-11 pub 4096R/46925553 2012-04-27 [expires: 2020-04-25] uid Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org> pub 4096R/2B90D010 2014-11-21 [expires: 2022-11-19] uid Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>
再度、apt-get update
今度は正常終了しました。
pi@raspberrypi ~ $ sudo apt-get update ... Reading package lists... Done
systemdをbackportからインストール
-t
オプションを付けてbackportの場所からインストールします。
pi@raspberrypi ~ $ sudo apt-get -t wheezy-backports install systemd ... Setting up systemd-sysv (204-14~bpo70+1) ... Setting up libpam-systemd:armhf (204-14~bpo70+1) ... Setting up libpam-cap:armhf (1:2.22-1.2) ...
確かにインストールされていました。
pi@raspberrypi ~ $ dpkg -l Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-==========================-==================-==================-========================================================= ... ii systemd 204-14~bpo70+1 armhf system and service manager ii systemd-sysv 204-14~bpo70+1 armhf system and service manager - SysV links ...
必要に応じて、/usr/lib/tmpfiles.d/systemd.conf ファイルの修正
backportから入れたsystemdのバージョンを確認します。
pi@raspberrypi ~ $ systemctl --version systemd 204 +PAM +LIBWRAP +AUDIT +SELINUX +IMA +SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ
ただ、このバージョンだとsystemdまわりにバグがあるようです。
- Arch Linux ARM • View topic - [SOLVED] Login error: "System is booting up"
- ssh in fedora 20 fails with error "system is booting up" - Ask Fedora: Community Knowledge Base and Support Forum
そのため、RaspberryPiを再起動してsystemdを有効化した後にSSHで接続しようとしても、System is booting up.
というメッセージが表示され、piユーザーでの接続ができなくなりました。
>ssh pi@192.168.0.21 The authenticity of host '192.168.0.21 (192.168.0.21)' can't be established. pi@192.168.0.21's password: System is booting up. Connection closed by 192.168.0.21
今回は /usr/lib/tmpfiles.d/systemd.conf
ファイルより、原因となる行を削除する方法を取ります。
ファイルを開きます。
pi@raspberrypi ~ $ sudo nano /usr/lib/tmpfiles.d/systemd.conf
以下のようなファイルの中身のため、最終行を削除します。
# This file is part of systemd. # # systemd is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # See tmpfiles.d(5) for details ... # 以下の行を削除 F /run/nologin 0644 - - - "System is booting up."
この後再起動して動作を確認します。
# 再起動 pi@raspberrypi ~ $ sudo reboot # 動作確認 pi@raspberrypi ~ $ systemctl UNIT LOAD ACTIVE SUB DESCRIPTION proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File System Automount ... To show all installed unit files use 'systemctl list-unit-files'.
SSHで接続できた上、systemdも起動しています。