如何将Window应用封装成rpm包
by JiangBiao
场景
使用wine适配Windows应用程序后,需要将相应的Windows应用封装成rpm包的形式,便于使用包管理工具安装,安装后需要在桌面创建图标,用户点击后即可使用wine启动应用程序。
本文描述制作相应rpm包的基本方法。
RPM包内容
RPM包中主要包含两部分内容:
- Source
- Spec文件
Source
Source中需要提供3部分内容:
- 包含Windows应用程序的所有文件的压缩包。
- Desktop文件。
- 应用程序对应的Icon文件。
已EDiary为例:SOURCES目录内容为:
[root@localhost SOURCES]# ls
EDiary.desktop EDiary.png wine-ediary-1.tar.gz
其中wine-ediary-1.tar.gz解压后内容为:
[root@localhost SOURCES]# ls wine-ediary-1
EDiary.desktop EDiary.png EDiary.tar.gz
其中,EDiary.tar.gz即为应用程序压缩包。
EDiary.desktop和EDiary.png与上级目录中的两个文件内容一样,只是因为rpm包装方便需要。
应用程序压缩包
通常将应用程序在Window系统中的安装目录打包即可,以EDiary为例,通常安装于C:\Program Files\Ediary
[root@localhost wine-ediary-1]# ls EDiary
Background EDiary.exe FileConv.exe Sample.edf unins000.dat
EDiary.chm EDiary.url Readme.txt Skins unins000.exe
Desktop文件
用于显示桌面图标,并启动应用程序。已EDiary为例,其内容如下:
[Desktop Entry]
Categories=System;
Name=EDiary
Exec=env WINEPREFIX="/root/.wine" /usr/bin/wine C:\\\\Program\\ Files\\\\EDiary\\\\EDiary.exe
Type=Application
StartupNotify=true
Comment=wine ediary
Icon=EDiary
Name[zh_CN]=EDiary
内容属自解释型,就不罗嗦了。
icon文件
通常应用程序都会自带相应的icon文件,用于在桌面和其他场景(比如任务栏)中显示,最简单的情况,提供一个48x48大小的即可,通常在应用程序安装包中可以找到相应的文件。
Spec文件
Spec文件中定义rpm包的内容,对于Windows程序的封装,更重要的是post脚本,在其中执行真正的安装和配置操作。以EDiary为例,其内容如下:
[root@localhost SOURCES]# cat ../SPECS/wine-ediary.spec
Summary: EDiary tool running with wine.
Name: wine-ediary
Version: 1
Release: 0.1
License: GPL
Group: System Environment/Base
URL: http://www.gd-linux.com/
Source0: wine-ediary-%{version}.tar.gz
Source1: EDiary.desktop
Source2: EDiary.png
Requires: wine
Requires: winbase
BuildArch: noarch
%description
wine-ediary is EDiary tool running with wine.
%prep
%setup
%build
%install
mkdir -p $RPM_BUILD_ROOT/tmp/.winApp/
mkdir -p $RPM_BUILD_ROOT/usr/share/applications/
mkdir -p $RPM_BUILD_ROOT/usr/share/icons/hicolor/64x64/apps/
mkdir -p %{buildroot}/root/桌面/
mkdir -p %{buildroot}/root/.local/share/icons/hicolor/48x48/apps/
cp -f EDiary.tar.gz $RPM_BUILD_ROOT/tmp/.winApp/
cp -f EDiary.desktop %{buildroot}/root/桌面/
cp -f EDiary.png %{buildroot}/root/.local/share/icons/hicolor/48x48/apps
cp -rf %{SOURCE1} $RPM_BUILD_ROOT/usr/share/applications/
cp -rf %{SOURCE2} $RPM_BUILD_ROOT/usr/share/icons/hicolor/64x64/apps/
%files
/tmp/.winApp/EDiary.tar.gz
/root/桌面/EDiary.desktop
/root/.local/share/icons/hicolor/48x48/apps/EDiary.png
/usr/share/applications/EDiary.desktop
/usr/share/icons/hicolor/64x64/apps/EDiary.png
%post
cd /tmp/.winApp/
if [ -d /root/.wine/drive_c/Program\ Files ];then
tar xvf EDiary.tar.gz -C /root/.wine/drive_c/Program\ Files/ >/dev/null
fi
gtk-update-icon-cache --force /usr/share/icons/hicolor/ 1>/dev/null 2>&1
%preun
%clean
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
%postun
rm -rf /root/桌面/EDiary.desktop
if [ -d /root/.wine/drive_c/Program\ Files/EDiary ];then
rm -rf /root/.wine/drive_c/Program\ Files/EDiary
fi
%changelog
* Wed Jul 5 2017 Jiang Biao <jiang.biao@zte.com.cn> - 1-0
- Initial wine EDiary
直接都能看懂,不过多解释,注意几个关键点:
- 安装包只是将Windows程序压缩包安装到/tmp目录中,临时存放。真正的安装操作在%post脚本中,其中,会将将其解压到wine的工作目录中。
- 图标仅用了48x48的,如果有其它size,可以参考做类似处理。
Easyeast way
看起来步骤并不简单,其实,如果要封装一个新的app,最简单的方法,就是copy已有的封装过的rpm包源码目录,然后做相应的修改即可,简单方便,但需要细心。
Subscribe via RSS