[wiki:docs Vine Linux ドキュメント] / [wiki:../../ RPM パッケージの作成方法] / [wiki:../ パッケージ固有の作法等について] / alternatives を利用するパッケージ = alternatives を利用するパッケージ = alternatives については update-alternatives による標準コマンドの切り替え にまとめられています。('''FIXME''': リンク先作成後リンク貼る) alternatives に登録する場合には %post と %preun で次のようにします。 {{{ #!sh %post if [ "$1" = "1" ]; then %{_syssbindir}/update-alternatives --install リンク名 総称名 選択候補 優先度 fi %preun if [ "$1" = "0" ]; then %{_syssbindir}/update-alternatives --remove 総称名 選択候補 fi }}} Provides と Requires を指定します。 {{{ #!sh Provides: 総称名 リンク名 Requires: update-alternatives Requires(post,preun): %{_syssbindir}/update-alternatives }}} とします。 Provides の リンク名 については、無くても問題はありませんが、%files には書かれないファイルなので、Provides に書いておいたほうがよいと思います。 %post での登録と %preun での削除は、インストール時とアンインストール時だけに必要で、アップグレード時に実行してしまうと問題があるので、"$1" が 1 の場合(インストール時)と 0 の場合(アンインストール時)だけ処理するように if 文 にしておきます。 %post での処理を、パッケージのアップグレード時にも行ってしまうと、パッケージのインストール後にユーザが優先度を変更していた場合、それを無視してパッケージ側で優先度を勝手に変更してしまうことになります。 新規パッケージではなく、既存のパッケージの %post,%preun に update-alternatives の処理を追加する場合には、次のようにするとよいかもしれません。 {{{ #!sh %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 で登録するようなパッケージを作ることもできます。 {{{ #!sh 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 }}}