#!/bin/bash
platform_lerobot_profiles() {
echo "core,ros,hardware,openeuler"
}
platform_prepare_host() {
log_warn "openEuler detected. Setting ROS_OS_OVERRIDE=rhel:8 for rosdep compatibility."
export ROS_OS_OVERRIDE=rhel:8
ensure_openeuler_builtin_repos
ensure_openeuler_extras_repo
ensure_openeuler_gpg_key
log_info "Installing openEuler host packages required by the workspace..."
run_sudo dnf install -y --nogpgcheck gcc-c++ vim-enhanced ffmpeg-devel libvpx libvpx-devel nlohmann-json-devel
}
platform_install_colcon() {
if command -v pip3 &> /dev/null; then
pip3 install colcon-common-extensions --quiet
else
log_error "pip3 not found, cannot install colcon."
exit 1
fi
}
openeuler_builtin_repos_configured() {
dnf repolist --enabled | awk '
$1 == "everything" { everything = 1 }
$1 == "update" { update = 1 }
$1 == "EPOL" { epol = 1 }
END { exit (everything && update && epol) ? 0 : 1 }
'
}
ensure_openeuler_builtin_repos() {
if openeuler_builtin_repos_configured; then
log_info "Built-in openEuler 24.03 repos already configured."
return 0
fi
log_error "Required built-in openEuler repos are missing (expected: everything, update, EPOL)."
log_error "Please restore /etc/yum.repos.d/openEuler.repo before running setup.sh."
exit 1
}
ensure_openeuler_extras_repo() {
local extras_repo_url
extras_repo_url="https://repo.oepkgs.net/openeuler/rpm/openEuler-24.03-LTS/extras/$(uname -m)"
if dnf repolist --enabled | awk '$1 == "extras" { found = 1 } END { exit found ? 0 : 1 }'; then
log_info "openEuler extras repo already configured."
return 0
fi
log_info "Adding openEuler extras repo required for python3-lttngust..."
run_sudo dnf config-manager --add-repo "${extras_repo_url}"
}
ensure_openeuler_gpg_key() {
if rpm -qi gpg-pubkey'*' 2>/dev/null | grep -q 'openEuler'; then
log_info "openEuler RPM GPG key already imported."
return 0
fi
local arch tmp key_url
arch=$(uname -m)
tmp=$(mktemp)
for key_url in \
"https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-24.03-LTS/OS/${arch}/RPM-GPG-KEY-openEuler" \
"https://repo.openeuler.org/openEuler-24.03-LTS/OS/${arch}/RPM-GPG-KEY-openEuler"
do
if curl -fsSL "${key_url}" -o "${tmp}"; then
log_info "Importing openEuler RPM GPG key from ${key_url}..."
run_sudo rpm --import "${tmp}"
rm -f "${tmp}"
return 0
fi
done
rm -f "${tmp}"
log_error "Failed to download the openEuler RPM GPG key from all known mirrors."
exit 1
}
platform_install_python_bootstrap() {
run_sudo dnf install -y --nogpgcheck python3-virtualenv python3-pip python3-devel -q
}
platform_pre_install_rosdeps() {
log_info "Updating dnf package repositories..."
}
platform_get_extra_skip_keys() {
echo "lttng-tools nlohmann-json-dev python3-opencv python3-aiortc gz_ros2_control ros_gz_sim ros_gz_bridge mujoco_ros2_control python3-scipy robot_localization"
}
platform_post_install_rosdeps() {
log_info "Installing python3-scipy (rosdep uses RHEL macro naming on openEuler)..."
run_sudo dnf install -y --nogpgcheck python3-scipy
log_info "Installing graphviz packages for ros2 control topology visualization..."
run_sudo dnf install -y --nogpgcheck graphviz graphviz-devel -q
log_info "Installing remaining tracing tools without rosdep rules..."
run_sudo dnf install -y --nogpgcheck \
ros-humble-ros2trace \
ros-humble-tracetools-analysis \
babeltrace \
python3-babeltrace \
python3-lttngust
}