我正在运行 Ubuntu,并且安装了一个 deb 文件。我以前制作过 deb 包,所以我知道有一个 debian 更改日志 (debchange)。无论如何,是否可以查看我已安装的任何软件包的 debian 更改日志?假设我无权访问此包的 deb 源文件,并且我没有可用的 deb 文件。如果需要,我可以安装额外的软件包。
Debian 中的一些(大多数?)软件包有标签。例如:
=# apt-cache show squirrelmail | perl -lne 'print if /^Tag:/.../^\S/'
Tag: implemented-in::php, interface::web, mail::imap, mail::smtp,
mail::user-agent, network::server, protocol::http, protocol::imap,
protocol::smtp, role::program, scope::application, use::browsing,
use::editing, use::searching, use::transmission, use::viewing,
web::TODO, web::application, works-with::mail
Section: web
Run Code Online (Sandbox Code Playgroud)
但是,我找不到列出所有带有给定标签的包的方法。是否可以?
我今天开始为我们的一些应用程序设置一个 deb 存储库。鉴于它们是解释性脚本,我选择了“所有”架构(来自conf/distributions
):
Codename: lucid
Architectures: all
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将 .deb 添加到存储库时,reprepro 会打印警告:
WARNING: Distribution lucid contains an architecture called 'all'.
Run Code Online (Sandbox Code Playgroud)
现在我想知道为什么它会发出警告?有什么问题?
我正在尝试下载包的源代码,但是当我运行时
root@proxy:~# apt-get source squid3
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Can not find version '3.3.8-1.1' of package 'squid3'
E: Unable to find a source package for squid3
Run Code Online (Sandbox Code Playgroud)
无法找到。但是当我运行时apt-cache search squid3
它会找到它。
root@proxy:~# apt-cache search squid3
squid-cgi - Full featured Web Proxy cache (HTTP proxy) - control CGI
squid3 - Full featured Web Proxy cache (HTTP proxy)
squid3-common - Full featured Web Proxy cache (HTTP proxy) - common files
squid3-dbg - Full featured …
Run Code Online (Sandbox Code Playgroud) 我有一台 i386 ubuntu hardy 机器和一台 amd64 ubuntu hardy 机器。我想在 i386 上为 amd64 机器编译一个 debian 包(又名 deb)(因为我没有足够的内存在 amd64 机器上快速编译)。如果我dpkg-buildpackage
在 i386 机器上做 a ,它会为 i386 生成一个 deb,它不能安装在 amd64 机器上。有没有办法在 i386 机器上为 amd64 编译 deb?
我已经将一个软件包安装到我自己的 debian 软件包存储库中,如下所示:
$ sudo reprepro -b /var/packages/ubuntu includedeb maverick my-package_0.8-0_all.deb
my-package_0.8-0_all.deb: component guessed as 'main'
Exporting indices...
Run Code Online (Sandbox Code Playgroud)
我已经使用 apt-get install 在几台机器上安装了我的软件包。
我现在为我的软件添加了新功能,并希望将我的软件包的新次要版本添加到存储库,以便我可以使用 apt-get upgrade 更新我的机器。
我尝试这样做:
$ sudo reprepro -b /var/packages/ubuntu includedeb maverick my-package_0.9-0_all.deb
my-package_0.9-0_all.deb: component guessed as 'main'
Skipping inclusion of 'my-package' '1.0-0' in 'maverick|main|i386', as it has already '1.0-0'.
Skipping inclusion of 'my-package' '1.0-0' in 'maverick|main|amd64', as it has already '1.0-0'.
Run Code Online (Sandbox Code Playgroud)
看起来我需要告诉 reprepro 这是同一个包的新版本,但我不知道如何做到这一点。我已经多次阅读 reprepro 手册页并在网上搜索了几个小时,但我没有找到任何答案。
我错过了什么吗?
非常感谢。
我想知道是否有可能获得已安装 debian 软件包的原始配置文件与当前配置文件的差异。
如果找到显示修改后的配置文件的答案,但我找不到生成差异的方法。
命令是
dpkg-query -W -f='${Conffiles}\n' '*' | awk 'OFS=" "{print $2,$1}' | LANG=C md5sum -c 2>/dev/null | awk -F': ' '$2 !~ /OK/{print $1}' | sort | less
Run Code Online (Sandbox Code Playgroud) 我已经建立了一个私有 deb 存储库并将一些签名的 deb 包复制到其中。我已经在本地安装了签名密钥。但是,当我尝试从 repo 安装时,我收到此警告:
WARNING: The following packages cannot be authenticated!
Run Code Online (Sandbox Code Playgroud)
手动安装时,我可以按,y但我想使用 puppet 自动安装这些包,但失败了。
所以有什么问题?我是否需要使用我控制的密钥退出软件包?有没有更好的方法来确保我安装了特定版本的 puppet?
我从puppet debian 存储库中获得了软件包- http://apt.puppetlabs.com/我只是从(对于 lucid)这个目录中复制了软件包
然后使用脚本更新存储库,该脚本为每个存储库运行这些命令:
cd /var/www/html/apt/ubuntu/lucid
dpkg-scanpackages binary /dev/null | gzip -9c > binary/Packages.gz
dpkg-scansources sources /dev/null | gzip -9c > sources/Sources.gz
Run Code Online (Sandbox Code Playgroud)
我已经在客户端上安装了签名密钥。
$ sudo apt-key list
/etc/apt/trusted.gpg
--------------------
...
pub 4096R/4BD6EC30 2010-07-10 [expires: 2016-07-08]
uid Puppet Labs Release Key (Puppet Labs Release Key) <info@puppetlabs.com>
...
Run Code Online (Sandbox Code Playgroud)
这样做的理由是我希望所有的 puppet 客户端都是相同的版本。因此,所有机器都应该使用以下 pin …
我正在尝试创建我的第一个 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) 我有一个 Debian 和一个需要将启动/停止脚本添加到 /etc/init.d 目录的 RPM 包。最近,一位远程开发人员告诉我,“知情人士”知道“最佳实践”是在 /etc/init.d 目录中实际安装启动程序,而不是使用符号链接,尤其是在可以安装软件包时在不同的分区上。我一直使用符号链接。“ls -la”显示很多包使用符号链接。
是否有 Unix/Linux 大师可以给出关于在 /etc/init.d 目录中启动脚本的最佳实践的明确答案。最佳实践符号链接、硬链接、实际文件还是真的很重要?
如果你能引用一个来源,那就太好了。我在谷歌上搜索了这个话题,但找不到答案。
我需要用一个自定义的包替换一个包,它有自己的名字(foo-origpackage)。为了允许将其用作替代品,我将这Provides: origpackage
一行添加到控制文件中。apt-cache show foo-origpackage
列出“提供”条目就好了。但是,当我想根据 origpackage 安装文件时,它会失败(“未安装软件包 origpackage”)。
我缺少的“真实”包和虚拟包之间有什么区别吗?
编辑:
准确地说,我要替换的是用于 Squeeze 的 xen-utils-common。我的 tao-xen-utils-common 有以下control
文件:
来源:tao-xen-utils-common 部分:内核 优先级:可选 维护者:Creshal <administration@tao.at> 构建依赖:debhelper 标准版本:3.8.0 主页:http://tao.at 包:tao-xen-utils-common 架构:全部 依赖:gawk、lsb-base、udev、xenstore-utils、tao-firewall 提供:xen-utils-common 冲突:xen-utils-common 替换:xen-utils-common 说明:Xen 管理工具——常用文件(修改) 管理通过 Xen 虚拟化的系统的用户空间工具 机监视器。 修改为与 TAO 防火墙一起使用。
但是,安装 xen-utils-4.0 失败:
foo@bar# apt-cache showpkg tao-xen-utils-common 包:tao-xen-utils-common 版本: 4.0.0-1tao1 (/var/lib/apt/lists/repo.tao.at_dists_stable_main_binary-amd64_Packages) (/var/lib/dpkg/status) 描述语言: 文件:/var/lib/apt/lists/repo.tao.at_dists_stable_main_binary-amd64_Packages MD5:7c2503f563fca13b33b4eb3cbcb3c129 反向取决于: tao-防火墙,tao-xen-utils-common tao-防火墙,tao-xen-utils-common 依赖项: 4.0.0-1tao1 - gawk (0 (null)) lsb-base (0 (null)) udev (0 (null)) xenstore-utils (0 (null)) tao-firewall (0 (null)) …
在我的 Ubuntu 台式计算机上使用 Synaptic 时,我可以查看所有要升级的软件包的所有更改日志,并根据需要取消选择要升级的软件包。在我的桌面上,我通常会安装所有东西,但我喜欢至少查看更改的内容,以便在我怀疑升级可能会导致我使用的开发工具出现问题时推迟升级。
在没有 x-server 的服务器(Ubuntu Server)上,我如何在控制台上做同样的事情:
apt-get --dry-run upgrade
这样做还有很多嘈杂的模拟安装消息),我为此搜索了很多,但没有找到任何东西,可能我没有使用正确的术语;但这肯定是可能的。Synaptic 必须从我假设的一些低级工具中获取它的信息?
如果使用现有工具还不能轻松完成,也欢迎使用复杂的 shellscript。