たとえばApacheをインストールして、マシン起動時にApacheも起動してくれるよう、rc.confに「apache22_enable=“YES”」とタイプしているとき、たまに情けなくなったりしませんかね。
シンプルなのはいいけど、なんかこう、もうちょっとスマートにできないかとか。
(こわごわ言うけど、Linuxだったらchkconfig httpd onとかで済むよね。)

9.2-RELEASEから入ったsysrcというユーティリティがある。
rc.confの変更を少しだけ助けてくれるものだ。
serviceコマンドと併せて使えば、rc.conf周りの設定は少しだけ楽になる。

以下に使用例を示す。

rc.conf設定の表示

まずはrc.confで設定している変数を、sysrcに続けてタイプしてみる。

$ sysrc hostname
hostname: ascomoid
$ sysrc ifconfig_em0
ifconfig_em0: DHCP

というように、現状の値を教えてくれる。

sysrc -aでrc.confの設定を一覧できる。

$ sysrc -a
dumpdev: NO
hostname: ascomoid
ifconfig_em0: DHCP
keymap: jp.106.kbd
sshd_enable: YES

お気づきの通り、sysrc -aで表示されるのは、デフォルト設定から変更したものだけである。
デフォルト設定も含めて全部表示するには-Aを与える。

$ sysrc -A
accept_sourceroute: NO
accounting_enable: NO
allscreens_flags:
allscreens_kbdflags:
(中略)
wpa_supplicant_program: /usr/sbin/wpa_supplicant
zfs_enable: NO
$

設定書き換え

sysrcに変数設定を与えると、rc.confを書き換えてくれる。
例えばsysrc sshd_enable=“NO"というようにすると、/etc/rc.confの該当行が書き換わる。

$ sysrc sshd_enable
sshd_enable: YES
$ grep sshd_enable /etc/rc.conf
sshd_enable="YES"
$ sysrc sshd_enable
sshd_enable: YES
$ sudo sysrc sshd_enable="NO"
sshd_enable: YES -> NO
$ grep sshd_enable /etc/rc.conf
sshd_enable="NO"
$ sysrc sshd_enable
sshd_enable: NO
$

/etc/rc.confになく、/etc/defaults/rc.confにあるものでもOK。
zfs_enableを指定すると新しく/etc/rc.confに行が追加される。

$ sysrc zfs_enable
zfs_enable: NO
$ grep zfs_enable /etc/rc.conf
$
$ sudo sysrc zfs_enable="YES"
zfs_enable: NO -> YES
$ sysrc zfs_enable
zfs_enable: YES
$ grep zfs_enable /etc/rc.conf
zfs_enable="YES"

設定書き換え(rc.confからの削除)

zfs_enableをNOに戻すが、/etc/rc.confに記載が残ってしまった。

$ sudo sysrc zfs_enable="NO"
zfs_enable: YES -> NO
$ grep zfs_enable /etc/rc.conf
zfs_enable="NO"
$

このままでも、とうぜん害はないが、-xで指定すれば削除できる。

$ sudo sysrc -x zfs_enable
$ grep zfs_enable /etc/rc.conf
$
$ sysrc zfs_enable
zfs_enable: NO

設定書き換え(新規ソフトウェア)

では/etc/rc.conf, /etc/defaults/rc.confの双方にない変数は?
これも追加できる。
以下はlighttpdの場合。

$ sysrc lighttpd_enable
sysrc: unknown variable 'lighttpd_enable'
$

$ sudo sysrc lighttpd_enable="YES"
lighttpd_enable:  -> YES
$ sysrc lighttpd_enable
lighttpd_enable: YES

$ grep lighttpd /etc/rc.conf
lighttpd_enable="YES"
$

もちろん削除も可能。

$ sudo sysrc -x lighttpd_enable
$
$ grep lighttpd /etc/rc.conf
$
$ sysrc lighttpd_enable
sysrc: unknown variable 'lighttpd_enable'
$

以上