CARLA client를 build해야 하는데 clang-8이 없댄다.

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

CARLA client를 build해야 하는데 clang-8이 없댄다.”에 대한 4개의 생각

  1. 조성민

    ubuntu 22.04 에서 carla 0.9.12 version으로 docker에서 실행하려고하는데
    환경변수의 문제인지 계속 nomoudule import carla 가 뜹니다.. 혹시 해결법아실까요?

    응답
    1. litcoder 글쓴이

      Import error가 발생했다면 CARLA client를 설치하지 않으셨거나 오류등으로 제대로 설치 되지 않아서 생긴 문제일 가능성이 있을 것 같습니다. (pip freeze로 확인 가능하지 않을까요?) 저 역시 당시에 서버로에서 pip로 받는 CARLA client가 제대로 설치되지 않아서 직접 빌드하고 설치하는 과정을 적어 둔 것입니다. 참고로, Docker에서 사용하시는 Python version을 명시하지 않으셨지만 위의 과정은 Python 3.8용으로 빌드하는 것이어서 3.10 혹은 다른 버전을 사용하신다면 다음 부분을 적절히 수정하셔야 할 것입니다.

      make PythonAPI ARGS=”–python-version=3.8″

      응답
  2. 모형빌더

    우분투22에 carla 0.9.13 작업 예정인데
    1. 13이 우분투22 에서 작업되나요. 14로 해야 되지 않을까요
    2. Egg 만들때 py 3.8 이죠. 아직 지원이 Foxy 까지
    그럼 우분투22에 py 3.10_default 외에 3.8 설치해야 할듯 하네요
    3. Autoware Bridge는 해결하셨나요

    응답
    1. litcoder 글쓴이

      1. 0.9.13을 본문의 방법으로 Ubuntu 22.04에서 egg file을 생성할 수 있느냐는 물음 이시라면, Docker가 동작하는 한 빌드 할 수 있으니 가능합니다. 이 글을 작성한 후에 0.9.14가 새롭게 나온 것으로 보이는데 [CARLA Linux Build 문서](https://carla.readthedocs.io/en/latest/build_linux/)에는 아직 업데이트가 되지 않은 것인지 혹은 여전히 지원되지 않는것이지는 모르겠으나 22.04에서 native build를 하기 위한 내용은 여전히 빠져있네요.
      2. 위의 링크를 참조해 보시면 아시겠지만, Python 버전 외에도 여러 패키지와 그에 따른 버전 의존성들이 있습니다. 이것 저것 의존성을 설치하다가 시스템이 망가지는 것 보다는 본문의 설명처럼 문서의 버전과 일치하는 Ubuntu distro(18.04 or 22.04)를 docker로 설치해서 빌드하시는게 가장 머리가 덜 아픈 방법이 될 것이라 생각합니다. 다만 그 전에, 코드 수정등으로 반드시 로컬빌드를 꼭 해야 하는게 아니라면 [PyPl에서 배포되는 버전](https://pypi.org/project/carla/#files)을 사용하는게 더 간단할 테고요.
      3. [CARLA ROS Bridge](https://github.com/carla-simulator/ros-bridge)를 말씀하시는 것이라면 빌드해서 돌려 보긴했었습니다. 그것도 ROS와 의존성 때문에 고생을 좀 했었는데, 기록해 둔게 없어서 도움드릴 만한게 있을지는 모르겠네요.

      응답

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다