
aptモジュールを導入すると、Puppetを使用してAPT (Advanced Package Tool)のソース、キー、その他の構成オプションを管理できます。
APTとは、Debian、Ubuntu、およびその他いくつかのオペレーティングシステムで利用可能なパッケージマネージャです。aptモジュールは、APTのパッケージ管理を自動化するのに役立つ一連のクラス、定義型、およびfactsを提供します。
注意: このモジュールが実行中のDebian/Ubuntu (もしくは派生OS)のバージョンを正しく自動検出するためには、'lsb-release'パッケージがインストールされていることを確認する必要があります。これをプロビジョニングレイヤの一部にするか(多くのDebianシステムまたは派生OSシステムを実行する場合はこちらを推奨)、この依存関係を自動的に取得する機能をもつFacter 2.2.0以降をインストールしておくことを強くお勧めします。
preferencesファイルとpreferences.dディレクトリsources.listファイルとsources.list.dディレクトリ注意: このモジュールにはpurgeパラメータがあります。このパラメータをtrueに設定すると、 ノードの sources.list(.d)およびpreferences(.d)の構成のうち、Puppetを通して宣言されていないものがすべて破棄されます。このパラメータのデフォルトはfalseです。
デフォルトのパラメータでaptモジュールを使用するには、aptクラスを宣言します。
include apt
注意: メインのaptクラスは、このモジュールに含まれるその他すべてのクラス、型、定義型によって要求されます。このモジュールを使用する際は、このクラスを必ず宣言する必要があります。
警告: 短いキーIDを使用すると、衝突攻撃が有効になる可能性があり、セキュリティに深刻な問題が生じます。常に、完全なフィンガープリントを使用してGPGキーを識別することを推奨します。このモジュールでは短いキーの使用が許可されていますが、それを使用した場合、セキュリティ警告が発行されます。
apt::keyの定義型を宣言するには、次のように記述します。
apt::key { 'puppetlabs':
id => '6F6B15509CF8E59E6E469F327F438280EF8D349F',
server => 'pgp.mit.edu',
options => 'http-proxy="http://proxyuser:[email protected]:3128"',
}
class { 'apt::backports':
pin => 500,
}
デフォルトでは、apt::backportsクラスはバックポート用のピンファイルをドロップし、優先度200にピン止めします。これは、通常のデフォルト値である500よりも低いため、ensure => latestに設定されているパッケージは、明示的な許可がない限り、バックポートからアップグレードされることはありません。
pinパラメータを使用して優先度を500に上げると、通常のポリシーが有効になり、Aptは最新のバージョンをインストールするか、最新のバージョンにアップグレードします。これはつまり、packageリソースのensure属性を明示的にinstalled/presentもしくは特定のバージョンに設定していない限り、あるパッケージがバックポートから利用できる場合は、そのパッケージと依存関係がバックポートから取得されるということです。
デフォルトでは、aptクラスをインクルードした後の最初のPuppet実行時と、notify => Exec['apt_update']が発生するたびに(別の言い方をすれば、構成ファイルが更新されるか、関連するその他の変更が行われるたびに)、Puppetはapt-get updateを実行します。update['frequency']を'always'に設定すると、Puppet実行時に毎回更新が行われます。update['frequency']は'daily'や'weekly'に設定することも可能です。
class { 'apt':
update => {
frequency => 'daily',
},
}
Exec['apt_update']がトリガされると、Noticeメッセージが生成されます。デフォルトのagentロギングレベルはnoticeであるため、このレポジトリの更新は、ログおよびagentレポートに記録されます。Foremanなど、一部のツールでは、このような更新通知が重要な変更としてレポートされます。これらの更新がレポートに記録されないようにするには、Exec['apt_update']のloglevelメタパラメータをagentロギングレベルよりも高い値に設定します。
class { 'apt':
update => {
frequency => 'daily',
loglevel => 'debug',
},
}
apt::pin { 'karmic': priority => 700 }
apt::pin { 'karmic-updates': priority => 700 }
apt::pin { 'karmic-security': priority => 700 }
ディストリビューションのプロパティを使用して、より複雑なピンを指定することもできます。
apt::pin { 'stable':
priority => -10,
originator => 'Debian',
release_version => '3.0',
component => 'main',
label => 'Debian'
}
複数のパッケージをピン止めするには、配列またはスペース区切りの文字列としてその情報をpackagesパラメータに渡します。
apt::ppa { 'ppa:drizzle-developers/ppa': }
/etc/apt/sources.list.d/へのAptソースの追加apt::source { 'debian_unstable':
comment => 'This is the iWeb Debian unstable mirror',
location => 'http://debian.mirror.iweb.ca/debian/',
release => 'unstable',
repos => 'main contrib non-free',
pin => '-10',
key => {
'id' => 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553',
'server' => 'subkeys.pgp.net',
},
include => {
'src' => true,
'deb' => true,
},
}
Puppet Aptレポジトリをソースとして使用するには、次のように記述します。
apt::source { 'puppetlabs':
location => 'http://apt.puppetlabs.com',
repos => 'main',
key => {
'id' => '6F6B15509CF8E59E6E469F327F438280EF8D349F',
'server' => 'pgp.mit.edu',
},
}
ソースをリソースとして直接指定するかわりに、単純にaptクラスをインクルードして、値をHieraから自動的に取得するように構成できます。
apt::sources:
'debian_unstable':
comment: 'This is the iWeb Debian unstable mirror'
location: 'http://debian.mirror.iweb.ca/debian/'
release: 'unstable'
repos: 'main contrib non-free'
pin: '-10'
key:
id: 'A1BD8E9D78F7FE5C3E65D8AF8B48AD6246925553'
server: 'subkeys.pgp.net'
include:
src: true
deb: true
'puppetlabs':
location: 'http://apt.puppetlabs.com'
repos: 'main'
key:
id: '6F6B15509CF8E59E6E469F327F438280EF8D349F'
server: 'pgp.mit.edu'
sources.listファイルの置き換えデフォルトの/etc/apt/sources.listを置き換える例を以下に示します。以下のコードと合わせて、purgeパラメータを必ず使用してください。使用しない場合、Apt実行時にソース重複の警告が出ます。
apt::source { "archive.ubuntu.com-${lsbdistcodename}":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
}
apt::source { "archive.ubuntu.com-${lsbdistcodename}-security":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
release => "${lsbdistcodename}-security"
}
apt::source { "archive.ubuntu.com-${lsbdistcodename}-updates":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
release => "${lsbdistcodename}-updates"
}
apt::source { "archive.ubuntu.com-${lsbdistcodename}-backports":
location => 'http://archive.ubuntu.com/ubuntu',
key => '630239CC130E1A7FD81A27B140976EAF437D05B5',
repos => 'main universe multiverse restricted',
release => "${lsbdistcodename}-backports"
}
/etc/apt/auth.confで管理するAPTバージョン1.5以降、認証が必要なAPTソースやプロキシについて、ユーザ名やパスワードなどのログイン設定を/etc/apt/auth.confファイルに定義できるようになりました。この方法は、source.list内にログイン情報を直接記述するよりも推奨されます。直接記述した場合、通常、あらゆるユーザから読み取り可能になるためです。
`/etc/apt/auth.confファイルのフォーマットは、(ftpやcurlによって使用される) netrcに従い、ファイルパーミッションが制限されています。詳しくは、こちらを参照してください。
オプションのapt::auth_conf_entriesパラメータを使用して、ログイン設定を含むハッシュの配列を指定します。このハッシュに含めることができるのは、machine、login、およびpasswordキーのみです。
class { 'apt':
auth_conf_entries => [
{
'machine' => 'apt-proxy.example.net',
'login' => 'proxylogin',
'password' => 'proxypassword',
},
{
'machine' => 'apt.example.com/ubuntu',
'login' => 'reader',
'password' => 'supersecret',
},
],
}
apt_updates: upgradeで入手可能な更新がある、インストール済みパッケージの数。
apt_dist_updates: dist-upgradeで入手可能な更新がある、インストール済みパッケージの数。
apt_security_updates: upgradeで入手可能なセキュリティ更新がある、インストール済みパッケージの数。
apt_security_dist_updates: dist-upgradeで入手可能なセキュリティ更新がある、インストール済みパッケージの数。
apt_package_updates: upgradeで入手可能な更新がある、すべてのインストール済みパッケージの名前。Facter 2.0以降では、このデータのフォーマットは配列で、それ以前のバージョンでは、コンマ区切りの文字列です。
apt_package_dist_updates: dist-upgradeで入手可能な更新がある、すべてのインストール済みパッケージの名前。Facter 2.0以降では、このデータのフォーマットは配列で、それ以前のバージョンでは、コンマ区切りの文字列です。