/etc/
のファイルを元のインストール形式に戻したい。ファイルがインストールされてから編集しました。この構成ファイルを元に戻すにはどうすればよいですか? Aptは十分に賢いnot編集された設定ファイルを上書きするので、どうすればwantそうするのだろうか?
議論のために、ファイル/etc/foo.conf
をパッケージfoo
から元に戻したいとしましょう。
答え ライアントムソンによって提供された正しい方法に向かっていた。それでも、それは仕事をすることができません(詳細な理由は以下に与えられます)。
正しい(最も簡単な)方法は、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はまた、最終的なアクションを決定するために使用されます。
それが役立つことを願っています。
既に問題が発生している場合は、構成ファイルの公式バージョンを取得するコマンドラインの方法を次に示します。まず、パッケージファイルをダウンロードし(以下のように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
など、パッケージからのものではない構成ファイルには適用されないことに注意してください。これらを失った場合、あなたは自分でしています。 (とにかく、ほとんどは非常にシステムに依存しています。)
将来的には、 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
を使用します。
packages.ubuntu.com からパッケージを手動でダウンロードし、ファイルを抽出してバージョンを置き換えることができます。
または次のことができます:
Sudo rm /etc/foo.conf # just for good measure
Sudo apt-get --purge --reinstall install foo
2番目の方がずっと野bruに感じます。複数のファイルを使用する場合、他の設定も消去される可能性があります。 1つ目はより多くのクリックと労力ですが、より安全なようです。
2つ目は、ファイルを削除するだけで--reinstallで置き換えることができる場合があります。もしそうなら、それはより安全でしょう。
パッケージによっては、/usr/share/doc/foo/examples
にデフォルトの設定ファイルがあります。
Synapticを使用し(Ubuntu Tweakの方が便利ですが、synapticの方が簡単です)、[パッケージを完全に削除する]を選択します。これにより、すべての構成ファイルが削除されます(これらのファイルをバックアップすることをお勧めします!)。
その後、再インストールします。できました。
Ubuntu Tweakを使用すると、クリーンアップ、リロール、および構成バックアップのためのさらに多くのオプションを利用できます。たぶん、あなたはそれを見てみたい。それはソフトウェアセンターにあります。
p.s .: Synapticは「パージ」オプションも使用します(上記のOliで述べたように...)-より快適な処理のためにGUIを使用します。
数年前から漠然と覚えていた答えをようやく見つけました。
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ファイルを自分で見つける必要がなくなります。
明らかに、これらのオプションは危険であり、誤用されると重要なシステム構成ファイルを吹き飛ばす可能性があります。