内网环境下搭建Nexus混合源仓库(yum源和apt源)

您所在的位置:网站首页 docker离线镜像仓库 内网环境下搭建Nexus混合源仓库(yum源和apt源)

内网环境下搭建Nexus混合源仓库(yum源和apt源)

2023-09-05 11:20| 来源: 网络整理| 查看: 265

记录一下搭建Nexus混合源仓库的操作流程。通过Nexus搭建一个混合源仓库(如可配置x86架构和arm64架构的yum源、x86架构和arm64架构的apt源等多种仓库)。在内网环境下,只需要在服务器端配置好混合源仓库,那么客户端需要哪种架构哪种类型的包,将其软件源地址指向Nexus私服即可。

安装部署环境:

角色系统环境IP服务器端Centos 7.5可联网/离线环境192.168.79.101客户端1Centos 7.5离线环境192.168.79.103客户端2Ubuntu 20.04离线环境192.168.79.110

目录 前言一、Nexus部署1.1 软件包说明1.2 关闭防火墙1.3 容器化安装Nexus1.3.1 docker安装部署1.3.2 导入Nexus镜像1.3.3 启动Nexus容器 1.4 二进制方式安装Nexus1.4.1 离线安装jdk1.81.4.2 安装Nexus软件 1.5 浏览器登录Nexus 二、Nexus简介2.1 Nexus工作目录介绍2.2 Nexus页面简介2.2.1 查询页面2.2.2 仓库配置页面 2.3 Nexus资源库类型2.3.1 代理资源库proxy2.3.2 托管资源库hosted2.3.3 组资源库group 2.4 其他介绍 三、搭建yum源仓库3.1 创建blob存储3.2 创建yum源仓库3.2.1 选择yum(hosted)3.2.2 配置yumHosted仓库3.2.3 完成yumHosted仓库的搭建 3.3 客户端配置3.3.1 修改配置文件3.3.2 重新加载yum源3.3.3 离线安装软件 四、搭建apt源仓库4.1 创建blob存储4.2 生成pgp密钥对4.2.1 生成密钥对4.2.2 打印密钥信息4.2.3 导出并查看公钥4.2.4 导出并查看私钥 4.3 创建apt源仓库4.3.1 选择apt(hosted)4.3.2 配置aptHosted仓库4.3.3 完成aptHosted仓库的搭建 4.4 客户端配置4.4.1 拷贝公钥到客户端机器4.4.2 修改配置文件4.4.3 更新存储索引4.4.3 离线安装软件 五、文件上传到仓库5.1 单个文件上传5.2 多文件上传5.2.1 创建上传脚本5.2.2 上传多个rpm文件5.2.3 上传多个deb文件 六、拓展:x86、x64、arm64架构安装包的区别6.1 x86架构6.2 arm架构 七、参考资料

前言 Linux系统的软件基本是通过yum/apt两种方式从软件仓库下载安装,如CentOS/RedHat系统使用yum源仓库,Ubuntu系统使用apt源仓库。但是在内网环境或者访问互联网速度受限情况下安装linux软件很不方便,如何在一个离线环境中快速的安装我们所需要的软件包?是否能够快速制作一个包含各种架构的yum源和apt源的 All-in One 仓库?一个解决方案是通过Nexus搭建yum源和apt源的混合仓库。Nexus 是一个全能的仓储管理工具,它能解决有关软件包的一系列问题。Nexus目前提供两个版本,Nexus2和Nexus3。Nexus2主要管理maven,而Nexus3支持maven、docker、npm、yum、apt等多种仓库的配置。在内网环境中,可以在一台机器上安装Nexus软件作为服务器端,在Nexus上搭建多个yum源仓库,有的仓库放置x86架构的yum源,有的仓库放置amd64的yum源,有的仓库放置arm64架构的yum源等等。可以按需要创建多种多个yum仓库,然后上传完整的软件安装包和依赖包到对应的仓库中,那么客户端机器需要哪种架构哪种类型的包,将其软件源地址指向Nexus中对应的yum源仓库即可。同样的,apt源仓库也能如此配置。通过这样一个Nexus私服,就能够较好的解决内网环境中Linux系统安装软件问题。 一、Nexus部署 1.1 软件包说明 注意这里Nexus安装在Centos7.5系统上,所以服务器端软件都是x86架构的。Nexus安装方式可选择容器化安装或者二进制方式安装。服务器端最好能够联网,但是如果服务器端是离线环境,对于后面提到的一些必要的软件包,这里提供一些解决方法: docker安装包:二进制安装包下载地址: https://download.docker.com/linux/static/stable/x86_64/Nexus镜像包:在一台联网环境机器上保存nexus镜像,命令如下: docker save -o 保存文件命名.tar 要保存的镜像名:版本号 #例:docker save -o nexus.tar nexus:3.38.0 jdk1.8安装包:官网下载jdk的tar.gz压缩包文件,地址是: https://www.oracle.com/java/technologies/downloads/Nexus二进制安装包:可以去博客或者官网下载:地址是: https://help.sonatype.com/repomanager3/product-information/downloadrng-tools的rpm包:在一台联网环境机器上只下载不安装保存rng-tools的rpm包,命令如下: yum install --downloadonly --downloaddir=保存在本机的地址 要下载的软件 #例:yum install --downloadonly --downloaddir=/root/test rng-tools 1.2 关闭防火墙 systemctl stop firewalld systemctl disable firewalld

建议也关闭selinux,在 /etc/selinux/config中设置 selinux=disabled,或者执行命令:

sed -i 's/enforcing/disabled/' /etc/selinux/config 1.3 容器化安装Nexus

使用容器化安装Nexus需要docker环境。在需要安装Nexus软件的机器上执行docker version,若无环境则该机器需先安装docker。

1.3.1 docker安装部署 联网安装部署 在联网环境下直接下载docker,这里版本为docker-ce-18.06.0,命令如下: yum -y install yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce-18.06.0.ce 离线安装部署

如果是离线环境,提前下载好docker软件包拷贝到机器进行安装,参考:Docker离线安装部署

创建文件夹/opt/docker,将提前下载的docker安装包(这里版本为18.06.0)拷贝到此目录下。

在这里插入图片描述

在/opt/docker目录下创建系统配置文件docker.service,内容如下: [Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart=/usr/bin/dockerd ExecReload=/bin/kill -s HUP $MAINPID # Having non-zero Limit*s causes performance problems due to accounting overhead # in the kernel. We recommend using cgroups to do container-local accounting. LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity # Uncomment TasksMax if your systemd version supports it. # Only systemd 226 and above support this version. #TasksMax=infinity TimeoutStartSec=0 # set delegate yes so that systemd does not reset the cgroups of docker containers Delegate=yes # kill only the docker process, not all processes in the cgroup KillMode=process # restart the docker process if it exits prematurely Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target 在/opt/docker目录下创建安装脚本install.sh,内容如下: #!/bin/sh echo '解压tar包...' tar -xvf $1 echo '将docker目录移到/usr/bin目录下...' cp docker/* /usr/bin/ echo '将docker.service 移到/etc/systemd/system/ 目录...' cp docker.service /etc/systemd/system/ echo '添加文件权限...' chmod +x /etc/systemd/system/docker.service echo '重新加载配置文件...' systemctl daemon-reload echo '启动docker...' systemctl start docker echo '设置开机自启...' systemctl enable docker.service echo 'docker安装成功...' docker -v 在/opt/docker目录下创建卸载脚本uninstall.sh,内容如下: #!/bin/sh echo '删除docker.service...' rm -f /etc/systemd/system/docker.service echo '删除docker文件...' rm -rf /usr/bin/docker* echo '重新加载配置文件' systemctl daemon-reload echo '卸载成功...' 安装docker软件 安装目录结构如下:

在这里插入图片描述

使用脚本安装docker: sh install.sh docker-18.06.0-ce.tgz

在这里插入图片描述

1.3.2 导入Nexus镜像 联网环境下直接拉取Nexus镜像 docker pull sonatype/nexus3:3.38.0 #查看是否导入Nexus3.38.0镜像 docker images 离线环境下提前下载好nexus镜像包 创建文件夹/opt/nexus-data,将nexus镜像包(这里版本为3.38.0)拷贝到此目录下并赋权。 mkdir /opt/nexus-data chown -R 200 /opt/nexus-data 加载nexus镜像到本地: cd /opt/nexus-data/ #解压nexus镜像包: docker load -i nexus.tar docker images

在这里插入图片描述

1.3.3 启动Nexus容器

以后台启动方式启动容器,容器命名为nexus,端口号为8081,挂卷目录为:/opt/nexus-data,启动后查看容器运行情况和运行日志。

#启动nexus容器: docker run -d --name nexus --restart=always -p 192.168.79.101:8081:8081 -v /opt/nexus-data:/nexus-data sonatype/nexus3:3.38.0 #查看nexus是否运行: docker ps #查看nexus运行日志: docker logs -f nexus #查看端口开放情况: ss -tan

在这里插入图片描述

1.4 二进制方式安装Nexus

二进制方式安装nexus需要jdk1.8支持,因此要求安装的机器中必须要有jdk1.8,若无,则执行以下操作。由于联网安装的方式网上博客众多,下面就不再赘述了,以下是离线环境下的安装操作。

1.4.1 离线安装jdk1.8 创建文件夹/usr/java,将jdk1.8的软件包(jdk-8u211-linux-x64.tar.gz)拷贝到/usr/java目录下。

在这里插入图片描述

编写一个jdk安装脚本jdkinstall.sh,文件内容如下: #!/bin/bash #卸载环境中存在的jdk版本 for i in $(rpm -qa | grep jdk | grep -v grep) do echo "Deleting rpm -> "$i rpm -e --nodeps $i done if [[ ! -z $(rpm -qa | grep jdk | grep -v grep) ]]; then echo "-->Failed to remove the defult Jdk." else tar -zxvf /usr/java/jdk-8u211-linux-x64.tar.gz -C /usr/java #配置环境变量 if ! grep "JAVA_HOME=/usr/java/jdk1.8.0_211" /etc/profile then echo "export JAVA_HOME=/usr/java/jdk1.8.0_211" >>/etc/profile echo -e 'export PATH=$JAVA_HOME/bin:$PATH'>>/etc/profile echo -e 'export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar'>>/etc/profile source /etc/profile fi fi echo "java version:" java -version

脚本详细说明: 在这里插入图片描述

执行jdkinstall脚本安装jdk1.8: sh jdkinstall.sh

在这里插入图片描述

1.4.2 安装Nexus软件 创建文件夹/opt/nexus,将nexus的二进制安装包(这里的nexus版本为3.38.0-01)拷贝到机器中并解压到/opt/nexus目录下。 mkdir /opt/nexus tar xvf nexus-3.38.0-01-unix.tar.gz -C /opt/nexus

在这里插入图片描述

修改Nexus的启动文件,否则在root用户下启动Nexus会报错。 cd /opt/nexus/nexus-3.38.0-01/bin vi /opt/nexus/nexus-3.38.0-01/bin/nexus

在这里插入图片描述 修改其中一条配置 run_as_root=false (修改前是true) 在这里插入图片描述

配置Nexus的环境变量 #编辑环境变量文件: vi /etc/profile #在环境变量文件profile最后面加入两条命令: export NEXUS_HOME=/opt/nexus/nexus-3.38.0-01 export PATH=$PATH:$NEXUS_HOME/bin #保存文件后执行以下命令使之生效 source /etc/profile

profile文件末尾应有jdk1.8和nexus的export命令共5条: 在这里插入图片描述

安装后启动Nexus,其中第一次启动花费时间约2-3分钟,启动命令: nexus run

成功启动Nexus的运行结果如下: 在这里插入图片描述

其他常用相关命令: #在后台启动Nexus服务: nexus start #停止后台的Nexus服务 : nexus stop #查看后台Nexus服务状态 : nexus status #重新启动后台的Nexus服务 : nexus restart 1.5 浏览器登录Nexus

Nexus默认端口号为8081,在浏览器访问【http://ip:端口号】,例如http://192.168.79.101:8081。点击右上角的 Sign in 登录Nexus。 在这里插入图片描述

输入用户名和密码。首次登录Nexus的用户名为admin,密码是自动生成,在登录页面会提示密码所在地址(通常容器化安装的密码生成在挂卷目录下,二进制方式安装的密码生成在安装目录下的sonatype-work/nexus3目录下)。在所提示的目录下查看admin.password 文件,以该密码登录即可。注意更改密码后admin.password文件将自动删除。

在这里插入图片描述

以初始密码登陆Nexus后还需要4个步骤完善配置。首先更改初始密码,如这里是amdin123。 在这里插入图片描述

配置匿名访问。启用匿名访问意味着在默认情况下,用户可以在没有凭证的情况下搜索、浏览和下载资源库的组件。此处我们允许匿名访问。

在这里插入图片描述

完成Nexus初始化配置。可以查看Nexus的查询页面和仓库配置页面。

在这里插入图片描述 在这里插入图片描述

二、Nexus简介 2.1 Nexus工作目录介绍

容器化部署Nexus,存储nexus数据的目录在自定义目录/opt/nexus-data。使用二进制方式部署Nexus,软件包解压后得到 nexus-3.38.0-01 文件夹和 sonatype-work 文件夹。nexus-3.38.0-01文件夹(安装目录)放的是Nexus服务器相关的文件,sonatype-work文件夹(数据目录)放的是Nexus工作的数据文件。Nexus工作目录如下: 在这里插入图片描述

根据官方文档,各目录的作用如下: blobs:创建blob的默认路径,每个blob拥有一块单独的存储空间。cache:此目录包含当前缓存的karaf软件包的信息。db:OrientDB数据库的数据,用于存储Nexus的元数据的数据库。elasticsearch:此目录包含elasticsearch的当前配置状态。etc:运行时配置状态和关于资源库的自定义的相关的东西。keystores:用于识别repository manager自动生成的秘钥。log:运行实例生成的日志文件,也有日志文件的压缩包。tmp:用于存储临时文件的目录。 2.2 Nexus页面简介 2.2.1 查询页面

左侧边栏的查询页面包括3个部分,分别是Search、Browse、Upload。 在这里插入图片描述

Search:点击search选项,会发现下面还存在二级菜单。其实就用来查询某个包是否存在某个仓库。

在这里插入图片描述

Browse:在这里能够看到所有的仓库,其中包含Nexus默认创建的和自己创建的仓库。Browse则提供了一种Nexus私服的全局视图,点击仓库进入可查看仓库里的包,也可以上传对应类型的包。

在这里插入图片描述

Upload:顾名思义就是上传包到仓库中,可以选择其中一个比如aptHosted仓库,然后上传文件,但是在浏览器页面只能上传单个本地文件。

在这里插入图片描述

2.2.2 仓库配置页面

在这里能够对各种资源库进行配置管理。主要介绍一些常用的功能。

Repository。点击Respository查看下级选项:

(1)Blob Stores:文件存储的地方,创建一个blob对应文件系统的一个目录,相当于一个分区。 (2)Repositories:创建仓库的地方,仓库分为三种:proxy、hosted、group。

在这里插入图片描述

其他部分:

在这里插入图片描述

更多关于Nexus的介绍可查看官方文档:https://my.sonatype.com/

2.3 Nexus资源库类型

Nexus的资源库类型有三种:代理资源库proxy、托管资源库hosted、组资源库group。

2.3.1 代理资源库proxy proxy就是配置了官网的远程仓库地址的资源库,本地找不到,就会通过代理资源库中的地址,找到远程仓库,从远程仓库中下载所需要的包。其优势是只要其中一个人从远程仓库下载了,就会缓存到Nexus私服,其他人只需要从Nexus私服上进行下载,可以提高下载速度,节约资源。创建 Nexus 代理仓库时,除了设置远程仓库的地址和认证信息外,还可以设置以下选项: Download Remote Indexes:设置下载远程仓库的索引。(下载远程仓库的索引后,即使没有缓存远程仓库的构件,用户依然能搜索或浏览构件的基本信息)。Checksum Policy:设置校验,出错时是忽略、记录警告信息还是拒绝下载。Artifact Max Age:设置多久更新一次Artifact(对于策略为 release 的仓库,可以设置为 -1,也就是永不更新)。Metadata Max Age:设置多久更新一次 metadata 。 2.3.2 托管资源库hosted hosted就是放在本地的资源库的包,可以自己制作包上传到托管资源库,也可以在网上找到所需要的包下载下来,放在托管资源库中,交给Nexus统一管理。hosted有三种方式,Releases(一般是已经发布的)、Snapshot(未发布的版本)、Mixed(混合的)。创建 Nexus 托管仓库时,默认存放在 sonatype-work/nexus/storage/[repository-id]/ 下,也可以自定义仓库的存储路径。同时可以设置以下选项: Deployment Policy:只读(禁止部署)、关闭多次部署(同一构件只能部署一次)或允许多次部署。Allow File Browser:设置是否允许在 Repository 的 Browse Storage 选项卡中浏览仓库。Include in Search:设置是否对该仓库进行索引并暴露给搜索。Publish URL:设置是否通过 URL 提供服务,如为 false ,访问该仓库的地址时会得到 404。Not Found Cache TTL:缓存未找到文件信息的时间。 2.3.3 组资源库group group能把多个仓库合成一个仓库来使用,其实组资源库中并没有包,而是把代理资源库和托管资源库统一配置到组资源库中,然后组资源库作为一个唯一的public提供给所有人使用。仓库策略分为 release与snapshot,一般用在proxy仓库和 hosted仓库,分别表示发布版和快照版。而仓库组没有 Release 和 Snapshot 的区别,创建时会让用户选择由哪些宿主仓库或代理仓库构成。仓库组所包含的仓库的顺序决定了仓库组遍历它们的次序,所以最好将常用的仓库放在前面。 2.4 其他介绍

以常用的yum源仓库举例,Nexus3支持三种类型yum源仓库:hosted类型的yum仓库、proxy类型的yum仓库、group类型的yum仓库。 在这里插入图片描述 再查看仓库创建页面,Nexus3还支持两种类型的apt源仓库,支持三种类型的docker仓库、三种类型的maven仓库等等… 在这里插入图片描述

三、搭建yum源仓库

这里主要考虑在内网环境中,所以搭建hosted类型的yum源仓库,需要上传rpm包到yum源仓库,客户端通过yum方式安装软件。可以搭建多个hosted类型的yum源仓库,分门别类存放不同架构的rpm包,然后不同系统的客户端的软件源指向相对应架构的yum源仓库即可。

3.1 创建blob存储

在这里插入图片描述

blob类型为file,自定义命名,如这里是yum,命名后Nexus自动生成路径Path,这里用默认存储路径即可。Soft Quota意为blob存储超过约束条件时,会发出警报,这里不勾选。

在这里插入图片描述

创建成功后此页面可以看到有两个存储空间,一个是系统默认生成的(default),一个是我们创建的(yum)。

在这里插入图片描述

3.2 创建yum源仓库

选择Repositories–Create repository。 在这里插入图片描述

3.2.1 选择yum(hosted)

选择最下面的仓库类型: 在这里插入图片描述

3.2.2 配置yumHosted仓库

在这里插入图片描述

仓库配置填写说明: Name:自定义一个名称,创建后无法重命名,注意命名。这里是yumHosted。online:存储库接是否受传入的请求。默认勾选,允许向此仓库推入rpm包。Repodata Depth:指定创建repodata文件夹的存储库深度,这里建议选择0。Layout Policy:验证所有路径都是rpm或yum元数据,这里默认strict。Blob store:我们下拉选择前面创建好的专用blob:yum。Strict Content Type Validation:默认勾选,验证所有路径都是rpm或yum元数据。Deployment policy:控制是否允许对工件进行部署和更新。默认是Disable redeploy,这里选择Allow redeploy。点击最下面Creat repository 完成仓库创建。

在这里插入图片描述

3.2.3 完成yumHosted仓库的搭建

在仓库配置页面可以看到刚刚创建的yumHosted仓库。点击该仓库,查看该仓库的详细配置。重点需要关注的是该仓库的地址url(后续上传包的脚本、客户端软件源的配置中都需要使用到这个地址)。 在这里插入图片描述 这里yumHosted的地址是:http://192.168.79.101:8081/repository/yumHosted/。 在这里插入图片描述 到这里一个Hosted类型的yum源仓库已经配置完成,客户端只需要把获取软件软件源的地址指向这个仓库即可。

3.3 客户端配置

客户端机器在内网环境中,将其yum源地址指向Nexus的yumHosted仓库。

#备份原来的配置文件到repoBackup文件夹中 cd /etc/yum.repos.d mkdir repoBackup mv *.repo repoBackup/ #创建新配置文件nexus.repo并进行编辑 vi /etc/yum.repos.d/nexus.repo 3.3.1 修改配置文件

nexus.repo文件内容如下:

[nexus] name=Nexus Yum Repository baseurl=http://192.168.79.101:8081/repository/yumHosted/ enabled=1 gpgcheck=0 配置文件说明: [nexus]:容器名称,一定要放在[]中name:自定义仓库名称baseurl:挂载的Nexus仓库地址enabled:是否启用yum源:0为不启用,1为启用gpgcheck:是否检查GPG-KEY:0为不检查,1为检查 3.3.2 重新加载yum源 #清理yum缓存: yum clean all #建立元数据缓存: yum makecache #查看资源库文件: yum list

如图所示: 在这里插入图片描述

3.3.3 离线安装软件

通过yum list可以查看到资源库中的所有文件,分别为软件名\版本号\信息。其中第三列信息中带@是已经安装的,base是linux自带的软件包,而nexus则是在Nexus上配置的yum源仓库中可安装的软件包。上传软件全部的安装包和依赖包到Nexus的hosted类型的yum仓库中,此时可以通过yum install 安装yum源仓库中的软件,客户端配置完成。 在这里插入图片描述

四、搭建apt源仓库

这里主要考虑在内网环境下,所以搭建hosted类型的apt源仓库,需要上传deb包到apt源仓库,客户端通过apt-get方式安装软件。可以搭建多个hosted类型的apt源仓库,分门别类存放不同架构的deb包,然后不同系统的客户端的软件源指向相对应架构的apt源仓库即可。

4.1 创建blob存储

自定义命名,如这里是创建一个名为apt的blob存储区: 在这里插入图片描述

4.2 生成pgp密钥对

根据官方文档,创建apt的hosted类型仓库时需要生成 PGP 签名密钥对或使用现有密钥对。即在Nexus上创建apt(hosted)仓库需要添加私钥,在配置客户端apt源地址时需要添加公钥。所以需要提前在服务器端(安装Nexus的机器)生成公钥和私钥。

4.2.1 生成密钥对

通常linux系统自带有pgp软件,若无法生成密钥对,离线环境下需要提前下载好软件包和依赖包进行安装。

gpg --gen-key 注意选择如下: 密钥种类选择RSA:1密钥长度:2048密钥永不过期:0用户标识:(姓名、电子邮件、注释)方便识别即可密钥保护:该密码是私钥的保护密码,需牢记密钥生成成功

在这里插入图片描述 完成以上步骤后,系统要求设定一个私钥的密码。这是为了防止误操作,或者系统被侵入时有人擅自动用私钥。这个密码是我们需要记住的。 在这里插入图片描述

通常在一分钟内就能够生成密钥对,但是在有些系统中生成密钥对可能会出现以下问题卡住,原因是是生成密钥时依赖系统的/dev/urandom随机数,而此文件中的随机数的生成依赖于系统的中断(根据中断频率产生随机数),随机数不足,所以无法正常生成密钥。 在这里插入图片描述 若出现该问题,解决方法有两种,一种是按提示所说,随机敲打键盘输入足够多的随机数,需要等待较长一段时间。第二种则需要提前安装rng-tools软件: (1)不中断操作,另开一个终端窗口。 (2)将提前准备好rng-tools安装包(rng-tools-6.3.1-5.el7.x86_64.rpm)上传到Nexus的一个仓库中,即这台机器既是服务器端又是客户端,配置好软件源指向Nexus仓库即可安装rng-tools::

yum -y install rng-tools

(3)执行:

rngd -r /dev/urandom

(4)将随机文件random删除掉,建立一个random的软链接,源地址为urandom:

mv /dev/random /dev/random.bak ln -s /dev/urandom /dev/random

如图所示: 在这里插入图片描述 (5)返回原来的终端,查看发现已成功生成gpg密钥对。 在这里插入图片描述

4.2.2 打印密钥信息

这一步主要是为了验证机器已经生成了gpg密钥对。执行以下命令:

gpg --list-keys

在这里插入图片描述

4.2.3 导出并查看公钥 #公钥文件nexus_pub.asc在当前目录下生成 gpg -a -o nexus_pub.asc --export nexus

在这里插入图片描述

4.2.4 导出并查看私钥 #私钥文件nexus_pri.asc在当前目录下生成 gpg -a -o nexus_pri.asc --export-secret-key nexus

在这里插入图片描述

拓展

Centos系统机器公钥存放地址:/etc/pki/rpm-gpg/ cd /etc/pki/rpm-gpg/ ls #指定一个公钥: rpm --import +公钥所在目录地址 Ubuntu系统机器的公钥的存放位置默认在 /home/ubuntu/.ssh 4.3 创建apt源仓库 4.3.1 选择apt(hosted)

在这里插入图片描述

4.3.2 配置aptHosted仓库

在这里插入图片描述

仓库配置填写说明: Name:自定义一个名称,创建后无法重命名,注意命名。这里是aptHosted。online:存储库是否接受传入的请求。默认勾选,允许向此仓库推入deb包。Distribution:系统版本标识。这里系统为Ubuntu 20.04,版本代号为focal。Signing Key:添加之前服务器端生成的pgp私钥。Passphrase:填写pgp私钥的保护密码。Blob store:我们下拉选择前面创建好的专用存储区apt。Strict Content Type Validation:默认勾选,验证所有路径都是deb或apt元数据。Deployment policy:部署策略,控制对是否允许工件进行部署和更新,下拉选择Allow redeploy(允许重新部署)。点击Create repository创建仓库

在这里插入图片描述 在这里插入图片描述 注意:不同版本的Ubuntu对应不同的版本代号,这里主要关注ubuntu长期支持版代号如:focal、bionic、xenial。 在这里插入图片描述

4.3.3 完成aptHosted仓库的搭建

在这里插入图片描述 在仓库配置页面可以看到刚刚创建的aptHosted仓库。点击该仓库,查看仓库的详细配置。重点需要关注的是该仓库的地址url(后续上传包的脚本、客户端软件源的配置中都需要使用到这个地址)。这里aptHosted的仓库地址是:http://192.168.79.101:8081/repository/aptHosted/。 在这里插入图片描述 此时一个Hosted类型的apt源仓库已经配置完成,只需在客户端把获取软件软件源的地址指向这个仓库即可。

4.4 客户端配置

客户端机器在内网环境中,将其apt源地址指向Nexus的aptHosted仓库。

4.4.1 拷贝公钥到客户端机器

将前面服务器端(安装Nexus的机器)生成的公钥文件(nexus_pub.asc)拷贝到此客户端机器的某个目录下。这里是放在/etc/apt/trusted.gpg.d 文件夹下,绝对路径为:/etc/apt/trusted.gpg.d/nexus_pub.asc。 在这里插入图片描述

4.4.2 修改配置文件

将客户端机器的apt源地址指向Nexus的aptHosted仓库地址,编辑apt源配置文件/etc/apt/sources.list,内容如下:

deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/nexus_pub.asc] http://192.168.79.101:8081/repository/aptHosted focal main 配置文件说明: arch=架构类型(可不加,但是会提示不支持 ‘i386’ 体系结构)signed-by=公钥在此机器的绝对路径将apt源地址指向Nexus的aptHosted仓库地址focal为Ubuntu版本代号

在这里插入图片描述

4.4.3 更新存储索引

安装软件时通过metadata/dists/focal/main 索引找到软件安装包进行安装。 在这里插入图片描述

#清理原缓存 apt-get clean #更新apt源 apt-get update

在这里插入图片描述

4.4.3 离线安装软件

此时客户端在离线环境下可以对aptHosted仓库中的软件包进行安装,客户端配置完成。

apt-get -y install xxx 五、文件上传到仓库 5.1 单个文件上传

在浏览器页面上传文件到仓库有两种方式:

Browse–选择仓库–上传文件Upload–选择仓库–上传文件 在查询页面点击Browse,选择要上传的仓库,进入仓库后此时仓库内没有任何文件,通过Upload component 即可上传本地文件。

在这里插入图片描述 在这里插入图片描述

在查询页面点击Upload,选择要上传的仓库上传本地文件。

在这里插入图片描述

上传界面如下:

在这里插入图片描述

注意如果上传相同名字的文件,后者会覆盖前者。另外根据官方文档,在浏览器界面只能上传单个文件,yum的hosted类型仓库只能上传.rpm和.drpm 类型的文件,apt的hosted类型仓库只能上传.deb和.udeb类型的文件。

在这里插入图片描述

5.2 多文件上传

因为在浏览器界面只能上传单个文件,因此如果要上传多个rpm或者deb类型的文件,应提前把所有需要上传的所有包放到服务器端的某个目录下。

5.2.1 创建上传脚本 进入待上传文件所在目录,创建一个upload.sh 脚本并赋权: #创建脚本: touch upload.sh #赋权: chmod 777 upload.sh #编辑文件: vi upload.sh upload.sh脚本内容如下: #!/bin/bash type=$1 url=$2 if [ $type == "rpm" ] then echo $(date) "正在上传rpm包..." find . -name "*.rpm" -exec curl -v -u "admin:admin123" --upload-file {} $url/Packages/{} \; echo $(date) "rpm包上传完成" elif [ $type == "deb" ] then echo $(date) "正在上传deb包..." find . -name "*.deb" -exec curl -v -u "admin:admin123" -X POST -H "Content-Type: multipart/form-data" --data-binary "@{}" $url/ \; echo $(date) "deb包上传完成" fi 注意脚本支持上传rpm和deb两种类型文件。其中参数 -v 是显示详细的上传过程信息(可省略),参数 -u 后是Nexus的用户名和密码。脚本执行命令为:./upload.sh + 文件类型 + 上传仓库地址。 5.2.2 上传多个rpm文件 如图所示 /root/test/rpm 文件夹下有6个rpm文件,将rpm包上传到yum_uploadtest仓库中。执行upload.sh脚本: ./upload.sh rpm http://192.168.79.103:8081/repository/yum_uploadtest/

在这里插入图片描述

回到浏览器查看,本地的6个rpm包已经上传到yum_uploadtest仓库的Packages目录下了。

在这里插入图片描述

如果文件数量较多,上传时间比较久。上传成功后通常一分钟内能够自动生成索引,刷新Nexus界面后repodata文件夹自动生成。

在这里插入图片描述

5.2.3 上传多个deb文件 如图所示 /root/test/deb 目录下有8个deb文件,将deb包上传到apt_uploadtest仓库中。执行upload.sh脚本: ./upload.sh deb http://192.168.79.103:8081/repository/apt_uploadtest/

回到浏览器查看,本地的8个deb包已经上传到apt_uploadtest仓库的packages目录下了。

在这里插入图片描述

deb文件上传到Nexus仓库后会自动按文件首字母排列好仓库内的文件。

在这里插入图片描述

六、拓展:x86、x64、arm64架构安装包的区别 6.1 x86架构

X86追求性能最优,缺点是功耗大,不节能(和arm架构对比)

x86和x64 x86、x64基于intel处理的编译指令集,x86是指32位处理器、x64是指64位处理器,因为x64指令是在x86指令集上扩展出来的,所以x86编译出来的程序可以在64位处理器上运行,反过来就不行。

x64和amd64 这个有点历史渊源,一开始interl和amd都是x86架构,后来intel和amd都开始研发各自的64位处理器指令集,intel选择开辟新的指令集,amd则选择在x86上扩展。后来证明intel方案失败了,最终intel也采用amd64指令标准,做了稍微的修改,所以有了x64和amd64。

6.2 arm架构

arm架构追求低功耗(节能),缺点是采用精简指令集,导致编译器处理复杂,因此性能相对X86架构的差。

和x86架构不同,arm架构是另一种处理器指令即RISC指令集处理器架构,一般IOS系统在用。

32位处理器需要armv7,或者armv7s架构64位处理器需要arm64架构 七、参考资料

内网自建yum源和apt源(含各信创系统) CentOS7.x上用nexus搭建yum私有仓库 centos GPG简单使用 官方创建apt仓库说明文档



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3