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

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

    <bug>
          <bug_id>24101</bug_id>
          
          <creation_ts>2010-09-17 22:19:54 +0400</creation_ts>
          <short_desc>dir.conf is not loaded with upgrade</short_desc>
          <delta_ts>2010-10-21 08:35:07 +0400</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>4</classification_id>
          <classification>Development</classification>
          <product>Sisyphus</product>
          <component>apache2</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>normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergey Kurakin">kurakin</reporter>
          <assigned_to name="Anton Farygin">rider</assigned_to>
          <cc>aen</cc>
    
    <cc>asy</cc>
    
    <cc>naf</cc>
    
    <cc>rider</cc>
    
    <cc>vitty</cc>
          
          <qa_contact>qa-sisyphus</qa_contact>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>112260</commentid>
    <comment_count>0</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-09-17 22:19:54 +0400</bug_when>
    <thetext>С версией 2.2.16-alt1 приплыл файл %apache2_mods_available/dir.conf. В более ранних версиях его не было. Ссылка mods_enabled/dir.conf при обновлении не создается, директива DirectoryIndex из этого файла не загружается и мы теряем index.php (да и все остальные) в качестве индекса по умолчанию.

Восстановление работоспособности:
# a2dismod dir
# a2chkconfig
# service httpd2 condreload

Причина в следующем:
1. %apache2_mods_available/dir.conf появился только в этом релизе, а dir.load был там и ранее. Соответственно и ссылка mods_enabled/dir.load тоже была.
2. a2enmod, вызываемый из a2chkconfig при обновлении, найдя ссылку на dir.load, считает, что модуль уже активирован и никаких действий не предпринимает. Он не догадывается обратить внимание, что к dir.load теперь еще и dir.conf появился. Поэтому dir.conf не активируется.

Надо бы чтобы a2{en,dis}mod понимали, что .conf могут появляться и исчезать независимо от соответствующих .load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112811</commentid>
    <comment_count>1</comment_count>
    <who name="Sergey Y. Afonin">asy</who>
    <bug_when>2010-09-28 14:49:05 +0400</bug_when>
    <thetext>У меня ещё apreq отключен оказался...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112858</commentid>
    <comment_count>2</comment_count>
    <who name="Nikolay A. Fetisov">naf</who>
    <bug_when>2010-09-29 11:20:37 +0400</bug_when>
    <thetext>Проблема не ограничивается mod_dir. И не ограничивается Sisyphus.
В 5.1 пришёл 2.2.16-alt1.M51.1, в котором ряд конфигураций модулей перенесён из extra-available/ в mods-available/ - с описанными последствиями.

Из пойманного, это _как минимум_:
mod_dir
mod_dav_fs
mod_deflate
mod_disk_cache
mod_log_config
mod_mem_cache
mod_mime_magic

Причём, отсутствие описания формата логов &apos;combined&apos; обнаруживается далеко не так быстро, как пропавшие DirectoryIndex.

Лечение на обновляемых установках:

cd /etc
for i in dir dav_fs deflate disk_cache log_config mem_cache mime_magic; do 
	[ -e httpd2/conf/mods-enabled/$i.load ] &amp;&amp; (a2dismod $i;a2enmod $i)
done
service httpd2 condreload</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112859</commentid>
    <comment_count>3</comment_count>
    <who name="Anton Farygin">rider</who>
    <bug_when>2010-09-29 11:28:48 +0400</bug_when>
    <thetext>Алексей, можешь подумать, как это исправить ?

Ситуация действительно не приятна - в процессе обновления нужно постараться не убить работающую конфигурацию.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112865</commentid>
    <comment_count>4</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-09-29 13:39:59 +0400</bug_when>
    <thetext>Здесь всё-таки два разных вопроса, которые лучше не путать.

Случай 1. Приплывает dir.conf в добавок к уже существующему и активированному dir.load. Причем загрузка dir прописана в mods-start.d/000-default.conf и он успешно загружается. Но a2enmod не замечает вновь приплывшего dir.conf. Он считает, что раз &quot;Module dir is already enabled!&quot;, то и говорить не о чем.

Решение: научить a2enmod обращать внимание не только на modname.load, но и на modname.conf, если таковой имеется.

Случай 1-штрих. Сейчас проверил, что при удалении активного .conf, a2chkconfig работает как следует: удаляет битую ссылку. То есть исчезновение .conf обрабатывается корректно.

Случай 2. Активные модули переплыли из extra в mods при отсутствии их упоминания в *-start.d. Из extra-enabled битые ссылки a2chkconfig удалил, а в mods-enabled, разумеется, никто их не создал.

(Кстати, #2 у меня не подтверждается, dav_fs как был включен, так и остался. Но у меня Сизиф, а в #2, как я понял -- 5.1.)

Решение 1, простое, но неправильное -- прописать все переезжающие модули в mods-start.d. Тогда они включатся в любом случае, даже если были отключены до переезда. И будут включаться при каждом последующем вызове a2chkconfig. Это плохо.

Решение 2, сложное и неправильное -- придумать механизм для сохранения статуса переезжающих модулей и восстановления этого статуса на новом месте. Из пушки по воробьям...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112868</commentid>
    <comment_count>5</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-09-29 14:30:02 +0400</bug_when>
    <thetext>В добавок к &quot;случаю 2, решение 2&quot;. Сохранение/восстановление статуса при обновлении реализуется при помощи control(8). Но есть существенные недостатки:

1. Пакеты apache2-modname-control придется потом всю жизнь таскать с собой.
2. Вывод control загромоздится до полной нечитаемости.
3. Глупо иметь control для модулей apache2, учитывая наличие штатного средства a2enmod/a2dismod.

В сущности, при таком решении control однажды выполняет задачу сохранения/восстановления статуса переехавшего модуля, а потом становится рудиментом и мешается всю жизнь.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112893</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolay A. Fetisov">naf</who>
    <bug_when>2010-09-29 22:41:41 +0400</bug_when>
    <thetext>(In reply to comment #4)
&gt; Здесь всё-таки два разных вопроса, которые лучше не путать.
&gt; ....

Откуда? Вопрос в обновлении установленного Apache2 до конкретной версии
пакета.

Есть a2{en,dis}mod. Они прекрасно справляются с включением/выключением модулей. 
Директивы загрузки модулей лежат в mods-available/X.load, для некоторых модулей
есть дополнительная конфигурация по-умолчанию в mods-available/X.conf.
При включении модуля на эти файлы создаются символьные ссылки в mods-enabled, и
они подключаются из httpd.conf. Если вдруг конфигурация по-умолчанию не
устраивает, соответствующую ссылку на X.conf можно и удалить - на подключение
модуля оно не повлияет. Всё это - файлы конфигурации, при обновлении пакета
внесённые в них изменения сохраняются. Символьные ссылки тоже сохраняются.
Это всё работало, и работает сейчас.

Проблема в другом - до 2.2.16-alt1 часть модулей хранило конфигурацию в
extra-available/, а не в mods-available/. В 2.2.16-alt1 проведена унификация -
это хорошо. Но, например, extra-available/DirectoryIndex_default.conf в 
mods-available/dir.conf переместился, а символьная ссылка на него из
extra-enabled/ в mods-enabled/ не переехала. Соответственно, если до обновления
конфигурация по-умолчанию для модуля загружалась, то после - нет.

При этом a2enmod, вызываемый в процессе обновления пакета, работает абсолютно
корректно: ссылка mods-enabled/dir.load присутствует (а dir.load не менялся) - модуль включен, делать ничего не надо. А то, что ссылка на dir.conf отсутствует - так, возможно, конфигурация по-умолчанию не устраивала администратора  истемы, и была удалена.



Иными словами - это проблемы разового действия, связанные с обновлением до
конкретной версии пакета. Какие-либо изменения в a2{en,dis}mod, или тем более
внедрение control, тут не требуются, таким _одноразовым_ правкам конфигурации
место в %post пакета.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>112908</commentid>
    <comment_count>7</comment_count>
    <who name="Sergey Kurakin">kurakin</who>
    <bug_when>2010-09-30 14:16:29 +0400</bug_when>
    <thetext>(In reply to comment #6)
&gt; Откуда?
Да, я недостаточно внимательно прочел #2. Прошу прощения. &quot;Случая 2&quot; из моих комментариев в действительности не существует.

&gt; А то, что ссылка на dir.conf отсутствует
&gt; - так, возможно, конфигурация по-умолчанию не устраивала администратора 
&gt; истемы, и была удалена.

Такую возможность я не учел.
Плохая практика, кстати. Администратор, вручную удаляющий ссылки на .conf, будет иметь проблемы, когда эта ссылка вдруг восстановится (a2dismod &amp;&amp; a2enmod). Вносить изменения надо непосредственно в .conf, на то они и noreplace.
Впрочем, свои предложения об изменении логики работы a2enmod я отзываю.

&gt; таким _одноразовым_ правкам конфигурации
&gt; место в %post пакета.

Да, пожалуй.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113152</commentid>
    <comment_count>8</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-05 17:35:48 +0400</bug_when>
    <thetext>(В ответ на комментарий №3)
&gt; Алексей, можешь подумать, как это исправить ?
&gt; 
&gt; Ситуация действительно не приятна - в процессе обновления нужно постараться не
&gt; убить работающую конфигурацию.

  Исправленную версию планирую залить завтра.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>113257</commentid>
    <comment_count>9</comment_count>
    <who name="solo">solo</who>
    <bug_when>2010-10-07 16:10:47 +0400</bug_when>
    <thetext>(В ответ на комментарий №8)
&gt; (В ответ на комментарий №3)
&gt; &gt; Алексей, можешь подумать, как это исправить ?
&gt; &gt; 
&gt; &gt; Ситуация действительно не приятна - в процессе обновления нужно постараться не
&gt; &gt; убить работающую конфигурацию.
&gt; 
&gt;   Исправленную версию планирую залить завтра.

  Изменения см. http://git.altlinux.org/people/solo/packages/apache2.git?p=apache2.git;a=commitdiff;h=8cd89174679b1dffff89eea8fb762d34fd833169 и http://git.altlinux.org/people/solo/packages/apache2.git?p=apache2.git;a=commitdiff;h=e9faf71d80a11f005ee9fc895da293dc13f9b205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114082</commentid>
    <comment_count>10</comment_count>
    <who name="Repository Robot">repository-robot</who>
    <bug_when>2010-10-21 08:35:07 +0400</bug_when>
    <thetext>apache2-2.2.16-alt3 -&gt; sisyphus:

* Wed Oct 20 2010 Aleksey Avdeev &lt;solo@altlinux&gt; 2.2.16-alt3
- Fix &lt;modname&gt;.conf loaded with upgrade (Closes: #24101)
- Fix location for DavLock database (Closes: #24336)</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>