Nostr という分散型SNSのプロトコルがあって最近良く見かけます.
このSNSの個人認識に秘密鍵と公開鍵のペアを作成してそれを利用します.鍵ペアは初回に自動生成されるのですが,公開鍵の文字列をたくさん計算して好みのアドレスが含まれたアドレスを掘るプログラムがあったので試してみました.
Nostr という分散型SNSのプロトコルがあって最近良く見かけます.
このSNSの個人認識に秘密鍵と公開鍵のペアを作成してそれを利用します.鍵ペアは初回に自動生成されるのですが,公開鍵の文字列をたくさん計算して好みのアドレスが含まれたアドレスを掘るプログラムがあったので試してみました.
最近Oracle Cloud VPSのFree Tier Always Free枠で遊んでいます.
今日はなんだかとても重くなりましたRAMが1GBあるのですが,9割以上利用していました.swapは未設定.swapを設定してみました.
Oracle Cloudですが大抵の環境でも同じように出来るはずです.
以下のエントリでipコマンドでネットワーク通信量が確認できました.
端末を起動してからの通信量は確認できますが,再起動したりするとデータ量はクリアされてしまいます.MRTGやZabbixなどを使うのは大げさな感じがします.
もう少しお手軽なものがないかなと少し探してvnStatというものを見つけたので今回試してみました.
cpufetchというscreenfetchインスパイアな感じのcpu情報表示ツールを見かけたので試してみました.
$ git clone https://github.com/Dr-Noob/cpufetch
$ cd cpufetch
$ make
$ ./cpufetch -s retro
################
####### #######
#### ####
### #### Name: Intel(R) Core(TM) i5-3320M CPU @ 2.60GHz
### ### Microarchitecture: Ivy Bridge
### ### Technology: 22nm
# ### ### ### Max Frequency: 3.300 GHz
## ### ######### ###### ###### ### ### Cores: 2 cores (4 threads)
## ### ### ### ### #### #### ### ### AVX: AVX
## ### ### ### ### ### ### ### ### FMA: No
## ### ### ### ### ########## ### #### L1i Size: 32KB (64KB Total)
## ### ### ### ### ### ### ##### L1d Size: 32KB (64KB Total)
## ## ### ### ##### ######### ## ### L2 Size: 256KB (512KB Total)
### L3 Size: 3MB
### Peak Performance: 52.80 GFLOP/s
#### ####
##### ##########
########## ################
###############################
標準のスタイルでテキストで貼り付けると真っ白になるので retro
です.通常の実行結果は以下に.
Nextcloud 18 がEoL になっていたので,Nextcloud 18.0.14 から Nextcloud 19.0.7 にアップグレードしました.
release date | end of life | current version | next version | |
---|---|---|---|---|
20 |
2020-10-03 |
2021-10 |
20.0.7 (2021-02-02) |
20.0.8 (2021-02-25) |
19 |
2020-06-03 |
2021-06 |
19.0.8 (2021-01-27) |
19.0.9 (2021-02-25) |
18 |
2020-01-16 |
2021-01 |
18.0.14 (2021-01-27) |
End of Life |
$ sudo -u www-data php $NEXTCLOUDPATH/occ app:update --all
$ sudo -u www-data php $NEXTCLOUDPATH/updater/updater.phar
$ sudo -u www-data php $NEXTCLOUDPATH/occ app:update --all
以前実行したときと比べて「セキュリティ&セットアップ警告」の内容が違っていたのでメモしておきます.
セキュリティ&セットアップ警告 サーバーのセキュリティとパフォーマンスにとって重要なことは、すべてが正確に設定されていることです。あなたの助けとなるよう、Nextcloudでは一部の自動チェックを行っています。詳細な情報は、リンク先のドキュメントを参照してください。 セットアップに関して警告がいくつかあります。 PHPのメモリ制限が推奨値の512MB以下です。 "Strict-Transport-Security" HTTPヘッダが最低でも "15552000" 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。 Webサーバーは適切にホスト名 "/.well-known/caldav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。 Webサーバーは適切にホスト名 "/.well-known/carddav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。 メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。 データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。 テーブル "oc_calendarobjects_props"のインデックス "calendarobject_calid_index"が見つかりません。 テーブル "oc_schedulingobjects"のインデックス "schedulobj_principuri_index"が見つかりません。 テーブル "oc_properties"のインデックス "properties_path_index"が見つかりません。 データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。"occ db:add-missing-columns"を実行することで、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。 テーブル "oc_comments" にオプションのカラム "reference_id" が存在しません。 このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。 intl bcmath gmp データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 'occ db:convert-filecache-bigint'を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。 filecache_extended.fileid mounts.storage_id mounts.root_id mounts.mount_id インストールガイド ↗を再確認して、 ログ にあるすべてのエラーや警告を確認してください。
このインスタンスには推奨されるPHPモジュールがいくつかありません。 パフォーマンスの向上と互換性の向上のために、それらをインストールすることを強くお勧めします。 intl bcmath gmp
該当パッケージを導入してhttpdを再読込します.
$ sudo apt install php-intl php-bcmath php-gmp (1)
$ sudo service apache2 reload (2)
「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。 テーブル "oc_calendarobjects_props"のインデックス "calendarobject_calid_index"が見つかりません。 テーブル "oc_schedulingobjects"のインデックス "schedulobj_principuri_index"が見つかりません。 テーブル "oc_properties"のインデックス "properties_path_index"が見つかりません。
メッセージの通りoccコマンドでインデックスを作成します.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.
$ sudo -u www-data php $NEXTCLOUDPATH/occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time...
calendarobjects_props table updated successfully.
Check indices of the schedulingobjects table.
Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time...
schedulingobjects table updated successfully.
Check indices of the oc_properties table.
Adding properties_path_index index to the oc_properties table, this can take some time...
oc_properties table updated successfully.
「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
データベースにはオプションのカラムがいくつかありません。大きなテーブルにカラムを追加するには時間がかかるため、オプションのカラムは自動的に追加されませんでした。"occ db:add-missing-columns"を実行することで、不足しているカラムはインスタンスの実行中に手動で追加することができます。カラムが追加されると、応答性や使い勝手が改善される可能性があります。 テーブル "oc_comments" にオプションのカラム "reference_id" が存在しません。
メッセージの通りoccコマンドでカラムを追加します.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.
$ sudo -u www-data php $NEXTCLOUDPATH/occ db:add-missing-columns
Check columns of the comments table.
Adding additional reference_id column to the comments table, this can take some time...
Comments table updated successfully.
「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
データベース内のいくつかの列で、big intへの変換が行われていません。 大きなテーブルでカラムタイプを変更すると時間がかかることがあるため、自動的には変更されませんでした。 'occ db:convert-filecache-bigint'を実行することによって、それらの保留中の変更は手動で適用できます。 この操作は、インスタンスがオフラインの間に行う必要があります。 詳細についてはこれに関するドキュメントページを読んでください。 filecache_extended.fileid mounts.storage_id mounts.root_id mounts.mount_id
メッセージの通りoccコマンドでbig intへの変換をします.メッセージそのままコピーすると:がマルチバイト文字になっているので注意しましょう.
途中時間がかかる旨のメッセージが表示されます.y
を指定することで処理を続行します.siteの規模や利用状況によって実行時間を考えましょう.
$ sudo -u www-data php $NEXTCLOUDPATH/occ db:convert-filecache-bigint
Following columns will be updated:
* filecache_extended.fileid
* mounts.storage_id
* mounts.root_id
* mounts.mount_id
This can take up to hours, depending on the number of files in your instance!
Continue with the conversion (y/n)? [n] y
「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
PHPのメモリ制限が推奨値の512MB以下です。
phpの memory_limit
の値を /etc/php/7.4/apache2/php.ini
を編集して修正します.その後httpdの再読込を行います.
$ sudo vim /etc/php/7.4/apache2/php.ini (1)
$ sudo git -C /etc diff /etc/php/7.4/apache2/php.ini (2)
diff --git a/php/7.4/apache2/php.ini b/php/7.4/apache2/php.ini
index ef89b713..407ee04d 100644
--- a/php/7.4/apache2/php.ini
+++ b/php/7.4/apache2/php.ini
@@ -406,7 +406,7 @@ max_input_time = 60
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
-memory_limit = 128M
+memory_limit = 512M
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Error handling and logging ;
$ php --php-ini /etc/php/7.4/apache2/php.ini -i | grep memory_limit (3)
memory_limit => 512M => 512M
$ sudo service apache2 reload (4)
「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
"Strict-Transport-Security" HTTPヘッダが最低でも "15552000" 秒に設定されていません。セキュリティを強化するには、セキュリティTips ↗で解説しているHSTSを有効にすることを推奨します。
$ sudo vi /etc/apache2/sites-available/nextcloud.conf (1)
$ sudo git -C /etc diff /etc/apache2/sites-available/nextcloud.conf (2)
diff --git a/apache2/sites-available/nextcloud.conf b/apache2/sites-available/nextcloud.conf
index 2844232c..4a064d52 100644
--- a/apache2/sites-available/nextcloud.conf
+++ b/apache2/sites-available/nextcloud.conf
@@ -135,6 +135,10 @@
# nokeepalive ssl-unclean-shutdown \
# downgrade-1.0 force-response-1.0
+ <IfModule mod_headers.c>
+ Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
+ </IfModule>
+
</VirtualHost>
</IfModule>
$ sudo apache2ctl configtest (3)
Syntax OK
$ sudo service apache2 reload (4)
「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
Webサーバーは適切にホスト名 "/.well-known/caldav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。 Webサーバーは適切にホスト名 "/.well-known/carddav" が引けるように設定されていません。より詳しい情報については、ドキュメントを参照ください。
専用のドメインではなくサブディレクトリ( nextcloud
)で運用しているNextcloud なので,ドメインのドキュメントルートに以下のような .htaccess
ファイルを用意します.caldav/carddavだけでなく一緒に他のものも設定しました.専用の(サブ)ドメインならこの問題は出ないと思います.
$ sudo -u www-data vi $HTTPROOTPATH/.htaccess (1)
$ cat $HTTPROOTPATH/.htaccess (2)
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule ^\.well-known/host-meta /nextcloud/public.php?service=host-meta [QSA,L]
RewriteRule ^\.well-known/host-meta\.json /nextcloud/public.php?service=host-meta-json [QSA,L]
RewriteRule ^\.well-known/webfinger /nextcloud/public.php?service=webfinger [QSA,L]
RewriteRule ^\.well-known/carddav /nextcloud/remote.php/dav/ [R=301,L]
RewriteRule ^\.well-known/caldav /nextcloud/remote.php/dav/ [R=301,L]
</IfModule>
.htaccess
ファイルを編集「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
メモリキャッシュが設定されていません。可能であれば、パフォーマンスを向上するため、memcacheを設定してください。より詳しい情報はドキュメントで参照できます。
A memcache is not required and you may safely ignore the warning if you prefer.
この設定は必須ではなさそうですが,RAMは余っているので設定します.
いくつか種類があるようですが,今回はAPCuを設定しました.
$ sudo apt install php-apcu (1)
$ sudo -u www-data vim $NEXTCLOUDPATH/config/config.php (2)
$ sudo git --git-dir=/var/git/nextcloud --work-tree=. diff config/config.php (3)
diff --git a/config/config.php b/config/config.php
index f62133e..62d137d 100644
--- a/config/config.php
+++ b/config/config.php
@@ -41,4 +41,5 @@ $CONFIG = array (
array (
),
'mail_sendmailmode' => 'smtp',
+ 'memcache.local' => '\OC\Memcache\APCu',
);
「セキュリティ&セットアップ警告」ページを再読込して警告が消えるのを確認します.
:)
今回のホストの環境はUbuntu 20.04 LTS amd64のapache httpd 2.4, mysql server 8, php 7.4です.
$ dpkg-query -W php7.4-common php7.4-apcu apache2 mysql-server
apache2 2.4.41-4ubuntu3.2
mysql-server 8.0.23-0ubuntu0.20.04.1
php7.4-apcu
php7.4-common 7.4.3-4ubuntu2.4
$ lsb_release -dr
Description: Ubuntu 20.04.2 LTS
Release: 20.04
$ uname -m
x86_64
この記事は 日本Androidの会秋葉原支部ロボット部 Advent Calendar 2020 の20日分の記事です.
日本Androidの会秋葉原支部ロボット部は現在月に一回勉強会を行い様々な話題で盛り上がっています.
次の勉強会はちょうど今日(20日)です.興味のある方は覗いてみてください.
センサーのログなどをアップロードするのに色々なwebサービスを使ったり,Googleスプレッドシートに書いたりしています.
便利なんだけどロックインになるのは嫌だなって思ったりします.
Nextcloudというファイル共有サービス+αなOSSがあります.アプリケーションを追加して機能を増やすことが出来ます.例えばテレビ電話や,オンラインオフィスとか,マップサービスとか様々なアプリがあります.
これを個人的に立てて便利に使っています
この中のアプリを眺めているとSensorloggerというセンサーのログを保存できそうなものを見つけたので試してみました.
まずNextcloudですが,とりあえず試すだけならsnapを利用するのがお手軽です.Raspberry Pi + Raspberry Pi OSなどでもOKです.
Debian sid amd64/Ubuntu 20.04 LTS/Raspberry Pi OS armhfでは以下の手順でOKでした.
$ sudo apt update && sudo apt upgrade (1)
$ sudo apt install snapd (2)
$ sudo snap install nextcloud (3)
snapd
パッケージを導入10分位待つと導入が終わります.ウェブブラウザにIPアドレスを入力するとセットアップ画面が表示されるので管理者ID/PASSWORDを設定します.
これでとりあえず使えるようになったと思います.
この後Sensorloggerを導入します.
管理者権限のアカウントでNextcloudの右上のメニューから「アプリ」を開きます.
次に上の検索バーに「Sensorlogger」とかの文字列で検索して「有効」ボタンを押して導入します.
Tip
|
Nextcloudのアプリケーションはコマンドラインから導入することも出来ます.$ sudo -u www-data occ app:install sensorlogger #通常導入した場合$ sudo /snap/bin/nextcloud.occ app:install sensorlogger #snapで導入した場合 |
ここからは一般ユーザでOKです.
Nextcloudの上部から「Sensorlogger」のアイコンをクリックするとSensorloggerの画面が表示されます.
はじめはデータがないのでまっさらです.「Device」辺りでデバイスの登録をするのかな?と思いましたが出来ません.
「Read SensorLogger Wiki Devices」と書かれているのでWikiを参照してみます.
データを送ると自動的にデバイスが出来るようです.Simple, Complexの2種類のデータタイプがあるようです.Simpleは温度,湿度のようでとりあえずこれを試してみます.
以下の辺りから post.php を持ってきて使います.このscriptはダミーのランダムな温度と湿度データを作ってSensourloggerにデータを投げます.
$NEXTCLOUDPATH/apps/sensorlogger/tests/curl/post.php
通常導入した場合/snap/nextcloud/current/htdocs/apps/sensorlogger/tests/curl/post.php
snapで導入した場合何箇所か書き換えます.
* $url = ` を自分のNextcloudのURLに変更します.
を
* `$array = array("deviceId" ⇒uuidgen
コマンドなどで生成したUUIDに変更します.
* $username =
をNextcloudの自分のユーザーに変更します.
* $token =
に「設定」「セキュリティ」ページの「デバイスとセッション」の一番下の「新しいアプリパスワードを作成」で作成したトークンに修正します.
そしてphpとphp-curlが必要なので導入します.
$ sudo apt install php-cli php-curl
この状態で post.php
を実行して成功すると以下のようなメッセージが帰ってきます.
$ php ./post.php
{"success":true,"message":"Sensor Log successfully stored","data":null}
Sensorloggerのページの List
を見るとエータがアップロードされているのが解ります :)
手動で実行するのは大変なのでcrontabにこんな感じで登録してみます.5分に一回データを送信します.
$ crontab -e (1)
$ crontab -l | grep post.php (2)
*/5 * * * * php ~/tmp/post.php 2&>1 > ~/tmp/post.php.log
同様にRaspberry Piの温度も送ってみます.温度の $temperature
を以下のような感じで書き換えて,UUIDも書き換えるとOK.これもcrontabに登録します.
$temperature = system( '/opt/vc/bin/vcgencmd measure_temp | awk -F "[=\']" \'{print $2 }\' | tr -d \'\n\'' );
しばらく動かしてからダッシュボードを設定するとこんな感じのチャートが表示できました.
密集してよくわからない部分はマウスドラッグで矩形選択するとその部分がズームされます.
という感じでとりあえず動きました.ドキュメントが未だ充実していな買ったり使い勝手も悪いですが最低限の機能はあるかなという感じです.
興味があったら試してみてください.
若しくはおすすめのアプリやサービスを教えてください.
最近使うPythonアプリはPython3が多くなっています.Python2のEoLが迫っているので正しいのですが,手元の環境では python
コマンドは python2
に向いています.python3
コマンドを叩けばいいのですが,これを python3
に向けられないかなと試してみました.
Raspberry Pi OS arm64(busterベース)でのPython確認してみます.python
コマンドは python2.7
を呼ぶようになっています.
$ python --version
Python 2.7.16
$ ls -l `which python`
lrwxrwxrwx 1 root root 7 3月 5 2019 /usr/bin/python -> python2
$ ls -l `which python2`
lrwxrwxrwx 1 root root 9 3月 5 2019 /usr/bin/python2 -> python2.7
$ ls -l `which python3`
lrwxrwxrwx 1 root root 9 3月 26 2019 /usr/bin/python3 -> python3.7
update-alternatives
で管理されてるのかな?と思いましたが設定がなさそうです.
$ update-alternatives --get-selections|grep -i ^python
update-alternatives
を手動で設定してみます.
これで python
コマンドが python3.7
を呼ぶようになりました.
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
update-alternatives: /usr/bin/python (python) を提供するために自動モードで /usr/bin/python2.7 を使います
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 2
update-alternatives: /usr/bin/python (python) を提供するために自動モードで /usr/bin/python3.7 を使います
$ ls -l `which python`
lrwxrwxrwx 1 root root 24 7月 28 08:47 /usr/bin/python -> /etc/alternatives/python
$ python --version
Python 3.7.3
$ update-alternatives --query python
Name: python
Link: /usr/bin/python
Status: auto
Best: /usr/bin/python3.7
Value: /usr/bin/python3.7
Alternative: /usr/bin/python2.7
Priority: 1
Alternative: /usr/bin/python3.7
Priority: 2
切り替えたいときはこんな感じで選択肢なおせばok.
$ sudo update-alternatives --config python
alternative python (/usr/bin/python を提供) には 2 個の選択肢があります。
選択肢 パス 優先度 状態
------------------------------------------------------------
* 0 /usr/bin/python3.7 2 自動モード
1 /usr/bin/python2.7 1 手動モード
2 /usr/bin/python3.7 2 手動モード
現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:
Debian asid amd64, Ubuntu 20.04 LTS amd64 でも設定してみました.
$ update-alternatives --query python
Name: python
Link: /usr/bin/python
Status: auto
Best: /usr/bin/python3.8
Value: /usr/bin/python3.8
Alternative: /usr/bin/python2.7
Priority: 1
Alternative: /usr/bin/python3.7
Priority: 2
Alternative: /usr/bin/python3.8
Priority: 3
$ update-alternatives --query python
Name: python
Link: /usr/bin/python
Status: auto
Best: /usr/bin/python3.8
Value: /usr/bin/python3.8
Alternative: /usr/bin/python2.7
Priority: 1
Alternative: /usr/bin/python3.5
Priority: 2
Alternative: /usr/bin/python3.8
Priority: 3
てことで python
コマンドが python3
になりました.しかしシステムワイドな設定なのでシステムのプログラムなどで問題が出るかもしれないですね.
問題が起こったらpython2に戻しましょう.
$ dpkg-query -W python python3
python 2.7.16-1
python3 3.7.3-1
$ lsb_release -dr
Description: Debian GNU/Linux 10 (buster)
Release: 10
$ uname -m
aarch64
$ cat /proc/device-tree/model&&echo
Raspberry Pi 3 Model B Rev 1.2
$ dpkg-query -W python python3 python3.7
python 2.7.17-2
python3 3.8.2-3
python3.7 3.7.7-1+b1
$ lsb_release -dr
Description: Debian GNU/Linux bullseye/sid
Release: unstable
$ uname -m
x86_64
$ dpkg-query -W python python3 python3.7
python 2.7.17-1
python3 3.8.2-0ubuntu2
python3.7
$ lsb_release -dr
Description: Ubuntu 20.04.1 LTS
Release: 20.04
$ uname -m
x86_64
2020-07-23低レベル勉強会に参加しました.Zoom.usでの開催でした.
内容はLinux名刺的なものを開発しようという内容で,リファレンスとしてSDカードサイズの小さなLinuxの動作するarmコンピュータのSipeed Lichee Nanoを使いました.
欲しい場合は1000円ちょいくらいからで入手できそうです.
Lichee Nanoを持っていない人はリモートで触れるようにしてあったので持っていない私も楽しめました.
このリモート開発の仕組みはLichee NanoとRaspberry PiをUSB経由のUARTで接続し,Raspberry PiでGNU screenを起動,ssh経由でGNU screenに繋いで操作という感じです.
GNU screenをGotty等にするとウェブブラウザで参加できてちょっと便利かもと思ったりも.(GoTTYは開発止まってるように見えるから別のもののほうがいいかもしれない)
Lichee Nanoで何かを動かしたい.armだけどarmhf動くのかな?とりあえずなにか転送して動かしてみようと.
とりあえずDebianのarmhfバイナリをuuencodeしてコピペで転送してみます.これが動けばDebianのパッケージ群が利用できるかもだけど…….
まずは簡単そうなfortuneを試します.
$ apt download -t armhf fortune-mod
$ unar fortune-mod_1.99.1-7+b1_armhf.deb
$ cd fortune-mod_1.99.1-7+b1_armhf
$ tar xf data.tar.xz
$ cd usr/games
Lichee Nanoはserialで接続されていて,Internetには繋がっていないのでバイナリファイルの転送にはuudecode/uuencodeを使いました.久々です.
手元のGNU sharutils 4.15.2のuudecodeにはbase64を使う -m, --base64
があるので良さそう.と思ったけどLichee Nanoの方はbusyboxのもので非対応でした.
$ gzip -c fortune | uuencode fortune.gz > fortune.gz.uu
$ cat fortune.gz.uu | xclip
# cat | uudecode #ここでクリップボードから貼り付け
# zcat fortune.gz > fortune
# rm fortune.gz
そして……
# ./fortune
-sh: ./fortune: not found
# ldd ./fortune
checking sub-depends for 'not found'
checking sub-depends for '/lib/libc.so.6'
/lib/ld-linux.so.3 (0xb6fa0000)
librecode.so.0 => not found (0x00000000)
libc.so.6 => /lib/libc.so.6 (0x00000000)
/lib/ld-linux.so.3 => /lib/ld-linux.so.3 (0x00000000)
これを動かすのはダイナミックリンクされているものを用意してあげないといけないのでストレージの容量的に難しいですね.
ここではgzipで圧縮しましたが,Lichee Nanoのbusyboxにxzがありました.gzipよりxzにしたほうが小さくなりますね.試してみるとこんな感じでした.$ xz -c fortune | uuencode fortune.xz > fortune.xz.uu
-rw-r--r-- 1 matoken matoken 22368 Jul 23 15:11 fortune #元ファイル
-rw-r--r-- 1 matoken matoken 30844 Jul 23 14:58 fortune.uu #uudecode
-rw-r--r-- 1 matoken matoken 14975 Jul 23 15:08 fortune.gz.uu #zip + uudecode
-rw-r--r-- 1 matoken matoken 13047 Jul 23 15:47 fortune.xz.uu #xz + uudecode
そういえばあまり有名ではないですがbasE91なんてものもあります.base64よりサイズが小さくなりますが導入からやらないといけないのでちょっと面倒.
Hello worldを試してみます.適当にプログラムを用意してスタティックリンクでコンパイルしてみます.
$ cat hello.c
#include <stdio.h>
int
main(void)
{
printf("Hello, world!\n");
return 0;
}
$ gcc -static ./hello.c
$ ./a.out
Hello, world!
$ ls -l a.out
-rwxr-xr-x 1 pi pi 571120 7月 23 16:18 a.out
でかい……
とりあえずでかいのはおいといてこれだとarm64なので動くはずがない.ということでクロスコンパイル環境を用意します.
今回試したホストはDebian sid amd64/Ubuntu 20.04 LTS arm64/Raspberry Pi OS arm64です.いずれも同じ手順でOKでした.
crossbuild-essential-<arch>
パッケージで各種アーキテクチャの環境が導入できるようです.
$ apt-cache search crossbuild-essential-
crossbuild-essential-amd64 - Informational list of cross-build-essential packages
crossbuild-essential-arm64 - Informational list of cross-build-essential packages
crossbuild-essential-armel - Informational list of cross-build-essential packages
crossbuild-essential-armhf - Informational list of cross-build-essential packages
crossbuild-essential-i386 - Informational list of cross-build-essential packages
crossbuild-essential-powerpc - Informational list of cross-build-essential packages
crossbuild-essential-ppc64el - Informational list of cross-build-essential packages
crossbuild-essential-s390x - Informational list of cross-build-essential packages
crossbuild-essential-mips - Informational list of cross-build-essential packages
crossbuild-essential-mips64 - Informational list of cross-build-essential packages
crossbuild-essential-mips64el - Informational list of cross-build-essential packages
crossbuild-essential-mips64r6 - Informational list of cross-build-essential packages
crossbuild-essential-mips64r6el - Informational list of cross-build-essential packages
crossbuild-essential-mipsel - Informational list of cross-build-essential packages
crossbuild-essential-mipsr6 - Informational list of cross-build-essential packages
crossbuild-essential-mipsr6el - Informational list of cross-build-essential packages
沢山あります.今回はarmlf/armhfの crossbuild-essential-armel
, crossbuild-essential-armhf
を導入しました.
$ sudo apt install crossbuild-essential-armel crossbuild-essential-armhf
gccだけでいい場合はarmlfは gcc-arm-linux-gnueabi
,armhfは gcc-arm-linux-gnueabihf
だけでOKです.
まずは arm-linux-gnueabihf-gcc
を使ってarmhfのバイナリを作ります.
$ /usr/bin/arm-linux-gnueabihf-gcc -static ./hello.c
$ strip a.out
$ xz -c a.out | uuencode a.out.xz > a.out.xz.uu
armhfは駄目そうです.
# cat | uudecode
^d
# xzcat ./a.out.xz > ./a.out
# chmod +x ./a.out
# ./a.out
Segmentation fault
次は gcc-arm-linux-gnueabi
でarmlfのバイナリを作って試すと動きました.
$ /usr/bin/arm-linux-gnueabi-gcc -static ./hello.c
$ strip a.out
$ xz -c a.out | uuencode a.out.xz > a.out.xz.uu
# cat | uudecode
^d
# xzcat ./a.out.xz > ./a.out
# chmod +x ./a.out
# ./a.out
Hello, world!
# /usr/bin/time -f "%M KB" ./a.out
Hello, world!
2144 KB
この辺りで今回は時間切れ.次回の同じような感じになりそうです.興味のある方は以下のページから.
とりあえずarmelのバイナリが動くようなのがわかったので面白そうな小さなプログラムを試そうかなと思っています.cowsayとか好きなんだけどこれはPerlなので容量的に難しそう.とりあえずfortuneあたりかな?
以前PQI Air PenでやったようにSD cardを用意してそこにDebian armlf環境を展開してchrootとかもできそうです.
ファイル同期にとても便利なrsyncの3.2.0がリリースされました.
バグフィクスや,いくつかの新機能が入ったようなので少し試してみました.
※1. この記事投稿時には 3.2.2 が出ています.
※2. 鹿児島Linux勉強会 2020.06で発表したものと同じ内容です.
$ sudo apt build-dep rsync
$ sudo apt install libxxhash-dev libzstd-dev liblz4-dev
$ wget -c \
https://download.samba.org/pub/rsync/rsync-3.2.0.tar.gz \
https://download.samba.org/pub/rsync/rsync-3.2.0.tar.gz.asc \
https://opencoder.net/WayneDavison.key
$ gpg2 --import ./WayneDavison.key
$ gpg2 --verify ./rsync-3.2.0.tar.gz.asc
$ tar tvzf ./rsync-3.2.0.tar.gz
$ tar xzf ./rsync-3.2.0.tar.gz
$ cd rsync-3.2.0
$ ./configure --help
$ ./configure
$ make
$ ./rsync --version
rsync version 3.2.0 protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append,
ACLs, xattrs, iconv, symtimes, prealloc, SIMD
Checksum list:
xxh64 (xxhash) md5 md4 none
Compress list:
zstd lz4 zlibx zlib none
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
Note
|
gpg鍵は次から入手できます.rsync download |
Raspberry Pi OS arm64の場合 libzstd-dev
のバージョンが 1.3.8+dfsg-3
と少し古くbuildに失敗します. ./configure --disable-zstd
としてzstdを無効にするか,sourceから zstd 1.4.5
を導入することでbuild出来ました.
$ make
:
token.c: In function ‘init_compression_level’:
token.c:73:40: warning: implicit declaration of function ‘ZSTD_minCLevel’; did you mean ‘ZSTD_maxCLevel’? [-Wimplicit-function-declaration]
min_level = skip_compression_level = ZSTD_minCLevel();
^~~~~~~~~~~~~~
ZSTD_maxCLevel
token.c: In function ‘send_zstd_token’:
token.c:685:2: error: unknown type name ‘ZSTD_EndDirective’; did you mean ‘ZSTD_DDict’?
ZSTD_EndDirective flush = ZSTD_e_continue;
^~~~~~~~~~~~~~~~~
ZSTD_DDict
token.c:685:28: error: ‘ZSTD_e_continue’ undeclared (first use in this function)
ZSTD_EndDirective flush = ZSTD_e_continue;
^~~~~~~~~~~~~~~
token.c:685:28: note: each undeclared identifier is reported only once for each function it appears in
token.c:701:3: warning: implicit declaration of function ‘ZSTD_CCtx_setParameter’ [-Wimplicit-function-declaration]
ZSTD_CCtx_setParameter(zstd_cctx, ZSTD_c_compressionLevel, do_compression_level);
^~~~~~~~~~~~~~~~~~~~~~
token.c:701:37: error: ‘ZSTD_c_compressionLevel’ undeclared (first use in this function); did you mean ‘skip_compression_level’?
ZSTD_CCtx_setParameter(zstd_cctx, ZSTD_c_compressionLevel, do_compression_level);
^~~~~~~~~~~~~~~~~~~~~~~
skip_compression_level
token.c:751:13: error: ‘ZSTD_e_flush’ undeclared (first use in this function); did you mean ‘ZSTD_DCtx_s’?
flush = ZSTD_e_flush;
^~~~~~~~~~~~
ZSTD_DCtx_s
token.c:753:8: warning: implicit declaration of function ‘ZSTD_compressStream2’; did you mean ‘ZSTD_compressStream’? [-Wimplicit-function-declaration]
r = ZSTD_compressStream2(zstd_cctx, &zstd_out_buff, &zstd_in_buff, flush);
^~~~~~~~~~~~~~~~~~~~
ZSTD_compressStream
$ cd ..
$ sudo apt remove libzstd-dev
$ wget https://github.com/facebook/zstd/releases/download/v1.4.5/zstd-1.4.5.tar.gz \
https://github.com/facebook/zstd/releases/download/v1.4.5/zstd-1.4.5.tar.gz.sha256
$ sha256sum -c ./zstd-1.4.5.tar.gz.sha256
$ tar tvf ./zstd-1.4.5.tar.gz | lv
$ tar xf ./zstd-1.4.5.tar.gz
$ cd zstd-1.4.5
$ make
$ sudo make install
$ cd ../rsync-3.2.0
$ ./configure && make
Debian sid amd64 環境にはすでに降ってきているのでパッケージから導入するだけでOKです.
$ sudo apt install rsync
$ rsync --version
rsync version 3.2.0 protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append,
ACLs, xattrs, iconv, symtimes, prealloc, SIMD
Checksum list:
xxh64 (xxhash) md5 md4 none
Compress list:
zstd lz4 zlibx zlib none
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
$ dpkg-query -W rsync
rsync 3.2.0-1
ってことで試せるようになりました.NEWSを見てみます.
Avoid a hang when an overabundance of messages clogs up all the I/O buffers.
このバグ修正がちょっと気になります.fat32の制限に引っかかったときに帰ってこない問題もこれで解決してるかも?未確認.
チェックサム形式を選べるようになったようです.現在選択できるのは xxh64/md5/md4
の3種類 or none
or auto
(既定値)
o auto (the default) o xxh64 (aka xxhash) o md5 o md4 o none
--version
にも出力されます.
$ rsync --version | grep Checksum -A1
Checksum list:
xxh64 (xxhash) md5 md4 none
configure option に --disable-xxhash
がありました.
--disable-xxhash disable xxhash checksums
環境変数 RSYNC_CHECKSUM_LIST
でも指定できます.オプション --checksum-choice
がある場合はオプションのほうが優先なようです.
ちなみに --checksum-choice
オプションに対応していない 3.1.3
に対して xxh64
を向けて叩いてみると以下のようなエラーになりました.(md4
, md5
はok)
$ rsync --checksum-choice=xxh64 -avc ./* user@remote:/tmp/
unknown checksum name: xxh64
rsync error: requested action not supported (code 4) at checksum.c(73) [server=3.1.3]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.2.0]
時間がどのくらい変わるかちょうど転がっていたkernel source(小さいファイルが沢山)で試してみました.はじめ普通に同期した後,キャッシュクリアして md4
, md5
, xxh64
で試してみました.思ったより差が出ない感じ?
$ find ./linux-5.6 | wc -l
82114
$ du -ms ./linux-5.6
1310 ./linux-5.6
$ rsync --checksum-choice=auto -ac ./linux-5.6 /tmp/
$ sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches ; time rsync --checksum-choice=md4 -ac ./linux-5.6 /tmp/
3
real 0m52.393s
user 0m5.051s
sys 0m12.246s
$ sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches ; time rsync --checksum-choice=md5 -ac ./linux-5.6 /tmp/
3
real 0m57.716s
user 0m6.976s
sys 0m13.486s
$ sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches ; time rsync --checksum-choice=xxh64 -ac ./linux-5.6 /tmp/
3
real 1m5.520s
user 0m2.507s
sys 0m13.625s
大きめのファイルでも試してみました.4GB程のisoファイル1つです.md4
, md5
はあまり代わりませんが,xxh64
はかなり高速ですね.
$ ls -s ./Parrot-security-4.9.1_x64.iso*
3909164 ./Parrot-security-4.9.1_x64.iso 3909164 ./Parrot-security-4.9.1_x64.iso2
$ sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches ; time rsync --checksum-choice=md4 -ac ./Parrot-security-4.9.1_x64.iso ./Parrot-security-4.9.1_x
64.iso2
3
real 0m23.276s
user 0m10.601s
sys 0m4.387s
$ sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches ; time rsync --checksum-choice=md5 -ac ./Parrot-security-4.9.1_x64.iso ./Parrot-security-4.9.1_x64.iso2
3
real 0m28.150s
user 0m16.945s
sys 0m4.399s
$ sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches ; time rsync --checksum-choice=xxh64 -ac ./Parrot-security-4.9.1_x64.iso ./Parrot-security-4.9.1_x64.iso2
3
real 0m12.767s
user 0m1.375s
sys 0m4.060s
この辺の速度は環境により大分変わると思うので参考程度に.
--compress
オプション利用時の圧縮形式を指定できるようです.
圧縮形式はrsync 3.2.0 同士では zlibx
形式が zlib
形式よりも優先されるようです.
選択できるオプションは zstd, lz4, zlibx, zlib, none
のようです.
o zstd
o lz4
o zlibx
o zlib
o none
rsync --version
でも確認できます.
$ rsync --version | grep Compress -A1
Compress list:
zstd lz4 zlibx zlib none
configure oprion に --disable-zstd
, --disable-lz4
があります.
--disable-zstd disable zstd compression
--disable-lz4 disable LZ4 compression
環境変数 RSYNC_COMPRESS_LIST
でも指定できるようです.
未対応の 3.1.3 に対して指定すると unknown option
と言われます.
$ time rsync --compress-choice=zstd --compress -a ./hoge mk@x201i.local:/tmp/
rsync: on remote machine: --compress-choice=zstd: unknown option
rsync error: syntax or usage error (code 1) at main.c(1596) [server=3.1.3]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(235) [sender=3.2.0]
こちらも簡単にベンチを.でもWi-Fi環境だし参考程度に.
$ ssh user@remote rm -rf ~/tmp/linux-5.6; echo 3 | sudo tee /proc/sys/vm/drop_caches; time rsync --compress-choice=zstd --compress -a --rsync-path=~/src/rsync-3.2.0/rsync ~/src/linux-5.6 user@remote:~/tmp/
3
real 4m38.921s
user 0m24.463s
sys 0m7.182s
$ ssh user@remote rm -rf ~user/tmp/linux-5.6; echo 3 | sudo tee /proc/sys/vm/drop_caches; time rsync --compress-choice=lz4 --compress -a --rsync-path=~/src/rsync-3.2.0/rsync ~/src/linux-5.6 user@remote:~/tmp/
3
real 9m28.829s
user 0m4.878s
sys 0m6.177s
$ ssh user@remote rm -rf ~user/tmp/linux-5.6; echo 3 | sudo tee /proc/sys/vm/drop_caches; time rsync --compress-choice=zlibx --compress -a --rsync-path=~/src/rsync-3.2.0/rsync ~/src/linux-5.6 user@remote:~/tmp/
3
real 5m21.702s
user 0m46.740s
sys 0m6.541s
$ ssh user@remote rm -rf ~user/tmp/linux-5.6; echo 3 | sudo tee /proc/sys/vm/drop_caches; time rsync --compress-choice=zlib --compress -a --rsync-path=~/src/rsync-3.2.0/rsync ~/src/linux-5.6 user@remote:~/tmp/
3
real 5m28.722s
user 0m45.861s
sys 0m6.381s
$ ssh user@remote rm -rf ~user/tmp/linux-5.6; echo 3 | sudo tee /proc/sys/vm/drop_caches; time rsync --compress-choice=none -a --rsync-path=~/src/rsync-3.2.0/rsync ~/src/linux-5.6 user@remote:~/tmp/
3
real 22m56.712s
user 0m1.848s
sys 0m7.323s
チェックサムと圧縮の詳細を表示するオプションのようです.どのアルゴリズムを利用しているのかが確認できます.
Client negotiated checksum: xxh64 Client compress: zstd (level 3)
--debug=OPTS
を使うとリモートのrsyncにデバッグオプションを送らなくなるようです.これによりクライアント側とサーバ側で異なるデバッグレベルを指定できるようになったそうです.
リモート側にオプションを送る場合には -M—debug=OPTS
rsyncプロセスに SIGINFO
& SIGVTALRM
シグナルを送信することでステータスを表示できるようになったようです.Linuxは SIGINFO
に対応していないので, SIGVTALRM
を試しました.
SIGVTALRM
を送信$ pkill -SIGVTALRM rsync
linux-5.6/arch/sparc/lib/lshrdi3.S
114,384,392 81% 931.12kB/s 0:01:59 (xfr#21058, ir-chk=1030/23451)
指定ユーザ/グループ権限でファイルをコピーするようです.
$ ls -Al /tmp/rsync-test/
total 0
-rw-r--r-- 1 matoken matoken 0 Jun 25 18:50 matokenfile
-rw-r--r-- 1 root root 0 Jun 25 18:51 root
-rw-r--r-- 1 www-data www-data 0 Jun 25 18:51 www-data
$ sudo ./rsync -a /tmp/rsync-test/ /tmp/rsync-test2
$ ls -lA /tmp/rsync-test2
total 0
-rw-r--r-- 1 matoken matoken 0 Jun 25 18:50 matokenfile
-rw-r--r-- 1 root root 0 Jun 25 18:51 root
-rw-r--r-- 1 www-data www-data 0 Jun 25 18:51 www-data
--copy-as=matoken
を指定するとすべてmatokenになる$ sudo \rm -rf /tmp/rsync-test2
$ sudo ./rsync --copy-as=matoken -a /tmp/rsync-test/ /tmp/rsync-test2
$ ls -lA /tmp/rsync-test2
total 0
-rw-r--r-- 1 matoken matoken 0 Jun 25 18:50 matokenfile
-rw-r--r-- 1 matoken matoken 0 Jun 25 18:51 root
-rw-r--r-- 1 matoken matoken 0 Jun 25 18:51 www-data
--version
の短いオプションとして -V
が入りました.
$ ./rsync --help|grep -- -V
--version, -V print the version + other info and exit
$ ./rsync --help|grep \-V
grep (GNU grep) 3.4
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by Mike Haertel and others; see
<https://git.sv.gnu.org/cgit/grep.git/tree/AUTHORS>.
ipv4, ipv6 を指定したいときに rsh='ssh -4'
とするより便利な --ipv4
, -4
, --ipv6
, -6
オプションが入りました.
-6
を指定して失敗する$ rsync -avc6 ./ user@remote:/tmp/
ssh: Could not resolve hostname remote: Name or service not known
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: unexplained error (code 255) at io.c(235) [sender=3.2.1]
Nextcloud導入が面倒?snapを使うとこれだけでGoogleDocみたいなことができます(Debian sid amd64/Ubuntu 20.04 LTSで確認済み).
$ sudo apt update && sudo apt upgrade
$ sudo apt install snapd
$ sudo snap install nextcloud
$ sudo /snap/bin/nextcloud.occ app:install documentserver_community
$ sudo /snap/bin/nextcloud.occ app:install onlyoffice
簡単に説明していきます.
$ sudo apt update && sudo apt upgrade
$ sudo apt install snapd
$ snap find nextcloud
Name Version Publisher Notes Summary
nextcloud 18.0.4snap3 nextcloud✓ - Nextcloud Server - A safe home for all your data
spreedme 0.29.5snap1 nextcloud✓ - Spreed.ME audio/video calls and conferences feature for the Nextcloud Snap
onlyoffice-desktopeditors 5.5.1 onlyoffice✓ - A comprehensive office suite for editing documents, spreadsheets and presentations
qownnotes 20.6.2 pbek - Plain-text file markdown note taking with Nextcloud / ownCloud integration
nextcloud-port8080 1.01 arcticslyfox - Nextcloud Server
nextcloud-snap-abacao 11.0.3snap4 abacao - Nextcloud Server
nextcloud-nextant 11.0.0snap3 rmescandon - Nextcloud Server + search support
nextcloud-abacao 11.0.3snap4 abacao - Nextcloud Server
cashbox-nextcloud 11.0.2snap2 cashbox - Nextcloud Server for www.cashBOX.plus
nextcloudsnap 12.0.4snap1 oscarbrolin - Nextcloud Server - A safe home for all your data
ghostcloud 0.9.5 beidl - A modern cross-platform client for Nextcloud, ownCloud, WebDav.
htxucloud 12.0.3snap7 htxu - Nextcloud Server
carnet 0.22.1 alexandre-roux-m - Powerful note taking app with sync, online editor and android app
opentodolist 3.23.0 mhoeher - Todo list and note taking application
solr 0.1 rmescandon - Starts up solr as forking daemon
mdns-hostname 0.0.1 welike - mDNS mini-daemon to published hostname.local
nextcloud-stondino 15.0.10snap3+git1.ff25cb9 zmusselman - Nextcloud Server - A safe home for all your data
vmcloud-nextcloud 1.0.0 victoriususm - Nextcloud 16.0.3 Optimized-Boosted
feedreader 0+git.9ac478f7 ken-vandine - RSS client for various webservices
test003-nc 13.0.4.snap1 reinism - Nextcloud Server - A safe home for all your data
$ snap info nextcloud
name: nextcloud
summary: Nextcloud Server - A safe home for all your data
publisher: Nextcloud*
store-url: https://snapcraft.io/nextcloud
contact: https://github.com/nextcloud/nextcloud-snap
license: unset
description: |
Where are your photos and documents? With Nextcloud you pick a server of
your choice, at home, in a data center or at a provider. And that is where
your files will be. Nextcloud runs on that server, protecting your data and
giving you access from your desktop or mobile devices. Through Nextcloud
you also access, sync and share your existing data on that FTP drive at
school, a Dropbox or a NAS you have at home.
commands:
- nextcloud.disable-https
- nextcloud.enable-https
- nextcloud.export
- nextcloud.import
- nextcloud.manual-install
- nextcloud.mysql-client
- nextcloud.mysqldump
- nextcloud.occ
services:
nextcloud.apache: simple, enabled, active
nextcloud.mdns-publisher: simple, enabled, active
nextcloud.mysql: simple, enabled, active
nextcloud.nextcloud-cron: simple, enabled, active
nextcloud.nextcloud-fixer: simple, enabled, inactive
nextcloud.php-fpm: simple, enabled, active
nextcloud.redis-server: simple, enabled, active
nextcloud.renew-certs: simple, enabled, active
snap-id: njObIbGQEaVx1H4nyWxchk1i8opy4h54
tracking: latest/stable
refresh-date: yesterday at 21:53 JST
channels:
latest/stable: 18.0.4snap4 2020-06-08 (21413) 264MB -
latest/candidate: ^
latest/beta: 18.0.4snap4+git5.31f0acd 2020-06-09 (21469) 264MB -
latest/edge: master-2020-06-10 2020-06-10 (21487) 267MB -
18/stable: 18.0.4snap4 2020-06-08 (21413) 264MB -
18/candidate: ^
18/beta: ^
18/edge: 18-2020-06-10 2020-06-10 (21482) 265MB -
17/stable: 17.0.6snap1 2020-05-03 (20616) 229MB -
17/candidate: ^
17/beta: 17.0.6snap1+git10.8f765f8 2020-06-09 (21474) 249MB -
17/edge: 17-2020-06-10 2020-06-10 (21483) 250MB -
16/stable: 16.0.11snap1 2020-06-08 (21459) 225MB -
16/candidate: ^
16/beta: ^
16/edge: ^
15/stable: 15.0.14snap1 2020-01-20 (18374) 216MB -
15/candidate: ^
15/beta: ^
15/edge: ^
14/stable: 14.0.10snap1 2019-05-04 (13208) 202MB -
14/candidate: ^
14/beta: ^
14/edge: ^
13/stable: 13.0.12snap1 2019-05-03 (13155) 193MB -
13/candidate: ^
13/beta: ^
13/edge: ^
12/stable: 12.0.13snap1 2019-01-07 (10632) 206MB -
12/candidate: ^
12/beta: ^
12/edge: ^
11/stable: 11.0.8snap1 2018-05-10 (6942) 202MB -
11/candidate: ^
11/beta: ^
11/edge: ^
いくつかでてきますが,Publisherが nextcloud
になっている公式のstableを使います.ちなみにこのコマンドを叩いた時点で19.0.0や18.0.5が出ていてこの記事執筆時点で18.0.6が出ています.ちょっと反映が遅いみたいですね.
$ sudo snap install nextcloud
しばらく時間がかかりますが,これでNextcloudと関連のApache httpd/PHP/MySQL等が設定済みの状態で導入されます.
$ ps aux | grep -i nextcloud
root 17628 0.0 0.0 1872 196 ? Ss 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/delay-on-failure mdns-publisher nextcloud
root 17615 0.0 0.1 1872 1168 ? Ss 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/nextcloud-cron
root 17657 0.0 0.1 1872 1200 ? Ss 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/renew-certs
root 17681 0.0 0.1 1872 1272 ? Ss 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/start-php-fpm
root 17712 0.0 0.1 1872 1216 ? Ss 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/start-redis-server
root 17765 0.0 0.6 258120 6008 ? Sl 00:10 0:00 mdns-publisher nextcloud
root 17987 0.0 0.1 1872 1200 ? Ss 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/run-httpd -k start -DFOREGROUND
root 18069 0.1 0.1 1872 1168 ? Ss 00:10 0:01 /bin/sh /snap/nextcloud/21169/bin/start_mysql
root 18111 0.0 0.1 1872 1100 ? S 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/mysqld_safe --datadir=/var/snap/nextcloud/21169/mysql --pid-file=/tmp/pids/mys
ql.pid --lc-messages-dir=/snap/nextcloud/21169/share --socket=/tmp/sockets/mysql.sock
root 18128 0.9 22.0 1815000 210060 ? Sl 00:10 0:08 /snap/nextcloud/21169/bin/mysqld --basedir=/snap/nextcloud/21169 --datadir=/var/snap/nextcloud/21169/mysql --plu
gin-dir=/snap/nextcloud/21169/lib/plugin --lc-messages-dir=/snap/nextcloud/21169/share --log-error=error.log --pid-file=/tmp/pids/mysql.pid --socket=/tmp/sockets/mysql.sock
root 18196 0.0 2.1 200580 21712 ? Ss 00:10 0:00 php-fpm: master process (/snap/nextcloud/21169/config/php/php-fpm.conf)
root 18980 0.0 0.1 1872 1276 ? S 00:10 0:00 /bin/sh /snap/nextcloud/21169/bin/httpd-wrapper -k start -DFOREGROUND
root 19017 0.0 0.0 6168 0280 ? S 00:10 0:00 httpd -d /snap/nextcloud/21169 -k start -DFOREGROUND
root 19018 0.0 0.1 1211772 1612 ? Sl 00:10 0:00 httpd -d /snap/nextcloud/21169 -k start -DFOREGROUND
root 19019 0.0 0.1 880108 1668 ? Sl 00:10 0:00 httpd -d /snap/nextcloud/21169 -k start -DFOREGROUND
root 19020 0.0 0.1 1080512 1656 ? Sl 00:10 0:00 httpd -d /snap/nextcloud/21169 -k start -DFOREGROUND
root 19221 0.0 0.0 1716012 0292 ? Sl 00:10 0:00 httpd -d /snap/nextcloud/21169 -k start -DFOREGROUND
これでもうデーモンも起動しているので対象マシンのホスト名やipアドレスをウェブブラウザに入力して任意の管理者ユーザのユーザ名とパスワードを入力して登録します.同じネットワークだと誰でも繋いで設定できてしまうので注意しましょう.
「推奨アプリをインストール」にチェックを入れておくと便利な推奨アプリが導入されます.時間がかかるので後でもいいかもしれません.
これでとりあえずNextcloudが利用できるようになりました.実はここまでは snapパッケージが amd64以外にも arm64. armhf, i386, ppc64el に対応しているので armhf/arm64 な Raspberry Pi などでも動作します.
続いて OnlyOffice, community edition の server版を導入します.
Nextcloudのウェブからも導入できるのですが,300MB程とサイズが大きく回線によってはタイムアウトしてしまいます.
その場合は occ
コマンドで導入します.(snapなので nextcloud.occ
コマンドを使います)
$ sudo /snap/bin/nextcloud.occ app:install documentserver_community
これでも失敗することがあります.その場合は手動でGitHub からアーカイブを入手して手動で展開して有効化します.(この方法だとamd64以外でも導入はできちゃいますが動かないので注意)
$ COUNT=1; while :;do wget https://github.com/nextcloud/documentserver_community/releases/download/v0.1.6/documentserver_community.tar.gz && break; c=$(( $c + 1 )) ;sleep 10; done;echo $COUNT
$ sudo tar xvf ./documentserver_community.tar.gz -C /var/snap/nextcloud/current/nextcloud/extra-apps/
$ sudo chown -R root.root /var/snap/nextcloud/current/nextcloud/extra-apps/documentserver_community
$ sudo /snap/bin/nextcloud.occ app:enable documentserver_community
CollaboraはAppImageを使っていたのでファイル数は少なかったですがこちらは普通にディレクトリに展開されるようでたくさんあります.
$ sudo find /var/snap/nextcloud/current/nextcloud/extra-apps/documentserver_community | wc -l
12935
続いてOnlyOfficeアプリも導入します.
これはOnlyOffice Serverに繋いでやり取りするものです.Nextcloud のアプリ画面若しくは以下のコマンドで導入します.
$ sudo /snap/bin/nextcloud.occ app:install onlyoffice
これでNextcloudに戻って対応ドキュメントを開いたり新規作成するとOnlyOfficeが起動して編集できるはずです :)
アプリが導入されているけどうまく行かない場合はOnlyOfficeアプリを導入し直すとうまく行くかもしれません.(OnlyOfficeアプリがServerより先に導入されるとうまく行かない)
$ sudo /snap/bin/nextcloud.occ app:remove onlyoffice
$ sudo /snap/bin/nextcloud.occ app:install onlyoffice
とりあえずこれでお試しは出来る感じです.実際に運用するにはhttps化したりバックアップを定期的に取るようにしたりなど設定したほうがいいですがパスやコマンド以外は通常のNextcloudと同じだと思います.
主なパスやコマンドはこうなっています.
dbのアカウント情報は設定ファイルに載っています.
$ sudo grep db /var/snap/nextcloud/current/nextcloud/config/config.php
'dbtype' => 'mysql',
'dbname' => 'nextcloud',
'dbhost' => 'localhost:/tmp/sockets/mysql.sock',
'dbport' => '',
'dbtableprefix' => 'oc_',
'dbuser' => 'nextcloud',
'dbpassword' => 'wdwYevflNhziZDUxxG2OXJs6el4zThtkmX20Bijih7Zh_4XU58OkZs3TAt7TCJjt',
設定ファイルを編集してデーモンを再起動したい場合はこんな感じで再起動できます.
$ sudo snap restart nextcloud
てことでsnap版Nextcloudはお試しにはおすすめです.
OnlyOfficeは今のところamd64環境しか提供されていませんがRaspberry Pi などでも動くようにしたいと言っているのでこれも期待です.
Nextcloud 19 だと先日紹介したCollaboraも同様にWebから導入できるのでおすすめです.