Обновление версии вашего дистрибутива Linux

Как низвергнуть и воскресить ваш Linux!

Цель этого документа - предложить вам набор подсказок, которые могут помочь в процессе полной переустановки системы. Это ни в коем случае не рецептурник для чайников; однако, я надеюсь, что этот труд послужит вам некоторого рода путеводителем, заставив о чем-то поразмыслить, а также предложит порядок действий. Он наверняка бы помог мне, если бы кто-нибудь другой написал что-то подобное до того, как я сделал свой первый апгрейд (upgrade); поэтому я надеюсь помочь вам, если у вас есть планы перестройки Linux.

Однако, не пытайтесь воспринимать этот текст, как библию - ваши действия могут отличаться от моих. Даже названия каталогов могут сильно различаться от тех, которые есть у вас; некоторые люди, например, используют /usr/home вместо /home; некоторые называют его /u, а некоторые (держитесь крепче! :) даже помещают каталоги пользователей прямо в каталог /usr! Я не могу знать настроек вашей системы, поэтому использую те названия, которые есть на моей машине.

Также вы можете заметить, что я использовал дистрибутивы Slackware, и я предполагаю, что у вас достаточно ОЗУ и места на жестком диске для установки исходных текстов, и сборки собственного ядра. Если ваша система сильно отличается от приведенной в примерах, то некоторые мои рекомендации будут неприменимы; но я надеюсь, что вы сможете понять общие принципы, которые помогут вам в процессе перестройки.

Почему это кому-то может понадобиться?

Хороший вопрос! Если этого можно избежать, избегайте! (Это единственная самая главная рекомендация в данном руководстве!!!) Но бывают случаи, когда вам все-таки придется это сделать.

Например, я установил жесткий диск на 4 Гб и затем выяснил, что дистрибутив Slackware 2.0 Vintage Linux не мог себе представить, что диски бывают больше 2 Гб, и начались ужасные проблемы. Поэтому мне пришлось переходить на новый тогда Slackware 2.3. Тот апгрейд был жутко изнурительным экспериментом, и стал, частично, причиной написания этого документа. Я, практически, все делал неправильно, и только везение и наличие другой Linux-машины рядом спасли меня от катастрофы.

В качестве другого примера можно вспомнить, что мне так и не удалось собрать ядро серии 1.3 в свежем дистрибутиве Slackware 2.3 (на другой машине; не той, которую я мучил в предыдущем примере). Я достал свои сбережения, купил Slackware 3.0 на CDROM и перешел на ELF. В этот раз переустановка прошла проще, частично благодаря предыдущему горькому опыту. В результате это все и послужило источником многих идей, которые я здесь опишу.

Обязательно ли "разрушать до основания, а затем..."

Это надежнее, хотя и немного грубовато... Если вы установите новый дистрибутив поверх старого, то существуют шансы получить смесь старых и новых программ, конфигурационных файлов, и, скорее всего, полностью запутаться, пытаясь разобраться. Полная очистка системы и установка затем только того, что необходимо - немного крутовато, но очень эффективно для получения хорошего результата. (Конечно здесь идет разговор о переустановке всего дистрибутива Linux, а не об обновлении пары-тройки пакетов! Лучший способ избежать полной переустановки - это отслеживать только некоторые изменения, особенно gcc, вместе с его библиотеками, и binutils, и своевременно обновлять их версии. Если то, что вы используете, более-менее современно, и вы можете поддерживать версии, своевременно обновляя их по мере надобности, собирая и компилируя новые пакеты, то нет никакой необходимости в массовой переустановке.)

Как заметил Patrick Volkerding (тоже сторонник процедуры очистки-переустановки), установка ELF главным в существующей a.out-системе - это рецепт от многих проблем; по крайней мере, если вы знаете достаточно, чтобы попробовать это - то вам этот документ не нужен!

Даже без последнего замечания ясно, что строить проще с нуля.

Много ли времени это все займет?

Это, конечно, зависит от степени сложности настроек вашей системы. Но я выяснил, что удачная переустановка (про неудачную не спрашивайте!) занимает примерно столько: 10 часов на создание резервных копий, 6 часов - установка системы до момента разрешения входа в систему и еще полдня или около того на восстановление менее важных вещей. Со временем всплывали небольшие недоделки - я их исправлял по мере нахождения - но 20 часов в общей сложности должно хватить на полный процесс переустановки. Возможно эта цифра будет меньше при установке с жесткого диска (я использовал CDROM), или больше - при установке с флоппи-дисков. Процесс конечно завершится быстрее на Pentium-е, и, естественно, медленнее на 386. Думайте сами.

Итак, что-то мы задержались на введении. Ниже я опишу, как подготовиться к тому, на что вы решились. Вооружитесь мужеством, стойкостью, страхом или чем-то еще, и:

Записывайте все, что делаете.

Очень важно иметь полный подробный журнал всех ваших действий в процессе приготовлений и переустановки. Особенно важно иметь список всех резервных копий, которые вы собираетесь сделать при приготовлениях к очистке системы.

Сделайте полную резервную копию вашей работающей системы.

В общем случае резервные копии делаются на носителях с последовательным доступом. Поэтому эта полная копия не пригодится вам для восстановления отдельных файлов - в ней слишком много лишнего. Лучше, в дополнение к полной копии, создать небольшие копии отдельных сегментов системы, которые будут восстанавливаться в новой системе полностью. Примерный список я приведу позже.

Тогда зачем же нужна полная копия? Две основных причины: первая - в случае полного падения новой системы необходимо оставить возможность возврата к началу с минимальными потерями. Вторая - как бы вы ни готовились к установке, существует очень большая вероятность того, что пара-тройка важных файлов будет забыта в процессе отдельного копирования. Если так, то неудобства с восстановлением этих файлов из полной резервной копии, в любом случае, лучше проблем с их потерей.

Для сохранения сил и времени, в том случае если у вас все еще есть старый дистрибутив, вы можете сделать копию только тех файлов, у которых mtime (время модификации) или ctime (время создания) более поздние, чем дата выпуска этого дистрибутива.

Создайте резервную копию каталога /etc и его подкаталогов на флоппи диске (-ах).

Тут причины немножко другие: вы не будете восстанавливать эти файлы (по крайней мере, большинство из них); но вы можете сравнить эти файлы с новыми, созданными в процессе установки. Зачем? В новых файлах могут быть данные, отсутствующие в старых; или что-то может быть сделано по-новому. Изменения в протоколах, добавление новых средств, применение новых функций в существующих утилитах могут привести к изменению формата конфигурационных файлов и загрузочных скриптов из дерева каталогов /etc, и, скорее всего, вам придется вносить ваши старые настройки в эти новые форматы, одновременно используя улучшения и дополнения.

Сделайте отдельные копии групп файлов, которые вы хотите сохранить.

Эта часть процесса может наиболее сильно различаться на разных системах, и максимум того, чем я могу помочь - это описать то, что я сделал на своей системе, в надежде хоть как-нибудь указать вам суть действий. В общем случае вам придется смотреть в каждый каталог, содержащий

файлы, не входившие в ваш старый дистрибутив Linux, или

файлы, более новые, чем файлы с вашего нового дистрибутива

и выделить только те файлы, которые вы хотите сохранить.

(Другая возможная стратегия состоит в том, чтобы сделать копию файлов с более поздними mtime или ctime, чем дата старого дистрибутива, и, затем восстановить необходимые файлы с этой копии. Если вы решитесь придерживаться этого способа, то помните, что новый дистрибутив может содержать более новые файлы, чем те, что вы сохранили.)

В моем случае, я остановился на создании .tgz-файлов для следующих каталогов:

/usr/lib/rn

/usr/lib/smail

/usr/lib/trn (оставшаяся часть /usr/lib будет переустановлена)

/usr/local/src

/usr/local/bin

/usr/local/lib

/usr/local/lpfont

/usr/local/man

/usr/local/sbin

/usr/local/thot (в каталоге /usr/local были файлы, которые мне не нужны)

/usr/openwin

/usr/src/lilo-17 (в моем новом Slackware была версия 16)

/usr/src/linux-1.2.13 (по причине того, что там были кое-какие хитрые настройки)

/usr/X11R6/lib/X11/app-defaults

/usr/X11R6/lib/X11/initrc (оставшаяся часть Xfree86 будет переустановлена)

/var/named

/var/openwin

/var/texfonts

С моей машиной все было более-менее просто, так как в каталоге spool не было важных файлов. У меня не был запущен сервер новостей, и из-за того, что у меня на машине всего два пользователя, я просто заставил их прочитать почту до ее уничтожения. В противном случае необходимо также скопировать каталог /var/spool (в последний момент) И, конечно, не забудьте про библиотеки сервера новостей и его настройки.

Приготовьте загрузочный и корневой флоппи для установки.

Описание того, как это сделать, должны быть приведены в руководстве по установке вашего дистрибутива.

Отформатируйте флоппи диски для временного и окончательного варианта ядер.

Вам понадобятся 2 диска, по одному на каждое ядро.

После всех этих приготовлений вы готовы к Большому Делу. Следующие шаги уничтожат старую систему.

Запретите вход в систему и сделайте копию каталогов /root и /home.

Это последнее, что надо сделать в старой системе до ее полного уничтожения. Этот шаг делается последним, чтобы сохранить наиболее актуальную информацию пользователей.

Загрузите новую систему с новых инсталляционных флоппи-дисков.

Удалите Linux-разделы на диске и создайте их вновь.

В руководстве по установке должно быть описано, как это сделать - это уничтожит старую систему. С этого момента вы зависите от качества резервных копий, сделанных ранее! Вас предупреждали!

Запустите инсталляцию Linux.

Существует много хороших описаний, как это сделать, поэтому я не буду на этом останавливаться. Продолжайте чтение с того момента, когда ваша система сможет загружаться самостоятельно с жесткого диска.

Однако, вместе с тем, запаситесь загрузочным флоппи-диском, так как ядро, установленное дистрибутивом, будет заменено новым, и в процессе этой замены могут возникнуть проблемы. Не забудьте установить пакеты разработки и исходные тексты ядра.

В новой системе, загруженной с жесткого диска, исправьте файл /etc/fstab

и добавьте в него свой раздел подкачки. После этого запустите команду "swapon -a". Я не знаю почему, но установка Slackware не делает этого, если раздел подкачки уже существует. Если этого не сделать, то при загрузке новой системы скрипт rc.S пытается включить подкачку, не находит раздел, и подкачка не включается. Вышеописанные действия это исправляют.

Восстановите данные конфигурации в каталог /etc и его подкаталоги.

Как было описано выше, нельзя просто скопировать все старые файлы в каталог /etc и надеяться, что все заработает. С некоторыми файлами это, конечно, получится; например с /etc/XF86Config (если вы используете ту же версию Xfree86, и ту же видеокарту, что и в старой системе). В большинстве случаев лучше использовать diff для сравнения старых и новых файлов до начала копирования. Обратите особенное внимание на различия файлов в каталоге /etc/rc.d потому, что может понадобиться ручное создание файлов конфигурации, вместо копирования старых скриптов из резервной копии. После того, как все будет завершено, перезагрузитесь.

Настройте и соберите ядро Linux.

Даже в том случае, если ядро в новом дистрибутиве содержит все необходимые вам драйверы, лучше пересобрать ядро, чтобы избавиться от того огромного количества лишних драйверов и функций, встроенных в универсальные ядра. За подробной информации обращайтесь к документу "HOWTO: Ядро" (Kernel HOWTO). Сначала установите новое ядро на флоппи-диск, убедитесь, что оно нормально работает, и только в этом случае установите его на жесткий диск, запустите lilo и перезагрузитесь.

Восстановите файлы из ранее сделанных резервных копий.

Некоторые программы придется переустановить из старых каталогов исходных текстов; мне, например, пришлось это проделать с lilo, потому что моя версия была новее той, что встроена в новый дистрибутив Slackware, и я не решился сохранять программы из каталога /sbin. Вам, наверное, придется проверить восстановленные программы на предмет наличия и правильности конфигурационных файлов, библиотек и т.п. Иногда придется восстанавливать некоторые вещи в определенном порядке, но вы конечно все это отметили еще при сохранении резервных копий, не так ли? ;-)

Пересмотрите настройки систем безопасности.

Проверьте правильность установок разрешений на файлах и каталогах. Я выяснил, что Slackware - система немного более открытая, чем мне это нравится, поэтому я поменял 755 на 711 для программ в каталогах .../bin и т.п.. И даже проставил 700 в .../sbin. Особенно осторожным в этом вопросе надо быть, если у вас установлен ftp-сервер, но, конечно, если он есть, то вы уже позаботились о разрешениях и запретах... :)