Gentooに初めてApacheをインストールしました。他のOS(この場合はMicroknoppix)からGentooにルートを変更してApacheを起動しようとすると、/etc/init.d/apache2 start
エラーが発生しますWARNING: apache2 is already starting
。止めようとすると捕まえそうですERROR: apache2 stopped by something else
。 GentooでApacheを実行すると、chrootなしでうまく動作します。
Gentoo自体でApacheを実行し、chrootを完全にスキップすることもできますが、私は疑問に思います。なぜこれが起こるのですか?修正できますか?
以前は誰かと話をしたが、その人は次のようになると思った。
- 複数のプログラムが同じpidファイルを使用しようとしたときに発生する問題 または
- Gentooがchrootを処理する方法に問題があります。
しかし、私はこれらのトピックを一貫して議論するのに十分な2つのことを知りません。
編集:Gentooでchrootに使用したコマンドは次のとおりです。Gentooマニュアルのインストール手順:
sudo mount --bind /etc/resolv.conf /mnt/gentoo/etc/resolv.conf sudo mount -t proc proc /mnt/gentoo/proc sudo mount --rbind /sys /mnt/gentoo/sys sudo mount --rbind /dev /mnt/gentoo/dev sudo chroot /mnt/gentoo /bin/bash env-update && source /etc/profile export PS1="(chroot) $PS1"
答え1
Gentoo initスクリプトは、Gentooがchrootで実行されていると正しく機能しません。 Gentooには、「net」が始まるまでApacheが起動しない相互依存関係があることがよくあります。そして起動時にこれらのどれも実行されないため(Gentooはホストシステムではないため)問題が発生することが多いです。最悪の場合、Gentooはネットワーク設定を台無しにしたり、ハードドライブがまだマウントされていないと考えてfsckを実行したりする可能性があります。
また、initスクリプトはrootとして実行する必要があります。ルートとして実行しないと、サービスの状態を追跡するファイルを変更する権限がありません。それでもrootとして実行されている場合、rootはchrootから簡単に抜け出すことができます。
chrootから起動するときは、initスクリプトをスキップしてカスタム設定ファイルをApacheに渡すことをお勧めします。それは次のとおりです。
chroot /path/to/gentoo /usr/sbin/apache2 -f /etc/apache2/httpd.conf
perp
runit
また、外部システムでこのコマンドを実行するか、同じ監督プログラムを使用することをお勧めしますs6
。バラよりhttp://skarnet.org/software/s6/why.html
chrootに/ procをマウントする必要があるかもしれません。 procがchrootにマウントされている場合、chrootの内容がホストシステムからプロセスのリストを取得する可能性があるため、これはうまくいかない可能性があります。私はあなたがApacheで提供されるスクリプトを信頼していないのでこれをやっていると思いますか?