分页: 1 / 1

《NetBSD pkgsrc指南》中文版-Chapter 9. 常见问题

发表于 : 2010-05-19 10:12
leo
目录
9.1. 有无pkg相关讨论的邮件列表?
9.2. pkgviews文档在哪里?
9.3. 用户管理package的工具(pkgtools)
9.4. 如何以非root身份使用pkgsrc
9.5. 获取distfiles时如何续传?
9.6. 我如何从pkgsrc安装/使用模块化的X.org?
9.7. 如何在防火墙后获取文件
9.8. 我怎么被告知要获取文件需要使用被动的FTP模式?
9.9. 怎样一次获取所有的distfiles
9.10. Don't know how to make /usr/share/tmac/tmac.andoc 是什么意思?
9.11. Could not find bsd.own.mk 是什么意思?
9.12. 使用'sudo'操作pkgsrc
9.13. 我怎样改变配置文件的位置?
9.14. 自动的安全检查
9.15. 为何有些packages无视我的CFLAGS?
9.16. 一个package无法构建,我该怎么做?
9.17. Makefile appears to contain unresolved cvs/rcs/??? merge conflicts 是什么意思?
这一小节包含pkgsrc的各种特殊的说明、技巧、窍门等,我们没有在前面的章节发现更合适的位置可以讨论它们,本小节的对象包含用户和开发者。

9.1. 有无pkg相关讨论的邮件列表?
pkgsrc的用户可能会对下面的邮件列表感兴趣:

pkgsrc-users: 这是一个常规性列表,适合大多数pkgsrc相关问题,与平台无关, 例如,寻求pkgsrc的配置帮助、构建过程非正常失败、使用特定的package、pkgsrc的升级安装、 有关pkgsrc的版本分支等。影响用户群的一些变化,例如公告或建议、新特性、packages删除等也 可能会贴出来。

pkgsrc-bulk: 一个有关pkgsrc bulk build的结果的发送和讨论的列表。

pkgsrc-changes: 这个列表是为那些对Pkgsrc的每个改动的提交信息感 兴趣的用户准备的。它也有digest格式, 也就是24小时内提交的pkgsrc变化。

要签署订阅邮件列表, 这样:

代码: 全选

% echo subscribe listname | mail [email protected]

所有这些邮件列表的存档可在 http://mail-index.NetBSD.org/找到。

9.2. pkgviews文档在哪里?
Pkgviews已经被紧密地整合进buildlink中。你可以在 pkgsrc/mk/buildlink3/PKGVIEWS_UG看到pkgviews的用户手册。

9.3. 用户管理package的工具(pkgtools)
目录pkgsrc/pkgtools中包含了一系列无论普通用户或开发者来说都很有用的工具。本小节只想让读者了解这些工具以及它们在何时可以用到。而并非将每个package的用户手册拷贝过来。

pkgsrc所用工具(需要时可自动子被安装):

pkgtools/x11-links: 用于buildlink的符号链接。

OS扩展工具 (需要时会自动安装):

pkgtools/digest: 计算不同类型的checksums (也包含SHA1)。

pkgtools/libnbcompat: Compatibility library for pkgsrc tools.

pkgtools/mtree: 安装于非BSD系统, 因为这些系统本地缺少。

pkgtools/pkg_install: /usr/sbin/pkg_install的更新替代, 或者使用在没有提 供pkg_install的操作系统上。

pkgsrc所用工具(非自动安装):

pkgtools/pkg_tarup: 从一个已经安装的pkgsrc中 生成一个二进制package。make replace 使用它保护旧的package。

pkgtools/dfdisk: 给pkgsrc增加额外的功能, 允许它从多个源获取distfiles。它当前支持下列方式: 多个CD-ROMs和ftp,http网络连接。

pkgtools/xpkgwedge: 将X11的packages放到 其他地方(默认开启)。

devel/cpuflags: 检测最佳的编译器 flags以便为你当前的CPU和编译器优化代码。在mk.conf里讲 USE_CPUFLAGS 设置为yes,将使pkgsrc自动使用cpuflags。

用于跟踪已经安装的packages是否已经更新到位等的工具:

pkgtools/pkg_chk: 报告那些版本号没有 更新到位的packages。

pkgtools/pkgdep: 生成packages依赖包 的图表, 以帮助选择一个更新策略。

pkgtools/pkgdepgraph: 从pkgtools/pkgdep的输出生成图表(使用graphviz)。

pkgtools/pkglint: pkglint(1) 程序检查一个pkgsrc是否有错误。

pkgtools/lintpkgsrc: lintpkgsrc(1)程序 对全部pkgsrc系统做各种检查。

pkgtools/pkgsurvey: 告诉你已经安装了哪些 packages。

帮助用户维护和创建个人的packages:

pkgtools/pkgdiff: 为一个package自动为 创建和维护补丁(包含pkgdiff, pkgvi, mkpatches等)。

pkgtools/rpm2pkg, pkgtools/url2pkg: 帮助转换到。

pkgtools/gensolpkg: 将pkgsrc转换为一个 Solaris package.

pkgsrc维护工具 (或者: 非主流pkg工具)

pkgtools/pkg_comp: 在一个chroot的环境内 构建packages。

pkgtools/libkver: 为交叉编译掩饰内核版本。

9.4. 如何以非root身份使用pkgsrc
如果你想以非root身份使用pkgsrc, 你可以设定一些变量使pkgsrc工作在这样的条件下。至少, 你需要将 UNPRIVILEGED设置为“yes”; 这将开启无特权模式并设置多个相关变量以允许用非root身份安装packages。

默认情况下无法完成这样的任务, 你还需要调整一些变量。例如, 如果自动的user/group 检测导致错误值(或者说不是你想要用的), 你可以通过分别设定 UNPRIVILEGED_USER 和 UNPRIVILEGED_GROUP 来改变它们。

至于bootstrapping, 请注意,当设定了--ignore-user-check” 参数后 bootstrap 脚本将很轻松得处理非root身份的配置, 像它默认选用多个~/pkg下的目录一样,也会在在安装目标下选用相似的目录。用户执行脚本时可以通过 “--prefix” 参数对这些目录进行进行指定(修改), 同样还有一些其它的选项也可以很出色地调整pkgsrc树的目录布局。

9.5. 获取distfiles时如何续传?
默认情况下, 断点续传功能在pkgsrc里是关闭的, 但是你可以通过在mk.conf里面加上选项 PKG_RESUME_TRANSFERS=YES来启用它。如果在获取阶段发现了一个未完成的distfile, pkgsrc将尝试从断点续传它。

你可以通过修改FETCH_USING 变量来使用一个不同获取程序,默认值为ftp(1) 。 你可以指定使用 ftp, fetch, wget 或者 curl。 还有一个值是manual, 选择这个值后会禁用获取。如果设置为custom,也会禁用获取程序系统采用系统默认设定以及依赖包。这种情况下,你必须提供 FETCH_CMD, FETCH_BEFORE_ARGS, FETCH_RESUME_ARGS, FETCH_OUTPUT_ARGS, FETCH_AFTER_ARGS.

例如, 你想使用 wget 来下载, 你必须使用类似这样的设定:

代码: 全选

FETCH_USING= wget

9.6. 我如何从pkgsrc安装/使用模块化的X.org?
如果你想从pkgsrc获取并使用模块化的X.org而不是系统自己的X11 (/usr/X11R6, /usr/openwin, ...) 你必须将下面这行放进mk.conf:

代码: 全选

X11_TYPE=modular

说明
DragonFly操作系统默认从pkgsrc选用模块化的X.org。

9.7. 如何在防火墙后获取文件
如果你在一个防火墙后面,不能直接与Internet上的主机相连接(也就是必须通过NAT), 你需要指定相关的代理主机。这可以通过将一个环境变量设置为一个URL格式完成, 例如,在Amdahl, 机器 “orpheus.amdahl.com” 是防火墙之一, 它使用端口80作为代理端口,那么代理环境变量这样设置:

代码: 全选

ftp_proxy=ftp://orpheus.amdahl.com:80/
http_proxy=http://orpheus.amdahl.com:80/

9.8. 我怎么被告知make fetch 时使用被动FTP模式?
这要根据你使用的是哪种工具获取distfiles。 在 bsd.pkg.mk里, FETCH_CMD 从下面的名单里指定首个可用命令:

代码: 全选

${LOCALBASE}/bin/ftp
 
/usr/bin/ftp

默认的NetBSD安装中, 它的值为 /usr/bin/ftp, 会首先自动尝试被动连接, 如果服务器拒绝被动连接,再转回使用主动连接方式。如果你想使用其它的工具, 请在你的mk.conf 文件里加入下列内容:

代码: 全选

PASSIVE_FETCH=1
这个选项可以防止 /usr/bin/ftp 使用主动模式传输。

9.9. 怎样一次获取所有的distfiles?
你可能想在工作单位或大学里一次性下载所有的distfiles, 假设你不能运行 make fetch。有一份distfiles的存档在ftp://ftp.netbsd.org/pub/NetBSD/packages/distfiles/, 但是也许你并不想下载整个目录。

这里给出的一个方案是在 /usr/pkgsrc 或它的一个子目录里做一份 make fetch-list , 带着这个list到你的工作单位/学校,然后使用它。如果你没有一个兼容NetBSD的ftp(1) (像tnftp)可用, 别忘了将 FETCH_CMD 设置为一个URL获取方式:

在家:

代码: 全选

% cd /usr/pkgsrc
% make fetch-list FETCH_CMD=wget DISTDIR=/tmp/distfiles >/tmp/fetch.sh
% scp /tmp/fetch.sh work:/tmp

在工作单位:

代码: 全选

% sh /tmp/fetch.sh
然后用tar打包 /tmp/distfiles 并带回家。

如果你有一台机器正运行NetBSD, 而且你想获取 所有的 distfiles (即便那些不属于你的机器构架的), 你可以使用如上所述的 make fetch-list 方法, 或者直接通过下列命令获取distfiles :

代码: 全选

% make mirror-distfiles
如果你决定忽略 NO_{SRC,BIN}_ON_{FTP,CDROM}, 那么你可以运行下面的命令而得到所有的东西:

代码: 全选

% make fetch NO_SKIP=yes

9.10. Don't know how to make /usr/share/tmac/tmac.andoc” 是什么意思?
当编译 pkgtools/pkg_install package时, 你make时得到这样的提示,doesn't know how to make /usr/share/tmac/tmac.andoc? 这表明你在安装NetBSD基本系统时没有安装 “text” 组件 (nroff, ...)。 它的作用是格式化用户手册。

这种情况下,你可以在 pkgtools/pkg_install package里, 将环境变量设置为 NOMAN=YES 来摆脱这个提示,同样在mk.conf里设置亦可。

9.11. “Could not find bsd.own.mk” 是什么意思?
你没有安装编译器组件, comp.tgz。请自行获取并安装它。在/下:

代码: 全选

# cd /
# tar --unlink -zxvpf .../comp.tgz
comp.tgz 是每个NetBSD发行版的一部分。别搞错了版本, (你可以通过 uname -r)来测定一下。

9.12. 使用'sudo'操作pkgsrc
当使用非root身份安装packages,并使用pkgsrc的just-in-time su(1) 特性时, 会每个所需package安装时都会让你输入root密码,要避免这个烦人的情况, 可以使用 sudo package, 它可以在一个有限的时间内缓存密码。要使用它, 安装sudo (无论是通过二进制package还是从security/sudo),然后将下列内容放进 mk.conf, 位置放在LOCALBASE 变量定义的 后面:

代码: 全选

.if exists(${LOCALBASE}/bin/sudo)
SU_CMD= ${LOCALBASE}/bin/sudo /bin/sh -c
.endif

9.13. 我怎样改变配置文件的位置?
作为系统管理员, 你可以选择将配置文件安装在何处。默认的配置是将所有这些文件放在 ${PREFIX}/etc 或其子目录; 这里可以根据你的希望做部分优化 (例如, 一个只读, NFS输出的 PREFIX ,它可以为各个机器提供的不同配置的packages)。

要改变默认设置, 你可以修改 PKG_SYSCONFBASE 变量(在 mk.conf) 以指向你想使用的配置目录; 一些通用的例子包含 /etc 或 /etc/pkg。

还有, 你可以通过设置 PKG_SYSCONFDIR.${PKG_SYSCONFVAR}变量更改这个变量的设置使其基于每个package。 PKG_SYSCONFVAR的值通常匹配于你想修改的package的名称, 那是 PKGBASE 的内容。

注意当完成这些设定的修改后, 你必须重新构建或重新安装所有受影响的packages.

9.14. 自动的安全检查
要知道第三方软件总是有bugs, 而这些bugs中有些可能会给攻击者留下一个突破口。为了减少风险, NetBSD的packages团队维护着一个面对packages的已知风险数据库,它也同时被包含在pkgsrc里。这个数据库可以被自动下载, 这样可以对系统上所有已安装 packags进行安全审计。要这样做, 请参考下面两个工具(已被作为pkgtools/pkg_install package的部件安装了):

pkg_admin fetch-pkg-vulnerabilities, 下载安全漏洞相关信息的名单的一个简单的方法。 这个名单是由NetBSD安全官员和package团队及时更新的, 在NetBSD的ftp服务器上发布:

代码: 全选

ftp://ftp.NetBSD.org/pub/NetBSD/packages/distfiles/pkg-vulnerabilities

pkg_admin audit, 一个审查当前机器的简 单方法, 它可以检查每个已知的安全隐患。如果你安装的packages发现安全隐患它会以标准的输 出方式进行通知,包括描述安全隐患类型, 并提供一个包含了更多信息的URL。

我们强烈推价您使用这些工具! 完成 pkg_install 的安装后, 请阅读package信息, 你可以通过运行

代码: 全选

pkg_info -D pkg_install
进行查看。

如果这个package被安装了, pkgsrc将在构建任何package前使用它执行一个安全检查。 请参阅 Section 5.2, “影响构建过程的变量 以获取控制检查的相关信息。

9.15. 为何有些packages无视我的CFLAGS?
当你在mk.conf中给CFLAGS 变量加上您自己的执行配置时, 这些flags被传递给环境变量中的./configure 脚本和 make(1). 一些package 作者忽略了在他们自己package的Makefile修改这个环境变量使用的CFLAGS。

目前此问题无解。如果你确实需要这个package使用你自己的CFLAGS,你应该在这个package目录下运行 make patch,然后检查所有的 Makefile 和 Makefile.in 以确保它们明确地定义了 CFLAGS。 通常你可以删除这些行。但是请理解一些“聪明的” 程序员写了如此糟糕的代码,这些代码仅能工作在他们选择的特定组合的 CFLAGS 条件下。

9.16. 一个package无法构建,我该怎么做?
请确保你的pkgsrc拷贝的一致性。经常导致这种情况的一个原因是因为用户操作时仅部分更新了他们的pkgsrc。因为pkgsrc是一个大型的系统, 并非一个由很多小系统构成的 集合, 只有在整个目录树得到更新时某些变化才能生效。

确认你没有任何CVS冲突。在所有的pkgsrc文件里搜索 “<<<<<<” 或 “>>>>>>”。

确认你没有从此package提取的老版本的拷贝。运行

代码: 全选

# Run make clean clean-depends
校验一下。

如果问题依旧存在, 写一封mail给 pkgsrc-users 邮件列表。

9.17. “Makefile appears to contain unresolved cvs/rcs/??? merge conflicts” 是什么意思?
你修改了来自pkgsrc的一个文件, 然后其他人又在CVS仓库上修改了这个文件。两个修改位于文件的统一区域, 所以当你更新pkgsrc时, cvs 命令将这一冲突标记在这个文件内。因为做了这样的标记, 这个文件已经不再是一个有效的 Makefile了。

检查一下这个文件, 如果你不再需要在本地修改它们, 你可以删除那个文件,然后在那个目录里运行:

代码: 全选

cvs -q update -dP
来下载当前的版本。