Эквивалент Ubuntu для портативного исполняемого файла

Эквивалент Ubuntu для портативного исполняемого файла

Я разрабатываю приложение, которое имеет некоторую зависимость, и для этого я использую внешние инструменты. Одним из примеров является то, что я использую командную строку putty plink.exe для telnet/ssh удаленной машины из программы java.

Теперь, когда я перехожу на ubuntu, для этого есть утилита sshpass, которая делает то же самое для меня. Теперь проблема в том, что sshpass еще не установлен и пока он не установлен, моя программа не будет работать.

В Windows, если чего-то нет, я могу упаковать портативный исполняемый файл в свою программу, например, этот plink.exe и использовать его во время выполнения для выполнения работы. Теперь в Ubuntu я хочу узнать, есть ли способ упаковать .exe-подобный файл, который я могу просто вызвать с аргументами для выполнения аналогичных задач??

В общем, я хочу узнать, есть ли в Ubuntu возможность запустить файл без его установки? Если да, то как это возможно?

решение1

В Linux, как и в Windows, вы можете скомпилировать любую программу со всеми ее зависимостями, связанными как статические файлы. Но разница в том, что в Linux это не обычный способ делать вещи.

Linux-способ заключается в установке каждой программы только один раз, если вам нужно использовать shhpass, вы не должны связывать его с вашим программным обеспечением, но вы должны указать его как зависимость в вашем установочном пакете (например, deb-файл для Ubuntu). Менеджер пакетов извлечет и установит его, когда он устанавливает вашу программу.

Есть несколько причин для такого поведения, от эффективности (использование общей памяти) до безопасности (вы можете отправить ошибку безопасности с вашей связанной программой). Как и все, этот подход также имеет свои недостатки, в основном необходимость централизованного места для установки программного обеспечения, но важный момент в вашем ответе — как обстоят дела, а не как могли бы быть.

Короткий ответ: да, вы можете это сделать., но это будет сложно. Вы будете бороться против культуры и дизайна unix-подобных ОС. Вам, скорее всего, придется компилировать собственные версии каждой программы, которую вы хотите объединить, и большинству упаковщиков и пользователей это не понравится.

решение2

Идиоматичным подходом в Ubuntu будет выдача не вашей сырой программы, а пакета .deb, содержащего вашу программу и также перечисляющего ее зависимости. Затем, установка вашего пакета автоматически установит все отсутствующие зависимости (предполагая, что они доступны из стандартных источников).

Есть некоторая документацияздесьпо созданию пакетов.

Альтернативный, более windows-y (и даже немного OSX-y) подход, заключается в том, чтобы объединить статически связанные сборки всех ваших зависимостей с вашим приложением и распаковать их во временный каталог, из которого вы их запускаете. Вы можете использовать такой инструмент, каксделать себяДля этого: поместите все необходимые исполняемые файлы, а также ваши jar-файлы и подходящий стартовый скрипт в каталог, и он сделает все остальное.

решение3

Под Linux любой файл может быть выполнен (при наличии соответствующих привилегий). Из вашей программы Java вы можете вызвать любой .exe-файл, который вы упаковываете вместе с ней.

Вам, вероятно, нужно убедиться, что файл .exe является исполняемым в Linux. Некоторые, если не большинство .exe, специфичны для одной операционной системы. Например, веб-сайт putty предоставляет исходный код только для Unix, который необходимо скомпилировать в исполняемый файл (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html). Для Windows исполняемый файл уже скомпилирован, но, вероятно, не может быть запущен в Linux/Unix.

Связанный контент