14 March 2009

(Linux) Ubuntuで不要なサービスをsysv-rc-initで無効化する

RHELのchkconfigコマンドの同等機能を実現する、Debian系(Ubuntu)のsysv-rc-initコマンド。
パッケージ名の検索


root@localhost:~# apt-cache search sysv-rc
sysv-rc - System-V ライクなランレベル変更機構
sysv-rc-conf - 端末用 SysV init ランレベル設定ツール

パッケージのインストール


root@localhost:~# apt-get install sysv-rc-conf

オプションなしで起動すると、メニュー方式でサービスをON/OFFするモードで起動する。ここにはすべてのサービスが表示されているわけではないので、より詳細に制御する場合は次のようにする。


sysv-rc-conf --list
sysv-rc-conf [サービス名] on
sysv-rc-conf [サービス名] off

このコマンドで行っているのは、(ランレベル2の場合であれば) /etc/rc2.d/ ディレクトリにある起動スクリプトへのリンクファイルの先頭文字を、「S」(有効)←→「K」(無効)と切り替えているだけだ。

例えば、「S20postfix」(サービス有効)と「K20postfix」(サービス無効)という風に…。

■ Ubuntu 8.10で不要なサービスと思われるもの

サービス 説明
(apport) クラッシュ時のバグレポートを作成する。
avahi-daemon mDNSプロトコルで、ネットワーク内のマシンを接続(発見)する。

(Mac OSを用いたローカルネットでないなら無効化)
bluetooth (Bluetoothを用いないのであれば無効化)
cups UNIX Printig System。
(プリンタ及びPDFプリンタを利用しないなら無効化)
dns-clean PPP接続前にDNSキャッシュをクリア。
(PPP接続を使っていないなら無効化)
hotkey-setup ノートPCでのホットキーのキーコード設定。
(アプリケーションキーを使わないなら無効化)
laptop-mode ハードディスクが未使用時に回転を落とすツール。
(ハードディスクを回転させたままでよいなら、無効化)
pppd-dns PPP接続前にresolv.confを再適用。
(PPP接続を使っていないなら無効化)
rsync rsyncファイルコピープログラム。
(ファイルのバックアップにrsyncコマンドを使うつもりがないなら無効化)
speech-dispatcher スピーチ・シンセサイザ。
(スピーチ・シンセサイザを使わないなら無効化)
usplash 起動時・シャットダウン時のスプラッシュ スクリーン表示。
(スプラッシュ スクリーンが必要無ければ無効化)

■ /etc/init.d/ 内のリンクを消してしまう(update-rc.dコマンド)


# update-rc.d -f [サービス名] remove

この処理で、例えばランレベル2の起動スクリプトであれば、/etc/rd2.d/にある[サービス名]のスクリプトが削除される。サービスを再度復活するには、「update-rc.d サービス名 defaults」というコマンドでよいのだが、元あったスクリプト起動順序と完全に同一というわけでも無いようである…

できれば、sysv-rc-initコマンドを用いて、スクリプトの名称の最初の文字を「K」に変更するだけに止めた方が安全だろう。(と、個人的には思う)

■ 起動時スプラッシュスクリーンの無効化(Ubuntu 8.04)

なお、usplash を無効化するだけでは起動時・シャットダウン時のスプラッシュスクリーンは表示されてしまう。完全にテキストベースで起動状況を表示させるには、GRUBのカーネルパラメータの splash スイッチを削除する。 (高解像度で表示させるには、vgaスイッチを付加する。1024*768の時はvga=773、1280*1024の時はvga=775など)


kernel /boot/vmlinuz-2.6.27-11-generic root=UUID=xxxxxx ro quiet splash

kernel /boot/vmlinuz-2.6.27-11-generic root=UUID=xxxxxx ro quiet vga=773

■ avahi-daemon無効化(Ubuntu 9.10)
『sysv-rc-conf avahi-daemon off』と『insserv -r -f avahi-daemon』ではこのサービスを無効化できなかったので、設定ファイルを強制的に書き換えて、起動しないようにした。

/etc/init/avahi-daemon.conf

description "mDNS/DNS-SD daemon"

#start on (filesystem ← 無理やりコメントアウト
# and started dbus)
stop on stopping dbus

expect daemon
respawn

exec avahi-daemon -D

■ その他参考資料

起動スクリプトのON/OFFを切り替えるデフォルトのプログラムは insserv で、/etc/rcn.d/ のシンボリックリンクを操作できる。なお、Ubuntuのデフォルトのランレベルは「2」(/etc/init/rc-sysinit.conf で設定されている)なので、通常は /etc/rc2.d/ 内のシンボリックリンクを確認すること。


insserv [サービス名]
insserv -r [サービス名]

エラーがありサービスがどうしても削除できない時は

insserv -r -f [サービス名]

■ Upstart

SysVからUpstartへ、徐々に切り替わりつつあるため、この記事で説明しているSysV制御方式はそのうち使えなくなるはず。あるいは非常識になるはず。

■ Ubuntu 10.04でのサービス (2010年6月21日追記)

以下、現在編集中。

init (upstart) 系の一覧取得方法


# initctl list

あるサービスを無効化する場合、依存するサービスを調べる方法の例。ここで検索された各行について検討すればよい。


# grep /etc/init.d/* /etc/init/* -e [サービス名]

サービス名sysv
標準
sysv
変更
init
標準
init
変更
acpi-support2:on2:on
acpid2:on2:on
alsa-mixer-save
anacron
apache22:on2:on
apparmorS:onS:on
apport
atd2:on2:on
avahi-daemon2:on2:on
binfmt-support2:on2:on
bluetooth2:on2:off
bootlogd
brlttyS:onS:on
clamav-freshclam2:on2:on
console-setup
cron2:on2:on
cups2:on2:on
dbusONON
dmesg
dns-clean2:on2:off
failsafe-x
fancontrol2:on2:on
gdmONON
grub-common2:on2:on
halt
havp2:on2:on
hddtemp2:on2:on
hostname
hwclock
hwclock-save
irqbalance
kerneloops2:on2:on
killprocs
lm-sensorsS:onS:on
module-init-tools
network-interface(*)ONON
network-interface-securityONON
network-managerONON
networkingONON
nmbdONON
ondemand2:on2:on
pcmciautilsS:onS:on
plymouth
plymouth-log
plymouth-splash
plymouth-stop
postfix2:on2:on
pppd-dns2:on2:off
procps
pulseaudio2:on2:on
rc.local2:on2:on
reboot
rsync2:on2:off
rsyslogONON
saned2:on2:off
saslauthd2:on2:on
screen-cleanS:onS:on
sendsigs
single
smartmontool2:on2:on
smbdONON
speech-dispatcher2:on2:off
stop-bootlogd
stop-bootlogd-single
tty12:on2:on
tty22:on2:on
tty32:on2:on
tty42:on2:on
tty52:on2:on
tty62:on2:on
udevONON
udev-finish
udevmonitor
udevtrigger
ufwONON
umountfs
umountroot
unattended-u
upstart-udev-bridgeONON
urandomS:onS:on
vmware2:on2:on
wpa-ifupdown
x11-commonS:onS:on