Compare commits
2
Commits
67de5552e2
...
5d42d56441
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d42d56441 | ||
|
|
e8309233e7 |
@@ -88,6 +88,17 @@
|
||||
|
||||
另外, 某些软件包需要生成缓存或更改文件属性才能正常使用(见`HOOKS.md`), 需要定义特定操作的钩子文件, 模板见`template.HOOK`, 语法必须符合`BASH`。在 `PKGBUILD` 文件内请使用 `leaf_install_hook <foo>.HOOK` 来安全地安装 `<foo>.HOOK` 文件,该函数将检查 `.HOOK` 文件的有效性,并正确安装到 `${pkgdir}${HOOK_DIR}`。
|
||||
|
||||
`PKGBUILD` 文件内可用的函数:
|
||||
|
||||
```
|
||||
- leaf_error
|
||||
- leaf_record_message
|
||||
- leaf_clear_flags
|
||||
- leaf_install_hook
|
||||
- leaf_add_shell
|
||||
- leaf_remove_shell
|
||||
````
|
||||
|
||||
4. 构建选项
|
||||
|
||||
在PKGBUILD中定义的options可以是以下字段:
|
||||
|
||||
@@ -607,4 +607,44 @@ leaf_unpack_package() {
|
||||
echo -e "${GREEN_COLOR}* Package ${PKG_PREFIX}/${PKG_NAME} has been installed${CLEAR_COLOR}\n"
|
||||
}
|
||||
|
||||
leaf_add_shell() {
|
||||
# usage: leaf_add_shell <abs_shell_path>
|
||||
local shell="$1" f="/etc/shells" tmp
|
||||
|
||||
# ensure file exists
|
||||
if [ ! -f "$f" ]; then
|
||||
install -m 0644 -o root -g root /dev/null "$f" || return 1
|
||||
fi
|
||||
|
||||
# already present? (exact whole-line match)
|
||||
grep -Fxq -- "$shell" "$f" && return 0
|
||||
|
||||
tmp="$(mktemp "${f}.leaf.XXXXXX")" || return 1
|
||||
cat "$f" > "$tmp" || { rm -f "$tmp"; return 1; }
|
||||
|
||||
# append with newline
|
||||
printf '%s\n' "$shell" >> "$tmp" || { rm -f "$tmp"; return 1; }
|
||||
|
||||
# atomic replace
|
||||
install -m 0644 -o root -g root "$tmp" "$f" || { rm -f "$tmp"; return 1; }
|
||||
rm -f "$tmp"
|
||||
}
|
||||
|
||||
leaf_remove_shell() {
|
||||
# usage: leaf_remove_shell <abs_shell_path>
|
||||
local shell="$1" f="/etc/shells" tmp
|
||||
|
||||
[ -f "$f" ] || return 0
|
||||
# if not present, nothing to do
|
||||
grep -Fxq -- "$shell" "$f" || return 0
|
||||
|
||||
tmp="$(mktemp "${f}.leaf.XXXXXX")" || return 1
|
||||
# delete exact matching lines only
|
||||
grep -Fvx -- "$shell" "$f" > "$tmp" || true
|
||||
|
||||
install -m 0644 -o root -g root "$tmp" "$f" || { rm -f "$tmp"; return 1; }
|
||||
rm -f "$tmp"
|
||||
}
|
||||
|
||||
|
||||
main $@
|
||||
|
||||
Reference in New Issue
Block a user