Série de perguntas sobre scripts de ebuild. Dada passagem original de devrel & questions

1

Escopo

Sempre que um ebuild é originado, as funções e variáveis dentro dele são carregadas na memória pelo interpretador de script. No entanto, apenas variáveis e instruções que não fazem parte de uma função são interpretadas - funções como src_compile () são executadas apenas pelo Portage quando a ebuild atinge o estágio de compilação.

O código dentro dessas funções é considerado em "escopo local", enquanto tudo fora das funções está no "escopo global", o que significa que elas são executadas toda vez que o ebuild é originado.

Um aplicativo externo (como grep, sed ou awk) nunca deve ser chamado no escopo global por motivos de desempenho, e alternativas como o uso de substituição bash integrada devem ser usadas. Alternativas úteis podem ser encontradas no Advanced Bash Scripting Guide.

Além disso, não é possível garantir que qualquer aplicativo externo que possa ser chamado no escopo global exista no sistema. Se o comando for colocado no escopo local (por exemplo, na função pkg_setup() ), podemos garantir sua presença colocando-o no ${DEPEND} da ebuild.

  1. O que significa construir uma fonte? Pode ser o comando fonte (btw eu não entendo isso, era de e livro e não tem "fonte do homem".

  2. OK, variáveis - como elas podem ser interpretadas? De alguma forma, entendo como as funções podem. Funções provavelmente são de algum tipo de programação. É um compilado ou interpretado. E se a linguagem ebuild é scripting (pode ser que seja bash) - como pearl ou python que é amplamente usado no Gentoo Portage, como ebuild pode conter funções de compilação (eu me lembro de algumas de pascal da escola).

  3. E assim, o que é src_compile() function - não foi mencionado no revdel.

  4. "estágio de compilação" - o que essa terminologia está dizendo? Quais são os estágios ebuild ou estágios de ebuild?

  5. O mesmo é sobre o escopo local / global. Eu não entendo completamente, junto com algumas aplicações internas - não consegui entender o contrário (awk ...) são mencionados.

  6. pkg_setup() function, $DEPEND - são apenas exemplos ou implicam significados implícitos?

por Xsi 19.11.2012 / 12:43

1 resposta

3

Ebuilds são scripts de shell (scripts bash de fato). Então eles funcionam como scripts de shell, possuem variáveis e definem funções. Mas as ebuilds não são executadas diretamente - você as executa via emerge (ou ebuild às vezes diretamente) que conduz o processo de preparação, construção e instalação chamando as funções apropriadas da ebuild na sequência necessária.

Q1: What it means to ebuild to be sourced?
Q2: variables - how they can be interpreted?
Q5: scopes

O mesmo que para scripts de shell, usando o comando source builtin (consulte man bash para isso). Isso significa que o script (o ebuild nesse caso) é lido pelo shell atual (controlado por emerge ) e processado como se fosse parte do script de chamada.
Isso processa todas as definições de variáveis, adicionando-as ao ambiente do script de chamada e analisa todas as funções definidas na ebuild - mas não executa essas funções.
As variáveis podem ser muito simples, por exemplo:

DEPEND=">=dev-foo/bar-42"

que não precisa de interpretação ou pode conter referências a outras variáveis, por exemplo:

DEPEND=">=some-cat/related-${PV}"

que precisa de interpolação de variável, ou pode usar definições ainda mais complexas que exigem a execução de comandos incorporados bash ou programas externos a serem interpretados. Isso não é nada específico para ebuilds, mas scripts comuns.

Não há nada específico sobre o escopo em ebuilds, é a mesma coisa que em scripts comuns.

Q4: stages
Q3&6: src_compile, pkg_setup, ${DEPEND}

O processo de instalação de um pacote a partir da fonte é decomposto em várias etapas, preparação aproximada (download, descompactação e configuração de fontes), compilação e, em seguida, tarefas de instalação e pós-instalação. Os mantenedores do Ebuild podem fornecer funções a serem executadas em cada estágio diferente para customizar a construção. Você pode encontrar a lista de estágios no Uso e descrição do EAPI do desenvolvedor. manual.
As variáveis predefinidas e ebuild são descritas na seção Variáveis desse mesmo manual. ${DEPEND} é um deles.

src_compile é uma das funções que um ebuild deve fornecer (direta ou indiretamente) se algo precisa ser feito para compilar as fontes antes de instalar o pacote. Nem todos os ebuilds precisam disso (por exemplo, poderiam instalar apenas ícones / temas / imagens que não precisam ser compilados), mas geralmente são necessários. É o trabalho do mantenedor ebuild para criar a função para que ele construa o pacote fonte corretamente.
pkg_setup é uma das funções que serão chamadas em um estágio anterior na instalação.

    
por 19.11.2012 / 13:25

Tags