Menginstal paket ke direktori lokal?

38

Saya ingin menginstal paket perangkat lunak, mirip dengan apt-get install <foo>tetapi:

  1. Tanpa sudo, dan
  2. Ke dalam direktori lokal

Tujuan dari latihan ini adalah untuk mengisolasi build independen di server integrasi berkelanjutan saya .

Saya tidak keberatan mengkompilasi dari sumber, jika itu yang diperlukan, tapi jelas saya lebih suka pendekatan sesederhana mungkin. Saya mencoba apt-get source --compile <foo>seperti yang disebutkan di sini tetapi saya tidak bisa membuatnya berfungsi untuk paket seperti autoconf. Saya mendapatkan kesalahan berikut:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Saya memiliki help2man yang dikompilasi di direktori lokal, tetapi saya tidak tahu bagaimana cara memberitahu apt-get itu. Ada ide?

PEMBARUAN : Saya menemukan jawaban yang hampir berfungsi di https://askubuntu.com/a/350/23678 . Masalahnya chrootadalah itu membutuhkan sudo. Masalahnya apt-get sourceadalah bahwa saya tidak tahu cara menyelesaikan dependensi. Saya harus mengatakan, chrootterlihat sangat menarik. Apakah ada perintah setara yang tidak memerlukan sudo?

Gili
sumber
Saya menyarankan itu duplikat dari pertanyaan ini: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…
7
@ kamil, tidak. Saya tidak mencoba menginstal tanpa akses jaringan. Saya mencoba menginstal tanpa sudodan ke direktori non-sistem.
Gili
4
Kawan, tolong jangan mundur pertanyaan saya tanpa menjelaskan alasannya . Terima kasih.
Gili
Jika Anda tidak memiliki root pada sistem, Anda tidak akan dapat menyelesaikan dependensi dengan mudah . Namun kadang-kadang mungkin; Anda harus mulai menginstal perangkat lunak di rumah Anda, mulai dengan dependensi terbawah, dan memodifikasi LD_PATH Anda sehingga program dapat menemukan pustaka mereka. Namun, Anda akan gagal jika salah satu paket membutuhkan root (atau suid) untuk dijalankan.
Januari
@ January, saya mencoba mengkompilasi proyek perangkat lunak di dalam sistem build otomatis. Sejauh yang saya tahu, tidak ada dependensi (diperlukan untuk mengkompilasi) memerlukan root.
Gili

Jawaban:

20

Ini, secara umum, tidak bisa dilakukan, karena Anda akan mengacaukan dengan sistem dependensi apt.

Ada dua solusi:

  1. Instal paket sumber, ubah ke direktori sumber, konfigurasikan dan instal paket terlepas dari sistem pengemasan secara manual ke direktori pilihan Anda.

    apt-get source <package>
    

    Ini tidak perlu root, mengunduh sumber paket, membukanya di direktori di dalam direktori saat ini. Anda kemudian dapat mengubah ke direktori itu, membuat modifikasi ke sumber, mengkonfigurasi instalasi ke target lain dll.

    Mengonfigurasi direktori instalasi mana yang harus diikuti oleh program tergantung pada program tertentu. Banyak program menggunakan ./configure --prefix localdiruntuk menargetkan instalasi ke localdir; tetapi sejauh ini tidak selalu demikian.

  2. Buat lingkungan chroot di mana Anda akan menginstal paket:

    debootstrap precise myfancyinstall
    

    Sekarang Anda telah membuat instalasi dummy di direktori myfancyinstall /

    chroot myfancyinstall
    

    Anda dapat menggunakan instalasi apt-get dalam kandang chroot untuk menginstal apa pun yang Anda inginkan.

Januari
sumber
Ini terlihat menjanjikan. Menggunakan apt-get sourcetanpa --compiletampaknya menekan peringatan tentang dependensi yang tidak terpenuhi (memungkinkan saya untuk menyelesaikannya sendiri)
Gili
Apakah ada cara untuk mendapatkan paket yang tidak memiliki sumber dengan cara ini juga?
soandos
Solusi (2) akan berfungsi apa pun. Kalau tidak, Anda sendirian: mungkin ada cara lain untuk menginstal paket. Atau download deb file paket dan membongkar dengan ar: ar vx mypackage.deb. Kemudian menganalisis isi paket dan mencari tahu cara menginstalnya secara manual.
Januari
14

menggunakan bash shell, dan mendapatkan file "package.deb" (dengan asumsi nama paket adalah "paket") Anda dapat menjalankan perintah berikut untuk mencapai apa yang Anda inginkan - menginstal paket sehingga direktori home Anda diperlakukan dengan cara yang sama "/ "akan diperlakukan dalam instalasi normal.

Ini perintahnya:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

Anda mungkin menghadapi beberapa kesalahan, seperti $ HOME / var / lib / dpkg / lock yang hilang jadi buat saja semua file yang hilang yang akan Anda dapatkan dari kesalahan dan kemudian instal akan bekerja tanpa sudo.

perhatikan bahwa jika "apt-get download" tidak berfungsi, Anda dapat mencoba "apt unduh" atau "paket unduhan apitutde".

jika tidak ada metode yang bekerja, Anda bisa mengunduh paket secara manual dari http://packages.ubuntu.com/

metode lain adalah dengan menjalankan perintah chroot dengan parameter $ HOME dan kemudian menginstal cara yang sama seperti di atas hanya tanpa --root = $ HOME. perintah itu akan membawa Anda ke dalam shell di mana "/" adalah $ HOME Anda saat ini. untuk kembali ke mode normal jangan lupa untuk "keluar"

semoga berhasil.

pengguna172681
sumber
Setelah membuat file yang hilang dpkg mengeluh, itu baru saja mulai segfaulting.
Matt Chambers
0

Jika Anda menggunakan web-hoster bersama dengan sshakses tetapi tidak apt-getada root, dll. Atau sistem serupa yang dibatasi, yang berikut ini mungkin cocok untuk Anda. Ini bekerja untuk saya pada sistem di mana uname -amengembalikan sesuatu sepertiSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
iolsmit
sumber