创建 Debian 包以安装到带空格的路径

创建 Debian 包以安装到带空格的路径

我有一个 Qt 应用程序,我想将其部署为 deb 包。我读过很多资料,都略有不同 - 我所做的大部分工作都遵循这个如何:准备提交到 Ubuntu 软件中心的应用程序

我必须在其中创建一个文件夹结构/usr/share/My Company's Folder/ (路径中的空格和特殊字符是一个不幸的要求;大写名称也是如此...该程序是从 Windows 移植的)。

/usr/share/My Company's Folder/MainProject/content

我创建了一个包...它似乎可以工作,安装在正确的位置,而且令人惊讶的是该程序甚至在那之后就可以工作了。

问题:我不能在路径名中使用空格。我创建了一个“安装”文件,如上面的链接所示。它按预期工作 - 但如果我想放置项目,就会出现错误/usr/share/My Company's Folder/- 我只能通过使用/usr/share/MyCompanyFolder/(无空格或特殊字符)才能使其工作。

设置:

~/working_directory
  mainproject-1.0
     mainproject_1
        content
  mainproject-1.0.tar.gz

mainproject-1.0我跑了进去

dh_make --copyright gpl -f ../mainproject-1.0.tar.gz 

选择 s,按回车键...然后我修改了创建的 debian 文件夹中的文件。

在 debian 文件夹中也创建了一个“安装”文件:

mainproject_1/* /usr/share/My Company's Folder/MainProject

dpkg-buildpackage -rfakeroot [email protected]

它起作用了,创建了安装程序,安装程序起作用了......

但我无法创建带有空格的文件夹路径,而这正是我真正需要的。

笔记:

尝试失败

"/usr/share/My\ Company\'s\ Folder/"
"/usr/share/My Company's Folder/"
/usr/share/My\ Company\'s\ Folder/
/usr/share/My\040Company's\040Folder/
/usr/share/My?Company's?Folder/

经过多次搜索我发现了这个信息

you can't install files with space with dh_install (= debian/*install files)
you have to rename/install them explicitly in debian/rules with install, mv or cp
e.g. with dh tiny rules:

override_dh_install
     dh_install
     install -m 644 "fi le" "debian/tmp/usr/share/fi_le"

因此我尝试在 debian/rules 文件中添加(显示行号)

12 %:
13  dh $@ 
14
15 override_dh_install:
16  dh_install
17  install -m 644 "debian/mainproject/usr/share/MyCompanyFolder" "debian/mainproject/usr/share/My Company's Folder"

最新错误-使用此命令:

make[1]: Entering directory `/home/me/working_directory/mainproject-1.0'
dh_install
install -m 644 "My Company's Folder" "debian/mainproject/usr/share/MyCompanyFolder"
install: cannot stat `My Company's Folder': No such file or directory
make[1]: *** [override_dh_install] Error 1
make[1]: Leaving directory `/home/me/working_directory/mainproject-1.0'
make: *** [binary] Error 2
dpkg-buildpackage: error: fakeroot debian/rules binary gave error exit status 2

或者尝试

12 %:
13  dh $@ 
14
15 override_dh_install:
16  dh_install
17  mv -r "debian/mainproject/usr/share/MyCompanyFolder" "debian/mainproject/usr/share/My Company's Folder"

结果,debian 内部的文件夹结构看起来正确,但我收到有关无效文件夹的错误......

objdump: 'debian/mainproject/usr/share/My': No such file
objdump: 'Company's': No such file
.....

mkdir 然后 cp 应该具有与 mv 相同的结果,但不幸的是,它们一直将一个文件夹放在另一个文件夹中...... * 被视为实际名称......

看来我真的一事无成。

更新:我的问题的答案是,在 postinstall 文件中使用 mv 命令。

答案1

这是一个诡计

There is directories layout:
mytest-0.1/debian/changelog
             /compat
             /control
             /install
             /rules
mytest-0.1/usr/share/my company/file_a
                               /file_b
                               /file_c'

调整安装文件如下

usr/share/           /usr/

然后打包你的 deb 包

$mytest-0.1>dpkg-buildpackage -rfakeroot -uc -us -tc

希望它能帮助你

答案2

好吧,你最后使用 postinstall 的方法是个好办法。但你第一次尝试失败的原因其实是,Debian 安装脚本中的补丁(即 debian/rules debian/install,也可能是其他东西)是基于 Debian 软件包的,而不是你在计算机上所想的路径。它是与整个软件包文件夹进行比较的路径。这就是为什么它会给你输出“没有这样的文件”的原因

抱歉我的英语不好,我希望我能正确理解你的问题并解释清楚。

如果我是你,我会向我认识的 Debian 维护者寻求帮助,或者查看其他人打包的其他软件包。(你可以在终端中轻松获取大多数软件包的源代码)

答案3

您的上一个示例在 mkdir 中没有 -p 参数,因此目录未在指定路径中创建。其余的应该可以正常工作。名称中包含引号等特殊字符时,您会不断遇到问题,但如果要求安装到这样的名称,那么只需安装到普通目录,然后在最后重命名它的方法就很好。您可以避免脚本中所需的引号带来的所有无意义,并让最终用户处理它。当最终用户的呼声足够高时,也许会发生一些合理的事情,例如不必在 Linux 系统上使用这样的名称,否则它们会造成问题。

相关内容