内网环境下搭建Nexus混合源仓库(yum源和apt源)
记录一下搭建Nexus混合源仓库的操作流程。通过Nexus搭建一个混合源仓库(如可配置x86架构和arm64架构的yum源、x86架构和arm64架构的apt源等多种仓库)。在内网环境下,只需要在服务器端配置好混合源仓库,那么客户端需要哪种架构哪种类型的包,将其软件源地址指向Nexus私服即可。
安装部署环境:
角色 | 系统 | 环境 | IP |
---|---|---|---|
服务器端 | Centos 7.5 | 可联网/离线环境 | 192.168.79.101 |
客户端1 | Centos 7.5 | 离线环境 | 192.168.79.103 |
客户端2 | Ubuntu 20.04 | 离线环境 | 192.168.79.110 |
前言
- 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/download - rng-tools的rpm包:在一台联网环境机器上只下载不安装保存rng-tools的rpm包,命令如下:
yum install --downloadonly --downloaddir=保存在本机的地址 要下载的软件#例:yum install --downloadonly --downloaddir=/root/test rng-tools
1.2 关闭防火墙
systemctl stop firewalldsystemctl 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 lvm2yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repoyum -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 EngineDocumentation=https://docs.docker.comAfter=network-online.target firewalld.serviceWants=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 dockerExecStart=/usr/bin/dockerdExecReload=/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=infinityLimitNPROC=infinityLimitCORE=infinity# Uncomment TasksMax if your systemd version supports it.# Only systemd 226 and above support this version.#TasksMax=infinityTimeoutStartSec=0# set delegate yes so that systemd does not reset the cgroups of docker containersDelegate=yes# kill only the docker process, not all processes in the cgroupKillMode=process# restart the docker process if it exits prematurelyRestart=on-failureStartLimitBurst=3StartLimitInterval=60s[Install]WantedBy=multi-user.target
- 在/opt/docker目录下创建安装脚本install.sh,内容如下:
#!/bin/shecho '解压tar包...'tar -xvf $1echo '将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.serviceecho '重新加载配置文件...'systemctl daemon-reloadecho '启动docker...'systemctl start dockerecho '设置开机自启...'systemctl enable docker.serviceecho 'docker安装成功...'docker -v
- 在/opt/docker目录下创建卸载脚本uninstall.sh,内容如下:
#!/bin/shecho '删除docker.service...'rm -f /etc/systemd/system/docker.serviceecho '删除docker文件...'rm -rf /usr/bin/docker*echo '重新加载配置文件'systemctl daemon-reloadecho '卸载成功...'
- 安装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-datachown -R 200 /opt/nexus-data
- 加载nexus镜像到本地:
cd /opt/nexus-data/#解压nexus镜像包:docker load -i nexus.tardocker 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 $idoneif [[ ! -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 fifiecho "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/nexustar xvf nexus-3.38.0-01-unix.tar.gz -C /opt/nexus
- 修改Nexus的启动文件,否则在root用户下启动Nexus会报错。
cd /opt/nexus/nexus-3.38.0-01/binvi /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-01export 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.dmkdir repoBackupmv *.repo repoBackup/#创建新配置文件nexus.repo并进行编辑vi /etc/yum.repos.d/nexus.repo
3.3.1 修改配置文件
nexus.repo文件内容如下:
[nexus]name=Nexus Yum Repositorybaseurl=http://192.168.79.101:8081/repository/yumHosted/enabled=1gpgcheck=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.bakln -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=amd64signed-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/bashtype=$1url=$2if [ $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仓库说明文档
来源地址:https://blog.csdn.net/qq_44214446/article/details/128272077
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341