需先用ar命令确认.deb为标准格式,再解包修改preinst等脚本,注意保留set -e和md5sums,最后用ar rcs重建deb包并验证合法性。

你需要在银河麒麟系统中修改一个已下载但尚未安装的.deb包内部的控制脚本(如preinst、postinst、prerm、postrm),以便定制安装行为、绕过校验、适配离线环境或注入自定义配置逻辑。
确认deb包结构并解包
先用ar命令查看.deb是否为标准格式:ar -t your-package.deb。正常应输出control.tar.gz、data.tar.xz(或data.tar.gz)、debian-binary三行。若输出异常,说明该文件不是合法deb包,不可继续修改。
新建临时目录并解压:mkdir /tmp/deb-edit && cd /tmp/deb-edit && ar x ../your-package.deb。
解压control.tar.gz获取控制脚本:tar -xzf control.tar.gz。此时当前目录下会出现preinst、postinst等可编辑文件(若不存在,说明原包未定义对应脚本)。
编辑控制脚本内容
用nano或vim打开需要修改的脚本,例如:nano postinst。
注意检查脚本开头的解释器声明(如#!/bin/bash),确保与麒麟V10默认shell兼容;若含#!/usr/bin/env bash,需确认目标机已安装env且路径正确,否则安装时会因找不到解释器而失败。
修改时禁止删除或注释掉以“set -e”开头的行——这行保证脚本出错即终止,删掉会导致错误被忽略,安装看似成功实则未生效。
重新打包成合法deb
第一步:重新打包control.tar.gz → tar -czf control.tar.gz postinst preinst prerm postrm md5sums control(仅打包你实际修改过的文件,未动的可不列;md5sums必须保留原内容,不要重建)。
第二步:重建deb包 → ar rcs ../your-package-modified.deb debian-binary control.tar.gz data.tar.xz。
【data.tar.xz必须使用原始解包得到的文件,不可重新压缩data.tar.gz;若原包用的是data.tar.xz,替换为xz格式,否则dpkg -i会报“failed to write”】
验证新包合法性:dpkg-deb --info ../your-package-modified.deb 应正常输出包信息;dpkg-deb --contents ../your-package-modified.deb 可确认文件列表无异常路径(如绝对路径../etc/可能触发安全拦截)。

















