2022년 9월 현재 CARLA simulator의 최신 버전인 0.9.13으로 PythonAPI를 빌드하려고 하면 clang-8 version을 요구하는데 Ubuntu 22.04에서는 clang-8의 repository를 추가하고 설치 시도하면 다음과 같이 의존성 오류가 생긴다.
The following packages have unmet dependencies: clang-8 : Depends: libllvm8 (>= 1:8~svn298832-1~) but it is not going to be installed Depends: libstdc++-5-dev but it is not installable Depends: libgcc-5-dev but it is not installable Depends: libobjc-5-dev but it is not installable Depends: libclang-common-8-dev (= 1:8.0.1+svn369350-1~exp1~20200112113617.82) but it is not going to be installed Depends: libclang1-8 (= 1:8.0.1+svn369350-1~exp1~20200112113617.82) but it is not going to be installed Recommends: llvm-8-dev but it is not going to be installed Recommends: libomp-8-dev but it is not going to be installed lld-8 : Depends: libllvm8 (= 1:8.0.1+svn369350-1~exp1~20200112113617.82) but it is not going to be installed E: Unable to correct problems, you have held broken packages.
그리고 아쉽게도 하위 호환에 문제가 있는 것인지 설치 가능한 최하 버전인 clang-10으로는 CARLA client build가 되지 않는다. 빌드 스크립트에서 버전 점검하는 부분을 건너 뛰도록 수정하고 clang-10으로 강제 빌드를 시도해봤더니 역시나 빌드오류가 나면서 일이 커질것 같다는 느낌이 강하게 든다.
일일이 빌드오류 잡는 삽질을 하고 ‘CARLA client build 삽질기’를 포스팅 할 수도 있었겠지만 이번에는 문명의 이기인 Docker를 한번 누려 보기로했다.
먼저, Docker로 clang-8 설치가 가능한 Ubuntu 18.04에서 빌드를 수행한 다음(참고 CARLA – Linux Build) 빌드가 완료되면 Python client package를 host에 설치한다.
- Docker로 Ubuntu18.04를 설치하고 CARLA의 소스 코드위치를 /carla로 마운트하여 실행한다.
$ docker pull ubuntu:18.04 $ docker run -ti -v <carla-root-path>:/carla ubuntu:18.04 /bin/bash
- Clang-8의 repository를 추가하고 관련된 패키지들을 설치한다.
# Clang-8 repository 추가. DOCKER# apt-get update && apt-get install wget software-properties-common && add-apt-repository ppa:ubuntu-toolchain-r/test && wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|apt-key add - && apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main" && apt-get update # Install packages. DOCKER# apt-get install -y build-essential clang-8 lld-8 g++-7 cmake ninja-build libvulkan1 python python-pip python-dev python3-dev python3-pip libpng-dev libtiff5-dev libjpeg-dev tzdata sed curl unzip autoconf libtool rsync libxml2-dev git
- Clang-8을 default로 설정한다.
# Set clang-8 as a default clang. DOCKER# update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-8/bin/clang++ 180 && update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-8/bin/clang 180
- Host machine의 python과 동일한 버전(3.8)을 docker에도 설치하고 관련된 Python package들을 pip로 설치해준다. 특별히 setuptools package는 버전의 영향을 받으므로 확인된 버전(47.3.1)을 명시해 준다.
DOCKER# apt install -y python3.8 python3.8-dev # PIP upgrade DOCKER# pip3 install --upgrade pip && pip install --upgrade pip # 중요. Python3의 setuptools version이 안맞으면 빌드에 실패할 수 있으니 버전명을 명시해 준다. DOCKER# pip2 install setuptools && pip3 install -Iv setuptools==47.3.1 && pip2 install distro && pip3 install distro && pip2 install wheel && pip3 install wheel auditwheel
- 이제 해당 버전으로 docker에서 build를 시도 한다.
DOCKER# cd /carla DOCKER# make PythonAPI ARGS="--python-version=3.8"
- /carla/PythonAPI/carla/dist 아래에 소스에 포함되어 있는 3.6용 package외에 새롭게 빌드한 3.8용 *.whl, *.egg file들이 생성된 것을 확인하고 host system에 설치해 준다.
DOCKER# ls /carla/PythonAPI/carla/dist/ carla-0.9.13-cp36-cp36m-linux_x86_64.whl carla-0.9.13-py3.6-linux-x86_64.egg carla-0.9.13-cp38-cp38m-linux_x86_64.whl carla-0.9.13-py3.8-linux-x86_64.egg # CARLA client 설치 $ sudo apt install -y <carla-root-path>/PythonAPI/carla/dist/carla-0.9.13-py3.8-linux-x86_64.egg