Nextcloud 15から16にアップグレードしたときのセキュリティ&セットアップ警告を解消

Nextcloud を15から16にアップグレードしました.すると管理アカウントの「設定」→「管理」→「概要」に以下のセキュリティ&セットアップ警告が表示されました.

Nextcloud check ok 20191019 04:10:57 2932

セットアップに関して警告がいくつかあります。
PHPのメモリ制限は推奨値512MBを下回ります。
データベースにいくつかのインデックスがありません。 大きなテーブルにインデックスを追加すると、自動的に追加されないまでに時間がかかる可能性があるためです。 "occ db:add-missing-indices"を実行することによって、インスタンスが実行し続けている間にそれらの欠けているインデックスを手動で追加することができます。 インデックスが追加されると、それらのテーブルへのクエリは通常はるかに速くなります。
テーブル "oc_twofactor_providers"のインデックス "twofactor_providers_uid"が見つかりません。
テーブル "oc_whats_new"のインデックス "version"が見つかりません。
テーブル "oc_cards"のインデックス "cards_abid"が見つかりません。
テーブル "oc_cards_properties"のインデックス "cards_prop_abid"が見つかりません。

これらを解消します.

PHPのメモリ制限は推奨値512MBを下回ります。

php.inimemory_limit512M 以上に設定します.
今回は /etc/php/7.3/apache2/php.ini

$ sudo git diff /etc/php/7.3/apache2/php.ini
diff --git a/php/7.3/apache2/php.ini b/php/7.3/apache2/php.ini
index 9a35de2..598dd82 100644
--- a/php/7.3/apache2/php.ini
+++ b/php/7.3/apache2/php.ini
@@ -403,7 +403,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 ;

編集後httpdを再読込して設定を反映します.

$ sudo service apache2 reload

データベースにいくつかのインデックスがありません。

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

Nextcloud のpathに移動して,occ db:add-missing-indices を実行してインデックスが作成されるのを暫く待ちます.

$ cd /var/www/Nextcloud
$ sudo -u www-data php ./occ db:add-missing-indices
Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Adding additional twofactor_providers_uid index to the twofactor_providers table, this can take some time...
Twofactor_providers table updated successfully.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Adding version index to the whats_new table, this can take some time...
whats_new table updated successfully.
Check indices of the cards table.
Adding cards_abid index to the cards table, this can take some time...
cards table updated successfully.
Check indices of the cards_properties table.
Adding cards_prop_abid index to the cards_properties table, this can take some time...
cards_properties table updated successfully.

ok

再度,管理アカウントの「設定」→「管理」→「概要」にアクセスしてチェックに合格しているのを確認 :)

Nextcloud check ok 20191019 04:10:14 19608

環境

$ sudo -u www-data php ./occ status | grep version:
  - version: 16.0.5.1
$ dpkg-query -W php apache2
apache2 2.4.38-3+deb10u3
php     2:7.3+69
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

Google KeepのデータをCarnetにインポートする

Google Keep代替にCarmetを試してみようと思い先ずはCarnetのLinuxアプリにGoogle Keepのインポート機能があるのでそれを試してみました.

CarnetのLinuxアプリは以下のページからElectron製のi386, amd64 それぞれのAppImageが入手できます.

今回はamd64の current64.AppImage を利用しました.
ダウンロード後,実行権を付与して起動します.

$ wget https://qn.phie.ovh/binaries/desktop/current64.AppImage
$ mv ./current64.AppImage ./Carnet.AppImage
$ chmod u+x ./Carnet.AppImage
$ ./Carnet.AppImage

Settings で設定画面を開き, Import from Google Keep (only on desktop client) で Google Keep のImport画面に移動します.

Keep2Carnet 20191018 22:10:06 32370.jpg.s

先ずは Follow this link からGoogle Takeout に移動します. https://takeout.google.com/settings/takeout

Keep2Carnet 20191018 22:10:20 32675.jpg.s

Google Takeoutにて,「新しいアーカイブの作成」の「追加するデータの選択」で「選択を全て解除」した上で「Keep」にだけチェックを付けて一番下の「次のステップ」を押し,「アーカイブを作成」します.

Keep2Carnet 20191019 05:10:50 19472.jpg.s

しばらくすると(データ量により時間は変わる)Takeoutのデータをダウンロードできるようになるので適当な場所にダウンロードして展開しておきます.

展開したらCarnetアプリに戻り,「PATH TO EXTRACTED ARCHIVE」ボタンを押し,展開したKeepのパスを指定します.

Keep2Carnet 20191018 22:10:44 831.jpg.s

パスを指定したら「PICK FOLDER」ボタンを押してインポート対象を選択して「IMPORT」ボタンでインポート開始.

Keep2Carnet 20191018 22:10:13 1597.jpg.s

順調に行けばこれで終わりですが,いくつかの日本語ファイルでインポートが止まりました.

Keep2Carnet 20191018 22:10:17 1731.jpg.s

一旦画面を閉じて確認すると止まったファイルはインポートできているようでした.そのファイルを削除して再度インポート.
しかしまた止まったのでそのファイルがインポートされているのを確認してファイル削除して再度インポートすることで読み込みが終わりました.

自分の環境では2回止まりそのどちらも日本語ファイル名でした.日本語ファイル名だと必ず止まるというわけではなく問題なくインポートされた日本語ファイルのほうが多かったです.

とりあえずインポートできたのでGoogle Keep代替として試してみようと思います.

add)
インポートしたKeepのTodoリストは
☐ hoge
☑ fuga
な感じのテキストになっていました.Todoに戻すのが少し面倒.

環境
$ curl -s https://qn.phie.ovh/binaries/desktop/current_version
0.18.5
$ lsb_release -dr
Description:    Debian GNU/Linux bullseye/sid
Release:        unstable
$ uname -m
x86_64

LinuxとAndroidで動作するGoogle Keep代替を探す

Google Keepはメモアプリです.Evernoteに似ていますがもう少し機能が少ない感じ.

自分は主にTodoや買い物リストなどにKeepを利用しています.PCやAndroidで買い物をメモしてお店でAndroidのメモを見ながら買い物してチェックボックスをチェックしていく感じです.
メモの数もまだ少ないし使っている機能も少ないので代替になるものがあるのではと探してみました.

要件としてはこんな感じ

  • OSS
  • サーバ側はWebDAVなどでセルフホストが利用可能
    • 若しくはクラウドサービスを使うけどE2EEが利用可能
  • LinuxとAndroidで動作する
    • Android版では買い物メモをデスクトップウィジットで表示したい

Joplin

現在EvernoteとZim Wikiから乗り換えて作業メモなどに利用しています.サーバはNextcloudなどWebDAVが利用でき,単体でE2EEが可能です.
LinuxではAppimageやnodeでのcli版もあり,cli版はarmなどでも動作します.

既にあるノートを全部同期するのは大変,同期ディレクトリを分けることは出来ますがクライアントは1箇所しか登録できないので難しい.ノートブック単位で同期できればいいのですが今の所出来ないようです

それとAndroidでのウィジットはフレームワークでサポートされていないので今の所サポートされないようです(◞‸◟)

とりあえず見送りです.

Carnet

Google Keep代替のアプリのようです.Linux,Android,Webで利用でき,デスクトップ版はElectron製のAppimageが用意されていてGoogle Keepからのインポート機能も付いています.これはGoogle TakeoutでExportして展開したものを指定することでインポートできるようです.
同期先サーバはNextcloudかCarnetのサービスの https://carnet.live です.

今の所暗号化は未対応.

AndroidでのウィジットはIssueに上がっています.

Linux armで動作しない&暗号化未対応だけれどelectronではないLinuxアプリを開発中だし暗号化もウィジェットもIssueにあがっているので将来に期待しつつGoogle Keepをインポートして試してみようと思います.(Takeout待ち……)

add)
Web版はhttps://carnet.live だけかと思っていたのですが,NextcloudアプリのCarnetを導入することでNextcloudでWeb版が利用できます.

add)
インポートしてみました.

Ebook reader(files_reader)を有効にしてNextcloud 16を動かなくしてしまう

Nextcloudをいじっていたらエラー画面に><

Nextcloud 20191018 16:10:02 29472

表示されているリクエストIDでログを検索してjqで展開します.

$ sudo grep 'iFqSO6b3lcl9qAXbLJXt' nextcloud.log | jq .|lv

この辺りがエラーのよう.
files_reader アプリに問題があるようです.

  "message": {
    "Exception": "Error",
    "Message": "Class 'OCP\\Config' not found",
    "Code": 0,
    "Trace": [
      {
        "file": "/var/www/files.matoken.org/apps/files_reader/lib/Hooks.php",
        "line": 41,
        "function": "get",
        "class": "OCA\\Files_Reader\\Config",
        "type": "::",
        "args": [
          "epub_enable",
          "true"
        ]
      },
      {
        "file": "/var/www/files.matoken.org/lib/private/legacy/hook.php",
        "line": 106,
        "function": "announce_settings",
        "class": "OCA\\Files_Reader\\Hooks",
        "type": "::",

とりあえずoccコマンドで`files_reader` を無効にしてエラーは解消されました.

$ php ./occ app:disable files_reader
files_reader disabled

今回エラーになったEbook reader(files_reader)はアプリストア内で確認するとNextcloud 9~13 でした.

しかし,Nextcloudのアプリ画面では「未テストのアプリを有効にする」といった警告がないので導入してしまう…….

Nextcloud 20191018 16:10:43 6871

IssueやPRは上がっているようです.

環境
$ php ./occ app:list|grep files_reader
  - files_reader
$ php ./occ status|grep version:
  - version: 16.0.5.1
$ dpkg-query -W php
php     2:7.3+69
$ lsb_release -dr
Description:    Debian GNU/Linux 10 (buster)
Release:        10
$ uname -m
x86_64

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

Ubuntu 19.10 Eoan Ermine リリース

Ermine lines by Gustavo Brenner

予定通り Ubuntu 19.10 Eoan Ermine がリリースされました.

個人的なトピックはi386 archtectureがサポートされなくなった,インストーラでのZFS root対応,Raspberry Pi 4対応辺り,環境があればWPA3対応,NVIDIA driverのインストーラー同梱も便利そうです.

問題点で気になるところはログイン画面でシャットダウン,再起動が出来ないところや Raspberry Pi 3 A+ が起動できなくなっているあたりでしょうか.どちらもバグ扱いになっているので近いうちに修正されるでしょう.

19.10は通常リリースでサポート期間も9ヶ月しか無いですし大体の人はLTSな18.04か20.04を待ったほうがいいでしょうが,新しい機能を試してみたい人は楽しめるのではないでしょうか.

ubuntu 19.10 neofetch

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

Ubuntu 19.10 (Eoan Ermine)のインストーラにZFSの選択肢が

Ubuntu 19.10のインストーラでZFSを選択できるようになったと見かけて試してみました.

現在BETAのインストーラ( Ubuntu 19.10 (Eoan Ermine) Beta )には未だ入っていなくて,dailyのみのようです.
今回は daily-live 20191011 を利用しました.

イメージを入手して確認
$ wget -c http://cdimage.ubuntu.com/ubuntu/daily-live/20191011/SHA256SUMS \
          http://cdimage.ubuntu.com/ubuntu/daily-live/20191011/SHA256SUMS.gpg \
          http://cdimage.ubuntu.com/ubuntu/daily-live/20191011/eoan-desktop-amd64.iso
$ sha256sum -c SHA256SUMS
eoan-desktop-amd64.iso: OK
$ gpgv --keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg ./SHA256SUMS.gpg ./SHA256SUMS
gpgv: Signature made Fri 11 Oct 2019 04:48:37 PM JST
gpgv:                using DSA key 46181433FBB75451
gpgv: Can't check signature: No public key
gpgv: Signature made Fri 11 Oct 2019 04:48:37 PM JST
gpgv:                using RSA key D94AA3F0EFE21092
gpgv: Good signature from "Ubuntu CD Image Automatic Signing Key (2012) <cdimage@ubuntu.com>"

インストーラを起動して画面を進めていくと,「インストールの種類」でZFSの選択がありました.
eaon zfs Screenshot ubuntu19.04 2019 10 13 00:55:43

EXPERIMENTAL: Erase disk and use ZFS
Warning: This will delete all your files on all operating systems, This is experimental and ma cause data loss. Do not use on production systems.

仮想マシンのテスト環境なのでZFSを選んで進めます.

eaon zfs 20191013 01:10:48 17155

確認画面のメッセージが ext4 になっていますがそのまま進めるとZFSになったのでメッセージの書き換えがまだされていないのでしょう.

よく見たら vda1 のことでここは /boot/grub に割り当てられていました.

$ mount |grep vda1
/dev/vda1 on /boot/grub type ext4 (rw,relatime,errors=remount-ro)

add)
解りにくからってことでバグとして上がっていました.20.04で修正されそう.

  • Bug #1847719 “zfs “Write to change disks” message prints that an…” : Bugs : ubiquity package : Ubuntu
  • インストールが終了してインストーラからの再起動でフリーズしたようで1時間ほど前っても進まなかったので強制再起動しましたが無事起動しました.

    eaon zfs 20191013 01:10:30 12924

    ファイルシステムもZFSになっています :)
    eaon zfs Screenshot ubuntu19.04 2019 10 13 01:35:03

    $ lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu Eoan Ermine (development branch)
    Release:        19.10
    Codename:       eoan
    $ sudo fdisk -l /dev/vda
    Disk /dev/vda: 15 GiB, 16106127360 bytes, 31457280 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0xc32b4703
    
    Device     Boot   Start      End  Sectors Size Id Type
    /dev/vda1  *       2048   104447   102400  50M 83 Linux
    /dev/vda2        104448 31457279 31352832  15G  5 Extended
    /dev/vda5        106496  4300799  4194304   2G a5 FreeBSD
    /dev/vda6       4302848 31457279 27154432  13G a5 FreeBSD
    $ zfs list
    NAME                                               USED  AVAIL     REFER  MOUNTPOINT
    bpool                                             65.6M  1.69G      176K  /boot
    bpool/BOOT                                        64.9M  1.69G      176K  none
    bpool/BOOT/ubuntu_qblb6g                          64.7M  1.69G     64.7M  /boot
    rpool                                             3.31G  8.80G       96K  /
    rpool/ROOT                                        2.57G  8.80G       96K  none
    rpool/ROOT/ubuntu_qblb6g                          2.57G  8.80G     2.09G  /
    rpool/ROOT/ubuntu_qblb6g/srv                        96K  8.80G       96K  /srv
    rpool/ROOT/ubuntu_qblb6g/usr                       200K  8.80G       96K  /usr
    rpool/ROOT/ubuntu_qblb6g/usr/local                 104K  8.80G      104K  /usr/local
    rpool/ROOT/ubuntu_qblb6g/var                       486M  8.80G       96K  /var
    rpool/ROOT/ubuntu_qblb6g/var/games                  96K  8.80G       96K  /var/games
    rpool/ROOT/ubuntu_qblb6g/var/lib                   484M  8.80G      378M  /var/lib
    rpool/ROOT/ubuntu_qblb6g/var/lib/AccountServices    96K  8.80G       96K  /var/lib/AccountServices
    rpool/ROOT/ubuntu_qblb6g/var/lib/NetworkManager    136K  8.80G      136K  /var/lib/NetworkManager
    rpool/ROOT/ubuntu_qblb6g/var/lib/apt              75.8M  8.80G     75.8M  /var/lib/apt
    rpool/ROOT/ubuntu_qblb6g/var/lib/dpkg             29.9M  8.80G     29.9M  /var/lib/dpkg
    rpool/ROOT/ubuntu_qblb6g/var/log                  2.07M  8.80G     2.07M  /var/log
    rpool/ROOT/ubuntu_qblb6g/var/mail                   96K  8.80G       96K  /var/mail
    rpool/ROOT/ubuntu_qblb6g/var/snap                  112K  8.80G      112K  /var/snap
    rpool/ROOT/ubuntu_qblb6g/var/spool                 112K  8.80G      112K  /var/spool
    rpool/ROOT/ubuntu_qblb6g/var/www                    96K  8.80G       96K  /var/www
    rpool/USERDATA                                    2.93M  8.80G       96K  /
    rpool/USERDATA/matoken_vyi27f                     2.72M  8.80G     2.72M  /home/matoken
    rpool/USERDATA/root_vyi27f                         112K  8.80G      112K  /root
    rpool/swap                                         758M  9.54G       92K  -
    $ dpkg -l|grep -i zfs
    ii  libzfs2linux                               0.8.1-1ubuntu13                      amd64        OpenZFS filesystem library for Linux
    ii  libzpool2linux                             0.8.1-1ubuntu13                      amd64        OpenZFS pool library for Linux
    ii  zfs-initramfs                              0.8.1-1ubuntu13                      amd64        OpenZFS root filesystem capabilities for Linux - initramfs
    ii  zfs-zed                                    0.8.1-1ubuntu13                      amd64        OpenZFS Event Daemon
    ii  zfsutils-linux                             0.8.1-1ubuntu13                      amd64        command-line tools to manage OpenZFS filesystems

    実機のeaon環境が1つあるのでこれをインストールし直してZFSを試すのもいいかもしれません.でもその環境はRAMが少ないので辛いかな?

    termux-APIのTermux-usbを少し試す

    Androidでdeb系ぽいLinux環境を実現できるTermuxからAndroidを操作するAPIのTermux-APIのupdateがありました.

    termux api usb 01

    Add a USB API compatible with libusb – see https://wiki.termux.com/wiki/Termux-usb for more information.

    なんだか気になる更新内容です.

    早速試してみます.

    まずはパッケージを最新にして関連パッケージを導入
    $ pkg update
    $ pkg install root-repo
    $ pkg install termux-api
    $ pkg install libusb
    $ pkg install clang
    termux-usb コマンドでデバイスを確認してアクセス許可を与える(ここではUSBメモリ)
    $ termux-usb -l
    [
      "/dev/bus/usb/001/004"
    ]
    $ termux-usb -r /dev/bus/usb/001/004
    Access granted.

    アクセスの許可はAndroidの画面で操作が必要です.

    termux api usb 02

    ちなみに,USB Keyboardは認識できませんでした(Androidでは利用できているのに!)

    lsusb的にusb情報を表示するプログラムのサンプルをコンパイルして実行
    $ cat << __EOF__ > usbtest.c
    > $ cat usbtest.c
    > #include <stdio.h>
    > #include <assert.h>
    > #include <libusb-1.0/libusb.h>
    >
    > int main(int argc, char **argv) {
    >     libusb_context *context;
    >     libusb_device_handle *handle;
    >     libusb_device *device;
    >     struct libusb_device_descriptor desc;
    >     unsigned char buffer[256];
    >     int fd;
    >     assert((argc > 1) && (sscanf(argv[1], "%d", &fd) == 1));
    >     assert(!libusb_init(&context));
    >     assert(!libusb_wrap_sys_device(context, (intptr_t) fd, &handle));
    >     device = libusb_get_device(handle);
    >     assert(!libusb_get_device_descriptor(device, &desc));
    >     printf("Vendor ID: %04x\n", desc.idVendor);
    >     printf("Product ID: %04x\n", desc.idProduct);
    >     assert(libusb_get_string_descriptor_ascii(handle, desc.iManufacturer, buffer, 256) >= 0);
    >     printf("Manufacturer: %s\n", buffer);
    >     assert(libusb_get_string_descriptor_ascii(handle, desc.iProduct, buffer, 256) >= 0);
    >     printf("Product: %s\n", buffer);
    >     assert(libusb_get_string_descriptor_ascii(handle, desc.iSerialNumber, buffer, 256) >= 0);
    >     printf("Serial No: %s\n", buffer);
    >     libusb_exit(context);
    > }
    > __EOF__
    $ gcc usbtest.c -lusb-1.0 -o usbtest
    $ termux-usb -e ./usbtest /dev/bus/usb/001/004
    Vendor ID: 13fe
    Product ID: 3600
    Manufacturer:
    Product: USB DISK 2.0
    Serial No: 07AC10081C16381A

    てことでTermuxからlibusbが使えるようになったようです.

    ちなみに,lsusbを実行するとこんな感じです.rootedな端末だと使えるんでしょうけど.

    $ lsusb
    lsusb: /sys/bus/usb/devices: Permission denied
    $ tsudo lsusb
    /data/data/com.termux/files/usr/bin/tsu: 146: exec: : Permission denied
    環境
    $ dpkg-query -W termux-api libusb clang
    clang   8.0.1-4
    libusb  1.0.23-rc1-1
    termux-api      0.47
    $ adb shell dumpsys package com.termux.api | grep -E 'versionCode|versionName'
        versionCode=38 minSdk=21 targetSdk=28
        versionName=0.38
    $ adb shell dumpsys package com.termux | grep -E 'versionCode|versionName'
        versionCode=75 minSdk=21 targetSdk=28
        versionName=0.75
    $ getprop ro.bootimage.build.fingerprint
    essential/mata/mata:10/QP1A.190711.122/420:user/release-keys
    $ getprop ro.build.version.security_patch
    2019-09-05
    $ getprop ro.product.cpu.abilist
    arm64-v8a,armeabi-v7a,armeabi