mirror of
https://gitee.com/gfdgd-xi/deep-wine-runner
synced 2025-12-13 18:42:03 +08:00
初步添加统信的wine打包脚本
This commit is contained in:
335
package-script/script-packager.sh
Executable file
335
package-script/script-packager.sh
Executable file
@@ -0,0 +1,335 @@
|
||||
#!/bin/bash
|
||||
#export elephant_deb_package_name=""
|
||||
run_sh_dir=""
|
||||
elephant_run_sh_dir=""
|
||||
start_shell="/opt/deepinwine/tools/run_v4.sh"
|
||||
if [[ -n "$SPECIFY_SHELL_PATH" ]] && [[ "$SPECIFY_SHELL_PATH" == "/opt/apps"* ]];then
|
||||
start_shell="$SPECIFY_SHELL_PATH"
|
||||
fi
|
||||
|
||||
wine_name="deepin-wine6-stable"
|
||||
if [ -n "$apprun_cmd" ];then
|
||||
wine_name=${apprun_cmd%%/bin*}
|
||||
wine_name=${wine_name##*/}
|
||||
fi
|
||||
|
||||
export public_bottle_name="$deb_package_name"
|
||||
|
||||
CheckTool()
|
||||
{
|
||||
a=$(which $1)
|
||||
if [ $? -ne 0 ]
|
||||
then
|
||||
echo "missing $1, need to install package \"$2\""
|
||||
exit
|
||||
fi
|
||||
}
|
||||
CheckParamE()
|
||||
{
|
||||
if [ -z "$1" ]
|
||||
then
|
||||
echo "$2"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
CheckPathExists()
|
||||
{
|
||||
if [ ! -d "$1" ]
|
||||
then
|
||||
echo "$2"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
RepalceVal()
|
||||
{
|
||||
VALUE="$3"
|
||||
VALUE=$(echo ${VALUE//\\/\/})
|
||||
find "$1" -type f -exec sed -i "s#$2#$VALUE#" {} \;
|
||||
}
|
||||
TranslateTemplateFile()
|
||||
{
|
||||
RepalceVal "$1" "@app_description@" "$app_description"
|
||||
RepalceVal "$1" "@app_name@" "$app_name"
|
||||
RepalceVal "$1" "@app_name_zh_cn@" "$app_name_zh_cn"
|
||||
RepalceVal "$1" "@deb_date@" "$deb_date"
|
||||
#RepalceVal "$1" "@deb_package_name@" "$deb_package_name"
|
||||
RepalceVal "$1" "@deb_packager@" "$deb_packager"
|
||||
RepalceVal "$1" "@deb_version_string@" "$deb_version_string"
|
||||
RepalceVal "$1" "@desktop_file_categories@" "$desktop_file_categories"
|
||||
#RepalceVal "$1" "@desktop_file_icon@" "$deb_package_name"
|
||||
RepalceVal "$1" "@desktop_file_main_exe@" "$desktop_file_main_exe"
|
||||
RepalceVal "$1" "@public_bottle_name@" "$public_bottle_name"
|
||||
RepalceVal "$1" "@old_package@" "$old_package_name"
|
||||
RepalceVal "$1" "@package_depends@" "$package_depends"
|
||||
RepalceVal "$1" "@mime_type@" "$mime_type"
|
||||
RepalceVal "$1" "@activex_name@" "$activex_name"
|
||||
RepalceVal "$1" "@make_autostart@" "$make_autostart"
|
||||
RepalceVal "$1" "@send_to_desktop@" "$send_to_desktop"
|
||||
RepalceVal "$1" "@exec_path@" "$EXEC_PATH"
|
||||
}
|
||||
|
||||
TranslateTemplateFileUos()
|
||||
{
|
||||
TranslateTemplateFile "$1"
|
||||
RepalceVal "$1" "@deb_package_name@" "$deb_package_name"
|
||||
RepalceVal "$1" "@desktop_file_icon@" "$deb_package_name"
|
||||
RepalceVal "$1" "@run_sh_dir@" "$run_sh_dir"
|
||||
RepalceVal "$1" "@start_shell_path@" "$start_shell"
|
||||
RepalceVal "$1" "@apprun_cmd@" "$wine_name"
|
||||
RepalceVal "$1" "@patch_loader@" "$patch_loader"
|
||||
RepalceVal "$1" "@version_info@" "$version_info"
|
||||
RepalceVal "$1" "@patch_version@" "$hack_patch_version"
|
||||
}
|
||||
|
||||
Check_icons()
|
||||
{
|
||||
if [[ -n $(find icons/ -name ${1}.svg) ]];then
|
||||
echo "${1}.svg"
|
||||
elif [[ -n $(find icons/ -name ${1}.png) ]];then
|
||||
echo "${1}.png"
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
set_version_info()
|
||||
{
|
||||
if [ $# -ne 3 ];then
|
||||
echo "invalid parameter"
|
||||
return 2
|
||||
fi
|
||||
|
||||
file=$1
|
||||
key=$2
|
||||
new_value=$3
|
||||
cat $file | while read line; do
|
||||
name=`echo $line|awk -F '=' '{print $1}'`
|
||||
if [ "$name" = "$key" ];then
|
||||
line_num=`cat -n $file |grep $key|awk '{print $1}'`
|
||||
old_value=`echo $line|awk -F '=' '{print $2}'`
|
||||
sed -i ''$line_num's/'$old_value'/'$new_value'/g' $file
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
checkInstallVersion()
|
||||
{
|
||||
ver=$(dpkg -l $1 | grep ii | awk '{print $3}')
|
||||
if [ -z "$ver" ];then
|
||||
echo "$1 未安装"
|
||||
exit 0
|
||||
elif [ "$ver" != "$2" ];then
|
||||
echo "$1 版本不是$2"
|
||||
exit 1
|
||||
else
|
||||
echo $ver
|
||||
fi
|
||||
}
|
||||
|
||||
checkWineDepends()
|
||||
{
|
||||
WINE5LIBVER="5.0.28-1"
|
||||
WINE6LIBVER="6.0.0.11-1"
|
||||
WINEHELPERVER="5.1.25-1"
|
||||
|
||||
if [ "$wine_name" == "deepin-wine5-stable" ];then
|
||||
checkInstallVersion ${wine_name}-i386 $WINE5LIBVER
|
||||
checkInstallVersion $wine_name $WINE5LIBVER
|
||||
echo "$WINE5LIBVER" > "$outfiles/wine_archive.md5sum"
|
||||
else
|
||||
checkInstallVersion ${wine_name}-i386 $WINE6LIBVER
|
||||
checkInstallVersion $wine_name $WINE6LIBVER
|
||||
echo "$WINE6LIBVER" > "$outfiles/wine_archive.md5sum"
|
||||
fi
|
||||
checkInstallVersion deepin-wine-helper $WINEHELPERVER
|
||||
checkInstallVersion deepin-wine-plugin $WINEHELPERVER
|
||||
|
||||
cp /usr/lib/i386-linux-gnu/deepin-wine/gtkGetFileNameDlg "$outfiles"
|
||||
|
||||
7z a -t7z -mx=9 -ms=on -mmt=on -m0=BCJ2 -m1=LZMA2:d=64m:fb=273 "$outfiles/wine_archive.7z" /usr/lib/i386-linux-gnu/deepin-wine5-stable/*
|
||||
echo "$WINELIBVER" > "$outfiles/wine_archive.md5sum"
|
||||
|
||||
7z a -t7z -mx=9 -ms=on -mmt=on -m0=BCJ2 -m1=LZMA2:d=64m:fb=273 "$outfiles/helper_archive.7z" /opt/deepinwine/tools/*
|
||||
echo "$WINEHELPERVER" > "$outfiles/helper_archive.md5sum"
|
||||
}
|
||||
|
||||
CheckTool "fakeroot" "fakeroot"
|
||||
|
||||
CheckParamE "$app_description" "App description not given"
|
||||
CheckParamE "$app_name" "App name not given"
|
||||
CheckParamE "$app_name_zh_cn" "App zh-cn name not given"
|
||||
#CheckParamE "$desktop_file_categories" "Categories of desktop file not given"
|
||||
#CheckParamE "$desktop_file_icon" "Icon file of desktop file not given"
|
||||
CheckParamE "$desktop_file_main_exe" "Main exe filename not given
|
||||
===>Wine set this value to WMClass of app window, Dock/Launcher need this for matching"
|
||||
CheckParamE "$deb_package_name" "Package name not given"
|
||||
CheckParamE "$deb_version_string" "Package version not given"
|
||||
|
||||
CheckParamE "$package_depends" "Package depends not given"
|
||||
|
||||
if [[ "$package_depends" == *"libc6"* ]];then
|
||||
echo "wine依赖直接改为deepin-wine5-stable或者deepin-wine6-stable"
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ "$package_depends" != *"$wine_name"* ]];then
|
||||
echo "wine 依赖和执行的wine命令不匹配"
|
||||
exit
|
||||
fi
|
||||
|
||||
BottlePath="$HOME/.deepinwine/$public_bottle_name"
|
||||
|
||||
./mkicons.sh
|
||||
desktop_file_icon=$(Check_icons $deb_package_name)
|
||||
#Replace USER value to string
|
||||
EXEC_PATH=$(echo "$exec_path" | sed -e "s/$USER/\$USER/g")
|
||||
|
||||
if [ -n "$desktop_file_categories" ] && [ -z "$desktop_file_icon" ]; then
|
||||
echo "not found icon file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$deb_packager" ];then deb_packager="Deepin WINE Team";fi
|
||||
if [ -z "$deb_packager_email" ];then deb_packager_email="penghao@linuxdeepin.com";fi
|
||||
if [ -z "$deb_date" ];then deb_date=`date -R`;fi
|
||||
|
||||
echo "+++++ Empire Starts here. +++++"
|
||||
echo "app description: $app_description"
|
||||
echo "app name: $app_name"
|
||||
echo "app name zh-cn: $app_name_zh_cn"
|
||||
echo "date: $deb_date"
|
||||
echo "deb package name: $deb_package_name"
|
||||
echo "deb packager: $deb_packager"
|
||||
echo "packager email: $deb_packager_email"
|
||||
echo "version: $deb_version_string"
|
||||
echo "app categories: $desktop_file_categories"
|
||||
echo "desktop icon: $desktop_file_icon"
|
||||
echo "app main executable: $desktop_file_main_exe"
|
||||
echo "origin bottle name: $origin_bottle_name"
|
||||
echo "public bottle name: $public_bottle_name"
|
||||
echo "old package name: $old_package_name"
|
||||
echo "package depends: $package_depends"
|
||||
echo "mime type: $mime_type"
|
||||
echo "activex name: $activex_name"
|
||||
echo "bottle path: $BottlePath"
|
||||
echo "make autostart: $make_autostart"
|
||||
echo "send to desktop: $send_to_desktop"
|
||||
echo "exec file path: $EXEC_PATH"
|
||||
echo "run shell path: $start_shell"
|
||||
echo "run wine cmd: $wine_name"
|
||||
|
||||
curdir=`pwd`
|
||||
stgdir="$curdir/staging.dir"
|
||||
dstdir="$curdir/final.dir"
|
||||
outdir="$dstdir/opt/apps/$deb_package_name"
|
||||
outentries="$outdir/entries"
|
||||
outfiles="$outdir/files"
|
||||
run_sh_dir="/opt/apps/$deb_package_name/files"
|
||||
uos_package_save="$curdir/package_save/uos"
|
||||
|
||||
export DEB_HOST_ARCH=i386
|
||||
PKG_FILE="${deb_package_name}_${deb_version_string}_i386.deb"
|
||||
|
||||
CheckPathExists "$curdir/debian" "debian package building scripts lost."
|
||||
CheckPathExists "$curdir/template" "package template scripts lost."
|
||||
echo "=====>Preparing packaging environment..."
|
||||
if [ -d "$stgdir" ]; then rm -rf "$stgdir"; fi
|
||||
mkdir -p "$stgdir"
|
||||
if [ -d "$dstdir" ]; then rm -rf "$dstdir"; fi
|
||||
mkdir -p "$dstdir"
|
||||
mkdir -p "$outentries"
|
||||
mkdir -p "$outfiles"
|
||||
if [ ! -d "$uos_package_save" ]; then mkdir -p "$uos_package_save"; fi
|
||||
|
||||
echo "<=====done."
|
||||
|
||||
if [ -n "$1" ] && [ -f "/opt/apps/$deb_package_name/files/files.7z" ]; then
|
||||
echo "Use last bottle file"
|
||||
cp /opt/apps/$deb_package_name/files/files.7z "$outfiles/"
|
||||
else
|
||||
CheckPathExists "$BottlePath" "Original bottle $BottlePath do NOT exist."
|
||||
|
||||
echo "=====>Clean bottle..."
|
||||
./cleanbottle.sh $BottlePath
|
||||
echo "<=====done."
|
||||
|
||||
echo "=====>Creating program files archive..."
|
||||
cp -r $BottlePath/* "$stgdir"
|
||||
# Dir links in profile should been recreated when deploy.
|
||||
find "$stgdir/drive_c/users/$USER" -type l -exec rm "{}" \;
|
||||
# Remove packager personal information. We will expand user name when deploy.
|
||||
sed -i "s#$USER#@current_user@#" $stgdir/*.reg
|
||||
mv "$stgdir/drive_c/users/$USER" "$stgdir/drive_c/users/@current_user@"
|
||||
# Merge additional files for this package.
|
||||
if [ -d "$curdir/specified/$deb_package_name/bottle" ]; then
|
||||
cp -ruv $curdir/specified/$deb_package_name/bottle/* $stgdir
|
||||
else
|
||||
cp -ruv $curdir/specified/temp/bottle/* $stgdir
|
||||
fi
|
||||
|
||||
if [ -f "$curdir/specified/$deb_package_name/root/opt/apps/$deb_package_name/files/extensions.so" ]; then
|
||||
if [ ! -f "$stgdir/winx" ]; then
|
||||
mkdir -p "$stgdir/winx"
|
||||
fi
|
||||
ln -s /opt/apps/$deb_package_name/files/extensions.so "$stgdir/winx/extensions.so"
|
||||
ls -l "$stgdir/winx/extensions.so"
|
||||
fi
|
||||
|
||||
7z a -t7z -mx=9 -ms=on -mmt=on -m0=BCJ2 -m1=LZMA2:d=64m:fb=273 "$outfiles/files.7z" "$stgdir/*"
|
||||
fi
|
||||
|
||||
md5sum "$outfiles/files.7z" | awk '{print $1}' > "$outfiles/files.md5sum"
|
||||
|
||||
echo "<=====done."
|
||||
echo "=====>Creating additional files..."
|
||||
cd "$outdir"
|
||||
if [ -d "$dstdir/debian" ]; then
|
||||
rm -rf "$dstdir/debian"
|
||||
fi
|
||||
cp -r "$curdir/debian/" "$dstdir"
|
||||
TranslateTemplateFileUos "$dstdir/debian/"
|
||||
if [ -d "$curdir/specified/$deb_package_name/root/" ]; then
|
||||
echo "copy root files.."
|
||||
cp -ruv $curdir/specified/$deb_package_name/root/* "$dstdir"
|
||||
if [ -d "$dstdir/usr/" ]; then
|
||||
echo "$dstdir/usr/* /usr" &>> "$dstdir/debian/install"
|
||||
fi
|
||||
fi
|
||||
cp "$curdir/template/run.sh" "$outfiles"
|
||||
TranslateTemplateFileUos "$outfiles/run.sh"
|
||||
cp "$curdir/template/info" "$outdir"
|
||||
TranslateTemplateFileUos "$outdir/info"
|
||||
|
||||
#if no desktop_file_categories, don't create desktop
|
||||
if [ -n "$desktop_file_categories" ]; then
|
||||
mkdir -p "$outentries/applications"
|
||||
cp "$curdir/template/target.desktop" "$outentries/applications/$deb_package_name.desktop"
|
||||
TranslateTemplateFileUos "$outentries/applications/$deb_package_name.desktop"
|
||||
|
||||
# TODO: We should generate icons from main program automatically.
|
||||
cd "$curdir/icons"
|
||||
find -iname "$desktop_file_icon" -exec dirname "{}" \; | xargs -I "{}" mkdir -p "$outentries/icons/{}"
|
||||
find -iname "$desktop_file_icon" -exec cp "{}" "$outentries/icons/{}" \;
|
||||
|
||||
fi
|
||||
|
||||
cd "$dstdir"
|
||||
echo "$outdir/* /opt/apps/$deb_package_name" &>> "debian/install"
|
||||
echo "<=====done."
|
||||
|
||||
echo "=====>Creating deb package..."
|
||||
fakeroot "debian/build" "$dstdir"
|
||||
echo "<=====done."
|
||||
|
||||
echo "=====> Removing temporary files..."
|
||||
mv "$dstdir/$PKG_FILE" "$uos_package_save"
|
||||
|
||||
#rm -rf "$stgdir"
|
||||
#rm -rf "$dstdir"
|
||||
echo "<=====done."
|
||||
echo -e "\n\nDeb file generated: $PKG_FILE\n"
|
||||
echo "+++++ all done. +++++"
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user