ros-tooling/setup-ros

Conflict between libunwind-14-dev and libunwind-dev

Closed this issue · 5 comments

Description

I have several ROS2 packages that depend on gstreamer, and I'm using setup-ros and action-ros-ci to build and test on Ubuntu. In Foxy and Galactic it runs fine. In Humble and Rolling I'm getting a conflict between libunwind-14-dev and libunwind-dev.

Expected Behavior

I expect packages that depend on gstreamer to build fine in Foxy, Galactic, Humble and Rolling using ros-tooling tools.

Actual Behavior

Packages that depend on gstreamer build fine in Foxy and Galactic setup-ros and action-ros-ci. In Humble and Rolling the rosdep step fails trying to install libunwind-dev, since librunwind-14-dev is already installed.

Github Action file: https://github.com/clydemcqueen/gst_ci_test/blob/main/.github/workflows/build_test.yml

A few lines from the Humble build log:

2022-05-31T21:27:25.9488889Z The following packages have unmet dependencies:
2022-05-31T21:27:26.0287876Z  libunwind-14-dev : Breaks: libunwind-dev but 1.3.2-2build2 is to be installed
2022-05-31T21:27:26.0451503Z E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
2022-05-31T21:27:26.1945839Z ERROR: the following rosdeps failed to install
2022-05-31T21:27:26.1946732Z   apt: command [sudo -H apt-get install -y libgstreamer1.0-dev] failed
2022-05-31T21:27:26.1947335Z   apt: command [sudo -H apt-get install -y libgstreamer-plugins-base1.0-dev] failed

The full log is available here: https://github.com/clydemcqueen/gst_ci_test/actions/runs/2417807161

I'm not entirely sure if this is a problem w/ setup-ros, gstreamer pkgconfig, or something else altogether. Redirections and pointers appreciated.

System

  • OS: Ubuntu Jammy
  • ROS 2 Distro: Humble, Rolling

Can you reproduce this manually? For example, by going through the installation instructions in a Docker container? It might be a debian package dependency issue, since it only happens on Ubuntu 22.04 (for Humble and Rolling).

I ran through these installation instructions and verified that libunwind was not installed before the rosdep line (e.g., locate libunwind came up empty), and libunwind8 is installed by rosdep:

...
executing command [apt-get install -y libopencv-dev]
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  gdal-data gstreamer1.0-plugins-base i965-va-driver ibverbs-providers intel-media-va-driver iso-codes libaacs0 libaec0 libaom3
  libarmadillo10 libarpack2 libavcodec-dev libavcodec58 libavformat-dev libavformat58 libavutil-dev libavutil56 libbdplus0 libblas3 libblosc1
  libbluray2 libcap2-bin libcdparanoia0 libcfitsio9 libcharls2 libchromaprint1 libcodec2-1.0 libdav1d5 libdc1394-25 libdc1394-dev libde265-0
  libdeflate-dev libdw1 libevent-core-2.1-7 libevent-pthreads-2.1-7 libexif-dev libexif-doc libexif12 libfabric1 libfreexl1 libfyba0
  libgdal30 libgdcm-dev libgdcm3.0 libgeos-c1v5 libgeos3.10.2 libgeotiff5 libgfortran5 libgif7 libgl2ps1.4 libglew2.2 libgme0 libgphoto2-6
  libgphoto2-dev libgphoto2-l10n libgphoto2-port12 libgsm1 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libhdf4-0-alt libhdf5-103-1
  libhdf5-hl-100 libheif1 libhwloc-plugins libhwloc15 libibverbs1 libigdgmm12 libilmbase-dev libilmbase25 libjbig-dev libjpeg-dev
  libjpeg-turbo8-dev libjpeg8-dev libkmlbase1 libkmldom1 libkmlengine1 liblapack3 liblept5 libltdl7 liblzma-dev libmfx1 libminizip1
  libmp3lame0 libmpg123-0 libmysqlclient21 libnetcdf19 libnl-3-200 libnl-route-3-200 libnorm1 libnspr4 libnss3 libnuma1 libodbc2 libodbcinst2
  libogdi4.1 libogg0 libopencv-calib3d-dev libopencv-calib3d4.5d libopencv-contrib-dev libopencv-contrib4.5d libopencv-core-dev
  libopencv-core4.5d libopencv-dnn-dev libopencv-dnn4.5d libopencv-features2d-dev libopencv-features2d4.5d libopencv-flann-dev
  libopencv-flann4.5d libopencv-highgui-dev libopencv-highgui4.5d libopencv-imgcodecs-dev libopencv-imgcodecs4.5d libopencv-imgproc-dev
  libopencv-imgproc4.5d libopencv-ml-dev libopencv-ml4.5d libopencv-objdetect-dev libopencv-objdetect4.5d libopencv-photo-dev
  libopencv-photo4.5d libopencv-shape-dev libopencv-shape4.5d libopencv-stitching-dev libopencv-stitching4.5d libopencv-superres-dev
  libopencv-superres4.5d libopencv-video-dev libopencv-video4.5d libopencv-videoio-dev libopencv-videoio4.5d libopencv-videostab-dev
  libopencv-videostab4.5d libopencv-viz-dev libopencv-viz4.5d libopencv4.5-java libopencv4.5d-jni libopenexr-dev libopenexr25 libopenmpi3
  libopenmpt0 libopus0 liborc-0.4-0 libpam-cap libpgm-5.3-0 libpmix2 libpng-dev libpng-tools libpoppler118 libpq5 libproj22 libprotobuf23
  libpsm-infinipath1 libpsm2-2 libqhull-r8.0 librabbitmq4 libraw1394-11 libraw1394-dev libraw1394-tools librdmacm1 librttopo1 libshine3
  libsnappy1v5 libsocket++1 libsodium23 libsoxr0 libspatialite7 libspeex1 libsrt1.4-gnutls libssh-gcrypt-4 libsuperlu5 libswresample-dev
  libswresample3 libswscale-dev libswscale5 libsz2 libtbb-dev libtbb12 libtbb2 libtbbmalloc2 libtcl8.6 libtesseract4 libtheora0 libtiff-dev
  libtiffxx5 libtk8.6 libtwolame0 libucx0 libudfread0 libunwind8 liburiparser1 libusb-1.0-0 libva-drm2 libva-x11-2 libva2 libvdpau1
  libvisual-0.4-0 libvorbis0a libvorbisenc2 libvorbisfile3 libvpx7 libvtk9.1 libx264-163 libx265-199 libxerces-c3.2 libxft2 libxnvctrl0
  libxss1 libxvidcore4 libzmq5 libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers mysql-common ocl-icd-libopencl1 opencv-data
  poppler-data proj-bin proj-data unixodbc-common va-driver-all vdpau-driver-all
...

After rosdep completes:

root@b1205b2e943f:~/ros2_humble# locate libunwind
/usr/lib/x86_64-linux-gnu/libunwind-coredump.so.0
/usr/lib/x86_64-linux-gnu/libunwind-coredump.so.0.0.0
/usr/lib/x86_64-linux-gnu/libunwind-ptrace.so.0
/usr/lib/x86_64-linux-gnu/libunwind-ptrace.so.0.0.0
/usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8
/usr/lib/x86_64-linux-gnu/libunwind-x86_64.so.8.0.1
/usr/lib/x86_64-linux-gnu/libunwind.so.8
/usr/lib/x86_64-linux-gnu/libunwind.so.8.0.1
/usr/share/doc/libunwind8
/usr/share/doc/libunwind8/changelog.Debian.gz
/usr/share/doc/libunwind8/copyright
/var/lib/dpkg/info/libunwind8:amd64.list
/var/lib/dpkg/info/libunwind8:amd64.md5sums
/var/lib/dpkg/info/libunwind8:amd64.shlibs
/var/lib/dpkg/info/libunwind8:amd64.triggers

I'm not sure what to do with that information, though.

I did notice that the Humble osrf/ros Docker images also install libunwind8, presumably because libopencv-dev is installed by the humble-desktop, etc.

I'll keep digging around.

OK, I think the problem is in the ubuntu-22.04 environment used by Github Actions.

I logged into rostooling/setup-ros-docker:ubuntu-jammy-ros-humble-ros-base-latest and looked at reverse deps:

root@ac6ad1abd944:/# apt-get remove --dry-run libunwind-14
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following packages will be REMOVED:
  libc++-14-dev libc++-dev libc++1-14 libc++abi-14-dev libc++abi-dev libc++abi1-14 libunwind-14 libunwind-14-dev
0 upgraded, 0 newly installed, 8 to remove and 2 not upgraded.
Remv libc++-dev [1:14.0-55~exp2]
Remv libc++-14-dev [1:14.0.0-1ubuntu1]
Remv libc++1-14 [1:14.0.0-1ubuntu1]
Remv libc++abi-dev [1:14.0-55~exp2]
Remv libc++abi-14-dev [1:14.0.0-1ubuntu1]
Remv libc++abi1-14 [1:14.0.0-1ubuntu1]
Remv libunwind-14-dev [1:14.0.0-1ubuntu1]
Remv libunwind-14 [1:14.0.0-1ubuntu1]

Then I scanned the action to see what packages were installed and noticed that that libc++dev and libc++abi-dev are were already installed:

2022-05-31T21:24:02.3477933Z [command]/usr/bin/sudo DEBIAN_FRONTEND=noninteractive RTI_NC_LICENSE_ACCEPTED=yes apt-get install --no-install-recommends --quiet --yes libssl-dev python3-dev build-essential clang cmake git lcov libc++-dev libc++abi-dev python3-catkin-pkg-modules python3-pip python3-vcstool wget libasio-dev libtinyxml2-dev python3-rosdep
...
2022-05-31T21:24:02.6982850Z libc++-dev is already the newest version (1:14.0-55~exp2).
2022-05-31T21:24:02.6995762Z libc++abi-dev is already the newest version (1:14.0-55~exp2).

This is at near top of the build log:

2022-05-31T21:23:49.4306996Z ##[group]Virtual Environment
2022-05-31T21:23:49.4307409Z Environment: ubuntu-22.04
2022-05-31T21:23:49.4307704Z Version: 20220522.1
2022-05-31T21:23:49.4308226Z Included Software: https://github.com/actions/virtual-environments/blob/ubuntu22/20220522.1/images/linux/Ubuntu2204-Readme.md
2022-05-31T21:23:49.4308913Z Image Release: https://github.com/actions/virtual-environments/releases/tag/ubuntu22%2F20220522.1

The web page for the included software lists:

  • libunwind8 (1.3.2-2build2), this package should be installed but isn't
  • libc++-dev (1:14.0-55~exp2), this package is installed, and it appears to depend on libunwind-14-dev (1:14.0.0-1ubuntu1)

The 22.04 image is in public beta: actions/runner-images#5490

I see. So I'm guessing you can "fix" the installed packages before setup-ros/action-ros-ci are run.

Sure... problem is upstream & workaround is easy. Closing. Thanks for the help!