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 정책: 섹션 10.7.3. 인용하다:

프로필 처리는 다음 동작을 준수해야 합니다.

  1. 패키지 업그레이드 중에 로컬 변경 사항을 보존해야 합니다.

  2. 구성 파일은 패키지가 제거될 때 유지되어야 하며 패키지가 제거될 때만 삭제됩니다.

패키지 추가 및 제거는 다음에 의해 처리됩니다.포장 백. dpkg는 여기서 파일이 수정된 경우와 파일이 완전히 삭제된 경우라는 두 가지 상황을 구분합니다. in으로 시작하는 --force-things옵션 섹션의 섹션을 참조하세요 .dpkg 매뉴얼 페이지. (데비안 스퀴즈 매뉴얼 페이지를 온라인에서 찾을 수 없어서 Ubuntu의 dpkg 1.16 페이지로 링크합니다. 조언이 있으면 댓글을 달아주세요.)

그래서 이 두 가지 상황에 대해

  1. 삭제된 conf 파일을 재설치로 대체하려면 --force-confmiss이 옵션을 dpkg에 전달해야 합니다.

  2. 변경되었지만 삭제되지 않은 conf 파일을 설치 시 기본 버전으로 바꾸려면 dpkg에 및 --force-confnew옵션을 전달해야 합니다 --force-confask. 매뉴얼 페이지에서 설명하는 것처럼 --force-confnew 자체는 기본값이 원래 설치된 기본값보다 최신인 경우(즉, 업그레이드할 때) 수정된 conf 파일만 기본값으로 대체합니다.

apt를 통해 dpkg를 호출하는 경우 이러한 옵션을 apt에 전달해야 합니다. 위의 두 가지 경우에 대해서는 다음과 같이 수행됩니다.

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. 구글링해서 찾았어요. 아시는 분은 댓글 부탁드립니다.

논평:

  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에게 감사드립니다. (그리고 내가 잘못된 메일링 리스트에 게시했다는 사실을 알려주었습니다.) 나는 데비안 문서가 이 영역에서 개선될 수 있다고 생각합니다. 특히 dpkg 매뉴얼 페이지는 추가 사용 예제를 제공할 수 있습니다. 나는 여기 있는 사람들(분명히 도움을 주고 싶어하는)이 데비안과 같은 자유 소프트웨어 프로젝트에 문서 패치를 기여하는 데 시간을 할애하도록 권장합니다. 가치 있는 일이지만, 이를 수행하는 사람이 충분하지 않습니다.

답변2

apt-get install --reinstall apache2패키지가 존재하고 현재 파일을 덮어쓰더라도 파일이 이미 존재한다고 생각하더라도 apt-get을 사용하여 시스템을 강제로 다시 설치해 보십시오 .

시스템에서 항목을 수동으로 제거함으로써 패키지 관리자는 의심할 바 없이 어디서 무엇을 해야 하는지 혼란스러워할 것입니다. 일반적으로 수동 조작의 영향을 이해하지 않는 한 제공된 도구를 계속 사용하고 싶을 것입니다.

추가 참고 사항으로 일반적으로 /etc/init.d의 파일을 직접 망칠 필요는 없습니다. 이러한 스크립트를 실행할 수 있는 도구가 있습니다. 예를 들어, 아파치를 다시 시작하려면 다음을 실행할 수 있습니다 service apache2 restart.

댓글에서 찾은 정보를 바탕으로 편집됨

초기화 스크립트는 하위 패키지의 일부입니다. 패키지를 처음 설치하면 종속성이 설치되지만, 패키지를 제거하면 종속성이 아닌 패키지만 제거됩니다. 수동으로 제거한 init 스크립트는 apache2.2-common기본 패키지 이름의 종속성 이었습니다 apache2. apache2를 제거하더라도 --purgeinit 스크립트는 다른 패키지의 일부이므로 아무런 영향을 미치지 않습니다. 다시 실행해 보세요 apt-get install --reinstall apache2.2-common.

편집 2

분명히 데비안은 이상합니다. 테스트 시스템에서 문제를 재현했지만 패키지 관리자를 사용하여 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

데비안 시스템에서도 같은 문제가 발생했습니다. Apache와 nginx에 영향을 미칩니다.

여기에 있는 솔루션 중 어느 것도 나에게 도움이 되지 않았습니다. 정리, 재설치, 다운로드 및 수동 설치는 Dpkg::Options가 작동하지 않았습니다.

종속성 중 하나가 서비스를 시작하고 중지하는 데 필요한 구성 파일을 생성하는 것으로 나타났습니다. 모든 종속성을 제거하고 다시 설치하면 됩니다.

여기서 해결책을 찾았습니다.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

관련 정보