自建 APT 软件源安装常用软件

2024-01-25 06:50
文章标签 安装 软件 常用软件 apt

本文主要是介绍自建 APT 软件源安装常用软件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

各大使用 deb 包的 linux 发行版,官方软件源中总会有一些软件没有收录,需要我们通过各种渠道去寻找,有时即使找到了 deb 包,也会因缺少依赖而安装失败。如果自建 apt 个人软件源,则通过 apt 安装时就会自动安装依赖,从而提供一个稳定的安装环境。关于安装本地软件源的工具,可以参考 debian 网站上的一个页面 DebianRepository Setup 。

自建 apt 个人软件源分为两部分:一部分是作为服务端关于自建个人软件源的配置,一部分是共普通用户作为客户端升级和安装软件的配置。

下面,先通过一个实例来演示一下自建个人软件源的基本步骤:

#apt软件源端配置(root用户下操作)
$ su
mkdir -p /var/lib/mydebs                          # 创建软件源存放目录
cd /var/lib/mydebs                                # 切换到软件源目录
cp /path/to/you/debs/*.deb /var/lib/mydebs/       # 将你的deb包复制到软件源目录
apt-ftparchive packages . > Packages              # 生成 Packages 文件
apt-ftparchive release . > Release                # 生成 Release 文件
gpg --clearsign -o InRelease Release              # 生成 InRelease 文件
gpg --armor --output /var/lib/mydebs/public.key --export hollowman   #导出公钥#客户端配置(普通用户下操作)
$ sudo apt-key add /var/lib/mydebs/public.key     # 将本地公钥添加到 apt 可信密钥库中
$ sudo vim /etc/apt/sources.list.d/mydebs         # 添加 apt 软件源,写入下面这条源列表
deb file:/var/lib/mydebs ./
$ sudo apt update                                 # 更新软件数据
$ sudo apt install baidunetdisk                   # 安装本地软件源中的软件

一、服务端配置

1. Packages 和 Release

PackagesRelease 是软件源中的俩个索引文件,apt 升级和安装软件时,是读取这两个文件,从而精准找到升级或者安装的软件包,从而进行软件的升级和安装。

因此,如果我们放入了新的安装包到个人软件源目录中,就必须重新扫描目录生成新的索引文件。

  • Packages 内包含了每个安装包的基本信息,apt show 命令的输出信息就来自于此文件
  • Release 内包含了每个安装包的大小和校验信息(包含MD5/SHA1/SHA256/SHA512 等)

1)生成 Packages 文件

可以用 apt-ftparchive 命令来生成:

apt-ftparchive packages . > Packages   

也可以用 dpkg-scanpackages 命令来生成:

dpkg-scanpackages -m . > Packages  # -m 选项的作用是将不同版本的安装包信息都读取到 Packages 中,不加 -m 选项则只会采集最新安装包信息

2)生成 Release 文件

apt-ftparchive release . > Release

2. InRelease 和 Release.gpg

生成 InRelease 和 Release.gpg 的命令如下(期间要求输入口令):

gpg --clearsign -o InRelease Release            # 生成 Release 的明文签名文件,并指定输出文件名为InRelease
gpg -ab -o Release.gpg Release                  # 生成 Release 的文本分离签名文件,并指定输出文件名为Release.gpg

上面的命令看似简单,却用到了签名技术(也就是对文件进行签名的意思) ,因为 InReleaseRelease.gpg 这两个文件都将所谓的签名信息写入 Release 文件内容中后形成的一个新的文件,只不过 InRelease 是将 Release 内容放在前面,签名信息放在后面;而 Release.gpg 则将 Release 的内容与签名信息进行了进一步的加密。

debian12 系统下,InRelease 和 Release.gpg 只需要生成其中一个即可。

linux 系统中常见的数字签名软件有 GPG ,而要创建包含签名信息的文件必须先安装 GPG KEY(密钥)(上面的命令不是要输入口令吗,这个口令就是生成 GPG KEY 密钥时自己创建的)。

结合 apt 软件源,这里先理顺一下 apt 工具与 GPG 数字签名的因果关系:

  • 1、服务端需要有一个用于完成数字签名、解密签名的密钥对(私钥/公钥),没有就创建一个( gpg --gen-key ),每一个密钥对都会有用户姓名、用户邮箱,并且会生成唯一的用户ID,也会要求有一个保护口令。
  • 2、服务端利用密钥对中的私钥对来生成带数字签名的文件,也就是 InRelease 和 Release.gpg,期间就需要输入口令才能生成。
  • 3、客户端要访问服务端中带签名的文件,那就必须有公钥才能将签名文件进行验证才行,而 apt 工具提供了一个可信密钥库,可以将这些公钥存储进来,自动完成验证工作。

下面就来学习一下 GPG 的常见用法。

二、GPG 数字签名

1. 用 gpg --full-generate-key 或者 gpg --gen-key 创建密钥

$ sudo gpg --full-generate-key                        # 功能齐全的密钥生成方式 ,也可以用 gpg --gen-key 用默认功能生成密钥
gpg (GnuPG) 2.2.40; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.请选择您要使用的密钥类型:  (1) RSA 和 RSA (默认)(2) DSA 和 Elgamal(3) DSA(仅用于签名)   (4) RSA(仅用于签名) (14)卡中现有密钥
您的选择是? 1                                 # 选择密钥类型,默认为1
RSA 密钥的长度应在 1024 位与 4096 位之间。
您想要使用的密钥长度?(3072) 4096              # 选择密钥长度,默认是3072
请求的密钥长度是 4096 位
请设定这个密钥的有效期限。    0 = 密钥永不过期      <n>  = 密钥在 n 天后过期      <n>w = 密钥在 n 周后过期      <n>m = 密钥在 n 月后过期      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0                          # 制定密钥有效期,默认是0,也就是永久有效
密钥永远不会过期
这些内容正确吗? (y/N) y                         # 确认上述选项GnuPG 需要构建用户标识以辨认您的密钥。真实姓名: hollowman                             # 配置一个姓名
电子邮件地址: ymz316@126.com                    # 配置一个邮箱
注释: 用于deb软件源                             # 给密钥写一个注释
您正在使用‘utf-8’字符集。
您选定了此用户标识:    “hollowman (用于deb软件源) <ymz316@126.com>”更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)? o    # 确认,此后会要求你输入一个口令来保护你的私钥,记得添加和记住这个口令。
我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数发生器有更好的机会获得足够的熵。我们需要生成大量的随机字节。在质数生成期间做些其他操作(敲打键盘、移动鼠标、读写硬盘之类的)将会是一个不错的主意;这会让随机数发生器有更好的机会获得足够的熵。                          
#生成这段文字期间,可以随意敲打键盘,这会得到足够的熵(熵在物理学中是微观状态混乱度的度量)。
gpg: 吊销证书已被存储为‘/root/.gnupg/openpgp-revocs.d/7D4389198BB40D728440DDDCE0A525EB1BBAB380.rev’
公钥和私钥已经生成并被签名。
pub   rsa4096 2023-10-22 [SC]7D4389198BB40D728440DDDCE0A525EB1BBAB380
uid                      hollowman (用于deb软件源) <ymz316@126.com>
sub   rsa4096 2023-10-22 [E]

完成此步就可生成 InRelease 和 Release.gpg 文件了。

2. 查看密钥对

$ sudo gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub   rsa4096 2023-10-22 [SC]7D4389198BB40D728440DDDCE0A525EB1BBAB380
uid             [ 绝对 ] hollowman (用于deb软件源) <ymz316@126.com>
sub   rsa4096 2023-10-22 [E]
  • 第一行是公钥文件路径
  • 第二行是公钥信息,很长那段字符串中的最后16位()(E0A525EB1BBAB380)表示的就是用户id
  • 第三行是用户ID
  • 第四行是私钥简单情况

3. 删除密钥对

gpg --delete-secret-keys hollowman               # 删除私钥
gpg --delete-keys  hollowman                     # 删除公钥
gpg --delete-secret-and-public-keys hollowman    # 删除密钥对(公钥和私钥都删除)

4.导出密钥文件(方便用户直接将公钥文件添加到 apt 可信密钥库中)

gpg --armor --output /var/lib/mydebs/public.key --export hollowman                # 导出公钥,--armor可以将密钥转换为ASCII码
gpg --armor --output /var/lib/mydebs/secret.key --export-secret-keys hollowman    # 导出私钥,需要用到口令,不常用。

导出公钥后,就可以在客户端用 apt-key add 命令将这个公钥导入到可信密钥库中进行正常的软件更新和安装了。

5. 将公钥上传到公钥服务器中(方便用户直接从公钥服务器中添加公钥到 apt 可信密钥库中)

gpg --keyserver keyserver.ubuntu.com --send-keys E0A525EB1BBAB380   #上传公钥,不能用用户姓名,必须用用户ID

6. 导入密钥文件

导入私钥:

gpg --allow-secret-key-import --import /var/lib/mydebs/public.key     # 从文件导入

导入公钥:

gpg --import /var/lib/mydebs/public.key                                # 从公钥文件导入
gpg --keyserver keyserver.ubuntu.com --search-keys E0A525EB1BBAB380    # 从公钥服务器导入

7. 加解密文件

1) 对称加解密

对称加/解密无需使用到密钥,类似与普通的秘密加密。

$ gpg -c a.txt          # 对a.txt文件加密,输入两次口令后即可生成一个a.txt.gpg 二进制加密文件
$ gpg a.txt.gpg         # 对 a.txt.gpg 解密,可以使用 -o 参数指定解密后的文件名,-d 指定加密文件。

2)利用公钥加解密

常用选项:

–encrypt(-e) :加密数据
–armor(-a) :创建 ASCII 的输出(不使用这个参数输出的文件是一个二进制文件,以 .gpg 结尾)
–recipient(-r) :指定 GPG KEY 的用户名或者用户ID或者邮箱。

$ sudo gpg --recipient hollowman --armor --output a.txt.gpg --encrypt a.txt   #用公钥加密a.txt文件,需要输入口令
$ sudo gpg a.txt.gpg   #对 a.txt.gpg 解密

8. 签名及验证

apt 就是用到了签名这个东西,签名并不会可以去加密文件本身,只是会将签名信息附加上去(加签),通常需要进行对包含签名信息的文件验证或者信任(验签)。

常用选项:

–sign :指定要进行数字签名的文件,签名信息是二进制 ,默认生成文件的后缀名是gpg
–clearsign :指定要进行明文签名的文件,签名信息是 ASCII文本,默认生成文件的后缀名是asc
–detach-sign :对指定文件进行分离式签名,默认生成文件的后缀名是sig
–vertify :对签名文件进行验证

$ sudo gpg --sign a.txt            # 对 a.txt 进行数字签名,默认生成 a.txt.gpg
$ sudo gpg --clearsign a.txt       # 对 a.txt 进行明文签名,默认生成 a.txt.asc
$ sudo gpg --detach-sign a.txt     # 对 a.txt 进行分离式签名,默认生成 a.txt.sig
$ sudo gpg --vertify a.txt.gpg     # 对 a.txt.asc 文件进行验证,如果文件进行了修改,则会提示为损坏的签名。

分离式签名:签名文件只包含原文的签名信息,也就是签名信息单独作为一个文件,原文件不变。

三、用户端基本配置

1. 创建供 apt 使用的软件源列表

vim /etc/apt/source.list.d/mydebs.list
deb file:/var/lib/mydebs ./      #路径的格式也可以是这样的 file:///var/lib/mydebs ./ 或者 file:/var/lib/mydebs/ ./

2. 将公钥添加到 apt 可信密钥库中

这个就有很多方法了,可以远程添加,也可以本地添加,还可以直接使用远程公钥,这里用到的命令是 apt-key

方法1:将本地公钥添加到 apt 可信密钥库:

$ sudo apt-key add /var/lib/mydebs/public.key

方法2:将远程公钥添加到 apt 可信密钥库

$ sudo wget -qO - {{https://host.tld/filename.key}} | apt-key add -

方法3:从密钥服务器中添加到 apt 可信密钥库

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv  E0A525EB1BBAB380  # 这需要先将你的公钥上传至密钥服务器中,见上面的步骤

3.正常使用

$ sudo apt update
$ sudo apt install baidunetdisk

常用的官方 deb 包有:百度网盘,QQ,VSCode,edge,wps-office。

常用的非官方 deb 包有:优麒麟wine版微信(ukylin-wechat 和 ukylin-wine),迅雷

下面是我在debian 12 系统中搭建的个人软件源:

在这里插入图片描述

这篇关于自建 APT 软件源安装常用软件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/642424

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

软件设计师备考——计算机系统

学习内容源自「软件设计师」 上午题 #1 计算机系统_哔哩哔哩_bilibili 目录 1.1.1 计算机系统硬件基本组成 1.1.2 中央处理单元 1.CPU 的功能 1)运算器 2)控制器 RISC && CISC 流水线控制 存储器  Cache 中断 输入输出IO控制方式 程序查询方式 中断驱动方式 直接存储器方式(DMA)  ​编辑 总线 ​编辑

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2