CentOS 7でinittabはどこへ消えた?
|題名は「チーズはどこへ消えた」のオマージュなので、実際には/etc/inittabはCentOS 7でも存在します。
さて、CentOS 7(RHEL7)といえばsystemdへの移行が大きなトピックですな。「ふん。そんなもん気にしないで漢はだまってrc.localさ」というのもステキ! 濡れるッ! と思います。ちなみにCentOS 7でもrc.localはありますが、 It is highly advisable to use systemd… な上に、/etc/rc.d/rc.localの実行パーミッションが落とされているので、
# chmod +x /etc/rc.d/rc.local
してから使いましょう。お兄さんと約束だ。いや、そろそろ年貢の納め時だろ…。systemd覚えようね。たいしたことないから。ちなみに赤帽の方が書いてくださったわかりやすいスライドは以下にあります:
でもね…。ちょっとほっといたら強制的にGUIモードでインストールされたCentOS 7見て、お兄さん思ったんだけどね…。ぼくぁ、 ランレベル5=GUIでUNIX使わない人なんだよね…。ランレベル3=CUIを起動時デフォルトにしたい よ。
だからsystemd移行で重要なのはサービス管理方法じゃなくて、 ランレベルの変更方法 なんじゃないかな。などと勝手なことを思ったよ。で、勉強会とかではあんまり触れられてないのね。たぶん、みんなGUI好きだから?
systemdにはランレベルなんざねーよ
でも、initがなくなったので当然ランレベルなんてありません! あたかもホモが嫌いな女子なんていない真理がごとく。
といっても、互換性重視なのでこんなことはちゃんとできます:
# telinit 3 ← ランレベルを3に落とす
# telinit 5 ← もういちどランレベルを5に上げる
いっぽうで、/etc/inittab を読むと
inittab is no longer used.
(諸君らの愛したinittabは死んだ!)
って書いてある。坊やだから? じゃあ起動時のランレベルはどう指定すんの!
代わりに「ターゲット」を使う
なので、完全にあきらめてsystemdの「ターゲット」の概念を今後は使いましょう。ターゲットが何かって言うと、
- systemdのサービス設定ファイルの中で「WantedBy」として書かれていた「multi-user.target」みたいなやつ
- ランレベルが単細胞生物だとしたらそれを多細胞生物ばりに進化させたような概念で、ランレベルより多くの状態を細かくつくれる
ものです。なんで「target」なのかは知らない。日本人としては「state」のほうがしっくりする気が。
どんなターゲットがあるかは/lib/systemd/system/*.targetとして定義されている。…ぼくの手元では56個もある。「サスペンドしたとき」「umountしたとき」「悲しいとき」などなど。で、懇切丁寧なことにこいつらの中に旧ランレベル相当のtarget設定が用意されている! なので「起動時はこのtargetの状態にしてね!」と指定すればOK!
ターゲットの一覧と設定方法
ということで、いにしえのランレベルに相当するターゲットをリストアップしてみる。
ランレベル | ターゲット名(互換) | systemdっぽいターゲット名 |
---|---|---|
0 | runlevel0.target | poweroff.target |
1 | runlevel1.target | rescue.target |
2 | runlevel2.target | multi-user.target |
3 | runlevel3.target | multi-user.target |
4 | runlevel4.target | multi-user.target |
5 | runlevel5.target | graphical.target |
6 | runlevel6.target | reboot.target |
ていねいなことにrunlevel[0-6]として互換ぽい名前のターゲットが用意されている。実態は右端のsytemdっぽいターゲットのsymlinkなんだけど、当面はわかりやすいようにrunlevel[0-6]を使っていきたい気がする。
で、具体的に「ノングラフィカルなマルチユーザーモードで起動させる方法」なんだけど、runlevel3.targetで起動するように指定してやればいい。コマンドラインから、
# ln -sf /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
とするだけ。GUIで起動していた人は、/etc/systemd/system/default.targetが/lib/systemd/system/graphical.targetになっていたというカラクリだったんだね。
で、reboot してちゃんとCUIで起動したら成功! おつかれさまでした!