Name: ubs-optimizer
Version: 0.1.0
Release: k5.1%{?dist}
Summary: Package containing binaries and object files
License: Proprietary
Source0: %{package_name}.tar.gz
BuildRoot: %{_buildirootdir}/%{name}_%{version}-build
BuildRequires: clang cmake make libbpf-devel bpftool rapidjson-devel
%global debug_package %{nil}
%global __os_install_post %{nil}
%description
昇腾虚拟化场景瓶颈识别、调优下发
%pre
if [ ! -f /proc/config.gz ]; then
echo "[Error] Config file: '/proc/config.gz' not exists, please confirm the kernel access configuration enabled."
exit 1
fi
check_bpf_config() {
local config_name=$1
local status=$(zcat /proc/config.gz | grep "^${config_name}=")
if [ -z "$status" ]; then
echo "${config_name} not exists."
return 1
elif [[ "$status" == *"=y" || "$status" == *"=m" ]]; then
echo "${config_name} enabled (${status})"
return 0
else
echo "${config_name} disabled (${status})"
return 1
fi
}
echo "Checking BPF configs..."
check_bpf_config "CONFIG_BPF"
bpf_status=$?
check_bpf_config "CONFIG_BPF_SYSCALL"
bpf_syscall_status=$?
check_bpf_config "CONFIG_BPF_EVENTS"
bpf_events_status=$?
check_bpf_config "CONFIG_BPF_JIT"
bpf_jit_status=$?
# 汇总结果
if [ $bpf_status -eq 0 ] && [ $bpf_syscall_status -eq 0 ] && [ $bpf_events_status -eq 0 ] && [ $bpf_jit_status -eq 0 ]; then
echo "Your kernel is ready."
else
echo "[Error] CONFIG_BPF should be enabled. Please make sure configs [CONFIG_BPF, CONFIG_BPF_SYSCALL, CONFIG_BPF_EVENTS, CONFIG_BPF_JIT] enabled and recompile kernel."
exit 1
fi
echo "Checking vsock config..."
if lsmod | grep -q vsock; then
echo "OK"
else
echo "[Error] vsock not ready. Please refer to the user guide Chapter 4.1 to enable the vsock module."
exit 1
fi
%prep
%setup -c -n %{name}_%{version}
%install
# 创建目标目录
mkdir -p %{buildroot}/usr/local/sbin/ubs-optimizer
# 将解压后的文件移动到目标目录
cp -f %{_builddir}/%{name}_%{version}/rpm/usr/local/sbin/ubs-opt %{buildroot}/usr/local/sbin/
cp -f %{_builddir}/%{name}_%{version}/rpm/usr/local/sbin/ubs-opt-guard %{buildroot}/usr/local/sbin/
cp -f %{_builddir}/%{name}_%{version}/rpm/usr/local/sbin/ubs-opt-tuner %{buildroot}/usr/local/sbin/
cp -f %{_builddir}/%{name}_%{version}/rpm/usr/local/sbin/ubs-optimizer/config.json %{buildroot}/usr/local/sbin/ubs-optimizer/
%files
%dir %attr(600,root,root) /usr/local/sbin/ubs-optimizer
%attr(500,root,root) /usr/local/sbin/ubs-opt
%attr(500,root,root) /usr/local/sbin/ubs-opt-guard
%attr(500,root,root) /usr/local/sbin/ubs-opt-tuner
%attr(600,root,root) /usr/local/sbin/ubs-optimizer/config.json
%preun
if [ $1 -eq 0 ]; then
if [ -f /usr/local/sbin/ubs-optimizer/ubs-opt-guard.pid ]; then
PID=$(cat /usr/local/sbin/ubs-optimizer/ubs-opt-guard.pid)
kill $PID 2>/dev/null || true
sleep 2
kill -9 $PID 2>/dev/null || true
rm -f /usr/local/sbin/ubs-optimizer/ubs-opt-guard.pid
fi
if [ -f /usr/local/sbin/ubs-optimizer/ubs-opt.pid ]; then
PID=$(cat /usr/local/sbin/ubs-optimizer/ubs-opt.pid)
kill $PID 2>/dev/null || true
sleep 2
kill -9 $PID 2>/dev/null || true
rm -f /usr/local/sbin/ubs-optimizer/ubs-opt.pid
fi
fi