Hasher/Сборка пакета с помощью qemu

Материал из ALT Linux Wiki


Сборка пакета с помощью qemu

Постановка задачи

Стоит задача собрать и отладить локально сборку пакета в хэшере, в архитектуре не поддерживаемой процессоре, конкретно в архитектуре ppc64le на компьютере архитектуры x86_64.

Решение задачи

Установка пакета qemu

Устанавливаем пакет qemu-user-binfmt_misc

# apt-get install qemu-user-binfmt_misc
Чтение списков пакетов... Завершено
Построение дерева зависимостей... Завершено
Выбрано qemu-user-static-binfmt для 'qemu-user-binfmt_misc'
Следующие дополнительные пакеты будут установлены:
  qemu-user-static qemu-user-static-aarch64 qemu-user-static-alpha qemu-user-static-arm qemu-user-static-avr qemu-user-static-binfmt qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-alpha qemu-user-static-binfmt-arm
  qemu-user-static-binfmt-avr qemu-user-static-binfmt-cris qemu-user-static-binfmt-hppa qemu-user-static-binfmt-m68k qemu-user-static-binfmt-microblaze qemu-user-static-binfmt-mips qemu-user-static-binfmt-nios2
  qemu-user-static-binfmt-or1k qemu-user-static-binfmt-ppc qemu-user-static-binfmt-riscv qemu-user-static-binfmt-rx qemu-user-static-binfmt-s390x qemu-user-static-binfmt-sh4 qemu-user-static-binfmt-sparc
  qemu-user-static-binfmt-tricore qemu-user-static-binfmt-x86 qemu-user-static-binfmt-xtensa qemu-user-static-cris qemu-user-static-hppa qemu-user-static-m68k qemu-user-static-microblaze qemu-user-static-mips qemu-user-static-nios2
  qemu-user-static-or1k qemu-user-static-ppc qemu-user-static-riscv qemu-user-static-rx qemu-user-static-s390x qemu-user-static-sh4 qemu-user-static-sparc qemu-user-static-tricore qemu-user-static-x86 qemu-user-static-xtensa
Следующие НОВЫЕ пакеты будут установлены:
  qemu-user-static qemu-user-static-aarch64 qemu-user-static-alpha qemu-user-static-arm qemu-user-static-avr qemu-user-static-binfmt qemu-user-static-binfmt-aarch64 qemu-user-static-binfmt-alpha qemu-user-static-binfmt-arm
  qemu-user-static-binfmt-avr qemu-user-static-binfmt-cris qemu-user-static-binfmt-hppa qemu-user-static-binfmt-m68k qemu-user-static-binfmt-microblaze qemu-user-static-binfmt-mips qemu-user-static-binfmt-nios2
  qemu-user-static-binfmt-or1k qemu-user-static-binfmt-ppc qemu-user-static-binfmt-riscv qemu-user-static-binfmt-rx qemu-user-static-binfmt-s390x qemu-user-static-binfmt-sh4 qemu-user-static-binfmt-sparc
  qemu-user-static-binfmt-tricore qemu-user-static-binfmt-x86 qemu-user-static-binfmt-xtensa qemu-user-static-cris qemu-user-static-hppa qemu-user-static-m68k qemu-user-static-microblaze qemu-user-static-mips qemu-user-static-nios2
  qemu-user-static-or1k qemu-user-static-ppc qemu-user-static-riscv qemu-user-static-rx qemu-user-static-s390x qemu-user-static-sh4 qemu-user-static-sparc qemu-user-static-tricore qemu-user-static-x86 qemu-user-static-xtensa
0 будет обновлено, 42 новых установлено, 0 пакетов будет удалено и 0 не будет обновлено.
Необходимо получить 0B/21,6MB архивов.
После распаковки потребуется дополнительно 114MB дискового пространства.
Продолжить? [Y/n]  Y
....
Завершено.

Создаём файлы apt

Создаю файлы /home/my_user/apt/apt.conf.s64-ppc64le и /home/my_user/apt/sources.list.s64-ppc64le со следующим содержанием :

/home/my_user/apt/apt.conf.s64-ppc64le

Dir::Etc::main "/dev/null";
Dir::Etc::parts "/var/empty";
Dir::Etc::SourceParts "/var/empty";
Dir::Etc::sourcelist "/home/my_user/apt/sources.list.s64-ppc64le";

RPM::Ignore { "vim-plugin-vimruby"; };

/home/my_user/apt/sources.list.s64-ppc64le

# Package repository URLs
#
# You can add [alt] after rpm for digital signature check

rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/ ppc64le classic
rpm [alt] http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/ noarch classic

rpm-src http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/ ppc64le classic


Создаю скрипт запуска построения пакета

Что-бы не забыть все нужные параметры, создаю в каталоге $HOME/bin скрипт запуска с незамысловатым именем gear-stroim-pp64le такого содержания :

#!/bin/sh -x

home_hasher=/tmp/.private/$USER/hasher
logf=$home_hasher/build.txt

echo $logf
>$logf
gear-hsh -v  --lazy-cleanup   --apt-config=$HOME/apt/apt.conf.s64-ppc64le --with-qemu=ppc64le --target=ppc64le  $home_hasher $*  2>&1 | tee  $logf.pp64


Собираю пакет

Перехожу в каталог с git репозитоием пакета и собираю пакет в архитектуре ppc64le

gear-stroim-pp64le