Hasher/Tips: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
Строка 88: Строка 88:
/ALT/Sisyphus/x86_64/RPMS.classic/librpm-4.0.4-alt100.51.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/librpm-4.0.4-alt100.51.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/perl-base-5.14.2-alt4.x86_64.rpm</pre>
/ALT/Sisyphus/x86_64/RPMS.classic/perl-base-5.14.2-alt4.x86_64.rpm</pre>
==Советы бывалых==
===hsh-shell и hsh===
mike@:<br>
Собранное в hsh-shell пересобирать начисто hsh заодно выясняя, не забыл ли добавить в спек поставленное для сборки hsh-install'ом <br>
ну и как минимум спеки-то должны быть или в ~/RPM/SPECS, или в ~/git :) <br>
А перед этим можно скопировать спек
cp -ai ~/hasher/tmpfs/chroot/usr/src/RPM/SPECS/*.spec .
или вытащить весь пакет в ~/RPM:
rpm -i ~/hasher/tmpfs/chroot/usr/src/RPM/SRPMS/openmotif-2.3.3-alt3.src.rpm
===Два хашера===
drool@:<br>
У меня два каталога хашера, один обычный, а второй я никогда не удаляю.
Когда наступает момент, что версии пакетов внутри неудаляемого хашера слишком устаревают, я рутом сохраняю оттуда /usr/src (ведь он там фактически как хомяк используется), а после генерации каталога заново заменяю им то, что создалось по новой. В итоге я у меня там сохраняется и настроенный ~/.rpmmacros, и ccache с его ~/.ccache, и содержимое ~/RPM и, что иногда бывает весьма полезным, ~/.bash_history.
===Кэш в hasher===
drool@:<br>
И в этом втором каталоге у меня, ко всему прочему, настроен еще и ccache, что дает просто огромный прирост скорости компиляции, если пакет уже там собирался. Для этого внутрь этого хашера установлен непосредственно сам ccache, а в начало ~/.bash_profile вставлена конструкция:
GCC_USE_CCACHE=1
export GCC_USE_CCACHE


{{Category navigation|title=hasher|category=hasher|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=hasher|category=hasher|sortkey={{SUBPAGENAME}}}}
[[Категория:hasher]]
[[Категория:hasher]]

Версия от 13:38, 31 августа 2012

Автоматическое переключение sources.list под архитектуру

В ~/.hasher/config:

# target
if [ `uname -m` = "i686" ]; then
    def_target=i586
    apt_config=$HOME/.hasher/apt.conf.i586
fi

При запуске hsh через i586 автоматически используется нужный sources.list. (mithraen@ в devel@)

Кэширование скачиваемых apt-ом пакетов

"Проблема", в связи с которой возникает такое пожелание, вот в чём
При каждой сборке в hasher-е, hasher готовит окружение для сборки, устанавливая пакеты к себе; их вытаскивает из репозитория-источника apt. Если репозиторий удалённый (например, используются общесистемные настройки apt, указывающие на ftp-репозиторий Sisyphus), то каждый раз apt будет скачивать все потребовавшиеся пакеты по сети (заново). Хотелось бы сэкономить на трафике и времени и использовать постоянный кэш apt -- один и тот же для всех предстоящих сборок в hasher-е.

(То же пожелание, высказанное Yury Aliaev.)

Судя по высказывавшимся советам, это должно быть возможно, если включить себя в группу rpm
at@:

Добавьте себя в группу rpm.

at@:

hasher умеет делать 'apt-get install --download-only' через системный /etc/apt/sources.list. Но ему может не хватить прав на /var/*/apt.

Но в чистом виде такой совет (просто добавление себя в группу rpm) не сработал для hasher-1.3.22-alt1 -- общесистемный /var/cache/apt/archives/ не стал хранить скачанные пакеты.
Поправка конфигурации apt для hasher
Посмотрим на то, как работает hasher. /usr/bin/mkaptbox готовит конфигурацию apt для hasher так (см. исходный код):
# create final apt.conf file.
cat >"$apt_config_file" <<__EOF__
Dir::State "$aptbox/var/lib/apt/";
Dir::Cache "$aptbox/var/cache/apt/";
${apt_config:+$(cat "$apt_config")}
Dir::Etc::SourceList "$aptbox/etc/apt/sources.list";
RPM::RootDir "$aptbox";
APT::Install::Virtual "true";
APT::Install::VirtualVersion "true";
${alternate_arch:+APT::Architecture "${target:-$def_target}";}
__EOF__
verbose "Created APT configuration file \`$apt_config_file'."
Т.е. оно не собирается использовать общесистемный кэш (а прописывает свою директорию для кэша, которая будет стираться между вызовами hsh). Но есть возможность вставить какую-нибудь нашу добавку к конфигурации, передав её параметром --apt-config.
Я записал в некий файл (~/hsh-extra-apt.conf):
Dir::Cache "/var/cache/apt/";
(комментарии там не надо использовать, потому что при вставке в mkaptbox они нарушат синтаксис файла конфигурации).
Теперь я могу запускать сборки с опцией --apt-config=/home/imz/hsh-extra-apt.conf (нужно вписать именно полный путь, без ~) для hsh; например, так:
   gear-hsh -v -- -v --no-sisyphus-check=packager,gpg --apt-config=/home/imz/hsh-extra-apt.conf
и оно кэширует скачиваемые пакеты.
Можно сохранить эти настройки в ~/.hasher/config (чтобы каждый раз не писать опцию):
 apt_config=/home/imz/.hasher/extra-apt.conf
(очевидно, тут я уже переместил тот файл в ~/.hasher/extra-apt.conf).
Замеченные проблемы
может понадобиться сделать от root:
    rm /var/cache/apt/archives/lock

Получение списка пакетов для установки заданного

Для разворачивания полного списка файлов пакетов, образующих замыкание зависимостей какого-либо пакета (реального, виртуального или синтетической зависимости) можно воспользоваться mkaptbox:

$ mkaptbox -f && ~/hasher/aptbox/apt-get install -qqqy \
  -oRPM::PM=external -oDir::Bin::rpm=hsh-rpmi-print-files 'perl(Text/ParseWords.pm)'
/ALT/Sisyphus/noarch/RPMS.classic/setup-2.2.14-alt1.noarch.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/filesystem-2.3.11-alt1.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/glibc-preinstall-2.11.3-alt8.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/glibc-core-2.11.3-alt8.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/bzlib-1.0.6-alt3.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/libgcc1-4.5.3-alt3.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/glibc-pthread-2.11.3-alt8.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/libbeecrypt7-4.2.1-alt7.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/libdb4.7-4.7.25-alt7.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/libelf-0.153-alt1.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/liblzma-5.0.3-alt1.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/libpopt-1.14-alt6.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/zlib-1.2.5-alt3.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/sh-3.2.51-alt1.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/libselinux-2.0.98-alt2.1.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/librpm-4.0.4-alt100.51.x86_64.rpm
/ALT/Sisyphus/x86_64/RPMS.classic/perl-base-5.14.2-alt4.x86_64.rpm

Советы бывалых

hsh-shell и hsh

mike@:
Собранное в hsh-shell пересобирать начисто hsh заодно выясняя, не забыл ли добавить в спек поставленное для сборки hsh-install'ом
ну и как минимум спеки-то должны быть или в ~/RPM/SPECS, или в ~/git :)
А перед этим можно скопировать спек

cp -ai ~/hasher/tmpfs/chroot/usr/src/RPM/SPECS/*.spec .

или вытащить весь пакет в ~/RPM:

rpm -i ~/hasher/tmpfs/chroot/usr/src/RPM/SRPMS/openmotif-2.3.3-alt3.src.rpm

Два хашера

drool@:
У меня два каталога хашера, один обычный, а второй я никогда не удаляю. Когда наступает момент, что версии пакетов внутри неудаляемого хашера слишком устаревают, я рутом сохраняю оттуда /usr/src (ведь он там фактически как хомяк используется), а после генерации каталога заново заменяю им то, что создалось по новой. В итоге я у меня там сохраняется и настроенный ~/.rpmmacros, и ccache с его ~/.ccache, и содержимое ~/RPM и, что иногда бывает весьма полезным, ~/.bash_history.

Кэш в hasher

drool@:
И в этом втором каталоге у меня, ко всему прочему, настроен еще и ccache, что дает просто огромный прирост скорости компиляции, если пакет уже там собирался. Для этого внутрь этого хашера установлен непосредственно сам ccache, а в начало ~/.bash_profile вставлена конструкция:

GCC_USE_CCACHE=1
export GCC_USE_CCACHE