{"msg":"操作成功","code":200,"data":{"createBy":"admin","createTime":"2026-02-09 16:05:54","updateBy":"admin","updateTime":"2026-02-15 16:07:05","remark":null,"id":125,"articleTitle":"Linux：搭建私有yum源","articleUrl":"linux_repo","articleThumbnail":"https://www.asumimoe.com/imgfiles/20220908/ee03af4419724d50a127c34d6a588554.png","articleFlag":"0","draftStatus":"1","reprintStatement":"1","articleSummary":"自建 Yum 源的核心是准备一个包含 RPM 包和仓库元数据（repodata）的目录，并通过 file:// 或 http:// 协议让其他机器访问。根据使用场景，主要分为本地单机源和局域网共享源两种。","articleContent":"自建 Yum 源的核心是准备一个包含 RPM 包和仓库元数据（`repodata`）的目录，并通过 `file://` 或 `http://` 协议让其他机器访问。根据使用场景，主要分为**本地单机源**和**局域网共享源**两种。\n\n---\n\n## 一、准备本地 Yum 源（单机使用）\n\n### 1.安装必要工具\n\n首先需要安装 `createrepo` 工具，它负责生成 RPM 包的元数据（依赖关系、包信息等）。\n\n```bash\n# 安装 createrepo \nyum install -y createrepo\n```\n\n### 2.创建存放 RPM 包的目录\n\n```bash\n# 创建目录，例如 /opt/localrepo\nmkdir -p /opt/localrepo\n```\n\n### 3.向目录中放置 RPM 包\n\n有多种方式获取 RPM 包：\n\n- **从 CentOS 安装光盘复制**（适合离线环境）：\n  挂载光盘镜像，复制 `Packages` 目录下的所有或部分 RPM 包。\n\n  ```bash\n  mount /dev/cdrom /mnt\n  cp /mnt/Packages/*.rpm /opt/localrepo/\n  umount /mnt\n  ```\n\n- **从已安装的系统缓存中获取**：\n\n  ```bash\n  cp /var/cache/yum/x86_64/7/*/packages/*.rpm /opt/localrepo/\n  ```\n\n- **手动下载需要的 RPM**（例如从 https://pkgs.org 或官方源）：\n\n  ```bash\n  wget -P /opt/localrepo/ http://mirror.centos.org/centos/7/os/x86_64/Packages/nginx-1.20.1-10.el7.x86_64.rpm\n  ```\n\n### 4.生成仓库元数据（repodata）\n\n进入仓库目录并运行 `createrepo` 命令：\n\n```bash\ncd /opt/localrepo\ncreaterepo .\n```\n\n执行成功后，目录下会多出一个 `repodata` 文件夹，里面包含 `repomd.xml` 等元数据文件。\n\n### 5.创建本地 Yum 配置文件\n\n在 `/etc/yum.repos.d/` 下新建一个 `.repo` 文件，例如 `local.repo`：\n\n```bash\nvi /etc/yum.repos.d/local.repo\n```\n\n写入以下内容：\n\n```bash\n[local-repo]\nname=Local Yum Repository\nbaseurl=file:///opt/localrepo # 使用file://协议指向你的本地目录\nenabled=1\ngpgcheck=0 #对于自己维护的本地仓库，通常不需要 GPG 签名验证\n```\n\n### 6.测试本地源\n\n```bash\n# 清除 Yum 缓存\nyum clean all\n\n# 生成缓存（使新仓库生效）\nyum makecache\n\n# 列出可用仓库，应该能看到 local-repo\nyum repolist\n\n# 尝试安装一个本地仓库中的包（例如已经放入的 nginx）\nyum install nginx\n```\n\n如果能正常安装，说明本地源配置成功。\n\n---\n\n## 二、搭建局域网 HTTP 共享 Yum 源\n\n如果你希望局域网内的其他机器也能使用这个源，可以将仓库目录通过 HTTP 服务共享。\n\n### 1.在源服务器上安装并配置 Nginx\n\n```bash\n# 安装 nginx\nyum install -y nginx\n\n# 启动并设置开机自启\nsystemctl start nginx\nsystemctl enable nginx\n```\n\n### 2.修改 Nginx 配置，使其能访问仓库目录\n\n编辑 Nginx 配置文件 `/etc/nginx/nginx.conf` 或创建一个新的配置文件 `/etc/nginx/conf.d/yum-repo.conf`，添加一个 `server` 块或 `location` 块。\n\n**方法 A：通过 location 别名暴露**（推荐，不修改默认站点）\n\n```nginx\nserver {\n    listen 80;\n    server_name _;   # 可替换为你的服务器 IP 或域名\n\n    location /yum-repo/ {\n        alias /opt/localrepo/;   # 注意末尾的斜杠\n        autoindex on;            # 开启目录列表，方便浏览\n    }\n}\n```\n\n**方法 B：将仓库目录设为新的 root**（独立站点）\n\n```nginx\nserver {\n    listen 80;\n    server_name repo.example.com;\n    root /opt/localrepo;\n    autoindex on;\n}\n```\n\n保存后测试配置并重载 Nginx：\n\n```bash\nnginx -t\nsystemctl reload nginx\n```\n\n### 3.验证 HTTP 访问\n\n在浏览器中访问 `http://<IP>/yum-repo/`（location方式）或`http://<IP>/yum-repo/opt/localrepo/`（root根目录方式），应该能看到文件列表，且 `repodata` 目录可以打开。\n\n### 4.客户端配置\n\n在其他需要访问此源的机器上，创建 `/etc/yum.repos.d/network.repo` 文件：\n\n```bash\nvi /etc/yum.repos.d/network.repo\n```\n\n添加以下内容（注意 `baseurl` 的协议和路径要与 Nginx 暴露的一致）：\n\n```bash\n[network-repo]\nname=Network Yum Repository\nbaseurl=http://<源服务器IP>/yum-repo/\nenabled=1\ngpgcheck=0\n```\n\n然后测试：\n\n```bash\nyum clean all\nyum makecache\nyum repolist\n```\n\n如果成功，客户端就可以从你的自建源安装软件了。\n\n---\n\n## 三、维护与更新仓库\n\n### 1.添加新的 RPM 包\n\n1. 将新的 `.rpm` 文件复制到 `/opt/localrepo/`。\n\n2. 更新仓库元数据（增量更新）：\n\n   ```bash\n   createrepo --update /opt/localrepo\n   ```\n\n   `--update` 选项只重新生成变更的部分，比完全重新生成快很多。\n\n### 2.定期同步公共源（可选）\n\n如果你希望建立一个完整的公共源镜像（例如 CentOS 基础源），可以使用 `rsync` 或 `reposync` 工具。这里简单介绍 `reposync`：\n\n```bash\n# 安装 yum-utils（包含 reposync）\nyum install -y yum-utils\n\n# 同步一个远程仓库到本地目录（例如同步 base 源）\nreposync --repoid=base --download_path=/opt/localrepo/ --downloadcomps --download-metadata\n\n# 同步后需要重新生成 repodata（有时 reposync 会自动处理，但手动执行更稳妥）\ncreaterepo /opt/localrepo\n```\n\n注意：同步整个公共源会占用大量磁盘空间，请根据需求筛选。\n\n### 3.清理过期包\n\n如果删除了仓库中的某些 RPM 包，需要重新生成元数据以反映变化：\n\n```bash\ncreaterepo --update /opt/localrepo\n```","categoryId":1,"viewCount":41,"categoryName":"Linux","author":"球接子","authorAvatar":null,"tagIds":[20],"tagNames":["Linux进阶"]}}