本文介绍了一种简单的方法来创建自制的debian软件包并将其包含在本地软件包存储库中。尽管我们可以使用现有的Debian /Ubuntu软件包,但我们将从头开始创建和打包自己的琐碎应用程序。包准备好后,我们会将其包含在本地包存储库中。本文介绍了一种非常简单的方法,但是它可以在许多不同的情况下用作模板。
在本教程中,您将学习:
- 如何创建琐碎的Debian软件包
- 如何创建本地Debian存储库
- 如何将存储库添加到软件源列表中
使用的软件要求和约定
类别 | 要求,约定或使用的软件版本 |
---|---|
系统 | 德比安 |
软件 | build-essential封装 |
其他 | 运行中的Apache Web服务器和root权限 |
约定 |
#-要求linux命令可以直接以root用户或通过使用root特权来执行sudo 命令$-要求linux命令以普通非特权用户身份执行
|
创建一个二进制可执行文件
我们需要做的第一件事是创建一个简单的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”的可执行文件,该可执行文件会在屏幕上打印一些字符串。
(adsbygoogle = window.adsbygoogle || [])。push({});
创建一个Debian软件包
现在我们已经准备好了可执行二进制文件形式的小程序,我们可以创建一个debian软件包了。为此,我们使用dpkg-deb
工具。首先,我们需要创建debian软件包结构。构建debian软件包所需的唯一文件是:
- DEBIAN /控制
- 自定义文件将成为软件包的一部分(不是必需的)
第一创建一个目录叫linuxconfig
。此目录将包含所有必需的软件包文件:
$ mkdir linuxconfig
接下来,创建DEBIAN目录和控制文件:
$ mkdir linuxconfig/DEBIAN
$ vi linuxconfig/DEBIAN/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
太好了,唯一缺少的是我们的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 Web服务器,我们要做的就是运行:
$ sudo apt-get install apache2
(adsbygoogle = window.adsbygoogle || [])。push({});
安装完成后,要验证网络服务器是否正常运行,我们可以导航到该计算机的IP地址(如果在该计算机本身上运行浏览器,则可以导航到’http://localhost’),本例中为http://10.1.1.4。我们应该看到著名的有用!信息。
Web服务器软件正在运行,但尚未添加任何内容。的DocumentRoot
默认的ApacheVirtualHost
,是/var/www/html
:这是我们将创建存储库的地方。
让我们在其中创建”debian”目录 /var/www/html
并复制其中的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-dev
包装以防万一dpkg-scanpackages
命令丢失:
$ 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
确保添加以上内容[trusted=yes]
避免出现以下错误信息:
Release' does not have a Release file.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
同步存储库:
$ 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