Давненько я ничего не писал, но тут на меня снизошло желание сделать пост. Ну ладно.
Думаю, среди тех, кто недавно перешел на Linux, часто возникает потребность использовать Wine. Я и сам, каюсь, иногда его использую. Сейчас я расскажу, как держать на компьютере его разные версии и разные префиксы просто в одной папке, да еще так, что это все будет очень красиво (наверное) логически организовано.
Необходимое предисловие - возможно, вам следует почитать про каскадно-объединенное монтирование. Его принцип - использование различных файловых систем как слоев в матрешке.
Каждый следующий слой представляет разницу с предыдущим. Таким образом реализуется принцип CopyOnWrite, иными словами, нижний слой может быть ReadOnly, а во второй мы будем записывать разницу. Зачем это нужно - будет понятно по тексту.
Саму установку Wine можно разделить на 3 части - бинарники, префикс (аналог диска C:) и, собственно, ваши приложения. Вот мы и разделим.
Основной принцип таков - разделить все на сжатые squashfs файлы (их будет два, один с Wine, а второй с пустым префиксом) и папку, в которой будут ваши настройки и приложения. Посмотрите, что выйдет. Главный принцип - все манипуляции, кроме установки нужных пакетов, будут от юзера.
Сначала надо скачать нужные бинари Wine. Советую для простоты взять отседова:
https://www.playonlinux.com/wine/binaries/phoenicis/
Распаковывам архив, получаем папку с Wine, в ней должны содержаться стандартные для приложения папки - bin, lib, share, и т.д.
Теперь создадим пустой префикс. Сделаем скрипт (назовем его wine5, он нам еще пригодится):
#!/bin/bash
root=`pwd`
cd ./папка_с_вайном/bin
env WINEPREFIX=$root/test_prefix LD_LIBRARY_PATH=$root/папка_с_вайном ./wine "$*"
Запустим этот скрипт папке с папкой Wine и получим пустой префикс в папке test_prefix:
./wine5 winecfg
Теперь запакуем Wine и пустой префикс в squashfs файлы:
mksquashfs ./папка_с_вайном wine_compressed.sqsh -comp lzo
mksquashfs ./test_frefix clear_prefix.sqsh -comp lzo
Почему lzo? Потому-что жмет почти как zip, а на распаковке дает до 1.5 ГБ/с. Такое сжатие может даже ускорить работу на HDD. Приятный бонус - размер бинарей вайна и префикса сократится в 2-3 раза.
В итоге получим все два файла, которые, в сущности, и есть весь Wine. Теперь надо написать скрипт(можете начинать), который их монтирует и размонтирует.
Для начала надо поставить такие вещи, как squashfuse и unionfs-fuse. Это зависит от вашего пакетного менеджера. Допустим, пакеты вы поставили.
Сначала смонтируем squashfs:
squashfuse wine_compressed.sqsh ./wine_mountpoint
squashfuse clear_prefix.sqsh ./prefix_mount_ro
Потом создадим директории prefix_rw(сюда будут записываться ваши приложения) и prefix_merged(полная версия) и соберем матрешку префикса:
unionfs-fuse -o cow ./prefix_rw=RW:./prefix_mount_ro=RO ./merged
Теперь поправим в вашем скрипте пути, пропишем в WINEPREFIX путь к merged, а папку с вайном заменим на wine_mountpoint.
Все можно пользоваться! Размонтировать это дело можно с помощью fusermount -u (добавьте в свой скрипт или сделайте отдельный, по вкусу), опять же, полностью от юзера.
Кроме того, обратите внимание на пути.
Что это дает?
1. А то, что монтировать unionfs можно сколько угодно раз, единожды примонтировав wine и пустой префикс. Таким образом, можно создавать префиксы - для простоты - пустые установки Windows, которые почти ничего не весят, как контейнеры. Кроме того, слоев в матрешке может быть сколько угодно. Можно упаковать и приложения. Можно даже запаковать целую игру, в rw будут писаться только сохранения и настройки. Так что применение зависит только от вашей фантазии и целей.
2. Значительное сокращение размера.
3. Все это внутри одной папки и не требует софта кроме тонких оберток типа squashfuse и unionfs-fuse, которые во многих дистрибутивах есть по дефолту.
Послесловие или FAQ.
Вопрос: Это все известно и используется в контейнерах и LiveCD, зачем ты это пишешь?
Ответ: Потому-что могу и хочу.
Вопрос: Почему не использовать более современную aufs?
Ответ: Она не умеет в FUSE.
Вопрос: Ничего не понял, нафига мне это красноглазие? Я сижу на Windows и прекрасно себя чувствую.
Ответ: Вот и сидите дальше, что вы здесь забыли?
Может быть, что-то упустил.