ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

SeaweedFS Snap 打包实战:基于 snapcraft.yaml 从本地构建到 Snap Store 发布

SeaweedFS Snap 打包实战:基于 snapcraft.yaml 从本地构建到 Snap Store 发布 分布式文件系统对象存储存储【免费下载链接】seaweedfsSeaweedFS is a distributed storage system for object storage (S3), file systems, and Iceberg tables, designed to handle billions of files with O(1) disk access and effortless horizontal scaling.项目地址https://gitcode.com/GitHub_Trending/se/seaweedfs点击查看免费下载导读本文以仓库中 snap/README.md 与 snap/snapcraft.yaml 为核心系统讲解如何将 SeaweedFS 打包为 Snap 跨发行版软件包从 snapcraft.yaml 的逐项解析、本地构建与安装、受限沙箱环境下的配置生成与运行到发布 Snap Store 各风险渠道edge/beta/candidate/stable的完整流程。读完本文你将掌握一套可复制的 Snap 化 SeaweedFS 构建与分发方案并理解 strict 约束模式下weed命令的实际使用差异。一、为什么用 Snap 打包 SeaweedFSSnap 是 Canonical 推出的跨发行版 Linux 软件打包格式。与 .deb/.rpm 等传统包不同一个 Snap 包内联了应用及其运行环境依赖可以安装到 Ubuntu 14.04 起的所有 LTS/非 LTS 版本也支持 Debian、Manjaro、Fedora、OpenSUSE 等主流发行版。对 SeaweedFS 这类面向分布式文件系统的服务而言Snap 化带来的直接收益包括一套包处处安装无需为每个发行版单独维护依赖与启动脚本自动更新可控通过 Snap Store 的渠道channel机制你可以按自己的节奏向用户推送更新安全沙箱采用 strict 严格约束模式默认隔离应用与宿主系统资源仅通过声明的 plugs接口开放网络、家目录等访问能力。二、snapcraft.yaml 配置逐项解析snapcraft.yaml是 Snap 打包的构建清单位于 snap/snapcraft.yaml其结构如下# Name of snap as registered in the store name: seaweedfs # Automatically derive snap version from git tags version: git # Short human readable name as seen in snap find $SNAPNAME summary: SeaweedFS # Longer multi-line description found in snap info $SNAPNAME description: | SeaweedFS is a simple and highly scalable distributed file system, to store and serve billions of files fast! SeaweedFS implements an object store with O(1) disk seek, transparent cloud integration, and an optional Filer with POSIX interface, supporting S3 API, Rack-Aware Erasure Coding for warm storage, FUSE mount, Hadoop compatible, WebDAV. # Grade is stable for snaps expected to land in the stable channel grade: stable # Uses the strict confinement model and uses interfaces to open up access to # resources on the target host confinement: strict2.1 元数据字段字段值作用nameseaweedfsSnap Store 中注册的包名全局唯一决定snap install seaweedfs的安装名称versiongit自动从 git tag 派生版本号也可显式写死如0.99以锁定发布版本summarySeaweedFS简短描述出现在snap find $SNAPNAME的搜索结果中description多行文本详细介绍来自snap info $SNAPNAME显示的长描述gradestable表示该包面向 stable 渠道可进入 Snap Store 正式发布审查confinementstrict严格约束模式应用运行在受限沙箱中仅通过 plugs 接口访问宿主资源2.2 parts如何构建应用parts: seaweedfs: after: [go] plugin: go source: . go-importpath: github.com/seaweedfs/seaweedfs go: source-tag: go1.14plugin: gosnapcraft 内置的 Go 插件自动识别go.mod/go install流程完成构建source: .以 snap 目录所在仓库根为源码源即 SeaweedFS 主仓库go-importpath告诉插件当前源码对应的 Go 导入路径snapcraft 会将其放入GOPATH的对应位置后执行构建after: [go]声明依赖另一个名为go的 part。该 part 通过source-tag: go1.14引导一个较新版本的 Go 工具链满足 SeaweedFS 的编译要求仓库根目录的 Makefile 采用cd weed; go install方式产出名为weed的单一二进制Snap 打包正是将该二进制封装进bin/下。2.3 apps暴露给宿主的命令apps: weed: command: bin/weed plugs: - network - network-bind - home - removable-mediacommand: bin/weed指向 $SNAP 目录内的bin/weed可执行文件由于 app 名weed与 snap 名seaweedfs不同安装后命令以命名空间形式暴露为seaweedfs.weed可通过 Snap Store 申请 alias 简化成weedplugs声明权限接口network/network-bind允许对外发起网络请求并监听端口SeaweedFS 的 master/volume/filer 服务与 gRPC 通信依赖此二者home可读写用户家目录默认自动连接removable-media访问可移动存储介质默认不自动连接需用户在桌面环境手动授权。三、本地构建与安装本地测试步骤snap/README.md记录了在 Ubuntu 16.04 虚拟机上的完整验证流程这些命令在任意支持 snapcraft 的发行版上同样适用# 1. 安装 snapcraft 构建工具classic 模式下不受严格约束 snap install snapcraft --classic # 2. 克隆 SeaweedFS 仓库 git clone https://github.com/popey/seaweedfs cd seaweedfs # 3. 切换到含 snapcraft 配置的分支 git checkout add-snapcraft # 4. 执行构建产出 .snap 文件 snapcraft构建默认基于 master 分支最新提交生成产出的包名形如seaweedfs_0.99git30.79371c0-dirty_amd64.snap其中0.99git30.79371c0-dirty由version: git从 git 历史自动推导dirty表示存在未提交修改。若需要固定版本可先 checkout 到稳定 release 再构建。安装该本地产物snap install seaweedfs_0.99git30.79371c0-dirty_amd64.snap --dangerous--dangerous是必需的因为它没有经过 Snap Store 的审查签名流程仅用于本地或 CI 内部验证。四、strict 沙箱下的配置生成与运行Snap 严格约束下应用的家目录被重定向到~/snap/seaweedfs/current/因此配置文件的存放位置与传统安装不同。4.1 生成示例配置# 先创建配置目录 mkdir ~/snap/seaweedfs/current/.seaweedfs # 生成 filer 配置模板 seaweedfs.weed scaffold ~/snap/seaweedfs/current/.seaweedfs/filer.toml注意原文档中的~/snap/seaweed/current/为笔误实际路径应为 snap 名seaweedfs对应的~/snap/seaweedfs/current/。weed scaffold是 SeaweedFS 内置的配置生成命令见 weed/command/scaffold.go不带-output时把完整配置模板打印到 stdout支持通过重定向或-output参数落盘。其-config参数可生成filer|notification|replication|security|master|volume|shell|credential|admin共 9 类配置模板源文件位于 weed/command/scaffold 目录例如 filer.toml、master.toml。生成的配置还支持通过环境变量覆盖规则为变量名加WEED_前缀、全部大写、.替换为_如WEED_MYSQL_PASSWORD可覆盖 filer.toml 中 mysql 密码。4.2 启动服务与运行基准测试# 启动单机一体化服务master volume filer seaweedfs.weed server # 对运行中的服务执行读写基准测试 seaweedfs.weed benchmarkweed server的入口实现在 weed/command/server.go默认启动 master9333与 volume server可通过-filer、-s3、-volume.max、-master.volumeSizeLimitMB等参数按需叠加 filer 或 S3 网关weed benchmark的实现在 weed/command/benchmark.go默认以-c16并发、-n1024*1024文件数、-size1024字节对空系统执行批量写后随机读输出吞吐与延迟百分位统计测试产生的数据存放在benchmarkcollection 中可通过http://localhost:9333/col/delete?collectionbenchmark清理。所有命令实际都经由 weed/weed.go 的主入口分发到weed/command注册的各个子命令Snap 化后仅是命令名从weed变为命名空间限定的seaweedfs.weed其余行为与源码编译安装完全一致。五、发布到 Snap Store 的完整流程构建成功后可按以下流程将 Snap 发布给最终用户对应snap/README.md中 If landed, you will need to 一节# 1. 在 snapcraft.io 注册账号并在本地登录 snapcraft login # 2. 注册 seaweedfs 名称全局唯一 snapcraft register seaweedfs # 3. 推送构建产物到 edge 渠道 snapcraft push seaweedfs_0.99git30.79371c0-dirty_amd64.snap --release edge # 4. 在干净的 Ubuntu 16.04 机器上验证安装 snap install seaweedfs --edge5.1 渠道channels与风险等级Snap Store 以“渠道”承载不同风险等级的发布渠道用途edge托管 git master 上的最新构建适合早期验证也可作为--release edge的推送目标beta/candidate可选的中间风险级别用于小范围公测与发布候选验证stable正式稳定发布渠道用户默认安装即获得该渠道版本实践中推荐的节奏是先在 edge 渠道持续推送 master 构建并完成验证确认无误后再向 beta/candidate 推进最后把稳定版本发布到 stable 渠道并同步完善 Store 页面与推广材料。5.2 关于 alias 与后续支持由于 snap 名与命令名不一致用户需要输入seaweedfs.weed。若包正式进入 Snap Store可向 snapcraft 论坛申请 alias将seaweedfs.weed直接简化为weed与源码编译安装时的使用习惯保持一致。六、构建与发布的可替代路径snap/README.md指出除本地snapcraft构建外还可以选用CI 系统在 Travis CI、CircleCI 等流水线中执行snapcraft并推送产物实现提交即发布Snapcraft 免费构建服务build.snapcraft.io将 GitHub 仓库接入后由官方云构建服务自动产出 Snap 并托管。这些路径与本地流程共用同一份 snapcraft.yaml无需额外改动。七、小结本文完整覆盖了 SeaweedFS Snap 打包的四个环节理解配置snapcraft.yaml 的元数据、parts、apps 三大部分、本地构建安装snapcraft 构建 --dangerous本地安装、沙箱内使用在~/snap/seaweedfs/current/下生成配置并运行server/benchmark、发布运营register → push → 渠道升级 → 申请 alias。Snap 严格约束下唯一的差异是家目录重定向与命令名命名空间化核心能力与仓库源码完全一致可作为跨发行版分发 SeaweedFS 的可靠方案。进一步参考snap/snapcraft.yaml —— 完整打包清单weed/command/scaffold.go —— 配置生成命令实现weed/command/server.go ——weed server服务启动实现weed/command/benchmark.go ——weed benchmark基准测试实现Makefile —— 常规源码构建与安装入口赞分享分布式文件系统对象存储存储【免费下载链接】seaweedfsSeaweedFS is a distributed storage system for object storage (S3), file systems, and Iceberg tables, designed to handle billions of files with O(1) disk access and effortless horizontal scaling.项目地址https://gitcode.com/GitHub_Trending/se/seaweedfs点击查看免费下载相关推荐Dogecoin Core Snap 打包与分发完整指南从本地构建到 Snap Store 发布Dogecoin Core Snap 打包与分发完整指南从本地构建到 Snap Store 发布 本文围绕 Dogecoin 仓库中的 contrib/sna区块链electron-builder Snap 打包完整指南从 snapcraft 配置到 Snap Store 发布electron builder Snap 打包完整指南从 snapcraft 配置到 Snap Store 发布 Snap 是 Ubuntu / Linux构建工具桌面应用开发工具Etherpad Snap 打包全指南从 snapcraft 配方到 Snap Store 发布与运维Etherpad Snap 打包全指南从 snapcraft 配方到 Snap Store 发布与运维 Etherpad 是知名的实时协作文档编辑器本指南以后端协同办公WebSocket前端富文本上一篇SemVer版本工具生态gh_mirrors/ve/version周边工具下一篇如何四步给 AzerothCore-WoTLK 加一条自定义 GM 命令ChatCommand 框架完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表