Nextcloudのデータディレクトリを移動するメモ

Nextcloudのデータディレクトリは既定値ではNextcloudのすぐ下の data ディレクトリになります.しかしここはウェブサーバのドキュメントルート以下になってしまい設定をミスするとデータディレクトリが一般公開されてしまう可能性があり少し怖いです.
そこでNextcloud導入時に設定ファイルの config/config.phpdatadirectory にウェブサーバドキュメントルートの外にNextcloudデータを設定します.

今回デフォルトのウェブサーバドキュメントルート内のまま運用されているNextcloudがあったのでそれをウェブサーバドキュメントルート外に移動してみました.
ディスクを増設してそちらにデータを移すなどの際にも同じ手順でデータ移行できると思います.

今回の例でのパスはこんな感じです.

  • Nextcloud導入ディレクトリ : /var/www/nextcloud
  • 旧Nextcloud データディレクトリ : /var/www/nextcloud/data
  • 新Nextcloud データディレクトリ : /var/data/nextcloud/data
Important
インストール後のデータディレクトリの移動は公式ではサポートされていません.

ファイルのコピー

同一のファイルシステム間であれば mv commandで一瞬ですが,今回はファイルシステムを跨いでいるので時間がかかります.
ダウンタイムを短くしたいのでNextcloud動作状態で一度データをコピーしてその後rsyncで差分のみコピーすることにします.

1度目のコピー

$ sudo cp -a /var/www/nextcloud/data /var/www/nextcloud/

rsyncでデータ同期

1度目のデータコピーに時間がかかったのでrsyncで同期

$ sudo rsync -avc /var/www/nextcloud/data /var/www/nextcloud/

バックグラウンドジョブを停止(恐らくこの手順は不要)

次の手順でメンテナンスモードに移行するので不要だと思うけど念の為バックグラウンドジョブをcrontabで設定しているのを停止(コメントアウト)しておく.(Webcronの場合も止めたほうがいいかも.AJAXの場合は恐らく不要)

$ sudo -u www-data crontab -e

メンテナンスモードに移行

ここからNextcloudは利用できなくなります.

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

データ同期

-c オプションも付けたほうがいいけどデータが大きいと時間がかかるので今回はなしであとでチェックすることにする.

$ sudo rsync -av /var/www/nextcloud/data /var/www/nextcloud/

データベース書き換え

Nextcludのデータベース内のファイルディレクトリ情報を書き換えます.書き換え前に念の為データベースのバックアップも取っておきます.

バックアップ
$ sh -c "umask 266 ; mysqldump -uroot -p --opt --all-databases --events | xz > mysqlbackup-`date +\%F_\%T_\%s_$`.sql.xz"
db書き換え
$ mysql -unextcloud -p
mysql> use nextcloud;
mysql> update oc_storages set id='local::/var/data/nextcloud/data/' where id='local::/var/www/nextcloud/data/';
mysql> quit;

設定ファイル書き換え

Nextcloudの設定ファイルの config/config.php の中の datadirectory を新しいパスに書き換えます.

  'datadirectory' => '/var/data/nextcloud/data',

メンテナンスモードをoffにする

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

動作確認

Nextcloudにログインしてファイルディレクトリが閲覧できることを確認する.

バックグラウンドジョブを設定

バックグラウンドジョブをcrontabで再設定

$ sudo -u www-data crontab -e

旧データの削除

しばらく運用して問題ないようなら旧データを削除する.

$ sudo rm -rf /var/www/nextcloud/data

生ディスクなんかだと secure-delete とか使うと少し安心.でも確実じゃないし時間かかるので暗号化fsを推奨.

$ sudo nice -20 ionice -c1 -n0 srm -r /var/www/nextcloud/data

環境

$ sudo -u www-data php ./occ -V
Nextcloud 17.0.1
$ dpkg-query -W php7.2-common mysql-server
mysql-server    5.7.28-0ubuntu0.18.04.4
php7.2-common   7.2.24-0ubuntu0.18.04.1
$ lsb_release -dr
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
$ uname -m
x86_64

Nextcloud upgrade時に`Check for expected files The following extra files have been found: .rnd` と言われて失敗する(15.0.7→16.0.6)

Nextcloud 15.0.7からNextcloud 16.0.6へのアップグレードを行おうとしたところ,アップグレード画面で以下のようなメッセージが表示されて先に勧めません.

Nextcloud upgrade failed 20191125 13:11:17 12878

Check for expected files
The following extra files have been found:
.rnd

Nextcloud 以下を確認すると3つの .rnd ファイルが見つかりました.

$ cd /export/data/var/nextcloud-data
$ find ./ -name .rnd -ls
13495506336      0 drwxr-xr-x   3 www-data www-data       38 Jan 31  2018 ./data/matoken/files_encryption/keys/files/tmp/pizero/home/pi/.rnd
15757999341     12 -rw-r--r--   1 www-data www-data     9656 Jan 31  2018 ./data/matoken/files/tmp/pizero/home/pi/.rnd
11866753713      4 -rw-------   1 www-data www-data     1024 Nov 25 13:19 ./.rnd

以下のページを見ると,Nextcloud 直下の .rnd ファイルが悪さをしているようなのでこれを退避します.

$ sudo mv ./.rnd ~/tmp

この後もう一度アップグレードを試みるとうまく行きました.

This behavior continues up to version 15.0.7.

とのことでぎりぎり引っかかったようです😣

環境
$ sudo -u www-data php ./occ -V
Nextcloud 16.0.6
$ dpkg-query -W php7.2-common mysql-server
mysql-server    5.7.28-0ubuntu0.18.04.4
php7.2-common   7.2.24-0ubuntu0.18.04.1
$ lsb_release -dr
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
$ uname -m
x86_64

速度や容量の偽装されたフラッシュストレージの確認ができるf3(Fight Flash Fraud)を少し試す

近年はフラッシュストレージの偽物が多く出回っています。速度を偽るものや容量を偽るものなどがあり、速度はともかく容量を偽られるとデータが壊れてしまい困ります。
このようなストレージのテストにWindowsでは H2testw というツールが定番のようですが、Linuxでは無いだろうかと探すとそのままH2testw代替というf3(Fight Flash Fraud)を見つけたので少し試してみました。

Debian sid amd64環境では f3 というパッケージでした。

$ apt show f3
Package: f3
Version: 7.2-1
Priority: optional
Section: utils
Maintainer: Antoine Beaupré <anarcat@debian.org>
Installed-Size: 183 kB
Depends: libc6 (>= 2.28), libparted2 (>= 3.1), libudev1 (>= 183)
Homepage: http://oss.digirati.com.br/f3
Download-Size: 47.3 kB
APT-Manual-Installed: yes
APT-Sources: http://ftp.jp.debian.org/debian sid/main amd64 Packages
Description: test real flash memory capacity
 F3 (Fight Flash Fraud or Fight Fake Flash) tests the full capacity of a
 flash card (flash drive, flash disk, pendrive).
 .
 F3 writes to the card and then checks if can read it. It will assure you
 have not been bought a card with a smaller capacity than stated. Note that
 the main goal of F3 is not to fix your removable media. However, there
 are resources to mark the invalid areas.
 .
 This package provides these executables: f3write, f3read, f3brew, f3fix
 and f3probe.

$ sudo apt install f3
$ dpkg -L f3| grep \/bin\/
/usr/bin/f3brew
/usr/bin/f3fix
/usr/bin/f3probe
/usr/bin/f3read
/usr/bin/f3write

先ずは書き込みテストコマンドの f3write を試します。これは該当ストレージをマウントした状態で、マウントポイントを指定します。

$ time f3write /media/matoken/A2BA-98E0
F3 write 7.2
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

Free space: 29.80 GB
Creating file 1.h2w ... OK!
Creating file 2.h2w ... OK!
Creating file 3.h2w ... OK!
Creating file 4.h2w ... OK!
Creating file 5.h2w ... OK!
Creating file 6.h2w ... OK!
Creating file 7.h2w ... OK!
Creating file 8.h2w ... OK!
Creating file 9.h2w ... OK!
Creating file 10.h2w ... OK!
Creating file 11.h2w ... OK!
Creating file 12.h2w ... OK!
Creating file 13.h2w ... OK!
Creating file 14.h2w ... OK!
Creating file 15.h2w ... OK!
Creating file 16.h2w ... OK!
Creating file 17.h2w ... OK!
Creating file 18.h2w ... OK!
Creating file 19.h2w ... OK!
Creating file 20.h2w ... OK!
Creating file 21.h2w ... OK!
Creating file 22.h2w ... OK!
Creating file 23.h2w ... OK!
Creating file 24.h2w ... OK!
Creating file 25.h2w ... OK!
Creating file 26.h2w ... OK!
Creating file 27.h2w ... OK!
Creating file 28.h2w ... OK!
Creating file 29.h2w ... OK!
Creating file 30.h2w ... OK!
Free space: 0.00 Byte
Average writing speed: 7.43 MB/s

real    68m29.007s
user    0m7.454s
sys     0m51.266s

次に読み込みテストコマンドの f3read を試します。

$ time f3read /media/matoken/A2BA-98E0
F3 read 7.2
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

                  SECTORS      ok/corrupted/changed/overwritten
Validating file 1.h2w ... 2097152/        0/      0/      0
Validating file 2.h2w ... 2097152/        0/      0/      0
Validating file 3.h2w ... 2097152/        0/      0/      0
Validating file 4.h2w ... 2097152/        0/      0/      0
Validating file 5.h2w ... 2097152/        0/      0/      0
Validating file 6.h2w ... 2097152/        0/      0/      0
Validating file 7.h2w ... 2097152/        0/      0/      0
Validating file 8.h2w ... 2097152/        0/      0/      0
Validating file 9.h2w ... 2097152/        0/      0/      0
Validating file 10.h2w ... 2097152/        0/      0/      0
Validating file 11.h2w ... 2097152/        0/      0/      0
Validating file 12.h2w ... 2097152/        0/      0/      0
Validating file 13.h2w ... 2097152/        0/      0/      0
Validating file 14.h2w ... 2097152/        0/      0/      0
Validating file 15.h2w ... 2097152/        0/      0/      0
Validating file 16.h2w ... 2097152/        0/      0/      0
Validating file 17.h2w ... 2097152/        0/      0/      0
Validating file 18.h2w ... 2097152/        0/      0/      0
Validating file 19.h2w ... 2097152/        0/      0/      0
Validating file 20.h2w ... 2097152/        0/      0/      0
Validating file 21.h2w ... 2097152/        0/      0/      0
Validating file 22.h2w ... 2097152/        0/      0/      0
Validating file 23.h2w ... 2097152/        0/      0/      0
Validating file 24.h2w ... 2097152/        0/      0/      0
Validating file 25.h2w ... 2097152/        0/      0/      0
Validating file 26.h2w ... 2097152/        0/      0/      0
Validating file 27.h2w ... 2097152/        0/      0/      0
Validating file 28.h2w ... 2097152/        0/      0/      0
Validating file 29.h2w ... 2097152/        0/      0/      0
Validating file 30.h2w ... 1671296/        0/      0/      0

  Data OK: 29.80 GB (62488704 sectors)
Data LOST: 0.00 Byte (0 sectors)
               Corrupted: 0.00 Byte (0 sectors)
        Slightly changed: 0.00 Byte (0 sectors)
             Overwritten: 0.00 Byte (0 sectors)
Average reading speed: 19.53 MB/s

real    26m7.658s
user    0m15.443s
sys     0m16.790s

そして本命の f3probe で全領域にデータを書き込んでベリファイして実際に表示される容量が利用できるかを確認します。実行にはroot権限が必要でアンマウントした状態で該当デバイスを指定します。 ※ストレージ内のデータは破壊されます。

$ time sudo f3probe /dev/mmcblk0
F3 probe 7.2
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

WARNING: Probing normally takes from a few seconds to 15 minutes, but
         it can take longer. Please be patient.

Probe finished, recovering blocks... Done

Good news: The device `/dev/mmcblk0' is the real thing

Device geometry:
                 *Usable* size: 29.81 GB (62521344 blocks)
                Announced size: 29.81 GB (62521344 blocks)
                        Module: 32.00 GB (2^35 Bytes)
        Approximate cache size: 0.00 Byte (0 blocks), need-reset=no
           Physical block size: 512.00 Byte (2^9 Bytes)

Probe time: 4'01"

real    9m4.350s
user    0m0.887s
sys     0m1.602s

こちらはクイックテスト。通常テストが9分ちょっと掛かったのに対しこちらは2分ちょっとで終わっています。

$ time sudo f3probe --destructive --time-ops /dev/mmcblk0
F3 probe 7.2
Copyright (C) 2010 Digirati Internet LTDA.
This is free software; see the source for copying conditions.

WARNING: Probing normally takes from a few seconds to 15 minutes, but
         it can take longer. Please be patient.

Good news: The device `/dev/mmcblk0' is the real thing

Device geometry:
                 *Usable* size: 29.81 GB (62521344 blocks)
                Announced size: 29.81 GB (62521344 blocks)
                        Module: 32.00 GB (2^35 Bytes)
        Approximate cache size: 0.00 Byte (0 blocks), need-reset=no
           Physical block size: 512.00 Byte (2^9 Bytes)

Probe time: 2'16"
 Operation: total time / count = avg time
      Read: 393.4ms / 4815 = 81us
     Write: 2'15" / 4192321 = 32us
     Reset: 0us / 1 = 0us

real    2m16.479s
user    0m0.612s
sys     0m0.320s

もし、容量を偽ったストレージを利用したい場合、f3probe コマンドの結果から f3fix コマンドで実際の容量までしか利用しないよう設定することが可能らしいです。(未確認)

$ sudo f3fix --last-sec=16477878 /dev/mmcblk0

add)
その後優先度を上げてみるとどうだろうと sudo nice -20 ionice -c1 -n0 を付けて試してみましたがほとんど速度は変わらず誤差レベルな感じでした。

て事で今回のカードはSamsung の高耐久モデルのMB-MJ32GA/EC だったのですが,容量は問題なし.ただ速度が読み込み最大100MB/sに対して20.03MB/s,書き込み30MB/sに対して10.11MB/sとかなり遅そうです.更にRaspberry Pi との相性が悪いらしく,Raspberry Pi Zero/ZeroW/A+ で起動に失敗します.Amazonで買ったので返品しようかと…….

おまけ。

f3-qt というGUIの皮もあるようです。これも少し試してみました。

パッケージが見当たらないのでbuildしました。

$ sudo apt install libudev1 libudev-dev libparted-dev
$ git clone https://github.com/zwpwjwtz/f3-qt
$ cd f3-qt
$ qmake
$ make
マウントポイントを指定して速度テスト。

f3 qt 20191118 07:11:24 1566360

歯車アイコンを押してadvanceテスト。

f3 qt 20191118 09:11:29 1693359

環境
$ dpkg-query -W f3 libudev1 libudev-dev libparted-dev
f3      7.2-1
libparted-dev:amd64     3.3-1
libudev-dev:amd64       243-7
libudev1:amd64  243-7
libudev1:i386   243-7
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

Ubuntu 19.10 amd64からCANON LBP9100Cで印刷🖨️

タイトルの通りで内容は以下のページそのままです.ただ,systemd環境なのでそのへんだけが違います.

パッケージの入手.

以下のページからパッケージ等を入手します.

今回は「CAPT Printer Driver for Linux Ver.2.71(32bit&64bit)」を使いました.

結構古いですね.

本バージョンの動作確認済 OS
Fedora 24 (32bit/ 64bit)
Fedora 25 (32bit/ 64bit)
Ubuntu 16.04 Desktop (32bit/ 64bit)
Ubuntu 16.10 Desktop (32bit/ 64bit)

ファウンロードしたファイルの内容はこんな感じ.

$ ls -s ./linux-capt-drv-v271-jp.tar.gz
124484 ./linux-capt-drv-v271-jp.tar.gz
$ sha512sum ./linux-capt-drv-v271-jp.tar.gz
f6b354dd29393322f0ae4bcea5568650ce286358e42505b6c33f2c7ebb9ff8c813ca52bfd9d56d0cf87db678e56af5559b6300720d50ea29834c1d319c1eb75c  ./linux-cap
t-drv-v271-jp.tar.gz
$ tar tvf ./linux-capt-drv-v271-jp.tar.gz
-rw-rw-r-- canon/canon 9879361 2017-04-18 00:00 linux-capt-drv-v271-jp/32-bit_Driver/RPM/cndrvcups-capt-2.71-1.i386.rpm
-rw-rw-r-- canon/canon 15356845 2017-04-18 00:00 linux-capt-drv-v271-jp/32-bit_Driver/RPM/cndrvcups-common-3.21-1.i386.rpm
-rw-rw-r-- canon/canon 15382368 2017-04-18 00:00 linux-capt-drv-v271-jp/32-bit_Driver/Debian/cndrvcups-common_3.21-1_i386.deb
-rw-rw-r-- canon/canon  9716256 2017-04-18 00:00 linux-capt-drv-v271-jp/32-bit_Driver/Debian/cndrvcups-capt_2.71-1_i386.deb
-rw-rw-r-- canon/canon  9905144 2017-04-18 00:00 linux-capt-drv-v271-jp/64-bit_Driver/RPM/cndrvcups-capt-2.71-1.x86_64.rpm
-rw-rw-r-- canon/canon 15365135 2017-04-18 00:00 linux-capt-drv-v271-jp/64-bit_Driver/RPM/cndrvcups-common-3.21-1.x86_64.rpm
-rw-rw-r-- canon/canon  9733334 2017-04-18 00:00 linux-capt-drv-v271-jp/64-bit_Driver/Debian/cndrvcups-capt_2.71-1_amd64.deb
-rw-rw-r-- canon/canon 15389756 2017-04-18 00:00 linux-capt-drv-v271-jp/64-bit_Driver/Debian/cndrvcups-common_3.21-1_amd64.deb
-rw-rw-r-- canon/canon   573192 2017-04-18 00:00 linux-capt-drv-v271-jp/Doc/guide-capt-2.7xJ.tar.gz
-rw-rw-r-- canon/canon    27592 2017-04-18 00:00 linux-capt-drv-v271-jp/Doc/LICENSE-JP.txt
-rw-rw-r-- canon/canon    46924 2017-04-18 00:00 linux-capt-drv-v271-jp/Doc/README-capt-2.71J.txt
-rw-rw-r-- canon/canon 10031685 2017-04-18 00:00 linux-capt-drv-v271-jp/Src/cndrvcups-capt-2.71-1.tar.gz
-rw-rw-r-- canon/canon 17277148 2017-04-18 00:00 linux-capt-drv-v271-jp/Src/cndrvcups-common-3.21-1.tar.gz
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/32-bit_Driver/RPM/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/32-bit_Driver/Debian/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/64-bit_Driver/RPM/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/64-bit_Driver/Debian/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/Doc/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/Src/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/32-bit_Driver/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/64-bit_Driver/
drwxrwxr-x canon/canon        0 2017-04-18 00:00 linux-capt-drv-v271-jp/

展開して必要なパッケージを導入します.

$ tar xf ./linux-capt-drv-v271-jp.tar.gz
$ sudo dpkg -i ./linux-capt-drv-v271-jp/64-bit_Driver/Debian/cndrvcups-capt_2.71-1_amd64.deb ./linux-capt-drv-v271-jp/64-bit_Driver/Debian/cndrvcups-common_3.21-1_amd64.deb
以前に未選択のパッケージ cndrvcups-capt を選択しています。
(データベースを読み込んでいます ... 現在 690646 個のファイルとディレクトリがインストールされています。)
.../cndrvcups-capt_2.71-1_amd64.deb を展開する準備をしています ...
cndrvcups-capt (2.71-1) を展開しています...
以前に未選択のパッケージ cndrvcups-common を選択しています。
.../cndrvcups-common_3.21-1_amd64.deb を展開する準備をしています ...
cndrvcups-common (3.21-1) を展開しています...
cndrvcups-common (3.21-1) を設定しています ...
cndrvcups-capt (2.71-1) を設定しています ...
systemd (242-7ubuntu3) のトリガを処理しています ...

cups再起動.

$ sudo service cups restart

プリントスプーラにプリンタを登録.

$ sudo lpadmin -p LBP9100C -P /usr/share/cups/model/CNCUPSLBP9100CCAPTJ.ppd -v ccp://localhost:59687 -E

ccpdにdaemonにプリンタを登録.
192.168.1.14 部分は該当プリンタのIPアドレスに変更する.

$ sudo ccpdadmin -p LBP9100C -o net:192.168.1.14

 CUPS_ConfigPath = /etc/cups/
 LOG Path        = None
 UI Port         = 59787

 Entry Num  : Spooler   : Backend       : FIFO path             : Device Path   : Status
 ----------------------------------------------------------------------------
	 [0]    : LBP9100C  : ccp           : //localhost:59687     : net:192.168.1.14      : New!!

cupsにアクセスできるよう設定しておく.ここでは自分(127.0.0.1)だけ.

$ sudo vi /etc/cups/cupsd.conf
$ sudo git -C /etc diff HEAD^ -- /etc/cups/cupsd.conf
diff --git a/cups/cupsd.conf b/cups/cupsd.conf
index 0f233ad..1c51867 100644
--- a/cups/cupsd.conf
+++ b/cups/cupsd.conf
@@ -29,11 +29,13 @@ WebInterface Yes
 # Restrict access to the server...
 <Location />
   Order allow,deny
+  Allow From 127.0.0.1
 </Location>

 # Restrict access to the admin pages...
 <Location /admin>
   Order allow,deny
+  Allow From 127.0.0.1
 </Location>

 # Restrict access to configuration files...

ccpdを起動して,テスト印刷してみる.

$ sudo service ccpd start

ccpdがシステム起動時に起動するか確認すると起動しないようになっている

$ sudo systemctl is-enabled ccpd
ccpd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install is-enabled ccpd
disabled

ccpdを自動起動するようにしようとすると怒られる.

$ sudo systemctl enable ccpd
ccpd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ccpd
update-rc.d: error: ccpd Default-Start contains no runlevels, aborting.

/etc/init.d/ccpd を少し修正して怒られないようにして再度登録.

$ sudo vi /etc/init.d/ccpd
$ sudo git -C /etc diff -- /etc/init.d/ccpd
diff --git a/init.d/ccpd b/init.d/ccpd
index f14cb8c..bdac57e 100755
--- a/init.d/ccpd
+++ b/init.d/ccpd
@@ -1,5 +1,13 @@
 #!/bin/sh
 # startup script for Canon Printer Daemon for CUPS (ccpd)
+### BEGIN INIT INFO
+# Provides:          my-service-name
+# Required-Start:    $all
+# Required-Stop:
+# Default-Start:     2 3 4 5
+# Default-Stop:
+# Short-Description: your description here
+### END INIT INFO

 if [ `ps awx | grep cupsd | grep -v grep | wc -l` -eq 0 ]; then
		while [ `ps awx | grep cupsd | grep -v grep | wc -l` -eq 0 ]
$ sudo systemctl enable ccpd
ccpd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable ccpd
$ sudo systemctl is-enabled ccpd
ccpd.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install is-enabled ccpd
enabled
環境
$ w3m -dump http://192.168.1.14/cab/dev_info.shtml | grep 製品
│     製品名 :     │ LBP9100C                       │
│ 製品バージョン : │ 1.16                           │
$ dpkg-query -W cups* cndrvcups*
cndrvcups-capt  2.71-1
cndrvcups-common        3.21-1
cndrvcups-lipslx
cndrvcups-ufr2-uk
cndrvcups-ufr2-us
cups    2.2.12-2ubuntu1
cups-browsed    1.25.11-0ubuntu1
cups-bsd        2.2.12-2ubuntu1
cups-client     2.2.12-2ubuntu1
cups-common     2.2.12-2ubuntu1
cups-core-drivers       2.2.12-2ubuntu1
cups-daemon     2.2.12-2ubuntu1
cups-filters    1.25.11-0ubuntu1
cups-filters-core-drivers       1.25.11-0ubuntu1
cups-filters-ippusbxd
cups-ipp-utils  2.2.12-2ubuntu1
cups-pdf
cups-pk-helper  0.2.6-1ubuntu3
cups-ppdc       2.2.12-2ubuntu1
cups-server-common      2.2.12-2ubuntu1
cupsys
$ lsb_release -dr
Description:    Ubuntu 19.10
Release:        19.10
$ uname -m
x86_64

Debian sidでChromiumが更新されないのでsnap版を試す

以下の記事は一昨日(2019-11-04)やっていたことで昨夜(2019-11-05)updateを確認したら降りてきていました :)

$ /usr/bin/chromium --version
Chromium 78.0.3904.87 built on Debian bullseye/sid, running on Debian bullseye/sid

Debian sid amd64 で Chromium がなかなか更新されないのでとりあえずsnap版を入れてみました。

snapd未導入なら導入。

$ sudo apt install snapd

検索して、

$ snap find chromium
Name                      Version       Publisher    Notes  Summary
chromium                  78.0.3904.70  canonical✓   -      Chromium web browser, open-source version of Chrome
chromium-ffmpeg           0.1           canonical✓   -      FFmpeg codecs (free and proprietary) for use by third-party browser snaps
restart-chromium          1             mgibbs-dfrs  -      Restart Browser
dashkiosk-client-browser  0.1           ogra         -      Chromium in Kiosk mode specifically adjusted for dashkiosk
boxy-svg                  3.29.0        jarek-foksa  -      Scalable Vector Graphics (SVG) editor
chromium-ffmpeg-test      0.1           osomon       -      Test snap that exercises the slots exposed by chromium-ffmpeg

導入。

$ sudo snap install chromium chromium-ffmpeg
$ snap list|grep chromium
chromium 78.0.3904.70 920 stable canonical* -
chromium-ffmpeg 0.1 15 stable canonical* -
$ dpkg-query -W chromium
chromium 76.0.3809.100-1

/snap/bin/chromium に入るのでそちらのパスを /usr/bin より優先して通しておく。

例えばbashだと ~/.bash_profile などで /usr/bin の設定のあとに以下の設定を書いておく。

if [ -d "/snap/bin" ] ; then
    PATH="/snap/bin:$PATH"
fi

パスが通っているのを確認する。

$ chromium --version
Chromium 78.0.3904.70 snap
$ /usr/bin/chromium --version
Chromium 76.0.3809.100 built on Debian bullseye/sid, running on Debian bullseye/sid

ちなみに今回の環境はamd64でしたが、他にi386, arm64, armhf もあるようです。

chromium snap01

今回の状態はメンテナが動けない状態なのかな?

環境
$ snap list|grep chromium
chromium 78.0.3904.70 920 stable canonical* -
chromium-ffmpeg 0.1 15 stable canonical* -
$ dpkg-query -W chromium snapd
chromium 76.0.3809.100-1
snapd   2.40-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

RT57iの文字コードがShift-JISで困る(GNU screenで文字コード変更)

RT57i IMG 20191029 154203

ハードオフでジャンク扱いで1,100円のYAMAHA RT57iを見かけました.
その時はスルーしたのですが,少し確認すると2003年発売のものなのに去年もFWがリリースされていてADSLの低速回線ならまだ使えるのではと買ってきました.

電源を入れて中を覗くと普通に動きそうです.
しかし日本語を吐いてるぽいけど文字コードが…….

> help
1) "?"��͂ÿ���ƁA�R�}���h��̂ÿ��m�肵�Ă��Ȃ��ꍇ�ɂ͂�̎ÿ��_��͉ÿ\�ȃL
   �[���[��̌ÿ�̈ÿꗗÿ��\�����܂��B
   �R�}���h��̂ÿ��m�肵�Ă����̃ÿRÿ�}����̓�͌ÿ`ÿ���Ɛ���\�����܂��B

2) �L�[�͎ÿ��ɂ͎��Ɏ����R�}���h�ŁA�L�[���[��̕ÿ⊮ÿ�A�ߋ���͂ÿ����R�}���h��
   �Ăяo���A�J�[�\��̈ÿړÿ���͕ÿ���̍ÿ폜���ł��܂��B

     ���ӁF Ctrl + X�́ÿAÿCtrl�L�[����Ȃ���X�L�[������Ƃ�\���܂��B

   --------------------------------------------------------------
   �L�[���[��̕ÿ⊮ÿ                 : Tab�L�[
   --------------------------------------------------------------
   �ߋ���͂ÿ����R�}����̌ÿĂÿяo�� : Ctrl + p �A�܂�͏ÿ���L�[
   ��̃ÿRÿ�}����̌ÿĂÿяo��           : Ctrl + n �A�܂�͉ÿ����L�[
   --------------------------------------------------------------
   �J�[�\����E�ɂP�������ړ�       : Ctrl + f �A�܂�͉ÿEÿ���L�[
   �J�[�\����ɂP�������ړ�       : Ctrl + b �A�܂�͍ÿ����L�[
   �J�[�\����s���Ɉړ�             : Ctrl + e
   �J�[�\����s���Ɉړ�             : Ctrl + a
   --------------------------------------------------------------
   �R�}���h���s�����ɉ�s         : Ctrl + c
   �J�[�\���̂ÿPÿ������폜         : Ctrl + d
---��---

Shift-JISぽいので端末の文字コードを変更します.

こういうことがあるのでGNU screenにワンタッチで文字コードが変更できるようにして…….変更されない?
Shift-JISの設定がないですね.そういえば以前はbind keyで設定していたけど当時最後のShift-JIS環境のNEWSマシン破棄時に消してしまっていたのでした…….

とりあえずGNU screenだと Ctrl +a :encoding sjis でShift-JISに切り替えることが出来ます.
(utf8に戻すときは Ctrl +a :encoding utf8 )

> help
1) "?"を入力すると、コマンド名称が確定していない場合にはその時点で入力可能なキ
   ーワードの候補の一覧を表示します。
   コマンド名称が確定していればそのコマンドの入力形式と説明を表示します。

2) キー入力時には次に示すコマンドで、キーワードの補完、過去に入力したコマンドの
   呼び出し、カーソルの移動や入力文字の削除ができます。

     注意: Ctrl + X は、Ctrlキーを押しながらXキーを押すことを表します。

   --------------------------------------------------------------
   キーワードの補完                 : Tabキー
   --------------------------------------------------------------
   過去に入力したコマンドの呼び出し : Ctrl + p 、または上矢印キー
   次のコマンドの呼び出し           : Ctrl + n 、または下矢印キー
   --------------------------------------------------------------
   カーソルを右に1文字分移動       : Ctrl + f 、または右矢印キー
   カーソルを左に1文字分移動       : Ctrl + b 、または左矢印キー
   カーソルを行末に移動             : Ctrl + e
   カーソルを行頭に移動             : Ctrl + a
   --------------------------------------------------------------
   コマンドを実行せずに改行         : Ctrl + c
   カーソル上の1文字を削除         : Ctrl + d
---つづく---

見えました.

.screenrc にも設定( bind ^J encoding sjis )を入れておきましょう.Ctrl+a Ctrl+j でShift-JISに切り替えられるようになりました.(Tmuxでの手順は見当たらず)

  bind ^U encoding utf8
  bind ^E encoding euc
+ bind ^J encoding sjis

他の方法としてRT57iの設定で英語にしたりできそうな気がしますが未確認.

そんなこんなでこれまでのADSLモデムをルータ機能は使わずモデムとしてだけ利用するようにしてRT57iからPPPoEで繋ぐようにしました.
これまでPPPoE接続に30分程,調子が悪いと1時間くらいかかっていましたが一瞬で接続されるように.安定度も増しました.
ずっと同じ構成なのにだんだん接続時間が伸びていたのでアナログ回線が劣化して不安定になっていたのかと思っていたのですがADSLモデムが原因だったようです.(ということはモデム機能もそろそろ壊れてしまう可能性……)

ただ,speedtestでは調子がいいときは8Mbほど出ていたのが7Mbになったので少し速度低下が?でもずっと安定したのでこっちのほうがいい感じです.(2,3日に一回回線が切れて再接続に30~60分とか動画が数分おきに止まるとか画像の読み込みに失敗したりとかだった)

$ speedtest-cli --simple
Ping: 92.066 ms
Download: 7.00 Mbit/s
Upload: 1.10 Mbit/s

まだざっくりとした設定なのでマニュアルを見ながらもう少し設定詰めてみます.

Tip
追記
コマンドリファレンス P.38より
4.11
[ 書式 ]
コンソールの言語とコードの設定
console character code
no console character [code]
[ 設定値 ]
[ 説明 ]
[ ノート ]
[ 初期値 ]
○
 code
● ascii......................... 英語で表示する、文字コードは ASCII
● sjis ........................... 日本語で表示する、文字コードはシフト JIS
● euc .......................... 日本語で表示する、文字コードは EUC
コンソールに表示する言語とコードを設定する。
本コマンドは一般ユーザでも実行できる。
本コマンドの設定は、save コマンドで保存するまで show config コマンドによる設定の表示に反映され
ない。

ascii, sjis(既定値), eucが選択できるようです.
asciiに設定しておこうと思います.

> console character ascii
> administrator
Password:
# save
Saving ... CONFIG0 Done .
# quit
> quit
環境
$ dpkg-query -W screen byobu
byobu   5.125-0ubuntu1
screen  4.6.2-1ubuntu1
$ lsb_release -dr
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
$ uname -m
x86_64

Windows 10のisoファイルをWoeUSBでUSBフラッシュメモリに書き込み

balenaEtcher でUSBフラッシュメモリにWindows 10のisoイメージを書き込もうとしたのですが,このようなメッセージが表示されました.

balena etcher 20191029 12:10:49 18415 40

Windowsのイメージは特殊なのでそれを処理できるプログラムを紹介しています.Linuxでは WoeUSB を勧めています.

UbuntuではPPAがあるようなのでこれを導入します.

$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt update
$ sudo apt install woeusb

起動します.

$ sudo -H woeusb

画面はこんな感じでした.

woeusb01 20191029 13:10:27 27379

実際に書き込みをするときはこんな感じ.Soureにisoファイルを指定して,File stysremに「NTFS」を選択,Taeget deviceに対象のUSBフラッシュメモリを指定しました.はじめFATを選択したのですがエラーとなりました.NTFSだとOK.FATの4GB制限に引っかかったのかもしれません.

woeusb02 20191029 13:10:20 3649

ここで Install ボタンを押すことでプログレスが表示されて導入が開始されます.

しばらく待つと書き込み終了.出来上がったUSBフラッシュメモリをPCに接続して起動すると無事Windows 10のインストーラが起動しました.

環境
$ ls -s /media/mk/6647-4A7F/iso/Win10_1903_V2_Japanese_x64.iso
5202048 /media/mk/6647-4A7F/iso/Win10_1903_V2_Japanese_x64.iso
$ dpkg-query -W woeusb balena-etcher-electron
balena-etcher-electron  1.5.51
woeusb  3.3.0-1~webupd8~eoan0
$ lsb_release -dr
Description:    Ubuntu 19.10
Release:        19.10
$ uname -a
Linux x201i 5.3.0-19-generic #20-Ubuntu SMP Fri Oct 18 09:04:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

iPhone 7(iOS12)をUbuntu 19.10でmountしてデータコピー

借りたiPhone 7で撮影した動画をUbuntu 19.10 amd64にコピーしました.その時のメモです.
以前iPhone 3GSを利用していてファイルコピーやテザリングを利用していましたがそれ以来のiPhoneマウントでした.

必要パッケージの導入.

$ sudo apt install ifuse libimobiledevice-utils

iPhoneをUSB経由で接続.

その時のdmesgはこんな感じでネットワークはもう使えそう.(未確認)

[  +0.028241] usb 1-1.1: New USB device found, idVendor=05ac, idProduct=12a8, bcdDevice= 9.01
[  +0.000006] usb 1-1.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  +0.000004] usb 1-1.1: Product: iPhone
[  +0.000003] usb 1-1.1: Manufacturer: Apple Inc.
[  +0.000003] usb 1-1.1: SerialNumber: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[  +0.000334] usb 1-1.1: Device is not authorized for usage
[  +0.005480] usb 1-1.1: authorized to connect
[  +0.787707] ipheth 1-1.1:4.2: Apple iPhone USB Ethernet device attached
[  +0.130956] ipheth 1-1.1:4.2 enp0s26u1u1c4i2: renamed from eth0

でもマウントはまだ出来ないのでペアリングします.初回はエラーになります.

$ idevicepair pair
ERROR: Please accept the trust dialog on the screen of device xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx, then attempt to pair ag
ain.

このときiPhone画面で「このコンピュータを信頼しますか?」と聞かれるので「信頼」を選びます.

iPhone7 auth

信頼した後に再度pair

$ sudo idevicepair pair
SUCCESS: Paired with device xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

後はNautilusでUSBメモリのようにマウントしてコピーできました.

環境
$ dpkg-query -W ifuse libimobiledevice-utils nautilus
ifuse   1.1.4~git20181007.3b00243-1
libimobiledevice-utils  1.2.1~git20181030.92c5462-1
nautilus        1:3.34.1-1ubuntu1
$ lsb_release -dr
Description:    Ubuntu 19.10
Release:        19.10
$ uname -m
x86_64
  • Apple iPhone 7 / iOS 12.3.1

Btrfsのbtrfs-transactionでioが100%になって困る

デスクトップ検索のRecollを試してみようと recollindex コマンドでindexを作ってみました.すると様々なアプリケーションがフリーズ.indexが出来るまでの辛抱だろうと1日ほど放置してみましたが解消しません.
1つのコマンドを発行して実行されるまで何分も掛かってしまいます.

cpuやmemoryはガラガラです.
iotop を叩いてみると btrfs-transaction がほぼ100%で張り付いています.

マウントオプションはこんな感じ.

$ mount | grep \ /\
/dev/mapper/t430s--vg-root on / type btrfs (rw,noatime,nodiratime,ssd,discard,space_cache,subvolid=5,subvol=/)

discard を `btrfs(5) ` で確認するとちょっと怪しいような?

       discard, nodiscard
           (default: off)

           Enable discarding of freed file blocks. This is useful for SSD devices, thinly provisioned LUNs, or virtual machine images; however, every storage layer must
           support discard for it to work. if the backing device does not support asynchronous queued TRIM, then this operation can severely degrade performance, because a
           synchronous TRIM operation will be attempted instead. Queued TRIM requires newer than SATA revision 3.1 chipsets and devices.

       If it is not necessary to immediately discard freed blocks, then the fstrim tool can be used to discard all free blocks in a batch. Scheduling a TRIM during a period
       of low system activity will prevent latent interference with the performance of other operations. Also, a device may ignore the TRIM command if the range is too
       small, so running a batch discard has a greater probability of actually discarding the blocks.

       If discarding is not necessary to be done at the block freeing time, there’s fstrim(8) tool that lets the filesystem discard all free blocks in a batch, possibly not
       much interfering with other operations. Also, the device may ignore the TRIM command if the range is too small, so running the batch discard can actually discard the
       blocks.

SATAのバージョンを確認すると 3.2 なので問題無さそう?

$ sudo smartctl --info /dev/sda | grep ^SATA
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)

でも一旦無効にしてみます.
#ついでに付けた compress=lzo は別でやるべきだった…….

$ time sudo mount -o remount,rw,noatime,nodiratime,ssd,nodiscard,compress=lzo,space_cache /
real    42m32.840s
user    0m0.014s
sys     0m15.209s
$ mount | grep \ /\
/dev/mapper/t430s--vg-root on / type btrfs (rw,noatime,nodiratime,compress=lzo,ssd,space_cache,subvolid=5,subvol=/)

これが当たりだったようでioは一気に空きました!
SATA 3.2 だけど何か別の条件が良くないのでしょうか?

忘れないうちに fstab も修正しておきます.(nodiscard は既定値なので書いていない)

 sudo git -C /etc diff HEAD^ -- /etc/fstab
diff --git a/fstab b/fstab
index b029749..386278f 100644
--- a/fstab
+++ b/fstab
@@ -5,7 +5,7 @@
 # that works even if disks are added and removed. See fstab(5).
 #
 # <file system> <mount point>   <type>  <options>       <dump>  <pass>
-/dev/mapper/t430s--vg-root /               btrfs   noatime,nodiratime,ssd,discard,space_cache 0       0
+/dev/mapper/t430s--vg-root /               btrfs   noatime,nodiratime,ssd,compress=lzo,space_cache 0       0
 # /boot was on /dev/sda2 during installation
 UUID=cba2591a-12da-481e-b239-c002faca22e1 /boot           ext2    defaults        0       2
 # /boot/efi was on /dev/sda1 during installation

これで暫く様子を見てみます.
問題なければ別途TRIMを設定したほうがいいかな?

環境

$ dpkg-query -W btrfs-progs iotop smartmontools
btrfs-progs     5.2.1-1
iotop   0.6-24-g733f3f8-1
smartmontools   7.0-2
$ sudo smartctl -i /dev/sda | grep -E '^Device Model:|Firmware Version:|SATA Version is:'
Device Model:     Seagate BarraCuda SSD ZA1000CM10002
Firmware Version: STAS1024
SATA Version is:  SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

Google PhotoにHEIC形式でアップロードして16MP制限を回避する

※このエントリを書いてるうちにHEIC形式のファイルが縮小されないのはバグだという記事がでてきました.そのうち修正されてこの回避方法は使えなくなるはずです.

Google Photoの設定でアップロードサイズを「高画質」にしておくと16MPを超えるサイズの画像は16MPに縮小されますが容量を気にせず無制限でアップロードできます.
最近iPhoneの写真は16MPを越えていても無制限にアップロードできると話題になりました.これはiPhoneの写真はHEIF形式で保存され,これを16MPにするためにデコード&エンコードすると元の画像より大きくなるのでそのままにしているのではないかと言われたりしています.

この理由が正しいのであればiPhoneでなくともHEIF形式に変換してアップロードした画像はオリジナルサイズで保存されるではないかと試してみました.

先ず手持ちのカメラ(Pentax K-5)でRAW撮影して現像したファイルを確認してみます.

$ identify ./H-IIBF8_HTV8.TIFF
./H-IIBF8_HTV8.TIFF TIFF 4942x3276 4942x3276+0+0 16-bit sRGB 73.7626MiB 0.000u 0:00.000
$ echo $(($(identify -format "%w*%h" ./H-IIBF8_HTV8.TIFF)))
16189992

4942 x 3276 = 16189992ピクセルで制限の16MPを少し超えていそうです.
2**20*16 = 16777216 よりは小さい(MiP?)

この画像をアップロードしてみます.アップロードにはgpupを使いました.

$ gpup ./H-IIBF8_HTV8.TIFF

アップロードしたファイルの情報を見るとこうなっていました.16.2MPで縮小されていないようです.

H-IIBF8_HTV8.TIFF
16.2 MP
4942 × 3276
77.3 MB

念の為設定を確認.

設定画面( https://photos.google.com/settings )にアクセスして,「高画質 (容量制限なし、無料)」にチェックが入っているのを確認します.

問題ないようです.

ちなみに,「元のサイズ」に設定した状態でアップロードした動画を「容量を解放」することで16MPに変換してGoogleドライブの容量を解放することも可能です.

HEICとJPEGも同様にアップロードしてみます.

$ convert ./H-IIBF8_HTV8.TIFF ./H-IIBF8_HTV8.heic
$ convert ./H-IIBF8_HTV8.TIFF ./H-IIBF8_HTV8.jpg
$ ls -1HSs ./H-IIBF8_HTV8.*
75536 ./H-IIBF8_HTV8.TIFF
 2632 ./H-IIBF8_HTV8.jpg
  688 ./H-IIBF8_HTV8.heic
$ gpup ./H-IIBF8_HTV8.heic ./H-IIBF8_HTV8.jpg

これも縮小されませんでした.

この画像は16MPを少し超えている程度なので縮小されないのかもしれません.もっと大きな画像で試してみます.

といっても自分の手持ちのカメラではこれが最大なので,画像を結合して作成します.(ちなみに処理時間はHEIC:56s, JPEG:3s)

$ convert -append H-IIBF8_HTV8.heic H-IIBF8_HTV8.heic 32MP.heic
$ convert -append H-IIBF8_HTV8.heic H-IIBF8_HTV8.heic 32MP.jpg
$ ls -1Ss 32MP.*
3572 32MP.jpg
1260 32MP.heic
$ identify 32MP.*
32MP.heic HEIC 4942x6552 4942x6552+0+0 8-bit YCbCr 0.010u 0:00.000
32MP.jpg JPEG 4942x6552 4942x6552+0+0 8-bit sRGB 3.4858MiB 0.000u 0:00.000
$ gpup 32MP.heic 32MP.jpg

結果はHEICは約32MPのまま 未圧縮 ,JPEGは 16 MP 3473 × 4605 になっていました.

同様に倍を試してみると HEIC 64.8 MP(9884 × 6552)未圧縮 となりました.
convertでキャッシュリソースが足りなくて転けたりしつつ更に倍( 9884 x 13104 )を試してみるとgpupでは「Failed: There was an error while trying to create this media item. (code=3)」,Chromiumでは「アップロードできません」というエラーメッセージが表示されアップロードに失敗しました.
容量は4.3MBほどしかないのでそのあたりは問題ないはずで解像度のリミットがありそうです.

てことで,少なくとも HEIC 64.8 MP(9884 x 6552) までは未圧縮でアップロード可能でなようです.
64.8 MP〜129.6MP の間に最大値があると思いますが今の所手持ちの機材では関係がないので確認していません.

環境
$ dpkg-query -W imagemagick chromium
chromium        76.0.3809.100-1
imagemagick     8:6.9.10.23+dfsg-2.1+b2
$ gpup -h 2>&1|grep Version
Version 1.x
$ git -C ~/go/src/github.com/int128/gpup/ log --oneline -1
fb48ce5 (HEAD -> master, origin/master, origin/HEAD) Merge pull request #27 from harupong/patch-1
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64