Apt-get 将包从 32 位升级到不受支持的 64 位 - 为什么以及如何恢复?

Apt-get 将包从 32 位升级到不受支持的 64 位 - 为什么以及如何恢复?

最近,的存储库qtox不得不更改其域,而新域目前仅包含 64 位版本。但是,我使用的是 15.04 32 位,无法运行任何 64 位软件。

现在,当我上次运行apt-get upgradeapt-get dist-upgrade(不记得具体是哪一个)时,它还将包升级qtox到存储库中的最新版本。但这是一个 64 位版本!现在我无法qtox再启动任何程序:

$ qtox
bash: /usr/bin/qtox: cannot execute binary file: Exec format error
$ file $(which qtox)
/usr/bin/qtox: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
$ uname -a
Linux UbuntuDesktop 3.19.0-26-generic #27-Ubuntu SMP Tue Jul 28 18:26:33 UTC 2015 i686 i686 i686 GNU/Linux

现在我必须确保apt-get不再安装/升级任何 64 位软件包!不知道这是错误apt-get,还是配置错误的软件包或存储库或其他什么,我需要找出原因并防止这种情况再次发生!

我的问题简而言之就是:

为什么要apt-get在仅 32 位的系统上安装 64 位软件包以及我将来如何避免这种情况?


更新:

我检查了从直接下载的 .deb 包中获取的有关该qtox包的信息,并发现了以下内容。在我看来,好像他们错误地配置了他们的存储库,因为这些输出看起来像是一个 32 位包。而且它仍然包含旧域名。他们是不是可能忘记更新他们的信息并作弊了?apt-cachedpkg -Iapt-get

$ apt-cache show qtox
Package: qtox
Priority: extra
Section: default
Installed-Size: 2168
Maintainer: Tox Foundation <[email protected]>
Architecture: i386
Version: 1.1~git20150707.cfeeb03-97
Replaces: qtox-unity
Depends: libopenal1, libqt5core5a, libqt5gui5, libqt5network5, libqt5widgets5, libqt5xml5, libqt5opengl5, libqt5sql5, libqt5sql5-sqlite, apt-transport-https, libqt5svg5, libappindicator1, libqrencode3, libavformat-ffmpeg56|libavformat-tox56, libavdevice-ffmpeg56|libavdevice-tox56, libavcodec-ffmpeg56|libavcodec-tox56, libavutil-ffmpeg54|libavutil-tox54, libswscale-ffmpeg3|libswscale-tox3
Filename: pool/main/q/qtox/qtox_1.1~git20150707.cfeeb03-97_i386.deb
Size: 2217972
MD5sum: bc59427d056da669e52955169266911b
SHA1: c6797a04d13d929a068c213913f359719b377735
SHA256: 3405027807573b98a61c33f3aad911f40cf0b0737a95001e951a82937ee5afdd
Description: no description given
Description-md5: c0af8b65ef8df63b3bfb124d96da1778
Homepage: https://tox.im
Vendor: Tox Foundation
License: GPLv3+

$ apt-cache policy qtox
qtox:
  Installed: 1.1~git20150707.cfeeb03-97
  Candidate: 1.1~git20150707.cfeeb03-97
  Version table:
 *** 1.1~git20150707.cfeeb03-97 0
        500 https://pkg.tox.chat/ nightly/main i386 Packages
        100 /var/lib/dpkg/status

$  dpkg -I qtox_1.1~git20150707.cfeeb03-97_i386.deb
 new debian package, version 2.0.
 size 2217972 bytes: control archive=2341 bytes.
     677 bytes,    13 lines      control              
    1298 bytes,    17 lines      md5sums              
    2716 bytes,    93 lines   *  postinst             #!/bin/sh
 Package: qtox
 Version: 1.1~git20150707.cfeeb03-97
 License: GPLv3+
 Vendor: Tox Foundation
 Architecture: i386
 Maintainer: Tox Foundation <[email protected]>
 Installed-Size: 2168
 Depends: libopenal1, libqt5core5a, libqt5gui5, libqt5network5, libqt5widgets5, libqt5xml5, libqt5opengl5, libqt5sql5, libqt5sql5-sqlite, apt-transport-https, libqt5svg5, libappindicator1, libqrencode3, libavformat-ffmpeg56|libavformat-tox56, libavdevice-ffmpeg56|libavdevice-tox56, libavcodec-ffmpeg56|libavcodec-tox56, libavutil-ffmpeg54|libavutil-tox54, libswscale-ffmpeg3|libswscale-tox3
 Replaces: qtox-unity
 Section: default
 Priority: extra
 Homepage: https://tox.im
 Description: no description given

答案1

显然,该软件包的名称和元信息都表明apt-get它是一个 32 位软件包,但这是维护人员错误设置的。

直到他们修复这个问题并用真正的 32 位软件包更新他们的存储库之前,我使用以下脚本来验证软件包的真实架构:

#! /bin/bash

dir=$(mktemp -d)
debfile="*_i386.deb"
cd "$dir"

echo "Downloading package..."
wget https://pkg.tox.chat/pool/main/q/qtox/ -r -l 1 -nd -A "$debfile" -q

dpkg -x $debfile "$dir"
printf "\n%s\n\n" $debfile

dpkg --info $debfile | \
    awk '/Architecture/ {printf "defined dpkg architecture is:\t%s\n", $2}'

find "$dir" -type f -exec file -b {} \; | \
        sort -u | \
        awk '/ELF/ {printf "real executable format is: \t\t%s\n", $0}'

rm -rf "$dir"
exit 0

(部分剧本取自AB的回答这里

我将其保存为~/bin/qtoxtest.sh并使用使其可执行chmod +x ~/bin/qtoxtest.sh

该脚本目前给出以下示例输出,它告诉我们包仍然未正确声明:

$  qtoxtest.sh 
Downloading package...

qtox_1.1~git20150707.cfeeb03-97_i386.deb

defined dpkg architecture is:   i386
real executable format is:      ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped

相关内容