web-dev-qa-db-ja.com

構成ファイルを編集した後、元のインストールバージョンに戻すにはどうすればよいですか?

/etc/のファイルを元のインストール形式に戻したい。ファイルがインストールされてから編集しました。この構成ファイルを元に戻すにはどうすればよいですか? Aptは十分に賢いnot編集された設定ファイルを上書きするので、どうすればwantそうするのだろうか?

議論のために、ファイル/etc/foo.confをパッケージfooから元に戻したいとしましょう。

22
Ryan Thompson

答え ライアントムソンによって提供された正しい方法に向かっていた。それでも、それは仕事をすることができません(詳細な理由は以下に与えられます)。

正しい(最も簡単な)方法は、aptを指定した-oを使用してdpkgオプションを渡し、変更された構成ファイルを保持するか元の構成ファイルを保持するかをdpkgに強制することです。コマンドは次のようになります-

Sudo apt-get --reinstall -o Dpkg::Options::="--force-confask" install foo

これはあなたに次のような質問をします

Configuration file '/etc/foo/foo.conf'
 ==> Modified (by you or by a script) since installation.
     Version in package is the same as at last installation.
   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     : start a Shell to examine the situation
 The default action is to keep your current version.
*** foo.conf (Y/I/N/O/D/Z) [default=N] ? 

インストールするには、YまたはIを押す必要がありますパッケージメンテナーの元の設定ファイル。 Dキーを押して変更内容を確認したり、Zオプションを使用してルートシェルを起動して修正することもできます。

注:置換後、変更されたファイルはat /etc/foo/foo.conf.dpkg-oldとして見つかります


他のオプションが機能しないのはなぜですか?

Dpkgの他のオプションはうまく機能しないためです。パッケージの設定ファイルを扱うオプションは次のとおりです

  • --force-confmiss
  • --force-confnew
  • --force-confold
  • --force-confdef

--force-confmissは、パッケージのバージョンが変更されないと機能しません。マンページから

Conffileが変更され、パッケージ内のバージョンが変更された場合、-force-confdefも指定されていない限り、プロンプトなしで常に新しいバージョンをインストールしてください指定されている場合、デフォルトのアクションが優先されます。

--force-confmissは欠落しているconffilesで動作します。バージョンが変更されなかった場合も失敗します。引用 man-page

confmiss:conffileが欠落しており、パッケージ内のバージョンが変更された場合、プロンプトなしで欠落しているconffileを常にインストールします。これは、ファイルに加えられた変更(削除)を保持しないことを意味するため、危険です。

--force-confoldは、バージョンが変更された場合にのみ、変更されたバージョンを保持します。同じパッケージでも、失敗します。引用 man-page

confold:conffileが変更され、パッケージ内のバージョンが変更された場合、-force-confdefを除き、プロンプトなしで常に古いバージョンを保持しますも指定されます。この場合、デフォルトのアクションが優先されます。

--force-confdefもデフォルトのアクションが古いファイルを保持するために失敗します(--force-confaskで示されたメッセージから示されます。保持されることを意味する(Y/I/N/O/D/Z) [default=N]行があります。上記を参照)。また、--force-confnewが指定されていてもバージョンが変わらない場合、それも機能しません。引用 man-page

confdef:conffileが変更され、パッケージ内のバージョンが変更された場合、プロンプトなしで常にデフォルトのアクションを選択します。デフォルトのアクションがない場合、-force-confnewまたは-forceでない限り、ユーザーへの問い合わせを停止します-confoldも指定されます。この場合、それを使用して最終アクションを決定します。

バージョンが同じでも明示的に質問するため、--force-confaskのみが機能します。引用 man-page

confask:conffileが変更されている場合、パッケージのバージョンが変更されていなくても(dpkg 1.15.8以降)、常にパッケージ内のバージョンに置き換えるように提案します。 -force-confmiss-force-confnewのいずれか、-force-confold、または-force-confdefはまた、最終的なアクションを決定するために使用されます。

それが役立つことを願っています。

13
Anwar

既に問題が発生している場合は、構成ファイルの公式バージョンを取得するコマンドラインの方法を次に示します。まず、パッケージファイルをダウンロードし(以下のようにapt-get --download-onlyを使用するか、 packages.ubuntu.com のパッケージページから)、その内容を一時的な場所に抽出します。その後、ファイルを/etcにコピーできます。元のアクセス許可を必ず確認してください(/etcのほとんどのファイルはルートおよびモード644(つまり、ワード読み取り可能およびルート書き込み可能)が所有していますが、それぞれの例外は重要な理由で存在します)。

Sudo apt-get --download-only --reinstall install foo
mkdir /tmp/foo
dpkg-deb -x /var/cache/apt/archives/foo_VERSION_Arch.deb /tmp/foo

これは、/etc/fstab/etc/passwdなど、パッケージからのものではない構成ファイルには適用されないことに注意してください。これらを失った場合、あなたは自分でしています。 (とにかく、ほとんどは非常にシステムに依存しています。)


将来的には、 etckeeperInstall etckeeper 。パッケージをインストールし、Sudo etckeeper initを実行します。これにより、/etc内のすべてのファイルのバージョン管理が設定されます。 etckeeperを管理するために他に何もする必要はありません。古いファイルの参照など、バージョン管理操作を行う場合にのみ操作する必要があります。ファイルは、aptの各実行の前後に毎晩自動的にコミットされます(これは構成可能です)。

デフォルトでは、Ubuntuでは、etckeeperは Bazaar を使用します。 Darcs、Git、またはMercuryを使用する場合は、/etc/etckeeper/etckeeper.confを実行する前にetckeeper initの設定を変更してください。

Bazaarを使用して、/etc/foo.confを最後にコミットされたバージョンに戻すには:

cd /etc
Sudo bzr revert foo.conf

さらに過去に戻りたい場合は、Sudo bzr log foo.confを使用してファイルの履歴を表示し、Sudo bzr revert -r 42 foo.confを元に戻すリビジョンであると判断した場合はrevno: 42を使用します。

12
Gilles

packages.ubuntu.com からパッケージを手動でダウンロードし、ファイルを抽出してバージョンを置き換えることができます。

または次のことができます:

Sudo rm /etc/foo.conf # just for good measure
Sudo apt-get --purge --reinstall install foo

2番目の方がずっと野bruに感じます。複数のファイルを使用する場合、他の設定も消去される可能性があります。 1つ目はより多くのクリックと労力ですが、より安全なようです。

2つ目は、ファイルを削除するだけで--reinstallで置き換えることができる場合があります。もしそうなら、それはより安全でしょう。

7
Oli

パッケージによっては、/usr/share/doc/foo/examplesにデフォルトの設定ファイルがあります。

1
misterben

Synapticを使用し(Ubuntu Tweakの方が便利ですが、synapticの方が簡単です)、[パッケージを完全に削除する]を選択します。これにより、すべての構成ファイルが削除されます(これらのファイルをバックアップすることをお勧めします!)。

その後、再インストールします。できました。

Ubuntu Tweakを使用すると、クリーンアップ、リロール、および構成バックアップのためのさらに多くのオプションを利用できます。たぶん、あなたはそれを見てみたい。それはソフトウェアセンターにあります。

p.s .: Synapticは「パージ」オプションも使用します(上記のOliで述べたように...)-より快適な処理のためにGUIを使用します。

0
piedro

数年前から漠然と覚えていた答えをようやく見つけました。

dpkg --force-confnew --force-confmiss -i PACKAGE.deb

「confnew」引数は、dpkgが変更された構成ファイルをパッケージ提供のものと強制的に置き換え、「confmiss」が削除された構成ファイルについても同様に行います。

this chatlog によると、これらのオプションはapt-getを介して次の方法でも使用できます。

apt-get -o DPkg::Options::="--force-confnew --force-confmiss" --reinstall install PACKAGE

これにより、debファイルを自分で見つける必要がなくなります。

明らかに、これらのオプションは危険であり、誤用されると重要なシステム構成ファイルを吹き飛ばす可能性があります。

0
Ryan Thompson