web-dev-qa-db-ja.com

Repoからのdebianの無人インストールでapt-getが新しい構成ファイルを受け入れるようにする方法

私のリポジトリにあるパッケージの無人インストール用のスクリプトを書いています。これは、Debianのマークされた設定ファイルの1つを含むソフトウェアパッケージです。新しい構成ファイルを受け入れるために、apt-get/aptitudeに渡すことができるオプションはありますか?

基本的に、apt/aptitude相当のdpkg --force-confnewが必要です

apt-getがYでインストールされているときに出される次の質問に答える必要があります


設定ファイル ``/opt/application/conf/XXX.conf` '

==> File on system created by you or by a script.
==> File also in package provided by package maintainer.

What would you like to do about it ?  Your options are:
Y or I  : install the package maintainer's version
N or O  : keep your currently-installed version
  D     : show the differences between the versions
  Z     : background this process to examine the 

The default action is to keep your current version.

追加情報:

また、コマンドを実行するためにSudoパスワードをパイプで渡します

echo "mysudopass"|Sudo -S apt-get mypackage

これは、インストールが対話式構成フェーズにあるときに、インストールのエラーにフラグを立てています。

私はUbuntu 10.04を使用しています
aptバージョン:apt 0.7.25.3

dpkgを使用できない理由:これらのDebianはRepoからインストールする必要があり、自分のマシンにローカルDebianがありません

24
Raman

このようにdpkgパラメータをapt-getに渡すことができます

apt-get -y -o Dpkg::Options::=--force-confdef -o Dpkg::Options::=--force-confnew install pkgname1 pkgname2 ...

--force-confdefを使用すると、古い構成ファイルがまだ存在する場合、それらは上書きされません。おそらくあなたはそれを使わないでしょう、私は他の人のためにそれを文書化しているだけです。

ユーザーの認証オプションを無効にするか、特定のエントリにSudoタグを追加した場合、NOPASSWDはパスワードを要求しません。例えば.

someuser ALL = NOPASSWD: /usr/bin/apt-get
24
forcefsck

以下を試すことができます:

export DEBIAN_FRONTEND=noninteractive
apt-get -q -y install whatever-2

ただし、これには空のデフォルトパスワードなどの影響があることに注意してください(puppet、chef、fabricなどのデプロイメント/構成ツールが必要な場合があります...)。

パスワードなしのSudo呼び出しを許可する方法については sudoers(5) を参照してください。

8
sr_

forcefsck の代わりに、これをAPT設定に追加することをお勧めします。これにより、これらの書き込みにくいオプションを常に追加する必要がなくなります。また、このこれらの設定がある場合、無人アップグレードに役立ちます。

作成/etc/apt/apt.conf.d/71debconfファイルに次の内容を含めます。

Dpkg::Options {
  "--force-confnew";
};

注(Geoffから):この変更はグローバルな変更になります。システム上に無人アップグレードを取得したいが、手動で構成した他のパッケージがある場合、これは適切なソリューションではありません。

3
Te Ri

他の回答に加えて、環境を設定する必要がある場合もあります CF_FORCE_CONFFNEW = 1

例えば。 debianストレッチのopensshは、openssh-server/openssh-7.4p1/debian/openssh-server.postinstでucf(debconfではなく)を使用して、構成ファイルについて尋ねます。 (dgetを使用してopenssh-server.postinstを確認できます http://security.debian.org/debian-security/pool/updates/main/o/openssh/openssh_7.4p1 -10 + deb9u4.dsc

debconf preseeding の寛大なユーザーであることに加えて、このページのすべてのトリックを使用する必要がありました。

ただし、何かを逃したかどうかを知りたいので、export DEBIAN_FRONTEND=noninteractiveの直前で停止しました(重要な場合があります)。私たちのユースケースは、操作を開始するオペレーターです。アップグレードは非対話型であることが予想されますが、何かがうまくいかずダイアログが表示された場合、オペレーターは立ち会います。あなたの状況は異なる場合があります。

しかし、export DEBIAN_FRONTEND=noninteractiveはあなたのことわざの大ハンマーです。

注意してください:-o Dpkg::Options::=--force-confnewUCF_FORCE_CONFFNEW=1を設定すると、インストールされているパッケージのall構成ファイルが上流の構成ファイルに戻ります。したがって、たとえばopenssh-serverの場合、/etc/ssh/sshd_configは出荷時の設定にリセットされます。そして、例えばPermitRootLogin=yesは削除されます。しかし、もちろんそれを使用しないので、大丈夫です! ;-)

2
Peter V. Mørch