标签: packaging

为什么 Linux 开发者不能创建一个通用的打包格式?

供应商二进制包格式选择似乎由墨菲定律的一种形式决定:您使用的所有发行版都有包。(警告:不存在满足您的软件堆栈的分发依赖性的分发)。

这是政治问题,还是更深层次的问题,我们还没有看到“一次构建,随处运行”包格式的出现?

linux packaging

14
推荐指数
5
解决办法
1382
查看次数

xyz > xyz-beta(或 alpha、rc 等)的增量 RPM 包版本“数字”

为了发布一些软件的几个不同版本的 RPM 包,我正在寻找一种方法来指定被视为“升级”的版本“编号”,并包括几个预发布版本的差异,例如(按顺序) ):“2.4.0 alpha 1”、“2.4.0 alpha 2”、“2.4.0 alpha 3”、“2.4.0 beta 1”、“2.4.0 beta 2”、“2.4.0 候选版本”、 “2.4.0 最终版”、“2.4.1”、“2.4.2”等

我对此的主要问题是 RPM 认为“2.4.0”早于“2.4.0.alpha1”,所以我不能只在最终版本号的末尾添加后缀。

我可以尝试“2.4.0.alpha1”、“2.4.0.beta1”、“2.4.0.final”,这会起作用,除了“候选发布”将被考虑晚于“2.4.0.final” ”。

我考虑的另一种方法是使用 RPM 版本号的“epoch:”部分(epoch: 前缀被考虑在主版本号之前,因此“1:2.4.0”实际上早于“2:1.0.0”) . 通过在 epoch: 字段中放置时间戳,所有版本都按照 RPM 的预期进行排序,因为它们的版本似乎随时间增加。但是,当同时在几个主要版本上发布新版本时,这会失败(例如,2.3.2 在 2.4.0 之后发布,但它们的 RPM 版本为“20121003:2.3.2”和“20120928:2.4”。 0" 并且 2.3.2 上的系统无法“升级”到 2.4.0,因为 rpm 将其视为旧版本)。在这种情况下,yum/zypper/etc 拒绝升级到 2.4.0,这就是我的问题。

我可以使用哪些版本号来实现这一点,并确保 RPM 始终认为版本号是有序的。或者如果不是版本号,RPM 包装中的其他机制?

注 1:我想保留规范文件的“发布:”字段以用于其原始目的(对于相同版本的打包软件,包的多个版本,包括打包更改)。

注意 2:这应该适用于主要发行版的当前生产版本,例如 RHEL/CentOS 6 和 SLES 11。但我对不感兴​​趣的解决方案也很感兴趣,只要它们不涉及重新编译 rpm!

注 3:在类似 Debian 的系统上,dpkg 使用版本号中的一个特殊组件,即“~”(波浪号)字符。这会导致 dpkg 将后缀计数为“负”排序,因此“2.4.0~anything”将排在“2.4.0”之前。然后,正常排序适用于“~”之后,因此“2.4.0~alpha1”在“2.4.0~beta1”之前,因为“alpha”按字母顺序在“beta”之前。我不一定希望对 RPM 包使用相同的方案(我很确定不存在这样的等价物),所以这只是仅供参考。

package-management rpm packaging

10
推荐指数
2
解决办法
1万
查看次数

Solaris 软件包的最佳来源是什么?

Solaris、blastwave、openCSW、Sunfreeware 和 pkgsrc 的附加软件包有多种来源。理想情况下,我希望尽可能使用单一的包装系统,那么您会推荐我使用其中的哪一个?或者,我应该忽略它们,然后自己动手吗?

solaris packaging

6
推荐指数
2
解决办法
1611
查看次数

在学习制作 RPM 时,对您最有用的资源是什么?

我处于需要在工作中进行一些 RPM 的位置,这对我来说是相当新的。

我真的很想听听哪些文档、教程。或 presos 对您的理解很有用:

a)如何在不犯noobish错误的情况下做好他们

b) 如果您没有花一天时间仔细阅读手册页,那么您可能会错过的任何其他方便的技巧。

什么对你最有帮助?

我来自开发人员背景,所以我对手动制作和编译软件很满意,而且我一直在摆弄公式,homebrew但 rpm 对我来说是一个新的、强大的和闪亮的工具。

linux rpm packaging

6
推荐指数
1
解决办法
126
查看次数

人们如何将内部软件打包到他们的生产服务器上?

我们构建 .deb 包并将它们托管在本地 Debian APT 存储库中,然后我们使用 Puppet 来管理安装。

然而,令人惊讶的是,关于构建或管理apt存储库的文章很少,所以我担心我们忽略了一些漂亮的开源解决方案。其他初创公司使用什么?他们只是scp从服务器到服务器的原始文件吗?如果是这样,他们如何保持物品整洁?

或者这是 Rails 内部处理的问题(例如 as gems),所以我们是唯一面临的问题?;)

ubuntu debian packaging distribution

6
推荐指数
1
解决办法
271
查看次数

init 脚本没有安装到 /etc/init.d

我有一个源包,我想在其中添加一个简单的 init.d 脚本。我知道 dh_installinit 应该有帮助:当我运行它时,它会创建 postrm、prerm、postinstall 的示例以在安装后执行 update-rc.d(顺便说一下,这对我来说没问题)但我无法制作我新创建的包当我执行 apt-get install 时将文件复制到 /etc/init.d !

在此先感谢 serverfault 社区!

linux debian packaging

5
推荐指数
1
解决办法
5372
查看次数

如何构建内核模块的 debian 包?

具体来说,我想使用最新的 uvc 驱动程序为 debian/lenny 构建一个包。我可以编译和安装它们,但我希望它们以正常的 debian 方式打包。我想我想以某种方式使用 make-kpkg,但我不知道如何使用。module-assistant 似乎不好,因为它似乎只使用 debian 中可用的源。

debian kernel packaging kernel-modules debian-lenny

5
推荐指数
1
解决办法
8747
查看次数

RPM 打包 ruby​​ 项目

我想将从 git 获取的 ruby​​ 程序打包到 RPM 包中。我有一个构建服务器和一个生产服务器(相同的操作系统/相同的架构)。

与大多数 ruby​​ 项目一样,我的项目确实有 gem 依赖项。

我找到了两种做我想做的事情的方法,我想知道哪一种是最好的 - 大多数 UNIX/Linux 哲学 - 操作方面

  • 在生产服务器上减少捆绑

第一个(对我来说看起来更好)是做一个bundle install --standalone --deployment --path %{buildroot}/usr/lib/rubygems/1.8/gems/ --binstubs %{buildroot}/usr/lib/rubygems/1.8.bin. 这会将 gem 安装在将部署 .rpm 的服务器上的 gem 系统路径上,无需安装捆绑包。我不确定的是,当我使用相同的 gem 安装其他 rpm 时会发生什么?当我删除一个带有在两个包之间共享的 gem 的包时,会发生什么?

  • 在生产服务器上捆绑

bundle install --deployment命令将直接在项目本身中执行。这样就可以在目录中找到所有内容vendor/。在网上我可以看到一些关于供应商一切政策的帖子,它似乎不正确的操作明智,因为很多宝石将被重复。由于我没有红宝石背景,我不知道它的确切优点/缺点

如果有人已经做了类似的事情,你会采取哪一种方式?从运营角度来看,什么才是最好的解决方案?

fedora rpm ruby packaging rubygems

5
推荐指数
1
解决办法
1009
查看次数

Debian 软件包创建:binary-arch 和 binary-indep 目标

我正在尝试创建我的第一个 deb,所以我还不太了解它。这是我目前的“规则”文件:

#!/usr/bin/make -f
# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1

# This has to be exported to make some magic below work.
export DH_OPTIONS

%:
        dh $@
Run Code Online (Sandbox Code Playgroud)

目前我正在阅读文档并试图了解如何编写更复杂的“规则”文件。我被困在 'binary-arch' 和 'binary-indep' 目标上。简而言之,我不明白它们究竟代表什么。

文档说包 arch 由“Control”文件中的“Architecture:”行决定。

  • 如果值为“all”,则该包依赖于体系结构。

  • 如果值为“any”,则包是
    独立于体系结构的。

我完全理解这部分。但后来我开始阅读 debhelper 工具的 man 文件。

man dpkg-buildpackage 说:

  1. 它调用 debian/rules 构建,然后调用 fakeroot debian/rules 二进制目标(除非使用 -S 请求了纯源构建)。请注意,binary-target 是 binary(默认情况下,或者如果指定了 -b)或 binary-arch(如果指定了 -B)或 binary-indep(如果指定了 -A)

man dh 说:

binary-indep 序列中的命令传递了“-i”选项以确保它们仅适用于与二进制无关的包,并且 binary-arch 序列中的命令传递了“-a”选项以确保它们仅适用于体系结构相关的包.

然后我尝试通过键入来查看“binary”、“binary-arch”和“binary-indep”目标的默认命令集

$ dh binary --no-act

$ dh binary-arch …
Run Code Online (Sandbox Code Playgroud)

debian packaging deb

5
推荐指数
1
解决办法
2069
查看次数

如何使用 make-jpkg 和 fakeroot 在 Debian Wheezy 上无错误地安装 Oracle Java?

如何使用 make-jpkg 和 fakeroot 在 Debian Wheezy 上安装 Oracle Java?

在 debian wheezy 上安装 oracle java 的手册非常清晰易懂:

http://wiki.debian.org/JavaPackage https://blogs.oracle.com/marigan/entry/installation_of_the_jdk_on http://www.debian-administration.org/articles/142

  • 从oracle下载jdk-7u21-linux-x64.tar.gz
  • 安装 java 包
  • 使用 jdk-7u21-linux-x64.tar.gz 运行 make-jpkg

以 root 身份运行:

make-jpkg jdk-7u21-linux-x64.tar.gz fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz

结果出现以下错误:

您是真正的 root —— 不幸的是,一些 Java 发行版具有直接操作 /etc 的安装脚本,并且可能会导致您的系统出现一些不一致。相反,您应该成为非 root 用户并运行:

fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz

这不会对您的系统文件造成任何损害,并且仍然允许 Java 发行版成功解压。

正在流产。

作为普通用户运行:

make-jpkg jdk-7u21-linux-x64.tar.gz fakeroot make-jpkg jdk-7u21-linux-x64.tar.gz

导致警告/错误墙。

一些错误:

dpkg-shlibdeps: warning: Can't extract name and version from library name `libverify.so'
error: couldn't find library libxslt.so.1 needed by …
Run Code Online (Sandbox Code Playgroud)

debian java packaging debian-wheezy

5
推荐指数
1
解决办法
7611
查看次数