Kako instalirati dvije verzije istog paketa na Linux bez konflikta

Posljednje ažuriranje: 05/11/2025
Autor: Isaac
  • Koristite alternative za ažuriranje i verzionirane pakete za koinstalaciju i prebacivanje binarnih datoteka.
  • Snap omogućava više izolovanih instanci istog paketa od verzije snapd 2.36.
  • Da biste klonirali tačne verzije, kombinujte dpkg selekcije, pinning i snimke.
  • Kontejneri (LXC/LXD, adapt) i simbolički linkovi sprečavaju konflikte između okruženja.

Instaliranje više verzija paketa na Linuxu

U svakodnevnoj upotrebi GNU/Linuxa, često se javlja vrlo specifična potreba: istovremeno pokretanje dvije verzije istog softveraNa primjer, program A zavisi od biblioteke ili alata u svojoj verziji 1, a program B zahtijeva verziju 2. Na prvi pogled zvuči jednostavno, ali kada se u igru ​​uključe upravitelji paketa i sistem datoteka, nastaju problemi.

Dobra vijest je da, uz prave alate, Da, moguće je da različite verzije koegzistiraju. binarnih datoteka, biblioteka i aplikacija, bilo na istom sistemu, u kontejnerima ili čak korištenjem modernih formata paketa. U ovom vodiču ćete vidjeti zašto to nije uvijek trivijalno i, prije svega, kako to postići na organiziran i siguran način na Debianu, Ubuntuu i derivatima.

Zašto instaliranje dvije verzije istog paketa nije tako jednostavno

Prva prepreka je upravljanje rutama: u sistemima zasnovanim na Debianu, svaki paket instalira datoteke na standardizovane lokacije kao što su /usr/bin, /usr/lib ili /usr/includeAko dva paketa pokušaju smjestiti istu datoteku u istu putanju, upravitelj paketa će blokirati instalaciju zbog konflikta.

Druga tačka je binarna kompatibilnost. Izvorne biblioteke koriste mehanizam verzioniranja koji se zove SONAMEOvo vam omogućava da imate i libX.so.1 i libX.so.2 istovremeno, ali ne i dvije libX.so.1 datoteke s istim nazivom. Zato ćete vidjeti mnoge biblioteke koje pakuju glavne verzije u odvojene pakete, kao što su libssl1.1 ili libssl3, koji mogu koegzistirati bez međusobnog ometanja.

Još jedan ključni faktor je pakovanje razvojnih zaglavlja i linkova. -dev paketi (na primjer, libssl-dev) instalirajte kanonske putanje u /usr/include i neverzionirane .so linkove za kompajliranje. Ove -dev naredbe obično to rade. Ne. Mogu se instalirati paralelno jer prepisuju iste datoteke. Tu se mehanizam ažuriranje-alternative ili, ako je potrebno, kompajlirajte sa odvojenim prefiksima kao što je /opt.

Konačno, zapamtite da Debian i Ubuntu garantuju da Svaka ruta u sistemu je "upravljana" jednim paketomOvaj ugovor o vlasništvu nad datotekama omogućava ažuriranje, deinstalaciju i reviziju bez haosa, ali podrazumijeva da nije dozvoljeno imati dvije identične binarne datoteke u istoj putanji osim ako to pakovanje ne dozvoljava.

Dvije verzije paketa u Linuxu

Praktične metode za koegzistiranje verzija bez narušavanja sistema

Alternative u Debianu/Ubuntuu za odabir binarnih datoteka

Mnogi alati nude nekoliko verzija koje se mogu istovremeno instalirati (npr. gcc-4.4 i gcc-8.2), a aktivna se odabire pomoću ažuriranje-alternativeOvaj sistem kreira upravljane linkove u /etc/alternatives koji upućuju na željeni izvršni fajl.

Tipičan tijek rada za kompajliranje s dva različita GCC-a može biti: instalirajte obje specifične verzije i zabilježite alternative kako biste mogli odabrati onu koja vas zanima u bilo kojem trenutku.

sudo apt-get install gcc-4.4 gcc-8.2
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8.2 10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 20
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/gcc 30
sudo update-alternatives --set cc /usr/bin/gcc
sudo update-alternatives --config gcc

Sa tom posljednjom komandom moći ćete interaktivno se izmjenjuju Zadana verzija gcc-a. U svakom slučaju provjerite sa gcc –version koja je aktivna u sistemskoj putanji (PATH).

  Kompletan vodič za kreiranje okruženja sa WSL2 + Docker + VS Code

Paketi koji se mogu instalirati putem Coina i verzionirana imena

Drugi način je oslanjanje na samo pakovanje. U Debianu/Ubuntuu je uobičajeno da biblioteke, a ponekad i aplikacije, nude pakete sa naziv koji uključuje glavnu verziju Da biste omogućili njihovu koegzistenciju: libfoo1, libfoo2, libssl1.1, libssl3, itd. Ovaj pristup je idealan kada trebate povezati dvije aplikacije s različitim većinama bez ikakvih preklapanja.

Imajte na umu da -dev paketi, prilikom instaliranja generičkih zaglavlja i linkova, često konflikt s drugim -dev verzijama. Ako trebate kompajlirati za dvije većine, razmislite o korištenju kontejnera, chroot-ova ili instaliranju jedne od grana u prilagođene putanje pod /opt kako biste izbjegli konflikte.

Paralelne instalacije sa Snap-om

Snap olakšava život u ovim scenarijima jer svaki paket ide izolovan sa svojim zavisnostimaOd verzije Snapd 2.36, postoji podrška za više instanci istog Snap-a, sa odvojenim konfiguracijama, servisima i interfejsima.

Da biste ga aktivirali na sistemima gdje je još uvijek naveden kao eksperimentalni, omogućite opciju, a zatim instalirati instance s različitim imenima istog snimka. Vidjet ćete da možete imati više kopija iste verzije ili čak različite verzije ako se igrate s kanalima.

sudo snap set system experimental.parallel-instances=true
sudo snap install odio_first odio_second

Rezultat će odražavati odvojene instalacije, nešto poput ovoga: hate_second 1 iz Canonicala✓ instalirano i instaliran je odio_first 1 od Canonical✓. Isto važi i za alate poput GIMP ili VLC, koji otvara opcije za testiranje, regresije ili kontrolirana okruženja.

Kontejneri sa adapt, LXC i LXD

Kada trebate pokrenuti pakete iz druge verzije Ubuntua na vašem sistemu, možete koristiti adaptiratiOvaj uslužni program preuzima i konfiguriše kontejner sa ciljnim izdanjem i pokreće aplikacije koje su vam potrebne unutar njega. Ovo vam omogućava da koristite Ubuntu 15.10 softver na Ubuntu 14.04, na primjer, bez uticaja na vaš osnovni sistem.

Ključna ideja iza kontejnera je da se procesi zatvore unutar sandbox datoteka, mreže i resursa, mnogo lakši od potpune virtuelne mašine. U Ubuntuu, LXC i LXD su temelji za ovu vrstu izolacije; ako ste zainteresovani da saznate više, dobru dokumentaciju možete pronaći na [link do dokumentacije]. LXC, LXD I to Gentoo wiki.

Jezici i okruženja za izvršavanje s izvornim upravljanjem verzijama

U svijetu programskih jezika, prilično je uobičajeno imati više verzija. pitonNajpraktičniji pristup je korištenje virtualnih okruženja (venv), a ako vam je potrebna verzija samog interpretera, alati poput pyenv-a. JavaSistem alternativa vam omogućava da prelazite između različitih verzija JDK/JRE. I u PHP Možete paralelno instalirati php7.x i php8.x i odabrati servis ili liniju... naredbe s alternativama ili konfiguracijom web servera.

Kompajleri poput gcc i g++ Također se često objavljuju s verzijama koje se mogu koinstalirati, i kao što ste vidjeli, update-alternatives je savršen most za prebacivanje između njih bez dodirivanja bilo čega drugog. Ključno u svim ovim slučajevima je da svaka verzija ima svoje binarno ime ili se nalazi u različitim putanjama.

Replicirajte tim s potpuno istim verzijama

Još jedno pitanje koje se stalno ponavlja je kako klonirati stanje jednog sistema u drugi i sačuvati ga. iste verzijene samo lista paketa. Klasična metoda s dpkg-om je korisna, ali ona samo preuzima pakete i ne poštuje uvijek tačne verzije ako se repozitorij već promijenio.

  Ubuntu se oprašta od GNU-a: tranzicija ka budućnosti koju pokreće Rust

Za ispis liste paketa sa referentnog hosta možete koristiti: dpkg-get-selections

dpkg --get-selections > /tmp/dpkglist.txt

I u novoj mašini, primijeni taj odabir prije rješavanja zavisnosti pomoću apt-a:

sudo dpkg --set-selections < /tmp/dpkglist.txt
sudo apt-get dselect-upgrade

Ako trebate klonirati tačno onako kako jeste, razmislite o dopuni tehnikama kao što su piniranje verzije i snimke repozitorija. U Debianu postoji snapshot.debian.org, a u Ubuntuu postoje ogledala sa snimkama; usmjeravanje sources.list na određeni datum sprječava instalaciju verzija koje nisu originalne.

Osim toga, možete postaviti određene verzije i zaključati ih pomoću apt-markkako bi se spriječile neželjene nadogradnje dok se kloniranje okruženja ne završi.

sudo apt-get install paquete=1.2.3-1ubuntu1
sudo apt-mark hold paquete
apt-cache policy paquete

Alati poput apt-klon Oni također pomažu u izvozu i uvozu stanja, uključujući repozitorije, što povećava nivo tačnosti. Koju god metodu odabrali, ideja je da kombinujete listu paketa, tačne verzije i smrznuti izvori tako da odredište odražava porijeklo.

Ako često ponovo instalirate, automatizirajte s malim skripta Provjerite da li folder postoji u /data, kopirajte ga ako je potrebno i kreirajte simboličku vezuNa ovaj način, prelazak s jedne distribucije na drugu bit će besprijekoran, štedeći vrijeme i osiguravajući konzistentnost.

Više Linux distribucija na istom računaru bez gubitka sadržaja

Ako razvijate ili testirate na različitim izdanjima, možda biste radije imali više instalacija na svom računaru. Da biste izbjegli dupliranje datoteka i komplikacije, vrlo učinkovita praksa je centralizirajte dokumente u zajedničku particiju i povezati ih sa svakim sistemom simboličkim linkovima.

Prijedlog je jednostavan: kreirajte particiju poput /data, i u njoj svoju radnu površinu, dokumente, mape preuzimanjaZatim, na svakom sistemu, obrišite početne mape i kreirajte vezu do /data. Na ovaj način, ~/.config, ~/Desktop ili ~/Documents Oni pokazuju na istu zajedničku lokaciju.

mkdir -p /datos/Escritorio /datos/Documentos /datos/Descargas
rm -rf ~/Escritorio ~/Documentos ~/Descargas
ln -s /datos/Escritorio ~/Escritorio
ln -s /datos/Documentos ~/Documentos
ln -s /datos/Descargas ~/Descargas

Najbolje je biti selektivan s postavkama. Datoteke postavki radne površine mijenjaju se od verzije do verzije i mogu uzrokovati probleme. Međutim, za aplikacije stabilan kao GIMP ili InkscapeMožete povezati svoje konfiguracijske mape i održati isto iskustvo u svim svojim instalacijama.

mkdir -p /datos/.config/GIMP
rm -rf ~/.config/GIMP
ln -s /datos/.config/GIMP ~/.config/GIMP

Ako često ponovo instalirate računar, automatizujte proces pomoću malog skripta koji provjerava da li folder postoji u /data, kopira ga ako je potrebno i kreirajte simboličku vezuNa ovaj način, prelazak s jedne distribucije na drugu bit će besprijekoran, štedeći vrijeme i osiguravajući konzistentnost.

Koristan podsjetnik na APT, dpkg i ostale softvere za upravljanje verzijama.

U Debianu i njegovim derivatima, APT je moderni alat koji obuhvata funkcije apt-get i apt-cachedpkg ručno instalira .deb pakete, dok ih dpkg instalira ručno. Poznavanje osnova pomaže vam da precizno pronađete i popravite verzije.

Ažurirajte indeks paketa Prije svega. Ako radite s kontejnerima ili minimalnim slikama, ovaj korak često nedostaje, zbog čega se ništa ne pojavljuje prilikom pretraživanja ili instaliranja.

sudo apt update

Za lociranje paketa koristite apt search Pretraga cijelog teksta. Omogućit će vam da otkrijete tačna imena i srodne alternative bez potrebe za otvaranjem preglednika.

apt search nombre

Ako želite vidjeti detaljne informacije (dostupnu verziju, porijeklo, zavisnosti, veličinu), pogledajte tehnički list sa prikladna predstavašto je vrlo praktično kada ste zabrinuti zbog određenog broja verzije koju trebate instalirati.

apt show paquete

Navođenje instaliranih i ažuriranih opcija će vam također pomoći da revizorski izvještaji, otklanjanje grešaka u konfliktima ili potvrđivanje da je pinning stupio na snagu na sistemu.

apt list --installed
apt list --upgradable

Instaliranje paketa je jednostavno kao `apt install package`, i možete ih povezati u lanac. nekoliko imena U istom smislu. Ako ne želite interaktivne potvrde tokom skripti, dodajte -y naredbi da biste prihvatili po defaultu.

sudo apt install paquete1 paquete2 -y

Deinstalacija bez brisanja postavki se vrši pomoću `apt remove`, a ako trebate i očistiti lokalne konfiguracijske datoteke, koristite apt purgeNakon većih promjena, oslobodite napuštene zavisnosti pomoću automatskog uklanjanja.

sudo apt remove paquete
sudo apt purge paquete
sudo apt autoremove

Da biste sistem održavali ažurnim, imate dvije opcije: `apt upgrade` za ažuriranje već instaliranih paketa i apt puna nadogradnja kako bi se omogućilo i uklanjanje ili zamjena paketa kada je to apsolutno neophodno.

sudo apt upgrade
sudo apt full-upgrade

Uređivanje izvornih kodova paketa određuje koje verzije vaš sistem vidi. Komanda `apt edit-sources` pomaže u otvaranju liste i podešavanju repozitorija i mirror-a, što je od vitalnog značaja pri radu sa snimke ili određenih kanala.

sudo apt edit-sources

Ako trebate instalirati ručno .deb datoteku Ako određena verzija nije u repozitorijima ili želite forsirati verziju, dpkg je upravitelj niskog nivoa koji obavlja posao direktno na datoteci.

sudo dpkg -i paquete.deb

Što se tiče ekvivalencija, apt pojednostavljuje klasične akcije apt-get i apt-cache. Za brzi pregled: apt update ekvivalentno sa apt-get update; apt install za apt-get install; apt search za apt-cache search; apt list –instaliran dpkg -l; apt full-upgrade za apt-get dist-upgrade.

  Šta je PowerShell DSC (konfiguracija željenog stanja): Kompletan vodič i razlike sa višeplatformskim DSC-om

I da, APT ima smisla za humor. Ako upišete prikladno mukanje Vidjet ćete malo uskršnje jaje koje podsjeća na stara vremena. Nije za kontrolu verzija, ali uljepšava stvari. terminal povremeno.

Kada sve navedeno spojimo, dobijamo jasnu sliku: konflikti prilikom instaliranja dvije verzije nastaju zbog stroge kontrole ruta i zavisnosti, ali postoje zreli načini za njihovo prevazilaženje. alternative Omogućava prebacivanje između kompatibilnih binarnih datoteka, verzija imena i biblioteka sa SONAME-om koje olakšavaju koegzistenciju, Snap pruža paralelne instance i izolaciju, a kontejneri sa LXC/LXD ili alatima poput adapt-a rukuju paketima iz različitih izdanja. Za detaljno kloniranje okruženja, pinning, snapshots i uslužni programi poput apt-clone-a su savršen završni detalj, dok u scenarijima s višestrukim pokretanjem, simbolički linkovi čuvaju vaše podatke i postavke na sigurnom. Uz malo planiranja, posjedovanje dvije verzije istog paketa u Linux Prestaje biti glavobolja i postaje dio vašeg alata.