Bug 24709 - /etc/sysconfig/installkernel misplacement
Summary: /etc/sysconfig/installkernel misplacement
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: bootloader-utils (show other bugs)
Version: unstable
Hardware: all Linux
: P3 major
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on: 24707
Blocks:
  Show dependency tree
 
Reported: 2010-12-08 01:09 MSK by Dmitry V. Levin
Modified: 2010-12-08 04:29 MSK (History)
9 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dmitry V. Levin 2010-12-08 01:09:47 MSK
+++ This bug was initially created as a clone of Bug #24707 +++

(In reply to comment #22)
> (In reply to comment #20)
> > Добавил.
> 
> Спасибо, конфиг теперь в правильном месте.

Я почти уверен, что при переезде может возникнуть одна из двух проблем:

1. Пакет make-initrd был установлен, и файл /etc/sysconfig/installkernel был модифицирован.  Тогда по окончании обновления файла /etc/sysconfig/installkernel не будет вообще, и make-initrd не будет использоваться.
2. Пакет make-initrd не был установлен, и файл /etc/sysconfig/installkernel не существовал.  Тогда по окончании обновления файл /etc/sysconfig/installkernel будет настроен на использование make-initrd.

Обе эти ситуации нужно исправить за те несколько часов, пока Сизиф не опубликован.
Comment 1 Vitaly Kuznetsov 2010-12-08 01:20:28 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. В чём тогда проблема?

> 
> Обе эти ситуации нужно исправить за те несколько часов, пока Сизиф не
> опубликован.

Я только "за", но пока не понимаю даже где проблема
Comment 2 Dmitry V. Levin 2010-12-08 01:29:20 MSK
(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
Comment 3 Dmitry V. Levin 2010-12-08 01:35:12 MSK
(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.
Comment 4 Vitaly Kuznetsov 2010-12-08 01:37:20 MSK
(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
Comment 5 Dmitry V. Levin 2010-12-08 01:40:12 MSK
(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 был
> модифицирован.
Comment 6 Vitaly Kuznetsov 2010-12-08 01:40:42 MSK
(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, не стоит ли считать умолчательное его использование нормой?
Comment 7 Vitaly Kuznetsov 2010-12-08 01:41:15 MSK
(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
> 
> Это не тот случай, о котором я говорил:
> 
Да, понял, торможу
Comment 8 Dmitry V. Levin 2010-12-08 01:45:43 MSK
(In reply to comment #6)
> Т.к. мы уже выставили зависимость на make-initrd, не стоит ли считать
> умолчательное его использование нормой?

Мы ведь не хотим сломать систему, которая не использовала make-initrd, при _обновлении_ bootloader-utils?

Можем ли мы рассчитывать на то, что никто из пользователей mkinitrd не обновляет пакеты из Сизифа?  Если можем, то без %pre можно обойтись, но тогда mkinitrd надо удалить из Сизифа совсем.
Comment 9 Vitaly Kuznetsov 2010-12-08 01:46:33 MSK
(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

всё равно не получается
Comment 10 Vitaly Kuznetsov 2010-12-08 01:55:22 MSK
(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 ~]#
Comment 11 Vitaly Kuznetsov 2010-12-08 02:31:13 MSK
(In reply to comment #10)
> 
> Зависит от порядка

Всё, вобщем, плохо с предложенными скриптами: в одной последовательности триггер не вызывается совсем, в другой ему мешает %pre - файл получается всегда пустым. Сейчас попробую более сложную конструкцию...
Comment 12 Dmitry V. Levin 2010-12-08 02:48:38 MSK
(In reply to comment #11)
> (In reply to comment #10)
> > 
> > Зависит от порядка
> 
> Всё, вобщем, плохо с предложенными скриптами: в одной последовательности
> триггер не вызывается совсем, в другой ему мешает %pre - файл получается всегда
> пустым. Сейчас попробую более сложную конструкцию...

Порядок можно фиксировать с помощью PreReq.
Comment 13 Vitaly Kuznetsov 2010-12-08 02:58:57 MSK
Рабочим вариантом мне кажется http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=864685f841a3d4023690e2bacd5352f5220bed3f

при этом сомнительна необходимость файлтриггера вообще. Более красивый вариант пока не придумался. Когда там, кстати, публикация?
Comment 14 Vitaly Kuznetsov 2010-12-08 03:09:55 MSK
(In reply to comment #13)
> Рабочим вариантом мне кажется
> http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=864685f841a3d4023690e2bacd5352f5220bed3f

При отсутствии возражений я готов отправить это в Сизиф в течение 15 минут
Comment 15 Dmitry V. Levin 2010-12-08 03:34:03 MSK
(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 приведет к проблемам по окончании обновления.
Comment 16 Dmitry V. Levin 2010-12-08 03:44:45 MSK
(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 не нужен.
Comment 17 Vitaly Kuznetsov 2010-12-08 03:50:07 MSK
(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.
Comment 18 Vitaly Kuznetsov 2010-12-08 03:53:00 MSK
(In reply to comment #16)
> 
> Если PreReq работает, то %triggerpostun не нужен.

Вот и я о том же. 

Сейчас тестирую: 
http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=9d52d75b51f9a0a05646d508d6af3821272d5af2
Comment 19 Vitaly Kuznetsov 2010-12-08 04:01:59 MSK
В сизиф собирается отправиться http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=21b7e1487666b2af5d170e003832ca92f33c140a

Жду ack
Comment 20 Dmitry V. Levin 2010-12-08 04:12:09 MSK
(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.
Comment 22 Vitaly Kuznetsov 2010-12-08 04:20:52 MSK
Застестировал. Поехали!
Comment 23 Dmitry V. Levin 2010-12-08 04:21:19 MSK
(In reply to comment #21)
> http://git.altlinux.org/people/vitty/packages/?p=bootloader-utils.git;a=commitdiff;h=2edf2aa7c75d93751d22d85fabe663d6aad69a2b

ack, до публикации остался 1 час
Comment 24 Repository Robot 2010-12-08 04:29:59 MSK
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