今回はNextcloudサーバー/クライアントを題材に、snapパッケージの基礎を解説します。
Nextcloudとsnapパッケージ
NextcloudはownCloudから派生(フォーク)したファイル同期サーバー/クライアントです。派生したのはこれらのソフトウェアだけではなく会社ごとであり、その社名も同じくNextcloudです。本稿ではNextcloud社、Nextcloudサーバー、Nextcloudクライアントと称することにします。
snapパッケージはCanonicalによる新しいパッケージシステムで、馴染みがあるかどうかはさておき現在も活発に開発されており、またパッケージも増加しています。
NextcloudサーバーはNextcloud社によって公式パッケージがリポジトリに用意されています。Nextcloudクライアントのsnapパッケージはありませんが、簡単にソースコードからビルドできるようになっています。
そこで今回は、Nextcloudサーバーとクライアントを通じてsnapパッケージの基礎を習得していきます。
Nextcloudサーバー
インストールと初期設定
前述のとおりNextcloudサーバーはリポジトリにあるため、簡単にインストールできます。端末を起動し、次のコマンドを実行してください。
その後、UbuntuやmacOSなどZeroconfサーバーが動作しているPCでWebブラウザーを起動し、ホスト名+.localを入力します。たとえば、ホスト名がnextcloud-testの場合には次のURLを入力します。
Zeroconfサーバーが動作していない場合はIPアドレスを入力してください。
そしてWebブラウザに表示される画面において、初期ユーザー名とパスワードを入力し、ログインすればNextcloudサーバーが使用できるようになります。
https化
今回の例のようにローカルにNextcloudサーバーを置く場合は特に気にしなくてもいいのですが、VPSやクラウドに置く場合はhttpの平文ではセキュリティ的に問題です。通常であればApacheの設定を変更してhttps化しますが、snapパッケージはそうもいきません。
パッケージの作り方にもよりますが、少なくともNextcloudサーバーのパッケージではApacheの設定ファイルを自由に変更できるようにはなっていません。そのため、専用のnextcloud.enable-httpsコマンドが用意されています。このコマンドを使ってhttpsに設定を変更します。
上記の方法だと自己署名証明書を使用することになりますが、VPSやクラウドに置く場合はLet's Encryptを使用するのがおすすめです。その場合はオプションを"lets-encrypt"に変更してください。
データの置き場所
GitHubのドキュメントを見ると、データは"$SNAP_DATA"と"$SNAP_COMMON"に置かれていると記されています。snapパッケージのドキュメントに具体的な場所が示されていて、"
$SNAP_DATA"は"/var/snap/nextcloud/(バージョン)"、"$SNAP_COMMON"は"/var/snap/nextcloud/common"にあることがわかります。ログを見たい場合やownCloudからの移行などのときのために知っておくと便利でしょう。
いろいろなコマンド
snapパッケージのNextcloudサーバーはApacheで動作しているため、Nextcloudサーバーの起動や終了とApacheの起動や終了は同じ意味です。Nextcloudサーバーを終了する場合は次のコマンドを実行します。
起動する場合は次のとおりです。
このようにsystemdに依存しています。
snapパッケージのNextcloudにはいくつか独自のコマンドがあります。前述の"nextcloud.enable-https"のほかにも、逆の働きをする"nextcloud.disable-https"、コマンドラインからNextcloudサーバーの設定を行える"nextcloud.occ"、データベースサーバーMySQL関連の"nextcloud.mysql-client"と"nextcloud.mysqldump"などがあります。いずれも運用に必要なものばかりです。
Nextcloudクライアント
ソースコードの取得とビルド
Nextcloudクライアントは前述のとおり、自分でビルドする必要があります。まずは次の方法でソースコードを取得します。
git submoduleコマンドでownCloudクライアントのソースコードをダウンロードします。そこからわかるとおり、NextcloudクライアントはownCloudクライアントと同一で、ただブランドを変更しているだけです。clientフォルダーとそれ以外でgit logコマンドを実行すると違いがわかりやすいでしょう。
続いてsnap/snapcraft.yamlを編集します。コマンドラインで実行する場合は次のコマンドを入力してください。
まずはバージョンに注目します。
執筆段階でのバージョンはこのようになっていますが、調べてみると2.3.2+gitになっているので、そのように書き換えます。
次に注目するのは以下の部分です。
本来はこのままでいいはずなのですが、現在のsnapパッケージにはシステムフォントを認識しないというバグがあり、これを回避するためにTakaoフォントをインストールすることにします。また特に必要はないものの、Fcitxを有効にするためのパッケージも追加することにします。すると以下のようになります。
差分は次のとおりです。
ここまでできたら次のコマンドを実行し、ビルドを開始します。
無事に完了するとカレントディレクトリに"nextcloud-client_2.3.2+git_amd64.snap"ができます。ビルド環境とインストール環境が違う場合はこのファイルをインストール環境にコピーしてください。インストールは次のコマンドを実行します。
インストール後、"Nextcloud desktop sync client"を起動します。
テストのために必要な設定
残念ながらこのsnapパッケージはZeroconfに非対応なため、NextcloudサーバーにはIPアドレスでアクセスする必要があります。とはいえデフォルトでは非対応なので、Nextcloudサーバーの設定を変更します。もちろんこれまでの知識を活かせます。
今回の場合は/var/snap/nextcloud/current/nextcloud/config/config.phpを開き、34行目:
を次のように変更し、保存します。
もちろんこれは例なので、手元の環境にあわせて適切に変更してください。
続けてNextcloudサーバーを再起動します。
その後クライアントの設定を行ってください。
使用感
通常同期するフォルダーはホームフォルダの直下に作成されますが、Nextcloudクライアントがsnapパッケージになっている今回の場合は~/snap/nextcloud-client/current/Nextcloud/に作成されます(図1)。
Nextcloudクライアントは「自動起動しない」「ファイル(Nautilus)との統合もうまく動作しない」「パスワードも記録しない」といったことから、実用性はかなり厳しいです。とはいえ、今後snapパッケージの開発が進めば実用になる日も来ることでしょう。