Gentoo: обновление системы
Пожалуй стоит немного поговорить об этом
Ну если само обновление системы достаточно просто и делается в 2 строки
Обновляем дерево портэжей
korp # emerge --sync
Теперь обновляем саму систему
korp # emerge -avuDN world --quiet
В конце получим что то типа:
[ebuild U ] sys-kernel/genkernel-3.4.12.6 [3.4.12.1] [ebuild U ] dev-lang/perl-5.12.3 [5.12.2-r6] [ebuild U ] app-misc/mc-4.7.5 [4.7.4-r1] USE="ncurses%*" [ebuild U ] dev-lang/php-5.3.5-r1 [5.3.5] Would you like to merge these packages? [Yes/No]
ну и соответственно нам нужно ответить y/n
Порой бывает так, что обновляются не все пакеты, что бы это проверить, нужно запустить
korp # emerge -pv --update --newuse --emptytree --deep world
[ebuild U ] dev-util/cmake ... [ebuild U ] app-admin/eselect-ctags ...
Там где мы увидим U — нам необходимо обновить в ручную, для этого собираем все не обновлённые пакеты и запускаем на выполнение
korp # emerge -1av dev-util/cmake app-admin/eselect-ctags --quiet
В данном случае 1 говорит о том что данные пакеты не нужно заносить в nano /var/lib/portage/world (там храняться записи о ПО, установленно пользователем непосредственно, различные системные зависимости нам там не нужны, так что периодически поглядываем и удаляем не нужное).
После установки обновлений, в самом конце длинного листинга мы получим сообщение типа
* IMPORTANT: 1 config files in '/etc' need updating. * See the CONFIGURATION FILES section of the emerge * man page to learn how to update config files.
Для того, что бы обновить конфигурационные файлы, мы должны воспользоваться утилитой etc-update
korp # etc-update
После запуска мы получим список конфигурационных файлов, требующих обновление.
Scanning Configuration files... The following is the list of files which need updating, each configuration file is followed by a list of possible replacement files. 1) /etc/locale.gen (1) Please select a file to edit by entering the corresponding number. (don't use -3, -5, -7 or -9 if you're unsure what to do) (-1 to exit) (-3 to auto merge all remaining files) (-5 to auto-merge AND not use 'mv -i') (-7 to discard all updates) (-9 to discard all updates AND not use 'rm -i'):
Дальше у нас есть 2 варианта:
1. доверится системе и выполнить всё автоматически (как нам предложено выше (именно с тире перед цифрой!)): -1, чтобы просто выйти, -3 — обновит все автоматически, но будет задавать вопросы про каждый конфиг отдельно, -5 обновит без вопросов, -7 удалит все, но будет спрашивать, -9 удалит предложенные обновления конфигурационных файлов без вопросов).
2. (лично для меня более примечательный) выполнить всё в ручную. для этого нам необзодимо набрать номер конфигурационного файла (в данном случае 1), после чего нам будет показано сравнение старого и нового конфига:
Showing differences between /etc/init.d/net.lo and /etc/init.d/._cfg0000_net.lo --- /etc/init.d/net.lo 2005-10-11 19:34:57.000000000 -0400 +++ /etc/init.d/._cfg0000_net.lo 2005-10-13 02:32:47.000000000 -0400 @@ -180,7 +180,7 @@ umods=( "${umods[@]}" "${modules[@]}" ) # Add our preferred modules - npref=3 + npref=4 umods=( "${umods[@]}" "iproute2" "dhcpcd" "iwconfig" "netplugd" ) # First we strip any modules that conflict from user settings lines 1-12/12 (END)
— и +++ соответственно означает что будет удалено, а что добавлено. после ознакомления нажимаем q для выхода и система предлагает нам несколько вариантов:
1) Replace original with update 2) Delete update, keeping original as is 3) Interactively merge original with update 4) Show differences again Please select from the menu above (-1 to ignore this update):
Ну и соответственно набираем то что нам подходит: 1 — заменит полностью старый конфиг новым, 2- удалит новый конфиг и оставит старый, 3 — попытается слить 2 конфига в один (никогда не пользовался, ибо опасался последствий, и вам не советую экспериментировать), 4 — ещё раз покажет различия.
Теперь можно удалить старые версии, ставших ненужными пакетов
korp # emerge -a --depclean
В конце мы проверим все зависимости и восстановим если что то было случайно удалено
korp # revdep-rebuild -i -- --ask
И ещё будет полезно обновить в ручную модули perl`а и python`а
korp # python-updater
korp # perl-cleaner --reallyall
Не забывайте обновляться, это очень полезно! Но всегда внимательно следите за тем — что и как обновляется!!!
И не забывайте что после обновления сервисы нужно рестартить в ручную (ну или зарестартить машину, если обновлённых сервисов очень много, а простой сервера вам не критичен).
както я неожиданно попал сюда с гугла, когда искал свой etc-update