0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LPIC201対策 - システムの起動のカスタマイズ

Posted at

この記事について

Linux Level 2 取得を目標としている筆者です。
先日 Level 1 を取得しましたが、短期詰め込みの暗記がしんどかったので、Level2はじっくり時間をかけていいから、ちゃんと理解してやっていきたい。

一方で、暗記も暗記で重要。

ということで、理解を深めるためにと、暗記しやすいように、両方の目的で、覚えたことを Qiita に整理してまとめながら受験対策することにしました。

この分野で覚えること

大前提の知識

init プログラムと呼ばれるプログラムの中に、以下の3つの種類がある。

名前 説明
SysVinit 古いinitプログラム
/etc/inittabの設定にしたがって起動する
systemd 最近のLinuxの主流
Upstart 初期処理が高速化されている

SysVinitにおける「ランレベル」に相当する概念が、systemdでは「ターゲット」と呼ばれていて、この対応づけがけっこう試験に出る。

SysVinitにおける
ランレベル
systemdにおける
ターゲット
補足
0 poweroff.target
1 rescue.target いわゆるシングルユーザーモード。基本的には、何か障害があったときの調査などで使われるモードなので rescue.target
2〜4 multi-user.target サーバーとして普通に動かす場合のモードはこれ
5 graphical.target GUI
6 reboot.target 再起動用

コマンド

inittab

初期システムとしては、最近のLinux では systemd が主流になっているが、それ以前は inittab が使われていた。

inittab が使われているシステムだと、 /etc/inittab ファイルが存在する。

/etc/inittab の設定書式と例

id:ランレベル:アクション:実行するコマンド

idは必須で、プロセスのジョブ名として認識される。

ランレベルは、アクションが boot, bootwait, sysinit のいずれかの場合は省略されることが多い(書いてあっても無視される)。

# /etc/inittab

id:3:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

# Script to run when going single user.
su:S:wait:/etc/rc.d/rc.single

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon

/etc/inittab のアクションの種別

アクション指定子 意味
initdefault デフォルトランレベルの指定
once 指定ランレベルになった際に、一度だけ処理を実行
wait onceと同様だが、プロセスの終了を待つ
boot★ ブート時に実行する
bootwait★ bootと同様だが、プロセスの終了を待つ
sysinit★ bootと同様だが、より先に実行する(ブート時に最優先で実行)
respawn プロセスが終了しても自動的に再起動

★ ... /etc/inittab の設定のランレベルの指定不要(空欄にしておく)

systemd

Linuxシステムの初期化およびシステム管理プロセスを担当するためのシステムおよびサービスマネージャ。

ユニット

systemdでは、Unit(ユニット)という単位で各種処理が進められる。
ユニットには、以下がある。

ユニット名 説明
device udevによって認識されたデバイス
mount ファイルシステムをマウントする(/etc/fstab から自動生成)
service 各種のサービスを起動・停止する
target ユニットをグループ化するユニット

systemd の設定ファイルを置くディレクトリ

ディレクトリ 中身(格納しているもの) 優先度
/usr/lib/systemd/system または
/lib/systemd/system
(ディストリビューションによる)
永続的なユニット・ターゲットの定義ファイルが置かれる(パッケージのインストールなどで格納先となる)
/run/systemd/system 再起動すると削除されるディレクトリ
/etc/systemd/system カスタム用
起動時に開始するターゲットを定めるdefault.targetはここに置く(通常はシンボリックリンク)

usr/lib/systemd/system が永続的な定義ファイルなので、なんとなく起動時の開始ターゲットもここにあると思ってしまいがちだが、実際は /etc/systemd/system である。

上記のディレクトリを ls すると、以下のようなファイルが入っている

ubuntu@ip-10-0-0-20:/etc/systemd/system$ ls
 chronyd.service                           snap-core20-2015.mount
 cloud-final.service.wants                 snap-core20-2105.mount
 cloud-init.target.wants                   snap-lxd-24322.mount
 dbus-org.freedesktop.resolve1.service     snap-snapd-20290.mount
 dbus-org.freedesktop.timesync1.service    snap-snapd-20671.mount
 emergency.target.wants                    snap.amazon-ssm-agent.amazon-ssm-agent.service
 final.target.wants                        snap.lxd.activate.service
 getty.target.wants                        snap.lxd.daemon.service
 iscsi.service                             snap.lxd.daemon.unix.socket
 mdmonitor.service.wants                   snap.lxd.user-daemon.service
 multi-user.target.wants                   snap.lxd.user-daemon.unix.socket

xxx.target
xxx.service
xxx.wants
xxx.timer
xxx.mount
xxx.socket

起動スクリプト(init)

ファイルの実体

起動スクリプトのファイルの実体は、 /etc/init.d/ 配下に置かれている

ランレベルに応じた起動スクリプトのシンボリックリンク

/etc/rc[0-6].d ディレクトリ配下に、 /etc/init.d/ へのシンボリックリンクが配置されている。

こんな感じ。

ubuntu@ip-10-0-0-20:/etc/rcS.d$ ls
K01iscsid      S01cryptdisks         S01kmod          S01procps          S01ufw
K01open-iscsi  S01cryptdisks-early   S01lvm2          S01screen-cleanup
S01apparmor    S01keyboard-setup.sh  S01plymouth-log  S01udev

例えば上記の K01iscsid の場合、実体は /etc/init.d/iscsid である。

スクリプトの先頭のKは Kill, S は Start を意味する。

スクリプトは K -> S の順で実行され、各アルファベットの後に続く2桁の数字が少ない順に実行される。

数字も同じ場合は、そのあとに続くアルファベット順に実行される。

update-rc.d コマンド

バージョン6.0より前のDebian系ディストリビューションで、各種サービスを自動起動するかどうかの設定を行う。

コマンド例

文法
update-rc.d [オプション] サービス 操作 [優先度] [ランレベル - 複数の場合はスペース区切りで、最後に.(ドット)]
# S25crond を /etc/rc{3,5} に作ってね
update-rc.d crond start 25 3 5 .

操作の選択肢

操作 説明
start Sで始まるリンクを作る
stop Kで始まるリンクを作る
defaults ランレベルに応じて、SかKで始まるリンクを作る
remove [-f] リンクを削除する
(-fをつけると強制)

「自動起動しないように設定」する場合は stop の操作では足りない(ランレベルを抜けたときに kill するだけだから)
-> この場合は、 remove -f によってSで始まるリンクを削除する対応が必要。

chkconfig コマンド

RedHat系の6.xまでのディストリビューションで、各種サービスを自動起動するかどうかの設定を行う。

設定コマンド

chkconfig [--level ランレベル] サービス on|of|reset

ランレベル は --level 234 のように複数指定することも可能、省略も可能。

確認コマンド

chkconfig --list [サービス]

自動起動するかどうかを設定するコマンド

insserv

SUSE 系やバージョン 6.0 以降の Debian 系ディストリビューションで利用される。

使い方↓

その他の暗記事項

以上!

勉強が進んだら適宜追記・修正などしていきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?