源码编译安装 ganesha

简介

  • 系统环境:CentOS 7.5
  • ceph:luminous
  • nfs-ganesha:v2.6 stable

安装步骤

安装依赖

  • 首先需要安装编译会用到的公共库
1
  yum install gcc git cmake autoconf libtool bison flex doxygen openssl-devel gcc-c++ krb5-libs krb5-devel libuuid-devel nfs-utils -y

如果是使用 Ubuntu 系统,主要有以下几个包不同

  • gcc-c++ -> g++
  • libuuid-devel -> uuid-dev
  • nfs-utils -> nfs-kernel-server
  • 如果要生成 FSAL_RGW 模块,需要安装 librgw2-devel
1
  yum install librgw2-devel -y
  • 如果要生成 FSAL_CEPH 模块,需要安装 libcephfs1-devel
1
  yum install libcephfs-devel -y

源码下载

克隆源码到本地

1
git clone -b V2.6-stable https://github.com/nfs-ganesha/nfs-ganesha.git --recursive

编译

  • cmake nfs-ganesha 源码

    • 如果需要生成 FSAL_RGW 模块,则在编译选项中添加: -DUSE_FSAL_RGW=ON
    • 如果需要生成 FSAL_CEPH 模块,则在编译选项中添加: -DUSE_FSAL_CEPH=ON
1
2
3
4
5
  cd nfs-ganesha
cd src/
mkdir build
cd build/
cmake -DUSE_FSAL_RGW=ON -DUSE_FSAL_CEPH=ON ../
  • cmake 的过程中会有以下输出
 1
2
3
4
5
6
7
8
9
10
11
12
13
  -- Looking for ceph_ll_lookup_root in cephfs - found
-- Found cephfs libraries: /usr/lib64/libcephfs.so
-- Found CEPHFS: /usr/include
-- Looking for rgw_mount in rgw
-- Looking for rgw_mount in rgw - found
-- Found rgw libraries: /usr/lib64/librgw.so
-- Found RGW: /usr (found suitable version "1.1", minimum required is "1.1")
...
-- USE_FSAL_CEPH = ON
-- USE_FSAL_CEPH_MKNOD = OFF
-- USE_FSAL_CEPH_SETLK = OFF
-- USE_FSAL_CEPH_LL_LOOKUP_ROOT = ON
-- USE_FSAL_RGW = ON

请确保 -- USE_FSAL_CEPH 为 ON ,以及 -- USE_FSAL_RGW 为 ON

  • 在 build 目录下进行编译和安装
1
2
  make
make install

PS: 在 make install 生成的输出中,可以看到:

– Up-to-date: /usr/share/doc/ganesha/config_samples/rgw.conf … – Up-to-date: /usr/share/doc/ganesha/config_samples/ceph.conf

这两个文件就是配置将RGWCephFS配置为ganesha-nfs的配置模板

配置 service

将 nfs-ganesha 源码目录下的 nfs-ganesha/src/scripts/systemd 目录下的 service 文件复制到系统 /usr/lib/systemd/system/ 目录下,将 nfs-ganesha 配置为系统服务让 systemd 接管,然后设置开机自启

1
2
3
4
5
cd nfs-ganesha/src/scripts/systemd
cp nfs-ganesha-config.service /usr/lib/systemd/system/nfs-ganesha-config.service
cp nfs-ganesha.service.el7 /usr/lib/systemd/system/nfs-ganesha.service
cp nfs-ganesha-lock.service.el7 /usr/lib/systemd/system/nfs-ganesha-lock.service
systemctl enable nfs-ganesha

The DBUS Interface

配置系统 DBUS 服务(编译安装需要手动执行这个过程)

  • 将文件 src/scripts/ganeshactl/org.ganesha.nfsd.conf 复制到该目录 /etc/dbus-1/system.d/ 。需要重新启动 DBus 服务(messagebus)才能加载此文件
1
2
  cp src/scripts/ganeshactl/org.ganesha.nfsd.conf /etc/dbus-1/system.d/
systemctl restart messagebus
  • 重启 nfs-ganesha 服务,因为与 DBus 服务器的连接只在服务初始化时执行,所以如果之前忘了复制 org.ganesha.nfsd.conf 文件就需要重启 nfs-ganesha 服务
1
  systemctl restart nfs-ganesha
  • 可查看 nfs-ganesha 日志观察服务是否正常启动运行,通常是/var/log/ganesha/ganesha.log
1
  tail -f /var/log/ganesha/ganesha.log

编辑配置文件

其实这一步可以略过的,只是为了后面 Check Export 能检测到一个挂载点而已,如果这一步不配置,manila 也会通过 SSH 连接到主机对每个 share 进行单独的配置文件的添加

编辑 /etc/ganesha/ganesha.conf 文件,写入以下内容

 1
2
3
4
5
6
7
8
9
10
11
12
EXPORT
{
Export_ID=1;
Path = "/";
Pseudo = /;
Access_Type = RW;
NFS_Protocols = 4;
Transport_Protocols = TCP;
FSAL {
Name = CEPH;
}
}

启动 nfs-ganesha 服务

  • 编译安装有个坑,就是少了个 nfs-ganesha-ceph 包,导致 manila 传递过来的命令无法正常执行,需要单独使用 yum 命令进行安装(因为我没找到源码地址,也没法自己编译安装了,所以编译安装 nfs-ganesha 还不如直接用添加源的方式进行安装···)
    经测试这步可以省略:
1
  yum install nfs-ganesha-ceph
  • 执行以下命令重新启动 nfs-ganesha
1
  systemctl restart nfs-ganesha
  • 使用以下命令查看 nfs-ganesha 服务是否正常运行
1
  systemctl status nfs-ganesha

Check Export

使用以下命令检测挂载点

1
2
3
4
[root@c1 ~]# showmount -e
Export list for c1:
/ (everyone)
[root@c1 ~]#

参考链接

源码编译安装 ganesha的更多相关文章

  1. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  2. 源码编译安装 MySQL 5.5.x 实践

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  3. 烂泥:mysql5.5数据库cmake源码编译安装

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 以前也写过一篇有关mysql5.0源码编译的文章,该文章为<烂泥:mysql5.0数据库源码编译安装>.但是MySQL自5.5版本以后,就开 ...

  4. Centos7.X 源码编译安装subversion svn1.8.x

    说明:SVN(subversion)的运行方式有两种:一种是基于Apache的http.https网页访问形式:还有一种是基于svnserve的独立服务器模式.SVN的数据存储方式也有两种:一种是在B ...

  5. centos6.5环境源码编译安装mysql5.6.34

    centos6.5环境源码编译安装mysql5.6.34 源码下载地址http://dev.mysql.com/downloads/mysql/5.6.html#downloads 选择Generic ...

  6. centos 6.5源码编译安装subversion 1.8.10

    一.简介 CentOS 6.5的yum源可以安装的SVN客户端版本太低了,1.6.11,所以需要升级到1.8.10,而官网有没有找到1.8.10的安装包,只能选择源码编译安装. 二.安装步骤 参考官网 ...

  7. Linux环境PostgreSQL源码编译安装

    Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...

  8. 总结源码编译安装mysql

    最近在学习源码编译安装LAMP.LNMP时,一直遇到一个难题,就是就是mysql无论怎么源码编译安装,到最后启动服务都提示"Starting MySQL.The server quit wi ...

  9. Linux下源码编译安装rpy2

    R(又称R语言)是一款开源的跨平台的数值统计和数值图形化展现工具.rpy2是Python直接调用R的第三方库,它可以实现使用python读取R的对象.调用R的方法以及Python与R数据结构转换等.这 ...

随机推荐

  1. 你能说说Java中Comparable和Comparator的区别吗

    之前面试中被问到这个问题,当时不屑(会)回答,下来特意查了查,整理如下. Java 中为我们提供了两种比较机制:Comparable 和 Comparator,二者都是用来实现对象的比较.排序. 下面 ...

  2. Arduino 将 String 转化为 int

    Arduino 将 String 转化为 int 函数:toInt() 实例: String my_str = "; int my_int = my_str.toInt();

  3. 初识JVM内存模型

    计算机内存模型 在程序运行时,CPU通过访问主存获取数据,但随着CPU的快速发展,CPU访问速度越来越高,硬件无法满足CPU的条件下,大多内存加入了高速缓存机制,不同CPU都有对应的多级(一般为三)缓 ...

  4. SpringBoot学习(一)—— idea 快速搭建 Spring boot 框架

    简介 优点 Spring Boot 可以以jar包的形式独立运行,运行一个Spring Boot 项目只需要通过 java -jar xx.jar 来运行. Spring Boot 可以选择内嵌Tom ...

  5. 使用boost实现线程池thread pool | boost thread pool example

    本文首发于个人博客https://kezunlin.me/post/f241bd30/,欢迎阅读! boost thread pool example Guide boost thread pool ...

  6. 如何进行Flink项目构建,快速开发Flink应用程序?

    项目模板 Flink应用项目可以使用Maven或SBT来构建项目,Flink针对这些构建工具提供了相应项目模板. Maven模板命令如下,我们只需要根据提示输入应用项目的groupId.artifac ...

  7. 使用runc直接运行容器

    组件containerd负责集群节点上容器的生命周期管理,并向上为docker daemon提供gRPC接口,containerd依靠runC去创建容器进程.而在容器启动之后,runC进程会退出. 可 ...

  8. TypeError: Cannot read property '_t' of undefined (VUE + ElementUI + i18n)

    在使用vue的ElementUI库,在多语言时报错: TypeError: Cannot read property '_t' of undefined 错误是在点菜单栏时随机抛出的,F12抓不到,只 ...

  9. 有效的减少代码中太多的if、else?-策略模式

    写这篇文章的目的和上一篇单例模式一样,策略模式也是一种常用的设计模式,太多的if-else不仅看着不太美观而且不好维护,对于自己来说也等于复习了一遍策略模式.先说一下策略 模式的定义: 策略模式封装了 ...

  10. JVM(2)--深入理解java对象创建始终

    java对象探秘 java是一门面向对象的语言,我们无时无刻不在创建对象和使用对象,那么java虚拟机是如何创建对象的?又是如何访问对象的?java对象中究竟存储了什么运行时所必需的数据?在学习了ja ...