Listar os comandos executados pelo pacote rpm

1

Estou tentando dividir um pacote rpm em uma lista de comandos (não apenas o conteúdo do arquivo). Eu gostaria de saber o que tudo e em que ordem é executado quando você executa

yum install --nogpgcheck mypackage.rpm

Eu obtenho o conteúdo do arquivo executando:

rpm -q -filesbypkg -p mypackage.rpm
    
por amphibient 25.02.2014 / 02:49

2 respostas

2

Você pode executar rpm -q --scripts packagename para ver o que é executado quando um pacote é instalado ou desinstalado. Se você está olhando para um pacote que ainda não instalou, pode executar rpm -q --scripts -p /path/to/package.rpm .

    
por 25.02.2014 / 03:48
1

Eu não vi um método para fazer isso diretamente com apenas interruptores YUM, o que me surpreende. O único método que eu poderia determinar como você poderia fazer algo assim era utilizar strace da seguinte forma:

$ strace -s 2000 -o yum.log yum install --nogpgcheck mypackage.rpm

Esteja avisado, esta saída é bem sucinta. Veja um exemplo de como a saída será:

execve("/usr/bin/yum", ["yum", "list", "installed"], [/* 92 vars */]) = 0
brk(0)                                  = 0x2107000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f65a3019000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=186018, ...}) = 0
mmap(NULL, 186018, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f65a2feb000
close(3)                                = 0
open("/lib64/libpython2.7.so.1.0", O_RDONLY|O_CLOEXEC) = 3
...
...
stat("/usr/bin/rpm", {st_mode=S_IFREG|0755, st_size=27256, ...}) = 0
open("/usr/bin/rpm.so", O_RDONLY)       = -1 ENOENT (No such file or directory)
open("/usr/bin/rpmmodule.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/bin/rpm.py", O_RDONLY)       = -1 ENOENT (No such file or directory)
open("/usr/bin/rpm.pyc", O_RDONLY)      = -1 ENOENT (No such file or directory)
...
...
stat("/usr/lib64/python2.7/site-packages/rpm", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("/usr/lib64/python2.7/site-packages/rpm/__init__.py", {st_mode=S_IFREG|0644, st_size=2018, ...}) = 0
stat("/usr/lib64/python2.7/site-packages/rpm/__init__", 0x7fff8e4d15a0) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.7/site-packages/rpm/__init__.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.7/site-packages/rpm/__init__module.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib64/python2.7/site-packages/rpm/__init__.py", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=2018, ...}) = 0
open("/usr/lib64/python2.7/site-packages/rpm/__init__.pyc", O_RDONLY) = 5
fstat(5, {st_mode=S_IFREG|0644, st_size=2804, ...}) = 0

Comandos RPM?

Se você mergulhar nessa saída, notará que o yum localiza os arquivos:

  • /usr/bin/rpm
  • /usr/lib64/python2.7/site-packages/rpm/__init__.py

A presença dessa segunda linha provavelmente vai matar sua tentativa de fazer o que você quer. Acredito que o que está acontecendo aqui é que o YUM faz uso de uma biblioteca wrapper escrita em Python que o integra aos comandos RPM, mas é mais provável que seja uma biblioteca para funções RPM, e assim você não encontrará uma direta para uma lista de Comandos RPM saindo do YUM enquanto executa várias tarefas.

    
por 25.02.2014 / 03:42