web-dev-qa-db-ja.com

Puppetで他のパッケージをインストールする前に、「apt-get update」を実行します

Zend Server CEのインストールを自動化するパペットモジュールを作成しようとしていますが、これはここでは重要ではありませんが、手順は次のとおりです

  1. /etc/apt/source.listを更新します
  2. wgetを介してリポジトリキーをダウンロードする
  3. apt-get updateを実行します
  4. apt-get install zend-server-ce-5.2を実行します

私は持っています init.ppファイル

class zendserverce {

# https://github.com/puppetlabs/puppetlabs-stdlib
file_line { 'debian_package':
    path => '/etc/apt/sources.list',
    line => 'deb http://repos.zend.com/zend-server/deb server non-free'
}

exec { "wget http://repos.zend.com/zend.key -O- |apt-key add -":
    path => ["/usr/bin", "/usr/sbin"]
}

exec { "apt-get update":
    command => "/usr/bin/apt-get update",
    onlyif  => "/bin/sh -c '[ ! -f /var/cache/apt/pkgcache.bin ] || /usr/bin/find /etc/apt/* -cnewer /var/cache/apt/pkgcache.bin | /bin/grep . > /dev/null'",
}

package { "zend-server-ce-php-5.2":
    ensure => "latest"
}

}

Puppetは必要なコマンドを異なる順序で実行しているようです。希望する順序で走るように彼に伝える方法はありますか?

そのようなスニペットの出力は

  [0;36mnotice: /Stage[main]/Mc/Package[mc]/ensure: ensure changed 'purged' to 'latest'[0m
  [1;35merr: /Stage[main]/Zendserverce/Package[zend-server-ce-php-5.2]/ensure: change from purged to latest failed: Could not update: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install zend-server-ce-php-5.2' returned 100: Reading package lists...
  Building dependency tree...
  Reading state information...
  E: Couldn't find package zend-server-ce-php-5.2 at /tmp/vagrant-puppet/modules 0/zendserverce/manifests/init.pp:28[0m
  [0;36mnotice: /Stage[main]/Zendserverce/Exec[wget http://repos.zend.com/zend.key -O- |apt-key add -]/returns: executed successfully[0m
  [0;36mnotice: /Stage[main]/Zendserverce/File_line[debian_package]/ensure: created[0m
  [0;36mnotice: Finished catalog run in 6.75 seconds[0m

つまり、パッケージzend-server-ce-php-5.2が見つかりませんでした

誰でも間違っていることを教えてもらえますか?

50
Jaro

依存関係を指定する必要があります。最も簡単でクリーンなアプローチは、すべてのリソースタイプで使用可能なrequireパラメーターを使用することです。

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

等..

50
czervik

Puppet 2.6.0以降、新しい機能「関係構文」は 導入 でした。

Puppet 2.6.0以降の例は次のようになります。

exec { "apt-update":
    command => "/usr/bin/apt-get update"
}

Exec["apt-update"] -> Package <| |>

パッケージコマンドが実行されるたびに、依存関係(この場合は「apt-update」)が最初にトリガーされます。さらに長いチェーンを定義することもできます。

100
DrDol

以前の亜種を試しましたが、Ubuntu 10.04では動作しません

最後に、リポジトリが1週間以上経過するたびに更新を実行する次のスクリプトを準備しました。

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 ))'"
}

それが役に立てば幸い。

13
Pavel Železný

私はapt-upgradeをメインステージの前に実行されている別のステージに配置することを好むため、依存関係を固定する必要はありません。ここを確認してください: http://docs.puppetlabs.com/puppet/2.7/reference/lang_run_stages.html

簡単な例は次のようになります。実際のapt-updateを実行するための別のクラスがあることを意味します。

stage { "init": before  => Stage["main"] }

class {"apt-update": 
  stage => init, 
  apt_mirror => $apt_mirror 
}

GithubのサンプルLAMPP-boxをチェックして、ピースがどのように収まるかを確認してください: https://github.com/joerx/vagrant-lampp

注:いくつかのベースボックスがカーネルのアップグレードなどによって破損するため、apt-upgradeに注意してください。

12
joerx

Puppet 3では、これは リソースコレクターを使用して仮想リソースを実現する

# 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 <| |>
4
Brandon Cook

ブードゥー教のこのスニペットを追加すると、私たちのために働いた:

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

これにより更新が強制されました。 YMMV。

3
TimP

更新が必要なパッケージAPTリストにはClass['apt::update']

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

カスタムAPTソースを使用している場合は、正しい順序を確認してください:

Apt::Source['my_source'] 
-> Class['apt::update']
1
Tombart

Aptモジュールを使用してソースを作成し、キーを追加する必要があります。 https://forge.puppet.com/puppetlabs/apt

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
user1681190