Run `apt-get update` before installing other packages with Puppet

后端 未结 8 1155
青春惊慌失措
青春惊慌失措 2020-12-07 11:21

I\'m trying to create puppet module which automates installation of zend server CE, this is not important here, but steps are as following

  1. update /etc/apt/sour
相关标签:
8条回答
  • 2020-12-07 11:43

    Adding this snippet of voodoo worked for us:

      Apt::Pin <| |> -> Package <| |>
      Apt::Source <| |> -> Package <| |>
    

    This forced an update. YMMV.

    0 讨论(0)
  • 2020-12-07 11:45

    In Puppet 3 this can be done by realizing virtual resources using resource collectors

    # so you don't have to fully qualify paths to binaries
    Exec { path => ['/usr/bin'] }    
    
    # virtual resource
    @exec { 'sudo apt-get update':
       tag => foo_update
    }
    
    # realize resource. filter by arbitrary "foo_update"
    # tag and relate it to all Package resources
    Exec <| tag == foo_update |> -> Package <| |>
    
    0 讨论(0)
  • 2020-12-07 11:50

    You need to specify the dependency relationships. The easiest/cleanest approach is to use the require parameter which is available for all resource types.

    package { "zend-server-ce-php-5.2":
      ensure  => latest,
      require  => Exec['apt-get update'],
    }
    

    etc..

    0 讨论(0)
  • 2020-12-07 11:52

    I tried previous variant but it doesn't work for me on Ubuntu 10.04

    Finaly I prepared the following script, that runs update everytime the repository is older than one week:

    exec { 'apt-get update':
        command => "/usr/bin/apt-get update",
        onlyif => "/bin/bash -c 'exit $(( $(( $(date +%s) - $(stat -c %Y /var/lib/apt/lists/$( ls /var/lib/apt/lists/ -tr1|tail -1 )) )) <= 604800 ))'"
    }
    

    Hope it helps.

    0 讨论(0)
  • 2020-12-07 11:57

    I prefer to put apt-upgrade into a separate stage running before the main stage, so I don't have to hard-wire any dependencies. Check here: http://docs.puppetlabs.com/puppet/2.7/reference/lang_run_stages.html.

    A simple example would look like below. It implies you have a separate class for doing the actual apt-update:

    stage { "init": before  => Stage["main"] }
    
    class {"apt-update": 
      stage => init, 
      apt_mirror => $apt_mirror 
    }
    

    Check my sample LAMPP-box on github to see how the pieces fit together: https://github.com/joerx/vagrant-lampp

    Note: be careful with apt-upgrade, as some base boxes break by things like kernel upgrades.

    0 讨论(0)
  • 2020-12-07 11:59

    You should really be using the apt module to create sources and add keys: https://forge.puppet.com/puppetlabs/apt

    If you're using hiera:

    apt::sources:
      'artifactory-pro-debs':
        location: 'http://repos.zend.com/zend-server/deb'
        release: 'server
        repos: 'non-free'
        key:
          source: 'http://repos.zend.com/zend.key'
    
    0 讨论(0)
提交回复
热议问题