64 lines
3.4 KiB
Bash
Executable File
64 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/bash
|
||
source $(dirname "$0")/../common.sh
|
||
|
||
PKGNAME=toolchain
|
||
PKGVERSION=
|
||
PKGSOURCE_DIR=
|
||
PKGSOURCE=
|
||
|
||
PKGBUILDNAME=${PKGNAME}
|
||
PKGBUILD_DIR=${BUILD_DIR}/${PKGBUILDNAME}
|
||
|
||
echo "----> Building ${PKGBUILDNAME} ..."
|
||
|
||
stamp_downloaded
|
||
|
||
stamp_extracted
|
||
|
||
stamp_patched
|
||
|
||
stamp_configured
|
||
|
||
stamp_built
|
||
|
||
step_start install-target
|
||
# /etc/nsswitch.conf 的全称是 Name Service Switch configuration file(名称服务切换配置文件)。
|
||
# 它的主要作用是告诉操作系统,当需要查询某类信息(比如用户名、主机名、组信息等)时,
|
||
# 应该按照什么顺序、从哪些数据源去查找。可以把它看作是一个 “查询路由表” 或 “信息查找指南”
|
||
# 至于为何会存在这个需求,是因为在现代操作系统中,同一种信息可能存在于多个地方。
|
||
# 例如,用户名和用户ID(UID)可能存在于:本地文件:如 /etc/passwd, /etc/group;或者
|
||
# 网络服务:如 LDAP(轻型目录访问协议)、NIS(网络信息服务)、Active Directory(AD);
|
||
# 或者 DNS(域名系统):用于主机名解析
|
||
# 当系统运行一个命令(如 ls -l,它会显示文件所有者用户名)或一个程序调用一个函数
|
||
# (如 getpwuid() 来通过UID查找用户名)时,系统需要知道:先查哪里? 是先查本地文件还是先查网络服务?
|
||
# 如果第一个源查不到或出错了,怎么办? 是继续查下一个源,还是直接报错?nsswitch.conf 就是为
|
||
# 了解决这些问题而生的。
|
||
# 这个文件的内容通常由很多行组成,每行对应一种信息的查询配置。其基本格式是:
|
||
# <数据库类型>: <查找顺序>
|
||
# 例子:passwd: files systemd
|
||
# 当需要查询用户信息时,首先,查询本地文件 /etc/passwd (files),如果没找到,再去 systemd 的动态用户库中查找。
|
||
# 更多例子不再赘述。
|
||
# 注意这个 Name Service Switch 服务(NSS)是由 glibc 提供的,由一系列系统数据库查询函数组成,譬如:
|
||
# getpwnam(), getpwuid() - 获取用户信息(/etc/passwd)
|
||
# getgrnam(), getgrgid() - 获取用户组信息(/etc/group)
|
||
# gethostbyname(), getaddrinfo() - 获取主机名和IP地址信息(/etc/hosts, DNS)
|
||
# getservbyname() - 获取网络服务信息(/etc/services)
|
||
# 该服务的核心组件包括:
|
||
# - 配置文件:/etc/nsswitch.conf
|
||
# - 一系列共享库模块:位于/lib或/lib64目录下,名称通常为libnss_*.so.2(例如 libnss_files.so.2,
|
||
# libnss_dns.so.2, libnss_ldap.so.2)。
|
||
# 由以上分析,我们可以得知,由于 nsswitch.conf 主要被 glibc 使用,所以我们将其视为工具链的一部分
|
||
# 如果我们工具链使用的是其他 C 库(如 uClibc、musl),这个文件通常不是必需的
|
||
# 构建 glibc 后会生成 nsswitch.conf 文件,但我们没有直接用,而是提供了一个自己定义的版本。
|
||
# 这里的 nsswitch.conf 是一个 默认的安全配置。这个默认配置通常比较简单,例如对于 hosts 数据库,
|
||
# 配置可能是 files dns,意味着先查找 /etc/hosts 文件,再使用 DNS 查询
|
||
# 同时它只在 目标系统 /etc/ 目录下尚不存在 nsswitch.conf 时 才拷贝默认文件,
|
||
if [ ! -f "${TARGET_DIR}/etc/nsswitch.conf" ]; then
|
||
/usr/bin/install -D -m 0644 ${PROJECT_DIR}/package/glibc/nsswitch.conf ${TARGET_DIR}/etc/nsswitch.conf
|
||
fi
|
||
step_end install-target
|
||
|
||
stamp_installed
|
||
|
||
echo "<---- ${PKGBUILDNAME} build complete."
|