リポジトリには、32ビットであると宣言されているが、64ビットのバイナリをインストールする.debパッケージがあります。これは、リポジトリからapt-get
を介してインストールする場合と、.debファイルをダウンロードしてdpkg -i
を実行する場合の両方に当てはまります。
試してファイルをインストールすると、既存のアプリケーションが32ビットでアップグレード/上書きされ、それ以上実行できなくなります(15.04 32ビットUbuntuで)。これが最初に起こったとき、インストールされた実行可能ファイルをwhich
で検索し、file
でタイプを確認しました。これにより、64ビットELFバイナリであることが証明されました。
$ file qtox
qtox: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
だから、メンテナーが問題を修正するのを待っている間に、パッケージに(リポジトリまたは.debファイルから)含まれているアーキテクチャをどのように判断できますか?
リポジトリバージョンにapt-cache show
とapt-cache policy
の両方を試し、.debファイルにdpkg -I
を試しましたが、それらはすべて32ビットを報告します。
パッケージのメタ情報(これは私が試したコマンドが実行したものだと思います)にアクセスすることを除いて、含まれている実行可能ファイルの実際のアーキテクチャを見つける機会はありますか?.
スクリプトを作成します。私の例ではfoo
#!/bin/bash
# Create a temporary folder in /tmp
dir=$(mktemp -d)
# Extract the deb file
dpkg -x "$1" "$dir"
printf "\n%s\n\n" "$1"
# Show the package architecture information
dpkg --info $1 | \
awk '/Architecture/ {printf "defined dpkg architecture is:\t%s\n", $2}'
# Show the executable format via find and awk for ELF
find $dir -type f -exec file -b {} \; | \
sort -u | \
awk '/ELF/ {printf "executable format is: \t\t%s\n", $0}'
rm -rf "$dir"
exit 0
使用法
./foo <deb_file>
例
% ./foo qtox_1.1\~git20150707.cfeeb03-97_i386.deb
qtox_1.1~git20150707.cfeeb03-97_i386.deb
defined dpkg architecture is: i386
executable format is : ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
DEBパッケージは、非常に具体的な内容の単なるアーカイブです。任意のアーカイブマネージャー(ファイルローラーなど)で開くことができ、コンテンツは/
に空であるかのようにレイアウトされます。必要なことは、バイナリを見つけてそのファイルタイプを照会することだけです。通常、これは必要ありません-ファイル名にi386が含まれている場合、i386である必要があります。あなたのケースは間違いなく異常なので、パッケージメンテナーがそれをどのようにさせているのでしょうか。