openSUSE:软件包条件构建依赖项

跳转到:导航搜索

摘要

我们的基础软件包包含对各种功能的支持,这使得我们的基础操作系统由于依赖关系而非常庞大。虽然这对于例如 openSUSE Tumbleweed 来说不是问题,因为额外的软件包在整体大小上并不重要,但对于构建小型单用途操作系统,您想要一个真正小的操作系统而没有任何不必要的软件包时,这是一个大问题。这些“无用”的软件包又制造了另一个问题

为了不支持或无法正常工作的特性安装了库。例如,AppArmor 和 SELinux 是互斥的,那么为什么例如 ALP 要发布无法工作且不受支持的 AppArmor,从而在各方都造成了很高的维护开销,而没有任何好处?

每个项目的条件构建依赖

解决方案是在 spec 文件中使用 %bcond 为每个项目启用/禁用 BuildRequires 和代码(参见 https://en.opensuse.net.cn/openSUSE:Build_Service_prjconf#%25bcond)。

该功能应默认启用,对于特殊情况或新功能,情况可能不同。

一个 spec 文件对于 openssh 来说可能如下所示

...
# Enable kerberos by default
%bcond_without kerberos
...
%if %{with kerberos}
%if 0%{?suse_version} > 1500
BuildRequires:  pkgconfig(krb5)
%else
BuildRequires:  krb5-mini-devel
%endif
%endif
...
%if %{with kerberos}
    --with-kerberos5=%{_prefix} \
%endif
...
%files common
...
%if %{with kerberos}
%doc README.kerberos
%endif
...

功能关键字

以下关键字将在 prjconf 中用于启用/禁用每个项目的功能

  • aac
  • acl_tests 仅用于 'acl' 包本身,以声明测试套件不要在 distro bootstrap 中运行
  • ada 不应使用 - 有些 spec 错误地使用 bcond 来禁用其源代码中无法正常工作的特性(ncurses、plplot)
  • apparmor
  • aspell 利用 aspell 功能(例如 enchant)
  • avif 通过 libavif 支持 avif(例如 gd)
  • djvu 利用 djvu 功能(例如通过 djvulibre 在 ImageMagick 中)
  • faac Freeware Advanced Audio Coder - 应该在参考 OBS 中禁用,有些第三方会重新构建启用此功能的源代码
  • faad faad2 媒体支持;必须在参考 OBS 中禁用,但第三方会重新构建启用此功能的源代码
  • fdk_aac Fraunhofer FDK AAC 支持 - 应该在参考 OBS 中禁用,由第三方启用
  • ffmpeg
  • fltk 将 fltk 用作后端(例如 pinentry)
  • fluidsynth
  • gnome
  • gstreamer
  • java
  • kerberos
  • ldap
  • libnsl (NIS 支持)
  • 第三个实例是
  • openblas
  • sbl (linux 屏幕阅读器;仅用于安装镜像以缩小 staging)
  • selinux
  • slp 启用/禁用 SLP 支持 (http://www.openslp.org/)
  • utmp 启用/禁用应用程序中的 utmp 和 wtmp 支持
  • vnc