Làm cách nào để thực sự cài đặt tệp tar.gz trên Linux - cách quản lý các ứng dụng được cài đặt thủ công (hoặc độc lập)?


12

Tôi thấy tất cả các liên kết này giải thích các gói và .debs ... Tôi biết rằng ... và có rất nhiều tệp để các tệp tar.gz hoạt động (ví dụ: cập nhật thay thế cho Java hoặc thả tệp theo cách thủ công vào / usr / local / bin (hoặc một nơi nào khác, mà tôi đã suy luận từ nhiều giờ tìm kiếm)). Nếu các gói rất thông minh, làm thế nào có quá ít ứng dụng Linux có sẵn trong các gói hoặc .debs / rpms?

Tôi đang nói như một người dùng mới; Tôi biết các chuyên gia có thể biết nó tốt hơn (tôi nghĩ rằng tôi có thể tải xuống một phiên bản có thể biên dịch được của Eclipse?). Giống như netbeans và chrome là .sh, nhật thực là một thư mục đơn giản, có thể khởi chạy, Java yêu cầu update-alternativesdoanh nghiệp này nhưng tôi không nghĩ rằng nó tự đăng ký vào "danh sách chương trình" của Ubuntu / Debian (chỉ đăng ký như một lệnh), v.v. (Tôi biết đây là đôi khi có sẵn trong kho, nhưng tôi chỉ bối rối tại sao các trang tải xuống không có giải thích phù hợp).

Câu chuyện dài ngắn: Nếu tải xuống hoặc biên dịch tệp tar.gz, làm cách nào để tôi đăng ký nó vào hệ thống? update-alternativesdường như đăng ký nó như một lệnh, trong Ubuntu, nó không hiển thị trong thanh tìm kiếm. Trong Debian, tôi có thể tự thêm một lối tắt vào trình khởi chạy Gnome 2. Nhưng tôi thực sự nên làm gì?


Biên tập:

Vì vậy, sau khi chơi xung quanh một chút với các giải pháp mới, tôi có thể sắp xếp lại "vấn đề" của mình:

Tôi nên quản lý các chương trình cài đặt thủ công như thế nào? Firefox và Eclipse là những ví dụ duy nhất của tôi cho đến nay (tôi không tải xuống nhiều thứ). Cả hai có thể chạy ra khỏi hộp, mà tôi thích. Ngoại trừ, tôi nên cài đặt chúng ở đâu? Tôi thấy Eclipse có các hướng dẫn riêng, nhưng tôi muốn thực hiện tất cả các "gói thủ công" của mình theo cùng một cách.

  1. Sau một số nghiên cứu, tôi quyết định đưa các chương trình này vào /usr/local/bin.
  2. Từ cách cài đặt nhật thực , tôi đã tìm ra thứ gì đó để hiển thị trong trình khởi chạy, tôi cần đặt một xxx.desktoptệp vào ~/.local/share/applications/. Tên của tệp .desktop này có vấn đề không?
  3. Những thứ có autotools (tôi tìm một tập tin configurehoặc unix/configuretập tin) sẽ hoạt động tốt. Một số điểm nghiên cứu mà tôi nên sử dụng CheckInstallđể theo dõi tất cả những điều này.
  4. Tôi nên sử dụng update-alternativesđể đăng ký đường dẫn. Từ chủ đề java này , có vẻ như tôi tạo một liên kết từ /usr/bin/javađến /usr/lib/jvm/jdk.... Khi tôi cài đặt các ứng dụng "độc lập" này như Eclipse hoặc Firefox, tôi có nên luôn liên kết đến /usr/bin/[app]không? Và nếu khẳng định 1 là đúng, tôi sẽ làm những việc nhưsudo update-alternatives --install "/usr/bin/[app]" "[app]" "/usr/local/bin/[app]" 1

Những hướng dẫn này có đúng không / một cách tốt để quản lý cài đặt thủ công? Có bất kỳ bước nào khác tôi nên làm theo? Gợi ý khác?


1
Tại sao không tìm kiếm một *.debgói thay thế?
m0nhawk

@ m0nhawk Không phải lúc nào cũng có thể tìm thấy tệp .deb? Giống như trên trang tải xuống của Eclipse, nó chỉ là tar.gz. Trừ khi tôi hoàn toàn thiếu nó
Raekye

1
Đối với Eclipse chắc chắn tồn tại một gói cho Debian ( cho Ubuntu ). Và tôi nghĩ rằng cách tốt nhất để xử lý *.tar.gzphần mềm là tạo gói phù hợp : *.rpm, *.debv.v.
m0nhawk

1
Bạn cần một .desktoptập tin để có một cái gì đó hiển thị trong menu. update-alternativeschỉ hoạt động để ưu tiên của bạn PATH.
tripleee

1
Câu hỏi của bạn vẫn là về "tôi nên làm gì để đăng ký phần mềm mới với ______" trong đó _____ là một môi trường máy tính để bàn cụ thể và không phải là "tôi nên làm gì với WRT linux" nói chung. Ngoài ra, có lẽ, một sự thiếu hiểu biết ngụ ý liên quan đến biến môi trường $ PATH?
goldilocks

Câu trả lời:


14

Tại sao rất nhiều ứng dụng không có sẵn trong repos gói?

Có thể có nhiều lý do:

Không có một lý do duy nhất. Nếu bạn muốn xem ứng dụng yêu thích của mình trong trình quản lý gói của distro, bạn nên xử lý riêng từng trường hợp. Cố gắng liên lạc với các nhà phát triển (ví dụ trên kênh IRC hoặc danh sách gửi thư) và hỏi làm thế nào bạn có thể giúp đóng gói.

Làm thế nào để cài đặt một tarball?

Một tarball (gói .tar.gz) có thể chứa bất cứ thứ gì. Cho đến khi bạn thực sự mở nó, bạn không có cách nào để giả định cách cài đặt nó. Một lần nữa, mỗi gói nên được tiếp cận khác nhau.

Hãy tìm tài liệu! Bất kỳ gói (bán) nào cũng sẽ cung cấp hướng dẫn về cách cài đặt ứng dụng. Phản xạ đầu tiên của bạn phải luôn là tìm kiếm một tệp văn bản có tên README, INSTALL hoặc một cái gì đó như thế này. Kiểm tra trang web của nhà xuất bản cũng có thể giúp đỡ.

Vì mỗi gói là khác nhau, không có cách phổ biến nào để xử lý mọi tarball trên thế giới. Điều đó giống như yêu cầu một công thức làm việc trên tất cả các thành phần trên thế giới. Không xảy ra.

Một kiến ​​thức tốt về hệ thống của bạn, bản phân phối và môi trường máy tính để bàn của bạn sẽ giúp ích, vì vậy, nếu điều này được trấn an, mọi thứ sẽ ngày càng dễ đoán hơn khi bạn dành thời gian trong thế giới linux.

Một trường hợp đặc biệt: Autotools

Khi các dự án phát triển lớn hơn, họ cần cung cấp các cách dễ dàng để chuyển từ mã nguồn sang nhị phân sang cài đặt đầy đủ trên hệ thống. Đây là lý do tại sao họ giao hàng với một hệ thống xây dựng nhúng, một tập hợp các tập lệnh để làm điều cần thiết.

Trong thế giới Linux / Nguồn mở / Phần mềm miễn phí, một hệ thống xây dựng được chấp nhận rộng rãi hơn: GNU Autotools . Nếu bạn từng giao dịch với gói nguồn (n mở), rất có thể bạn sẽ sử dụng Autotools.

Trong trường hợp đơn giản nhất, đây là cách cài đặt ứng dụng được đóng gói với autotools:

  • ./configure: Một tập lệnh sẽ tạo Makefiles tương ứng với hệ thống của bạn (nó cũng thường kiểm tra tính khả dụng của các phụ thuộc).
  • make: Biên dịch mã nguồn theo Makefiles được tạo trước đó.
  • make install: Sao chép các tệp nhị phân đến các vị trí thích hợp, tạo liên kết tượng trưng và bất kỳ bước nào khác được xác định bởi nhà phát triển.

Ghi chú

  • configurecác tập lệnh thường có rất nhiều tùy chọn, như trình biên dịch nào sẽ sử dụng hoặc cách xác định thư mục đích. Nếu bạn cần sự linh hoạt, nó đáng để xem xét ./configure --help.
  • Ngay cả khi bạn chắc chắn đó là Autotools và bạn biết nó rất rõ, hãy luôn bắt đầu bằng cách đọc tài liệu (README, INSTALL, ...)

Trả lời cập nhật trong câu hỏi

Những gì bạn đang yêu cầu không có câu trả lời chắc chắn. Mọi người ở đây có thể có ý kiến ​​về những gì cấu thành "thực hành tốt", nhưng vào cuối ngày, chỉ có bạn mới có thể tìm thấy những gì phù hợp với bạn . Nếu có một câu trả lời dễ dàng, bạn sẽ không đặt câu hỏi. Bản phân phối của bạn đã trả lời nó cho bạn.

Điều này đang được nói, đây là một vài nhận xét cá nhân.

  • Trên hệ thống của tôi, tôi dành /usr/local/bincho các gói được cài đặt bởi người quản lý gói của tôi. Tất cả mọi thứ tôi biên dịch / cài đặt bằng tay đi vào /opt. Đây là một chi tiết nhưng nó giúp tránh những cơn đau đầu lớn khi xử lý một số phiên bản của cùng một chương trình.

  • xxx.desktopvà các vấn đề GUI nói chung, dành riêng cho môi trường máy tính để bàn bạn đang sử dụng. Nếu nó hoạt động cho hệ thống của bạn, tuyệt vời. Nhưng nó không thể được khái quát cho tất cả các môi trường có sẵn trên Unix.

  • /usr/local/bincó lợi thế là đã ở trong ĐƯỜNG của bạn . Nếu bạn muốn sử dụng một thư mục khác (như /opttôi đề nghị), hãy chắc chắn đưa nó vào PATH của bạn. Nếu bạn không biết cách thực hiện, hãy mở một thiết bị đầu cuối và thực hiện các thao tác sau trong một thiết bị đầu cuối (không phải là cách đẹp nhất để làm điều đó, nhưng không biết gì về hệ thống của bạn, tôi không thể đề xuất bất cứ điều gì khác):echo 'export PATH=$PATH:/opt' >> ~/.bashrc


Cảm ơn đã phản ứng chi tiết. Tôi nhìn vào readmes, nhưng tôi quyết định tôi không muốn làm điều gì đó khác biệt mỗi lần. Vì vậy, sau rất nhiều nghiên cứu, nỗ lực và thất vọng, tôi đã đưa ra một câu hỏi / thông số kỹ thuật cụ thể hơn - xem bài đăng cập nhật.
Raekye

Bạn được chào đón, tôi hy vọng nó có ích :) Tôi đã chỉnh sửa câu trả lời của mình để giải quyết các cập nhật của bạn. Hãy nhớ rằng không có "Một cách chân thực" để làm mọi việc (trừ khi bạn là emacsngười dùng). Bạn phải trải qua thử nghiệm và sai sót để tìm hiểu, với thời gian, những lợi ích và hạn chế của từng phương pháp khác nhau.
rahmu

Cảm ơn các cập nhật! Chắc chắn là có. Tôi đoán xxx.desktopthường hoạt động cho GNome. Bạn biết gì về việc sử dụng update-alternativesđể thiết lập đường dẫn?
Raekye

Theo như tôi biết, đó là cách xử lý cụ thể của Debian với phần mềm chung, như có nhiều trình duyệt hoặc trình soạn thảo. (Ubuntu và Mint dựa trên Debian và đã kế thừa điều này). Đây là nhiều hơn nếu bạn quan tâm
rahmu

Câu trả lời chính xác. Một điều thường là cần thiết (hoặc ít nhất là được ưu tiên) là thực hiện cài đặt sudo như bước cuối cùng (với gói bạn tin tưởng). Điều đó mang lại cho quá trình các quyền mà nó cần để đặt mọi thứ vào các thư mục hệ thống không thuộc quyền sở hữu của người dùng của bạn (như / usr / bin).
Joe

8

Tôi nghĩ bạn phải làm rõ với chính mình những gì bạn muốn "đăng ký" nó với .

Để giải thích - và tôi không cố tỏ ra thông minh - "linux", tất nhiên, là kernel và kernel không biết về cũng như không có bất kỳ mối quan tâm nào đối với bất kỳ phần mềm không gian người dùng nào trên hệ thống của bạn ngoài init. Vậy chúng ta đang nói gì ở đây?

Bạn đề cập đến một số distro khác nhau. Đôi khi tôi xây dựng phần mềm từ nguồn mặc dù nó có sẵn trong kho lưu trữ vì tôi muốn một số tùy chọn cấu hình được đặt không được đặt trong tệp nhị phân distro. Vấn đề duy nhất tôi gặp phải là nếu gói này là điều kiện tiên quyết cho thứ khác, tôi thực sự phải đăng ký cái này với hệ thống đóng gói để tránh vô tình cài đặt gói distro lên trên gói tôi đã tạo. Trên các hệ thống dựa trên fedora / vòng / phút, điều này được thực hiện với rpm -i --justdb <package>. Tôi không làm điều này trên các hệ thống dựa trên debian / apt; thay vào đó tôi chỉ buộc cài đặt khi cần thiết, có lẽ là lười biếng - có vẻ là một cách tốt hơn để làm điều đó, bằng cách tạo ra một gói giả giả vờ hoàn thành bất kỳ điều kiện tiên quyết nào. Đó là một phần trong các gợi ý của m0nhawk về việc thực sự tạo ra một gói từ nguồn .tar.gz - ngoại trừ khá đơn giản một chút (tôi sẽ thành thật và nói rằng tôi hoàn toàn không thích đề xuất của m0nhawk).

Có vẻ như bạn có một số vấn đề khác ngoài vấn đề với hệ thống đóng gói. Tôi không rõ những thứ đó là gì, mặc dù bạn đề cập đến môi trường máy tính để bàn (ví dụ: Gnome). Đây là những thứ không đồng nhất, vì vậy đơn giản là không có ai trả lời cho câu hỏi, "làm thế nào để tôi làm điều này trên linux" - nó thậm chí không phải là câu hỏi "làm thế nào để tôi làm điều này trên ubfox" hay "làm thế nào để tôi làm điều này trên gentoo "- đó là một câu hỏi về" làm thế nào để tôi làm điều này cho máy tính để bàn gnome "hoặc" làm thế nào để làm điều này trên máy tính để bàn XFCE ", v.v. Theo tôi, vấn đề duy nhất là vấn đề về trình khởi chạy mà bạn đề cập, mà tôi đề cập muốn tin rằng mỗi DE cung cấp một phương tiện đơn giản để làm điều này (nhưng nó sẽ không hoàn toàn giống nhau, vì chúng khác nhau).

Sau đó, có các dịch vụ, được quản lý bởi hệ thống init (ví dụ: systemd hoặc upstart). Vì vậy, câu hỏi này thực sự là một loạt các câu hỏi liên quan đến, có khả năng:

  • hệ thống đóng gói, ví dụ, apt hoặc yum
  • hệ thống init, ví dụ: systemd hoặc upstart
  • môi trường máy tính để bàn, ví dụ, kde hoặc unity
  • filebrower, ví dụ, nautilus hoặc konqueror
  • ?????

Một phần lý do không thể có một giải pháp thống nhất đơn giản (mặc dù tiêu chuẩn XDG có thể cung cấp một số phần như vậy) là "linux" không phải là một hệ điều hành thống nhất đơn giản và tôi tưởng tượng đại đa số người dùng của nó thích nó. Tôi thường không sử dụng DE, và tôi không bao giờ sử dụng trình duyệt tệp mà họ đi kèm, v.v.

Một lần nữa, tôi thực sự đang cố gắng để hữu ích với vấn đề này và không chỉ là giáo hoàng: nếu có vấn đề bạn muốn giải quyết ở đây, bạn sẽ phải xem xét chính xác hơn những vấn đề đó là gì và phần mềm nào thực sự liên quan đến chúng (ngoài "linux" ") Nếu bạn muốn giải quyết chúng.


"trong bản nhị phân distro" <- / tôi lẩm bẩm điều gì đó về các bản phân phối dựa trên nguồn
njsg

Ngoài ra, một vấn đề với tiêu chuẩn XDG có lẽ là một số người ngược dòng không quan tâm đến điều đó và các nhà phát triển phân phối là những người cung cấp .desktoptệp của họ , cho loại nhiệm vụ này là bắt buộc.
njsg

Tôi không biết liệu các nhà phát triển thượng nguồn có nên quan tâm đến điều đó không. Tôi chỉ đề cập đến XDG vì nó có sẵn cho người dùng cuối nếu bạn muốn sử dụng nó. Một mức giá không đồng nhất là nó chắc chắn sẽ đặt gánh nặng trách nhiệm lên người dùng mà họ sẽ không có, ví dụ như OSX. Một số bản phân phối linux nhằm mục đích giảm thiểu điều này hơn các bản khác và bạn có thể tự do lựa chọn, nhưng cuối cùng tôi nghĩ những người thực sự không thoải mái với mô hình đó chỉ nên không sử dụng linux - tôi không chắc tại sao họ lại muốn nơi đầu tiên, thực sự.
goldilocks

Tôi đã sắp xếp một câu hỏi hay hơn - làm cách nào để quản lý các ứng dụng được cài đặt thủ công của mình? Giống như Eclipse và Firefox, thường chạy mà không phụ thuộc phức tạp (vì vậy tôi có thể tự thiết lập và tải xuống gói). Chúng hoạt động độc lập, như bạn hoặc ai đó đã đề cập, nhưng tôi có nên theo dõi các ứng dụng này, thay vì để tất cả chúng xung quanh hệ thống tệp của mình không? (Xem câu hỏi cập nhật)
Raekye

Raekye: Không có gì khác biệt với quan điểm của tôi, đó là bạn không phải làm gì để quản lý hoặc "theo dõi" những thứ bạn đã cài đặt từ nguồn trong / usr / local, ngoại trừ mức độ bạn muốn cho bất cứ mục đích nào của bạn . Ngoài việc biên dịch và cài đặt trong $ PATH, không có đăng ký linux chung vì không có mục đích cho cách tiếp cận phổ quát như vậy. Tôi cho rằng bạn chỉ lo lắng bạn đã bỏ lỡ điều gì đó - bạn đã không làm thế. Bạn un-tar, bạn configure, bạn make install. Thế là xong. Bất cứ điều gì sau đó là một vấn đề sở thích cá nhân.
goldilocks

4

Tôi nghĩ lý do cơ bản cho vấn đề chung của bạn là hệ thống Linux tự nó không chứa "sổ đăng ký" như vậy. Một tập tin thực thi là tất cả những gì bạn thực sự cần cho một cái gì đó để chạy. Nếu bạn không muốn chỉ định đường dẫn đầy đủ đến tệp thực thi thì hầu hết các shell sẽ tìm chúng trong các thư mục được liệt kê trong biến môi trường $ PATH của bạn. Nó có thể phức tạp hơn một chút với các thư viện được liên kết, v.v. nhưng thông thường bạn không cần phải đi sâu đến mức đó.

Các bản phân phối khác nhau của Linux đã được chuẩn hóa trên các bố cục hệ thống tập tin và hệ thống quản lý gói khác nhau, trong đó có vấn đề. Redhats sử dụng vòng / phút , Debians / Ubuntu sử dụng các gói deb. Arch cũng đi theo cách riêng của mình . Từ góc độ dự án phần mềm, trừ khi bạn muốn được đưa vào một bản phân phối, cơ sở người dùng của bạn hoàn toàn ở một bản phân phối hoặc một sản phẩm thương mại nhằm mục đích dễ dàng cài đặt cho mọi người, có lẽ họ là những điểm duy nhất bạn bắt đầu tìm cách xây dựng gói khác nhau.

Trong thực tế, một tar.gz nguồn được xây dựng có gcclẽ là định nghĩa tốt nhất về một "gói Linux" phổ biến. Một nhân Linux với một số tiện ích GNU và GCC chỉ là mẫu số chung giữa tất cả các hương vị khác nhau của các hệ điều hành dựa trên Linux mà bạn có thể nhận được.

Tôi sẽ không đi xa như nói rằng "rất ít" những thứ có sẵn dưới dạng các gói vì thứ gì đó cụ thể mà bạn đang tìm kiếm không có. (hoặc có thể nhà phân phối đã chọn không bận tâm với tất cả các gói phiền phức này? Giống như Chrome và đó là quá trình cập nhật riêng). Có rất nhiều gói xung quanh cho rất nhiều hệ thống gói khác nhau cho rất nhiều kiến ​​trúc cho rất nhiều phần mềm miễn phí, thật không vui chút nào .

Nếu bạn đã xây dựng một cái gì đó không được cung cấp dưới dạng gói để phân phối linux của bạn hoặc hỗ trợ tùy chọn để xây dựng dưới dạng gói, cách tốt nhất để "đăng ký" nó như một gói thực sự là xây dựng gói cho nó, xác định nơi tất cả các tập tin nên dựa trên hệ thống gói bạn chọn và cài đặt theo cách đó. Hãy là một linh hồn và đóng góp công việc đóng gói của bạn trở lại dự án để những người khác có thể hưởng lợi từ nó.

nhiều hướng dẫn khác nhau trên web về các gói xây dựng . Debian là một trong số họ .

Nếu tất cả những gì bạn muốn làm là chạy một gói đã biên dịch, có thể thêm đường dẫn nhị phân vào $PATH?

Nếu bạn đang làm một cái gì đó khác, nó là gì?


"Nếu tất cả những gì bạn muốn làm là chạy một gói đã biên dịch, có thể thêm đường dẫn nhị phân vào $ PATH của bạn?" <- Tôi cho rằng bất kỳ quy trình cài đặt lành mạnh nào (giả sử, make installhoặc tương tự) ít nhất sẽ cài đặt một liên kết tượng trưng bên dưới /usr/bin/, nếu không cài đặt toàn bộ bên dưới /)
njsg

Hầu hết, tôi đoán đó là do tôi đã làm rất nhiều --prefix=/elsewheređể giữ các bản dựng tùy chỉnh cách xa cây thông thường.
Matt

Nói chung, tarball sử dụng make installsẽ cài đặt vào/usr/local/bin
Shadur

0

Tôi muốn thêm rằng bạn cũng có thể liên kết tượng trưng ~/bin/thay vì /usr/bin. *.desktoptập tin có thể được đặt trong ~/.local/share/applications/hoặc /usr/share/applications/. Chỉ có tôi sử dụng máy tính của mình và tôi muốn tránh chạm vào các tệp hệ thống (bất cứ thứ gì bên ngoài thư mục nhà của tôi) càng nhiều càng tốt.

Tất nhiên, khi bạn đặt nội dung vào đối tác "thư mục chính", chúng sẽ không hiển thị cho người dùng khác.

Đây là những gì được bao gồm trong mặc định ~/.profilecho whianzy whianzy:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi
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.