Bagaimana cara menginstal program secara lokal tanpa hak sudo?

73

Asumsikan saya memiliki akses ssh ke beberapa server Ubuntu sebagai pengguna dan saya perlu beberapa alat sistem tidak diinstal untuk kenyamanan (mc, rtorrent, mcedit). Saya tidak ingin repot admin untuk program kecil ini.

Apakah ada cara untuk menginstalnya (membuatnya berjalan) tanpa menggunakan sesuatu seperti sudo apt-get install?

yura
sumber
Juga lihat Di mana seharusnya executable lokal ditempatkan? untuk diskusi yang relevan.
George M
kemungkinan duplikat Instalasi pada debian 5 32-bit tanpa menjadi root
Gilles 'SO- stop being evil'
Lihat juga Melacak program
Gilles 'SO- stop being evil'
1
Lihat juga Manajer Paket Non-Root
Gilles 'SO-stop being evil'

Jawaban:

33
  1. Kompilasi dan instal ke ~/bin(dan edit Anda .bashrcuntuk mengatur PATHuntuk memasukkannya). perpustakaan juga dapat dikompilasi dan diinstal ke dalam ~/lib(set LD_LIBRARY_PATHto point to itu), dan header pengembangan dapat diinstal ke misalnya ~/includes.

  2. Bergantung pada perincian spesifik program yang ingin Anda instal dan perpustakaan tempat mereka bergantung, Anda dapat mengunduh file .deb dan menggunakan ' dpkg-deb -x' untuk mengekstraknya di bawah direktori home Anda. Anda kemudian akan memiliki banyak "menyenangkan" pengaturan PATH, LD_LIBRARY_PATHdan lainnya variables. Semakin kompleks program atau aplikasi yang Anda instal, semakin banyak kesenangan yang akan Anda lakukan :)

    Anda tentu saja tidak akan dapat menginstal setuidbinari dengan cara ini - mereka akan menginstal tetapi (karena Anda tidak memiliki izin untuk chew mereka untuk me-root atau mengatur setuidbit pada mereka) mereka hanya akan menjadi binari normal yang dimiliki oleh Anda .

    Demikian pula, daemon dan layanan sistem yang berharap untuk berjalan sebagai tertentu UIDatau memiliki kemampuan untuk mengubah uid, atau mengharapkan file berada dalam /etcagak ~/etcdan sebagainya tidak mungkin berfungsi dengan baik, jika sama sekali.

  3. Kebanyakan sysadmin akan mempertimbangkan mcdan mceditmenjadi "tidak berbahaya", program tidak berbahaya.

    Namun, sangat sedikit yang menganggap menginstal klien torrent tidak berbahaya, terutama jika mereka harus membayar bandwidth atau akhirnya menjadi tanggung jawab hukum. Sebagian besar sysadmin mungkin tidak akan sepenuhnya bahagia bagi pengguna akhir untuk menginstal perangkat lunak seperti itu tanpa izin. Mereka mungkin mengatakan "yakin, silakan, hancurkan dirimu" atau mereka mungkin tidak ... tetapi Anda harus bertanya tentang apa pun yang dapat menyebabkan masalah bagi pemilik / administrator mesin.

cas
sumber
Saya pernah mendengar bahwa pengaturan LD_LIBRARY_PATHadalah peretasan jahat . Apakah ini berlaku di sini juga, atau apakah saya salah paham?
Will Vousden
1
Semua masalah dengan pengaturan LD_LIBRARY_PATH berlaku. ya, itu, atau bisa juga, peretasan jahat. kadang-kadang peretasan kejahatan diperlukan untuk mencapai tujuan tertentu ... yang paling penting ketika melanggar "aturan" adalah untuk mengenal mereka dengan cukup baik untuk mengetahui apa yang mereka rancang untuk menyelamatkan Anda, dan mengapa Anda harus melanggarnya dalam kasus khusus ini , dan apa risikonya atau mungkin.
cas
Saya hanya perlu menginstal program independen (zoom), jadi pertama-tama saya mencoba opsi ke-2 ( dpkg-deb -xke direktori lokal). Bekerja seperti pesona. Saya tidak perlu melakukan LD_LIBRARY_PATHperetasan. Bahkan jika saya harus melakukannya, saya akan melakukannya di baris perintah yang sama agar tidak mempengaruhi pengaturan global (misalnya $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony
Anda hanya perlu mengatur LD_LIBRARY_PATH jika satu atau lebih paket yang ingin Anda instal menyediakan pustaka bersama. Jika itu hanya executable & data & docs & config file dll, maka itu dapat menggunakan pustaka sistem.
cas
50

Anda perlu mengkompilasi ini dari sumber. Seharusnya hanya masalah

apt-get source PACKAGE
./configure --prefix=$HOME/myapps
make
make install

Biner kemudian akan ditempatkan di ~/myapps/bin. Jadi, tambahkan export PATH="$HOME/myapps/bin:$PATH"ke .bashrcfile Anda dan muat ulang .bashrcfile dengan source ~/.bashrc. Tentu saja, ini mengasumsikan bahwa gcc diinstal pada sistem.

eof
sumber
6
Bagaimana dengan dependensi? Apakah ada cara untuk menanganinya secara otomatis tanpa menjalankan kode yang sama untuk masing-masing?
yura
1
@yura tidak, Anda harus melakukannya sendiri.
Ulrich Dangel
Bagaimana jika Anda tidak memiliki hak istimewa untuk melakukan ini? Apakah biasanya memiliki izin untuk mengkompilasi perangkat lunak tanpa sudo / akses root?
Freedo
5

Anda dapat menggunakan JuNest , yang menciptakan wadah Linux kecil di direktori pengguna, tempat Anda dapat menginstal paket apa pun.

niutech
sumber
0

Saya menghadapi masalah yang sama, di sini adalah bagaimana saya cepat memperbaikinya, dengan asumsi Anda memiliki server linux dengan OS dan arsitektur yang sama.

  1. Instal perangkat lunak pada sistem yang Anda kontrol

  2. Temukan contoh yang dapat dieksekusi which pythondan salin ke~/

  3. Salin perpustakaan dengan:

    ldd "$(which python)"  | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' ~/
    

Transfer yang dapat dieksekusi dan perpustakaan ke sistem lain di mana Anda hanya memiliki hak istimewa lokal, kemudian jalankan yang berikut:

mkdir ~/lib
export PATH="$PATH:~/lib"
export LD_LIBRARY_PATH=~/lib:/lib:/usr/lib

Ini akan membuat folder ~/libuntuk menyimpan perpustakaan, menambahkannya ke jalur Anda, dan memberi tahu LD untuk melihat perpustakaan di sana, jadi tambahkan saja berkas executable dan perpustakaan di sana, sekarang Anda dapat menjalankannya seperti yang Anda inginkan di tempat lain

Ini mungkin sangat retas, tetapi sangat portabel, cepat, dan saya belum menemukan sesuatu yang tidak dapat saya jalankan dengan cara itu, tentu saja, perangkat lunak tidak dapat mencoba melakukan hal-hal yang memerlukan akses root, seperti mengikat ke port yang lebih rendah dari 1024, dll.

Freedo
sumber
-1

Saya mengalami masalah yang sama seperti Anda. Saya belum mencobanya tetapi tampaknya Linuxbrew dapat membantu dalam masalah ini.

JPCF
sumber