pengembangan-web-mp.com

Apakah ada cara untuk mendapatkan APT untuk menginstal paket ke direktori rumah saya?

Apakah ada cara untuk mendapatkan APT untuk menginstal paket ke direktori home saya?

Saya tidak ingin membuat perubahan sistem luas.

Atau, apakah ada manajer paket linux berbasis home-direktori?

42
Joel McCracken

Dpkg tidak memiliki fitur --relokasi yang dimiliki RPM. Perlu mempertimbangkan berapa banyak paket RPM yang mendukung fitur itu. Pada dasarnya, itu tidak bisa dilakukan.

Yang dapat Anda lakukan adalah menggunakan chroot jika Anda ingin menguji sesuatu sebelum menginstalnya secara global pada sistem. Untuk melakukan ini, Anda harus bisa mendapatkan akses ke root. Hal pertama yang harus dilakukan adalah membuat chroot dasar:

# debootstrap lenny lenny-chroot

Ini menciptakan chroot Lenny di dalam lenny-chroot direktori.

Sekarang kita bisa masuk ke chroot:

# chroot lenny-chroot

Sekarang kita dapat melakukan apa yang kita inginkan dan menginstal apa pun tanpa itu mengacaukan sisa sistem. Setelah selesai, cukup ketik keluar atau tekan ctrl-D

17
David Pashley

Linuxbrew adalah manajer paket non-root untuk Linux (berdasarkan sistem manajemen paket Homebrew populer untuk OS X) yang mengkompilasi dari sumber dan menyimpan binari di direktori home Anda.

Mengutip dokumen, fitur Linuxbrew adalah:

  • Dapat menginstal perangkat lunak ke direktori home sehingga tidak memerlukan Sudo
  • Instal perangkat lunak yang tidak dikemas oleh distribusi asli
  • Instal versi perangkat lunak terbaru ketika distribusi asli sudah tua
  • Gunakan manajer paket yang sama untuk mengelola mesin Mac dan Linux Anda
8
Tim Smith

Awalan Gentoo melakukan apa yang Anda inginkan.

Itu menginstal semua paket ke direktori yang ditentukan. Tidak diperlukan akses root. Jika Anda ingin menyingkirkannya, cukup hapus direktori basis.

PS: Ini tidak berfungsi di Ubuntu> = 11.04, atau turunan Debian lainnya dengan Multiarch.

7
hayalci

Sama seperti tambahan kecil pada opsi kompilasi, ada opsi setengah jalan untuk mengkompilasi ke dalam sebuah paket dengan opsi awalan yang berbeda pada waktu kompilasi (dengan "checkinstall" atau mungkin beberapa metode lain). Keuntungannya adalah bahwa paket akan muncul pada manajer paket seperti aptitude atau synaptic.

Selain itu saya pikir dalam beberapa kasus mungkin untuk mengunduh .deb yang sebenarnya dan memaksakan awalan yang berbeda melalui instalasi dpkg, tapi saya pikir itu bukan sesuatu yang dapat dilakukan dengan paket acak apa pun, tetapi harus dikompilasi dengan beberapa variabel untuk lokasi mereka (bukan awalan eksplisit literal) yang akan Anda ekspor sebelum menginstal. Saya tidak tahu apa-apa tentang prosedur ini, google untuk "dpkg instdir prefix".

4
the dsc

Anda dapat menggunakan fakechroot - lihat demo di situs web mereka.

2
niutech

Tidak, saya pikir Anda tidak bisa.

Yang terbaik yang bisa saya pikirkan saat ini adalah menggunakan apt-get source dan kompilasi paket Anda. Mungkin Anda bisa entah bagaimana Tweak prosedur (yang bisa lebih atau kurang otomatis) untuk menginstal paket di rumah Anda.

Satu lagi adalah menggunakan dpkg -X untuk mengekstraknya di direktori pilihan Anda.

1
ynimous

Rootless GoboLinux dapat melakukan persis apa yang Anda minta: manajer paket, tanpa hak istimewa, di direktori home Anda sendiri. Semoga Anda tahu apa yang Anda lakukan; rootless bukanlah mode instalasi Gobo yang paling terpelihara dengan baik, dan ketika saya menggunakannya beberapa tahun yang lalu diperlukan beberapa penyesuaian karena skrip instalasi agak ketinggalan zaman relatif terhadap perubahan Gobo lainnya.

Ada juga klik yang mengemas beberapa _ .debs, dapat menginstal paket ke direktori home Anda, dan tidak memerlukan hak akses root untuk beroperasi ... tetapi pengaturan awal memang membutuhkan root.

1
ephemient

Saya biasanya mendapatkan sumber dan memeriksa file seperti "INSTALL". Biasanya ada instruksi yang harus dilakukan ./configure --prefix=somedir. Maka Anda harus menambahkan somedir/bin ke jalur Anda.

1
Ian Kelling

Saya punya solusi yang saya berhasil gunakan untuk menginstal koleksi besar paket perangkat lunak yang bekerja sama pada server Debian sekolah, di mana saya tidak memiliki akses root sama sekali (bahkan untuk menginstal palungan paket lain). Itu tidak menggunakan deboostrap atau pengelola paket.

Metode ini sebagian manual, tetapi saya sudah melakukan yang terbaik untuk membuatnya nyaman.

Ia menggunakan skrip ini yang saya sebut install (jangan lupa untuk chmod +x Itu):

#!/bin/bash

# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME

# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX

# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
    file="${PREFIX}${f}"
    if grep -Iq . "$file"; then
        if grep -q '/usr' "$file"; then
            # interactively ask for each occurence, if it should be replaced
            vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
        fi
    else
        echo "Leaving binary file $file unmodified"
    fi
done

Jadi biasanya saya pertama kali mengunduh file deb menggunakan apt-get download package_name. Lalu saya jalankan ./install package_name_blabla.deb, dan secara manual memutuskan tentang setiap kemunculan /usr dalam file yang sudah dibongkar, jika harus diganti oleh $PREFIX/usr atau tidak.

Keputusan ini sepenuhnya tergantung pada paket mana yang diinstal sistem dan mana yang diinstal menggunakan metode ini. Biasanya, mis. file pkg-config membutuhkan substitusi ini, sedangkan baris Shebang seperti #!/usr/bin/Perl tidak. Aturan umum adalah jalur yang dihasilkan harus mengarah ke file yang ada.

Dengan paket yang terinstal dengan cara ini, Anda jelas perlu memberitahu program lain tentang mereka. Ini dapat dicapai dengan menambahkan nilai yang benar ke LD_LIBRARY_PATH, PATH, PYTHONPATH, PKG_CONFIG_PATH, CMAKE_MODULES_PATH, CMAKE_PREFIX_PATH dll.

Ada peringatan dalam pendekatan ini, bahwa dependensi tidak diunduh/diinstal secara otomatis; Anda harus melacaknya secara manual.

Juga APT jelas tidak tahu tentang paket-paket ini, jadi itu akan selamanya menunjukkan mereka sebagai hilang. Tapi itu masuk akal - siapa yang ingin menginstal aplikasi seluruh sistem yang bergantung pada instalasi pengguna.

Jika Anda ingin menghapus instalasi suatu program, Anda dapat membuat daftar isi arsip deb menggunakan ar p "$1" data.tar.xz | tar tJ dan kemudian hapus semua file ini dari PREFIX.

0
Martin Pecka

Saya kesulitan membayangkan bagaimana itu akan bekerja dengan repositori resmi dari distribusi. Bagaimana seharusnya mengatasi dependensi? Dari sistem atau dari direktori home Anda? Bagaimana jika ia menemukan versi yang berbeda di keduanya?

Yang terbaik yang bisa saya pikirkan adalah lingkungan chroot seperti yang dilakukan orang untuk aplikasi 32-bit pada sistem 64-bit. Ini lebih overhead karena Anda akan memanggil debootstrap di chroot, tetapi dengan beberapa symlinking , menyenangkan skrip pembungkus Shell, mungkin melakukan apa yang Anda inginkan.

0
kbyrd

Ada sangat sedikit kasus di mana Anda perlu menginstal paket ke folder rumah Anda.

Namun Anda dapat mengkompilasi dan menginstal perangkat lunak ke mesin lokal Anda. Cukup unzip, lalu konfigurasikan dengan ./configure --prefix=$HOME/local atau direktori lain. Anda kemudian dapat make dan make install seperti biasa. Ini akan mengkompilasi dan menginstal program itu di ~/local/, mis. program yang Anda jalankan akan dalam ~/local/bin/programmname.

0
Rory

Saya masih bekerja pada masalah, tetapi debootstrap pada dasarnya apa yang Anda butuhkan, dan harus bekerja dengan fakeroot. debootstrap hanyalah sekelompok skrip Shell, jadi saya menariknya terpisah untuk melihat apa yang membuatnya dicentang. Bagian yang sulit adalah menghapus file setelah diinstal.

0
Perkins

Sayangnya saya belum pernah mendengar ada distro yang menyediakan sesuatu seperti ini (walaupun saya yakin itu akan menjadi sangat populer). Anda mungkin dapat meniru distro berbasis rpm meskipun ... Saya belum mencoba ini, tetapi Anda mungkin dapat membangun basis data rpm berbasis pengguna dan kemudian menginstal rpm ke dalam basis data pengguna.

Cobalah mengatur distro berbasis pengguna baru dengan:

rpm --initdb --dbpath DIRECTORY

Lalu ada beberapa opsi yang dapat membantu:

  • --prefix
  • --relocate
0
Andrew Case

Dari pengalaman saya sendiri, tidak ada cara mudah untuk menggunakan paket DEB yang ada untuk menginstal ke direktori lain yang bukan lingkungan chroot . Alat instalasi Debian/Ubuntu dpkg / aptitude / dselect semua memerlukan hak akses root untuk berfungsi dengan baik.

Sekarang diberikan DEB sumber Anda dapat memodifikasi file Debian/aturan untuk memiliki paket membangun dan menginstal ke pohon direktori yang berbeda, tetapi kemudian Anda tidak menggunakan paket biner yang sudah tersedia.

Seperti yang telah disebutkan orang lain, Anda dapat menggunakan debootstrap dan dengan mudah membangun lingkungan chroot, yang telah saya lakukan di masa lalu untuk memiliki lingkungan 32-bit pada Host 64-bit, tetapi ini membutuhkan menginstal chroot dengan setidaknya paket dasar digandakan. Jika Anda memiliki ruang dan ini adalah solusi yang layak, Anda dapat memasangkannya dengan dchroot, atau bahkan lebih baik schroot, untuk memudahkan eksekusi aplikasi yang diinstal dalam lingkungan chroot.

0
Jeremy Bouse