1. 服务端软件源构建
1.1. 获取软件包
软件包的获取来源根据需求选择:
- 自己构建的 deb 软件包
- 从其他存储获取的 deb 软件包
- 从软件源获取目标软件包,如果不知道有哪些依赖包,可以在能上网的机器上执行
apt-get install ***
安装一次软件,默认安装包会存储在/var/cache/apt/archives
。将获取的软件归置在一个目录中,例如 : /var/packages。如果不需要安装可以使用sudo apt-get -d install <包名>
只下载不安装
1.2. 构建本地 apt 源(apt版本低于1.5)
使用 dpkg-scanpackages 命令生成 APT 可以使用的软件包索引文件
$ cd /var/
$ dpkg-scanpackages packages /dev/null | gzip> packages/Packages.gz
$ dpkg-scanpackages sources /dev/null | gzip> packages/Sources.gz
注意一下路径问题。等待系统扫描完所有的软件包后,会返回命令行,并且在 packages 文件夹中生成一个名为 Packages.gz 的压缩文件,存有这个文件夹中的软件包信息及其依赖关系。
在 /etc/apt/sources.list
中添加
deb file:///var/packages/ hasty main universe multiverse
或者
deb file:///var/ packages/
注意斜杠和空格!
打开终端,输入
#apt-get update(修改了sources.list文件之后一定要执行一下这个命令)
以更新本地的软件包列表
1.3. 构建本地 apt 源(apt版本高于1.5)
同上获取软件包
生成索引文件
apt-ftparchive packages . > Packages
apt-ftparchive release . > Release
生成签名
以下操作在 /opt/debs 目录下进行
生成私钥信息
$ gpg --gen-key
......
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key A035D65B714C3CED marked as ultimately trusted
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/B394614D9EE5DB4DBC84B26FA035D65B714C3CED.rev'
public and secret key created and signed.
pub rsa3072 2021-05-07 [SC] [expires: 2023-05-07]
B394614D9EE5DB4DBC84B26FA035D65B714C3CED
uid wenyu <wenyu@gmail.com>
sub rsa3072 2021-05-07 [E] [expires: 2023-05-07]
过程需要填写用户名和邮箱信息提示,以及配置密码信息提示。随后会生成秘钥,但是过程中需要有足够的随机场景获取熵,如果等待时间较长,参考 FAQ 中 "运行GPG --GEN-KEY生成KEY时出现卡住的问题"
添加私钥
gpg -a --export B394614D9EE5DB4DBC84B26FA035D65B714C3CED | apt-key add -
OK
认证
gpg --clearsign -o InRelease Release
gpg -abs -o Release.gpg Release
配置 sources.list 文件
deb file:///opt/debs/ /
1.4. 构建 http 源
使用 nginx / httpd 或其他 web 服务器,将网站的根路径指定为软件源的根路径
1.5. 构建 ftp 源
使用 vsftpd 或其他 ftpd 服务器,将网站的根路径指定为软件源的根路径
1.6. FAQ
1.6.1. 运行GPG --GEN-KEY生成KEY时出现卡住的问题
背景 在搭建Ubuntu16.04的本地apt源时,需要运行“gpg --gen-key”命令,但是在执行该命令时,出现了:“Not enough random bytes available. Please do some other work to give the OS a chance to collect more ”的提示,而且一直卡住。
分析
更详细的提示,参加:
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
根据提示,该命令生成key时,需要kernel为该程序生成足够多的随机数,因此,我们只需要为kernel生成随机数即可。
解决方法:
安装 rng-tools 工具,该工具可以像指定文件生成随机数。这里,我们不需要退出原正在执行 gpg --gen-key
命令的 console,新建一个终端,执行如下命令。命令执行完成后,原来卡住的界面就恢复运行了。
$ apt-get install rng-tools
$ rngd -r /dev/urandom
1.6.2. does not have a Release file.
然后可以用 apt-get install
命令安装本地源中含有的软件包了。
如果上面的步骤中报错说
The repository 'file:/media debs/ Release' does not have a Release file.
可用 apt-get update --allow-insecure-repositories
,这个时侯错误就会变成警告,也能正常安装软件。