Jag försöker bemästra hur APT pinning fungerar under Debian, men jag har svårt att förstå hur det löser prioriteringar.
Jag har en source.list
-fil som har följande poster i denna exakta ordning:
deb <repository> stretch main deb <repository> testing main deb <repository> unstable main
Följande arkiv innehåller dessa paket per gren:
- stretch innehåller paketet
dependency version 1.0
; - testet innehåller paketet
dependency version 2.0
; - instabil innehåller paketen
program
ochdependency version 2.0
;
Paketet program
beror på dependency version 2.0
.
Jag måste installera paket program
, men jag vill installera så få paket som möjligt från unstable
, så jag skapar följande preferences
fil för att fästa den här grenen:
Package: * Pin: release a=unstable Pin-Priority: -1
Om jag understa och korrekt hur det fungerar ska det installera paket från unstable
bara när jag uttryckligen ber APT om det.
Jag skapar också en apt.conf
-fil för att säkerställa att stable
-grenen är standard:
APT::Default-Release "stable";
Efter att ha kört kommandot apt-get update
, filialerna ska ha följande prioriteringar:
stable: 990 testing: 500 unstable: -1
Nu vill jag installera paketet program
, för att göra det kör jag följande kommando:
apt-get install -t unstable program
Så nu är min fråga, från vilken gren kommer APT att dra paket dependency version 2.0
? Eftersom både testing
och unstable
har samma version av paketet, vilken kommer att plockas?
Om jag förstår rätt, APT med -t unstable
-alternativet kommer att ställa in en prioritet på 990 för paketen som tillhör unstable
, men från vad jag har upplevt , det hämtar det från testing
.
Så varför drar APT paket från testing
som har en prioritet på 500 medan unstable
som inställd på 990? Vad skulle också vara det optimala sättet att installera så få paket som möjligt från unstable
?
Kommentarer
- Om versionen är densamma är filen samma också. Apt väljer den snabbaste eller den första definierad spegel, men webbadressen till den nedladdade filen är densamma. Kontrollera den själv. Debian-förvar lagrar inte ' t lagrar två identiska filer / version av ett paket på grund av problem med diskutrymme.
Svar
Detta förklaras i apt_preferences
manpage :
Flera versioner av ett paket kan vara tillgängliga för installation när filen sources.list (5) innehåller referenser till mer än en distribution (till exempel stabil och testning). APT tilldelar varje version som är tillgänglig en prioritet. Med förbehåll för begränsningsberoende väljer
apt-get
versionen med högsta prioritet för installation. APT-inställningarna åsidosätter de prioriteringar som APT tilldelar paketversioner som standard, vilket ger användaren kontroll över vilken som är vald för installation.Flera instanser av samma version av ett paket kan vara tillgängliga när källorna .list (5) -fil innehåller referenser till mer än en källa. I det här fallet hämtar
apt-get
den instans som listas tidigast i filen sources.list (5). APT-inställningarna påverkar inte valet av instans, bara valet av version.
Prioriteter avgör endast vilken version (som anges av versionsnumret) av ett paket är installerat. När det väl har bestämts används det första tillgängliga paketförvaret för att ladda ner det.