How to install ROS 1 on Fedora?

Greetings,

I wanted to learn ROS1 for robotics, but it seems whatever guide i follow to install it on Fedora leads to a dead end or to an error.

I’ve followed this guide from the ROS website. But i always get the error on the image, on the step " Building the catkin Workspace".

I’ve also tried commands like “dnf install ros-noetic-desktop-full” or ros-noetic-desktop or ros-desktop. I always get this error: Last metadata expiration check: 0:14:05 ago on Mon 21 Nov 2022 08:11:55 PM EET.
No match for argument: ros-noetic-desktop-full
Error: Unable to find a match: ros-noetic-desktop-full.

Any help would be appreciated.
Screenshot from 2022-11-21 20-10-08

Your image does not show the entire error in readable form.

Please copy & paste the relevant text into the post, then mark it as preformatted text by highlighting the text then click the </> button on the toolbar so it remains formatted as seen on screen.

Note that it is recommended you run most python installs in a virtual environment so modules installed do not conflict with system modules.
Since the package is designed for ubuntu there are some python modules that are overlooked and should be installed in your venv.
So far I have found sip, catkin-pkg, and wheel that should be installed into the venv, and am still working to identify what else is failing.

Please make certain that your system is fully updated.

You MUST follow the steps exactly to even get most of the way through as I have.

You can start clean by removing the ros_catkin_ws directory and all its content then starting again at step 1 for fedora and repeat everything.

I created the working directory then created my venv under that working directory. Once I had activated the python venv then every step using pip was done in the venv.

Note that I was using F36 with Python 3.10 and not F37 with Python 3.11. Will try again on my F37 system

On F37 I got this, which might be the same as the error you received.

[ 16%] Building CXX object CMakeFiles/rosconsole_backend_interface.dir/src/rosconsole/rosconsole_backend.cpp.o
[ 33%] Linking CXX shared library /home/jvian/ros_catkin_ws/devel_isolated/rosconsole/lib/librosconsole_backend_interface.so
[ 33%] Built target rosconsole_backend_interface
[ 50%] Building CXX object CMakeFiles/rosconsole_log4cxx.dir/src/rosconsole/impl/rosconsole_log4cxx.cpp.o
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::initialize()’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:169:23: error: cannot convert ‘ros::console::impl::ROSConsoleStdioAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
  169 |   logger->addAppender(new ROSConsoleStdioAppender);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       |
      |                       ros::console::impl::ROSConsoleStdioAppender*
In file included from /usr/include/log4cxx/spi/loggingevent.h:28,
                 from /usr/include/log4cxx/layout.h:29,
                 from /usr/include/log4cxx/appenderskeleton.h:28,
                 from /home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:42:
/usr/include/log4cxx/logger.h:144:60: note:   initializing argument 1 of ‘virtual void log4cxx::Logger::addAppender(log4cxx::AppenderPtr)’
  144 |                 virtual void addAppender(const AppenderPtr newAppender);
      |                                          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/home/jvian/ros_catkin_ws/src/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/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:187:98: error: no matching function for call to ‘log4cxx::spi::LocationInfo::LocationInfo(const char*&, const char*&, int&)’
  187 |     logger->forcedLog(g_level_lookup[level], str, log4cxx::spi::LocationInfo(file, function, line));
      |                                                                                                  ^
In file included from /usr/include/log4cxx/logger.h:33:
/usr/include/log4cxx/spi/location/locationinfo.h:94:17: note: candidate: ‘log4cxx::spi::LocationInfo::LocationInfo(const log4cxx::spi::LocationInfo&)’
   94 |                 LocationInfo( const LocationInfo& src );
      |                 ^~~~~~~~~~~~
/usr/include/log4cxx/spi/location/locationinfo.h:94:17: note:   candidate expects 1 argument, 3 provided
/usr/include/log4cxx/spi/location/locationinfo.h:88:17: note: candidate: ‘log4cxx::spi::LocationInfo::LocationInfo()’
   88 |                 LocationInfo();
      |                 ^~~~~~~~~~~~
/usr/include/log4cxx/spi/location/locationinfo.h:88:17: note:   candidate expects 0 arguments, 3 provided
/usr/include/log4cxx/spi/location/locationinfo.h:80:17: note: candidate: ‘log4cxx::spi::LocationInfo::LocationInfo(const char*, const char*, const char*, int)’
   80 |                 LocationInfo( const char* const fileName,
      |                 ^~~~~~~~~~~~
/usr/include/log4cxx/spi/location/locationinfo.h:80:17: note:   candidate expects 4 arguments, 3 provided
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void* ros::console::impl::getHandle(const std::string&)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:203:36: error: cannot convert ‘log4cxx::LoggerPtr’ {aka ‘std::shared_ptr<log4cxx::Logger>’} to ‘void*’ in return
  203 |   return log4cxx::Logger::getLogger(name);
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
      |                                    |
      |                                    log4cxx::LoggerPtr {aka std::shared_ptr<log4cxx::Logger>}
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘bool ros::console::impl::get_loggers(std::map<std::__cxx11::basic_string<char>, ros::console::levels::Level>&)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:219:120: error: conversion from ‘log4cxx::spi::LoggerRepository*’ to non-scalar type ‘log4cxx::spi::LoggerRepositoryPtr’ {aka ‘std::shared_ptr<log4cxx::spi::LoggerRepository>’} requested
  219 |   log4cxx::spi::LoggerRepositoryPtr repo = log4cxx::Logger::getLogger(ROSCONSOLE_ROOT_LOGGER_NAME)->getLoggerRepository();
      |                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::register_appender(ros::console::LogAppender*)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:361:23: error: cannot convert ‘ros::console::impl::Log4cxxAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
  361 |   logger->addAppender(g_log4cxx_appender);
      |                       ^~~~~~~~~~~~~~~~~~
      |                       |
      |                       ros::console::impl::Log4cxxAppender*
/usr/include/log4cxx/logger.h:144:60: note:   initializing argument 1 of ‘virtual void log4cxx::Logger::addAppender(log4cxx::AppenderPtr)’
  144 |                 virtual void addAppender(const AppenderPtr newAppender);
      |                                          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::deregister_appender(ros::console::LogAppender*)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:368:27: error: no matching function for call to ‘log4cxx::Logger::removeAppender(ros::console::impl::Log4cxxAppender*&)’
  368 |     logger->removeAppender(g_log4cxx_appender);
      |     ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(log4cxx::AppenderPtr)’
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:55: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                                     ~~~~~~~~~~~~~~~~~~^~~~~~~~
/usr/include/log4cxx/logger.h:1456:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(const log4cxx::LogString&)’
 1456 |                 void removeAppender(const LogString& name);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1456:54: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘const log4cxx::LogString&’ {aka ‘const std::__cxx11::basic_string<char>&’}
 1456 |                 void removeAppender(const LogString& name);
      |                                     ~~~~~~~~~~~~~~~~~^~~~
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::shutdown()’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:378:27: error: no matching function for call to ‘log4cxx::Logger::removeAppender(ros::console::impl::Log4cxxAppender*&)’
  378 |     logger->removeAppender(g_log4cxx_appender);
      |     ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(log4cxx::AppenderPtr)’
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:55: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                                     ~~~~~~~~~~~~~~~~~~^~~~~~~~
/usr/include/log4cxx/logger.h:1456:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(const log4cxx::LogString&)’
 1456 |                 void removeAppender(const LogString& name);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1456:54: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘const log4cxx::LogString&’ {aka ‘const std::__cxx11::basic_string<char>&’}
 1456 |                 void removeAppender(const LogString& name);
      |                                     ~~~~~~~~~~~~~~~~~^~~~
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
make: *** [Makefile:146: all] Error 2
<== Failed to process package 'rosconsole': 
  Command '['/home/jvian/ros_catkin_ws/install_isolated/env.sh', 'make', '-j2', '-l2']' returned non-zero exit status 2.

Reproduce this error by running:
==> cd /home/jvian/ros_catkin_ws/build_isolated/rosconsole && /home/jvian/ros_catkin_ws/install_isolated/env.sh make -j2 -l2

Command failed, exiting.

I then ran the suggested command and repeated the error.

(ros) [jvian@fedora ros_catkin_ws]$ cd /home/jvian/ros_catkin_ws/build_isolated/rosconsole && /home/jvian/ros_catkin_ws/install_isolated/env.sh make -j2 -l2
Consolidate compiler generated dependencies of target rosconsole_backend_interface
[ 33%] Built target rosconsole_backend_interface
Consolidate compiler generated dependencies of target rosconsole_log4cxx
[ 50%] Building CXX object CMakeFiles/rosconsole_log4cxx.dir/src/rosconsole/impl/rosconsole_log4cxx.cpp.o
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::initialize()’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:169:23: error: cannot convert ‘ros::console::impl::ROSConsoleStdioAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
  169 |   logger->addAppender(new ROSConsoleStdioAppender);
      |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      |                       |
      |                       ros::console::impl::ROSConsoleStdioAppender*
In file included from /usr/include/log4cxx/spi/loggingevent.h:28,
                 from /usr/include/log4cxx/layout.h:29,
                 from /usr/include/log4cxx/appenderskeleton.h:28,
                 from /home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:42:
/usr/include/log4cxx/logger.h:144:60: note:   initializing argument 1 of ‘virtual void log4cxx::Logger::addAppender(log4cxx::AppenderPtr)’
  144 |                 virtual void addAppender(const AppenderPtr newAppender);
      |                                          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/home/jvian/ros_catkin_ws/src/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/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:187:98: error: no matching function for call to ‘log4cxx::spi::LocationInfo::LocationInfo(const char*&, const char*&, int&)’
  187 |     logger->forcedLog(g_level_lookup[level], str, log4cxx::spi::LocationInfo(file, function, line));
      |                                                                                                  ^
In file included from /usr/include/log4cxx/logger.h:33:
/usr/include/log4cxx/spi/location/locationinfo.h:94:17: note: candidate: ‘log4cxx::spi::LocationInfo::LocationInfo(const log4cxx::spi::LocationInfo&)’
   94 |                 LocationInfo( const LocationInfo& src );
      |                 ^~~~~~~~~~~~
/usr/include/log4cxx/spi/location/locationinfo.h:94:17: note:   candidate expects 1 argument, 3 provided
/usr/include/log4cxx/spi/location/locationinfo.h:88:17: note: candidate: ‘log4cxx::spi::LocationInfo::LocationInfo()’
   88 |                 LocationInfo();
      |                 ^~~~~~~~~~~~
/usr/include/log4cxx/spi/location/locationinfo.h:88:17: note:   candidate expects 0 arguments, 3 provided
/usr/include/log4cxx/spi/location/locationinfo.h:80:17: note: candidate: ‘log4cxx::spi::LocationInfo::LocationInfo(const char*, const char*, const char*, int)’
   80 |                 LocationInfo( const char* const fileName,
      |                 ^~~~~~~~~~~~
/usr/include/log4cxx/spi/location/locationinfo.h:80:17: note:   candidate expects 4 arguments, 3 provided
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void* ros::console::impl::getHandle(const std::string&)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:203:36: error: cannot convert ‘log4cxx::LoggerPtr’ {aka ‘std::shared_ptr<log4cxx::Logger>’} to ‘void*’ in return
  203 |   return log4cxx::Logger::getLogger(name);
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~
      |                                    |
      |                                    log4cxx::LoggerPtr {aka std::shared_ptr<log4cxx::Logger>}
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘bool ros::console::impl::get_loggers(std::map<std::__cxx11::basic_string<char>, ros::console::levels::Level>&)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:219:120: error: conversion from ‘log4cxx::spi::LoggerRepository*’ to non-scalar type ‘log4cxx::spi::LoggerRepositoryPtr’ {aka ‘std::shared_ptr<log4cxx::spi::LoggerRepository>’} requested
  219 |   log4cxx::spi::LoggerRepositoryPtr repo = log4cxx::Logger::getLogger(ROSCONSOLE_ROOT_LOGGER_NAME)->getLoggerRepository();
      |                                            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::register_appender(ros::console::LogAppender*)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:361:23: error: cannot convert ‘ros::console::impl::Log4cxxAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
  361 |   logger->addAppender(g_log4cxx_appender);
      |                       ^~~~~~~~~~~~~~~~~~
      |                       |
      |                       ros::console::impl::Log4cxxAppender*
/usr/include/log4cxx/logger.h:144:60: note:   initializing argument 1 of ‘virtual void log4cxx::Logger::addAppender(log4cxx::AppenderPtr)’
  144 |                 virtual void addAppender(const AppenderPtr newAppender);
      |                                          ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::deregister_appender(ros::console::LogAppender*)’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:368:27: error: no matching function for call to ‘log4cxx::Logger::removeAppender(ros::console::impl::Log4cxxAppender*&)’
  368 |     logger->removeAppender(g_log4cxx_appender);
      |     ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(log4cxx::AppenderPtr)’
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:55: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                                     ~~~~~~~~~~~~~~~~~~^~~~~~~~
/usr/include/log4cxx/logger.h:1456:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(const log4cxx::LogString&)’
 1456 |                 void removeAppender(const LogString& name);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1456:54: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘const log4cxx::LogString&’ {aka ‘const std::__cxx11::basic_string<char>&’}
 1456 |                 void removeAppender(const LogString& name);
      |                                     ~~~~~~~~~~~~~~~~~^~~~
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp: In function ‘void ros::console::impl::shutdown()’:
/home/jvian/ros_catkin_ws/src/rosconsole/src/rosconsole/impl/rosconsole_log4cxx.cpp:378:27: error: no matching function for call to ‘log4cxx::Logger::removeAppender(ros::console::impl::Log4cxxAppender*&)’
  378 |     logger->removeAppender(g_log4cxx_appender);
      |     ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(log4cxx::AppenderPtr)’
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1450:55: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘log4cxx::AppenderPtr’ {aka ‘std::shared_ptr<log4cxx::Appender>’}
 1450 |                 void removeAppender(const AppenderPtr appender);
      |                                     ~~~~~~~~~~~~~~~~~~^~~~~~~~
/usr/include/log4cxx/logger.h:1456:22: note: candidate: ‘virtual void log4cxx::Logger::removeAppender(const log4cxx::LogString&)’
 1456 |                 void removeAppender(const LogString& name);
      |                      ^~~~~~~~~~~~~~
/usr/include/log4cxx/logger.h:1456:54: note:   no known conversion for argument 1 from ‘ros::console::impl::Log4cxxAppender*’ to ‘const log4cxx::LogString&’ {aka ‘const std::__cxx11::basic_string<char>&’}
 1456 |                 void removeAppender(const LogString& name);
      |                                     ~~~~~~~~~~~~~~~~~^~~~
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
make: *** [Makefile:146: all] Error 2

Note that that error may be a result of having code written for ubuntu with the compiler used there and attempting the build on fedora which has a different compiler version.

I will continue digging.