/etc
パッケージが提供するファイルを削除しましたpackageA
。そのファイルがどこにあり、どのパッケージがそれを提供しているかを知っている限り、そのファイルのみを再インストールする方法はありますか?
私のサーバーでUbuntu 12.04と14.04を実行しています。
答え1
まず、どのパッケージがファイルを提供しているかを確認できます。
dpkg -S /path/to/file
その後、パッケージの現在のバージョンをダウンロードできます。
apt-get download package-name
/var/log/apt/
何らかの理由で元々インストールされているパッケージのバージョンが必要な場合は、APTログインでそのバージョンを見つける必要があります/var/log/dpkg.log*
(まだ最新のバージョンではない場合)。バージョン番号または日付を確認したら、次のことができます。snapshot.debian.org(Debian) または発射台(Ubuntu)。
パッケージをダウンロードしたら、.deb
次のコマンドを使用して一時ディレクトリに解凍できます。
dpkg-deb -x package_name-1.42.deb
ファイルの内容だけを印刷したい場合は、次のものを使用できます。
dpkg-deb --fsys-tarfile package_name-1.42.deb | tar xO ./path/to/file
コンテンツを所定の場所にコピーできますが、一部のファイルには特定の権限が必要であることに注意してください。正しい権限でファイルを抽出するには、ルートとして抽出する必要があります。dpkg-deb -x
その後、次のようにファイルをコピーできます。
# as root
dpkg-deb -x package_name-1.42.deb
cp -p path/to/file /path/to/file
あるいは、tarballを抽出することもできます(ルートを取得するために使用する方法sudo
に置き換えます)。su
dpkg-deb --fsys-tarfile package_name-1.42.deb | sudo tar x -C / ./path/to/file
あるいは、パッケージ全体を再インストールすることもできます。ファイルがconffileの場合(つまり、アップグレード全体に保存する構成ファイルとしてマークされている場合)、変更または欠落しているファイルを復元するようにdpkgに指示する必要があります。他の構成ファイルに対する変更を保存しようとする可能性があるため、欠落している構成ファイルを処理する方が簡単です。したがって、ファイルが変更されたconfファイルで元の状態に戻したい場合は、最初にconfファイルが存在しないようにバージョン名を変更してください。その後実行
dpkg -i --force-confmiss package_name-1.42.deb
apt-get
ワンタイムダウンロードを使用してパッケージを再インストールできます。設定ファイルを復元するには、追加apt-get
オプションをに渡すように指定しますdpkg
。
apt-get --reinstall -o 'DPkg::options="--force-confmiss"' install package_name
将来この問題と他の問題を回避するには、以下をインストールします。マネージャーをお待ちください(apt-get install etckeeper
)で編集して、/etc/etckeeper/etckeeper.conf
お好みのサポートバージョン管理システムを選択してから実行しますetckeeper init
。の修正は/etc
バージョン管理に保存されます。etckeeper commit
構成ファイルを変更するときは、意味のあるログメッセージで実行してください。その後、修正を取り消すには、/etc
影響を受けたファイルの以前のバージョンを復元します。
答え2
短い答えは「はい」です。 / etcには主に構成ファイルが含まれているため、.debパッケージをダウンロードし、ファイルを抽出し、そのファイルを正しいディレクトリにコピーできる必要があります。
mkdir ~/temp
dpkg -x somepackage.deb ~/temp/
cp ~/temp/somefile /etc
元のファイルをデフォルトで正しく設定できるかどうかは別の質問です。