Создание дистрибутива Windows-приложения для Linux

()

В какой-то момент у меня появилась задача: на большое количество компьютеров (около пятидесяти), работающих под управлением kubuntu 7.04, потребовалось установить одно windows приложение (разумеется под Wine). Установка на каждом компьютере заняла бы достаточно время, поэтому нужно было более простое и быстрое решение.

Решение было найдено, и оно достаточно простое. Оно основано на том, что все windows-приложения и все их настройки в конечном итоге расположены в папке ~/.wine. Достаточно настроить всё на одной машине, упаковать эту папочку в тарбол и распаковать на остальных машинах. В принципе на этом всё, но поскольку был ряд дополнительных условий, то рассмотрим задачу подробнее.

Сначала был установлен wine

apt-get install wine

Для нормальной работы приложения понадобился IE6, который был установлен с помощью скрипта ies4linux. Поскольку по умолчанию скрипт в качестве wineprefix использует каталог ~/.ies4linux/ie6, то для нормальной работы wine без лишних заморочек был создал симлинк:

ln -s ~/.ies4linux/ie6 ~/.wine

Далее было установлено необходимое приложение:

wine Setup.exe

После установки был самостоятельно создан ярлык для этого приложения на рабочем столе KDE. Имя файла ярлыка - ~/Desktop/Prog.desktop

Всё. Теперь осталось только установить wine на остальные машины и скопировать эту конфигурацию. Для этого был создан несложный дистрибутив. Для начала "подготовим почву":

cd ~
mkdir Distr
tar -cvjf Distr/wine_max.tar.bz2  .ies4linux
cp Desktop/Prog.desktop Distr/
cp /var/cache/apt/archives/binfmt-support_1.2.8_all.deb Distr/
cp /var/cache/apt/archives/wine_0.9.33-0ubuntu1_i386.deb Distr/

Далее создаём скрипт Distr/install.sh следующего содержания:

#!/bin/sh

# На всякий случай удаляем предыдущие инсталляции
rm -rf ~/.ies4linux
rm -rf ~/.wine

# Получаем путь исходным файлам
SOURCEDIR=`dirname $0`

# Распаковываем архив
tar jxfv ${SOURCEDIR}/wine_max.tar.bz2 -C ~/

# Создаём симлинк
ln -s ~/.ies4linux/ie6 ~/.wine

# Копируем ярлык
cp ${SOURCEDIR}/Prog.desktop ~/Desktop/

# Инсталлируем wine
sudo dpkg -i ${SOURCEDIR}/binfmt-support_1.2.8_all.deb ${SOURCEDIR}/wine_0.9.33-0ubuntu1_i386.deb

# Извещаем о завершении работы:)
echo Installation Successfull!

Делаем скрипт исполняемым:

chmod +x Distr/install.sh

Всё. Теперь копируем дистрибутив на флэшку или раскладываем на наши машины по сети и на всех запускаем инсталлятор.

В моём случае на этом работа кончилась, однако уже потом это решение было усовершенствовано. Сначала был создан тарбол со всеми исходными файлами:

tar cvf distr.tar Distr/

Далее был создан скрипт distr.sh следующего содержания:

#!/bin/sh

# Длина скрипта (количество строк)
LENGTH=22

# Отцепляем приклеенный архив во временный файл
tail -n +${LENGTH} $0 > /tmp/distr.tar

# Распаковываем архив во временную папку
tar xvf /tmp/distr.tar -C /tmp

# Удаляем временный файл
rm -f /tmp/distr.tar

# Запускаем инсталлятор
sh /tmp/Distr/install.sh

# Удаляем временные файлы
rm -rf /tmp/Distr

exit 0

Параметр LENGTH полезно уточнить. Он должен быть на единицу больше чем вывод команды:

wc -l distr.sh

Далее "склеиваем" наш скрипт с тарболом:

cat distr.sh distr.tar > setup.sh
chmod +x setup.sh

Всё. Мы получили инсталлятор в одном файле. С таким инсталлятором работать намного удобнее :)

Можно так же написать скрипт, который "раскидает" этот инсталлятор по целевым машинам с помощью scp, а потом запустит его по ssh, но это я оставлю читателю.

Ключевые слова: wine, sh, tar, ies4linux, инсталлятор, tail, cat, wc.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности