为Linux应用程序创建安装程序

40

我正在开发一个小型跨平台应用程序,需要一些关于如何在Linux上安装它的建议。我在Windows中使用InnoSetup,在OSX中使用应用程序捆绑包,但我不知道如何在Linux中安装我的应用程序,是否有任何适用于Linux的开源安装程序创建工具?

谢谢。


1
只是出于好奇,如果你愿意回答的话,它是做什么的?它是用什么语言编写的?=) - Marcelo
使用cqtdeployer https://github.com/QuasarApp/CQtDeployer - Andrey Yankovich
另一个建议:https://github.com/grandchild/linux_installer - grandchild
5个回答

20

标准的、强大的、普遍可用的*nix系统(不仅限于此)安装程序是Autotools

# the user will install like so:
./configure --with-stuff
make # if package is from source
make install

您还可以提供特定于发行版的安装程序,例如在 RedHat 或 CentOS 上使用 RPM,在 Debian、Ubuntu 上使用 deb,不过一旦您拥有 Autotools 分割的 Makefile,制作这些安装程序就非常容易。

# the user will install like so:
yum install your-package-1.0.rpm # on redhat or
apt-get install your-package-1.0.deb # on debian

Autotools,也被称为“GNU构建系统”,初看有点吓人,新用户在遇到古老的m4宏系统等问题时会感到困惑。但请注意,这是大多数人使用的方式,一旦掌握就很容易。

学习资源


1
只需编写一个干净的“autotools”设置,让发行版的人员暂时解决其余问题。 - Benjamin Bannier
3
对于 autotools 我表示支持,只需要一点专业知识就可以使用它。这是一个链接:http://www.lrde.epita.fr/~adl/dl/autotools.pdf - rmk
@rmk 我想把那个 PDF 放在我的回答中,但是找不到它。 - clyfe
谢谢提供详细信息。我原本以为我需要使用Autotools分发源代码,但这并不是我想要做的事情,我会阅读PDF文件。谢谢。 - JWood

3
如果可能的话,最好不要使用安装程序,而是使用简单的提取和运行方式。这样用户就可以将文件放在任何地方并运行它。
但是,您还有其他选择,例如:
1. 使用autoconf,
2. 使用CMake,
3. 使用像IZPack这样的Java安装程序,
4. 等等

3

看一下InstallJammer。你可以为Windows和Linux编写一个单一的项目,而Mac支持很快就会到来。


我目前正在研究InstallJammer,到目前为止它看起来非常有前途!谢谢。 - JWood
2
很遗憾,该项目已经停止了。InstallJammer的活跃开发已经停止。所有版本的源代码都可用,并且将始终保持如此,但您的努力可能更好地花在一个正在积极开发的安装程序上。 - Paolo Fulgoni

2

编写一个非常健壮的makefile!或者使用CMake


2

我开始编写 unistall 是为了在各种发行版上安装二进制包时的情况。

它试图做一些事情:

  • 识别操作系统类型和软件包管理器,允许您使用系统软件包管理器获取程序可能需要的任何依赖项。例如,如果使用debian/ubuntu,则会知道使用apt-get install libncurses5-dev,如果使用RHEL/Fedora/CentOS,则会知道使用yum install libncurses-devel
  • 了解是否需要更新init的机制
  • 创建一个安全的卸载程序
  • 适用于任何shell(bash、dash、zsh、pdksh、busybox ash等)

我保留该存储库,因为它充满了有用的内容,但是我很快放弃了针对Linux发行版的install sheild类型程序的想法。你会发现,为.deb、.rpm和(可能)slackware .tgz格式制作可安装的软件包要好得多。

可以使用类似checkinstall的工具将其集成到构建系统中。请注意,checkinstall生成的软件包并不总是完美的,根据Debian和其他人制定的严格lint准则,但软件包仍然可以正常工作。

您可以为用户提供的最佳安装体验是允许他们使用本地软件包管理器安装(和更新)您的软件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接