【无标题】linux打包utools为appimage
linux打包utools为appimage
- 前言
- 说明
- 依赖 可以下载appimage到脚本目录,然后给一个可执行权限
- 脚本如下
前言
本人使用manjaro多年,期间出现了多次滚挂的情况,最近想切换到nixos(传说中的linux发行版的一股泥石流,由于用法比较怪异,学习成本居高不下也被人称做linux中的“邪教”),但是遇到了一些问题,由于鄙人也是utools的重度(中毒)用户脱离这玩意开发效率大打折扣,遂折腾了一下将这玩意打包程appimge的脚本,分享出来供兄弟们参考
说明
以下脚本仅供学习用,请在使用后24小时内删除,禁止用于任何修改utools功能以及任何的破解软件等侵犯原作者权益用途,使用本脚本的任何风险自担
依赖 可以下载appimage到脚本目录,然后给一个可执行权限
linuxdeploy
appimagetool
wget https://github.com/tauri-apps/binary-releases/releases/download/linuxdeploy/linuxdeploy-x86_64.AppImage
chmod +x linuxdeploy-x86_64.AppImage
wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
脚本如下
#!/bin/bash
set -x
# 检查依赖项
dependencies=("wget" "tree" "sed")
for dep in "${dependencies[@]}"; do
if ! command -v "$dep" &> /dev/null; then
echo "错误: $dep 未安装,请安装 $dep 后再运行脚本。"
exit 1
fi
done
# 定义变量
APP_NAME="uTools"
APP_DIR="$APP_NAME.AppDir"
EXECUTABLE="/opt/uTools/utools"
DESKTOP_FILE="/usr/share/applications/utools.desktop"
ICON_FILE="/usr/share/icons/hicolor/256x256/apps/utools.png"
LINUXDEPLOY_URL="https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"
LINUXDEPLOY="linuxdeploy-x86_64.AppImage"
FFMPEG_LIB="/opt/uTools/libffmpeg.so"
# 创建 AppDir 目录结构
mkdir -p "$APP_DIR/opt"
mkdir -p "$APP_DIR/usr/share/applications"
mkdir -p "$APP_DIR/usr/share/icons/hicolor/256x256/apps"
mkdir -p "$APP_DIR/usr/share/pixmaps" # 创建缺失的目录
# 使用 sudo 复制整个 uTools 目录到 AppDir 的 opt 下
sudo cp -rf /opt/uTools "$APP_DIR/opt"
if [ $? -eq 0 ]; then
echo "成功将 /opt/uTools 复制到 $APP_DIR/opt"
else
echo "复制 /opt/uTools 到 $APP_DIR/opt 失败"
fi
# 调整复制后的文件权限,以便后续操作
sudo chown -R $USER:$USER "$APP_DIR/opt/uTools"
if [ $? -eq 0 ]; then
echo "成功修改 $APP_DIR/opt/uTools 的权限"
else
echo "修改 $APP_DIR/opt/uTools 的权限失败"
fi
# 输出 AppDir 中 opt/uTools 目录的权限信息
ls -l "$APP_DIR/opt/uTools"
# 检查可执行文件是否存在
APP_EXECUTABLE="$APP_DIR/opt/uTools/utools"
if [ ! -f "$APP_EXECUTABLE" ]; then
echo "错误: 可执行文件 $APP_EXECUTABLE 不存在,请检查复制过程。"
exit 1
fi
# 确保可执行文件有正确的权限
chmod +x "$APP_EXECUTABLE"
if [ $? -eq 0 ]; then
echo "成功设置 $APP_EXECUTABLE 的可执行权限"
else
echo "设置 $APP_EXECUTABLE 的可执行权限失败"
fi
# 复制桌面文件,使用 -f 选项强制覆盖
if [ -f "$DESKTOP_FILE" ]; then
cp -f "$DESKTOP_FILE" "$APP_DIR/usr/share/applications/"
if [ $? -eq 0 ]; then
echo "成功复制桌面文件到 $APP_DIR/usr/share/applications/"
else
echo "复制桌面文件到 $APP_DIR/usr/share/applications/ 失败"
fi
# 复制桌面文件到 AppDir 根目录
cp -f "$DESKTOP_FILE" "$APP_DIR/"
if [ $? -eq 0 ]; then
echo "成功复制桌面文件到 $APP_DIR 根目录"
else
echo "复制桌面文件到 $APP_DIR 根目录 失败"
fi
else
echo "警告: 未找到桌面文件 $DESKTOP_FILE"
fi
# 复制图标文件,使用 -f 选项强制覆盖
if [ -f "$ICON_FILE" ]; then
cp -f "$ICON_FILE" "$APP_DIR/usr/share/icons/hicolor/256x256/apps/"
if [ $? -eq 0 ]; then
echo "成功复制图标文件到 $APP_DIR/usr/share/icons/hicolor/256x256/apps/"
else
echo "复制图标文件到 $APP_DIR/usr/share/icons/hicolor/256x256/apps/ 失败"
fi
# 复制图标文件到 AppDir 根目录
cp -f "$ICON_FILE" "$APP_DIR/"
if [ $? -eq 0 ]; then
echo "成功复制图标文件到 $APP_DIR 根目录"
else
echo "复制图标文件到 $APP_DIR 根目录 失败"
fi
else
echo "警告: 未找到图标文件 $ICON_FILE"
fi
# 复制 libffmpeg.so
if [ -f "$FFMPEG_LIB" ]; then
mkdir -p "$APP_DIR/usr/lib"
cp "$FFMPEG_LIB" "$APP_DIR/usr/lib/"
if [ $? -eq 0 ]; then
echo "成功复制 libffmpeg.so 到 $APP_DIR/usr/lib/"
else
echo "复制 libffmpeg.so 到 $APP_DIR/usr/lib/ 失败"
fi
# 确保文件权限正确
chmod +r "$APP_DIR/usr/lib/libffmpeg.so"
if [ $? -eq 0 ]; then
echo "成功设置 $APP_DIR/usr/lib/libffmpeg.so 的读权限"
else
echo "设置 $APP_DIR/usr/lib/libffmpeg.so 的读权限失败"
fi
else
echo "警告: 未找到 libffmpeg.so 文件"
fi
# 下载 linuxdeploy
if [ ! -f "$LINUXDEPLOY" ]; then
wget "$LINUXDEPLOY_URL"
if [ $? -eq 0 ]; then
echo "成功下载 $LINUXDEPLOY"
else
echo "下载 $LINUXDEPLOY 失败"
fi
chmod +x "$LINUXDEPLOY"
if [ $? -eq 0 ]; then
echo "成功设置 $LINUXDEPLOY 的可执行权限"
else
echo "设置 $LINUXDEPLOY 的可执行权限失败"
fi
fi
# 生成 AppRun 文件
APPRUN_FILE="$APP_DIR/AppRun"
cat << EOF > "$APPRUN_FILE"
#!/bin/sh
HERE="\$(dirname "\$(readlink -f "\${0}")")"
exec "\$HERE/opt/uTools/utools" "\$@"
EOF
chmod +x "$APPRUN_FILE"
echo "成功生成 $APPRUN_FILE"
# 打印 AppDir 内的文件结构,用于调试
echo "AppDir 内的文件结构:"
tree "$APP_DIR"
# 使用 linuxdeploy 仅处理依赖,不复制文件
./$LINUXDEPLOY --appdir "$(pwd)/$APP_DIR" --deploy-deps-only="$(pwd)/$APP_EXECUTABLE" --executable="$(pwd)/$APP_EXECUTABLE" --output appimage
#./$LINUXDEPLOY --appdir="$(pwd)/uTools.AppDir" --executable="$(pwd)/uTools.AppDir/opt/uTools/utools" --desktop-file="$(pwd)/uTools.AppDir/usr/share/applications/uTools.desktop" --icon-file="$(pwd)/uTools.AppDir/utools.png"
./appimagetool-x86_64.AppImage $(pwd)/uTools.AppDir/
echo "AppImage 打包完成!"
echo "AppDir 目录路径为: $(realpath $APP_DIR)"
# 查找生成的 AppImage 文件
APPIMAGE_FILE=$(find . -maxdepth 1 -name "${APP_NAME}-*.AppImage" | head -n 1)
if [ -n "$APPIMAGE_FILE" ]; then
echo "生成的 AppImage 文件路径为: $(realpath $APPIMAGE_FILE)"
else
echo "未找到生成的 AppImage 文件,请检查打包过程是否有错误。"
fi