hello,大家好啊,今天给大家带来一篇在统信UOS或者麒麟KYLINOS上无交互安装deb的文章,有时候我们使用dpkg安装deb时,由于软件包中preinst设置的内容,需要我们手动输入相关的参数,比如路径等,那么今天就给大家提供两种方法参考,请根据实际的情况使用。
1、下载qaxsafe到本地
pdsyw@pdsyw-pc:~/桌面$ sudo apt install -d -y qaxsafe
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
archdetect-deb dmeventd libaio1 libdebian-installer4
libdevmapper-event1.02.1 liblvm2cmd2.03 localechooser-data lvm2 user-setup
使用'sudo apt autoremove'来卸载它(它们)。
下列【新】软件包将被安装:
qaxsafe
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 2 个软件包未被升级。
需要下载 61.8 MB 的归档。
解压缩后会消耗 0 B 的额外空间。
获取:1 http://archive2.kylinos.cn/deb/kylin/production/PART-V10-SP1/custom/partner/V10-SP1 default/all arm64 qaxsafe arm64 8.0.5-5140 [61.8 MB]
已下载 61.8 MB,耗时 4秒 (13.7 MB/s)
于“仅下载”模式中下载完毕
pdsyw@pdsyw-pc:~/桌面$ ll /var/cache/apt/archives/
总用量 60348
drwxr-xr-x 3 root root 4096 10月 19 15:51 ./
drwxr-xr-x 3 root root 4096 10月 19 15:51 ../
-rw-r----- 1 root root 0 10月 9 11:01 lock
drwx------ 2 _apt root 4096 10月 19 15:51 partial/
-rw-r--r-- 1 root root 61782034 2月 20 2023 qaxsafe_8.0.5-5140_arm64.deb
pdsyw@pdsyw-pc:~/桌面$
2、使用dpkg安装,需要选择安装路径
pdsyw@pdsyw-pc:~/桌面$ sudo dpkg -i /var/cache/apt/archives/qaxsafe_8.0.5-5140_arm64.deb
正在选中未选择的软件包 qaxsafe。
(正在读取数据库 ... 系统当前共安装有 194514 个文件和目录。)
准备解压 .../qaxsafe_8.0.5-5140_arm64.deb ...
preinst called install.
请选择安装路径(按回车键则安装在默认位置/opt目录下):
3、回车确认后安装完成
pdsyw@pdsyw-pc:~/桌面$ sudo dpkg -i /var/cache/apt/archives/qaxsafe_8.0.5-5140_arm64.deb
正在选中未选择的软件包 qaxsafe。
(正在读取数据库 ... 系统当前共安装有 194514 个文件和目录。)
准备解压 .../qaxsafe_8.0.5-5140_arm64.deb ...
preinst called install.
请选择安装路径(按回车键则安装在默认位置/opt目录下):
正在解压 qaxsafe (8.0.5-5140) ...
正在设置 qaxsafe (8.0.5-5140) ...
install success.
正在处理用于 desktop-file-utils (0.24-1kylin2) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3+18.04.20180207.2-0kylin2) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.64kylin1) 的触发器 ...
pdsyw@pdsyw-pc:~/桌面$
4、卸载qaxsafe软件
pdsyw@pdsyw-pc:~/桌面$ sudo dpkg -r qaxsafe
(正在读取数据库 ... 系统当前共安装有 194711 个文件和目录。)
正在卸载 qaxsafe (8.0.5-5140) ...
systemd 245 (245.4-4kylin3.15k0.26)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
uninstall success.
正在处理用于 desktop-file-utils (0.24-1kylin2) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3+18.04.20180207.2-0kylin2) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.64kylin1) 的触发器 ...
pdsyw@pdsyw-pc:~/桌面$
5、将qaxsafe安装包复制到桌面
pdsyw@pdsyw-pc:~/桌面$ sudo cp /var/cache/apt/archives/qaxsafe_8.0.5-5140_arm64.deb ./
pdsyw@pdsyw-pc:~/桌面$ sudo chmod 777 qaxsafe_8.0.5-5140_arm64.deb
pdsyw@pdsyw-pc:~/桌面$
6、方法一:添加参数安装
pdsyw@pdsyw-pc:~/桌面$ yes '' | sudo dpkg -i qaxsafe_8.0.5-5140_arm64.deb
正在选中未选择的软件包 qaxsafe。
(正在读取数据库 ... 系统当前共安装有 194514 个文件和目录。)
准备解压 qaxsafe_8.0.5-5140_arm64.deb ...
preinst called install.
请选择安装路径(按回车键则安装在默认位置/opt目录下):
正在解压 qaxsafe (8.0.5-5140) ...
正在设置 qaxsafe (8.0.5-5140) ...
install success.
正在处理用于 desktop-file-utils (0.24-1kylin2) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3+18.04.20180207.2-0kylin2) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.64kylin1) 的触发器 ...
pdsyw@pdsyw-pc:~/桌面$
7.1、方法二:解压qaxsafe安装包重新编辑qaxsafe_extracted/DEBIAN/preinst文件
pdsyw@pdsyw-pc:~/桌面$ mkdir qaxsafe_extracted
pdsyw@pdsyw-pc:~/桌面$ dpkg-deb -R qaxsafe_8.0.5-5140_arm64.deb qaxsafe_extracted/
pdsyw@pdsyw-pc:~/桌面$ vi qaxsafe_extracted/DEBIAN/pre
preinst prerm
pdsyw@pdsyw-pc:~/桌面$ vi qaxsafe_extracted/DEBIAN/pre
preinst prerm
pdsyw@pdsyw-pc:~/桌面$ vi qaxsafe_extracted/DEBIAN/preinst
pdsyw@pdsyw-pc:~/桌面$
7.2、注释掉相关的内容
pdsyw@pdsyw-pc:~/桌面$ cat qaxsafe_extracted/DEBIAN/preinst
#! /bin/sh
logfile=/var/log/qaxsafe.log
InstallDirConf=/opt/.installpath.conf
InstallPath=/opt
echo `date` >> ${logfile} 2>&1
echo postinst arg:$1 >> ${logfile} 2>&1
exec 5>>${logfile}
exec 2>>${logfile}
set -x
case "$1" in
install)
echo "$(tput setaf 1)preinst called install. $(tput sgr0)"
if [ ! -e ${InstallDirConf} ]; then
#满足[bash.*dpkg.*preinst]时,认为是命令行安装,可进行阻塞提示
# if [ -n "$(pstree | grep -iE "bash.*dpkg.*preinst")" ]; then
# echo "请选择安装路径(按回车键则安装在默认位置/opt目录下):"
# while :
# do
# read InstallPath
# if [ -z "${InstallPath}" ]; then
# InstallPath=/opt
# fi
# if [ -w "${InstallPath}" ];then
# if [ "${InstallPath}" != "/opt" ]; then
# mkdir ${InstallPath}/qaxsafe
# ln -s ${InstallPath}/qaxsafe /opt/qaxsafe
# fi
# break
# else
# echo "您输入的路径的路径有误,请重新输入(按回车键则安装在默认位置/opt目录下):"
# fi
# done
# fi
echo ${InstallPath} > ${InstallDirConf}
fi
# 兼容旧版本单机版包升级到新版本单机版本包
is_update=`ps -ef | grep -v grep | grep "OfflineUpdate/virusUpdate.bin"` || true
is_force=`ps -ef | grep "sh -c " | grep "dpkg -i --force-all"` || true
if [ "$is_force" = "" ] && [ "$is_update" != "" ]; then
pkg=`ps -ef | grep "dpkg -i" | grep -v "sh -c" | grep -v "grep" | awk -F ' ' '{print $NF}'`
dpkg -x $pkg /opt/.qaxsafe_tmp
brand=$[2*180]
if [ -d "${InstallPath}/qaxsafe" ]; then
cp -raf /opt/.qaxsafe_tmp/opt/qaxsafe/OfflineUpdate/virusUpdate.bin ${InstallPath}/qaxsafe/OfflineUpdate/
elif [ -d "${InstallPath}/${brand}safeforcnos" ]; then
cp -raf /opt/.qaxsafe_tmp/opt/qaxsafe/OfflineUpdate/virusUpdate.bin ${InstallPath}/${brand}safeforcnos/OfflineUpdate/
fi
rm -rf /opt/.qaxsafe_tmp
exit -1
fi
exit 0
;;
upgrade)
echo "$(tput setaf 1)preinst called upgrade, upgrading... $(tput sgr0)"
if [ ! -e ${InstallDirConf} ]; then
echo "/opt"> ${InstallDirConf}
fi
InstallPath=`cat ${InstallDirConf}`
rtn=0
qaxapp="${InstallPath}/qaxsafe/qaxsafed"
if [ -f $qaxapp ]; then
$qaxapp upgrade
rtn=$?
fi
if [ $rtn -eq 1 ]; then
echo "$(tput setaf 1)preinst called upgrade failed, maybe donot support upgrade.$(tput sgr0)"
exit -1
else
echo "$(tput setaf 1)preinst called upgrade success.$(tput sgr0)"
fi
# 单机升级防止病毒库数据被覆盖
cp ${InstallPath}/qaxsafe/engine/update.txt ${InstallPath}/qaxsafe/engine/.update.txt || true
cp -r ${InstallPath}/qaxsafe/engine/viruslib/owl/ ${InstallPath}/qaxsafe/engine/viruslib/.owl || true
cp ${InstallPath}/qaxsafe/Data/asmodularize.dat ${InstallPath}/qaxsafe/Data/.asmodularize.dat || true
# 兼容旧版本升级
ps -ef | grep "qaxsafed upgrade" | grep -v grep | awk '{print $2}' | xargs -I {} kill -KILL {} || true
exit 0
;;
*)
echo "$(tput setaf 1)preinst called with unknown argument $1. $(tput sgr0)"
exit -1
;;
esac
pdsyw@pdsyw-pc:~/桌面$
8、重新打包qaxsafe_new_arm64.deb
pdsyw@pdsyw-pc:~/桌面$ dpkg-deb -b qaxsafe_extracted/ qaxsafe_new_arm64.deb
dpkg-deb: 正在 'qaxsafe_new_arm64.deb' 中构建软件包 'qaxsafe'。
pdsyw@pdsyw-pc:~/桌面$
pdsyw@pdsyw-pc:~/桌面$ ll qaxsafe_new_arm64.deb
-rw-r--r-- 1 pdsyw pdsyw 61777188 10月 19 16:15 qaxsafe_new_arm64.deb
pdsyw@pdsyw-pc:~/桌面$
9、安装重新打包后的qaxsafe_new_arm64.deb,没有出现交互界面
pdsyw@pdsyw-pc:~/桌面$ sudo dpkg -i qaxsafe_new_arm64.deb
正在选中未选择的软件包 qaxsafe。
(正在读取数据库 ... 系统当前共安装有 194514 个文件和目录。)
准备解压 qaxsafe_new_arm64.deb ...
preinst called install.
正在解压 qaxsafe (8.0.5-5140) ...
正在设置 qaxsafe (8.0.5-5140) ...
install success.
正在处理用于 desktop-file-utils (0.24-1kylin2) 的触发器 ...
正在处理用于 bamfdaemon (0.5.3+18.04.20180207.2-0kylin2) 的触发器 ...
Rebuilding /usr/share/applications/bamf-2.index...
正在处理用于 mime-support (3.64kylin1) 的触发器 ...
pdsyw@pdsyw-pc:~/桌面$
10、qaxsafe默认安装到/opt下
pdsyw@pdsyw-pc:~/桌面$ cd /opt/
pdsyw@pdsyw-pc:/opt$ ll | grep qax
drwxr-xr-x 3 root root 4096 4月 27 15:36 qax/
drwxr-xr-x 14 pdsyw pdsyw 4096 10月 19 17:08 qaxsafe/
pdsyw@pdsyw-pc:/opt$