Hasher/Tips: различия между версиями
м (→Кэширование скачиваемых apt-ом пакетов: пояснее) |
м (→Кэширование скачиваемых pkglist: иерархию нужных директорий обязательно надо предварительно создать) |
||
(не показано 8 промежуточных версий 3 участников) | |||
Строка 11: | Строка 11: | ||
При запуске hsh через i586 автоматически используется нужный sources.list. ''([http://lists.altlinux.org/pipermail/devel/2009-October/175713.html mithraen@ в devel@])'' | При запуске hsh через i586 автоматически используется нужный sources.list. ''([http://lists.altlinux.org/pipermail/devel/2009-October/175713.html mithraen@ в devel@])'' | ||
См. [https://lists.altlinux.org/pipermail/devel/2009-October/175726.html полный пример от at@] с заданием полностью своего sources.list для hasher. | |||
==Кэширование скачиваемых apt-ом пакетов== | ==Кэширование скачиваемых apt-ом пакетов== | ||
Строка 25: | Строка 27: | ||
:[http://lists.altlinux.org/pipermail/sisyphus/2008-June/331313.html at@]:<blockquote>hasher умеет делать 'apt-get install --download-only' через системный /etc/apt/sources.list. Но ему может не хватить прав на /var/*/apt.</blockquote> | :[http://lists.altlinux.org/pipermail/sisyphus/2008-June/331313.html at@]:<blockquote>hasher умеет делать 'apt-get install --download-only' через системный /etc/apt/sources.list. Но ему может не хватить прав на /var/*/apt.</blockquote> | ||
:Но в чистом виде такой совет (просто добавление себя в группу rpm) не сработал для hasher-1.3.22-alt1 -- общесистемный /var/cache/apt/archives/ не стал хранить | :Но в чистом виде такой совет (просто добавление себя в группу rpm) не сработал для hasher-1.3.22-alt1 -- общесистемный /var/cache/apt/archives/ не стал хранить скачанные пакеты. | ||
;Поправка конфигурации apt для hasher:Посмотрим на то, как работает hasher. /usr/bin/mkaptbox готовит конфигурацию apt для hasher так (см. исходный код): | ;Поправка конфигурации apt для hasher:Посмотрим на то, как работает hasher. /usr/bin/mkaptbox готовит конфигурацию apt для hasher так (см. исходный код): | ||
Строка 43: | Строка 45: | ||
</pre> | </pre> | ||
:Т.е. оно не собирается использовать общесистемный кэш (а прописывает свою директорию для кэша, которая будет стираться между вызовами hsh). Но есть возможность вставить какую-нибудь нашу добавку к конфигурации, передав параметром --apt-config. | :Т.е. оно не собирается использовать общесистемный кэш (а прописывает свою директорию для кэша, которая будет стираться между вызовами hsh). Но есть возможность вставить какую-нибудь нашу добавку к конфигурации, передав её параметром --apt-config. | ||
:Я записал в некий файл (~/hsh-extra-apt.conf): | :Я записал в некий файл (~/hsh-extra-apt.conf): | ||
Строка 63: | Строка 65: | ||
:(очевидно, тут я уже переместил тот файл в ~/.hasher/extra-apt.conf). | :(очевидно, тут я уже переместил тот файл в ~/.hasher/extra-apt.conf). | ||
====Замеченные проблемы:==== | |||
* может понадобиться сделать от root: | |||
rm /var/cache/apt/archives/lock | rm /var/cache/apt/archives/lock | ||
* Неудобно, что при размножении ~/.hasher/*-apt.conf (для разных веток ALTLinux) приходится добавлять конфигурацию для кеширования скачиваемых пакетов в каждый файл. Если общих опций несколько, то, конечно, хочется делать include общего конфигурационного файла для apt; для этого есть специальная директива #include -- см. "man apt.conf". | |||
* Ещё одна неприятность -- то, что pkglist всё время скачиваются заново; например: | |||
<pre> | |||
$ gear-hsh -- -v --lazy-cleanup | |||
hsh: changed working directory to `/tmp/.private/imz/hasher' | |||
[...] | |||
mkaptbox: Created RPM database in `./var/lib/rpm/'. | |||
Получено: 1 http://ftp.altlinux.org x86_64 release [914B] | |||
Получено: 2 http://ftp.altlinux.org noarch release [709B] | |||
Получено: 3 http://ftp.altlinux.org x86_64-i586 release [573B] | |||
Получено 2196B за 0s (7819B/s). | |||
Получено: 1 http://ftp.altlinux.org x86_64/classic pkglist [17,4MB] | |||
[...] | |||
</pre> | |||
Неприятно долго ждать. А ведь работа системного apt этого недостатка | |||
не имеет, например (вместо "Получено" -- "Найдено"): | |||
<pre> | |||
[root@z ~]# apt-get update | |||
Получено: 1 http://ftp.altlinux.org x86_64 release [914B] | |||
Получено: 2 http://ftp.altlinux.org noarch release [709B] | |||
Получено: 3 http://ftp.altlinux.org x86_64-i586 release [573B] | |||
Получено 2196B за 0s (9125B/s). | |||
Найдено http://ftp.altlinux.org x86_64/classic pkglist | |||
Найдено http://ftp.altlinux.org x86_64/classic release | |||
Найдено http://ftp.altlinux.org noarch/classic pkglist | |||
Найдено http://ftp.altlinux.org noarch/classic release | |||
Найдено http://ftp.altlinux.org x86_64-i586/classic pkglist | |||
Найдено http://ftp.altlinux.org x86_64-i586/classic release | |||
Чтение списков пакетов... Завершено | |||
Построение дерева зависимостей... 0% | |||
</pre> | |||
Похоже, что эту проблему тоже можно решить: | |||
===Кэширование скачиваемых pkglist=== | |||
Скачиваемые pkglist кладутся в /var/lib/apt/lists/ : | |||
<pre> | |||
[root@z ~]# l /var/lib/apt/lists/ | |||
итого 167244 | |||
drwxr-xr-x 3 root root 4096 янв 29 18:00 ./ | |||
drwxr-xr-x 2 root root 4096 янв 29 18:00 partial/ | |||
-rw-r----- 1 root root 0 янв 29 18:00 lock | |||
-rw-r--r-- 1 root root 528 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release | |||
-rw-r--r-- 1 root root 40060882 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_pkglist.classic | |||
-rw-r--r-- 1 root root 147 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release.classic | |||
-rw-r--r-- 1 root root 84706486 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_pkglist.classic | |||
-rw-r--r-- 1 root root 733 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release | |||
-rw-r--r-- 1 root root 147 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release.classic | |||
-rw-r--r-- 1 root root 392 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release | |||
-rw-r--r-- 1 root root 46447120 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_pkglist.classic | |||
-rw-r--r-- 1 root root 152 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release.classic | |||
drwxr-xr-x 4 root root 4096 ноя 28 17:58 ../ | |||
[root@z ~]# | |||
</pre> | |||
Может быть, для этого места тоже есть переменная, которую мы можем | |||
переопределить?.. | |||
<pre> | |||
[root@z ~]# apt-config dump | fgrep -6 var/lib/apt | |||
APT ""; | |||
APT::Architecture "x86_64"; | |||
APT::Cache-Limit "536870912"; | |||
APT::DistroVersion ""; | |||
Dir "/"; | |||
Dir::State "var/lib/apt/"; | |||
Dir::State::lists "lists/"; | |||
Dir::State::cdroms "cdroms.list"; | |||
Dir::State::prefetch "prefetch"; | |||
Dir::Cache "var/cache/apt/"; | |||
Dir::Cache::archives "archives/"; | |||
Dir::Cache::srcpkgcache "srcpkgcache.bin"; | |||
[root@z ~]# | |||
</pre> | |||
Да! Только права на /var/lib/apt/lists/ не позволят в него писать. | |||
Можно завести такое место у себя. | |||
Может быть, даже стоит использовать | |||
директорию совместно с другим пользовательскими программами | |||
(apt-аплетом), которые тоже скачивают эти списки: | |||
<pre> | |||
[root@z ~]# l ~imz/.apt/lists/ | |||
итого 167244 | |||
drwxr-xr-x 3 imz imz 4096 янв 29 15:14 ./ | |||
drwxr-xr-x 2 imz imz 4096 янв 29 15:14 partial/ | |||
-rw-r--r-- 1 imz imz 528 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release | |||
-rw-r--r-- 1 imz imz 40060882 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_pkglist.classic | |||
-rw-r--r-- 1 imz imz 147 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release.classic | |||
-rw-r--r-- 1 imz imz 84706486 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_pkglist.classic | |||
-rw-r--r-- 1 imz imz 733 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release | |||
-rw-r--r-- 1 imz imz 147 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release.classic | |||
-rw-r--r-- 1 imz imz 392 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release | |||
-rw-r--r-- 1 imz imz 46447120 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_pkglist.classic | |||
-rw-r--r-- 1 imz imz 152 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release.classic | |||
drwxr-xr-x 4 imz imz 4096 ноя 13 18:04 ../ | |||
[root@z ~]# | |||
</pre> | |||
Итак, добавим в ~/.hasher/extra-apt.conf: | |||
Dir::State::lists "/home/imz/.apt/lists/"; | |||
Вроде бы работает. Только иерархию нужных директорий обязательно надо предварительно создать: {{cmd|mkdir -p ~/.apt/lists/partial}} | |||
(Допишите, пожалуйста, если есть ещё какие-то идеи по кешированию и | |||
ускорению apt в hasher.) | |||
== Получение списка пакетов для установки заданного == | |||
Для разворачивания полного списка файлов пакетов, образующих замыкание зависимостей какого-либо пакета (реального, виртуального или синтетической зависимости) [http://lists.altlinux.org/pipermail/devel/2012-May/194479.html можно воспользоваться] {{cmd|mkaptbox}}: | |||
<pre>$ 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</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]] |
Текущая версия от 03:10, 1 марта 2016
Автоматическое переключение 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@)
См. полный пример от at@ с заданием полностью своего sources.list для hasher.
Кэширование скачиваемых 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
- Неудобно, что при размножении ~/.hasher/*-apt.conf (для разных веток ALTLinux) приходится добавлять конфигурацию для кеширования скачиваемых пакетов в каждый файл. Если общих опций несколько, то, конечно, хочется делать include общего конфигурационного файла для apt; для этого есть специальная директива #include -- см. "man apt.conf".
- Ещё одна неприятность -- то, что pkglist всё время скачиваются заново; например:
$ gear-hsh -- -v --lazy-cleanup hsh: changed working directory to `/tmp/.private/imz/hasher' [...] mkaptbox: Created RPM database in `./var/lib/rpm/'. Получено: 1 http://ftp.altlinux.org x86_64 release [914B] Получено: 2 http://ftp.altlinux.org noarch release [709B] Получено: 3 http://ftp.altlinux.org x86_64-i586 release [573B] Получено 2196B за 0s (7819B/s). Получено: 1 http://ftp.altlinux.org x86_64/classic pkglist [17,4MB] [...]
Неприятно долго ждать. А ведь работа системного apt этого недостатка не имеет, например (вместо "Получено" -- "Найдено"):
[root@z ~]# apt-get update Получено: 1 http://ftp.altlinux.org x86_64 release [914B] Получено: 2 http://ftp.altlinux.org noarch release [709B] Получено: 3 http://ftp.altlinux.org x86_64-i586 release [573B] Получено 2196B за 0s (9125B/s). Найдено http://ftp.altlinux.org x86_64/classic pkglist Найдено http://ftp.altlinux.org x86_64/classic release Найдено http://ftp.altlinux.org noarch/classic pkglist Найдено http://ftp.altlinux.org noarch/classic release Найдено http://ftp.altlinux.org x86_64-i586/classic pkglist Найдено http://ftp.altlinux.org x86_64-i586/classic release Чтение списков пакетов... Завершено Построение дерева зависимостей... 0%
Похоже, что эту проблему тоже можно решить:
Кэширование скачиваемых pkglist
Скачиваемые pkglist кладутся в /var/lib/apt/lists/ :
[root@z ~]# l /var/lib/apt/lists/ итого 167244 drwxr-xr-x 3 root root 4096 янв 29 18:00 ./ drwxr-xr-x 2 root root 4096 янв 29 18:00 partial/ -rw-r----- 1 root root 0 янв 29 18:00 lock -rw-r--r-- 1 root root 528 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release -rw-r--r-- 1 root root 40060882 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_pkglist.classic -rw-r--r-- 1 root root 147 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release.classic -rw-r--r-- 1 root root 84706486 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_pkglist.classic -rw-r--r-- 1 root root 733 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release -rw-r--r-- 1 root root 147 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release.classic -rw-r--r-- 1 root root 392 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release -rw-r--r-- 1 root root 46447120 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_pkglist.classic -rw-r--r-- 1 root root 152 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release.classic drwxr-xr-x 4 root root 4096 ноя 28 17:58 ../ [root@z ~]#
Может быть, для этого места тоже есть переменная, которую мы можем переопределить?..
[root@z ~]# apt-config dump | fgrep -6 var/lib/apt APT ""; APT::Architecture "x86_64"; APT::Cache-Limit "536870912"; APT::DistroVersion ""; Dir "/"; Dir::State "var/lib/apt/"; Dir::State::lists "lists/"; Dir::State::cdroms "cdroms.list"; Dir::State::prefetch "prefetch"; Dir::Cache "var/cache/apt/"; Dir::Cache::archives "archives/"; Dir::Cache::srcpkgcache "srcpkgcache.bin"; [root@z ~]#
Да! Только права на /var/lib/apt/lists/ не позволят в него писать.
Можно завести такое место у себя.
Может быть, даже стоит использовать директорию совместно с другим пользовательскими программами (apt-аплетом), которые тоже скачивают эти списки:
[root@z ~]# l ~imz/.apt/lists/ итого 167244 drwxr-xr-x 3 imz imz 4096 янв 29 15:14 ./ drwxr-xr-x 2 imz imz 4096 янв 29 15:14 partial/ -rw-r--r-- 1 imz imz 528 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release -rw-r--r-- 1 imz imz 40060882 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_pkglist.classic -rw-r--r-- 1 imz imz 147 янв 29 03:23 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_noarch_base_release.classic -rw-r--r-- 1 imz imz 84706486 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_pkglist.classic -rw-r--r-- 1 imz imz 733 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release -rw-r--r-- 1 imz imz 147 янв 29 02:30 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64_base_release.classic -rw-r--r-- 1 imz imz 392 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release -rw-r--r-- 1 imz imz 46447120 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_pkglist.classic -rw-r--r-- 1 imz imz 152 янв 28 22:17 ftp.altlinux.org_pub_distributions_ALTLinux_Sisyphus_x86%5f64-i586_base_release.classic drwxr-xr-x 4 imz imz 4096 ноя 13 18:04 ../ [root@z ~]#
Итак, добавим в ~/.hasher/extra-apt.conf:
Dir::State::lists "/home/imz/.apt/lists/";
Вроде бы работает. Только иерархию нужных директорий обязательно надо предварительно создать: mkdir -p ~/.apt/lists/partial
(Допишите, пожалуйста, если есть ещё какие-то идеи по кешированию и ускорению apt в hasher.)
Получение списка пакетов для установки заданного
Для разворачивания полного списка файлов пакетов, образующих замыкание зависимостей какого-либо пакета (реального, виртуального или синтетической зависимости) можно воспользоваться 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