Началось все с того, что техподдержка мастерхоста отказала в установке операционки на наш выбор. А разрешается на их виртуальные серверы ставить только дебиан 5, федору 7 и центос 5. Пятый дебиан полностью устроил бы, если бы в нем уже был апстарт, а будет апстарт только в шестой версии. И без него никак. А так как операционки на наших старых серверах уже давно устарели (Ubuntu 6.10 последовательно обновленная до 8.04), пришла пора все менять.
У нас в офисе уже полтора года вертится несколько OpenVZ-контейнеров. Для домашних нужд все подходит просто прекрасно. Вдобавок, из экспериментов с OpenVZ удалось вынести несколько полезных наблюдений. Вот они, кстати. Чистый виртуозный контейнер — это всего-лишь небольшая папочка да один конфиг. Готовых контейнеров с разными дистрибутивами линукса пруд пруди. Всей виртуализации в OpenVZ, по большому счету: изоляция файловой системы, разделение памяти и процессора, да айпишников. Ядро одно на всех, тип файловой системы — один, и никакой магии с виртуализацией устройств. А еще свою виртуалку внутри контейнера не запустишь (если только полноценный эмулятор запустить). Итого, с одной стороны — никакой тонкой настройки под железо, а с другой — никакого геморроя с этим железом. Вдобавок, возможен интересный трюк, о котором эта статья.
Итак. Ось можно элементарно заменить, удалив все файлы старой системы и заменив файлами из новой. Конечно, в процессе надо не уронить уже запущенную систему и суметь потом попасть в новую. Иначе получим кирпич вместо сервера. И, да, прочитайте, пожалуйста, весь пост до конца, чтобы понять, сумеете ли вы потом получить доступ к новой системе, или, хотя бы, восстановить старую.
Подготовительный этап
- делаем полный бекап контейнера (лучше создайте новый и мучайте его);
- заходим под рутом по SSH;
- создаем папочку
new-systemтам, где вам удобно; - скачиваем в
new-systemобраз новой оси (у меня этоubuntu-10.04-x86.tar.gz); - заходим в
new-systemи распаковываем образ (tar xzf ubuntu-10.04-x86.tar.gz).
В итоге, папочка new-system (у меня /root/new-system) содержит структуру каталогов новенькой операционки. На следующем шаге мы заменим текущую операционку новой. Только, вот один важный момент. В данном примере новая система родственна старой (сестрички Ubuntu 10.04 и Debian 5.0), поэтому надо будет заменить всего несколько папок, оставив остальные нетронутыми. Если вы собираетесь менять федору на генту, будьте готовы немного поэкспериментировать.
Заеняем системные файлы
Для того, чтобы сократить период перехода системы из одного состояния в другое, не стоит сразу удалять папки старой системы. Достаточно переименовать их, а на их место переместить новые. Так как мы заменяем все привычные программы, типа mv, rm, mkdir, придется делать все вручную прямо из sftp-клиента.
- переименовываем эти папки новой системы:
bin,dev,etc,lib,sbin,usr,var, во что-то типаbin1,dev1,etc1и т.д.; - перемещаем переименованные папки из
new-systemв корень, они встанут бок о бок с папками текущей оси; - одну за другой переименовываем получившиеся пары по такому шаблону
bin⟶bin0,bin1⟶bin.
Перезагружаемся. Запустится новая система. Так как мы развернули кем-то заранее подготовленный образ, в нем уже будет запущен sshd. Только вот пароль рута будет другой. Если вы обновляли контейнер на хостинге с контрольной панелью (которая, на 4643-м порту), то можете смело менять его оттуда. Можно схитрить и сохранить файл /root/.ssh/authorized_keys от старой системы. Тогда нас пустят по ключу, и можно будет спокойно менять пароль рута через passwd. Теперь оставшиеся от старой системы папки можно спокойно удалять (или архивировать на память).
П.С. У нас контейнеры такие: Linux vXXXX.vps.masterhost.ru 2.6.18-028stab070.7 #1 SMP Fri Oct 1 13:53:00 MSD 2010 i686 GNU/Linux.