自建yum源和apt源

老版本 linux 系统的安装源都不维护消失了,没有源安装一些常用软件比较麻烦,可以使用 iso 镜像文件搭建简易安装源,安装常用软件包

参考文章:yum源的三种搭建方式CentOS 使用iso镜像安装本地 yum 源使用iso镜像设置Ubuntu系统本地apt源Debian如何配置局域网APT软件仓库

yum 源:网络搭建

这里以 Centos7 为例

1)服务器上需要安装有 apache 或 nginx 等服务器,并可以正常访问,这里使用 nginx 为例,服务器 ip 为 192.168.0.211 网站目录为 /var/www/html/

images/image-20240916131036790.png

2)上传 CentOS-7-x86_64-DVD-2009.iso 镜像到服务器上,然后在网站目录下新建一个文件夹,文件夹名随意。

1
mkdir /var/www/html/repo

3)将 iso 镜像挂载到创建的目录下 /var/www/html/repo

1
mount CentOS-7-x86_64-DVD-2009.iso /var/www/html/repo

挂载完成后,repo 目录下会多出一些文件

images/image-20240916131606437.png

4)启动一台 Centos7 服务器,来到 /etc/yum.repos.d 目录下,删除这个目录下的所有文件,创建一个文件 http.repo,写入以下内容。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#yum仓库名,可自定义
[http]
#yum仓库的描述信息
name=repo_for_http
#yum源的网络访问地址。url链接不要填错
baseurl=http://192.168.0.211/repo/
#启用仓库
enabled=1
# 不进行红帽标签检查
gpgcheck=0

images/image-20240916132823276.png

至于删除的那些文件的作用和内容,有兴趣可以自行百度或查看上述参考文章。

验证 yum 源是否成功:yum repolist

images/image-20240916133103189.png

apt 源:网络搭建

这里以搭建 debian9 为例。

服务器上需要安装有 apache 或 nginx 等服务器,并可以正常访问,这里使用 nginx 为例,服务器 ip 为 192.168.0.211 网站目录为 /var/www/html/

1)创建目录 debian9

1
mkdir /var/www/html/debian9

2)上传 iso 镜像文件,并挂载至 debian9 目录

1
mount -o loop debian-9.13.0-amd64-DVD-1.iso /var/www/html/debian9

3)查看 /var/www/html/debian9 目录,可以看到相关文件

images/image-20240916180431296.png

4)启动一台 debian9 主机,编辑 /etc/apt/sources.list 文件,注释掉其他源,写入网络源

1
2
3
4
5
6
#注释掉其他源
deb [trusted=yes] http://192.168.0.211/debian9/ stretch main contrib
# [trusted=yes]代表直接信任
# http://192.168.0.211/debian9/ :软件仓库URL
# stretch:系统版本代号
# main contrib:光盘上软件的组织结构

成功,这样就可以安装软件了,仅限 iso 镜像中自带的软件包

images/image-20240916182651799.png

5)例如没有 vim,就可以从自己搭建的网络 apt 源进行安装,当然,仅限 iso 镜像中自带的软件包

images/image-20240916182943230.png

apt 源:本地搭建

如果只是本地主机使用,没有其他网络主机使用,可以直接将 iso 镜像挂载到本地目录,不使用http服务器。

这里以 Debian11 服务器为例子

1)创建目录ubuntu,名字随意

1
mkdir /mnt/ubuntu

2)上传 iso 镜像文件,并挂载至 ubuntu 目录

1
mount -o loop debian-11.11.0-amd64-DVD-1.iso /mnt/ubuntu/

3)修改本地主机的/etc/apt/sources.list 文件,注释掉其他源

1
2
deb [trusted=yes] file:///mnt/source1 bullseye contrib main
# bullseye:Debian的版本号。版本不同版号也不一致,注意修改

image-20250514224521965

4)运行 apt update命令

image-20250514224610921

服务器重启后挂载失效

因为上面只是临时挂载,重启后就失效了,可以再用 mount 命令挂载以便。如果你熟悉 Linux,可以将其写入配置文件,和挂载硬盘一样。

图省事的话可以将挂载命令在开机时自动执行,有两种方式实现:

rc.local:先看看有没有这个配置文件,文件在 /etc/rc.local,debian 默认没有。将 mount -o loop debian-9.13.0-amd64-DVD-1.iso /var/www/html/debian9 写入

crontab:crontab -e@reboot mount -o loop debian-9.13.0-amd64-DVD-1.iso /var/www/html/debian9 命令写入。

apt 源的配置文件说明

参考: https://www.cnblogs.com/beanmoon/p/3387652.html

source.list 文件中每一行配置可以分为四个部分:deb http://mirrors.163.com/debian/ stretch main contrib

  • deb 或者 deb-src:前者代表软件的位置,后者代表软件的源代码的位置
  • http://mirrors.163.com/debian/ :ftp 镜像的 url
  • stretch:debian 系统的版本号。stretch-updates 是软件包状态,代表更新
  • main contrib:限定词

其中,前三个部分好理解,都是固定的样式,主要是第四部分的限定词,要理解清楚含义。

常见的三个限定词有:main、contrib、non-free

  • main :Debian 里最基本及主要且符合自由软件规范的软件 ( packages )。
  • contrib :这里头软件虽然可以在 Debian 里头运作,即使本身属于自由软件但多半却是相依于非自由 ( non-free ) 软件。
  • non-free :不属于自由软件范畴的软件。

一般软件的镜像源都包含这三个,比如腾讯的 debian10 镜像源配置为:deb https://mirrors.cloud.tencent.com/debian/ buster main contrib non-free

通过浏览器找到地址,打开对应为的地址 /dists/buster/ 可以看到 main、contrib、non-free 这三个文件夹

images/image-20240921093829929.png

其次,我们在自己搭建的镜像源目录里也可以找到对应的目录,这里只有 main、contrib,没有 non-free

images/image-20240921094058946.png

所以,在使用我们自己搭建的 debian9 镜像源时,配置为:deb [trusted=yes] http://192.168.0.211/debian9/ stretch main contrib 后面不要加 non-free。

不同的 Linux 系统源配置有些不同,比如 Ubuntu:deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse

images/image-20240921095202321.png

查找软件包是否在 iso 镜像中

两种方法

  • 方法一:通过 pool 目录
1
2
find /mnt/ubuntu/pool/ -name "*vim*"
# /mnt/ubuntu/:镜像挂载目录

image-20250515001330128

  • 方法二:通过 Packages.gz
1
2
zgrep -i "Package: vim" /mnt/ubuntu/dists/bullseye/*/*/Packages.gz
# bullseye/*/*/:这里要注意目录有几层,否则会找不到 Packages.gz

目录结构

image-20250515001531036

结果

image-20250515001610523

使用 rsync 同步镜像源

  • rsync 是一个高效的远程文件同步工具,支持增量同步(仅传输差异部分),常用于镜像大型仓库。
  • 手动同步:通过 rsync 命令直接同步远程仓库到本地,但需自行处理元数据更新和仓库维护。
  • 适用场景
    • 需要灵活控制同步内容(如过滤特定目录或软件包)。
    • 官方镜像站提供 rsync 访问支持(如 Debian、Ubuntu、CentOS 官方镜像)。

1)准备一个服务器

  • 安装rsync
1
2
3
4
5
# Debian/Ubuntu
sudo apt install rsync

# CentOS/RHEL
sudo yum install rsync
  • 创建本地仓库目录
1
2
3
4
5
# APT 仓库
sudo mkdir -p /var/www/repos/apt

# YUM 仓库
sudo mkdir -p /var/www/repos/yum
  • 启动 http 服务器(如 Nginx)

将两个本地仓库目录分别设置为设置为 http 网站的根目录

2)同步仓库

  • apt 仓库
1
2
3
4
5
6
7
sudo rsync -avzH \
    --delete \
    --progress \
    --exclude="indices/" \
    --exclude="*.diff" \
    --exclude="*.gz" \
    rsync://mirrors.ustc.edu.cn/ubuntu/ /var/www/repos/apt/

参数解析

  • -avzH:归档模式、保留属性、压缩传输、保留硬链接。
  • --delete:删除本地多余文件(保持与远程严格一致)。
  • --progress:显示同步进度。
  • --exclude:排除临时文件或索引(后续需手动生成)。

注意:这里的镜像源地址必须支持 rsync 访问

生成 apt 仓库元数据

1
2
3
4
cd /var/www/repos/apt
apt-ftparchive packages . > Packages
gzip -k Packages
apt-ftparchive release . > Release
  • yum 仓库
1
2
3
4
5
6
sudo rsync -avzH \
    --delete \
    --progress \
    --exclude="repodata/" \
    --exclude="*.tmp" \
    rsync://mirrors.ustc.edu.cn/centos/8/AppStream/x86_64/os/ /var/www/repos/yum/centos/8/AppStream/x86_64/os/

生成 yum 仓库元数据

1
2
3
4
5
# 安装 createrepo
sudo yum install createrepo

# 生成元数据
sudo createrepo /var/www/repos/yum/centos/8/AppStream/x86_64/os/
0%