我正在尝试使用 来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
。