Bug 8884

Summary: Гарант: Не происходит обновление с версии 7.07.2 до 7.08.1
Product: WINE@Etersoft Reporter: Svetlana Zhukova <svzhu>
Component: Запуск ; Отладка ; ИсключенияAssignee: Сергей Гуральник <serhio>
Status: CLOSED FIXED QA Contact: Svetlana Zhukova <svzhu>
Severity: critical    
Priority: P1 CC: anton, baraka, dm, kondratyuk, lav, serhio
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: 27173, 27281 Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 8857, 8900    
Deadline: 2013-08-15   

Description Svetlana Zhukova 2012-12-04 15:29:06 MSK
Бутылка 
wine@eter-2 bottle bugs/8857
WINE@Etersoft SQL 2.0.3-eter8/3

Установлен гарант 7.07.2. Если устанавливать поверх версию 7.08.1, в конце установки (при запуске установки данных) появляется сообщение: "На
дистрибутиве обнаружена новая версия программы и требуется обновить оболочку"
При этом установки данных не происходит. Обновление невозможно.

На windows установка данных проходит без подобных сообщений.

В бутылке можно воспроизвести,запустив 
c:/Program Files/Garant-Server/datasetup.exe
Comment 1 Svetlana Zhukova 2012-12-06 17:41:10 MSK
Дистрибутивы здесь:
7.7.2
/var/ftp/pvt/Windows/Правовые/Гарант/772/cs_772
в конце установки запускается установка данных (ее можно также запустить datasetup.exe)

Поверх ставим:
7.8.1
/var/ftp/pvt/Windows/Правовые/Гарант/7.07.8/cs
в конце также запускается установка данных,в результате чего и появляется ошибка
Comment 2 Роман Дадьков 2012-12-06 22:30:18 MSK
У файлов version.txt datasetup.exe dataupd.exe download.exe и gararnt.exe не обновляются даты изменения, у всех остальных обновились. На windowws ситуация, на сколько можно судить, такая же. Установил отдельно версию 772 без данных, datasetup.exe работает. Поставил сверху 78163, datasetup.exe не работает. Поставил отдельно 78163 без данных, garant.exe и datasetup.exe не работают.
Comment 3 Роман Дадьков 2012-12-07 15:40:10 MSK
https://wiki.office.etersoft.ru/%D0%93%D0%B0%D1%80%D0%B0%D0%BD%D1%82
Comment 4 Роман Дадьков 2012-12-07 15:58:06 MSK
(В ответ на comment #2)
> Поставил отдельно 78163 без данных, garant.exe и datasetup.exe не работают.
Предварительно нужно убить работающий сервер гаранта (сгодиться wineserver -k) и только потом уже запускать garant.exe и datasetup.exe. Сообщения в таком случае не появляется, а значит сама по себе версия 778 работает нормально.
Comment 5 Роман Дадьков 2012-12-07 16:24:19 MSK
В случае установки 778 поверх 772 в трейсе проскакивает
fixme:ntdll:NtLockFile I/O completion on lock not implemented yet
err:winediag:FILE_CreateFile failed to open L"\\??\\C:\\" because of insufficient access rights
В случае установки отдельно той и другой версии подобных вещей нет.
Comment 6 Роман Дадьков 2012-12-07 21:23:16 MSK
Работаю над багой
Comment 7 Vitaly Lipatov 2012-12-07 23:31:44 MSK
(В ответ на comment #6)
> Работаю над багой
Не, надо информативно. Что исследовал и где ничего не нашёл.
Если записываешь, где проходил, потом хоть помнишь где был :)

Вообще надо сделать кнопку «Ничего не сделал, зарплату не начислять» :)
Или робота посадить комментарии в баги читать :)
Comment 8 Роман Дадьков 2012-12-13 21:49:51 MSK
В случае, когда версия  7.08.1 ставится поверх 7.07.2, *.exe файлы открываются с GENERIC_READ FILE_SHARE_READ. Записи в них не происходит, только чтение. 
Замена других файлов, происходит следующим образом: находится файл, удаляется, пытаются открыть, не получается, записывают новый. С *.exe файлами, просто при установке, так не делается, они сразу же открываются для чтения/записи.
Более подробный лог, сделанный самой программой, получить не удалось.
Comment 9 Роман Дадьков 2012-12-14 19:53:33 MSK
Катран ответил, что запись файлов - это стандартный механизм службы MSI.
Пытался ставить версию 7.08.1, затем вручную менять файл version.txt, затем снова поставить версию 7.08.1 - не помогло.
Comment 10 Роман Дадьков 2013-01-23 20:46:09 MSK
Установка msi2 не помогла.
Интересно, что производители Гаранта говорят, что  version.txt они никак не обрабатывают при установки одной версии поверх другой. Также они утверждают,   что процедура записи файла - "стандартная процедура MSI". Трэйс по msi интересного ничего не дал.
Comment 11 Татьяна Фокина 2013-03-26 16:15:37 MSK
(В ответ на comment #8)
> В случае, когда версия  7.08.1 ставится поверх 7.07.2, *.exe файлы открываются
> с GENERIC_READ FILE_SHARE_READ. Записи в них не происходит, только чтение. 
> Замена других файлов, происходит следующим образом: находится файл, удаляется,
> пытаются открыть, не получается, записывают новый. С *.exe файлами, просто при
> установке, так не делается, они сразу же открываются для чтения/записи.
> Более подробный лог, сделанный самой программой, получить не удалось.

Я понимаю ситуацию примерно так:
Производится попытка установки, в реестре сведения о версии обновляются, version.txt несёт только справочную информацию, файлы .ini информации о весии не содержат. После установки видно, что изменено лишь несколько файлов, при запуске программа сообщает о том, что она всё ещё старой версии, при запуске установки данных видно, что версия дистрибутива(путь сохраняется в реестре) не совпадает с версией установленной программы, значит в данный момент программа ведёт себя правильно.

При установке 7.08.1 поверх 7.07.2 периодически возникает сообщение для разных папок:
trace:file:RemoveDirectoryW L"C:\\Program Files\\Garant-Server\\settings\\etaloncopy\\userdata\\"
<манипуляции с адресом>
trace:file:FILE_SetDosError errno = 39 Каталог не пуст,
а также сообщения на тему:
warn:ntdll:NtQueryAttributesFile L"\\??\\C:\\Program Files\\Garant-Server\\settings.new\\garant.ini" not found (c000003a) - не найден путь. Папки и файлы с суффиксом .new не создались...
Comment 12 Татьяна Фокина 2013-04-03 18:11:28 MSK
Поигралась с правами на файлы. На примере version.txt, если дать право на запись для всех, то файл спокойно перезаписывается. Для всех файлов и папок запись для всех запрещена, но разрешена для пользователя wine.
Comment 13 Vitaly Lipatov 2013-04-03 21:40:56 MSK
(В ответ на comment #12)
> Поигралась с правами на файлы. На примере version.txt, если дать право на
> запись для всех, то файл спокойно перезаписывается. Для всех файлов и папок
> запись для всех запрещена, но разрешена для пользователя wine.
Никакого отношения права на файлы сюда не имеют.
Если .wine и все все файлы в ней созданы под одним пользователем, все права там гарантированно правильные.
И если уж нужно узнать про права, надо почитать об этом, а не экспериментировать. Например, возможность удалить файл или изменить информацию о нём зависит от прав записи на каталог, в котором находится файл, а не от прав на файл. Посколько каталог — это на самом деле такой файл, который содержит информацию о файлах в нём.
Comment 14 Татьяна Фокина 2013-04-04 11:13:33 MSK
(В ответ на comment #13)
> (В ответ на comment #12)
> > Поигралась с правами на файлы. На примере version.txt, если дать право на
> > запись для всех, то файл спокойно перезаписывается. Для всех файлов и папок
> > запись для всех запрещена, но разрешена для пользователя wine.
> Никакого отношения права на файлы сюда не имеют.
> Если .wine и все все файлы в ней созданы под одним пользователем, все права там
> гарантированно правильные.

В правильности прав сомнений нет. У меня есть другой вопрос... У пользователя wine и группы users, как у владельца файлов и папок, есть полные права, значит программа пытается перезаписать не от этого имени, так?
Comment 15 Vitaly Lipatov 2013-04-04 22:45:20 MSK
(В ответ на comment #14)
...
> В правильности прав сомнений нет. У меня есть другой вопрос... У пользователя
> wine и группы users, как у владельца файлов и папок, есть полные права, значит
http://www.opennet.ru/base/sys/file_access.txt.html

> программа пытается перезаписать не от этого имени, так?
В нашем случае программа (wine) запускается от имени пользователя, и шансов поменять пользователя, от которого она работает, нет.

>warn:ntdll:NtQueryAttributesFile L"\\??\\C:\\Program
Files\\Garant-Server\\settings.new\\garant.ini" not found (c000003a)
А что означает код ошибки c0000003a ?

$ grep 003A include/ntstatus.h 
#define STATUS_OBJECT_PATH_NOT_FOUND     ((NTSTATUS) 0xC000003A)

Мне кажется, что нет каталога settings.new в этот момент. Проверить это легко.
Comment 16 Татьяна Фокина 2013-04-05 12:05:33 MSK
(В ответ на comment #15)
...
> >warn:ntdll:NtQueryAttributesFile L"\\??\\C:\\Program
> Files\\Garant-Server\\settings.new\\garant.ini" not found (c000003a)
> А что означает код ошибки c0000003a ?
> 
> $ grep 003A include/ntstatus.h 
> #define STATUS_OBJECT_PATH_NOT_FOUND     ((NTSTATUS) 0xC000003A)
> 
> Мне кажется, что нет каталога settings.new в этот момент. Проверить это легко.

(comment #11)
> warn:ntdll:NtQueryAttributesFile L"\\??\\C:\\Program
> Files\\Garant-Server\\settings.new\\garant.ini" not found (c000003a) - не
> найден путь. Папки и файлы с суффиксом .new не создались...

Об этом и говорила я... Изменение прав меняет ситуацию...
Comment 17 Vitaly Lipatov 2013-04-05 14:24:28 MSK
(В ответ на comment #16)
...
> > Мне кажется, что нет каталога settings.new в этот момент. Проверить это легко.
> 
> (comment #11)
> > warn:ntdll:NtQueryAttributesFile L"\\??\\C:\\Program
> > Files\\Garant-Server\\settings.new\\garant.ini" not found (c000003a) - не
> > найден путь. Папки и файлы с суффиксом .new не создались...
> 
> Об этом и говорила я... Изменение прав меняет ситуацию...
Изменение прав не может ничего менять, хотя бы потому, ты не указываешь команду,
которой ты что-то меняла, и о чём речь, не ясно.

Что-то у вас какие-то похожие темы с Сергеем:
https://bugs.etersoft.ru/show_bug.cgi?id=9037#c18

Вы как-то обменяйтесь опытом, что ли.
Comment 18 Татьяна Фокина 2013-04-15 23:47:32 MSK
(В ответ на comment #17)

> Что-то у вас какие-то похожие темы с Сергеем:
> https://bugs.etersoft.ru/show_bug.cgi?id=9037#c18
> 
> Вы как-то обменяйтесь опытом, что ли.
Почитала, посмотрела... Что-то мне не показалась эта задача особо похожей... Патчи Сергея приняты, проблема осталась.
Comment 19 Татьяна Фокина 2013-04-16 23:45:32 MSK
Да, совсем забыла...

(В ответ на comment #17)

> Изменение прав не может ничего менять, хотя бы потому, ты не указываешь
> команду,
> которой ты что-то меняла, и о чём речь, не ясно.

chmod o+w <...>
Comment 20 Vitaly Lipatov 2013-04-17 03:25:31 MSK
> > Изменение прав не может ничего менять, хотя бы потому, ты не указываешь
> > команду,
> > которой ты что-то меняла, и о чём речь, не ясно.
> 
> chmod o+w <...>
В общем, давайте проверять ещё раз.
Файлы, созданные под пользователем, не могут ему не принадлежать.
Если там что-то необыкновенное, то надо хотя бы показать,
что владелец файла не совпадает с пользователем.

Думаю, проконсультироваться можно будет с Антоном.
Comment 21 Татьяна Фокина 2013-04-17 17:57:17 MSK
(В ответ на comment #20)

> В общем, давайте проверять ещё раз.
> Файлы, созданные под пользователем, не могут ему не принадлежать.
> Если там что-то необыкновенное, то надо хотя бы показать,
> что владелец файла не совпадает с пользователем.
> 
> Думаю, проконсультироваться можно будет с Антоном.

Давайте... 

Чистая бутылка, меняю права: ничего не меняется. Запускаю хотя бы один раз из ветки winehq. Тогда при последующих запусках и через ww, и через wine, папки и файлы будут создаваться. Пока не выполнится wine --update...

Думаю, пока рано мучить Антона...
Comment 22 Татьяна Фокина 2013-04-19 23:15:37 MSK
Пытаюсь сравнить трейсы, чтобы понять, почему в одном случае файлы создаются, а в другом нет. Пока ничего интересного. Впрочем, версия программы в любом случае остается старая.
Comment 23 Татьяна Фокина 2013-06-04 18:16:42 MSK
Обнаружила следующие строки: 

trace:msi:msi_get_property returning L"7.07.2.020" for property L"DISPLAYVERSION"
trace:msi:COND_GetLiteral Got literal L"7.08.0.163"
trace:msi:MSI_EvaluateConditionW 0 <- L"Installed          AND NOT (           (ACTION ~= \"ADMIN\")           OR (REMOVE ~= \"ALL\")           OR (WixUI_InstallMode ~= \"Remove\")          )          AND (DISPLAYVERSION > \"7.08.0.163\")"
trace:msi:ITERATE_Actions Skipping action: L"Show.Error.NewVersionFound.OnImmediate" (condition is false)
trace:msi:msiobj_release object 0xc839d8 destroyed

Получается, что из-за невыполнения условия установка вообще не выполняется..?
Comment 24 Татьяна Фокина 2013-06-05 16:49:25 MSK
Проверила это и другие условия - думаю, проблема не в них.
Comment 25 Vitaly Lipatov 2013-08-02 20:06:15 MSK
Нужно в кратчайшие сроки решить эту задачу, чётко сформулировав воспроизведение проблемы.
Прошу Дмитрия, Сергея и Татьяну обсудить, кому сподручнее в ближайшую неделю рассмотреть и решить проблему.
Comment 35 Vitaly Lipatov 2013-10-28 19:55:18 MSK
Я считаю что надо не стесняться стараться задавать вопросы разработчикам Гаранта, особенно если есть конкретика. Зачем долго искать то, к чему у них есть исходный код?
Comment 49 Vitaly Lipatov 2014-09-11 18:47:43 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.