postfixのvirtual_transport=dovecot指定時にもvirtual_mailbox_mapsを指定したほうが良い件

postfix/dovecotのメールサーバで、実ドメイン以外のドメインのメールも受け取るようpostfix側にvirtual mailbox domainsの設定を行うことがある

その際、dovecotによるquota制御を行いたいので、dovecotのドキュメント「Dovecot LDA with Postfix」の”Virtual users”にある設定を行う。

postfixの/etc/postfix/main.cf には以下の設定

dovecot_destination_recipient_limit = 1
virtual_mailbox_domains = your.domain.here
virtual_transport = dovecot

postfixの/etc/postfix/master.cf には以下の設定

dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}

しかし、この設定を行った場合、存在しないメールアドレス宛に来たメールを拒否する、という動作をしてくれない

検証方法はこんな感じ

$ telnet メールサーバホスト名 25
Trying 192.168.x.x...
Connected to 192.168.x.x.
Escape character is '^]'
220 メールサーバホスト名 ESMTP Postfix
ehlo testhost
250-メールサーバホスト名
250-<以下省略>
mail from: <>
250 2.1.0 Ok
rcpt to: nothing@your.domain.here
250 2.1.5 Ok

存在しないアドレスを指定した「rcpt to: nothing@your.domain.here」に対する応答として「550 5.1.1 ~」が返ってくることを期待したものの、「250 2.1.5 Ok」という、メールアドレスが存在する場合と同じ応答となっている。

これをなんとか出来ないかを調べてみると意外なことを発見

/etc/postfix/master.cf の smtpdの起動を「smtpd -v」と詳細ログ出力モードに変えて、上記操作をしてみたところ、rcpt to入力後の動作に気になるところが・・・

「CHECKING Recipient address VALIDATION MAPS」の処理を見てみると以下の順番でメールアドレスの存在確認を行っている模様

recipient_canonical_maps
canonical_maps
virtual_alias_maps

検証環境ではvirtual_mailbox_domains とは別に virtual_alias_domains も設定され、virtual_alias_mapsはhashファイルが指定されている。これにより、virtual_alias_mapsの検索が行われていると判断される

じゃあ、ここにvirtual_mailbox_mapsを設定したら、virtual_mailbox_mapsに対してメールアドレスの存在確認を行ってくれるんじゃないかな?と期待

main.cfに「virtual_mailbox_maps = ldap:/etc/postfix/ldap-mailbox.cf」を追加して、LDAP検索のqueryは「query_filter = (&(objectClass=user)(mail=%s))」で設定した

設定後、「dnf install postfix-ldap」でpostfixのldapサポートを追加し、「systemctl restart postfix」でpostfixを再起動して見ると以下の結果となった

$ telnet メールサーバホスト名 25
Trying 192.168.x.x...
Connected to 192.168.x.x.
Escape character is '^]'
220 メールサーバホスト名 ESMTP Postfix
ehlo testhost
250-メールサーバホスト名
250-<以下省略>
mail from: <>
250 2.1.0 Ok
rcpt to: nothing@your.domain.here
550 5.1.1 <nothing@your.domain.here>: Recipient address rejected: User unknown in virtual mailbox table

期待通りに「550 5.1.1」による拒否を行ってくれるようになった

postfixのdebugログを確認すると、virtual_alias_maps 処理の次に virtual_mailbox_maps処理が追加されていた。

recipient_canonical_maps
canonical_maps
virtual_alias_maps
virtual_mailbox_maps

このことから、postfixで「virtual_transport=dovecot」を設定した場合であっても、virtual_mailbox_maps設定を行い、postfix側でメールアドレスの存在確認を行った方がよい、ということになる

wordpressサーバの/var/lib/mysqlにbinlogファイルが大量にたまっていた

知り合いのとこのwordpressサーバが稼働していなかったので調査したところディスクフルが発生していた

状況を確認すると、 /var/lib/mysqlが15GBと大変な状態になっていた

binlogがたまりまくっていた

というか、4/23以降、一日1GB以上出力されたりしてるのなんでだ??

[root@xxxxxxxxxxx mysql]# ls -ltr /var/lib/mysql/binlog*
-rw-r-----. 1 mysql mysql 1076027128 Apr 11 12:15 /var/lib/mysql/binlog.000401
-rw-r-----. 1 mysql mysql  895282121 Apr 23 06:48 /var/lib/mysql/binlog.000402
-rw-r-----. 1 mysql mysql 1076428654 Apr 23 19:12 /var/lib/mysql/binlog.000403
-rw-r-----. 1 mysql mysql  596357576 Apr 24 03:25 /var/lib/mysql/binlog.000404
-rw-r-----. 1 mysql mysql 1074553571 Apr 24 22:57 /var/lib/mysql/binlog.000405
-rw-r-----. 1 mysql mysql 1075609896 Apr 26 11:28 /var/lib/mysql/binlog.000406
-rw-r-----. 1 mysql mysql 1075981972 Apr 27 18:37 /var/lib/mysql/binlog.000407
-rw-r-----. 1 mysql mysql 1075913505 Apr 28 00:47 /var/lib/mysql/binlog.000408
-rw-r-----. 1 mysql mysql 1075838660 Apr 28 05:05 /var/lib/mysql/binlog.000409
-rw-r-----. 1 mysql mysql 1075205513 Apr 28 08:48 /var/lib/mysql/binlog.000410
-rw-r-----. 1 mysql mysql    5651277 Apr 29 23:47 /var/lib/mysql/binlog.000411
-rw-r-----. 1 mysql mysql    2052256 Apr 29 23:56 /var/lib/mysql/binlog.000412
-rw-r-----. 1 mysql mysql     101787 Apr 30 00:01 /var/lib/mysql/binlog.000413
-rw-r-----. 1 mysql mysql    3171581 Apr 30 03:19 /var/lib/mysql/binlog.000414
-rw-r-----. 1 mysql mysql 1074621728 May  3 02:47 /var/lib/mysql/binlog.000415
-rw-r-----. 1 mysql mysql 1074747087 May  5 18:27 /var/lib/mysql/binlog.000416
-rw-r-----. 1 mysql mysql 1074122275 May  6 01:02 /var/lib/mysql/binlog.000417
-rw-r-----. 1 mysql mysql 1076183303 May  6 16:09 /var/lib/mysql/binlog.000418
-rw-r-----. 1 mysql mysql 1074003040 May  7 01:08 /var/lib/mysql/binlog.000419
-rw-r-----. 1 mysql mysql        320 May  7 01:08 /var/lib/mysql/binlog.index
-rw-r-----. 1 mysql mysql  286409863 May  7 16:07 /var/lib/mysql/binlog.000420
[root@xxxxxxxxxxx mysql]# 

とりあえず、binlog関連の設定を「show variables like ‘binlog%’;」を実行して確認してみる

[root@xxxxxxxxxxx mysql]# mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 50827
Server version: 8.0.45 Source distribution

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show variables like 'binlog%';
+------------------------------------------------+--------------+
| Variable_name                                  | Value        |
+------------------------------------------------+--------------+
| binlog_cache_size                              | 32768        |
| binlog_checksum                                | CRC32        |
| binlog_direct_non_transactional_updates        | OFF          |
| binlog_encryption                              | OFF          |
| binlog_error_action                            | ABORT_SERVER |
| binlog_expire_logs_auto_purge                  | ON           |
| binlog_expire_logs_seconds                     | 2592000      |
| binlog_format                                  | ROW          |
| binlog_group_commit_sync_delay                 | 0            |
| binlog_group_commit_sync_no_delay_count        | 0            |
| binlog_gtid_simple_recovery                    | ON           |
| binlog_max_flush_queue_time                    | 0            |
| binlog_order_commits                           | ON           |
| binlog_rotate_encryption_master_key_at_startup | OFF          |
| binlog_row_event_max_size                      | 8192         |
| binlog_row_image                               | FULL         |
| binlog_row_metadata                            | MINIMAL      |
| binlog_row_value_options                       |              |
| binlog_rows_query_log_events                   | OFF          |
| binlog_stmt_cache_size                         | 32768        |
| binlog_transaction_compression                 | OFF          |
| binlog_transaction_compression_level_zstd      | 3            |
| binlog_transaction_dependency_history_size     | 25000        |
| binlog_transaction_dependency_tracking         | COMMIT_ORDER |
+------------------------------------------------+--------------+
24 rows in set (0.00 sec)

mysql> 

17.1.6.4 バイナリロギングのオプションと変数を参照するとbinlog_expire_logs_secondsが関連する設定で、これが”binlog_expire_logs_seconds=2592000″ なので 720時間(30日)の保存となっている

「show binary logs;」を実行して、mysql内部で認識されているbinlog一覧を確認。まあ、/var/lib/mysql以下にあるファイルと一致してますね

mysql> show binary logs;
+---------------+------------+-----------+
| Log_name      | File_size  | Encrypted |
+---------------+------------+-----------+
| binlog.000401 | 1076027128 | No        |
| binlog.000402 |  895282121 | No        |
| binlog.000403 | 1076428654 | No        |
| binlog.000404 |  596357576 | No        |
| binlog.000405 | 1074553571 | No        |
| binlog.000406 | 1075609896 | No        |
| binlog.000407 | 1075981972 | No        |
| binlog.000408 | 1075913505 | No        |
| binlog.000409 | 1075838660 | No        |
| binlog.000410 | 1075205513 | No        |
| binlog.000411 |    5651277 | No        |
| binlog.000412 |    2052256 | No        |
| binlog.000413 |     101787 | No        |
| binlog.000414 |    3171581 | No        |
| binlog.000415 | 1074621728 | No        |
| binlog.000416 | 1074747087 | No        |
| binlog.000417 | 1074122275 | No        |
| binlog.000418 | 1076183303 | No        |
| binlog.000419 | 1074003040 | No        |
| binlog.000420 |  319677238 | No        |
+---------------+------------+-----------+
20 rows in set (0.02 sec)

mysql> 

まず最初として、「set PERSIST binlog_expire_logs_seconds=604800;」を実行してbinlog_expire_logs_secondsを7日間に短縮する

mysql> set PERSIST binlog_expire_logs_seconds=604800;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'binlog%';
+------------------------------------------------+--------------+
| Variable_name                                  | Value        |
+------------------------------------------------+--------------+
| binlog_cache_size                              | 32768        |
| binlog_checksum                                | CRC32        |
| binlog_direct_non_transactional_updates        | OFF          |
| binlog_encryption                              | OFF          |
| binlog_error_action                            | ABORT_SERVER |
| binlog_expire_logs_auto_purge                  | ON           |
| binlog_expire_logs_seconds                     | 604800       |
| binlog_format                                  | ROW          |
| binlog_group_commit_sync_delay                 | 0            |
| binlog_group_commit_sync_no_delay_count        | 0            |
| binlog_gtid_simple_recovery                    | ON           |
| binlog_max_flush_queue_time                    | 0            |
| binlog_order_commits                           | ON           |
| binlog_rotate_encryption_master_key_at_startup | OFF          |
| binlog_row_event_max_size                      | 8192         |
| binlog_row_image                               | FULL         |
| binlog_row_metadata                            | MINIMAL      |
| binlog_row_value_options                       |              |
| binlog_rows_query_log_events                   | OFF          |
| binlog_stmt_cache_size                         | 32768        |
| binlog_transaction_compression                 | OFF          |
| binlog_transaction_compression_level_zstd      | 3            |
| binlog_transaction_dependency_history_size     | 25000        |
| binlog_transaction_dependency_tracking         | COMMIT_ORDER |
+------------------------------------------------+--------------+
24 rows in set (0.00 sec)

mysql> 

ただ、設定を変更しただけでは反映されないようで、10分程度待機しただけでは show binary logs;の結果に変化はなかった

mysql> show binary logs;
+---------------+------------+-----------+
| Log_name      | File_size  | Encrypted |
+---------------+------------+-----------+
| binlog.000401 | 1076027128 | No        |
| binlog.000402 |  895282121 | No        |
| binlog.000403 | 1076428654 | No        |
| binlog.000404 |  596357576 | No        |
| binlog.000405 | 1074553571 | No        |
| binlog.000406 | 1075609896 | No        |
| binlog.000407 | 1075981972 | No        |
| binlog.000408 | 1075913505 | No        |
| binlog.000409 | 1075838660 | No        |
| binlog.000410 | 1075205513 | No        |
| binlog.000411 |    5651277 | No        |
| binlog.000412 |    2052256 | No        |
| binlog.000413 |     101787 | No        |
| binlog.000414 |    3171581 | No        |
| binlog.000415 | 1074621728 | No        |
| binlog.000416 | 1074747087 | No        |
| binlog.000417 | 1074122275 | No        |
| binlog.000418 | 1076183303 | No        |
| binlog.000419 | 1074003040 | No        |
| binlog.000420 |  358509579 | No        |
+---------------+------------+-----------+
20 rows in set (0.00 sec)

mysql> 

13.4.1.1 PURGE BINARY LOGS ステートメント にあるように手動で「PURGE BINARY LOGS BEFORE ‘2026-05-01 00:00:00’;」と実行すれば2026/05/01以前のbinlogが削除されるのだと思うんだけど・・・ということで実行

mysql> PURGE BINARY LOGS BEFORE '2026-05-01 00:00:00';
Query OK, 0 rows affected (0.02 sec)

mysql> show binary logs;
+---------------+------------+-----------+
| Log_name      | File_size  | Encrypted |
+---------------+------------+-----------+
| binlog.000415 | 1074621728 | No        |
| binlog.000416 | 1074747087 | No        |
| binlog.000417 | 1074122275 | No        |
| binlog.000418 | 1076183303 | No        |
| binlog.000419 | 1074003040 | No        |
| binlog.000420 |  377894939 | No        |
+---------------+------------+-----------+
6 rows in set (0.00 sec)

mysql> 

ファイルは・・・削除されていますね

[root@xxxxxxxxxxx mysql]# ls -ltr /var/lib/mysql/binlog*
-rw-r-----. 1 mysql mysql 1074621728 May  3 02:47 /var/lib/mysql/binlog.000415
-rw-r-----. 1 mysql mysql 1074747087 May  5 18:27 /var/lib/mysql/binlog.000416
-rw-r-----. 1 mysql mysql 1074122275 May  6 01:02 /var/lib/mysql/binlog.000417
-rw-r-----. 1 mysql mysql 1076183303 May  6 16:09 /var/lib/mysql/binlog.000418
-rw-r-----. 1 mysql mysql 1074003040 May  7 01:08 /var/lib/mysql/binlog.000419
-rw-r-----. 1 mysql mysql         96 May  7 16:25 /var/lib/mysql/binlog.index
-rw-r-----. 1 mysql mysql  383435241 May  7 16:25 /var/lib/mysql/binlog.000420
[root@xxxxxxxxxxx mysql]# 

とりあえずしのいだので、次はなぜ4/23以降でbinlogが肥大化したのか調査ですね・・・

CHUWEI UBOXにWindows 11を入れた

先日買ったGMKtec NucBox G10 mini は、32GB メモリ2枚とM.2 NVMe SSD 1TBを増設して、ESXi 8 Free版をインストールして検証に使用している

軽く使っている分には問題なかったのだが、64GBメモリを限界まで使うようになると、スワップなども行うためか M.2 SSDがめちゃくちゃ発熱する。

上の蓋を取って冷却ファンを取り付けてみたものの不格好

そんな中、aliexpressを見てたらメモリ16GB/SSD 512GBが入っているRyzen 5 7430U搭載のCHUWI UBOX が約39000円というお値段で売っているのを発見

SO-DIMMスロット2個、M.2 NVMe SSDスロット2個と置き換えには十分なスペックなので買ってみた。

開梱

届いた・・・案外大きい、というのが第一印象

3機種比較

メモリ/SSD側を開けてみる

手で持っている蓋みたいなところがSSDのヒートシンクも兼ねていて放熱シリコンが貼り付けてある

SSDをくるむ銀袋にAirDisk APF10 PCIe 3.0×4 M.2 2280とかかれたSSDが入っている

メモリも銀でくるまれているが、こちらは貼り付けられていて外せなかった

WiFi はRTL8852BEと書かれていた

逆側はCPUが付いているので、ファンが付いている

初期状態

普通に初回ウィザードを経てログイン。コントロールパネルのショートカットが作成されていた

あと、キーボード配列は英語だった。

タスクマネージャを起動して、スペック確認

CPU Ryzen 5 7430Uを確認

メモリはPC4-25600(DDR4-3200) の16GB が1枚

ディスクはAirDiskというメーカの512GB

WiFiは、Realtek 8852BE

GPUは、メモリを512MB割り当てられていた

CPU-Z

Windows 11 Proのライセンスは「RETAIL」channelではあった

プレインストールのアプリは下記

AMD Settings は Radeon管理ソフトAdrenalin。ver 2024.0819.1807.1996 で新しくはない

Realtek PCI-E Wireless LAN WiFi 6 Driver はWiFiのドライバで、ver 3.00.045

Windows Updateを実施して、Windows 11 Pro 25H2 にアップデートした後


Windows 11 Pro再インストール実施

再インストール後のドライバ適用状態確認

ネットワークコントローラが未認識・・・

有線LAN Realtek 2.5Gb NIC 2ポートは認識しているので、WiFiが未認識、ということになる。

AMD Radeon Graphicsもあるので、GPUも認識はしていた。

ドライバ調査

とりあえずGPUは認識しているのだが、ドライババージョンが古め

Radeon管理ソフトAdrenalinも入れた方がいいのだろうと、AMDのダウンロードページへ移動して、[Browse Products]の[Processors]を確認・・・

Ryzen 5 7430Uがないのですが・・・

検索すると下記のように AMD Ryzen™ 5 7530U Drivers and Downloads – Latest Version が出てくるのだが、ダウンロードはできなかった

Drivers and Support for Processors and Graphics から amd-software-adrenalin-edition-26.1.1-minimalsetup-260119_web.exe をダウンロードしてインストール

ドライバが更新されたことを確認

続いてRealtek 8852BEについて対処する。

不明なデバイスとなっているWiFI部分については「PCI\VEN_10EC&DEV_B852&SUBSYS_B85210EC」をMicrosoft Update カタログで検索して入手する

検索すると Microsoft Update カタログ が出てくるので、cabファイルを展開して適用すればOK

RealTek8852BEのBluetooth機能については、下記のように認識してるので大丈夫だろう、と思っていたのですが、実際にBluetooth接続のゲームパットをつなげようとしたら認識できないことを確認。

デバイス名「USB\VID_0BDA&PID_B85B\00E04C000001」Microsoft Update カタログ で検索して、cabファイルをダウンロードしてドライバを適用

適用後は「Realtek Bluetooth Adapter」という認識に変わり、Bluetooth接続のゲームパットも正常に認識するようになった。

license HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform

VK7JG-NPHTM-C97JM-9MPGT-3V66T


ドラクエベンチマーク

GPUメモリ16GB割り当て時

GPUメモリ4GB割り当て時

GPU自動割り当て

CPU-Z

Nutanix CE 2.1(AOS 6.8.1)をRyzen 3700UのESXi 8上で構築したときのメモ 2026/04/03版

各仮想環境で作成した仮想マシンハードウェアのlspci上での見た目の違いを確認しようと思って、Nutanix CE環境を新規で構築した

そのときに迷ったことのメモ

入手について

公式には「Nutanix Communitiy Edition」のページから遷移することになるがめんどくさい

マニュアル「Getting Started with Community Edition

リリースノートなどは、サポート契約を要求されていて読むことは出来ない

ソフトウェアのダウンロードは「Download Community Edition」から行う

2026/04/03時点でも、2024/08/19リリースの phoenix.x86_64-fnd_5.6.1_patch-aos_6.8.1_ga.iso が最新である模様

CE 2.1はAOS 6.8.1ですが、通常版は現在 AOS 7.3.0.1 である模様

インストールについて

ESXi 8の場合、「CPU ハードウェア仮想化:ハードウェア アシストによる仮想化をゲスト OS に公開」と「UEFI Secure boot 無効化」だけでいけるかと思いきや

インストーラが途中で/dev/sdbが見つからないとして失敗

NTNX日記の「ESXi で Nested Nutanix CE を構成してみる。(CE 2.1 / AOS 6.8.1 版)」に書いてある「1つめのハード ディスクは、デフォルトで作成されるものを 32GB に変更するか、いったん削除して再作成します。」がポイントだとは思いませんでした。

初回ログイン時のユーザ情報は「Creating and Configuring a Cluster」を参照

AHVは「root」「nutanix/4u」
CVMは「nutanix」「nutanix/4u」
Web UIは「admin」「nutanix/4u」初回ログイン時にパスワード変更が求められるが制限がきつめ

Web初回ログイン時にNEXTアカウントを要求されるが、Nutanix NEXTのMy profileで表示されるユーザ名ではなく「メールアドレス」を入力する

その他メモ

LCMの動作にアクセスできるNTPサーバは必須

初期設定ではNTPサーバとして0.pool.ntp.org と 1.pool.ntp.org が登録されている

これらにアクセスできないとLCMでのInventoryが失敗する

error alert
Lcm prechecks detected 1 issue that would cause upgrade failures.

Check 'test_ntp_server_reachability' failed: Failure reason: Cannot upgrade if the configured NTP server(s): ['0.pool.ntp.org', '1.pool.ntp.org'] are not reachable. For details read article 6401

ESP32 C3 SuperMiniをUbuntu 24.04で使うときのメモ

ある一定温度になったら5Vファンを回す、程度の制御に使うマイコンとしてなんか買うか、とaliexpress見てたら、506円で ESP32 C3 SuperMiniというのがあったので買ってみた

購入したセラーのページには詳細がなかったので、調べてみたら、「【Arduino】ESP32 C3 SuperMiniを使う」を発見

ESP32 C3 SuperMini という製品名に対して、細かなバージョン違いがあるらしい。

掲載されている写真の部品配置と比較してみたところ、今回買ったものは「ESP32 C3 Super Mini(K2)」に相当しているみたいである

で・・・Ubuntu 24.04Serverをインストールして、arduinoをインストールし、Windows上にインストールしたVcXsrvに画面を飛ばす。

Arduiono上では、ボードマネージャにESP32追加し、ESP32 C3 Dev boardを選択して、サンプルを書き込み

エラー発生

Arduino:1.8.19 (Linux), ボード:"ESP32C3 Dev Module, Disabled, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 160MHz (WiFi), QIO, 80MHz, 4MB (32Mb), 921600, None, Disabled, Disabled"

警告:ライブラリESP_SRのカテゴリ「Sound」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリHashのカテゴリ「Security」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリESP Insightsのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリESP RainMakerのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリTFLite Microのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
警告:ライブラリWiFiProvのカテゴリ「」は有効ではありません。「Uncategorized」に設定します。
最大1310720バイトのフラッシュメモリのうち、スケッチが282882バイト(21%)を使っています。
最大327680バイトのRAMのうち、グローバル変数が14240バイト(4%)を使っていて、ローカル変数で313440バイト使うことができます。
                                                                                
 Usage: esptool [OPTIONS] COMMAND [ARGS]...                                     
                                                                                
 Try 'esptool -h' for help                                                      
╭─ Error ──────────────────────────────────────────────────────────────────────╮
│ Invalid value for '--port' / '-p': Path '/dev/ttyACM0' is not readable.      │
╰──────────────────────────────────────────────────────────────────────────────╯
                                                                                
シリアルポート「                                                                                
」が選択されていますが、そのポートは存在しないか、ボードが接続されていません。


「ファイル」メニューの「環境設定」から
「より詳細な情報を表示する:コンパイル」を有効にすると
より詳しい情報が表示されます。

確認してみる

まず、USBデバイスが存在しているかを確認

pcuser@ubuntu:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse
Bus 001 Device 007: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 008: ID 0e0f:0002 VMware, Inc. Virtual USB Hub
Bus 001 Device 022: ID 303a:1001 Espressif USB JTAG/serial debug unit
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
pcuser@ubuntu:~$

ある

rootユーザでesptoolを実行したらどうなる?

root@ubuntu:~# /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id
esptool v5.1.0
Connected to ESP32-C3 on /dev/ttyACM0:
Chip type:          ESP32-C3 (QFN32) (revision v0.4)
Features:           Wi-Fi, BT 5 (LE), Single Core, 160MHz, Embedded Flash 4MB (XMC)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                ac:eb:e6:6d:6b:b0

Stub flasher running.

Warning: ESP32-C3 has no chip ID. Reading MAC address instead.
MAC:                ac:eb:e6:6d:6b:b0

Hard resetting via RTS pin...
root@ubuntu:~#

情報が取得できる

一般ユーザだとどうなる?

pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id

 Usage: esptool [OPTIONS] COMMAND [ARGS]...

 Try 'esptool -h' for help
lq Error qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Invalid value for '--port' / '-p': Path '/dev/ttyACM0' is not readable.     x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

pcuser@ubuntu:~$

エラーとなる

つまり・・・/dev/ttyACM0 にアクセス権がない

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0  4月  8 11:40 /dev/ttyACM0
pcuser@ubuntu:~$

面倒くさいので /dev/ttyACM0自体に権限を与えてしまう

pcuser@ubuntu:~$ sudo chmod a+rw /dev/ttyACM0
[sudo] pcuser のパスワード:
pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw-rw- 1 root dialout 166, 0  4月  8 11:40 /dev/ttyACM0
pcuser@ubuntu:~$

変更後は一般ユーザでもesptoolの実行に成功した

pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id
esptool v5.1.0
Connected to ESP32-C3 on /dev/ttyACM0:
Chip type:          ESP32-C3 (QFN32) (revision v0.4)
Features:           Wi-Fi, BT 5 (LE), Single Core, 160MHz, Embedded Flash 4MB (XMC)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                ac:eb:e6:6d:6b:b0

Stub flasher running.

Warning: ESP32-C3 has no chip ID. Reading MAC address instead.
MAC:                ac:eb:e6:6d:6b:b0

Hard resetting via RTS pin...
pcuser@ubuntu:~$

ただ、これだと、1回抜き差しすると/dev/ttyACM0は再作成されるので権限が元に戻ってしまう

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 4月 8 11:53 /dev/ttyACM0
pcuser@ubuntu:~$

簡単に解決する方法は、上記/dev/ttyACM0のグループ権限にある「dialout」に、一般ユーザを追加すること

pcuser@ubuntu:~$ sudo usermod -aG dialout pcuser
[sudo] pcuser のパスワード:
pcuser@ubuntu:~$

設定後、一回ログアウトする必要がある。ログアウトしないと古い権限が適用され使用できない

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0  4月  8 11:53 /dev/ttyACM0
pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id

 Usage: esptool [OPTIONS] COMMAND [ARGS]...

 Try 'esptool -h' for help
lq Error qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk
x Invalid value for '--port' / '-p': Path '/dev/ttyACM0' is not readable.     x
mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj

pcuser@ubuntu:~$

ログインしなおすと、使えるようになる

pcuser@ubuntu:~$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0  4月  8 11:53 /dev/ttyACM0
pcuser@ubuntu:~$ /home/pcuser/.arduino15/packages/esp32/tools/esptool_py/5.1.0/esptool --port /dev/ttyACM0 chip-id
esptool v5.1.0
Connected to ESP32-C3 on /dev/ttyACM0:
Chip type:          ESP32-C3 (QFN32) (revision v0.4)
Features:           Wi-Fi, BT 5 (LE), Single Core, 160MHz, Embedded Flash 4MB (XMC)
Crystal frequency:  40MHz
USB mode:           USB-Serial/JTAG
MAC:                ac:eb:e6:6d:6b:b0

Stub flasher running.

Warning: ESP32-C3 has no chip ID. Reading MAC address instead.
MAC:                ac:eb:e6:6d:6b:b0

Hard resetting via RTS pin...
pcuser@ubuntu:~$ id
uid=1000(pcuser) gid=1000(pcuser) groups=1000(pcuser),4(adm),20(dialout),24(cdrom),27(sudo),30(dip),46(plugdev),101(lxd)
pcuser@ubuntu:~$

シリアル出力をしない設定がある

debugのために下記の様な感じでシリアル出力を書いた

#define LED_PIN (8)

void setup() {
  Serial.begin(9600);
  Serial.print("start");
  pinMode(LED_PIN, OUTPUT);

  while(1)
  {
    digitalWrite(LED_PIN, LOW);
    delay(500);

    digitalWrite(LED_PIN, HIGH);
    delay(100);
  }

}

void loop() {

  Serial.println("loop test");
  delay(3000);
}

しかし、シリアルモニタに何も出力されない

調べると「esp32 c3系でシリアルモニタに出力されない」に「USB CDC On Boot」が「Disabled」になってると出力されない、という話があった

確認すると、Disabledであった

しかし「Enabled」に変えてから書き込みを行ってもシリアル出力はされない状態

arduiono 1.8.19 on ubuntu 24.04

他の事例「ESP32C3 Super Mini doen’t communicate with Serial Monitor in one setup, but it does in another setup — why?」には「ESP32C3 Dev Module」ではなく「LOLIN C3 Mini」を選んで「USB CDC On Boot:Enabled」で書き込め、ということでやってみたが、ダメだった

claudeに「esp32 c3 super mini にて シリアル出力が出てこない」と聞いてみたら「USB CDC の初期化待ち(重要!)」だそうな

ということでSerial.begin(9600);の次にdelay(2000)を追加したところ、とりあえずsetup内のserial.printについては出力はされたが、loop無いのやつが出力されない…って、あ、setup内でループしてんじゃん

#define LED_PIN (8)

void setup() {
  Serial.begin(9600);
  delay(2000); 
  Serial.print("start");
  pinMode(LED_PIN, OUTPUT);

  //while(1)
  //{
  //  digitalWrite(LED_PIN, LOW);
  //  delay(500);

  //  digitalWrite(LED_PIN, HIGH);
  //  delay(100);
  //}

}

void loop() {

  Serial.println("loop test");
  delay(3000);
}

ということで動作を確認