以下是“Ubuntu/Debian自有软件包构建私有源”的详细攻略:
什么是自有软件包构建私有源?自有软件包构建私有源是指在Ubuntu/Debian系统上,自行构建软件包并发布到自己的私有源(也称为APT存储库)中,在系统中安装这些软件包时可以通过APT包管理器来进行。这样做可以方便地管理自己的软件包,同时也能够在多台服务器上共享同一个源。
构建私有源的步骤- 安装构建软件包所需的工具和依赖:
首先需要安装build-essential
、devscripts
和dh-make
等软件包来构建源代码、打包和编译软件包。同时也需要安装其他软件的构建依赖,例如GNU Autotools(autoconf、automake、libtool和pkg-config)以及CMake、Python等,这些依赖因软件包而异。
$ sudo apt-get update
$ sudo apt-get install build-essential devscripts dh-make autotools-dev cmake python
- 构建软件包:
构建软件包的方式也因软件包而异,一般是从源码、二进制文件、RPM包等打包格式中下载源代码,在本地进行打包和编译。以下是从源码构建软件包的流程:
- 下载源代码
- 解压缩源代码,并进入源代码目录
- 在源代码目录下运行
debian/rules binary
命令,该命令会按照Debian的标准方式进行打包,生成.deb
文件
以下是构建nginx
软件包的示例:
$ wget https://nginx.org/download/nginx-1.21.3.tar.gz
$ tar -xf nginx-1.21.3.tar.gz
$ cd nginx-1.21.3
$ sudo apt-get build-dep nginx # 安装构建依赖
$ debuild -us -uc # 构建软件包
- 安装和配置APT存储库:
构建软件包完成后,需要将软件包发布到APT存储库中,这样才能在其他机器上安装这些软件包。以下是创建APT存储库并将软件包上传的步骤:
- 安装
reprepro
软件包,该软件能够创建APT存储库和上传软件包 - 创建APT存储库
- 将生成的
*.deb
软件包添加到APT存储库 - 生成APT存储库的metadata
- 上传APT存储库到服务器
以下是创建APT存储库并将软件包上传到该存储库的命令:
$ sudo apt-get update
$ sudo apt-get install reprepro
$ mkdir -p ~/myrepo/{conf,dists,indices,logs,pool}
$ cd ~/myrepo
$ nano conf/distributions # 配置存储库信息
在conf/distributions
文件中添加以下信息:
Origin: Your Name
Label: Your Label
Codename: yourcodename
Architectures: i386 amd64 # 软件包支持的CPU架构
Components: main
Description: Your custom software repository
SignWith: YOUR_SIGNING_KEY_ID
添加软件包到APT存储库:
$ cp /path/to/nginx_1.21.3-1_amd64.deb pool/main/n/nginx/
$ reprepro includedeb yourcodename /path/to/nginx_1.21.3-1_amd64.deb
生成APT存储库的metadata和签名:
$ reprepro export
$ gpg --armor --output ~/myrepo/public.key --export YOUR_SIGNING_KEY_ID
$ reprepro export | gpg --clearsign --default-key YOUR_SIGNING_KEY_ID | tee ~/myrepo/Release.gpg
$ rm -f ~/myrepo/inRelease # 删除旧的metadata
$ cd ~/myrepo
$ reprepro --verbose -Vb . includedeb yourcodename /path/to/nginx_1.21.3-1_amd64.deb
$ reprepro --verbose -Vb . export
将APT存储库上传到服务器:
$ scp -r ~/myrepo/ user@server:~/myrepo/
- 配置APT源:
在客户端上配置APT源,即可安装从私有源中构建的软件包:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https
$ sudo nano /etc/apt/sources.list.d/mysources.list
在/etc/apt/sources.list.d/mysources.list
文件中添加以下内容:
deb [trusted=yes] https://myserver/myrepo/ yourcodename main
执行以下命令以完成最后一步更新并安装nginx:
$ sudo apt-get update
$ sudo apt-get install nginx
实战:构建Nginx和Redis软件包,发布到私有源中
以上是构建APT存储库的流程,本节将以Nginx和Redis软件包的构建和发布为例进行说明。
- 从官网下载Nginx和Redis源代码
$ wget https://nginx.org/download/nginx-1.21.3.tar.gz
$ wget http://download.redis.io/releases/redis-6.2.5.tar.gz
- 构建Nginx软件包
$ tar -xf nginx-1.21.3.tar.gz
$ cd nginx-1.21.3
$ sudo apt-get build-dep nginx
$ debuild -us -uc
- 构建Redis软件包
$ tar -xf redis-6.2.5.tar.gz
$ cd redis-6.2.5
$ debuild -us -uc
- 安装和配置APT存储库
按照上述的APT存储库配置流程,将构建好的Nginx和Redis软件包添加到APT存储库中即可。
- 客户端安装Nginx和Redis
在客户端上执行以下命令即可从私有源中安装Nginx和Redis:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https
$ sudo nano /etc/apt/sources.list.d/mysources.list
在/etc/apt/sources.list.d/mysources.list
文件中添加以下内容:
deb [trusted=yes] https://myserver/myrepo/ yourcodename main
执行以下命令以完成最后一步更新并安装nginx和redis:
$ sudo apt-get update
$ sudo apt-get install nginx redis-server