dpkg 只能解压,不能安装,为什么?

dpkg 只能解压,不能安装,为什么?

我正在尝试使用 来dpkg -b构建一个包。包目录结构如下:

ubuntu@ip-10-241-62-56:~/USB_RnD_DEB/BACKUP/usblinux1.1$ tree
.
├── DEBIAN
│   └── control
└── usr
    ├── bin
    │   └── usblinux-runner.sh
    └── share
        └── usblinux
               |-->installer.sh
               |--> LOTS AND LOTS OF FILES

usblinux-runner.sh由一个小的 shell 脚本组成,其中包含:

#!/bin/bash
echo "Installing the USB REDIRECTOR as Client !"
echo "-----------------------------------------"
sudo apt-get update
sudo apt-get install build-essential
sudo /usr/share/usblinux/./installer.sh install-client

现在这被打包到

ubuntu@ip-10-241-62-56:~/USB_RnD_DEB/BACKUP$ sudo dpkg -b usblinux1.1/
dpkg-deb: building package `usblinux' in `usblinux1.1.deb'.
ubuntu@ip-10-241-62-56:~/USB_RnD_DEB/BACKUP$ ls
usblinux1.1  usblinux1.1.deb

现在这工作得很好,当我安装软件包时,它只是将其解压并将 usblinux-runner.sh 放入/usr/bin& usblinux 中/usr/bin/share

它不会安装或运行 usblinux-runner.sh 文件。我只是解包并且不运行 shell 脚本,而且我在控制台上看不到任何输出:

sudo dpkg -i usblinux1.1.deb 
Selecting previously unselected package usblinux.
(Reading database ... 82106 files and directories currently installed.)
Preparing to unpack usblinux1.1.deb ...
Unpacking usblinux (1.1) ...
Setting up usblinux (1.1) ...

有人可以帮我找出问题所在吗?

答案1

这是正常的,默认情况下安装包不会运行其任何二进制文件(否则想象一下我们安装e2fsprogs等等会有多有趣!)。

如果希望usblinux-runner.sh脚本在安装包后自动运行,则需要添加postinst脚本,它将运行usblinux-runner.sh。有一个警告:您无法从维护者脚本安装其他软件包,因此您需要删除这些apt-get行。但这没关系,因为声明依赖项(您的包依赖)的正确方法是在控制文件的条目build-essential中声明它。Depends:考虑到所有这些,您不妨postinst运行脚本

/usr/share/usblinux/installer.sh install-client

您不需要sudo在这里,维护者脚本无论如何都会运行root

相关内容