2008-09-25 3 views
6

Apache 서버는 기본이 아닌 (루트가 아닌) 일부 계정에서 실행됩니다.Apache 및 mod_python에서 Subversion 실행

svn: Can't open file '/root/.subversion/servers': Permission denied 

동시에 내부 전복 체크 아웃 명령이 파이썬 스크립트를 실행 :이 차례로 파괴 체크 아웃 명령을 실행하는 파이썬 스크립트를 실행하려고 할 때, 'svn의 체크 아웃'은 다음과 같은 오류 메시지와 함께 실패 같은 사용자 계정에서 명령 줄에서 완벽하게 잘 진행됩니다.

Apache 서버 2.2.6 (mod_python 3.2.8 포함)은 Fedora Core 6 시스템에서 실행됩니다.

아무도 도와 줄 수 있습니까? 고마워.

답변

0

아파치 사용자 (아파치 서비스가 실행중인 사용자)에게 해당 파일에 대한 r + w 권한을 부여해보십시오.

5

아파치 프로세스가 실행되는 환경이 약간 이상한 것 같습니다. 어떤 이유로 든 svn은 필요한 사용자 구성 파일이/root에 있다고 생각하는 것 같습니다. 당신은 너무처럼 SVN 사용하는 설정 디렉토리 명령 행에 지정하여 파일의 루트 버전을 사용하는 것을 방지 할 수 있습니다

svn --config-dir /home/myuser/.subversion checkout http://example.com/path 

당신의 enviornment를 고정하지 않지만, 적어도 당신은 당신의 스크립트가 할 수 올바르게 실행하십시오 ...

+0

더글러스 (Douglas)는 많은 관심을 받았고, 이와 같은 문제를 신속하게 해결했습니다. –

+0

'svn --config-dir/etc/subversion'을 사용하여 사이트 전체 구성을 지정할 수 있습니다 –

0

실마리가 없습니까?

아마 SELinux와 관련이 있습니다. audit.log 파일에 SELinux가 Apache 액세스를 거부 함을 나타내면 /var/log/audit/audit.log를 확인하고 SELinux 구성을 적절하게 조정하십시오.

0

Permission Denied 오류는 스크립트가 루트 자격 증명을 사용하여 실행 중임을 나타내며 루트의 홈 디렉토리에서 파일을 찾았 기 때문에 발생합니다.

id > /tmp/id 

을 그래서 당신은 그 결과가 UID/GID와 EUID/EGID이 무엇인지 확인하기 위해 검사 할 수있는 :

난 당신이하는 일에 훅 스크립트를 변경하는 것이 좋습니다. 아마도 사용자라고 생각하는 사용자로 실제로 실행되지는 않을 것입니다.

내 첫 번째 추측은 Troels와 마찬가지로 SELinux이기도하지만, Apache를 통한 스크립트가 수동 테스트와 정확히 동일한 사용자/그룹으로 실행되고 있는지 확실히 알면 내 추측입니다.

0

질문에 답변 해 주신 모든 분들께 감사드립니다. 어쨌든, 나는 그 미스터리를 풀 었다고 생각합니다.

SELinux가 컴퓨터에서 완전히 비활성화되어 있으므로 문제는 'svn co'에서 실행중인 사용자 계정의 config_dir을 찾을 수 없습니다.

아파치/mod_python은 아파치가 실행되고있는 사용자 계정의 쉘 환경에서 읽지 않습니다. 그러므로 examle을 위해 아파치 이 어떤 실제 사용자 (nobody가 아닌)에서 실행 중일 때 mod_python이 $ HOME을 보지 않습니다.

이제 'svn co'에 params를 읽을 구성 디렉토리를 가리키는 플래그 -config-dir이 있습니다. 기본적으로 $ HOME/.subversion입니다. 즉, 사용자 계정 홈 디렉토리에 해당합니다. 분명히 $ HOME이 없으면 mod_python은 루트 홈 디렉토리 (/ root)로 이동하여 함께 시도합니다.저기서 파괴 된 내용 - 분명히 은 비참하게 실패합니다. 그것을 단지 - 때문에적인 SetEnv는 쉘 환경과는 아무 상관이없는 문제를 해결하지 않는 /etc/httpd/conf/httpd.conf 파일에

적인 SetEnv HOME/홈/품질 보증

퍼팅

세트는 mod_python을 그

실행 후 req.get_options()와 함께 읽을 수있는 관련 변수 'svn의 공동 --config-DIR/가정/...'확실히 제공 - 세트는 환경을

마찬가지로 PythonOption 관련 아파치가 runni를위한 workaround mod_python 내에서하지만, 명령 줄에서 스크립트를 실행하려고하는 사람들에게 방해가됩니다.

따라서 제안 된 (및 작동중인) 솔루션은 시작하기 전에 HOME 환경 변수를 설정하는 것입니다.

/etc/init.d/httpd 스크립트의 예를 들어

QAHOME=/home/qa 
    ... 
    HOME=$QAHOME LANG=$HTTPD_LANG daemon $httpd $OPTIONS 
0

무슨 일이 일어나고 그것이 그것의 설정 파일을 찾을 수 있어야한다는 생각 때문에 아파치는, 루트의 환경 변수 시작되고있다/뿌리/. 그렇지 않다. 당신은 sudo는은 apache2ctl 시작을 할 경우 , 그것은 sudo는 $ HOME =/루트/난 그냥이 문제를 자신에 대한 해결책을 발견

(비록 mod_perl이 있지만, 같은 일에)

에서 $ 홈 변수를 가져옵니다 무슨 일 것은

실행이 명령은 (는 아파치 1 제거하면 2)

sudo /etc/init.d/apache2 stop 
sudo /etc/init.d/apache2 start 

/etc/init.d/apache2 아파치 시작는 아파치에서 실행되어야하는 모든 적절한 환경 변수를 설정한다.

관련 문제