젠투에 처음으로 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를 처리하는 방식에 문제가 있습니다.
그러나 나는 이러한 주제를 일관되게 논의할 만큼 두 가지에 대해 충분히 알지 못합니다.
편집: 젠투로 chroot하는 데 사용한 명령은 다음과 같습니다.젠투 매뉴얼의 설치 지침:
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는 호스트 시스템이 아니기 때문에) 문제가 발생하는 경우가 많습니다. 최악의 경우 젠투는 네트워크 설정을 망칠 수도 있고 하드 드라이브가 아직 마운트되지 않았다고 생각하여 fsck를 실행할 수도 있습니다.
또한 init 스크립트는 루트로 실행되어야 합니다. 루트로 실행하지 않으면 서비스 상태를 추적하는 파일을 수정할 수 있는 권한이 없습니다. 여전히 루트로 실행 중인 경우 루트는 chroot를 쉽게 벗어날 수 있습니다.
chroot에서 시작할 때 init 스크립트를 건너뛰고 사용자 정의 구성 파일을 아파치에 전달하는 것이 좋습니다. 그것은 다음과 같습니다:
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의 내용이 호스트 시스템에서 프로세스 목록을 가져올 수 있으므로 이는 좋지 않을 수 있습니다. 나는 당신이 아파치에서 제공될 스크립트를 신뢰하지 않기 때문에 이것을 하고 있다고 가정하고 있습니까?