Closed cottsay closed 3 years ago
@cottsay Is there a way we could work this sort of check into roslint to make it easier for maintainers to detect? Can we run the tool in the installation directory instead of an rpm? I'm assuming it's applying some heuristic for file types and locations?
Actually @tfoote, the way I checked this was by looking at the generated debuginfo
RPM. If it was empty, then there were no ELFs to extract debugging info from, usually indicating that the package is noarch
. The alternative is that the package wasn't compiled with the flags provided by rpmbuild
, but I passed those along in the .spec
file, so it shouldn't be the case.
I'm not sure how to tell beyond that, but you're right, this would be a great thing to include in roslint
.
Since there are quite a few packages on this list, I'll probably invoke the help of some minions here at school to help with the testing, forking, and PR-ing process.
@tfoote: roslint checks C++ and Python files. This would be more in the nature of catkin_lint.
Glad to see this is finally being used.
I presume you want this tag added to metapackages, also.
Are you packaging them?
@jack-oquin I've been assuming that metapackages are noarch
regardless of if they mark architecture_independent
, so no, I don't think metapackages need to be marked.
By them do you mean metapackages? If so, yes: http://csc.mcs.sdsmt.edu/ros/rpmbuild/hydro.html http://csc.mcs.sdsmt.edu/ros/rpmbuild/indigo.html
EDIT: In the end, I'd like to remove the metapackages and start using RPM groups instead, but I'm not sure how things would work with metapackages depending on metapackages...
Thanks for all your work on this @cottsay, this is definitely a big effort item.
released ackermann_msgs 0.9.1 (jack-oquin/ackermann_msgs#3)
@cottsay Is this still of interest ? Is the aforementioned fedora buildfarm still active (for testing, if we keep adding the architecture independant tag to packages) ?
The Fedora buildfarm is not currently active. Maybe I'll have cycles to get things running again some day, but not now.
I recently noticed a ROS2 pull request to remove <architecture-independent/>
from one of the unique_identifier packages.
Is there opposite motion going on?
While this tag is used only in the RPM metadata generated by bloom, I think it's valuable information and maybe the ROS buildfarm will leverage it some day. So we do not encourage users to get rid of it in ROS2.
One thing to keep in mind though is that ROS2 message packages do compile code and libraries so cannot be considered architecture-independent
anymore. Only pure python packages (build type ament_python
in the ROS2 world) and header-only packages can be considered architecture independent.
@cottsay Maybe this would be worth returning to briefly with your current work. I audited all the ones with PRs open and was able to check most of them off as merged.
I'll start by working through the list as it was 4 years ago, but I expect there have been new packages which need to be discovered. Since we don't have an RPM buildfarm active at the moment, I may have to come up with an alternate bulk discovery method.
Since the ROS2 package list is more containable right now, I might go after those to get ahead of the problem.
@cottsay We've turned on RPM builds on ROS 2 rolling and we've shipped Noetic already which is the last ROS 1. To that end this seems like it should be caught now in rolling and we're not likely to turn on for Noetic so can we close out this long running ticket as enough for now?
this seems like it should be caught now in rolling
The new buildfarm code doesn't have support for RPM linting yet, so we won't catch packages that are missing the tag but should have it. We'll still catch packages that claim to be architecture-independent but actually aren't.
I have a hunch that ROS 2 is in pretty rough shape as far as this flag is concerned. There are advantages to doing noarch
right, but we still don't have any capability in the buildfarm to build noarch
packages only once, so we can't take full advantage of it even if it's declared correctly in the packages.
I think we should close this bug now - it was intended for tracking the feature in ROS 1, and like you said, it's unlikely that we'll ever see Noetic RPMs on the buildfarm. We can always re-open it if things change.
With the addition of
noarch
support for RPMs in bloom (https://github.com/ros-infrastructure/bloom/pull/270), I found a couple of packages that incorrectly markedarchitecture_independent
when they were, in fact, not so. These packages were notified and the appropriatepackage.xml
s updated.Inversely, there are MANY packages that do not mark
architecture_independent
when they should. This is mostly because the current debian buildfarm is unable to leverage this.My experimental RPM buildfarm (http://csc.mcs.sdsmt.edu/jenkins/) has the capability to both utilize this and to check when it is missing, so I'm compiling a list of packages that should be updated.
Hopefully this will act as a first step in implementing this functionality on the debian buildfarm, and to produce smaller, more accurate builds on the RPM buildfarm.
Thanks!
Originally https://github.com/ros/catkin/issues/623
Package List (work-in-progress):
After compiling the list, I've decided that there are just too many packages to target all of Hydro. Instead, I'll try to catch Indigo packages as they come in.
This is a preliminary list. Some of these may be false positives.
ackermann_msgs
https://github.com/jack-oquin/ackermann_msgs/pull/3actionlib_msgs
https://github.com/ros/common_msgs/pull/35angles
https://github.com/ros/angles/pull/4bond
https://github.com/ros/bond_core/pull/4bondpy
https://github.com/ros/bond_core/pull/4calibration_estimation
https://github.com/ros-perception/calibration/pull/24calibration_launch
https://github.com/ros-perception/calibration/pull/24calibration_msgs
https://github.com/ros-perception/calibration/pull/24camera_calibration
https://github.com/ros-perception/image_pipeline/commit/dac6e56c46b19474f7a18fbb40b312c6173a8ad8capabilities
https://github.com/osrf/capabilities/pull/76catkin
https://github.com/ros/catkin/pull/625cmake_modules
https://github.com/ros/cmake_modules/pull/18concert_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95concert_service_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95control_msgs
https://github.com/ros-controls/control_msgs/pull/11diagnostic_msgs
https://github.com/ros/common_msgs/pull/35driver_base
https://github.com/ros-drivers/driver_common/pull/6ecl_build
ecl_concepts
ecl_converters_lite
ecl_eigen
ecl_license
ecl_linear_algebra
ecl_math
ecl_mpl
eigen_stl_containers
flir_ptu_description
flir_ptu_viz
gateway_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95gencpp
https://github.com/ros/gencpp/pull/19geneus
genlisp
genmsg
https://github.com/ros/genmsg/pull/71genpy
https://github.com/ros/genpy/pull/27geometry_msgs
https://github.com/ros/common_msgs/pull/35household_objects_database_msgs
joint_state_publisher
librviz_tutorial
manipulation_msgs
map_msgs
media_export
message_generation
message_runtime
mk
moveit_commander
moveit_ikfast
moveit_msgs
moveit_resources
nav_msgs
https://github.com/ros/common_msgs/pull/35nmea_msgs
nodelet_topic_tools
object_recognition_msgs
octomap_msgs
pcl_conversions
pcl_msgs
pr2_mechanism_msgs
python_qt_binding
qt_dotgraph
qt_gui_app
qt_gui
qt_gui_py_common
rail_maps
rocon_app_manager_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95rocon_bubble_icons
rocon_console
rocon_device_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95rocon_ebnf
rocon_gateway
rocon_gateway_tests
rocon_gateway_utils
rocon_hub_client
rocon_hub
rocon_icons
rocon_interaction_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95rocon_interactions
rocon_launch
rocon_master_info
rocon_python_comms
rocon_python_redis
rocon_python_utils
rocon_python_wifi
rocon_semantic_version
rocon_service_pair_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95rocon_std_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95rocon_test
rocon_tutorial_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95rocon_uri
rosapi
rosbag_migration_rule
rosbash
rosboost_cfg
rosbridge_library
rosbridge_server
rosbuild
rosclean
roscpp_traits
roscreate
rosdoc_lite
rosgraph
https://github.com/ros/ros_comm/pull/391rosgraph_msgs
roslang
roslaunch
https://github.com/ros/ros_comm/pull/391roslint
roslisp
rosmake
rosmaster
https://github.com/ros/ros_comm/pull/391rosmsg
https://github.com/ros/ros_comm/pull/391rosnode
https://github.com/ros/ros_comm/pull/391rosparam
https://github.com/ros/ros_comm/pull/391rospy
https://github.com/ros/ros_comm/pull/391rospy_tutorials
rosservice
https://github.com/ros/ros_comm/pull/391rostest
https://github.com/ros/ros_comm/pull/391rostopic
rosunit
roswtf
https://github.com/ros/ros_comm/pull/391rqt_action
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_bag
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_bag_plugins
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_console
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_dep
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_gui
rqt_gui_py
rqt_graph
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_launch
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_logger_level
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_msg
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_plot
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_publisher
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_py_common
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_py_console
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_reconfigure
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_service_caller
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_shell
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_srv
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_top
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_topic
https://github.com/ros-visualization/rqt_common_plugins/pull/254rqt_web
https://github.com/ros-visualization/rqt_common_plugins/pull/254rviz_python_tutorial
https://github.com/ros-visualization/rqt_common_plugins/pull/254scheduler_msgs
https://github.com/robotics-in-concert/rocon_msgs/pull/95sensor_msgs
https://github.com/ros/common_msgs/pull/35shape_msgs
https://github.com/ros/common_msgs/pull/35smach
smach_msgs
smach_ros
smach_viewer
smclib
https://github.com/ros/bond_core/pull/4std_capabilities
std_msgs
std_srvs
stereo_msgs
https://github.com/ros/common_msgs/pull/35tf2_bullet
tf2_geometry_msgs
tf2_kdl
tf2_msgs
tf2_py
tf2_tools
timestamp_tools
https://github.com/ros-drivers/driver_common/pull/6trajectory_msgs
https://github.com/ros/common_msgs/pull/35https://github.com/ros/rosdistro/issues/4037#issuecomment-41842366unique_id
urdfdom_headers
urdfdom_py
urdf_parser_plugin
uuid_msgs
https://github.com/ros/rosdistro/issues/4037#issuecomment-41842366visualization_msgs
https://github.com/ros/common_msgs/pull/35xacro
https://github.com/ros/xacro/pull/32xdot
https://github.com/jbohren/xdot/pull/4zeroconf_msgs
https://github.com/stonier/zeroconf_msgs/pull/1