Linux系统使用Createrepo创建和使用本地源
一、YUM简介
YUM(全称为 Yellow dog Updater, Modified)是一个在Fedora、RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
二、获取RPM包
使用YUM有两种方式可以获取RPM包,分别是缓存方式和指定下载目录方式。
1、缓存方式
需要修改本地源配置文件(/etc/yumrepos.d/*.repo)中的keepcache为1,此方法较为繁琐,且在执行指令(yum clean all)时,会将已下载的文件删除,且如果有较多的yum源配置文件时,取文件会很麻烦,此处不再详细介绍
2、指定目录
通过下方指令,即可将createrepo及其依赖项下载至/local/createrepo目录下
yum install -y createrepo --downloadonly --downloaddir /local/createrepo
注意:如果您使用的系统已经安装了该软件,则不会进行下载,需要使用yum reinstall进行下载。另外,如果依赖项已经安装,则相关依赖项也不会下载,建议使用未安装过任何软件的Linux的Minimal版本进行下载。
也可使用repotrack下载
yum -y install yum-utils
repotrack createrepo -p /local/createrepo
注意:repotrack会下载所有依赖的包,不管系统是否已安装,大部分包其实是系统已经安装的,如果对安装源有大小限制的需求,建议对repotrack下载的包进行二次处理
三、安装createrepo
在联网状态下,通过(yum install createrepo)指令,即可安装。
四、制作本地源
选择一台未安装过任何软件的Linux的Minimal版本主机,将下载好的文件放入指定目录下,例如 /local
执行(createrepo /local)指令,执行完成后,/local目录下会多出一个repodata目录,此目录中文件为本地源的配置数据
五、在目标主机使用本地源
将/local及其目录下的repodata、所有的rpm文件上传至目标主机,比如/yum/local
在目标主机创建文件(/etc/yum.repos.d/local.repo),并键入如下内容
[local]
name=local
baseurl=file:///yum/local/
enabled=1
gpgcheck=0
注意:/local中的目录内容和结构不可变,baseurl=file:///yum/local/ 处指定的路径与你repodata和rpm文件放置路径相关
如此,便完成了离线源的安装。
六、发布你自己的私有源
我们在上面的步骤中创建好的自己的本地源,那么,如何让别人也能使用这个源来安装程序呢?
So easy!
在本机安装WEB服务器,然后将你本地源目录(/yum/local/)作为根目录,发布出去就OK啦
你的/etc/nginx/nginx.conf中的http节中增加如下配置
server
{
listen 80 default_server;
root /yum/local;
autoindex on;
}
对方的repo文件这样配置
[local]
name=local
baseurl=http://你的IP/域名
enabled=1
gpgcheck=0
对方配置完repo文件后,执行代码刷新缓存
yum makecache
之后再安装啥软件直接用yum就可以了。
(注意)服务器目录下的rpm文件增减后,需要在服务器端执行以下命令,更新一下库才能正常在客户机下载rpm包
createrepo --update /yum/local
常见问题
Error downloading packages:
keepalived-1.3.5-19.el7.x86_64: failed to retrieve keepalived-1.3.5-19.el7.x86_64.rpm from local
error was [Errno 2] Local file does not exist: /root/pdate/keepalived-1.3.5-19.el7.x86_64.rpm
lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64: failed to retrieve lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm from local
error was [Errno 2] Local file does not exist: /root/pdate/lm_sensors-libs-3.4.0-8.20160601gitf9185e5.el7.x86_64.rpm
mysql-community-libs-compat-8.0.28-1.el7.x86_64: failed to retrieve mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm from local
error was [Errno 2] Local file does not exist: /root/pdate/mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm
1:net-snmp-libs-5.7.2-49.el7_9.2.x86_64: failed to retrieve net-snmp-libs-5.7.2-49.el7_9.2.x86_64.rpm from local
error was [Errno 2] Local file does not exist: /root/pdate/net-snmp-libs-5.7.2-49.el7_9.2.x86_64.rpm
1:net-snmp-agent-libs-5.7.2-49.el7_9.2.x86_64: failed to retrieve net-snmp-agent-libs-5.7.2-49.el7_9.2.x86_64.rpm from local
error was [Errno 2] Local file does not exist: /root/pdate/net-snmp-agent-libs-5.7.2-49.el7_9.2.x86_64.rpm
客户端使用yum安装中出现上述错误,需要清理客户端缓存
##清理缓存
[root@localhost ~]# yum clean all
已加载插件:fastestmirror
正在清理软件源: net
Cleaning up list of fastest mirrors
Other repos take up 648 k of disk space (use --verbose for details)
##有缓存未清除成功
[root@localhost ~]# yum clean all --verbose
加载 "fastestmirror" 插件
Config time: 0.006
Yum version: 3.4.3
正在清理软件源: net
Operating on /var/cache/yum/x86_64/7 (see CLEAN OPTIONS in yum(8) for details)
Disk usage under /var/cache/yum/*/* after cleanup:
0 enabled repos
0 disabled repos
648 k untracked repos:
648 k /var/cache/yum/x86_64/7/local
4.0 k other data:
4.0 k /var/cache/yum/x86_64/7/timedhosts
652 k total
##看到有local和timedhosts两个目录未清理,需要手工处理
[root@localhost ~]# rm -rf /var/cache/yum/x86_64/7/local
[root@localhost ~]# rm -rf /var/cache/yum/x86_64/7/timedhosts
##清除缓存后再次查看缓存详情
[root@localhost ~]# yum clean all --verbose
加载 "fastestmirror" 插件
Config time: 0.006
Yum version: 3.4.3
正在清理软件源: net
Operating on /var/cache/yum/x86_64/7 (see CLEAN OPTIONS in yum(8) for details)
Disk usage under /var/cache/yum/*/* after cleanup:
0 enabled repos
0 disabled repos
0 untracked repos
0 other data
0 total
##缓存已经清理完成,再次安装就成功了