Life日本xrdpユーザ会発起人。FreeBSDを通じてOSSに囁かな貢献を。(以下SoftEther)は言わずと知れた優れたオープンソースの複数プロトコル、複数プラットフォームVPNソフトウェアです。優れたソフトウェアであるにも関わらず、Linuxディストリビューションなどの公式パッケージとしての提供状況は芳しくありません。portsを例に「SoftEtherをパッケージングするための技術」について解説します(技術というほどのものではありませんが...)。SoftEtherがディストリビューションの公式パッケージで提供されにくい理由SoftEtherがLinuxディストリビューションに敬遠される理由として、SoftEtherの設計に起因する、ディストリビューションのお作法と相反する部分が原因だと考えます。需要がないだけではないかという説は、一旦置いておいておきます(SoftEtherは大変優れたソフトウェアであるため)。そのお作法に反する部分というのは以下に挙げる、ログファイル、PIDファイル、設定ファイル(以下ログなど)の出力先です。その他の部分に関しては、SoftEther自身の依存関係が最小であるため特にパッケージングの障害となる要素は見られませんでした。/var/logやサブディレクトリの/var/log/softetherといった場所をイメージすることが多いのではないでしょうか。あるように、実行ファイルのある場所にサブディレクトリを作成しログを書き出します。つのサブディレクトリを作成し、そこに各々「サーバーログ」「セキュリティログ」、および「パケットログ」をそれぞれ書き出します。名のサブディレクトリ」が作成され、そこに書き出されます。コンパイル済みのバイナリのtarballをダウンロードして展開する場合にはとても都合がよく、妥当な設計です。実行中に書き出される一切のファイルは展開先のディレクトリの下に作成されるため、不要になった場合はディレクトリごと削除してしまえば一切後を濁さず綺麗サッパリとアンインストールできるからです。ところが、ディストリビューションのパッケージを作る立場からするとこれはとても困った設計です。実行可能ファイルが設置されているディレクトリにサブディレクトリを作成するということは、/usr/binや/usr/libexecといったディレクトリに勝手にディレクトリを掘ってログファイルを書くことになるからです。パッケージシステム以外のソフトウェアがこれらのパスに書き込むのは行儀が悪いですし、なによりこれらのパスが書き込み可能である保証がありません。これではオリジナルのSoftEtherをそのままパッケージにするのが難しく、公式パッケージとして提供されにくいのも頷けます。PIDファイルの出力先PIDファイルの出力先も同様で、実行可能ファイルと同じディレクトリに出力されます。これもログファイルと同様に行儀がよくないですね。/var/runや/runといったディレクトリ、またはそのサブディレクトリに書くのが一般的ではないでしょうか。前述の通り、実行ファイルと同じディレクトリというのは書き込み可能である保証がないため、避けるべきでしょう。設定ファイルも、実行可能ファイルと同じディレクトリに出力されます。一般に設定ファイルというと/etc以下に置かれることをイメージすると思います。SoftEtherの場合は、設定ファイルをテキストエディタで書き換えて設定を行うという使い方がメインではなく、vpncmdという管理コマンドやサーバ管理マネージャを使用して設定を行い、設定の内部データのダンプがテキストファイルに書き出されるというイメージです。設定ファイルを書き換えての設定変更も可能ですが、ここでは省略します。SoftEtherは自動的に一定時間ごとに設定内容の履歴を取り、バックアップしています。コンフィグレーションファイルの項を参照ください。このように、設定ファイルはSoftEtherによって単に読み取られるのではなく、プログラムの実行により更新される状態を保持するファイルという性質があるため、置き場所としては/var/libあたりがFHS的には適切でしょう。以上のように、SoftEtherが実行中に書き込むディレクトリは大きく分けて3つに区別されます。設定(状態)ファイルの出力先オリジナルのSoftEtherではこれらの3つが区別されず、全て実行ファイルのディレクトリとされています。内部ではGetExeDir()やGetExeDirW()という関数で取得しています。portsでは、オリジナルのSoftEtherにパッチを当ててこれらのディレクトリを取得する関数を追加、GetExeDir()を呼んでいる箇所をみてログなのか、PIDなのか、設定ファイルなのかコンテキストによって書き換えました。詳しくはportのMakefileや実際のパッチを参照ください。変わっているのは、FHSの/var/libに相当するパスがFreeBSDでは/var/dbだからです。取り除く改変も合わせて加えています。portsにおいてはオリジナルのSoftEtherにある「ログなどを変な場所に吐く問題」を解決しし、FreeBSDのお作法に沿った場所にログやPIDファイルなどを出力するようにしています。installで簡単にインストールでき、バージョンの管理もOSの仕組みにそって行えるため、扱いやすいのではないでしょうか。portsにはSoftEtherは3つのバージョンが収録されています。x86-64アーキテクチャしかサポートしないため、主にRaspberryPiなどのARMアーキテクチャで使用するために5系を用意しています。開発版upstreamに投げないのか?それほど難しいパッチではありませんが、数行の簡単なパッチではないためupstreamに投げた方が後の運用が楽ではないかという疑問が出てくると思いますが、これをupstreamに投げるかどうかはまだ悩んでいます。本記事中でも言及したように、コンパイル済みの公式バイナリのtarballをダウンロードして展開して実行するというユースケースにおいては、展開したディレクトリ以外を散らかさない、全てを展開したディレクトリ以下に書き込むという設計には一定の妥当性を感じているからです。ディストリビューションのパッケージを作成する立場としては、ログなどをOSの標準的なパスに書き出してくれないと扱いづらいのは事実ですが、一方で現状の設計にも一定の妥当性を感じているため一概にどちらがいいと言い切れるものではなくこの程度の方向性の違いはローカルパッチで対処してもいいかなとも思っています。1回PRを投げみてupstreamの判断を仰げ?その通りです。ログをOSのお作法に沿った場所に書くように改変している他のLinuxディストリビューション向けにSoftEtherをパッケージングする際の助けとなれば幸いです。雑記RSSフィードRSSフィードが必要な方は下からどうぞ。収集した情報の扱いはプライバシーポリシーに従います。2.5.7-p206。