16 个版本 (稳定版)

2.2.0 2023年11月27日
2.0.1 2023年6月30日
1.4.2 2022年4月7日
1.4.0 2022年1月23日
0.1.2 2021年5月7日

Cargo 插件 中排名第 135

Download history 32/week @ 2024-03-11 22/week @ 2024-03-18 28/week @ 2024-04-01 29/week @ 2024-04-08 70/week @ 2024-04-15 8/week @ 2024-04-22 21/week @ 2024-04-29 21/week @ 2024-05-13 57/week @ 2024-05-20 23/week @ 2024-05-27 15/week @ 2024-06-03 60/week @ 2024-06-10 32/week @ 2024-06-17 47/week @ 2024-06-24

每月下载量 154

授权协议: GPL-3.0

19KB
312 行代码(不包括注释)

Cargo AppImage

这是一个 cargo 程序,允许您将 Rust 程序转换为 AppImage。

安装

  1. 请确保 appimagetool 在您的路径中。它可以从 这里 下载
  2. 使用以下命令安装此程序
cargo install cargo-appimage
  1. 在您的 crate 根目录下,使用 cd 创建一个名为 icon.png 的图标

    1. 注意:这可以是一个空文件,用于开发。实际上,如果您忘记创建它,系统会自动生成一个空文件。
  2. (可选)在您的 Cargo.toml 中创建一个类似于以下内容的部分,以便将任何额外的资源添加到 AppImg

    [package.metadata.appimage]
    assets = ["images", "sounds"]
    
  3. (可选)如果您使用的外部 crate 使用其他程序或不是用纯 Rust 编写的,您可能需要检查是否需要将一些共享库嵌入到您的 AppImage 中

    1. 通过在您的 Cargo.toml 中使用此选项运行 cargo appimage 将自动创建一个名为 libs 的文件夹,并将您的 Rust 程序使用的所有共享对象放在相应的目录中。
    [package.metadata.appimage]
    auto_link = true
    
    1. AppImage 不应该包含可执行文件链接到的所有库,因此您可以选择以下任一方法:

      1. 手动删除您期望在所有 Linux 系统上存在的库(例如 libc、libgcc、libpthread、ld-linux、libdl 等),然后从 Cargo.toml 中删除 auto_link 选项并重新构建。然后应将 libs 文件夹中剩余的库嵌入到 Appimage 中。

      2. 或者,使用 auto_link_exclude_list 选项指定要排除的 glob 模式列表。例如

      [package.metadata.appimage]
      auto_link = true
      auto_link_exclude_list = [
          "libc.so*",
          "libdl.so*",
          "libpthread.so*",
      ]
      
      

      在下一次构建中,只有与glob模式不匹配的库文件将被嵌入到Appimage中。

  4. 运行此命令

    cargo appimage
    
    1. 注意所有传递给cargo-appimage的参数都将重定向到cargo
    cargo appimage --features=min
    

Docker

显然这个Dockerfile是有效的

FROM rust:slim

RUN cargo install cargo-appimage
# file package is required by appimagetool
RUN apt-get update && apt-get install -y --no-install-recommends file wget

# Download appimagetool
RUN wget https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-$(uname -m).AppImage -O /usr/local/bin/appimagetool
RUN chmod +x /usr/local/bin/appimagetool
# Path appimagetool magic byte: https://github.com/AppImage/pkg2appimage/issues/373#issuecomment-495754112
RUN sed -i 's|AI\x02|\x00\x00\x00|' /usr/local/bin/appimagetool
# Use appimagetool without fuse: https://github.com/AppImage/AppImageKit/wiki/FUSE#docker
RUN APPIMAGE_EXTRACT_AND_RUN=1 cargo appimage

依赖项

~1.7–2.7MB
~52K SLoC