BSD界隈四方山話

第44回OpenBSDのサービス制御機構 rc.d(8)とrcctl(8)

rc(8)からシンプルなrc.d(8)という選択

OpenBSDはこれまで従来のBSDがそうであったように、ブートローダがカーネルを読み込み、カーネルが起動の最後のシーケンスでinit(8)を起動、そのあとはinit(8)から/etc/rcシェルスクリプトが実行されて、システムの起動が実施されるという仕組みを採用してきました。

UNIX系オペレーティングシステムの多くがこうしたBSD由来のシンプルな起動およびデーモン/サービス制御メカニズムから、ほかの制御メカニズムへ切り替えを実施しました。たとえば次のような候補があります。

  • SMF、launchd
  • OpenRC
  • runit、deamontools
  • FreeBSD/NetBSD rc.d(8)+rcorder(8)
  • Slackware Linux rc.d

現在だと次の候補も入ることになるでしょう。

  • Linux systemd
  • NextBSD launchd
  • relaunchd
  • nosh

OpenBSDではこうした仕組みを調査したうえで、OpenBSDの既存のパラダイムや振る舞いを変更することなく、rc.d(8)のインターフェースを利用できるようにする方法を採用しました。あくまでもシンプルに要求を満たすことを優先し、NetBSD/FreeBSD rc.d(8)が実現したような起動順序の自動化などは取り込まないという姿勢です。

またOpenBSDでは、システムデフォルトのデーモン/サービスとパッケージから導入したデーモン/サービスを明確に扱いとして分けているという違いがあります。システムデフォルトのデーモン/サービスの起動順序は従来のやり方で制御されます。NetBSD/FreeBSDよりもシンプル化されたrc.d(8)が導入されたと考えるとわかりやすいと思います。

制御および編集コマンドrcctl(8)

OpenBSDでは/etc/rc.confがシステムデフォルトの設定ファイル、/etc/rc.conf.localがデフォルト設定を上書きする設定ファイルです。OpenBSDではrc.d(8)の導入後、この設定ファイルやデーモン/サービスの起動や停止、その設定の編集などを実施する統一したコマンドとしてrcctl(8)を導入しました。service(8)とchkconfig(8)とsysinstall(8)がくっついたようなコマンドだと考えるとわかりやすいと思います。

rcctl(8)の使い方は次のとおりです。

リスト rcctl(8)コマンドの主な使い方
rcctl enable daemon
rcctl disable daemon
rcctl get daemon
rcctl getdef daemon
rcctl ls all|faulty|off|on|started|stopped
rcctl order pkg_daemon
rcctl set daemon variable argument

デーモン/サービスの制御のみならず設定ファイルの編集もできるので、一度使ってみるとなかなか便利な機能です。たとえば、現在起動しているデーモン/サービスのリストは次のコマンドで確認できます。

 現在動作しているデーモン/サービスの一覧表示
# rcctl ls started
cron
ntpd
pflogd
smtpd
sndiod
syslogd
#

個別デーモン/サービスの起動や停止はstart / stopサブコマンドを指定しておこないます。設定で有効になっていないデーモンやサービスを起動する場合にはrcctl(8)に-fオプションを指定します。

 sshdデーモンの起動
# rcctl start sshd
/etc/rc.d/sshd: need -f to force start since sshd_flags=NO
# rcctl -f start sshd
sshd(ok)
#
 sshdデーモンの停止
# rcctl stop sshd
sshd(ok)
#

設定しようとしているデーモンやサービスでどういった設定ができるのかは次のようにgetdefサブコマンドで確認できます。timeoutは起動や停止、リロードなどの操作をした時のタイムアウト時間を指定しています。userはそのデーモン/サービスを起動するユーザ、flagsはそのデーモン/サービスの起動時に指定するオプションです。

 sshdデーモンに関するデフォルトの設定
# rcctl getdef sshd
sshd_class=daemon
sshd_flags=
sshd_timeout=30
sshd_user=root
#

たとえばsshd(8)デーモンをデフォルトで起動するようにして、タイムアウト時間を60秒に、DNSの使用を停止するとともにrootでのログインを禁止するオプションを有効にする場合には、次のようにrcctl(8)コマンドを実行します。

 sshdデーモンのデフォルト有効化とそのほかオプションの設定
# rcctl enable sshd
# rcctl set sshd timeout 60
# rcctl set sshd flags -oUseDNS=no -oPermitRootLogin=no
# cat /etc/rc.conf.local
sshd_flags=-oUseDNS=no -oPermitRootLogin=no
sshd_timeout=60
#

rcctl(8)コマンドは/etc/rc.conf.localファイルの内容を自動的に編集します。この機能はすでにOpenBSD 5.7に取り込まれている機能です。現在の最新リリース版であるOpenBSD 5.8でも利用できます。OpenBSDでデーモン/サービスを制御する場合にはrcctl(8)コマンドを使うと便利なので覚えておくとよいと思います。

FreeBSD勉強会 告知

第50回 3月22日(火) 19:00~ 【マジで困ってますシリーズ】FreeBSDが固まるんですけど・・・

FreeBSDは安定しています。たしかに安定しています。高負荷時にも粘り強い動きをみせます。しかし、ふとしたときになぜか黙ることがある、クラッシュダンプもなしに……。そんなニッチもサッチもいかない状況に追い込まれたIT戦士の声も聞くのです。しかし、クラッシュダンプもとれてないし、どうしたらよいかわからない……。

そこで、記念すべき第50回目となるFreeBSD勉強会では、そうした窮地に追い込まれた状況を語り合い、死力を尽くした対応策を話し合い、情報共有して来たるべき、そしていま来ている地獄に備える、そんな会にしたいと思います。FreeBSDサーバを管理している方、この状況をなんとか乗り越えたい方、情報共有から次の一手を見つけ出したい方、すべての戦士に参加を求めます!

ライトニングトークに近い形で相互に発表しましょう。問題は発生しているものの解決はしていない、というパターンでもオッケーです。解決方法が知りたいんだ、という方のご参加もお待ちしています。よろしくお願いしまっす。

参加申請はこちらから。

第51回 4月14日(木) 19:00~ FreeBSD 10.3R / 11.0 新機能紹介

2016年3月末または4月の値には安定板の最新バージョンとなるFreeBSD 10.3-RELEASEのリリースが予定されています。さらに今年の夏となる7月末または8月には、次期メジャーアップグレードバージョンとなるFreeBSD 11.0-RELEASEのリリースが予定されています。FreeBSD 11.0-RELEASEには現在の10系にはバックポートされていない魅力的な機能がたくさん用意されており、リリースが楽しみなバージョンです。

第51回目となる今回はFreeBSD 10.3-RELEASEの登場のタイミングに合わせて、10.3-RELEASEの新機能を紹介するとともに、11.0-RELEASEで登場が予定されている新機能や変更点を先取りして紹介します。最近のFreeBSDがどうなっているのか、最新版に移行しようかどうか迷っているので詳しく内容を知りたい、そんな方向けの勉強会です。

参加申請はこちらから。

おすすめ記事

記事・ニュース一覧