Назад | Перейти на главную страницу

Кросс-платформенный наблюдатель файловой системы, работающий на хосте наблюдения за виртуальной машиной?

Может ли кто-нибудь предложить способ копирования данных с хоста виртуальной машины на виртуальную машину [0] кроссплатформенным способом между хостами (например, Windows, Mac или Linux)? Прямо сейчас я добиваюсь этого, выполняя rsync в виртуальной машине в цикле, что, очевидно, не очень хорошо.

На высоком уровне я предоставляю согласованную среду сборки / тестирования для разработчиков, использующих крайне несовместимые среды разработки. Когда разработчик клонирует базу кода, виртуальная машина запускается в фоновом режиме для выполнения последовательных инкрементных сборок и тестов при редактировании кода на хост-машине.

В моей текущей реализации виртуальная машина монтирует синхронизированную папку, содержащую исходный код, доступную только для чтения. Я не хочу, чтобы виртуальная машина что-либо записывала в файловую систему хоста, так как это может помешать ручной сборке или тестам, запускаемым разработчиками. Итак, у меня есть виртуальная машина, копирующая содержимое исходного каталога в гостевую файловую систему [1].

Я выполняю эту копию, выполняя вечный сценарий bash для синхронизации содержимого каждые три секунды.

while true
do
    sleep 3
    rsync -av --exclude '.git' --exclude-from $MOUNTDIR/.gitignore $MOUNTDIR/ $BUILDDIR/
done

Очевидно, это не идеально.

Я изучал использование различных наблюдателей за файловой системой (на основе inotify или kqueue), но все они привязаны к определенному типу файловой системы (NTFS, ext3 / 4, HFS +).

Есть ли какой-либо кросс-платформенный способ отслеживания изменений файловой системы? Либо какая-то абстракция над службами push-уведомлений для файловой системы, либо система опроса, не зависящая от платформы?

Существует ли такая вещь в какой-либо существующей библиотеке или инструменте? Или есть какой-то общий шаблон, который мне здесь не хватает.

[0] Гипервизор Virtualbox, предоставленный Vagrant, работает под управлением Ubuntu, но у меня есть гибкость в отношении всех этих зависимостей.

[1] Я попытался сделать это, установив символическую ссылку на смонтированную папку, но наша система сборки gulp, разрешит символические ссылки, вызывающие боль