
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以降では、このデータのフォーマットは配列で、それ以前のバージョンでは、コンマ区切りの文字列です。
その他すべてのリファレンスマニュアルについては、REFERENCE.mdを参照してください。
このモジュールは、実行ステージに分割するようには設計されていません。
サポート対象のオペレーティングシステムの全リストについては、metadata.jsonを参照してください。
新しいソースまたはPPAを追加し、同一のPuppet実行において、その新しいソースまたはPPAからパッケージをインストールするには、packageリソースがApt::SourceまたはApt::Ppaに従属し、かつClass['apt::update']に従属する必要があります。[コレクタ](https://docs.puppetlabs.com/puppet/latest/reference/lang_collectors.html)を追加することによって、すべてのパッケージがapt::update`の後に来るように制御することもできますが、その場合、循環依存が発生したり、仮想リソースと関係したりすることがあります。以下のコマンドを実行する前に、すべてのパッケージのプロバイダがaptに設定されていることを確認してください。
Class['apt::update'] -> Package <| provider == 'apt' |>
Puppet ForgeのPuppet Labsモジュールはオープンプロジェクトで、良い状態に保つためには、コミュニティの貢献が必要不可欠です。Puppetが役に立つはずでありながら、私たちがアクセスできないプラットフォームやハードウェア、ソフトウェア、デプロイ構成は無数にあります。私たちの目標は、できる限り簡単に変更に貢献し、みなさまの環境で私たちのモジュールが機能できるようにすることにあります。最高の状態を維持できるようにするために、コントリビュータが従う必要のあるいくつかのガイドラインが存在します。
詳細については、モジュール貢献ガイドを参照してください。
すでにご協力いただいている方のリストについては、コントリビュータのリストをご覧ください。
apt_update_last_success: 直近で成功したapt-get update実行のエポックタイムによる日付(/var/lib/apt/periodic/update-success-stampのmtimeに基づく)。
apt_reboot_required: 更新がインストールされた後に再起動が必要かどうかを決定します。