制作一个 rpm 软件包

news2024/10/6 4:07:18

首发日期 2024-04-30, 以下为原文内容:


本文以 ibrus (艾刷, 胖喵拼音 ibus 接口模块) 为例, 介绍 rpm 软件包的制作过程.


相关文章:

  • 《发布 AUR 软件包 (ArchLinux)》 https://blog.csdn.net/secext2022/article/details/136803790
  • 《多种双拼方案的实现》 https://blog.csdn.net/secext2022/article/details/136804091

目录

  • 1 问题背景
  • 2 创建 rpm 软件包
  • 3 测试
  • 4 总结与展望

1 问题背景

本文来源于胖喵拼音的一个问题 (issue): https://github.com/fm-elpac/pmim-ibus/issues/1

Fedora Kinoite 是一个 GNU/Linux 发行版本, 这个系统的特点是, 使用 rpm-ostree 来进行软件包管理 (系统升级).

  • https://fedoraproject.org/atomic-desktops/kinoite/
  • https://coreos.github.io/rpm-ostree/

所以 /usr 目录是只读的:

a2@fedora:~$ mount | grep /usr
/dev/sda3 on /usr type btrfs (ro,relatime,seclabel,compress=zstd:1,space_cache=v2,subvolid=258,subvol=/root)

注意这里的 ro.

由于 ibus 输入法框架的限制, 需要把配置文件 pmim_ibrus.xml 安装到 /usr/share/ibus/component 目录.

此时需要制作一个 rpm 软件包, 通过安装 rpm 软件包来安装这个配置文件.

  • https://docs.fedoraproject.org/en-US/fedora-kinoite/getting-started/#package-layering

系统版本信息:

a2@fedora:~$ rpm-ostree status
State: idle
Deployments:
● fedora:fedora/40/x86_64/kinoite
                  Version: 40.20240430.0 (2024-04-30T00:38:03Z)
                   Commit: 68a08da82e9303cc1fd5956a1cbbbc3675b2f0f076c4cf9b0413feb026b11096
             GPGSignature: Valid signature by 115DF9AEF857853EE8445D0A0727707EA15B79CC
a2@fedora:~$ uname -a
Linux fedora 6.8.7-300.fc40.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Apr 17 19:21:08 UTC 2024 x86_64 GNU/Linux

ibus 版本:

a2@fedora:~$ rpm -qi ibus
Name        : ibus
Version     : 1.5.30~rc3
Release     : 1.fc40
Architecture: x86_64
Install Date: 2024年04月30日 星期二 08时29分30秒
Group       : Unspecified
Size        : 147304373
License     : LGPL-2.1-or-later
Signature   : RSA/SHA256, 2024年04月02日 星期二 22时52分24秒, Key ID 0727707ea15b79cc
Source RPM  : ibus-1.5.30~rc3-1.fc40.src.rpm
Build Date  : 2024年04月02日 星期二 22时25分13秒
Build Host  : buildhw-x86-07.iad2.fedoraproject.org
Packager    : Fedora Project
Vendor      : Fedora Project
URL         : https://github.com/ibus/ibus/wiki
Bug URL     : https://bugz.fedoraproject.org/ibus
Summary     : Intelligent Input Bus for Linux OS
Description :
IBus means Intelligent Input Bus. It is an input framework for Linux OS.

2 创建 rpm 软件包

主要参考资料: https://rpm-packaging-guide.github.io/

编写 rpm 描述文件 librush/rpm/ibrus.spec:

Name:       ibrus
Version:    0.1.0a3
Release:    1%{?dist}
Summary:    ibus module for pmim (a Chinese pinyin input method)
License:    LGPL-2.1-or-later OR GPL-3.0-or-later
URL:        https://github.com/fm-elpac/librush
Requires:   ibus

%description
librush: ibus module for pmim (a Chinese pinyin input method)

%prep
# TODO

%build
# skip

%install
mkdir -p %{buildroot}/usr/lib/pmim
install -Dm755 -t %{buildroot}/usr/lib/pmim %{_topdir}/SOURCES/ibrus
install -Dm644 -t %{buildroot}/usr/share/ibus/component %{_topdir}/SOURCES/pmim_ibrus.xml

%files
/usr/lib/pmim/ibrus
/usr/share/ibus/component/pmim_ibrus.xml

%changelog
# TODO

然后:

  • (1) 安装 toolbox: https://containertoolbx.org/

    版本信息:

    > toolbox --version
    toolbox version 0.0.99.5
    

    参考资料: https://wiki.archlinux.org/title/Toolbox

  • (2) 创建运行环境:

    > toolbox create -d fedora -r 40
    Image required to create toolbox container.
    Download registry.fedoraproject.org/fedora-toolbox:40? [y/N]: y
    Created container: fedora-toolbox-40
    Enter with: toolbox enter fedora-toolbox-40
    

    创建之后:

    > toolbox list
    IMAGE ID      IMAGE NAME                                    CREATED
    1b6661a009d9  registry.fedoraproject.org/fedora-toolbox:40  5 days ago
    
    CONTAINER ID  CONTAINER NAME       CREATED         STATUS   IMAGE NAME
    4a40c125ebbf  fedora-toolbox-40    52 seconds ago  created  registry.fedoraproject.org/fedora-toolbox:40
    
  • (3) 进入运行环境:

    > toolbox enter fedora-toolbox-40
    ⬢[s2@toolbox ~]$ type dnf
    dnf 是 /usr/bin/dnf
    ⬢[s2@toolbox ~]$
    
  • (4) 安装 rpm 开发工具:

    [s2@toolbox ~]$ sudo dnf install rpm-build rpm-devel rpmdevtools
    
  • (5) 初始化 rpm 编译环境:

    [s2@toolbox ~]$ rpmdev-setuptree
    

    初始的编译目录:

    [s2@toolbox ~]$ tree ~/rpmbuild
    /home/s2/rpmbuild
    ├── BUILD
    ├── RPMS
    ├── SOURCES
    ├── SPECS
    └── SRPMS
    
    6 directories, 0 files
    
  • (6) 将所需文件放在相应的位置:

    [s2@toolbox ~]$ tree ~/rpmbuild
    /home/s2/rpmbuild
    ├── BUILD
    ├── RPMS
    ├── SOURCES
    │   ├── ibrus
    │   └── pmim_ibrus.xml
    ├── SPECS
    │   └── ibrus.spec
    └── SRPMS
    
    6 directories, 3 files
    
  • (7) 编译 rpm 软件包:

    [s2@toolbox ~]$ rpmbuild -bb ~/rpmbuild/SPECS/ibrus.spec
    

    编译之后:

    [s2@toolbox ~]$ tree ~/rpmbuild
    /home/s2/rpmbuild
    ├── BUILD
    ├── BUILDROOT
    ├── RPMS
    │   └── x86_64
    │       └── ibrus-0.1.0a3-1.fc40.x86_64.rpm
    ├── SOURCES
    │   ├── ibrus
    │   └── pmim_ibrus.xml
    ├── SPECS
    │   └── ibrus.spec
    └── SRPMS
    
    8 directories, 4 files
    

    其中 ibrus-0.1.0a3-1.fc40.x86_64.rpm 就是制作好的 rpm 软件包.

    包含的文件:

    [s2@toolbox ~]$ rpm -qlp ~/rpmbuild/RPMS/x86_64/ibrus-0.1.0a3-1.fc40.x86_64.rpm
    /usr/lib/.build-id
    /usr/lib/.build-id/6f
    /usr/lib/.build-id/6f/ddc23c3dcf3a7ef8cb8800119bcfbeaaf60779
    /usr/lib/pmim/ibrus
    /usr/share/ibus/component/pmim_ibrus.xml
    

    软件包信息:

    [s2@toolbox ~]$ rpm -qip ~/rpmbuild/RPMS/x86_64/ibrus-0.1.0a3-1.fc40.x86_64.rpm
    Name        : ibrus
    Version     : 0.1.0a3
    Release     : 1.fc40
    Architecture: x86_64
    Install Date: (not installed)
    Group       : Unspecified
    Size        : 6403239
    License     : LGPL-2.1-or-later OR GPL-3.0-or-later
    Signature   : (none)
    Source RPM  : ibrus-0.1.0a3-1.fc40.src.rpm
    Build Date  : 2024年04月30日 星期二 09时52分16秒
    Build Host  : toolbox
    URL         : https://github.com/fm-elpac/librush
    Summary     : ibus module for pmim (a Chinese pinyin input method)
    Description :
    librush: ibus module for pmim (a Chinese pinyin input method)
    

3 测试

操作系统: Fedora Kinoite 40

  • (1) 安装 rpm 软件包:

    在这里插入图片描述

    a2@fedora:~$ sudo rpm-ostree install ibrus-0.1.0a3-1.fc40.x86_64.rpm
    Checking out tree 68a08da... done
    Enabled rpm-md repositories: fedora-cisco-openh264 updates fedora updates-archive
    Updating metadata for 'fedora-cisco-openh264'... done
    Updating metadata for 'updates'... done
    Updating metadata for 'fedora'... done
    Updating metadata for 'updates-archive'... done
    Importing rpm-md... done
    rpm-md repo 'fedora-cisco-openh264'; generated: 2023-12-11T14:43:50Z solvables: 4
    rpm-md repo 'updates'; generated: 2024-04-29T01:08:34Z solvables: 8720
    rpm-md repo 'fedora'; generated: 2024-04-14T18:51:11Z solvables: 74881
    rpm-md repo 'updates-archive'; generated: 2024-04-30T01:22:20Z solvables: 7344
    Resolving dependencies... done
    Checking out packages... done
    Running pre scripts... done
    Running post scripts... done
    Running posttrans scripts... done
    Writing rpmdb... done
    Writing OSTree commit... done
    Staging deployment... done
    Freed: 1.9 GB (pkgcache branches: 0)
    Added:
      ibrus-0.1.0a3-1.fc40.x86_64
    Changes queued for next boot. Run "systemctl reboot" to start a reboot
    a2@fedora:~$
    
  • (2) 重启系统.

    重启之后:

    a2@fedora:~$ rpm-ostree status
    State: idle
    Deployments:
    ● fedora:fedora/40/x86_64/kinoite
                      Version: 40.20240430.0 (2024-04-30T00:38:03Z)
                  BaseCommit: 68a08da82e9303cc1fd5956a1cbbbc3675b2f0f076c4cf9b0413feb026b11096
                GPGSignature: Valid signature by 115DF9AEF857853EE8445D0A0727707EA15B79CC
                LocalPackages: ibrus-0.1.0a3-1.fc40.x86_64
    
    a2@fedora:~$ rpm -qi ibrus
    Name        : ibrus
    Version     : 0.1.0a3
    Release     : 1.fc40
    Architecture: x86_64
    Install Date: 2024年04月30日 星期二 10时07分01秒
    Group       : Unspecified
    Size        : 6403239
    License     : LGPL-2.1-or-later OR GPL-3.0-or-later
    Signature   : (none)
    Source RPM  : ibrus-0.1.0a3-1.fc40.src.rpm
    Build Date  : 2024年04月30日 星期二 09时52分16秒
    Build Host  : toolbox
    URL         : https://github.com/fm-elpac/librush
    Summary     : ibus module for pmim (a Chinese pinyin input method)
    Description :
    librush: ibus module for pmim (a Chinese pinyin input method)
    
    a2@fedora:~$ ls -l /usr/share/ibus/component/
    总计 496
    -rw-r--r--. 3 root root    656 197011日 anthy.xml
    -rw-r--r--. 3 root root    421 197011日 dconf.xml
    -rw-r--r--. 3 root root    465 197011日 gtkextension.xml
    -rw-r--r--. 3 root root    428 197011日 gtkpanel.xml
    -rw-r--r--. 3 root root    904 197011日 hangul.xml
    -rw-r--r--. 3 root root   1941 197011日 libpinyin.xml
    -rw-r--r--. 3 root root   1165 197011日 libzhuyin.xml
    -rw-r--r--. 3 root root    625 197011日 m17n.xml
    -rw-r--r--. 2 root root    857 197011日 pmim_ibrus.xml
    -rw-r--r--. 3 root root 464835 197011日 simple.xml
    -rw-r--r--. 3 root root    751 197011日 typing-booster.xml
    

在这里插入图片描述

ibus 配置界面中已经出现了 胖喵拼音.

在这里插入图片描述

输入测试.

4 总结与展望

通过制作一个 rpm 软件包, 胖喵拼音 实现了对基于 rpm-ostree 系统的支持.

如果 ibus 输入法框架做出改进, 支持在用户级别 (而不是系统级别) 安装新的输入法, 就不用这么麻烦了.

对比 AUR (ArchLinux) 和 RPM (Fedora) 软件包格式, 窝还是觉得 AUR 的打包更加简单方便一些.


彩蛋:

最近胖喵拼音新增了一个可选的词库, 数据来自于 清华大学开放中文词库 (THUOCL) http://thuocl.thunlp.org/

包含约 11 万个词.

体验地址: https://github.com/fm-elpac/pmim-data-thuocl


本文使用 CC-BY-SA 4.0 许可发布.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1638239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言之详细讲解文件操作(抓住文件操作的奥秘)

什么是文件 与普通文件载体不同,文件是以硬盘为载体存储在计算机上的信息集合,文件可以是文本文档、图片、程序等等。文件通常具有点三个字母的文件扩展名,用于指示文件类型(例如,图片文件常常以KPEG格式保存并且文件…

区块链 | IPFS:Merkle DAG

🦊原文:IPFS: Merkle DAG 数据结构 - 知乎 🦊写在前面:本文属于搬运博客,自己留存学习。 1 Merkle DAG 的简介 Merkle DAG 是 IPFS 系统的核心概念之一。虽然 Merkle DAG 并不是由 IPFS 团队发明的,它来自…

Pyspark+关联规则 Kaggle购物篮分析案例

数据集地址:Market Basket Analysis | Kaggle 我的NoteBook地址:pyspark Market Basket Analysis | Kaggle 零售商期望能够利用过去的零售数据在自己的行业中进行探索,并为客户提供有关商品集的建议,这样就能提高客户参与度、改…

llama_index微调BGE模型

微调模型是为了让模型在特殊领域表现良好,帮助其学习到专业术语等。 本文采用llama_index框架微调BGE模型,跑通整个流程,并学习模型微调的方法。 一、环境准备 Linux环境,GPU L20 48G,Python3.8.10。 pip该库即可。 二、数据准备 该框架实现了读取各种类型的文件,给…

AI项目二十一:视频动态手势识别

若该文为原创文章,转载请注明原文出处。 一、简介 人工智能的发展日新月异,也深刻的影响到人机交互领域的发展。手势动作作为一种自然、快捷的交互方式,在智能驾驶、虚拟现实等领域有着广泛的应用。手势识别的任务是,当操作者做出…

html--剑雨

<!doctype html> <html> <head> <meta charset"utf-8"> <title>css3剑雨-jq22.com</title> <script src"http://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style> .sword:before, .sword:…

Java_从入门到JavaEE_08

一、Eclipse开发工具的介绍 Eclipse工具简绍 Eclipse 是著名的跨平台的自由集成开发环境&#xff08;IDE&#xff09;。最初主要用来 Java 语言开发&#xff0c;但是目前亦有人通过插件使其作为其他计算机语言比如 C 和 Python 的开发工具。 下载与安装 下载&#xff1a; Ecli…

spring boot3多模块项目工程搭建-上(团队开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 目录 写在前面 多模块结构优缺点 模块介绍 Common 模块&#xff1a; API 模块&#xff1a; Web 模块&#xff1a; Service 模块&#xff1a; DAO 模块&#xff1a; 搭建步骤 1.创建 父…

Java面试八股之强软弱虚引用的概念及区别

Java中强软弱虚引用的概念及区别 在Java中&#xff0c;强引用、软引用、弱引用和虚引用是四种不同类型的引用&#xff0c;它们在对象生命周期管理、垃圾收集&#xff08;Garbage Collection, GC&#xff09;以及内存管理方面有着不同的行为和用途。以下是它们的概念和主要区别…

脑筋急转弯在线问答

页面效果 点击“显示答案”按钮&#xff0c;显示参考答案。 页面代码 <% layout(/layouts/default.html, {title: 脑筋急转弯管理, libs: [dataGrid]}){ %> <div class"main-content"><div class"box box-main"><div class"bo…

3.自动驾驶-局部路径规划

1. 规划planning 2. 局部路径规划模块实现-模块外围&#xff1a;输入 3. 局部路径规划模块实现模块外围:输出 4. 控制control 5. 系统分类 6 系统分类

推开通用人工智能大门,多模态大模型是新一代人工智能技术范式

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

如何理解Go语言的逃逸分析(escape analysis)?

文章目录 什么是逃逸分析&#xff1f;逃逸的原因逃逸的影响 如何查看逃逸分析的结果&#xff1f;解决方案和示例代码减少逃逸的策略示例代码 在Go语言中&#xff0c;逃逸分析&#xff08;escape analysis&#xff09;是一个编译器优化过程&#xff0c;它决定了哪些变量会被分配…

38-3 Web应用防火墙 - 安装配置WAF

首先需要安装Centos 7 虚拟机:Centos7超详细安装教程_centos7安装教程-CSDN博客 安装配置WAF 在桌面环境中,右键点击打开终端,首先执行以下步骤: 1)安装必要的工具: 输入命令: sudo su yum install -y wget epel-release 2)第二步,安装依赖工具,输入以下命令: y…

使用Git把写好的项目放到github上

把之前的文章差缺补漏了一下&#xff0c;发现少一个TUserController文件&#xff0c;然后加上了。 以及发现前后端交互时的跨域问题需要处理。 在Controller文件里加入注释 CrossOrigin(origins "*")即可。 不然数据在Vue里显示不出来。 ** 壹 首先先把前端项目 de…

【深耕 Python】Data Science with Python 数据科学(17)Scikit-learn机器学习(二)

写在前面 关于数据科学环境的建立&#xff0c;可以参考我的博客&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;1&#xff09;环境搭建 往期数据科学博文一览&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;2&…

c#word文档:1.创建空白Word文档及保存/2.添加页内容...

---创建空白Word文档 --- &#xff08;1&#xff09;创建一个名为OfficeOperator的类库项目。引用操作Word的.NET类库 &#xff08;2&#xff09;定义用于操作Word的类WordOperator1。添加引用Microsoft.Office.Interop.Word命名空间。 &#xff08;3&#xff09;为WordOper…

劳动节不劳动!陕西程序员手把手带你度假,领略祖国大好河山!

文章大纲 5 天 4 晚 陕西小环线错峰 放松度假遛娃天师堂石门栈道关山牧场草原九龙山温泉扶风温泉 想起一些旧事&#xff0c; 那时候搞IT比现在欢乐很多参考文献 秉承劳动节不劳动的一贯做法&#xff0c;节前我就带娃出来了&#xff0c;想着劳动节当天就能返回西安&#xff0c;不…

礼赞劳动节,致敬劳动者。节日随想:疾笔耕耘也是一种劳动方式。

马克思也快诞辰了206年了&#xff0c;恩格斯领导的第二国际通过的决议节日也迎来了134岁的生日了&#xff0c;我也继续在劳动的路上。 五月是值得纪念的日子&#xff0c;作为一名无上光荣的分子&#xff0c;无比仰慕崇拜的两位先驱前辈大胡子&#xff0c;其一 生于斯&#xff0…

数据可视化宝典:Matplotlib图形实战

在数据分析领域&#xff0c;图形化展示数据是非常重要的环节。Python中的matplotlib库是绘制各类图形的强大工具。本文将介绍如何使用matplotlib绘制折线图、直方图、饼图、散点图和柱状图等数据分析中常见的图形&#xff0c;并附上相应的代码示例&#xff0c;可以当初matplotl…