Como eu determino com quais opções de configuração um pacote rpm é construído?

4

Esta é a minha primeira pergunta e eu ainda sou bem nova, então, por favor, me perdoe se eu perdi alguma coisa, ou se esta é uma solução óbvia.

Estou usando o CentOS 5.8 (sim, sei que é antigo) e tentando testar algumas configurações de lula

Do wiki do Squid :

NP: Squid must be built with the --enable-http-violations configure option before building.

Eu fiz algumas pesquisas para tentar determinar onde eu posso encontrar quais opções de configuração foram especificadas na compilação do pacote, mas, além de ler toda a documentação do CentOS, não consigo localizar onde posso encontrar essas opções de configuração .

Eu sei que essa pergunta pode ser semelhante a um , mas neste caso o pacote específico do squid pode ter sido customizado, e não tenho certeza se tenho acesso à fonte sem passar por alguns arcos.

Existe uma maneira de listar os flags de configuração com o yum ou rpm sem extrair o arquivo de especificações?

    
por bendobot 06.06.2014 / 21:46

2 respostas

1

A questão é sobre o uso de metadados RPM para recuperar informações sobre opções de tempo de compilação específicas do pacote. As informações que você está procurando não estão presentes nos metadados do RPM. Ou você precisa ter mais do que apenas um RPM (idealmente um log de compilação de pacotes ou alguns dos arquivos do diretório de compilação), ou você precisa usar uma maneira específica de pacote.

Eu não sei a localização da informação de compilação para o CentOS, pois o Fedora seria:

link

Para o squid, o caminho específico do pacote é bastante fácil:

# squid -v
Squid Cache: Version 3.4.5
configure options:  '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=LDAP_group,time_quota,session,unix_group,wbinfo_group' '--enable-storeid-rewrite-helpers=file' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro  -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=%{_PKG_CONFIG_PATH}:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

(a saída acima foi feita usando uma versão de rawhide do Fedora do squid)

Para outros pacotes, pode ou não haver um comando para mostrar a configuração do tempo de construção. Para fazer o download, extrair e examinar o SRPM para adivinhar os recursos compilados do arquivo .spec , veja o final da outra resposta.

    
por 08.06.2014 / 17:45
5

A coisa mais próxima que você pode fazer é consultar a variável %{OPTFLAGS} para ter uma idéia aproximada dos sinalizadores do compilador que foram usados para um determinado RPM.

$ rpm -q --queryformat="%{NAME}: %{OPTFLAGS}\n" <package>

Para obter as opções do compilador, no entanto, sua melhor opção seria baixar o arquivo RPM de origem (SRPM) e consultar o arquivo .spec que foi usado para construí-lo. Esta é a única fonte verdadeira onde você encontrará as opções reais do compilador que foram usadas para construir um dado conjunto de RPMs.

1. Consultoria% {OPTFLAGS}

$ rpm -q --queryformat="%{NAME}: %{OPTFLAGS}\n" firefox
firefox: -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -grecord-gcc-switches  -m64 -mtune=generic

Como funciona

Você pode consultar o RPM e especificar o formato dos resultados que deseja que o comando de consulta retorne. Nesse caso, estamos retornando o --queryformat="%{NAME}: %{OPTFLAGS}\n , que retorna o nome do pacote junto com o valor para os pacotes %{OPTFLAGS} .

Você pode obter uma lista de possíveis tags de consulta assim:

$ rpm --querytags

Exemplo

$ rpm --querytags | grep OPTFLAGS
OPTFLAGS

A tag %{OPTFLAGS} é definida da seguinte forma :

While the optflags entry doesn't play a part in determining the build or install platform, it does play a role in multi-platform package building. The optflags entry is used to define a standard set of options that can be used during the build process, specifically during compilation.

If RPM was running on an Intel 80386-compatible architecture, the optflags value would be set to -O2 -m486 -fno-strength-reduce. If, however, RPM was running on a Sun SPARC-based system, optflags would be set to -O2.

This entry sets the RPM_OPT_FLAGS environment variable, which can be used in the %prep, %build, and %install scripts.

2. Consultoria SRPM

Para fazer isso, você pode baixar um determinado SRPM da seguinte forma:

$ sudo yumdownloader --source <package name>

Você pode então extrair o arquivo .spec :

$ mkdir somedir; cd somedir
$ rpm2cpio ../firefox-29.0.1-1.fc19.src.rpm | cpio -ivd

O arquivo .spec pode ser consultado:

$ ls -l | grep spec
-rw-r--r--. 1 saml saml     31913 Jun  7 08:03 firefox.spec

OBSERVAÇÃO: Até mesmo consultar o arquivo .spec provavelmente será inconclusivo ao revelar as opções de compilador usadas, já que a macro de especificação de% RPM%build pode ser bastante enigmática no que eles estão realmente fazendo, Portanto, mesmo essa abordagem provavelmente não mostrará as opções do compilador.

Referências

por 07.06.2014 / 01:38