Makefile checkinstall创建无用的deb?

Makefile checkinstall创建无用的deb?,makefile,deb,checkinstall,Makefile,Deb,Checkinstall,我有一个非常简单的命令行程序,它实际上由一个python脚本和一些助手shell脚本组成。我想学习打包这个程序,尽管它很琐碎 根据我收集的信息,我选择了配置/制作/安装路线。由于我没有任何要配置的内容,也没有任何要制作的内容,所以我简单地创建了一个Makefile,其中只包含一个安装部分: install: cp ./myProgram /usr/bin/my-program chown root:root /usr/bin/my-program

我有一个非常简单的命令行程序,它实际上由一个python脚本和一些助手shell脚本组成。我想学习打包这个程序,尽管它很琐碎

根据我收集的信息,我选择了配置/制作/安装路线。由于我没有任何要配置的内容,也没有任何要制作的内容,所以我简单地创建了一个Makefile,其中只包含一个安装部分:

install:
        cp ./myProgram /usr/bin/my-program
        chown root:root /usr/bin/my-program
        chmod 777 /usr/bin/my-program
        cp -r ./ProgramResources /usr/lib/my-program
        chown -hR root:root /usr/lib/my-program
        chmod -R 777 /usr/lib/my-program
在这一点上,我的程序通过sudo make install安装并运行良好

然后,我尝试使用以下方法创建一个deb文件:

sudo checkinstall sudo make install
它似乎通过了安装部件,因为它报告它成功,但随后失败:

======================== Installation successful ==========================
cp: cannot stat `//var/tmp/tmp.jKCmESc0v7/newfiles.tmp': No such file or directory

Copying files to the temporary directory...OK

Stripping ELF binaries and libraries...OK

Compressing man pages...OK

Building file list... FAILED!

Building Debian package...OK

Installing Debian package...OK

Erasing temporary files...OK

Deleting temp dir...OK


**********************************************************************

 Done. The new package has been installed and saved to

 ...
程序已经安装,但据我所知,这个新生成的.deb文件没有任何作用。dpkg-L我的程序只产生

/.
手动从deb文件中删除并安装它似乎没有任何作用-实际上它不会将任何文件放在任何地方

那么,(1)我的方法有什么问题吗? 以及(2)如何解决checkinstall问题


非常感谢您的回答,尽管我对代码很在行,但我对打包/分发一无所知

我不确定这是否准确地回答了这个问题,但以下是我到目前为止得到的结果(在ubuntu lucid上,选中Install 1.6.1):

我试图构建一个开源项目,它构建得很好。然后我尝试为debian打包:

checkinstall-D--install=no--pkgname=$pkgname--pkgversion=0.0.1--pkgrelease=“svn-001”--维护者=test@test.com--strip=no--stripso=no--addso=yes

这基本上是在同一个
构建文件列表时失败的。。。失败了;和类似的
grep:/var/tmp/tmp.naoiwt6f/newfile:没有报告此类文件或目录

我还尝试在上面的
checkinstall
命令末尾添加
make
,但效果也不太好

最后,我尝试了以下方法:

makeclean
选中install-D--install=no--pkgname=$pkgname--pkgversion=0.0.1--pkgrelease=“svn-001”-mainter=test@test.com--strip=no--stripso=no--addso=yes-d2 make

开关
-d2
用于启用调试;和
。。。make
将再次运行make

-d2
将打印出临时目录: debug: The temporary directory is: [ /var/tmp/tmp.NaoiwTHT6F ] 此外,调试将指出以下文件/目录:

debug: INSTW_EXCLUDE=/dev,/path/to/myproject-build,/proc,/tmp,/var/tmp,
debug: INSTW_ROOTPATH=/var/tmp/tmp.NaoiwTHT6F
debug: INSTW_LOGFILE=/var/tmp/tmp.NaoiwTHT6F/newfiles.tmp
debug: INSTW_DBGFILE=/var/tmp/tmp.NaoiwTHT6F/dbgfile
请注意,默认情况下,我的生成文件夹的路径
/path/to/myproject build
被排除在外,这就是此项目还存储生成的可执行文件的位置

显然,当
checkinstall
中的
make
第一次开始构建时,它可以捕获新生成的可执行文件-它们将列在
${TMP_DIR}/newfiles
中;然而,在我的例子中,问题是可执行文件最终位于调用
checkinstall
的同一目录下;因此,在此对话框中:

Some of the files created by the installation are inside the build
directory: /path/to/myproject-build

You probably don't want them to be included in the package,
especially if they are inside your home directory.
Do you want me to list them?  [n]: y
Should I exclude them from the package? (Saying yes is a good idea)  [y]: n
。。。事实上,我必须回答
n
——否则我什么也得不到!然后,我可以通过以下方式检查内容:

dpkg --contents mytest.deb | less
但是,问题是
检查安装

  • 还包括
    .o
    文件以及
    .svn
    目录
  • 将绝对路径计算为相对路径(不会自动“发送”可执行文件,例如,
    /usr/bin
    。因此
    s到
    /usr/lib

简言之,上述一些方法可能会使一个人拥有一个并非完全为空的
.deb
;但这并不意味着一个人那里只有所需的文件,或者他们会被路由到通常的安装目标

好吧,希望这至少有点帮助,

干杯!

我也遇到过类似的问题。最后我采用了非常简单但相当手工的方法


例如,将要打包的文件放在debian/usr/bin中。无需完成通常的
配置、制作、制作安装步骤。

重复使用sudo就是问题所在

使用类似install.sh的文件

#! /bin/bash
set -x
touch useless
cp useless /usr/share/useless
命令

sudo checkinstall --pkgname useless -y ./install.sh
工作时

sudo checkinstall --pkgname useless -y sudo ./install.sh
                                       ^^^^
显示

并生成一个空包

sudo checkinstall --pkgname useless -y sudo ./install.sh
                                       ^^^^
cp: cannot stat ‘//var/tmp/tmp.Au4ympTNlT/newfiles.tmp’: No such file or directory