Manajer Paket Non-Root

51

Dari penelitian saya, saya sepertinya memperhatikan bahwa semua manajer paket bersikeras untuk digunakan sebagai pengguna istimewa dan harus diinstal ke dalamnya /.

Biasanya, yang ingin saya lakukan adalah membuat akun sekali pakai, mengkompilasi beberapa perangkat lunak, dan menginstal ke $HOMEuntuk akun itu. Saya dapat mencoba berbagai pengaturan dan kemudian setelah selesai, hancurkan saja akun.

Namun, kompilasi perangkat lunak menjadi membosankan.

Pengalaman saya benar-benar hanya terbatas yum, tetapi saya tidak mengerti mengapa saya tidak dapat memasukkan file repo ke dalam ~/etc/yum.repos.ddan meminta Anda menginstal semuanya ke dalam akun rumah.

Apakah ada alasan mengapa manajer paket harus digunakan sebagai pengguna privat untuk menginstal perangkat lunak?

elmt
sumber

Jawaban:

35

Paket biner dikompilasi dengan asumsi bahwa mereka akan diinstal ke lokasi tertentu di /. Ini tidak selalu mudah diubah, dan itu akan membutuhkan upaya QA tambahan (yang cukup sulit di tempat pertama!) Untuk menentukan apakah biner tertentu adalah atau tidak dapat dipindahkan.

Sampai batas tertentu, Anda dapat menggunakan hal-hal seperti fakechroot untuk membuat seluruh sistem dalam subdirektori sebagai pengguna non-root, tetapi ini membosankan dan rapuh.

Anda akan lebih beruntung dengan paket sumber. Gentoo Prefix dan Rootless GoboLinux adalah paket manajer yang dapat menginstal ke non- /lokasi dan dapat digunakan oleh non- rootpengguna.

singkat
sumber
3
Saya akan menambahkan bahwa ada 2 jenis relokasi. Paket dapat menganggapnya selalu di tempat tertentu atau hal-hal lain di tempat tertentu (seperti /bin) atau mungkin berasumsi bahwa itu diinstal di tempat yang ditentukan oleh --prefix. Sementara yang terakhir mungkin diselesaikan oleh proyek-proyek tersebut, yang pertama membutuhkan tambalan pada kode sumber.
Maciej Piechotka
Opsi lain seperti Prefiks Gentoo, Rootless, dan Nix adalah pkgsrc . Itu berasal dari NetBSD tetapi bekerja pada berbagai platform.
Michael Ekstrand
2
Paket-paket biner dikompilasi dengan asumsi bahwa mereka akan diinstal ke lokasi-lokasi tertentu di/ Ini kedengarannya seperti persyaratan yang dapat dibenarkan mungkin 30 tahun yang lalu tetapi tidak sekarang. Bukankah misalnya envprogram dimaksudkan untuk menyelesaikan masalah semacam ini? Jika tidak mudah untuk keluar dengan skema untuk mengkonfigurasi biner untuk mencari biner lain di lokasi tertentu.
Piotr Dobrogost
1
@PiotrDobrogost untuk beberapa memperpanjang ya, untuk beberapa memperpanjang tidak. Misalnya tidak ada variabel lingkungan untuk /etcatau (menurut pengetahuan saya) /usr/lib/<packagename>/atau /usr/libexec/<packagename>/. /usr/sharedapat diubah oleh variabel XDG yang telah dirilis sekitar abad ini dan belum tentu diadopsi untuk program yang lebih lama.
Maciej Piechotka
28

Ada proyek manajer paket - Nix - dengan ide dasar yang menarik ( manajer pkg " fungsional "), yang juga mendukung operasi per pengguna:

Dukungan multi-pengguna

Mulai dari versi 0.11, Nix memiliki dukungan multi-pengguna. Ini berarti bahwa pengguna yang tidak memiliki hak istimewa dapat menginstal perangkat lunak dengan aman. Setiap pengguna dapat memiliki profil yang berbeda, satu set paket di toko Nix yang muncul di PATH pengguna. Jika pengguna menginstal paket yang sudah diinstal pengguna lain sebelumnya, paket tidak akan dibangun atau diunduh untuk kedua kalinya. Pada saat yang sama, tidak mungkin bagi satu pengguna untuk menyuntikkan kuda Trojan ke dalam paket yang mungkin digunakan oleh pengguna lain.

A CATATAN SAYA INGIN TAMBAH: Nix seharusnya dapat digunakan dalam sistem seperti Unix pilihan Anda (misalnya, distro Linux).

Ada juga koleksi paket terkait yang dapat diinstal dengan manajer paket Nix - Nixpkgs - dibangun untuk sejumlah platform :

  • GNU / Linux pada 32-bit dan 64-bit x86 (i686-linux dan x86_64-linux)
  • Mac OS X (i686-darwin dan x86_64-darwin)
  • FreeBSD (i686-freebsd dan x86_64-freebsd)
  • OpenBSD (i686-openbsd)
  • Windows / Cygwin (i686-cygwin),

dan distro yang terkait - NixOS :

NixOS adalah distribusi Linux berdasarkan Nix. Ini menggunakan Nix tidak hanya untuk manajemen paket tetapi juga untuk mengelola konfigurasi sistem (misalnya, untuk membangun file konfigurasi di / etc). Ini berarti, antara lain, adalah mungkin untuk dengan mudah memutar kembali seluruh konfigurasi sistem ke keadaan sebelumnya. Selain itu, pengguna dapat menginstal perangkat lunak tanpa hak akses root. Baca lebih lajut…

dan sistem pembangunan "berkelanjutan" yang terkait - Hydra .

imz - Ivan Zakharyaschev
sumber
4
Ringkasan yang bagus. Baru-baru ini GNU Guix diumumkan. Manajer paket GNU berdasarkan nix. savannah.gnu.org/forum/forum.php?forum_id=7436
Davorak
2
@Davorak Apa perbedaan antara nixdan guix. Karena sekarang saya benar-benar menggunakan nixuntuk pekerjaan saya, saya ingin tahu apakah saya dapat mempertimbangkan guixsebagai implementasi lain dari alat yang saya butuhkan. Bisakah saya membaca ringkasan perbedaan di suatu tempat? Mungkin, Anda bahkan bisa menulis jawaban dengan ringkasan di sini, mengumumkan satu lagi solusi alternatif?
imz - Ivan Zakharyaschev
6

Pertama-tama karena ketergantungan. Beberapa paket mungkin tidak diinstal oleh pengguna - seperti PolicyKit. Oleh karena itu akan memerlukan beban tambahan pada pemaket yang menyumbangkan waktu luang mereka dan biasanya menginstal program semudah mengetik sudo(stasiun pengguna tunggal) atau administrator yang mengomel.

Ada opsi untuk menginstal di $ HOME

  • 'Pengelola paket' primitif bahasa biasanya mendukungnya di luar kotak (seperti permata untuk Ruby atau komplotan rahasia untuk Haskell) atau dengan sedikit penyesuaian (saya lupa nama untuk python)
  • Baik tua ./configure --prefix=$HOME/sandbox --enable-cool-feature && make all install(atau varitasi seperti jhbuild).
  • Ada adalah program untuk menginstal di $ HOME beberapa tahun yang lalu. Namun saya tidak dapat menemukannya - saya kira hampir tidak ada yang menggunakannya karena mereka menginstalnya sendiri atau administrator cerewet.
Maciej Piechotka
sumber
1
Saya tidak benar-benar melihat bagaimana ini merupakan argumen yang meyakinkan. Hanya karena sebuah paket tidak berfungsi karena itu tidak dipanggil sebagai root tidak berarti idenya tidak layak. Diharapkan bahwa PolicyKit tidak akan berfungsi untuk situasi seperti ini. Ada banyak paket lain yang dapat diinstal tanpa hak akses root. Saya mengetahui manajer paket perangkat lunak (Python adalah EasyInstall), tetapi itu tidak berlaku secara global seperti yum atau apt-get. Adakah yang tahu nama program yang dimaksud Maciej?
Elmt
1
@elmt: Mungkin menyelundup , yang mungkin menarik bagi Anda pula (tapi itu alat, bukan sumber paket).
Gilles 'SANGAT berhenti jahat'
@Gilles: Tidak - itu punya GUI dan seharusnya 'sederhana'. Saya kira arah saat ini lebih dari synaptic / packagekit.
Maciej Piechotka
6

Saya menggunakan JuJu yang pada dasarnya memungkinkan untuk memiliki distribusi linux yang sangat kecil (hanya berisi manajer paket) di dalam direktori $ HOME / .juju Anda.

Memungkinkan sistem kustom Anda di dalam direktori home dapat diakses melalui proot dan, karenanya, Anda dapat menginstal paket apa pun tanpa hak root. Ini akan berjalan dengan baik untuk semua distribusi linux utama, satu-satunya batasan adalah JuJu dapat berjalan pada kernel linux dengan versi minimum yang direkomendasikan versi 2.6.32.

pengguna967489
sumber
4

Satu lagi dengan model yang agak berbeda adalah 0install . Ini didasarkan pada gagasan bahwa Anda tidak benar-benar menginstal paket, tetapi hanya menjalankannya dari namespace global yang mengunduh, mengkompilasi jika perlu, dan cache perangkat lunak yang ingin Anda gunakan.

Michael Ekstrand
sumber
4

Jika Anda baik-baik saja dengan mengkompilasi dari sumber dan menyelesaikan sendiri dependensi, terutama menginginkan manajer paket untuk menangani operasi penyebaran / undeploy / upgrade, Anda mungkin ingin melihat GNU Stow atau XStow yang agak ditingkatkan . Dengan mereka, Anda mengarahkan instalasi ke direktori terpisah (biasanya di bawah $PREFIX/stow) dan kemudian menyimpan symlink ke perangkat lunak dari awalan Anda yang sebenarnya. Ini membuatnya mudah untuk menghapus perangkat lunak sepenuhnya. Saya berhasil menggunakannya untuk mengelola perangkat lunak yang diinstal khusus di universitas saya.

Michael Ekstrand
sumber
3

Pengalaman saya benar-benar hanya terbatas pada yum, tetapi saya tidak mengerti mengapa saya tidak akan bisa memasukkan file repo ke ~ / etc / yum.repos.d dan minta yum menginstal semuanya ke dalam akun rumah.

Manajer paket Linux utama memandang dunia sebagai sysadmin ... di mana mesin adalah satu kesatuan. Ini memungkinkan Anda mendapatkan jawaban atas pertanyaan seperti "errata luar biasa apa yang berlaku untuk sistem X" dan "bagaimana sistem X dan sistem Y berbeda". Ini juga memungkinkan yum untuk memiliki "riwayat" yang dapat digunakan, memiliki versi rpmdb dan melakukan hal-hal seperti "yum - pembaruan keamanan" dll.

Ada beberapa manajer paket, seperti zero-install, yang mencoba melihat dunia seperti yang akan dilakukan pengguna ... yaitu. aplikasi apa yang saya punya akses.

Anda mungkin berpikir nanti adalah model yang lebih baik, tetapi IMNSHO ada alasan Anda belum pernah mendengar tentang zero-install tetapi telah mendengar tentang yum.

James Antill
sumber
2

Ada anak baru di blok tersebut: " JuNest (Jailed User NEST) - Distro berbasis Linux Arch yang berjalan pada setiap distro Linux tanpa akses root." @ https://github.com/fsquillace/junest Advantage adalah tidak memperkenalkan jenis format paket baru, jadi setelah pemasangan yang sangat mudah (minimal: 320 juta), repositori Arch Linux lengkap (lebih dari 13000) paket ATM) ada di ujung jari Anda.

eMPee584
sumber
1

Alat-alat yang digunakan oleh Slackware, secara khusus installpkg, dapat. Dari halaman manual:

--root /otherroot
       Install using a location other than / (the default) as the root of the 
       filesystem to install on. In the example given, use /otherroot instead.
       Setting the ROOT environment variable does the same thing.

Namun, saya tidak tahu ada satu pun dari frontend yang lebih baik yang dapat melakukan ini (misalnya slapt-get, sejauh yang saya tahu, tidak dapat melakukan ini). Secara teoritis, Anda harus bisa alias installpkgke installpkg --root ~/Apps- namun, saya pikir sebagian besar frontend memerlukan root untuk dijalankan, yang mengalahkan intinya.

baru123456
sumber
1

Saya sarankan http://linuxbrew.sh/

Ini pada dasarnya adalah garpu pembuatan bir untuk macOS dan telah mengkompilasi biner untuk penggunaan ...

Sangat bagus untuk menangani versi gcc yang lebih lama.

Jika Anda benar-benar ingin menginstal dengan tangan, panduan yang bermanfaat adalah http://www.linuxfromscratch.org/

HaoZeke
sumber
0

Yum perlu menulis ke database, yang dimiliki oleh root. Karena ini, Anda tidak dapat menggunakannya sebagai pengguna normal.

Anda dapat mencoba untuk mendekompresi file rpm (rpm2cpio package.rpm | cpio -idmv) di dalam direktori yang Anda pilih.

Tetapi ketika Anda akan menjalankan program Anda, Anda harus berhati-hati untuk memodifikasi LD_LIBRARY_PATH untuk memuat pustaka yang bergantung. Juga ini tidak akan mengurus dependensi.

Contoh:

# mkdir new_root
# cd new_root
# wget ftp://mirror.switch.ch/pool/4/mirror/centos/6.7/os/x86_64/Packages/vim-enhanced-7.4.629-5.el6.x86_64.rpm
# rpm2cpio vim-enhanced-7.4.629-5.el6.x86_64.rpm | cpio -idmv
# ./usr/bin/vim -version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 24 2015 02:23:23)

Di atas tidak memiliki pustaka dependen, jika tidak Anda harus menggunakan sesuatu seperti:

export LD_LIBRARY_PATH=./usr/lib ./usr/bin/program
kristi
sumber