有些时候,内部服务器禁止连接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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐