автоматизация обнавления системы. сложности с установкой и откатом обнавлений
написал модуль обновлений, который позволяет
- создавать пакеты обновления. эта возможность доступна только разработчику
- устанавливать пакеты обновления, обновляя систему до последней версии
- откак обновления. отмена всех действий которые могли быть произведены после последнего обновления. также откат, в силу своей организации, позволяет последовательно откатываться назад вплоть до первой версии
- ну и естественно просмотр подробной информации о пакете обновления
но вот на днях обнаружил баг (хорошо что обнаружил в теории, а не на практике )
ситуация следующая
предположим я установил 5 обновлений, но мне не понравился результат и я решил откатиться назад.
откатился на одну вторую третью, и на первой я решил что результат меня устраивает
но через некоторое время работы я пришел к выводу что фича которая появилась в 5 версии мне нужна
и я начинаю опять устанавливать обновления и тут обнаруживается первый баг
программа по умолчанию устанавливает последнюю версию,
то есть в моем случае получается что новая версия это пятая предыдущие 4 он не установит
а 5 версия может не работать без установки одного или нескольких пакетов из предыдущих 4 версий
для решения этой проблемы можно переписать программу, чтобы она
устанавливала версии последовательно с первой по последнюю в порядке возрастания (чем я сейчас и занимаюсь)
но тут автоматически возник вопрос, а что делать если какого-то из нужных пакетов просто нет в наличии
и без него нужное мне обновление просто не будет работать
в теории в процессе установки обновления можно проверять
было ли ранее установлен пакет необходимый для работы этой версии
но тут автоматически возникает сложность
если для установки обновления требуется наличие 2-3 пакетов, это нормально
а когда это 20-30 уже получается серьезная нагрузка
и увеличивается вероятность забыть про какой ни будь очень важный пакет
в общем, хотелось бы услышать ваши комментарии и предложения
как можно лучше организовать автоматическое обновление системы
PS: автоматическое обновление подразумевает - автоматический поиск обновления(например на удаленном хосте), в случае если пользователь хочет установить обновление оно скачивается на сервер и автоматически устанавливается. откат и установка уже загруженных пакетов производится через специальный админский интерфейс
в моем случае установка пакетов возможна только в порядке возрастания
программа по умолчанию устанавливает последнюю версию,
то есть в моем случае получается что новая версия это пятая предыдущие 4 он не установит
Почему не установит? Заводишь спец. число - номер версии. Если ты откатываешь на старую или устанавливаешь новую - меняешь номер версии на соответствующую.
но тут автоматически возник вопрос, а что делать если какого-то из нужных пакетов просто нет в наличии
и без него нужное мне обновление просто не будет работать
А если связь с сервером (или сам сервер) упадет, будем телепатически пакеты отправлять?
у меня так и сделано
в основном файле, где я объявляю все константы, установлены константы с номером текущей версии и датой ее установки
я тоже об этом все думаю
причин по которым нужный пакет может быть не установлен бесконечное множество
единственное решение, которое приходит в голову
на сервере, который отдает пакет обновления, проверять какое обновление нужно установить после текущего, и подсовывать соответствующее, а не просто отдавать более новое обновление
в таком случае на сервере придется хранить список всех обновлений, когда-либо созданных
в основном файле, где я объявляю все константы, установлены константы с номером текущей версии и датой ее установки
Тогда я не понимаю в чем вопрос.
на сервере, который отдает пакет обновления, проверять какое обновление нужно установить после текущего, и подсовывать соответствующее, а не просто отдавать более новое обновление
в таком случае на сервере придется хранить список всех обновлений, когда-либо созданных
Это само собой разумеется, если планируется возможность отката.
у меня была мысля взять что-то готовое
почитал немного про SVN, вполне интересно
но так как уже есть готовый модуль и трать время на то чтобы разобраться в другом продукте
и встроить его в рабочее прилажение мне кажется немного неосмыслено
если будет время может и сделаю