init.d/apache2ファイルがありません

init.d/apache2ファイルがありません

ApacheとTomcatをアンインストールした後にApache 2を再インストールしようとすると、init.d/apache2サーバーを起動/停止するファイルがありません。

新しいインストールが実際に動作するかどうかはわかりません。apt-get purge apache2最初からすべてを削除していません!

サーバーが正しく起動/インストールされているかどうかをテストするためにファイルを入手する方法init.d/apache2(ファイルとディレクトリを手動で削除しました)?

答え1

(私はフォローしています。ガレブの答え、関連情報のほとんどはすでにコメントに記載されています。コメントを見るよりも要約してみると便利です。 )

したがって、Calebの投稿に記載されているように、問題はAlexanderが削除(または変更した可能性があります)して復元しようとしている/etc/init.d/apache2ことです。ファイルはにありますapache-2.2-common。しかし、apt-get install --reinstall apache2.2-commonファイルを回復できないようです。 Debian ポリシーによると、その理由は、設定ファイルが変更された場合、ユーザーが明示的に要求しない限り、システムがそのファイルに触れないためです。バラより設定ファイルの処理に関するDebianポリシー:セクション10.7.3。引用:

プロファイル処理は、次の動作に従う必要があります。

  1. パッケージのアップグレード中にローカルの変更を保存する必要があります。

  2. 構成ファイルは、パッケージが削除されたときに保持され、パッケージが削除されたときにのみ削除されます。

パッケージの追加と削除は次のように処理されます。包装袋。 dpkgは、ここでファイルが変更された場合とファイルが完全に削除された場合の2つの状況を区別します。 inで始まる--force-thingsオプションセクションのセクションを参照してください。dpkg マニュアルページ。 (Debian Skizeのマニュアルページをオンラインで見つけることができず、Ubuntuのdpkg 1.16ページにリンクします。アドバイスがあればコメントしてください。)

だからこの2つの状況について

  1. 削除されたconfファイルを再インストールで置き換えるには、 --force-confmissこのオプションをdpkgに渡す必要があります。

  2. 変更されたが削除されていないconfファイルをインストール時にデフォルトのバージョンに置き換えるには、dpkgに--force-confnewオプションを渡す必要があります--force-confask。マニュアルページで説明されているように、--force-confnew自体は、デフォルトが元のインストールされているデフォルトよりも新しい場合(つまり、アップグレード時に)、変更されたconfファイルのみをデフォルトに置き換えます。

aptを介してdpkgを呼び出す場合は、これらのオプションをaptに渡す必要があります。上記の2つのケースについては、次のように実行されます。

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall apache2.2-common

apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-confask" install --reinstall apache2.2-common

どの文書も見つかりませんDpkg::Options。 Googleで見つけました。ご存知の方はコメントありがとうございます。

コメント:

  1. 設定ファイルをめちゃくちゃにして戻りたい状況に遭遇した場合は、 --force-confmissすべてのローカル修正をデフォルトのperに変更するのではなく、名前を変更して使用する方が安全な方法だと思います--force-confnew。これは通常そうではありません。あなたが欲しいものが必要です。

  2. 構成ファイルを使用している場合は、必ずバージョン管理下に置いてください。これにより、構成ファイルを混同する問題を解決できます。使用してお勧めします 水銀。この場合(いずれの場合も可能です:-)、この場合、分散バージョン管理を使用する方が、次のような集中型バージョン管理システムを使用するよりも優れています。 破壊。このための良いプログラムは マネージャーをお待ちください

  3. apache2.2-commonまた、squeezeでaptを使用しても完全に削除されないことに言及する価値があり、ここで混乱を招く可能性があります。エラーが発生しやすい 621720、これは削除ケースを正確にカバーしていますapache2.2-common。バグレポートによると、使用する必要があります。

    apt-get remove apache2.2-common -o pkgProblemResolver::FixByInstall=0`
    

    (直接確認しました)。

  4. バラより構成ファイルについて知っておくべきこと: dpkg で管理される構成ファイル dpkgの構成ファイルの処理に関する議論ラファエル・ヘルゾグ、dpkg開発者の一人。彼はこれが--force-confaskSqueezeの新機能だと述べた。彼はまた言及した

    dpkg --status apache2.2-common
    

    構成ファイルのリストとその他の情報を提供します。そうでなければ

    dpkg-query --showformat='${Conffiles}\n' --show apache2.2-common
    

    あなたがその情報が欲しいなら。

私の関連質問に答えてくれたDavid KalnischkiesとRaphaël Hertzogに感謝します。 (そして私が間違ったメーリングリストに投稿したことを私に知らせました。)私はDebianのドキュメントがこの分野で改善されるかもしれないと思います。具体的には、dpkg のマニュアルページでは追加の使用例を提供できます。私はここにいる人(明らかに助けたい)がDebianのようなフリーソフトウェアプロジェクトにドキュメントパッチを寄与するのに時間を費やすことをお勧めします。価値あることですが、これを行う人は十分ではありません。

答え2

apt-get install --reinstall apache2パッケージが存在し、現在のファイルを上書きしてもファイルがすでに存在すると思っていても、apt-getを使用してシステムを強制的に再インストールしてみてください。

システムからアイテムを手動で削除することで、パッケージ管理者は間違いなくどこで何をすべきかを混乱させます。通常、手動操作の影響を理解していない限り、提供されているツールを使い続けたいと思います。

追加の注意事項として、通常/etc/init.dのファイルを直接台無しにする必要はありません。これらのスクリプトを実行できるツールがあります。たとえば、Apacheを再起動するには、次のように実行できますservice apache2 restart

コメントで見つかった情報に基づいて編集

初期化スクリプトはサブパッケージの一部です。最初にパッケージをインストールすると依存関係がインストールされますが、パッケージを削除すると依存関係ではないパッケージのみが削除されます。手動で削除したinitスクリプトは、デフォルトのパッケージ名apache2.2-commonの依存関係でしたapache2。 apache2を削除しても、--purgeinitスクリプトは他のパッケージの一部であるため、何の影響もありません。もう一度実行してみてくださいapt-get install --reinstall apache2.2-common

編集2

明らかにDebianは変です。テストシステムで問題を再現しましたが、パッケージマネージャを使用してinitスクリプトを復元することはできません。オンラインで同じ問題を抱えている他の人をいくつか見つけましたが、解決策は次のようにパッケージを手動でダウンロードし、解凍してファイルを抽出するようです。

cd /tmp
aptitude download apache2.2-common
dpkg --extract apache2.2-common_*.deb apache2.2-common
sudo cp apache2.2-common/etc/init.d/apache2 /etc/init.d

編集3

以下のコメントでFaheem Mithaの研究と議論のおかげで、この質問に対する完全な答えを見つけました。詳細については、Faheemの答えを読んでください。。ユーモアの価値のために、崖のメモは次のとおりです。

簡単に言えば、initスクリプトはconfファイルとして扱われ、apt-getはユーザーが何らかの方法で変更したconfファイルに触れたり、削除した後に再インストールしたときに削除されたファイルを復元するのにとても親切です。 「当然ではない」と言う前に、必ずやるべき体操を見てください。私は引用する:

dpkgのリストを要求して聞いた後、追加操作を行った後、次のことが機能しました。これに注意してください。変更されたすべての構成ファイルをパッケージのバージョンに置き換えます。apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-confask" install --reinstall apache2.2-common。なぜ私はあなたにこのようなことを言わなければならないのかわかりません。これはあなたが最初に考えなければならないでしょう。 :-) – 破力ミサ

答え3

Debian システムでも同じ問題が発生しました。 Apacheとnginxに影響を与えます。

ここにある解決策のどれも私には役に立ちませんでした。クリーンアップ、再インストール、ダウンロード、および手動インストールはDpkg :: Optionsが機能しませんでした。

依存関係の1つがサービスを開始および停止するために必要な構成ファイルを生成することがわかりました。すべての依存関係を削除して再インストールするだけです。

ここで解決策を見つけました。http://dancingpenguinsoflight.com/2009/02/how-to-completely-reset-an-apache-instance-in-ubuntu/

APACHE_PKGS=`sudo dpkg --get-selections | grep apache | cut -f 1`
# Make sure things are sane:
echo $APACHE_PKGS
# Example output: apache2 apache2-mpm-prefork apache2-utils apache2.2-common \
# libapache2-mod-php5 libapache2-mod-python libapache2-svn
# Likely if you have a Python application:
# libapache2-mod-python libapache2-mod-python-doc libapache2-mod-wsgi
# Or if you roll with the PHP: 
# libapache2-mod-php5
sudo apt-get remove --purge $APACHE_PKGS

関連情報