Euler22.10源码构建nfs-ganesha rpm

安装依赖

dnf install -y \
rpm-build rpmdevtools git cmake make gcc gcc-c++ \
bison flex libuuid-devel libblkid-devel libcap-devel \
libacl-devel dbus-devel krb5-devel openssl-devel \
python3-devel python3-setuptools \
pkgconfig doxygen userspace-rcu-devel libnsl2-devel

安装 GlusterFS 客户端及开发头文件

dnf install -y glusterfs-client glusterfs-devel glusterfs-api glusterfs-api-devel

下载源码

cd ~
git clone --recursive https://github.com/nfs-ganesha/nfs-ganesha.git
cd nfs-ganesha
# 建议切换到稳定分支或 next 分支
git checkout next

cmake构建配置

mkdir build && cd build
cmake ../src \
-DUSE_GSS=ON \
-DUSE_9P=ON \
-DUSE_DBUS=ON \
-DUSE_FSAL_VFS=ON \
-DUSE_FSAL_GLUSTER=ON \
-DUSE_CLUSTER=ON \
-DCMAKE_INSTALL_PREFIX=/usr

编译报错

/root/nfs-ganesha/src/support/client_mgr.c: In function ‘is_base_client_exact_match’:
/root/nfs-ganesha/src/support/client_mgr.c:1362:4: error: a label can only be part of a statement and a declaration is not a statement
1362 | CIDR cli_cidr = *cli->client.network.cidr;
| ^~~~
make[2]: *** [MainNFSD/CMakeFiles/MainServices.dir/build.make:202: MainNFSD/CMakeFiles/MainServices.dir/__/support/client_mgr.c.o] Error 1
make[2]: *** Waiting for unfinished jobs....

解决方法

#vi /root/nfs-ganesha/src/support/client_mgr.c +1362
case NETWORK_CLIENT:
CIDR cli_cidr = *cli->client.network.cidr;

normalize_v4_mapped_cidr(&cli_cidr);
if (cidr && cidr_equals(&cli_cidr, cidr))
goto found;
break;
#修改为
case NETWORK_CLIENT:
{
CIDR cli_cidr = *cli->client.network.cidr;

normalize_v4_mapped_cidr(&cli_cidr);
if (cidr && cidr_equals(&cli_cidr, cidr))
goto found;
break;
}

构建rpm

# 编译源码(可选,cpack 会自动处理,但手动编译可提前发现错误)
make -j$(nproc)

#生成 RPM 包
make rpm
文章作者: 慕容峻才
文章链接: https://www.acaiblog.top/Euler22-10源码构建nfs-ganesha-rpm/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿才的博客
微信打赏
支付宝打赏