====== alternatives ====== [[http://linux.die.net/man/8/update-alternatives|update-alternatives]] - maintain symbolic links determining default commands. Default implementation in PLD Linux is provided by ''alternatives'' package from [[package>chkconfig]]. ===== switching alternative ===== By default ''alternatives'' uses ''auto'' mode picking the "best" alternative. //TODO: how to enforce sysadmin preference// ===== integrating ===== from [[http://git.pld-linux.org/?p=packages/php.git;a=commitdiff;h=82885e7c57e9ee9183eead2319352703c8278a35|phar-php example]]: Requires: alternatives ... %install ... # touch for ghost %{__rm} $RPM_BUILD_ROOT%{_bindir}/phar touch $RPM_BUILD_ROOT%{_bindir}/phar %post phar update-alternatives \ --install %{_bindir}/phar phar %{_bindir}/phar%{ver_suffix}.phar %{ver_suffix} \ --slave %{_mandir}/man1/phar.1 phar.1 %{_mandir}/man1/phar%{ver_suffix}.1* || : %postun phar if [ $1 -eq 0 ]; then update-alternatives --remove phar %{_bindir}/phar || : fi ... %files ... %ghost %{_bindir}/phar %ghost %{_mandir}/man1/phar.1 - add ''Requires: alternatives'' to runtime deps - the path must be ghost and regular file, otherwise rpm will complin about file-conflicts - use ''%%--install%%'' to setup the symlinks in package ''%post'' scriptlet. - the ''%%--slave%%'' option is optional and may be repeated, use if you wish to "group" alternatives - use proper ''%postun'' to remove alternative on package uninstall Currently it remains unclear how to handle optional files, as for above example: - ''%{_mandir}'' path can be missing if ''%_excludedocs'' is set - ''%{_mandir}'' path could be ''.gz'' compressed or not, it's currently solved with a glob: ''%{_mandir}/man1/phar%{ver_suffix}.1*''