И я начал задаваться вопросом, как сам такой пакет обновляется? Какие
дизайн необходим, чтобы программа могла обновляться сама собой?
Это похоже на многие вещи, вам не нужно специально «проектировать», чтобы решить эту проблему ... но вам нужно знать об определенных «ошибках».
Например, Unix помогает путем подсчета ссылок inode, так что «вы» можете удалить файл, который вы все еще используете, и это нормально. Однако это подразумевает несколько вещей, которые вы должны сделать, например, если у вас есть плагины, вам нужно загрузить их все до того, как вы запустите запуск транзакции ... даже если плагин будет работать только в конце транзакция (потому что в конце может быть другая версия).
Есть также некоторые вещи, которые вам нужно сделать, чтобы убедиться, что все, что вы обновляете, работает, например: Положите новые файлы перед удалением старых файлов. И не обрезайте старые файлы, просто отмените связь. Но они также помогут вам:).
Использование внешних проблем, с которыми вы общаетесь, может быть сложным (потому что вы не можете выполнить новую копию старой версии после ее обновления). Но это не часто делается, и когда это происходит для таких вещей, как загрузка ... что может быть легко осуществлено перед любыми обновлениями.
Существуют также вещи, которые не имеют значения в клиентах cmd line, таких как yum / apt, например, если у вас есть программа, которая будет запускать 2+ «обновления», то у вас могут возникнуть проблемы, если первое обновление было к менеджеру пакетов. понижения делают это еще более забавным :).
Также демоноподобные процессы в принципе никогда не должны «загружать» менеджер пакетов, но, как и в случае с другими ошибками ... вы склонны следовать этому в любом случае по другим причинам.