Cách cài đặt thực thi


13

Đôi khi tôi chạy vào phần mềm không được cung cấp .debhoặc .rpmchỉ là một phần thi hành.
Ví dụ Visual Studio Mã , WebStorm hoặc Kerbal Space Programm .

Đối với câu hỏi này, tôi sẽ lấy Visual Studio Code làm điểm tham chiếu.

Phần mềm được cung cấp dưới dạng gói nén.
Khi giải nén, tôi để lại một thư mục VSCode-linux-x64có tên là tệp thực thi có tên Code.
Tôi có thể nhấp đúp chuột Codehoặc trỏ đến nó với thiết bị đầu cuối của tôi muốn /home/user/Downloads/VSCode-linux-x64/Codethực hiện nó.
Tuy nhiên, tôi muốn biết liệu có cách nào thích hợp để cài đặt ứng dụng này không.

Những gì tôi muốn đạt được là:

  • một nơi mà tôi có thể đặt tất cả các ứng dụng / phần mềm được cung cấp theo cách này (thực thi)
  • hỗ trợ thiết bị đầu cuối (có nghĩa là ví dụ: Tôi có thể viết vscodetừ bất kỳ thư mục nào trong thiết bị đầu cuối của mình và nó sẽ tự động thực thi Visual Studio Code.

Thông tin bổ sung:

  • Môi trường máy tính để bàn: Gnome3
  • HĐH: Debian

EDIT:
Tôi quyết định cho @kba câu trả lời vì cách tiếp cận của anh ấy hiệu quả hơn với giải pháp sao lưu của tôi và bên cạnh đó. Có kịch bản thực thi các nhị phân cho bạn khả năng thêm đối số.
Nhưng công bằng mà nói, cách tiếp cận của @John WH Smith cũng tốt như @ kba.

Câu trả lời:


12

Để gọi một chương trình theo tên của nó, shell tìm kiếm các thư mục trong $PATHbiến môi trường. Trong Debian, mặc định $PATHcho người dùng của bạn nên bao gồm /home/YOUR-USER-NAME/bin(tức là ~/bin).

Trước tiên hãy đảm bảo thư mục ~/bintồn tại hoặc tạo nó nếu nó không:

mkdir -p ~/bin

Bạn có thể symlink nhị phân đến thư mục đó để làm cho nó có sẵn cho shell:

mkdir -p ~/bin
ln -s /home/user/Downloads/VSCode-linux-x64/Code ~/bin/vscode

Điều đó sẽ cho phép bạn chạy vscodetrên dòng lệnh hoặc từ trình khởi chạy lệnh.

Lưu ý: Bạn cũng có thể sao chép nhị phân vào các $PATHthư mục nhưng điều đó có thể gây ra sự cố nếu chúng phụ thuộc vào đường dẫn tương đối.

Tuy nhiên, nói chung, luôn luôn thích cài đặt phần mềm đúng cách bằng các phương tiện được cung cấp bởi HĐH (apt-get, gói deb) hoặc các công cụ xây dựng của dự án phần mềm. Điều này sẽ đảm bảo rằng các đường dẫn phụ thuộc (như tập lệnh bắt đầu, trang man, cấu hình, v.v.) được thiết lập chính xác.

Cập nhật: Cũng phản ánh ý kiến ​​của Thomas Dickeycâu trả lời của Faheem Mitha về những gì tôi thường làm đối với phần mềm dưới dạng tarball với nhị phân cấp cao nhất và dự kiến ​​sẽ được chạy từ đó:

Đặt nó ở một vị trí lành mạnh (theo thứ tự tiêu chuẩn tuân thủ /opt, /usr/localhoặc một thư mục trong thư mục chính của bạn, ví dụ ~/build) và tạo ra một kịch bản wrapper thực thi trong một $PATHvị trí (ví dụ /usr/local/binhay ~/bin) rằng những thay đổi đến địa điểm đó và thực thi nhị phân:

#/bin/sh
cd "$HOME/build/directory"
exec ./top-level-binary "$@"

Vì điều này mô phỏng việc thay đổi thư mục đó và thực hiện nhị phân theo cách thủ công, nên việc gỡ lỗi dễ dàng hơn như các đường dẫn tương đối không tồn tại.


1
Tôi thích cách tiếp cận này. Cá nhân tôi chỉ cần ném một bí danh vào hồ sơ bash, mặc dù nó sẽ trở nên lộn xộn nhanh chóng nếu bạn có rất nhiều chương trình bạn đã làm điều này với.
WorBlux

1
Sau đó, nó chỉ có thể được sử dụng từ vỏ. Tại một số điểm bạn có thể muốn cài đặt một .desktopmục để bắt đầu từ một menu hoặc bạn thêm cấu hình, khám phá các cờ dòng lệnh, v.v ... Một bí danh rất không linh hoạt.
kba đứng với Monica

8

Theo TLDP , /optcó thể là một nơi tốt cho loại phần mềm này. Tôi đã sử dụng nó để lưu trữ một số công cụ liên quan đến máy in và phiên bản "động" của Skype (như kba đã nói, "hỗ trợ đầu cuối" có thể đạt được bằng cách đặt PATHbiến tương ứng).

Tổng quát hơn, tôi có xu hướng sử dụng /optđể "cài đặt" phần mềm độc quyền được đóng gói dưới dạng thực thi, nhưng đó có lẽ chỉ là tôi. Ngoài ra, tôi có xu hướng đơn giản là tránh loại phần mềm này, vì tôi thường không chắc chắn về những gì nó sẽ làm một khi tôi chạy nó.

Một lý do khác khiến tôi chọn /optlà vì nó thường có nghĩa là mã độc lập của bên thứ ba, không dựa vào bất kỳ tệp nào bên ngoài /opt/'package'thư mục của nó (và các optthư mục khác như /etc/opt).

Trong mọi trường hợp, các tệp gói khác tồn tại bên ngoài phân cấp / opt, / var / opt và / etc / opt ngoại trừ các tệp gói đó phải nằm trong các vị trí cụ thể trong cây hệ thống tệp để hoạt động chính xác. [...] Nói chung, tất cả dữ liệu cần thiết để hỗ trợ gói trên hệ thống phải có trong / opt / 'gói', bao gồm các tệp dự định được sao chép vào / etc / opt / 'gói' và / var / opt / ' gói 'cũng như các thư mục dành riêng trong / opt.

Một lợi thế của việc phát hành mã nguồn là mọi người có thể định cấu hình quy trình biên dịch, cung cấp các đường dẫn thư viện / tiêu đề tùy chỉnh dựa trên thông tin cụ thể của hệ thống của họ. Khi một nhà phát triển quyết định phát hành mã dưới dạng thực thi, lợi thế đó sẽ bị mất. IMHO, tại thời điểm này, nhà phát triển không còn được phép cho rằng các phụ thuộc chương trình của anh ấy / cô ấy sẽ có sẵn (đó là lý do tại sao mọi thứ nên được đóng gói cùng với thực thi).

Bất kỳ gói nào được cài đặt ở đây phải định vị các tệp tĩnh của nó (ví dụ: phông chữ bổ sung, tệp clipart, tệp cơ sở dữ liệu) trong một cây thư mục riêng / opt / 'gói' hoặc / opt / 'nhà cung cấp' (tương tự như cách Windows sẽ cài đặt phần mềm mới cho cây thư mục riêng của mình C: \ Windows \ Progam Files \ "Tên chương trình"), trong đó 'gói' là tên mô tả gói phần mềm và 'nhà cung cấp' là tên đã đăng ký LANANA của nhà cung cấp.

Để biết thêm thông tin, tôi cũng khuyên bạn nên đọc câu hỏi U & L khác này , liên quan đến sự khác biệt giữa betwen /opt/usr/local. Cá nhân tôi sẽ tránh /usr/localtrong trường hợp này, đặc biệt nếu tôi không phải là người xây dựng chương trình tôi đang cài đặt.


6

Hoàn toàn có thể, và trên thực tế khá dễ dàng, để tạo gói nhị phân phân phối từ kho lưu trữ zip nhị phân hoặc tarball, như trong ví dụ về Visual Studio Code của bạn.

Có, các gói nhị phân phân phối Linux như debs và rpms thường được tạo từ nguồn, nhưng chúng không phải như vậy. Và thường là (mặc dù không phải lúc nào) có thể sắp xếp mọi thứ để gói nhị phân phân phối kết quả cài đặt mọi thứ ở vị trí "đúng" để tuân thủ chính sách phân phối.

Trong trường hợp tarball độc quyền ngẫu nhiên, nếu có cách cài đặt phần mềm đúng cách, ví dụ như mục tiêu cài đặt trong tệp tạo tệp, thì có thể sử dụng máy móc đóng gói phân phối. Mặt khác, điều này có thể liên quan đến các tệp ánh xạ "thủ công" đến các vị trí "đúng", có thể rất nhiều công việc. Mặc dù việc tạo ra một gói như vậy có vẻ là một điều kỳ lạ để làm, nhưng nó vẫn có một trong những lợi ích chính của việc quản lý gói, đó là cài đặt sạch và gỡ cài đặt. Và tất nhiên một gói như vậy sẽ không bao giờ được chấp nhận vào bất kỳ bản phân phối Linux nào có giá trị, nhưng đó không phải là câu hỏi của bạn.


Điều đó đúng và vẫn: Khi bạn chỉ muốn một số phần mềm không được đóng gói, không được xây dựng chuẩn chạy trên hệ thống cục bộ của mình, việc tạo gói Debian có thể dẫn đến IMHO cạo râu nghiêm trọng.
kba đứng với Monica

Tuyên bố: không có yak đã bị cạo trong khi viết câu hỏi này.
Faheem Mitha

@FaheemMitha - bạn có thể cạo một yak không đau bằng fpm.
Deer Hunter

@DeerHunter Tôi đã nghe nói về điều đó. Bạn đã sử dụng nó?
Faheem Mitha

1
@DeerHunter Điểm thực sự tốt, tôi đã sử dụng fpm để xây dựng các gói nhị phân đa nền tảng cho một dự án vài năm trước và nó thực sự rất dễ dàng.
kba đứng với Monica

3

Tôi hiếm khi thấy phần mềm được phân phối giống như một tệp thực thi nhị phân và không có gì khác, và tôi thực sự sẽ có một chút nghi ngờ về nó. Nếu không có gì khác, tôi ít nhất sẽ mong đợi một README(có hướng dẫn cài đặt nó) và một LICENSEkèm theo nó. Điều đó đang được nói ...

Nơi thông thường nơi các tệp nhị phân được cài đặt cục bộ không được quản lý bởi trình quản lý gói của distro được giữ là /usr/local/bin. Bạn có thể đặt nó ở đó, và vì thư mục đó đã có (hoặc nên có), $PATHbạn có thể chạy phần mềm bằng cách nhập tên của nó vào dòng lệnh.

Thông thường các phần mềm cũng cần phải có một manpage (phần mềm không có giấy tờ là xấu, phải không?) Mà đi vào /usr/local/manvà có thể có một số tác phẩm hỗ trợ như bản dịch sang ngôn ngữ khác và bổ sung mà có thể đi vào /usr/local/sharehoặc /usr/local/lib, và vân vân. Vì lý do này, phần mềm không được phân phối dưới dạng gói như .debhoặc .rpmthường đi kèm với trình cài đặt đặt mọi thứ vào đúng vị trí. Khi bạn cài đặt từ nguồn, thường là vậy make install.


Trong trường hợp của Visual Studio Code , nó có 77 tệp LICENSE nằm rải rác trong cây thư mục. Cấp cao nhất Codechỉ là điểm khởi đầu. Nó có thể hiển thị giấy phép khi chạy (tệp thực thi 64 bit không chạy trên máy trong tay, nhưng ai đó nên xác minh loại điều đó để cung cấp câu trả lời tốt giải quyết câu hỏi thực tế của OP.
Thomas Dickey

Cảm ơn @ThomasDickey đã làm rõ. Tôi tin rằng tôi đã hiểu nhầm tình hình chính xác của OP. Tôi nghĩ rằng điều duy nhất họ nhận được là một lần thực thi ELF duy nhất (được bọc trong một tarball)
Celada

Không - Tôi đã xem nhanh (không có trong danh sách việc cần làm của tôi ...) và nó có ~ 1500 tệp. Chỉ cần xem qua OSX, đã chạy và bắt đầu trong một hướng dẫn trên trình duyệt web. Câu trả lời của @ kba là một phần hữu ích, mặc dù theo quy định, tôi sẽ thử giải nén nó bên dưới /usr/localthay vì thư mục nhà của tôi. (Không phải tất cả các chương trình sẽ hoạt động - lấy Eclipseví dụ).
Thomas Dickey
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.