自建企业内部 Yum 及 apt 本地源库 (更新 ceph、docker 源)

2020/3/25 更新:
YUM 源更新本地 ceph 源

1
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/ceph/rpm-nautilus/ /mnt/HDD/ceph/rpm-nautilus/

添加软链接

1
ln -s /mnt/HDD/ceph/ /var/www/html/ceph

编辑 repo 文件
ceph.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[Ceph]
name=Ceph packages
baseurl=http://xxx.xxx.xxx.xxx/ceph/rpm-nautilus/el7/x86_64
enabled=1
priority=1
gpgcheck=0

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://xxx.xxx.xxx.xxx/ceph/rpm-nautilus/el7/noarch
enabled=1
priority=1
gpgcheck=0

[ceph-source]
name=Ceph source packages
baseurl=http://xxx.xxx.xxx.xxx/ceph/rpm-nautilus/el7/SRPMS
enabled=1
priority=1
gpgcheck=0
#gpgkey=https://download.ceph.com/keys/release.asc

2020/2/13 更新:

最近把 Docker-server 也本地化,发现用本地 YUM 库会存在有些部件存在版本不够新的问题。导致 docker-ce 安装失败,所以自己研究了一下 yum 的 repo 文件。发现其实 cenots 除了用到 OS 这个外还有用到 centosplus,extras,updates 这三个文件夹,所以也需要将这三个文件夹也 rsync 到本地 YUM 库里。费话不多说,下面是步骤:

先用 rsync 把镜像源拉到本地

1
2
3
4
5
6
7
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/ /mnt/HDD/centos7.7/os/x86_64/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/centos/7/updates/x86_64/ /mnt/HDD/centos7.7/updates/x86_64/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/centos/7/extras/x86_64/ /mnt/HDD/centos7.7/extras/x86_64/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/centos/7/centosplus/x86_64/ /mnt/HDD/centos7.7/centosplus/x86_64/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/fedora-epel/7/x86_64/ /mnt/HDD/epel7/x86_64/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/fedora-epel/7/SRPMS/ /mnt/HDD/epel7/SRPMS/
rsync -vzP -rtDl --delete rsync://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/ /mnt/HDD/docker-ce/

编辑 repo 文件
centos7.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
[Base]
name=CentOS-$releasever - Base - local
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://xxx.xxx.xxx.xxx/centos/7/os/x86_64/
gpgcheck=1
gpgkey=http://xxx.xxx.xxx.xxx/centos/7/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates - local
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://xxx.xxx.xxx.xxx/centos/7/updates/x86_64/
gpgcheck=1
gpgkey=http://xxx.xxx.xxx.xxx/centos/7/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - local
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://xxx.xxx.xxx.xxx/centos/7/extras/$basearch/
gpgcheck=1
gpgkey=http://xxx.xxx.xxx.xxx/centos/7/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - local
baseurl=http://xxx.xxx.xxx.xxx/centos/7/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://xxx.xxx.xxx.xxx/centos/7/RPM-GPG-KEY-CentOS-7

epel7.repo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[centos_local_epel7]
name=centos-local-epel7
baseurl="http://xxx.xxx.xxx.xxx/epel7/x86_64"
gpgcheck=1
enable=1
gpgkey="http://xxx.xxx.xxx.xxx/epel7/RPM-GPG-KEY-EPEL-7"

[epel-debuginfo]
name=centos-local-Extra Packages - Debug
baseurl="http://xxx.xxx.xxx.xxx/epel7/x86_64/debug"
gpgcheck=1
enable=1
gpgkey="http://xxx.xxx.xxx.xxx/epel7/RPM-GPG-KEY-EPEL-7"


[epel-source]
name=centos-local-Extra Packages - Source
baseurl="http://xxx.xxx.xxx.xxx/epel7/SRPMS"
gpgcheck=1
enable=1
gpgkey="http://xxx.xxx.xxx.xxx/epel7/RPM-GPG-KEY-EPEL-7"

docker-ce.repo

1
2
3
4
5
6
7
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=http://xxx.xxx.xxx.xxx/docker-ce
enabled=1
gpgcheck=0
#gpgkey=https://download.docker.com/linux/centos/gpg

将上面的 repo 文件放到 /etc/yum.repo.d 运行

1
2
3
yum clean all
yum makecache
yum update

下面就可以用本地库安装 Docker-ce 了,不会有任何报错了。

1
yum install docker-ce

公司企业为了网络安全都建立了自己的内部网络,内部网络不与 Internet 相通,导致很多开源软件,系统 rpm 包,deb 包安装都异常复杂,而且如果依赖关系复杂,通过手动上传 rpm 包或者 deb 包就更加麻烦,经常碰到连 gcc 都需要安装半天的情景。所以为了能使用 centos,redhat 和 Ubuntu 官方包管理软件 yum 和 apt,需要在内网中将公网上的包下载下来,并制作成自己的 yum 源和 apt 源。

CentOS、Redhat 源搭建

CentOS 和 Redhat 多数的包是可以通用的,另外还有版本的区别,比如 CentOS 6.x 和 CentOS 7.x 的就不能通用,在 rpm 包名上一般都会注明 el6 或者 el7。
搭建 yum 源一个很快很有效的方式就是直接拿光盘来做 yum 源,redhat 的发行版光盘可以直接拿来用,centos 的光盘有 minimal,online,普通版和 everyThing 版,其中普通版和 EveryThing 版都可以拿来搭建,其中普通版 4GB 左右,EveryThing 版 8GB 左右,推荐 EveryThing 版。
如果系统盘只有一张 CD,那直接挂载就可以使用,如果是两张 CD,如 CentOS6.x ,就需要把光盘的内容拷贝到硬盘上然后再搭建。

首先把光盘插入光驱,然后挂载到本地

挂载方法:

1
2
mkdir /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

安装 Web 服务

1. 本地正确依赖包安装顺序如下:

1
2
3
4
5
6
cd /mnt/cdrom/Packages
rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
rpm -ivh apr-1.4.8-3.el7.x86_64.rpm
rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
rpm -ivh httpd-tools-2.4.6-45.el7.centos.x86_64.rpm
rpm -ivh httpd-2.4.6-45.el7.centos.x86_64.rpm

安装顺序这个一定要注意。
2. 创建 httpd 目录

1
mkdir -p /var/www/html/centos7

3. 将安装包复制到刚创建的 httpd 目录

1
cp -r /mnt/cdrom /var/www/html/centos7

或者直接将 cdrom 直接挂载到 /var/www/html/centos7

1
mount /dev/cdrom /var/www/html/centos7

4. 在 /etc/yum.repos.d/ 创建 centos7.repo 文件

1
2
3
4
5
6
7
8
tee /etc/yum.repos.d/centos7.repo <<-'EOF'
[centos_local]
name=centos-local
baseurl=http://192.168.12.100/centos7 #这里的IP改成你自己的IP
gpgcheck=0
enable=1
gpgkey=http://192.168.12.100/centos7/RPM-GPG-KEY-EPEL-7
EOF

将上面整段复制执行。
5. 清除缓存

1
yum clean all

启动 web 服务

1
2
systemctl start httpd
systemctl enable httpd

自此服务器端搭建完成

客户端使用本地源服务器

首先将 192.168.12.100 这台机器上 centos7.repo 分发过去,在同样的目录下。

1
scp XXX@192.168.12.100:/etc/yum.repos.d/centos7.repo /etc/yum.repos.d/centos7.repo

执行

1
2
yum clean all
yum makecache

就可以在本地使用 Centos7 的本地源库了。

EPEL 源搭建

首先保证你的 yum 服务器有足够的空间。epel6 大小约为 24GB,epel7 的大小约为 27GB,epel 源无法使用光盘了,需要使用 rsync 工具去 internet 上同步,同步命令如下

1
2
3
4
5
6
7
mkdir /mnt/yum.repo/epel6
mkdir /mnt/yum.repo/epel7
mkdir /mnt/yum.repo/centos7
ln -s /mnt/yum.repo/* /var/www/html
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/fedora-epel/6/x86_64/ /mnt/yum.repo/epel6/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/fedora-epel/7/x86_64/ /mnt/yum.repo/epel7/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/centos/7/os/x86_64/ /mnt/yum.repo/centos7/

等同步完成后,建立一个 epel.repo 来指向他。

1
2
3
4
5
6
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://192.168.12.100/epel7/
failovermethod=priority
enabled=1
gpgcheck=0

如果你获得不了 GPG 签名文件(一般没有),gpgcheck 就设置为 0。

APT 源搭建

安装 apt-mirror

1
apt-get install apt-mirros

配置 apt-mirror

/etc/apt/mirros.list 文件修改成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
############# config ##################
#
# set base_path /var/spool/apt-mirror
#
# set mirror_path $base_path/mirror
# set skel_path $base_path/skel
# set var_path $base_path/var
# set cleanscript $var_path/clean.sh
# set defaultarch <running host architecture>
# set postmirror_script $var_path/postmirror.sh
# set run_postmirror 0
set nthreads 20
set _tilde 0
#
############# end config ##############

deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib

拖库

1
apt-mirror

将从 debian 拖下来的文件放到 centos 的 httpd 目录下。

1
2
mkdir /var/www/html/debian
ln -s /var/spool/apt-mirror/mirror/mirrors.163.com/debian /var/www/html/debian

使用本地库

编辑 sources.list 文件

1
vim /etc/apt/sources.list

将文件指向改为本地源

1
2
3
4
5
6
7
#deb http://mirrors.163.com/debian/ stretch main non-free contrib
#deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
#deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib

deb http://192.168.12.100/debian/ stretch main non-free contrib
deb http://192.168.12.100/debian/ stretch-updates main non-free contrib
deb-src http://192.168.12.100/debian/ stretch main non-free contrib

更新本地配置

1
2
apt-get update
apt-get install 软件包名

自此全部完成!