• 26 1 分 25 秒

    开发环境准备

    群晖工具链下载

    访问群晖官方档案库,根据目标设备的CPU架构(如x86_64、arm64)和DSM版本(如DSM 7.x)下载对应工具链(如gcc_850_glibc229_x86_64-GPL.txz)。

    1、解压工具链至开发机(Linux推荐),设置环境变量:

    bash
    export PATH=/path/to/toolchain/bin:$PATH

    2、SPK打包工具

    安装必要依赖:tar、gzip、openssl(用于签名)。

    获取官方打包脚本模板:DSM SDK GitHub(含pkgscripts目录)https://github.com/SynologyOpenSource/pkgscripts-ng

    一个标准SPK包含以下文件:

    MyPackage.spk
    ├── INFO          # 核心配置文件(必需)
    ├── scripts/      # 安装/升级/卸载脚本
    │   ├── preinst
    │   ├── postinst
    │   └── preremove
    ├── package.tgz   # 主程序文件(压缩包)
    ├── conf/         # 配置文件(可选)
    ├── icon.png      # 套件图标(72x72像素)
    └── LICENSE       # 许可协议文本

    3、创建核心配置文件(INFO)
    INFO文件字段说明(官方文档):

    字段 示例 值说明
    package MyApp 套件唯一ID(字母数字+下划线)
    version 1.0.0-0001 格式:主版本.次版本.修订版-构建号
    arch x86_64 支持的CPU架构(多架构用逗号分隔,如x86_64 aarch64)
    firmware 7.0-40000 最低支持的DSM版本
    displayname 我的应用 套件中心显示名称
    description 功能描述... 简短说明(<100字符)
    maintainer name@example.com 维护者联系信息
    distributor 公司名 发行方名称
    package="MyApp"
    version="1.0.0-0001"
    arch="x86_64"
    firmware="7.0-40000"
    displayname="我的应用"
    description="这是一个示例套件"
    maintainer="dev@synology.com"
    distributor="Synology"

    ***关键要求:所有字段值禁止包含空格和特殊符号(除-、.、_外)

    4、构建脚本与程序包 preinst:安装前检查(如依赖、冲突)。

    postinst:安装后配置(创建用户、启动服务)。

    preremove:卸载前清理(停止服务、删除文件)。

    脚本需用Bash编写,首行加#!/bin/bash。

    示例postinst片段(启动服务):

    bash
    # 创建服务用户
    synouser --add myapp_user 0 "" 0 "Service User"
    # 启动服务
    /var/packages/MyApp/scripts/start.sh

    打包主程序

    将编译好的二进制、资源文件放入目录(如target/)。

    压缩为package.tgz:

    bash
    tar czf package.tgz -C target/ .

    6、SPK打包与签名 生成SPK文件

    bash
    tar cf MyApp.spk INFO package.tgz scripts/ conf/ icon.png

    数字签名(官方分发必需)

    使用群晖开发者账户获取签名证书:

    bash
    openssl dgst -sha1 -sign developer.key MyApp.spk > signature
    tar --append --file=MyApp.spk signature

    高级技巧

    多架构支持

    为不同CPU编译二进制(如ARMv8、x64),在INFO中声明arch="x86_64 aarch64"。

    打包时按架构生成多个SPK2。

    依赖管理

    在INFO中声明依赖:

    ini:install_dep_packages="Python3>=3.8" 或在preinst中检查:

    bash
    if ! synopkg status Python3 | grep "version"; then
        echo "Python3未安装" >&2
        exit 1
    fi

    服务集成

    创建Systemd服务文件(路径:conf/myapp.service):

    ini

    [Unit]
    Description=MyApp Service
    After=network.target
    
    [Service]
    User=myapp_user
    ExecStart=/var/packages/MyApp/bin/main

    安装开发工具链
    下载工具链:
    访问群晖官方档案库,选择匹配CPU架构(如x86_64或armv8)和DSM版本(如7.2)的工具链包(示例:gcc_850_glibc229_x86_64-GPL.txz)1。

    配置环境变量(Linux开发机):

    bash
    tar -xJf gcc_850_glibc229_x86_64-GPL.txz
    export PATH=/path/to/toolchain/bin:$PATH

    完整 SPK 编译环境安装命令(整合版)

    # 1. 更新系统并添加PPA
    sudo apt update
    sudo apt install -y software-properties-common
    sudo add-apt-repository ppa:deadsnakes/ppa -y
    sudo apt update
    
    # 2. 安装所有依赖
    sudo apt install -y build-essential git tar gzip openssl \
                       python3.8 python3.8-dev python3.8-venv
    
    # 3. 设置Python3.8为默认python3
    sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.8 1
    
    # 4. 安装pip
    curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
    sudo python3.8 get-pip.py
    
    # 5. 验证环境
    python3 --version  # 应为3.8.x
    

    安装群晖工具链

    完成 Python 安装后,继续执行之前的工具链安装:

    # 下载工具链
    wget https://archive.synology.com/download/ToolChain/toolchain/7.2-7.2.0.1/gcc850_glibc229_x86_64-GPL.txz
    
    # 解压到系统目录
    sudo mkdir -p /usr/local/syno-toolchain
    sudo tar -xJf gcc850_glibc229_x86_64-GPL.txz -C /usr/local/syno-toolchain
    
    # 设置环境变量
    echo 'export PATH="/usr/local/syno-toolchain/bin:$PATH"' >> ~/.bashrc
    echo 'export CC="x86_64-pc-linux-gnu-gcc"' >> ~/.bashrc
    source ~/.bashrc
    • 留言板:
    • 暂无评论