Существует .deb пакет в репозитории, который, как объявляют, составляет 32 бита, но устанавливает двоичные файлы на 64 бита. Дело обстоит так для обеих установок через apt-get
из репозитория, а также с загрузкой .deb файла и выполнением dpkg -i
.
Если я устанавливаю файл для попытки, он обновляет/перезаписывает мое существующее приложение в 32 битах, и я не могу больше выполнять его (на 15,04 Ubuntu на 32 бита). Когда это произошло сначала, я искал установленный исполняемый файл с which
и проверенный это - тип с file
, это доказало его, чтобы быть двоичным файлом ELF на 64 бита:
$ file qtox
qtox: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, stripped
Таким образом, в то время как я ожидаю специалистов по обслуживанию для устранения проблемы, как я могу определить, какую архитектуру пакет (из репозитория или .deb файла) содержит?
Я попробовал обоих apt-cache show
и apt-cache policy
для версии репозитория и dpkg -I
для .deb файла, но всех их отчет 32bit, который является неправильным.
Там шанс состоит в том, чтобы найти реальную архитектуру, для которой сделаны содержавшие исполняемые файлы, кроме путем доступа к метаинформации пакета (я думаю, что это - то, что сделали команды, которые я попробовал?), который, очевидно, не соответствует.
Создайте сценарий в моем примере 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" или "все". Однако это - только объявление, и оно может быть объявлено неправильно (намеренно по некоторым причинам, или например, ошибкой в некотором сценарии создания пакета).
, Что может Вы собирающийся проверить реальную архитектуру пакета:
# verify, if package supports multiple architectures (and possibly has some bug):
dpkg --print-foreign-architectures package.deb
# unpack and check executables inside:
dpkg --unpack package.deb
dpkg --contents package.deb |grep ^-rwxr-xr-x |awk "{ print \$6 }" |grep -v /etc/
# and then check a few random unpacked executables using:
file ./usr/bin/some-executable
Пакет DEB является просто архивом с очень определенным содержанием. Можно открыть его в любом менеджере архива, которого Вы любите (такие как Ролик Файла или безотносительно), и содержание размечается, как будто Вы освобождаете его в /
. Все, что необходимо сделать, определяют местоположение двоичного файла и запрашивают его тип файла. Это не обычно необходимо - если имя файла имеет i386 в нем, это должен быть i386. Ваш случай является определенно аварийным, таким образом, я задаюсь вопросом, как специалисты по обслуживанию пакета позволяют этому произойти.