emerge --update --deep --newuse system = полнейший абзац с конфигирационными файлами
Приветствую!
Я поставит себе gentoo полтора-два года назад.
Пару раз что-то обновлял, но честно говоря не помню что и скока раз.
И вот настал момент истины - решил привести систему к up-to-date состоянию.
Почитал доки и выполнил команду:
emerge --update --deep --newuse system
Ночку подождал - вроде все собралось на ура(не считая что-го что какой-то пакет отмёржить пришлось - он там что-то блокировал)
И вот тут начинается самое интересное - etc-update сказала что 92 файла надо обновить.
Я чесно пытылся вспомнить какие из них я правил... Даже штук 7 вспомнил... Остальные заменил новыми... И все перестало работать.
Я еще целый день убил на восстановления работаспособности системы.
Вопрос: может есть какой-нить хитрый способ избежать таких траблов? У кого какие идеи? Я честно говоря уже побаиваюсь world апдейтить... Кроме меня у кого-нить похожие проблеммы есть, или все умные и свой конфы под каким-нить cvs хранят?
- Для комментирования войдите или зарегистрируйтесь
Я ничего не
Я ничего не храню на CVS и тоже постоянно мучаюсь... Я до сих пор не могу понять, когда делаю etc-update что нужно указать, чтобы он мои конфиги не трогал и как-то хоть копию что-ли оставлял... Часто нарываюсь на такую вещь, поэтому частенько перез update-ом делаю копию etc.
Поэтому если мне кто-то объяснит как правильно поступать, я был бы просто счастлив.
Я вообще думаю...
ЧТО система etc-update абсолютно не продумана...
Нафиг не нужен CONFIG_PROTECT...
просто при обновлении достаточно сверить не переписывать тупо, а проверить, что контрольные суммы файлов проекта совпадают...
Если сумма не совпадает, значит файл изменился... вот тогда уже и осуществлять обновление через etc-update...
Но в gentoo этот момент работает не так... хоть свой etc-update пиши. :)
смысл (сначала написал cvsck :) ) в cvs... всеравно встанет проблема в том, что обновлять, а что нет... ибо от версии к версии сами по себе конфиги меняются.
В принципе для себя делаю так. в env.d - ничего не правлю, только добавляю свое...
меняю только в conf.d
кроме того еще несколько файлов, которые надо помнить... (rc.conf, wget/wgetrc, X11/xorg.conf)
Или еще проще...
etc-update -3
все, в чем точно уверен, что не трогал, жмешь 'y'
потом и etc-update и уже конкретно в каждом файлике смотришь различия.
Но не гибко это...
В идеале надо сравнивать то, что установлено, то что есть и то, что планируется устанавливать...
Ну самый простой способ... пакеты обновлять по одному, при этом перед каждым пакетом делать
equery - это программка из gentoolkit.
Основное внимание конечно следует уделить тем файлам, у которых 'incorrect md5sum'
правда как автоматизировать этот процесс - я не знаю.
только так.. сперва почекал, потом накатил новый пакет, а потом etc-update с учетом полученной информации. :)
Блин! Дело говоришь! :)
Сравнивать контрольные суммы - это идея!!!
Только вот тут же несколько вопросов возникает -
1)не изменяют ли при установке разные пакеты у друг друга конфы?
2)где взять оригиналы конфигов? Я так на взгляд не всегда вспомню что я правил... Лучше бы diff дать... Но у меня ща стоит mozilla-firefox-1.0.6-r2 - его уже нет в portage => где кнофиг оригинальный брать не понятно. equery я так понял только md5-суммы хранит...
equery
equery для проверки сумм лезем в /var/db/pkg кажись...
там хранится информация обо всех установленных пакетах.
причем не важно остались они в портеджах или нет.
сам факт изменения контрольной суммы достаточно красноречиво говорит о том, что файл изменился.
но только вот после накатывания пакета - контрольная сумма старых файлов уже не будет доступна... :(
Чтобы этот процесс автоматизировать - надо заранее просканить все конфиги и выяснить, какие из них изменены. чтобы потом все остальные смело обновлять...
А с измененными всеравно придется руками разбираться...
хотя было бы хорошо соотносить изменения... отображать конфликты как в cvs к примеру... а если конфликтов нету, то просто обновлять...
Я вот тут подумал на тему diff...
если взять один файл (версия 1)... изменить, и diff сохранить...
то в принципе diff может наложиться на новый файл (версия 2) даже если файл ко второй версии претерпел изменения.
соответственно это может стать решением для тех файлов, которые изменяются пользователем, но всеравно не даст 100% гарантию обновления... кроме того для реализации требует оригинальных версий конфигов. :( как не крути, всеравно сложно.
Не, equery лезет в
Не, equery лезет в /var/db/pkg за списком такого вида:
<имя файла из пакета> <контрольная сумма>
ну или примерно такого...
То есть оригиналов файлов там не лежит, их где-то в другом месте брать надо...
А оригиналы нужны вот почему:
перед тем как обновляться, можно пройтись "equery check" по всем пакетам системы и выяснить какие конфиги изменял ИМЕННО ТЫ.После этого, по хорошему надо бы взять где-то оригинальную версию этих самых изменных конфигурационных файлов и сравнить измененные версии с помощью diff, чтобы выявить те изменения что внес ИМЕННО ТЫ.
А уже после этого проапдейтить софт, запустить etc-update и с ее помощью заметить на новые все конфы, что ты не изменял, а потом уже включать ручной режим, доставать diff файлы изменений и сидеть разбираться...
Вроде все продумал. Или нет?
Да..
только один момент...
остается нерешенной проблема с исходными файлами...
Единственный выход, который вижу я, -
1. перед изменением конфига его надо забекапить....
2. перед обновлением снимаются дифы. (специальный скриптик)
3. Обновляем.
4. Потом после обновления опять таки кастомный etc-update смело обновляет то, что не тронуто, а то что тронуто - через дифы (если возможно)... ну а если диф не накладывается, то там уж только руками.
Конечно это позволит избежать разгребания сотен конфигов (что бывает нередко)
Но для того чтобы это работало надо не забывать пункт номер 1.
Хотя в принципе это легко автоматизировать! :) (не в смысле быстро, а в смысле легко)
берем конфиг, мы знаем, что он изменился.
Мы берем пакет, которому этот конфиг принадлежит. и накатываем его. срабатывает протекшин, и рядом с измененным конфигом появляется оригинал... .cfg... как там они именуются то...
Но опять таки... ниче не получится, если пакета в портеджах нету. :(
А если снимать дифы заранее, тут главное чтобы не забывать это. (что конечно же сложнее всего)
etc-update
etc-update обновляет 2 вещи:
1 конфиги
2 скрипты
в конфиги надо смотреть (там есть пометки + и -) что добавилось и исчезло, а вот скрипты по идее надо обновлять.
У тебя ещё может быть такой косяк - конфиги из /etc/* переехали в /etc/conf.d/* так что смотри и думай что убрать а что нет.
Простые изменения он сам обновляет.
Это то понятно...
Вот только у меня etc-update написал, что у меня 100 файлов надо руками обрабатывать.
На каждый смотреть и думать ты это изменение внес(2 года назад!!!), или это просто разработчики в софт новую фичу вставили и соответственно немного изменини конфиг?
Что-то уж больно тяжко!
Нормально
Нормально етц-апдейт работает. Как просили. Можно посмотреть и сравнить можно принять или отказаться... Все путем. Пользовать надо правильно. Ежели при настройке руками какой файлик долго правили, манов пообкурись, обгуглились напроч и добились наконец удачи, таки положите рабочий конфиг в /root/etc (собсно нафига еще каталог руту нужен?). Про бекап перед обновлением никто даже и не вспомнил. Что за линуксойды пошли, право дело.
PS
Масдай что-ли с горя поставить :)
На самом деле
... сделано через задницу...
вместо того чтобы отследить измененные нами файлы и предложить обновлять или нет.
Нам вываливают список всех измененных всвязи с обновлением файлов...
нам кончено оч интересно, что изменилось в /etc/services, и нам обязательно надо сравнивать его построчно... (это я к примеру)
Кстати вот контрапример...
переход c xorg-x11-6.8 на xorg-x11-7.0 ВООБЩЕ не потребовал правки конфигов. я конечно сперва состорожничал, сверял.. но новый конфиг содержал мою концигурацию с незначительными изменениями. можем же когда захотим! :)
Если какую-то
Если какую-то второстепенную задачу (не влияющую на результат) приходится делать вручную, то рано или поздно народ либо забивает, либо одно из двух.
Потому настанет такой момент, когда придется СРОЧНО что-то поправить, и "забудешь/забьешь/отложишь на потом" скопировать конфиг в /root/etc.
И это будет началом конца! ;)
Обновлять надо
Обновлять надо чаще и жить будет легче :)
dispatch-conf надо
dispatch-conf надо пользовать. Он и бекапит и сравнивает и все остальное
Это что это?
че-то я не нахожу..
а-а-а... нашел...
Даже работает...
Только какой-то он супер молчаливый... видимо ругается только тогда, когда действительно нужно вмешательство пользователя...
Еще в конфиге можно настроить поведение.
Клево!
Блин, надо не
Блин, надо не только обновляться чаще но и доки чаще перечитывать! ;)
заметим - в текстовый файл можно вс
заметим - в текстовый конфигурационный файл всегда можно вставить коментарий. Мой рецепт достаточно простой - если потребовалась ручная правка какого либо конфига - я оставляю для себя пометку, что было изменено и с какой целью. Поэтому обновление системы не превращается в сложную задачу.