搭建repo服务器

    将openEuler提供的ISO发布包openEuler-21.09-aarch64-dvd.iso创建为repo源,如下以使用nginx进行repo源部署,提供http服务为例进行说明。

    使用mount挂载,将openEuler的ISO发布包openEuler-21.09-aarch64-dvd.iso创建为repo源,并能够对repo源进行更新。

    请从如下网址获取openEuler的ISO发布包:

    https://repo.openeuler.org/openEuler-21.09/ISO/

    挂载ISO创建repo源

    在root权限下使用mount命令挂载ISO发布包。

    示例如下:

    挂载好的mnt目录如下:

    1. │── boot.catalog
    2. │── docs
    3. │── EFI
    4. │── images
    5. │── Packages
    6. │── repodata
    7. │── TRANS.TBL
    8. └── RPM-GPG-KEY-openEuler

    其中,Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。

    创建本地repo源

    可以拷贝ISO发布包中相关文件至本地目录以创建本地repo源,示例如下:

    1. # mount /home/openEuler/openEuler-21.09-aarch64-dvd.iso /mnt/
    2. $ mkdir -p ~/srv/repo/
    3. $ cp -r /mnt/Packages ~/srv/repo/
    4. $ cp -r /mnt/repodata ~/srv/repo/
    5. $ cp -r /mnt/RPM-GPG-KEY-openEuler ~/srv/repo/

    从而本地repo目录如下:

    1. .
    2. │── Packages
    3. │── repodata
    4. └── RPM-GPG-KEY-openEuler

    Packages为rpm包所在的目录,repodata为repo源元数据所在的目录,RPM-GPG-KEY-openEuler为openEuler的签名公钥。

    更新repo源有两种方式:

    • 通过新版本的ISO更新已有的repo源,与创建repo源的方式相同,即挂载ISO发布包或重新拷贝ISO发布包至本地目录。

    • 在repo源的Packages目录下添加rpm包,然后通过createrepo命令更新repo源

      1. $ createrepo --update --workers=10 ~/srv/repo

      其中,--update表示更新,--workers表示线程数,可自定义。

    安装openEuler操作系统,在openEuler上通过nginx部署repo源。

    nginx安装与配置

    1. 请自行下载nginx工具并在root权限下安装nginx。
    2. 安装nginx之后,在root权限下配置/etc/nginx/nginx.conf。

      1. user nginx;
      2. worker_processes auto; # 建议设置为core-1
      3. error_log /var/log/nginx/error.log warn; # log存放位置
      4. pid /var/run/nginx.pid;
      5. events {
      6. worker_connections 1024;
      7. }
      8. http {
      9. include /etc/nginx/mime.types;
      10. default_type application/octet-stream;
      11. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
      12. '$status $body_bytes_sent "$http_referer" '
      13. access_log /var/log/nginx/access.log main;
      14. keepalive_timeout 65;
      15. server {
      16. listen 80;
      17. server_name localhost; # 服务器名(url)
      18. client_max_body_size 4G;
      19. root /usr/share/nginx/repo; # 服务默认目录
      20. location / {
      21. autoindex on; # 开启访问目录下层文件
      22. autoindex_exact_size on;
      23. autoindex_localtime on;
      24. }
      25. }
      26. }

    启动nginx服务

      1. # systemctl enable nginx
      2. # systemctl start nginx
    1. nginx是否启动成功可通过下面命令查看:

      1. $ systemctl status nginx
      • 表示nginx服务启动成功

        图 1 nginx服务启动成功

      • 若nginx服务启动失败,查看错误信息:

      1. $ systemctl status nginx.service --full

      图 2 nginx服务启动失败

      1. ![](/projects/openeuler-21.09-zh/Administration/figures/nginx_start_failed.png)

      图2所示nginx服务创建失败,是由于目录/var/spool/nginx/tmp/client_body创建失败,在root权限下手动进行创建,类似的问题也这样处理:

      1. # mkdir -p /var/spool/nginx/tmp/client_body
      2. # mkdir -p /var/spool/nginx/tmp/proxy
      3. # mkdir -p /var/spool/nginx/tmp/fastcgi
      4. # mkdir -p /usr/share/nginx/uwsgi_temp
      5. # mkdir -p /usr/share/nginx/scgi_temp
    1. 在root权限下创建nginx配置文件/etc/nginx/nginx.conf中指定的目录/usr/share/nginx/repo:

    2. 在root权限下修改目录/usr/share/nginx/repo的权限:

      1. # chmod -R 755 /usr/share/nginx/repo
    3. 设置防火墙规则,开启nginx设置的端口(此处为80端口),在root权限下通过firewall设置端口开启:

      1. # firewall-cmd --add-port=80/tcp --permanent
      2. # firewall-cmd --reload

      在root权限下查询80端口是否开启成功,输出为yes则表示80端口开启成功:

      1. # firewall-cmd --query-port=80/tcp

      也可在root权限下通过iptables来设置80端口开启:

      1. # iptables -I INPUT -p tcp --dport 80 -j ACCEPT
    4. nginx服务设置好之后,即可通过ip直接访问网页,如:

      图 3 nginx部署成功
      搭建repo服务器 - 图5

    5. 通过下面几种方式将repo源放入到/usr/share/nginx/repo下:

      • 在root权限下拷贝镜像中相关文件至/usr/share/nginx/repo下,并修改目录权限。

        1. # mount /home/openEuler/openEuler-21.09-aarch64-dvd.iso /mnt/
        2. # cp -r /mnt/Packages /usr/share/nginx/repo
        3. # cp -r /mnt/repodata /usr/share/nginx/repo
        4. # cp -r /mnt/RPM-GPG-KEY-openEuler /usr/share/nginx/repo

        openEuler-21.09-aarch64-dvd.iso存放在/home/openEuler目录下。

      • 使用root在/usr/share/nginx/repo下创建repo源的软链接。

        1. # ln -s /mnt /usr/share/nginx/repo/os

        /mnt为已经创建好的repo源,/usr/share/nginx/repo/os将指向/mnt。

    repo可配置为yum源,yum(全称为 Yellow dog Updater, Modified)是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载和安装。

    repo配置为yum源(软件源)

    • 配置http服务器yum源

      在/etc/yum.repos.d目录下创建openEuler.repo文件。

      • 若使用用户部署的http服务端的repo源作为yum源,openEuler.repo的内容如下:

        1. [base]
        2. name=base
        3. baseurl=http://192.168.139.209/
        4. enabled=1
        5. gpgcheck=1
        6. gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler
      • 若使用openEuler提供的openEuler repo源作为yum源,以AArch64架构的OS repo源为例,openEuler.repo的内容如下:

        1. [base]
        2. name=base
        3. baseurl=http://repo.openeuler.org/openEuler-21.09/OS/aarch64/
        4. enabled=1
        5. gpgcheck=1
        6. gpgkey=http://repo.openeuler.org/openEuler-21.09/OS/aarch64/RPM-GPG-KEY-openEuler

    repo优先级

    当有多个repo源时,可通过在.repo文件的priority参数设置repo的优先级(如果不设置,默认优先级是99,当相同优先级的源中存在相同rpm包时,会安装最新的版本)。其中,1为最高优先级,99为最低优先级,如给openEuler.repo配置优先级为2:

    1. [base]
    2. name=base
    3. baseurl=http://192.168.139.209/
    4. enabled=1
    5. priority=2
    6. gpgcheck=1
    7. gpgkey=http://192.168.139.209/RPM-GPG-KEY-openEuler

    dnf命令在安装升级时能够自动解析包的依赖关系,一般的使用方式如下:

    常用的命令如下:

    • 安装,需要在root权限下执行。

      1. # dnf install <packages name>
    • 升级,需要在root权限下执行。

      1. # dnf update <packages name>
    • 回退,需要在root权限下执行。

      1. # dnf downgrade <packages name>
    • 检查更新

      1. $ dnf check-update
    • 卸载,需要在root权限下执行。

      1. # dnf remove <packages name>
    • 查询

      1. $ dnf search <packages name>
    • 本地安装,需要在root权限下执行。

      1. # dnf localinstall <absolute path to package name>
    • 查看历史记录

      1. $ dnf history
      1. $ dnf clean all