Vaihtoehdot
Vaihtoehdot tarjoavat keinot rinnakkaiseen pakettien asentamiseen, jotka tarjoavat saman toiminnallisuuden ylläpitämällä symlinkkijoukkoja (yksi pakettia kohti), jotka osoittavat vaihtoehtoisiin tiedostoihin, kuten tämä: → /polku/alkuperäinen-tiedosto.suffix + Lisätietoja, katso
+ update-alternatives(8 + `man-sivu.
Käyttö Fedorassa
Vaihtoehtoja VOI käyttää ohjelmiston rinnakkaiseen asentamiseen, kun:
-
ohjelmistoa voidaan käyttää sisään-pudota-korvikkeena ja se toimii riittävän samankaltaisesti, jotta käyttäjien ja muiden ohjelmien ei tarvitsisi järkevässä määrin tietää, mikä variantti on asennettuna
JA
-
ohjelmiston valinnan suorittaa vain järjestelmän laajuisesti järjestelmänvalvoja, eikä loppukäyttäjillä ole tarvetta vaihtaa vaihtoehtojen välillä.
Käänteisesti vaihtoehtoja EI SAA käyttää, kun:
-
Ohjelmisto ei ole sisään-pudota-korviketta. Esimerkiksi jos yleiset komentoriviargumentit eroavat toisistaan näiden kahden variantin välillä, vaihtoehtoja EI SAA käyttää.
TAI
-
Loppukäyttäjät välittävät mitä versiota he käyttävät. Jos muu kuin root-käyttäjä saisi arvon vaihtamalla vaihtoehtojen välillä, vaihtoehtoja EI SAA käyttää.
Hyvä esimerkki vaihtoehtojen käytöstä ovat erilaiset MTA:t, jotka kaikki antavat /usr/sbin/sendmail
: lle samanlaisia komentoriviargumentteja.
Huonoja esimerkkejä vaihtoehtojen käytöstä ovat:
-
erilaiset MPI-ympäristöt, joissa käyttäjät välittävät sekä siitä, mitä MPI-ympäristöä he kääntävät että mitä vastaan he ajavat
-
muokkaimen valinta, kun käyttäjä vetoaa "vi":hen, jossa käyttäjä huolehtii ominaisuuksien saatavuudesta, yhteensopivuudesta laajennusten kanssa jne
Tapaukset, joissa rinnakkainen asennus on toivottavaa, mutta vaihtoehdot eivät sovi, voivat olla tilanteita, joissa linkki: ../EnvironmentModules/[Ympäristömoduulit] ovat sopivia. MPI ja python-sphinx (Fedora 31:seen saakka) ovat esimerkkipaketteja, jotka käyttävät ympäristömoduuleja tähän tarkoitukseen.
Kuinka käyttää vaihtoehtoja
Jos paketti käyttää vaihtoehtoja, muuten ristiriidassa olevat tiedostot TÄYTYY asentaa asianmukaisella jälkiliitteellä (esimerkiksi: "%{_ sbindir}/sendmail.postfix +` eikä "%{_ sbindir}/sendmail +" ), alkuperäisiä sijainteja PITÄÄ koskettaa (esimerkiksi: + kosketa% {_ sbindir} / sendmail + `), vaihtoehtojen asettamat linkit TÄYTYY olla luettelossa% ghost tiedostoluettelossa ja oikea Edellyttää: TÄYTYY lisätä kuten alla olevissa esimerkeissä.
Vaihtoehtoisten tiedostojen lisääminen tiedostoluetteloon varmistaa, että ne ovat vastaavien pakettien omistuksessa, mikä tarkoittaa, että seuraavat komennot:
-
'rpm -qf /usr/bin/foo'
-
'dnf install /usr/bin/foo'
-
'repoquery --whatprovides /usr/bin/foo'
kaikki toimivat kunnolla. %ghostin käyttäminen tähän tarkoitukseen käyttämällä globaaleja ja luotua tiedostoa sallii luettelot.
Esimerkit
Esimerkki antlr.spec:sta:
Requires(post): %{_sbindir}/update-alternatives Requires(postun): %{_sbindir}/update-alternatives ... %install ... touch %{buildroot}%{_bindir}/antlr %post %{_sbindir}/update-alternatives --install %{_bindir}/antlr \ %{name} %{_bindir}/antlr-java 10 %postun if [ $1 -eq 0 ] ; then %{_sbindir}/update-alternatives --remove %{name} %{_bindir}/antlr-java fi ... %files ... %ghost %{_bindir}/antlr %{_bindir}/antlr-java
Ja monimutkaisempi esimerkki vaihtoehdoista, jotka on lähetetty sendmail.spec-tiedostosta, hieman muokattu:
Requires(post): %{_sbindir}/update-alternatives Requires(postun): %{_sbindir}/update-alternatives Requires(preun): %{_sbindir}/update-alternatives ... %install ... # rename files for alternative usage mv %{buildroot}%{_sbindir}/sendmail %{buildroot}%{_sbindir}/sendmail.sendmail touch %{buildroot}%{_sbindir}/sendmail for i in mailq newaliases rmail; do mv %{buildroot}%{_bindir}/$i %{buildroot}%{_bindir}/$i.sendmail touch %{buildroot}%{_bindir}/$i done mv %{buildroot}%{_mandir}/man1/mailq.1 %{buildroot}%{_mandir}/man1/mailq.sendmail.1 touch %{buildroot}%{_mandir}/man1/mailq.1 mv %{buildroot}%{_mandir}/man1/newaliases.1 %{buildroot}%{_mandir}/man1/newaliases.sendmail.1 touch %{buildroot}%{_mandir}/man1/newaliases.1 mv %{buildroot}%{_mandir}/man5/aliases.5 %{buildroot}%{_mandir}/man5/aliases.sendmail.5 touch %{buildroot}%{_mandir}/man5/aliases.5 mv %{buildroot}%{_mandir}/man8/sendmail.8 %{buildroot}%{_mandir}/man8/sendmail.sendmail.8 touch %{buildroot}%{_mandir}/man8/sendmail.8 %postun if [ "$1" -ge "1" ]; then if [ "`+readlink %{_sysconfdir}/alternatives/mta+`" == "%{_sbindir}/sendmail.sendmail" ]; then %{_sbindir}/alternatives --set mta %{_sbindir}/sendmail.sendmail fi fi %post # Määritä MTA:iden vaihtoehtoiset tiedostot. %{_sbindir}/update-alternatives --install %{_sbindir}/sendmail mta %{_sbindir}/sendmail.sendmail 90 \ --slave %{_bindir}/mailq mta-mailq %{_bindir}/mailq.sendmail \ --slave %{_bindir}/newaliases mta-newaliases %{_bindir}/newaliases.sendmail \ --slave %{_bindir}/rmail mta-rmail %{_bindir}/rmail.sendmail \ --slave /usr/lib/sendmail mta-sendmail /usr/lib/sendmail.sendmail \ --slave %{_sysconfdir}/pam.d/smtp mta-pam %{_sysconfdir}/pam.d/smtp.sendmail \ --slave %{_mandir}/man8/sendmail.8.gz mta-sendmailman %{_mandir}/man8/sendmail.sendmail.8.gz \ --slave %{_mandir}/man1/mailq.1.gz mta-mailqman %{_mandir}/man1/mailq.sendmail.1.gz \ --slave %{_mandir}/man1/newaliases.1.gz mta-newaliasesman %{_mandir}/man1/newaliases.sendmail.1.gz \ --slave %{_mandir}/man5/aliases.5.gz mta-aliasesman %{_mandir}/man5/aliases.sendmail.5.gz \ --initscript sendmail ... %preun if [ $1 = 0 ]; then %{_sbindir}/update-alternatives --remove mta %{_sbindir}/sendmail.sendmail fi ... %files ... %ghost %{_sbindir}/sendmail %ghost %{_bindir}/mailq %ghost %{_bindir}/newaliases %ghost %{_bindir}/rmail %ghost /usr/lib/sendmail %ghost %{_sysconfdir}/pam.d/smtp %ghost %{_mandir}/man8/sendmail.8.gz %ghost %{_mandir}/man1/mailq.1.gz %ghost %{_mandir}/man1/newaliases.1.gz %ghost %{_mandir}/man5/aliases.5.gz %{_sbindir}/sendmail.sendmail %{_bindir}/mailq.sendmail %{_bindir}/newaliases.sendmail %{_bindir}/rmail.sendmail /usr/lib/sendmail.sendmail %config(noreplace) %{_sysconfdir}/pam.d/smtp.sendmail %{_mandir}/man8/sendmail.sendmail.8.gz %{_mandir}/man1/mailq.sendmail.1.gz %{_mandir}/man1/newaliases.sendmail.1.gz %{_mandir}/man5/aliases.sendmail.5.gz %attr(0755,root,root) %{_initrddir}/sendmail
Want to help? Learn how to contribute to Fedora Docs ›