CentOS Stream 8 + Ruby + fontcustomをインストール

CentOS7でやった時のリライト版。思ったより時間が掛かった。

環境: CentOS Stream 8, ruby 2.6.7p197, fontcustom 2.0.0


参考サイト


fontcustomのGitHubページを参考にコマンド実行。powertoolsにfontforgeはあった。
# cd /opt/software/
# dnf install fontforge --enablerepo powertools
# git clone https://github.com/bramstein/sfnt2woff-zopfli.git sfnt2woff-zopfli && cd sfnt2woff-zopfli && make && mv sfnt2woff-zopfli /usr/local/bin/sfnt2woff
# git clone --recursive https://github.com/google/woff2.git && cd woff2 && make clean all && sudo mv woff2_compress /usr/local/bin/ && sudo mv woff2_decompress /usr/local/bin/

Rubyをインストール。
モジュール一覧で確認。
# dnf module list ruby

CentOS7の時は2.6だったので冒険せず2.6をインストール。
# dnf module install ruby:2.6

バージョン確認
# ruby --version

ruby 2.6.7p197 (2021-04-05 revision 67941) [x86_64-linux]

fontcustomをインストール
# gem install fontcustom

エラー

Fetching rb-fsevent-0.11.0.gem
Successfully installed rb-fsevent-0.11.0
Fetching ffi-1.15.3.gem
Building native extensions. This could take a while...
ERROR:  Error installing fontcustom:
        ERROR: Failed to build gem native extension.

    current directory: /usr/local/share/gems/gems/ffi-1.15.3/ext/ffi_c
/usr/bin/ruby -I /usr/share/rubygems -r ./siteconf20210724-5288-cq84l5.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h

You might have to install separate package for the ruby development
environment, ruby-dev or ruby-devel for example.

extconf failed, exit code 1

Gem files will remain installed in /usr/local/share/gems/gems/ffi-1.15.3 for inspection.
Results logged to /usr/local/lib64/gems/ruby/ffi-1.15.3/gem_make.out

ruby-devが必要と怒られた。

検索してインストール。
# dnf search ruby-dev
# dnf install ruby-devel

fontcustomをインストール
# gem install fontcustom

エラー

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /usr/local/lib64/gems/ruby/ffi-1.15.3/mkmf.log

extconf failed, exit code 1

ログファイルを見てみる。
# less /usr/local/lib64/gems/ruby/ffi-1.15.3/mkmf.log

"pkg-config --exists libffi"
package configuration for libffi is not found

libffiを検索してインストール
# dnf search libffi
# dnf install libffi-devel

fontcustomをインストールしてもさっきと同じエラー。ログファイルを見てみる。
# less /usr/local/lib64/gems/ruby/ffi-1.15.3/mkmf.log

ffiでエラーになっている。よくわからん。

gemをアップグレード。
# gem --version

3.0.3.1

# gem update --system

エラー。

ERROR:  While executing gem ... (Errno::ENOENT)
    No such file or directory @ dir_chdir - /usr/share/gems/gems/rubygems-update-3.2.24

こちらのサイトに答えがあったので、シンボリックリンクを付ける。

# ls /usr/local/share/gems/gems/
# ln -s /usr/local/share/gems/gems/rubygems-update-3.2.24/ /usr/share/gems/gems/rubygems-update-3.2.24

gemアップグレード。確認。
# gem update --system
# gem --version

3.2.24

各gemパッケージをアップデート
# gem update

いろいろエラー。ログを確認してググる。
# dnf install redhat-rpm-config

各gemパッケージをアップデート
# gem update

成功。

これでfontcustomをインストールしてみる。
# gem install fontcustom

成功。

redhat-rpm-configが必要だったみたい。
バージョン確認。
# fontcustom --version

fontcustom-2.0.0

Ignoringがいくつか出るので解消する。
# gem pristine bigdecimal --version 1.4.1
# gem pristine io-console --version 0.4.7
# gem pristine json --version 2.1.0
# gem pristine openssl --version 2.1.2
# gem pristine psych --version 3.1.0

確認。
# fontcustom --version


別ユーザーになってbootstrap-iconsをビルドしてみる。
# su - node
# cd /opt/software/
# git clone https://github.com/twbs/icons.git bootstrap-icons
# cd bootstrap-icons
# fontcustom compile icons/ --name=bi --output=build/bi

エラー。デバッグモードで実行してみる。
# fontcustom compile icons/ --name=bi --output=build/bi --debug

前と同じ文字コードの問題だと思う(前の記事)。

# less /usr/local/share/gems/gems/fontcustom-2.0.0/lib/fontcustom/scripts/generate.py

    #tmpsvgfile.file.write(svgtext.encode('utf-8'))
    tmpsvgfile.file.write(svgtext.decode('utf-8').encode('utf-8'))

これで実行。
# fontcustom compile icons/ --name=bi --output=build/bi --debug

失敗するのでさっきの文字コードの修正は元に戻す。

いろいろ試す。

gem updateしたらエラーになったので解決する。
# dnf install gdbm-devel


試しに他のsvgを変換したら無事完了した。

bootstrap-iconsとの相性が悪いのかな?
CentOS7上ではbootstrap-icons(v1.5.0)でも問題なく完了する。

とりあえずインストール自体は出来たのでよしとする。

bootstrap-iconsの公式woff2(88.4KB)よりfontcustomで作ったwoff2(66.5KB)の方がサイズが小さいので出来ればビルドする環境は作っておきたい。

【関連記事】