alpine linux google-cloud-logging 설치 오류

2020. 2. 16. 00:15Trouble Shooting

distutils.errors.CompileError: command 'gcc' failed with exit status 1


ERROR: Command errored out with exit status 1: /usr/local/bin/python -u -c 
'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-nfup7a1n/grpcio/setup.py'"'"';
__file__='"'"'/tmp/pip-install-nfup7a1n/grpcio/setup.py'"'"';
f=getattr(tokenize, '"'"'open'"'"', open)(__file__);
code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');
f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' 
install --record /tmp/pip-record-vkk5ld71/install-record.txt 
--single-version-externally-managed --compile --install-headers 
/usr/local/include/python3.6m/grpcio Check the logs for full command output.

alpine linux에서는 google-colud-logging 을 사용하려고 grpcio를 설치하다가 오류가 발생하는데

 

gcc에서 컴파일을 하다가 실패합니다.

구글을 통해 github issue들을 검색해보면 musl 이라는 alpine 리눅스의 패키지에서 오류가 발생한다고 합니다.

이를 해결하기 위해서는 뭐 grpcio를 pip로 추가설치해라 grpcio-tools를 설치하라 말이 많은데

 

결론은 둘다 안됩니다.

 

 

제가 선택한 해결방안은 컴파일 에러기 때문에, musl-dev는 당연히 패키지에 포함되어야 했었고,

gcc도 물론이거니와, 추가로 g++을 추가해주었는데 핵심은 g++을 통해서 설치가 가능했던것 같습니다.

물론 pip 인스톨 전에 pip를 최신으로 업그레이드 하는 과정도 진행했었고요.

 

 

# Dockerfile
RUN pip3 install --upgrade pip && pip3 install -r requirements.txt
RUN apk add --no-cache \
	gcc \
	g++ \
	make \
	musl-dev \
	python3-dev 

저의 경우는 Dockerfile 을 multistatging을 사용했는데 핵심 요소만 살펴보자면

pip를 최신으로 업데이트 후 의존성을 설치했고, 

 

alpine 리눅스에 복제할때 gcc, g++, make, musl-dev, python3-dev를 add하여 진행하면

google-cloud-logging에 쓰이는 grpcio 를 정상 빌드 컴파일한 것을 볼 수 있습니다.

 

 

 

 

 

추가사항

Docker를 사용할 때 Python alpine을 사용하였는데, 3.6.9-alpine10 에서는 정상동작하지만,

3.8.1-alpine11로 진행하면 위 방법도 안먹힙니다.