简 述: 使用Linuxuos 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 配置检测。


解决方法:

  1. 进入 /etc/dpkg/origins 里面,修改 default 的软链接 重新指向 uos
  2. 复制一份debian 配置检测,改名为 uos
  3. 正常使用 lintian 命令;
# 没有修改之前的来两个路径文件夹内容
xmuli@xmuli-PC:/etc/dpkg/origins$ ls -al
总用量 20
drwxr-xr-x 2 root root 4096 520 13:40 .
drwxr-xr-x 4 root root 4096 520 09:17 ..
-rw-r--r-- 1 root root   82 520 09:17 debian
-rw-r--r-- 1 root root   87 429 16:41 deepin
lrwxrwxrwx 1 root root    6 520 09:17 default -> deepin
-rw-r--r-- 1 root root   84 429 16:41 uos

xmuli@xmuli-PC:/usr/share/lintian/profiles$ ls -al
总用量 28
drwxr-xr-x  7 root root 4096 526 12:14 .
drwxr-xr-x 11 root root 4096 526 12:14 ..
drwxr-xr-x  2 root root 4096 526 12:14 debian
drwxr-xr-x  2 root root 4096 520 09:19 dpkg
drwxr-xr-x  2 root root 4096 526 12:14 kali
drwxr-xr-x  2 root root 4096 526 12:14 pureos
drwxr-xr-x  2 root root 4096 526 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 526 12:06 .
drwxr-xr-x 4 root root 4096 525 20:19 ..
-rw-r--r-- 1 root root   82 525 20:19 debian
-rw-r--r-- 1 root root   87 429 16:41 deepin
lrwxrwxrwx 1 root root    3 526 12:06 default -> uos
-rw-r--r-- 1 root root   84 429 16:41 uos

xmuli@xmuli-PC:/usr/share/lintian/profiles$ ls -al
总用量 32
drwxr-xr-x  8 root root 4096 526 12:07 .
drwxr-xr-x 11 root root 4096 526 11:05 ..
drwxr-xr-x  2 root root 4096 526 11:05 debian
drwxr-xr-x  2 root root 4096 525 20:21 dpkg
drwxr-xr-x  2 root root 4096 526 11:05 kali
drwxr-xr-x  2 root root 4096 526 11:05 pureos
drwxr-xr-x  2 root root 4096 526 11:05 ubuntu
drwxr-xr-x  2 root root 4096 526 12:07 uos

重新运行一开始的命令,可以看到预期的效果:


所有 lintian 的解决方案:

对于开启 lintian 检查,其报错的问题可以在这里查到所有的报错信息:https://lintian.debian.org/tags/ 根据官方的描述修改即可