缺陷:openKylin 2.0 SP1 更新 pdfstamp 软件包报错
2025.3.27
- openKylin 2.0 SP1 amd64
- apt update 到 2025.3.27
sudo apt upgrade
在 pdfstamp 软件包升级时报错:
正在设置 pdfstamp (1.0.0) …
chown: 无效的用户: “deb-ok:deb-ok”
dpkg: 处理软件包 pdfstamp (–configure)时出错:
已安装 pdfstamp 软件包 post-installation 脚本 子进程返回错误状态 1
在处理时有错误发生:
pdfstamp
E: Sub-process /usr/bin/dpkg returned an error code (1)
看了一下报错信息,又看了下 安装后脚本 postinst,
gedit /var/lib/dpkg/info/pdfstamp.postinst &
已确认问题原因:
postinst 脚本,会把类似于 /home/XXX/ 的所有目录的 XXX,
自作主张,判定为 用户名,并试图用 chown 命令改变这类目录下的 pdfstamp.desktop
文件
/home/XXX/Desktop/pdfstamp.desktop
(而我的硬盘上,正好有 /home/deb-src/, /home/deb-ok/ 这两个目录,所以它认定 有 2个用户 deb-ok 和 deb-src ,但是又没有 /home/deb-ok/Desktop/pdfstamp.desktop 这个文件,就报错、卡住)。
相关代码块示例:
#!/bin/sh
set -e
为所有用户创建桌面快捷方式
for user_home in /home/*; do
if [ -d “user_home" ]; then
username=(basename “$user_home”)
desktop_file=”$user_home/Desktop/pdfstamp.desktop"
cp /usr/share/applications/pdfstamp.desktop “$desktop_file”
chown $username:$username “$desktop_file”
chmod +x “$desktop_file”
fi
done
解决方案:
修改 安装后脚本
/var/lib/dpkg/info/pdfstamp.postinst
在第2行
set -e
前面,加上一个英文 # 号(即让这行失效。作用:忽略错误,并继续运行后面的代码)
注:其它风险 和 健壮性预防措施:
(针对 pdfstamp.postinst 安装后脚本)
username=$(basename “$user_home”)
desktop_file=“$user_home/Desktop/pdfstamp.desktop”
- 如果某个用户,不小心创建了一个带空格的 目录名,比如
“/home/back up/”
username 的取值,会有什么风险?
- 有必要检测 $desktop_file 文件是否存在。比如,用户已经手动删除了这个文件,
或者无权限 在这个目录下创建/修改 文件。