搭建repo服务器
说明:
openEuler提供了多种repo源供用户在线使用,各repo源含义可参考系统安装。若用户无法在线获取openEuler repo源,则可使用openEuler提供的ISO发布包创建为本地openEuler repo源。本章节中以openEuler-21.03-aarch64-dvd.iso发布包为例,请根据实际需要的ISO发布包进行修改。
概述
将openEuler提供的ISO发布包openEuler-21.03-aarch64-dvd.iso创建为repo源,如下以使用nginx进行repo源部署,提供http服务为例进行说明。
创建/更新本地repo源
使用mount挂载,将openEuler的ISO发布包openEuler-21.03-aarch64-dvd.iso创建为repo源,并能够对repo源进行更新。
获取ISO发布包
请从如下网址获取openEuler的ISO发布包:
https://repo.openeuler.org/openEuler-21.03/ISO/
挂载ISO创建repo源
在root权限下使用mount命令挂载ISO发布包。
示例如下:
# mount /home/openEuler/openEuler-21.03-aarch64-dvd.iso /mnt/
挂载好的mnt目录如下:
.
│── boot.catalog
│── docs
│── EFI
│── images
│── Packages
│── repodata
│── TRANS.TBL
└── RPM-GPG-KEY-openEuler
其中,Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。
创建本地repo源
可以拷贝ISO发布包中相关文件至本地目录以创建本地repo源,示例如下:
# mount /home/openEuler/openEuler-21.03-aarch64-dvd.iso /mnt/
$ mkdir -p ~/srv/repo/
$ cp -r /mnt/Packages ~/srv/repo/
$ cp -r /mnt/repodata ~/srv/repo/
$ cp -r /mnt/RPM-GPG-KEY-openEuler ~/srv/repo/
从而本地repo目录如下:
.
│── Packages
│── repodata
└── RPM-GPG-KEY-openEuler
Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。
更新repo源
更新repo源有两种方式:
通过新版本的ISO更新已有的repo源,与创建repo源的方式相同,即挂载ISO发布包或重新拷贝ISO发布包至本地目录。
在repo源的Packages目录下添加rpm包,然后通过createrepo命令更新repo源
$ createrepo --update --workers=10 ~/srv/repo
其中,—update表示更新,—workers表示线程数,可自定义。
说明:
若命令打印信息为“createrepo:未找到命令”,则表示未安装createrepo软件,可在root权限下执行dnf install createrepo进行安装。
部署远端repo源
安装openEuler操作系统,在openEuler上通过nginx部署repo源。
nginx安装与配置
- 请自行下载nginx工具并在root权限下安装nginx。
安装nginx之后,在root权限下配置/etc/nginx/nginx.conf。
说明:
文档中的配置内容仅供参考,请用户根据实际情况(例如安全加固需要)进行配置。user nginx;
worker_processes auto; # 建议设置为core-1
error_log /var/log/nginx/error.log warn; # log存放位置
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost; # 服务器名(url)
client_max_body_size 4G;
root /usr/share/nginx/repo; # 服务默认目录
location / {
autoindex on; # 开启访问目录下层文件
autoindex_exact_size on;
autoindex_localtime on;
}
}
}
启动nginx服务
在root权限下通过systemd启动nginx服务:
# systemctl enable nginx
# systemctl start nginx
nginx是否启动成功可通过下面命令查看:
$ systemctl status nginx
图1表示nginx服务启动成功
图 1 nginx服务启动成功
若nginx服务启动失败,查看错误信息:
$ systemctl status nginx.service --full
图 2 nginx服务启动失败
如图2所示nginx服务创建失败,是由于目录/var/spool/nginx/tmp/client_body创建失败,在root权限下手动进行创建,类似的问题也这样处理:
# mkdir -p /var/spool/nginx/tmp/client_body
# mkdir -p /var/spool/nginx/tmp/proxy
# mkdir -p /var/spool/nginx/tmp/fastcgi
# mkdir -p /usr/share/nginx/uwsgi_temp
# mkdir -p /usr/share/nginx/scgi_temp
repo源部署
在root权限下创建nginx配置文件/etc/nginx/nginx.conf中指定的目录/usr/share/nginx/repo:
# mkdir -p /usr/share/nginx/repo
在root权限下修改目录/usr/share/nginx/repo的权限:
# chmod -R 755 /usr/share/nginx/repo
设置防火墙规则,开启nginx设置的端口(此处为80端口),在root权限下通过firewall设置端口开启:
# firewall-cmd --add-port=80/tcp --permanent
# firewall-cmd --reload
在root权限下查询80端口是否开启成功,输出为yes则表示80端口开启成功:
# firewall-cmd --query-port=80/tcp
也可在root权限下通过iptables来设置80端口开启:
# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
nginx服务设置好之后,即可通过ip直接访问网页,如图3:
图 3 nginx部署成功
通过下面几种方式将repo源放入到/usr/share/nginx/repo下:
在root权限下拷贝镜像中相关文件至/usr/share/nginx/repo下,并修改目录权限。
# mount /home/openEuler/openEuler-21.03-aarch64-dvd.iso /mnt/
# cp -r /mnt/Packages /usr/share/nginx/repo
# cp -r /mnt/repodata /usr/share/nginx/repo
# cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo
# chmod -R 755 /usr/share/nginx/repo
openEuler-21.03-aarch64-dvd.iso存放在/home/openEuler目录下。
使用root在/usr/share/nginx/repo下创建repo源的软链接。
# ln -s /mnt /usr/share/nginx/repo/os
/mnt为已经创建好的repo源,/usr/share/nginx/repo/os将指向/mnt。
使用repo源
repo可配置为yum源,yum(全称为 Yellow dog Updater, Modified)是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载和安装。
repo配置为yum源(软件源)
构建好的repo可以配置为yum源使用,在/etc/yum.repos.d/目录下使用root权限创建***.repo的配置文件(必须以.repo为扩展名),分为本地和http服务器配置yum源两种方式:
配置本地yum源
在/etc/yum.repos.d目录下创建openEuler.repo文件,使用构建的本地repo源作为yum源,openEuler.repo的内容如下:
[base]
name=base
baseurl=file:///home/openEuler/srv/repo
enabled=1
gpgcheck=1
gpgkey=file:///home/openEuler/srv/repo/RPM-GPG-KEY-openEuler
说明:
- [repoid]中的repoid为软件仓库(repository)的ID号,所有.repo配置文件中的各repoid不能重复,必须唯一。示例中repoid设置为base。 - name为软件仓库描述的字符串。 - baseurl为软件仓库的地址。 - enabled为是否启用该软件源仓库,可选值为1和0。默认值为1,表示启用该软件源仓库。 - gpgcheck可设置为1或0,1表示进行gpg(GNU Private Guard)校验,0表示不进行gpg校验,gpgcheck可以确定rpm包的来源是有效和安全的。
- gpgkey为验证签名用的公钥。配置http服务器yum源
在/etc/yum.repos.d目录下创建openEuler.repo文件。
若使用用户部署的http服务端的repo源作为yum源,openEuler.repo的内容如下:
[base]
name=base
baseurl=http://192.168.139.209/
enabled=1
gpgcheck=1
gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler
说明:
“192.168.139.209”为示例地址,请用户根据实际情况进行配置。若使用openEuler提供的openEuler repo源作为yum源,以AArch64架构的OS repo源为例,openEuler.repo的内容如下:
[base]
name=base
baseurl=http://repo.openeuler.org/openEuler-21.03/OS/aarch64/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-21.03/OS/aarch64/RPM-GPG-KEY-openEuler
repo优先级
当有多个repo源时,可通过在.repo文件的priority参数设置repo的优先级(如果不设置,默认优先级是99,当相同优先级的源中存在相同rpm包时,会安装最新的版本)。其中,1为最高优先级,99为最低优先级,如给openEuler.repo配置优先级为2:
[base]
name=base
baseurl=http://192.168.139.209/
enabled=1
priority=2
gpgcheck=1
gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler
dnf相关命令
dnf命令在安装升级时能够自动解析包的依赖关系,一般的使用方式如下:
dnf <command> <packages name>
常用的命令如下:
安装,需要在root权限下执行。
# dnf install <packages name>
升级,需要在root权限下执行。
# dnf update <packages name>
回退,需要在root权限下执行。
# dnf downgrade <packages name>
检查更新
$ dnf check-update
卸载,需要在root权限下执行。
# dnf remove <packages name>
查询
$ dnf search <packages name>
本地安装,需要在root权限下执行。
# dnf localinstall <absolute path to package name>
查看历史记录
$ dnf history
清除缓存目录
$ dnf clean all
更新缓存
$ dnf makecache