Theo dõi các chương trình


33

Khi tôi cài đặt một chương trình đơn giản, nó thường sử dụng make && make installvà thậm chí không có mục tiêu gỡ cài đặt .

Nếu tôi muốn nâng cấp một chương trình, đó có phải là giao thức chuẩn để giả sử nó chỉ viết lại liền mạch trên chương trình cũ không?

Làm thế nào để tôi theo dõi các chương trình này; Có phải hầu hết mọi người chỉ 'bắn và quên' và nếu không có mục tiêu gỡ cài đặt nào được đưa ra, tôi có phải xóa mọi thứ theo cách thủ công không?


6
GNU Stow có phải là một lựa chọn ở đây không? "GNU Stow là một chương trình để quản lý việc cài đặt các gói phần mềm, giữ chúng tách biệt (ví dụ: / usr / local / stow / emacs so với / usr / local / stow / perl) trong khi làm cho chúng dường như được cài đặt trong cùng địa điểm (/ usr / địa phương). "
Mike Renfro

@Mike có vẻ rất hứa hẹn; Tôi thích ý tưởng cho phép và vô hiệu hóa các phiên bản chương trình một cách liền mạch. Đầu tiên chương trình hoạt động và ổn định như thế nào và chương trình có thường xuyên phá vỡ giao thức tiền tố không?
Will03uk

1
Ổn định một cách kỳ lạ ( 1.3.2 từ năm 1996 và 1.3.3 đến 2002 ) và gần như không hoạt động . Nó chỉ là một tập lệnh Perl quản lý các liên kết tượng trưng. Quay trở lại vào ban ngày, thật khó khăn để có được trình biên dịch và việc khởi động như vậy thành công cụ, nhưng đối với các ứng dụng của người dùng cuối, nó vẫn ổn. Tôi đã sử dụng nó cho bất kỳ ứng dụng nào mà tôi không thể dễ dàng nhập từ các bản phát hành Debian mới hơn hoặc lấy từ một trong các kho của gói Solaris.
Mike Renfro

Câu trả lời:


20

Cài đặt từng chương trình trong cây thư mục chuyên dụng và sử dụng Stow hoặc XStow để làm cho tất cả các chương trình xuất hiện trong một cấu trúc phân cấp chung. Stow tạo các liên kết tượng trưng từ thư mục dành riêng cho chương trình đến một cây chung.

Chi tiết hơn, chọn một thư mục toplevel, ví dụ /usr/local/stow. Cài đặt từng chương trình theo /usr/local/stow/PROGRAM_NAME. Ví dụ, sắp xếp để các tệp thực thi của nó được cài đặt /usr/local/stow/PROGRAM_NAME/bin, các trang man của nó /usr/local/stow/man/man1, v.v. Nếu chương trình sử dụng autoconf, sau đó chạy ./configure --prefix /usr/local/stow/PROGRAM_NAME. Sau khi bạn chạy make install, hãy chạy stow:

./configure --prefix /usr/local/stow/PROGRAM_NAME
make
sudo make install
cd /usr/local/stow
sudo stow PROGRAM_NAME

Và bây giờ bạn sẽ có các liên kết tượng trưng như thế này:

/usr/local/bin/foo -> ../stow/PROGRAM_NAME/bin/foo
/usr/local/man/man1/foo.1 -> ../../stow/PROGRAM_NAME/man/man1/foo.1
/usr/local/lib/foo -> ../stow/PROGRAM_NAME/lib/foo

Bạn có thể dễ dàng theo dõi những chương trình bạn đã cài đặt bằng cách liệt kê nội dung của stowthư mục và bạn luôn biết tệp thuộc về chương trình nào vì đây là liên kết tượng trưng đến một vị trí trong thư mục của chương trình đó. Gỡ cài đặt chương trình bằng cách chạy stow -D PROGRAM_NAMEsau đó xóa thư mục của chương trình. Bạn có thể làm cho chương trình tạm thời không khả dụng bằng cách chạy stow -D PROGRAM_NAME(chạy stow PROGRAM_NAMEđể làm cho chương trình có sẵn một lần nữa).

Nếu bạn muốn có thể nhanh chóng chuyển đổi giữa các phiên bản khác nhau của cùng một chương trình, hãy sử dụng /usr/local/stow/PROGRAM_NAME-VERSIONlàm thư mục chương trình. Để nâng cấp từ phiên bản 3 lên phiên bản 4, hãy cài đặt phiên bản 4, sau đó chạy stow -D PROGRAM_NAME-3; stow PROGRAM_NAME-4.

Các phiên bản cũ hơn của Stow không đi xa hơn những điều cơ bản mà tôi đã mô tả trong câu trả lời này. Các phiên bản mới hơn, cũng như XStow (chưa được duy trì gần đây) có các tính năng nâng cao hơn, như khả năng bỏ qua các tệp nhất định, đối phó tốt hơn với các liên kết tượng trưng hiện có bên ngoài thư mục stow (như man -> share/man), tự động xử lý một số xung đột (khi hai các chương trình cung cấp cùng một tệp), v.v.

Nếu bạn không có hoặc không muốn sử dụng quyền truy cập root, bạn có thể chọn một thư mục trong thư mục chính của mình, vd ~/software/stow. Trong trường hợp này, thêm ~/software/binvào của bạn PATH. Nếu mankhông tự động tìm các trang man, hãy thêm ~/software/manvào của bạn MANPATH. Thêm ~/software/infovào của bạn INFOPATH, ~/software/lib/pythoncho của bạn PYTHONPATH, và như vậy là áp dụng.


4
Tôi tin rằng mọi thứ có thể đã thay đổi một chút kể từ thời điểm câu trả lời này được đăng. Vì vậy, giống như một bản cập nhật: GNU Stow hiện hỗ trợ các danh sách bỏ qua, nhiều thư mục stow, phát hiện trước xung đột, v.v. Tôi cũng nghĩ rằng stow đang được phát triển tích cực trong khi Xstow chưa được cập nhật trong 3 năm.
Amelio Vazquez-Reina

18

Bạn có thể sử dụng checkinstall để tạo gói (gói tương thích RPM, Deb hoặc Slackware) Bằng cách đó, bạn có thể sử dụng trình quản lý gói distro của mình để thêm / xóa ứng dụng (nhưng không cập nhật)

Bạn sử dụng checkinstallthay cho make installlệnh (sử dụng tham số -D cho Deb; -R là RPM và -S là Slackware):

root@nowhere# ./configure
root@nowhere# make
root@nowhere# checkinstall -D

checkinstall sẽ xây dựng và cài đặt gói theo mặc định hoặc bạn chỉ có thể xây dựng gói mà không cài đặt.

kiểm tra cài đặt có sẵn trong hầu hết các kho distro.


Điều này là tốt nhưng tôi chủ yếu sử dụng tarball cho các chương trình rất tích cực thường không được đóng gói và khả năng chuyển đổi giữa các phiên bản bị hỏng và không có trong
stow

Thật không may, checkinstalldường như không được duy trì tích cực (?) :-(
Nikos Alexandris

@NikosAlexandris Tôi tò mò, nếu nó hoạt động đúng với mục đích của nó và làm tốt điều này - mà, với tư cách là một người không sử dụng hiện tại, tôi cho rằng nó làm như vậy - tại sao nó cần được duy trì tích cực?
Hashim

@Hashim Tôi thấy quan điểm của bạn. Tuy nhiên, ngoài "suy nghĩ theo thói quen", liệu một phần mềm liên quan đến phần mềm biên dịch, không cần bảo trì, khi trình biên dịch phát triển?
Nikos Alexandris

6

Đối với hầu hết các phần, đây là lý do đằng sau các gói, cổng và các loại người quản lý khác để ngăn chặn loại điều này xảy ra.

Tôi sẽ nói rằng xóa thủ công là cách duy nhất để cài đặt thủ công, trừ khi người khác có câu trả lời tốt hơn cho điểm đó mà tôi có thể không biết.


6

Một lựa chọn khác là từ gợi ý Linux From Scratch :

Kiểm soát gói và quản lý gói nhiều hơn bằng cách sử dụng gói

3 Gói người dùng
3.1 Giới thiệu

Ý tưởng cơ bản của sơ đồ này dễ dàng được giải thích. Mỗi gói thuộc về một "người dùng gói" nhất định. Khi bạn cài đặt một gói, bạn xây dựng và cài đặt gói như người dùng gói này, khiến tất cả các tệp được cài đặt thuộc sở hữu của người dùng gói. Kết quả là tất cả các tác vụ quản lý gói thông thường có thể đạt được một cách thoải mái thông qua việc sử dụng các tiện ích dòng lệnh tiêu chuẩn. ls -l <file>Ví dụ, một đơn giản sẽ cho bạn biết gói <file>thuộc về cái gì và một find -user ...lệnh cho phép bạn thực hiện một thao tác trên tất cả các tệp thuộc một gói nhất định, ví dụ xóa chúng để gỡ cài đặt gói.

Nhưng quản lý gói không phải là tất cả những gì người dùng gói tốt. Bởi vì người dùng gói không có quyền root, việc cài đặt gói bị hạn chế trong những gì nó có thể làm. Ví dụ, một điều mà người dùng gói không được phép thực hiện là ghi đè lên các tệp từ một người dùng gói khác. Xung đột giữa các gói khác nhau muốn cài đặt tệp nhị phân, thư viện hoặc tệp tiêu đề cùng tên phổ biến hơn bạn nghĩ. Với người dùng gói, bạn không bao giờ gặp rủi ro trong việc hủy cài đặt tệp B khỏi gói A mà không cần bạn nhận ra. Mọi nỗ lực thực hiện việc này trong quá trình cài đặt gói B sẽ gây ra lỗi "Quyền bị từ chối" hoặc "Thao tác không được phép" để bạn có cơ hội thực hiện các bước thích hợp. Một điều nữa mà người dùng gói không được phép làm là cài đặt nhị phân gốc setuid. Quyết định tạo root setuid nhị phân cũng là điều mà một quản trị viên thận trọng không muốn để lại cho người tạo ra gói phần mềm.

Thông thường tài khoản người dùng gói không có mật khẩu hợp lệ để chỉ có thể root su cho người dùng gói, điều này đảm bảo rằng người dùng gói không mở thêm một cách vào hệ thống và làm suy yếu bảo mật. Nhưng dù sao bạn cũng có thể đặt mật khẩu để cho phép một đồng quản trị viên mà bạn muốn có thể cài đặt và duy trì các gói phần mềm nhất định để làm điều đó mà không cần truy cập vào tài khoản root thực tế. Ví dụ, đồng quản trị viên này có thể cài đặt, xóa, thay đổi các thư viện bổ sung có thể cần thiết cho nhóm làm việc của anh ta. Tuy nhiên, anh ta sẽ không thể xóa hoặc sửa đổi các thư viện không thuộc về anh ta, chẳng hạn như libc.

Sau lời đề nghị thô thiển đầu tiên này, tôi đã tìm thấy một biến thể tiến hóa:

crablfs - Hệ thống quản lý gói dựa trên người dùng

Đây crablfslà mẫu quản lý gói mới nhất sử dụng các uids và gids duy nhất để quản lý gói, nhưng trên sourceforge, nó đang phát triển trở lại trong ulfs:

uLFS: Linux có thể quản lý và tái sử dụng của bạn từ đầu

Đối với người dùng nguyên nhân của các gói đã cài đặt, tôi nghĩ rằng giải pháp LFS "người dùng gói" là một giải pháp nhẹ, ít xâm lấn và thanh lịch. Nói tóm lại, bạn cài đặt các gói trong /usr/localhoặc /home/user/localvà theo dõi các tệp bằng cách sử dụng các uids và gids duy nhất cho mỗi gói nhưng đặt tất cả các tệp vào các vị trí truyền thống, các thư mục chung /usr/local/bin, /usr/local/libgiống như trong tất cả các bản phân phối Linux chính ... tắc tệp và ghi đè tệp không mong muốn được tránh bởi một thủ thuật Linux gọn gàng được Matthias S. Benkmann giải thích trong more_control_and_pkg_man.txt chỉ cần thao tác cấp phép tệp và thư mục bình thường, ví dụ như quyền dính bit cho các thư mục để tránh ghi đè tệp không mong muốn:

3,3 nhóm

Mỗi người dùng gói thuộc về ít nhất 2 nhóm. Một trong những nhóm này là nhóm "cài đặt", tất cả người dùng gói (và chỉ người dùng gói) thuộc về. Tất cả các thư mục mà các gói được phép cài đặt công cụ thuộc về nhóm cài đặt. Điều này bao gồm các thư mục như / bin và / usr / bin nhưng loại trừ các thư mục như / root hoặc /. Các thư mục thuộc sở hữu của nhóm cài đặt luôn có thể ghi nhóm. Điều này là đủ cho các khía cạnh quản lý gói, nhưng không cần chuẩn bị thêm, điều này sẽ không cung cấp thêm bảo mật hoặc kiểm soát vì mọi gói có thể thay thế các tệp từ một gói khác nhau (thay đổi sẽ hiển thị trong đầu ra từls -l, Tuy nhiên). Vì lý do này, tất cả các thư mục cài đặt có được thuộc tính dính. Điều này cho phép người dùng tạo các tệp mới và xóa hoặc sửa đổi các tệp của riêng họ trong thư mục, nhưng các tệp từ người dùng khác không thể được sửa đổi hoặc xóa. Trong phần còn lại của gợi ý này, bất cứ khi nào thuật ngữ "thư mục cài đặt" được sử dụng, nó đề cập đến một thư mục thuộc về cài đặt nhóm, có thể ghi nhóm và dính. IOW, để biến <dir>thành một thư mục cài đặt, bạn sẽ làm

cài đặt chgrp && chmod g + w, o + t

Đối với tôi nó trông giống như một giải pháp đơn giản và thông minh! Tôi đã sử dụng lược đồ này trong bản dựng LFS của mình và nó là một giải pháp hoạt động ...


3
  1. Bạn có thể tạo một RPM trống như một lời nhắc nhở.
  2. Bạn có thể xem xét gói phần mềm đúng cách vào RPM.
  3. Bạn có thể để lại một bản sao của các tartệp từ cài đặt /usr/src/non-rpmsđể nhắc nhở bạn (đó là những gì tôi thường làm).
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.