Nextcloud 16でActivityPub

Nextcloudを16にアップグレードしました.そういえば16にはActivityPub機能が付いたはずと探してみると social というアプリがあったので早速導入してみました.

(Nextcloud 16からの対応と思っていたけど15から対応していた)

Alpha版だけあって機能は少なくシンプルです.

20191017 17:10:00 7196 nextcloud social01

画像投稿位はしたいなと思うのですが無さそう.Nextcloud fileのURL共有機能で画像を一般公開してそのURLを張り付けたらどうだろうと試してみましたが駄目でした.少なくともNextcloud socialとMastodonでは展開されません.

20191017 17:10:27 12589 nextcloud social

他のサーバからfollowすることも出来ました.

20191017 17:10:17 5175 nextcloud social 03

occのサブコマンドもあります.

$ sudo -u www-data php ./occ list social

  :

Available commands for the "social" namespace:
  social:account:create     Create a new social account
  social:account:following  Following a new account
  social:cache:refresh      Update the cache
  social:check:install      Check the integrity of the installation
  social:fediverse          Allow or deny access to the fediverse
  social:note:boost         Boost a note
  social:note:create        Create a new note
  social:note:like          Like a note
  social:queue:process      Process the request queue
  social:queue:status       Return status on the request queue
  social:reset              Reset ALL data related to the Social App
  social:stream             Get stream by timeline and viewer

social:stream はストリーミングではなくストリームを読み込むだけのようでちょっと残念.

$ sudo -u www-data php ./occ social:stream matoken local
Account: matoken@files.matoken.org
Id: https://files.matoken.org/index.php/apps/social/@matoken

+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+
| Id                                                                            | Source                    | Type | Author                    | Content                                                          |
+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+-------------------------------------------------------+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+
| Id                                                                            | Source                    | Type | Author                    | Content                                                          |
+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+
| https://files.matoken.org/index.php/apps/social/@matoken/15713026201621139189 | matoken@files.matoken.org | Note | matoken@files.matoken.org | 画像の共有?https://files.matoken.org/index.php/s/pwBt2mrzRgzrCM9 |
| https://files.matoken.org/index.php/apps/social/@matoken/15712646582663693964 | matoken@files.matoken.org | Note | matoken@files.matoken.org | hello Nextcloud!                                                 |
+-------------------------------------------------------------------------------+---------------------------+------+---------------------------+------------------------------------------------------------------+

まだあまり機能がないですが,Nextcloud連携が出来るようになると色々と便利に使えるようになりそうです.

環境
$ sudo -u www-data php ./occ app:list|grep -i social:
  - social: 0.2.101
$ sudo -u www-data php ./occ status|grep version:
  - version: 16.0.5.1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10

iCal形式の日本の休日を探す

Nectcloud holidays Calendar

最近カレンダーをNextcloudに移行しています.AndroidでもCaldav Sync Free Betaというアプリ経由で同期できています.

問題無さそうかなーと思っていたのですが,日本の休日が無くてちょっと不便です.外部カレンダーの読み込みは出来るのでiCal形式のものがあると良いはずです.

国民の休日は以下にあるのですがiCalは無く,自分で入力するのは面倒です.CSV形式での配布もされているので変換するのもありですが何度か仕様が変わっているのでまた仕様が変わると追従が面倒そうです.

iCal形式で配布されているものがないか探してみました.

yaml形式の世界の休日リポジトリもあった.date-holidays-icalと組み合わせてiCalも作れるよう.いざとなったらこれを使うと良さそう.

Apple謹製

AppleのiCloud向けのものですが,Nextcloudでも読み込めました.

  • webcal://ical.mac.com/ical/Japanese32Holidays.ics

Google謹製

以下はGoogle Calendar向けのものです.これもNextcloudで読み込めました.以前はGoogle Calendarの画面から各種フォーマットのアイコンがあってリンクの入手が簡単だったのですが今は隠されています.そのうち使えなくなるのかも?

余録

日本の休日を探しているときにライブドアのiCal天気というものを見つけました.これも便利そうです.Nextcloudでは数値文字参照はそのまま表示されてしまうようなのでそれ以外を選んだほうがいいです.

Nextcloud環境
$ sudo -u www-data php ./occ --version
Nextcloud 16.0.5
$ sudo -u www-data php ./occ app:list|grep -i calendar
  - calendar: 1.7.1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10

localeが足りなくてmcomixが起動しなくなっていた

mcomix が起動しなくなりました.こないだのエンバグ?と思ったけど

エラーが違う.

$ mcomix
Traceback (most recent call last):
  File "/usr/bin/mcomix", line 11, in <module>
    load_entry_point('mcomix==1.2.1', 'console_scripts', 'mcomix')()
  File "/usr/lib/python2.7/dist-packages/mcomix/run.py", line 127, in run
    i18n.install_gettext()
  File "/usr/lib/python2.7/dist-packages/mcomix/i18n.py", line 71, in install_gettext
    locale.setlocale(locale.LC_ALL, '')
  File "/usr/lib/python2.7/locale.py", line 581, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

localeぽいので適当に指定してみると起動.

$ LC_ALL=C mcomix

しかし,C だと日本語ファイル名などでエラーとなる.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-27: ordinal not in range(128)
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/mcomix/file_chooser_base_dialog.py", line 215, in _response
    if os.path.isdir(path):
  File "/usr/lib/python2.7/genericpath.py", line 49, in isdir
    st = os.stat(s)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-27: ordinal not in range(128)

en_US.UTF-8 だととりあえず利用できるけど,ja_JP.UTF-8 とかで日本語を指定すると……うまく行かない?

$ export LC_ALL=ja_JP.UTF-8 mcomix
bash: warning: setlocale: LC_ALL: cannot change locale (ja_JP.UTF-8)

localeを確認するとインストール時に設定していたつもりの ja_JP.UTF-8 がありません.

$ grep -v ^# /etc/locale.gen |uniq

en_US.UTF-8 UTF-8

/etc/locale.gen を編集して,ja_JP.UTF-8 のコメントを外して locale-gen コマンドで生成したら動くようになりました.

$ sudo git diff HEAD~~ /etc/locale.gen
diff --git a/locale.gen b/locale.gen
index c432a9a..afb6141 100644
--- a/locale.gen
+++ b/locale.gen
@@ -287,7 +287,7 @@ en_US.UTF-8 UTF-8
 # it_IT@euro ISO-8859-15
 # iu_CA UTF-8
 # ja_JP.EUC-JP EUC-JP
-# ja_JP.UTF-8 UTF-8
+ja_JP.UTF-8 UTF-8
 # ka_GE GEORGIAN-PS
 # ka_GE.UTF-8 UTF-8
 # kab_DZ UTF-8
$ sudo locale-gen
Generating locales (this might take a while)...
  en_US.UTF-8... done
  ja_JP.UTF-8... done
Generation complete.
環境
$ dpkg-query -W locales mcomix
locales 2.29-1
mcomix  1.2.1-1.1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

略語郎のサンプルテキストをstardict形式に変換してGoldenDictで利用

過去に購入したことのあるEDPさんが新しいその他書籍を公開しました!

略語郎 Ver.144(2015年3月20日版)のテキストデータ
その他書籍 略語郎 Ver.144(2015年3月20日版)のテキストデータ ¥ 150

EDPの英辞郎はStarDict形式に変換して辞書閲覧ソフトのGoldenDictで利用していおます.
略語郎も同様に利用できないかとサンプルテキストで試してみました.

以前英辞郎を変換したときと同じ手順で試しました.

$ time perl eiji2sd-text.pl ryakugoro-sample.txt

Sorting...

Done.

real    0m0.277s
user    0m0.178s
sys     0m0.017s

20190906 21:50:35 8570

変換した辞書ファイルをGoldenDictに設定して試してみるとうまく動いているようです.
150円だし買ってもいいかも.

環境
$ dpkg-query -W perl goldendict
goldendict      1.5.0~rc2+git20181207+ds-1
perl    5.28.1-6
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

awesome wmでパスを追加する

bashだと~/bin とかにパスが通っているのにawesomeからmod4 +r で起動しようとするとコマンドが見当たりません.

20190830 14:08:46 21926

AppImageやFlatpakなんかのアプリを格納したりしているのですがこれだと /home/user/bin/command とかフルパスで書かないと駄目です.

bashだとパスが通っています.

$ type -a MQTT-Explorer
MQTT-Explorer is /home/matoken/bin/MQTT-Explorer
$ ls -l /home/matoken/bin/MQTT-Explorer
lrwxrwxrwx 1 matoken matoken 71 Aug 25 21:22 /home/matoken/bin/MQTT-Explorer -> /home/matoken/opt/AppImage/MQTT-Explorer-0.3.6-no-delete-limit.AppImage

awesomeで,mod4 + r して sh -c "$PATH >> ~/tmp/awesomepath" とかして PATH を確認してみるとこれだけしかパスが通っていません.

$ cat ~/tmp/awesomepath
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

~/.xinitrc でパスを追加してみましたが反映されません.
多分lightdm経由で起動しているので関係なかった.

$ ps auxf|grep -B3 awesome
root     32202  0.0  0.0 309612  5532 ?        SLsl  8月29   0:00 /usr/sbin/lightdm
root     32208  1.2  0.5 430424 82396 tty7     Ssl+  8月29  10:48  \_ /usr/lib/xorg/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
root     32283  0.0  0.0 163604  5856 ?        Sl    8月29   0:00  \_ lightdm --session-child 12 21
matoken  32293  0.1  0.6 350760 99060 ?        Ssl   8月29   1:18      \_ awesome

~/.Xsession に`PATH=$HOME/bin:$PATH` のような感じでパスを追加するとパスが通りました.でもパスの追加しか書いていないと色々と起動しないサービスがあります.
大本の`/etc/X11/Xsession` をcpしてきてそのファイルにパスの設定を追加したらOKでした.

$ cp /etc/X11/Xsession ~/.Xsession
$ echo 'PATH=$HOME/bin:$PATH' >> ~/.Xsession

これパスの管理一緒にしたいですね.

環境
$ dpkg-query -W awesome lightdm
awesome 4.3-4
lightdm 1.26.0-5
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

OsMo.mobiがDownしたのでPhoneTrackを使う

近頃はOsMoで検索すると,DJIのドローンやジンバルが出てくるようになっていますがOsMoはそういうものではなく,位置情報共有サービスです.スマートフォンにアプリを導入して共有URLで今自分の居る場所を共有できます.Glympseなどが類似サービスになると思います.

このOsMoですが,最近サーバがダウンして利用できなくなりました.(一応オフラインでローカルにログを取得することは可能)
OsMoのアプリ(OsMoDroid)を導入していると,telegramに誘導するメッセージが表示されるようになりました.

IMG 20190821 235148

20190824 20:08:03 4249

このチャンネルを覗くとサーバが(物理的に?)失われて,更にバックアップが05/15のものしか無いようで,そのデータで復旧を試みようとしているけど未だホスト先を探している状態のようです.
復旧までにはまだまだ掛かりそうなです.

Константин Гам, [22.08.19 02:57]
Что произошло? Сервер приложения OsMo и сайта повреждён, сгорел диск. Потеряны все данные пользователей. Из-за несработавшего бекапа, последняя полная копия проекта датируется 15 мая 2019 года.
Диск заменили, но требуется много работы по запуску проекта с нуля и дальнейшее накатывание копии от мая…​

Собираем на восстановление сервера осмо (часы + сервера + тонна кофе), 5200/60000 руб

VISA: 4083 9720 5573 2954
QIWI: +7 (921) 426-74-00

В комментарий указывайте email аккаунта, если есть или будущего. Всем кто донатит 1500+ рублей, максимальный PRO пожизненно.
Если комментарий недоступен, кидайте время и место платежа в почту osmo.mobi@gmail.com

OsMoが使えない間の代替サービスを探そうと思いましたが,そういえば以前PhoneTrackというアプリケーションを導入していたのを思い出しました.

PhoneTrackはNextcloudのアプリケーションとして導入して,位置情報アップロード用のURLを発行して各種アプリケーションで位置情報をアップロード,この情報を共有URLで共有することも出来ます.
対応アプリケーションも色々あります.私はOsmAnd+,Uloggerを利用しています.
以下はOsmAnd+での設定例です.

IMG 20190827 084323
IMG 20190827 084402

位置情報共有用のURLは長いのですが,QRcodeで読み取ることも出来ます :)

20190827 08:08:46 30083

長時間動かすことが多いので消費電力の少ない設定やアプリを探そうと思います.

API経由でpocketに投稿した記事を取得してみたけどRSSで十分だった

最近放置がちだったpocketを活用し始めました.Android端末で隙間時間にRSS消化して気になったものをpocketに投げておいて後でPCで読むという感じのブックマーク代わりな感じです.

ここに投稿したものを日毎に保存しておくと便利かもと試した記録です.

アプリケーション登録

まずはアプリケーション登録をする

記事が読めればいいので,permissionsは`Retrieve`
にした.登録すると,CONSUMER KEY が入手できる.

REQUEST TOKENを入手する

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
   https://getpocket.com/v3/oauth/request \
   -d '
{
  "consumer_key" : "XXXX-XXXXXXXXXXXXXXXXXXXXXXXX",
  "redirect_uri":"http://matoken.org/"
}
'

結果

code=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX

アプリケーションをアカウントに紐付ける

ウェブブラウザで
`https://getpocket.com/auth/authorize?request_token=&redirect_uri=http://matoken.org/’
にアクセスしてアカウントにリクエストを許可する.urlは適当.

20190816 01 08 26 22616

アクセストークンを入手する

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/oauth/authorize \
-d '
{
  "consumer_key":"<CONSUMER_KEY>",
  "code":"<REQUEST_TOKEN>"
}
'

結果

access_token=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXX&username=user%40example.com

投稿を取得する

application/json で求める.とりあえず1件だけ(count'':1”)

$ curl -H "Content-Type: application/json; charset=UTF-8" -X POST \
https://getpocket.com/v3/get -d '
{
  "consumer_key":"<CONSIMMER_KEY>",
  "access_token":"<ACCESS_TOKEN>",
  "count":1
}
' | jq
{
  "status": 1,
  "complete": 1,
  "list": {
  "2692971736": {
    "item_id": "2692971736",
    "resolved_id": "2692971736",
    "given_url": "https://www.patreon.com/posts/29180933",
    "given_title": "DUVET | 1041uuu on Patreon",
    "favorite": "0",
    "status": "0",
    "time_added": "1565885008",
    "time_updated": "1565885011",
    "time_read": "0",
    "time_favorited": "0",
    "sort_id": 0,
    "resolved_title": "",
    "resolved_url": "https://www.patreon.com/posts/29180933",
    "excerpt": "",
    "is_article": "0",
    "is_index": "0",
    "has_video": "0",
    "has_image": "0",
    "word_count": "0",
    "lang": "",
    "domain_metadata": {
    "name": "Patreon",
    "logo": "https://logo.clearbit.com/patreon.com?size=800",
    "greyscale_logo": "https://logo.clearbit.com/patreon.com?size=800&greyscale=true"
    },
    "listen_duration_estimate": 0
  }
  },
  "error": null,
  "search_meta": {
  "search_type": "normal"
  },
  "since": 1565886741
}

application/x-www-form-urlencoded で求める.結果は同じでjson形式で帰ってくる.

$ curl -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d \
  "consumer_key=<CONSUMER_KEY>&access_token=<ACCES_TOKEN>&state=all&sort=oldest&detailType=symple&since=`date -d'1days ago' +%s`" | jq .

引数の意味はこんな感じ

  • state=all : 全ての投稿形式(既読未読の両方)

  • sort=oldest : 古いものから順に

  • detailType=simple : 基本的な情報

  • since=date -d'1days ago' +%s : 指定したUNIX
    Time以降の記事を取得.取得する開始UNIX TimeをGNU coreutilsのdate
    commandで過去1日(-d’1days ago’)時点のUNIX Time(+%s)を取得して指定

毎日前日分のpocket投稿titleとurlをDokuwikiに書き込み(Markdown形式)

$ sudo -u www-data crontab -l | grep wiki
0 0 1 * *       mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/%m`
2 0 * * *       curl -s -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" -X POST https://getpocket.com/v3/get -d "consumer_key=87275-eea7fa53556961262450492d&access_token=27847a46-0ff9-f9a3-ea7f-31279b&state=all&sort=oldest&detailType=symple&since=`date -d'1days ago' +%s`" | jq -r '.list[] | [.given_title,.given_url] | @csv' | sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/' | sed '1s/^/\n/' >> /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/\%m/\%F`.txt

1行目

  • 0 0 1 * * : 毎月1日の00:00に実行

  • mkdir -p /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date
    +%Y/%m`
    : 月のディレクトリを掘る.%がエスケープされているのはcrontabの使用に合わせて.

  • 1 0 * * * : 毎日 00:01 に実行

2行目

  • jq -r '.list[] | [.given_title,.given_url] | @csv' :
    pocketからの結果からtitleとurlを抜き出してcsv形式で出力

  • sed -e 's/^"/* [/' | sed -e 's/","/](/' | sed -e 's/"$/)/' | sed -e 's/^\[]/\[null]/'
    : markdownのリンクに変換

  • sed '1s/^/\n/' :
    先頭行を空けないとmarkdownを認識しないようなので改行を入れる

  • /var/lib/dokuwiki/farm/wiki.matoken.org/data/pages/memo/`date +\%Y/\%m/\%F`.txt`
    : 保存先,dokuwikiでは memo:2019:08:2019-08-16 のようになる

実はRSSで吐き出せる……

pocketのオプションのプライバシー管理の中にRSSフィードの項目が!

20190816 12 08 10 2311

これを公開にして「すべてのアイテムフィード」を取得すればやりたかったことが出来た…….

細かい制御をしたいならAPIのほうがいいと思いますが,今回自分がやりたかったのは毎日のバックアップだったので…….もう設定終わったからこれは見なかったことに.

$ rsstail -l -1 -n5 -H -u "http://getpocket.com/users/*sso1456706866592e34/feed/all"
Title: エロの秘密結社 ドシコルド EP.38 夢現のエモーション - 無料コミック ComicWalker
Link: https://comic-walker.com/viewer?tw=2&dlcl=ja&cid=KDCW_MF00000086010039_68&bs=1
Title: 次世代衛星向け「グリーン燃料」 月探査でも使用か 日米が開発競争
Link: https://sankei.com/life/news/190815/lif1908150010-n1.html
Title: ArchiveBox
Link: https://archivebox.io
Title: セキュリティ企業が管理する約2800万件の生体認証記録が流出していたことが判明
Link: https://gigazine.net/news/20190815-data-breach-biometric-security
Title: DUVET | 1041uuu on Patreon
Link: https://patreon.com/posts/29180933

環境

$ dpkg-query -W curl sed jq rsstail dokuwiki
curl    7.64.0-4
dokuwiki        0.0.20180422.a-2
jq      1.5+dfsg-2+b1
rsstail 1.8-1+b1
sed     4.7-1
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

Nextcloud 15にアップデートして出現した「セキュリティ&セットアップ警告」を解消

php5のサーバでNextcloud 14系だったのですが,php 7.0 に出来るようになったのでNextcloud もアップグレードして15にしました.
するといくつかの「セキュリティ&セットアップ警告」が出てきたので対応したメモです.

MariaDBのデータベースの4バイト文字のサポート

20190814 01 08 48 4287

MySQLをデータベースとして使用していますが、4バイト文字をサポートしていません。たとえば、ファイル名やコメントの問題なしに(絵文字のような)4バイト文字を処理できるようにするには、MySQLで4バイトサポートを有効にすることをお勧めします。 詳細についてはこれに関するドキュメントページを読んでください。

ここでいうドキュメントページは以下のリンクでした.

現在のデータベースのバージョンを確認します.

$ mysql --version
mysql  Ver 15.1 Distrib 10.1.38-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

innodb_file_format を確認して,Barracuda でない場合は`Barracuda` に変更します.

$ mysql -udebian-sys-maint -p
MariaDB [(none)]> show variables like 'innodb_file_format';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| innodb_file_format | Antelope |
+--------------------+----------+
MariaDB [(none)]> show variables like 'innodb_file_format';
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| innodb_file_format | Barracuda |
+--------------------+-----------+
MariaDB [(none)]> quit;
Bye
$ sudo service mariadb restart

ここからはMySQL/MariaDBのソフトウェア,バージョン毎に少し設定が異なります.

MariaDBの設定ファイルの`[mysqld]` セクションに`innodb_file_per_table=1` を設定

innodb_file_per_table=1

MariaDBを再起動して設定反映.

$ sudo service mariadb restart

データベースの文字コードなどを変更

MariaDB [(none)]> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Nextcloud側の設定も4バイト文字を有効にする

$ sudo -u www-data php ./occ config:system:set mysql.utf8mb4 --type boolean --value="true"
System config value mysql.utf8mb4 set to boolean true

repairを掛けるとエラーに
20190814 01 08 35 31677

$ sudo -u www-data php ./occ maintenance:repair
Nextcloud is in maintenance mode - no apps have been loaded

 - Repair MySQL collation
	 - Change row format for oc_addressbooks ...
	 - Change collation for oc_addressbooks ...

In AbstractMySQLDriver.php line 115:

  An exception occurred while executing 'ALTER TABLE `oc_addressbooks` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;':

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


In PDOStatement.php line 107:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


In PDOStatement.php line 105:

  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes


maintenance:repair [--include-expensive]

max key length is 767 bytes ということで以下の設定も追記して

[mysqld]
innodb_large_prefix=true
innodb_file_format=barracuda
innodb_file_per_table=1

MariaDBを再起動して設定反映.

$ sudo service mariadb restart

再度repairを掛けると正常に終了.

$ sudo -u www-data php ./occ maintenance:repair

メンテナンスモードを抜けてNextcloudを開き,エラーメッセージが消えているのを確認

$ sudo -u www-data php ./occ maintenance:mode --off
Maintenance mode disabled

PHP OPcacheの設定

20190814 01 08 05 2116

PHP OPcacheが適切に設定されていません。よりパフォーマンスを向上させるには、php.iniで次の設定を推奨します:
opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

/etc/php/7.0/apache2/php.ini を編集してapache httpd2の設定を再読込して反映.

$ sudo vi /etc/php/7.0/apache2/php.ini
$ sudo service apache2 reload

データベースにインデックスを作成

20190814 01 08 43 6355

データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 “occ db:add-missing-indices”を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
テーブル “oc_share”のインデックス “share_with_index”が見つかりません。
テーブル “oc_share”のインデックス “parent_index”が見つかりません。
テーブル “oc_share”のインデックス “owner_index”が見つかりません。
テーブル “oc_share”のインデックス “initiator_index”が見つかりません。
テーブル “oc_filecache”のインデックス “fs_mtime”が見つかりません。

occ db:add-missing-indices を実行して解決.

$ sudo -u www-data php ./occ db:add-missing-indices

imagickモジュールの導入

20190814 01 08 54 8885

このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。
imagick

php-imagick パッケージを導入してapache httpd2を再読込

$ sudo apt install php-imagick
$ sudo service apache2 reload

データベースのbig intへの変換

20190814 01 08 22 10566

データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 ‘occ db:convert-filecache-bigint’を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。
activity.activity_id
activity.object_id
activity_mq.mail_id
filecache.fileid
filecache.storage
filecache.parent
filecache.mimetype
filecache.mimepart
filecache.mtime
filecache.storage_mtime
mimetypes.id
storages.numeric_id

occ db:convert-filecache-bigint で反映

$ sudo -u www-data php ./occ db:convert-filecache-bigint
Following columns will be updated:

* activity.activity_id
* activity.object_id
* activity_mq.mail_id
* filecache.fileid
* filecache.storage
* filecache.parent
* filecache.mimetype
* filecache.mimepart
* filecache.mtime
* filecache.storage_mtime
* mimetypes.id
* storages.numeric_id

This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y

Nextcloud 16にも上げてみたいのですが,phpのバージョンを上げないといけないしE2EEプラグインが未対応だったりするのでとりあえず今回は見送りです.

20190814 17 08 22 16312

環境

$ sudo -u www-data php ./occ --version
Nextcloud 15.0.10
$ dpkg-query -W mariadb-common mariadb-server-10.1 php7.0 php7.0-mysql php-imagick
mariadb-common  10.1.38-0+deb9u1
mariadb-server-10.1     10.1.38-0+deb9u1
php-imagick     3.4.3~rc2-2
php7.0  7.0.33-0+deb9u3
php7.0-mysql    7.0.33-0+deb9u3
$ lsb_release -dr
Description:    Debian GNU/Linux 9.9 (stretch)
Release:        9.9
$ uname -m
x86_64

Google Chrome 76 でまた特定のサブドメインが表示されなくなったので表示するようにする

Google Chrome 69 のときも一時的に表示されなくなっていたのですが,

Google Chrome 76 でまた特定のサブドメインが表示されなくなりました.

例えば, www.matoken.orgmatoken.org と省略されます.

20190811 16 08 30 974

ちなみに 69 のときは www.hoge.www.matoken.orghoge.matoken.org に見えるというバグらしき動きもありましたがこれは hoge.www.matoken.org に見えるようになっていました.

20190811 16 08 11 478

今回も Google Chrome 69 のときと同じように chrome://flags/#omnibox-ui-hide-steady-state-url-trivial-subdomains を Disabled にすると以前の挙動に戻ります.

20190811 16 08 11 3832

今回 Chromium 76 でも試してみましたが,この変更は入っていないようでサブドメインは省略されませんでした.

環境
$ dpkg-query -W google-chrome-stable chromium
chromium        76.0.3809.100-1
google-chrome-stable    76.0.3809.100-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

mono製InlineHtmlImagesでhtml+画像の複数ファイルを単一の画像埋め込みhtmlに変換する

npm の html-inline を試しましたが途中でコケてしまいます.

mono製の InlineHtmlImages を試すとうまくいきました :)

画像作成
$ convert pango:"<span font=\"/Library/Fonts/NotoColorEmoji\" size=\"24576\">😺</span>" cat.jpg
html作成
$ cat << __EOF__ > cat.html
> <html>
> <body>
> <img src="cat.jpg">
> </body>
> </html>
> __EOF__
画像埋め込み
$ mono ~/Downloads/inlinehtmlimages-mono.exe -in ./cat.html -out ./cat_inline.html
埋め込まれているのを確認
$ cat cat_inline.html
<html>
<body>
<img src="data:image/png;base64,
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAAmACgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD1jV/EEllqzWqSpEEUH5o9wYkZ554qS38TMSUktvNcDh4D8uffPT8zWX4p0xptegkwRFNH8x916/piokurKK5WxSeBZwuRBvG7HrjrXx+Kx+MoYqpGMtE9t9D2I0aEqMXbVo1P+EubZ5n2D5PM8v8A13Of++aluPErAhIrfymIyWnPH4Y6/mKwvsB8gR+YOJvMzj36U97qymuGsGnhacrkw7xvx6461zrOMbJNKX4L/IuWGw6asvzNbR/EEl7qotWlSUMpOVj27SPTnmiqHhXTWh1y4kPMcUeFPqW6foDRX0eT1KtTDKdV3bb+44MdGEKtqfZE3ifWbC01a2gurgQMsTcyqVQ5K9GI2np2NcUvhJp/GK6/Hfxvas4mAXlicYwD0x/Tiuv8aR3E06Q219dvcld0Vja2ysxHQszsCFH1wOK871K58QaJDBe2NpHdxhNlxZyZYoQThgU2noeQO46Vw46hUhipSpyUXUVtdtvTTY1oNTpK6b5ex0Qudd/4TQ2P2i3/ALO8vz8bPm2dNvrnP+e1Uh4SNt4xfX5b9FtQ5mKtwwJGME9Mc/0rHbxlqAt/tY8LWf2jZt/4/wBy+OuNuc/hmpdLn1/V7W5vb+2jtxKgS3s4wVz8wJY79xzxgZ/SuSWGq4ePMpxSa5Xbrf5fidDjzNKUJX3V1Y9J8L6zYXeqXUFrcCcmNDuiUsgwWzlgNo6jvRUPgyO4hlkguL66W5C7prG6tkRlHRWV1ADD3GRzRX0WAoeww8ab6f538jy68+eo2drWTf6BZag5kZWilPWSM4J+o6GiiuirRp1Y8tRXREKkqbvB2Zl/8IXF5m77Yf8Av0M/nmtWw0Gy09xIitJKOkkhyR9OwoornpZfhqUuaENfv/M2ni61RWlLQ1aKKK7DnP/Z" alt='cat.jpg' >
</body>
</html>
画像ファイルを削除しておく
$ rm ./cat.jpg
ウェブブラウザで確認
$ xdg-open ./cat_inline.html

20190811 02 08 14 32387

他にもLinuxネイテイブなものがありそうな気がします.(shell script + base64 コマンドでも多分行ける?)

環境
$ mono ~/Downloads/inlinehtmlimages-mono.exe -help|head -6|uniq

InlineHtmlImages v1.7
 Build:  3/31/2018
 Author: Dennis Lang
 Web:    home.comcast.net/~lang.dennis
$ dpkg-query -W mono-runtime chromium imagemagick libpango-1.0-0
chromium        76.0.3809.100-1
imagemagick     8:6.9.10.23+dfsg-2.1
libpango-1.0-0:amd64    1.42.4-7
libpango-1.0-0:i386     1.42.4-7
mono-runtime    5.18.0.240+dfsg-3
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64