制作一个 rpm 软件包

首发日期 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/kinoiteVersion: 40.20240430.0 (2024-04-30T00:38:03Z)Commit: 68a08da82e9303cc1fd5956a1cbbbc3675b2f0f076c4cf9b0413feb026b11096GPGSignature: 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 agoCONTAINER 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
    └── SRPMS6 directories, 0 files
    
  • (6) 将所需文件放在相应的位置:

    [s2@toolbox ~]$ tree ~/rpmbuild
    /home/s2/rpmbuild
    ├── BUILD
    ├── RPMS
    ├── SOURCES
    │   ├── ibrus
    │   └── pmim_ibrus.xml
    ├── SPECS
    │   └── ibrus.spec
    └── SRPMS6 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
    └── SRPMS8 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/kinoiteVersion: 40.20240430.0 (2024-04-30T00:38:03Z)BaseCommit: 68a08da82e9303cc1fd5956a1cbbbc3675b2f0f076c4cf9b0413feb026b11096GPGSignature: Valid signature by 115DF9AEF857853EE8445D0A0727707EA15B79CCLocalPackages: ibrus-0.1.0a3-1.fc40.x86_64a2@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.xdnf.cn/news/1409596.html

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

相关文章

STM32(c语言基础)

1.硬件部分:按键,传感器 传感器模块:光敏电阻,热敏电阻,红外接收管 光敏电阻:光线越强,光敏电阻的阻值就越小; 热敏电阻:温度越高,热敏电阻的阻值越小&…

【全网首发】2024五一数学建模ABC题保奖思路(后续会更新)

一定要点击文末的卡片哦! 1)常见模型分类 机理分析类:来源于实际问题,需要了解一定的物理机理,转化为优化问题。 运筹优化类:旨在找到使某个目标函数取得最大或最小值的最优解,对于机理要求要求不高&…

Linux下安装snaphu

1、官网下载安装包 2、解压,移动文件夹到/usr/local/下 3、在/usr/local/下创建man,在man下创建man1文件夹 4、进入到snaphu的src文件夹里,执行sudo make,如果报错 在这个 Makefile 中,-arch x86_64 是 macOS 特定的…

三种滤波(EKF、UKF、CKF)的对比,含MATLAB源代码

使用MATLAB模拟三维的滤波,包含扩展卡尔曼滤波EKF、无迹卡尔曼滤波UKF、容积卡尔曼滤波CKF。 状态更新和观测更新均为非线性的,模拟一定强度的机动性,可用于卡尔曼滤波方法的对比学习,自己修改成需要的运动模型后,可以用于组合导航(GPS+DVL形式)。 运行结果 真值的三轴…

Docker容器---Harbor私有仓库部署与管理

一、搭建本地私有仓库 1、下载registry镜像 [rootlocalhost ~]#docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4a2: Pull complete e2ead8259a04: Pull comp…

移植 SquareLine 导出的 UI 源码到 HMI-Board

目录 准备工具创建 HMI 工程设计 UIUI 移植板级验证更多内容 HMI-Board 为 RT-Thread 联合瑞萨推出的高性价比图形评估套件,取代传统的 HMI 主控板 硬件,一套硬件即可实现 HMI IoT 控制 的全套能力。依托于瑞萨高性能芯片 RA6M3 及 RT-Thread 软件生态…

mysql数据库navicat数据同步时误删除部分数据

背景介绍 听说过删库跑路被抓的,今天就碰到升级服务器(Alibaba Cloud Linux ----> Ubuntu)原因是taos3.2不支持Alibaba Cloud Linux系统! 为了保险起见把现在这个数据库里的数据都备份一份,为了不耽误同事们继续开…

渐悟之程序员

目录 感谢互联网为什么选择这行?现在的现状未来的展望多说几句好好学习,好好工作,好好生活,好好活着,共勉! 就是一篇流水文,没什么质量,权当给各位看客打发时间 行路难,行…

Jenkins构建触发器-触发远程构建-构建后触发-定时构建-轮询SCM

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudso…

第12章 软件测试基础(第三部分)测试类型

七、测试类型(按工程阶段划分) 单集系确收 (一)单元测试 1、单元测试/模块测试 单元就是软件中最小单位(或模块)。可以是一个函数、一个过程、一个类。主要依据是模块的详细设计文档。价值在于尽早发现…

Linux安装软件没有权限 Permission denied

切换到root用户即可 另一个原因: 脚本没有可执行权限 chmod x 脚本名即可

google search API 获取

登录谷歌云启动服务 首先登录谷歌云Google Cloud: https://console.cloud.google.com/,登录后创建一个项目。 选择创建的项目,进入API库。搜索Google Search。 选择custom Search API并启用。 此外,有个非常具有类似的API-- Google Search …

口袋实验室--使用AD2高效调试IIC、UART、SPI等低速接口

目录 1. 简介 2. 调试过程 2.1 简要步骤 2.2 Si5338 寄存器配置流程 2.3 AD2的基本配置 2.4 检查Si5338状态 2.5 配置Si5338寄存器 2.6 保存Si5338寄存器 3. 总结 1. 简介 使用Digilent Analog Discovery 2进行调试不仅提升了工作效率,而且极大地简化了常…

[python趣味实战]----基于python代码实现浪漫爱心 დ

正文 01-效果演示 下图是代码运行之后的爱心显示结果: 下面的视频该爱心是动态效果,较为简洁,如果需要使用,可以进行完善,这里只是一个趣味实战,下面将对代码实现进行非常详细地描述: 浪漫爱心…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

深入探索 C++ 中 string 的用法:从基础到实践

C String 用法详解 C中的 std::string 是一个非常强大且灵活的类&#xff0c;用于处理字符串。std::string 类是C标准库中的一部分&#xff0c;它提供了丰富的成员函数来执行各种字符串操作&#xff0c;如连接、比较、查找、替换等。在本篇博客中&#xff0c;我们将深入探索 s…

redis核心数据结构——跳表项目设计与实现(跳表结构介绍,节点类设计,随机层级函数)

跳表结构介绍。跳表是redis等知名软件的核心数据结构&#xff0c;其实现的前提是有序链表&#xff0c;思想的本质是在原有一串存储数据的链表中&#xff0c;间隔地抽出一半元素作为上一级链表&#xff0c;并将抽提出的元素和原先的位置相关联&#xff0c;这样重复下去直到最上层…

【考研数学】张宇「25版」跟「24版」的差距大吗?

其实差别不大&#xff01;要是进度比较快可以不跟着25更新&#xff0c;先跟着24的网课跟就可以了&#xff01; 身边真的很多130-140的大佬都是跟着张宇从头到尾&#xff0c;张宇老师的习题册非常适合基础扎实&#xff0c;想冲刺高分的考研党 我是属于基础不太好的&#xff0c…

Windows下面源码安装PostgreSQL

目录 一、环境&#xff1a; 二、安装MSYS2 三、安装PG 四、初始化数据库 五、启停数据库 六、调试PG 平时我们在LINUX下&#xff0c;使用源码安装PG的比较多&#xff0c;但在WINDOWS下安装&#xff0c;一般是使用二机制安装包来安装&#xff0c;能否使用源码来安装呢&…

【进收藏夹吃灰系列】算法学习指南

文章目录 [toc]分治算法 个人主页&#xff1a;丷从心 系列专栏&#xff1a;进收藏夹吃灰系列 分治算法 博客标题博客url【分治算法】【Python实现】Hanoi塔问题https://blog.csdn.net/from__2024_04_11/article/details/138093461?spm1001.2014.3001.5502