Cài đặt gói vào thư mục địa phương?


38

Tôi muốn cài đặt các gói phần mềm, tương tự apt-get install <foo>nhưng:

  1. Không có sudo, và
  2. Vào một thư mục địa phương

Mục đích của bài tập này là để cô lập các bản dựng độc lập trong máy chủ tích hợp liên tục của tôi .

Tôi không ngại biên dịch từ nguồn, nếu đó là những gì nó cần, nhưng rõ ràng tôi thích cách tiếp cận đơn giản nhất có thể. Tôi đã thử apt-get source --compile <foo>như đã đề cập ở đây nhưng tôi không thể làm cho nó hoạt động cho các gói như autoconf. Tôi nhận được lỗi sau đây:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Tôi đã có help2man được biên dịch trong một thư mục địa phương, nhưng tôi không biết làm thế nào để thông báo cho apt-get về điều đó. Có ý kiến ​​gì không?

CẬP NHẬT : Tôi tìm thấy một câu trả lời gần như hoạt động tại https://askubfox.com/a/350/23678 . Vấn đề với chrootnó là yêu cầu sudo. Vấn đề với apt-get sourcelà tôi không biết cách giải quyết sự phụ thuộc. Tôi phải nói rằng, chroottrông rất hấp dẫn. Có một lệnh tương đương không yêu cầu sudo?


Tôi đề nghị đó là một bản sao của câu hỏi này: [ askubfox.com/questions/147654/ triệt [1]: askubfox.com/questions/147654/ trộm

7
@kamil, không phải vậy. Tôi không cố cài đặt mà không truy cập mạng. Tôi đang cố gắng cài đặt mà không có sudovà vào một thư mục phi hệ thống.
Gili

4
Các bạn, xin đừng hạ thấp câu hỏi của tôi mà không giải thích lý do . Cảm ơn bạn.
Gili

Nếu bạn không có quyền root trên hệ thống, bạn sẽ không thể giải quyết các phụ thuộc một cách dễ dàng . Nó đôi khi có thể, mặc dù; bạn sẽ phải bắt đầu cài đặt phần mềm tại nhà của mình, bắt đầu với các phụ thuộc dưới cùng nhất và sửa đổi LD_PATH của bạn để các chương trình có thể tìm thấy thư viện của chúng. Tuy nhiên, bạn sẽ thất bại nếu bất kỳ gói nào yêu cầu root (hoặc suid) để chạy.
Ngày

@ Tháng một, tôi đang cố gắng biên dịch một dự án phần mềm bên trong một hệ thống xây dựng tự động. Theo tôi biết, không có phụ thuộc nào của nó (bắt buộc phải biên dịch) yêu cầu root.
Gili

Câu trả lời:


20

Điều này, nói chung, không thể thực hiện được, bởi vì bạn sẽ gây rối với hệ thống phụ thuộc apt.

Có hai giải pháp:

  1. Cài đặt gói nguồn, thay đổi vào thư mục nguồn, định cấu hình và cài đặt gói bất kể hệ thống đóng gói theo cách thủ công vào thư mục bạn chọn.

    apt-get source <package>
    

    Điều này không cần root, tải xuống nguồn gói, giải nén nó trong một thư mục trong thư mục hiện tại. Sau đó, bạn có thể thay đổi thư mục đó, thực hiện sửa đổi nguồn, định cấu hình cài đặt cho mục tiêu khác, v.v.

    Tuy nhiên, việc cấu hình thư mục cài đặt mà các chương trình sẽ phụ thuộc vào chương trình cụ thể. Nhiều chương trình sử dụng ./configure --prefix localdirđể nhắm mục tiêu cài đặt vào localdir; nhưng điều này không phải lúc nào cũng đúng

  2. Tạo một môi trường chroot mà bạn sẽ cài đặt các gói:

    debootstrap precise myfancyinstall
    

    Bây giờ bạn đã tạo một cài đặt giả trong thư mục myfancyinstall /

    chroot myfancyinstall
    

    Bạn có thể sử dụng cài đặt apt-get trong lồng chroot để cài đặt bất cứ thứ gì bạn muốn.


Điều này có vẻ đầy hứa hẹn. Sử dụng apt-get sourcemà không --compilecó vẻ để ngăn chặn cảnh báo về sự phụ thuộc chưa được đáp ứng (cho phép tôi tự giải quyết chúng)
Gili

Có cách nào để có được các gói không có nguồn theo cách này không?
soandos

Giải pháp (2) sẽ hoạt động bất kể. Mặt khác, bạn chỉ có một mình: có thể có một cách khác để cài đặt gói. Hoặc tải xuống tệp gói deb và giải nén nó với ar : ar vx mypackage.deb. Sau đó phân tích nội dung của gói và tìm hiểu cách cài đặt thủ công.
tháng 1

14

bằng cách sử dụng bash shell và có được tệp "pack.deb" (giả sử tên gói là "gói"), bạn có thể chạy lệnh sau để thực hiện những gì bạn muốn - cài đặt gói để thư mục chính của bạn được xử lý theo cách tương tự "/ "Sẽ được xử lý trong một cài đặt bình thường.

Đây là lệnh:

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

Bạn có thể gặp một số lỗi, chẳng hạn như $ HOME / var / lib / dpkg / lock bị thiếu, vì vậy chỉ cần tạo tất cả các tệp bị thiếu mà bạn sẽ nhận được từ các lỗi và sau đó cài đặt sẽ hoạt động mà không cần sudo.

lưu ý rằng nếu "apt-get download" không hoạt động, bạn có thể thử "tải xuống apt" hoặc "gói tải xuống apitutde".

nếu không có phương pháp nào hoạt động, bạn chỉ có thể tải xuống gói thủ công từ http://packages.ubfox.com/

một phương pháp khác là chạy lệnh chroot với tham số $ HOME và sau đó cài đặt tương tự như trên mà không có --root = $ HOME. lệnh đó sẽ mang lại cho bạn trong một vỏ trong đó "/" là $ HOME hiện tại của bạn. để trở về chế độ bình thường, đừng quên "thoát"

chúc may mắn.


Sau khi tạo các tập tin bị thiếu dpkg phàn nàn, nó chỉ bắt đầu segfaulting.
Matt Chambers

0

Nếu bạn đang sử dụng trình duyệt web được chia sẻ với sshquyền truy cập nhưng không apt-getcó root, v.v. hoặc hệ thống bị hạn chế tương tự, những điều sau đây có thể phù hợp với bạn. Nó hoạt động với tôi trên một hệ thống uname -atrả về một cái gì đó nhưSMP 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)"
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.