Jump to content

# Namcap (Português)

5 languages

- English
- Magyar
- Italiano
- 日本語
- 中文（简体）

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Namcap. Data da última tradução: 2018-10-30. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Namcap é uma ferramenta para verificar pacotes binários e PKGBUILDs fonte para erros comuns de empacotamento, que também pode ser habilitado automaticamente. Ele foi criado por Jason Chu.

Alterações: O arquivo NEWS no repositório Git contém as alterações em relação versões anteriores de forma concisa.

Ramo de desenvolvimento: https://gitlab.archlinux.org/pacman/namcap

Para fazer um relato de erro ou requisição de recurso para o namcap, preencha um relatório na seção Packages:Extra do rastreador de erros do Arch Linux e defina a importância conforme o caso. Se você está relatando um erro, por favor forneça exemplos concretos de pacotes nos quais o problema ocorra e lembre-se de inserir o número de versão.

Se você tem um patch (corrigindo um erro ou adicionando um novo módulo para o namcap), você pode enviá-lo para a lista de discussão arch-projects. O desenvolvimento do namcap é gerenciado com git, então patches formatados em git são preferíveis.

## Instalação

Instale o pacote namcap.

## Como usá-lo

Para executar o namcap em um arquivo, sendo nome_de_arquivo o `PKGBUILD` ou o nome de um binário `pkg.tar.xz`:

    $ namcap nome_de_arquivo

Se você deseja ver mensagens informacionais extras, chame o namcap com a opção `-i`:

    $ namcap -i nome_de_arquivo

Para mais informações sobre uso, veja a página man namcap(1).

## Entendendo a saída

O namcap usa um sistema de tags para classificar a saída. Atualmente, as tags são de três tipos, erros (denotados por E), avisos (denotados por W) e informativo (denotado por I). Um erro é importante e deve ser corrigido imediatamente; principalmente se eles referem a segurança insuficiente, falta de licença ou problemas de permissão.

Normalmente, o namcap imprime uma explicação legível por humanos (às vezes com sugestões sobre como solucionar o problema). Se quiser saída que pode ser facilmente analisada por um programa, passe a opção -m (legível para máquina) para o namcap (esse recurso está atualmente no ramo de desenvolvimento).

## Tags

### Links simbólicos

- symlink-found (informacional) Relata quaisquer links simbólicos presentes no pacote.
- hardlink-found (informacional) Relata quaisquer links absolutos presentes no pacote.
- dangling-symlink (erro) Relata ocorrências de links simbólicos que apontam para um arquivo que não está presente no pacote.
- dangling-hardlink (erro) Relata ocorrências de links absolutos que apontam para um arquivo que não está presente no pacote.

### Depedências

- link-level-dependence (informacional) Informa sobre uma biblioteca à qual um pacote está dinamicamente vinculado.
- dependency-is-testing-release (aviso) A dependência do pacote listada está no repositório [core-testing] ou [extra-testing]. Enquanto os pacotes estão sendo criados para os repositórios oficiais do Arch Linux (core e extra), eles não devem ser compilados contra pacotes do [core-testing] ou [extra-testing]. Para os pacotes do [core] e [extra], os pacotes comilados contra [core-testing] ou [extra-testing] devem ser colocados no repositório [core-testing] ou [extra-testing].
- dependency-covered-by-link-dependence (informacional) Dependência coberta por dependências da dependência de links. Portanto, esta é uma dependência redundante.
- dependency-detected-not-included (erro) O arquivo referido tem uma dependência que não está listada no vetor depends. Ignore este erro se a dependência mencionada estiver listada na matriz optdepends.

- dependency-already-satisfied (aviso) A dependência já está satisfeita (como a dependência de algum pacote já listado como uma dependência, por exemplo) e, portanto, é redundante. Você pode usar a ferramenta `pactree` de pacman para ver a árvore de dependências do seu pacote.
- dependency-not-needed (aviso) Essa dependência não é necessária por nenhum arquivo presente no programa (até onde o namcap pode deduzir). Isso ainda não funciona corretamente para scripts (como pacotes Python ou perl); lá, você terá que descobrir as dependências por conta própria.
- depends-by-namcap-sight (informacional) Uma lista de dependências de acordo com o namcap.

### Licenças

- missing-license (erro) Esse pacote carece de uma licença. Licenças devem ser colocadas no vetor `license=()` do PKGBUILD. Veja os Padrões de empacotamento do Arch para mais informações. É muito importante corrigir esse erro assim que possível, já que não incluir uma lista uma licença é, em muitos casos, uma violação de copyright.
- missing-custom-license-dir (erro) A licença especificada é custom (personalizada), mas nenhum diretório de licença foi encontrado sob /usr/share/licenses/, conforme especificado nas diretrizes de empacotamento.
- missing-custom-license-file (erro) A licença especificada é custom, mas nenhum arquivo de licença foi localizado em /usr/share/licenses/$pkgname.
- not-a-common-license (erro) A licença especificada não é custom, mas não está presente no pacote licenses (contendo licenças comuns), fornecido na distribuição do Arch Linux.

### Arquivos

Esta seção descreve as tags que se relacionam com permissões incorretas de arquivos ou arquivos que não estão sendo instalados de acordo com as diretrizes do FHS.

- script-link-detected (informacional) O arquivo a seguir é um script.
- file-in-non-standard-dir (aviso) O arquivo a seguir está em um diretório fora do padrão, conforme definido nas diretrizes do FHS. Os diretórios permitidos são: bin/, etc/, usr/bin/, usr/sbin/, usr/lib, usr/include/, usr/share/, opt/, lib/, sbin/, srv/, var/lib/, var/opt/, var/spool/, var/lock/, var/state/, var/run/, var/log/.
- elffile-not-in-allowed-dirs (erro) Arquivos ELF devem estar somente nesses diretórios: /lib, /bin, /sbin, /usr/bin, /usr/sbin, /lib, /usr/lib, /opt/$pkgname/.
- empty-directory (aviso) O diretório a seguir no pacote está vazio.
- non-fhs-man-page (erro) O pacote instala páginas de manual em uma localização diferente de /usr/share/man, que é o diretório para páginas de manual conforme as diretrizes do FHS.
- potential-non-fhs-man-page (aviso) Esse arquivo parece ser uma página de manual que não está instalada em /usr/share/man, mas o namcap não tem certeza disso.
- non-fhs-info-page (erro) O pacote instala páginas info em em uma localização diferente de /usr/share/info, que é onde dados independentes de arquitetura devem ser instalados, conforme as diretrizes do FHS
- potential-non-fhs-info-page (aviso) Esse arquivo parece ser uma página info que não está instalada em /usr/share/info, mas o namcap não tem certeza sobre isso.
- incorrect-permissions (erro) Esse arquivo possui dono incorreto. O dono dos arquivos em pacotes binários deve ser `root/root`.
- file-not-world-readable (aviso) O arquivo não é legível por todos; geralmente, isso não é o desejado.
- file-world-writable (aviso) Qualquer pessoa pode escrever nesse arquivo; novamente, não é um caso comum.
- directory-not-world-executable (aviso) O diretório não tem o bit de executável por todos definido. Isso impede o acesso ao diretório para programas que estejam sob privilégios de usuário.
- incorrect-library-permissions (aviso) O arquivo de biblioteca estática (.a) não tem permissão 644 (legível e gravável pelo root, legível por qualquer pessoa).
- libtool-file-present (aviso) Esse arquivo é um arquivo libtool (.la) e normalmente não deve estar presente. Pode-se usar a opção `!libtool` no vetor options do PKGBUILD para remover esses arquivos automaticamente.
- perllocal-pod-present (erro) O arquivo perllocal.pod não deve estar presente em um pacote perl; veja as diretrizes de pacotes Perl para mais informações.
- scrollkeeper-dir-exists (erro) Um diretório scrollkeeper foi localizado no pacote. scrollkeeper não deve ser executado até pós-{instalação,atualização,remoção}.
- info-dir-file-present (erro) O arquivo de diretório info /usr/share/info/dir estava presente no pacote. Esse arquivo não deve estar presente.
- gnome-mime-file (erro) O arquivo é um arquivo MIME autogerado do GNOME e não deveria estar presente no pacote.

### Diversos

- insecure-rpath (erro) Um RPATH (para um executável) está fora de /usr/lib. Um RPATH para uma localização insegura é um risco de segurança em potencial. Veja FS#14049 para uma discussão sobre isso.

### PKGBUILDs

Essas são tags relacionadas aos PKGBUILDs. Algumas dessas podem também se aplicar a pacotes binários.

- variable-not-array (aviso) A variável deve ser um vetor de bash em vez de uma string. Essas são as variáveis que devem ser escritas em vetores: arch, license, depends, makedepends, optdepends, provides, conflicts, replaces, backup, source, noextract, md5sums
- backups-preceding-slashes (erro) O arquivo mencionado no vetor backup inicia com uma barra ('/').
- package-name-in-uppercase (erro) Não deve haver letras maiúsculas em nomes de pacotes.
- specific-host-type-used (aviso) Em vez de usar um tipo de host específico (como i686 ou x86_64) use a variável genérica $CARCH variable.
- extra-var-begins-without-underscore (aviso) A variável não é uma da variáveis padrões definidas no manual do PKGBUILD e, mesmo assim, não inicia com sublinhado.
- file-referred-in-startdir (erro) Um arquivo foi referenciado em $startdir fora de $startdir/pkg e $startdir/src.
- missing-md5sums (erro) MD5sums correspondentes aos arquivos fonte estão faltando. Esses podem ser adicionados ao PKGBUILD usando `updpkgsums` (do pacman-contrib).
- not-enough-md5sums (erro) Há mais arquivos fontes do que MD5sums fornecidos no PKGBUILD.
- too-many-md5sums (erro) Há mais MD5sums do que arquivos fontes no PKGBUILD.
- improper-md5sum (erro) Um MD5sum impróprio foi localizado. MD5sums são de 32 caracteres de tamanho.
- specific-sourceforge-mirror (aviso) O PKGBUILD usa um espelho específico de servidor do sourceforge. https://downloads.sourceforge.net deve ser usado.
- using-dl-sourceforge (aviso) O domínio obsoleto http://dl.sourceforge.net está sendo usado no vetor fonte. https://downloads.sourceforge.net deve ser usado.
- missing-contributor (aviso) A tag contributor está faltando.
- missing-maintainer (aviso) A tag maintainer está faltando.
- missing-url (erro) O pacote não tem uma página web de upstream definida. Use a variável `url` para isso.
- pkgname-in-description (aviso) A descrição não deve conter o nome do pacote.
- recommend-use-pkgdir (informacional) $startdir/pkg está obsoleto, use $pkgdir.
- recommend-use-srcdir (informacional) $startdir/src está obsoleto, use $srcdir.

### Não lançadas

Não há novas tags na versão de desenvolvimento.

## Fazendo um módulo de namcap

Esta seção documenta as partes internas do namcap e especifica como criar um novo módulo namcap.

O programa principal do namcap, o namcap.py, toma como parâmetros o nome de arquivo de um pacote ou um PKGBUILD e faz um objeto pkginfo, o qual ele passa para uma lista de regras definidas em `__tarball__` e `__pkgbuild__`.

- __tarball__ define as regras que processam os pacotes binários.
- __pkgbuild__ define as regras que processam os PKGBUILDs

Uma vez que seu módulo esteja finalizado, lembre-se de adicioná-lo para o vetor apropriado (__tarball__ ou __pkgbuild__) definido em Namcap/__init__.py

Um exemplo de módulo de namcap é assim:

    namcap/url.py

      import pacman

      class package:
      	def short_name(self):
    		return "url"
    	def long_name(self):
    		return "Verifies url is included in a PKGBUILD"
    	def prereq(self):
    		return ""
    	def analyze(self, pkginfo, tar):
    		ret = [[],[],[]]
    		if not hasattr(pkginfo, 'url'):
    			ret[0].append(("missing-url", ()))
    		return ret
    	def type(self):
    		return "pkgbuild"

Em sua maioria, o código é autoexplicatório. A seguir segue a lista de métodos que cada módulo do namcap deve ter:

- short_name(self) Retorna uma string contendo um nome curto do módulo. Geralmente, isso é o mesmo que o nome base do arquivo do módulo.
- long_name(self) Retorna uma string contendo uma descrição concisa do módulo. Essa descrição é usada ao listar todas as regras usando `namcap -r list`.
- prereq(self) Retorna uma string contendo os pré-requisitos necessários para o módulo funcionar corretamente. Geralmente "" para módulos processando PKGBUILDs e "tar" por módulos processando arquivos de pacote. "extract" deve ser especificado se o conteúdo do pacote deve ser extraído para um diretório temporário antes de processamento adicional.
- analyze(self, pkginfo, tar) Deve retornar uma lista que inclua, por sua vez, três listas: de tags de erro, tags de aviso e tags de informações, respectivamente. Cada membro dessas listas de tags deve ser uma tupla consistindo de dois componentes: a forma curta e hifenizada da tag com os especificadores de formato apropriado (%s, etc). A primeira palavra desta string deve ser o nome da tag. A forma legível por humanos desta tag deve ser coloca no arquivo de tags. O formato do arquivo de tags é descrito abaixo; e os parâmetros que devem substituir os tokens especificadores de formato na saída final.
- type(self) "pkgbuild" para um módulos processando PKGBUILDs, "tarball" para um módulo processando um arquivo de pacote binário.

O arquivo de tags consiste de linhas especificando a forma legível por humanos das tags hifenizadas usadas no código do namcap. Uma linha começando com um '#' é tratada como um comentário. Do contrário, o formato do arquivo é:

     machine-parseable-tag %s :: This is machine parseable tag %s

Note que uma dupla de caracteres de dois pontos (::) é usada para separar a tag hifenizada da descrição legível por humanos.

## Relatórios do namcap

namcap-reports é um relatório gerado automaticamente obtido após executar o namcap nas árvores dos repositórios core e extra.

Como ele funciona:

- O namcap é executado em toda árvore do ABS para criar `namcap.log`.
- Os pacotes nos repositórios core e extra são colocados em arquivos com nomes core e extra, respectivamente (usando `pacman -Slq`).
- `namcap-report.py` leva o código e prepara o relatório e feeds RSS, que é então copiado para o servidor web.

Categories:

- Package management (Português)
- Package development (Português)