目录

Rpm打包

deb打包,排好目录,写一个control,二进制打包还是容易的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
⭕ tree clip-qrcode-share-0.2/
clip-qrcode-share-0.2/
├── DEBIAN
│   └── control
└── usr
    ├── bin
    │   └── clip-qrcode-share
    └── share
        ├── applications
        │   └── clip-qrcode-share.desktop
        └── pixmaps
            └── clip-qrcode-share.png
⭕ dpkg -b clip-qrcode-share-0.2/

rpm打包,复杂得多,以前折腾过,现在用f36,又要搞这个。redhat的例子太简单,各种不对头。想找一个和deb统一点的偷懒方式。

步骤

  • 安装 rpmdevtools rpmlint
  • rpmdev-setuptree 建立目录模板
1
2
3
4
5
6
7
⭕ rpmdev-setuptree
⭕ tree ~/rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
  • 从deb目录,复制带结构的文件过去,并编写偷懒的spec。fedora的源里面没有droopy,只好放一个源码在bin目录。
1
2
3
4
5
6
7
⭕ pwd
/home/eexpss/project/clip-qrcode-share
⭕ cp -r clip-qrcode-share-0.2/usr ~/rpmbuild/SOURCES/
⭕ cd ~/rpmbuild/SPECS/
⭕ rpmdev-newspec clip-qrcode-share
clip-qrcode-share.spec created; type minimal, rpm version >= 4.17.
⭕ e clip-qrcode-share.spec
  • spec大致如下,%install部分纯偷懒的写法。其他的%make之类的,都删除,要不各种出错。依赖关系中,版本号不知道如何写,写了安装不了。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Name:           clip-qrcode-share
Version:        0.2
Release:        1%{?dist}
Summary:        Sharing clipboard and files to mobile by scan QRCode.
BuildArch:      noarch

License:        GPL V3
URL:            https://github.com/eexpress/clip-qrcode-share
Source0:        %{name}-%{version}.tar.xz

Requires:       libadwaita gtk4 cairo qrencode

%description
Sharing clipboard and files to mobile by scan QRCode.

%define _binaries_in_noarch_packages_terminate_build   0
#error: Arch dependent binaries in noarch package
#错误:noarch 软件包中有架构相关的二进制文件

%install
cd %{_sourcedir}
cp -ar * %{buildroot}/

%files
%{_bindir}/%{name}
%{_bindir}/droopy
%{_datadir}/applications/%{name}.desktop
%{_datadir}/pixmaps/%{name}.png

%changelog
* Thu May 26 2022 eexpss <eexpss@gmail.com>
-
  • 打包。默认的打包目录,居然在家目录的固定目录,差劲的设计。虽然~/.rpmmacros可修改,只是谁会一台机器一次只维护一个包?所以,用过赶紧移走。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
⭕ rpmbuild -bb clip-qrcode-share.spec
⭕ tree ~/rpmbuild/
/home/eexpss/rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
│   └── noarch
│       └── clip-qrcode-share-0.2-1.fc36.noarch.rpm
├── SOURCES
│   └── usr
│       ├── bin
│       │   ├── clip-qrcode-share
│       │   └── droopy
│       └── share
│           ├── applications
│           │   └── clip-qrcode-share.desktop
│           └── pixmaps
│               └── clip-qrcode-share.png
├── SPECS
│   └── clip-qrcode-share.spec
└── SRPMS
⭕ mv ~/rpmbuild/ ~/project/clip-qrcode-share/

常见的宏

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
%{_sysconfdir}        /etc
%{_prefix}            /usr
%{_exec_prefix}       %{_prefix}
%{_bindir}            %{_exec_prefix}/bin
%{_lib}               lib (lib64 on 64bit systems)
%{_libdir}            %{_exec_prefix}/%{_lib}
%{_libexecdir}        %{_exec_prefix}/libexec
%{_sbindir}           %{_exec_prefix}/sbin
%{_sharedstatedir}    /var/lib
%{_datadir}           %{_prefix}/share
%{_includedir}        %{_prefix}/include
%{_oldincludedir}     /usr/include
%{_infodir}           /usr/share/info
%{_mandir}            /usr/share/man
%{_localstatedir}     /var
%{_initddir}          %{_sysconfdir}/rc.d/init.d
%{_topdir}            %{getenv:HOME}/rpmbuild
%{_builddir}          %{_topdir}/BUILD
%{_rpmdir}            %{_topdir}/RPMS
%{_sourcedir}         %{_topdir}/SOURCES
%{_specdir}           %{_topdir}/SPECS
%{_srcrpmdir}         %{_topdir}/SRPMS
%{_buildrootdir}      %{_topdir}/BUILDROOT
%{_var}               /var
%{_tmppath}           %{_var}/tmp
%{_usr}               /usr
%{_usrsrc}            %{_usr}/src
%{_docdir}            %{_datadir}/doc
%{buildroot}          %{_buildrootdir}/%{name}-%{version}-%{release}.%{_arch}
$RPM_BUILD_ROOT       %{buildroot}