供应商二进制包格式选择似乎由墨菲定律的一种形式决定:您不使用的所有发行版都有包。(警告:不存在满足您的软件堆栈的分发依赖性的分发)。
这是政治问题,还是更深层次的问题,我们还没有看到“一次构建,随处运行”包格式的出现?
为了发布一些软件的几个不同版本的 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 包使用相同的方案(我很确定不存在这样的等价物),所以这只是仅供参考。
Solaris、blastwave、openCSW、Sunfreeware 和 pkgsrc 的附加软件包有多种来源。理想情况下,我希望尽可能使用单一的包装系统,那么您会推荐我使用其中的哪一个?或者,我应该忽略它们,然后自己动手吗?
我处于需要在工作中进行一些 RPM 的位置,这对我来说是相当新的。
我真的很想听听哪些文档、教程。或 presos 对您的理解很有用:
a)如何在不犯noobish错误的情况下做好他们
b) 如果您没有花一天时间仔细阅读手册页,那么您可能会错过的任何其他方便的技巧。
什么对你最有帮助?
我来自开发人员背景,所以我对手动制作和编译软件很满意,而且我一直在摆弄公式,homebrew但 rpm 对我来说是一个新的、强大的和闪亮的工具。
我们构建 .deb 包并将它们托管在本地 Debian APT 存储库中,然后我们使用 Puppet 来管理安装。
然而,令人惊讶的是,关于构建或管理apt存储库的文章很少,所以我担心我们忽略了一些漂亮的开源解决方案。其他初创公司使用什么?他们只是scp从服务器到服务器的原始文件吗?如果是这样,他们如何保持物品整洁?
或者这是 Rails 内部处理的问题(例如 as gems),所以我们是唯一面临的问题?;)
我有一个源包,我想在其中添加一个简单的 init.d 脚本。我知道 dh_installinit 应该有帮助:当我运行它时,它会创建 postrm、prerm、postinstall 的示例以在安装后执行 update-rc.d(顺便说一下,这对我来说没问题)但我无法制作我新创建的包当我执行 apt-get install 时将文件复制到 /etc/init.d !
在此先感谢 serverfault 社区!
具体来说,我想使用最新的 uvc 驱动程序为 debian/lenny 构建一个包。我可以编译和安装它们,但我希望它们以正常的 debian 方式打包。我想我想以某种方式使用 make-kpkg,但我不知道如何使用。module-assistant 似乎不好,因为它似乎只使用 debian 中可用的源。
我想将从 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/。在网上我可以看到一些关于供应商一切政策的帖子,它似乎不正确的操作明智,因为很多宝石将被重复。由于我没有红宝石背景,我不知道它的确切优点/缺点
如果有人已经做了类似的事情,你会采取哪一种方式?从运营角度来看,什么才是最好的解决方案?
我正在尝试创建我的第一个 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 说:
- 它调用 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) 如何使用 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
以 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)