it-swarm-vi.tech

Có cách nào để có được APT để cài đặt các gói vào thư mục nhà của tôi không?

Có cách nào để lấy APT để cài đặt các gói vào thư mục nhà của tôi không?

Tôi không muốn thay đổi hệ thống rộng.

Ngoài ra, có bất kỳ trình quản lý gói linux dựa trên thư mục nhà?

42
Joel McCracken

Dpkg không có tính năng - Relocate mà RPM có. Thật đáng để xem xét có bao nhiêu gói RPM hỗ trợ tính năng đó. Về cơ bản, nó không thể được thực hiện.

Những gì bạn có thể làm là sử dụng một chroot nếu bạn muốn kiểm tra một cái gì đó trước khi cài đặt nó trên toàn cầu trên hệ thống. Để làm điều này, bạn cần có khả năng truy cập vào root. Điều đầu tiên cần làm là tạo ra một chroot cơ bản:

# debootstrap lenny lenny-chroot

Điều này tạo ra một chroot Lenny bên trong lenny-chroot danh mục.

Bây giờ chúng ta có thể nhập chroot:

# chroot lenny-chroot

Bây giờ chúng tôi có thể làm những gì chúng tôi muốn và cài đặt bất cứ thứ gì mà không làm hỏng phần còn lại của hệ thống. Khi chúng ta hoàn thành, chỉ cần gõ thoát hoặc nhấn ctrl-D

17
David Pashley

Linuxbrew là một trình quản lý gói không root khác dành cho Linux (dựa trên hệ thống quản lý gói Homebrew phổ biến cho OS X) biên dịch từ nguồn và giữ nhị phân trong thư mục chính của bạn.

Trích dẫn các tài liệu, các tính năng của Linuxbrew là:

  • Có thể cài đặt phần mềm vào thư mục chính và do đó không cần Sudo
  • Cài đặt phần mềm không được đóng gói bởi bản phân phối gốc
  • Cài đặt các phiên bản cập nhật của phần mềm khi bản phân phối gốc cũ
  • Sử dụng cùng một trình quản lý gói để quản lý cả máy Mac và Linux của bạn
8
Tim Smith

Tiền tố Gentoo làm chính xác những gì bạn muốn.

Nó cài đặt tất cả các gói vào một thư mục được chỉ định. Không cần truy cập root. Nếu bạn muốn thoát khỏi nó, chỉ cần loại bỏ thư mục cơ sở.

PS: Điều này không hoạt động trên Ubuntu> = 11.04 hoặc bất kỳ dẫn xuất Debian nào khác với Multiarch.

7
hayalci

Chỉ là một bổ sung nhỏ cho tùy chọn biên dịch nó, có tùy chọn nửa bước biên dịch thành một gói với tùy chọn tiền tố khác nhau trong thời gian biên dịch (với "checkinstall" hoặc có lẽ là một phương thức khác). Ưu điểm là gói sẽ xuất hiện trên các trình quản lý gói như aptitude hoặc synap.

Ngoài ra, tôi nghĩ rằng trong một số trường hợp có thể tải xuống .deb thực tế và buộc một tiền tố khác thông qua cài đặt dpkg, nhưng tôi nghĩ rằng đó không phải là thứ có thể được thực hiện với bất kỳ gói ngẫu nhiên nào, nhưng chúng đã được biên dịch với một số biến cho vị trí của chúng (chứ không phải là tiền tố rõ ràng theo nghĩa đen) mà bạn xuất trước khi cài đặt. Tôi không biết gì về thủ tục mặc dù, google cho "tiền tố dpkg instdir".

4
the dsc

Bạn có thể sử dụng fakechroot - hãy xem bản demo trên trang web của họ.

2
niutech

Không, tôi không nghĩ bạn có thể.

Điều tốt nhất tôi có thể nghĩ ngay bây giờ là sử dụng apt-get source và biên dịch gói của bạn. Có lẽ bạn bằng cách nào đó có thể tinh chỉnh thủ tục (có thể ít nhiều tự động) để cài đặt các gói trong nhà của bạn.

Một cách khác là sử dụng dpkg -X để giải nén nó trên một thư mục bạn chọn.

1
ynimous

Rootless GoboLinux có thể thực hiện chính xác những gì bạn yêu cầu: trình quản lý gói, không có đặc quyền nâng cao, trong thư mục nhà riêng của bạn. Hy vọng bạn biết những gì bạn đang làm; rootless không phải là chế độ cài đặt được duy trì tốt nhất của Gobo và khi tôi sử dụng nó vài năm trước, nó yêu cầu một vài điều chỉnh vì tập lệnh cài đặt đã lỗi thời so với các thay đổi khác của Gobo.

Ngoài ra còn có klik đóng gói lại khá nhiều .debs, có thể cài đặt các gói vào thư mục chính của bạn và không yêu cầu quyền root để hoạt động ... nhưng thiết lập ban đầu không yêu cầu root.

1
ephemient

Tôi thường lấy các nguồn và kiểm tra một tệp như "CÀI ĐẶT". Thông thường có hướng dẫn để làm ./configure --prefix=somedir. Sau đó, bạn phải thêm somedir/bin đến con đường của bạn.

1
Ian Kelling

Tôi có một giải pháp tôi đã sử dụng thành công để cài đặt bộ sưu tập các gói phần mềm LỚN trên máy chủ Debian của trường, nơi tôi không có quyền truy cập root (thậm chí không cài đặt trình quản lý gói khác). Nó không sử dụng deboostrap hay bất kỳ trình quản lý gói nào.

Phương pháp này là một phần thủ công, nhưng tôi đã làm hết sức để làm cho nó thuận tiện.

Nó sử dụng tập lệnh này mà tôi đã gọi install (đừng quên chmod +x nó):

#!/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

Vì vậy, trước tiên tôi thường tải xuống một tệp gỡ lỗi bằng cách sử dụng apt-get download package_name. Sau đó tôi chạy ./install package_name_blabla.deb và tự quyết định về từng lần xuất hiện của /usr trong các tệp được giải nén, nếu nó được thay thế bằng $PREFIX/usr hay không.

Quyết định này hoàn toàn phụ thuộc vào gói nào được cài đặt hệ thống và gói nào được cài đặt bằng phương pháp này. Thông thường, ví dụ: các tệp pkg-config cần sự thay thế này, trong khi các dòng Shebang như #!/usr/bin/Perl đừng. Nguyên tắc chung là đường dẫn kết quả sẽ trỏ đến một tệp hiện có.

Với các gói được cài đặt theo cách này, rõ ràng bạn cần phải bằng cách nào đó nói với các chương trình khác về chúng. Điều này có thể được thực hiện bằng cách nối thêm các giá trị chính xác vào LD_LIBRARY_PATH, PATH, PYTHONPATH, PKG_CONFIG_PATH, CMAKE_MODULES_PATH, CMAKE_PREFIX_PATH Vân vân.

Có một sự cảnh báo trong phương pháp này, đó là sự phụ thuộc không được tự động tải xuống/cài đặt; bạn phải theo dõi chúng bằng tay.

Ngoài ra APT rõ ràng không biết về các gói này, vì vậy nó sẽ mãi mãi hiển thị chúng bị thiếu. Nhưng điều đó có ý nghĩa - ai muốn cài đặt một ứng dụng toàn hệ thống phụ thuộc vào cài đặt của người dùng.

Nếu bạn muốn gỡ cài đặt chương trình, bạn có thể liệt kê nội dung của kho lưu trữ gỡ lỗi bằng cách sử dụng ar p "$1" data.tar.xz | tar tJ và sau đó xóa tất cả các tệp này khỏi PREFIX.

0
Martin Pecka

Tôi gặp khó khăn khi tưởng tượng nó sẽ hoạt động như thế nào với các kho chính thức từ một bản phân phối. Làm thế nào nó nên giải quyết phụ thuộc? Từ hệ thống hoặc từ thư mục nhà của bạn? Điều gì nếu nó tìm thấy các phiên bản khác nhau trong cả hai?

Điều tốt nhất tôi có thể nghĩ đến sẽ là một môi trường chroot giống như mọi người làm cho các ứng dụng 32 bit trên các hệ thống 64 bit. Sẽ tốn nhiều chi phí hơn khi bạn gọi debootstrap trong chroot, nhưng với một số symlinking , Shell script script vui nhộn, nó có thể làm những gì bạn muốn.

0
kbyrd

Có rất ít trường hợp bạn cần cài đặt các gói vào thư mục nhà của bạn.

Tuy nhiên, bạn có thể biên dịch và cài đặt phần mềm vào máy cục bộ của mình. Chỉ cần giải nén, sau đó cấu hình với ./configure --prefix=$HOME/local hoặc một số thư mục khác. Sau đó, bạn có thể makemake install như bình thường. Điều này sẽ biên dịch và cài đặt chương trình đó trong ~/local/, ví dụ chương trình bạn thực hiện sẽ ở ~/local/bin/programmname.

0
Rory

Tôi vẫn đang giải quyết vấn đề, nhưng về cơ bản, debootstrap là những gì bạn cần và nên làm việc với fakeroot. debootstrap chỉ là một loạt các tập lệnh Shell, vì vậy tôi sẽ tách nó ra để xem điều gì làm cho nó được đánh dấu. Phần cứng sẽ là gỡ cài đặt các tập tin sau khi chúng được cài đặt.

0
Perkins

Thật không may, tôi đã không nghe thấy bất kỳ bản phân phối nào cung cấp một cái gì đó như thế này (mặc dù tôi chắc chắn rằng nó sẽ rất phổ biến). Bạn có thể bắt chước phân phối dựa trên vòng/phút mặc dù ... Tôi chưa thử điều này, nhưng bạn có thể xây dựng cơ sở dữ liệu vòng/phút dựa trên người dùng và sau đó cài đặt vòng/phút vào cơ sở dữ liệu người dùng.

Hãy thử thiết lập một bản phân phối dựa trên người dùng mới với:

rpm --initdb --dbpath DIRECTORY

Sau đó, có một số tùy chọn có thể giúp:

  • --prefix
  • --relocate
0
Andrew Case

Theo kinh nghiệm của riêng tôi, không có cách nào dễ dàng để sử dụng các gói DEB hiện có để cài đặt vào một thư mục khác không phải là môi trường chroot . Các công cụ cài đặt Debian/Ubuntu dpkg / aptitude / dselect tất cả đều yêu cầu quyền root để hoạt động đúng.

Bây giờ được cung cấp DEB nguồn, bạn có thể sửa đổi tệp Debian/quy tắc để xây dựng gói và cài đặt vào một cây thư mục khác, nhưng sau đó bạn không sử dụng các gói nhị phân đã có sẵn.

Như những người khác đã đề cập, bạn có thể sử dụng debootstrap và dễ dàng xây dựng môi trường chroot, điều mà tôi đã làm trong quá khứ để có môi trường 32 bit trên Máy chủ 64 bit, nhưng điều này đòi hỏi phải cài đặt chroot với ít nhất là các gói cơ sở trùng lặp. Nếu bạn có dung lượng và đây là một giải pháp khả thi, bạn có thể ghép nó với dchroot hoặc thậm chí tốt hơn schroot, để cho phép thực thi dễ dàng các ứng dụng được cài đặt trong môi trường chroot.

0
Jeremy Bouse