Namcap (Português)

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.