かじかんだこころ ふるえる眼差まなざ

内心满是憔悴 眼神颤抖不止


世界せかいぼくは ひとりぼっちだった

我在这世界独自一人


ることしからないはる

在不断凋零的春季中


毎年まいとし つめたくあしらう

每年都只感受到冰冷


くらがりのなか 一方いっぽう通行つうこう

在一片黑暗中 单向往前走着


ただ ただ 言葉ことばなぐって

我只能不断胡乱写着


期待きたいするだけ むなしいとかっていても

明知期待也是一场空


すくいをもとつづけた

却依然不断寻求救赎


(せつなくて いとおしい)

(令人揪心却又叫人心爱)


いまならば かるがする

此刻感觉好像能了解


(しあわせで くるおしい)

(幸福却又让人心乱神迷)


あのけなかったぼく

照耀着无法哭泣的我


ひかりは やさしくつよ

光芒温柔地携我同行


雲間くもまをぬって きらりきらり

穿过层层云朵 变得闪闪发光


こころたしては あふ

内心的思绪满溢而出


いつしかほほを きらりきらり

脸颊回过神来 也正闪闪发光


あつあつらしてゆく

热泪沾湿了我的脸庞


きみは どうしてこんなにもあたたかいの?

为什么你的手心如此地温暖?


ねぇおねが

呐 拜托你


どうかこのまま はなさないでいて

请你从此 再也不要放手


えんむすんでは ほどきほどかれ

人与人的缘分 总是断断续续


だれしもがそれをよろこかなしみながら

人们在喜悦及悲伤中


あいかぞえてゆく

细数一个又一个的爱


鼓動こどうたしかめるように

为了确认内心的跳动


(うれしくて さびしくて)

(令人喜悦却又叫人寂寞)


いまだから かるがした

此刻感觉好像能了解


(たいせつで こわくって)

(重要却又让人感到害怕)


あのけなかったぼく

照耀着无法哭泣的我


ひかりは やさしくきしめた

光芒温柔地拥抱着我


らされた世界せかい ほこ大切たいせつひと

在这阳光普照的世界 骄傲绽放的重要之人


あたたかさをったはる

知晓何谓温暖的春天


ぼくのため きみのための なみだながすよ

因为你我而流下眼泪


あぁ なんてまぶしいんだろう

啊啊 多么地耀眼


あぁ なんてうつくしいんだろう…

啊啊 多么地美丽…


雲間くもまをぬって きらりきらり

穿过层层云朵 变得闪闪发光


こころたしては あふ

内心的思绪满溢而出


いつしかほほを きらりきらり

脸颊回过神来 也正闪闪发光


あつあつらしてゆく

热泪沾湿了我的脸庞


きみは どうしてこんなにもあたたかいの?

为什么你的手心如此地温暖?


ねぇおねが

呐 拜托你


どうかこのまま はなさないでいて

请你从此 再也不要放手


ずっと ずっと はなさないでいて

永远 永远 再也不要放手


Kupfer

本文所指的 ArchlinuxARM 为 Kupfer Mobile Linux,这是一个基于 ArchlinuxARM 的 Linux 发行版。借助 Kupferbootstrap 工具,我们可以制作出适配自己手中移动设备的 ArchlinuxARM 镜像。

TLDR

了解 Kupfer 之前,我们先来认识一下 Postmarket OS,它同样是一个主要关注移动设备的 Linux 发行版,经过社区多年的发展已经可以在很多手机、平板、开发板上运行,。Postmarket OS 为社区提供了丰富经验和文档,催生出了一些衍生项目,本文所指就是其中之一。

Kupfer 与 pmOS 高度相关,设备固件与内核等关键系统组件的构建与 pmOS 类似,如果你了解过 Postmarket OS 应该有一个大概的印象。Postmarket OS 有一个设备兼容性列表,你可以查看一下你的设备支持情况,如果兼容性满足你的需求,你基本就可以动手构建出你的 Kupfer 镜像。

前置条件

你需要一个能运行 pmOS 的设备,以我手中的小米平板 5 Pro 为例,这是 Postmarket OS 设备详情页,里面介绍了现阶段 pmOS 的兼容情况。

准备工作

  1. Linux 环境、Docker (可选)
  2. python3 环境
  3. 小米平板 5 Pro (elish)

kupferbootstrap 基本使用

这是一个工具集,可以用来构建 Kupfer Mobile Linux 的软件包和镜像。

安装

参考 https://kupfer.gitlab.io/kupferbootstrap/main/install/

  1. 首先需要 clone kupferbootstrap 到你的工作目录
    $ git clone --depth=1 -b dev https://gitlab.com/kupfer/kupferbootstrap kupferbootstrap
  2. 切换到 kupferbootstrap 目录,安装依赖
    $ python3 -m venv venv
    $ . ./venv/bin/activate
    $ pip install -r requirements.txt

编写配置文件

我们可以使用 kupferbootstrap config init -N 由模板产生一个默认的配置文件,位于 $HOME/kupfer/kupferbootstrap.toml,打开文件,可以看到类似下面的结构:

[wrapper]
type = "none" # docker: 使用 docker 构建镜像 | none: 使用宿主机,要求宿主机为 archlinux 

[build]
......

[pkgbuilds]
git_repo = "https://gitlab.com/kupfer/packages/pkgbuilds.git"   # PKGBUILD 的仓库地址
git_branch = "dev" # 分支

[pacman]
......

[paths]
......

[profiles]
current = "default"

[profiles.default]
parent = ""
device = "sm8250-xiaomi-elish-boe" # 设备名
flavour = "gnome" # 衍生版本
pkgs_include = ["vim", "git", "chromium"] # 需要安装到镜像的软件包
pkgs_exclude = [] # 需要排除的软件包
hostname = "elish" # 主机名
username = "elish" # 默认用户名
password = "elish" # 密码
size_extra_mb = "0"

示例中为关键参数写明了注释,可以根据自己的设备修改,这些参数的作用后面再具体介绍。

目录结构

根据配置文件,执行构建后会将仓库 clone 到本地,位于 $HOME/.cache/kupfer 目录下:

.
├── ccache
├── chroots
├── images
├── packages
├── pacman
└── pkgbuilds

其中 pkgbuilds 是根据配置文件 clone 下来的,我们也可以在构建前访问看一下它内部的结构 https://gitlab.com/kupfer/packages/pkgbuilds

我们主要关注的目录就是 pkgbuilds、chroots、images。chroots 是构建镜像临时使用的,构建过程需要 chroot 进去安装软件,这里也包含了一些交叉编译所需要的环境和工具,images 是构建镜像产物目录。

进入 pkgbuilds,可以看到几个文件夹和 repos.yml 文件,其中 repos.yml 定义了每个仓库的地址和 PKGBUILD 选项,而每个文件夹对应此文件写明的仓库。

你可以自行创建 PKGBUILD 来自定义你的镜像,以添加 Plasma Desktop 为例 https://gitlab.com/jianhua000/pkgbuilds/-/tree/elish/main/flavour-plasma-desktop,新建了一个文件夹与包名对应,然后添加你的 PKGBUILD。

在本文成文时,如果你也想构建一个以 KDE 为桌面环境的镜像,你还需要做一些修改:打开 PKGBUILD, 你会看一个依赖 plasma-wayland-session,把它改成 plasma-workspace,KDE 已经将这个依赖删掉了。

添加软件包

如果你想添加官方没有的软件包(软件默认会在 Chroot 后通过远程仓库下载安装),一个简单方法就是从 aur clone。举个例子,我想要我的镜像默认安装好 paru,我做的步骤就是 cd 进入 main 文件夹,然后 git clone https://aur.archlinux.org/paru-bin.git --depth=1,之后打开 PKGBUILD 文件,在头部添加

# paru-bin 的 PKGBUILD 文件
_mode=cross
pkgname=paru-bin
...

_mode 可以写 cross 或者 host,据我观察应该是代表了安装到镜像 (cross) 或者本机 (host),这个字段不写的话会给警告。

添加设备相关依赖

设备相关的依赖有 firmware (固件和驱动文件)、kernel (Linux 内核)、device (设备描述文件),他们分别有自己的文件夹,其中 firmwaredevice 可以在 postmarket 的仓库中获取到,我们只需要 device 中的 deviceinfo 文件、以及一个 PKGBUILD,当然 postmarket 提供的是 APKBUILD,所以我们还是之间抄这个仓库作业吧。kernel 也类似,这个仓库也提供了 linux-sm8250 的案例,在 linux 目录可以看到相关内容。

构建

构建镜像使用命令 kupferbootstrap image build。如果配置文件的 type 设置为 none,那么构建依赖都会装到你的主机上面,以你的主机 archlinux 构建镜像,如果是 docker 则使用 docker 构建。

构建时间取决于你的电脑性能,以我的 5600H 大概只需要十多分钟,因为大部分包是不需要编译的,直接从远程仓库安装,比较耗时的基本只有 kernel。

刷入设备

构建出的镜像会放到 images 文件夹,有三个镜像 sm8250-xiaomi-elish-boe-plasma-desktop-boot.imgsm8250-xiaomi-elish-boe-plasma-desktop-full.imgsm8250-xiaomi-elish-boe-plasma-desktop-root.img,我们可以将 root 或 full 镜像刷入 super 分区,或者切割出来的新分区,从 data 分区切割一块给 linux 使用,方法可以参考这个 wiki,而 boot 镜像不是标准的 aboot 镜像,我们需要挂载它将 aboot.img 提取出来,或者使用 debugfs sm8250-xiaomi-elish-boe-plasma-desktop-boot.img -R 'dump /aboot.img ./aboot.img'

将两个镜像刷入对应的分区后就可以尝试开机了。

关于参数

device: 设备名应与 provide 的包名对应

_mode=cross
_nodeps=true
pkgbase=device-sm8250-xiaomi-elish
pkgname=(
    device-sm8250-xiaomi-elish-common
    device-sm8250-xiaomi-elish-boe # 小米平板 5 Pro BOE 屏
    device-sm8250-xiaomi-elish-csot
)

flavour: 你可以在 main 目录找到一些以 flavour 为前缀的包,这个选项可选值由这个决定。

参考链接

ttps://kupfer.gitlab.io/
https://xunflash.top/archives/porting_2_kupfer.html
https://gitlab.com/kupfer/packages/pkgbuilds/
https://gitlab.com/jianhua000/pkgbuilds/
https://wiki.postmarketos.org/wiki/Devices

waifu
0%