|
| 1 | +--- |
| 2 | +title: Snapcraft |
| 3 | +sidebar: |
| 4 | + order: 1 |
| 5 | +--- |
| 6 | + |
| 7 | +## 前置条件 |
| 8 | + |
| 9 | +import { Tabs, TabItem, Card } from '@astrojs/starlight/components'; |
| 10 | + |
| 11 | +**1. 安装 `snap`** |
| 12 | + |
| 13 | +{/* prettier-ignore */} |
| 14 | +<Tabs> |
| 15 | + <TabItem label="Debian"> |
| 16 | + ```shell |
| 17 | + sudo apt install snapd |
| 18 | + ``` |
| 19 | + </TabItem> |
| 20 | + <TabItem label="Arch"> |
| 21 | + ```shell |
| 22 | + sudo pacman -S --needed git base-devel |
| 23 | + git clone https://aur.archlinux.org/snapd.git |
| 24 | + cd snapd |
| 25 | + makepkg -si |
| 26 | + sudo systemctl enable --now snapd.socket |
| 27 | + sudo systemctl start snapd.socket |
| 28 | + sudo systemctl enable --now snapd.apparmor.service |
| 29 | + ``` |
| 30 | + </TabItem> |
| 31 | + <TabItem label="Fedora"> |
| 32 | + ```shell |
| 33 | + sudo dnf install snapd |
| 34 | + # Enable classic snap support |
| 35 | + sudo ln -s /var/lib/snapd/snap /snap |
| 36 | + ``` |
| 37 | + |
| 38 | + 然后重新启动系统。 |
| 39 | + |
| 40 | + </TabItem> |
| 41 | +</Tabs> |
| 42 | + |
| 43 | +**2. 安装 snap 基座** |
| 44 | + |
| 45 | +```shell |
| 46 | +sudo snap install core22 |
| 47 | +``` |
| 48 | + |
| 49 | +**3. 安装 `snapcraft`** |
| 50 | + |
| 51 | +```shell |
| 52 | +sudo snap install snapcraft --classic |
| 53 | +``` |
| 54 | + |
| 55 | +## 配置 |
| 56 | + |
| 57 | +1. 创建一个 UbuntuOne 账号。 |
| 58 | +2. 请前往 [Snapcraft](https://snapcraft.io) 网站注册一个应用名称。 |
| 59 | +3. 在你项目的根目录创建一个 snapcraft.yaml 文件。 |
| 60 | +4. 调整 snapcraft.yaml 文件中的 name。 |
| 61 | + |
| 62 | +```yaml |
| 63 | +name: app |
| 64 | +base: core22 |
| 65 | +version: '2.0.4' |
| 66 | +summary: Your summary # 79 char long summary |
| 67 | +description: | |
| 68 | + Your Description |
| 69 | +
|
| 70 | +grade: stable |
| 71 | +confinement: strict |
| 72 | + |
| 73 | +apps: |
| 74 | + app: |
| 75 | + command: bin/app |
| 76 | + desktop: usr/share/applications/app.desktop |
| 77 | + |
| 78 | +package-repositories: |
| 79 | + - type: apt |
| 80 | + components: [main] |
| 81 | + suites: [noble] |
| 82 | + key-id: 78E1918602959B9C59103100F1831DDAFC42E99D |
| 83 | + url: http://ppa.launchpad.net/snappy-dev/snapcraft-daily/ubuntu |
| 84 | + |
| 85 | +parts: |
| 86 | + prep: |
| 87 | + plugin: dump |
| 88 | + build-snaps: |
| 89 | + - node/20/stable |
| 90 | + - rustup/latest/stable |
| 91 | + build-packages: |
| 92 | + - libwebkit2gtk-4.1-dev |
| 93 | + - build-essential |
| 94 | + - curl |
| 95 | + - wget |
| 96 | + - file |
| 97 | + - libxdo-dev |
| 98 | + - libssl-dev |
| 99 | + - libayatana-appindicator3-dev |
| 100 | + - librsvg2-dev |
| 101 | + - dpkg |
| 102 | + stage-packages: |
| 103 | + - libwebkit2gtk-4.1-0 |
| 104 | + - libglu1-mesa |
| 105 | + - libsoup-3.0-0 |
| 106 | + - freeglut3 |
| 107 | + source: . |
| 108 | + override-pull: | |
| 109 | + set -eu |
| 110 | + craftctl default |
| 111 | + rustup default nightly |
| 112 | + npm install |
| 113 | + npm run tauri build -- --bundles deb |
| 114 | + dpkg -x src-tauri/target/release/bundle/deb/*.deb here |
| 115 | + sed -i -e "s|Icon=app|Icon=/usr/share/icons/hicolor/32x32/apps/app.png|g" here/usr/share/applications/app.desktop |
| 116 | + cp -r here/* . |
| 117 | + organize: |
| 118 | + usr/bin/app: bin/app |
| 119 | +``` |
| 120 | +
|
| 121 | +### 解释 |
| 122 | +
|
| 123 | +- `name` 变量定义了你的应用程序的名称,并且必须设置为之前注册的名称。 |
| 124 | +- `base` 变量定义了你正在使用的核心。 |
| 125 | +- `version` 变量定义了版本,并且应该随着源代码库的每次更改而更新。 |
| 126 | +- `apps` 部分允许你公开桌面和二进制文件以供用户运行你的应用。 |
| 127 | +- `package-repositories` 部分允许你添加一个包仓库来帮助你满足你的依赖。 |
| 128 | +- `build-packages`/`build-snaps` 为你的 snap 定义构建依赖。 |
| 129 | +- `stage-packages`/`stage-snaps` 定义了你的 snap 的运行时依赖。 |
| 130 | +- `override-pull` 部分在拉取数据源之前运行一系列命令。 |
| 131 | +- `craftctl default` 执行默认的拉取命令。 |
| 132 | +- `organize` 部分将文件移动到合适的目录,以便二进制文件和桌面文件可以暴露给 `apps` 部分。 |
| 133 | + |
| 134 | +## 构建 |
| 135 | + |
| 136 | +```sh |
| 137 | +sudo snapcraft |
| 138 | +``` |
| 139 | + |
| 140 | +## 测试 |
| 141 | + |
| 142 | +```shell |
| 143 | +snap run your-app |
| 144 | +``` |
| 145 | + |
| 146 | +## 手动发布 |
| 147 | + |
| 148 | +```shell |
| 149 | +snapcraft login # 用你的 UbuntuOne 凭证登录 |
| 150 | +snapcraft upload --release=stable mysnap_latest_amd64.snap |
| 151 | +``` |
| 152 | + |
| 153 | +## 自动构建 |
| 154 | + |
| 155 | +1. 在你的 app 开发者页面上,点击 `builds` 选项卡。 |
| 156 | +2. 点击 `login with github`. |
| 157 | +3. 输入存储库的详细信息。 |
0 commit comments