wiki:docs/making-rpm/specific/alternatives

Version 1 (modified by yasumichi, 8 years ago) (diff)

--

Vine Linux ドキュメント / RPM パッケージの作成方法 / パッケージ固有の作法等について / alternatives を利用するパッケージ

alternatives を利用するパッケージ

alternatives については update-alternatives による標準コマンドの切り替え にまとめられています。(FIXME: リンク先作成後リンク貼る)

alternatives に登録する場合には %post と %preun で次のようにします。

%post
if [ "$1" = "1" ]; then
        %{_syssbindir}/update-alternatives --install リンク名 総称名 選択候補 優先度
fi

%preun
if [ "$1" = "0" ]; then
        %{_syssbindir}/update-alternatives --remove 総称名 選択候補
fi

Provides と Requires を指定します。

Provides: 総称名 リンク名
Requires: update-alternatives
Requires(post,preun): %{_syssbindir}/update-alternatives

とします。

Provides の リンク名 については、無くても問題はありませんが、%files には書かれないファイルなので、Provides に書いておいたほうがよいと思います。

%post での登録と %preun での削除は、インストール時とアンインストール時だけに必要で、アップグレード時に実行してしまうと問題があるので、"$1" が 1 の場合(インストール時)と 0 の場合(アンインストール時)だけ処理するように if 文 にしておきます。

%post での処理を、パッケージのアップグレード時にも行ってしまうと、パッケージのインストール後にユーザが優先度を変更していた場合、それを無視してパッケージ側で優先度を勝手に変更してしまうことになります。

新規パッケージではなく、既存のパッケージの %post,%preun に update-alternatives の処理を追加する場合には、次のようにするとよいかもしれません。

%post
if [ "$1" = "1" ]; then
if [ "`%{_sysbindir/update-alternatives --list '総称名' | grep -c 'リンク名'`" = "0" ]; then
%{_syssbindir}/update-alternatives --install リンク名 総称名 選択候補 優先度
fi
fi

%preun
if [ "$1" = "0" ]; then
%{_syssbindir}/update-alternatives --remove 総称名 選択候補
fi

%triggerin と %triggerpreun と %preun を用いることで、他のパッケージが持っているファイルを alternatives で登録するようなパッケージを作ることもできます。

Provides: 総称名 リンク名
Requires: update-alternatives
Requires(preun,triggerin,triggerpreun): %{_syssbindir}/update-alternatives

%preun
if [ "$1" = "0" ]; then
        %{_syssbindir}/update-alternatives --remove-all 総称名
fi

%triggerin -- 対象となるパッケージ
if [ "$1" = "1" ]; then
        echo triggerin scriptlet by %{name} start
        %{_syssbindir}/update-alternatives --install リンク名 総称名 選択候補 優先度
        echo triggerin scriptlet by %{name} end
fi

%triggerpreun -- 対象となるパッケージ
if [ "$1" = "0" ]; then
        echo triggerpreun scriptlet by %{name} start
        %{_syssbindir}/update-alternatives --remove 総称名 選択候補
        echo triggerin scriptlet by %{name} end
fi