簡単に言えば、私は/var
それを破棄し、バックアップから復元しました。ただし、バックアップには正しい権限が設定されておらず、すべてが/var
ルート所有です。これはいくつかのプログラムを不幸にするようです。
/var/cache/man
提案されているようにfopenが失敗する問題を修正しました。ここ/var/lib/apache2
apache2は起動しません(〜に所有権を与えてwww-data
)。ただし、すべての問題を解決する唯一の方法は、問題が発生したときに権限を手動で変更するようです。プログラムに問題が発生するのを待つ必要があり、一部のファイルに対する権限の問題を特定してから、/var
自分で設定します。
この問題を解決する簡単な方法はありますか?aptitude reinstall x
(一般)に記載されているすべてのパッケージを再インストールしてみましたが、dpkg -S /var
機能しません。
答え1
少なくともドキュメントでは実際に動作するapt-get --reinstall install package
必要があります。
➜ ~ ls -l /usr/share/lintian/checks/version-substvars.desc
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜ ~ sudo chmod +x /usr/share/lintian/checks/version-substvars.desc
➜ ~ ls -l /usr/share/lintian/checks/version-substvars.desc
-rwxr-xr-x 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
➜ ~ sudo apt-get --reinstall install lintian
(Reading database ... 291736 files and directories currently installed.)
Preparing to unpack .../lintian_2.5.27_all.deb ...
Unpacking lintian (2.5.27) over (2.5.27) ...
Processing triggers for man-db (2.6.7.1-1) ...
Setting up lintian (2.5.27) ...
➜ ~ ls -l /usr/share/lintian/checks/version-substvars.desc
-rw-r--r-- 1 root root 2441 Jun 22 14:19 /usr/share/lintian/checks/version-substvars.desc
/var
ディレクトリにファイルを含むすべてのパッケージをインポートできない可能性があるため、次のことをお勧めします。みんな探してみてください:
➜ ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | wc -l
460
私の場合、パッケージを含む460のパスを占めました。同じパッケージが複数のパスを持つことができることを考慮すると、実際には少なくなります。一部の後処理により、約122の経路があることがわかります。
➜ ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sort | uniq | wc -l
122
もちろん、これは同じパスを持つ複数のパッケージを計算しますwamerican, aspell-en, ispanish, wspanish, aspell-es, myspell-es
。たとえば、次のように変更するのは簡単です。
➜ ~ find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g' | sort | uniq | wc -l
107
/var
したがって、あらゆる種類のファイルまたはサブディレクトリを含む107のパッケージがあります。以下を使用して再インストールできます。
sudo apt-get --reinstall install $(find /var -exec dpkg -S {} + 2> /dev/null | grep -v "no path found" | cut -d : -f 1 | sed 's/, /\n/g')
これにより権限が変更されます。
今、別のオプションがあります。正しいインストールを見つけ、インストールファイルの権限をコピーすることです。
chmod --recursive --reference good/var bad/var
答え2
私はこのブログでこの問題が非常にうまく処理されているのを見ました。
https://matoski.com/article/debian-restore-var-ownership-permissions/(Archive.org)
要約:
方法 1: 仮想マシン
方法 2: Debian パッケージで
方法3:適性を使用して再インストール