Динамический бинарник

Для запуска x86-приложений на e2k под бинарным транслятором необходимо подготовить окружение, достаточное для выполнения целевого приложения; в случае динамически скомпонованного исполняемого файла это обычно чрут с нужными библиотеками

Для запуска нам нужен statifier

Что такое statifier

Это утилита, которая превращает динамически слинкованные исполняемые файлы в статически слинкованные. То есть, она включает все необходимые библиотеки в один бинарник, который можно запускать без зависимости от системных библиотек.

Действия по упаковке:

# Установка утилиты для превращения динамических бинарников в статические
apt-get install -y statifier

# Монтируем /proc (нужно statifier'у для анализа зависимостей)
mount /proc

# Указываем путь к библиотекам megacli, если они не в стандартных директориях
export LD_LIBRARY_PATH="/usr/lib/megacli:$LD_LIBRARY_PATH"

# Создаём статически слинкованный бинарник megacli
statifier /usr/lib/megacli/megacli.real /root/megacli

# Отмонтируем /proc — очищаем после себя
umount /proc

# Проверяем, использует ли бинарник динамические библиотеки 
# должен показать "not a dynamic executable"
ldd /root/megacli

Полученный бинарник без внешних библиотечных зависимостей проверяем на функционирование: /root/megacli -h затем перепаковываем, как rtc-megacli

rtc-megacli.spec
Name: rtc-megacli
Version: 8.07.14
Release: alt1.E2K.1

Summary: megacli repackaged for use with rtc
License: proprietary
Group: System/Configuration/Hardware

Source: megacli
AutoReqProv: no
Requires: rtc >= 4.1-alt1.E2K.5

%define mcdir %prefix/libexec
%add_debuginfo_skiplist %mcdir
%set_verify_elf_method none

%description
%summary

%prep

%build
cat > megacli.sh << EOF
#!/bin/sh
exec rtc64 --path_prefix / -- %mcdir/megacli "\$@"
EOF

%install
install -pDm755 %SOURCE0 %buildroot%mcdir/megacli
install -pDm755 megacli.sh %buildroot%_sbindir/megacli

%files
%_sbindir/*
%mcdir/megacli

%changelog
* Tue Oct 18 2022 Michael Shigorin <[email protected]> 8.07.14-alt1.E2K.1
- initial repackage

А после уже делаем вызов так же, будто это уже статика:

#!/bin/sh
exec rtc64 --path_prefix / -- %mcdir/megacli "\$@"

Last updated