Bug 29520

Summary: Программы в wine перестали запускаться из-за недоступного на запись TMP
Product: Sisyphus Reporter: Vadim Zelenin <VadimZelenin>
Component: wineAssignee: Vitaly Lipatov <lav>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: lav
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on:    
Bug Blocks: 40797    
Attachments:
Description Flags
Фрагмент лога с WINEDEBUG=all none

Description Vadim Zelenin 2013-10-24 14:48:39 MSK
Ранее работавшие в wine программы перестали запускаться.
В консоли диагностика - 

err:module:attach_process_dlls "winspool.drv" failed to initialize, aborting
err:module:LdrInitializeThunk Main exe initialization for L"C:\\InisSoft\\Space\\ut\\ut_test.exe" failed, status c0000005

впрочем, winecfg в этом WINEPREFIX-е тоже не запускается:

err:module:attach_process_dlls "winspool.drv" failed to initialize, aborting
err:module:LdrInitializeThunk Main exe initialization for L"C:\\windows\\system32\\winecfg.exe" failed, status c0000005

В strace загрузки winspool.drv есть строки:

0.000045 open("/home/lana/.wine-znak/dosdevices/c:/users", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 16
0.000085 brk(0x7c549000)           = 0x7c549000
0.000051 getdents64(16, /* 4 entries */, 32768) = 104
0.000109 getdents64(16, /* 0 entries */, 32768) = 0
0.000046 brk(0x7c541000)           = 0x7c541000
0.000051 close(16)                 = 0
0.000053 --- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0} ---
0.000037 rt_sigreturn()            = 0

Проблема скорее всего не связана с обновлением ПО, так как в период с последнего успешного использования программы до момента отказа обновления не проводились.

Предположительно проблема возникла в следствии того, что на одном из компьютеров в cups "расшарили" принтер.

OS ALT Linux 6.0.2 KDesktop  (Centaurea Sadleriana),
на клиенте работают и cups и avahi-daemon
Comment 1 Vadim Zelenin 2013-10-25 02:26:17 MSK
Created attachment 5979 [details]
Фрагмент лога с WINEDEBUG=all
Comment 2 Vadim Zelenin 2013-10-25 02:26:51 MSK
Прошу прощения за то, что начал писать ошибку не испробовав все варианты разрешить проблему самостоятельно.
Оказалось, что эта ошибка - на 90% моя и только на 10% - wine.

История такая. 
Этот префикс wine у меня упакован в пакет и в домашний директорий пользователя разворачивается из архива. 
При создании архива я удалил C:\users\<имя пользователя>, но не догадался внести правки в реестр,
поэтому там остались настройки типа TMP=C:\users\<имя пользователя>\Temp. Это нисколько не мешало работать 
windows программе в wine, и моя ошибка была невидима больше года.
Как я уже писал, на днях я "расшарил" принтер, avahi подсуетился и wine на ученических машинках стал настраивать принтеры.
При этом wine пытается создать директорий %TMP%\wine_ppds\ , но не может сделать этого.
В приложении помещу избранные места из отчёта, созданного при WINEDEBUG=all.

Признаю свою ошибку, но мне кажется, что было бы полезно внести небольщое изменение в wine.
В порядке убывания предпочтительности можно сделать:
- Разрешить рекурсивно создавать временный директорий
- и/или - В случае неуспеха использования %TMP% предусмотреть fallback C:\Temp
- или - завершать запуск winespool.drv, но не сегфолтом, а с сообщением с явным указанием причины прекращения работы.
Comment 3 Andrey Cherepanov 2013-10-25 10:36:04 MSK
Перенесу на Sisyphus, чтобы предложение не потерялось.
Comment 4 Vitaly Lipatov 2013-10-25 11:59:09 MSK
> - и/или - В случае неуспеха использования %TMP% предусмотреть fallback C:\Temp
> - или - завершать запуск winespool.drv, но не сегфолтом, а с сообщением с явным
указанием причины прекращения работы.
Падение при невозможности создать временный каталог — это, конечно, ошибка.
А использование %TMP% не должно быть иным, чем в Windows.
Я бы сделал где-то на старте проверку, доступен ли TMP на запись, то есть такая проверка на валидность настроек...
Comment 5 Vadim Zelenin 2013-10-25 14:24:33 MSK
> Падение при невозможности создать временный каталог — это, конечно, ошибка.
> А использование %TMP% не должно быть иным, чем в Windows.

Согласен, но версий windows было достаточно много и меня укачивает при мысли, что кто-то будет ставить по очереди все версии и проверять как оно там было :)

Насколько я помню, для "системных" процессов там был %WINDIR%/Temp, но мой последний windows был W2K. Так что поведение wine в вопросе временных файлов уже отличается от windows. 

> Я бы сделал где-то на старте проверку, доступен ли TMP на запись, то есть такая
> проверка на валидность настроек...

Это тоже приемлемо. По крайней мере это сразу выявит ошибки пользователей wine, а не отложит их на полтора года.
Comment 6 Vitaly Lipatov 2013-10-25 16:54:26 MSK
Не указана версия пакета wine, но думаю, что старая, которая была в p6. 

Сейчас на wine-1.7.4 вижу такое сообщение:
err:winediag:FILE_CreateFile failed to open L"\\??\\C:\\windows\\profiles\\502\\Temp\\wine_ppds\\" because of insufficient access rights

Хотя может быть я не воспроизвожу.
Comment 7 Vadim Zelenin 2013-10-25 17:55:58 MSK
(В ответ на комментарий №6)
> Не указана версия пакета wine, но думаю, что старая, которая была в p6. 
да, это "штатный" шестёрочный wine-1.6-rc3
Comment 8 Vitaly Lipatov 2024-02-09 11:46:55 MSK
Думаю, сейчас всё достаточно изменилось, чтобы такой проблемы не было.