当前位置: 首页 > news >正文

【无标题】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

相关文章:

  • “Common::PluginInterface”: 无法实例化抽象类
  • 线程控制
  • Node.js EventEmitter 深入解析
  • 从零开始学Python游戏编程17-函数2
  • 手机静态ip地址怎么获取?方法与解析‌
  • ESModule和CommonJS在Node中的区别
  • windows上opencv编译cuda版本
  • java学习笔记14——网络编程
  • CesiumEarth卫星影像/电子地图等二维切片数据制作
  • AI重构知识生态:大模型时代的学习、创作与决策革新
  • 基于队列构建优先级抢占机制的LED灯框架设计与实现
  • 新闻发稿软文发布投稿选择媒体时几大注意
  • 企业使用文档加密系统的两个重要原因。
  • 【OSG学习笔记】Day 2: 场景图(Scene Graph)的核心概念
  • CUDA 工具链将全面原生支持 Python
  • Odrive0.5.1-FOC电机控制 arm_cos_f32.cpp arm_sin_f32.cpp代码实现(二)
  • ChatGPT的GPT-4o创建图像Q版人物提示词实例展示
  • `mpi4py` 是什么; ModuleNotFoundError: No module named ‘mpi4py
  • SQL练习题
  • 智慧医院常用的子系统介绍 51-100
  • 网站整合营销建设/网络推广都有哪些平台
  • 深圳建设工程网/北京seo服务行者
  • 买一款app要多少钱/seo及网络推广招聘
  • 网站建设 中企动力/企业如何建站
  • dedecms做的网站如何上线/google关键词指数
  • 青岛做网站大公司有哪些/互联网广告销售好做吗