Определить что это 32х битный линукс на 64х битном ядре
От: VladCore  
Дата: 29.11.20 23:35
Оценка:
Хочется такой же универсальный и переносимый способ как uname -m

Нашел что на debian и последователях: dpkg --print-architecture
Есть ли аналог в семестве redhat/centos/fedora и OpenSUSE/SLES, Gentoo, Arch?

Еще есть: getconf LONG_BIT
на маке не пробовал но она там тоже вроде есть?

Интересует так же bsd-системы с linux compatiblity layer, если на них можно конечно ставить 32х битный libc6.so с 64х битным ядром.

Вопрос про sh только. В частности, нужно в shell-скрипте загрузить скомпилированный бинарник под нужную архитектуру и uname -m не подходит.
Майкрософт, к примеру, в своем dotnet core установщике использует только uname -m, и не использует ни dpkg --print-architecture ни getconf LONG_BIT ни что еще
Почему — хз
Re: Определить что это 32х битный линукс на 64х битном ядре
От: maxkar  
Дата: 07.12.20 16:56
Оценка: 6 (1)
Здравствуйте, VladCore, Вы писали:

VC>Есть ли аналог в семестве redhat/centos/fedora и OpenSUSE/SLES, Gentoo, Arch?


Я про Gentoo могу немного рассказать. Есть profile, который определяет настройки по-умолчанию. Например, у меня

> eselect profile show
Current /etc/portage/make.profile symlink:
  default/linux/amd64/17.1/desktop


Это 64-битный (по умолчанию) мир. Но при этом в Генте штатный multilib:

> locate libc.so
/lib/libc.so.6
/lib64/libc.so.6
/usr/lib/libc.so
/usr/lib64/libc.so

(которые в lib — это 32 бита в моем профиле, еще неделю назад 32 бита лежали в lib32 и lib был ссылкой на lib64).

Но! В Генте много разных ручек. Есть подозрение, что при должной сноровке можно конкретные приложения собрать разной битности. Например, 32-битный ls и 64-битный firefox.

VC>Вопрос про sh только. В частности, нужно в shell-скрипте загрузить скомпилированный бинарник под нужную архитектуру и uname -m не подходит.


А может просто посмотреть на какой-нибудь системный бинарник?

> file (which file)
/usr/bin/file: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped


VC>Майкрософт, к примеру, в своем dotnet core установщике использует только uname -m, и не использует ни dpkg --print-architecture ни getconf LONG_BIT ни что еще

VC>Почему — хз

Я думаю, потому что обычно битность ядра соответствует битности приложения. А если вдруг не соответствует — администраторы системы причины знают и смогут при необходимости ваш sh поправить.
Re: Определить что это 32х битный линукс на 64х битном ядре
От: Sheridan Россия  
Дата: 15.04.21 09:03
Оценка: -1
Здравствуйте, VladCore, Вы писали:

VC>Хочется такой же универсальный и переносимый способ как uname -m


Ты почти нашол
sheridan@gate ~ $ uname -m
x86_64
sheridan@gate ~ $ lscpu | grep 'op-mode'
CPU op-mode(s):                  32-bit, 64-bit


А потом условие типа "если uname x86 и 64 в оп-моде, то вот оно"
Matrix has you...
Re: Определить что это 32х битный линукс на 64х битном ядре
От: Sheridan Россия  
Дата: 16.04.21 11:27
Оценка:
Ты б объяснил чому минус то. Мне ж интересно что я не так написал
Matrix has you...
Re[2]: Определить что это 32х битный линукс на 64х битном ядре
От: VladCore  
Дата: 16.04.21 13:48
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Ты б объяснил чому минус то. Мне ж интересно что я не так написал


если ты смотрел контекст то речь идет про скрипты. getconf лежит в libc-bin и более распространена в разы. а lscpu почти нигде не предустановлено там где скрипты эти нужны — на серверах.

ну и главное getconf для скриптов и парсинга идеально подходит. т.е. парсить ничего не надо.

и кстати на arm64 никакого op-mode нет хотя там оно было бы актуально. потому как arm64 в отличии от AMD64 не гарантирует поддержку старых armv7 32 битных инструкций и приложений
Re[3]: Определить что это 32х битный линукс на 64х битном ядре
От: Sheridan Россия  
Дата: 16.04.21 16:05
Оценка:
Здравствуйте, VladCore, Вы писали:

S>>Ты б объяснил чому минус то. Мне ж интересно что я не так написал


VC>getconf

А, ну можно и так.
Matrix has you...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.