crle - 配置运行时链接环境
crle [-FuvV] [-64] [-a name] [-A name] [-c conf] [-e env] [-E env] [-l dir] [-o dir] [-s dir]
crle 实用程序针对运行时链接配置文件的创建和显示而提供。配置文件由运行时链接程序 ld.so.1(1) 在进程启动期间读取和解释。运行时链接程序尝试为所有进程读取一个缺省配置文件。对于 32 位进程,缺省配置文件是 /var/ld/ld.config。对于 64 位进程,缺省配置文件是 /var/ld/64/ld.config。
若不带任何参数,或仅仅只有 –c 选项,则 crle 将显示配置信息。此信息包括配置文件的内容、所有系统缺省值以及重新生成该配置文件所需的命令行。当与其他任何选项结合使用时,将会创建或更新为一个新的配置文件。
还可通过设置 LD_CONFIG 系列的环境变量之一将运行时链接程序定向至备用配置文件。LD_CONFIG 对于 32 位和 64 位程序均适用。因为 32 位和 64 位配置文件不同,单一的配置文件无法同时用于两类目标文件。因此,在一类程序执行另一类程序时,LD_CONFIG 可能会对程序执行产生不利影响。LD_CONFIG 在此情况下无法胜任。因此,建议使用专门针对某一类进程的 LD_CONFIG_32 和 LD_CONFIG_64 环境变量。
在标准位置 /var/ld 中创建不正确的配置文件可能会阻止程序运行,进而可能难于从其中进行恢复。要防止出现此情况,crle 会对库目录路径执行清理操作。请参见 –F 选项。建议先在某个临时位置创建新配置文件。然后,针对此新的配置文件设置适当的 LD_CONFIG 环境变量。该设置会使运行时链接程序使用新的配置文件而非任何缺省值。验证后,如果需要,可将新的配置文件移至缺省位置。任何时候,都可将环境变量 LD_NOCONFIG 设置为任意值以指示运行时链接程序忽略任何配置文件。该设置可通过实验证明其有用性。
配置文件可以包含以下信息。
运行时链接程序使用规定的搜索路径定位目标文件的动态依赖项。此搜索路径的构成部分如下所示:以任何一个 LD_LIBRARY_PATH 定义所指定的路径开始,后跟目标文件的 runpath 所指定的路径。最后使用特定于目标文件类的任何缺省搜索路径。搜索路径中这个最后的组成部分可以在配置文件中提供。通常,使用该功能时可通过任何系统缺省值进行补充。请参见 –F、–l 和 –u 选项。
在处理安全应用程序时,运行时链接程序将限制 LD_LIBRARY_PATH 搜索和 $ORIGIN 标记扩展的使用。请参见《Oracle Solaris 11.4 Linkers and Libraries Guide》中的 "Runtime Security"。此外,也会限制可从其中定位预装入和审计库的目录。与预装入和审计库关联的路径名会限制为已知可信目录。可信目录可以在配置文件中提供。通常,使用该功能时可通过任何系统缺省值进行补充。请参见 –F、–s 和 –u 选项。
任何由运行时链接程序解释的环境变量都可在配置文件中进行指定。
可以为共享目标文件指定备用目标文件以在运行时使用。
对于希望在中心位置安装第三方软件或者更改未用适当 runpath 编码的应用程序搜索路径的管理员而言,定义额外的缺省搜索路径或额外的可信目录非常有用。
声明备用目标文件提供了一种替换依赖项的方法,无需使用符号链接或 LD_LIBRARY_PATH 设置。
声明由运行时链接程序解释的环境变量提供了一种针对所有应用程序集中控制其定义的方法。
支持以下选项。
指定要处理 64 位目标文件,缺省值为 32 位。使用 –64 创建 64 位特定配置文件。
为 name 创建备用路径名称,路径名称所指向文件的文件名与前面 –o 选项指定的相同。将备用路径名称添加到配置文件。
实际备用文件必须由用户提供。允许此选项出现多次。name 必须为文件,且不能指定目录。
为 name 创建可选备用路径名称。将此备用路径名称添加到配置文件。
此选项类似 –a 选项,只是如果在运行时备用目标文件不可用,将使用原始目标文件 name。此模型类似辅助过滤器的用法。请参见《Oracle Solaris 11.4 Linkers and Libraries Guide》中的 "Generating Auxiliary Filters"。
指定要使用配置文件名 conf。如果未提供此选项,则使用缺省配置文件。
指定一个可替换的环境变量 env。只有适用于运行时链接程序的环境变量才有意义。允许此选项出现多次。此选项类似于 –E 选项。然而,对于在运行时解析配置文件定义以及同名的进程环境定义的方式,这两个选项有所不同。
配置文件中设置的定义可以由进程环境定义覆盖,也可以由空值进程环境定义禁止。
换言之,在运行时进程环境可以替换或删除这些配置文件定义。
指定一个永久的环境变量 env。只有适用于运行时链接程序的环境变量才有意义。允许此选项出现多次。此选项类似于 –e 选项。然而,对于在运行时解析配置文件定义以及同名的进程环境定义的方式,这两个选项有所不同。
对于运行时链接程序有意义的环境变量定义属于这两种类别之一。单一定义是指诸如 LD_NOLAZYLOAD=1 和 LD_DEBUG_OUTPUT=file 之类的定义。列表定义(可以有一个或多个值)是指诸如 LD_LIBRARY_PATH=path 和 LD_DEBUG=files,details 之类的定义。
在配置文件中设置的单一定义优先于进程环境定义。在配置文件中设置的列表定义附加到进程环境定义。空值进程环境定义不能禁止配置文件中设置的任何定义。
换言之,在运行时进程环境不能替换或删除这些配置文件定义。
禁用在处理 –l、–s 和 –u 选项时对目录路径应用缺省清理。指定的所有目录都添加到给定的指定路径,但不进行解释。
未指定 –F 选项时,crle 会对通过 –l 或 –s 指定或从现有配置文件读取的路径目录应用以下规则。这些检查可防止创建会导致程序无法运行的不正确配置文件,并生成不包含多余条目的最优路径。
所有指定的目录都会进行检查,以确保它们都存在,且实际上是目录,而不是另一个文件类型。
重复的目录会被放弃,从而仅保留初始实例。这包括词法上不同但会解析为相同目录的重复项,涉及符号链接时会发生这种情况。
会检查以确保所有系统缺省目录都已包括进来。
对系统缺省目录的所有引用都会根据需要进行修改以与运行时链接程序 ld.so.1 使用相同词法路径(如果提供了系统缺省值)。例如,路径 /lib/sparcv9 会替换为 /lib/64。
为 ELF 目标文件指定新的缺省搜索目录 dir。允许此选项出现多次。
32 位 ELF 目标文件的缺省搜索路径是 /lib,后跟 /usr/lib。64 位 ELF 目标文件的缺省搜索路径是 /lib/64,后跟 /usr/lib/64。
使用此选项将替换缺省搜索路径。因此,通常需要使用 –l 选项来指定与任何要应用的新路径相关的原始系统缺省值。但是,如果 –u 选项生效,而配置文件不存在,则系统缺省值会添加到新配置文件。这些缺省值在使用 –l 选项指定新路径之前进行添加。
有关应用于通过 –l 指定的目录的目录路径清理说明,请参见 –F 选项。
当与 –a 或 –A 选项结合使用时,指定任何备用目标文件所在的目录 dir。允许此选项出现多次,目录 dir 用于为后面的任何命令行选项定位备用目标文件。
为 secure ELF 目标文件指定新的可信目录 dir。允许此选项出现多次。
有关安全目标文件的定义,请参见 ld.so.1 (1) 中的“安全性”部分。有关安全应用程序的运行时限制的论述,请参见《Oracle Solaris 11.4 Linkers and Libraries Guide》中的 "Runtime Security"。
32 位安全 ELF 目标文件的缺省可信目录是 /lib/secure,后跟 /usr/lib/secure。对于 64 位安全 ELF 目标文件,缺省的可信目录是 /lib/secure/64,后跟 /usr/lib/secure/64。
使用此选项将替换缺省可信目录。因此,通常需要使用 –s 选项来指定与任何要应用的新目录相关的原始系统缺省值。但是,如果 –u 选项生效,而配置文件不存在,则系统缺省值会添加到新配置文件。这些缺省值在使用 –l 选项指定新目录之前进行添加。
有关应用于通过 –s 指定的目录的目录路径清理说明,请参见 –F 选项。
请求更新配置文件,可能是添加新信息。其他参数允许将信息附加到现有内容。请参见“附注”部分。
如果配置文件不存在,则会按其他参数的指示创建配置文件。当使用 –l 和 –s 选项时,将首先向配置文件应用系统缺省值,然后才向通过这些选项指定的目录应用系统缺省值。
配置文件的格式可以是当前系统支持的较旧格式。在这种情况下,crle 会使用当前格式编写更新文件。生成的文件无法由不支持该版本的 Oracle Solaris 早期版本读取。
有关在指定了 –u 时应用于从现有配置文件读取的路径的目录路径清理的说明,请参见 –F 选项。由于通过 –F 选项禁用的检查的重要性,不会对后续更新操作自动启用 –F 选项。如果在创建要更新的配置文件时指定了 –F 选项,可能需要指定带 –u 的 –F。
指定详细模式。
在输出配置文件的内容时,会提供更详细的目录和文件信息。
更新库路径时,提供路径清理的详细信息,路径清理会将指定的目录转换为生成的路径。请参见 –F 选项。
输出版本信息并立即退出。
输出用法消息并立即退出。
缺省情况下,运行时链接程序会为所处理的每个 32 位应用程序尝试读取配置文件 /var/ld/ld.config。对于每个 64 位应用程序,则读取 /var/ld/64/ld.config。应用程序可以通过设置 LD_CONFIG 环境变量来引用备用配置文件。还可通过在构建应用程序时在应用程序中记录配置文件名来指定备用配置文件。请参见 ld(1) 的 –c 选项。
以下选项在 Oracle Solaris 的早期版本中受支持,但现在被认为已过时。使用这些选项会生成有关此影响的错误消息。
Oracle Solaris 11.4 不再继续支持配置文件目录高速缓存和 crle 使用 dldump(3C) 函数创建的转储目标文件。在做出此更改之前,这些选项用于管理目录高速缓存和目标文件转储功能。这些选项现在已过时。同样,使用 crle 检查包含这些功能的旧配置文件也将生成警告信息,指出信息已过时。
Oracle Solaris 11 在 SPARC 硬件上不再继续支持 SunOS 4.x AOUT 可执行文件。在做出此更改之前,–t 选项提供了一种表示目标文件类型(ELF 或 AOUT)的切换方式,该选项影响后面的任何 –l 或 –s 选项。–t 选项现在已过时。同样,使用 crle 检查包含 AOUT 信息的旧配置文件也将生成一个警告消息,指出信息已过时。
以下示例将使用 ELF 目标文件的新缺省搜索路径创建一个临时配置文件。环境变量 LD_CONFIG_64 用于指示运行时链接程序针对所有 64 位进程使用此配置文件。
$ crle -64 -c /tmp/ld.config -u -l /local/lib/64 $ crle -c /tmp/ld.config Configuration file [version 5]: /tmp/ld.config Platform: 64-bit MSB SPARCV9 Default Library Path: /lib/64:/usr/lib/64:/local/lib/64 Trusted Directories: /lib/secure/64:/usr/lib/secure/64 \ (system default) Command line: crle -64 -c /tmp/ld.config -l /lib/64:/usr/lib/64:/local/lib/64 $ LD_CONFIG_64=/tmp/ld.config date Wednesday, April 23, 2014 01:27:17 PM PDT示例 2 为 ELF 目标文件更新并显示新的缺省搜索路径
以下示例将更新并显示 ELF 目标文件的新缺省搜索路径。
# crle -u -l /local/lib # crle Configuration file [version 5]: /var/ld/ld.config Platform: 32-bit MSB SPARC Default Library Path: /lib:/usr/lib:/local/lib Trusted Directories: /lib/secure:/usr/lib/secure \ (system default) Command line: crle -c /var/ld/ld.config -l /lib:/usr/lib:/local/lib # crle -u -l /ISV/lib # crle Configuration file [version 5]: /var/ld/ld.config Platform: 32-bit MSB SPARC Default Library Path: /lib:/usr/lib:/local/lib:/ISV/lib Trusted Directories: /lib/secure:/usr/lib/secure \ (system default) Command line: crle -c /var/ld/ld.config -l /lib:/usr/lib:/local/lib:/ISV/lib
在本示例中,缺省配置文件最初并不存在。因此,新的搜索路径 /local/lib 附加到系统缺省值。下一次更新将搜索路径 /ISV/lib 附加到已在配置文件中设置的那些路径。
示例 3 从错误配置文件进行恢复以下示例将在缺省位置创建一个错误配置文件。可通过使用 LD_NOCONFIG 环境变量指示运行时链接程序忽略任何配置文件来删除该文件。请注意,建议创建临时配置文件,并使用环境变量 LD_CONFIG 试用这些文件。
# crle -64 -F -l /local/lib # date ld.so.1: date: fatal: libc.so.1: open failed: \ No such file or directory Killed # LD_NOCONFIG=yes rm /var/ld/64/ld.config # date Friday, April 14, 2017 01:27:17 PM PDT
此配置文件不包含系统缺省搜索路径,因此,date 实用程序无法找到所需的系统依赖项。如果未指定 –F 选项,则不允许这样。在这种情况下,应使用 –u 选项。
示例 4 为 ELF 目标文件新建缺省搜索路径和可信目录并进行显示以下示例将为 ELF 目标文件新建缺省搜索路径和可信目录并进行显示。
# crle -l /local/lib -l /lib -l /usr/lib \ -s /local/lib/secure -s /lib/secure -s /usr/lib/secure # crle -v Configuration file [version 5]: /var/ld/ld.config Platform: 32-bit MSB SPARC Default Library Path: /local/lib:/lib:/usr/lib Trusted Directories: /local/lib/secure:/lib/secure:/usr/lib/secure Command line: crle -c /var/ld/ld.config \ -l /local/lib:/lib:/usr/lib \ -s /local/lib/secure:/lib/secure:/usr/lib/secure
有了此配置文件,可以将第三方应用程序安装在 /local/bin 中,而将其依赖项安装在 /local/lib 中。缺省搜索路径使应用程序无需设置 LD_LIBRARY_PATH 即可定位其依赖项。本示例中缺省可信目录也进行了扩充。
示例 5 创建备用路径以替换 ELF 共享目标文件以下示例将定义备用目标文件路径以替换 ELF 共享目标文件。该示例使用一个应用程序,该应用程序依赖于通常作为 /usr/local/lib/libapp.so.1 进行安装的目标文件。
$ ldd /usr/local/bin/app libapp.so.1 => /usr/local/lib/libapp.so.1 .... # crle -c lib2.config -o /usr/local/lib2 -a /usr/local/lib/libapp.so.1 # crle -c lib2.config Configuration file [version 5]: lib2.config Platform: 32-bit MSB SPARC Default Library Path: /lib:/usr/lib (system default) Trusted Directories: /lib/secure:/usr/lib/secure \ (system default) Alternative Objects: Directory: /usr/local/lib Alternative: /usr/local/lib2 libapp.so.1 Command line: crle -c lib2.config -o /usr/local/lib2 -a /usr/local/lib/libapp.so.1 $ LD_CONFIG=lib2.config ldd /usr/local/bin/app libapp.so.1 => /usr/local/lib2/libapp.so.1 (alternate) ....
使用此配置,任何通常解析至 /usr/local/lib/libapp.so.1 的依赖项将改为解析至 /usr/local/lib2/libapp.so.1。
示例 6 设置可替换环境变量和永久环境变量以下示例将设置可替换环境变量和永久环境变量。
# crle -e LD_LIBRARY_PATH=/local/lib \ -E LD_PRELOAD=preload.so.1 # crle ..... Environment Variables: LD_LIBRARY_PATH=/local/lib (replaceable) LD_PRELOAD=preload.so.1 (permanent) ..... $ LD_DEBUG=files LD_PRELOAD=preload.so.2 ./main ..... 18764: file=preload.so.2; preloaded 18764: file=/local/lib/preload.so.2 [ ELF ]; \ generating link map ..... 18764: file=preload.so.1; preloaded 18764: file=/local/lib/preload.so.1 [ ELF ]; \ generating link map .....
通过此配置文件,可替换搜索路径将与附加到进程环境定义的永久预装入目标文件一起进行指定。
创建或显示配置文件将导致返回 0。否则,任何错误情形都会随附一条诊断消息并返回非零值。
使用 LD_CONFIG 环境变量指定配置文件时应谨慎,因为此环境变量对于任何派生应用程序均可见。
配置文件包含平台特定的二进制数据。给定的配置文件只能由具有相同机器类和字节排序的软件进行解释。配置文件的开头是系统标识信息。此信息由 crle 和运行时链接程序用来检查其与配置文件的兼容性。此信息还使得 file(1) 命令能够正确识别配置文件。
32 位应用程序的缺省配置文件。
64 位应用程序的缺省配置文件。
没有 crle 引用的环境变量。不过,在处理由 crle 创建的配置文件时,有几个环境变量会影响运行时链接程序的行为。
提供备用配置文件。
禁用配置文件处理。
从配置文件禁用环境变量处理。
从配置文件禁用备用目标文件处理。
有关下列属性的说明,请参见 attributes(7)。
|
file(1)、ld(1)、ld.so.1(1)、dldump(3C)、tempnam(3C)、attributes(7)