Almalinux 9 で ImageMagickをインストールする

# はじめに
nextcloudのセットアップにおいては，
「管理」->「概要」->「セキュリティ＆セットアップ警告」において，いわゆる合格がでるように修正をすすめることとなる．ところが，

:::note warn
テーマ別アプリは有効ですが、PHPモジュール「imagick」が有効ではありません。ファビコン生成を正しく行うには、このモジュールをインストールし、有効化する必要があります。
:::

を解決しようとして　[PHPからImageMagickを使う(AlmaLinux)](https://blog.heteml.jp/?p=4681)　を参考に
```
# dnf --enablerepo=epel-next install ImageMagick
```
をコンソール上からrootにて叩いたところ
```
エラー: 
 問題: package ImageMagick-6.9.12.93-2.el9.next.x86_64 from epel-next requires ImageMagick-libs(x86-64) = 6.9.12.93-2.el9.next, but none of the providers can be installed
  - ジョブの最良アップデート候補をインストールできません
  - nothing provides libraw_r.so.23()(64bit) needed by ImageMagick-libs-6.9.12.93-2.el9.next.x86_64 from epel-next
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
```
という応答があった．
ここでは，このエラーを解消して先述のdnf命令が通るようにしたい．

結論としては，

:::note info
必要なパッケージ libraw_r.so.23()(64bit) が不足しているので，rpmリポジトリから必要なパッケージ
https://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/LibRaw-0.21.1-1.el9.x86_64.rpm
を取得してインストールすれば，ImageMagickのインストールを進めることが可能となる．
:::
のである．

# 前提条件
* OSはAlmalinuxである
* epelリポジトリまたはepel-nextリポジトリが使えるようにしていること（[参考](https://qiita.com/yamada-hakase/items/fdf9c276b9cae51b3633)）
# エラーの本質　libraw_r.so.23()(64bit)
先ほど示したエラー
```
エラー: 
 問題: package ImageMagick-6.9.12.93-2.el9.next.x86_64 from epel-next requires ImageMagick-libs(x86-64) = 6.9.12.93-2.el9.next, but none of the providers can be installed
  - ジョブの最良アップデート候補をインストールできません
  - nothing provides libraw_r.so.23()(64bit) needed by ImageMagick-libs-6.9.12.93-2.el9.next.x86_64 from epel-next
(インストール不可のパッケージをスキップするには、'--skip-broken' を追加してみてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
```
を見ると，3行目に，libraw_r.so.23()(64bit)が必要だと書かれているため，ここを解決する必要がありそうだ．
### libraw_r.so.23()(64bit)を探す
「libraw_r.so.23()(64bit)」で検索すると，どれを参考にして良いのかということで混乱するため，
[RPM resource libraw_r.so.23()(64bit)](https://rpmfind.net/linux/rpm2html/search.php?query=libraw_r.so.23%28%29%2864bit%29&submit=Search+...&system=&arch=)
から，例えばx86_64のものであれば [LibRaw-0.21.1-1.el9.x86_64.rpm](https://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/LibRaw-0.21.1-1.el9.x86_64.rpm)をダウンロードすれば良いと言うことである．

:::note info
他のアーキテクチャであれば，それ相応のファイルを見つけること
:::
### libraw_r.so.23()(64bit)のダウンロード
先ほど見つけたlibraw_r.so.23()(64bit)のダウンロードURLは
https://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/LibRaw-0.21.1-1.el9.x86_64.rpm
であることから，コンソール上でrootにて
```
# wget https://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/LibRaw-0.21.1-1.el9.x86_64.rpm
```
としてダウンロードする．そうすれば，その後のlsコマンドによってLibRaw-0.21.1-1.el9.x86_64.rpmの存在が確認できるはずだ．
```
# ls
LibRaw-0.21.1-1.el9.x86_64.rpm 

・・・
（利用環境によってはほかにもファイルがあるかも知れない）
```
### libraw_r.so.23()(64bit)のインストール
先述のようにLibRaw-0.21.1-1.el9.x86_64.rpmがダウンロード出来たので，以下のようにインストールする．
```
# rpm -ivh LibRaw-0.21.1-1.el9.x86_64.rpm
```
これによって，
```
- nothing provides libraw_r.so.23()(64bit) needed by ImageMagick-libs-6.9.12.93-2.el9.next.x86_64 from epel-next
```
と表示されていたエラーを解決することができたと考えられる．

# ImageMagickのインストール
[PHPからImageMagickを使う(AlmaLinux)](https://sudachi.jp/wiki/PHP%E3%81%8B%E3%82%89ImageMagick%E3%82%92%E4%BD%BF%E3%81%86(AlmaLinux))を参考にした．
ここでは，epel-nextリポジトリを用いる場合としてroot権限によるインストールの記述している．
````
# dnf --enablerepo=epel-next install ImageMagick-perl
# dnf --enablerepo=epel-next install ImageMagick
# dnf --enablerepo=epel-next install ImageMagick-devel
# dnf -y install php-devel
# pecl install imagick
````

:::note info
もし，epelリポジトリを用いる場合は，上記のepel-nextをepelと読み替えれば良い．
````
# dnf --enablerepo=epel install ImageMagick-perl
# dnf --enablerepo=epel install ImageMagick
# dnf --enablerepo=epel install ImageMagick-devel
# dnf -y install php-devel
# pecl install imagick
````

:::
:::note warn
php-devel のインストールは，peclでphpizeが使えないために行う．
:::
上記が終わったら，find / -name imagick.so を入力してimagick.soが見つかるかどうかを確認する．
```
# find / -name imagick.so
/usr/lib64/php/modules/imagick.so
```
その後，/etc/php.iniに1行加える．
```/etc/php.ini
#　以下の1行を加える．
extension = imagick.so
```
あと念のため，nextcloudにおいて
「管理」->「概要」->「セキュリティ＆セットアップ警告」
から，確認すれば，

:::note warn
テーマ別アプリは有効ですが、PHPモジュール「imagick」が有効ではありません。ファビコン生成を正しく行うには、このモジュールをインストールし、有効化する必要があります。
:::
が消えることだろう．
私の場合はこれで上記の警告を消すことが出来た．

# まとめ
AlmalinuxにおいてImageMagickをインストールする場合であれば，epelリポジトリまたはepel-nextリポジトリからインストールするが，

:::note info
必要なパッケージ libraw_r.so.23()(64bit) が不足する場合には，rpmリポジトリから必要なパッケージ
https://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/LibRaw-0.21.1-1.el9.x86_64.rpm
を取得してインストールする
:::
ことによって，[ImageMagickのインストール](https://blog.heteml.jp/?p=4681)を進めることが可能となる．

つまり，必要なパッケージをインストールにあたり，前提となるパッケージが不足する場合，一例として，rpmリポジトリから前提となるパッケージを取得した上でインストールすれば，必要なパッケージがインストール可能となる．

# 参考
(1) [PHPからImageMagickを使う(AlmaLinux)](https://blog.heteml.jp/?p=4681)
(2) [あらためてEPELリポジトリの使い方をまとめてみた](https://qiita.com/yamada-hakase/items/fdf9c276b9cae51b3633)
(3) [Welcome to the RPM repository on fr2.rpmfind.net](https://rpmfind.net/linux/RPM/index.html)

# 付録：一般的なrpmの探し方
https://rpmfind.net/linux/RPM/index.html
において，
![スクリーンショット 2023-12-09 122906.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/ebb3a9e7-b3cb-c703-8533-a3a5226a9912.png)
このような画面が出て来るわけだが，検索窓に必要なものを入力して「Search」ボタンをクリックすれば良い．
　たとえば，ここで「libraw_r.so.23()(64bit)」を入力して「Search」をクリックすると，
 ![スクリーンショット 2023-12-09 123458.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/773471/7b67cf40-24a4-d137-2fea-364efab17b4d.png)

が出現することから，
[RPM resource libraw_r.so.23()(64bit)](https://rpmfind.net/linux/rpm2html/search.php?query=libraw_r.so.23%28%29%2864bit%29&submit=Search+...&system=&arch=)
にたどり着くのである．

もし，所望のrpmパッケージが，LibRaw-0.21.1-1.el9.x86_64.rpmであれば，右端 LibRaw-0.21.1-1.el9.x86_64.rpm の部分で右クリックをして「リンクをコピー」とすればURLがコピーされることとなるので，
https://rpmfind.net/linux/centos-stream/9-stream/AppStream/x86_64/os/Packages/LibRaw-0.21.1-1.el9.x86_64.rpm
なるURLの情報を取得できる．

:::note info
Almalinuxに関するものはDistributionがCentOS Stream 9 AppStreamの部類となり，この後のforからはインストールするサーバのアーキテクチャで選択すれば良い．
:::