!
Linux User Group НовосибирскОт теории к практике. Собственно, из-за чего есть пошёл весь сыр-бор.
Обновление системы в Linux можно делать по большей части без перезапуска и ухода в отдельный спецрежим. Для бинарных дистрибутивов это процесс даже достаточно быстрый. Если только не надо обновляться на следующий релиз…
Вобщем у всех систем главная проблема одна и та же — после серьёзного обновления система может оказаться поломанной и перестать запускаться полностью или частично. И в этом случае предусмотрительно сделанный снимок в состоянии спасти положение дел.
Но есть и другая особенность — хотя #
Linux и позволяет заменять в данный момент используемые файлы и до перезапуска/перепрочтения прежняя версия продолжит работать как ни в чём не бывало, иногда нужно за время обновления запустить новую или перезапустить запущенную программу. С предсказуемым результатом.
ПроблемаОбновление #
Gentoo, особенно когда обновляешься редко, занимает много времени.
В процессе таких обновлений может поменяться много чего, в частности библиотеки и фреймворки, от которых зависят другие пакеты.
Между обновлением библиотеки и нужной программы может пройти некоторое время, в пределах которого программа запускаться не сможет.
В итоге это приводит к тому, что работать одновременно с обновлением становится проблематично. Программы нельзя перезапускать, запуск новых невозможен. При обновлении Qt/Gtk основанные на них ДЕ начинают рассыпаться по кускам.
Решение первое — обновляемся авансомPortage умеет собирать и откладывать бинарные пакеты для последующей быстрой установки при помощи ключа в
emerge --buildpkg-only
или собирать, ставить и откладывать при помощи
emerge --buildpkg
.
Но в первом случае он не сможет собрать пакеты, который зависят от обновления других. Во втором, он их всё равно ставит.
По этому делаем следующий финт ушами:
0. Делаем ro снимок всех файловых систем, на всякий случай.
1. Делаем rw снимок всех файловых систем, кроме /home, поскольку оно обновлением не затрагивается.
2. Монтируем наши rw снимки куда-нибудь (если у вас отдельные /var, /opt, /usr и что-то ещё, монтируем внутрь), чтобы получился chroot.
3. Подмонтируем runtime директории /dev, /sys, /proc, /run в наш chroot при помощи
mount --rbind
, чтобы всякие /sys/fs/cgroup, /dev/shm и так далее, тоже примонтировались.
4. Делаем chroot в полученную структуру.
5. Обновляем систему с
emerge --buildpkg
, чтобы в PKGDIR были собраны все необходимые пакеты.
6. После успешного обновления переносим пакеты из PKGDIR снапшота в основную систему.
7. На основной системе обновляе