Android 端末をセットアップしています.Nextcloid アプリで以前から QR code でも認証できそうだけどどうやって認証用の QR code を作るんだろうと思いながら手動で入力していました.
今回やり方に気づきました.
Android 端末をセットアップしています.Nextcloid アプリで以前から QR code でも認証できそうだけどどうやって認証用の QR code を作るんだろうと思いながら手動で入力していました.
今回やり方に気づきました.
Nextcloudが動かなくなりました.
アクセスすると以下のようなエラーメッセージが表示されて動きません.
Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.4.0". Nextcloud 内部サーバーエラー サーバーは要求を完了できませんでした。 再びこのようなことが起こった場合は、以下の技術情報をサーバー管理者に送ってください。 詳細は、サーバーのログを確認してください。 技術詳細 リモートアドレス: 180.131.110.140 リクエスト ID: QkMNcL7xRrQwxESLUU9Y
Nextcloud 21でセキュリティ&セットアップ警告を確認して修正しました.
Nextcloud 21.02から21.0.3にアップデートしました.
しかしアップデート終了後に動作しなくなってしまいました.非対応アプリがあったせいだったのでそれを無効化して復活しました.
ドキュメント共有サイトの無料枠を使うのが辛くなったのでNextcloudのURL共有でどうにかならないかなと思っています.
まずはpdfファイルをobjectタグで埋め込む方法を試しました.
この方法のデメリットはcgiを用意しないといけない,pdfを読む気がなくてもページを読み込むとpdfファイルがダウンロードされてしまいページ容量が大きくなってしまう.そしてNextcloudに「<pdfファイル名> が公開リンクからダウンロードされました」という通知がたくさん届いてしまいちょっとうるさいといった感じです.
途中のcgiでキャッシュしてプレビュー用の画像を用意してwebにはそのプレビュー画像を表示しておけばいいのではとcgiを書き換えていました.headで引っ張ってもダウンロードされた扱いになるしdbから実ファイルの場所を探してそこからダウンロードするように,サムネイルもdbから引っ張ってこれるかな?とかやってましたがふとそれだと標準の機能で出来るのではと気づいたので試してみました.
pdf共有URLの末尾に /preview
を付けるとプレビュー画像が表示されます.(標準では50MB以下のファイルの場合)
Note
|
共有URLが https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ のときのプレビュー画像URL https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ/preview |
これを利用してこんな感じに書くと,
[quote,'link:https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ[https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ]']
link:https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ[image:https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ/preview[width=100%]]
<div class="quoteblock">
<blockquote>
<a href="https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ"><span class="image"><img src="https://files.matoken.org/index.php/s/r7jEJdjiSRzb4
nZ/preview" alt="preview" width="100%"></span></a>
<div class="attribution">
— <a href="https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ">https://files.matoken.org/index.php/s/r7jEJdjiSRzb4nZ</a>
</div>
</blockquote>
</div>
こういうふうになりました.クリックするとNextcloudのpdfファイルプレビュー画面が開かれ,最近のモダンウェブブラウザではそのまま閲覧できます.
SpeakerDeckなんかでは埋め込んだページでそのまま読むことも出来ますがとりあえずこれならcgiも必要なくNextcloudの標準機能だけ(恐らくNC13以降で可能)でいけるのでそこそこいい感じではないかなと思います.
$ sudo -u www-data php occ --version
Nextcloud 20.0.8
$ dpkg-query -W php mariadb-server apache2
apache2 2.4.38-3+deb10u4
mariadb-server 1:10.3.27-0+deb10u1
php 2:7.3+69
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64
スライドやドキュメントを共有するのにSpeakerDeckやedockrを使っています.(SlideShareは無料アカウントで再アップロードができなくなってしまってから使わなくなりました.)
SpeakerDeckの無料での制限で100アップロードまででそろそろいっぱい,edockrはしばらくしたら消えてしまうということを最近知りました.
@edocr Uploaded documents are disappearing by themselves. Is this a specification of the Free plan?https://t.co/3X6WwOYcID
— matoken (@matoken1) March 5, 2021
Yes, sorta. There are 3 parts of the edocr service: Sharing, SEO indexing & Storage. Sharing is free. So, inactive documents in free accounts are deleted over time by our algorithms. The cost of Premium is so low we assume if people cared they would sign up. <9 cents/doc/year.
— edocr (@edocr) March 5, 2021
pdfファイルを共有するだけならNextcloudでのURL共有を使えばいいのですが,webに埋め込むことが出来ません.Nextcloudの機能やアプリにそういったものがあるといいのですが,セキュリティの問題から実装されていません.
とりあえず雑な方法ですが,こんな感じで実現してみました.
Nextcloudの公開URLの内容をpdfとして出力します.実行権を付けてcgiとして設定します.
#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;
use IO::Handle;
STDOUT->autoflush(1);
$ARGV[0] = "" unless defined $ARGV[0];
my $url = $ARGV[0];
if( $url !~ /\/download$/ ){
$url = $url . "/download";
}
print "Content-Type: application/pdf\n\n";
getprint($url);
とりあえずこんな感じでcgiの後ろにNextcloud公開URLを付けてアクセスするとブラウザでpdfを見ることができるようになりました.
上で作ったcgiをobjectタグで埋め込んでみるととりあえず埋め込みが出来ました.このとき height
は %
を指定してもサイズが変わらないようでした.(Debian sid amd64 の chromium 88.0.4324.146-1
, firefox 86.0.1-1
で確認)
<embed src="http://cgi.example.com/pdf.cgi?http://nextcloud.example.com/index.php/s/XXXXXXXXXXXXXXX" type="application/pdf" width="640px" height="480px">
とりあえずそれっぽいことは出来ましたが,この方法ではpdfを読まなくてもページ読み込み時にpdfを全部読み込んでしまうようなのであまりよろしくない感じです.このあたりはSpeakerdeckなどはちゃんとしてていいですね.
とりあえずはリンクで共有かな?
Nextcloudユーザが2要素認証を出来ないときにNextcloud管理者が48時間有効な1度限りのワンタイムコードを作成することができる「Two-Factor Admin Support」を試してみました.
$ sudo -u www-data php occ app:install twofactor_admin
occコマンドで導入しました.WebインターフェイスからでもOKです.
導入後,管理者アカウントで「設定」→「管理」→「セキュリティ」の「Two-Factor Admin」が出来ています.この「User ID」のテキストボックスにワンタイムコードを発行したいユーザIDを入力して「Generate」を押すと48時間有効なワンタイムコードが発行されます.このコードをユーザに伝えてログインしてもらいます.
$ sudo -u www-data php occ twofactorauth:admin:generate-code $USERID
There is an existing code that will be overwritten.
Generated new one-time code for test01: 163929
This code is valid for 48 hours.
occコマンドでも発行できます.
該当ユーザはユーザID/パスワードを入力した後の2要素認証で「Admin code」という選択肢が増えるのでそれを選びます.
管理者に教えてもらったワンタイムコードを入力してログインします.
TOTPのデバイスを壊してしまったり家に忘れてきたとかいったときに便利そうです.(数が少なければ)
$ sudo -u www-data php /var/www/files.matoken.org/occ app:list | grep twofactor_admin:
- twofactor_admin: 3.0.0
$ sudo -u www-data php occ --version
Nextcloud 20.0.8
$ dpkg-query -W php mariadb-server apache2
apache2 2.4.38-3+deb10u4
mariadb-server 1:10.3.27-0+deb10u1
php 2:7.3+69
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64
Nextcloudアプリのアップデートを行ったところmailの処理中にコケてしまったようです.
$ sudo -u www-data php occ app:update --all
richdocuments new version available: 3.7.17
richdocuments updated
forms new version available: 2.2.1
forms updated
mail new version available: 1.9.2
An unhandled exception has been thrown:
Error: Call to undefined method OCA\Mail\Db\MessageMapper::findWithEmptyMessageId() in /var/www/files.matoken.org/apps/mail/lib/Migration/AddMissingMessageIds.
php:55
Stack trace:
#0 /var/www/files.matoken.org/lib/private/Repair.php(112): OCA\Mail\Migration\AddMissingMessageIds->run(Object(OC\Repair))
#1 /var/www/files.matoken.org/lib/private/legacy/OC_App.php(1042): OC\Repair->run()
#2 /var/www/files.matoken.org/lib/private/legacy/OC_App.php(979): OC_App::executeRepairSteps('mail', Array)
#3 /var/www/files.matoken.org/lib/private/Installer.php(206): OC_App::updateApp('mail')
#4 /var/www/files.matoken.org/core/Command/App/Update.php(116): OC\Installer->updateAppstoreApp('mail', false)
#5 /var/www/files.matoken.org/3rdparty/symfony/console/Command/Command.php(255): OC\Core\Command\App\Update->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#6 /var/www/files.matoken.org/3rdparty/symfony/console/Application.php(1000): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#7 /var/www/files.matoken.org/3rdparty/symfony/console/Application.php(271): Symfony\Component\Console\Application->doRunCommand(Object(OC\Core\Command\App\Update), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#8 /var/www/files.matoken.org/3rdparty/symfony/console/Application.php(147): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#9 /var/www/files.matoken.org/lib/private/Console/Application.php(215): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#10 /var/www/files.matoken.org/console.php(100): OC\Console\Application->run()
#11 /var/www/files.matoken.org/occ(11): require_once('/var/www/files....')
#12 {main}mk@www6073uo:/var/www/files.matoken.org
再度実行すると処理は進んだようですが,縮退モードのような感じになっています.この状態でNextcloudのWebにアクセスするとアップデートを求められて利用できません.
$ sudo -u www-data php occ app:update --all
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
files_linkeditor new version available: 1.1.4
files_linkeditor updated
どうしたもんかととりあえず原因であろうmailをアップデートしようとするとすでに最新のようです.
次にmailを無効化してみました.するとNextcloud Webが利用できるようになりました.
一旦削除してインストールし直したほうが確実だろうなと思いつつmailを有効化するとNextcloudもmailも利用できるようになりました.
$ sudo -u www-data php occ app:update mail (1)
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
$ sudo -u www-data php occ app:disable mail (2)
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
mail 1.9.2 disabled
$ sudo -u www-data php occ app:enable mail (3)
mail 1.9.2 enabled
occ app:disable mail
の後 occ app:remove mail && occ app:install mail
したほうが確実だと思います.
ちなみにNextcloud Hub以外のあまりメジャーでないアプリなどをインストールしてうまく動かないときにもNextcloudが動かなくなることがあります.そういうときも occ app:disable
で復旧できるので覚えておくと助かります.
$ sudo -u www-data php occ app:list | grep \ mail:
- mail: 1.9.2
$ sudo -u www-data php occ --version
Nextcloud 20.0.8
$ dpkg-query -W php mariadb-server apache2
apache2 2.4.38-3+deb10u4
mariadb-server 1:10.3.27-0+deb10u1
php 2:7.3+69
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64
Nextcloudアプリの「A Two-Factor-Auth Provider for e-mail」を試してみました.これはNextcloud認証時にユーザID/パスワードで認証した後設定されたメールアドレスにワンタイムトークンが届いて,それを使って2要素目の認証ができるようになるものです.
$ sudo -u www-data php occ app:install twofactor_admin
twofactor_admin 3.0.0 installed
twofactor_admin enabled
まずは導入.occ
コマンドでインストールしました.WebIFからでもOKです.
2要素認証を有効にしたいユーザでNextcloud Webにログインして,「右上のアイコン」→「設定」→「個人情報」の「メール」に正しいメールアドレスが設定されているのを確認して,「セキュリティ」→「二要素認証」→「Email verification」の「Enable」を押して有効にします.
Note
|
電子メールアドレスが未登録だと以下のようなメッセージとなりました. Could not generate a code: user hoge does not exist |
するとトークンがNextcloudに設定したメールアドレスに送信されるのでメールを確認してトークンをテキストボックスに入力して,「Veryfi」を押して確認します.
うまく行きました.
一旦ログアウトしてログインしてみます.
ユーザID/パスワードで認証した後,「Email verification」の画面になります.メールが送信されているはずかので確認してそこに書かれているトークンを入力してログインします.
2要素認証ではTOTP以外にもSMS, Telegram, Signalなどもありますがそれぞれ設定が面倒です.電子メールであればユーザの設定は少ないので良さそうです.
$ sudo -u www-data php occ app:list | grep previewgenerator:
- previewgenerator: 3.1.1
$ sudo -u www-data php occ --version
Nextcloud 20.0.8
$ dpkg-query -W php mariadb-server apache2
apache2 2.4.38-3+deb10u4
mariadb-server 1:10.3.27-0+deb10u1
php 2:7.3+69
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64
Nextcloudでは画像ファイル,MP3ファイルのカバー,テキストファイルのプレビューを生成できます.既定値ではこの機能は有効になっていて,アクセス時にプレビューが生成されます.
Nextcloudを軽く出来ないかと config/config.php
ファイルに 'enable_previews' ⇒ false,
を設定して無効にしてみましたが不便です.
ということで再度プレビューを有効にしました.ついでにプレビューサイズを4096から1024に小さくしてプロバイダーを少し増やしてみました.
'enable_previews' => true, (1)
'preview_max_x' => 1024, (2)
'preview_max_y' => 1024, (3)
'preview_max_filesize_image' => 50, (4)
'enabledPreviewProviders' => [ (5)
'OC\Preview\PNG',
'OC\Preview\JPEG',
'OC\Preview\GIF',
'OC\Preview\HEIC',
'OC\Preview\BMP',
'OC\Preview\XBitmap',
'OC\Preview\MP3',
'OC\Preview\TXT',
'OC\Preview\MarkDown',
'OC\Preview\OpenDocument',
'OC\Preview\Krita',
'OC\Preview\PDF',
'OC\Preview\Postscript',
'OC\Preview\SVG',
'OC\Preview\TIFF',
'OC\Preview\Font',
],
true
4096
4096
50
''
で内容は,edit 2021-03-17)
スマホ写真やpdfはあらかた1MBを超えるので preview_max_filesize_image
は1MBから規定値の50MBに戻しました.
OC\Preview\BMP OC\Preview\GIF OC\Preview\HEIC OC\Preview\JPEG OC\Preview\MarkDown OC\Preview\MP3 OC\Preview\PNG OC\Preview\TXT OC\Preview\XBitmap OC\Preview\OpenDocument OC\Preview\Krita
その他の既定値以外のプロバイダー
OC\Preview\Illustrator OC\Preview\Movie OC\Preview\MSOffice2003 OC\Preview\MSOffice2007 OC\Preview\MSOfficeDoc OC\Preview\PDF OC\Preview\Photoshop OC\Preview\Postscript OC\Preview\StarOffice OC\Preview\SVG OC\Preview\TIFF OC\Preview\Font
そして Preview Generator というプレビューを事前生成してくれるアプリを試してみようとしましたが,暗号化を有効にしていると利用できませんでした.パスワード入力してプレビュー生成ができると便利かもですがなんにせよ自分以外のデータは触れないので微妙ですね.
Known issues
The app does not work with encryption enabled
$ sudo -u www-data php occ app:install previewgenerator (1) previewgenerator 3.1.1 installed previewgenerator enabled $ sudo -u www-data php /var/www/files.matoken.org/occ | grep preview$ -A4 (2) preview preview:delete_old Delete old preview folder (pre NC11) preview:generate-all Generate previews preview:pre-generate Pre generate previews preview:repair distributes the existing previews into subfolders $ sudo -u www-data php occ preview:generate-all (3) Encryption is enabled. Aborted. $ sudo -u www-data php occ app:remove previewgenerator (4) previewgenerator disabled previewgenerator 3.1.1 removed
$ sudo -u www-data php occ app:list | grep previewgenerator:
- previewgenerator: 3.1.1
$ sudo -u www-data php occ --version
Nextcloud 20.0.8
$ dpkg-query -W php mariadb-server apache2
apache2 2.4.38-3+deb10u4
mariadb-server 1:10.3.27-0+deb10u1
php 2:7.3+69
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
x86_64