有些时候,内部服务器禁止连接Internet,安装或更新软件包就必须配置本地软件仓库。下面利用openEuler 22.03 LTS SP1的完整ISO镜像文件为例进行演示说明。
OS版本:openEuler 22.03 LTS
openEuler 22.03 LTS SP1系统完整镜像下载地址如下:
https://repo.openeuler.org/openEuler-22.03-LTS-SP1/ISO/x86_64/openEuler-22.03-LTS-SP1-everything-x86_64-dvd.iso
利用下载的ISO镜像创建本地软件仓库
一、配置仅用于本主机的本地软件仓库
如果软件仓库仅用于本主机,则可按以下步骤实现:
1、将下载好的ISO镜像文件存放在指定位置,比如/data目录
[root@myEuler ~]# ls /data
openEuler-22.03-LTS-SP1-everything-x86_64-dvd.iso
2、挂载ISO镜像文件
[root@myEuler ~]# mkdir /mnt/openEuler
[root@myEuler ~]# mount -o loop /data/openEuler-22.03-LTS-SP1-everything-x86_64-dvd.iso /mnt/openEuler/
mount: /mnt/openEuler: WARNING: source write-protected, mounted read-only.
从上面的提示可看到,挂载后的/mnt/openEuler文件系统为只读,而且这种挂载是临时的,重启后就会失效,需要重新挂载。这就需要设置永久挂载,或者将其中的文件复制到自定义的目录,然后再自己创建repodata。
以下两种方式可以自由选择其中一种:
(1)选项一:设置永久挂载
可通过编辑/etc/fstab文件将ISO镜像文件永久挂载。
#先卸载前面的挂载
[root@myEuler ~]# umount /mnt/openEuler
#编辑文件
[root@myEuler ~]# vim /etc/fstab
……此处省略文件原有内容,添加下面一行内容……
/data/openEuler-22.03-LTS-SP1-everything-x86_64-dvd.iso /mnt/openEuler/ iso9660
defaults,loop 0 0
#测试自动挂载,若只提示以下警告,则表示配置正确,否则核查前面的配置
[root@myEuler ~]# mount -a
mount: /mnt/openEuler: WARNING: source write-protected, mounted read-only.
(2) 选项二:自定义本地目录
若需要拥有可写权限,则可用本地目录来作为软件仓库目录。
#创建本地目录
[root@myEuler ~]# mkdir /data/openEuler
#将文件复制到本地的目录,这个过程需耐心等候几分钟
[root@myEuler ~]# cp -r /mnt/openEuler/* /data/openEuler/
# 安装createrepo软件包,这需要连接网络,或者利用选项一配置的本地软件仓库
[root@myEuler ~]# dnf -y install createrepo
#利用本地目录创建软件仓库,这个过程也需耐心等候几分钟
[root@myEuler ~]# createrepo --update --workers=8 /data/openEuler
上面的createrepo参数说明如下:
- –update:表示更新元数据
- –workers:指定工作线程数
3、创建本地repo文件
#备份并移除原有repo仓库配置文件
[root@myEuler ~]# mkdir /etc/yum.repos.d/backup
[root@myEuler ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
#创建repo仓库配置文件
[root@myEuler ~]# vim /etc/yum.repos.d/local.repo
[local_repo]
name=local repository
baseurl=file:///mnt/openEuler/
#若采用选项二,则baseurl=file:///data/openEuler/
gpgcheck=1
enabled=1
gpgkey=file:///mnt/openEuler/RPM-GPG-KEY-openEuler
注:repo仓库配置文件中常见的选项含义如下:
- [local_repo]:方括号中的文字为repo仓库ID,这个值在该配置文件中是唯一的
- name:该仓库的描述信息
- baseurl:存储该仓库repodata目录所在的位置
- gpgcheck:是否校验此仓库GPG签名,1为开启,0为禁止。若开启校验,则需要使用gpgkey指定签名文件所在的位置
- enabled:是否启用此仓库,1为开启,0为禁止
- gpgkey:GPG签名密钥文件所在的位置
4、验证测试
#清空仓库缓存
[root@myEuler ~]# dnf clean all
#生成仓库元数据缓存
[root@myEuler ~]# dnf makecache
#查看仓库列表及其状态
[root@myEuler ~]# dnf repolist all
repo id repo name status
local_repo local repository enabled
#在指定仓库中查找软件包
[root@myEuler ~]# dnf search httpd --disableexcludes local_repo
#指定使用仓库local_repo安装软件包
[root@myEuler ~]# dnf -y install httpd --disableexcludes local_repo
#卸载软件
[root@myEuler ~]# dnf -y remove httpd
5、附:常用dnf命令
- dnf clean all:清除软件仓库缓存
- dnf makecache:生成仓库元数据缓存
- dnf repolist all:列出所有软件仓库及其状态
- dnf list all:列出软件仓库中所有软件包
- dnf search 软件包名:搜索软件库中的软件包
- dnf install 软件包名:安装软件包,可加选项-y自动确认
- dnf remove 软件包名:移除软件包,可加选项-y自动确认
- dnf info 软件包名:查看软件包信息
- dnf update 软件包名:升级软件包
- dnf check-update:检查可更新的软件包
二、配置内网共享的软件仓库
若需要将为内网其它主机提供软件仓库服务,则可以通过构建Web或FTP服务实现,下面将以共享目录/mnt/openEuler/为例予以说明。
2.1 通过Apache Web服务实现共享
若想要通过Apache软件包实现Web服务,则可按以下步骤实现。
1、安装Apache软件包
[root@myEuler ~]# dnf -y install httpd --disableexcludes local_repo
2、配置防火墙
[root@myEuler ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@myEuler ~]# firewall-cmd --reload
success
3、配置Apache配置文件
Apache的主配置文件为/etc/httpd/conf/httpd.conf,但通常无需修改该配置文件,以免影响原有配置,推荐做法是在/etc/httpd/conf.d/目录下添加一个子配置文件,然后在该子配置文件中添加配置信息即可,这里创建一个repo.conf子配置文件,并在其中将/mnt/openEuler目录配置为虚拟目录。
[root@myEuler ~]# vim /etc/httpd/conf.d/repo.conf
<Directory /mnt/openEuler/>
Options Indexes
AllowOverride None
Require all granted
</Directory>
Alias /repo "/mnt/openEuler/"
4、重启httpd服务,并将httpd服务设置为开机自启动
[root@myEuler ~]# systemctl enable httpd.service
[root@myEuler ~]# systemctl restart httpd.service
5、测试访问
在内网的其他主机上,打开浏览器,访问Web服务器,如下图所示。
6、创建内部软件仓库配置文件
在内网其它主机上创建内部软件仓库配置文件
#备份并移除原有repo仓库配置文件
[root@client ~]# mkdir /etc/yum.repos.d/backup
[root@client ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
#创建repo仓库配置文件
[root@client ~]# vim /etc/yum.repos.d/internal.repo
[internal_repo]
name=internal repository
baseurl=http://192.168.18.80/repo/
gpgcheck=1
enabled=1
gpgkey=http://192.168.18.80/repo/RPM-GPG-KEY-openEuler
7、测试验证
在内网其它主机上,测试内部软件仓库是否可用。
#清空仓库缓存
[root@client ~]# dnf clean all
#生成仓库元数据缓存
[root@client ~]# dnf makecache
#查看仓库列表及其状态
[root@client ~]# dnf repolist all
#在指定仓库中查找软件包
[root@client ~]# dnf search httpd --disableexcludes internal_repo
#指定使用仓库internal_repo安装软件包
[root@client ~]# dnf -y install httpd --disableexcludes internal_repo
#卸载软件
[root@client ~]# dnf -y remove httpd
2.2 通过nginx Web服务实现共享
若要通过nginx实现Web服务,则可按以下操作步骤实现:
1、安装nginx软件包
[root@myEuler ~]# dnf -y install nginx --disableexcludes local_repo
2、配置防火墙
[root@myEuler ~]# firewall-cmd --permanent --zone=public --add-service=http
success
[root@myEuler ~]# firewall-cmd --reload
success
3、配置nginx配置文件
nginx的主配置文件为/etc/nginx/nginx.conf,在其中添加并在其中将/mnt/openEuler目录配置为虚拟目录。
[root@myEuler ~]# vim /etc/nginx.conf
……此处省略文件原有内容……
server {
……此处省略server块中原有内容,添加以下一个location节……
location /repo {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
alias /mnt/openEuler/;
}
}
注:上面几个选项解释如下:
- autoindex:是否开启目录浏览,开启则为on,否则为off,默认为off。
- autoindex_exact_size:是否开启显示文件确切大小(单位为字节),否则为off,显示文件大概大小,单位为KB、MB、GB等。默认为on
- autoindex_localtime:是否显示文件时间为GMT时间,默认为off。设置为on则显示的文件时间为文件的服务器时间。
4、重启nginx服务,并将nginx服务设置为开机自启动
[root@myEuler ~]# systemctl restart nginx.service
[root@myEuler ~]# systemctl enable nginx.service
5、测试访问
同Apache
6、创建内部软件仓库配置文件
同Apache
7、验证测试
同Apache
2.3 通过FTP服务实现共享
若要通过vsftpd软件实现FTP服务,则可按以下操作步骤实现:
1、安装vsftpd软件包
[root@myEuler ~]# dnf -y install vsftpd --disableexcludes local_repo
2、配置防火墙
[root@myEuler ~]# firewall-cmd --permanent --zone=public --add-service=ftp
success
[root@myEuler ~]# firewall-cmd --reload
success
3、配置FTP配置文件
#开启匿名服务
[root@myEuler ~]# sed -i 's/anonymous_enable=NO/anonymous_enable=YES/' /etc/vsftpd/vsftpd.conf
#修改匿名用户根目录,默认值为/var/ftp/pub
[root@myEuler ~]# echo "anon_root=/mnt/openEuler/" >> /etc/vsftpd/vsftpd.conf
4、配置SELinux,开启ftpd_full_access规则
由于默认受SELinux保护,ftpd_full_access规则为off状态,这个状态将导致无法访问FTP服务,因此需要开启该规则开关,同时建议将/data目录属主更改为ftp。
#开启ftpd_full_access规则,选项-P表示永久有效
[root@myEuler ~]# setsebool -P ftpd_full_access on
#更改共享目录属主
[root@myEuler ~]# chown -R ftp /data/
5、重启vsftpd服务,并设置为开机自启动
[root@myEuler ~]# systemctl restart vsftpd.service
[root@myEuler ~]# systemctl enable vsftpd.service
6、测试访问
在内网的其它任何主机上,打开浏览器,浏览FTP站点地址,如下图所示。
7、 创建内部软件仓库配置文件
在内网其它主机上创建内部软件仓库配置文件
#备份并移除原有repo仓库配置文件
[root@client ~]# mkdir /etc/yum.repos.d/backup
[root@client ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
#创建repo仓库配置文件
[root@client ~]# vim /etc/yum.repos.d/internal.repo
[internal_repo]
name=internal repository
baseurl=ftp://192.168.18.80/
gpgcheck=1
enabled=1
gpgkey=ftp://192.168.18.80/RPM-GPG-KEY-openEuler
8、测试验证
同Apache