Мы используем репозиторий yum для распространения нашего программного обеспечения на наши производственные экземпляры. К сожалению, createrepo становится узким местом, и у нас в репозитории всего 469 пакетов.
$ time createrepo /opt/tm-yum-repo
Spawning worker 0 with 469 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
real 0m43.188s
user 0m37.798s
sys 0m1.296s
Что я могу сделать, чтобы это было быстрее?
В --cachedir
вариант, данный dmourati в его ответе, поможет вам, но вы также должны использовать --update
, особенно если вы не заменяете сразу все 469 пакетов.
--update
If metadata already exists in the outputdir and an rpm is
unchanged (based on file size and mtime) since the metadata was
generated, reuse the existing metadata rather than recalculating
it. In the case of a large repository with only a few new or
modified rpms this can significantly reduce I/O and processing
time.
Кроме того, рассмотрите возможность создания отдельного репозитория для этого пакета, если его развертывание таким образом действительно чувствительно ко времени и --update
недостаточно помогает.
На странице руководства createrepo вы увидите вариант cachedir.
-c --cachedir <path>
Specify a directory to use as a cachedir. This allows createrepo
to create a cache of checksums of packages in the repository. In
consecutive runs of createrepo over the same repository of files
that do not have a complete change out of all packages this
decreases the processing time dramatically.
Я бы начал там.
Если бы это не ускорило создание репозитория, я бы посмотрел на SSD или tmpfs.
Вы пробовали использовать --workers для многоядерных процессоров? Обычно я использую --workers 4 для создания 4 потоков createrepo
Использовать createrepo_c, C реализация createrepo