简 述: 使用Linux
(uos v20
系统),安装 了;lintian
命令之后,执行 lintian xxx.deb
发现报错如下;而未按照预期正确输出结果应该是带上 E / W / I /N / O
等明显的标记。
[TOC]
本文初发于 “偕臧的小站“,同步转载于此。
编程环境:
💻: uos20
📎 gcc/g++ 8.3
📎 gdb8.0
lintian:
事情的起因于 #5,后面去了解了一下想关知识;
lintian
这是一个 Debian
上面的包质量的检测工具。对于要上传到 Debian
仓库的 .deb
包都是有着严格的文件夹规范的,否则不被允许上传;
lintian 命令会运行很多测试脚本来检查常见的打包错误。lintian 命令的输出常带有以下几种标记:
E:
代表错误:确定违反了Debian Policy
或是一个肯定的打包错误。W:
代表警告:可能违反了Debian Policy
或是一个可能的打包错误。I:
代表信息:对于特定打包类别的信息。N:
代表注释:帮助你调试的详细信息。O:
代表已覆盖:一个被lintian-overrides
文件覆盖的信息,但由于使用--show-overrides
选项而显示。
对于警告,你应该改进软件包或者检查警告是否的确无意义。如果确定没有意义,则按照 第 5.14 节 “{*
package*.,source/}lintian-overrides
” 中的叙述使用 lintian-overrides
文件将其覆盖。
注意,你可以用 dpkg-buildpackage 来构建软件包,并执行 lintian,只要你使用了 debuild(1) 或 pdebuild(1).
安装&使用lintian报错:
我在 uos v20
版本,下载和执行如下命令后,实际发现是无法使用的
# 下载得到 dde-control-center_5.1.0101.1+r0+g98e285d4e_amd64.deb 文件
☁ softFile sudo apt download dde-control-center
# 安装 lintian ,和使用它检测 deb 包
☁ softFile sudo apt install lintian
☁ softFile lintian dde-control-center_5.1.0101.1+r0+g98e285d4e_amd64.deb
运行之后,wtf!!! 显示报错?
Could not find a profile matching "{VENDOR}/main" for vendor deepin at /usr/share/perl5/Lintian/Profile.pm line 702.
Lintian::Profile::_find_vendor_profile(Lintian::Profile=HASH(0x556a2ba4e6c0)) called at /usr/share/perl5/Lintian/Profile.pm line 136
Lintian::Profile::new("Lintian::Profile", undef, ARRAY(0x556a2a1887c0), HASH(0x556a2a354ed0)) called at /usr/bin/lintian line 215
dplint::load_profile(undef) called at /usr/share/lintian/commands/lintian.pm line 1446
main::load_profile_and_configure_tags() called at /usr/share/lintian/commands/lintian.pm line 657
main::main() called at /usr/bin/lintian line 46
eval {...} called at /usr/bin/lintian line 46
main::__ANON__("/usr/share/lintian/commands/lintian.pm") called at /usr/bin/lintian line 114
dplint::run_tool("/usr/bin/lintian", "lintian") called at /usr/bin/lintian line 290
dplint::main() called at /usr/bin/lintian line 359
一顿胡乱分析,这很明显是 lintian
这个命令有点问题。
解决方案:
原因:
/etc/dpkg/origins
是这个里面default
指向了deepin
所以dpkg
认为当前是deepin
环境,都换成uos
就可以;意思就是 lintian
需要通过判断当前系统环境 根据debian/ubuntu/kail
等环境做检测,我们 fork 一份 debian 配置检测。
解决方法:
- 进入
/etc/dpkg/origins
里面,修改default
的软链接 重新指向uos
; - 复制一份
debian
配置检测,改名为uos
; - 正常使用
lintian
命令;
# 没有修改之前的来两个路径文件夹内容
xmuli@xmuli-PC:/etc/dpkg/origins$ ls -al
总用量 20
drwxr-xr-x 2 root root 4096 5月 20 13:40 .
drwxr-xr-x 4 root root 4096 5月 20 09:17 ..
-rw-r--r-- 1 root root 82 5月 20 09:17 debian
-rw-r--r-- 1 root root 87 4月 29 16:41 deepin
lrwxrwxrwx 1 root root 6 5月 20 09:17 default -> deepin
-rw-r--r-- 1 root root 84 4月 29 16:41 uos
xmuli@xmuli-PC:/usr/share/lintian/profiles$ ls -al
总用量 28
drwxr-xr-x 7 root root 4096 5月 26 12:14 .
drwxr-xr-x 11 root root 4096 5月 26 12:14 ..
drwxr-xr-x 2 root root 4096 5月 26 12:14 debian
drwxr-xr-x 2 root root 4096 5月 20 09:19 dpkg
drwxr-xr-x 2 root root 4096 5月 26 12:14 kali
drwxr-xr-x 2 root root 4096 5月 26 12:14 pureos
drwxr-xr-x 2 root root 4096 5月 26 12:14 ubuntu
# 修改软链接
cd /etc/dpkg/origins
sudo ln -snf uos default # 或 sudo ln -snf /etc/dpkg/origins/uos default
# 复制一份文件配置且改名
cd /usr/share/lintian/profiles
sudo cp debian ./uos -r # 拷贝 debian 的配置,命令为 uos
# 修改完成之后
xmuli@xmuli-PC:/etc/dpkg/origins$ ls -al
总用量 20
drwxr-xr-x 2 root root 4096 5月 26 12:06 .
drwxr-xr-x 4 root root 4096 5月 25 20:19 ..
-rw-r--r-- 1 root root 82 5月 25 20:19 debian
-rw-r--r-- 1 root root 87 4月 29 16:41 deepin
lrwxrwxrwx 1 root root 3 5月 26 12:06 default -> uos
-rw-r--r-- 1 root root 84 4月 29 16:41 uos
xmuli@xmuli-PC:/usr/share/lintian/profiles$ ls -al
总用量 32
drwxr-xr-x 8 root root 4096 5月 26 12:07 .
drwxr-xr-x 11 root root 4096 5月 26 11:05 ..
drwxr-xr-x 2 root root 4096 5月 26 11:05 debian
drwxr-xr-x 2 root root 4096 5月 25 20:21 dpkg
drwxr-xr-x 2 root root 4096 5月 26 11:05 kali
drwxr-xr-x 2 root root 4096 5月 26 11:05 pureos
drwxr-xr-x 2 root root 4096 5月 26 11:05 ubuntu
drwxr-xr-x 2 root root 4096 5月 26 12:07 uos
重新运行一开始的命令,可以看到预期的效果:
所有 lintian 的解决方案:
对于开启 lintian 检查,其报错的问题可以在这里查到所有的报错信息:https://lintian.debian.org/tags/ 根据官方的描述修改即可