自建建企业内部yum源和apt源方法

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

这里以Redhat 7光盘为例,介绍如何建设

1、首先我们把光盘插入光驱,或者将iso镜像文件拷贝到磁盘上,然后挂载

光盘挂载方法:

首先新建一个目录,命名为rhel7,然后使用mount挂载光驱设备

mkdir rhel7
mount -t auto /dev/sr0 ./rhel7

我的虚拟机有多个光驱,所以再把CentOS的光盘也挂载上,如下

mkdir centos7
mount -t auto /dev/sr2 ./centos7/

ISO镜像文件挂载方法:

与光驱挂载类似,只是把设备换成.iso文件即可

mkdir centos6
mount -o loop ./CentOS-6.10-x86_64-bin-DVD1.iso ./centos6

注意,对于Centos6这种有两张CD的,一般是把两张CD挂载上之后,把文件都拷贝到本地的同一个文件夹里,即合成一张光盘,因为CD2里基本都是rpm包,如果只挂载一个会不全。

有了rpm文件之后,我们就可以直接利用了,此时我们需要搭建一个HTTP服务器,网上大多教程都是建立apache服务器,可是我觉得apache服务器太过于臃肿,而Caddy服务器可以只需一个文件一行命令就开启HTTP服务,非常方便十分推荐。

首先观察一下CentOS 7 EveryThing版光盘里的内容

-rw-rw-r--. 1 root root      14 Nov 26 00:01 CentOS_BuildTag
drwxr-xr-x. 3 root root    2048 Nov 26 00:20 EFI
-rw-rw-r--. 1 root root     227 Aug 30  2017 EULA
-rw-rw-r--. 1 root root   18009 Dec 10  2015 GPL
drwxr-xr-x. 3 root root    2048 Nov 26 00:21 images
drwxr-xr-x. 2 root root    2048 Nov 26 00:20 isolinux
drwxr-xr-x. 2 root root    2048 Nov 26 00:20 LiveOS
drwxrwxr-x. 2 root root 1656832 Nov 25 23:58 Packages
drwxrwxr-x. 2 root root    4096 Nov 26 22:21 repodata
-rw-rw-r--. 1 root root    1690 Dec 10  2015 RPM-GPG-KEY-CentOS-7
-rw-rw-r--. 1 root root    1690 Dec 10  2015 RPM-GPG-KEY-CentOS-Testing-7
-r--r--r--. 1 root root    2883 Nov 26 22:22 TRANS.TBL

我们可以看到repodata是直接在光盘根目录下的,repodata目录在哪,我们的客户端URL就应该指向哪里,且这个repodata必须能被HTTP服务访问到。

于是我们在当前目录下(centos7)的上级目录开启caddy,这里要注意,要先cd到这个上级目录,caddy启动后的/就是当前目录了

caddy -port 8080

就是如此简单,一个yum源就搭建好了,因为我们只需要caddy作为文件服务器使用,所以根本无需任何繁琐的配置,指定一个端口就好了。此时我们到需要安装rpm包的机器上面修改它的配置文件指向这台yum源服务器即可。

即修改其他设备的/etc/yum.repos.d/目录下的文件,redhat和CentOS配置都是一样的,先把原先该目录的文件全都删掉,反正我们不连接Internet也用不上,留着还会导致报错,然后我们自己建立.repo文件,如centos7.repo,内容如下

[base]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://192.168.1.1:8080/centos7/
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=http://192.168.1.1:8080/centos7/RPM-GPG-KEY-EPEL-7

base是默认第一个寻找的repo库,即如果多个repo库下都有同名的包,首先会从base获取

baseurl就是我们caddy开启的IP和端口,记得打开防火墙,后面的URL路径即yum服务器caddy开启时目录里,放着centos7 repodata目录的目录

enabled=1代表启用这个repo,如果这个repo网络连接不上又不想删掉这个repo文件,那就改成0,以免yum命令执行时报网络错误

gpgcheck是校验包的合法性,因为我们是用的光盘,而且是内网,被篡改的可能性很小,推荐设置成0避免不必要的麻烦,如果不是0,那么就要在gpgkey中指明光盘里RPM-GPG-KEY-CentOS-7这个文件的路径

redhat的方法也大同小异,这里不再赘述。一个.repo文件可以放多个repo源,也可以把多个repo源放在多个.repo文件里

 

EPEL源搭建

redhat光盘中自带的我们一般称之为rhel源,是redhat公司在发布之前经过仔细测试兼容性的软件库,但是有的时候光盘中的那些包并不全面,所以有了epel源,大小比rhel多的多,里面有各种冷门的,未经仔细测试的包,比如PHP。有些情况下直接用epel源的东西比自己编译要方便的多,所以推荐把epel源也搭建上。

一般的redhat光盘也就4G左右的大小,但是epel6大小约为24GB,epel7的大小约为27GB,首先保证你的yum服务器有足够的空间。

epel源无法使用光盘了,需要使用rsync工具去internet上同步,同步命令如下

 rsync -vzP -rtDl  --delete rsync://mirrors.ustc.edu.cn/fedora-epel/6/x86_64/ ./epel6/
rsync -vzP -rtDl --delete rsync://mirrors.ustc.edu.cn/fedora-epel/7/x86_64/ ./epel7/

注意这里的epel6文件夹要放在caddy启动的目录

来看一下epel7目录下的文件

drwxrwxrwx. 1 1027 users   32 Oct 29  2017 debug
drwxrwxrwx. 1 1027 users  456 Feb 10 21:52 drpms
drwxrwxrwx. 1 1027 users   62 Feb 10 10:54 Packages
drwxrwxrwx. 1 1027 users 1698 Feb 10 21:52 repodata

可以看到.rpm包都在Packages目录下,按照首字母分类放在了不同的文件夹里,repodata目录在epel7下,所以我们客户端的URL只需要写到epel7这个目录就可以了,如下

[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://192.168.1.1:8080/epel7/
failovermethod=priority
enabled=1
gpgcheck=0

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

 

第三方rpm源的克隆

很多流行的开源软件,在公网上有自己的yum源,如MongoDB和docker,需要你的客户端添加相应的yum源然后执行yum install,但是没有Internet这功能就成了摆设,但是我们可以把公网上的yum克隆到本地,然后把客户端的.repo文件中URL写成本地即可,如下是mongoDB的公网yum源

[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

下面是docker官网给出的yum源添加方法

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

其repo文件实际是这样的

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg

我们在Ubuntu系统中,可以安装一个叫reposync 的工具完整的下载这些rpm包,然后再用createrepo工具建立自己的repodata目录,进而将Internet上的yum源克隆到本地。

sudo apt install yum-utils
sudo apt install createrepo

然后我们编辑/etc/yum.conf(ubuntu系统),/etc/yum.repos.d/xxx.conf(CentOS/Redhat系统),把上面开源软件的公网yum源的配置填上,尽量在这里把版本、CPU架构从变量换成写死的常量,防止yum源和客户端设备不一致造成无法安装的问题,如下

[mongodb-org-4.0-redhat6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

[mongodb-org-4.0-redhat7]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/4.0/x86_64/
gpgcheck=0
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/7/x86_64/stable
enabled=1
gpgcheck=0
gpgkey=https://download.docker.com/linux/centos/gpg

然后我们cd到caddy开启的目录,然后使用reposync把Internet上的rpm包都下载到本地,我这里是把centos6/redhat6下载到一起,7代下载到一起

mkdir redhat6
reposync -n --repoid=mongodb-org-4.0-redhat6 -p ./redhat6/
mkdir redhat7
reposync -n --repoid=mongodb-org-4.0-redhat7 -p ./redhat7/
reposync -n --repoid=docker-ce-stable -p ./redhat7/

--repoid后面就是你.repo文件中[]括号中的名称,-p后面跟你下载rpm包存储的路径,来看一下我这里redhat7目录下的文件

drwxrwxrwx. 1 1024 users     16 Feb 12 16:23 docker-ce-stable
drwxrwxrwx. 1 1024 users      8 Feb 12 16:09 mongodb-org-4.0-redhat7

可以发现,reposync命令执行后会在-p指定的目录下生成以id为名的文件夹,里面放着一层或者多层目录包含的rpm文件。并没有repodata文件夹,所以我们需要在克隆完毕之后手动使用createrepo命令创建repo,生成repodata文件夹,最后,repodata文件夹在哪,客户端的URL就应该指向哪,如下

cd 至repodata的目标路径
createrepo -v ./

./就是repodata被放置的路径,你也可以指定别的,然后客户端的repo文件可以这样写

[customrepo]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=http://192.166.1.187:88/redhat7/
failovermethod=priority
enabled=1
gpgcheck=0

这样,docker和mongodb的源就都配置在一个repo仓库内了,可以在客户端通过yum list来查看。

 

APT源同步方法

centos和redhat可以使用光盘来直接配置yum源,但是ubuntu不可以通过光盘,好在ubuntu官方提供了apt-mirror程序,可以直接从公网的apt源直接克隆到本地,下面来看一下用法。

apt-mirror命令执行后没有参数,主要都是靠配置文件,配置文件的路径为:/etc/apt/mirror.list

如我想克隆Ubuntu 18.04的官方apt源,就可以这样写,注意要把CPU架构,版本等由变量换成固定值,防止自建apt源于客户端版本不一致的问题出现,如下

############# config ##################

set base_path /home/alex/apt18.04
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 amd64
#set postmirror_script $var_path/postmirror.sh
set run_postmirror 0
#set nthreads 20
#set _tilde 0

############# end config ##############


deb https://download.docker.com/linux/ubuntu bionic stable
deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse




deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse



deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse


clean http://archive.ubuntu.com/ubuntu

上面的bionic 即代表即将克隆的apt源的版本,一般有14.04.16.04,18.04几个版本可以选择,由于每个版本下载量都在百G以上,所以需要根据实际需要下载。

与CentOS一样,MongoDB和Docker也都提供自己的Internat的apt源,需要我们克隆到本地,上面文件中

deb https://download.docker.com/linux/ubuntu bionic stable

deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse

就是克隆这些第三方软件的APT源到本地。

set base_path /home/alex/apt18.04

set mirror_path $base_path/mirror

set skel_path $base_path/skel

set var_path $base_path/var

这几个目录是存放下载好的deb包的地方,按照上面的填写,需要提前手动建立好

/home/alex/apt18.04,

/home/alex/apt18.04/mirror,

/home/alex/apt18.04/skel,

/home/alex/apt18.04/var

这几个目录,如果没有会报错。

同步完之后,就会在mirror目录下看到同步HOST建立的文件夹,如

repo.mongodb.org,download.docker.com,mirrors.aliyun.com三个目录,其中在

/mirror/repo.mongodb.org/apt/ubuntu,

/mirror/download.docker.com/linux/ubuntu,

/mirror/mirrors.aliyun.com/ubuntu

这三个目录下会有dist文件夹,和centos中repodata目录一样,dist目录在哪,客户端的URL地址就应该填哪里,所以客户端的list文件应该如下形式,文件路径为/etc/sources.list ,作用和centos的/etc/yum.repos.d/下面的文件差不多

deb [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/mirrors.aliyun.com/ubuntu bionic main restricted universe multiverse
deb [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/mirrors.aliyun.com/ubuntu bionic-security main restricted universe multiverse
deb [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/mirrors.aliyun.com/ubuntu bionic-updates main restricted universe multiverse

deb [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/download.docker.com/linux/ubuntu bionic stable

deb [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse

deb-src [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/mirrors.aliyun.com/ubuntu bionic main restricted universe multiverse
deb-src [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/mirrors.aliyun.com/ubuntu bionic-security main restricted universe multiverse
deb-src [arch=amd64] http://192.168.1.1:8080/apt18.04/mirror/mirrors.aliyun.com/ubuntu bionic-updates main restricted universe multiverse

注意此处尽量吧arch=amd64写死,不然在apt安装的时候会报错找不到32位程序,而我们一般只需要下载64位即可,减少下载工作量。毕竟64位的apt源克隆下载就已经几百G了

下面再附上apt14.04和apt16.04+Docker+MongoDB的同步配置文件

############# config ##################

set base_path /home/alex/apt14.04
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 amd64
#set postmirror_script $var_path/postmirror.sh
set run_postmirror 0
#set nthreads 20
#set _tilde 0

############# end config ##############



deb https://download.docker.com/linux/ubuntu trusty stable
deb https://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/4.0 multiverse




deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse



deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse



clean http://archive.ubuntu.com/ubuntu

 

############# config ##################

set base_path /home/alex/apt16.04
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 amd64
#set postmirror_script $var_path/postmirror.sh
#set run_postmirror 0
#set nthreads 20
#set _tilde 0

############# end config ##############


deb https://download.docker.com/linux/ubuntu xenial stable
deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse





deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse


deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse

clean http://archive.ubuntu.com/ubuntu

客户端的sources.list照着上面18.04的葫芦画瓢就可以了。

你可能感兴趣的:(自建建企业内部yum源和apt源方法)