lucasw / ros_from_src

Build ros from source without using a PPA in a github action. Probably just copy what archlinux is doing. See also https://github.com/ros-o/ros-o
BSD 3-Clause "New" or "Revised" License
102 stars 16 forks source link

Try out Ubuntu 21.10 kinetic kudu #14

Closed lucasw closed 1 year ago

lucasw commented 1 year ago

Do a sudo do-release-upgrade from a 22.04 system

To upgrade to the latest non-LTS development release 
set Prompt=normal in /etc/update-manager/release-upgrades.
lucasw commented 1 year ago

Looks like it isn't updating cuda, still 510 nvidia drivers:

Get:1771 http://us.archive.ubuntu.com/ubuntu kinetic-updates/restricted amd64 libnvidia-compute-510 amd64 510.108.03-0ubuntu0.22.10.1 [57.7 MB]               
lucasw commented 1 year ago

Rebuilding all of base_catkin_ws

Errors     << rosconsole:make /home/lucasw/base_catkin_ws/logs/rosconsole/build.make.000.log                                                                                                        
/home/lucasw/base_catkin_ws/src/ros/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::print(void*, ros::console::Level, const char*, const char*, const char*, int)’:
/home/lucasw/base_catkin_ws/src/ros/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:189:98: error: no matching function for call to ‘log4cxx::spi::LocationInfo::LocationInfo(const char*&, const char*&, int&)’
  189 |     logger->forcedLog(g_level_lookup[level], str, log4cxx::spi::LocationInfo(file, function, line));

-> https://salsa.debian.org/science-team/ros-rosconsole/-/blob/master/debian/patches/0002-be-compatible-with-log4cxx-0.11-and-0.12-0.13.patch

lucasw rosconsole -> ubuntu_2110

(whoops needs to be ubuntu 2210)

lucasw commented 1 year ago
/home/lucasw/base_catkin_ws/src/ros/pluginlib/pluginlib/include/pluginlib/./class_loader_imp.hpp:348:51: error: ‘systemLibrarySuffix’ is not a member of ‘class_loader’; did you mean ‘systemLibraryFormat’?
  348 |   bool debug_library_suffix = (0 == class_loader::systemLibrarySuffix().compare(0, 1, "d"));
      |                                                   ^~~~~~~~~~~~~~~~~~~
      |                                                   systemLibraryFormat

Do i need to build the latest class_loader locally?

sudo apt install libpoco-dev

-> The apt installed class loader uses ament

Try going other way and don't build pluginlib locally, use apt installed one, put a CATKIN_IGNORE in it and rebuild all

class_list_macros.h -> class_list_macros.hpp

camera_throttler_nodelets ubuntu_2210

lucasw commented 1 year ago
diff --git a/qt_gui_cpp/include/qt_gui_cpp/ros_pluginlib_plugin_provider.h b/qt_gui_cpp/include/qt_gui_cpp/ros_pluginlib_plugin_provider.h
index 9734ebb..f17486a 100644
--- a/qt_gui_cpp/include/qt_gui_cpp/ros_pluginlib_plugin_provider.h
+++ b/qt_gui_cpp/include/qt_gui_cpp/ros_pluginlib_plugin_provider.h
@@ -41,6 +41,7 @@
 // while this header uses boost shared pointers
 // Shiboken2 isn't able to parse it correctly atm
 //#include <boost/shared_ptr.hpp>
+#include <boost/filesystem.hpp>

 #include <pluginlib/class_loader.hpp>
 #include <tinyxml.h>
lucasw commented 1 year ago
diff --git a/hector_geotiff/src/geotiff_node.cpp b/hector_geotiff/src/geotiff_node.cpp
index aec7623..9e44814 100644
--- a/hector_geotiff/src/geotiff_node.cpp
+++ b/hector_geotiff/src/geotiff_node.cpp
@@ -33,7 +33,7 @@
 #include <ros/ros.h>
 #include <ros/console.h>

-#include <pluginlib/class_loader.h>
+#include <pluginlib/class_loader.hpp>

 #include <memory>
 #include <boost/algorithm/string.hpp>
lucasw commented 1 year ago

Try removing pluginlib from 22.04 source checkout build also and see if similar things fail, and also look at the debian class_loader includes to see if they have the hpp- it's already removed :heavy_check_mark:

lucasw commented 1 year ago

Also common_tutorials ubuntu_2210 branch

ros_rtsp

https://github.com/lucasw/rqt/tree/ubuntu_2210 https://github.com/lucasw/grid_map/tree/ubuntu_2210 https://github.com/lucasw/image_common/tree/ubuntu_2210 https://github.com/lucasw/rqt_image_view/tree/ubuntu_2210 https://github.com/lucasw/image_pipeline/tree/ubuntu_2210

lucasw commented 1 year ago

ros_common needed to include boost/bind.hpp, but didn't create a new branch for that, just updated salsa_noetic_aggregated

lucasw commented 1 year ago

web_video_server doesn't build, disable for now

/home/lucasw/base_catkin_ws/src/ros/web_video_server/src/libav_streamer.cpp:11:63: error: use of enum ‘AVLockOp’ without previous declaration
   11 | static int ffmpeg_boost_mutex_lock_manager(void **mutex, enum AVLockOp op)
      |                                                               ^~~~~~~~
/home/lucasw/base_catkin_ws/src/ros/web_video_server/src/libav_streamer.cpp: In function ‘int web_video_server::ffmpeg_boost_mutex_lock_manager(void**, int)’:
/home/lucasw/base_catkin_ws/src/ros/web_video_server/src/libav_streamer.cpp:18:10: error: ‘AV_LOCK_CREATE’ was not declared in this scope; did you mean ‘AV_LOG_TRACE’?
   18 |     case AV_LOCK_CREATE:
      |          ^~~~~~~~~~~~~~
      |          AV_LOG_TRACE
/home/lucasw/base_catkin_ws/src/ros/web_video_server/src/libav_streamer.cpp:25:10: error: ‘AV_LOCK_OBTAIN’ was not declared in this scope
   25 |     case AV_LOCK_OBTAIN:
      |          ^~~~~~~~~~~~~~
/home/lucasw/base_catkin_ws/src/ros/web_video_server/src/libav_streamer.cpp:31:10: error: ‘AV_LOCK_RELEASE’ was not declared in this scope
   31 |     case AV_LOCK_RELEASE:
      |          ^~~~~~~~~~~~~~~
/home/lucasw/base_catkin_ws/src/ros/web_video_server/src/libav_streamer.cpp:37:10: error: ‘AV_LOCK_DESTROY’ was not declared in this scope
   37 |     case AV_LOCK_DESTROY:
lucasw commented 1 year ago

There are a ton more to track down:

grep -r class_list_macros.h\> *
lucasw commented 1 year ago

https://salsa.debian.org/science-team/ros-pluginlib/-/commit/2d4034aba57c252d63cedc0eec9b544c37a343b6#e2e778c0f71c805a2d0e184c4b659e90e2a71458 is the commit that removed the class_list_macros.h and class_loader.h following https://github.com/ros/pluginlib/commit/e7a8f53d156ddadbba2e7c4b63263ae26b7d8090 on the pluginlib rolling release.

Does 20.04 ros buildfarm pluginlib have the hpp versions? It looks like it in https://github.com/ros/pluginlib/tree/noetic-devel/pluginlib/include/pluginlib - In that case every package noetic branch could be updated to use hpp and used in 22.04 and now 21.10 builds too.

lucasw commented 1 year ago

If I try to build the ubuntu_2210 rosconsole https://github.com/lucasw/rosconsole/tree/ubuntu_2210 in 22.04 I get this:

/home/lucasw/base_catkin_ws/src/ros/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::shutdown()’:
/home/lucasw/base_catkin_ws/src/ros/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:389:58: error: base operand of ‘->’ has non-pointer type ‘log4cxx::spi::LoggerRepositoryWeakPtr’ {aka ‘std::weak_ptr<log4cxx::spi::LoggerRepository>’}
  389 |   log4cxx::Logger::getRootLogger()->getLoggerRepository()->shutdown();
      |                                                          ^~
make[2]: *** [CMakeFiles/rosconsole_log4cxx.dir/build.make:76: CMakeFiles/rosconsole_log4cxx.dir/src/rosconsole/impl/rosconsole_log4cxx.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:318: CMakeFiles/rosconsole_log4cxx.dir/all] Error 2

So need to have a different branch of rosconsole for 20.04, 22.04, and 22.10

lucasw commented 1 year ago
find . -type f -name "*.*" -exec sed -i'' -e 's/class_list_macros.h>/class_list_macros.hpp>/g' {} +
find . -type f -name "*.*" -exec sed -i'' -e 's/class_loader.h>/class_loader.hpp>/g' {} +
vcs diff

There are some "class_loader.h" instances also

lucasw commented 1 year ago

This base_repos.yaml https://github.com/lucasw/ros_from_src/blob/robot_state_publisher/ubuntu_2204/base_repos.yaml has the right repos that will build in ubuntu 22.10