Linux alternatives で選択できる項目を作る

超久々で、はてな記法なんかを忘れてます。

最近のRedhatLinuxでは、alternativesコマンドでイロイロ切り替えられるようになってます。が、ソースコードから自分でインストールした場合なんかは、自分で登録しないと使えません。しかも、インストール時に工夫が必要です。

今回は、自分でインストールしたPostfixを登録することにします。

まず、Postfixのビルドはマニュアルを見ながら何とか片付けて、インストールの段階でパスを聞かれるので、バイナリ等のパスはそれぞれ、○○.postfixなんかで設定してインストール。終わったら、本題に入ります。
RPMPostfixが入ってる場合は不要)

超簡単。

[root@hatena hatena]# /usr/sbin/alternatives --install /usr/sbin/sendmail mta /usr/sbin/sendmail.postfix 30
                --install [バイナリのシンボリックリンク名][名前][指定したいバイナリ本体][優先度]

「/usr/sbin/sendmail として、mta という名前の、/usr/sbin/sendmail.postfix を 優先度30 でセット」という意味になります。じゃあ、登録したヤツを確認してみます。確認は、--display [名前] でOK。

[root@hatena hatena]# /usr/sbin/alternatives --display mta
mta - status is manual.
 link currently points to /usr/sbin/sendmail.sendmail
/usr/sbin/sendmail.sendmail - priority 90
 slave mta-pam: /etc/pam.d/smtp.sendmail
 slave mta-mailq: /usr/bin/mailq.sendmail
 slave mta-newaliases: /usr/bin/newaliases.sendmail
 slave mta-rmail: /usr/bin/rmail.sendmail
 slave mta-sendmail: /usr/lib/sendmail.sendmail
 slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
 slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: (null)
 slave mta-mailq: (null)
 slave mta-newaliases: (null)
 slave mta-rmail: (null)
 slave mta-sendmail: (null)
 slave mta-mailqman: (null)
 slave mta-newaliasesman: (null)
 slave mta-aliasesman: (null)
 slave mta-sendmailman: (null)
Current `best' version is /usr/sbin/sendmail.sendmail.

sendmail本体とともに切り替えられるバイナリ等が未設定です。このままだと、不完全にしか切り替えられないので、スレーブとして、利用するバイナリ等を指定してやる必要があります。とりあえず今インストールしたヤツは、いったん削除。

[root@hatena hatena]# /usr/sbin/alternatives --remove mta /usr/sbin/sendmail.postfix
                           [名前] [削除したい項目のバイナリ本体]

スレーブは、--install節の後ろに、--slaveとして設定します。--slave節は--install節と同じ書き方です。

[root@hatena hatena]# /usr/sbin/alternatives --install /usr/sbin/sendmail mta /usr/sbin/sendmail.postfix 30 \
    --slave /etc/pam.d/smtp mta-pam /etc/pam.d/smtp.postfix \
    --slave /usr/bin/mailq mta-mailq /usr/bin/mailq.postfix \
    --slave /usr/bin/newaliases mta-newaliases /usr/bin/newaliases.postfix \
    --slave /usr/bin/rmail mta-rmail /usr/bin/rmail.postfix \
    --slave /usr/lib/sendmail mta-sendmail /usr/lib/sendmail.postfix \
    --slave /usr/share/man/man1/mailq.1.gz mta-mailqman /usr/local/man/man1/mailq.1.gz \
    --slave /usr/share/man/man1/newaliases.1.gz mta-newaliasesman /usr/local/man/man1/newaliases.1.gz \
    --slave /usr/share/man/man5/aliases.5.gz mta-aliasesman /usr/local/man/man5/aliases.5.gz \
    --slave /usr/share/man/man8/sendmail.8.gz mta-sendmailman /usr/local/man/man1/sendmail.1.gz

(なんかpostfixのデフォルトでインストールされるmanファイルは圧縮されてませんでしたので、自分で圧縮してます。)

こんな感じで登録してやると、自動切り替えのほかのヤツもきちんと設定されます。

[root@hatena hatena]# /usr/sbin/alternatives --display mta
mta - status is manual.
 link currently points to /usr/sbin/sendmail.sendmail
/usr/sbin/sendmail.sendmail - priority 90
 slave mta-pam: /etc/pam.d/smtp.sendmail
 slave mta-mailq: /usr/bin/mailq.sendmail
 slave mta-newaliases: /usr/bin/newaliases.sendmail
 slave mta-rmail: /usr/bin/rmail.sendmail
 slave mta-sendmail: /usr/lib/sendmail.sendmail
 slave mta-mailqman: /usr/share/man/man1/mailq.sendmail.1.gz
 slave mta-newaliasesman: /usr/share/man/man1/newaliases.sendmail.1.gz
 slave mta-aliasesman: /usr/share/man/man5/aliases.sendmail.5.gz
 slave mta-sendmailman: /usr/share/man/man8/sendmail.sendmail.8.gz
/usr/sbin/sendmail.postfix - priority 30
 slave mta-pam: /etc/pam.d/smtp.postfix
 slave mta-mailq: /usr/bin/mailq.postfix
 slave mta-newaliases: /usr/bin/newaliases.postfix
 slave mta-rmail: /usr/bin/rmail.postfix
 slave mta-sendmail: /usr/lib/sendmail.postfix
 slave mta-mailqman: /usr/local/man/man1/mailq.1.gz
 slave mta-newaliasesman: /usr/local/man/man1/newaliases.1.gz
 slave mta-aliasesman: /usr/local/man/man5/aliases.5.gz
 slave mta-sendmailman: /usr/local/man/man1/sendmail.1.gz
Current `best' version is /usr/sbin/sendmail.sendmail.

あとは、alternativesを利用するだけで、メインのMTAを変更できます。

[root@hatena hatena]# /usr/sbin/alternatives --config mta

There are 2 programs which provide 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.sendmail
   2           /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number: 2[Enter]

こんな感じ。簡単です。どこで使うか、といわれると微妙ですが・・・まあ、ネタとして知っておいても損はないということで。(ところどころで、Current best version is /usr/sbin/sendmail.sendmail と叱られてるように見えますが、常に出るようです。)

あと、Postfixに切り替えた後、man newaliasesとやると、sendmail.1.gzが無いぜ!と言われるので、リンク作って逃げてます。

[root@hatena hatena]# ln -s /etc/alternatives/mta-sendmailman /usr/share/man/man1/sendmail.1.gz

こんなところで。