PHP аналог apt

1. Артур (02.11.2013 / 10:41)
Добрался до механизма установки, обновления и удаления пакетов в моей системе (аналог apt-get для php). Установить и удалить пакет (каталог файлов php) не составляет особого труда, но есть проблема с обновлением пакетов, прошу навести на мысль.
Имеем модуль (каталог с php классами) для которого определена его версия. Для данного модуля можно повысить версию, если обновить некоторые (или все) входящие в него файлы. Вопрос: как обновить модуль в случае, если для его обновления требуется его же участие?
Для не понявших проблему объясню, если интерпретатор будет использовать любой из файлов модуля в своей работе, то удалить этот файл уже будет нельзя и обновление не удастся, в ОС это решается путем перезагрузки компьютера.

2. Александр (02.11.2013 / 10:53)
Копируешь во временен папку и устанавливаешь текущую директорию chdir() на исходную?

3. Артур (02.11.2013 / 10:56)
Что копирую? Используемый интерпретатором старый модуль?

4. Александр (02.11.2013 / 11:01)
Если модуль можно сделать прокси для этого, подключать модули которые обновляются через прокси из временной директории.

5. Артур (02.11.2013 / 11:03)
Можно подробнее?

6. Александр (02.11.2013 / 11:07)
1. Перед началам обновы копировать модуль во временную папку.
2. Добавить код в часть где подключается модуль обновляется ли он, если да то загружать из временной папки.

7. Артур (02.11.2013 / 11:08)
А как узнать что модуль не используется и его можно удалять?

Добавлено через 00:13 сек.
Или реализовать что то вроде перезагрузки системы?

Добавлено через 06:23 сек.
Я думаю может лучше реализовать так: есть модуль upgrade, который принимает "заказы" на обновления других модулей и даже всей системы. При получении "заказа", модуль складывает его в журнал обновлений, но ничего не обновляет. Обновление производится встроенным в модуль, но не зависящим от загрузчика системы классом (что позволяет не париться на счет использования обновляемых файлов) в определенный момент (когда системой никто не пользуется). Этот момент определяет системный администратор

8. Александр (02.11.2013 / 11:15)
Прочитать список модулей из временной папки или сохранить куда то?

9. Артур (02.11.2013 / 11:17)
8. Муз-ТВ, второе

10. Александр (02.11.2013 / 11:18)
Можно использовать файл конфигурации для каждого модуля, в котором обозначена версиия, и подключать модуль последней версии. Если появилась инфа о новой версии, асинхронно скачать новую, и со следующего запуска, уже будет новый модуль.

11. Артур (02.11.2013 / 11:19)
Вообще модули распространяются в виде архивов в котором содержатся все файлы модуля и файл конфигурации, хранящий информацию о модуле (в том числе его версию). upgrade достаточно записывать эти архивы в некоторый каталог, а при перезагрузке просто удалить имеющиеся модули и заменить их модулями из архивов

Добавлено через 02:11 сек.
10. Муз-ТВ, тогда придется реализовывать поиск наиболее современных модулей при каждом обращении к системе + сложно будет с зависимостями, может какой то модуль еще не умеет работать с обновленным собратом + нужно хранить в системе все ревизии модулей или как то узнавать что появилась новая версия, скачивать ее, ждать пока все пользователи начнут ее использовать и после этого удалять старую ревизию (та же проблема)

12. Александр (02.11.2013 / 11:25)
11, в таком случае в чём вопрос, у тебя нет выбора, только ждать когда система будет с минимальной нагрузкой, и только тогда установить обновление.

Добавлено через 01:24 сек.
Или если прописаны зависимости в обновлении, то почему не сделать одновременное обновление необходимых модулей?, если кончено не важно какая версия у каждого пользователя.

13. Артур (02.11.2013 / 11:27)
12. Муз-ТВ, в этом и вопрос: автоматизировать ли процесс ожидания (вести журнал используемых модулей, и если какой то модуль вдруг не используется быстренько обновить его (опасное решение в связи с зависимостями)) или оставить это за системный администратором, дав ему файл скрипта, который он должен запустить, когда система монопольна (ну можно еще в этот файл добавить механизм монополизации системы).

Добавлено через 00:52 сек.
12. Муз-ТВ, нет, версия не важна. Да, я уже делаю автоматическое разрешение зависимостей, но пока остановился на уровне обновления одного модуля и системы в целом

Добавлено через 04:48 сек.
сейчас часок отвлекусь на контру и продолжу думать

14. Александр (02.11.2013 / 11:35)
13, если в этом вопрос, то это уже твой выбор, хочешь рискнуть - 1, если нет то 2.

15. Артур (02.11.2013 / 11:36)
Не любитель я рисковать

16. Ant0ha (08.11.2013 / 15:15)
15. Башка, ты реальный велосипедист!) Есть же композер! http://getcomposer.org/

URL: https://visavi.net/topics/39382