[Docker] Alpineにunarはありません

2023年12月23日

Docker テクノロジー

eyecatch Dockerのイメージを軽量化してくれるAlpineイメージには、いつも大変お世話になっております。 でも、phpモジュールにいろいろなLinuxツールをインストールしようとした時に、alpine専用のインストール管理ツールである、apkって、全てのモジュールがインストールできると思ったら大間違い。 alpineの提供元が入れ込んだものでないとインストールができないんですよね。

unarでエラー

以前ブログで書いた、「unar」(ウナーって呼ぶのかな?)をalpineイメージにインストールしようと思ったら、エラーになりました。 圧縮ファイルの解凍に圧倒的に便利な「unar」コマンド 次のようなエラーが出ました。 => ERROR [php 8/8] RUN apk update && apk add --update --no-cache unar 1.6s ------ > [php 8/8] RUN apk update && apk add --update --no-cache unar: 0.268 fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/aarch64/APKINDEX.tar.gz 0.685 fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/aarch64/APKINDEX.tar.gz 1.183 v3.18.4-196-gff71ec30ae4 [https://dl-cdn.alpinelinux.org/alpine/v3.18/main] 1.183 v3.18.4-197-ge5e94e47c84 [https://dl-cdn.alpinelinux.org/alpine/v3.18/community] 1.183 OK: 19946 distinct packages available 1.224 fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/main/aarch64/APKINDEX.tar.gz 1.333 fetch https://dl-cdn.alpinelinux.org/alpine/v3.18/community/aarch64/APKINDEX.tar.gz 1.549 ERROR: unable to select packages: 1.549 unar (no such package): 1.549 required by: world[unar] ------ failed to solve: process "/bin/sh -c apk update && apk add --update --no-cache unar" did not complete successfully: exit code: 1 どうやら、unarは、alpineで採用されていないという事が、ネット検索をしまくった結果判明です。 https://gitlab.alpinelinux.org/alpine/aports/-/issues/5846 このページに書かれていました。 bsdtarや他のアーカイブモジュールを使って代用可能と書かれていたんですが、システムに組み込んでいる場合、コマンドお作法が変更されると開発やり直しになっちゃうんですよね。 そこで色々探していたら、unarjというモジュールがalpineにインストールできるということが判明し、j?日本語版?という疑問とともにインストールして試してみましたが、 まるで別物でした・・・orz unarを入れずに、unarjを入れるってどういう思考よ???

unarについて

ウナーウナー言ってますが、以前のブログ記事を見てもらえば何者なのかわかると思いますが、簡単に説明すると、圧縮ファイルを便利に扱うことができるモジュールです。 対応している圧縮フォーマットが多いので、考えられる全てのフォーマットに当時対応していたので、便利にシステムに取り込んだんですが、ubuntuで普通に使えて、Alpineで使えないなんて非常に悲しい。 一体どんなシステムで使うのかと言うと、圧縮ファイルをサーバーにアップロードされた時に、圧縮ファイルに含まれているファイルを単体で取り出す時に使いたかっただけなんですよね。 そして、今回は、画像ファイルのみが対象だったので、unarを使うのを断念し、PHPのZipArchiveでzipファイルのみにシステムが限定するという仕様変更で対応しようと決めました。

Alpine linuxについて

Alpineは、軽量Linuxのディストリビューションとして、密かに人気が出てきているOSです。 関連リンク https://blog.stormcat.io/post/entry/alpine-entry-apk/ https://pkgs.alpinelinux.org/packages https://gitlab.alpinelinux.org/alpine これをdockerのイメージで利用すると、非常にHDDやメモリに優しいコンテナが出来上がるという便利なモノです。

あとがき

dockerでAlpineではなく、Ubuntuを使えばいいじゃない?という意見もあるかと思いますが、できるだけシステム依存しない仕組みを考えた結果、 プログラミングで対応できる範囲に抑えておくことも重要という判断で、PHP処理に限定することにしました。 zipという圧縮ファイルは、仕事や色々な場面で使われる圧縮データの一番王道フォーマットだと思いますが、 rarファイルやtarファイルなども、職種限定(業界限定)で多く使われているというのもあるので、できれば、他フォーマット対応したいと考えていましたが、 システム設計とは、法律を作るようなもので、できるだけ狭い領域でのルールが厳密になることが重要という事を思い出して、今回の仕様決定に至りました。 システム開発とは、ただひたすら真実のみを追い続ける仕事なり・・・