Summary: | /etc/sysconfig/installkernel misplacement | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Dmitry V. Levin <ldv> |
Component: | bootloader-utils | Assignee: | placeholder <placeholder> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | major | ||
Priority: | P3 | CC: | at, boyarsh, glebfm, ldv, placeholder, sem, slazav, vitty, vt |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux | ||
Bug Depends on: | 24707 | ||
Bug Blocks: |
Description
Dmitry V. Levin
2010-12-08 01:09:47 MSK
> Я почти уверен, что при переезде может возникнуть одна из двух проблем: > > 1. Пакет make-initrd был установлен, и файл /etc/sysconfig/installkernel был > модифицирован. Тогда по окончании обновления файла > /etc/sysconfig/installkernel не будет вообще, и make-initrd не будет > использоваться. Как это может случиться? С обновлением make-initrd приедет новый bootloader-utils с этим файлом. > 2. Пакет make-initrd не был установлен, и файл /etc/sysconfig/installkernel не > существовал. Тогда по окончании обновления файл /etc/sysconfig/installkernel > будет настроен на использование make-initrd. С обновлением человеку приедет make-initrd. В чём тогда проблема? > > Обе эти ситуации нужно исправить за те несколько часов, пока Сизиф не > опубликован. Я только "за", но пока не понимаю даже где проблема (In reply to comment #0) > Я почти уверен, что при переезде может возникнуть одна из двух проблем: > > 1. Пакет make-initrd был установлен, и файл /etc/sysconfig/installkernel был > модифицирован. Тогда по окончании обновления файла > /etc/sysconfig/installkernel не будет вообще, и make-initrd не будет > использоваться. При _обновлении_ make-initrd _и_ bootloader-utils при этом, скорее всего, возникнет следующая картинка: /etc/sysconfig/installkernel переименуется в /etc/sysconfig/installkernel.rpmsave, а новый файл будет создан под именем /etc/sysconfig/installkernel.rpmnew Если это так (я уверен, но надо проверить на всякий случай), то надо _попробовать_ сделать триггер следующего вида: %triggerpostun -- make-initrd < 0.4.3-alt2 [ $1 -ge 1 -a $2 -ge 1 ] || exit 0 f=/etc/sysconfig/installkernel [ ! -f $f ] || exit 0 if [ -f $f.rpmsave ]; then cp -a $f.rpmsave $f elif [ -f $f.rpmnew ]; then cp -a $f.rpmnew $f fi > 2. Пакет make-initrd не был установлен, и файл /etc/sysconfig/installkernel не > существовал. Тогда по окончании обновления файл /etc/sysconfig/installkernel > будет настроен на использование make-initrd. Если файла /etc/sysconfig/installkernel не было до начала _обновления_ пакета bootloader-utils, то и по окончании обновления в этом файле не должно быть ничего раскомментированного. Можно _попробовать_ решить эту проблему следующим образом: %pre [ $1 -gt 1 ] || exit 0 f=/etc/sysconfig/installkernel [ -f $f ] || touch $f (In reply to comment #2) > > 1. Пакет make-initrd был установлен, и файл /etc/sysconfig/installkernel был > > модифицирован. Тогда по окончании обновления файла > > /etc/sysconfig/installkernel не будет вообще, и make-initrd не будет > > использоваться. > > При _обновлении_ make-initrd _и_ bootloader-utils при этом, скорее всего, > возникнет следующая картинка: > /etc/sysconfig/installkernel переименуется в > /etc/sysconfig/installkernel.rpmsave, а новый файл будет создан под именем > /etc/sysconfig/installkernel.rpmnew > > Если это так (я уверен, но надо проверить на всякий случай), > то надо _попробовать_ сделать триггер следующего вида: > > %triggerpostun -- make-initrd < 0.4.3-alt2 > [ $1 -ge 1 -a $2 -ge 1 ] || exit 0 > f=/etc/sysconfig/installkernel > [ ! -f $f ] || exit 0 > if [ -f $f.rpmsave ]; then > cp -a $f.rpmsave $f > elif [ -f $f.rpmnew ]; then > cp -a $f.rpmnew $f > fi Ха, оказывается, я уже делал нечто подобное в апреле 2003 года, см. rpmquery --triggers service. (In reply to comment #2) > При _обновлении_ make-initrd _и_ bootloader-utils при этом, скорее всего, > возникнет следующая картинка: > /etc/sysconfig/installkernel переименуется в > /etc/sysconfig/installkernel.rpmsave, а новый файл будет создан под именем > /etc/sysconfig/installkernel.rpmnew > > Если это так (я уверен, но надо проверить на всякий случай) Проверил, так не получается: [root@hataraki ~]# rpm -qf /etc/sysconfig/installkernel make-initrd-0.3.9-alt1 [root@hataraki ~]# cat /etc/sysconfig/installkernel INITRD_GENERATOR=make-initrd MKINITRD=/usr/sbin/mkinitrd-make-initrd [root@hataraki ~]# apt-get install /space/ALT/Sisyphus/files/x86_64/RPMS/make-initrd-0.4.3-alt2.x86_64.rpm /space/ALT/Sisyphus/files/noarch/RPMS/bootloader-utils-0.4.10-alt1.noarch.rpm Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено Выбрано make-initrd для '/space/ALT/Sisyphus/files/x86_64/RPMS/make-initrd-0.4.3-alt2.x86_64.rpm' Выбрано bootloader-utils для '/space/ALT/Sisyphus/files/noarch/RPMS/bootloader-utils-0.4.10-alt1.noarch.rpm' Следующие дополнительные пакеты будут установлены: bootloader-utils libacl make-initrd udev udev-extras udev-initramfs udev-rule-generator udev-rules Следующие пакеты будут ОБНОВЛЕНЫ: bootloader-utils libacl make-initrd udev udev-extras udev-initramfs udev-rule-generator udev-rules 8 будет обновлено, 0 новых установлено, 0 пакетов будет удалено и 550 не будет обновлено. Необходимо получить 0B/520kB архивов. После распаковки потребуется дополнительно 69,3kB дискового пространства. Продолжить? [Y/n] y Совершаем изменения... Preparing... ################################################################################################### [100%] 1: udev-rules ################################################################################################### [ 12%] 2: udev ################################################################################################### [ 25%] Stopping udevd service: [ DONE ] Starting udevd service: [ DONE ] 3: libacl ################################################################################################### [ 37%] 4: udev-extras ################################################################################################### [ 50%] 5: udev-rule-generator ################################################################################################### [ 62%] 6: udev-initramfs ################################################################################################### [ 75%] 7: bootloader-utils ################################################################################################### [ 87%] 8: make-initrd ################################################################################################### [100%] Running /usr/lib/rpm/posttrans-filetriggers Завершено. [root@hataraki ~]# ls -la /etc/sysconfig/installkernel -rw-r--r-- 1 root root 85 Дек 8 00:35 /etc/sysconfig/installkernel [root@hataraki ~]# rpm -qf /etc/sysconfig/installkernel bootloader-utils-0.4.10-alt1 [root@hataraki ~]# cat /etc/sysconfig/installkernel INITRD_GENERATOR=make-initrd MKINITRD=/usr/sbin/mkinitrd-make-initrd (In reply to comment #4) > Проверил, так не получается: > [root@hataraki ~]# rpm -qf /etc/sysconfig/installkernel > make-initrd-0.3.9-alt1 > [root@hataraki ~]# cat /etc/sysconfig/installkernel > INITRD_GENERATOR=make-initrd > MKINITRD=/usr/sbin/mkinitrd-make-initrd Это не тот случай, о котором я говорил: (In reply to comment #0) > 1. Пакет make-initrd был установлен, и файл /etc/sysconfig/installkernel был > модифицирован. (In reply to comment #2) > Если файла /etc/sysconfig/installkernel не было до начала _обновления_ пакета > bootloader-utils, то и по окончании обновления в этом файле не должно быть > ничего раскомментированного. Можно _попробовать_ решить эту проблему следующим > образом: > > %pre > [ $1 -gt 1 ] || exit 0 > f=/etc/sysconfig/installkernel > [ -f $f ] || touch $f Т.к. мы уже выставили зависимость на make-initrd, не стоит ли считать умолчательное его использование нормой? (In reply to comment #5) > (In reply to comment #4) > > Проверил, так не получается: > > [root@hataraki ~]# rpm -qf /etc/sysconfig/installkernel > > make-initrd-0.3.9-alt1 > > [root@hataraki ~]# cat /etc/sysconfig/installkernel > > INITRD_GENERATOR=make-initrd > > MKINITRD=/usr/sbin/mkinitrd-make-initrd > > Это не тот случай, о котором я говорил: > Да, понял, торможу (In reply to comment #6) > Т.к. мы уже выставили зависимость на make-initrd, не стоит ли считать > умолчательное его использование нормой? Мы ведь не хотим сломать систему, которая не использовала make-initrd, при _обновлении_ bootloader-utils? Можем ли мы рассчитывать на то, что никто из пользователей mkinitrd не обновляет пакеты из Сизифа? Если можем, то без %pre можно обойтись, но тогда mkinitrd надо удалить из Сизифа совсем. (In reply to comment #7) > Да, понял, торможу # apt-get install /space/ALT/Sisyphus/files/x86_64/RPMS/make-initrd-0.4.3-alt2.x86_64.rpm /space/ALT/Sisyphus/files/noarch/RPMS/bootloader-utils-0.4.10-alt1.noarch.rpm Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено Выбрано make-initrd для '/space/ALT/Sisyphus/files/x86_64/RPMS/make-initrd-0.4.3-alt2.x86_64.rpm' Выбрано bootloader-utils для '/space/ALT/Sisyphus/files/noarch/RPMS/bootloader-utils-0.4.10-alt1.noarch.rpm' Следующие пакеты будут ОБНОВЛЕНЫ: bootloader-utils make-initrd 2 будет обновлено, 0 новых установлено, 0 пакетов будет удалено и 550 не будет обновлено. Необходимо получить 0B/64,7kB архивов. После распаковки потребуется дополнительно 3043B дискового пространства. Совершаем изменения... Preparing... ################################################################################################### [100%] 1: bootloader-utils warning: /etc/sysconfig/installkernel created as /etc/sysconfig/installkernel.rpmnew ################################################################################################### [ 50%] 2: make-initrd ################################################################################################### [100%] Running /usr/lib/rpm/posttrans-filetriggers Завершено. [root@hataraki ~]# ls -la /etc/sysconfig/installkernel installkernel installkernel~ installkernel.rpmnew # cat /etc/sysconfig/installkernel INITRD_GENERATOR=make-initrd MKINITRD=/usr/sbin/mkinitrd-make-initrd BNYA=bnya всё равно не получается (In reply to comment #9) > всё равно не получается Зависит от порядка: # apt-get install /space/ALT/Sisyphus/files/noarch/RPMS/bootloader-utils-0.4.10-alt1.noarch.rpm /space/ALT/Sisyphus/files/x86_64/RPMS/make-initrd-0.4.3-alt2.x86_64.rpm Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено Выбрано bootloader-utils для '/space/ALT/Sisyphus/files/noarch/RPMS/bootloader-utils-0.4.10-alt1.noarch.rpm' Выбрано make-initrd для '/space/ALT/Sisyphus/files/x86_64/RPMS/make-initrd-0.4.3-alt2.x86_64.rpm' Следующие пакеты будут ОБНОВЛЕНЫ: bootloader-utils make-initrd 2 будет обновлено, 0 новых установлено, 0 пакетов будет удалено и 550 не будет обновлено. Необходимо получить 0B/65,0kB архивов. После распаковки потребуется дополнительно 3027B дискового пространства. Совершаем изменения... Preparing... ################################################################################################### [100%] 1: make-initrd ################################################################################################### [ 50%] warning: /etc/sysconfig/installkernel saved as /etc/sysconfig/installkernel.rpmsave 2: bootloader-utils ################################################################################################### [100%] Running /usr/lib/rpm/posttrans-filetriggers Завершено. [root@hataraki ~]# cat /etc/sysconfig/installkernel [root@hataraki ~]# (In reply to comment #10) > > Зависит от порядка Всё, вобщем, плохо с предложенными скриптами: в одной последовательности триггер не вызывается совсем, в другой ему мешает %pre - файл получается всегда пустым. Сейчас попробую более сложную конструкцию... (In reply to comment #11) > (In reply to comment #10) > > > > Зависит от порядка > > Всё, вобщем, плохо с предложенными скриптами: в одной последовательности > триггер не вызывается совсем, в другой ему мешает %pre - файл получается всегда > пустым. Сейчас попробую более сложную конструкцию... Порядок можно фиксировать с помощью PreReq. Рабочим вариантом мне кажется http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=864685f841a3d4023690e2bacd5352f5220bed3f при этом сомнительна необходимость файлтриггера вообще. Более красивый вариант пока не придумался. Когда там, кстати, публикация? (In reply to comment #13) > Рабочим вариантом мне кажется > http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=864685f841a3d4023690e2bacd5352f5220bed3f При отсутствии возражений я готов отправить это в Сизиф в течение 15 минут (In reply to comment #14) > (In reply to comment #13) > > Рабочим вариантом мне кажется > > http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=864685f841a3d4023690e2bacd5352f5220bed3f > > При отсутствии возражений я готов отправить это в Сизиф в течение 15 минут Это отправлять не надо. Для фиксации порядка установки надо заменить Requires на PreReq. Надеюсь, PreReq ещё работает так, как надо. Далее, проверка на .rpmsave в %pre не годится: старый забытый .rpmsave приведет к проблемам по окончании обновления. (In reply to comment #15) > Далее, проверка на .rpmsave в %pre не годится: старый забытый .rpmsave приведет > к проблемам по окончании обновления. Хотя, с другой стороны, откуда при отсутствующем /etc/sysconfig/installkernel может взятся /etc/sysconfig/installkernel.rpmsave? %post f=/etc/sysconfig/installkernel [ -f $f.install ] || exit 0 cp -a $f $f.rpmnew ||: mv $f.install $f Если PreReq работает, то %triggerpostun не нужен. (In reply to comment #15) > Для фиксации порядка установки надо заменить Requires на PreReq. Ok, зафиксировали. PreReq в bootloader-utils приводит как раз к обратному порядку - make-initrd, затем - bootloader-utils. При этом триггер не выполняется. > Далее, проверка на .rpmsave в %pre не годится: старый забытый .rpmsave приведет > к проблемам по окончании обновления. Если у человека есть rpmsave и нет самого файла - это, очевидно, переезд. Если он, конечно, rpmsave руками создал... Но только зачем? Я пока не придумал ничего лучше. http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=de7040c771dd4e1d001f7ca3f98a37c0f7740a4c Триггер не выполняется никогда. Вся работа делается в pre/post. (In reply to comment #16) > > Если PreReq работает, то %triggerpostun не нужен. Вот и я о том же. Сейчас тестирую: http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=9d52d75b51f9a0a05646d508d6af3821272d5af2 В сизиф собирается отправиться http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=21b7e1487666b2af5d170e003832ca92f33c140a Жду ack (In reply to comment #19) > В сизиф собирается отправиться > http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=21b7e1487666b2af5d170e003832ca92f33c140a > > Жду ack В %pre сразу после f=... хорошо бы добавить rm -f $f.install (чтобы левый .install не испортил обновление) В %post первой строкой можно на всякий пожарный добавить [ $1 -gt 1 ] || exit 0 %changelog лучше переписать на что-нибудь вроде - Fixed /etc/sysconfig/installkernel migration issues (closes: #24709): + do not switch from mkinitrd to make-initrd if make-initrd was not enabled before the update; + inherit locally modified config left after make-initrd update. Застестировал. Поехали! (In reply to comment #21) > http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=2edf2aa7c75d93751d22d85fabe663d6aad69a2b ack, до публикации остался 1 час bootloader-utils-0.4.10-alt2 -> sisyphus: * Tue Dec 07 2010 Vitaly Kuznetsov <vitty@altlinux> 0.4.10-alt2 - Fixed /etc/sysconfig/installkernel migration issues (ALT #24709): + do not switch from mkinitrd to make-initrd if make-initrd was not enabled before the update; + inherit locally modified config left after make-initrd update |