Rocky Linux 9 编译ossfs

简介: 介绍如何在Rocky Linux 9下编译阿里云的ossfs,本方法对CentOS 9 stream也适用。

ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享。

运行环境:Rocky Linux release 9.2 (Blue Onyx)

一、依赖包

dnf install gcc-c++ autoconf automake libtool libcurl-devel gettext-devel

二、源码编译libfuse

编译ossfs无法使用系统自带的libfuse,需要下载源码包自行编译,方法如下:

wget https://github.com/libfuse/libfuse/archive/refs/tags/fuse-2.9.9.tar.gz
tar zxvf fuse-2.9.9.tar.gz
cd libfuse-fuse-2.9.9
./makeconf.sh
./configure
makemake install

make时可能会报如下错误:

make[2]: Entering directory '/root/libfuse-fuse-2.9.9/util'  CC       fusermount-fusermount.o
  CC       fusermount-mount_util.o
  CCLD     fusermount
  CC       ulockmgr_server-ulockmgr_server.o
ulockmgr_server.c:127:12: error: conflicting types for ‘closefrom’; have ‘int(int)’
127 | static int closefrom(int minfd)
      |            ^~~~~~~~~
In file included from ulockmgr_server.c:14:
/usr/include/unistd.h:363:13: note: previous declaration of ‘closefrom’ with type ‘void(int)’
363 | extern void closefrom (int __lowfd) __THROW;
      |             ^~~~~~~~~
make[2]: *** [Makefile:509: ulockmgr_server-ulockmgr_server.o] Error 1make[2]: Leaving directory '/root/libfuse-fuse-2.9.9/util'make[1]: *** [Makefile:338: all] Error 2make[1]: Leaving directory '/root/libfuse-fuse-2.9.9/util'make: *** [Makefile:450: all-recursive] Error 1

原因是ulockmgr_server.c第127行定义的函数static int closefrom(int minfd)与/usr/include/unistd.h中的定义冲突了,给ulockmgr_server.c中的函数改个名字就好了。

编译安装好libfuse后,需要修改/etc/ld.so.conf,加入:

vim /etc/ld.so.conf
/usr/local/lib # 自己编译的libfuse安装目录修改后执行ldconfig -v

三、编译ossfs

git clone https://github.com/aliyun/ossfs.git
cd ossfs
# 下面这两步很重要exportPKG_CONFIG_PATH=/usr/lib/pkgconfig:/usr/lib64/pkgconfig/:/usr/local/lib/pkgconfig
pkg-config --modversion fuse
./configure
makemake install

执行configure时可能会报下面的错误:

checking pkg-config is at least version 0.9.0... yeschecking for common_lib_checking... no
configure: error: Package requirements (fuse >=2.8.4 libcurl >=7.0 libxml-2.0 >=2.6 ) were not met:
Package 'fuse', required by 'virtual:world', not found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

原因就是libfuse不兼容,按上面的方法重新编译libfuse即可。


相关文章
|
11天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
29 5
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
84 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
1月前
|
Linux 编译器 C语言
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
【Linux快速入门(一)】Linux与ROS学习之编译基础(gcc编译)
|
19天前
|
Linux
Linux - 如何编译源码安装软件
源码编译安装通常包括三个步骤:1) `./configure` 检测平台特征和依赖项,生成 Makefile;2) `make` 编译源码,生成可执行文件;3) `make install` 将可执行文件安装到指定目录并配置环境变量。
34 0
|
1月前
|
Linux 编译器 C语言
Linux c/c++之多文档编译
这篇文章介绍了在Linux操作系统下使用gcc编译器进行C/C++多文件编译的方法和步骤。
39 0
Linux c/c++之多文档编译
|
1月前
|
Linux 开发工具
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
【Linux快速入门(二)】Linux与ROS学习之编译基础(make编译)
|
3月前
|
监控 机器人 Unix
GoLand——windows下如何编译Linux二进制文件
GoLand——windows下如何编译Linux二进制文件
53 1
GoLand——windows下如何编译Linux二进制文件
|
2月前
|
Linux
用clang编译Linux内核
用clang编译Linux内核
|
3月前
|
Linux C语言
深度探索Linux操作系统 —— 编译过程分析
深度探索Linux操作系统 —— 编译过程分析
28 2
|
3月前
|
Ubuntu Linux Windows
如何在WSL中的ubuntu编译Linux内核并且安装使用ebpf?
请注意,在WSL1中可能会由于内核架构限制而无法成功进行以上过程,WSL2对于Linux内核的完整支持更为合适。此外,部分步骤可能因不同的Linux发行版或内核版本而异。
180 4