Alternativ är en mekanism för att välja önskad programvara bland flera alternativ i vissa Linux-distributioner .
Det dök först upp i Debian , varifrån det tog sig in i distributioner härledda från Debian (som Ubuntu). Den portades också till Red Hat Linux , varifrån den tog sig in i många RPM -baserade distributioner.
Vissa funktioner kan tillhandahållas av flera program, men av olika anledningar kan endast ett användas som "huvud" (huvud). Till exempel kan bara ett program "lyssna" på vilken port åt gången, så till exempel kan bara ett program fungera som e-postserver (ta emot e-post på standard SMTP- porten). Likaså har olika e-postservrar olika hårdvara, men de måste alla tillhandahålla sendmail -programgränssnittet .
Till en början användes manuellt skapade symboliska länkar för detta (till exempel gjordes /usr/bin/sendmail till en symbolisk länk till motsvarande program från e-postserverns mjukvarupaket (som Exim , Postfix , etc.).
Senare utvidgades denna metod till många tillämpningar och standardiserades.
update-alternatives skrevs av Ian Jackson 1995 och är en del av och en integrerad del av paketet dpkg (Debian package manager).
Update-alternatives hanterar symboliska länkar från fördefinierade namn till riktiga applikationer. Till exempel kan /usr/bin/x-www-browser (en grafisk webbläsare) peka på /usr/bin/ firefox , /usr/bin/ konqueror , /usr/bin/ opera , eller en annan webbläsare. Programmet som behöver anropa webbläsaren behöver inte känna till alla olika webbläsare eller tillhandahålla en speciell inställning för att välja en webbläsare, det här programmet anropar helt enkelt /usr/bin/x-www-webbläsare när det behövs, och en korrekt vald alternativet låter systemadministratören ange vilken webbläsare som ska vara.
Inom alternativmodellen pekar ett vanligt namn (som /usr/bin/ sendmail , /usr/bin/ed, /usr/bin/x-www-browser ) inte direkt till den önskade filen, utan till ett namn i alternativkatalogen , som i sin tur redan är en symbolisk länk till en fil som ger önskad funktionalitet. Det vanliga namnet behöver inte vara ett program, det kan till exempel vara en hjälpsida, ett typsnitt, en ordbok osv.
När du installerar varje paket som tillhandahåller specifik funktionalitet anropas update-alternatives, vilket sparar information om utseendet (försvinnandet) av ett alternativ. Vanligtvis görs anropet i postinst (skript efter installation) eller prerm (skript före borttagning). Om det sista av paketen som tillhandahåller funktionalitet som är specifik för det gemensamma namnet tas bort, tas symbollänken och det gemensamma namnet bort. (Till exempel kanske en icke-GUI-server inte har /usr/bin/x-www-browser, ett saknat diagramritprogram kanske inte har en /usr/bin/dia-länk, etc.)
Dessutom är det möjligt att gruppera beroenden genom att ange primära länkar (master) och sekundära länkar (slav). Varje länk kan vara automatisk eller ställas in manuellt (manuell). När en länkgrupp är i automatiskt läge bestämmer det alternativa hanteringssystemet på egen hand vilket program som är att föredra. I manuellt läge ställs alternativet in av systemadministratören och ändras inte. I automatiskt läge väljs det föredragna programmet baserat på prioritet .
Även om /usr/bin/gcc vanligtvis är en symbollänk till en av versionerna av gcc (t.ex. /usr/bin/gcc-4.3), stöder update-alternatives det inte som ett generiskt namn (även om /usr /bin/cc) . Detta beror på att olika versioner av gcc är inkompatibla med varandra och vikten av att behålla en specifik version av gcc för hela systemets hälsa. Det är upp till Linux-distributionsutvecklaren att avgöra vilken kompilator som är "master"-kompilatorn på ett givet system. [ett]