вторник, 11 ноября 2014 г.

wine: песочница для Windows-приложений

Для многих главным препятствием перехода на "модную" ОС Linux является "невозможность" запуска программ для Windows, которым нет достойного аналога в Linux. Однако такая возможность запуска есть, и во многих случаях работает, называется WINE...
Оставим лирику, перейдём к делу.
В Linux есть возможность запускать Windows-программы в относительно независимых "песочницах", хотя
ПРЕДУПРЕЖДЕНИЕ! ни данный способ, ни другие ухищрения с WINE не гарантируют безопасность данных пользователя и других "контейнеров" WINE. По сути, WINE не создаёт достаточной изоляции запускаемых приложений!
Суть метода состоит в игре с переменной окружения WINEPREFIX. Небольшой скрипт позволяет быстро развернуть новый "контейнер" WINE и запустить нужную программу в нём.

Вот, собственно, скрипт:
#!/bin/bash

PARENT_DIR=${PARENT_DIR:-$TMP}
NAME_BASE=`basename "$0"`

WINE_DIR=`ls "$PARENT_DIR" | egrep "^$NAME_BASE" | head -n1`
if [[ -z "$WINE_DIR" ]]; then
    WINE_DIR="$NAME_BASE".$$
fi
export WINEPREFIX=${WINEPREFIX:-"$PARENT_DIR"/"$WINE_DIR"}

if [[ ! -d "$WINEPREFIX" ]]; then
    cp -a "$HOME/.wine/sandbox.template" "$WINEPREFIX"
    wine
    wine regedit "$WINEPREFIX"/system_merge.reg
    wine regedit "$WINEPREFIX"/user_merge.reg
#FIXME symlinks to $HOME
fi


winecfg >> "$WINEPREFIX"/wine.log 2>&1 &
wine "$1" >> "$WINEPREFIX"/wine.log 2>&1
Как видно, тут есть поддержка предустановок в виде шаблона папки и кусков реестра. В шаблон можно положить, например, dosdevices/t: -> /tmp
Оригинальное название скрипта: wine-sandbox.sh