Ubuntu Equivalente ao arquivo executável portátil

3

Estou desenvolvendo um aplicativo que tinha alguma dependência e para isso eu uso ferramentas externas. Um exemplo é que eu uso plink.exe ferramenta de linha de comando do putty para telnet / ssh máquina remota do programa java.

Agora, quando eu mudo para o Ubuntu, para isso existe um utilitário sshpass que faz o mesmo para mim. Agora, o problema é que o sshpass ainda não está instalado e, antes de ser instalado, meu programa não funcionará.

No Windows, se algo não está lá, eu posso empacotar executável portátil no meu programa, por exemplo, este plink.exe e usá-lo em tempo de execução para fazer o trabalho. Agora no Ubuntu, eu quero saber existe alguma maneira que eu pacote .exe como arquivo, que eu posso simplesmente chamar com argumentos para realizar tarefas semelhantes?

Basicamente eu quero saber se há alguma maneira no Ubuntu para rodar um arquivo sem ter que instalá-lo ?? se assim for como é possível ??

    
por JohnyDep 06.03.2012 / 16:53

3 respostas

3

No linux, como no windows, você pode compilar qualquer programa com todas as dependências vinculadas como arquivos estáticos. Mas a diferença que no Linux esta não é a maneira usual de fazer as coisas.

A maneira do Linux é instalar cada programa apenas uma vez, se você precisar usar o shhpass, você não deve empacotá-lo com o seu software, mas você deve listá-lo como uma dependência no seu pacote de instalação (ex. ). O gerenciador de pacotes buscará e instalará quando estiver instalando seu programa.

Existem algumas razões para esse comportamento, desde a eficiência (uso da memória compartilhada) até a segurança (você pode enviar um erro de segurança com o seu programa incluído). Como tudo isso, a abordagem também tem suas desvantagens, principalmente a necessidade de um local centralizado para instalar o software, mas o ponto importante da sua resposta é como as coisas estão, e não como as coisas poderiam ser.

A resposta curta é sim, você pode fazê-lo , mas será difícil. Você estaria lutando contra a cultura e o design do sistema operacional unix-like. Você provavelmente precisará compilar suas próprias versões de cada programa que deseja empacotar, e a maioria dos empacotadores e usuários não vão gostar disso.

    
por Javier Rivera 06.03.2012 / 17:07
1

A abordagem idiomática no Ubuntu seria distribuir, não seu programa bruto, mas um pacote .deb contendo seu programa e também listando suas dependências. Em seguida, a instalação do seu pacote instalará automaticamente todas as dependências ausentes (supondo que estejam disponíveis nas fontes padrão).

Existe alguma documentação aqui sobre como criar pacotes.

A abordagem alternativa, mais windows-y (e até um pouco OSX-y), é empacotar compilações estaticamente vinculadas de todas as suas dependências com o seu aplicativo e descompactá-las em um diretório temporário a partir do qual você as executa. Você pode usar uma ferramenta como self-make para fazer isso: coloque todos os executáveis que você precisa, além de seus jars e um script de início adequado em um diretório e fará o resto.

    
por Useless 06.03.2012 / 18:07
0

No linux, qualquer arquivo pode ser executado (desde que você tenha os privilégios). Do seu programa java, você pode chamar qualquer arquivo .exe que você empacotar com ele.

Você provavelmente precisa ter certeza de que o arquivo .exe é executável no linux. Alguns, se não a maioria, de .exe são específicos de um sistema operacional. Por exemplo, o site da putty fornece apenas código-fonte para o unix que precisa ser compilado em um executável (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html). Para as janelas, o executável já está compilado, mas provavelmente não pode ser executado em linux / unix.

    
por Mathieu Poitras 06.03.2012 / 17:06