A instalação do Jenkins com o Puppet não consegue importar a chave GPG

3

Estou tentando instalar o Jenkins com o Puppet usando os manifestos abaixo.

    # init.pp
    class jenkins {
      include jenkins::install, jenkins::service
    }

    # service.pp
    class jenkins::service {
      service { "jenkins":
        ensure     => running,
        hasstatus  => true,
        hasrestart => true,
        enable     => true,
        require    => Class["jenkins::install"],
      }
    }

    # install.pp
    class jenkins::install {
      include jenkins::install::repo
      include jenkins::install::java

      package { "jenkins":
        ensure  => present,
        require => Class['jenkins::install::repo','jenkins::install::java'],
      }
    }

    # install/repo.pp
    class jenkins::install::repo {
      file { "/etc/pki/rpm-gpg/jenkins-ci.org.key":
        owner  => root,
        group  => root,
        mode   => 0600,
        source => "puppet:///jenkins/jenkins-ci.org.key"
      }

      yumrepo { "jenkins":
        baseurl  => "http://pkg.jenkins-ci.org/redhat",
        descr    => "Jenkins",
        enabled  => 1,
        gpgcheck => 1,
        gpgkey   => "file:///etc/pki/rpm-gpg/jenkins-ci.org.key",
        require  => File["/etc/pki/rpm-gpg/jenkins-ci.org.key"]
      }
    }

    # install/java.pp
    class jenkins::install::java {
      package { "java-1.6.0-openjdk":
        ensure => present,
      }
    }

O repositório é adicionado e a chave é gravada no sistema de arquivos. No entanto, recebo o seguinte erro.

    err: /Stage[main]/Jenkins::Install/Package[jenkins]/ensure: change from absent to present failed: Execution of '/usr/bin/yum -d 0 -e 0 -y install jenkins' returned 1: warning: rpmts_HdrFromFdno: Header V4 DSA signature: NOKEY, key ID d50582e6
    Traceback (most recent call last):
      File "/usr/bin/yum", line 29, in ?
        yummain.user_main(sys.argv[1:], exit_code=True)
      File "/usr/share/yum-cli/yummain.py", line 309, in user_main
        errcode = main(args)
      File "/usr/share/yum-cli/yummain.py", line 261, in main
        return_code = base.doTransaction()
      File "/usr/share/yum-cli/cli.py", line 410, in doTransaction
        if self.gpgsigcheck(downloadpkgs) != 0:
      File "/usr/share/yum-cli/cli.py", line 510, in gpgsigcheck
        self.getKeyForPackage(po, lambda x, y, z: self.userconfirm())
      File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 3519, in getKeyForPackage
        keys = self._retrievePublicKey(keyurl, repo)
      File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 3484, in _retrievePublicKey
        keys_info = misc.getgpgkeyinfo(rawkey, multiple=True)
      File "/usr/lib/python2.4/site-packages/yum/misc.py", line 375, in getgpgkeyinfo
        raise ValueError(str(e))
    ValueError: unknown pgp packet type 17 at 706

Isso sugere que a chave não está sendo importada com sucesso e rpm -qa gpg-pubkey não mostra a chave. Se eu manualmente yum install jenkins sem a chave importada, recebo o mesmo erro. Com a chave importada, a instalação manual é bem-sucedida.

Estou instalando com sucesso outros repositórios yum e chaves independentes (basicamente o install/repo.pp manifest como seu próprio módulo), como o EPEL, mas como este repo é apenas para Jenkins, eu queria incluí-lo no meu módulo Jenkins. / p>

Há algo de errado com meus manifestos? Ou algum outro problema?

UPDATE :

O manifesto a seguir resulta na instalação dos repositórios jenkins e epel, rpm -qa gpg-pub* mostra a chave epel mas não a chave jenkins, e o git é instalado, mas não o jenkins.

    class jenkins { 
      yumrepo {"jenkins":
        baseurl  => "http://pkg.jenkins-ci.org/redhat",
        descr    => "Jenkins",
        enabled  => 1,
        gpgcheck => 1,
        gpgkey   => "http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key",
      }
      package {"jenkins":
        ensure  => latest,
        require => Yumrepo["jenkins"]
      }
    }

    class git { 
      yumrepo {"epel":
        baseurl  => "http://mirror.aarnet.edu.au/pub/epel/5/i386",
        descr    => "Extra Packages for Enterprise Linux (EPEL)",
        enabled  => 1,
        gpgcheck => 1,
        gpgkey   => "http://keys.gnupg.net:11371/pks/lookup?search=0x217521F6&op=get",
      }
      package {"git":
        ensure  => latest,
        require => Yumrepo["epel"]
      }
    }

    include jenkins
    include git

UPDATE :

Deveria ter incluído versões de software:

  • CentOS 5.7
  • ruby 1.8.5 (2006-08-25)
  • Puppet v2.7.9
  • yum-3.2.22
  • rpm-4.4.2.3
por michaeltwofish 23.04.2012 / 10:20

4 respostas

1

Parece que o rpm tem problemas ao importar a chave Jenkins porque ela contém uma imagem JPEG.

link

o tipo de pacote 17 é uma imagem:

link

> gpg --list-keys D50582E6
pub   1024D/D50582E6 2009-02-01
uid                  Kohsuke Kawaguchi 
uid                  Kohsuke Kawaguchi 
uid                  [jpeg image of size 3704]
sub   2048g/10AF40FE 2009-02-01

Parece que o RPM não sabe o que fazer com ele.

> sudo rpm --import jenkins-ci.org.key 
[sudo] password for me: 
error: jenkins-ci.org.key: import read failed(-1).

Pesquisando por quaisquer problemas conhecidos para o RPM não resulta em nada óbvio, mas talvez isso lhe dê uma direção.

    
por 02.05.2012 / 19:19
1

Eu testei seu manifesto simplificado em:

  • CentOS 6.2
  • ruby 1.8.7 (2011-06-30 patchlevel 352)
  • Puppet v2.7.9
  • yum-3.2.29-22.el6
  • rpm-4.8.0-19.el6

Ambos os repos são adicionados com sucesso.

A partir da mensagem de erro, parece que a mensagem de erro vem do yum, não do fantoche ou de qualquer outra coisa.

Você pode fornecer uma descrição semelhante do seu ambiente? Provavelmente o mais importante é a versão do yum.

Tente atualizá-lo para pelo menos 3.2.29 (mais recente estável 3.2.x). O registro de alterações é aqui , referencia algumas correções significativas relacionadas a chaves GPG.

    
por 03.05.2012 / 15:44
0

Você provavelmente precisará adicionar o comando rpm --import <PUBKEY> no seu manifesto.

Referência do tipo de execução: link

Talvez você possa tentar adicionar assumeyes=1 ao arquivo repo, juntamente com a opção gpgkey, isso deve adicionar a chave automaticamente.

    
por 27.04.2012 / 09:02
0

Isso é super depois do fato, mas eis o que acabei fazendo:

if ($::operatingsystemmajrelease == '5'){
  exec { 'EL5 Jenkins Key Workaround':
    command  => 'rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key',
    unless   => "rpm -qa --nodigest --nosignature --qf '%{VERSION}-%{RELEASE} %{SUMMARY}\n' | grep d50582e6",
    path     => ['/bin', '/usr/bin'],
  }
}

Eu adicionei um PR para adicionar essa solução alternativa ao módulo oficial:

link

Repartição mais longa aqui:

link

    
por 15.07.2015 / 14:05