« OpenGL系のダウングレード | トップページ | SNAの有効化方法 »

2012/10/18

systemd への移行

もう2ヶ月以上前になると思いますが、Arch linux でinitscripts からsystemd への移行がオフィシャルになりました。これにより/etc/rc.conf の記述内容に大幅な変更が必要となり、必要な設定ファイル、処置もありました。まとめとかないと再インストール時に死にそうなので、そろそろまとめておくことにします。
ちなみに自分は時間が取れなくて1ヶ月程旧rc.conf そのままで動かしていたのですが、10秒程度だった起動時間が1分近くになってました。もっともほとんどスリーブしかしないため、気にならなかったから放置していたのですが。

自分は完全にsystemd に移行はさせず、initscripts 系も一応残しました。rc.local の記述変えるのが面倒だったからですが、それ以外は移行できている(はず)なので、そのうち完全にsystemd のみにするかもしれません。
  1. 必要な設定ファイルの用意
  2. ほとんど新規作成です。まず/etc/hostname
    myhostname
    値は、/etc/rc.conf のHOSTNAME=myhostname に書かれていたもの。

    /etc/locale.conf
    LANG=ja_JP.utf8

    /etc/vconsole.conf
    KEYMAP=jp106

    /etc/modules-load.d/cpufreq.conf
    acpi_cpufreq

    /etc/modules-load.d/virtualbox.conf
    vboxdrv
    最後に/etc/rc.conf から# LOCALIZATION のセクションを丸ごと削除します(この時点では自分はコメントアウトしただけでしたが)。

  3. systemd のインストール
  4. sudo pacman -S systemd

  5. grub2 のカーネルオプション変更
  6. /etc/default/grub を開き、init=/usr/lib/systemd/systemd を追加。
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/usr/lib/systemd/systemd i915.modeset=1"
    sudo grub-mkconfig -o /boot/grub/grub.cfg
    終わったら、reboot し、正常に動作することを確認します。

  7. DAEMON 行のdaemon 達がsystemd に対応しているか確認
  8. systemctl is-enabled daemonname.service
    で既に有効化されているか確認します。enabled が返って来れば何もする必要なし。
    そもそもservice が見つからない場合には、systemd への完全移行は出来ないです。もっともそんなはぐれdaemon ないと思いますが。自分の場合には、全てenabled になっていたので、/etc/rc.conf のDAEMONS 行は空になりました。
    有効になっていないdaemon がある場合enable にするには、
    systemctl enable daemonname.service
    disable にすれば自動起動しなくなります。再起動無しに動作確認するなら start、stop も使えます。
    結局/etc/rc.conf は以下のように非常にシンプルになりました。
    #
    # /etc/rc.conf - configuration file for initscripts
    #
    # Most of rc.conf has been replaced by various other configuration
    # files. See archlinux(7) for details.
    #
    # For more details on rc.conf see rc.conf(5).
    #
    # DAEMONS
    # --------
    DAEMONS=()
    
    # NETWORKING
    # ----------
    interface=eth0
    address=
    netmask=
    broadcast=
    gateway=
  9. sysvinit の削除
  10. sudo pacman -S systemd-sysvcompat
    sysvinit を削除して良いか聞かれます。
    最後に/etc/default/grub を再度開き、上で追記したinit= 箇所を削除。
    余談ですが、いつの間にやら/etc/grub.d/00_header にUEFI 系の設定が追加されていて、UEFIを使用していない自分の環境ではそれが正常に動作してませんでした。面倒なので、不要な設定をコメントアウトしてしまいます。
      if [ x\$feature_all_video_module = xy ]; then
        insmod all_video
      else
    #    insmod efi_gop
    #    insmod efi_uga
    #    insmod ieee1275_fb
        insmod vbe
        insmod vga
    #    insmod video_bochs
    #    insmod video_cirrus
      fi
    
    最後にgrub2 のメニューを作成。
    sudo grub-mkconfig -o /boot/grub/grub.cfg
  11. systemd でサスペンドを無視するように設定
  12. デフォルトだとsystemd でもACPIのサスペンドイベントを捕まえてサスペンドやら、パワーオフやらをやろうとしてくれます。完全に動作してくれれば今までのハンドラ全部捨ててsystemd に移行してもいいんだけど、まだ足りない箇所があって完全移行するのは問題ありな感じです。
    で、今までのハンドラをそのままにしてsystemd もデフォルト動作の場合、サスペンド後にウェイクアップさせた途端に再度サスペンドがかかる・・・という悲しい動作をしてくれます。防止するにはsystemd か今までのハンドラのどちらかを無効にする必要があります。上で書いたようにsystemd の方はまだ能力不足なので(しかもpm-utility の設定を全部移すのが面倒だし)、systemd の動作を無効にします。
    /etc/systemd/logind.conf を開き、コメントアウトしてあるキーをアンコメントアウトした上でignore に変更します。
    HandleHibernateKey=ignore
    HandleSuspendKey=ignore
    HandleHibernateKey=ignore
    HandleLidSwitch=ignore
    保存して再起動すればOK。

sysytemd はbootchart2 のサポートや独自のreadahead を持ってたりと遊べる機能も盛り沢山ですね。起動は以前と変わらず8〜9秒です。元々高速なのでbootchart 見ても以前より速いのかどうなのかは良くわからないですね。微妙に速いと言えなくもない・・・という感じでしょうか。

驚いたのは重いと思っていたGnome3 もEnlightenment と1秒程度しか変わらない速度で起動することで・・・。systemd の力なのかGnome3 が知らない間に超高速起動出来るようになったんでしょうか。
CPU負荷は起動した時点で低レベルに戻っているEnlightenment と比べて3〜4秒位高負荷状態が続くので重いのは間違い無いですけど、随分高速化されたなぁと。UnityなUbuntu も最近は15秒とかかからないのでしょうか。

« OpenGL系のダウングレード | トップページ | SNAの有効化方法 »

Arch Linux」カテゴリの記事

コメント

ありがとうございます。

当方、初心者なもので、先日、いつものようにアップデートをした所、一般ユーザーでUSBがマウントされなくなって青ざめておりましたが、こちらの情報を行いましたら、ようやくUSBがマウントされる様になりました。有り難う御座居ます。

どもども。こんなものでもお役に立てたなら嬉しいです。
最近忙しくてコメントもあまり見ていない更新者を許して下さいまし。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/28800/55904654

この記事へのトラックバック一覧です: systemd への移行:

« OpenGL系のダウングレード | トップページ | SNAの有効化方法 »