我正在进行跨平台开发,我想为 Linux 构建一个漂亮的、独立的 (!) 包。我知道这不是通常的做法,但应用程序需要将所有数据放在一个地方,所以我将它安装到/opt 中,就像许多其他专有软件包所做的那样。我最终会提供 deb 和 rpm 包,但现在只是 .tar.gz。用户应该将它提取到某处,它应该可以工作。我宁愿没有安装程序。
首先是我的问题,然后是详细信息:
现在了解一些细节:这是我的项目(为此我将其称为 foo)布局:
现在在包中,将有两个额外的元素:
libs 将包含项目所需的所有共享库,foo.sh 是一个将 LD_LIBRARY_PATH 设置为包含 libs 的脚本。因此,用户将执行 foo.sh 并且程序应该启动。
我有一个 shell 脚本,它按照以下步骤打包软件:
你怎么看这个?这种方法存在一些问题:
你是怎么做到的?
编辑: 刚刚提出的另一个问题:您如何确定您的软件依赖于哪些库?我做了一个ldd foo,但是有很多。我查看了 WorldOfGoo 包的外观,它们只提供很少的库。我怎样才能假设哪些库将出现在用户的系统上,哪些不会出现?只需将所有目标发行版安装到虚拟 matine 中,看看需要什么?
最佳答案
您将您的东西(带有依赖库)打包到 /opt 的方式是打包专有(甚至开源)软件的方式。这是 Linux 基金会的推荐做法(有关链接,请参阅 my answer to the other question)。
外部库可以从头开始编译并作为一个单独的步骤嵌入到您的构建过程中(特别是如果您修改它们),或者从某些发行版的包中获取。第二种方法更容易,但第一种方法更灵活。
请注意,没有必要在您的包中包含一些非常低级的库(例如 glibc、Xorg)。它们最好留给系统供应商进行调整,您可能只是假设它们存在。此外,还有一个 Linux Standard Base , 记录了最重要的库;这些库几乎无处不在,值得信赖。
另请注意,如果您在较新的系统下编译,很可能旧系统的用户将无法使用它,反之则不然。因此,为了获得更好的兼容性,在比现在早两年的系统下编译包可能会有用。
我只是概述了一些通用的东西,但我相信 Linux Developers Network网站包含有关包装和便携性的更多信息。
根据我在开源分发项目中看到的内容判断,您的脚本与分发供应商打包软件的方式相同。他们的脚本会自动修补源代码、模拟软件安装并将生成的文件夹打包成 DEB 和 RPM。
Tar.gz 或 course 也可以工作,但是创建,例如,RPM 并没有复杂到让您错过这样一个让您的用户的生活变得如此轻松的机会。
回答您的问题,
是的,您必须对依赖项进行两次硬编码。
问题在于,当您在 CMake 中对它们进行硬编码时,您会以其他方式指定它们,而不是在打包脚本中指定它们。 CMake 是指共享库和头文件,而打包脚本是指包。
包名称与共享库和 header 之间没有跨发行版的一对一关系。它因分布而异。因此,应该指定两次。
但是分发供应商可以很容易地重新打包这个包,特别是如果你努力将所有依赖的库打包到它里面(这样移植的外部依赖就会更少)。此外,可以将包从一个发行版移植到另一个发行版的工具很快就会出现(我会在发布时更新我的答案)。
是的,您必须指定您的版本两次。
但问题是,您可能会以包和软件版本永远不会不同步的方式组织您的打包过程。只需使打包脚本从您的存储库(或从您的网站下载)中 check out 与脚本将写入包规范的版本完全相同。
要分析软件的依赖关系,您可以使用我们的开源免费 Linux Application Checker工具。它将报告它所依赖的库列表,显示您的软件兼容的发行版,并帮助您的应用程序在发行版之间更具可移植性。事实证明,有时不费吹灰之力就可以实现更多的跨发行版兼容性,而且您不必局限于只支持少数几个选定的发行版。
关于linux - 为 Linux 打包专有软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3545628/
Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功
网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.
目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'
Linux操作系统——网络配置与SSH远程安装完VMware与系统后,需要进行网络配置。第一个目标为进行SSH连接,可以从本机到VMware进行文件传送,首先需要进行网络配置。1.下载远程软件首先需要先下载安装一款远程软件:FinalShell或者xhell7FinalShellxhell7FinalShell下载:Windows下载http://www.hostbuf.com/downloads/finalshell_install.exemacOS下载http://www.hostbuf.com/downloads/finalshell_install.pkg2.配置CentOS网络安装好
文章目录一基础定义二创建逻辑卷2-1准备物理设备2-2创建物理卷2-3创建卷组2-4创建逻辑卷2-5创建文件系统并挂载文件三扩展卷组和缩减卷组3-1准备物理设备3-2创建物理卷3-3扩展卷组3-4查看卷组的详细信息以验证3-5缩减卷组四扩展逻辑卷4-1检查卷组是否有可用的空间4-2扩展逻辑卷4-3扩展文件系统五删除逻辑卷5-1备份数据5-2卸载文件系统5-3删除逻辑卷5-4删除卷组5-5删除物理卷六LVM逻辑卷缩容6-1缩容注意事项6-2标准缩容步骤一基础定义LVM,LogicalVolumeManger,逻辑卷管理,Linux磁盘分区管理的一种机制,建立在硬盘和分区上的一个逻辑层,提高磁盘分
如何在Ruby中获取linux系统(这必须适用于Fedora、Ubuntu等)的软件/硬件信息? 最佳答案 Chef背后的优秀人才,拥有一颗名为Ohai的优秀gemhttps://github.com/opscode/ohai以散列形式返回系统信息,例如操作系统、内核、规范、fqdn、磁盘、空间、内存、用户、接口(interface)、sshkey等。它非常完整,非常好。它还会安装命令行二进制文件(也称为ohai)。 关于ruby-如何在Ruby中获取linux系统信息,我们在Stack
我在LinuxMint17.2上。我最近使用apt-getpurgeruby删除了ruby。然后我安装了rbenv然后rbenvinstall2.3.0所以现在,~/.rbenv/versions/2.3.0/bin/ruby存在。但是现在,我无法执行geminstallrubocop。我明白了:$geminstallrubocoprbenv:gem:commandnotfoundThe`gem'commandexistsintheseRubyversions:2.3.0但是我可以~/.rbenv/versions/2.3.0/bin/geminstallrubocop。但是,
我是Ruby和RoR的新手。我有一个带有Ubuntu镜像的干净Linode实例,我想从源代码编译Ruby而不是使用apt-get。我已经在谷歌上搜索了执行此操作的说明,但经过一些尝试后,当我尝试运行一些教程示例时,我不断收到有关缺少zlib和其他一些包的错误。任何人都可以给我详细的说明(或链接),教我如何在从源代码编译Ruby之前安装必要的必备包吗?我的目的是编译Ruby的最新稳定版本,然后安装Rubygems和Rails。提前感谢您的帮助!!! 最佳答案 Thisblogpost涵盖从源代码编译ruby所需的包和安装过程;它引
我有一个使用Qt4绑定(bind)的Ruby应用程序。我希望能够打包并发布它。我查看了其他应用程序,例如rake和puppet,以了解它们是如何打包的。rake和puppet都被打包为gems。当我意识到rake和puppet都是更多的系统级工具而不是用户级应用程序时,我开始走这条路。我也看过orca,但它只是windows。除了gem或orca,是否还有其他选项可用于打包RubyGUI应用程序?我想要跨平台的东西。 最佳答案 看看platformgem规范。您可以为您的代码支持的每个平台打包一个gem。Somegemsconsis
我对某些ruby行为感到困惑。看下面的代码:[127].pack("C")=="\x7f"#=>true这是有道理的。现在:[128].pack("C")#=>"\x80""\x80"#=>"\x80"[128].pack("C")=="\x80"#=>falsepackoption"C"代表8-bitunsigned(unsignedchar),应该可以存储128的值。两个字符串也打印相同的东西,那么为什么它们不相等呢?这与编码有关吗?我使用的是ruby2.0.0p247。 最佳答案 这是错误的,因为编码不同:[128].