软件安装
需要安装三个软件
安装macfuse
github地址:https://github.com/s3fs-fuse/s3fs-fuse
使用brew安装
brew install --cask macfuse
#brew install gromgit/fuse/s3fs-mac
安装macfuse需要修改mac系统的安全策略,根据提示操作就OK
ossfs安装
本安装参考该博主的文档:https://www.itpony.com/show/58.html
阿里云官方文档:https://help.aliyun.com/zh/oss/developer-reference/use-ossfs-to-mount-an-oss-bucket-to-the-local-directories-of-an-ecs-instance/?spm=5176.8466032.help.dexternal.78ce1450dPXGIL
目前阿里云没有提供Mac直接安装的方法,需要自己手动编译
github地址:https://github.com/aliyun/ossfs
- 先clone下仓库
git clone https://github.com/aliyun/ossfs.git
- 安装编译需要的依赖
brew install autoconf automake libtool libxml2 pkg-config
- 编译安装
./autogen.sh
./configure
sudo make
sudo make install
PS: 我在这里make
的时候报了个错
mix_direct_read_test.cc:74:31: error: no matching function for call to 'min' size_t buf_size = std::min(MB, sub_total_size - offset); ^~~~~~~~ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/min.h:40:1: note: candidate template ignored: deduced conflicting types for parameter '_Tp' ('size_t' (aka 'unsigned long') vs. 'unsigned long long') min(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b) ^ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/min.h:51:1: note: candidate template ignored: could not match 'initializer_list<_Tp>' against 'size_t' (aka 'unsigned long') min(initializer_list<_Tp> __t, _Compare __comp) ^ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/min.h:60:1: note: candidate function template not viable: requires single argument '__t', but 2 arguments were provided min(initializer_list<_Tp> __t) ^ /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1/__algorithm/min.h:31:1: note: candidate function template not viable: requires 3 arguments, but 2 were provided min(_LIBCPP_LIFETIMEBOUND const _Tp& __a, _LIBCPP_LIFETIMEBOUND const _Tp& __b, _Compare __comp) ^ 1 error generated. make[2]: *** [mix_direct_read_test.o] Error 1 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2
根据网上找到的解决方法是:
看起来,编译 ossfs 时出现了一些错误,这可能是由于你的开发环境(特别是 macOS 版本和开发工具集(Xcode 和 Command Line Tools))与 ossfs 源代码中的某些部分不兼容导致的。
具体来说,你在编译 mix_direct_read_test.cc 文件时遇到了一个错误,这个错误是由于 std::min 函数调用的类型推导问题造成的。std::min 函数被用来确定两个值中的较小值,但是在这个调用中,传递给它的两个参数的类型(size_t 和 unsigned long long)是不兼容的,导致 std::min 无法正确地决定应该使用哪种类型。
修复这个问题,你需要对 mix_direct_read_test.cc 文件进行一些微小的修改,以确保给 std::min 函数提供的参数类型是一致的。找到第 74 行:
size_t buf_size = std::min(MB, sub_total_size - offset);
然后更改赋值语句以显式地转换第二个参数的类型,使其与第一个参数(即 MB)的类型 size_t 一致:
size_t buf_size = std::min(MB, static_cast<size_t>(sub_total_size - offset));
然后,你应该能够成功地编译 ossfs。
请注意,手动修改源代码可能会导致其他的、预期之外的问题,特别是在未来如果你需要更新 ossfs 或是你的开发环境时。证实所有 ossfs 的功能在修改后仍然正常是非常重要的,特别是那些涉及到文件读/写操作或网络通信的部分,因为它们可能会受到这种类型的修改的影响。
挂载
可以使用非root挂载,否则每次都要sudo比较麻烦,而且在Finder还看不到。
先查询当前用户的uid和gid,可以使用id
命令来查看:
- 显示当前用户的 uid
id -u $(whoami)
- 获得当前用户的 gid
id -g $(whoami)
创建passwd-ossfs
,可以在当前用户目录下创建一个.passwd-ossfs
,后续通过指定密钥文件进行挂载,文件创建成功后需要设置为600
的权限,否则会被程序会拒绝
sudo sh -c 'echo bucket-test:LTAIbZcdVCmQ****:MOk8x0y9hxQ31coh7A5e2MZEUz**** > ~/.passwd-ossfs'
sudo chmod 600 /etc/passwd-ossfs
上面都做好之后就可以挂载了,可以参考使用下面命令
ossfs your-bucket /Users/mac/oss -o url=http://oss-cn-hangzhou.aliyuncs.com -o passwd_file=/Users/mac/.passwd-ossfs -o uid=501 -o gid=20
命令详细说明:
这个命令用于使用ossfs工具将阿里云的OSS(对象存储服务)挂载到你的本地文件系统。
下面是每个部分的详细解释:
ossfs
:这是你正在运行的程序,也就是阿里云 OSS 的 FUSE (File System in User Space) 工具名称。your-bucket
:这是你的 OSS bucket 的名称。用实际要挂载的 OSS bucket 名词替换 your-bucket。/Users/mac/oss
:这是本地要挂载 OSS bucket 的路径。在这个例子中,OSS bucket 将挂载到 /Users/mac/oss。-o url=http://oss-cn-hangzhou.aliyuncs.com
:这个选项指定您的 OSS bucket 所在的 OSS 区域节点或者 Endpoint。oss-cn-hangzhou.aliyuncs.com 是阿里云 OSS 杭州地区的访问地址。-o passwd_file=/Users/mac/.passwd-ossfs
:这个选项指向一个包含你的 OSS 访问密钥ID和访问密钥的文件,passwd_file 参数后面的值就是这个文件的路径。-o uid=501 -o gid=20
:这两个参数用于设置挂载OSS bucket在本地的所有者用户ID(uid)和组ID(gid),这样可以控制哪些用户和组可以访问这个挂载点。在这个例子中,501 是用户ID,20 是组ID。总的来说,这个命令将 your-bucket OSS 桶挂载到 /Users/mac/oss 目录下,其访问 OSS 的 URL 是 http://oss-cn-hangzhou.aliyuncs.com。访问密钥存储在 /Users/mac/.passwd-ossfs 文件中,挂载的所有者用户ID和组ID分别是501和20.