一、为什么需要本地Conan仓库

在团队开发中,经常会遇到这样的场景:多个开发设备需要共享相同的依赖包,但公司内网没有搭建Conan服务器,或者由于安全策略限制无法连接外网。这时候,如果每个设备都从互联网下载相同的包,不仅浪费带宽,还会因为网络波动导致构建失败。更麻烦的是,有些设备可能根本无法访问外网(比如生产环境服务器)。

这时候,本地Conan包仓库就能派上大用场。它相当于一个本地缓存,所有设备都可以从这里获取依赖包,无需重复下载。想象一下,就像在公司内部放了一个共享U盘,所有人都能从中获取需要的工具,既省时又省力。

二、搭建本地Conan仓库的基本思路

Conan官方提供了conan_server作为轻量级服务器,但它的功能相对简单,更适合小型团队。如果不想额外部署服务,也可以直接使用本地文件系统作为仓库,通过共享文件夹或网络存储(如NFS、Samba)让多台设备访问。

这里我们以基于文件系统的本地仓库为例,因为它最简单,不需要额外服务,适合快速搭建。

示例1:初始化本地仓库

# 创建本地仓库目录(假设放在 /mnt/conan_repo)
mkdir -p /mnt/conan_repo

# 添加该目录为Conan远程仓库,命名为local_repo
conan remote add local_repo /mnt/conan_repo

示例2:上传包到本地仓库

# 假设我们已经有一个包叫my_lib/1.0.0,打包完成后上传
conan create . my_lib/1.0.0@user/channel  # 先创建包
conan upload my_lib/1.0.0@user/channel -r=local_repo --all  # 上传到本地仓库

三、多设备共享仓库的配置

如果仓库放在/mnt/conan_repo,其他设备如何访问呢?在Linux环境下,可以用NFS或Samba共享该目录;在Windows下,可以用SMB共享。

示例3:通过Samba共享仓库(Linux服务端)

# 安装Samba
sudo apt install samba

# 配置Samba共享(编辑/etc/samba/smb.conf)
[conan_repo]
    path = /mnt/conan_repo
    browsable = yes
    writable = yes
    guest ok = yes

# 重启Samba服务
sudo systemctl restart smbd

示例4:Windows客户端挂载共享

在Windows资源管理器地址栏输入:

\\<服务器IP>\conan_repo

然后映射为网络驱动器(比如Z盘)。

示例5:客户端配置Conan使用共享仓库

# 添加远程仓库(假设共享目录映射为Z盘)
conan remote add local_repo Z:\

四、注意事项与常见问题

  1. 权限问题:确保所有设备对共享目录有读写权限,否则上传或下载会失败。
  2. 并发冲突:如果多人同时上传包,可能会因文件锁导致失败,建议约定上传时间或使用版本控制。
  3. 存储空间:Conan包可能会占用大量磁盘空间,记得定期清理旧版本。
  4. 网络延迟:如果仓库放在远程存储(如NAS),网络波动可能会影响构建速度。

示例6:清理旧版本包

# 删除my_lib的所有旧版本,只保留最新
conan remove my_lib/* -r=local_repo --old

五、技术方案对比

方案 优点 缺点
文件系统共享 无需额外服务,配置简单 依赖网络存储性能,无用户权限管理
conan_server 轻量级,支持基本认证 功能有限,不适合大规模团队
Artifactory/Nexus 功能强大,支持多格式包管理 需要额外部署和维护

六、总结

本地Conan仓库是解决无服务器环境下多设备共享依赖包的实用方案。虽然不如专业仓库管理系统强大,但对于小型团队或受限环境来说,它简单、灵活、几乎零成本。如果你的团队正面临类似问题,不妨试试这个方案。