投げ銭

★当サイトへの投げ銭(PayPal)★

LINK


(無償、寄付歓迎) logo
世界中で使われるISO標準オフィスソフト(MSオフィス互換)

★LibreOfficeの導入事例★
詳細について

人気の投稿(1ヶ月間)

Ad

Ad

投げ銭

★当サイトへの投げ銭(PayPal)★

2020年12月2日水曜日

【Linux CentOS 7】タイムゾーンの設定方法と時刻同期


■タイムゾーンの確認と設定

◯設定されているタイムゾーンの確認を行った。

# timedatectl
            Local time: Wed 2020-12-02 04:13:46 UTC
      Universal time: Wed 2020-12-02 04:13:46 UTC
              RTC time: Wed 2020-12-02 04:13:45
             Time zone: UTC (UTC, +0000)
         NTP enabled: n/a
NTP synchronized: no
    RTC in local TZ: no
            DST active: n/a
タイムゾーンが協定世界時(UTC)になっていることがわかる。


◯タイムゾーンを「アジア/東京」に設定した。

# timedatectl set-timezone Asia/Tokyo

そして、再び設定を確認した。
# timedatectl
             Local time: Wed 2020-12-02 13:17:13 JST
      Universal time: Wed 2020-12-02 04:17:13 UTC
              RTC time: Wed 2020-12-02 04:17:13
             Time zone: Asia/Tokyo (JST, +0900)
         NTP enabled: n/a
NTP synchronized: no
    RTC in local TZ: no
            DST active: n/a
# date
Wed Dec  2 13:20:49 JST 2020


■ntpを用いて時刻同期を行う方法

Dockerコンテナにおいてはホストに依存しているため下記設定は不要。

1、NTPデーモンのインストール
# yum install ntp
Installed:
  ntp.x86_64 0:4.2.6p5-29.el7.centos.2
2、時刻同期の有効化
# timedatectl set-ntp true

これにより、連動して、ntpdデーモンが起動することを確認できた。
また、falseにすると、ntpdデーモンが停止することも確認できた。
(systemctl status ntpdで確認可能である。)

もし、ntpdが導入されていなければ、「Failed to set ntp: NTP not supported.」というエラーが発生した。

そして、設定の確認を行った
# timedatectl
             Local time: Wed 2020-12-02 13:22:07 JST
      Universal time: Wed 2020-12-02 04:22:07 UTC
              RTC time: Wed 2020-12-02 04:22:07
             Time zone: Asia/Tokyo (JST, +0900)
         NTP enabled: yes
NTP synchronized: no
   RTC in local TZ: no
           DST active: n/a


<参考>
・[まとめ]Linuxシステム時刻について
< http://luozengbin.github.io/blog/2015-06-27-%5B%E3%81%BE%E3%81%A8%E3%82%81%5Dlinux%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E6%99%82%E5%88%BB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6.html > 2020年12月02日

・Docker コンテナの時刻同期(時刻データ)について
< https://qiita.com/hirotaka-tajiri/items/f5900b236a005d7ffe58 > 2020年12月02日

2020年8月28日金曜日

【ASP.NET Core 3.1.102】他マシンのブラウザからでもhttpでWEBページにアクセスできるようにする【Linux】

asp.net core 3で、テストプロジェクト(myproject)を作成した。
しかしプロジェクトのフォルダにて dotnet run して、他のマシンのブラウザからIPアドレスを入力したがWEBページが表示できなかった。

プログラムが動作しているマシン上のブラウザからなら、アクセスが可能だった。
一種のアクセス制御がデフォルトで機能しているためだとわかった。
調べてみるとデフォルトでは、localhost(127.0.0.1)でのみListenしているようだった。

他のマシンのブラウザからもアクセス可能なようにするには、イントラネットからアクセスできるその他のIPアドレスでもListenするように設定する必要があった。


そして、次の手順の設定することによって外部マシンからでも、テストプログラムにhttpあるいは、httpsアクセスが可能になった。

httpsでなく、httpでアクセスしたい場合は、手順1だけでなく、手順2の設定も必要になる。



1、launchSettings.json で、applicationUrl でListenするIPアドレスとポートを指定する。

$ cat Properties/launchSettings.json

{
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:9291",
      "sslPort": 44347
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "myproject": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "https://192.168.12.13:5001;http://192.168.12.13:5000;https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}


上記設定で、https://192.168.12.13:5001;http://192.168.12.13:5000 のように、httpsも併せて設定している場合は、httpsでも接続できるのでアクセスできなくなる問題は生じない。

しかし、httpのみ設定した場合は、デフォルトではうまくアクセスできなかった。
これは、httpsでアクセスするように自動でリダイレクトされるからだ。

httpでアクセスしたい場合は、手順1に加えて、手順2のようにしてhttpsでのリダイレクトを行わないように設定する必要がある。



2、app.UseHttpsRedirection(); をコメントアウトする。(必要に応じて)

app.UseHttpsRedirection() が設定されている場合、httpでアクセスしても、httpsでアクセスするようにリダイレクトされてしまう。
そこで、httpでもアクセスできるように、下記のようにコメントアウトしておく。


namespace surveilcam
{
    public class Startup
    {
(略)

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
(略)
            //app.UseHttpsRedirection();
(略)



以上で、設定は完了である。
dotnet run --project myproject で動作させ、ブラウザからhttpでアクセスすることができた。

$ dotnet run --project myproject
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://192.168.12.13:4001
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://192.168.12.13:4000
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: https://localhost:4001
info: Microsoft.Hosting.Lifetime[0]
      Now listening on: http://localhost:4000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: /home/pi/dotnet/razortest
info: Microsoft.Hosting.Lifetime[0]



<参考>
・5 ways to set the URLs for an ASP.NET Core app
< https://andrewlock.net/5-ways-to-set-the-urls-for-an-aspnetcore-app/ > 2020年8月28日

2020年8月6日木曜日

【Linux CentOS 7】FTPサーバーからローカルPCへrsyncみたいに同期させる【LFTPクライアント】


◯WV-SFN130というパナソニック製のネットワークカメラについて

これは天井に取り付ける小さいドーム型のカメラである。
PoEで電源を供給できるので便利である。

撮影された動画データはRTSPストリーミングで別のビデオアプリで受信することもできるし、
内蔵のSDXCカードにmp4形式で保存しておくこともできる。

mp4ファイルに保存しておく場合、何か動きを感知したときだけその前後を記録することもできる。
その場合、mp4ファイルはその都度分割されフォルダにまとめられる。

SDカードは容量上限があるため、mp4ファイルは上書きされるように設定している。


◯SDカードに保存されたデータをネットワーク越しにコピーする方法

このフラッシュメモリに保存されたmp4ファイルは、ネットワークカメラのFTPサーバー機能でリモートから取り出すことができる。

今回、このカメラのFTPサーバー機能を利用しSD内の撮影データをネットワーク上のPCのディスクに保存することにした。

LFTPというCUIのFTPクライアントソフトウェアを用いた。
LFTPは、rsyncコマンドのように特定のディレクトリを指定してリモートの保存領域にミラーリングを行えるので便利である。

以下では、LFTPクライアントのインストールからミラーリング設定まで取り扱っている。



■LFTPクライアントソフトウェアのインストール

情報を表示させた。
# yum info lftp
Name        : lftp
Arch        : x86_64
Version     : 4.4.8
Release     : 12.el7_8.1
Size        : 752 k
Repo        : updates/7/x86_64
Summary     : A sophisticated file transfer program
URL         : http://lftp.yar.ru/
License     : GPLv3+
Description : LFTP is a sophisticated ftp/http file transfer program. Like bash, it has job
            : control and uses the readline library for input. It has bookmarks, built-in
            : mirroring, and can transfer several files in parallel. It is designed with
            : reliability in mind.

インストールを行った。
# yum install lftp
Installed:
  lftp.x86_64 0:4.4.8-12.el7_8.1

Complete!


■動作設定ファイルの作成

lftpは、普通のftpクライアントみたいにダイアログ形式でも利用可能である。
しかしここではcronなどで動作を自動化をさせたいので、その作業手順をファイルに記述した。


◯作業手順ファイルの作成

FTPサーバーのIPアドレスは、192.168.1.11 とする。

# vi lftp_cam-11.task
open -u USERNAME,PASSWORD 192.168.1.11
#cd /B: ←テスト用コメントアウトしている
#ls . ←テスト用コメントアウトしている
mirror --delete --dry-run --verbose --log=/root/lftp-mirror_cam-11.log /B:/M_ALARM /root/cam-11/
close
quit

<mirrorコマンドのオプションなどについて説明>

/B:/M_ALARM これはFTPサーバー内のディレクトリでミラーリングのターゲットディレクトリである。
/root/cam-11/ これはミラー先のディレクトリである。

--delete データソース側に存在しないファイルやディレクトリは、ミラーリング側からも削除する。
(扱いに注意が必要である。rsyncコマンドで挙動の学習が必要だと思う。)
例えば、データソースディレクトリの /B:/M_ALARM には、最後にスラッシュがありませんが、
ミラーリング先ディレクトリの  /root/cam-11/ には最後にスラッシュがあります。
この違いが不明な場合には、rsyncコマンドの挙動について学習が必要です。
さもなければ、--deleteオプションで、意図せずにデータを削除してしまう危険があります。


--dry-run どのようにファイル操作が行われるかのみ表示して実際のコピーや削除を行わない。
(テスト用なので実際にコピー削除操作するには、このオプションは消しておくこと。)

--verbose 進捗状況を表示させる。(デバッグ用途のため本番では不要)

--log=パス ログファイル(ファイル操作が逐一記録されるため、不要なら消しておく。)


すなわち、/B:/M_ALARMディレクトリが、/root/cam-11/内にミラーリングされることになる。


◯作業の実行

上で作成した作業手順ファイルを指定し、lftpコマンドを実行した。
後で、これをcrontab等でスケジュールしておけば良い。

# lftp -f lftp_cam-11.task
Making directory `10792301'                               
Transferring file `10792301/10792304_200728155937_A.mp4'            
Transferring file `10792301/10792305_200728155955_A.mp4'
Transferring file `10792301/10792306_200728160011_A.mp4'
Transferring file `10792301/10792307_200728160042_A.mp4'
(略)

◯動作中での確認

ログファイルの内容
# cat lftp-mirror_cam-11.log 
mkdir -p file:/root/cam-11/M_ALARM
mkdir file:/root/cam-11/M_ALARM/11042701
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042788_200804170451_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042789_200804170451_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042790_200804170523_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042791_200804170529_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042792_200804170608_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042793_200804170608_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042794_200804170642_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042795_200804170642_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042796_200804170715_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042797_200804170723_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042798_200804170753_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042799_200804170810_A.mp4
get -O /root/cam-11/M_ALARM/11042701 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042701/11042800_200804170826_A.mp4
mkdir file:/root/cam-11/M_ALARM/11042801
get -O /root/cam-11/M_ALARM/11042801 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042801/11042801_200804170848_A.mp4
get -O /root/cam-11/M_ALARM/11042801 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042801/11042802_200804170907_A.mp4
get -O /root/cam-11/M_ALARM/11042801 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042801/11042803_200804170923_A.mp4
get -O /root/cam-11/M_ALARM/11042801 ftp://USERNAME:PASSWORD@192.168.1.11/B:/M_ALARM/11042801/11042804_200804170940_A.mp4
(省略)

ファイルのミラーリングの最中であるが、次のようにディレクトリやファイルを確認できた。

# ls /root/cam-11/M_ALARM/11042701/ -all
total 240504
drwxr-xr-x. 2 root root     4096 Aug  6 07:28 .
drwxr-xr-x. 4 root root       38 Aug  6 07:28 ..
-rw-r--r--. 1 root root 19731324 Aug  4 13:05 11042788_200804170451_A.mp4
-rw-r--r--. 1 root root 19810264 Aug  4 13:05 11042789_200804170451_A.mp4
-rw-r--r--. 1 root root 19752184 Aug  4 13:05 11042790_200804170523_A.mp4
-rw-r--r--. 1 root root 14870080 Aug  4 13:05 11042791_200804170529_A.mp4
-rw-r--r--. 1 root root 19763796 Aug  4 13:06 11042792_200804170608_A.mp4
-rw-r--r--. 1 root root 16844324 Aug  4 13:06 11042793_200804170608_A.mp4
-rw-r--r--. 1 root root 19763300 Aug  4 13:06 11042794_200804170642_A.mp4
-rw-r--r--. 1 root root 18821500 Aug  4 13:07 11042795_200804170642_A.mp4
-rw-r--r--. 1 root root 19758892 Aug  4 13:07 11042796_200804170715_A.mp4
-rw-r--r--. 1 root root 19767132 Aug  4 13:07 11042797_200804170723_A.mp4
-rw-r--r--. 1 root root 18794032 Aug  4 13:08 11042798_200804170753_A.mp4
-rw-r--r--. 1 root root 19761400 Aug  4 13:08 11042799_200804170810_A.mp4
-rw-r--r--. 1 root root 18801800 Aug  4 13:08 11042800_200804170826_A.mp4

Linuxマシンにミラーリング後は、煮たり焼いたりできる。

以上



<参考>
・LFTPでサーバ間でファイル転送をする
< https://qiita.com/akkykg/items/bea5f11587b75d3db2cc > 2020年8月6日

・FTP でも rsync みたいにコマンドからファイル転送したい
< https://girigiribauer.com/tech/20160903/ >

・Linux / Unix: lftp Command To Mirror Files and Directories
< https://www.cyberciti.biz/faq/lftp-mirror-example/ > 2020年8月6日

・How do I back up via FTP and rsync?
< https://askubuntu.com/questions/34868/how-do-i-back-up-via-ftp-and-rsync > 2020年8月6日

・Sync remote folders on Linux
< https://superuser.com/questions/6892/sync-remote-folders-on-linux > 2020年8月6日

2020年7月23日木曜日

【Linux mint 19.3】コマンドラインから音楽CDをリッピングしmp3形式などで保存する【CUIリッピングソフト abcde】

CUIで動作するリッピングソフトウェアabcdeを用いて音楽CDをリッピングする方法

abcdeを用いれば、読み取り速度を任意に指定できる。
他の標準的なリッピングソフトウェアでは読み取り時にエラーが出るような音楽CDでも、
abcdeを用いれば速度を落としてリッピングできた。
速度を落としたり、mp3のビットレートを指定したり、オプション指定については最後に記述した。


■Linux mintのバージョン

$ cat /etc/issue
Linux Mint 19.3 Tricia \n \l


■必要なパッケージのインストール

下記にまとめたように、パッケージの導入では1〜5までの手順がある。
これはインストールコマンドのみをピックアップしたものなので、必ず、続く本文を参照してください。

手順2のパッケージはシステムに導入済みのPythonバージョンによって異なるので、本文を参考にしてください。

楽曲名をデータベースから引いてくる必要がなければ、3までのパッケージのインストールのみで良かった。

手順の5はとても時間がかかった。

1、apt-get install abcde
2、apt-get install python-eyed3 eyed3 (Pythonのバージョンによって異なる)
3、apt-get install lame
(可逆圧縮flac形式を使いたい場合、sudo apt-get install flac )
4、apt-get install libmusicbrainz-discid-perl libwebservice-musicbrainz-perl
5、(cpanにおいて)upgrade WebService::MusicBrainz


以下、本文で、インストール手順である。

まず、rootユーザーになった。
# sudo su

そして、動作テストも行うので、CDドライブに適当な音楽CDをセットしておく。


1、abcdeパッケージのインストール

◯ abcdeのインストールを行った。
# apt-get install abcde


2、eyed3パッケージのインストール

動作確認
# abcde -o mp3
[ERROR] abcde: eyeD3 is not in your path.
[INFO] Define the full path to the executable if it exists on your system.
[INFO] Hint: sudo apt-get install
必要なプログラムが見つからずエラーになった。
さらに必要なパッケージを導入する。


◯パッケージの検索を行った。
# apt-cache search eyed3
eyed3 - Display and manipulate id3-tags on the command-line
python-eyed3 - Python module for id3-tags manipulation (Python 2 version)python3-eyed3 - Python module for id3-tags manipulation (Python 3 version)
Pythonのバージョンによって導入するモジュールのパッケージ名が異なっている。
そこで、現システムに入っているPythonのバージョンを確認した。

◯Pythonバージョンの確認を行った。
# python -V
Python 2.7.15+
現システムのPythonバージョンは2だとわかったので、
上記一覧から python-eyed3 をインストールする。

◯2つのパッケージを導入した。
(上記手順で確認したPythonバージョンに適合したもの)
# apt-get install python-eyed3 eyed3


3、lameパッケージのインストール

abcdeが動作するか再テストした。
# abcde -o mp3
[ERROR] abcde: lame is not in your path.
[INFO] Define the full path to the executable if it exists on your system.
[INFO] Hint: sudo apt-get install lame
lameが不足しているためエラーが発生したのでこれを導入する。

◯ lameのインストールを行った。
# apt-get install lame

(可逆圧縮flac形式を使いたい場合、sudo apt-get install flac )


4、perl関係のパッケージのインストール

abcdeが動作するか再テストした。
# abcde -o mp3
dasd: 1 64  150 310892 0
4093
7513
13326
17142
23710
27693
33783
37909
44530
48139
(中略)
283252
287225
292262
295923
301108
Can't locate MusicBrainz/DiscID.pm in @INC (you may need to install the MusicBrainz::DiscID module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/bin/abcde-musicbrainz-tool line 18.
BEGIN failed--compilation aborted at /usr/bin/abcde-musicbrainz-tool line 18.
Grabbing entire CD - tracks: 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
Can't locate MusicBrainz/DiscID.pm in @INC (you may need to install the MusicBrainz::DiscID module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.26.1 /usr/local/share/perl/5.26.1 /usr/lib/x86_64-linux-gnu/perl5/5.26 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.26 /usr/share/perl/5.26 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at /usr/bin/abcde-musicbrainz-tool line 18.
BEGIN failed--compilation aborted at /usr/bin/abcde-musicbrainz-tool line 18.
No Musicbrainz match.
---- Unknown Artist / Unknown Album ----
1: Track 1
2: Track 2
3: Track 3
4: Track 4
5: Track 5
6: Track 6
7: Track 7
8: Track 8
9: Track 9
10: Track 10
(中略)
60: Track 60
61: Track 61
62: Track 62
63: Track 63
64: Track 64
Edit selected CDDB data [Y/n]?
[CTRL]+^c で中断した。
上記、マーカーで色をつけたところのようにエラーが発生した。

実は、ここまでくればCDのリッピング自体は可能になる。
このエラー表示のMusicBrainzというのは楽曲名データベースである。
楽曲名を引いてこなくてよいならこのエラーを無視しても良い。

ここではさらにエラーの解消に努めた。
調べたところによると、次のパッケージを導入すると良いとわかった。

◯ perl関係のパッケージの導入を行った。
# apt-get install libmusicbrainz-discid-perl libwebservice-musicbrainz-perl


5、perl関係のモジュールのアップデート

再び、abcdeのテストを行った。
# abcde -o mp3
dasd: 1 12  150 209835 0
19960
35686
56229
71882
93359
108267
128407
149368
161425
176985
189222
Grabbing entire CD - tracks: 01 02 03 04 05 06 07 08 09 10 11 12
URL (http://musicbrainz.org/ws/1/release/?type=xml&discid=Uj**********Xk-) Request Failed - Code: 410 Error: Gone
No Musicbrainz match.
---- Unknown Artist / Unknown Album ----
1: Track 1
2: Track 2
3: Track 3
4: Track 4
5: Track 5
6: Track 6
7: Track 7
8: Track 8
9: Track 9
10: Track 10
11: Track 11
12: Track 12
Edit selected CDDB data [Y/n]? ^C
まだ、マーカーで色づけたようにエラーが残る。
参考サイトによれば、perlモジュールのアップデートで解消すればよいとわかった。


◯ cpanの実行とアップデート
cpan
Loading internal null logger. Install Log::Log4perl for logging messages
CPAN.pm requires configuration, but most of it can be done automatically.
If you answer 'no' below, you will enter an interactive dialog for each
configuration option instead.
Would you like to configure as much as possible automatically? [yes] yes

Autoconfiguration complete.
commit: wrote '/root/.cpan/CPAN/MyConfig.pm'
You can re-run configuration any time with 'o conf init' in the CPAN shell
Terminal does not support AddHistory.
cpan shell -- CPAN exploration and modules installation (v2.18)
Enter 'h' for help.

upgradeコマンドの実行
かなり時間がかかった。途中まるで無応答になったみたいに静かになるし、
エラーも表示されて心配したが、放置したままにすると30分程度かかって終了した。

 cpan[1]> upgrade WebService::MusicBrainz
Fetching with LWP:
http://www.cpan.org/authors/01mailrc.txt.gz
Reading '/root/.cpan/sources/authors/01mailrc.txt.gz'
............................................................................DONE
Fetching with LWP:
http://www.cpan.org/modules/02packages.details.txt.gz
Reading '/root/.cpan/sources/modules/02packages.details.txt.gz'
  Database was generated on Wed, 22 Jul 2020 17:41:03 GMT
.............
  New CPAN.pm version (v2.28) available.
  [Currently running version is v2.18]
  You might want to try
    install CPAN
    reload cpan
  to both upgrade CPAN.pm and run the new version without leaving
  the current session.

...............................................................DONE
Fetching with LWP:
http://www.cpan.org/modules/03modlist.data.gz
Reading '/root/.cpan/sources/modules/03modlist.data.gz'
DONE
Writing /root/.cpan/Metadata
Package namespace         installed    latest  in CPAN file
WebService::MusicBrainz        0.93    v1.0.5  BFAIST/WebService-MusicBrainz-1.0.5.tar.gz
Running install for module 'WebService::MusicBrainz'
Fetching with LWP:
http://www.cpan.org/authors/id/B/BF/BFAIST/WebService-MusicBrainz-1.0.5.tar.gz
Fetching with LWP:
http://www.cpan.org/authors/id/B/BF/BFAIST/CHECKSUMS
Checksum for /root/.cpan/sources/authors/id/B/BF/BFAIST/WebService-MusicBrainz-1.0.5.tar.gz ok
Scanning cache /root/.cpan/build for sizes
DONE
'YAML' not installed, will not store persistent state
----  Unsatisfied dependencies detected during  ----
---- BFAIST/WebService-MusicBrainz-1.0.5.tar.gz ----
    Module::Build [build_requires]
Running install for module 'Module::Build'
Fetching with LWP:
http://www.cpan.org/authors/id/L/LE/LEONT/Module-Build-0.4231.tar.gz
Fetching with LWP:
http://www.cpan.org/authors/id/L/LE/LEONT/CHECKSUMS
Checksum for /root/.cpan/sources/authors/id/L/LE/LEONT/Module-Build-0.4231.tar.gz ok
Configuring L/LE/LEONT/Module-Build-0.4231.tar.gz with Makefile.PL
# running Build.PL --installdirs site
Checking optional features...
inc_bundling_support....disabled
  requires:
    ! inc::latest is not installed
ERRORS/WARNINGS FOUND IN PREREQUISITES.  You may wish to install the versions
of the modules indicated above before proceeding with this installation
Created MYMETA.yml and MYMETA.json
Creating new 'Build' script for 'Module-Build' version '0.4231'
  LEONT/Module-Build-0.4231.tar.gz
  /usr/bin/perl Makefile.PL INSTALLDIRS=site -- OK
Running make for L/LE/LEONT/Module-Build-0.4231.tar.gz
/usr/bin/perl Build --makefile_env_macros 1
Building Module-Build
  LEONT/Module-Build-0.4231.tar.gz
  /usr/bin/make -- OK
Running make test
/usr/bin/perl Build --makefile_env_macros 1 test
t/00-compile.t ................. ok   
t/PL_files.t ................... ok 
t/actions/installdeps.t ........ ok 
t/actions/manifest_skip.t ...... ok 
t/add_property.t ............... ok   
t/add_property_array.t ......... ok 
t/add_property_hash.t .......... ok 
(長い 中略)
Result: PASS
  BFAIST/WebService-MusicBrainz-1.0.5.tar.gz
  ./Build test -- OK
Running Build install
Building WebService-MusicBrainz
Installing /usr/local/share/perl/5.26.1/WebService/MusicBrainz.pm
Installing /usr/local/share/perl/5.26.1/WebService/MusicBrainz/Request.pm
Installing /usr/local/man/man3/WebService::MusicBrainz::Request.3pm
Installing /usr/local/man/man3/WebService::MusicBrainz.3pm
  BFAIST/WebService-MusicBrainz-1.0.5.tar.gz
  ./Build install  -- OK
cpan[2]> 
途中、表示内容を省略した。

以上で、インストールが完了した。


通常ユーザーに戻っておく。
# exit


■abcdeの動作確認

CDドライブに適当な音楽CDをセットしてから、次のコマンドを実行した。
mp3形式で出力するようにオプション指定した。

このCDについて、楽曲情報がデータベースに見つからなかった。

$ abcde -o mp3
dasd: 1 14  150 308902 0
25395
47155
70722
92670
114235
132887
152587
174595
195070
218470
241860
265932
285847
Grabbing entire CD - tracks: 01 02 03 04 05 06 07 08 09 10 11 12 13 14
abcde: attempting to resume from /home/user/abcde.4zigtquBk61IxpjK_Q.8r26IKjo-..
No Musicbrainz match.
---- Unknown Artist / Unknown Album ----

1: Track 1
2: Track 2
3: Track 3
4: Track 4
5: Track 5
6: Track 6
7: Track 7
8: Track 8
9: Track 9
10: Track 10
11: Track 11
12: Track 12
13: Track 13
14: Track 14
楽曲タイトルの編集もできるようだが、Noを選択した。
Edit selected CDDB data [y/N]? n
Is the CD multi-artist [y/N]? n

すると、トラック1から読み取りが始まった。
Grabbing track 01: Track 1...
cdparanoia III release 10.2 (September 11, 2008)
Ripping from sector       0 (track  1 [0:00.00])
  to sector   25394 (track  1 [5:38.44])
outputting to /home/user/abcde.4zigtquBk61IxpjK_Q.8r26IKjo-/track01.wav
 (== PROGRESS == [                              | 025394 00 ] == :^D * ==) 
Done.
abcde.4zigtquBk61IxpjK_Q.8r26IKjo- というフォルダがカレントディレクトリに作られ、
track01.wav というファイルが作られていた。

そのまま、トラック2の読み取りが始まるが、同時並行して、
Unknown_Artist-Unknown_Album というフォルダも作られ、内部に、
01.Track_1.mp3 というファイルが作られた。


以下、最終トラックまで繰り返された。
Grabbing track 02: Track 2...
cdparanoia III release 10.2 (September 11, 2008)
Ripping from sector   25395 (track  2 [0:00.00])
  to sector   47154 (track  2 [4:50.09])
outputting to /home/user/abcde.4zigtquBk61IxpjK_Q.8r26IKjo-/track02.wav
 (== PROGRESS == [                              | 047154 00 ] == :^D * ==) 
Done.
(省略)
Grabbing track 14: Track 14...
cdparanoia III release 10.2 (September 11, 2008)
Ripping from sector  285847 (track 14 [0:00.00])
  to sector  308901 (track 14 [5:07.29])
outputting to /home/user/abcde.4zigtquBk61IxpjK_Q.8r26IKjo-/track14.wav
 (== PROGRESS == [                              | 308901 00 ] == :^D * ==) 
Done.
最終トラックまで完了すると、次のメッセージが表示されて終了した。
Encoding track 14 of 14: Track 14...
LAME 3.100 64bits (http://lame.sf.net)
Using polyphase lowpass filter, transition band: 16538 Hz - 17071 Hz
Encoding /home/user/abcde.4zigtquBk61IxpjK_Q.8r26IKjo-/track14.wav
      to /home/user/abcde.4zigtquBk61IxpjK_Q.8r26IKjo-/track14.mp3
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3
    Frame          |  CPU time/estim | REAL time/estim | play/CPU |    ETA
 11769/11769 (100%)|    0:14/    0:14|    0:14/    0:14|   21.397x|    0:00
-------------------------------------------------------------------------------------------------------
   kbps        LR    MS  %     long switch short %
  128.0       12.8  87.2        98.8   0.7   0.5
Writing LAME Tag...done
ReplayGain: -7.8dB
Tagging track 14 of 14: Track 14...
/home/user/abcde.4zigtquBk61IxpjK_Q.8r26IKjo-/track14.mp3                                  [ 4.69 MB ]
--------------------------------------------------------------------------------------------------------
Setting artist: Unknown Artist
Setting album: Unknown Album
Setting title: Track 14
Setting genre: 255
eyed3.id3:WARNING: Invalid numeric genre ID: 255
Invalid numeric genre ID: 255
Finished.

mp3の保存先フォルダの内容を確認した。

$ cd Unknown_Artist-Unknown_Album/
$ ls -all
total 64520
drwxrwxr-x  2 user user    4096 Jul 23 08:37 .
drwx------ 27 user user   12288 Jul 23 08:37 ..
-rw-rw-r--  1 user user 5418839 Jul 23 08:29 01.Track_1.mp3
-rw-rw-r--  1 user user 4643107 Jul 23 08:30 02.Track_2.mp3
-rw-rw-r--  1 user user 5028466 Jul 23 08:30 03.Track_3.mp3
-rw-rw-r--  1 user user 4683231 Jul 23 08:31 04.Track_4.mp3
-rw-rw-r--  1 user user 4601729 Jul 23 08:32 05.Track_5.mp3
-rw-rw-r--  1 user user 3980224 Jul 23 08:32 06.Track_6.mp3
-rw-rw-r--  1 user user 4203832 Jul 23 08:33 07.Track_7.mp3
-rw-rw-r--  1 user user 4696188 Jul 23 08:34 08.Track_8.mp3
-rw-rw-r--  1 user user 4368926 Jul 23 08:34 09.Track_9.mp3
-rw-rw-r--  1 user user 4992939 Jul 23 08:35 10.Track_10.mp3
-rw-rw-r--  1 user user 4990849 Jul 23 08:36 11.Track_11.mp3
-rw-rw-r--  1 user user 5136299 Jul 23 08:36 12.Track_12.mp3
-rw-rw-r--  1 user user 4249390 Jul 23 08:37 13.Track_13.mp3
-rw-rw-r--  1 user user 4919378 Jul 23 08:37 14.Track_14.mp3


■音楽CD読み取り時のその他のオプション指定

abcdeは、音楽CD読み取りの際に、読み取りについてオプションを指定できる。


◯例えば次のコマンドは、読み取り速度 13倍速で、トラック49から読み取っている。

$ abcde -S 13 -t 49 -o mp3

他のリッピングソフトを利用していたとき、
多数のトラックを含む音楽CDを、ラップトップPCの薄型CD/DVDドライブで読み取ろうとすると、
後の方のトラックの読み取りに必ず失敗する問題に遭遇していた。
しかし、ソフトをabcdeに切り替えてさらに読み取り速度を指定して下げることによって安定して読み取りができるようになった。
このように速度調整を意図してできるので重宝している。


◯また、次のコマンドは、mp3のビットレート(kbps)を指定している。

・320Kbps
$ abcde -o "mp3:-b 320"

・160Kbps
$ abcde -o "mp3:-b 160"

当然、仕上がりのmp3ファイルのサイズは変化する。
デフォルトのビットレートは128Kbpsになっていた。


◯flac形式で圧縮したい場合

(可逆圧縮flac形式を使いたい場合、sudo apt-get install flac が必要)
$ abcde -o flac

ドライブを指定したい場合(デバイス名 /dev/sr1などは予め調べておく。)
$ abcde -d /dev/sr1 -o flac

次のエラーが発生する場合には、上記のようにデバイス名を指定すると良かった。

[WARNING] something went wrong while querying the CD... Maybe a DATA CD?
[WARNING] Error trying to calculate disc ids without lead-out information.



その他、指定可能なオプションの一覧は次の通り。

$ abcde -h
This is abcde v2.8.1.
Usage: abcde [options] [tracks]
Options:
-1     Encode the whole CD in a single file
-a <action1[,action2]...>
       Actions to perform:
       cddb,read,getalbumart,normalize,encode,tag,move,replaygain,playlist,clean
-b     Enable batch normalization
-c <file>
       Specify a configuration file (overrides system and user config files)
-C <discid#>
       Specify discid to resume from (only needed if you no longer have the cd)
-d <device>
       Specify CDROM device to grab (flac uses a single-track flac file)
-D     Debugging mode (equivalent to sh -x abcde)
-e     Erase encoded track information from status file
-f     Force operations that otherwise are considered harmful. Read "man abcde"
-g     Use "lame --nogap" for MP3 encoding. Disables low disk and pipes flags
-G     Get album art by using the 'getalbumart' action
-h     This help information
-j <#> Number of encoder processes to run at once (localhost)
-k     Keep the wav tracks for later use
-l     Use low disk space algorithm
-L     Use local CDDB storage directory
-m     Modify playlist to include CRLF endings, to comply with some players
-n     No lookup. Don't query CDDB, just create and use template
-N     Noninteractive. Never prompt for anything
-o <type1[,type2]...>
       Output file type(s) (vorbis,mp3,flac,spx,mpc,wav,m4a,opus,mka,wv,ape,mp2,tta). Defaults to vorbis
-p     Pad track numbers with 0's (if less than 10 tracks)
-P     Use UNIX pipes to read+encode without wav files
-r <host1[,host2]...>
       Also encode on these remote hosts
-s <field>
       Show fields from the CDDB info (year,genre)
-S <#> Set the CD speed
-t <#> Start the track numbering at a given number
-T <#> Same as -t but modifies tag numbering
-U     Do NOT use UNICODE (UTF8) tags and comments
-v     Show version number and exit
-V     Be a bit more verbose about what is happening behind the scenes
-x     Eject CD after all tracks are read
-w <comment>
       Add a comment to the CD tracks
-W <#> Concatenate CDs: -T #01 -w "CD #"
-z     Use debug CDROMREADERSYNTAX option (needs cdparanoia)
Tracks is a space-delimited list of tracks to grab.
Ranges specified with hyphens are allowed (i.e., 1-5).

以上


<参考>
・cdparanoia
< https://ja.wikipedia.org/wiki/Cdparanoia > 2020年4月21日

・Use abcde to produce high quality flac and mp3 output with album art under Xenial?
< https://askubuntu.com/questions/788327/use-abcde-to-produce-high-quality-flac-and-mp3-output-with-album-art-under-xenia > 2020年6月29日

・Renovated abcde guide...
<https://ubuntuforums.org/showthread.php?t=2257705  > 2020年7月23日

・How MP3 Files Work
<https://computer.howstuffworks.com/mp32.htm  >2020年6月29日

2020年4月25日土曜日

【Raspberry Pi 4 B / Raspbian】BOINCの作業領域を外付けUSB HDDドライブに移してSDの劣化を防止する【BOINC 7.14.2+dfsg-3】


■概要■

下記ページに記したように通常にBOINCをインストールしただけでは、ワークディレクトリはSDカード上に設けられる。

【Raspberry pi 4 / Raspbian】分散コンピューティングRosetta@homeに参加してタンパク質の立体構造解析に貢献する【Raspbian】

しかし、24時間365日稼働させるとなると、Raspberry Pi のメインSDカードの劣化が心配である。
そこで、USB HDD(もしくはUSB SSD)に設けたパーティションをBOINCが作業領域として使用するように設定したい。
連続稼動を考えるなら、ひょっとしたらSSDの方が良いのかも知れない。


Raspberry Pi 4であれば、USB 3.0ポートを備えているので、
USB 3.0 SuperSpeedに対応したUSB HDDであれば、高速な動作を期待できる。

下記ページには、Raspberry Pi 4 に、外付けのUSB HDDを接続し、システム起動時に自動的にマウントするように設定する手順を記した。
Raspberry PiのUSBポートの電源不足を回避する方法についても記載している。

【Raspberry pi 4 B / Raspbian 】USB 3.0対応のUSB HDDを自動的にマウントするように設定する手順


以下では、上記ページの方法で、Raspberry Pi 4にUSB HDDが利用できるようになっているものとして、(ただし、まだマウントまでする必要はない。)
BOINCのワークディレクトリを、USB HDD上のディレクトリに変更する手順を記した。
以下手順では、USB HDDは、全てデータが消去されてしまうので不要なものを使うこと。

以下の作業では、rootユーザーで行っている。
$ sudo su



■BOINCのワーキングディレクトリを移すためのUSB接続のHDD(もしくはSSD)の準備

(注意)
以下手順では、USB HDDは、全てデータが消去されてしまうので不要なものを使うこと。

以下に登場する、"sdX"という表記は、操作ミスを防ぐために"sda"を置き換えたものである。
お使いの環境に応じて、変更するようにしてください。


〇適切な大きさの第一パーティションの作成を行った。

ここで使用したディスクは、USB 3.0接続の2.5インチHDDで、500GBの容量がある。
BOINCのワーキングディレクトリの移設用として、約32GB分のパーティションを作成した。
この確保容量は、Rosetta@homeプロジェクトのコンピューティングのみを想定している。
後で示すように、4.5 GB程度しか使用されない。

しかし、複数のプロジェクトに同一マシンで参加させる場合、
プロジェクトの扱うデータにも関係して、容量はずっと大きくなるのではないかと思う。(これは試してない。)

USB HDDは、/dev/sdXとして認識されたとする。(接続直後、dmesgコマンドで確認可能)
これを引数にとって、partedコマンドを実行した。

root@raspberrypi:/home/pi# parted /dev/sdX
GNU Parted 3.2
Using /dev/sdX
Welcome to GNU Parted! Type 'help' to view a list of commands.

・表示をバイト単位に切り替えた。
(parted) unit B


・現在のパーティションテーブルを表示させた。
(parted) p
Model: JMicron Generic (scsi)
Disk /dev/sdX: 500107862016B
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number  Start     End            Size           Type     File system  Flags
 1      1048576B  500107837439B  500106788864B  primary  ext4
上記のように、全ての領域がパーティションに確保されている。


・このパーティションを削除した。
(parted) rm 1

(parted) p
Model: JMicron Generic (scsi)
Disk /dev/sdX: 500107862016B
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number  Start  End  Size  Type  File system  Flags
上記のように、全てのパーティションは無くなった。
また、このHDDディスクが4Kバイトセクタであることに注意した。


・第一パーティションをBOINCワーキングディレクトリ用として作成した。
(parted) mkpart
Partition type?  primary/extended? primary ←基本パーティションとして作成する。
File system type?  [ext2]? ext4 ←ext4ファイルシステムを利用する。
Start? 1048576  (重要)4096の256倍になるように指定した。アライメントを考慮した。
End? 32GB  ←パーティションの容量はBOINC作業領域専用のため32GBとした。
(parted) p
Model: JMicron Generic (scsi)
Disk /dev/sdX: 500107862016B
Sector size (logical/physical): 512B/4096B
Partition Table: msdos
Disk Flags:
Number  Start     End           Size          Type     File system  Flags 1      1048576B  32000442367B  31999393792B  primary  ext4         lba

以上のようにパーティションが作成された。


・念の為、このパーティションについてアライメントできているか確認を行った。
(parted) align-check
alignment type(min/opt)  [optimal]/minimal?
Partition number? 1
1 aligned

・コマンドを終了した。
(parted) q                                                             
Information: You may need to update /etc/fstab.

〇作成したパーティションが認識されているか確認した。

root@raspberrypi:/home/pi# cat /proc/partitions
major minor  #blocks  name
   1        0       4096 ram0
   1        1       4096 ram1
   1        2       4096 ram2
   1        3       4096 ram3
   1        4       4096 ram4
   1        5       4096 ram5
   1        6       4096 ram6
   1        7       4096 ram7
   1        8       4096 ram8
   1        9       4096 ram9
   1       10       4096 ram10
   1       11       4096 ram11
   1       12       4096 ram12
   1       13       4096 ram13
   1       14       4096 ram14
   1       15       4096 ram15
 179        0   15212544 mmcblk0
 179        1     262144 mmcblk0p1
 179        2   14946304 mmcblk0p2
   8        0  488386584 sdX
   8        1   31249408 sdX1


〇ext4ファイルシステムの作成(フォーマット)

root@raspberrypi:/home/pi# mkfs -t ext4 /dev/sdX1
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 7812352 4k blocks and 1954064 inodes
Filesystem UUID: 8*******-4***-4***-8***-a***********
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000
Allocating group tables: done                         
Writing inode tables: done                         
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done



■上記の手順で作成したUSB HDDのパーティションに現在動作しているBOINCの作業ディレクトリの「内容」をコピーする。

一時的にマウントしたUSB HDDのパーティションに、BOINCの作業ディレクトリの内容をコピーする。


〇USB HDDのパーティションは適当なディレクトリに一時的にマウントした。

マウントポイントとなるディレクトリの作成を行い、一時的にマウントを行った。

root@raspberrypi:/home/pi# mkdir /mnt/disk1
root@raspberrypi:/home/pi# mount -t ext4 /dev/sdX1 /mnt/disk1

マウントされたかどうか確認した。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   53M  200M  21% /boot
tmpfs           381M     0  381M   0% /run/user/1000
/dev/sdX1        30G   45M   28G   1% /mnt/disk1


〇boinc-clientを停止させた。

・boinc-clientの停止
root@raspberrypi:/home/pi# systemctl stop boinc-client

・サービスの状態を表示
root@raspberrypi:/home/pi# systemctl status boinc-client
● boinc-client.service - Berkeley Open Infrastructure Network Computing Client
   Loaded: loaded (/lib/systemd/system/boinc-client.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Fri 2020-04-24 14:06:52 BST; 4s ago
     Docs: man:boinc(1)
  Process: 1208 ExecStart=/usr/bin/boinc (code=exited, status=0/SUCCESS)
  Process: 1287 ExecStop=/usr/bin/boinccmd --quit (code=exited, status=0/SUCCESS)
  Process: 1289 ExecStopPost=/bin/rm -f lockfile (code=exited, status=0/SUCCESS)
 Main PID: 1208 (code=exited, status=0/SUCCESS)


〇データをUSB HDDをマウントしているディレクトリにコピーした。

コピー対象は、boinc-client作業ディレクトリ自体でなく、その中にあるファイルとディレクトリのみである。
ポイントは、これら作業ディレクトリの中身だけをUSB HDDのパーティションのマウントポイントのルートディレクトリにコピーすることである。

下記コマンドはそれを実行する。
オプションの「a」はアーカイブの意味で、所有者、グループ、権限をオリジナルのままにする。
オプションの「R」はリカーシブの意味で、ディレクトリがあればそのサブディレクトリに至って再帰的に辿りコピーする。
即ち、全て複製を作成するということになる。

root@raspberrypi:/home/pi# cp /var/lib/boinc-client/* /mnt/disk1/ -aR



■USB HDDのパーティションをboinc-clientのデフォルトディレクトリにシステム起動時に自動マウントする設定を行う。

上記手順で、USB HDDのパーティションには、boinc-client作業ディレクトリの内容が全てコピーされている。

これを、元々の作業ディレクトリ(/var/lib/boinc-client)にシステム起動時に自動マウントする。
これにより、boinc-clientサービスは、USB HDDの領域を作業場として利用することになる。


〇USB HDDのパーティション(データコピー済み)のPARTUUIDを調べた。

PARTUUIDの情報は自動マウント設定のために必要である。

root@raspberrypi:/home/pi# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="4***-D***" TYPE="vfat" PARTUUID="7*******-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="4*******-7***-4***-a***-0***********" TYPE="ext4" PARTUUID="7*******-02"
/dev/sdX1: UUID="8*******-4***-4***-8***-a***********" TYPE="ext4" PARTUUID="0*******-01"
/dev/mmcblk0: PTUUID="7*******" PTTYPE="dos"


〇USB HDDのパーティションをboinc-clientデフォルトディレクトリに自動マウントする設定を行った。

下記のように、USB HDDのBOINC用パーティションを自動マウントするための設定を加えて保存した。

root@raspberrypi:/home/pi# nano /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=738a4d67-01  /boot           vfat    defaults          0       2
PARTUUID=738a4d67-02  /               ext4    defaults,noatime  0       1
PARTUUID=0*******-01  /var/lib/boinc-client      ext4    defaults,auto,rw,nofail   0       2
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
/var/lib/boinc-clientは、既存のディレクトリでありオリジナルのboinc作業ディレクトリである。
ここに、USB HDDのパーティションを自動マウントすることによって、オリジナルのデータは隠されて、
USB HDDパーティションにコピー済みのデータにアクセスされることになる。

(注意)
マウントオプションに、「user」を入れてしまうとnoexecでマウントされてしまうので絶対にダメである。
これによって、ワークがRUNされずDONEERRとなった。(boinctuiでの表示の場合)
この問題解決に非常に時間がかかった。
タスクのダウンロードはなされるものの、いざタスクを実行する段階になれば、
即座にタスクが終了して、DONEERRとなってしまうのだった。

その場合、次のような権限エラーがログに記載されていた。

# grep failed /var/lib/boinc-client/client_state.xml
<stderr_out>
  <![CDATA[
   <message>
     process exited with code 13 (0xd, -243)
   </message>
   <stderr_txt>
     Process creation (../../projects/boinc.bakerlab.org_rosetta/rosetta_4.15_aarch64-unknown-linux-gnu) failed: Error -1, errno=13
execv: Permission denied
   </stderr_txt>
  ]]>
</stderr_out>
# grep project /var/log/syslog | less

Apr 24 14:00:53 raspberrypi boinc[1208]: dir_open: Could not open directory 'projects/boinc.bakerlab.org_rosetta' from '/var/lib/boinc-client'.

しかし、/etc/fstabに記載するマウントオプションから、userオプションを外すことによって、問題が解決した。
そして、順を追って述べるように、正常にタスクがRUNの状態になった。


〇システムの再起動

・まず、boinc-clientが自動起動しないように設定しておく。

この段階では、まだboinc-clientはシステム起動時に正常に起動しない。
そのため、disableをしておく。(全て準備が整ってからenable指定に戻す。)

root@raspberrypi:/home/pi# systemctl disable boinc-client

・そして、システムの再起動
root@raspberrypi:/home/pi# reboot

システムの再起動後には、
/var/lib/boinc-clientディレクトリに、HDD USBの第一パーティションがマウントされる。


〇自動的にマウントされることを確認した。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G   17M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sdX1        30G   54M   28G   1% /var/lib/boinc-client
/dev/mmcblk0p1  253M   53M  200M  21% /boot
tmpfs           381M     0  381M   0% /run/user/1000

/etc/fstabの設定例のように、「defaults,auto,rw,nofail」のみ設定した結果、
再起動後には次のオプション(noexecなし)でマウントされていることが確認できた。

# mount
/dev/sdX1 on /var/lib/boinc-client type ext4 (rw,relatime)



■boinc-clientサービス起動のための微調整

〇USB HDDパーティションのマウント先ディレクトリの所有者:グループの変更を行った。

上記手順で、自動マウントできるようになっても、マウントポイントである「/var/lib/boinc-client」の所有者とグループは「boinc以外」になっていた。

そこで、所有者:グループを、boinc:boincに変更した。


・所有者:グループの変更を行った。(boinc:boincにする。)

root@raspberrypi:/home/pi# chown boinc:boinc /var/lib/boinc-client
(さらに、chmodで、775にしてもよいかもしれない。ここではせずとも動作した。)

root@raspberrypi:/home/pi# ls /var/lib/boinc-client -al
total 236
drwxr-xr-x  5 boinc boinc  4096 Apr 24 14:10 .  ←カレントディレクトリ
drwxr-xr-x 28 root  root   4096 Apr 24 13:52 ..
-rw-r--r--  1 boinc boinc  1382 Apr 24 14:01 account_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc 53556 Apr 24 13:52 all_projects_list.xml
lrwxrwxrwx  1 root  root     34 Apr 24 13:52 ca-bundle.crt -> /etc/ssl/certs/ca-certificates.crt
lrwxrwxrwx  1 root  root     31 Apr 24 13:52 cc_config.xml -> /etc/boinc-client/cc_config.xml
-rw-r--r--  1 boinc boinc 32225 Apr 24 14:01 client_state_prev.xml
-rw-r--r--  1 boinc boinc 35831 Apr 24 14:06 client_state.xml
-rw-r--r--  1 boinc boinc   325 Apr 24 13:59 coproc_info.xml
-rw-r--r--  1 boinc boinc   118 Apr 24 14:06 daily_xfer_history.xml
lrwxrwxrwx  1 root  root     43 Apr 24 13:52 global_prefs_override.xml -> /etc/boinc-client/global_prefs_override.xml
lrwxrwxrwx  1 root  root     34 Apr 24 13:52 gui_rpc_auth.cfg -> /etc/boinc-client/gui_rpc_auth.cfg
-rw-r--r--  1 boinc boinc   138 Apr 24 14:00 lookup_account.xml
drwx------  2 root  root  16384 Apr 24 13:47 lost+found
-rw-r--r--  1 boinc boinc 23708 Apr 24 14:01 master_boinc.bakerlab.org_rosetta.xml
drwxrwx--x  2 boinc boinc  4096 Apr 24 14:01 notices
drwxrwx--x  3 boinc boinc  4096 Apr 24 14:00 projects
lrwxrwxrwx  1 root  root     34 Apr 24 13:52 remote_hosts.cfg -> /etc/boinc-client/remote_hosts.cfg
-rw-r--r--  1 boinc boinc 22184 Apr 24 14:01 sched_reply_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc  6472 Apr 24 14:01 sched_request_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc   425 Apr 24 14:01 statistics_boinc.bakerlab.org_rosetta.xml
-rw-r--r--  1 boinc boinc     0 Apr 24 13:52 stderrgpudetect.txt
-rw-r--r--  1 boinc boinc     0 Apr 24 13:52 stdoutgpudetect.txt
-rw-r--r--  1 boinc boinc   343 Apr 24 14:06 time_stats_log

これらのファイルは全て、USB HDDの第一パーティション内に存在している。


〇boinc-clientサービスがマウント完了以降のタイミングで起動するように設定を編集した。

これも大切な設定である。

boinc-clientのワーキングディレクトリは、SDカード上ではなく、USB HDDのパーティション上に存在することになる。
だから、boinc-clientサービスの始動前に、マウントが完了していなければならないのだ。
この設定をしなければ、エラーが発生して、boinc-clientを自動起動できなかった。

次のように、サービスファイルを編集し、mnt-wibble.mount の後でboinc-clientサービスは起動するようにする。

編集箇所は、下記のようにアンダーラインを引いた一行のみである。

root@raspberrypi:/home/pi# nano /lib/systemd/system/boinc-client.service
[Unit]
Description=Berkeley Open Infrastructure Network Computing Client
Documentation=man:boinc(1)
After=network-online.target mnt-wibble.mount

[Service]
ProtectHome=true
Type=simple
Nice=10
User=boinc
WorkingDirectory=/var/lib/boinc
ExecStart=/usr/bin/boinc
ExecStop=/usr/bin/boinccmd --quit
ExecReload=/usr/bin/boinccmd --read_cc_config
ExecStopPost=/bin/rm -f lockfile
IOSchedulingClass=idle

[Install]
WantedBy=multi-user.target


■以上の手順を全て完了後に、boinc-clientサービスの起動を行う。


〇サービスの自動起動の再設定、そして起動を行った。

・boinc-clientサービスを自動起動するように再設定した。
root@raspberrypi:/home/pi# systemctl enable boinc-client

・boinc-clientサービスの起動を行った。
root@raspberrypi:/home/pi# systemctl start boinc-client

・boinc-clientサービスの起動状態を確認した。
root@raspberrypi:/home/pi# systemctl status boinc-client
boinc-client.service - Berkeley Open Infrastructure Network Computing Client
   Loaded: loaded (/lib/systemd/system/boinc-client.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-04-24 14:26:56 BST; 28s ago
     Docs: man:boinc(1)
 Main PID: 349 (boinc)
    Tasks: 2 (limit: 4260)
   Memory: 18.1M
   CGroup: /system.slice/boinc-client.service
           └─349 /usr/bin/boinc


〇boinctuiもしくは、boincマネージャーで動作確認を行った。

root@raspberrypi:/home/pi# boinctui

/var/lib/boinc-client にマウントしたUSB HDDのパーティション1の容量(32GB)がストレージとして認識されている。


また、Rosetta@homeプロジェクトの場合、タスクが600MB程度ダウンロードされた後に、
無事にそれらのタスクが実行され始めた。


外付けのハードディスクがアクセスランプを明滅させカリカリと音を立てた。


〇数日ほど動かしてから、ディスクの使用状態を確認した。

Rosetta@homeプロジェクトの分散コンピューティングだけでは、下記のように、4.5 GB程度しか使用されていない。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           1.9G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           1.9G     0  1.9G   0% /sys/fs/cgroup
/dev/sda1        30G  4.5G   24G  17% /var/lib/boinc-client
/dev/mmcblk0p1  253M   53M  200M  21% /boot
tmpfs           381M     0  381M   0% /run/user/1000

以上



<参考>

・Set systemd service to execute after fstab mount
< https://unix.stackexchange.com/questions/246935/set-systemd-service-to-execute-after-fstab-mount > 2020年4月24日


2020年4月24日金曜日

【Raspberry pi 4 B / Raspbian 】USB 3.0対応のUSB HDDを自動的にマウントするように設定する手順



■概要

USB HDD(USB 3.0対応)を、Raspberry Pi 4 B のUSB3.0ポートに取り付けて、
指定したディレクトリにマウントして運用する手順について記した。
Raspberry pi 4 Bは、Raspbian Buster Lite 2020-02-13 がインストールした。
マウントはRaspbianの起動時に自動的にされるように設定した。


〇Raspberry Pi 4 B は、USB 3.0ポートを2つ備えている。

USB 3.0 SuperSpeedモード(SSモード)に対応したUSB HDDドライブを取り付けることによって、高速にディスクへのアクセスが可能になる。


〇外部電源を接続できるUSBハブ(USB 3.0対応)を利用する。

Raspberry Pi 4 BのUSB 3.0ポートが供給可能な電力は少ない可能性がある。

外部電源を供給せずに、直にRaspberry Pi 4 BのUSB 3.0ポートにUSB HDDを接続しても、
USB HDDは異音を発して正常に作動しなかった
異なるメーカーのUSB HDD(いずれも2.5インチHDDが入るタイプ)も用いてみたが、同様に正常に動作しなかった。
駆動に必要な電力が不足していると考えられる。これは、Raspberry Pi 3においても同様だった。

そのため、USB HDDは、外部電源の接続が可能なUSB HUBを経由させてRaspberry Pi 4に接続した。すると正常にUSB HDDは駆動した。
もちろん、このUSB HUBも、USB3.0に対応している。


〇接続の全体の様子(下の写真)

右側にRaspberry Pi 4 B
中央の正方形のものがUSB 3.0 ハブと、USB HDDである。
左側で、ACコンセントにつないでいるのはUSBアダプタであり、中央のUSB3.0 ハブの外部電源である。



〇実際に使用したUSB 3.0 ハブ(下の写真)

4つのUSB 3.0ポートが上表面あり、そのうち一つにUSB HDDをつないでいる。

側面に2つ並んで接続されているものの内、
左側の端子がRaspberry Pi 4 のUSB 3.0ポートと接続されている。
右側の端子は、外部電源供給用であり、マイクロUSBケーブルが使用できるので専用DCアダプタが不要でとても便利である。
ここでは、1A出力程度のスマホのUSBアダプタに接続している。




感想(2件)


下記手順の前に、予め、rootユーザーになっておく。
pi@raspberrypi:~ $ sudo su


■先ず、USB3.0 HUB をRaspberry pi 4のUSB3.0 ポート接続

ここで接続したUSB HUBは、USB 3.0に対応している。
そのため、SuperSpeed Gen1 USB Device(USB 3.0 Hub)として認識されていることがわかる。
また、USB3.0デバイスだけでなく、USB 2.0デバイスとしても認識されていることもわかった。

詳細を知りたい場合は、下記ページを参考にしてください。

【Raspberry pi 4 B / Raspbian】USBポートに各種USB機器を接続したときのlsusbツリーやカーネルメッセージ表示【Raspbian Buster Lite 2020-02-13】



■次に、USB 3.0 接続のHDDドライブをHUBに取り付けた。

〇USB HDDのパーティション作成とフォーマット

HDDは、Raspberry Pi専用で使うので、パーティション1をEXT4でフォーマットしておいた。
パーティションの作成とファイルシステム作成については、次のページを参考にしてください。(HDD上のデータは消去されるので注意)


【Raspberry Pi 4 B / Raspbian】BOINCの作業領域を外付けUSB HDDドライブに移してSDの劣化を防止する【BOINC 7.14.2+dfsg-3】

上記ページの、
「■BOINCのワーキングディレクトリを移すためのUSB接続のHDD(もしくはSSD)の準備」の項目に手順を記載しています。
(こちらはアライメントについて記載があり、対処しています。)
「〇ext4ファイルシステムの作成(フォーマット)」まで完了したら、OKです。


あるいは、以下のページも参考にしてください。
(こちらはアライメントについて記述していません。)

【Linux CentOS6.2 64bit版】partedコマンドを使いGPT対応大容量ディスクにパーティションを追加する

上記については、今回使用したHDDは500GB程度なのでGPTの条件は無視した。
すなわち旧来からのパーティションテーブルを使用した。


〇USB HDDドライブを上記のHUBに取り付け、カーネルメッセージを確認した。

接続したUSB HDDは、SuperSpeedモードで認識された。
その上、USB HDDが対応しているため、SCSIディスクとして認識されている。(uasと表示)

そして、そのパーティション1(sda1)が認識された。

root@raspberrypi:/home/pi# dmesg
[  269.554717] usb 2-2.1: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[  269.586133] usb 2-2.1: New USB device found, idVendor=152d, idProduct=0578, bcdDevice= 1.00
[  269.586148] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  269.586161] usb 2-2.1: Product: USB to ATA/ATAPI Bridge
[  269.586173] usb 2-2.1: Manufacturer: JMicron
[  269.586185] usb 2-2.1: SerialNumber: 0123456789ABCDEF
[  269.638320] scsi host0: uas
[  269.639919] scsi 0:0:0:0: Direct-Access     JMicron  Generic          8101 PQ: 0 ANSI: 6
[  269.714236] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  271.939973] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[  271.939989] sd 0:0:0:0: [sda] 4096-byte physical blocks
[  271.944628] sd 0:0:0:0: [sda] Write Protect is off
[  271.944645] sd 0:0:0:0: [sda] Mode Sense: 53 00 00 08
[  271.945087] sd 0:0:0:0: [sda] Disabling FUA
[  271.945103] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  271.945843] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[  271.965122]  sda: sda1
[  271.968024] sd 0:0:0:0: [sda] Attached SCSI disk



■システム起動時に自動的にマウントするための設定を行った。


〇マウント先のディレクトリを作成した。

/mntディレクトリは最初から存在していた。
サブディレクトリとして、disk1というディレクトリを設けた。

root@raspberrypi:/home/pi# mkdir /mnt/disk1


作成したディレクトリを表示させた。

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 8
drwxr-xr-x 2 root root 4096 Apr 22 11:14 .
drwxr-xr-x 3 root root 4096 Apr 22 11:14 ..
上記のように、他ユーザーからのアクセスは許可されている。
これにより、他ユーザーもディレクトリを開くことが許可される。


〇マウントしたUSB HDDのディスク内のパーティションのPARTUUIDを調べた。

マウント設定には、パーティションのPARTUUIDが必要になるので調べておく。

root@raspberrypi:/home/pi# blkid
/dev/mmcblk0p1: LABEL_FATBOOT="boot" LABEL="boot" UUID="4***-****" TYPE="vfat" PARTUUID="7**a****-01"
/dev/mmcblk0p2: LABEL="rootfs" UUID="********-****-****-****-************" TYPE="ext4" PARTUUID="7**a****-02"
/dev/sda1: LABEL="hdd" UUID="e*******-****-4***-9***-b***********" TYPE="ext4" PARTUUID="0*0****e-01"
/dev/mmcblk0: PTUUID="7**a****" PTTYPE="dos"


〇fstab設定ファイルの編集を行った。

次のように、fstabファイルを編集した。

下記のように、PARTUUID項目には、上記で見つけた番号を記載しておく。
マウント先のディレクトリは、さきに作成した「/mnt/disk1」を指定した。
マウントしたいディスクのパーティション1は、ext4でフォーマットされているのでそのように指定した。
オプションは、nofailを忘れないようにすること。さもなければ、起動しなくなる危険がある。

root@raspberrypi:/home/pi# nano /etc/fstab
proc            /proc           proc    defaults          0       0
PARTUUID=7**a****-01  /boot           vfat    defaults          0       2
PARTUUID=7**a****-02  /               ext4    defaults,noatime  0       1
PARTUUID=0*0****e-01  /mnt/disk1      ext4    defaults,auto,rw,nofail   0       2
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

CTRL+O Write Out
File Name to Write: /etc/fstab
CTRL+X Exit


〇システムを再起動した。
root@raspberrypi:/home/pi# reboot



■確認

〇指定したディレクトリにマウントされたか確認した。

/mnt/disk1にマウントされたディスク(USB HDD)の容量は、459GBあることがわかる。

root@raspberrypi:/home/pi# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.3G   13G  10% /
devtmpfs        1.8G     0  1.8G   0% /dev
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           2.0G  8.5M  1.9G   1% /run
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/mmcblk0p1  253M   53M  200M  21% /boot
/dev/sda1       459G   73M  435G   1% /mnt/disk1
tmpfs           391M     0  391M   0% /run/user/1000

〇アクセス権限を確認した。

もし、下記のように、マウント先ディレクトリのアクセス権限が700(rwx------)になっていれば、chmodコマンドで、755(rwxr-xr-x)に変更する
さもなければ、他ユーザーからマウント先ディレクトリに作られたサブディレクトリにアクセスすることができなくなってしまう。

下記例において、/mnt/disk1にさらにサブディレクトリを設け、サブディレクトリにはpi以外の別ユーザーのアクセス許可を与えたとしても、
トップディレクトリである/mnt、/mnt/diskに、他ユーザーに5(r-x)以上の権限がなければ、サブディレクトリへアクセスができなくなってしまうからである。

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 24
drwx------ 3 pi   pi    4096 Apr 22 05:08 .  ←マウント先であるカレントディレクトリ(/mnt/disk1自身)
drwxr-xr-x 3 root root  4096 Apr 22 11:14 ..
drwx------ 2 root root 16384 Apr 22 05:08 lost+found

root@raspberrypi:/home/pi# chmod 755 /mnt/disk1

root@raspberrypi:/home/pi# ls /mnt/disk1 -al
total 24
drwxr-xr-x 3 pi   pi    4096 Apr 22 05:08 .
drwxr-xr-x 3 root root  4096 Apr 22 11:14 ..
drwx------ 2 root root 16384 Apr 22 05:08 lost+found


以上



<参考>

・External storage configuration
< https://www.raspberrypi.org/documentation/configuration/external-storage.md > 2020年4月19日

・【Linux CentOS6.2 64bit版】partedコマンドを使いGPT対応大容量ディスクにパーティションを追加する
< https://akira-arets.blogspot.com/2012/02/centos62-parted-create-partition.html > 2020年4月19日

・ディスクのアクセス速度を上げるには
< https://www.atmarkit.co.jp/flinux/rensai/linuxtips/659noatime.html > 2020年4月19日

・Raspberry Piでfstab弄ったら起動できなくなった場合の備忘録
< https://qiita.com/YuzuRyo61/items/fa5d23a3420d8c24c77d > 2020年4月19日

・What is UUID, PARTUUID and PTUUID?
< https://unix.stackexchange.com/questions/375548/what-is-uuid-partuuid-and-ptuuid > 2020年4月24日



2020年4月23日木曜日

【Raspberry pi 4 B / Raspbian】USBポートに各種USB機器を接続したときのlsusbツリーやカーネルメッセージ表示【Raspbian Buster Lite 2020-02-13】


Raspbian Buster Lite(2020-02-13)をインストールしたRaspberry pi 4 Model B (4GB)の、USBポート(3.0/2.0)に、
USB HUB(USB 3.0 / 2.0)や、USB HDD(USB 3.0 / 2.0)や、USBキーボード、USBマウスを接続した時の、
lsusbツリー表示、カーネルメッセージ表示をまとめた。

これをみると、接続モード(SuperSpeed 5000M, HighSpeed 480M)もわかった。



1、USBポートのいずれにも何も接続していない状態

下記結果を見ると、Raspberry pi 4のUSB 2.0ポートに内蔵HUBが内部接続されているように見える。
一方、USB 3.0ポートにそれはない。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M  ←本体ルートハブ
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M  ←本体ルートハブ
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M  ←内部接続されているように見える本体内蔵HUB



2、つづけて、USB HUB(USB 3.0 SuperSpeed 対応)を接続した状態

USB HUB(USB 3.0 SuperSpeed 対応)をRaspberry pi 4のUSB3.0ポート(そのうち下側)に取り付けた。
その結果、下記のように、Bus 02のPort 2に5000Mbps接続で認識された。(1)
また、Bus 01のPort 1に480Mbitでも認識された。(2)

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M  ←(1)同じHUB(5000Mbps接続)
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M  ←(2)同じHUB(480Mbps接続)

このときのカーネルメッセージを表示させた。

root@raspberrypi:/home/pi# dmesg
<USB HUB接続後>
[  124.676892] usb 2-2: new SuperSpeed Gen 1 USB device number 2 using xhci_hcd
[  124.709455] usb 2-2: New USB device found, idVendor=2109, idProduct=0817, bcdDevice= 2.14
[  124.709471] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  124.709485] usb 2-2: Product: USB3.0 Hub         
[  124.709498] usb 2-2: Manufacturer: VIA Labs, Inc.     
[  124.713108] hub 2-2:1.0: USB hub found
[  124.713351] hub 2-2:1.0: 4 ports detected
[  124.806360] usb 1-1.2: new high-speed USB device number 3 using xhci_hcd[  124.938359] usb 1-1.2: New USB device found, idVendor=2109, idProduct=2817, bcdDevice= 2.14
[  124.938376] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[  124.938389] usb 1-1.2: Product: USB2.0 Hub         
[  124.938401] usb 1-1.2: Manufacturer: VIA Labs, Inc.     
[  124.940944] hub 1-1.2:1.0: USB hub found
[  124.941222] hub 1-1.2:1.0: 4 ports detected



3、つづけて、USB HDD(USB 3.0 SuperSpeed対応)を上記のUSB HUBに接続した状態

USB HUBに接続したUSB 3.0接続HDDは、下記のように、Bus 02のPort 2に5000Mbpsで認識されているハブのPort1に5000Mbpsで認識された。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M  ←USB HUBに接続したUSB 3.0接続HDD
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M

このときのカーネルメッセージを表示させた。

root@raspberrypi:/home/pi# dmesg
<USB HDD接続後>
[  269.554717] usb 2-2.1: new SuperSpeed Gen 1 USB device number 3 using xhci_hcd
[  269.586133] usb 2-2.1: New USB device found, idVendor=152d, idProduct=0578, bcdDevice= 1.00
[  269.586148] usb 2-2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  269.586161] usb 2-2.1: Product: USB to ATA/ATAPI Bridge
[  269.586173] usb 2-2.1: Manufacturer: JMicron
[  269.586185] usb 2-2.1: SerialNumber: 0123456789ABCDEF
[  269.638320] scsi host0: uas
[  269.639919] scsi 0:0:0:0: Direct-Access     JMicron  Generic          8101 PQ: 0 ANSI: 6
[  269.714236] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  271.939973] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/466 GiB)
[  271.939989] sd 0:0:0:0: [sda] 4096-byte physical blocks
[  271.944628] sd 0:0:0:0: [sda] Write Protect is off
[  271.944645] sd 0:0:0:0: [sda] Mode Sense: 53 00 00 08
[  271.945087] sd 0:0:0:0: [sda] Disabling FUA
[  271.945103] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[  271.945843] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[  271.965122]  sda: sda1
[  271.968024] sd 0:0:0:0: [sda] Attached SCSI disk



4、つづけて、USBキーボードも接続した状態

USBキーボードを一台、Rapberry pi 4のUSB 2.0ポート(そのうちの上側)に接続した。

下記のように、Bus 01のPort1 に内部接続されているように見える内蔵HUBのPort 3に、USBキーボードはIf 0とIf 1とで認識された。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 3: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M  ←同じキーボード
        |__ Port 3: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M  ←同じキーボード

このときのカーネルメッセージを表示させた。

root@raspberrypi:/home/pi# dmesg
<キーボードを接続後>
[ 1700.824363] usb 1-1.3: new low-speed USB device number 4 using xhci_hcd
[ 1700.995386] usb 1-1.3: New USB device found, idVendor=046e, idProduct=52cd, bcdDevice= 1.23
[ 1700.995402] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 1700.995415] usb 1-1.3: Product: USB Multimedia Keyboard
[ 1700.995428] usb 1-1.3: Manufacturer: BTC
[ 1701.024063] input: BTC USB Multimedia Keyboard as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.0/0003:046E:52CD.0001/input/input0
[ 1701.085057] hid-generic 0003:046E:52CD.0001: input,hidraw0: USB HID v1.10 Keyboard [BTC USB Multimedia Keyboard] on usb-0000:01:00.0-1.3/input0
[ 1701.136031] input: BTC USB Multimedia Keyboard System Control as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.1/0003:046E:52CD.0002/input/input1
[ 1701.204577] input: BTC USB Multimedia Keyboard Consumer Control as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.3/1-1.3:1.1/0003:046E:52CD.0002/input/input2
[ 1701.204998] hid-generic 0003:046E:52CD.0002: input,hiddev96,hidraw1: USB HID v1.10 Device [BTC USB Multimedia Keyboard] on usb-0000:01:00.0-1.3/input1



5、つづけて、マウスも接続した。

マウスを、2で取り付けたUSB HUBのポートに取り付けた。
2で取り付けたUSB HUBは、Raspberry pi 4のUSB 3.0ポートに取り付けられている。

Bus 01のPort1に内部接続されているように見える内蔵HUBのPort 2では、今回接続したUSB HUBが480Mbpsで認識されている。
マウスはこのPort 4に認識されている。

root@raspberrypi:/home/pi# lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
        |__ Port 1: Dev 3, If 0, Class=Mass Storage, Driver=uas, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 2: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M
            |__ Port 4: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M  ←マウス
        |__ Port 3: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
        |__ Port 3: Dev 4, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M

root@raspberrypi:/home/pi# dmesg
<マウスを接続後>
[ 2339.839325] usb 1-1.2.4: new low-speed USB device number 5 using xhci_hcd
[ 2340.025843] usb 1-1.2.4: New USB device found, idVendor=1bcf, idProduct=0005, bcdDevice= 0.14
[ 2340.025858] usb 1-1.2.4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 2340.025871] usb 1-1.2.4: Product: USB Optical Mouse
[ 2340.042197] input: USB Optical Mouse as /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2.4/1-1.2.4:1.0/0003:1BCF:0005.0003/input/input4
[ 2340.042734] hid-generic 0003:1BCF:0005.0003: input,hidraw2: USB HID v1.10 Mouse [USB Optical Mouse] on usb-0000:01:00.0-1.2.4/input0


以上

投げ銭

★当サイトへの投げ銭(PayPal)★

Ad

Ad