Что я могу сделать, чтобы ускорить создание репо?

8

Мы используем репозиторий 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

Что я могу сделать, чтобы сделать это быстрее?

JSD
источник
Почему время создания репо имеет значение?
13
1
Разработчики ждут выхода своего кода. Мы перешли от модели «rsync to live boxes» к модели rpm, и они жалуются, что теперь это занимает несколько минут, тогда как раньше это занимало несколько секунд. Я несколько сочувствую их тяжелому положению. Но только немного :)
JSD
Спасибо за объяснение. Я не мог сказать, была ли это однократная задержка или нет.
Ewwhite
Пожалуйста, опубликуйте результаты "после оптимизации", чтобы мы могли видеть, сколько времени сэкономили оптимизации :)
Джошуа Миллер
Использование опций "--cachedir = cache --update --workers 4" сократило время с 50 до 15 секунд, так что огромная победа! Спасибо за очень полезные предложения, ребята!
13

Ответы:

9

--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требует времени и недостаточно помогает.

Майкл Хэмптон
источник
6

На странице man createrepo вы увидите опцию для кэширования.

-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 .

dmourati
источник
4

Вы пытались использовать --workers для многоядерных процессоров? Обычно я использую --workers 4 для создания 4 потоков createrepo

Шау Шоц
источник
2

Используйте createrepo_c , C реализация createrepo

user799109
источник
1
Добро пожаловать в SE. пожалуйста, добавьте некоторую информацию или ссылки на источники, чтобы сделать ваш ответ более полезным.
rubo77 10.07.16