Я пытаюсь создать новую виртуальную машину CentOS 6 на своем хосте CentOS 5, но, похоже, что-то фундаментальное изменилось между этими версиями:
$ rpm -ivh --nodeps --nodigest --ignorearch --ignoreos --force --root=/mnt centos-release-6-0.el6.centos.5.i686.rpm
warning: centos-release-6-0.el6.centos.5.i686.rpm: Header V3 RSA/SHA256 signature: NOKEY, key ID c105b9de
Preparing... ########################################### [100%]
1:centos-release ########################################### [100%]
error: unpacking of archive failed: cpio: Bad magic
$ rpm --version
RPM version 4.4.2.3
Изменилось ли магическое количество RPM между этими версиями? Как мне обойти это?
ИЗМЕНИТЬ (Разъяснение):
я не пытаюсь обновить существующую машину. Я пытаюсь создать новую установку, используя ядро yum --installroot = / mnt groupinstall. Чтобы получить рабочую конфигурацию, первым делом необходимо установить версию rpm, содержащую конфигурацию репозитория yum.
Не могу этого сделать, AFAIK: плохая магия в RPM - наименьшая из проблем.
Вкратце: нет рекомендуемого пути обновления RHEL5-> RHEL6, следовательно, нет Centos5-> 6. Я пробовал немного подтасовывать в этом направлении (у меня самого есть большое количество серверов C5), но отказался от этого.
Учтите, что переход 5-> 6 соответствует переходу ядра Fedora 6-> 12, НО без поддержки предварительного обновления в yum. Таким образом, вы могли бы вставить DVD FC7, загрузиться с
selinux = 0 upgradeany
промыть и повторить с FC8 ... FC11, заканчивая CentOS6. И удачи в этом - говоря о моих собственных машинах, я был бы скорее удивлен, если бы в рабочем состоянии обнаружил что-то более сложное, чем bash - это после пары дней, потраченных на этот забавный подвиг.
Я полагаю, что, вероятно, я бы восстановил (работающую) машину за меньшее время. Что также хорошо, учитывая, что RHEL5 все еще пользуется поддержкой пару лет.
Проблемы
Проблемы заключаются в следующем:
Решение
ПРЕДУПРЕЖДЕНИЕ. Решение проблемы 1, приведенное ниже, ОПАСНО. Если обновление RPM прерывается, вы, скорее всего, получите сломанную систему. Решение проблемы 2 может привести к установке битых пакетов!
Проблему 1 можно обойти, скопировав RPM 4.6 из исходного RPM. Видеть http://orcorc.blogspot.com/2009/03/oh-my-goodness.html.
Построить зависимости для исходного RPM:
$ yum install redhat-rpm-config elfutils-devel elfutils-libelf-devel readline-devel zlib-devel nss-devel gettext-devel libselinux-devel ncurses-devel bzip2-devel python-devel lua-devel xz-devel xz
В моем CentOS dist нет правильного lua. Получено из rpmsearch:
$ rpm -i lua-5.1.2-1.el5.x86_64.rpm lua-devel-5.1.2-1.el5.x86_64.rpm
Установите и соберите исходный RPM. Конечно, могут потребоваться дополнительные пакеты, такие как gcc:
$ rpm -i rpm-4.6.0-4.0.notting.1.el5.src.rpm
$ rpmbuild -ba /usr/src/redhat/SPECS/rpm.spec
Перед установкой заменяющих RPM проверьте:
$ rpm -U --test /usr/src/redhat/RPMS/i386/rpm-4.6.0-4.0.notting.1.i386.rpm /usr/src/redhat/RPMS/i386/rpm-libs-4.6.0-4.0.notting.1.i386.rpm /usr/src/redhat/RPMS/i386/rpm-python-4.6.0-4.0.notting.1.i386.rpm /usr/src/redhat/RPMS/i386/rpm-build-4.6.0-4.0.notting.1.i386.rpm
Теперь мы можем установить базовый план:
$ rpm -i --root=/mnt centos-release-6-0.el6.centos.5.i686.rpm
Проблема 2 может быть решена путем ручного редактирования файлов /usr/lib/python2.4/site-packages/yum (можно использовать магию PYTHONPATH, чтобы сделать это несколько менее хакерским). Разница выглядит так:
--- yum-python/__init__.py 2011-10-05 11:03:00.000000000 +0200
+++ /usr/lib/python2.4/site-packages/yum/__init__.py 2011-10-05 11:14:24.000000000 +0200
@@ -1215,7 +1215,7 @@
if ylp.pkgtup != po.pkgtup:
failed = True
-
+ failed = False
if failed:
# if the file is wrong AND it is >= what we expected then it
# can't be redeemed. If we can, kill it and start over fresh
diff -ru yum-python/yumRepo.py /usr/lib/python2.4/site-packages/yum/yumRepo.py
--- yum-python/yumRepo.py 2011-10-05 11:03:00.000000000 +0200
+++ /usr/lib/python2.4/site-packages/yum/yumRepo.py 2011-10-05 11:12:51.000000000 +0200
@@ -1461,6 +1461,7 @@
else:
file = fn
+ return 1
try:
l_csum = self._checksum(r_ctype, file) # get the local checksum
except Errors.RepoError, e:
Теперь мы готовы выполнить установку группы yum:
$ yum groupinstall --nogpgcheck --installroot=/mnt core
Обратите внимание: поскольку мы отключили большую часть проверки пакетов, на этом этапе установка пакетов может не выполняться. Обратите особое внимание на вывод:
Failed:
python.i686 0:2.6.5-3.el6_0.2 redhat-logos.noarch 0:60.0.14-10.el6
$ yum install --nogpgcheck --installroot=/mnt python redhat-logos
Промыть и повторить.
Поскольку ядро не выполняет никаких настроек системы, вам может потребоваться выполнить любое количество действий перед следующим шагом. Мне нужно предоставить /mnt/etc/resolv.conf.
Теперь у нас есть среда, в которую можно включить задачу 3:
$ SHELL=/bin/bash chroot /mnt
$ yum install zsh
error: cannot open Packages index using db3 - No such file or directory (2)
error: cannot open Packages database in /var/lib/rpm
К счастью, это легко исправить: просто пересоберите / var / lib / rpm:
$ mv /var/lib/rpm/ /var/lib/old.rpm
$ rpm --initdb
На этом этапе я столкнулся с классической проблемой $ releasever, поэтому мне пришлось отредактировать /etc/yum.repos.d/*, чтобы заменить $ releasever на 6. Что-то вроде:
sed -re 's/\$releasever/6/g' -i /etc/yum.repos.d/CentOS-Base.repo
Возможно, есть лучший способ сделать это, но я его не нашел.
$ yum install zsh
Loaded plugins: fastestmirror
Determining fastest mirrors
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. $releasever is not a valid release or hasnt been released yet/
removing mirrorlist with no valid mirrors: /var/cache/yum/i386/$releasever/base/mirrorlist.txt
Error: Cannot find a valid baseurl for repo: base
После этого редактирования yum работает так, как ожидалось, и у меня есть рабочий CentOS 6, созданный на основе CentOS 5. Любая инструкция по настройке chroot-среды / гостевой виртуальной машины для CentOS 6 должна помочь вам получить полноценную систему.
Большой,
в этом случае для меня системный сбой, нужно было сделать что-то более сложное в отношении системы.
Многие вещи так зависят от фактического состояния системы, поэтому различия исключены. Самой важной задачей было решить "RPM: плохая магия"
перед запуском проверьте Другой ПУТЬ !!! так как
Что-то не так? тогда вы можете использовать rpm2cpio или mc для извлечения cpio, затем cpio для извлечения файлов rpm и ручного копирования в папки, не забудьте после этого запустить ldconfig
Так что я собираюсь исправить это на версии el6.
Значит, нужно снова заставить RPM работать, тогда я могу переустановить другие пакеты.
Поскольку система не работает и библиотеки для el6 больше не доступны для установки, необходимо компилировать все, что зависит от источников.
1) установите как можно больше зависимостей из репозитория el5 с помощью yum с пакетами devel, где находятся файлы заголовков, такие как nss3 + devel lzma + devel nspr4 + devel ncurses + devel readline db-4.5.20 + devel rpm-libs + devel
в противном случае необходимо скачать исходники и скомпилировать
2) продолжайте использовать cpio, lzma для получения содержимого SRPM и патчей скачать cpio 2.10+ лучше = с домашней страницы скомпилировать и установить скачать rpm 4.6.0+ лучше = с домашней страницы скомпилировать и установить скачать rpm-libs 4.6.0+ better = с домашней страницы скомпилировать и установить скачать db-4.5.20 better = с домашней страницы скомпилировать и установить
rpm * el6 имеет 4.8. * но для совместимости нормально 4.6+
Если работает rpmbuild --rebuild будет заполнен в средних строках, это означает, что БОГ благословит вас, и вы уже установили правильные версии заголовков и библиотек
Или для других зависимостей скачайте файлы src.rpm Распакуйте rpm, cpio, главный архив примените патчи в одну папку
http://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/
всегда применять патчи, например, указывать правильные имена файлов или создавать символические ссылки в той же папке
ls *.patch.bz2|while read a;do bzcat $a > $a.patch;done
ls *.patch.gz|while read a;do zcat $a > $a.patch;done
ls cpio*.patch|while read p;do patch -p0 < "$p";done
после сборки таких библиотек, как lzma и другие, вам нужно сделать
ldconfig
для настройки RPM
CFLAGS="-lncurses -lnss3 -I/usr/include/nss3 -I/usr/include/nspr4 -lnspr4"
./configure --prefix=/usr --with-lua --with-lzma --with-nss3 --with-nspr4 --with-external-db
make
другие конфигурации, такие как cpio
CFLAGS="-lncurses -lnss3 -I/usr/include/nss3 -I/usr/include/nspr4 -lnspr4"
# or specify bin folder
./configure --prefix=/
make
# test, !!! make backup of rpm binaries and libs in case rollback /usr/lib/rpm /usr/bin /bin and rpm-db
make install
# then move man and other to /usr/share from / where are now
в случае отката вам необходимо вручную переустановить rpm или заменить файлы резервными версиями и запустить ldconfig
команда
Все правильно?
% make install
и продолжайте с «Теперь мы можем установить baseline:» или, если вы предпочитаете, просто обновить, удалите другие репозитории из /etc/yum.repos.d, оставьте только пакеты el6
БУДЬТЕ ВНИМАТЕЛЬНЫ и скажите «нет», если не уверены, что будут какие-то удаления, другие зависимости необходимо установить вручную с помощью rpm.
yum clean all
yum update --skip-broken
package-clean --problems
package-clean --dups
yum update
yum install yum-utils
cd /mnt
createrepo .
НЕКОТОРЫЕ репозитории FIX $ releasever с версией el5
cat << _EOF_ > /etc/yum.repos.d/all-in-one-`date +%s`.repo
[base]
name=CentOS-6.4-colacl-dvd mount
baseurl=file:///mnt
gpgcheck=0
### Name: RPMforge RPM Repository for RHEL 5 - dag
### URL: http://rpmforge.net/
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el5/en/5.7/rpmforge
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/extras
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge-extras
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
[rpmforge-extras]
name = RHEL $releasever - RPMforge.net - extras
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/extras
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge-extras
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1
#---- Packages previously released as 5.7, and its updates
[C5.7-base]
name=CentOS-5.7 - Base
baseurl=http://vault.centos.org/5.7/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.7-updates]
name=CentOS-5.7 - Updates
baseurl=http://vault.centos.org/5.7/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.7-extras]
name=CentOS-5.7 - Extras
baseurl=http://vault.centos.org/5.7/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.7-centosplus]
name=CentOS-5.7 - Plus
baseurl=http://vault.centos.org/5.7/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.6, and its updates
[C5.6-base]
name=CentOS-5.6 - Base
baseurl=http://vault.centos.org/5.6/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.6-updates]
name=CentOS-5.6 - Updates
baseurl=http://vault.centos.org/5.6/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.6-extras]
name=CentOS-5.6 - Extras
baseurl=http://vault.centos.org/5.6/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.6-centosplus]
name=CentOS-5.6 - Plus
baseurl=http://vault.centos.org/5.6/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.5, and its updates
[C5.5-base]
name=CentOS-5.5 - Base
baseurl=http://vault.centos.org/5.5/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.5-updates]
name=CentOS-5.5 - Updates
baseurl=http://vault.centos.org/5.5/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.5-extras]
name=CentOS-5.5 - Extras
baseurl=http://vault.centos.org/5.5/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.5-centosplus]
name=CentOS-5.5 - Plus
baseurl=http://vault.centos.org/5.5/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.4 and its updates
[C5.4-base]
name=CentOS-5.4 - Base
baseurl=http://vault.centos.org/5.4/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.4-updates]
name=CentOS-5.4 - Updates
baseurl=http://vault.centos.org/5.4/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.4-extras]
name=CentOS-5.4 - Extras
baseurl=http://vault.centos.org/5.4/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.4-centosplus]
name=CentOS-5.4 - Plus
baseurl=http://vault.centos.org/5.4/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.3 and its updates
[C5.3-base]
name=CentOS-5.3 - Base
baseurl=http://vault.centos.org/5.3/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.3-updates]
name=CentOS-5.3 - Updates
baseurl=http://vault.centos.org/5.3/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.3-extras]
name=CentOS-5.3 - Extras
baseurl=http://vault.centos.org/5.3/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.3-centosplus]
name=CentOS-5.3 - Plus
baseurl=http://vault.centos.org/5.3/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.2 and its updates
[C5.2-base]
name=CentOS-5.2 - Base
baseurl=http://vault.centos.org/5.2/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.2-updates]
name=CentOS-5.2 - Updates
baseurl=http://vault.centos.org/5.2/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.2-extras]
name=CentOS-5.2 - Extras
baseurl=http://vault.centos.org/5.2/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.2-centosplus]
name=CentOS-5.2 - Plus
baseurl=http://vault.centos.org/5.2/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.1 and its updates
[C5.1-base]
name=CentOS-5.1 - Base
baseurl=http://vault.centos.org/5.1/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.1-updates]
name=CentOS-5.1 - Updates
baseurl=http://vault.centos.org/5.1/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.1-extras]
name=CentOS-5.1 - Extras
baseurl=http://vault.centos.org/5.1/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.1-centosplus]
name=CentOS-5.1 - Plus
baseurl=http://vault.centos.org/5.1/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.0 and its updates
[C5.0-base]
name=CentOS-5.0 - Base
baseurl=http://vault.centos.org/5.0/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.0-updates]
name=CentOS-5.0 - Updates
baseurl=http://vault.centos.org/5.0/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.0-extras]
name=CentOS-5.0 - Extras
baseurl=http://vault.centos.org/5.0/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.0-centosplus]
name=CentOS-5.0 - Plus
baseurl=http://vault.centos.org/5.0/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[basee]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#released updates
[updatese]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#additional packages that may be useful
[extrase]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#additional packages that extend functionality of existing packages
[centospluse]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#contrib - packages by Centos Users
[contribe]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
#---- Packages previously released as 5.8, and its updates
[C5.8-base]
name=CentOS-5.8 - Base
baseurl=http://vault.centos.org/5.8/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.8-updates]
name=CentOS-5.8 - Updates
baseurl=http://vault.centos.org/5.8/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.8-extras]
name=CentOS-5.8 - Extras
baseurl=http://vault.centos.org/5.8/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
[C5.8-centosplus]
name=CentOS-5.8 - Plus
baseurl=http://vault.centos.org/5.8/centosplus/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
_EOF_
С удовольствием вас приглашаю на мои странички, чем кто любит, любит.