# SmartJPEG for Linux v2.62.00 インストールガイド

Updated 2024/04/12

SmartJPEG for Linux(以下 SmartJPEG)は、長年にわたり画像最適化技術を提供し続けているOPTPiXが提供する、画像再圧縮ソリューションです。
SmartJPEGは、手作業では困難な「画像ごとに最適な圧縮率の算出」を自動的に行い、JPEG圧縮を行います。このため、画質をほとんど落とすことなくJPEGファイルのサイズを簡単に最小限まで小さくすることが可能となります。
軽量化が重視されるウェブサイト、大量の画像を扱うショッピングサイト、クラウドストレージのコスト節約、スマートフォン向けのアプリケーションなど、あらゆるジャンルで大きな威力を発揮します。

- 使用許諾契約書は、「SmartJPEG for Linux」（以下、「本ソフトウェア」という）のご使用条件等を定めたものです。本契約の全部または一部に同意できない場合は、直ちに本ソフトウェアの使用を中止し、お客様の端末から本ソフトウェアをアンインストールしてください。
- 本ドキュメントに記載の内容はご契約のお客様のみに開示される秘密情報です。情報のお取り扱いにご注意ください。

# 目次

このドキュメントでは、SmartJPEG のインストール方法について解説します。

- 動作環境
- ファイルの確認
- インストール
- アップデート
- ネットワーク認証
- SmartJPEG の実行
- アンインストール

- 本ドキュメントはSmartJPEG for Linux Version 2.62.00の仕様に基づいて記述しています。
- SmartJPEG の概要は、「導入ガイド - SmartJPEGをはじめよう」をご参照ください。
- SmartJPEG の詳細な使い方については「SmartJPEG 仕様書」をご参照ください。

# 必要動作環境

SmartJPEG を動作させるためには、以下の環境が必要です。

OS | AlmaLinux 9(x64) AlmaLinux 8(x64) Amazon Linux 2023(x64)
メモリ | 4GB以上 (安定動作のために、SmartJPEG以外のプロセスのメモリ使用量を加味して、充分なメモリをご用意ください)
必要なモジュール | Python 3 (ネットワーク認証スクリプトで使用) SmartJPEGが使用するライブラリをインストールするために、EPELリポジトリ(epel-release)が必要になる場合があります。
その他 | yum でのパッケージのインストールやネットワーク認証を行うため、変換を行うサーバー自体がインターネット(IPv4)に接続している必要があります。

# ファイルの確認

本製品では、以下のファイルが提供されます。
passwdとuserinfo.datファイルにつきましては、別途ご案内いたします。

ドキュメント
InstallGuide.html | (このファイル)
GettingStarted.html | SmartJPEG をはじめよう(導入ガイド)
SmartJPEG.html | SmartJPEG 仕様書
モジュール/その他のファイル
smartjpeg-2.62.00-1.x86_64.rpm | SmartJPEG パッケージ
webtech-cert-client-5.0-1.noarch.rpm | 認証クライアント(cron対応環境向け)
webtech-cert-smartjpeg-5.0-1.noarch.rpm | 認証クライアント
sjdaemon-0.15.04-1.x86_64.rpm | 統計情報処理プログラム
passwd | データ取得用パスワードファイル (別途ご案内いたします)
userinfo.dat | 認証用ユーザー情報ファイル (別途ご案内いたします)

SmartJPEG をお使いいただくためには、「インストール」と「ネットワーク認証」の手続きが必要です。
SmartJPEG はユーザー権限で実行できますが、インストールやネットワーク認証は root 権限で行ってください。
* アップデートなどで、ファイル名の数値が変わっている場合があります。

# インストール＆アップデート

## SmartJPEG の新規インストール

インストールに先立って、次のご準備をお願いいたします。

- 上記のファイルをすべて root(ルート)権限アカウントの一つの作業用ディレクトリに転送・コピーしておいてください。
- SmartJPEG は lcms2 モジュールを使用します。これのインストールのために、AlmaLinux 8/9環境ではEPELリポジトリが必要になりますので、あらかじめ yum install epel-release コマンドにてインストールいただきますようお願いいたします。
- PNGファイルの高圧縮最適化(-pngmode size)を使用する場合、optipng モジュールのインストールが必要です。こちらもAlmaLinux 8/9環境ではEPELリポジトリが必要になりますので、ご利用になる方は yum install epel-release コマンドにてインストールいただきますようお願いいたします。

以下、作業用ディレクトリから、SmartJPEGを新規インストールする手順をコマンドベースで説明していきます。

1. まず、SmartJPEGのパッケージを格納した作業用ディレクトリに移動します。下記例の"作業用ディレクトリ"部分は実際のディレクトリ名に置き換えて指定ください。
   `cd 作業用ディレクトリ`
2. 統計情報処理プログラム、SmartJPEGパッケージをインストールします(*1)。
   `yum localinstall sjdaemon-0.15.04-1.x86_64.rpm smartjpeg-2.62.00-1.x86_64.rpm`
3. 認証クライアントをインストールします(*2)。
   `yum localinstall webtech-cert-client-5.0-1.noarch.rpm webtech-cert-smartjpeg-5.0-1.noarch.rpm`
4. 認証のために必要な2つのファイルを、それぞれ適切な場所にコピーします。
   `cp userinfo.dat /var/lib/smartjpeg/`
   `cp passwd /etc/opt/webtechnology/cert/`
5. それぞれのファイルをルートや SmartJPEG を実行するユーザーが参照できるように属性を設定します。
   `chmod 644 /etc/opt/webtechnology/cert/passwd /var/lib/smartjpeg/userinfo.dat`
6. データ/ログファイルのために空のファイルを作成します。
   `touch /var/lib/smartjpeg/smartjpeg.{dat,log}`
   *1 合わせて依存関係にある lcms2 モジュールがインストールされることがあります。なおAlmaLinux 8/9環境では EPELリポジトリが必要になりますので、あらかじめ yum install epel-release にてインストールしていただきますようお願いいたします。
   *2 お使いの環境に Python 3 がインストールされていない場合、合わせて以下のモジュールがインストールされますのでご留意ください。
   - python36, python3-pip, python3-setuptools

一般ユーザーや、Apache等のWebサーバーから使用する場合は、「アクセス権限の設定」を参照してください。

## アクセス権限の設定

- 一般ユーザーやApache等のWebサーバープログラムから SmartJPEG を使いたい場合は、以下のコマンドのように実行ユーザーがデータやログファイルを更新できるよう属性を設定してください。
  `chmod 666 /var/lib/smartjpeg/smartjpeg.{dat,log}`

## 旧版からのアップデート

すでに旧版の SmartJPEG をインストール済みの場合は、以下の手順を実行してください。

1. まず、SmartJPEGのパッケージを格納した作業用ディレクトリに移動します。下記例の"作業用ディレクトリ"部分は実際のディレクトリ名に置き換えて指定ください。
   `cd 作業用ディレクトリ`
2. SmartJPEGの各種パッケージをアップデートします。
   `yum localupdate sjdaemon-0.15.04-1.x86_64.rpm smartjpeg-2.62.00-1.x86_64.rpm`
   `yum localupdate webtech-cert-client-5.0-1.noarch.rpm webtech-cert-smartjpeg-5.0-1.noarch.rpm`
3. sjdaemonサービスを再起動します。
   `systemctl restart sjdaemon`
4. もし旧版でインストールしたmozjpeg パッケージがあれば、これをアンインストールします(Version 2.50.00以降、別途インストールが不要になったためです)。
   `yum erase mozjpeg`

# ネットワーク認証

SmartJPEG を利用するには、まず最初にネットワークを通じたライセンス認証を行う必要があります。

## 認証手続き

1. インストール の項に従って、認証に必要な以下のファイルが配置されているかどうかを確認してください。
   - /etc/opt/webtechnology/cert/passwd
   - /var/lib/smartjpeg/userinfo.dat
2. 以下のコマンドを実行して、弊社のサーバーと通信し、初回認証を実行します。実行前に、お使いのサーバーの時刻が正しく設定されているか確認しておいてください。
   認証に際しては、お使いのサーバーのハードウェア情報(ホスト名、IPアドレス、ネットワークI/F の MAC アドレス、時刻など)を弊社サーバーに送信します。あらかじめご了承ください。
   `systemctl start webtechnology-cert-update.service`
   認証クライアントはインストール時刻を基準として1日1回、弊社のサーバーと通信し、最新の認証ファイルを取得するようになっていますが、このコマンドを実行することで、即時に認証を行うことが可能です。
3. 認証が成功すると、以下のファイルが作成または更新されます。
   - /var/lib/smartjpeg/sign.dat (認証ファイル)
   - /var/lib/smartjpeg/smartjpeg.dat (認証のチェックファイル、1時間ごとに確認)
   また、ネットワーク認証エラーが発生した場合、その旨を所定の方法で通知することが可能です。詳しくは ネットワーク認証エラーの通知の項をご参照ください。
   また、smartjpeg コマンドによるチェックについては、下記 「ライセンスチェック処理」を参照してください。

## ライセンスチェック処理

- smartjpeg コマンドは、起動されるたびにライセンスを確認します。
  処理が正しく行えるよう、「インストール」および「ネットワーク認証」に従ってファイルを所定の場所に配置しておいてください。
- smartjpeg コマンドは以下の手順でライセンスをチェックします。
  チェック処理は、稼働中の1つのプロセスのみが行います(同時に複数のプロセスを起動した場合でも、1プロセスのみが実行します)。

  - チェックファイル /var/lib/smartjpeg/smartjpeg.dat がないか不正な場合、チェックを行います。
  - 最終チェックから1時間以上経過している場合、チェックを行います。
  - 上記以外(最終チェックから1時間以内)であれば、チェックを行いません。
  ライセンスのチェックに失敗した場合でも、即座に動作が中止されることはありません。連続稼働中に、一時的に障害が発生した場合などを考慮して、最後にネットワーク認証が成功してから14日間は、引き続きお使いになれます。ただし、最後の認証から14日間が経過すると、エラー終了し、変換は行われなくなります。

## ライセンスのチェック結果の確認

ライセンスのチェック結果はログファイル (デフォルトでは /var/lib/smartjpeg/smartjpeg.log) に保存されます。このログファイルを参照することで、チェックに成功しているかどうかを確認できます。

- 成功の場合 …… `"2017/01/01 10:00:00 CERT:OK SV certified"`
- 失敗の場合 …… `"2017/01/01 10:00:00 CERT:ERROR <エラー内容>"`

* 重要な注意 *
気が付かないうちに認証の障害が継続して、突然、処理が中断されることのないよう、定期的にログファイルを確認するようにしてください。
また、添付のスクリプトにより認証ファイルの残り有効日数を取得できますので、これを利用したスクリプトを作成することで、期限が残り少なくなったときにSNSに通知する等の処理を行うことが可能です。

## ネットワーク認証エラーの通知

ネットワーク認証エラーが発生した場合に、これを所定の方法で通知することが可能です。これにより不意の障害やエラーの発生をより早く検知することができます。
通知方法としてメール通知とSlack通知の二種類を用意していますので、お使いの環境に合わせて何れかまたは両者をご選択ください。
通知機能を利用するには、 /etc/opt/webtechnology/cert/webtechnology-cert ファイルを編集する必要があります。

### メール通知

ネットワーク認証エラーの情報を、指定したアドレスにメールで通知します。お使いの環境にあらかじめ mailx, s-nail などの mailx プログラムをインストールし、外部サーバーへメールを送信できるよう、Postfix等のメールサーバーを設定しておいてください。
メール通知を利用するには、以下のように設定します。

- /etc/opt/webtechnology/cert/webtechnology-cert ファイルを vi 等のエディタで開きます。
- "MAILTO" 行と "MAILFROM" 行のコメントを外します。
- "MAILTO" 行に送信先のメールアドレスを、"MAILFROM" 行に送信元のメールアドレスを指定します。
  例えば "foo@example.jp" 宛てに、サーバーの root アカウントから送りたい場合は以下のように設定します。
  `MAILTO=foo@example.jp MAILFROM=root`
- /etc/opt/webtechnology/cert/webtechnology-cert ファイルを保存します。

メール内容は以下のようになっています。

- エラー発生時
  `From: root@example.jp To: foo@example.jp Subject: webtechnology certs update failure SmartJPEG: certlib Error: (ここにエラーメッセージが入ります)`
- 認証ファイルの残り有効期限日数が10日を切った場合も、その旨の警告メッセージが届きます。

### Slack通知

ネットワーク認証エラーの情報を、所定のSlackチャンネルに投稿します。あらかじめ Slack側にてIncoming Webhookの設定を行い、投稿先チャンネルの指定・アクセスURLの取得をしておいてください。
Slack通知を利用するには、以下のように設定します。

- /etc/opt/webtechnology/cert/webtechnology-cert ファイルを vi 等のエディタで開きます。
- "SLACK_WEBHOOK" 行のコメントを外します。
- "SLACK_WEBHOOK" 行に Incoming WebhookのURLを指定します。例えば以下のように設定します(URLは例です)。
  `SLACK_WEBHOOK=https://hooks.slack.com/services/...`
- /etc/opt/webtechnology/cert/webtechnology-cert ファイルを保存します。

投稿内容は以下のようになっています。

- エラー発生時
  `webtechnology certs update failure Product SmartJPEG Message SmartJPEG: certlib Error: (ここにエラーメッセージが入ります)`
- 認証ファイルの残り有効期限日数が10日を切った場合も、その旨の警告メッセージが投稿されます。

### エラー通知のテスト

エラー通知が正しく動作するかどうかは、以下のように実際に認証エラーを発生させることで確認可能です。なおテスト実行後必ず userinfo.dat の名前を元に戻してください。元に戻し忘れると、SmartJPEGが正しく動作しなくなりますので特にご注意ください。
以下、作業はすべて root権限アカウントにて行います。

1. /var/lib/smartjpeg ディレクトリに移動します。
   `cd /var/lib/smartjpeg`
2. userinfo.dat を一時的にリネームします。ここでは userinfo.da_ に変更します。
   `mv userinfo.dat userinfo.da_`
3. 以下のコマンドでネットワーク認証を実行します。
   userinfo.dat ファイルが見つからない状態になっていますので、認証エラーが発生し、設定しておいた通知が行われます。
   `systemctl restart webtechnology-cert-update.service`
4. 通知が行われることを確認したら、userinfo.datの名前を元に戻します。元に戻し忘れると、SmartJPEGが正しく動作しなくなりますので特にご注意ください。
   `mv userinfo.da_ userinfo.dat`
5. 念のためネットワーク認証を再実行し、これが正常終了するかどうか(エラー通知が行われないこと)をご確認ください。
   `systemctl restart webtechnology-cert-update.service`

## 認証ファイルの残り有効日数の取得

check-cert-expiration.py スクリプトにより、認証ファイルの残り有効日数を取得することができます。これを利用したスクリプトを作成し、定期的に実行することで、ネットワーク認証に障害が発生していないかを確認することが可能です。
スクリプトは /opt/webtechnology/bin/check-cert-expiration.py で、--remain-days オプションにチェック対象の認証ファイルを指定すると、その有効残日数を標準出力に出力します。有効期限が残っていれば正値、期限が切れていると負値を返します。なお 0 は期限切れ前後1日を表すため、判断には利用しないでください。

`$ /opt/webtechnology/bin/check-cert-expiration.py --remain-days /var/lib/smartjpeg/sign.dat 10`

この結果を変数に代入し、一定日数(10日程度を推奨)より少なくなった場合に通知処理を行うスクリプトを作成し、これを定期的に実行することで、日々のネットワーク認証が正しく行われているかどうかを確認することができます。

- 認証ファイルの有効期限の残り日数が10日以下になったら何らかの処理を行う例
  `#!/bin/bash REMAIN=`/opt/webtechnology/bin/check-cert-expiration.py --remain-days /var/lib/smartjpeg/sign.dat` if [ "$REMAIN" -le 10 ]; then # 残り日数が10日以下の場合 # ここに通知処理などを実装する # 残り日数は $REMAIN に代入されるのでこれを使用する fi`

# SmartJPEG の実行

以上で smartjpeg コマンドにより、SmartJPEG の機能が利用できるようになります。
smartjpeg コマンドは /opt/smartjpeg/bin ディレクトリにインストールされます。インストール時に環境変数 PATH に /opt/smartjpeg/bin ディレクトリを設定しますので、通常はパスを指定することなく起動可能です。もし PATH が設定されていない場合は設定を追加するか、直接 /opt/smartjpeg/bin/smartjpeg を呼び出してください。

- コマンド名のみで呼び出し
  `smartjpeg -in input.jpg -out output.jpg`
- フルパス指定で呼び出し
  `/opt/smartjpeg/bin/smartjpeg -in input.jpg -out output.jpg`

SmartJPEG の使い方について詳しくは、「導入ガイド - SmartJPEGをはじめよう」や「SmartJPEG 仕様書」をご参照ください。

# 統計情報の送信

SmartJPEG には、画像変換の統計情報(処理枚数、ファイルサイズなど)を一定間隔毎に当社の管理するサーバーに送信する機能があります。

- 統計情報には、お客様固有の情報(お客様を特定する情報、お客様が作成するデータなど)は一切含まれていません。
- 統計情報は、サービス及び機能の向上に活用させていただきます。
- 統計情報は、/var/lib/smartjpeg/info フォルダに JSON 形式で蓄積した後、当社サーバーに送信されます。
  送信されたファイルは上記フォルダ内の old フォルダに移動されます。このファイルをテキストビューワ等で開くことで、送信内容をご確認いただけます。

# アンインストール

SmartJPEGが不要になった場合は、以下のコマンドでアンインストールしてください。

`yum erase smartjpeg sjdaemon webtech-cert-client webtech-cert-smartjpeg`

上記のコマンドで自動的に削除されないファイル(`/var/lib/smartjpeg/userinfo.dat, /var/lib/smartjpeg/sign.dat` など)は、`rm` コマンドを使って手動で削除してください。

Copyright © 2017-2021 Web Technology Corp.
Copyright © CRI Middleware Co., Ltd.