tl;dr 不要理会与apt相关的“W: ... _apt ...”警告行。它们并不致命,大部分情况下你无法修复这个问题,而且无论是否有警告,你都会得到相同的结果。
即使实施了Florian Diesch在这里提供的好答案,我仍然收到这个警告。当我尝试下载源代码时,使用apt-get source ...,甚至尝试以root身份下载,比如使用sudo或su时,我都会收到这个警告(Debian 10.4和apt 1.8.2.1)。
网络上关于这个警告信息的问题很多,有许多不同的解决方案。显然,自从apt工具改用_apt进行沙盒安全操作以来,大量的人们一直在遇到麻烦。
似乎在进行这个_apt更改之后,有很多东西出了问题,但尚未完全修复。
让我们再次来分解这个问题:
首先,以
W:
前缀开头的适当结果行只是
警告。警告意味着某些异常情况,但并不会阻止程序继续运行。(参考:
ref: Kusalananda)
正如Florian指出的那样,“apt使用用户
_apt
来下载软件包”。看起来这是一个情况,即名为
root
的用户无法做到名为
_apt
的用户所能做的事情。
一个部分的解决方案(你真的不想使用):
你必须确保你所在的文件夹(即源代码将要放置的位置)是由_apt:root
拥有的。因此,如果你运行$ mkdir temp; sudo chown _apt:root temp; sudo -s
和 # cd temp; apt-get source ...
,警告将不再出现。
当然,一旦完成后,你需要为这个基础文件夹设置更合理的所有权,因为被 _apt:root 拥有是很奇怪的。
有无警告消息结果是否相同?
# -- TEST 1: get source into folder owned by user ------------
$ mkdir temp1;
$ cd temp1; sudo apt-get source gnupg2 # gives warning message:
...
W: Download is performed unsandboxed as root as file 'gnupg2_2.2.12-1+deb10u1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
# -- TEST 2: get source into folder owned by root ------------
$ cd ..; sudo -s
# mkdir temp2;
# cd temp2; apt-get source gnupg2 # gives warning message:
...
W: Download is performed unsandboxed as root as file 'gnupg2_2.2.12-1+deb10u1.dsc' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
# -- TEST 3: get source into folder owned by _apt:root -------
# cd ..
# mkdir temp3; chown _apt:root temp3
# cd temp3; apt-get source gnupg2 # no warning message now!
# == COMPARE the results ======================================
$ cd ..
$ sudo diff -r temp1 temp2 # no differences
$ sudo diff -r temp1 temp3 # no differences
所以无论有没有警告,结果都是一样的!
我忍不住要加一句玩笑话,这里讨论的
APT并不是指那最可怕的东西:
高级持续性威胁。
我之前的回答在这里(是)
...直到现在,一直为我解决了这个问题,但现在我可以看到,这是不够的:
用这个来修复它:
sudo chown -R _apt:root /var/lib/apt/lists
看看。
需要将lists目录本身,而不仅仅是其内容,的所有者设置为_apt。(即这是一个默认根所有权失败的重要文件分支!)
当我删除lists,然后用sudo mkdir lists; apt update
重新创建它时,可能出现了这个问题,这是在其他地方建议的。
此解决方案可能是作为其他解决方案的补充,因为我首先尝试了一堆其他方法。
Debian 10.2 Stretch。
# apt-get --version
apt 1.8.2 (amd64)
Supported modules:
*Ver: Standard .deb
*Pkg: Debian dpkg interface (Priority 30)
Pkg: Debian APT solver interface (Priority -1000)
Pkg: Debian APT planner interface (Priority -1000)
S.L: 'deb' Debian binary tree
S.L: 'deb-src' Debian source tree
Idx: Debian Source Index
Idx: Debian Package Index
Idx: Debian Translation Index
Idx: Debian dpkg status file
Idx: Debian deb file
Idx: Debian dsc file
Idx: Debian control file
Idx: EDSP scenario file
Idx: EIPP scenario file