当前位置:网站首页>【翻译】制作DEB/debian包
【翻译】制作DEB/debian包
2022-08-09 14:59:00 【Small-K】
简单制作Debian包的方法和本地包仓库
(原英文网址:传送门)
这篇文章介绍了一个创建自己制作的Debian包的简单方法,并在本地包仓库添加它。尽管我们可以使用现存的Debian/Ubuntu包,我们仍将从头开始创建和打包我们的小程序。一旦我们的包制作完成,我们会将其添加到本地包仓库中去。这篇文章介绍的是一种非常简化的方法,事实上在很多复杂的场景下它也是一个创建Debian包的模板。
创建一个二进制可执行文件
我们需要去做的第一件事情是创建一个简单的C++程序,编译并测试它。如果你想要去编写一个简单的C程序可以访问我们详细的C语言教程。我们的程序除了在屏幕打印"linuxconfig.org"外不做任何其他事情。代码如下:
#include <iostream>
int main() {
using namespace std;
cout << "linuxconfig.org\n";
}
将上述代码另存为linuxconfig.cc。为了编译这个项目我们需要g++编译器,在build-essential包中可以找到它。我们可以通过以下命令来安装它:
$ sudo apt-get install build-essential
为了编译这个代码,我们使用下面的linux命令:
$ g++ linuxconfig.cc -o linuxconfig
$ ./linuxconfig
linuxconfig.org
一切进行得都很顺利。现在我们应该可以得到一个名为"linuxconfig"的可执行文件,执行它会在屏幕上打印一些字符串。
创建一个Debian包
现在我们得到了程序的二进制可执行文件,可以创建一个Debian包了。为了创建debian包我们需要使用dpkg-deb工具。首先,我们需要创建debian包的结构。创建一个debian包只需要这些文件:
- DEBIAN/控制文件
- 个性化配置文件(非必须)
首先创建一个名为linuxconfig的目录。这个目录将存放所需的包文件:
mkdir linuxconfig
接下来,创建一个DEBIAN目录和控制文件:
$ mkdir linuxconfig/DEBIAN
$ vi linuxconfig/DEBIAN/control
在控制文件(control)中写入以下信息:
Package: linuxconfig
Version: 1.0
Section: custom
Priority: optional
Architecture: all
Essential: no
Installed-Size: 1024
Maintainer: linuxconfig.org
Description: Print linuxconfig.org on the screen
(提醒:经过译者测试,需要在Description这一行后敲入换行符,否则构建工具会报错)
很好,我们最后要做的就是将我们的linuxconfig文件包含进来。在linuxconfig目录下我们创建一个目录树代表我们的程序将要安装在系统中的位置,并将可执行文件拷贝进来。
$ mkdir -p linuxconfig/usr/bin/
$ cp /path/to/linuxconfig linuxconfig/usr/bin/
现在我们已经可以去创建这个包了:
$ dpkg-deb --build linuxconfig
dpkg-deb: building package `linuxconfig' in `linuxconfig.deb'.
$ ls
linuxconfig linuxconfig.deb
你可以更改包名,将项目的版本号和包的架构包含到包名中,例如
$ mv linuxconfig.deb linuxconfig-1.0_amd64.deb
完成了!我们的包做好了!(注意:这仅仅是一个例子,官方发布的包还需要做更多的工作)
创建一个本地包仓库
为了创建一个本地包仓库我们需要做一些准备工作。在这里我们假设使用默认配置的Apache。安装Apache网页服务器只需要运行下列命令:
$ sudo apt-get install apache2
安装好后,我们可以通过访问安装apache机器的IP地址(如果安装apache的机器就是本机,也可以访问’http://localhost’)来确认服务器正常运行,我这里访问的是http://10.1.14,我们应当能看到著名的"It works!"信息页面。
web服务器已经运行了但我们还没有添加任何内容进去。Apache虚拟主机默认的DocumentRoot(即网站根目录)是/var/www/html,我们就将在这创建我们的仓库。
让我们在/var/www/html下创建一个debian目录并将 linuxconfig-1.0_amd64.deb拷贝进来:
$ sudo mkdir /var/www/html/debian
$ sudo cp /path/to/linuxconfig-1.0_amd64.deb /var/www/html/debian/
接下来就是生成包列表。我们移动到debian目录下,并使用dpkg-scanpackages工具来完成这项工作。如果提示dpkg-scanpackages不存在的话你可能需要安装dpkg-dev包。
$ dpkg-scanpackages . | gzip -c9 > Packages.gz
dpkg-scanpackages: info: Wrote 1 entries to output Packages file.
这样,我们的本地仓库就准备好了。
将仓库看添加到软件源
现在为了能从我们创建的本地仓库安装软件包,我们需要去编辑/etc/apt/sources.list文件,添加本地仓库的入口地址(将下面命令的IP地址改为你自己机器的IP地址),然后同步仓库。
echo "deb [trusted=yes] http://10.1.1.4/debian ./" | tee -a /etc/apt/sources.list > /dev/null
(译者提示:tee就是从一个设备写入另一个设备的命令,上述命令本质还是修改sources.list文件,不要懵了,看不懂就去查查tee的用法)
同步仓库:
$ sudo apt-get update
Ign:1 http://10.1.1.4/debian ./ InRelease
Ign:2 http://10.1.1.4/debian ./ Release
Ign:3 http://10.1.1.4/debian ./ Packages
Ign:3 http://10.1.1.4/debian ./ Packages
Ign:3 http://10.1.1.4/debian ./ Packages
Get:3 http://10.1.1.4/debian ./ Packages [303 B]
我们现在就可以使用apt-get工具来安装我们的包了:
$ sudo apt-get install linuxconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
linuxconfig
0 upgraded, 1 newly installed, 0 to remove and 8 not upgraded.
Need to get 3174 B of archives.
After this operation, 1,049 kB of additional disk space will be used.
WARNING: The following packages cannot be authenticated!
linuxconfig
Install these packages without verification [y/N]? y
执行:
$ linuxconfig
linuxconfig.org
想要从系统中移除这个包,只需要执行:
$ sudo apt-get remove linuxconfig
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linuxconfig
0 upgraded, 0 newly installed, 1 to remove and 3 not upgraded.
After this operation, 1049 kB disk space will be freed.
Do you want to continue? [Y/n] y
边栏推荐
猜你喜欢

【力扣】17. 电话号码的字母组合
【更新中7/31】NTIRE 2022 ESR(efficient super-resolution) 方案与结果

堆(heap)系列_0x06:NT全局标志和gflags.exe一页纸

Stetman读paper小记:Backdoor Learning: A Survey(Yiming Li, Yong Jiang, Zhifeng Li, Shu-Tao Xia)

【工具使用】Keil5软件使用-进阶工程配置篇

灰色关联分析

CRM定制开发需要多少钱 CRM系统定制开发价格

Vim实用技巧_4.管理多个文件(打开 + 切分 + 保存 + netrw)

Time series analysis

蓝桥杯嵌入式第十三届模拟题做题笔记
随机推荐
TOPSIS优劣解距离法
[Paper reading] LIME: Low-light Image Enhancement via Illumination Map Estimation (the most complete notes)
CTF online encryption and decryption and common tools
【力扣】1995. 统计特殊四元组
AlexNet pytorch实现
大唐杯5G练习题(一)
多元回归分析
层次分析法(AHP)——MATLAB在数学建模中的应用(第2版)
Gray Relevance Matrix——Application of MATLAB in Mathematical Modeling
R-CNN Fast R-CNN Faster R-CNN总结
【力扣】11. 盛最多水的容器
机器学习的基本术语
灰色关联度矩阵——MATLAB在数学建模中的应用
图论最短路径求解
CRM定制开发需要多少钱 CRM系统定制开发价格
【Postgraduate Work Weekly】(Week 5)
VGG pytorch实现
杭州富阳科目三新规3号线考试攻略
hugging face tutorial - Chinese translation - Loading pre-trained instances with AutoClass
flask局域网访问失败解决方法(使用pycharm运行代码的一定要看)