<?xml version="1.0" encoding="UTF-8" ?>

<bugzilla version="5.2"
          urlbase="https://bugzilla.altlinux.org/"
          
          maintainer="jenya@basealt.ru"
>

    <bug>
          <bug_id>24739</bug_id>
          
          <creation_ts>2010-12-11 11:44:55 +0300</creation_ts>
          <short_desc>изменяет /etc/sysconfig/installkernel</short_desc>
          <delta_ts>2010-12-17 01:55:21 +0300</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>bootloader-utils</component>
          <version>unstable</version>
          <rep_platform>all</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>CLOSED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Anton Farygin">rider</reporter>
          <assigned_to name="placeholder@altlinux.org">placeholder</assigned_to>
          <cc>aen</cc>
    
    <cc>at</cc>
    
    <cc>boyarsh</cc>
    
    <cc>glebfm</cc>
    
    <cc>lav</cc>
    
    <cc>ldv</cc>
    
    <cc>mdevaev</cc>
    
    <cc>mike</cc>
    
    <cc>pip</cc>
    
    <cc>placeholder</cc>
    
    <cc>rider</cc>
    
    <cc>sem</cc>
    
    <cc>slazav</cc>
    
    <cc>stalker</cc>
    
    <cc>vitty</cc>
    
    <cc>vt</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116248</commentid>
    <comment_count>0</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-12-11 11:44:55 +0300</bug_when>
    <thetext>новый bootloader-utils переписал конфигурационный файл /etc/sysconfig/installkernel , отключив использование make-initrd там, где это было настроено.

В итоге для всех вновь установленных ядер стал работать mkinitrd, и, как следствие, система перестала загружаться.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116255</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-12-11 15:28:36 +0300</bug_when>
    <thetext>Этого не может быть, поэтому рассказывай всё от начала и до конца.
Содержимое /var/log/user/info, весь вывод в stdout и stderr, содержимое и timestamp файла /etc/sysconfig/installkernel до и после обновления, и т.д. и т.п.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116260</commentid>
    <comment_count>2</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-12-11 23:45:42 +0300</bug_when>
    <thetext>Этого &quot;не может быть&quot; у меня уже на четырёх серверах.

до обновления:
# cat /etc/sysconfig/installkernel 
INITRD_GENERATOR=make-initrd
MKINITRD=/usr/sbin/mkinitrd-make-initrd

# ls -al /etc/sysconfig/installkernel 
-rw-r--r-- 1 root root 69 Sep 19 09:37 /etc/sysconfig/installkernel


Делаю dist-upgrade (большой), после него:

# cat /etc/sysconfig/installkernel
#INITRD_GENERATOR=make-initrd
#MKINITRD=/usr/sbin/mkinitrd-make-initrd
#INITRD_AUTOUPDATE=all

# ls -al /etc/sysconfig/installkernel
-rw-r--r-- 1 root root 94 Dec 11 23:42 /etc/sysconfig/installkernel

В /var/log/user/info всё красиво:
Dec 11 23:42:32 dns2 apt-get: make-initrd-0.4.3-alt2 installed 
Dec 11 23:42:33 dns2 apt-get: make-initrd-0.3.9-alt1 removed 
Dec 11 23:42:34 dns2 apt-get: bootloader-utils-0.4.11-alt1 installed 
Dec 11 23:42:34 dns2 apt-get: bootloader-utils-0.4.8-alt3 removed 

diff --git a/sysconfig/installkernel b/sysconfig/installkernel
index 2d400f6..7e9d2ae 100644
--- a/sysconfig/installkernel
+++ b/sysconfig/installkernel
@@ -1,2 +1,3 @@
-INITRD_GENERATOR=make-initrd
-MKINITRD=/usr/sbin/mkinitrd-make-initrd
+#INITRD_GENERATOR=make-initrd
+#MKINITRD=/usr/sbin/mkinitrd-make-initrd
+#INITRD_AUTOUPDATE=all


Что ещё надо ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116261</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-12-11 23:46:26 +0300</bug_when>
    <thetext>Да, только что обновил ещё два сервера - всё воспроизводится 100%.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116262</commentid>
    <comment_count>4</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-12-11 23:50:23 +0300</bug_when>
    <thetext>Дима, конечно же оно будет воспроизводится, там же явно в скрипте написано:
preinstall scriptlet (through /bin/sh):
[ $1 -gt 1 ] || exit 0
f=/etc/sysconfig/installkernel
rm -f $f.install
[ ! -f $f ] || exit 0
if [ ! -f $f.rpmsave ]; then
cat &gt; $f.install &lt;&lt;-EOF
#INITRD_GENERATOR=make-initrd
#MKINITRD=/usr/sbin/mkinitrd-make-initrd
#INITRD_AUTOUPDATE=all
EOF
else
  cp -a $f.rpmsave $f.install
fi

Если нет rpmsave, тогда в $f.install нагенерить комментариев.

а далее:
postinstall scriptlet (through /bin/sh):
[ $1 -gt 1 ] || exit 0
f=/etc/sysconfig/installkernel
[ -f $f.install ] || exit 0
cp -a $f $f.rpmnew 2&gt; /dev/null ||:
mv $f.install $f

если этот $f.install есть (а его не может не есть), то нужно срочно $f переименовать в $f.rpmnew, а $f.install в $f

что-то в этом алгоритме всё не так ;(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116263</commentid>
    <comment_count>5</comment_count>
    <who name="Valery Pipin">pip</who>
    <bug_when>2010-12-12 00:15:31 +0300</bug_when>
    <thetext>Воспроизводится. Тож самое делал, загрузился со старым ядром. После оказалось что в системе отсутствовал mkinitrd. Как я раньше жил? видимо снесло недавно. Далее сделал apt-get --reinstall нового ядра. initrd создался автоматически</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116265</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-12-12 01:01:23 +0300</bug_when>
    <thetext>(In reply to comment #4)
&gt; Дима, конечно же оно будет воспроизводится, там же явно в скрипте написано:
&gt; preinstall scriptlet (through /bin/sh):
&gt; [ $1 -gt 1 ] || exit 0
&gt; f=/etc/sysconfig/installkernel
&gt; rm -f $f.install
&gt; [ ! -f $f ] || exit 0
&gt; if [ ! -f $f.rpmsave ]; then
&gt; cat &gt; $f.install &lt;&lt;-EOF
&gt; #INITRD_GENERATOR=make-initrd
&gt; #MKINITRD=/usr/sbin/mkinitrd-make-initrd
&gt; #INITRD_AUTOUPDATE=all
&gt; EOF

Здесь логическая ошибка:

# Neither installkernel nor installkernel.rpmsave exits, no way to find
# out whether the vanilla installkernel existed before the start of our
# transaction and we should reinstall it in %%post, or no installkernel
# existed at all and we should install a mkinitrd-compatible installkernel.

Я вижу только один способ стабильного решения проблемы -- поменять порядок обновления на противоположный: в bootloader-utils поменять prereq на requires, а в make-initrd поменять requires на prereq.  Альтернативно -- забить на поддержку mkinitrd при миграции installkernel.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116266</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry V. Levin">ldv</who>
    <bug_when>2010-12-12 01:18:00 +0300</bug_when>
    <thetext>Ладно, поскольку кого-то все равно придется принести в жертву, принесем в жертву пользователей mkinitrd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116267</commentid>
    <comment_count>8</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2010-12-12 01:33:17 +0300</bug_when>
    <thetext>bootloader-utils-0.4.12-alt1 -&gt; sisyphus:

* Sun Dec 12 2010 Dmitry V. Levin &lt;ldv@altlinux&gt; 0.4.12-alt1
- %pre: when neither /etc/sysconfig/installkernel nor
  /etc/sysconfig/installkernel.rpmsave exists, assume that
  system was configured to use make-initrd (closes: #24739),
  and issue a warning for mkinitrd users.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>