Ubuntu18.04 Kopanoをコミュニティ版の最新バージョンにアップグレード

娘が本格的にKopanoを使おうとしているとき、今のシステムの軽いがしかし残念な障害が気になり始めた。
Subjectに変な記号が入ってしまうのだ。

メールヘッダーが折り返されるときに�が表示されたり、日本語の1つ1つの後ろに�が表示されたりしていることが分かる。





実際、中身は普通に見えているので気にせずに運用してきたが、娘が使うとなると話は別で、しっかりと問題を解決していきたい。ということで、テスト環境で問題を修正する方法を確立した後で、本番環境に適用をしたい。

当初もっと簡単に進むかと思っていたが、LDAP関連の操作や、AppArmorの設定で思っていたより時間が掛かってしまった。

環境

うちの環境はこのようになっている。

  • Ubuntu 18.04 LTS
  • Samba ad dc によるユーザー管理
  • Postfix
  • Kopano(Ubuntu 公式のリポジトリからインストールしたもの)
  • OpenSSLで独自の認証局を運営

今回、Kopanoをコミュニティ版に入れ替える。

試験環境へのインストール

試験環境を構築し、現在と同じ設定で動作させる。
過去の記事をベースとし、バックアップを復元させる形で試験環境を構築する。

まずは、Postfix、MariaDB、Apache、kopanoをインストールする。

$ sudo apt install mariadb-server apache2
$ sudo apt install postfix postfix-ldap postfix-mysql ← LDAP管理ならmysqlはいらないかも。
$ sudo apt install kopano-webapp-apache2 kopano-utils kopano-dagent kopano-search kopano-spooler kopano-monitor kopano-gateway kopano-ical

インストール中の問い合わせには以下で回答。
[Configuring kopano-server]
→ Yes

MySQL application password for kopano-server:
→ 空白のまま

Z-Pushもインストール。

$ sudo apt install z-push-backend-kopano

幾つかのサービスが自動起動しないので、自動起動するように設定。

$ sudo systemctl enable kopano-server
$ sudo systemctl enable kopano-dagent

 

Apacheの設定

とりあえず動かしたい。

/etc/apache2/conf-available/kopano-webapp-apache2.conf

# Example Apache2 vhost configuration for kopano-webapp
#vim: set ft=apache ts=4 sw=4 expandtab :#

<VirtualHost *:80>
    ServerName temp.hogeserver.hogeddns.jp
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:443 >
    ServerName temp.hogeserver.hogeddns.jp
    UseCanonicalName Off
    Alias /webapp    /usr/share/kopano-webapp

    SSLEngine on
    SSLCipherSuite        ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNUL
    SSLCertificateFile    /etc/ssl/private/temp.hogeserver.pem
    SSLCertificateKeyFile /etc/ssl/private/temp.hogeserver.key

    Include /etc/kopano/webapp/apache2.conf
</VirtualHost>

※temp.hogeserver.pem, temp.hogeserver.key は自分の環境で不都合がないものを用意している。

設定を読み込む。

$ sudo systemctl reload apache2

これで https://temp.hogeserver.hogeddns.jp/webapp/ にアクセスすれば、とりあえずログイン画面が出てくる。

Postfixの設定

うちのKopanoはユーザーをSamba AD DCを使ったLDAPで管理している。
そのため、ここら辺からLDAPとの連携が必要になっていく。

LDAPのバインドには、それ専用のユーザーを作るべきということで、以前作ったssoauthという専用ユーザーを使う。

/etc/postfix/main.cf
…
mydestination = temp.hogeserver.hogeddns.jp, temp, localhost.localdomain, localhost
…
# for Kopano ※最後に追記している
virtual_mailbox_domains = temp.hogeserver.hogeddns.jp
virtual_mailbox_maps = ldap:/etc/postfix/ldap-users.cf
virtual_alias_maps = ldap:/etc/postfix/ldap-aliases.cf, ldap:/etc/postfix/ldap-groups.cf
virtual_transport = lmtp:127.0.0.1:2003
mailbox_command = /usr/sbin/kopano-dagent "$USER"
mailbox_transport = kopano: kopano_destination_recipient_limit = 1

/etc/postfix/ldap-users.cf ※新規作成
server_host = ldaps://addc.hogeserver.hogeddns.jp:636
bind = yes
version = 3
bind_dn = cn=ssoauth,cn=Users,dc=hogeserver,dc=hogeddns,dc=jp
bind_pw = ssoauthさんのパスワード
search_base = cn=Users,dc=hogeserver,dc=hogeddns,dc=jp
query_filter = (&(objectClass=user)(kopanoAccount=1)(mail=%s))
scope = one
result_attribute = mail

※search_baseやquery_filterはSamba AD DCならではの設定になっている。Windows Serverの場合は適宜変更。

/etc/postfix/ldap-aliases.cf ※新規作成
server_host = ldaps://addc.hogeserver.hogeddns.jp:636
bind = yes
version = 3
bind_dn = cn=ssoauth,cn=Users,dc=hogeserver,dc=hogeddns,dc=jp
bind_pw = ssoauthさんのパスワード
search_base = cn=Users,dc=hogeserver,dc=hogeddns,dc=jp
query_filter = (&(objectClass=user)(kopanoAccount=1)(otherMailbox=%s))
scope = one
result_attribute = mail

/etc/postfix/ldap-groups.cf ※新規作成
server_host = ldaps://addc.hogeserver.hogeddns.jp:636
bind = yes
version = 3
bind_dn = cn=ssoauth,cn=Users,dc=hogeserver,dc=hogeddns,dc=jp
bind_pw = ssoauthさんのパスワード
search_base = cn=Users,dc=hogeserver,dc=hogeddns,dc=jp
query_filter = (&(objectClass=group)(kopanoAccount=1)(mail=%s))
scope = one
leaf_result_attribute = mail
special_result_attribute = member

パスワードを書き込んでしまっているので、簡単に読めないようにアクセス権を設定。

$ sudo chmod 600 /etc/postfix/ldap-*

 

Z-Pushの設定

過去記事では色々といじっているのだけれど、インストールしただけでとりあえずアクセスはできる。
https://temp.hogeserver.hogeddns.jp/Microsoft-Server-ActiveSync/

タイムゾーンだけ設定しておいた。

/etc/z-push/z-push.conf.php
define('TIMEZONE', 'Asia/Tokyo');

       

Aliasesの設定

webmasterっていうのを使っているので、それだけ追加しておく。

/etc/aliases
webmaseter:    root

 

Kopanoの設定

うちのKopanoはユーザーをSamba AD DCを使ったLDAPで管理している。

/etc/kopano/server.cfg
#user_plugin        = db
user_plugin         = ldap

ldap.cfgは新規に作成する。以前の記事から持ってきて、LDAPバインドするユーザーを書き換える。

/etc/kopano/ldap.cfg
##############################################################
#  LDAP DIRECTORY USER PLUGIN SETTINGS
#

# 実装の選択。
# もし /usr/share/kopano/*.cfg の設定を書き換える必要があるなら、
# この設定ファイル(/etc-resident)の最後にそうしてください。
#
#!include /usr/share/kopano/ldap.openldap.cfg
!include /usr/share/kopano/ldap.active-directory.cfg

# LDAP URI
# 接続先のLDAPサーバー詳細、例えば ldaps://servername:port
# 'ldaps'を使用するときは、/etc/ldap/ldap.confがTLS_CACERTで正しく設定されて
# いることを確認してください。スペース区切りのURIを複数指定することもできます。
ldap_uri = ldaps://addc.hogeserver.hogeddns.jp:636

# LDAPサーバーに格納されている文字列のキャラクターセットです。通常これは
# utf-8ですが、これはあなたの設定によって異なります。ここで指定される
# キャラクターセットはiconv(1)によってサポートされているものに限ります。
# すべての文字セットについてはiconv -lを参照してください。
ldap_server_charset = utf-8

# すべてのLDAP接続をTLSで保護するように要求します。
# 確立できない場合、接続は拒否されます。
# ※この設定はこのバージョンでは使えませんでした。←新しいバージョンだから使えるかもしれない。
#ldap_starttls = no

# 通常の操作で使用するユーザーのDN(ldap_authentication_method が"bind"に
# 設定されている場合は認証には使用されません)。
# 空の場合、匿名バインディングが使用されます。
# ldap_authentication_methodオプションがpasswordに設定されている場合、
# userPassword属性はこのユーザーに対して読み取り可能でなければなりません。
ldap_bind_user = ssoauth@hogeserver.hogeddns.jp

# LDAP bind password
ldap_bind_passwd = ssoauthさんのパスワード

# The timeout for network operations in seconds
#ldap_network_timeout = 30

# 一度にダウンロードされるクエリの結果数を制限します。
# デフォルトは1000です。
#ldap_page_size = 1000

##########
# Object settings

# 最上位の検索ベース、すべてのオブジェクトはこのツリーの下にあるはずです。
ldap_search_base = dc=hogeserver,dc=hogeddns,dc=jp

# カスタム定義のLDAPプロパティマッピングを使用します。
# これはほとんどの環境では必須ではありませんが、
# 特別なLDAPプロパティのカスタムMAPI属性へのカスタムマッピングを可能にします。
#!propmap /etc/kopano/ldap.propmap.cfg

# Kopanoを使えるユーザー・グループに限定して検索できるようにする
ldap_user_search_filter = (&(objectClass=user)(kopanoAccount=1))
ldap_group_search_filter = (&(objectClass=group)(kopanoAccount=1))

ファイルにパスワードとかを書き込んでいるので、一応アクセス権を設定しておく。

$ sudo chown kopano:kopano /etc/kopano/ldap.cfg
$ sudo chmod 600 /etc/kopano/ldap.cfg

新規作成したファイルはAppArmorに登録されていないので、登録する。
これだけで良いのかどうかはっきりと判断できないが、これで。

/etc/apparmor.d/usr.sbin.kopano-server
  #include <abstractions/mysql>
  #include <abstractions/dbus>
…
  capability setgid,
  capability setuid,
  capability sys_resource,
…
  /etc/kopano/server.cfg r,
  /etc/kopano/ldap.cfg r,
  /etc/ssl/openssl.cnf r,
  /etc/ldap/ldap.conf r,
  /usr/share/kopano/ldap.active-directory.cfg r,
  /usr/share/kopano/ldap.propmap.cfg r,
  /usr/sbin/kopano-server r,
…
  /run/kopano/prio.sock rw,
  /run/kopano/server.pid rw,
  /run/kopano/server.sock rw,
  /run/kopano/search.sock rw,

設定を反映。

$ sudo systemctl reload apparmor

 

CA証明書をインストール

うちはオレオレ認証局で証明書を発行しているので、オレオレ認証局の証明書をインストールする必要がある。
じゃないと、LDAPSでアクセスができない。

/usr/local/share/ca-certificates/オレオレCA.crt

として、認証局の証明書を保管し、以下のコマンドを実行。

$ sudo update-ca-certificates
Updating certificates in /etc/ssl/certs…
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d…
done.

証明書を登録したことを認識させるには、kopano-serverの再起動が必要。

$ sudo systemctl restart kopano-server

 

バックアップデーターをリストア

日々、バックアップを取っているので、テストだし、昨日のデーターを復元できりゃいいだろうということで、バックアップファイルを持ってくる(500MBとは、まぁまぁな量になっているなぁ)。

まずはサーバーを止める。

$ sudo systemctl stop kopano-server

※テスト中にこれを忘れたら、ちょっと面倒なことになった。

その上で、復元。

$ sudo mysql -D kopanoserver < kopanoserver.dmp
$ sudo unzip kopanoattachment.zip -d /
$ sudo chown kopano:kopano -R /var/lib/kopano

※添付ファイル(kopanoattatchment.zip)については、バックアップの仕方にもよるだろうと思われるのでよしなに。

サーバーを起動する。

$ sudo systemctl start kopano-server

これで復元ができているはずだ。

試してみる

ここまで来たところで、試験環境を試してみる。

$ sudo kopano-admin -l
User list for Default(11):
        Username        Fullname                Homeserver
        --------------------------------------------------------
        SYSTEM          SYSTEM                  Kopano
        Administrator   Administrator
…

動き始めているようだ。

https://temp.hogeserver.hogeddns.jp/webapp/ にアクセスしてみる。

ログインできた。移行してきたデーターでメールも見えるし、添付ファイルも見える。よしよし。

試験環境はできたので、ここから最新版への高に取り組んでいく。

特にわかりやすく問題となっているOutlookでの動作も試してみたところ、本番環境と同じく�が表示された。

試験環境を最新版にアップグレード

現状の確認

現在、インストールされているパッケージを見てみる。

$ dpkg -l kopano*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                           Version                      Architecture                 Description
+++-==============================================-============================-============================-=================================================================
ii  kopano-common                                  8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - common files
ii  kopano-contacts:amd64                          8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - contact mapi provider
ii  kopano-dagent                                  8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - delivery agent
ii  kopano-gateway                                 8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - POP3 and IMAP gateway
ii  kopano-ical                                    8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - CalDAV and CalDAV gateway
ii  kopano-libs:amd64                              8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - Free/Busy library
ii  kopano-monitor                                 8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - quota monitor
ii  kopano-search                                  8.5.5-0ubuntu1               all                          Complete and feature rich groupware solution - indexer
ii  kopano-server                                  8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - server component
ii  kopano-spooler                                 8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - email spooler
ii  kopano-utils                                   8.5.5-0ubuntu1               amd64                        Complete and feature rich groupware solution - admin tools
ii  kopano-webapp-apache2                          3.4.6+dfsg1-1                all                          WebApp for the Kopano Collaboration Platform - Apache2
ii  kopano-webapp-common                           3.4.6+dfsg1-1                all                          WebApp for the Kopano Collaboration Platform - common files
un  kopano-webapp-lighttpd                         <none>                       <none>                       (no description available)
un  kopano-webapp-nginx                            <none>                       <none>                       (no description available)

動作しているサービスはこれ。

$ systemctl list-units kopano-*
UNIT                   LOAD   ACTIVE SUB     DESCRIPTION                                                 
kopano-gateway.service loaded active exited  LSB: Kopano Collaboration Platform's POP3/IMAP Gateway
kopano-ical.service    loaded active running LSB: Kopano Collaboration Platoform's iCal Gateway
kopano-monitor.service loaded active running LSB: Kopano Collaboration Platform's Quota Monitor
kopano-search.service  loaded active running LSB: The Search Indexer of the Kopano Collaboration Platform
kopano-server.service  loaded active running Kopano Server
kopano-spooler.service loaded active running LSB: Kopano Collaboration Server's Spooler Daemon
…

 

Kopano関連パッケージのアンインストール

Z-Pushを除く全てのKopano関連パッケージをアンインストールする。

$ sudo apt remove kopano-*
…
The following packages will be REMOVED:
  kopano-common kopano-contacts kopano-dagent kopano-gateway kopano-ical kopano-libs kopano-monitor kopano-search
  kopano-server kopano-spooler kopano-utils kopano-webapp-apache2 kopano-webapp-common php-mapi python-kopano
  python-mapi z-push-backend-kopano
0 upgraded, 0 newly installed, 17 to remove and 10 not upgraded.
After this operation, 31.3 MB disk space will be freed.
Do you want to continue? [Y/n] y

処理が進んでいくと以下の問い合わせがある。

 lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqu Configuring kopano-server tqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
 x                                                                                                                   x
 x Since you are removing kopano-server, it's possible that you no longer want the underlying database and the       x
 x privileges for the user associated with this package.                                                             x
 x                                                                                                                   x
 x Please choose whether database removal and privilege revocation should be handled with dbconfig-common.           x
 x                                                                                                                   x
 x If you choose this option, dbconfig-common will check if kopano-server provided scripts and database commands to  x
 x undo package specific operations and run them if they exist. Then it will ask if you want to delete the           x
 x kopano-server database and revoke the standard privileges for the user of kopano-server. If you don't want any    x
 x of this, or if you want to handle this manually, you should refuse this option.                                   x
 x                                                                                                                   x
 x Deconfigure database for kopano-server with dbconfig-common?                                                      x
 x                                                                                                                   x
 x                                  <Yes>                                     <No>                                   x
 x                                                                                                                   x
 mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

kopano-serverを削除するため、基盤となるデータベースと、このパッケージに関連付けられているユーザーの権限が不要になる可能性があります。

データベースの削除と特権の取り消しをdbconfig-commonで処理するかどうかを選択してください。

このオプションを選択すると、dbconfig-commonは、kopano-serverが提供するスクリプトとデータベースコマンドをチェックして、パッケージ固有の操作を元に戻し、存在する場合はそれらを実行します。次に、kopano-serverデータベースを削除して、kopano-serverのユーザーの標準権限を取り消すかどうかを尋ねられます。これが不要な場合、またはこれを手動で処理する場合は、このオプションを拒否する必要があります。

dbconfig-commonを使用してkopano-serverのデータベースを構成解除しますか?

Google先生による翻訳

どうやら、設定をきれいに解除する?と聞かれている。
答えは No だ。まぁ、後で取り込み直してもいいのだろうけれども、データーその他を残しておくことにした。

この方法でいくと、ユーザーも残っていたし、全ての設定ファイルが残されるらしく、/etc/kopano の中身はそのまま残っていた。

コミュニティ版コアパッケージのダウンロードとインストール

Kopanoはコミュニティエディションをダウンロードしてくる。ところが、パッケージの切り分け方?が違っていて、何を選択したらいいのか分からない。
なので公式のインストール手順書を見ながら、パッケージは自分で持ってきてインストールしてみる。

最初はCoreのインストールのようだ。Ubuntu 18.04と20.04のものが用意されていた。

$ wget https://download.kopano.io/community/core%3A/core-11.n.n.nnn.xxxxxxx-Ubuntu_18.04-amd64.tar.gz

※日によってバージョンが違うだろから、番号近辺はマスクしている。

展開したところ、たくさんのdebパッケージがあり、serverやdagent等が含まれていた。そう言われてみればそうでした!

debパッケージをインストールしてみたところ、必要なライブラリがインストールされていないため、依存関係のエラーが発生してエラーとなった。
この日のバージョンで試して必要と思われたパッケージはこれだった。

$ sudo apt install libdigest-hmac-perl libev4 libfile-copy-recursive-perl libhx28 libicu-dev libio-tee-perl libjsoncpp1 libmail-imapclient-perl libmariadbclient18 libmariadbclient18 libreadonly-perl librrd8 libtcmalloc-minimal4 libunicode-string-perl python3-bsddb3 python3-daemon python3-dateutil python3-falcon python3-ldap python3-magic python3-setproctitle python3-tz python3-tzlocal python3-vobject python3-xapian xapian-tools

で、Coreパッケージを全てインストール。

$ sudo dpkg -i *.deb

インストールの途中で ldap.cfg, server.cfg を置き換えるかどうか聞いてくるので、Nで回答。
インストールが終わったら、再起動してみる。

なお、ライブラリが不足しているようなケースでは、dpkgがこのライブラリが必要なのにないよと教えてくれる。
$ sudo apt –fix-broken install
とかで修正できるかもしれない。

そしたら、超エラーが出てるし、kopano-server、kopano-searchが動いていない。
kopano-spooler、kopano-spamdはsyslogにエラーを吐き出し続けている。一旦これを止めて、設定を見直していく。

設定の見直しと修正

パッケージを確認したところ、設定ファイルは/etc/kopanoにインストールされている。このあたりは変わらないので、それぞれを見ていけばなんとかなりそう。

kopano-server

動かないkopano-serverを起動してsyslogを見てみたところ、AppAormorでファイルへのアクセスがブロックされていた。

/etc/apparmor.d/usr.sbin.kopano-server
…
  capability sys_resource,
  capability fowner,
  capability fsetid,  /etc/machine-id r,
  /etc/kopano/debian-db.cfg r,
…
  /usr/sbin/kopano-server rix,
…
  @{PROC}/sys/fs/suid_dumpable r,
  /sys/kernel/mm/transparent_hugepage/hpage_pmd_size r,

設定を読み込み直す。

$ sudo systemctl reload apparmor

さらに、MariaDBにアクセスするためのパスワードを含む情報ファイル debian-db.cfg が読み込めない。
以前、オーナーはkopanoだったと思うけれど、今はrootになっているので、オーナーを変える。

$ sudo chown kopano:kopano /etc/kopano/debian-db.cfg

この状態で、kopano-serverを実行したところ、こんなエラーが出た。

/var/log/kopano/server.log
2021-04-17T22:17:18.937464: [=======] Starting kopano-server version 11.0.1 (pid 2371 uid 0)
2021-04-17T22:17:18.966793: [=======] Starting kopano-server version 11.0.1 (pid 2371 uid 115)
2021-04-17T22:17:18.990992: [error  ] SQL [00000035] Failed: Duplicate entry 'x-ab-envelope-from' for key 'gns', Query Size: 170, Query: "ALTER TABLE `names` ADD UNIQUE INDEX `gni` (`guid`(16), `nameid`), ADD UNIQUE INDEX `gns` (`guid`(16), `namestring`), DROP INDEX `guidnameid`, DROP INDEX `guidnamestring`"
2021-04-17T22:17:18.991018: [error  ] KDatabase::I_Update() query failed: "Duplicate entry 'x-ab-envelope-from' for key 'gns'", query: ALTER TABLE `names` ADD UNIQUE INDEX `gni` (`guid`(16), `nameid`), ADD UNIQUE INDEX `gns` (`guid`(16), `namestring`), DROP INDEX `guidnameid`, DROP INDEX `guidnamestring`
2021-04-17T22:17:18.991031: [error  ] K-1216: Cannot update to schema v69, because the "names" table contains unexpected rows. Certain prior versions of the server erroneously allowed these duplicates to be added (KC-1108).
2021-04-17T22:17:18.991088: [error  ] K-1220: To fix the excess rows, use `kopano-dbadm k-1216`. Consult the manpage and preferably make a backup first.
2021-04-17T22:17:18.991098: [error  ] K-1221: Alternatively, the server may be started with --ignore-da to forego the schema update.
2021-04-17T22:17:18.991194: [warning] WARNING: Unable to upgrade database from version 11.0.1.0.68 to 11.0.1.0.118
2021-04-17T22:17:18.991202: [warning]    You can force the server to start with --ignore-database-version-conflict
2021-04-17T22:17:18.991206: [warning]    Warning, you can lose data! If you don't know what you're doing, you shouldn't be using this option!

バックアップを取ってから、kopano-dbadm k-1216を実行して、と書いてある。親切。
本番環境では、このタイミングで一度バックアップを取るって話だが、今回は試験環境なので、このまま実行してみる。

$ sudo kopano-dbadm k-1216
2021-04-17T22:24:12.679838: [notice ] Starting index-tags: adding temporary helper index on properties
2021-04-17T22:24:20.446524: [notice ] Ending index-tags: adding temporary helper index on properties
2021-04-17T22:24:20.449103: [notice ] Starting index-tags: adding temporary helper index on tproperties
2021-04-17T22:24:24.283258: [notice ] Ending index-tags: adding temporary helper index on tproperties
2021-04-17T22:24:24.285485: [notice ] Starting index-tags: adding temporary helper index on mvproperties
2021-04-17T22:24:24.335251: [notice ] Ending index-tags: adding temporary helper index on mvproperties
…

※かなり色々と操作をしている。

この後で、kopano-serverを実行したところ、動き出した。

/var/log/syslog
Apr 17 22:26:07 temp systemd[1]: Started Kopano Groupware Core Storage Server.

※さっぱりと、この1行だけが出力されて、kopano-serverが動いている。

これも起動してsyslogを見たところ、AppArmorで起動ができなくなっている。

/etc/apparmor.d/usr.sbin.kopano-search
…
  /dev/shm/* rwlm,
…
  /usr/sbin/kopano-search r,
  /usr/sbin/ r,
  /usr/bin/x86_64-linux-gnu-gcc-7 ix,
  /usr/bin/x86_64-linux-gnu-ld.bfd ix,
  /usr/lib/gcc/x86_64-linux-gnu/7/collect2 ix,
…
  /etc/kopano/search.cfg r,
  /etc/magic r,
  /etc/timezone r,
  /etc/default/apport r,
  /etc/ssl/openssl.cnf r,
…
  /bin/rm Pix,
 /sbin/ldconfig rPix,
  /sbin/ldconfig.real ix,
…
  /run/kopano/.-* rw,
  /run/kopano/server.sock rw,
  /tmp/#* m,
  /var/tmp/#* m,
  /proc/*/fd/ r,
}

設定を読み込み直す。

$ sudo systemctl reload apparmor

この後で、kopano-searchを実行したところ、動き出した。

/var/log/syslog
Apr 17 23:06:27 temp systemd[1]: Started Kopano Groupware Core Search Daemon.

 

kopano-spooler

これは、起動後にエラーログを吐き出し続けていた。
kopano-serverとkopano-searchが上手く動き出したからか、エラーが出なくなった。

/var/log/syslog
Apr 17 23:10:22 temp systemd[1]: Started Kopano Groupware Core Spooler.

 

kopano-spamd

これも、起動後にエラーログを吐き出し続けていた。
こちらもエラーが出なくなった。

/var/log/syslog
Apr 17 23:12:00 temp systemd[1]: Started Kopano Groupware Core SPAM learning Daemon.

 

kopano-dagent

起動時、および、メール配送時にAppArmorのエラーが出ている。

/etc/apparmor.d/usr.sbin.kopano-dagent
…
  capability setuid,
  capability sys_resource,
  capability net_raw,
…
  /etc/kopano/dagent.cfg r,
  /etc/machine-id r,
  /etc/ssl/openssl.cnf r,

  /usr/sbin/kopano-dagent rix,
…
  /dev/tty r,

  # Site-specific additions and overrides. See local/README for details.
  #include <local/usr.sbin.kopano-dagent>
}

設定を読み込み直す。

$ sudo systemctl reload apparmor

 

kopano-gateway

設定ファイルの項目が変更になっていた。

/etc/kopano/gateway.cft
…
#enable/disable POP3, and POP3 listen port
#pop3_enable    =   no
#pop3_port  =   110

#enable/disable Secure POP3, and Secure POP3 listen port
#pop3s_enable    =   no
#pop3s_port  =   995

#enable/disable IMAP, and IMAP listen port
#imap_enable    =   no
#imap_port  =   143

#enable/disable Secure IMAP, and Secure IMAP listen port
#imaps_enable   =   yes
#imaps_port =   993
…

 

Z-Pushを最新バージョンに入れ替える

ここまでのところでkopano coreは動作していそうなので、Outlookからメールを送受信してみたところ、メールが送れない。
Z-Pushは残っているのだけれど、z-push-backend-kopanoをアンインストールしてしまっている。

現在のバージョンは Version 2.3.8-2ubuntu1 で、オフィシャルサイトの最新版は 2.6.2 のようだ。

Z-Pushはfinalバージョンのリポジトリが公開されているようなので利用させていただく。
Z-Push / Installation / Debian und Ubuntu based systems

$ wget -qO - http://repo.z-hub.io/z-push:/final/Ubuntu_18.04/Release.key | sudo apt-key add -
$ sudo add-apt-repository "deb http://repo.z-hub.io/z-push:/final/Ubuntu_18.04/ /"
$ sudo apt dist-upgrade

これで、z-push-commonが 2.6.2+0-0 にバージョンアップする。

続いて、z-push-backend-kopanoをインストールしてみる。Ubuntu公式のリポジトリからKopanoを持ってくるのではないかとヒヤヒヤしたが、追加したリポジトリから持ってくるようだ。

$ sudo apt install z-push-backend-kopano

パッケージのバージョンを確認してみる。

$ dpkg -l z-push*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                     Version           Architecture      Description
+++-========================-=================-=================-=====================================================
un  z-push                   <none>            <none>            (no description available)
ii  z-push-backend-kopano    2.6.2+0-0         all               Z-Push Kopano backend
ii  z-push-common            2.6.2+0-0         all               open source implementation of the ActiveSync protocol

このあたりのリポジトリの管理はさすがと思う。

WebAppのインストール

WebAppもコミュニティエディションをダウンロードしてきて、インストールする。

展開して、インストールする。

$ sudo dpkg -i *
$ sudo apt --fix-broken install

※パッケージインストール時に必要なライブラリがなく完了しないので、–fix-brokenで不足分をインストールして問題を解消する。

これで動くと思いきや、そんなに甘くはなかった。

/usr/share/kopano-webapp/.htaccess
…
# Deny access to config.php, config.php.dist, debug.php, debug.php.dist, defaults.php
# because they could become a security vulnerability when accessible
# Better safe then sorry
#<FilesMatch "^(config|debug|defaults|init)\.php">
#       <IfVersion < 2.4>
#                   Deny from all
#       </IfVersion>
#
#       <IfVersion >= 2.4>
#                  <RequireAll>
#                      Require all denied
#                  </RequireAll>
#       </IfVersion>
#</FilesMatch>

本来こんなことをしてはいけないと思うのだが、動かないので仕方がない。
ウチの場合は証明書で保護を掛けているので、利用者は限定されているから問題はないが、そういう運用じゃないときは問題原因を突き止めて対策した方がいいと思う。

utf8mb4対応

kopano-serverでログに警告が出ている。

/var/log/kopano/server.log
2021-04-18T15:57:58.095186: [warning] K-1244: Your database does not support storing 4-byte UTF-8! The content of some mails may be truncated. The DB should be upgraded with `kopano-dbadm usmp` and kopano-server be restarted.

初めてサーバーを構築したのはUbuntu 12.04の頃で、サーバーはUTF8をサポートしていた。
Kopanoは2019/01/24にリリースされたKopano Core 8.7.0 Finalでutf8mb4に対応したとのこと。
Kopano Documentation Portal / Changelog / Kopano Core 8.7.0 Final

$ sudo systemctl stop kopano-server
$ sudo kopano-dbadm usmp
$ sudo systemctl start kopano-server

これで絵文字対応だ。

試してみる

Outlookでメールの送受信を試してみたところ、Subjectに変な文字が混ざる問題は解消しており、かなりかっこよく使えそうだ。
WebAppでもきれいに見えている。アップグレードで問題が解消したようだ。

そして、本番環境への適用は、この手順に従って行った。
多分、ココに書いた手順でイケると思う。実際にできた。

やったこと

kopano-adminが動かない

kopano-adminコマンドが動かない。

$ sudo kopano-admin -l
Unable to list users: "object" not found
Using the -v option (possibly multiple times) may give more hints.

こんなログが出ていた。
/var/log/kopano/server.log

Fri Apr 16 14:05:34 2021: [warning] LDAP (simple) bind on ssoauth@hogeserver.hogeddns.jp failed: Can't contact LDAP server
Fri Apr 16 14:05:34 2021: [crit   ] Cannot instantiate user plugin: Failure connecting any of the LDAP servers
Fri Apr 16 14:05:34 2021: [crit   ] Unable to instantiate user plugin

でも、よーく考えてみると…これLDAPSで接続しようとしている割には、操作しているサーバーにCAの証明書を入れてないな…と気付いた。
そう、うちはオレオレ認証局を運用しており、オレオレ認証局を信用しなければならないのだった。

ということで、/usr/local/share/ca-certificate にオレオレ認証局の証明書を入れて、update-ca-certificateしておかないと。

コミュニティエディションをきれいにインストールできない

単純インストールでは依存関係が解決できないから、インストールしてみて足りないライブラリを見て、ライブラリをインストールしていった。

ライブラリインストール後、こんな形でインストールを完結させた。

$ sudo apt --fix-broken install

これで全部がインストールできたのか分からないから、もう一回パッケージをインストールしてみたりして…

AppAormor x の要求

kopano-serverを実行しようとしたところ、コマンドを実行したいと言ってきた。初めて直面したケース(あるいは発生していたけれども手動での解決を諦めたのかもしれない)。

Apr 17 19:13:06 temp kernel: [ 6742.134817] audit: type=1400 audit(1618654386.809:274): apparmor="DENIED" operation="exec" info="profile transition not found" error=-13 profile="/usr/sbin/kopano-server" name="/usr/sbin/kopano-server" pid=3905 comm="kopano-server" requested_mask="x" denied_mask="x" fsuid=115 ouid=0 target="/usr/sbin/kopano-server"

単純に x を追加すれば動くのかと思いきや、xだけだとプロファイルを適用できない。
探してみたところ、openSUSEに日本語の説明があった。

px : 独立プロファイル実行モード
cx : 独立ローカルプロファイル実行モード
ux : 無制限実行モード
ix : 継承実行モード
m : mmap(2)でのPROT_EXECの許可

openSUSE 13.1 第20章 プロファイルの構成と文法

多分、kopano-serverを起動するスクリプトの中で再帰呼び出し?ということなら、継承実行モードで良さそうな気がして(名前からだけだが…)、ixを選択。

各所に設定してみたが問題なく動いていそうだ。

syslogにphp-mapiのエラーログが大量に出力される(2021/04/17時点)

Kopano forum / Unknown PHP-MAPI Errorで示されている、WebAppを使用したときにエラーログが大量に出力される件が発生している。
製品版では発生していない問題で、コミュニティエディションでだけ発生している問題らしく、いずれは修正されると思われる。

エラーログはWebAppで操作をするたびに出力され、ちょっととてつもない量になりそうだが、うちの運用ではActiveSyncがメインなのでフィルターまでは考えない。

Subjectの件を早く解決したかったためアップグレードしたが、この作業をするのは今じゃないのかもしれない。
コミュニティエディションのバージョンが上がったら、試験環境で試して、問題ないバージョンを本番環境に適用する、という宿題が残った。

さいごに

最初はどっかの1行を修正すりゃいいんじゃね?くらいの軽いノリだったが、パッケージの最新化とか、かなり大変なことになった。

でも、やった甲斐はあって、Subjectに�が出る問題は解消しているし、WebAppはかなりモダンになってることが分かっている。
良かった良かった。

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です