6. 创建字体 RPM

不要只是随意地将.ttf文件扔到系统的某个地方。这会使迁移更加困难,并使您的计算机变得一团糟。像 RPM 这样的软件包管理软件让您可以轻松地以有组织的标准方式安装字体、管理字体升级,并使大规模字体分发变得轻而易举。

在这里,我们将为您提供模板和说明,以便您轻松构建字体的 RPM 包。我们将接受关于构建不同类型软件包的说明投稿。

6.1. 步骤 1:准备构建软件包的环境

要构建 RPM 包,您需要特殊的目录结构和一些环境配置。您应该以普通用户身份完成所有步骤。事实上,我们建议您不要以 root 用户身份执行此操作。

要创建这些目录,请执行以下操作

bash$ cd ~
bash$ mkdir -p src/rpm
bash$ cd src/rpm
bash$ cp -r /usr/src/redhat/* .
bash$ ls
BUILD/  RPMS/  SOURCES/  SPECS/  SRPMS/
bash$ 
			

(“~”是当前用户主目录名称的别名,命令行知道应该这样解释它)

当然,这是在 Red Hat 系统上,但重点是要在src/rpm:

SRPMS/然后,您需要创建.rpmmacros

%_topdir        YOUR_HOME_DIR_HERE/src/rpm
			

文件在您的主目录中,并包含以下单行内容您应该替换YOUR_HOME_DIR_HERE为您$HOME然后,您需要创建目录的绝对名称。例如,我的

%_topdir        /home/aviram/src/rpm
			

6.2. 步骤 2:准备要打包的字体文件

现在您必须为您的字体集合考虑一个名称。为了使本文档更易于理解,我们从现在开始使用名称myfonts。然后您必须创建一个名为~/src/myfonts/myfonts的目录(是的,myfonts两次),并将您的所有.ttf文件放在它下面。所以您将得到类似这样的结构

bash$ cd ~/src
bash$ find myfonts/myfonts/

myfonts/myfonts/
myfonts/myfonts/font1.ttf
myfonts/myfonts/font2.ttf
myfonts/myfonts/font3.ttf
...

			

6.3. 步骤 3:创建一个.spec文件,并使用此模板

要构建 RPM 包,您必须创建一个.spec文件,该文件为软件包构建器提供有关如何组织文件、软件包描述、作者、版权等方面的说明。我们在此处提供了一个模板 here,您可以用来开始您的工作。该模板如下所示

示例 1..spec文件模板

Name: myfonts     (1)
Summary: Collection of My Funny Fonts   (2)
Version: 1.1   (3)
Release: 1
License: GPL    (4)
Group: User Interface/X
Source: %{name}.tar.gz
BuildRoot: %{_tmppath}/build-root-%{name}
BuildArch: noarch
Requires: freetype
Packager: Avi Alkalay <avi unix sh>    (5)
Prefix: /usr/share/fonts
Url: http://myfonts.com/     (6)

%description    (7)
These are the fonts used in our marketing campaign, designed by our marketing agency specially for us.
The package includes the following fonts: Font 1, Font 2, Font 3, Font 4.


%prep

%setup -q -n %{name}

%build

%install
mkdir -p $RPM_BUILD_ROOT/%{prefix}
cp -r %{name}/ $RPM_BUILD_ROOT/%{prefix}


%clean
rm -rf $RPM_BUILD_ROOT


%files
%defattr(-,root,root,0755)
%{prefix}/%{name}


%post
{
	if test -x /sbin/conf.d/SuSEconfig.fonts ; then
		# This is a SUSE system. Use proprietary SuSE tools...
		if test "$YAST_IS_RUNNING" != "instsys" ; then
			if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.fonts ; then
				/sbin/SuSEconfig --module fonts
			else
				echo -e "\nERROR: SuSEconfig or requested SuSEconfig module not present!\n" ; exit 1
			fi
		fi

		if test -x /sbin/conf.d/SuSEconfig.pango ; then
			if test "$YAST_IS_RUNNING" != "instsys" ; then 
				if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.pango ; then
					/sbin/SuSEconfig --module pango
				else
					echo -e "\nERROR: SuSEconfig or requested SuSEconfig module not present!\n" ; exit 1
				fi
			fi
		fi
	else
		# Use regular open standards methods...
		ttmkfdir -d %{prefix}/%{name} \
			-o %{prefix}/%{name}/fonts.scale
		umask 133
		/usr/X11R6/bin/mkfontdir %{prefix}/%{name}
		/usr/sbin/chkfontpath -q -a %{prefix}/%{name}
		[ -x /usr/bin/fc-cache ] && /usr/bin/fc-cache
	fi
} &> /dev/null || :


%preun
{
	if [ "$1" = "0" ]; then
		cd %{prefix}/%{name}
		rm -f fonts.dir fonts.scale fonts.cache*
	fi
} &> /dev/null || :

%postun

{
	if test -x /sbin/conf.d/SuSEconfig.fonts ; then
		# This is a SUSE system. Use proprietary SuSE tools...
		if test "$YAST_IS_RUNNING" != "instsys" ; then
			if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.fonts ; then
				/sbin/SuSEconfig --module fonts
			else
				echo -e "\nERROR: SuSEconfig or requested SuSEconfig module not present!\n" ; exit 1
			fi
		fi

		if test -x /sbin/conf.d/SuSEconfig.pango ; then
			if test "$YAST_IS_RUNNING" != "instsys" ; then 
				if test -x /sbin/SuSEconfig -a -f /sbin/conf.d/SuSEconfig.pango ; then
					/sbin/SuSEconfig --module pango
				else
					echo -e "\nERROR: SuSEconfig or requested SuSEconfig module not present!\n" ; exit 1
				fi
			fi
		fi
	else
		# Use regular open standards methods...
		if [ "$1" = "0" ]; then
			/usr/sbin/chkfontpath -q -r %{prefix}/%{name}
		fi
		[ -x /usr/bin/fc-cache ] && /usr/bin/fc-cache
	fi
} &> /dev/null || :








%changelog    (8)
* Sun Apr 15 2007 Avi Alkalay <avi unix sh> 1.1
- Added support to SUSE on installation scriptlets
* Thu Dec 14 2002 Avi Alkalay <avi unix sh> 1.0
- Tested
- Ready for deployment
* Thu Dec 10 2002 Avi Alkalay <avi unix sh> 0.9
- First version of the template

					

您必须更改以下项目以满足您的软件包特性(其余所有内容保持不变)

(1)
在此处放置您的软件包或字体集合的名称。
(2)
在此处放置有关您的软件包的简短摘要。
(3)
软件包的版本。
(4)
在此处放置您的软件包的使用许可。
(5)
在此处放置对此软件包负责的人员的姓名。
(6)
指向有关此软件包或字体的更多信息的 URL。如果没有 URL 可指向,则可以删除整行。
(7)
在此处放置有关此字体的更详细的描述。
(8)
此软件包的演变历史记录。必须遵循此布局。

此文件必须命名为软件包的名称 -myfonts.spec在我们的示例中。您必须将其放在软件包的主目录下。所以最后我们将得到类似这样的结构

bash$ cd ~/src
bash$ find myfonts
myfonts/
myfonts/myfonts.spec
myfonts/myfonts/
myfonts/myfonts/font1.ttf
myfonts/myfonts/font2.ttf
myfonts/myfonts/font3.ttf
...

			

6.4. 步骤 4:构建它

我们几乎准备就绪了。下一步

bash$ cd ~/src
bash$ tar -czvf myfonts.tar.gz myfonts
bash$ rpmbuild -ta myfonts.tar.gz
			

完成(在看到大量关于构建过程的消息之后)。所以我们基本上创建了一个.tar.gz文件,其中包含我们所有的字体文件和myfonts.spec文件,然后我们在其上使用了 rpmbuild,它将查找myfonts.spec文件在存档中并遵循其说明。

您将在~/src/rpm/RPMS/noarch/目录下找到生成的 RPM,这是您将部署和安装的文件。在~/src/rpm/SRPMS/下,您将找到源 RPM 文件,如果您将来需要重新生成可部署的 RPM,您应该备份该文件。当您需要它时,您应该执行

bash$ rpmbuild --rebuild myfonts-1.0-1.src.rpm
			

然后将再次生成 RPM 文件。

有关更多信息和高级 RPM 打包,请阅读 Maximum RPM 书籍,该书可在 rpm.org 网站上以多种格式提供。