Создание локального репозитория

Материал из База знаний проекта Russian Fedora

Перейти к: навигация, поиск

Иногда возникает необходимость создать локальный репозиторий пакетов. Есть два способа создать локальный репозиторий.

Заметка: Пример взят из Red Hat Knowledgebase.

Содержание


Способ 1

1. Необходимо создать директорию, в которой и будет хранится репозиторий:

# mkdir -p /usr/share/repository


2. Для создания репозитория скопируйте в этот каталог все пакеты RPM, которые планируется использовать:

# cd /usr/share/repository
# createrepo .
# yum clean all

Заметка: Прежде, чем эта команда будет выполнена, пакет createrepo уже должен быть установлен в системе.

3. Создайте файл /etc/yum.repos.d/file.repo со следующим содержимым:

# cat /etc/yum.repos.d/file.repo
[RHEL_5_Repository]
baseurl=file:///usr/share/repository
enabled=1

4. Получите список пакетов:

# yum list

5. Теперь можно будет установить необходимый пакет. Например:

# yum install httpd


Способ 2

Здесь описывается другой способ создания репозитория, при котором нет необходимости копировать файлы RPM на жесткий диск. Образ дистрибутива уже содержит в себе директории с данными, и ими можно пользоваться напрямую.

1. Смонтируйте образ:

# mount -o loop,ro rhel-5.2-server-i386-dvd.iso /mnt/iso 

2. Создайте файл /etc/yum.repos.d/file.repo:

# cat /etc/yum.repos.d/file.repo
[RHEL_5_Server_Repository]
baseurl=file:///mnt/iso/Server
enabled=1

[RHEL_5_VT_Repository]
baseurl=file:///mnt/iso/VT
enabled=1

3. Теперь можно установить необходимый пакет:

# yum install httpd



LinuxForum.ru

Создание зеркала репозитория с помощью wget

С обновлениями немного сложнее. Лица, имеющие выход по rsync, выбирают себе зеркало и синхронизируются с него.

  # /usr/bin/rsync -iavrt rsync://ftp.tlk-l.net/pub/mirrors/centos.org/5.2/updates/x86_64/ /var/www/html/centos/5.2/updates/x86_64/

Если же rsync закрыт, то зеркалирование выполняется немного сложнее. На www.opennet.ru я нашел скрипт, при помощи которого можно засинхронизировать каталоги репозитария по HTTP.

$ sudo nano update_mirror.sh
  #!/bin/sh
  cd /opt/rpm-update
  #mirror_base_url=http://ftp.belnet.be/packages/centos/4.3/os/i386/CentOS/RPMS/
  #mirror_update_url=http://ftp.belnet.be/packages/centos/4.3/updates/i386/RPMS/
  mirror_base_url=$1
  local_rpm_directory=$2
  #local_rpm_directory=/var/ftp/pub/centos-4.3/
  file_html=./index.html
  file_rpms=./files.log
  rm -f $file_html
  rm -f $file_rpms
  echo "---------------------------------------------------------"
  echo "obtaining file list from $mirror_base_url ..."
  wget -q --no-cache $mirror_base_url
  echo "ok."
  cut -d"=" $file_html -f4 | cut -d"\"" -f2 | grep rpm | sort > $file_rpms
  a=`cat $file_rpms`
  for cur_rpm in $a
  do
      cur_rpm_file=$local_rpm_directory$cur_rpm
      if [ -e $cur_rpm_file ]
      then
          echo "$cur_rpm exist." > /dev/null
      else
          echo "downloading  $cur_rpm ..."
          wget -q --no-cache $mirror_base_url$cur_rpm
          echo "ok."
          mv ./$cur_rpm $local_rpm_directory
      fi
  done
  rm -f $file_html
  rm -f $file_rpms
  $ chmod +x update_mirror.sh

Сам скрипт можно чуточку подправить, чтобы он заработал. Вместо строки:

  cut -d"=" $file_html -f4 | cut -d"\"" -f2 | grep rpm | sort > $file_rpms

Можно прописать:

  cut -d">" $file_html -f4 | cut -d"<" -f1 | grep rpm | sort > $file_rpms

Запускать скрипт можно так:

  # ./update_mirror.sh http://ftp.tlk-l.net/pub/mirrors/centos.org/5.2/updates/x86_64/RPMS/ /var/www/html/centos/5.2/updates/x86_64/RPMS

Удобно! А если нам надо синхронизироваться с нескольких репозиториев, то стоит всё автоматизировать. Создаём вызов скрипта:

  #!/bin/sh
  echo "***** run4 START ***** " >> /var/log/rpm_update4
  /opt/rpm-update/update_mirror.sh
  http://ftp.belnet.be/packages/centos/4.3/updates/i386/RPMS/ /var/ftp/pub/centos-4.3/
>> /var/log/rpm_update4
  /opt/rpm-update/update_mirror.sh
  http://ftp.belnet.be/packages/centos/4.3/os/i386/CentOS/RPMS/ /var/ftp/pub/centos-4.3/
>> /var/log/rpm_update4
  /opt/rpm-update/update_mirror.sh
  http://ftp.belnet.be/packages/centos/4.3/extras/i386/RPMS/ /var/ftp/pub/centos-4.3/
>> /var/log/rpm_update4
  echo "generating headers..." >> /var/log/rpm_update4
  yum-arch -q /var/ftp/pub/centos-4.3/
  echo "ok." >> /var/log/rpm_update4
  echo "generating repo..." >> /var/log/rpm_update4
  createrepo -q /var/ftp/pub/centos-4.3/
  echo "ok." >> /var/log/rpm_update4
  echo "***** run4 STOP ***** " >> /var/log/rpm_update4

Вызывается по cron, если на сервере появились свежие пакеты, быстренько заливает их в локальный репозитарий.

--budda27 14:28, 6 сентября 2012 (UTC)

как создавать подписи для репозитория и многое другое по ссылке: http://sbr600blog.blogspot.com/2012/04/raspi-repositories-03-completed-package.html