Принципы разработки того, как менеджеры репозитория Linux обновляются сами? - PullRequest
0 голосов
/ 15 октября 2010

Я знаю, что есть и другие приложения, но учитывая, что yum / apt-get / aptitude / pacman, вы основные менеджеры пакетов для дистрибутивов linux.

Сегодня я увидел на своей коробке fedora 13:

(7/7): yum-3.2.28-4.fc13_3.2.28-5.fc13.noarch.drpm       |  42 kB     00:00     

И я начал задаваться вопросом, как сам такой пакет обновляется?Какой дизайн необходим, чтобы программа могла обновляться сама?

Возможно, этот вопрос слишком общий, но я чувствовал, что ТАК более уместен, чем программисты. Для такого вопроса он был более техническим по своей природе.Если есть более подходящее место для этого вопроса, не стесняйтесь, дайте мне знать, и я могу закрыть или модератор может двигаться.

Спасибо.

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Я понятия не имею, как работают эти конкретные системы, но ...

  • Современные системы Unix обычно допускают перезапись исполняемого файла без сбоев, поэтому теоретически вы можете просто сделать это.
  • Вы можете сделать это в изолированной тюрьме, а затем переместить или сделать что-то подобное, чтобы сократить время, в течение которого система уязвима.Добавьте журналируемую файловую систему, и это немного безопаснее.

Мне пришло в голову, что менеджеру пакетов необходимо также хранить базу данных доступа к пакетам в памяти, чтобы застраховаться от состояния гонки.Опять же, опция chroot jail and copy доступна в качестве альтернативы с меньшим риском.

0 голосов
/ 27 октября 2010

И я начал задаваться вопросом, как сам такой пакет обновляется? Какие дизайн необходим, чтобы программа могла обновляться сама собой?

Это похоже на многие вещи, вам не нужно специально «проектировать», чтобы решить эту проблему ... но вам нужно знать об определенных «ошибках».

Например, Unix помогает путем подсчета ссылок inode, так что «вы» можете удалить файл, который вы все еще используете, и это нормально. Однако это подразумевает несколько вещей, которые вы должны сделать, например, если у вас есть плагины, вам нужно загрузить их все до того, как вы запустите запуск транзакции ... даже если плагин будет работать только в конце транзакция (потому что в конце может быть другая версия).

Есть также некоторые вещи, которые вам нужно сделать, чтобы убедиться, что все, что вы обновляете, работает, например: Положите новые файлы перед удалением старых файлов. И не обрезайте старые файлы, просто отмените связь. Но они также помогут вам:).

Использование внешних проблем, с которыми вы общаетесь, может быть сложным (потому что вы не можете выполнить новую копию старой версии после ее обновления). Но это не часто делается, и когда это происходит для таких вещей, как загрузка ... что может быть легко осуществлено перед любыми обновлениями.

Существуют также вещи, которые не имеют значения в клиентах cmd line, таких как yum / apt, например, если у вас есть программа, которая будет запускать 2+ «обновления», то у вас могут возникнуть проблемы, если первое обновление было к менеджеру пакетов. понижения делают это еще более забавным :). Также демоноподобные процессы в принципе никогда не должны «загружать» менеджер пакетов, но, как и в случае с другими ошибками ... вы склонны следовать этому в любом случае по другим причинам.

...