我遇到以下问题:
└─$ sudo apt update && sudo apt full-upgrade -y
[sudo] password for kali: Hit:1 http://kali.download/kali kali-rolling InR
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
1 package can be upgraded. Run 'apt list --upgradable' to see it.
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required: exfat-fuse gstreamer1.0-pulseaudio libidn11 librest-0.7-0 libsoup-gnome2.4-1
Use 'sudo apt autoremove' to remove them.
The following packages will be upgraded: postgresql-13 1 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 664 not fully installed or removed. Need to get 0 B/14.7 MB of archives. After this operation, 106 kB of additional disk space will be used.
Preconfiguring packages ... Setting up libss2:arm64 (1.46.4-1) ... (Reading database ... 255637 files and directories currently installed.)
Preparing to unpack .../postgresql-13_13.4-2_arm64.deb ... invoke-rc.d: could not determine current runlevel
Stopping PostgreSQL 13 database server: mainError: Data directory /var/lib/postgresql/13/main must not be owned by root ... failed! failed!
invoke-rc.d: initscript postgresql, action "stop" failed. dpkg: warning: old postgresql-13 package pre-removal script subprocess returned error exit status 1
dpkg: trying script from the new package instead ...
invoke-rc.d: could not determine current runlevel Stopping PostgreSQL 13 database server: main
Error: Data directory /var/lib/postgresql/13/main must not be owned by root ... failed! failed! invoke-rc.d: initscript postgresql, action "stop" failed.
dpkg: error processing archive /var/cache/apt/archives/postgresql-13_13.4-2_arm64.deb (--unpack): new postgresql-13 package pre-removal script subprocess returned error exit status 1
Errors were encountered while processing: /var/cache/apt/archives/postgresql-13_13.4-2_arm64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
我错过了什么?
答案1
该线程没有正确标记,最上面的答案完全错误,正确答案(JP)缺少一个步骤。这个问题是在arm64上的Kali Nethunter(手机)上出现的,它仍然是一个问题,并且在所有arm64手机上都会发生。当我在一些旧设备上通过 Termux 安装 Nethunter Rootless 2022.2 时,我遇到了这个问题。
需要注意的是,如果您安装 Nethunter rootless,这个软件包并不重要,因为据我所知,rootless 不支持 postgresql 所使用的任何功能。但如果你想修复它...
您需要做的就是运行:
sudo apt update && sudo apt full-upgrade -y
现在运行它,你必须一起运行它们,否则它将无法工作:
rm -rf /var/lib/dpkg/info/postgresql* && dpkg --configure -a
您需要再次运行此命令来升级软件包
sudo apt update && sudo apt full-upgrade -y
当 chown 命令不起作用时,OP 并不是一个完全的 n00b,这是我在出现此问题时尝试的第一件事,而且它太奇怪了,我开始寻找有关它的线程。在使用 chown 命令之前,我使用默认的 kali 用户和 root 用户检查了 /var/lib/postgresql 目录,并且该目录的所有者始终与我登录的用户匹配,并且 chown 没有更改这一点。然后我检查 /etc/passwd 看看 postgres 是否是一个用户,但它就在那里并且一切都是正确的。我不知道为什么 cli 显示同一文件的不同所有者,我猜想这可能是奇怪的 unrooted-android file-priv 东西,但上面的 3 个命令将解决升级问题。如果您要安装 Nethunter Lite 或 kali 内核,解决此问题非常重要。
答案2
这里:
PostgreSQL 13 database server: mainError: Data directory /var/lib/postgresql/13/main must not be owned by root
在新更新的 Kali VM(从 Kali 网站下载)中,/var/lib/postgresql/13/main 的组和所有者显示:
drwx------ 19 postgres postgres 4096 Sep 5 16:30 main
不知道简单地将目录 chowning 到 postgres:postgres 是否可以解决它,但我不相信这会造成伤害:-)
sudo chown postgres:postgres /var/lib/postgresql/13/main
答案3
每个人都从某个地方开始。 Kali 只是另一个发行版。这可能会有所帮助。https://www.reddit.com/r/termux/comments/mqay2w/kali_android_rootless_upgrade_issues/
似乎 postgresql 阻止安装,你可以通过执行以下操作来解除阻止:
rm -rf /var/lib/dpkg/info/postgresql*postinst
运行以上命令后:
dpkg --configure -a
如果这不起作用,请尝试:
rm -rf /var/lib/dpkg/info/postgresql* && dpkg --configure -a
这样,您将擦除 postgresql 包元数据,特别是文件列表和 md5sum。包仍然可见,因为状态文件不是信息的一部分。但是当您尝试卸载该包时,实际内容将不会被卸载。
答案4
至少到目前为止,这个似乎对我有用。
rm -rf /var/lib/dpkg/info/postgresql* && dpkg --configure -a
我刚刚完成,所以现在祈祷它保持正常。做了之后才起作用
sudo apt update && sudo apt full-upgrade -y
作为卡利然后
sudo su
rm -rf /var/lib/dpkg/info/postgresql* && dpkg --configure -a
and
apt update && apt full-upgrade -y
as root
在我运行之前我仍然有一个错误
su kali
sudo apt update && sudo apt full-upgrade -y
As kali again