web-dev-qa-db-ja.com

Ubuntu 12でapt-getアップグレード中に変更された構成ファイルを自動化する方法

「knife cloudstack server create ...」を使用して新しいVMを構築したい。私のbootstrapテンプレートは、「apt-get update」と「apt-get -y upgrade」で始まります。

その後、アップグレードは次のように停止します。

10.190.113.11 Configuration file `/etc/nscd.conf'
10.190.113.11  ==> Modified (by you or by a script) since installation.
10.190.113.11  ==> Package distributor has shipped an updated version.
10.190.113.11    What would you like to do about it ?  Your options are:
10.190.113.11     Y or I  : install the package maintainer's version
10.190.113.11     N or O  : keep your currently-installed version
10.190.113.11       D     : show the differences between the versions
10.190.113.11       Z     : start a Shell to examine the situation
10.190.113.11  The default action is to keep your current version.
10.190.113.11 *** nscd.conf (Y/I/N/O/D/Z) [default=N] ?

したがって、実際には2つの問題があります。

まず、デフォルトでapt-getで何かを実行できますか?明らかに、答えを提供する方法はありません。

第二に、質問に対する正しい答えがどうあるべきかさえ知りません。置き換えられる構成ファイルはテンプレートからのものです。 「nscd」で何ができるかはまだ調べていません。 (おそらく「Y」が正解ですが、質問の時点で行われた調査は困難です。)

13
Mojo

プロンプトを表示しないように引数を渡すことができます。これは私にとってはうまくいきます。

apt-get update
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" upgrade
apt-get --yes --force-yes -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" dist-upgrade

--force-confold(私の選択)がこれらを作成します「変更された構成ファイルに対して何を行いますか」質問のデフォルトはNです(現在インストールされているバージョンを保持します)

--force-confold: do not modify the current configuration file, the new version is installed with a .dpkg-dist suffix. With this option alone, even configuration files that you have not modified are left untouched. You need to combine it with --force-confdef to let dpkg overwrite configuration files that you have not modified.
--force-confnew: always install the new version of the configuration file, the current version is kept in a file with the .dpkg-old suffix.
--force-confdef: ask dpkg to decide alone when it can and Prompt otherwise. This is the default behavior of dpkg and this option is mainly useful in combination with --force-confold.
--force-confmiss: ask dpkg to install the configuration file if it’s currently missing (for example because you have removed the file by mistake).

警告-一部の変更された構成ファイルは、更新されたパッケージバージョンとの互換性がないため、システムが破損する可能性があります。 自動化ソリューションに展開する前にテストしてください

15
Jossef Harush

インタラクティブな質問に絶対に答えたくない場合は、DEBIAN_FRONTENDフロントエンド変数をnoninteractiveに設定します。

これはDEBIAN_FRONTEND=noninteractive apt-get upgradeと同じくらい簡単です。

メッセージは表示されず、デフォルトが選択されます。ほとんどの場合、これは構成ファイルが変更されないことを意味し、構成ファイルが変更されていないすべての場所で*.dpkg-newのような名前のファイルが残されます。その後、手動で変更を解決するか、構成管理システムなどを使用してローカル構成をシステムにプッシュできます。

第二に、私は質問に対する正しい答えが何であるべきかさえ知りません

[〜#〜] d [〜#〜]キーを押すと、違いが表示され、これを調べることができます。そのファイルを手動で変更したことがないことが確実な場合は、[〜#〜] y [〜#〜]を選択して置き換えることはおそらく安全です(バックアップのアップグレードを確認しましたRIGHT !!)。 [〜#〜] n [〜#〜]を選択すると、パッケージに大きな変更がなく、通常は変更ログ/リリースでカバーされない限り、95%の確率で古いファイルが保持されますupgrade/dist-upgradeコマンドを実行する前に読んだメモ。

その後、テスト環境で最初にコマンドを試してください。物事がうまくいかないかどうかを確認します。本当に分からない場合は、差分を取得し、パッケージと研究のドキュメントを読んでください。

5
Zoredache