encontrando binários / arquivos / bibliotecas não no caminho - especificamente gcj

2

Estou tentando construir o pdftk, que aparentemente requer o gcj. Como ele ainda não está no meu caminho, posso adicionar o diretório que contém o gcj ao meu caminho ou definir o caminho no Makefile pré-criado.

O problema é que não faço ideia:

a) onde gcj é e b) se existe no servidor (pelo menos de tal forma que eu possa adicionar ao caminho).

Esse problema surgiu mais de uma vez em minhas tentativas anteriores de criar binários a partir do código-fonte, por isso espero fazer duas perguntas ao mesmo tempo para corrigir meu problema atual e evitar esse problema no futuro ...

  1. Existe uma maneira de adicionar TUDO que eu li / execute permissão no meu caminho? Sub-pergunta, esta é uma má ideia?

  2. O whereis pesquisa apenas o meu caminho? Existe algum equivalente para localizar arquivos / diretórios que preciso sem precisar pesquisar o host INTEIRO e obter acesso negado para todos os outros diretórios?

  3. Existe uma maneira de saber com certeza se uma biblioteca / binário definitivamente não está disponível vs. não apenas no meu caminho?

  4. Existe uma maneira de saber, especificamente para gcc se gcj estiver disponível?

  5. Posso compilar o gcj para meu diretório de usuários sem precisar compilar todo o gcc com ele?

  6. Existe uma maneira (universal), ao criar um binário, para marcar a compilação ou fazer o arquivo para lidar com quaisquer dependências à medida que elas são encontradas, em vez de simplesmente falhar?

  7. Um usuário típico em uma situação de host compartilhado tem a capacidade de usar a biblioteca de pacotes do sistema operacional para obter pacotes no nível do usuário?

por Anthony 17.01.2010 / 15:33

3 respostas

2

(1.) Is there a way to add EVERYTHING I have read/execute permission into my path? Sub-question, is this a bad idea?

... é uma má ideia por motivos de segurança.

(2.) Does whereis only search my path? Is there some equivalent for finding files/directories I need without having to search the ENTIRE host and getting access-denied for every other directory?

Você poderia usar o locate (ou glocate disponível no findutils do OpenCSW ) com a opção -r, que permite usar expressões: glocate -r /gcj$

(3.) Is there a way I can know for sure if a library/binary is definitely not available vs. just not in my path?

O glocate pode lhe dizer isso, assumindo que gupdatedb foi executado recentemente.

(4.) Is there a way to tell, specifically for gcc if gcj is available?

A melhor maneira de fazer isso é verificar os pacotes instalados. A lista de arquivos instalados está em /var/sadm/install/contents .

(5.) Can I compile gcj to my user directory without having to compile all of gcc with it?

Não tentei, mas você ainda precisaria passar por muitos problemas. Provavelmente é melhor pegar um binário gcj já disponível. Se você tiver que compilar você mesmo, então é melhor usar as descrições de compilação existentes, como este .

(6.) Is there a (universal) way, when building a binary, to flag the compile or make file to deal with any dependencies as it finds them rather than simply failing?

Eu presumo que você esteja pensando em algo como o emerge do Gentoo, que baixa e instala os pacotes dependentes antes de compilar o que você queria. Não é feito facilmente; especialmente se você compilar tudo como um usuário comum, porque você precisa usar um ambiente chroot. É uma boa ideia, mas não é trivial.

(7.) Does a typical user on a shared-host situation have the ability to use the OS package library to get packages at the user-level?

O que você quer dizer com receber pacotes ? Se o que você quer é extrair o conteúdo de um arquivo .pkg, você pode usar o comando pkgtrans, assim: pkgtrans foo.pkg ./ all
No entanto, há também a possibilidade de fazer algo como pbuilder que cria um ambiente chroot, no qual você faz sua compilação, bem como instalações de pacotes, tudo no diretório inicial.

Voltando à pergunta gcj, eu acho que você precisa especificar as dependências de tempo de compilação do seu makefile e depender de um pacote que contenha gcj, em um caminho conhecido, e então você pode usar esse caminho na sua descrição de compilação. p>

Geralmente, se você está em uma hospedagem compartilhada, a compilação de pacotes será um problema, é muito melhor encontrar um sistema quando você pode instalar e remover pacotes, e escrever para / usr.

Também é uma boa idéia usar algum tipo de estrutura de compilação, como GAR , que faz as coisas certas e remove muitas de aborrecimentos: verifica as dependências de tempo de compilação, tarballs de downloads, checksums verificados, extrações, aplica patches se houver, configura, constrói, instala e faz um pacote, e você pode especificar tudo em um único Makefile. Aprender a usar essa estrutura requer um pouco de tempo, mas se você mesmo tende a criar pacotes, o tempo gasto em aprendizado será compensado rapidamente.

    
por 20.01.2010 / 09:23
0
  1. Sim, é uma má ideia por motivos de segurança. Um script ou programa mal-intencionado ou um erro simples pode ser um problema real.

  2. whereis pesquisa os lugares óbvios como /bin , /usr/bin e outros. Veja a seção MANES FILES

Você pode usar locate se estiver disponível ou find caso contrário:

locate gcj

ou

find / -name gcj
    
por 17.01.2010 / 15:50
0

1: Ninguém faz isso - > má ideia.

2 + 3: o caminho certo é:

pkginfo | grep -i gcj         # (Solaris specific)
find / -name gcj 2>/dev/null

4: não sei.

5: Provavelmente, e é obviamente muito trabalho manual.

6: Não. No Makefile, você pode simplesmente acrescentar ao PATH quaisquer diretórios que usem o gcj (seu palpite). Isso não vai machucar ninguém.

7: Não, cabe ao administrador instalar um pacote. Mas você não precisa ser um administrador para extrair os arquivos contidos no pacote para o seu diretório pessoal:

pkgtrans my-gcj.pkg .     # (Solaris specific) converts package to a "filesystem format package" (i.e. directory tree)

O software raramente será utilizável após essa subtração (propriedade incorreta, caminho incorreto, caminhos de biblioteca incorretos, caminhos de arquivo de configuração inválidos, nenhum script de instalação executado, nenhum pré-requisito verificado, ...). Essa operação também é possível não apenas no Solaris, mas na maioria dos outros tipos de Unix / Linux - usando suas ferramentas de empacotamento.

    
por 19.01.2010 / 12:42