Quản lý gói không root


51

Từ nghiên cứu của tôi, tôi dường như nhận thấy rằng tất cả các nhà quản lý gói đều khăng khăng được sử dụng như một người dùng đặc quyền và phải được cài đặt vào /.

Thông thường, những gì tôi muốn làm là tạo một tài khoản vứt đi, biên dịch một số phần mềm và cài đặt $HOMEcho tài khoản đó. Tôi có thể thử nhiều thiết lập khác nhau và sau đó khi tôi hoàn thành, chỉ cần hủy tài khoản.

Tuy nhiên, phần mềm biên dịch trở nên tẻ nhạt.

Kinh nghiệm của tôi thực sự chỉ giới hạn yum, nhưng tôi không hiểu tại sao tôi không thể thả tập tin repo vào ~/etc/yum.repos.dvà để yum cài đặt mọi thứ vào tài khoản tại nhà.

Có bất kỳ lý do tại sao các trình quản lý gói phải được sử dụng như một người dùng được ủy quyền để cài đặt phần mềm không?

Câu trả lời:


35

Các gói nhị phân được biên dịch với giả định rằng chúng sẽ được cài đặt đến các vị trí cụ thể trong /. Điều này không phải lúc nào cũng dễ dàng thay đổi và sẽ cần thêm nỗ lực QA (đủ khó ở nơi đầu tiên!) Để xác định xem các nhị phân cụ thể có hoặc không thể di chuyển được.

Ở một mức độ nào đó, bạn có thể sử dụng những thứ như fakechroot để tạo toàn bộ hệ thống trong thư mục con với tư cách là người dùng không root, nhưng điều này thật tẻ nhạt và mong manh.

Bạn sẽ có may mắn hơn với các gói nguồn. Gentoo PrefixRootless GoboLinux đều là các trình quản lý gói có thể cài đặt đến các /vị trí không phải và có thể được sử dụng bởi những rootngười không sử dụng.


3
Tôi muốn nói thêm rằng có 2 loại tương đối. Gói có thể giả định rằng nó luôn ở một nơi nhất định hoặc những thứ khác ở những nơi nhất định (như /bin) hoặc có thể cho rằng nó được cài đặt ở vị trí được chỉ định bởi --prefix. Trong khi các dự án sau có thể được giải quyết xung quanh bởi các dự án đó, thì các dự án trước đòi hỏi các bản vá trên mã nguồn.
Maciej Piechotka

Một tùy chọn khác là Tiền tố la Gentoo, Rootless và Nix là pkgsrc . Nó đến từ NetBSD nhưng hoạt động trên nhiều nền tảng khác nhau.
Michael Ekstrand

2
Các gói nhị phân được biên dịch với giả định rằng chúng sẽ được cài đặt vào các vị trí cụ thể trong/ Điều này nghe có vẻ như là một yêu cầu có thể được biện minh có thể 30 năm trước nhưng không phải bây giờ. Chẳng phải envchương trình có nghĩa là để giải quyết loại vấn đề này sao? Nếu không, thật dễ dàng để đưa ra một sơ đồ để cấu hình bất kỳ nhị phân nào để tìm kiếm các nhị phân khác ở các vị trí cụ thể.
Piotr Dobrogost

1
@PiotrDobrogost để một số mở rộng có, với một số mở rộng không. Ví dụ, không có biến môi trường cho /etchoặc (theo kiến ​​thức của tôi) /usr/lib/<packagename>/hoặc /usr/libexec/<packagename>/. /usr/sharecó thể được thay đổi bởi các biến XDG đã được phát hành vào khoảng thế kỷ này và không nhất thiết phải được áp dụng cho các chương trình cũ hơn.
Maciej Piechotka

28

Có một dự án quản lý gói-- Nix - với một ý tưởng nền tảng thú vị (trình quản lý pkg " chức năng "), cũng hỗ trợ hoạt động cho mỗi người dùng:

Hỗ trợ nhiều người dùng

Bắt đầu từ phiên bản 0.11, Nix có hỗ trợ nhiều người dùng. Điều này có nghĩa là người dùng không có đặc quyền có thể cài đặt phần mềm một cách an toàn. Mỗi người dùng có thể có một hồ sơ khác nhau, một bộ gói trong cửa hàng Nix xuất hiện trong PATH của người dùng. Nếu người dùng cài đặt gói mà người dùng khác đã cài đặt trước đó, gói đó sẽ không được xây dựng hoặc tải xuống lần thứ hai. Đồng thời, một người dùng không thể tiêm một con ngựa thành Troia vào một gói có thể được sử dụng bởi một người dùng khác.

LƯU Ý Tôi muốn THÊM: Nix nên có thể sử dụng được trong một hệ thống giống như Unix mà bạn chọn (ví dụ: bản phân phối Linux).

Ngoài ra còn có một bộ sưu tập lớn các gói có thể được cài đặt với trình quản lý gói Nix-- Nixpkgs - được xây dựng cho một số nền tảng :

  • GNU / Linux trên 32 bit và 64 bit x86 (i686-linux và x86_64-linux)
  • Mac OS X (i686-darwin và x86_64-darwin)
  • FreeBSD (i686-freebsd và x86_64-freebsd)
  • OpenBSD (i686-openbsd)
  • Windows / Cygwin (i686-cygwin),

và một bản phân phối có liên quan-- NixOS :

NixOS là một bản phân phối Linux dựa trên Nix. Nó sử dụng Nix không chỉ để quản lý gói mà còn để quản lý cấu hình hệ thống (ví dụ: để xây dựng các tệp cấu hình trong / etc). Điều này có nghĩa, trong số những thứ khác, có thể dễ dàng khôi phục toàn bộ cấu hình của hệ thống về trạng thái trước đó. Ngoài ra, người dùng có thể cài đặt phần mềm mà không cần quyền root. Đọc thêm…

và một hệ thống xây dựng "liên tục" liên quan-- Hydra .


4
Tóm tắt tốt đẹp. Gần đây GNU Guix đã được công bố. Trình quản lý gói GNU dựa trên nix. savannah.gnu.org/forum/forum.php?forum_id=7436
Davorak

2
@Davorak Sự khác biệt giữa nixguix. Vì bây giờ tôi đang thực sự sử dụng nixcho công việc của mình, tôi muốn biết liệu tôi có thể xem xét guixnhư là một triển khai khác của công cụ tôi cần không. Tôi có thể đọc một bản tóm tắt về sự khác biệt ở đâu đó không? Có lẽ, bạn thậm chí có thể viết một câu trả lời với một bản tóm tắt như vậy ở đây, công bố một giải pháp thay thế nữa?
imz - Ivan Zakharyaschev 19/03/2015

6

Trước hết đó là do sự phụ thuộc. Một số gói có thể không được cài đặt bởi người dùng - như PolicyKit. Do đó, nó sẽ đòi hỏi thêm gánh nặng cho người đóng gói, những người quyên góp thời gian rảnh và thường cài đặt chương trình dễ dàng như gõ sudo(trạm người dùng đơn) hoặc quản trị viên cằn nhằn.

Có các tùy chọn để cài đặt trong $ HOME

  • Ngôn ngữ nguyên thủy, 'trình quản lý gói' thường hỗ trợ nó ngoài hộp (như gem cho Ruby hoặc cabal cho Haskell) hoặc với một số điều chỉnh nhỏ (tôi quên tên cho python)
  • Tốt cũ ./configure --prefix=$HOME/sandbox --enable-cool-feature && make all install(hoặc biến thể như jhbuild).
  • chương trình để cài đặt tại $ HOME vài năm trước đây. Tuy nhiên tôi không thể tìm thấy nó - tôi đoán gần như không ai sử dụng nó khi họ tự cài đặt hoặc quản trị viên cag.

1
Tôi không thực sự thấy làm thế nào đây là một lập luận thuyết phục. Chỉ vì một gói không hoạt động vì nó không được gọi là root không có nghĩa là ý tưởng đó không khả thi. Chính sách dự kiến ​​rằng Chính sách sẽ không hoạt động cho loại tình huống này. Có rất nhiều gói khác có thể được cài đặt mà không có quyền root. Tôi biết các trình quản lý gói phần mềm (Python's là EasyInstall), nhưng các trình quản lý gói này không áp dụng trên toàn cầu như yum hoặc apt-get. Có ai biết tên chương trình mà Maciej đang đề cập đến không?
elmt

1
@elmt: Có thể xếp hàng , dù sao bạn cũng có thể quan tâm (nhưng đó là một công cụ, không phải là nguồn gói).
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles: Không - nó có GUI và có nghĩa là 'đơn giản'. Tôi đoán rằng hướng hiện tại là nhiều hơn synap / gói.
Maciej Piechotka

6

Tôi sử dụng JuJu , về cơ bản cho phép có một bản phân phối linux thực sự nhỏ (chỉ chứa trình quản lý gói) trong thư mục $ HOME / .juju của bạn.

Nó cho phép hệ thống tùy chỉnh của bạn bên trong thư mục chính có thể truy cập thông qua proot và do đó, bạn có thể cài đặt bất kỳ gói nào mà không có quyền root. Nó sẽ chạy đúng với tất cả các bản phân phối linux chính, hạn chế duy nhất là JuJu có thể chạy trên kernel linux với phiên bản giới thiệu tối thiểu 2.6.32.


4

Một số khác với một mô hình khá khác nhau là 0install . Nó dựa trên ý tưởng rằng bạn không thực sự cài đặt các gói, mà chỉ chạy chúng từ một không gian tên toàn cầu để tải xuống, biên dịch nếu cần và lưu trữ phần mềm bạn muốn sử dụng.


4

Nếu bạn ổn với việc biên dịch từ nguồn và tự giải quyết các phụ thuộc, chủ yếu muốn trình quản lý gói xử lý các hoạt động triển khai / không triển khai / nâng cấp, bạn có thể muốn xem GNU Stow hoặc XStow được cải thiện phần nào . Với chúng, bạn giai đoạn cài đặt vào một thư mục riêng (thường ở dưới $PREFIX/stow) và sau đó stow tạo liên kết tượng trưng cho phần mềm từ tiền tố thực của bạn. Điều này làm cho nó dễ dàng sau đó loại bỏ hoàn toàn phần mềm. Tôi sử dụng nó thành công để quản lý phần mềm được cài đặt tùy chỉnh tại trường đại học của tôi.


3

Trải nghiệm của tôi thực sự chỉ giới hạn ở yum, nhưng tôi không hiểu tại sao tôi không thể thả tệp repo vào ~ / etc / yum.repos.d và để yum cài đặt mọi thứ vào tài khoản tại nhà.

Các nhà quản lý gói Linux chính thống xem thế giới như một sysadmin sẽ ... trong đó máy là một thực thể duy nhất. Điều này cho phép bạn nhận được câu trả lời cho các câu hỏi như "lỗi sai nào nổi bật áp dụng cho hệ thống X" và "hệ thống X và hệ thống Y khác nhau như thế nào". Điều này cũng cho phép yum có "lịch sử" có thể sử dụng được, có phiên bản rpmdb và thực hiện những việc như "cập nhật bảo mật yum", v.v.

Có một số trình quản lý gói, như zero-install, cố gắng xem thế giới như một người dùng sẽ ... tức là. những gì các ứng dụng làm tôi có quyền truy cập vào.

Bạn có thể nghĩ rằng sau này là một mô hình tốt hơn, nhưng IMNSHO có một lý do bạn chưa từng nghe về zero-install nhưng đã nghe nói về yum.


2

Có một đứa trẻ mới trong khối: " JuNest (Người dùng bị bỏ tù NEST) - Bản phân phối dựa trên Arch Linux chạy trên bất kỳ bản phân phối Linux nào mà không có quyền truy cập root." @ https://github.com/fsquillace/junest Ưu điểm là nó không giới thiệu một loại định dạng gói mới, vì vậy sau khi cài đặt rất dễ dàng (tối thiểu: khoảng 320M), kho lưu trữ Arch Linux hoàn chỉnh (hơn 13000 gói ATM) trong tầm tay bạn.


1

Các công cụ được sử dụng bởi Slackware, đặc biệt installpkg, có thể. Từ trang người đàn ông:

--root /otherroot
       Install using a location other than / (the default) as the root of the 
       filesystem to install on. In the example given, use /otherroot instead.
       Setting the ROOT environment variable does the same thing.

Tuy nhiên, tôi không biết bất kỳ chiến tuyến nào tốt hơn có thể làm điều này (ví dụ slapt-get, theo như tôi biết, không thể làm điều này). Về mặt lý thuyết, bạn sẽ có thể bí danh installpkgđể installpkg --root ~/Apps- tuy nhiên, tôi nghĩ rằng hầu hết frontend yêu cầu root để chạy, mà đánh bại điểm.


1

Tôi muốn đề xuất http://linuxbrew.sh/

Về cơ bản, đây là một nhánh sản xuất bia cho macOS và có các tệp nhị phân được biên dịch sẵn để sử dụng ...

Đặc biệt tuyệt vời để xử lý các phiên bản gcc cũ.

Nếu bạn thực sự muốn cài đặt bằng tay, một hướng dẫn hữu ích là http://www.linuxfromscratch.org/


0

Yum cần phải ghi vào cơ sở dữ liệu, được sở hữu bởi root. Do đó, bạn không thể sử dụng nó như một người dùng bình thường.

Bạn có thể thử giải nén các tập tin vòng / phút (gói rpm2cpio.rpm | cpio -idmv) trong một thư mục bạn chọn.

Nhưng khi bạn thực hiện chương trình của mình, bạn sẽ phải cẩn thận sửa đổi LD_LIBRARY_PATH để tải các thư viện phụ thuộc. Ngoài ra điều này sẽ không quan tâm đến bất kỳ phụ thuộc.

Thí dụ:

# mkdir new_root
# cd new_root
# wget ftp://mirror.switch.ch/pool/4/mirror/centos/6.7/os/x86_64/Packages/vim-enhanced-7.4.629-5.el6.x86_64.rpm
# rpm2cpio vim-enhanced-7.4.629-5.el6.x86_64.rpm | cpio -idmv
# ./usr/bin/vim -version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jul 24 2015 02:23:23)

Ở trên không có bất kỳ thư viện phụ thuộc nào, nếu không bạn sẽ phải sử dụng một cái gì đó như:

export LD_LIBRARY_PATH=./usr/lib ./usr/bin/program
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.