- Brug opdateringsalternativer og versionspakker til at saminstallere og slå binære filer til/fra.
- Snap tillader flere isolerede instanser af den samme pakke siden snapd 2.36.
- For at klone nøjagtige versioner, kombiner dpkg-valg, fastgørelse og snapshots.
- Containere (LXC/LXD, adapt) og symbolske links forhindrer konflikter mellem miljøer.

I den daglige brug af GNU/Linux opstår der ofte et meget specifikt behov: køre to versioner af den samme software på samme tidFor eksempel afhænger program A af et bibliotek eller værktøj i sin version 1, og program B kræver version 2. Ved første øjekast lyder det simpelt, men når pakkehåndteringer og filsystemet kommer i spil, opstår der problemer.
Den gode nyhed er, at med de rigtige værktøjer, Ja, det er muligt at have forskellige versioner side om side. af binære filer, biblioteker og applikationer, uanset om det er på samme system, i containere eller endda ved hjælp af moderne pakkeformater. I denne guide vil du se, hvorfor det ikke altid er trivielt, og frem for alt, hvordan du opnår det på en organiseret og sikker måde på Debian, Ubuntu og derivater.
Hvorfor det ikke er så nemt at installere to versioner af den samme pakke
Den første hindring er rutehåndtering: i Debian-baserede systemer installerer hver pakke filer på standardiserede placeringer som f.eks. /usr/bin, /usr/lib eller /usr/includeHvis to pakker forsøger at placere den samme fil i den samme sti, vil pakkehåndteringen blokere installationen på grund af konflikt.
Det andet punkt er binær kompatibilitet. Native biblioteker anvender en versionsstyringsmekanisme kaldet SONAMDette giver dig mulighed for at have både libX.so.1 og libX.so.2 på samme tid, men ikke to libX.so.1-filer med samme filnavn. Derfor vil du se mange biblioteker pakke større versioner i separate pakker, såsom libssl1.1 eller libssl3, som kan sameksistere uden at forstyrre hinanden.
En anden nøglefaktor er pakningen af udviklingsheadere og links. -dev-pakkerne (for eksempel libssl-dev) installerer kanoniske stier i /usr/include og uversionerede .so-links til kompilering. Disse -dev-kommandoer gør typisk dette. ingen De kan installeres parallelt, fordi de overskriver de samme filer. Det er her, mekanismen bag opdateringsalternativer eller, om nødvendigt, kompilere med separate præfikser som /opt.
Husk endelig, at Debian og Ubuntu garanterer det Hver rute i systemet "styres" af en enkelt pakkeDenne filejerskabsaftale tillader opdatering, afinstallation og revision uden kaos, men den indebærer, at det ikke er tilladt at have to identiske binære filer i samme sti, medmindre emballagen tillader det.
Praktiske metoder til sameksisterende versioner uden at ødelægge systemet
Alternativer i Debian/Ubuntu til at vælge binære filer
Mange værktøjer tilbyder flere versioner, der kan installeres sammen (f.eks. gcc-4.4 og gcc-8.2), og den aktive version vælges ved hjælp af opdateringsalternativerDette system opretter administrerede links i /etc/alternatives, der peger på den ønskede eksekverbare fil.
En typisk arbejdsgang til kompilering med to forskellige GCC'er kan være: Installer begge specifikke versioner og registrer alternativerne, så du kan vælge det, der interesserer dig på et givet tidspunkt.
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
Med den sidste kommando vil du være i stand til at veksle interaktivt Standardversionen af gcc. Kontroller i hvert tilfælde med gcc –version, hvilken der er aktiv i systemets PATH.
Møntinstallerbare pakker og versionsnavne
En anden måde er at stole på selve emballagen. I Debian/Ubuntu er det almindeligt, at biblioteker og nogle gange applikationer tilbyder pakker med navn, der inkluderer hovedversionen For at tillade deres sameksistens: libfoo1, libfoo2, libssl1.1, libssl3 osv. Denne tilgang er ideel, når du har brug for to applikationer til at forbinde med forskellige majoriteter uden overførsel.
Husk at -dev-pakker, når du installerer generiske headere og links, ofte konflikt med andre -dev-versioner. Hvis du har brug for at kompilere mod to majoriteter, bør du overveje at bruge containere, chroots eller installere en af grenene i brugerdefinerede stier under /opt for at undgå konflikter.
Parallelle installationer med Snap
Snap gør livet lettere i disse scenarier, fordi hver pakke går isoleret med sine afhængighederSiden snapd 2.36 har der været understøttelse af flere instanser af den samme snap, med separate konfigurationer, tjenester og grænseflader.
For at aktivere det på systemer, hvor det stadig er angivet som eksperimentelt, skal du aktivere indstillingen og derefter installer instanser med forskellige navne af den samme snap. Du vil se, at du kan have flere kopier af den samme version eller endda forskellige versioner, hvis du leger med kanaler.
sudo snap set system experimental.parallel-instances=true
sudo snap install odio_first odio_second
Resultatet vil afspejle separate installationer, noget i retning af dette: hate_second 1 fra Canonical✓ installeret og odio_first 1 fra Canonical✓ installeret. Det samme gælder for værktøjer som GIMP eller VLC, som åbner op for muligheder for testning, regressioner eller kontrollerede miljøer.
Beholdere med adapt, LXC og LXD
Når du har brug for at køre pakker fra en anden version af Ubuntu på dit system, kan du bruge tilpasseDette værktøj downloader og konfigurerer en container med måludgivelsen og kører de programmer, du har brug for i den. Dette giver dig mulighed for at bruge Ubuntu 15.10-software på Ubuntu 14.04, for eksempel uden at påvirke dit basissystem.
Hovedideen bag containere er at omslutte processer inden for en sandkasse af filer, netværk og ressourcer, meget lettere end en fuld virtuel maskine. I Ubuntu er LXC og LXD hjørnestenene i denne type isolation; hvis du er interesseret i at lære mere, kan du finde god dokumentation på [link til dokumentation]. LXC, LXD og Gentoo-wikien.
Sprog og runtime med native versionsstyring
I programmeringssprogenes verden er det ret almindeligt at have flere versioner. PythonDen mest praktiske tilgang er at bruge virtuelle miljøer (venv), og hvis du har brug for fortolkerens egen version, værktøjer som pyenv. JavaAlternativsystemet giver dig mulighed for at skifte mellem forskellige JDK/JRE-versioner. Og i PHP Du kan installere php7.x og php8.x parallelt og vælge tjenesten eller linjen af kommandoer med alternativer eller webserverkonfiguration.
Kompilatorer som gcc og g++ De udgives også ofte med co-installerbare versioner, og som du har set, er update-alternatives den perfekte bro til at skifte mellem dem uden at røre ved noget andet. Nøglen i alle disse tilfælde er, at hver version har sit eget binære navn eller findes i forskellige stier.
Replikér et team med præcis de samme versioner
Et andet tilbagevendende spørgsmål er, hvordan man kloner tilstanden af ét system til et andet og bevarer det. de samme versionerikke kun pakkelisten. Den klassiske metode med dpkg er nyttig, men den henter kun pakkerne og respekterer ikke altid de nøjagtige versioner, hvis arkivet allerede er ændret.
For at dumpe pakkelisten fra en referencevært kan du bruge: dpkg – få-valg
dpkg --get-selections > /tmp/dpkglist.txt
Og i den nye maskine, anvende det valg før du løser afhængigheder med apt:
sudo dpkg --set-selections < /tmp/dpkglist.txt
sudo apt-get dselect-upgrade
Hvis du har brug for at klone præcis som den er, kan du overveje at supplere med teknikker som f.eks. versionsfastgørelse og snapshots af repositories. I Debian findes der snapshot.debian.org, og i Ubuntu findes der filialer med snapshots; at pege sources.list på en bestemt dato forhindrer installation af andre versioner end originalen.
Derudover kan du indstille specifikke versioner og låse dem med apt-markfor at forhindre uønskede opgraderinger, indtil kloningen af miljøet er fuldført.
sudo apt-get install paquete=1.2.3-1ubuntu1
sudo apt-mark hold paquete
apt-cache policy paquete
Værktøjer som apt-klon De hjælper også med at eksportere og importere tilstande, inklusive arkiver, hvilket øger nøjagtighedsniveauet. Uanset hvilken metode du vælger, er ideen at kombinere pakkelisten, de nøjagtige versioner og frosne kilder så destinationen afspejler oprindelsesstedet.
Hvis du ofte geninstallerer, så automatiser med en lille script tjek om mappen findes i /data, kopier den om nødvendigt og opret det symbolske linkPå denne måde vil skift fra én distribution til en anden være problemfrit, hvilket sparer tid og sikrer konsistens.
Flere Linux-distributioner på den samme pc uden at miste dit indhold
Hvis du udvikler eller tester på forskellige udgivelser, foretrækker du måske at have flere installationer på din maskine. For at undgå dubletter og komplikationer er en meget effektiv praksis centraliser dokumenter i en fælles partition og forbinde dem fra hvert system med symbolske links.
Forslaget er simpelt: opret en partition som /data, og i den skal du finde dit skrivebord, dine dokumenter og dine mapper. DownloadsSlet derefter hjemmemapperne på hvert system og opret et link til /data. På denne måde ~/.config, ~/Desktop eller ~/Dokumenter De peger på den samme fælles placering.
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
Det er bedst at være selektiv med dine indstillinger. Skrivebordsindstillinger ændrer sig fra version til version og kan forårsage problemer. Men for apps stabil som GIMP eller InkscapeDu kan linke dine konfigurationsmapper og opretholde den samme oplevelse på tværs af alle dine installationer.
mkdir -p /datos/.config/GIMP
rm -rf ~/.config/GIMP
ln -s /datos/.config/GIMP ~/.config/GIMP
Hvis du geninstallerer ofte, kan du automatisere processen med et lille script, der kontrollerer, om mappen findes i /data, kopierer den om nødvendigt, og opret det symbolske linkPå denne måde vil skift fra én distribution til en anden være problemfrit, hvilket sparer tid og sikrer konsistens.
En nyttig påmindelse om APT, dpkg og anden versionshåndteringssoftware.
I Debian og derivater er APT det moderne værktøj, der omfatter funktioner af apt-get og apt-cachedpkg installerer .deb-pakker manuelt, mens dpkg installerer dem manuelt. Kendskab til det grundlæggende hjælper dig med at finde og rette versioner præcist.
Opdaterer pakkeindekset Først og fremmest. Hvis du arbejder med containere eller minimale billeder, mangler dette trin ofte, hvilket er grunden til, at der ikke vises noget, når du søger eller installerer.
sudo apt update
For at finde pakker skal du bruge egnet søgning Fuldtekstsøgning. Det giver dig mulighed for at finde præcise navne og relaterede alternativer uden at skulle åbne din browser.
apt search nombre
Hvis du vil se detaljer (tilgængelig version, oprindelse, afhængigheder, størrelse), skal du se databladet med passende showhvilket er meget praktisk, når du er bekymret for det specifikke versionsnummer, der skal installeres.
apt show paquete
En liste over, hvad der er installeret, og hvad der kan opdateres, vil også hjælpe dig med at revisionserklæringer, fejlfinde konflikter eller bekræfte, at fastgørelse er trådt i kraft på et system.
apt list --installed
apt list --upgradable
Installation af pakker er så simpelt som `apt install package`, og du kan kæde dem sammen. flere navne På samme måde. Hvis du ikke ønsker interaktive bekræftelser under scripts, skal du tilføje -y til kommandoen for at acceptere som standard.
sudo apt install paquete1 paquete2 -y
Afinstallation uden at slette indstillinger gøres med `apt remove`, og hvis du også har brug for at rydde op i lokale konfigurationsfiler, skal du bruge passende udrensningFrigør forældreløse afhængigheder med automatisk fjernelse efter større ændringer.
sudo apt remove paquete
sudo apt purge paquete
sudo apt autoremove
For at holde systemet opdateret har du to muligheder: `apt upgrade` for at opdatere allerede installerede pakker og apt fuld opgradering at tillade fjernelse eller udskiftning af pakker, når det er absolut nødvendigt.
sudo apt upgrade
sudo apt full-upgrade
Redigering af pakkekilder bestemmer, hvilke versioner dit system ser. Kommandoen `apt edit-sources` hjælper med at åbne listen og justere arkiver og filspejle, hvilket er vigtigt, når man arbejder med snapshots eller specifikke kanaler.
sudo apt edit-sources
Hvis du skal installere manuelt en .deb Hvis en specifik version ikke findes i arkiverne, eller du vil gennemtvinge en version, er dpkg lavniveauadministratoren, der udfører arbejdet direkte på filen.
sudo dpkg -i paquete.deb
Med hensyn til ækvivalenser forenkler apt klassiske apt-get og apt-cache handlinger. Til hurtig reference: apt opdatering svarende til apt-get update; apt install til apt-get install; apt search til apt-cache søgning; apt list –installerede en dpkg -l; apt full-upgrade til apt-get dist-upgrade.
Og ja, APT har humoristisk sans. Hvis du skriver apt moo Du vil se et lille påskeæg, der minder om gamle dage. Det er ikke til versionskontrol, men det lyser op. terminal fra tid til anden
Når vi lægger alt ovenstående sammen, tegner der sig et klart billede: konflikter ved installation af to versioner skyldes streng kontrol af ruter og afhængigheder, men der findes modne måder at overvinde dem på. Alternativer Det tillader skift mellem kompatible binære filer, versionsnavne og biblioteker med SONAME, hvilket letter sameksistens. Snap leverer parallelle instanser og isolation, og containere med LXC/LXD eller værktøjer som adapt håndterer kørende pakker fra forskellige udgivelser. Til detaljeret miljøkloning er pinning, snapshots og værktøjer som apt-clone det perfekte finish, mens symbolske links i multiboot-scenarier holder dine data og præferencer sikre. Med lidt planlægning kan det at have to versioner af den samme pakke i ... Linux Det holder op med at være en hovedpine og bliver en del af din værktøjskasse.
Passioneret forfatter om bytes-verdenen og teknologien generelt. Jeg elsker at dele min viden gennem skrivning, og det er det, jeg vil gøre i denne blog, vise dig alle de mest interessante ting om gadgets, software, hardware, teknologiske trends og mere. Mit mål er at hjælpe dig med at navigere i den digitale verden på en enkel og underholdende måde.
