Re: Как реализован in place upgrade в Дебиан? На чем основан и чем чревато?

2012-11-12 Пенетрантность Victor Wagner
On 2012.11.11 at 00:34:10 +0200, Oleksandr Gavenko wrote:

   Packages can be upgraded in place, even in running systems.
 
 Собственно понятие на юзерском уровне есть. Как бы обновление без
 перезаuрузки или остановки сторонних сервисов.
 
 Естественно что такие действия опасные. Например случаи:
 
  * Если разделяемая библиотека загружена в память несколькими процесами.
  * Если программа из одного пакета обращается к файлу из другого пакета (-bin 
 и
-data пакеты).

 К примеру, в Cygwin рекомендуют закрывать все Cygwin сервисы и программы. Если

Cygwin работает на файловой системе NTFS. Которая не позволяет удалять
файлы, открытые работающим процессом.

В Unix-подобных системах, в том числе и в Linux файловая система
работает по-другому. Ссылка на файл из каталога (т.н. hardlink) и
ссылка на файл из
открывшего его процесса фактически равноправны. На файл может
существовать сколько угодно ссылок, и он физически удаляется с диска
только если исчезла последняя ссылка на него.

Поэтому, если удалить разделяемую библиотеку обыкновенным системным
вызовом unlink(2), процессы, использующие эту библиотеку будут
продолжать её видеть.  А package manager или утилита install могут
прекрасно записать новую библиотеку на место старой.

И только при завершении последнего процесса, использюующего старую
библиотеку, она физически будет удалена с диска (inode помечен как
deleted).

Если внимательно следить да debian-системой в процессе апгрейда основной
системной библиотеки (glibc) то можно увидеть что при апгрейде иногда
производится перезапуск некоторого набора сервисов.

Это делается потому что glibc на самом деле не одна библиотека, а
несколько (всякие там подгружаемые модули libnss). И если апгрейд таков,
что процессы, подгрузившие старый libc.so не смогут при необходимости
работать с  новыми  libnss, которые им захочется подгрузить позже, 
при завершении апгрейда процессы перезапускают.

Кроме уже рассмотренного системного вызова unlink(2) есть еще вызов
rename(2).  Он отличается тем, что работает атоммарно. Поэтому если
записать файл на диск под именем something.tmp а потом удалить старый
something и переименовать something.tmp в something, время когда на
диске не существует корректного файла c именем something (либо старого, либо
нового) будет минимальным. 




-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20121112123519.ga32...@wagner.pp.ru



Re: Как реализован in place upgrade в Дебиан? На чем основан и чем чревато?

2012-11-12 Пенетрантность Ivan Shmakov
 Victor Wagner vi...@wagner.pp.ru writes:

[…]

  Кроме уже рассмотренного системного вызова unlink(2) есть еще вызов
  rename(2).  Он отличается тем, что работает атомарно.  Поэтому если
  записать файл на диск под именем something.tmp а потом удалить старый
  something и переименовать something.tmp в something, время когда на
  диске не существует корректного файла c именем something (либо
  старого, либо нового) будет минимальным.

Нулевым, если говорить об ФС.  (Состояние /диска/ может и не
быть целостным.)  С поправкой на то, что явный unlink на новое
имя перед вызовом rename не требуется.

--cut: http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html --
[…] If the link named by the new argument exists, it shall be
removed and old renamed to new.  In this case, a link named new shall
remain visible to other processes throughout the renaming operation
and refer either to the file referred to by new or old before the
operation began.
--cut: http://pubs.opengroup.org/onlinepubs/9699919799/functions/rename.html --

-- 
FSF associate member #7257


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/86txsvc6za@gray.siamics.net



Re: Как реализован in place upgrade в Дебиан? На чем основан и чем чревато?

2012-11-12 Пенетрантность Oleksandr Gavenko
On 2012-11-12, Victor Wagner wrote:

 Cygwin работает на файловой системе NTFS. Которая не позволяет удалять
 файлы, открытые работающим процессом.

 В Unix-подобных системах, в том числе и в Linux файловая система
 работает по-другому. Ссылка на файл из каталога (т.н. hardlink) и
 ссылка на файл из
 открывшего его процесса фактически равноправны. На файл может
 существовать сколько угодно ссылок, и он физически удаляется с диска
 только если исчезла последняя ссылка на него.

 Поэтому, если удалить разделяемую библиотеку обыкновенным системным
 вызовом unlink(2), процессы, использующие эту библиотеку будут
 продолжать её видеть.  А package manager или утилита install могут
 прекрасно записать новую библиотеку на место старой.

 И только при завершении последнего процесса, использюующего старую
 библиотеку, она физически будет удалена с диска (inode помечен как
 deleted).

 Если внимательно следить да debian-системой в процессе апгрейда основной
 системной библиотеки (glibc) то можно увидеть что при апгрейде иногда
 производится перезапуск некоторого набора сервисов.

 Это делается потому что glibc на самом деле не одна библиотека, а
 несколько (всякие там подгружаемые модули libnss). И если апгрейд таков,
 что процессы, подгрузившие старый libc.so не смогут при необходимости
 работать с  новыми  libnss, которые им захочется подгрузить позже, 
 при завершении апгрейда процессы перезапускают.

 Кроме уже рассмотренного системного вызова unlink(2) есть еще вызов
 rename(2).  Он отличается тем, что работает атоммарно. Поэтому если
 записать файл на диск под именем something.tmp а потом удалить старый
 something и переименовать something.tmp в something, время когда на
 диске не существует корректного файла c именем something (либо старого, либо
 нового) будет минимальным. 

Как говорится - подали на ложечке. Вообще спасибо всем учасникам.

Как бы дальше осмысляя появился ряд странных вопросов:

 * У программы есть ресурсы, например иконки, раскиданые по файлам, которые
   загружаюся по необходимости. Если я обновлю пакет и программа из пакета
   будет запущенной - то новые запросы на ресурсы вернут дескрипторы на
   обновленные файлы. А ведь файлы могут быть переименоваными в пакете или
   изменен формат данных - т.е. будет плохо?

 * Если доступаться к файлам пакета по требованию не безопасно с точки зрения
   возможности обновлять пакет in place - стоит ли писать/переписать
   программу в стиле - открыть все возможные файлы, а затем использовать
   полученые дескрипторы?

-- 
Best regards!


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/87390er2dz@gavenkoa.example.com



Re: Как реализован in place upgrade в Дебиан? На чем основан и чем чревато?

2012-11-12 Пенетрантность Eugene Berdnikov
On Mon, Nov 12, 2012 at 10:29:28PM +0200, Oleksandr Gavenko wrote:
  * У программы есть ресурсы, например иконки, раскиданые по файлам, которые
загружаюся по необходимости. Если я обновлю пакет и программа из пакета
будет запущенной - то новые запросы на ресурсы вернут дескрипторы на
обновленные файлы. А ведь файлы могут быть переименоваными в пакете или
изменен формат данных - т.е. будет плохо?

 Maybe.

  * Если доступаться к файлам пакета по требованию не безопасно с точки зрения
возможности обновлять пакет in place - стоит ли писать/переписать
программу в стиле - открыть все возможные файлы, а затем использовать
полученые дескрипторы?

 Используйте по возможности текстовые форматы, будьте толерантны к входным
 данным, продумайте вопросы совместимости версий. Если формат бинарный и
 апдейт может сломать процесс, постарайтесь зачитать файл в момент запуска.
 Вообще, рекомендую посмотреть главу 5 книжки Э.Рэймонда Искусство
 программирования для UNIX (E.Raymond, Art of UNIX Programming).
-- 
 Eugene Berdnikov


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20121112210938.gg11...@sie.protva.ru



Re: После обновления ядра не отключается питание USB портов в suspend mode

2012-11-12 Пенетрантность Anton Anikin

11.11.2012 19:13, Alexander Danilov пишет:

В моих ноутах это настраивается в bios.
В стационарном включено, в носимом - выключено.


На моем Thinkpad T520 тоже есть подобная опция в BIOS. Автору следует 
проверить у себя. Возможно новое ядро просто стало учитывать эту 
настройку :)



--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/50a1ece3.2060...@gmail.com