DELL PowerEdgeサーバにLinuxを入れる際の追加ソフト


DELL PowerEdgeサーバにRedHat Enterprise Linux (RHEL)やCentOSをインストールする場合、OSインストール後に、DELL用の管理ソフトウェア OMSAとシステムアップデートツール DSUをインストールする。

RHEL/CentOS系の手順

Dell EMC System Update (DSU)」用のYUMレポジトリを登録し、その後、「OpenManage Server Administrator」をインストールする形となるので、以下の様な流れとなる。

  1. レポジトリ登録
  2. DSUインストール
  3. OSMAインストール
  4. DTKをインストール DTKは現状必須ではない模様
  5. dsuを使ってfirmware類をアップデート

上記を実施するためのコマンド群は以下の様な形となる。

2021年1月時点での手順 ( 2021/12/20修正 )

# curl -O https://linux.dell.com/repo/hardware/dsu/bootstrap.cgi
# bash bootstrap.cgi
# yum install dell-system-update
# yum install srvadmin-all
# dsu --apply-upgrades --non-interactive

syscfgとraidcfgはracadmコマンドに統合された。

RAIDのvdisk構成を見るのであれば「racadm storage get vdisks -o」などとなる。

2019年1月時点での旧手順

# curl -s http://linux.dell.com/repo/hardware/dsu/bootstrap.cgi | bash
# yum install dell-system-update
# yum install srvadmin-all
# yum install syscfg raidcfg
# dsu --apply-upgrades --non-interactive

上記手順はインターネット接続環境にある場合のもので、接続出来ない環境で行う場合は手順が変わる

オフラインで行いたい場合は「tarballをダウンロードしてインストール」「rsyncでミラーレポジトリを作る」と「ISOを作る」から選択する。

tarballは「Dell EMC OpenManage Server Administrator 9.1.0」から入手することができる・・・ただ、2019/01/09時点ではDSUレポジトリからインストールすると9.2.0になるので若干遅れている。

rsyncの場合は「rsync -avHz linux.dell.com::repo/hardware .」でコピーしてくる。

ISOをつくる場合は「dsucreateiso」をダウンロードして実行する。事前に「yum install mkisofs」でmkisofsをインストールしておく必要はある。

また、標準状態だと/tmpにダウンロードしてきたファイル群を置いた上で、そこで展開も行うので十分な容量を確保しておく必要がある。もしくは「–workspace=/ディレクトリ」で作業領域を指定する

[root@rhelserver7 dsu]# mkdir tmp
[root@rhelserver7 dsu]# ./dsucreateiso  --workspace=`pwd`/tmp
Log file:/var/log/dsucreateiso.log
Downloading: ftp://ftp.dell.com/sysman/DSUPlugins.tar
Invalid dellbootplugin location: ftp://downloads.dell.com/FOLDER05328537M/1/dellbootplugin.tar.gz
Downloading: https://downloads.dell.com/FOLDER05328537M/1/dellbootplugin.tar.gz
Extracting dellbootplugin: dellbootplugin.tar.gz
Downloading: https://downloads.dell.com/catalog/Catalog.gz
Extracting catalog: Catalog.gz
Parsing Catalog File...

Ubuntuの手順

Ubuntu 20.04の場合もほぼ手順で設定するが、若干の細工が必要となる

2021/12/20にPower Edge R650にインストールした際のメモつきで記載する。

1. DELL System Update (DSU)のインストール

DELL PowerEdgeのfirmware周りをアップデートできるDELL System Update(dsu)はlibssl1.0.0を必要とするのだが、Ubuntu 20.04の標準レポジトリには含まれていない。このため、実行すると下記のエラーが表示される。

root@ubuntu:~# dsu
dsu: error while loading shared libraries: libssl.so.1.0.0: cannot open shared object file: No such file or directory
root@ubuntu:~#

対処方法は「DELL EMC System Update Version 1.9.1.0 User’s Guide」掲載のUbuntu 16.04(xenial)レポジトリから持ってこれるようにする、というもの

1.1. libssl1.0.0インストール

/etc/apt/sources.list.d/for-dsu.list というファイルを作成し、下記の内容で記述する。

deb http://security.ubuntu.com/ubuntu xenial-security main

上記実施後「apt update」でレポジトリ情報を更新したあと、「apt install libssl1.0.0」でインストールする。

1.2. dsuを入手

2021/12/20時点では文書000130590「Dell EMC System Update(DSU)」からリンクされている「Dell EMC System Update、v.1.9.2.0」が最新。

ダウンロードするものは「Red Hat Linux用更新パッケージ」の Systems-Management_Application_5C2CW_LN64_1.9.2.0_A00.BIN

個別ダウンロードの説明には Ubuntu 20.04 LTSといった記載はないが、下部にある「サポート対象のオペレーションシステム」には含まれている。

1.3. DSUのインストール

ダウンロードしたファイルに実行権限を与えてインストールする。

root@ubuntu:~# chmod a+x /usr/local/src/Systems-Management_Application_5C2CW_LN64_1.9.2.0_A00.BIN
root@ubuntu:~# /usr/local/src/Systems-Management_Application_5C2CW_LN64_1.9.2.0_A00.BIN
Collecting inventory...
.
Running validation...

DELL System Update

No version of this Update Package is currently installed.
Software application name: DSU
Package version: 1.9.2.0


Continue? Y/N:y
Executing update...
WARNING: DO NOT STOP THIS PROCESS OR INSTALL OTHER PRODUCTS WHILE UPDATE IS IN PROGRESS.
THESE ACTIONS MAY CAUSE YOUR SYSTEM TO BECOME UNSTABLE!
.
DELL EMC System Update installed successfully.
The update completed successfully.
root@ubuntu:~#

1.4. DSUによるアップデート

dsuコマンドはインターネット接続して最新のfirmwareカタログおよびfirmware実体をダウンロードします。

アップデートは「dsu」で行います。

「dsu –apply-upgrades –non-interactive」で実行すると対象となるものをすべて適用する形となります。

今回は確認しながら進めるため「dsu」をオプションなしで実行しました。

root@ubuntu:~# dsu
DELL EMC System Update 1.9.2.0
Copyright (C) 2014 -- 2021 DELL EMC Proprietary.
Do you want to import public key(s) on the system (Y/N)? : y
Import Public Key(s)
Importing key 1019CED6 is successful
Importing key 23B66A9D is successful
Importing key 34D8786F is successful
Importing key 46770C59 is successful
Downloading the Index catalog
Extracting /usr/libexec/dell_dup/CatalogIndex.gz
Reading the Index catalog
Downloading the catalog
Extracting /usr/libexec/dell_dup/Catalog.gz
Reading the catalog ...
Fetching invcol_8YPK7_LN64_21_12_200_1196_A00 ...
Verifying inventory collector installation
Trying to connect using https
Fetching invcol_8YPK7_LN64_21_12_200_1196_A00.BIN ...
Getting System Inventory ...
Determining Applicable Updates ...

|--------DELL EMC System Update-----------|
[ ] represents 'not selected'
[*] represents 'selected'
[-] represents 'Component already at repository version (can be selected only if -e option is used)'
Choose:  q - Quit without update, c to Commit, <number> - To Select/Deselect, a - Select All, n - Select None
[-]1 BIOS
Current Version : 1.3.8 Same as : 1.3.8, Criticality : Recommended, Type : BIOS

[ ]2 SEP Firmware, BayID: 1
Current Version : 3.56 Upgrade to : 3.57, Criticality : Optional, Type : Firmware

[-]3 Firmware for  - Disk 0 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[-]4 Firmware for  - Disk 1 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[-]5 Firmware for  - Disk 2 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[-]6 Firmware for  - Disk 3 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[ ]7 PERC H755 Front Controller 0 Firmware
Current Version : 52.16.1-4074 Upgrade to : 52.16.1-4158, Criticality : Urgent, Type : Firmware

[-]8 NetXtreme BCM5720 Gigabit Ethernet PCIe (eno8403)
Current Version : 21.81.3 Same as : 21.81.3, Criticality : Optional, Type : Firmware

[-]9 NetXtreme BCM5720 Gigabit Ethernet PCIe (eno8303)
Current Version : 21.81.3 Same as : 21.81.3, Criticality : Optional, Type : Firmware

[-]10 Intel(R) Ethernet 10G 2P X710-T2L-t OCP
Current Version : 20.5.13 Same as : 20.5.13, Criticality : Recommended, Type : Firmware

[-]11 Intel(R) Ethernet Network Adapter X710-TL
Current Version : 20.5.13 Same as : 20.5.13, Criticality : Recommended, Type : Firmware

[-]12 Intel(R) Ethernet 10G 2P X710-T2L-t Adapter
Current Version : 20.5.13 Same as : 20.5.13, Criticality : Recommended, Type : Firmware

[ ]13  iDRAC
Current Version : 5.00.10.10 Upgrade to : 5.00.20.00, Criticality : Recommended, Type : Firmware

[ ]14 NVMePCISSD Model Number: Dell Ent NVMe v2 AGN MU U.2 3.2TB
Current Version : 2.0.0 Upgrade to : 2.2.0, Criticality : Recommended, Type : Firmware

[-]15 Dell 64 Bit uEFI Diagnostics, version 4301, 4301A61, 4301.62
Current Version : 4301A61 Same as : 4301A61, Criticality : Optional, Type : Application

[-]16 Dell OS Driver Pack, 21.07.07, A00
Current Version : 21.07.07 Same as : 21.07.07, Criticality : Optional, Type : Application

[-]17 Dell EMC iDRAC Service Module Embedded Package v4.1.0.0, A00
Current Version : 4.1.0.0 Same as : 4.1.0.0, Criticality : Recommended, Type : Application

Enter your choice : 

firmwareの現状が表示されて、選択肢入力となります。

基本的には必要なもの全てに適用するため「a」を入力します。

Enter your choice : a

|--------DELL EMC System Update-----------|
[ ] represents 'not selected'
[*] represents 'selected'
[-] represents 'Component already at repository version (can be selected only if -e option is used)'
Choose:  q - Quit without update, c to Commit, <number> - To Select/Deselect, a - Select All, n - Select None
[-]1 BIOS
Current Version : 1.3.8 Same as : 1.3.8, Criticality : Recommended, Type : BIOS

[*]2 SEP Firmware, BayID: 1
Current Version : 3.56 Upgrade to : 3.57, Criticality : Optional, Type : Firmware

[-]3 Firmware for  - Disk 0 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[-]4 Firmware for  - Disk 1 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[-]5 Firmware for  - Disk 2 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[-]6 Firmware for  - Disk 3 of PERC H755 Front Controller 0
Current Version : BA08 Same as : BA08, Criticality : Recommended, Type : Firmware

[*]7 PERC H755 Front Controller 0 Firmware
Current Version : 52.16.1-4074 Upgrade to : 52.16.1-4158, Criticality : Urgent, Type : Firmware

[-]8 NetXtreme BCM5720 Gigabit Ethernet PCIe (eno8403)
Current Version : 21.81.3 Same as : 21.81.3, Criticality : Optional, Type : Firmware

[-]9 NetXtreme BCM5720 Gigabit Ethernet PCIe (eno8303)
Current Version : 21.81.3 Same as : 21.81.3, Criticality : Optional, Type : Firmware

[-]10 Intel(R) Ethernet 10G 2P X710-T2L-t OCP
Current Version : 20.5.13 Same as : 20.5.13, Criticality : Recommended, Type : Firmware

[-]11 Intel(R) Ethernet Network Adapter X710-TL
Current Version : 20.5.13 Same as : 20.5.13, Criticality : Recommended, Type : Firmware

[-]12 Intel(R) Ethernet 10G 2P X710-T2L-t Adapter
Current Version : 20.5.13 Same as : 20.5.13, Criticality : Recommended, Type : Firmware

[*]13  iDRAC
Current Version : 5.00.10.10 Upgrade to : 5.00.20.00, Criticality : Recommended, Type : Firmware

[*]14 NVMePCISSD Model Number: Dell Ent NVMe v2 AGN MU U.2 3.2TB
Current Version : 2.0.0 Upgrade to : 2.2.0, Criticality : Recommended, Type : Firmware

[-]15 Dell 64 Bit uEFI Diagnostics, version 4301, 4301A61, 4301.62
Current Version : 4301A61 Same as : 4301A61, Criticality : Optional, Type : Application

[-]16 Dell OS Driver Pack, 21.07.07, A00
Current Version : 21.07.07 Same as : 21.07.07, Criticality : Optional, Type : Application

[-]17 Dell EMC iDRAC Service Module Embedded Package v4.1.0.0, A00
Current Version : 4.1.0.0 Same as : 4.1.0.0, Criticality : Recommended, Type : Application

Enter your choice : 

そうするとインストールが必要なものについては「[*]」という表示に変わります。

インストールするものを選択したら「c」と入力し、ダウンロードと適用を開始します。

Enter your choice : c
Trying to connect using https
Fetching iDRAC-with-Lifecycle-Controller_Firmware_19C2M_LN64_5.00.20.00_A00 ...
Trying to connect using https
Fetching iDRAC-with-Lifecycle-Controller_Firmware_19C2M_LN64_5.00.20.00_A00.BIN ...
Trying to connect using https
Fetching SAS-RAID_Firmware_6MTTK_LN64_52.16.1-4158_A05_01 ...
Trying to connect using https
Fetching SAS-RAID_Firmware_6MTTK_LN64_52.16.1-4158_A05_01.BIN ...
Trying to connect using https
Fetching Express-Flash-PCIe-SSD_Firmware_FJK0C_LN64_2.2.0_A01 ...
Trying to connect using https
Fetching Express-Flash-PCIe-SSD_Firmware_FJK0C_LN64_2.2.0_A01.BIN ...
Trying to connect using https
Fetching Firmware_TKKM5_LN64_3.57_A00 ...
Trying to connect using https
Fetching Firmware_TKKM5_LN64_3.57_A00.BIN ...
Installing iDRAC-with-Lifecycle-Controller_Firmware_19C2M_LN64_5.00.20.00_A00
Installed successfully
Installing SAS-RAID_Firmware_6MTTK_LN64_52.16.1-4158_A05_01
Installed successfully
Installing Express-Flash-PCIe-SSD_Firmware_FJK0C_LN64_2.2.0_A01
Installed successfully
Installing Firmware_TKKM5_LN64_3.57_A00
Installed successfully
Please restart the system for successful update(s) to take effect
Done! Please run 'dsu --inventory' to check the inventory
Exiting DSU!
root@ubuntu:~#

1.5. 再起動

firmwareは再起動時に適用されるため、再起動します。

1.6. 確認

root@ubuntu:~# dsu --inventory
DELL EMC System Update 1.9.2.0
Copyright (C) 2014 -- 2021 DELL EMC Proprietary.
Downloading the Index catalog
Extracting /usr/libexec/dell_dup/CatalogIndex.gz
Reading the Index catalog
Downloading the catalog
Extracting /usr/libexec/dell_dup/Catalog.gz
Reading the catalog ...
Verifying inventory collector installation
Trying to connect using https
Fetching invcol_8YPK7_LN64_21_12_200_1196_A00.BIN ...
Getting System Inventory ...

1. BIOS, BIOS  ( Version : 1.3.8 )

2. FRMW, Power Supply  ( Version : 00.2A.2A )

3. FRMW, Power Supply  ( Version : 00.2A.2A )

4. FRMW, SEP Firmware, BayID: 1  ( Version : 3.57 )

5. FRMW, Firmware for  - Disk 0 of PERC H755 Front Controller 0    ( Version : BA08 )

6. FRMW, Firmware for  - Disk 1 of PERC H755 Front Controller 0    ( Version : BA08 )

7. FRMW, Firmware for  - Disk 2 of PERC H755 Front Controller 0    ( Version : BA08 )

8. FRMW, Firmware for  - Disk 3 of PERC H755 Front Controller 0    ( Version : BA08 )

9. FRMW, PERC H755 Front Controller 0 Firmware  ( Version : 52.16.1-4074 )

10. FRMW, NetXtreme BCM5720 Gigabit Ethernet PCIe (eno8403)  ( Version : 21.81.3 )

11. FRMW, NetXtreme BCM5720 Gigabit Ethernet PCIe (eno8303)  ( Version : 21.81.3 )

12. FRMW, Intel(R) Ethernet 10G 2P X710-T2L-t OCP  ( Version : 20.5.13 )

13. FRMW, Intel(R) Ethernet Network Adapter X710-TL  ( Version : 20.5.13 )

14. FRMW, Intel(R) Ethernet 10G 2P X710-T2L-t Adapter  ( Version : 20.5.13 )

15. FRMW, Intel(R) Ethernet Network Adapter X710-TL  ( Version : 20.5.13 )

16. FRMW,  iDRAC  ( Version : 5.00.20.00 )

17. FRMW, NVMePCISSD Model Number: Dell Ent NVMe v2 AGN MU U.2 3.2TB  ( Version : 2.2.0 )

18. FRMW, NVMePCISSD Model Number: Dell Ent NVMe v2 AGN MU U.2 3.2TB  ( Version : 2.2.0 )

19. APAC, Lifecycle Controller  ( Version : 5.00.20.00 )

20. APAC, Dell 64 Bit uEFI Diagnostics, version 4301, 4301A61, 4301.62  ( Version : 4301A61 )

21. APAC, Dell OS Driver Pack, 21.07.07, A00  ( Version : 21.07.07 )

22. APAC, Dell EMC iDRAC Service Module Embedded Package v4.1.0.0, A00  ( Version : 4.1.0.0 )

23. FRMW, System CPLD  ( Version : 1.0.5 )


Progress report is available at:/usr/libexec/dell_dup/DSU_STATUS.json
Exiting DSU!
root@ubuntu:~#

2. ドライバインストール

上記のDSUで「Dell OS Driver Pack」が導入されているのだが、バージョンが最新ではないことの方が多いようだ。

このため、別途手動でドライバをダウンロードしてきてインストールする必要がある。

2.1. ドライバ入手

入手方法は若干面倒で各機種のドライバダウンロードページ、たとえばPowerEdge R650ならここにアクセス。

オペレーションシステムを「Ubuntu 20.04 LTS」と限定し、ソート基準を「リリース日: 最も新しい」に変更します。

表示されるなかから「カテゴリ: OS導入用のドライバ」の「Dell OS Driver Pack」の最新版をダウンロードします。

2021/12/20時点では Drivers-for-OS-Deployment_Application_CF52W_LN_21.10.02_A00.BIN でした。

こちらもDSUと同様に「サポートされているOSのリスト」にUbuntu 20.04 LTSが含まれていませんが、問題ありません。

2.2. ドライバ適用

ダウンロードしたファイルに実行権限を与えてインストールします。

root@ubuntu:~# chmod a+x /usr/local/src/Drivers-for-OS-Deployment_Application_CF52W_LN_21.10.02_A00.BIN
root@ubuntu:~# /usr/local/src/Drivers-for-OS-Deployment_Application_CF52W_LN_21.10.02_A00.BIN
Collecting inventory...
....................................................
Running validation...

Dell OS Driver Pack, 21.07.07, A00

The version of this Update Package is newer than the currently installed version.
Software application name: Dell OS Driver Pack, 21.07.07, A00
Package version: 21.10.02
Installed version: 21.07.07



Continue? Y/N:y
Executing update...
WARNING: DO NOT STOP THIS PROCESS OR INSTALL OTHER PRODUCTS WHILE UPDATE IS IN PROGRESS.
THESE ACTIONS MAY CAUSE YOUR SYSTEM TO BECOME UNSTABLE!
..............................................................................................................................................................................
 Update Success
The update completed successfully.
root@ubuntu:~#

DSUにより「21.07.07」がインストールされていたものが「21.10.02」にアップデートされました。

3. OSMAインストール

3.1. OSMAのレポジトリ確認

Ubuntu用 Dell OpenManage は Dell EMC OpenManage Ubuntu and Debian Repositories にて必要なレポジトリ情報を確認する。

機種によって変わってくるので、Availability Matrixをよく見ること。

例えばPowerEdge R640だと OMSA v10.1.0.1 だが、PowerEdge R650では OMSA v10.0.1 + iSM v4.0.1 違いがあることに注意。

3.2. OMSAレポジトリファイル登録

/etc/apt/sources.list.d/linux.dell.com.sources.list にレポジトリ記述を書く。

PowerEdge R640だったら下記

deb http://linux.dell.com/repo/community/openmanage/10101/focal focal main

PowerEdhe R650なら下記

deb http://linux.dell.com/repo/community/openmanage/1001/focal focal main
deb http://linux.dell.com/repo/community/openmanage/iSM/401/focal focal main

3.3. レポジトリの公開鍵登録

最近はレポジトリの公開鍵を登録しないといけないので、DELL OMSAレポジトリで使用される公開鍵をダウンロードして、aptに登録する。

root@ubuntu:~# wget https://linux.dell.com/repo/pgp_pubkeys/0x1285491434D8786F.asc
--2021-12-20 01:20:41--  https://linux.dell.com/repo/pgp_pubkeys/0x1285491434D8786F.asc
Resolving linux.dell.com (linux.dell.com)... 143.166.156.113
Connecting to linux.dell.com (linux.dell.com)|143.166.156.113|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 4250 (4.2K) [text/plain]
Saving to: ‘0x1285491434D8786F.asc’

0x1285491434D8786F. 100%[===================>]   4.15K  --.-KB/s    in 0s

2021-12-20 01:20:41 (364 MB/s) - ‘0x1285491434D8786F.asc’ saved [4250/4250]

root@ubuntu:~# apt-key add 0x1285491434D8786F.asc
OK
root@ubuntu:~#

3.4. レポジトリ更新

「apt update」でレポジトリ情報を更新する

3.5. OSMAインストール

「apt install srvadmin-all」でOMSAをインストール

3.6 iSMインストール(オプション)

レポジトリ一覧に「iSM」がある場合、「apt install dcism」でインストールする。

インストール後iSMを動作させるには再起動するか「systemctl start dcismeng.service」を実行する。

iSMがインストールされていて、動作している場合、iDRACの[システム]-[ホストOS]で下記の様な表示がある。

動作していない場合は「RAC0690」というエラーが表示される。なお、手動でdcismeng.serviceを起動した場合、iDRAC側に反映されるまで30秒程度かかる。

ImageMagick/librsvgではSVGのtextPathが使えない


文字列画像をSVGで作る」で調べたことの副産物を別記事として書きます。

SVGで文字列を描画する際、単純に記載するには「text」を使用する。

textには「textPath」という機能があり、別途定義した「path」の線上に文字列を並べることができるようになっている。

textPathは各種ブラウザではサポートされているものの、ImageMagickではサポートされていない。(「Text by path not working #642」)

ImageMagickでサポートされていない原因は、SVG描画にはlibrsvg2を使用しており、そのlibrsvg2がtextPathをサポートしていない、というものでした。(「[BZ#644624] no support for textPath element」)

4年前に「Partial textPath support」という形で部分的にサポートするためのパッチが投稿されているようなのですが、取り込まれていないままのようです。

果たしてサポートされるようになるのか・・・


2022/04/19追記

どうなったのかな?と確認してみたところ、libsvgでのサポート状況は変わっていなかった。

2021年にwikimediaのSVGサポートではlibsvgを使っているけど、そのままでいいの?といった議論があった模様「[Session] RFC: Re-evaluate librsvg as SVG renderer on Wikimedia wikis

libsvg 2.50、resvg 0.14、Inkscape 1.0、batlk 1.13/1.14を使った場合の速度や負荷などを検討し、resvgがよいのでは?というプレゼン資料があった。

ただ、最終的にwikimedia側でどうしたのかがよくわからなかった。

文字列画像をSVGで作る


ImageMagickの使い方を調べていたら、文字列を記述したSVGをImageMagickの機能で画像にすることができるようだ。

まず、ImageMagickで使えるフォントを確認する。

$ magick -list font
<略>
  Font: VL-Gothic-Regular
    family: VL Gothic
    style: Normal
    stretch: Normal
    weight: 400
    glyphs: /usr/share/fonts/vlgothic/VL-Gothic-Regular.ttf
$

「Font: VL-Gothic-Regular」が日本語フォントを含むものであるため、これを使う形でSVGを記述する。

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1"
 xmlns="http://www.w3.org/2000/svg"
 xmlns:xlink="http://www.w3.org/1999/xlink"
 viewBox="0 0 200 100"
 >
 <g font-size="16" font-family="VL Gothic">
<text x="0" y="16" style="width:200px;height:100px;font-size:16pt" >文字列78901234567890123456789012345678901234567890</text>
 </g>
</svg>

これで「magick test.svg test.png」とかやると生成される。上記の様にfont-familyをSVG内で指定していない場合は「magick -font VL-Gothic-Regular test.svg test.png 」という形で使用するフォントを指定する。

ただ、コレは自動改行されない。

調べたがSVGで簡単に文字列を自動改行させる方法は無い模様。

「foreignObject」というのを使うとできる、という記述もあったのだが、ImageMagickでは使えないようで、下記のSVGを作ってみたが、真っ白な画像ができあがった。

<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1"
 xmlns="http://www.w3.org/2000/svg"
 width="210" height="110" >
<foreignObject x="0" y="16" width="200" height="100">
 <html xmlns="http://www.w3.org/xhtml/1999">
  <div style="width:200px;height:100px;font-size:16pt" >文字列78901234567890123456789012345678901234567890</div>
 </html>
</foreignObject>
</svg>

snibgo’s ImageMagick pages の「SVG text」にInkscape を使ってテキストを配置するアウトラインを作って、その範囲内に文字列を流し込む、ということができるらしい。

調べていくと「TextPath」を使うとPathで指定した線に沿ってテキストを配置できるので、その線を罫線みたいに引くことで対処できるようだ。

が・・・うちの環境のImageMagick v7では、テキスト文字列が出力されなかったので、調べたところ「RSVGが有効であること」が必要らしい。(参考:「convert SVG to PNG (textPath)」)

このため「yum install librsvg2-devel」でパッケージ追加した後に、「./configure」を実行したが「RSVG –with-rsvg=no no」のまま。「./configure –with-rsvg=yes」にしたところ「RSVG –with-rsvg=yes yes」となった。

しかし、それでもうまく描画はしてくれなかった・・・とりあえず現状はお手上げ状態。今後の記録のために実験したSVGの内容を下記に挙げておく。

その1:ぐるぐる巻きに文字列

<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg">

  <!-- to hide the path, it is usually wrap into a <defs> element -->
  <!-- <defs -->
  <path id="MyPath" fill="none" stroke="red"
          d="M10,90 Q90,90 90,45 Q90,10 50,10 Q10,10 10,40 Q10,70 45,70 Q70,70 75,50" />
  <!-- </defs> -->

  <text>
    <textPath href="#MyPath" style="font-size:16pt;color:black">
      The quick brown fox jumps over the lazy dog.
    </textPath>
  </text>

</svg>

その2:ノートみたいな罫線に文字

<svg width="200" height="200"
    xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
  <!-- define lines for text lies on -->
  <path id="path1" d="M10,30 H190 M10,60 H190 M10,90 H190 M10,120 H190"></path>
 </defs>
 <use xlink:href="#path1" x="0" y="35" stroke="blue" stroke-width="1" />
 <text transform="translate(0,35)" fill="red" font-size="20">
  <textPath xlink:href="#path1"  fill="red">This is a long long long text ......</textPath>
 </text>
</svg>

その3:1/4円上に文字

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="1000px" height="707px" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
        <path id="MyPath" d="M 599,455 A 244,244 0 0,1 723,578" />
</defs>
<use xlink:href="#MyPath" fill="none" stroke="red"  />
<text font-family="VL Gothic" font-size="16" fill="black" >
<textPath xlink:href="#MyPath">
 We go up, then we go down, then up again
</textPath>
</text>
</svg>

librsvg2-toolsを入れると「rsvg-convert」コマンドによってsvgからpngを生成できるというので試してみたが、結果は同じだった。フォントが足らないのかな?と「yum install ipa-gothic-fonts.noarch ipa-mincho-fonts.noarch ipa-pgothic-fonts.noarch ipa-pmincho-fonts.noarch」を実行してみて、IPAフォントを追加し「IPAGothic」などを指定してみても結果は変わらず。

ImageMagickのgithub ISSUEに「Text by path not working #642」というのがあった。これは、librsvgのISSUE「[BZ#644624] no support for textPath element」→「[BZ#644624] no support for textPath element」(gitlab)ということで、librsvgがtextPathに対応していない、ということになる。

Partial textPath support」という形でサポートするためのコードも送られているものの、現時点ではまだ取り込まれていないようだ。

現時点でとれる対処方法はInkspaceを使ってSVG to PNGをやらせることぐらいらしい。


2023/03/23追記

Ubuntu 22.04環境でlibsvg2-2 2.52.5+dfsg-3 と、ImagemagickサイトからダウンロードしたImageMagick 7.1.1-4 Q16-HDRI を使って実験してみましたが、最初の改行されない日本語サンプルの↓以外は期待通りの動作はしていませんでした