Hasher/FAQ: различия между версиями
Aborodin (обсуждение | вклад) (Добавлено требование на монтирование /dev/shm, уточнено имя параметра hsh-run (--mount -> --mountponts).) |
м (→есть ли споcоб запустить gui-шную программу внутри hasher?: xorg-dri-swrast) |
||
(не показаны 33 промежуточные версии 11 участников) | |||
Строка 23: | Строка 23: | ||
A2: Если пакет не предназначен для Sisyphus и выдаваемые ошибки связаны не с техническими проблемами в пакете, а с невыполнением политик репозитория (например, ограничение на тэг <tt>Packager</tt> и на PGP-подпись; возможно, будет интересна {{altbug|15376}}) — [[Руководство по hasher#Отключение проверок sisyphus_check|отключите часть проверок <tt>sisyphus_check</tt>]]; [http://lists.altlinux.org/pipermail/devel-newbies/2012-September/000836.html можно добавить] в {{path|~/.hasher/config}}: | A2: Если пакет не предназначен для Sisyphus и выдаваемые ошибки связаны не с техническими проблемами в пакете, а с невыполнением политик репозитория (например, ограничение на тэг <tt>Packager</tt> и на PGP-подпись; возможно, будет интересна {{altbug|15376}}) — [[Руководство по hasher#Отключение проверок sisyphus_check|отключите часть проверок <tt>sisyphus_check</tt>]]; [http://lists.altlinux.org/pipermail/devel-newbies/2012-September/000836.html можно добавить] в {{path|~/.hasher/config}}: | ||
no_sisyphus_check="packager,buildhost,gpg" | no_sisyphus_check="packager,buildhost,gpg,changelog" | ||
A3: В конфигурационный файл .hasher/config можно добавить поле packager (если есть альтовский логин): | A3: В конфигурационный файл .hasher/config можно добавить поле packager (если есть альтовский логин): | ||
packager="Your Name <login@altlinux.org>" | packager="Your Name <login@altlinux.org>" | ||
или с той же целью поступить как написано в [[Сборка пакета с нуля#Окружение RPM]]: | |||
Создайте файл {{path|~/.rpmmacros}} следующего содержания (конечно, заменив ключ и имя мейнтейнера на свои): | |||
%packager Andrey Cherepanov <cas@altlinux.org> | |||
%_gpg_name A424A3962331FDD2748BC8B34863C0F4A9EBF131 | |||
а в {{path|~/.hasher/config}} добавьте универсальное <code>packager="$(rpm --eval %packager)"</code>. | |||
A4: У утилиты hsh есть ключик --packager, можно воспользоваться им: | A4: У утилиты hsh есть ключик --packager, можно воспользоваться им: | ||
Строка 32: | Строка 41: | ||
A5: Если пакет собирать в локальном <tt>hasher</tt>-е и поле <tt>Packager</tt> содержит email не из домена altlinux, то возникнет схожая ошибка в модуле проверки changelog-а <tt>sisyphus_check</tt>. Так же как и с проверкой packager, можно добавить в no_sisyphus_check=changelog. | A5: Если пакет собирать в локальном <tt>hasher</tt>-е и поле <tt>Packager</tt> содержит email не из домена altlinux, то возникнет схожая ошибка в модуле проверки changelog-а <tt>sisyphus_check</tt>. Так же как и с проверкой packager, можно добавить в no_sisyphus_check=changelog. | ||
== При запуске <tt>hsh</tt> я получаю ошибку <code>date: invalid date '1970-01-01 UTC none seconds'</code> == | |||
Q: При запуске <tt>hsh</tt> я получаю ошибку | |||
date: invalid date '1970-01-01 UTC none seconds' | |||
A1: <tt>date</tt> тут на самом деле ни при чём. Это получается, когда в исходном файле <tt>src.rpm</tt> нет секции <tt>%changelog</tt>. Нужно обязательно написать хотя бы что-то вида: | |||
%changelog | |||
* Fri Jan 14 2022 Vasya Pupkin <vasya_pupkin@altlinux.org> 0.1.2-alt1 | |||
- Initial build. | |||
Почта должна быть в домене altlinux.*, иначе всё равно будет вылезать ошибка "wrong packager in CHANGELOGNAME" - см. предыдущий вопрос. | |||
== При запуске <tt>hsh</tt> я получаю ошибку <code>hasher-priv: /path/to/workdir/chroot: prefix mismatch</code> == | == При запуске <tt>hsh</tt> я получаю ошибку <code>hasher-priv: /path/to/workdir/chroot: prefix mismatch</code> == | ||
Строка 43: | Строка 63: | ||
A: По умолчанию <tt>hasher</tt> позволяет располагать свою рабочую директорию в <tt>$HOME</tt> пользователя или в <tt>/tmp/.private</tt>. Или измените место, где создаётся рабочая директория, или разрешите дополнительные директории с помощью ключа <tt>prefix</tt> в <tt>/etc/hasher-priv/system</tt> (общесистемно) или <tt>/etc/hasher-priv/user.d/<USER></tt> (для одного пользователя). | A: По умолчанию <tt>hasher</tt> позволяет располагать свою рабочую директорию в <tt>$HOME</tt> пользователя или в <tt>/tmp/.private</tt>. Или измените место, где создаётся рабочая директория, или разрешите дополнительные директории с помощью ключа <tt>prefix</tt> в <tt>/etc/hasher-priv/system</tt> (общесистемно) или <tt>/etc/hasher-priv/user.d/<USER></tt> (для одного пользователя). | ||
== | == hsh не запускается, /.host/entry: No such file or directory == | ||
Q: При запуске <tt>hsh</tt> выдаёт ошибку: | Q: При запуске <tt>hsh</tt> выдаёт ошибку: | ||
Строка 52: | Строка 72: | ||
и еще раз повторите запуск <tt>hsh</tt>. | и еще раз повторите запуск <tt>hsh</tt>. | ||
== | == mkimage останавливается и чего-то ждёт == | ||
Q: Сборка дистрибутива останавливается на таких вот строчках: | Q: Сборка дистрибутива останавливается на таких вот строчках: | ||
Строка 69: | Строка 89: | ||
A: Проверьте, что у вас смонтирован <tt>/dev/pts</tt> на хост-системе. | A: Проверьте, что у вас смонтирован <tt>/dev/pts</tt> на хост-системе. | ||
== | == hsh не запускается: /dev/null: Permission denied == | ||
Q: При запуске <tt>hsh</tt> выдаёт ошибку: | Q: При запуске <tt>hsh</tt> выдаёт ошибку: | ||
Строка 87: | Строка 107: | ||
== правда, что Hasher — это вирус под Linux? == | == правда, что Hasher — это вирус под Linux? == | ||
A: действительно, существует [http://en.wikipedia.org/wiki/Linux_malware#Viruses ELF-вирус] [ | A: действительно, существует [http://en.wikipedia.org/wiki/Linux_malware#Viruses ELF-вирус] [Linux.Hasher], но в отличие от него — наличие технических механизмов заражения и саморазмножения в обсуждаемом hasher не показано. | ||
== Как кешировать и не скачивать одно и то же по многу раз для сборки разных пакетов? == | == Как кешировать и не скачивать одно и то же по многу раз для сборки разных пакетов? == | ||
Строка 143: | Строка 163: | ||
=== Я собираю пакет, но он ломается из-за того, что в сборочной среде нет <tt>/proc</tt> === | === Я собираю пакет, но он ломается из-за того, что в сборочной среде нет <tt>/proc</tt> === | ||
...например, так: <tt>no /proc/self/exe available. Is /proc mounted?</tt> | |||
A: [[Руководство по hasher#Монтирование /proc|Настройте монтирование /proc]]. | A: [[Руководство по hasher#Монтирование /proc|Настройте монтирование /proc]]. | ||
Строка 148: | Строка 169: | ||
=== как включить доступ в сеть из hasher chroot? === | === как включить доступ в сеть из hasher chroot? === | ||
A: share_network=1 hsh-shell | A: 1. Заполните файл распознавания адресов в hasher-е от рутера: | ||
$ hsh-run --rooter -- sh -c "echo 'nameserver 192.168.8.8' >> /etc/resolv.conf" | |||
2. Войдите в окружение с установленным в env <code>share_network=1</code>: | |||
$ share_network=1 hsh-shell | |||
NB: В этом FAQ есть и другие ответы на эту тему. | |||
=== как запретить доступ в сеть из hasher chroot? === | === как запретить доступ в сеть из hasher chroot? === | ||
A: например, сборка ведётся пользователем с логином username: | A: например, сборка ведётся пользователем с логином username: | ||
nft add rule inet $table $o_chain oifname venet0 meta skuid username_a reject with icmpx type admin-prohibited | |||
nft add rule inet $table $o_chain oifname venet0 meta skuid username_b reject with icmpx type admin-prohibited | |||
Для механизма <tt>iptables</tt>: | |||
iptables -A OUTPUT -o venet0 -m owner --uid-owner username_a -j REJECT --reject-with icmp-net-unreachable | iptables -A OUTPUT -o venet0 -m owner --uid-owner username_a -j REJECT --reject-with icmp-net-unreachable | ||
iptables -A OUTPUT -o venet0 -m owner --uid-owner username_b -j REJECT --reject-with icmp-net-unreachable | iptables -A OUTPUT -o venet0 -m owner --uid-owner username_b -j REJECT --reject-with icmp-net-unreachable | ||
В этом случае также потребуются аналогичные правила для <tt>ip6tables</tt>. | |||
=== есть ли споcоб запустить gui-шную программу внутри hasher? === | === есть ли споcоб запустить gui-шную программу внутри hasher? === | ||
Строка 160: | Строка 194: | ||
A: да, | A: да, | ||
hsh --initroot-only ~/hasher | hsh --initroot-only ~/hasher | ||
hsh-install xauth "гуишная прога" | hsh-install xauth "гуишная прога" [шрифт...] | ||
hsh-run -Y "гуишная прога" | hsh-run -Y "гуишная прога" | ||
Если упадёт с руганью про Mesa, swrast, zink или что-то подобное (читать "нет OpenGL", который может понадобиться той же Qt) -- | |||
hsh-install xorg-dri-swrast | |||
=== как запустить в хэшере браузер? === | === как запустить в хэшере браузер? === | ||
Строка 175: | Строка 212: | ||
В {{path|/etc/hasher-priv/fstab}} должна быть смонтирована /dev/shm: | В {{path|/etc/hasher-priv/fstab}} должна быть смонтирована /dev/shm: | ||
<tt>tmpfs /dev/shm tmpfs defaults 0 0</tt> | <tt>tmpfs /dev/shm tmpfs defaults 0 0</tt> | ||
=== Как запустить в хэшере qemu с поддержкой kvm? === | |||
Это может быть полезно для для ускорения работы <tt>qemu</tt> при использованиии [[Hasher/vm-run|<tt>rpm-build-vm</tt>]] (<tt>vm-run</tt> в <tt>%check</tt>). | |||
'''A''': Помимо того, что в системе должен быть загружен соответствующий вашей архитектуре kvm модуль (например, kvm-intel), необходимо ещё выполнить следующие '''два''' [https://lists.altlinux.org/pipermail/devel/2019-October/208630.html условия]: | |||
* В {{path|/etc/hasher-priv/system}} нужно добавить <tt>/dev/kvm</tt> в <tt>allowed_devices=</tt>, например: | |||
allowed_mountpoints=/proc,/dev/pts,/dev/shm | |||
allowed_devices=/dev/kvm | |||
* В {{path|~/.hasher/config}} добавить <tt>/dev/kvm</tt> в <tt>known_mountpoints=</tt>, например: | |||
known_mountpoints=/proc,/dev/pts,/dev/kvm | |||
* Если нужно зайти в <tt>hasher</tt> интерактивно, то добавляется третье условие — при запуске <tt>hsh-shell</tt> нужно передать <tt>/dev/kvm</tt> в ключ <code>--mountpoints=</code>, пример: | |||
$ hsh-shell --mountpoints=/proc,/dev/kvm | |||
== В рабочей системе некая библиотека находится, а в хэшере -- нет, хотя она лежит в одном и том же месте == | == В рабочей системе некая библиотека находится, а в хэшере -- нет, хотя она лежит в одном и том же месте == | ||
Строка 195: | Строка 247: | ||
Натыкались на такое с {{prg|ghc}} и, вероятно, то же самое происходит с {{prg|java}} (в т.ч {{prg|closure}}), из-за этого при сборке [[Hasher/Руководство#cite_note-4|приходится]] обязательно [[Hasher/Руководство#Монтирование /proc|{{path|/proc}} монтировать]]. | Натыкались на такое с {{prg|ghc}} и, вероятно, то же самое происходит с {{prg|java}} (в т.ч {{prg|closure}}), из-за этого при сборке [[Hasher/Руководство#cite_note-4|приходится]] обязательно [[Hasher/Руководство#Монтирование /proc|{{path|/proc}} монтировать]]. | ||
== | == hsh не запускается: execve: /.host/entry: Exec format error == | ||
Q. При запуске <tt>hsh</tt> выдаёт ошибку: | Q. При запуске <tt>hsh</tt> выдаёт ошибку: | ||
Строка 202: | Строка 254: | ||
A. Убрать все из ~/.hasher, и перенастроить его при необходимости. | A. Убрать все из ~/.hasher, и перенастроить его при необходимости. | ||
== Hasher ругается: "Failed to deduce hasher config number from directory ownership" == | |||
Q. При создании чистого окружения Hasher завершается с ошибкой Failed to deduce hasher config number from directory ownership | |||
A. Очистить кэш сборочницы, удалив в ~/hasher каталог "cache". Если не поможет, то и директории "repo" и "chroot" в ~/hasher. | |||
== /etc/resolv.conf в чруте оказывается пустым даже при share_network=1 == | |||
Q. {{cmd|1 = share_network=1 hsh-shell}} оставляет {{path|/etc/resolv.conf}} пустым. | |||
A. <tt>share_network</tt> -- это опция {{pkg|hasher-priv}}, который не занимается редактированием resolv.conf.<br/> | |||
В {{pkg|hasher}} с версии <tt>1.4.1-alt1</tt> можно установить переменную {{cmd|1 = install_resolver_configuration_files=1}}, которая регулирует то, будет ли {{cmd|hsh-initroot}} копировать эти конфигурационные файлы (<tt>/etc/host.conf, /etc/hosts, /etc/resolv.conf</tt>). Её нужно добавить в {{path|~/.hasher/config}}. Обратите внимание, что так же необходимо указывать <tt>--no-cache</tt>. Пример: | |||
$ hsh --initroot --no-cache | |||
$ share_network=1 hsh-shell | |||
Или более просто, без необходимости редактировать config: | |||
$ hsh-run --rooter -- sh -c "echo nameserver 195.208.4.1 > /etc/resolv.conf" | |||
$ share_network=1 hsh-shell | |||
== Я получаю ошибку <code>hsh: hasher-priv getconf failed.</code> == | |||
A: Возможно, неправильно указан путь к workdir в ~/.hasher/config. Пример: | |||
$ cat .hasher/config | |||
workdir=/path/to/workdir | |||
rpmi='rpmi -vvv' | |||
known_mountpoints=/proc,/dev/shm,/dev/pts | |||
no_sisyphus_check="packager,buildhost,gpg" | |||
== gear-hsh отваливается при первом запуске == | |||
Q: При запуске gear-hsh на только что сконфигурированной машине получаю что-то вроде: | |||
/usr/bin/hsh-sh-functions: строка 261: cd: <...>/hasher: Нет такого файла или каталога | |||
A: Ему требуется рабочий каталог (или что-то типа такого). Нужно сделать <code>mkdir -p $HOME/hasher</code> или указывать другой путь при вызове gear-hsh, типа <code>mkdir -p $TMP/hasher && gear-hsh $TMP/hasher</code>. | |||
== Я поменял тип исходника в спеке (например, с .tar.xz на .tar) и всё сломал! == | |||
Q: Я поменял тип Source: в спеке, и теперь gear-hsh выдаёт ошибку типа такой. Чего он от меня хочет? | |||
error: File /usr/src/in/source/taisei-v1.3.2.tar: No such file or directory | |||
A: (by @mike) Нужно совпадение метода упаковки в .gear/rules и в Source: — или .tar.gz и там, и там, или (лучше) .tar и там, и там — чтоб избежать сжатия сжатого на ровном месте (srpm задействует xz). | |||
{{Category navigation|title=hasher|category=hasher|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=hasher|category=hasher|sortkey={{SUBPAGENAME}}}} | ||
{{Category navigation|title=FAQ|category=FAQ|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=FAQ|category=FAQ|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 18:10, 18 ноября 2024
При запуске hsh я получаю ошибку: hsh-mkchroot: cannot access getugid1 helper
Я добавил себя в hasher, но всё равно получаю ошибку hsh: /usr/libexec/hasher-priv/getconf.sh: cannot access getconf helper
A: Перелогиньтесь — hasher-useradd добавляет пользователя в новые группы.
В моём hasher собираются пакеты со странной архитектурой, которые не ставятся
A: Явно укажите архитектуру сборки.
В конце сборки в hasher выдаются ошибки вида some-packet.src.rpm: wrong PACKAGER
Q: В конце сборки в hasher выдаются ошибки вида
some-packet.src.rpm: wrong PACKAGER: Automated package hasher <hasher@localhost>
A1: Эти ошибки выдаются утилитой sisyphus_check, проверяющей соответствие пакетов правилам репозитория Sisyphus. Исправьте ошибки в spec-файле (обычно добавлением корректного тега Packager).
В частности, отсутствие тега Packager в spec-файле обычно (если не сделаны настройки, описанные в ответах ниже) приводит к такому результату (потому что в собранном пакете в качестве Packager будет некое значение по умолчанию).
Однако, если такой пакет без тега Packager будет собираться в girar (например, том, который работает на git.alt), то эта проверка будет успешно пройдена, потому что[1]: "girar builder, собирая пакет из подписанного git-тэга, указывает в качестве packager'а по умолчанию имя подписавшего git-тэг, поэтому, если поле Packager в спек-файле отсутствует, packager'ом собранного пакета окажется тот, кто подписал git-тэг." По правилам ALT это повлечёт назначение ответственным за пакет (maintainer'ом) нового packager'а (где это записано? так ли это?). Возможно, это не то, чего Вы хотели бы.
A2: Если пакет не предназначен для Sisyphus и выдаваемые ошибки связаны не с техническими проблемами в пакете, а с невыполнением политик репозитория (например, ограничение на тэг Packager и на PGP-подпись; возможно, будет интересна altbug #15376) — отключите часть проверок sisyphus_check; можно добавить в ~/.hasher/config:
no_sisyphus_check="packager,buildhost,gpg,changelog"
A3: В конфигурационный файл .hasher/config можно добавить поле packager (если есть альтовский логин):
packager="Your Name <login@altlinux.org>"
или с той же целью поступить как написано в Сборка пакета с нуля#Окружение RPM:
Создайте файл ~/.rpmmacros следующего содержания (конечно, заменив ключ и имя мейнтейнера на свои):
%packager Andrey Cherepanov <cas@altlinux.org> %_gpg_name A424A3962331FDD2748BC8B34863C0F4A9EBF131
а в ~/.hasher/config добавьте универсальное packager="$(rpm --eval %packager)"
.
A4: У утилиты hsh есть ключик --packager, можно воспользоваться им:
$ gear -v --hasher -- hsh --target=i586 --packager="Andrew Clark <andyc@altlinux.org>" ~/hasher
A5: Если пакет собирать в локальном hasher-е и поле Packager содержит email не из домена altlinux, то возникнет схожая ошибка в модуле проверки changelog-а sisyphus_check. Так же как и с проверкой packager, можно добавить в no_sisyphus_check=changelog.
При запуске hsh я получаю ошибку date: invalid date '1970-01-01 UTC none seconds'
Q: При запуске hsh я получаю ошибку
date: invalid date '1970-01-01 UTC none seconds'
A1: date тут на самом деле ни при чём. Это получается, когда в исходном файле src.rpm нет секции %changelog. Нужно обязательно написать хотя бы что-то вида:
%changelog * Fri Jan 14 2022 Vasya Pupkin <vasya_pupkin@altlinux.org> 0.1.2-alt1 - Initial build.
Почта должна быть в домене altlinux.*, иначе всё равно будет вылезать ошибка "wrong packager in CHANGELOGNAME" - см. предыдущий вопрос.
При запуске hsh я получаю ошибку hasher-priv: /path/to/workdir/chroot: prefix mismatch
Q: При запуске hsh я получаю ошибку
hasher-priv: /path/to/workdir/chroot: prefix mismatch, working directory should start with one of directories listed in colon-separated prefix list (~:/tmp/.private) hsh-mkchroot: failed to make devices.
A: По умолчанию hasher позволяет располагать свою рабочую директорию в $HOME пользователя или в /tmp/.private. Или измените место, где создаётся рабочая директория, или разрешите дополнительные директории с помощью ключа prefix в /etc/hasher-priv/system (общесистемно) или /etc/hasher-priv/user.d/<USER> (для одного пользователя).
hsh не запускается, /.host/entry: No such file or directory
Q: При запуске hsh выдаёт ошибку:
hasher-priv: slave: chrootuid: execve: /.host/entry: No such file or directory hsh-initroot: Failed to create RPM database.
A: Выключите все сменные носители в /etc/apt/sources.list, запустите apt-get update и еще раз повторите запуск hsh.
mkimage останавливается и чего-то ждёт
Q: Сборка дистрибутива останавливается на таких вот строчках:
mki-cache: has started executing. mkimage: Processing 'copy-packages' ... mki-cache: has started executing. mki-expand-pkgs: has started executing. method=simple mki-copy-pkgs: has started executing. mkdir: created directory `.../profiles/main/.work/mki-copy-pkgs.verbose'
A: Выключите все сменные носители в /etc/apt/sources.list (и sources.list.d/*.list), запустите apt-get update и еще раз повторите запуск hsh.
При запуске hsh выдаёт ошибку: hasher-priv: openpty: No such file or directory
A: Проверьте, что у вас смонтирован /dev/pts на хост-системе.
hsh не запускается: /dev/null: Permission denied
Q: При запуске hsh выдаёт ошибку:
fakeroot daemon: /dev/null: Permission denied fakeroot: error while starting the `faked' daemon. hsh-initroot: Failed to create RPM database.
A: Проверьте, что файловая система, на которой располагается сборочный каталог, смонтирована без использования опции nodev, например:
$ mount | grep /tmp tmpfs on /tmp type tmpfs (rw,nosuid,relatime,size=3145728k)
почему hasher перестал создавать хэши (base/*) для своего репозитория?
A: потому что для некоторого ускорения сборки они упразднены в пользу непосредственного сканирования каталога (rpm-dir вместо rpm в sources.list). Для создания хэшей при их публикации придётся запустить $hasher/aptbox/regenbasedir (или genbasedir --bloat совсем вручную).
правда, что Hasher — это вирус под Linux?
A: действительно, существует ELF-вирус [Linux.Hasher], но в отличие от него — наличие технических механизмов заражения и саморазмножения в обсуждаемом hasher не показано.
Как кешировать и не скачивать одно и то же по многу раз для сборки разных пакетов?
Q: Yury Aliaev: "чтобы не скачивать одно и то же по многу раз для сборки разных пакетов, необходимо, чтобы скачанные пакеты где-то хранились и при следующем запуске брались уже из этого места. Опять-таки, если пакет в Сизифе более свежий, чем локально скачанный, то скачанный пакет должен обновиться на более свежий."
A: Можно добавить от себя в конфигурацию apt-а для hasher особое место для кэша apt, которое не будет чиститься hsh; например, общесистемный /var/cache/apt/archives/ -- см. Hasher/Tips#Кэширование скачиваемых apt-ом пакетов.
процесс виснет на этапе какой-то установки пакетов через apt
Q: При запуске hsh с настройками apt по умолчанию (основанными на общесистемных /etc/apt/) процесс виснет на этапе какой-то установки пакетов через apt (при применении опции -v -- на сообщении "... пакеты будут установлены:" и список пакетов дальше).
A: Может быть, в /etc/apt/sources.list, /etc/apt/sources.list.d/* есть источник-cdrom. (Например, у меня cdrom был прописан в /etc/apt/sources.list.d/sources.list -- я удалил этот файл, и больше hsh не зависает на этом этапе. Примечание: я запускаю вообще-то gear-hsh -v -- -v, а не чистый hsh.)
Ответ найден благодаря сообщениям
- "Оказалось, что в /etc/apt/sources.list.d/sources.list был прописан cdrom, и hasher просил его вставить",
- "<apt> спрашивает что же ему выбрать, а хешер ему не отвечает. --Вообще он этого делать не должен. Покажите вывод hsh -v в районе затыка. --Причина оказалась в том, что <...> apt пытался взять его с CDROM."
как передать параметры сборки rpm, например, --enable или --without?
A: --build-args для hsh или gear-hsh; при пересборке src.rpm также следует добавить --repackage-source:
hsh --build-args "--enable static" --repackage-source нужный.src.rpm gear-hsh --build-args "--enable static"
«Пакет setup присутствует в базе данных, но не имеет доступной версии. […]»
Q: отчего при работающем sources.list хэшер может жаловаться: «Пакет setup присутствует в базе данных, но не имеет доступной версии. […] E: Для пакета setup не найдено подходящего кандидата для установки»?
A: проверьте, нет ли забытого указания архитектуры по умолчанию в ~/.hasher/config или ~/.rpmrc.
как обеспечить попадание в hasher chroot именно нужного варианта branding-*-release?
Q: как обеспечить попадание в hasher chroot именно нужного варианта branding-*-release? Получаю либо branding-sisyphus-server-light-release, либо конфликт запрошенного с ним:
error: failed dependencies: branding-sisyphus-server-light-release conflicts with branding-altlinux-centaurus-release-7.0.5-alt1 hsh-initroot: Failed to install build package list.
A1: при сборке пакетов — посредством --pkg-build-list=+branding-altlinux-starterkit-release
A2: при сборке образов с помощью mkimage — заданием IMAGE_INIT_LIST=+branding-simply-linux-release (не требуется при использовании mkimage-profiles).
A3: можно заставить apt указанием Dir::Etc::pkgpriorities, но это скорее ultima ratio.
как установить пакет из файла в hasher chroot?
Q: как установить пакет из файла в hasher chroot?
$ hsh-install ./viber-4.2.2.6-2.rpm E: Невозможно найти пакет ./viber-4.2.2.6-2.rpm
A: hsh-install не любит относительных путей к пакетам, указывайте полный.
Дополнительная деизоляция ради особых потребностей программ
Я собираю пакет, но он ломается из-за того, что в сборочной среде нет /proc
...например, так: no /proc/self/exe available. Is /proc mounted?
A: Настройте монтирование /proc.
как включить доступ в сеть из hasher chroot?
A: 1. Заполните файл распознавания адресов в hasher-е от рутера:
$ hsh-run --rooter -- sh -c "echo 'nameserver 192.168.8.8' >> /etc/resolv.conf"
2. Войдите в окружение с установленным в env share_network=1
:
$ share_network=1 hsh-shell
NB: В этом FAQ есть и другие ответы на эту тему.
как запретить доступ в сеть из hasher chroot?
A: например, сборка ведётся пользователем с логином username:
nft add rule inet $table $o_chain oifname venet0 meta skuid username_a reject with icmpx type admin-prohibited nft add rule inet $table $o_chain oifname venet0 meta skuid username_b reject with icmpx type admin-prohibited
Для механизма iptables:
iptables -A OUTPUT -o venet0 -m owner --uid-owner username_a -j REJECT --reject-with icmp-net-unreachable iptables -A OUTPUT -o venet0 -m owner --uid-owner username_b -j REJECT --reject-with icmp-net-unreachable
В этом случае также потребуются аналогичные правила для ip6tables.
есть ли споcоб запустить gui-шную программу внутри hasher?
A: да,
hsh --initroot-only ~/hasher hsh-install xauth "гуишная прога" [шрифт...] hsh-run -Y "гуишная прога"
Если упадёт с руганью про Mesa, swrast, zink или что-то подобное (читать "нет OpenGL", который может понадобиться той же Qt) --
hsh-install xorg-dri-swrast
как запустить в хэшере браузер?
A: например, так:
hsh --initroot /path/to/hasher hsh-install /path/to/hasher firefox fonts-otf-mozilla-fira xauth share_ipc=yes share_network=yes hsh-run -Y --mountpoints=/proc,/dev/shm /path/to/hasher -- firefox --no-remote $@
В /etc/hasher-priv/system должно быть разрешено монтирование /proc и /dev/shm:
allowed_mountpoints=/proc,/dev/shm
В /etc/hasher-priv/fstab должна быть смонтирована /dev/shm:
tmpfs /dev/shm tmpfs defaults 0 0
Как запустить в хэшере qemu с поддержкой kvm?
Это может быть полезно для для ускорения работы qemu при использованиии rpm-build-vm (vm-run в %check).
A: Помимо того, что в системе должен быть загружен соответствующий вашей архитектуре kvm модуль (например, kvm-intel), необходимо ещё выполнить следующие два условия:
- В /etc/hasher-priv/system нужно добавить /dev/kvm в allowed_devices=, например:
allowed_mountpoints=/proc,/dev/pts,/dev/shm allowed_devices=/dev/kvm
- В ~/.hasher/config добавить /dev/kvm в known_mountpoints=, например:
known_mountpoints=/proc,/dev/pts,/dev/kvm
- Если нужно зайти в hasher интерактивно, то добавляется третье условие — при запуске hsh-shell нужно передать /dev/kvm в ключ
--mountpoints=
, пример:
$ hsh-shell --mountpoints=/proc,/dev/kvm
В рабочей системе некая библиотека находится, а в хэшере -- нет, хотя она лежит в одном и том же месте
Q[2]:
/usr/lib64/ghc-7.10.1/bin/ghc: error while loading shared libraries: libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so: cannot open shared object file: No such file or directory
Получается, что в рабочей системе эта библиотека находится, а в хэшере --- нет. Притом она и там и там лежит в одном и том же месте:
$ ls /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/lib* /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M.a /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M-ghc7.10.1.so /usr/lib64/ghc-7.10.1/haske_IlDhIe25uAn0WJY379Nu1M/libHShaskeline-0.7.2.1-IlDhIe25uAn0WJY379Nu1M_p.a
A: Это может быть связано с тем, что не смонтирован /proc, а там в RPATH
/RUNPATH
в этих elf-ах используется $ORIGIN
(см man ld-linux.so). Чтобы узнать место, где выполняемый elf лежал, ld-linux как-то там смотрит
в /proc/, иначе работает так, как будто бы в текущей директории надо искать (и далее по стандартным путям).
Натыкались на такое с ghc и, вероятно, то же самое происходит с java (в т.ч closure), из-за этого при сборке приходится обязательно /proc монтировать.
hsh не запускается: execve: /.host/entry: Exec format error
Q. При запуске hsh выдаёт ошибку:
hasher-priv: slave: chrootuid: execve: /.host/entry: Exec format error hsh-initroot: Failed to create RPM database.
A. Убрать все из ~/.hasher, и перенастроить его при необходимости.
Hasher ругается: "Failed to deduce hasher config number from directory ownership"
Q. При создании чистого окружения Hasher завершается с ошибкой Failed to deduce hasher config number from directory ownership
A. Очистить кэш сборочницы, удалив в ~/hasher каталог "cache". Если не поможет, то и директории "repo" и "chroot" в ~/hasher.
Q. share_network=1 hsh-shell оставляет /etc/resolv.conf пустым.
A. share_network -- это опция hasher-priv, который не занимается редактированием resolv.conf.
В hasher с версии 1.4.1-alt1 можно установить переменную install_resolver_configuration_files=1, которая регулирует то, будет ли hsh-initroot копировать эти конфигурационные файлы (/etc/host.conf, /etc/hosts, /etc/resolv.conf). Её нужно добавить в ~/.hasher/config. Обратите внимание, что так же необходимо указывать --no-cache. Пример:
$ hsh --initroot --no-cache $ share_network=1 hsh-shell
Или более просто, без необходимости редактировать config:
$ hsh-run --rooter -- sh -c "echo nameserver 195.208.4.1 > /etc/resolv.conf" $ share_network=1 hsh-shell
Я получаю ошибку hsh: hasher-priv getconf failed.
A: Возможно, неправильно указан путь к workdir в ~/.hasher/config. Пример:
$ cat .hasher/config workdir=/path/to/workdir rpmi='rpmi -vvv' known_mountpoints=/proc,/dev/shm,/dev/pts no_sisyphus_check="packager,buildhost,gpg"
gear-hsh отваливается при первом запуске
Q: При запуске gear-hsh на только что сконфигурированной машине получаю что-то вроде:
/usr/bin/hsh-sh-functions: строка 261: cd: <...>/hasher: Нет такого файла или каталога
A: Ему требуется рабочий каталог (или что-то типа такого). Нужно сделать mkdir -p $HOME/hasher
или указывать другой путь при вызове gear-hsh, типа mkdir -p $TMP/hasher && gear-hsh $TMP/hasher
.
Я поменял тип исходника в спеке (например, с .tar.xz на .tar) и всё сломал!
Q: Я поменял тип Source: в спеке, и теперь gear-hsh выдаёт ошибку типа такой. Чего он от меня хочет?
error: File /usr/src/in/source/taisei-v1.3.2.tar: No such file or directory
A: (by @mike) Нужно совпадение метода упаковки в .gear/rules и в Source: — или .tar.gz и там, и там, или (лучше) .tar и там, и там — чтоб избежать сжатия сжатого на ровном месте (srpm задействует xz).