Yum не работает с репозитариями для source rpm.
Погуглив нашёл ссылку на блог: http://www.imminentweb.com/technologies/yum-download-source-rpm
В основном репозитарии существует пакет yum-utils с утилитами для облегчения работы или для выполнения дополнительных служебных функций связаных с использованием yum-репозитарев. man yum-utils(1):
debuginfo-install - install debuginfo packages and their dependenciesСреди них - yumdownloader - может скачивать пакеты в нужную директорию, разрешать и скачивать зависимости пакетов, показывать полные URL закачек и работать с репозитариями пакетов с исходными кодами.
package-cleanup - manage package cleanup, duplicates, orphaned packages and outstanding dependency problems
repo-graph - outputs a full package dependency list in dot format
repo-rss - generates an RSS feed from one or more repositories
repoclosure - reads metadata of repositories, checks dependencies and displays list of unresolved dependencies
repodiff - takes two or more repositories, returns a list of added, removed or changed packages
repomanage - manages a directory of rpm packages, returns a list of newest or oldest packages in a directory
repoquery - query yum repositories and get additional information on the them
reposync - synchronize a remote yum repository to a local directory using yum to retrieve packages
repotrack - track packages and its dependencies and downloads them
yum-builddep - installs missing dependencies to build a specified package
yum-complete-transaction - finds incomplete or aborted yum transactions and attempts to complete them
yumdownloader - downloads packages from yum repositories including source RPMs
Остаётся только создать файл конфигурации для нового репозитария.
По ссылке http://www.imminentweb.com/technologies/yum-download-source-rpm уже записан один репозитарий. Если посмотреть на структуру директорий ftp-заркала CentOS, то видно что это исходники для бинарного репозитария [base]. Необходимо добавить репозитарии SRPMS для остальных имеющихся бинарных репозитариев ([updates], [addons], [extras], [centosplus], [contrib]). Также лучше настроить источники на российские зеркала.
Все зеркала можно узнать из файла в кэше yum, например для основного (base) репозитария:
[root@hq1 ~]# cat /var/cache/yum/base/mirrorlist.txt
http://mirror.svk.su/centos/5.3/os/i386/
http://mirror.corbina.net/pub/Linux/centos/5.3/os/i386/
http://mirror.yandex.ru/centos/5.3/os/i386/
http://ftp.funet.fi/pub/mirrors/centos.org/5.3/os/i386/
http://centos.siirappi.com/centos/5.3/os/i386/
http://centos.ustc.edu.cn/centos/5.3/os/i386/
http://centos.yubis.org/5.3/os/i386/
http://ftp.daum.net/centos/5.3/os/i386/
http://mirror.khlug.org/centos/5.3/os/i386/
http://centos.mirror.cdnetworks.com/5.3/os/i386/
[root@hq1 ~]# cat /var/cache/yum/base/mirrorlist.txt >> /etc/yum.repos.d/CentOS-SRPMS.repo
[root@hq1 ~]# vim /etc/yum.repos.d/CentOS-SRPMS.repo
### michaelus <--->Проверяем:
[base-SRPMS]
name=CentOS-$releasever - Base SRPMS
baseurl=http://mirror.svk.su/centos/$releasever/os/SRPMS/
http://mirror.corbina.net/pub/Linux/centos/$releasever/os/SRPMS/
http://mirror.yandex.ru/centos/$releasever/os/SRPMS/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[mike@hq1 ~]$ sudo yum repolistПробуем закачать (посмотреть URL):
Loaded plugins: allowdowngrade, changelog, downloadonly, list-data, merge-conf, priorities, protectbase, verify, versionlock
base-SRPMS | 951 B 00:00
primary.xml.gz | 308 kB 00:02
base-SRPMS 1186/1186
repo id repo name status
addons CentOS-5 - Addons enabled : 0
adobe-linux-i386 Adobe Systems Incorporated enabled : 17
base CentOS-5 - Base enabled : 2,508
base-SRPMS CentOS-5 - Base SRPMS enabled : 1,186
extras CentOS-5 - Extras enabled : 312
updates CentOS-5 - Updates enabled : 415
repolist: 4,438
[mike@hq1 ~]$ yumdownloader --urls --source kernelПолучаем фиг. Замечаем строку сообщения: "1161 packages excluded due to repository protections". Это практически столько пакетов как раз в репозитарии base-SRPMS, замечаем также сообщение что yumdownloader использует установленный плагин yum-protectbase. Пробуем с отключёнными плагинами:
Loaded plugins: priorities, protectbase, versionlock
primary.xml.gz | 308 kB 00:02
base-SRPMS 1186/1186
primary.xml.gz | 282 kB 00:02
updates 415/415
1161 packages excluded due to repository protections
Reading version lock configuration
No source RPM found for kernel-2.6.18-128.1.14.el5.i686
No source RPM found for kernel-2.6.18-128.4.1.el5.i686
No source RPM found for kernel-2.6.18-128.1.6.el5.i686
No source RPM found for kernel-2.6.18-128.2.1.el5.i686
No source RPM found for kernel-2.6.18-128.1.1.el5.i686
No source RPM found for kernel-2.6.18-128.1.16.el5.i686
No source RPM found for kernel-2.6.18-128.el5.i686
No source RPM found for kernel-2.6.18-128.1.10.el5.i686
Nothing to download
[mike@hq1 ~]$ yumdownloader --noplugins --urls --source kernelВсё ОК, за исключением того что исходники для апдейтов ядра не найдены, что понятно т.к. у нас подключён только репозитарий исходников для базового бинарного репозитария.
No source RPM found for kernel-2.6.18-128.1.14.el5.i686
No source RPM found for kernel-2.6.18-128.4.1.el5.i686
No source RPM found for kernel-2.6.18-128.1.6.el5.i686
No source RPM found for kernel-2.6.18-128.2.1.el5.i686
No source RPM found for kernel-2.6.18-128.1.1.el5.i686
No source RPM found for kernel-2.6.18-128.1.16.el5.i686
No source RPM found for kernel-2.6.18-128.1.10.el5.i686
http://mirror.svk.su/centos/5/os/SRPMS//kernel-2.6.18-128.el5.src.rpm
Если посмотреть код yumdownloader, то можно увидеть что там используется дополнительная неописанная в man page логика обработки списка системных репозитариев:
82 def setupSourceRepos(self):Т.е. для каждого активного бинароного репозитария ищется соответсвующее ему имя репозитария с суфиксом '-source' и если этот репозитарий выключен, то он разблокируется в предположении что типа это репозитарий с исходниками соответсвующими бинарному репо (и наоборот).
83 # enable the -source repos for enabled primary repos
84 archlist = rpmUtils.arch.getArchList() + ['src']
85 # Ok, we have src and bin repos. What we want to do here is:
86 #
87 # 1. _enable_ source repos for which the bin repos are enabled.
88 # 2. _disable_ the _other_ src repos.
89 #
90 # ...also we don't want to disable the src repos. for #1 and then
91 # re-enable them as then we get annoying messages and call .close() on
92 # them losing the primarydb data etc.
93
94 # Get all src repos.
95 src_repos = {}
96 for repo in self.repos.findRepos('*-source'):
97 src_repos[repo.id] = False
98
99 # Find the enabled bin repos, and mark their respective *-source repo.
100 # as good.
101 for repo in self.repos.listEnabled():
102 if repo.id not in src_repos:
103 srcrepo = '%s-source' % repo.id
104 if srcrepo in src_repos:
105 src_repos[srcrepo] = True
106
107 # Toggle src repos that are set the wrong way
108 for repo in self.repos.findRepos('*-source'):
109 if repo.isEnabled() and not src_repos[repo.id]:
110 repo.close()
111 self.repos.disableRepo(repo.id)
112 if not repo.isEnabled() and src_repos[repo.id]:
113 self.logger.info('Enabling %s repository' % repo.id)
114 repo.enable()
115 # Setup the repo, without a cache
116 repo.setup(0)
117 # Setup pkgSack with 'src' in the archlist
118 self._getSacks(archlist=archlist, thisrepo=repo.id)
Добавим по образу и подобию остальные репозитарии:
### michaelus <--->
[base-SRPMS]
name=CentOS-$releasever - Base SRPMS
baseurl=http://mirror.svk.su/centos/$releasever/os/SRPMS/
http://mirror.corbina.net/pub/Linux/centos/$releasever/os/SRPMS/
http://mirror.yandex.ru/centos/$releasever/os/SRPMS/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[updates-SRPMS]
name=CentOS-$releasever - Updates SRPMS
baseurl=http://mirror.svk.su/centos/$releasever/updates/SRPMS/
http://mirror.corbina.net/pub/Linux/centos/$releasever/updates/SRPMS/
http://mirror.yandex.ru/centos/$releasever/updates/SRPMS/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[addons-SRPMS]
name=CentOS-$releasever - Addons SRPMS
baseurl=http://mirror.svk.su/centos/$releasever/addons/SRPMS/
http://mirror.corbina.net/pub/Linux/centos/$releasever/addons/SRPMS/
http://mirror.yandex.ru/centos/$releasever/addons/SRPMS/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[extras-SRPMS]
name=CentOS-$releasever - Extras SRPMS
baseurl=http://mirror.svk.su/centos/$releasever/extras/SRPMS/
http://mirror.corbina.net/pub/Linux/centos/$releasever/extras/SRPMS/
http://mirror.yandex.ru/centos/$releasever/extras/SRPMS/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[centosplus-SRPMS]
name=CentOS-$releasever - Plus SRPMS
baseurl=http://mirror.svk.su/centos/$releasever/centosplus/SRPMS/
http://mirror.corbina.net/pub/Linux/centos/$releasever/centosplus/SRPMS/
http://mirror.yandex.ru/centos/$releasever/centosplus/SRPMS/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[contrib-SRPMS]
name=CentOS-$releasever - Contrib SRPMS
baseurl=http://mirror.svk.su/centos/$releasever/contrib/SRPMS/
http://mirror.corbina.net/pub/Linux/centos/$releasever/contrib/SRPMS/
http://mirror.yandex.ru/centos/$releasever/contrib/SRPMS/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
И выведем их список через yum:
[mike@hq1 ~]$ sudo yum repolistВидим, что для директории addons/SRPMS/ на зеркале не создана база repodata (несмотря что в репозитарии нет ни одного пакета, эта структура должан быть создана, как например для репозитария [contrib]). Видимо упустили, можно написать багрепорт, но проще просто выключить это репо.
Loaded plugins: allowdowngrade, changelog, downloadonly, list-data, merge-conf, priorities, protectbase, verify, versionlock
adobe-linux-i386 | 951 B 00:00
base-SRPMS | 951 B 00:00
updates-SRPMS | 951 B 00:00
primary.xml.gz | 37 kB 00:00
updates-SRPMS 122/122
extras-SRPMS | 951 B 00:00
primary.xml.gz | 37 kB 00:00
extras-SRPMS 155/155
http://mirror.svk.su/centos/5/addons/SRPMS/repodata/repomd.xml: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.
http://mirror.corbina.net/pub/Linux/centos/5/addons/SRPMS/repodata/repomd.xml: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.
http://mirror.yandex.ru/centos/5/addons/SRPMS/repodata/repomd.xml: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: addons-SRPMS. Please verify its path and try again
[mike@hq1 ~]$ sudo yum repolistПробуем закачать (посмотреть URL):
Loaded plugins: allowdowngrade, changelog, downloadonly, list-data, merge-conf, priorities, protectbase, verify, versionlock
base-SRPMS | 951 B 00:00
updates-SRPMS | 951 B 00:00
extras-SRPMS | 951 B 00:00
base | 1.1 kB 00:00
updates | 951 B 00:00
addons | 951 B 00:00
extras | 1.1 kB 00:00
repo id repo name status
addons CentOS-5 - Addons enabled : 0
adobe-linux-i386 Adobe Systems Incorporated enabled : 17
base CentOS-5 - Base enabled : 2,508
base-SRPMS CentOS-5 - Base SRPMS enabled : 1,186
extras CentOS-5 - Extras enabled : 312
extras-SRPMS CentOS-5 - Extras SRPMS enabled : 155
updates CentOS-5 - Updates enabled : 415
updates-SRPMS CentOS-5 - Updates SRPMS enabled : 122
repolist: 4,715
[mike@hq1 ~]$ yumdownloader --noplugins --urls --source kernelТеперь загружаются исходники для последней установленной версии ядра. Загрузить можно также и промежуточную версию пакета, для этого следует указать полное имя пакета включая его версию (часть имени до расширения *.src.rpm).
primary.xml.gz | 37 kB 00:00
updates-SRPMS 122/122
primary.xml.gz | 37 kB 00:00
extras-SRPMS 155/155
http://mirror.svk.su/centos/5/updates/SRPMS//kernel-2.6.18-128.4.1.el5.src.rpm
[root@hq1 ~]# yumdownloader --noplugins --destdir /usr/local/src/redhat/SRPMS/ --source kernel-2.6.18-128.el5
No comments:
Post a Comment