10

Строим матрешку из Wine и ваших приложений

Давненько я ничего не писал, но тут на меня снизошло желание сделать пост. Ну ладно.
Думаю, среди тех, кто недавно перешел на 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 и прекрасно себя чувствую.

Ответ: Вот и сидите дальше, что вы здесь забыли?


Может быть, что-то упустил.

GNU/Linux

1.2K поста15.6K подписчика

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.