使用wine在ubuntu上运行和制作deb安装包

wine原理

wine通过在linux上模拟windows的API,加载并运行windows程序。那么,wine具体是如何实现的?

windows和linux,作为典型的PC操作系统,分为内核态的系统调用和用户态的API。linux上,用户态的API通过glibc来条用系统调用(int 0x80), windows通过ntdll.dll来调用内核态(syscall, 最早也是int中断)。

所以在linux上模拟windows的api是可能的,只要实现了ntdll的API兼容实现(部分或者全部),在通过对PE文件的拆解和定位,就可以将所有的调用通过树状结构汇总到ntdll。

然而是线上,还是相当工作需要执行,比如如何在用户态或者linux内核其他对象来模拟windows的句柄概念(windows内核对象的访问方式)?

初始化windows执行基础环境

$ WiNEPREFIX=/home/.mine/win7 wine winecfg

安装依赖库

$ WINEPREFIX=/home/.mine/win7 winetricks vcrun6

测试验证程序

$ WINEPREFIX=/home/.mine/win7 wine registry.exe

deb打包

deb打包有详细的debian文档支持,这里从一个已有的deb包作为base来打包。
deb打包需要在DEBIAN目录下修改至少以下3个文件:

DEBIAN/control
DEBIAN/postinst
DEBIAN/md5sums

下载一个deb包,这里以tdx的deepin包为例,通过dpkg-deb命令解包和提取配置信息。

参考 基于deepin-wine的windows软件打包deb安装包教程(本實例安裝qq)

准备files.7z

将win7的运行基础环境通过7z压缩,注意目录前缀(确保drive_c在第一级)
替换opt子目录下的files.7z。用以下脚本打包:

#!/bin/bash
cd env 
7z a ../extract/opt/apps/com.hd.deepin/files/files.7z *
cd ..
find extract/opt -type f -print0 |xargs -0 md5sum > extract/DEBIAN/md5sums
dpkg-deb --build extract/ build/

你可能感兴趣的:(脚本技术,ubuntu,windows,linux)