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

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

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

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

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

3
задан 6 March 2012 в 19:53

3 ответа

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

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

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

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

0
ответ дан 6 March 2012 в 19:53

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

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

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

0
ответ дан 6 March 2012 в 19:53

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

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

0
ответ дан 6 March 2012 в 19:53

Другие вопросы по тегам:

Похожие вопросы: