Обычно с обновлением linux, проблем не возникает: написал в командной строке yum update, подождал, перезагрузил и готово. Но бывают случаи, когда надо обновить до конкретной версии ядра или просто на серверах нет интернета. В такой момент очень помогает офлайн обновление.
Давайте попробуем на примере обновить CentOS версии 1611 до версии 1708:
- Проверяем текущую версию ОС
[root@test ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
2. Подключаем образ ОС с версией 1708 и монтируем его в папку /mnt/iso
[root@test ~]# mkdir /mnt/iso
[root@test ~]# lsscsi
[0:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sda
[0:0:1:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr0
[root@test ~]# mount -t iso9660 -o ro /dev/sr0 /mnt/iso
[root@test ~]# ls -l /mnt/iso
#В данном примере мы монтируем физический диск, вставленный в сервер.
#Если на сервере просто лежит ISO-образ, то команда монтирования будет следующей
[root@test ~]# mount -o loop <iso_name> /mnt/iso
3. Проверка числового значения, находящегося в первой строке файла .discinfo
[root@test iso]# head -n1 /mnt/iso/.discinfo
1504618416.850667
4. Переходим в каталог /etc/yum.repos.d/ и временно переносим от туда все каталоги с текущими репозиториями в каталог /root/old_repo:
[root@test iso]# cd /etc/yum.repos.d/
[root@test yum.repos.d]# ls -la
total 40
drwxr-xr-x. 2 root root 187 Nov 15 2016 .
drwxr-xr-x. 78 root root 8192 Jul 30 10:59 ..
-rw-r--r--. 1 root root 1664 Nov 29 2016 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Nov 29 2016 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Nov 29 2016 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 Nov 29 2016 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 Nov 29 2016 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Nov 29 2016 CentOS-Sources.repo
-rw-r--r--. 1 root root 2893 Nov 29 2016 CentOS-Vault.repo
[root@test yum.repos.d]#
[root@test yum.repos.d]#
[root@test yum.repos.d]# mkdir /root/old_repo
[root@test yum.repos.d]# mv *.repo /root/old_repo/
[root@test yum.repos.d]# ls -la
total 12
drwxr-xr-x. 2 root root 6 Jul 30 11:19 .
drwxr-xr-x. 78 root root 8192 Jul 30 10:59 ..
[root@test yum.repos.d]#
5. Создаём файл с расширением .repo (iso.repo) vi iso.repo и указываем его параметры:
[offline_repo]
#В media_id указываем значение, которое получили в 3 пункте
mediaid=1504618416.850667
#name должно совпадать с именем репозитория в квадратных скобках
name=offline_repo
#Указываем адрес до смонтированного каталога
baseurl=file:///mnt/iso/
#Указываем наш ключ
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#Параметр показывает что к этому репозиторию можно обращаться
enabled=1
#Включить проверку ключа
gpgcheck=1
6. Запускаем процесс обновления: yum update
7. После успешного обновления проверяем текущую версию ОС:
[root@test yum.repos.d]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
8. Отключаем диск с образом, перезагружаем ОС, возвращаем на место старые репозитории, удаляем файл с оффлайн репозиторием:
[root@test ~]# umount /mnt/iso
[root@test ~]# reboot
[vagrant@test ~]$ cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@test ~]# rm /etc/yum.repos.d/iso.repo
rm: remove regular file ‘/etc/yum.repos.d/iso.repo’? y
[root@test ~]#
#После удаления файла с нашим репозиторием в каталоге должны остаться файлы с другими репозиториями. У меня они подтянулись с перезагрузкой
[root@test ~]# ls -l /etc/yum.repos.d/
total 28
-rw-r--r--. 1 root root 1664 Aug 30 2017 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Aug 30 2017 CentOS-CR.repo
-rw-r--r--. 1 root root 649 Aug 30 2017 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 314 Aug 30 2017 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 630 Aug 30 2017 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Aug 30 2017 CentOS-Sources.repo
-rw-r--r--. 1 root root 3830 Aug 30 2017 CentOS-Vault.repo
[root@test ~]#
Если после перезагрузки файлы не вернулись обратно в каталог — просто перенестите их из каталога /root/old_repo следующей командой:
mv /root/old_repo/*.repo /etc/yum.repos.d/
Если просто ввести команду yum update, то ОС обновится просто до последней версии репозитория.