适用于Deepin和UOS的wine程序打包,基于UOS生态适配群里的原有脚本,感谢前期的各位大佬。
当我们用deepin-wine安装了一个win32程序后,会在~/.local/share/applications/ 下面生成一个.desktop文件,这里存放了软件启动的相关信息。并且会在 ~/.deepinwine/apps/ 下面生成一个软件包,后面当我们利用这个文件夹进行打包时,需要重新编辑软件的相关信息。我在自动打包程序中添加了交互部分,使用户可以直接输入软件的中文名以及版本号,然后程序默认读取.desktop文件里的信息,并自动复制整个apps下面的文件夹到上一级目录,然后进行自动打包过程。
脚本放在百度网盘中,以下也有源码。
链接: https://pan.baidu.com/s/1LBjrkIFbVIkHIRHMBRxwDg 密码: 3jmi
#—————————————————————————————————————————————————————————————————————————————— #UOS打包脚本 #首先可以查看当前已经安装程序的名称和位置 #正式使用前,可以将各echo行注释掉,这里只是用于测试 ls ~/.local/share/applications/ #另一种可能是.desktop文件存放在桌面,则 #ls ~/Desktop/ #—————————————————————————————————————————————————————————————————————————————— #进行必要的交互,获取需要修改的信息 read -p "请输入您要打包软件的中文名称:" name_zh_cn echo "您要打包的是:${name_zh_cn}" read -p "请输入版本号:" version read -p "请输入您的姓名:" read -p "请输入您的联系方式或邮箱:" email desktop_file=~/.local/share/applications/$name_zh_cn'.desktop' #当desktop文件存放在桌面或别处时,请修改这里的路径 #desktop_file=~/Desktop/$name_zh_cn'.desktop' #读取.desktop文件内容 #var=`echo $desktop_file | awk -F ' ' '{print $1,$8}' |sed "s/=/ /g"` var=$desktop_file #……………………………………………………………………………………………………………………………………………………………………………………………………………… #一句话介绍描述 #可在官网,软件下载站找到相关描述,或自己撰写 app_note=`cat $var | awk -F '=' 'NR==2{print $2}'` echo 软件简介=$app_note #……………………………………………………………………………………………………………………………………………………………………………………………………………… #英文名(驼峰命名) #驼峰命名是指混合使用大小写字母来构成变量和函数的名字,可理解为:几个单词不用空格组合在一起,首字母大写区分彼此。 #upper_name="Kwmusic" upper_name=`cat $var | awk -F '=' 'NR==8{print $2}'| sed -e 's/.exe//g'|sed "s/\b\(.\)/\u\1/g"` echo 英文名=$upper_name #……………………………………………………………………………………………………………………………………………………………………………………………………………… #中文名,此处名字需要与deepin-wine助手安装exe程序时,确认窗口显示的中文名字相一致, #也和desktop文件中name后的名字一致。如果确实显示为英文,这里也写英文。 name_zh_cn=`cat $var | awk -F '=' 'NR==2{print $2}'` echo 软件名=$name_zh_cn #……………………………………………………………………………………………………………………………………………………………………………………………………………… #域名, #一般为官网网址中不含www和com的部分,比如:www.winmount.com,这里指winmount #app_url=$(echo $var |awk '{print $2}') app_url=$(echo $upper_name |tr [:upper:] [:lower:]) echo 软件网址=$app_url #……………………………………………………………………………………………………………………………………………………………………………………………………………… #分类 #AudioVideo音视频,Audio音频,Video视频,Development开发,Education教育,Game游戏, #Graphics图形,Network网络,Office办公,Settings设置,System系统,Utility实用工具 #以上为主分类,更多细分类可参考https://blog.csdn.net/shawzg/article/details/106943100 cagegories=`cat $var | awk -F '=' 'NR==4{print $2}'` echo 类型=$cagegories #……………………………………………………………………………………………………………………………………………………………………………………………………………… #exe程序地址,注意开头的c是小写 #通过查看desktop文件获得,通常是“Exec=”一行的末尾一段,比如下面一行作为例子: #C:\\\\Program\\ Files\\\\Meitu\\\\XiuXiu\\\\XiuXiu.exe #改写为:c:\\Program Files\\Meitu\\XiuXiu\\XiuXiu.exe #如果可执行文件在用户目录时,用“$USER”代替用户名,比如下面一行: #"c:\\users\\你的uos账户名字\\Application Data\\Typeeasy\\11.5\\TypeEasy.exe" #再改写为"c:\\users\\$USER\\Application Data\\Typeeasy\\11.5\\TypeEasy.exe" #path="C:\\Program Files\\kuwo\\kuwomusic\\9.1.1.4_W4\\bin\\kwmusic.exe" path=`cat $var | awk -F '=' 'NR==6{print $2}' |sed -e 's/^.*c\:/C\:/g'|sed 's/\//\\\\/g'` echo 路径=$path #exe程序名 #上面exe文件路径最后的部分 main_exe=`cat $var | awk -F '=' 'NR==8{print $2}'` echo 主程序=$main_exe #……………………………………………………………………………………………………………………………………………………………………………………………………………… #版本号 #Deepin-wine助手安装确认窗口可以显示,安装完成试运行,通常"关于"中会显示,建议以“关于“中显示为准。 #version="6.0.3.3" echo 版本号=$version #……………………………………………………………………………………………………………………………………………………………………………………………………………… #容器ID, #直接在desktop文件中,找到类似Exec=env WINEPREFIX="/home/henryuos/.deepinwine/apps/美图秀秀_1"一行, #其中“美图秀秀“是被安装的程序的名字,后面“_”之后的字符串就是容器ID。 #也可到deepin-wine助手默认把程序文件安装到~/.deepinwine/apps目录下,查看生成的“中文名_字符串”的文件夹,容器ID指“_”后面的字符串 #比如程序安装目录为~/.deepinwine/apps/WinMount_1,提取其中“_”后面的字符串“1” apps_wineid="1" #……………………………………………………………………………………………………………………………………………………………………………………………………………… #您的邮箱 #email="[email protected]" echo email=$email #……………………………………………………………………………………………………………………………………………………………………………………………………………… #……………………………………以下部分为不需要编辑的内容……………………………………………………………………………………………………………… #……………………………………………………………………………………………………………………………………………………………………………………………………………… #……………………………………获取脚本所在路径,cd切换到脚本目录…………………………………………………………………………………………… cd $(dirname $0) #cd $(dirname $(readlink $0)) #soft link #……………………………………………………………………………………………………………………………………………………………………………………………………………… #格式化程序名 name=$(echo $upper_name |tr [:upper:] [:lower:]) url=$app_url"."$name if [ $app_url == $name ]; then url=$name fi echo "package ""com."$url".deepin"" ......" #……………………………………………………………………………………………………………………………………………………………………………………………………………… chmod +x *.sh chmod +x icotool chmod +x wrestool chmod +x ./debian/* #rm -fr package_save/ rm -fr final.dir/ rm -fr icons/ rm -fr staging.dir/ #……………………………………………………………………………………………………………………………………………………………………………………………………………… #将容器复制到上级文件夹并改名 cp -r ~/.deepinwine/apps/$name_zh_cn"_"$apps_wineid/ ~/.deepinwine/"Deepin-"$upper_name/ #……………………………………………………………………………………………………………………………………………………………………………………………………………… #最终生成的包的描述 export app_description=$app_note #应用程序英文名 export app_name=$upper_name #应用程序中文名 export app_name_zh_cn=$name_zh_cn #要打包的原始容器名(目前假定容器一定存放于当前用户目录下) #export origin_bottle_name=".WeChat" #部署时在用户机器上的容器名(部署后位于~/.deepinwine/容器名) export public_bottle_name="Deepin-"$upper_name #desktop文件中的分类 export desktop_file_categories=$cagegories #desktop文件中的图标名,与包名匹配 #export desktop_file_icon="deepin.com.wechat.svg" #desktop文件中StartupWMClass字段。用于让桌面组件将窗口类名与desktop文件相对应。这个值为实际运行的主程序EXE的文件名,wine/crossover在程序运行后会将文件名设置为窗口类名 export desktop_file_main_exe=$main_exe export exec_path=$path #最终生成的包的包名,包名的命名规则以deepin开头,加官网域名(需要前后对调位置),如还不能区分再加上应用名 export deb_package_name="com."$url".deepin" #专业版的包名 export elephant_deb_package_name="deepin.com."$name #最终生成的包的版本号,版本号命名规则:应用版本号+deepin+数字 export deb_version_string=$version"deepin1" #之前老的包名,安装新的包自动卸载老的包 export old_package_name="deepin.com."$name export deb_packager_email=$email wine_depends="libasound2 (>= 1.0.16), libc6 (>= 2.28), libglib2.0-0 (>= 2.12.0), libgphoto2-6 (>= 2.5.10), libgphoto2-port12 (>= 2.5.10), libgstreamer-plugins-base1.0-0 (>= 1.0.0), libgstreamer1.0-0 (>= 1.4.0), liblcms2-2 (>= 2.2+git20110628), libldap-2.4-2 (>= 2.4.7), libmpg123-0 (>= 1.13.7), libopenal1 (>= 1.14), libpcap0.8 (>= 0.9.8), libpulse0 (>= 0.99.1), libudev1 (>= 183), libvkd3d1 (>= 1.0), libx11-6, libxext6, libxml2 (>= 2.9.0), ocl-icd-libopencl1 | libopencl1, udis86, zlib1g (>= 1:1.1.4), libasound2-plugins, libncurses6 | libncurses5 | libncurses" export package_depends="$wine_depends, deepin-wine-plugin-virtual" export apprun_cmd='$HOME/.deepinwine/deepin-wine5-stable/bin/wine' export SPECIFY_SHELL_PATH='$HOME/.deepinwine/deepin-wine-helper/run_v3.sh' export patch_loader="LD_PRELOAD=/opt/apps/$deb_package_name/files/libloader.so" ./script-packager.sh $@ echo $deb_package_name
这是一个shell脚本,可以放在任何位置,添加运行权限即可自动打包了。如果有什么问题,可以留言。
谢谢分享
Popular Ranking
Popular Events
适用于Deepin和UOS的wine程序打包,基于UOS生态适配群里的原有脚本,感谢前期的各位大佬。
当我们用deepin-wine安装了一个win32程序后,会在~/.local/share/applications/ 下面生成一个.desktop文件,这里存放了软件启动的相关信息。并且会在 ~/.deepinwine/apps/ 下面生成一个软件包,后面当我们利用这个文件夹进行打包时,需要重新编辑软件的相关信息。我在自动打包程序中添加了交互部分,使用户可以直接输入软件的中文名以及版本号,然后程序默认读取.desktop文件里的信息,并自动复制整个apps下面的文件夹到上一级目录,然后进行自动打包过程。
脚本放在百度网盘中,以下也有源码。
链接: https://pan.baidu.com/s/1LBjrkIFbVIkHIRHMBRxwDg 密码: 3jmi