• R/O
  • SSH

YSLib-wiki: Commit

The wiki source of YSLib documentation.


Commit MetaInfo

Revisioneb5c04a937ff9defc35a59c28df8e4819a9cb07a (tree)
Zeit2024-02-14 02:01:42
AutorFrankHB <frankhb1989@gmai...>
CommiterFrankHB

Log Message

Sysroot.zh-CN.md: 补充文件系统布局的原理。

Ändern Zusammenfassung

    Diff

    diff -r 9fcab55680bc -r eb5c04a937ff Sysroot.zh-CN.md
    --- a/Sysroot.zh-CN.md Wed Feb 14 00:29:49 2024 +0800
    +++ b/Sysroot.zh-CN.md Wed Feb 14 01:01:42 2024 +0800
    @@ -17,7 +17,7 @@
    1717
    1818 # 布局
    1919
    20-  在满足前述要求的前提下,Sysroot 部署实例使用的文件系统布局原则上和[一般类 UNIX 系统使用的布局](https://zh.wikipedia.org/zh-cn/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E5%B1%82%E6%AC%A1%E7%BB%93%E6%9E%84%E6%A0%87%E5%87%86)同构,具体子目录布局如下:
    20+  在满足前述要求的前提下,Sysroot 部署实例使用[局部 FHS 目录布局](Run.zh-CN.md#文件系统布局),具体子目录布局如下:
    2121
    2222 * `.shbuild` :使用 [SHBuild](Tools/SHBuild.zh-CN.md) 构建时的临时目录(可以在部署后手动删除)。
    2323 * [系统前缀字符串](Tools/Scripts.zh-CN.md)指定的作为[安装路径前缀](Tools/Scripts.zh-CN.md)的最后一个路径组件的目录文件名(如 `usr` ):被部署的用户空间目录,其中的内容使用 [Linux](http://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/usr.html) 等现代 UNIX 变体类似的约定:
    @@ -41,7 +41,27 @@
    4141
    4242   没有在此约定的 Sysroot 中的子目录和其它文件路径为未来的版本保留:这些路径不被当前版本使用,但可能被之后的版本使用。依赖 Sysroot 的程序和用户应注意避免占用保留路径引起变更版本时引起的兼容问题。
    4343
    44-**注意** Sysroot 实例的布局*不是*[版本库文件布局](Features.zh-CN.md)。但是,关于部署文件时有关被部署的文件的要求,参见版本库文件布局中的相关约定。
    44+**注意** Sysroot 实例的布局*不是*[版本库文件布局](Features.zh-CN.md)。关于部署文件时有关被部署的文件的要求,参见版本库文件布局中的相关约定。
    45+
    46+**原理**
    47+
    48+  文件系统子目录的约定和 FHS 类似。
    49+
    50+  对 NPLA1 文件,因为脚本并非二进制文件而对体系结构中立,使用 `share` 子目录。脚本不被视为可能依赖具体体系结构的二进制库文件(位于 `lib` 为前缀的子目录)。若未来需要部署二进制文件或作为库的二进制可执行文件,可部署到 `lib` 和 `libexec` 等子目录。这也类似 [Guile 等语言实现使用的惯例](https://www.gnu.org/software/guile/manual/html_node/Installing-Site-Packages.html);但当前没有指定其中的下级子目录。
    51+
    52+  在程序中实现局部 FHS 目录布局可能需要特定宿主环境的支持,以定位可执行文件映像路径,例如:
    53+
    54+* Win32(实际依赖 Windows NT 实现)[加载动态库的搜索默认行为](https://learn.microsoft.com/windows/win32/dlls/dynamic-link-library-search-order)以及运行时的 [`GetModuleFileNameW`](https://learn.microsoft.com/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulefilenamew) 调用。
    55+* ELF 映像的依赖路径中的[替换序列 `$ORIGIN`](https://www.sco.com/developers/gabi/latest/ch5.dynamic.html#substitution) 。
    56+* Linux 运行时对[文件系统路径 `/proc/self/exe`](https://man7.org/linux/man-pages/man5/proc.5.html) 的访问(在某些 [chroot](https://man7.org/linux/man-pages/man2/chroot.2.html) 环境中可能不可用)。
    57+* Mac OS X 运行时的 [`_NSGetExecutablePath`](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/dyld.3.html) 调用。
    58+* FreeBSD 运行时的 [`sysctl`](https://man.freebsd.org/cgi/man.cgi?sysctl(3))(构造参数向量 `CTL_KERN` 、`KERN_PROC` 、`KERN_PROC_PATHNAME` 和 `-1` )调用。
    59+* FreeBSD(仅当启用 [procfs](https://man.freebsd.org/cgi/man.cgi?query=procfs) 时)和 [Dragonfly BSD](https://leaf.dragonflybsd.org/cgi/web-man?command=procfs) 运行时对文件系统路径 `/proc/curproc/file` 的访问。
    60+* NetBSD 运行时对[文件系统路径 `/proc/curproc/exe` 或 `/proc/self/exe`](https://man.netbsd.org/mount_procfs.8) 的访问。
    61+* Solaris(自从 10 )运行时对[文件系统路径 `/proc/self/object/a.out` 或 `/proc/self/path/a.out`](https://docs.oracle.com/cd/E88353_01/html/E37852/proc-5.html) 的访问。
    62+* [SunOS](https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html) 和 [Solaris](https://docs.oracle.com/cd/E86824_01/html/E54766/getexecname-3c.html) 运行时(对动态加载的具有 `AT_SUN_EXECNAME` 的映像)的 `getexecname` 调用,或 Solaris(自从 11 )对[文件系统路径 `/proc/self/execname`](https://docs.oracle.com/cd/E88353_01/html/E37852/proc-5.html) 的访问。
    63+
    64+  若不存在这样的支持,则需在运行时配置中指定。
    4565
    4666 # 安装脚本
    4767
    Show on old repository browser