- Gunakan pembaruan-alternatif dan paket-paket berversi untuk memasang bersama dan mengganti biner.
- Snap memungkinkan beberapa contoh terisolasi dari paket yang sama sejak snapd 2.36.
- Untuk mengkloning versi yang tepat, gabungkan pilihan dpkg, penyematan, dan cuplikan.
- Kontainer (LXC/LXD, adapt) dan tautan simbolik mencegah konflik antar lingkungan.
Dalam penggunaan GNU/Linux sehari-hari, kebutuhan yang sangat spesifik sering muncul: menjalankan dua versi perangkat lunak yang sama pada saat yang bersamaanMisalnya, program A bergantung pada pustaka atau alat dalam versi 1, dan program B memerlukan versi 2. Sekilas, kedengarannya sederhana, tetapi ketika pengelola paket dan sistem berkas ikut berperan, masalah pun muncul.
Kabar baiknya adalah, dengan alat yang tepat, Ya, memungkinkan beberapa versi dapat hidup berdampingan. biner, pustaka, dan aplikasi, baik di sistem yang sama, dalam kontainer, atau bahkan menggunakan format paket modern. Dalam panduan ini, Anda akan melihat mengapa hal ini tidak selalu mudah dan, yang terpenting, cara mencapainya secara terorganisir dan aman di Debian, Ubuntu, dan turunannya.
Mengapa menginstal dua versi paket yang sama tidak begitu mudah
Kendala pertama adalah manajemen rute: dalam sistem berbasis Debian, setiap paket menginstal file di lokasi standar seperti /usr/bin, /usr/lib atau /usr/includeJika dua paket mencoba menempatkan berkas yang sama di jalur yang sama, manajer paket akan memblokir instalasi karena konflik.
Poin kedua adalah kompatibilitas biner. Pustaka asli menggunakan mekanisme versi yang disebut NAMA SOHal ini memungkinkan Anda memiliki libX.so.1 dan libX.so.2 secara bersamaan, tetapi bukan dua berkas libX.so.1 dengan nama berkas yang sama. Itulah sebabnya Anda akan melihat banyak pustaka mengemas versi-versi utama dalam paket terpisah, seperti libssl1.1 atau libssl3, yang dapat berdampingan tanpa mengganggu satu sama lain.
Faktor kunci lainnya adalah pengemasan header dan tautan pengembangan. Paket -dev (misalnya, libssl-dev) memasang jalur kanonik di /usr/include dan tautan .so tanpa versi untuk kompilasi. Perintah -dev biasanya melakukan hal ini. tidak Mereka dapat diinstal secara paralel karena mereka menimpa file yang sama. Di sinilah mekanismenya pembaruan-alternatif atau, jika perlu, kompilasi dengan awalan terpisah seperti /opt.
Terakhir, ingatlah bahwa Debian dan Ubuntu menjamin bahwa Setiap rute dalam sistem "dikelola" oleh satu paketPerjanjian kepemilikan berkas ini memungkinkan pembaruan, penghapusan instalasi, dan audit tanpa kekacauan, tetapi ini menyiratkan bahwa memiliki dua biner identik di jalur yang sama tidak diizinkan kecuali pengemasan mengizinkannya.
Metode praktis untuk versi yang hidup berdampingan tanpa merusak sistem
Alternatif di Debian/Ubuntu untuk memilih biner
Banyak alat menawarkan beberapa versi yang dapat diinstal bersama (misalnya, gcc-4.4 dan gcc-8.2), dan versi yang aktif dipilih menggunakan pembaruan-alternatifSistem ini membuat tautan terkelola di /etc/alternatives yang mengarah ke eksekusi yang diinginkan.
Alur kerja umum untuk mengkompilasi dengan dua GCC yang berbeda mungkin adalah: instal kedua versi spesifik dan catat alternatifnya sehingga Anda dapat memilih salah satu yang menarik minat Anda kapan saja.
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
Dengan perintah terakhir Anda akan dapat alternatif interaktif Versi default gcc. Periksa setiap kasus dengan gcc –version, versi mana yang aktif di PATH sistem.
Paket yang dapat diinstal dengan koin dan nama versi
Cara lain adalah dengan mengandalkan paket itu sendiri. Di Debian/Ubuntu, pustaka dan terkadang aplikasi biasanya menawarkan paket dengan nama yang mencakup versi utama Untuk memungkinkan koeksistensi mereka: libfoo1, libfoo2, libssl1.1, libssl3, dst. Pendekatan ini ideal ketika Anda memerlukan dua aplikasi untuk ditautkan dengan mayoritas berbeda tanpa persilangan apa pun.
Perlu diingat bahwa paket -dev, saat menginstal header dan tautan generik, sering kali konflik dengan versi -dev lainnya. Jika Anda perlu mengompilasi terhadap dua mayoritas, pertimbangkan untuk menggunakan kontainer, chroot, atau memasang salah satu cabang di jalur khusus di bawah /opt untuk menghindari konflik.
Instalasi paralel dengan Snap
Snap membuat hidup lebih mudah dalam skenario ini karena setiap paket terisolasi dengan dependensinyaSejak snapd 2.36, telah ada dukungan untuk beberapa contoh snap yang sama, dengan konfigurasi, layanan, dan antarmuka yang terpisah.
Untuk mengaktifkannya pada sistem yang masih terdaftar sebagai eksperimental, aktifkan opsi tersebut dan kemudian instal instance dengan nama berbeda dari snap yang sama. Anda akan melihat bahwa Anda dapat memiliki beberapa salinan dari versi yang sama atau bahkan versi yang berbeda jika Anda bermain dengan saluran.
sudo snap set system experimental.parallel-instances=true
sudo snap install odio_first odio_second
Hasilnya akan mencerminkan instalasi terpisah, seperti ini: hate_second 1 dari Canonical✓ terinstal dan odio_first 1 dari Canonical✓ terpasang. Hal yang sama berlaku untuk alat seperti GIMP atau VLC, yang membuka opsi untuk pengujian, regresi, atau lingkungan yang terkendali.
Kontainer dengan adapt, LXC dan LXD
Ketika Anda perlu menjalankan paket dari versi Ubuntu lain di sistem Anda, Anda dapat menggunakan menyesuaikanUtilitas ini mengunduh dan mengonfigurasi kontainer dengan rilis target dan menjalankan aplikasi yang Anda butuhkan di dalamnya. Hal ini memungkinkan Anda menggunakan perangkat lunak Ubuntu 15.10 di Ubuntu 14.04, misalnya, tanpa memengaruhi sistem dasar Anda.
Ide utama di balik kontainer adalah untuk melampirkan proses di dalam bak pasir berkas, jaringan, dan sumber daya, jauh lebih ringan daripada mesin virtual penuh. Di Ubuntu, LXC dan LXD adalah fondasi untuk jenis isolasi ini; jika Anda tertarik mempelajari lebih lanjut, Anda dapat menemukan dokumentasi yang bagus di [tautan ke dokumentasi]. LXC, Lxd dan Wiki Gentoo.
Bahasa dan runtime dengan manajemen versi asli
Dalam dunia bahasa pemrograman, cukup umum untuk memiliki banyak versi. Ular sancaPendekatan yang paling praktis adalah menggunakan lingkungan virtual (venv), dan jika Anda memerlukan versi interpreter sendiri, alat seperti pyenv. JawaSistem alternatif memungkinkan Anda untuk beralih di antara berbagai versi JDK/JRE. Dan di PHP Anda dapat menginstal php7.x dan php8.x secara paralel dan memilih layanan atau baris perintah dengan alternatif atau konfigurasi server web.
Kompiler seperti gcc dan g++ Mereka juga sering dirilis dengan versi yang dapat diinstal bersama, dan seperti yang telah Anda lihat, update-alternatives adalah jembatan yang sempurna untuk beralih di antara keduanya tanpa perlu mengubah apa pun. Kuncinya dalam semua kasus ini adalah setiap versi memiliki nama binernya sendiri atau berada di jalur yang berbeda.
Replikasi tim dengan versi yang sama persis
Pertanyaan lain yang sering muncul adalah bagaimana mengkloning keadaan satu sistem ke sistem lain dan melestarikannya. versi yang samaBukan hanya daftar paket. Metode klasik dengan dpkg memang berguna, tetapi metode ini hanya mengambil paket dan tidak selalu mengikuti versi persisnya jika repositori telah berubah.
Untuk membuang daftar paket dari host referensi, Anda dapat menggunakan: dpkg –get-selection
dpkg --get-selections > /tmp/dpkglist.txt
Dan di mesin baru, terapkan pilihan itu sebelum menyelesaikan dependensi dengan apt:
sudo dpkg --set-selections < /tmp/dpkglist.txt
sudo apt-get dselect-upgrade
Jika Anda perlu mengkloning persis seperti apa adanya, pertimbangkan untuk melengkapinya dengan teknik seperti penyematan versi dan snapshot repositori. Di Debian terdapat snapshot.debian.org dan di Ubuntu terdapat mirror dengan snapshot; mengarahkan sources.list ke tanggal tertentu akan mencegah instalasi versi selain versi asli.
Selain itu, Anda dapat mengatur versi tertentu dan menguncinya dengan tanda yang tepatuntuk mencegah pemutakhiran yang tidak diinginkan hingga pengklonan lingkungan selesai.
sudo apt-get install paquete=1.2.3-1ubuntu1
sudo apt-mark hold paquete
apt-cache policy paquete
Alat seperti klon-apt Mereka juga membantu mengekspor dan mengimpor status, termasuk repositori, yang meningkatkan tingkat akurasi. Apa pun metode yang Anda pilih, intinya adalah menggabungkan daftar paket, versi persisnya, dan sumber beku sehingga tujuannya mencerminkan asal.
Jika Anda sering menginstal ulang, otomatisasi dengan yang kecil naskah periksa apakah folder tersebut ada di /data, salin jika perlu dan membuat tautan simbolisDengan cara ini, perpindahan dari satu distro ke distro lain akan berjalan lancar, menghemat waktu dan menjamin konsistensi.
Beberapa distribusi Linux pada PC yang sama tanpa kehilangan konten Anda
Jika Anda mengembangkan atau menguji pada rilis yang berbeda, Anda mungkin lebih suka memiliki beberapa instalasi di komputer Anda. Untuk menghindari file duplikat dan komplikasi, praktik yang sangat efektif adalah memusatkan dokumen dalam partisi umum dan menghubungkannya dari setiap sistem dengan tautan simbolis.
Usulannya sederhana: buat partisi seperti /data, dan di dalamnya Desktop, Dokumen, folder Anda downloadKemudian, di setiap sistem, hapus folder home dan buat tautan ke /data. Dengan cara ini, ~/.config, ~/Desktop atau ~/Documents Mereka menunjuk ke lokasi bersama yang sama.
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
Sebaiknya Anda selektif dalam pengaturan. File preferensi desktop berubah dari satu versi ke versi lainnya dan dapat menyebabkan masalah. Namun, untuk apps stabil seperti GIMP atau InkscapeAnda dapat menautkan folder konfigurasi dan mempertahankan pengalaman yang sama di semua instalasi Anda.
mkdir -p /datos/.config/GIMP
rm -rf ~/.config/GIMP
ln -s /datos/.config/GIMP ~/.config/GIMP
Jika Anda sering menginstal ulang, otomatisasi proses dengan skrip kecil yang memeriksa apakah folder tersebut ada di /data, menyalinnya jika perlu, dan membuat tautan simbolisDengan cara ini, perpindahan dari satu distro ke distro lain akan berjalan lancar, menghemat waktu dan menjamin konsistensi.
Pengingat yang berguna tentang APT, dpkg, dan perangkat lunak manajemen versi lainnya.
Di Debian dan turunannya, APT adalah alat modern yang mencakup fungsi apt-get dan apt-cachedpkg menginstal paket .deb secara manual, sementara dpkg menginstalnya secara manual. Memahami dasar-dasarnya akan membantu Anda menemukan dan memperbaiki versi secara akurat.
Perbarui indeks paket Pertama-tama. Jika Anda bekerja dengan kontainer atau gambar minimal, langkah ini sering terlewat, sehingga tidak muncul apa pun saat pencarian atau penginstalan.
sudo apt update
Untuk menemukan paket, gunakan pencarian tepat Pencarian teks lengkap. Ini memungkinkan Anda menemukan nama persis dan alternatif terkait tanpa harus membuka peramban.
apt search nombre
Jika Anda ingin melihat detail lebih lanjut (versi yang tersedia, asal, dependensi, ukuran), konsultasikan lembar data dengan pertunjukan yang tepatyang sangat praktis ketika Anda khawatir tentang nomor versi tertentu yang akan diinstal.
apt show paquete
Mencantumkan apa yang terinstal dan apa yang dapat diperbarui juga akan membantu Anda laporan audit, men-debug konflik atau mengonfirmasi bahwa penyematan telah berlaku pada suatu sistem.
apt list --installed
apt list --upgradable
Menginstal paket semudah `apt install package`, dan Anda dapat menggabungkannya. beberapa nama Senada dengan itu. Jika Anda tidak menginginkan konfirmasi interaktif selama skrip, tambahkan -y ke perintah untuk menerimanya secara default.
sudo apt install paquete1 paquete2 -y
Menghapus instalasi tanpa menghapus pengaturan dilakukan dengan `apt remove`, dan jika Anda juga perlu membersihkan file konfigurasi lokal, gunakan pembersihan yang tepatSetelah perubahan besar, bebaskan dependensi yatim piatu dengan autoremove.
sudo apt remove paquete
sudo apt purge paquete
sudo apt autoremove
Untuk menjaga sistem tetap mutakhir, Anda memiliki dua pilihan: `apt upgrade` untuk memperbarui paket yang sudah terinstal dan peningkatan penuh yang tepat untuk juga memungkinkan pemindahan atau penggantian paket bila benar-benar diperlukan.
sudo apt upgrade
sudo apt full-upgrade
Mengedit sumber paket menentukan versi mana yang dilihat sistem Anda. Perintah `apt edit-sources` membantu membuka daftar dan menyesuaikan repositori dan mirror, yang sangat penting saat bekerja dengan snapshot atau saluran tertentu.
sudo apt edit-sources
Jika Anda perlu menginstal secara manual .deb Jika versi tertentu tidak ada dalam repositori atau Anda ingin memaksakan suatu versi, dpkg adalah manajer tingkat rendah yang melakukan pekerjaan langsung pada berkas tersebut.
sudo dpkg -i paquete.deb
Dalam hal kesetaraan, apt menyederhanakan tindakan apt-get dan apt-cache klasik. Untuk referensi cepat: Update apt setara dengan apt-get update; apt install menjadi apt-get install; apt search menjadi apt-cache search; apt list –installed a dpkg -l; apt full-upgrade menjadi apt-get dist-upgrade.
Dan ya, APT punya selera humor. Jika Anda mengetik apt moo Anda akan melihat telur Paskah kecil yang mengingatkan kita pada masa lalu. Ini bukan untuk kontrol versi, tetapi mencerahkan segalanya. terminal kadang.
Bila kita gabungkan semua hal di atas, gambaran yang jelas akan muncul: konflik saat memasang dua versi disebabkan oleh kontrol rute dan dependensi yang ketat, tetapi ada cara yang matang untuk mengatasinya. Alternatif Ini memungkinkan peralihan antar biner yang kompatibel, nama versi, dan pustaka dengan SONAME yang memfasilitasi koeksistensi, Snap menyediakan instans paralel dan isolasi, dan kontainer dengan LXC/LXD atau alat seperti adapt menangani paket yang berjalan dari rilis yang berbeda. Untuk kloning lingkungan yang detail, penyematan, snapshot, dan utilitas seperti apt-clone adalah sentuhan akhir yang sempurna, sementara dalam skenario multiboot, tautan simbolik menjaga data dan preferensi Anda tetap aman. Dengan sedikit perencanaan, memiliki dua versi paket yang sama di Linux Ini berhenti menjadi hal yang menyulitkan dan menjadi bagian dari kotak peralatan Anda.
Penulis yang bersemangat tentang dunia byte dan teknologi secara umum. Saya suka berbagi ilmu melalui tulisan, dan itulah yang akan saya lakukan di blog ini, menunjukkan kepada Anda semua hal paling menarik tentang gadget, perangkat lunak, perangkat keras, tren teknologi, dan banyak lagi. Tujuan saya adalah membantu Anda menavigasi dunia digital dengan cara yang sederhana dan menghibur.
