So-net無料ブログ作成

systemdの使用方法 [openSUSE]

openSUSE 12.1 で導入された systemd について、情報をまとめてみた。
(大部分は Fedora 等の他のディストリビューションでも同様と思われる。)

1. systemd での変更内容


(1) サービス


systemd では、サービスはユニットという概念に含まれる。


(2) ランレベル


systemd では、ランレベルはターゲットという概念に変更された。

(例)
run level 3: multi-user.target (またはrunlevel3.target.wants)
run level 5: graphical.target (またはrunlevel5.target.wants)


(3) サービスの定義


/lib/systemd/system/<service-name>.service
または
/etc/systemd/system/<service-name>.service
に定義する。

・/etc/systemd/system の方が優先される。
・<service-name>.service がユニット名である。
・通常は、/etc/systemd/system の方を編集する。


(4) デフォルト・ターゲットの設定


/etc/systemd/system/default.target をシンボリックリンクとして作成する。

(例)
# cd /etc/systemd/system
# ln -s /etc/systemd/system/runlevel3.target default.target
または
# ln -s /etc/systemd/system/multi-user.target default.target
(runlevel3.target は multi-user.target へのシンボリックリンクである。)

2. ユニットの起動/停止


(1) 起動

# systemctl start <unit-name>


(2) 停止

# systemctl stop <unit-name>


(3) 再起動

# systemctl restart <unit-name>

3. ユニットの自動起動の設定


(1) 自動起動の有効化

# systemctl enable <unit-name>


(2) 自動起動の無効化

# systemctl disable <unit-name>


(3) ユニットの追加

# systemctl load <unit-name>
(chkconfig --add に相当)


(4) ユニットの無効化


/etc/systemd/system 内に定義ファイルを /dev/null へのシンボリックリンクとして作成する。

(例)
# cd /etc/systemd/system
# ln -s /dev/null ctrl-alt-del.target


(5) どのターゲットで自動起動するかの指定


定義ファイルの [Install] 欄の WantedBy に設定する。


(6) ターゲット毎の自動起動するユニット


/lib/systemd/system/*.target.wants
および
/etc/systemd/system/*.target.wants
を参照する。


4. ユニットの状態の表示


(1) 指定したユニットの状態の表示

# systemctl status <unit-name>


(2) 指定したユニットが稼働中かどうかの確認

# systemctl is-active <unit-name>


(3) 指定したユニットが有効かどうかの確認

# systemctl is-enabled <unit-name>


(4) 指定したユニットの設定内容の表示

# systemctl show <unit-name>

5. ユニットの一覧表示


(1) 起動されているユニットの一覧

# systemctl
または
# systemctl list-units [pattern]


(2) 起動されていないユニットを含めた一覧

# systemctl --all
(--all は -a でも可)


(3) 起動に失敗したユニットの一覧

# systemctl --failed


(4) 指定したユニットタイプのみの一覧

# systemctl -t <unit-type>
(例) systemctl -t service


(補足)
指定可能なオプション
--no-pager: ページャーを使用しない。
--full: ユニット名の省略表示を行わない(default: 長い場合は省略表示される)。


6. システムの起動時間に関する情報の表示


(1) システムの起動時間の表示

# systemd-analyze


(2) システムの起動時間の詳細表示

# systemd-analyze blame

7. 備考


(1) 環境変数


環境変数 SYSTEMD_PAGER で使用するページャーを指定できる。
SYSTEMD_PAGER が定義されていない場合、PAGER が使用される。

ページャーを使用したくない場合には、下記のように設定する。

# export SYSTEMD_PAGER=""
または
# export SYSTEMD_PAGER=cat


(2) 参考資料


http://opensuse-man-ja.berlios.de/opensuse-html/cha.systemd.html


gettyのプロントの表示前に画面をクリアしないための設定 [openSUSE]

openSUSE 12.1 では systemd から agetty が起動されるが、getty のプロンプトの表示前に画面がクリアされてしまう。以下は、tty1 (ブート時のコンソール) について、getty のプロンプトの表示前に画面をクリアしないようにするための手順である。

1. /etc/systemd/system/getty@tty1.service の作成
# cd /etc/systemd/system
# cp -p /lib/systemd/system/getty@.service getty@tty1.service

2. /etc/systemd/system/getty@tty1.service の変更


(1) ExecStart= 行の agetty の引数の先頭に --noclear を追加する。


agetty による画面のクリアを抑制する。


(2) TTYVTDisallocate=yes を TTYVTDisallocate=no に変更する。


systemd による画面のクリアを抑制する。


3. /etc/systemd/system/getty.target.wants/getty@tty1.service の変更
# cd /etc/systemd/system/getty.target.wants
# mv getty@tty1.service getty@tty1.service.org
# ln -s ../getty@tty1.service .

4. 参考資料


https://bugzilla.redhat.com/show_bug.cgi?id=828007



openSUSE 12.1へのアップデート(2) [openSUSE]

1. 対応できていなかった不具合への対応


(1) ブート直後のコンソールに getty のプロンプトが表示されない件への対応


【対処方法】
/etc/init.d/boot.local の最後に下記の設定を追加する。

# patch for getty@tty1.service (on openSUSE 12.1)
sleep 5


(2) ブート時にソフトウェア raid が異常な状態となることへの対応


【対処方法】
/etc/init.d/boot.local に下記の設定を追加する。

# patch for md.service (on openSUSE 12.1)
mdadm -S -s
mdadm -A -s
または
mdadm -S -s <device_path>
mdadm -A -s <device_path>


(3) ブート時に /tmp ディレクトリ内のファイルが削除されないことへの対応


【対処方法】
/etc/tmpfiles.d/clear-tmp.conf を作成し、下記の設定を行う。

D /tmp 1777 root root 1s

2. 新たな不具合への対応


(1) /var/log/boot.msg が更新されない。


【発生事象】
ブート時に /var/log/boot.msg が更新されない。

【対処方法】
klog.service の自動起動を有効化した後、リブートする。

# systemctl enable klog.service
# shutdown -r now


(2) gnome-3.2 が使いづらい。


普段は fvwm2 を使用しているが、gnome-3.2 を試したところ、(gnome-2 と比較して)非常に使いづらいと感じられた。また、下記の対応により、少し使いやすくなった。

・強制フォールバックモードを選択し、GNOME-2 と同様の I/F に変更。
・パネルへの引き出しの追加ができないため、メインメニューへの項目の追加で対応。


[追記]


openSUSE 12.1へのアップデート [openSUSE]

openSUSE 11.4 から 12.1 へのアップデートを行った。
詳細は、下記の通りである。

1. アップデート


openSUSE 11.x の live upgrade と同様の手順で、アップデートが可能である。
(1000 個余りのパッケージが更新された。)


2. アップデート後の不具合


(1) ブート直後のコンソールに getty のプロンプトが表示されない。


【発生事象】
エンター・キーを押下しないと getty のプロンプトが表示されない。

【対処方法】
現時点では不明である。


(2) /etc/init.d/after.local が実行されない。


【発生事象】
ブート時に /etc/init.d/after.local が実行されない。

【対処方法】
/etc/init.d/boot.local を使用する。
(ネット上には、systemd に after-local.service を登録する方法が公開されているが、上記の方法で十分対応可能と思われる。)


(3) ブート時に /tmp ディレクトリ内のファイルが削除されない。


【発生事象】
/etc/sysconfig/cron の CLEAR_TMP_DIRS_AT_BOOTUP="yes" が有効にならない。

【対処方法】
取り敢えずの対応として、下記の設定を /etc/init.d/boot.local に追加する。

find /tmp -mindepth 1 ! -name .\*-unix -exec rm -fr {} \;


(4) /dev/mixer が存在しない。


【発生事象】
/dev/mixer が存在しないため、OSS のミキサーを使用できない。

【対処方法】
/etc/init.d/boot.local に下記の設定を追加する。

modprobe snd_mixer_oss
modprobe snd_seq_oss


(5) ブート時にソフトウェア raid が異常な状態となることがある。


【発生事象】
ブート時に一部の md が inactive、または md を構成するパーティションの一部が使用できない状態となってしまうことがある。
・md.service が failed となる。
・上記の md は、システムの起動には関係ないパーティションを使用している。

【対処方法】
現時点では不明である。


3. 備考


(1) 上記の不具合は、いずれも systemd に関係する。

(2) openSUSE 12.x の内容の充実、および systemd 関連の情報の充実を待とうと思う。



tmpfsの最大サイズの変更 [openSUSE]

openSUSE 11.4 の初期設定では、tmpfs(/dev/shm にマウントされる)の最大サイズは物理メモリ量の 50% となる。
以下の手順により、最大サイズの変更や無効化が可能である。

1. 最大サイズの変更


/etc/fstab に /dev/shm のエントリを追加し、size オプションを指定する。
(ブート時に /dev/shm を -o remount でマウントするため、設定が反映される。)
例えば、物理メモリ量の 25% としたい場合には、下記のように設定する。

tmpfs	/dev/shm	tmpfs	defaults,size=25%	0 0

2. 無効化


/etc/rc.d/after.local に下記の設定を追加する。

# disable to use tmpfs as /dev/shm
if mount | grep /dev/shm >/dev/null 2>&1; then
	umount /dev/shm
fi


なお、/dev/shm にファイルを作成しない限りメモリは消費されないため、/dev/shm にファイルを作成しないようにするだけで実質的には目的を達成できる。



ivtvモジュールのロード時のエラーの解消 [openSUSE]

openSUSE 11.4 において、ivtv モジュールのロードが頻繁に失敗していた。
原因は、カーネルパッケージのバグのためである。
https://bugzilla.redhat.com/show_bug.cgi?id=662384
https://lkml.org/lkml/2011/4/1/168

kernel-default-2.6.38.8-2.1 に更新することにより、改善された。
実施した手順は、下記の通りである。

1. パッケージの検索


http://software.opensuse.org/search/ にアクセスする。
・検索ボタンの右側のアイコンをクリックし、openSUSE 11.4 を選択する。
・検索欄に kernel と入力し、検索ボタンをクリックする。


2. パッケージのダウンロード


・使用するパッケージを選択する(例えば、kernel-default)。
・[他のバージョンを表示] をクリックする。
・[Show unstable packages] をクリックする。
・kernel-default-2.6.38.8-2.1.i586.rpm を選択し、ダウンロードする。


3. パッケージのインストール
# rpm -Uvh kernel-default-2.6.38.8-2.1.i586.rpm

[追記]


ivtvモジュールのロードでエラーが発生 [openSUSE]

openSUSE 11.4 において、ivtv モジュールのロード時にエラーが発生する。

1. 発生事象


下記の環境において、ivtv のロード時にエラーが発生し、/dev/video* が生成されない。
・ivtv-1.4.0-4.1.i586
・ivtv-firmware-1.4.0-4.1.i586
・kernel-default-2.6.37.*.i586


2. 対処方法


完全に解決できる方法ではないが、下記の手順を実施することにより、発生する頻度をかなり低くできる(kernel-default-2.6.37.6-0.9.1.i586 で確認)。
また、上記事象が発生した場合には、最大でも 2 度リブートすれば、正常にロードされる。
(上記事象が発生した場合には、コンソールに "Killed    modprobe ivtv" と出力される。)


 (1) /etc/modprobe.d/50-blacklist.conf への設定の追加
blacklist ivtv

 (2) /etc/init.d/after.local への設定の追加
modprobe ivtv

openSUSE 11.4 へのアップグレード [openSUSE]

openSUSE 11.4 がリリースされたので、openSUSE 11.3 からの Live アップグレードを実施した。

1. Live アップグレード
 Live アップグレードは openSUSE 11.3 の場合と同じ手順で特に問題なく終了した。

2. アップグレード後の対応
 何点か不具合が発生したため、以下の対応を行った。
 使用できる状態にはなったが、細かな問題が残っているため、しばらく様子を見ようと思う。

 (1) metacity(metacity-2.30.3-6.2.i586) のバージョンダウン


[Alt + 半角/全角] が [ウィンドウの前面への移動] にバインドされ、通常の方法では解除できなかったため、openSUSE 11.3 のパッケージに変更した。

# rpm --oldpackage -Uvh metacity-2.30.1-3.1.i586.rpm \
metacity-lang-2.30.1-3.1.noarch.rpm

 (2) カーネル(kernel-default-2.6.37.1-1.2.2.i586) のバージョンダウン


ivtv モジュールのロードが正常終了せず、/dev/video0 が作成されなかった。
(何度かリブートを実行しても、状況は変わらなかった。)
また、カーネルをアップデートしても改善されなかった。
(http://software.opensuse.org/search/ で検索されたカーネルを使用。)
このため、openSUSE 11.3 のパッケージに変更した。
(上記モジュールのロード時に kernel panic を発生することがある。)

# rpm --oldpackage -Uvh kernel-default-2.6.34.8-31.1.i586.rpm

 (3) syslog-ng(syslog-ng-3.2.2-5.1.i586) の設定変更


syslog-ng.conf の stats_freq の設定が反映されず、statistics の出力が頻繁に実施されてしまうため、statistics の出力を無効化した。

stats_freq(0);


grub 内の gfxmenu の設定 [openSUSE]

openSUSE 11.3 上の grub の gfxmenu に関して、これまでに実施したことのメモである。

1. パーティションの変更等による grub の再設定時に gfxmenu が無効となることへの対応
(1) /boot/grub 以下を保存する。

 grub の設定を変更する前に、/boot/grub 以下のコピーを作成する。

(2) gfxmenu の使用を意識せず、grub の設定を変更する。

 ・/etc/grub.conf、/boot/grub/menu.lst の編集
 ・grub のインストール(--root-directoryオプションの使用等)

(3) gfxmenu の設定を復元する。

 ・新しい環境の openSUSE を起動する(この時点では、gfxmenu が無効となっている)。
 ・保存しておいたファイルから、/etc/grub.conf、/boot/grub/menu.lst 以外を復元する。
 ・grub-install.unsupported を実行する。
 ・システムを再起動し、gfxmenu が有効となっていることを確認する。
  (復元された後に、/boot/grub を保存していたファイルを削除する。)

2. クリスマスが過ぎてもクリスマス仕様の背景が表示され続けたことへの対応
(1) /boot/message から gfxboot.cfg を取り出す。
# cp -p /boot/message /tmp
# mkdir /tmp/NEW
# cd /tmp/NEW
# cpio -idv < ../message

(2) gfxboot.cfg を編集する。
# diff gfxboot.cfg gfxboot.cfg.org
22,23c22
< ;penguin=-1
< penguin=0
---
> penguin=-1

(3) /boot/message を更新する。
# ls | cpio -ov > ../message
# cd /boot
# mv message message.sav
# mv /tmp/message .

~/.xinitrc に設定した 'xset -b' が機能しない件への対応 [openSUSE]

1. 発生事象


openSUSE 11.3 において、~/.xinitrc に設定した 'xset -b' が機能しない。適当な箇所で 'xset -q' の実行結果を出力させたところ、'xset -b' の実行直後は有効で、その後に無効化される(初期値の 50% に戻る)。

X のパッケージは、下記の通りである。
- xorg-x11-server-7.5_1.8.0-10.3.1.i586
- xorg-x11-7.5-11.3.i586


2. 対処方法


xinit および startx の実行時に、オプションとして -- -f 0 を指定する。
(ベル音を 0% に設定する。)

ただし、CentOS 5.5、Debian GNU/Linux 5.0.7 (どちらもベル音の初期値は同じ)では発生しないため、本質的な原因は他にあるのかも知れない。