Files
build-linux-system-from-scr…/package/toolchain/make.sh
2026-03-06 14:19:40 +08:00

64 lines
3.4 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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名称服务切换配置文件
# 它的主要作用是告诉操作系统,当需要查询某类信息(比如用户名、主机名、组信息等)时,
# 应该按照什么顺序、从哪些数据源去查找。可以把它看作是一个 “查询路由表” 或 “信息查找指南”
# 至于为何会存在这个需求,是因为在现代操作系统中,同一种信息可能存在于多个地方。
# 例如用户名和用户IDUID可能存在于本地文件如 /etc/passwd, /etc/group或者
# 网络服务:如 LDAP轻型目录访问协议、NIS网络信息服务、Active DirectoryAD
# 或者 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."