Criando um ambiente de desenvolvimento customizado

1

Estou criando um sistema, principalmente para fins educacionais, não apenas para o processo de construção em si, mas também para o desenvolvimento / depuração.

Isso é o que eu gostaria de alcançar.

  1. Instale um conjunto de ferramentas completamente independente do conjunto de ferramentas do sistema.

    1.1. GCC (C, C ++) é uma obrigação. Eu quero manter os compiladores isolados do sistema operacional (por exemplo, para atualizar quando julgar necessário), e também para construir debstdc + + debug / release, ambos com símbolos de depuração e origem. "Isolado" também significa que prefiro que o GCC não contenha os caminhos habituais codificados. O sistema atual GCC é 5.1.1, eu iria construir 5.2.0.

    1.2. libc / glibc seria um bom ter, pelas mesmas duas razões acima. É aconselhável? Eu provavelmente usaria a mesma versão que a instalada no sistema.

    1.3. fazer / binutils. É necessário / aconselhável? Eu provavelmente usaria as mesmas versões que as instaladas no sistema.

  2. Construa a partir do código-fonte algumas bibliotecas / ferramentas que eu uso com mais frequência, como:

    2.1. zlib

    2.2. UTI

    2.3. OpenSSL

    2.4. Boost

    2.5. Qt

    etc.

Eu os construo a partir do código-fonte, mais uma vez, porque gosto de criar versões de depuração / liberação de cada um, vinculadas a versões de depuração / release de outras dependências internas (por exemplo, Boost - > ICU), com símbolos de depuração e fonte para todos. E também porque gosto de experimentar diferentes opções de configuração.

  1. Para outras bibliotecas / ferramentas, use os pacotes das repos do sistema.

    3.1. Isso inclui requisitos para as bibliotecas acima - por exemplo, libxbc, libgstreamer ou dbus para o Qt.

  2. Mesmo que eu tenha acesso root (essa é uma VM do Fedora no VirtualBox), prefiro ficar sem ela.

Eu analisei o Linux From Scratch e, embora haja muitas informações úteis para o que pretendo fazer, acredito, há uma diferença fundamental, pois não quero algo completamente separado do sistema "host". Eu quero que minhas ferramentas / bibliotecas sempre pesquisem meus caminhos de instalação antes do sistema, mas caso contrário, tenham acesso a todo o resto instalado a partir dos repositórios. Eu também não quero remover nenhuma ferramenta do sistema (por exemplo, GCC / binutils) e bibliotecas (eu acredito que o sistema deve usar sua própria libc ou OpenSSL, ao invés da minha). Se o sistema precisar construir algo, ele não deve encontrar minhas ferramentas / bibliotecas.

  1. Minhas perguntas.

    5.1. Como afirmado em 1.3, acima, devo usar o make / binutils do sistema, ou preciso criar o meu próprio a partir do código-fonte?

    5.2. Dada a minha exigência de ter acesso ao sistema "host", um ambiente chroot é viável / desejável?

    5.3. Há mais alguma coisa que eu deva investigar antes de começar a fazer isso?

Eu vou admitir que estou um pouco fora da minha profundidade, mas é assim que eu sempre aprendi tudo, então isso não é um problema.

Qualquer ajuda / sugestão / ponteiro para a documentação relevante é muito bem-vinda.

Editar para responder à resposta do cas

Meu objetivo não é de ponta, mas controle sobre as versões de depuração. Não consigo encontrar uma versão de depuração (não otimizada) do libstdc ++ (obtida configurando o GCC com --enable-libstdcxx-debug ), nos repositórios do Fedora. Se eu tivesse isso em um pacote, não precisaria criar o GCC a partir do código-fonte.

E, embora aprender mais sobre o processo de criação e sua interação com os componentes do sistema seja um bônus, o que eu realmente quero é experimentar com código GDB, carregamento de símbolo e depuração otimizada em relação a código não otimizado. É por isso que eu gostaria de ter as versões não otimizadas das bibliotecas.

Concordo com o problema. Minhas duas tentativas anteriores, nas quais segui a maneira "normal" mencionada, resultaram em erros incomuns ao criar o Qt (o software mais complexo que espero construir a partir da fonte); e, ao construir com o "toolchain do sistema", tudo correu bem. É por isso que pensei que talvez houvesse uma maneira melhor de fazer, mais completa, mas sem a necessidade de construir todo o sistema a partir da fonte.

Eu posso mudar para uma distribuição diferente, desde que eu não tenha que construir tudo a partir do código-fonte, e não tenho nenhuma exigência em versões de software, ou seja, eu poderia criar o GCC 5.1.1, que é o mesmo que eu tenho no meu Fedora VM, para minimizar as diferenças. Eu já estou seguindo as "receitas de compilação" dos pacotes do Fedora, tanto quanto possível.

    
por PCaetano 15.11.2015 / 18:24

1 resposta

1

A maneira "normal" de fazer isso é modificar o ambiente do usuário para usar suas versões compiladas - por exemplo, PATH, LD_LIBRARY_PATH, C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, etc.

Defina essas e outras variáveis relevantes em seu script de login (por exemplo, ~/.profile para bash ou sh ).

Depois, por exemplo, compile o gcc 5.20 usando o sistema gcc e instale-o sob seu diretório pessoal (por exemplo, binários em ~ / bin, cabeçalhos em ~ / include, libs em ~ / lib etc).

Faça o mesmo para outras bibliotecas / programas que você deseja compilar.

Observe, no entanto, que não há garantia de compatibilidade com as bibliotecas do sistema - por exemplo, se você compilar um aplicativo contra uma nova versão do Qt, ele pode não rodar corretamente (ou de jeito nenhum) no KDE / Qt do seu sistema.

Pessoalmente, acho que você está apenas criando problemas para si mesmo ... quanto maior o desvio do sistema, mais incômodo você inevitavelmente experimentará e mais você acabará com um sistema que não pode ser reproduzido ou entendido bem. o suficiente para ser depurado. Você seria melhor recompilar apenas o que você não pode prescindir, e mesmo assim você ficaria muito melhor se apenas compilasse um novo pacote para instalar no sistema com as ferramentas de gerenciamento de pacotes do sistema (rpm no seu caso). )

Se você realmente precisa de versões 'de ponta', use uma distribuição alpha de pré-lançamento como o Fedora Rawhide ou o Debian Sid.

    
por 15.11.2015 / 23:38

Tags