如果你有一个树莓派,你必须使用它为许多不同的项目。通常,开发人员使用树莓派来运行使用流行语言(如 Python)的 Web 服务。
但它不是具有冗余的服务器,并且很可能进行重新启动。在这种情况下,您不希望每次服务都停机。
有两种方法可以解决此问题:
1. 手动确保将其挂钩 systemd
或 init.d
2. 使用在任何 Pi/Debian 计算机上部署的软件包自动执行
通过第二种方法,您可以与朋友和同事共享您的服务。因此,下面是有关如何为树莓派创建 Debian 包的分步指南。让我们开始吧!
开始
在开始之前,有几个要求:
-
计算机– 下面列出的步骤是使用 MacBook,但只要可以在它上安装 它,就无关紧要
dkpg-deb
。 -
树莓派或任何其他 Debian 机器
就是这样!
步骤 1
安装 dpkg-deb
,这是 Debian 软件包管理套件中的实用程序。有关详细信息,请查看Wiki页面。在 Mac 上,如果您安装了冲煮,则非常简单。
brew install dpkg
命令完成执行后,您将看到一组可用的新命令。对于本指南,我们感兴趣的是 dpkg-deb
。
步骤 2
接下来,我们需要使工作区准备好创建 Debian 包。要创建简单的 Debian 包,您需要组织工作区,以便在安装后将所需的文件放置在预期位置。
例如,如果您有一个二进制文件,您希望该二进制文件作为命令可用,则需要将其放入 $PATH
中。假设我们必须把它放在 /usr/local/bin
。
在我们的案例中,我们为代理构建了一个二进制文件,用于将指标从树莓派发送到云上的 Web 服务器。这只是一个例子。
二进制文件的名称: http-client
因此,在工作区中,创建一个根文件夹,该文件夹的名称包含所需的包的名称:
mkdir alphamon-agentpi_0.0-1
mkdir alphamon-agentpi_0.0-1/usr
mkdir alphamon-agentpi_0.0-1/usr/local
mkdir alphamon-agentpi_0.0-1/usr/local/bin
alphamon-agentpi_0.0_1
将在您的包的结束名称。
注: 标准版本适用于 0.0_1, Major.Minor_Revision
现在,复制二进制文件:
cp http-client alphamon-agentpi_0.0-1/usr/local/bin
这样,创建包后,请确保它将放置在 /usr/local/bin
中。
步骤 3
下一步是添加有关包的详细信息,以便使用它的任何人都可以了解有关它的详细信息0-1/
姆克迪尔·贝比安
现在,创建一个名为的文件 control
并添加以下行:
Package: alphamonagent
Version: 0.0-1
Section: base
Priority: optional
Architecture: armhf
Maintainer: Sameer <sss@gmail.com>
Description: Agent to support device discovery and reporting of AlphaMon
有关每个字段的详细信息,请访问此处。所有字段都是不言自明的。
步骤 4
现在,我们在路径中有一个二进制文件,我们需要确保每次启动时都会调用二进制文件(在本例中是一个小服务)。
为此,我们依赖于 systemd
,它是嵌入式系统的一个相当常见的服务管理器,并且在树莓派上安装的大多数操作系统中都受支持。
我们利用现有的 system-v
systemd
转换,使我们的生活轻松。
首先,我们创建一个 shell 脚本,该脚本将放在 /etc/init.d/.
start() {
# code to start app comes here
echo "hello alphamonagent here"
}
stop() {
# code to stop app comes here
echo "hello alphamonagent here"
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
可在此处找到一个完全工作的示例。
步骤 5
如果您希望在安装之前或安装后执行某些操作,则需要添加 preinst/postinst
文件。
postinst
/etc/init.d
下面可以找到支持我们在步骤 4 中创建的服务的示例文件:
#!/bin/sh
echo "\033[36m HI I'M A POSTINST SCRIPT `date +"%s"` \033[39m"
systemctl enable alphamonagent
systemctl start alphamonagent
exit 0
步骤 6
我们都一定了;现在,我们只需要执行一个简单的命令来创建 Debian 包。
导航到工作区根文件夹。
ls
alphamon-agentpi_0.0-1
然后,执行以下操作:
dpkg-deb --build alphamon-agentpi_0.0-1/
瞧!你有Debian包 alphamon-agentpi_0.0-1.deb
!
最后一步
在树莓派上安装 deb 包:
dpkg -i <package_name>
当我们在维护者脚本中添加命令以启用和启动服务时 postinst
,服务会自动启动,每次重新启动后,服务将自行启动。
上面使用的代码在GitHub上可用。