Ubuntu Weekly Recipe

第476回Nextcloudに学ぶsnapパッケージ入門

今回はNextcloudサーバー/クライアントを題材に、snapパッケージの基礎を解説します。

Nextcloudとsnapパッケージ

NextcloudownCloudから派生(フォーク)したファイル同期サーバー/クライアントです。派生したのはこれらのソフトウェアだけではなく会社ごとであり、その社名も同じくNextcloudです。本稿ではNextcloud社、Nextcloudサーバー、Nextcloudクライアントと称することにします。

snapパッケージはCanonicalによる新しいパッケージシステムで、馴染みがあるかどうかはさておき現在も活発に開発されており、またパッケージも増加しています。

NextcloudサーバーはNextcloud社によって公式パッケージがリポジトリに用意されています。Nextcloudクライアントのsnapパッケージはありませんが、簡単にソースコードからビルドできるようになっています。

そこで今回は、Nextcloudサーバーとクライアントを通じてsnapパッケージの基礎を習得していきます。

Nextcloudサーバー

インストールと初期設定

前述のとおりNextcloudサーバーはリポジトリにあるため、簡単にインストールできます。端末を起動し、次のコマンドを実行してください。

$ sudo snap install nextcloud

その後、UbuntuやmacOSなどZeroconfサーバーが動作しているPCでWebブラウザーを起動し、ホスト名+.localを入力します。たとえば、ホスト名がnextcloud-testの場合には次のURLを入力します。

http://nextcloud-test.local/

Zeroconfサーバーが動作していない場合はIPアドレスを入力してください。

そしてWebブラウザに表示される画面において、初期ユーザー名とパスワードを入力し、ログインすればNextcloudサーバーが使用できるようになります。

https化

今回の例のようにローカルにNextcloudサーバーを置く場合は特に気にしなくてもいいのですが、VPSやクラウドに置く場合はhttpの平文ではセキュリティ的に問題です。通常であればApacheの設定を変更してhttps化しますが、snapパッケージはそうもいきません。

パッケージの作り方にもよりますが、少なくともNextcloudサーバーのパッケージではApacheの設定ファイルを自由に変更できるようにはなっていません。そのため、専用のnextcloud.enable-httpsコマンドが用意されています。このコマンドを使ってhttpsに設定を変更します。

$ sudo nextcloud.enable-https self-signed

上記の方法だと自己署名証明書を使用することになりますが、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サーバーを終了する場合は次のコマンドを実行します。

$ sudo systemctl stop snap.nextcloud.apache.service

起動する場合は次のとおりです。

$ sudo systemctl start snap.nextcloud.apache.service

このようにsystemdに依存しています。

snapパッケージのNextcloudにはいくつか独自のコマンドがあります。前述の"nextcloud.enable-https"のほかにも、逆の働きをする"nextcloud.disable-https"、コマンドラインからNextcloudサーバーの設定を行える"nextcloud.occ"、データベースサーバーMySQL関連の"nextcloud.mysql-client"と"nextcloud.mysqldump"などがあります。いずれも運用に必要なものばかりです。

Nextcloudクライアント

ソースコードの取得とビルド

Nextcloudクライアントは前述のとおり、自分でビルドする必要があります。まずは次の方法でソースコードを取得します。

$ git clone https://github.com/nextcloud/client_theming.git
$ cd client_theming/
$ git submodule update -i

git submoduleコマンドでownCloudクライアントのソースコードをダウンロードします。そこからわかるとおり、NextcloudクライアントはownCloudクライアントと同一で、ただブランドを変更しているだけです。clientフォルダーとそれ以外でgit logコマンドを実行すると違いがわかりやすいでしょう。

続いてsnap/snapcraft.yamlを編集します。コマンドラインで実行する場合は次のコマンドを入力してください。

$ cd linux
$ editor snap/snapcraft.yaml

まずはバージョンに注目します。

version: 2.2.4+git

執筆段階でのバージョンはこのようになっていますが、調べてみると2.3.2+gitになっているので、そのように書き換えます。

次に注目するのは以下の部分です。

parts:
  client:
    plugin: cmake
    source: ../
    source-subdir: client
    build-packages:
      - g++
      - libqt5webkit5-dev
      - libsqlite3-dev
      - libssl-dev
      - pkg-config
      - qt5keychain-dev
      - qttools5-dev-tools
    configflags:
      - -DCMAKE_BUILD_TYPE=Release
      - -DOEM_THEME_DIR=$SNAPCRAFT_PART_INSTALL/../src/nextcloudtheme
      - -DCMAKE_INSTALL_PREFIX=/usr
      - -DCMAKE_INSTALL_LIBDIR=/usr/lib
      - -DSYSCONF_INSTALL_DIR=/etc

本来はこのままでいいはずなのですが、現在のsnapパッケージにはシステムフォントを認識しないというバグがあり、これを回避するためにTakaoフォントをインストールすることにします。また特に必要はないものの、Fcitxを有効にするためのパッケージも追加することにします。すると以下のようになります。

parts:
  client:
    plugin: cmake
    source: ../
    source-subdir: client
    build-packages:
      - g++
      - libqt5webkit5-dev
      - libsqlite3-dev
      - libssl-dev
      - pkg-config
      - qt5keychain-dev
      - qttools5-dev-tools
    configflags:
      - -DCMAKE_BUILD_TYPE=Release
      - -DOEM_THEME_DIR=$SNAPCRAFT_PART_INSTALL/../src/nextcloudtheme
      - -DCMAKE_INSTALL_PREFIX=/usr
      - -DCMAKE_INSTALL_LIBDIR=/usr/lib
      - -DSYSCONF_INSTALL_DIR=/etc
    stage-packages:
      - fonts-takao
      - fcitx-frontend-qt5

差分は次のとおりです。

diff --git a/linux/snap/snapcraft.yaml b/linux/snap/snapcraft.yaml
index 8b91854..8bdc940 100644
--- a/linux/snap/snapcraft.yaml
+++ b/linux/snap/snapcraft.yaml
@@ -1,5 +1,5 @@
 name: nextcloud-client
-version: 2.2.4+git
+version: 2.3.2+git
 icon: ../nextcloudtheme/theme/colored/Nextcloud-icon.svg
 summary: Nextcloud Desktop Client
 description: |
@@ -28,6 +28,9 @@ parts:
       - -DCMAKE_INSTALL_PREFIX=/usr
       - -DCMAKE_INSTALL_LIBDIR=/usr/lib
       - -DSYSCONF_INSTALL_DIR=/etc
+    stage-packages:
+      - fonts-takao
+      - fcitx-frontend-qt5

     after:
       - desktop-qt5

ここまでできたら次のコマンドを実行し、ビルドを開始します。

$ snapcraft

無事に完了するとカレントディレクトリに"nextcloud-client_2.3.2+git_amd64.snap"ができます。ビルド環境とインストール環境が違う場合はこのファイルをインストール環境にコピーしてください。インストールは次のコマンドを実行します。

$ sudo snap install --dangerous nextcloud-client_*.snap

インストール後、"Nextcloud desktop sync client"を起動します。

テストのために必要な設定

残念ながらこのsnapパッケージはZeroconfに非対応なため、NextcloudサーバーにはIPアドレスでアクセスする必要があります。とはいえデフォルトでは非対応なので、Nextcloudサーバーの設定を変更します。もちろんこれまでの知識を活かせます。

今回の場合は/var/snap/nextcloud/current/nextcloud/config/config.phpを開き、34行目:

    0 => 'nextcloud-test.local',

を次のように変更し、保存します。

    0 => 'nextcloud-test.local', '192.168.12.56',

もちろんこれは例なので、手元の環境にあわせて適切に変更してください。

続けてNextcloudサーバーを再起動します。

$ sudo systemctl restart snap.nextcloud.apache.service

その後クライアントの設定を行ってください。

使用感

通常同期するフォルダーはホームフォルダの直下に作成されますが、Nextcloudクライアントがsnapパッケージになっている今回の場合は~/snap/nextcloud-client/current/Nextcloud/に作成されます図1⁠。

Nextcloudクライアントは「自動起動しない」⁠ファイル(Nautilus)との統合もうまく動作しない」⁠パスワードも記録しない」といったことから、実用性はかなり厳しいです。とはいえ、今後snapパッケージの開発が進めば実用になる日も来ることでしょう。

図1 Nextcloudクライアントで同期した状態
画像

おすすめ記事

記事・ニュース一覧