Как обнаружить архитектуру .deb пакета?

Существует .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, который является неправильным.

Там шанс состоит в том, чтобы найти реальную архитектуру, для которой сделаны содержавшие исполняемые файлы, кроме путем доступа к метаинформации пакета (я думаю, что это - то, что сделали команды, которые я попробовал?), который, очевидно, не соответствует.

2
задан 13 August 2015 в 13:04

3 ответа

Создайте сценарий в моем примере 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
4
ответ дан 2 December 2019 в 02:21

Каждый 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
-1
ответ дан 2 December 2019 в 02:21

Пакет DEB является просто архивом с очень определенным содержанием. Можно открыть его в любом менеджере архива, которого Вы любите (такие как Ролик Файла или безотносительно), и содержание размечается, как будто Вы освобождаете его в /. Все, что необходимо сделать, определяют местоположение двоичного файла и запрашивают его тип файла. Это не обычно необходимо - если имя файла имеет i386 в нем, это должен быть i386. Ваш случай является определенно аварийным, таким образом, я задаюсь вопросом, как специалисты по обслуживанию пакета позволяют этому произойти.

1
ответ дан 2 December 2019 в 02:21

Другие вопросы по тегам:

Похожие вопросы: