it-swarm.dev

Jak nainstalovat konkrétní balíčky Ubuntu s přesnou verzí?

Chci nastavit nový virtuální počítač s některými určenými balíčky (název a verze), které jsou k dispozici.

Například Apache2 ve verzi 2.2.20-1ubuntu1 se všemi závislostmi. I když na serverech existuje nová verze tohoto balíčku, měl by být nainstalován.

Řešení musí pracovat/škálovat s více (n) „instalacemi“. Jiný virtuální stroj může potřebovat starší verzi Apache2.

V současné době vím o některých možnostech, které instalují přesné balíčky, ale nemění se tak dobře:

  1. Zkopírujte všechny požadované *.deb ručně na každý virtuální stroj a zadejte: dpkg -i ... -> Mohlo by to fungovat, ale je velmi náchylný k chybám. (Manuální skripty atd.)
  2. Vytvořte a použijte nové úložiště Ubuntu pro každé nastavení. -> Nefunguje to, protože bych potřeboval n repozitářů.
  3. Nainstalujte stroj jednou a zkopírujte VM/vytvořit snímek. -> Nepracuje, protože bych musel n n VM uložit.

Můj problém by mohl být označen jako správa oprav, ale nechci aktualizovat své balíčky na aktuální verzi. Mým cílem je nainstalovat staré balíčky.

240
ayckoster

Můžeš použít apt-get k instalaci konkrétní verze balíčku, pokud je v archivu, o kterém apt ví. Z apt-get manpage:

Konkrétní verzi balíčku lze vybrat pro instalaci sledováním názvu balíčku se rovná a verzi balíčku, kterou chcete vybrat. To způsobí, že bude tato verze lokalizována a vybrána pro instalaci. Alternativně lze specifickou distribuci vybrat následováním názvu balíčku lomítkem a verze distribuce nebo názvu archivu (stabilní, zmrazené, nestabilní).

Můžete například:

Sudo apt-get install Apache2=2.2.20-1ubuntu1

Uvědomte si, že v tomto případě budete možná muset udělat nějaké řešení závislosti, ale pokud dojde k problémům, apt-get vám řekne, co je způsobuje. V mém systému 11.10 bych to musel udělat takto:

Sudo apt-get install Apache2=2.2.20-1ubuntu1 \
                     Apache2.2-common=2.2.20-1ubuntu1 \
                     Apache2.2-bin=2.2.20-1ubuntu1 \
                     Apache2-mpm-worker=2.2.20-1ubuntu1

Dostupné verze balíčku můžete zobrazit takto:

Sudo apt list -a Apache2
243
fader

Chcete-li zkontrolovat, které verze jsou k dispozici, můžete zkontrolovat prostřednictvím:

Sudo apt-cache madison ^Apache2

Pokud to nebude fungovat, zvažte spuštění Sudo apt-get update before pro aktualizaci seznamu balíků.

Poté zkopírujte verzi nebo použijte následující syntaxi:

Sudo apt-get install Apache2=2.2\*

Chcete-li zkontrolovat, kterou verzi jste nainstalovali, spusťte:

dpkg -l 'Apache2*' | grep ^i
66
kenorb

Rozbalím dřívější odpovědi dalšími užitečnými příkazy pro vytváření verzí v rodině apt. Chcete-li zjistit, které verze jsou k dispozici, spusťte apt-cache policy:

# apt-cache policy Apache2
Apache2:
  Installed: (none)
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main AMD64 Packages
     2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main AMD64 Packages
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main AMD64 Packages

Poté, jak je uvedeno jinde, nainstalujte konkrétní verzi s apt-get:

# apt-get install Apache2=2.4.7-1ubuntu4.5
...

Nyní můžete zjistit, kterou verzi jste nainstalovali spuštěním apt-cache policy znovu:

# apt-cache policy Apache2
Apache2:
  Installed: 2.4.7-1ubuntu4.5
  Candidate: 2.4.7-1ubuntu4.5
  Version table:
     2.4.10-1ubuntu1.1~ubuntu14.04.1 0
        100 http://us.archive.ubuntu.com/ubuntu/ trusty-backports/main AMD64 Packages
 *** 2.4.7-1ubuntu4.5 0
        500 http://security.ubuntu.com/ubuntu/ trusty-security/main AMD64 Packages
        100 /var/lib/dpkg/status
     2.4.7-1ubuntu4 0
        500 http://us.archive.ubuntu.com/ubuntu/ trusty/main AMD64 Packages

Pokud si nepřejete, aby byly na aktualizace nainstalovány novější verze, připněte balíček pomocí apt-mark:

# apt-mark hold Apache2
Apache2 set on hold.

Řekněme, že do indexu balíčků je přidána nová verze Apache2 a váš počítač je synchronizován s apt-get update. Uvidíte to při příštím spuštění apt-get upgrade:

# apt-get upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  Apache2
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
18
gsf

Prakticky to není možné, protože staré verze se neukládají v archivu, takže pokud nemáte někde kopii staré verze, nemůžete ji nainstalovat. Měli byste se ptát sami sebe, proč chcete nainstalovat starší verzi. U stabilního vydání je hlavním důvodem vydání nové verze náprava chyby zabezpečení a nechcete spustit zranitelný server, že?

7
psusi

Jak vysvětluje psusi, staré verze nejsou uchovávány v úložišti ubuntu, ale zřejmě je stále můžete najít na launchpadu. Takže jdete na (nahradit důvěryhodné a AMD64 vaší verzí a architekturou Ubuntu):

https://launchpad.net/ubuntu/trusty/AMD64/Apache2

a vyberte požadovanou verzi. Poté stáhnete debet jako soubor a instalujete pomocí:

dpkg -i Apache2_2.4.7-1ubuntu4.20_AMD64.deb

Znovu nahraďte název souboru do svého souboru. To je únavné, pokud musíte downgrade hodně balíčků, ale je to lepší než nic, pokud jste zoufalí.

2
soger