Làm thế nào để cài đặt chương trình cục bộ mà không có đặc quyền sudo?


73

Giả sử tôi có quyền truy cập ssh vào một số máy chủ Ubuntu với tư cách là người dùng và tôi cần một số công cụ hệ thống không được cài đặt để thuận tiện (mc, rtorrent, mcedit). Tôi không muốn làm phiền quản trị viên cho các chương trình nhỏ này.

Có cách nào để cài đặt chúng (làm cho chúng chạy) mà không cần sử dụng cái gì như sudo apt-get installkhông?






Câu trả lời:


33
  1. Biên dịch và cài đặt vào ~/bin(và chỉnh sửa của bạn .bashrcđể đặt PATHđể bao gồm nó). các thư viện tương tự có thể được biên dịch và cài đặt vào ~/lib(được đặt LD_LIBRARY_PATHđể trỏ đến nó) và các tiêu đề phát triển có thể được cài đặt vào ví dụ ~/includes.

  2. Tùy thuộc vào chi tiết cụ thể của các chương trình bạn muốn cài đặt và thư viện mà chúng phụ thuộc, bạn có thể tải xuống các tệp .deb và sử dụng ' dpkg-deb -x' để trích xuất chúng bên dưới thư mục chính của bạn. Sau đó bạn sẽ có rất nhiều "vui vẻ" thiết lập PATH, LD_LIBRARY_PATHvà khác variables. Chương trình hoặc ứng dụng bạn cài đặt càng phức tạp, bạn sẽ càng vui hơn :)

    Tất nhiên, bạn sẽ không thể cài đặt setuidnhị phân theo cách này - họ sẽ cài đặt nhưng (vì bạn không có quyền bắt chúng để root hoặc đặt setuidbit trên chúng) nên chúng sẽ chỉ là nhị phân bình thường do bạn sở hữu .

    Tương tự, daemon và các dịch vụ hệ thống dự kiến ​​sẽ chạy như một thứ nhất định UIDhoặc có khả năng thay đổi uid, hoặc hy vọng các tệp sẽ được /etcthay ~/etcthế và nếu không có khả năng hoạt động tốt, nếu không.

  3. Hầu hết các sysadins sẽ xem xét mcmceditlà "hầu hết vô hại", các chương trình vô hại.

    Tuy nhiên, rất ít người coi việc cài đặt một máy khách torrent là vô hại, đặc biệt nếu họ phải trả tiền cho băng thông hoặc cuối cùng phải chịu trách nhiệm pháp lý. Hầu hết các sysadins có lẽ sẽ không hoàn toàn hài lòng cho người dùng cuối khi cài đặt phần mềm như vậy mà không được phép. Họ có thể nói "chắc chắn, tiếp tục, tự đánh gục mình" hoặc họ có thể không ... nhưng bạn nên hỏi về bất cứ điều gì có thể gây ra sự cố cho chủ sở hữu / quản trị viên của máy.


Tôi đã nghe nói rằng thiết lập LD_LIBRARY_PATHlà một hack ác . Điều này có áp dụng ở đây không, hay tôi đã hiểu lầm?
Will Vousden

1
Tất cả các vấn đề với cài đặt LD_LIBRARY_PATH đều được áp dụng. vâng, nó là, hoặc có thể là một hack ác. đôi khi những hành vi xấu xa là cần thiết để đạt được những mục tiêu cụ thể ... điều quan trọng khi phá vỡ "quy tắc" là phải biết rõ chúng đủ để biết chúng được thiết kế để cứu bạn khỏi đâu, và chính xác lý do tại sao bạn cần phá vỡ chúng trong trường hợp cụ thể này và những rủi ro là gì hoặc có thể là gì.
cas

Tôi chỉ phải cài đặt một chương trình độc lập (thu phóng), vì vậy trước tiên tôi đã thử tùy chọn thứ 2 ( dpkg-deb -xđến một thư mục cục bộ). Làm việc như người ở. Tôi không phải thực hiện bất kỳ LD_LIBRARY_PATHhack nào . Ngay cả khi tôi phải làm, tôi sẽ làm điều đó trong cùng một dòng lệnh để không ảnh hưởng đến cài đặt chung (ví dụ $ LD_LIBRARY_PATH=/home/usr1/zoom/opt/zoom:/home/usr1/zoom/opt/zoom/zoom ZoomLauncher).
Antony

bạn chỉ cần đặt LD_LIBRARY_PATH nếu một hoặc nhiều gói bạn muốn cài đặt cung cấp bất kỳ thư viện dùng chung nào. Nếu nó chỉ là tệp thực thi & dữ liệu & tài liệu & tệp cấu hình, v.v. thì nó có thể sử dụng các thư viện hệ thống.
cas

50

Bạn cần biên dịch chúng từ nguồn. Nó chỉ là một vấn đề của

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

Các nhị phân sau đó sẽ được đặt trong ~/myapps/bin. Vì vậy, thêm export PATH="$HOME/myapps/bin:$PATH"vào .bashrctập tin của bạn và tải lại .bashrctập tin với source ~/.bashrc. Tất nhiên, điều này giả định rằng gcc được cài đặt trên hệ thống.


6
Còn phụ thuộc thì sao? Có cách nào để xử lý chúng tự động mà không cần chạy cùng một mã cho mỗi mã không?
yura

1
@yura không bạn phải tự làm.
Ulrich Dangel

Điều gì nếu bạn không có đặc quyền để làm điều này? Có phải là thông thường để có quyền biên dịch phần mềm mà không cần truy cập sudo / root?
Freedo

5

Bạn có thể sử dụng JuNest , nơi tạo một thùng chứa Linux nhỏ trong thư mục của người dùng, nơi bạn có thể cài đặt bất kỳ gói nào.


0

Tôi gặp vấn đề tương tự, đây là cách tôi nhanh chóng sửa nó, giả sử bạn có một máy chủ linux có cùng hệ điều hành và kiến ​​trúc.

  1. Cài đặt phần mềm trên hệ thống mà bạn điều khiển

  2. Tìm ví dụ thực thi which pythonvà sao chép nó vào~/

  3. Sao chép các thư viện với:

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

Chuyển tệp thực thi và các thư viện sang hệ thống khác nơi bạn chỉ có các đặc quyền cục bộ, sau đó chạy như sau:

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

Điều này sẽ tạo một thư mục ~/libđể lưu trữ các thư viện, thêm nó vào đường dẫn của bạn và yêu cầu LD xem xét các thư viện ở đó, vì vậy chỉ cần thêm các tệp thực thi của bạn và các thư viện ở đó, bây giờ bạn có thể chạy nó như bạn ở nơi khác

Điều này có thể rất khó khăn, nhưng nó rất cơ động, nhanh chóng và tôi chưa tìm thấy thứ gì tôi không thể chạy theo cách đó, tất nhiên, phần mềm không thể cố gắng thực hiện những việc cần truy cập root, như ràng buộc với cổng thấp hơn hơn 1024, v.v.


-1

Tôi đang có cùng một vấn đề như bạn. Tôi chưa thử nhưng có vẻ như Linuxbrew có thể có ích về vấn đề này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.