risc-V
Table of Contents
systemd
何気に ps awxしてたら、プリンターのサービス・ダエモン君が動いていた。オイラーは プリンターなんて所有してないんで、退役願おう。このダエモン君の名前はcupsね。
stop cups
自分でググるのは、もう古い。執事のChatGPTに聞くのが今風。
sudo systemctl stop cups sudo systemctl disable cups sudo systemctl disable cups.socket sudo systemctl disable cups-browsed.service systemctl status cups sudo apt remove --purge cups sudo apt autoremove
まず、停止。次は起動時の無効化。関連も無効化。状態確認。必要ならSDDからパッケージを抹消。
show active/dead
これだとワンポイントの作業なんで、一般化しとく。って言っても、ダエモン君の 名前さえ判れば、以下同文だからね。
systemctl list-units --type=service --all systemctl list-units --type=socket --all systemctl --type=service
停止中も含めてサービス全部を表示。ソケットも含めて表示。最後は簡潔に表示。 これって、BSDで現用されてる、inetd.confの変形だな。常時起動。オンデマンドで 起動とかね。親分は、initから改名したsystemd。そして、それを操るのはsystemctl とな。
pstree
リナにはhtopなんて言うカラフル・バージョンのtopが有って、色好みの人の受けがいい みたいだけど、視覚化なら、pstreeでしょう。
sakae@lu:~$ pstree systemd-+-ModemManager---3*[{ModemManager}] |-NetworkManager---3*[{NetworkManager}] |-accounts-daemon---3*[{accounts-daemon}] |-avahi-daemon---avahi-daemon |-cron |-dbus-daemon |-fwupd---5*[{fwupd}] |-2*[kerneloops] |-networkd-dispat |-polkitd---3*[{polkitd}] |-rsyslogd---3*[{rsyslogd}] |-rtkit-daemon---2*[{rtkit-daemon}] |-sddm-+-Xorg---7*[{Xorg}] | |-sddm-helper---lxqt-session-+-agent---3*[{agent}] | | |-at-spi-bus-laun-+-dbus-daemon | | | `-4*[{at-spi-bus-laun}] | | |-at-spi2-registr---3*[{at-spi2-registr}] | | |-chrome-+-2*[cat] | | | |-chrome---chrome---16*[{chrome}] | | | |-chrome---chrome-+-chrome---7*[{chrome}] | | | | |-chrome---12*[{chrome}] | | | | `-chrome---9*[{chrome}] | | | |-chrome---8*[{chrome}] | | | `-37*[{chrome}] | | |-chrome_crashpad---2*[{chrome_crashpad}] | | |-chrome_crashpad---{chrome_crashpad} | | |-emacs : |-snapd---11*[{snapd}] |-sshd |-switcheroo-cont---3*[{switcheroo-cont}] |-systemd-+-(sd-pam) | |-dbus-daemon | |-gnome-keyring-d---4*[{gnome-keyring-d}] | |-gvfs-afc-volume---4*[{gvfs-afc-volume}] : | |-gvfsd-+-gvfsd-trash---4*[{gvfsd-trash}] | | `-3*[{gvfsd}] | |-gvfsd-fuse---6*[{gvfsd-fuse}] : |-vmnet-bridge |-2*[vmnet-dhcpd] |-vmnet-natd |-2*[vmnet-netifup] |-vmware-authdlau |-vmware-usbarbit `-wpa_supplicant
timesyncd
面白いものを見付けた。
時刻合わせは、Windowsのサーバーへって前回書いたけど、自前で動いているのね。
sakae@lu:~$ systemctl status systemd-timesyncd systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled> Active: active (running) since Tue 2025-01-14 05:21:37 JST; 1h 58min ago Docs: man:systemd-timesyncd.service(8) Main PID: 747 (systemd-timesyn) Status: "Contacted time server [2620:2d:4000:1::3f]:123 (ntp.ubuntu.com)." Tasks: 2 (limit: 9294) Memory: 1.5M (peak: 2.2M) CPU: 163ms CGroup: /system.slice/systemd-timesyncd.service └747 /usr/lib/systemd/systemd-timesyncd 1月 14 05:21:37 lu systemd[1]: Starting systemd-timesyncd.service - Network Ti> 1月 14 05:21:37 lu systemd[1]: Started systemd-timesyncd.service - Network Tim> 1月 14 05:22:06 lu systemd-timesyncd[747]: Contacted time server [2620:2d:4000> 1月 14 05:22:06 lu systemd-timesyncd[747]: Initial clock synchronization to Tu>
同期先は、ウブンツが自前で用意したサーバーだ。やっぱりOSSを原資にしてても、それ なりの企業で儲かっているのかな? 老舗は赤帽さんだけどIBMに買収される昨今。 そのうちにウブンツ企業はマイクロソフトに買収されるに違いない。
マニュアルをザット見すると、最低限の同期機能しか搭載していないそうだ。なんだ、それ。 本当かどうか、確認してみたいぞ。どうやって?
sakae@lu:~$ timedatectl status Local time: 火 2025-01-14 07:43:25 JST Universal time: 月 2025-01-13 22:43:25 UTC RTC time: 月 2025-01-13 22:43:25 Time zone: Asia/Tokyo (JST, +0900) System clock synchronized: yes NTP service: active RTC in local TZ: no
manをチェインして、こんなコマンドが有る事を知った。
sakae@lu:~$ timedatectl timesync-status Server: 2620:2d:4000:1::3f (ntp.ubuntu.com) Poll interval: 34min 8s (min: 32s; max 34min 8s) Leap: normal Version: 4 Stratum: 2 Reference: 11FD1CFD Precision: 1us (-25) Root distance: 1.036ms (max: 5s) Offset: +5.569ms Delay: 236.767ms Jitter: 10.065ms Packet count: 10 Frequency: +9.590ppm
サーバーのスペックが表わになったな。本当かどうか、しつこく検証したいぞ。 暫し考えて、wiresharkでパケットモニター する方法を思いついた。
インストールしたら、一般ユーザーでも使える様にしておこう。
smatsuo@ubuntu:~$ sudo usermod -a wireshark [user]
で、port ntp のフィルターを設定してからキャプチャーすれば良い。
sakae@lu:~$ tcpdump -r ntp.pcapng | cut -d' ' -f1-3 | grep com reading from file ntp.pcapng, link-type EN10MB (Ethernet), snapshot length 262144 05:23:43.675830 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 05:25:51.925645 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 05:30:08.175432 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 05:38:40.428700 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 05:55:44.691263 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 06:29:52.940449 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 07:04:01.177881 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 07:38:09.428787 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp 08:12:17.689409 IP6 prod-ntp-3.ntp4.ps5.canonical.com.ntp
どんな時間間隔で時刻の問い合わせしてるかを主眼に確認してみた。OpenNTPみたいに、 頻繁には確認していないのね。
Network Time Protocol (NTP Version 4, server) Flags: 0x24, Leap Indicator: no warning, Version number: NTP Version 4, Mode: server 00.. .... = Leap Indicator: no warning (0) ..10 0... = Version number: NTP Version 4 (4) .... .100 = Mode: server (4) [Request In: 17] [Delta Time: 0.247329074 seconds] Peer Clock Stratum: secondary reference (2) Peer Polling Interval: 0 (1 seconds) Peer Clock Precision: -25 (0.000000030 seconds) Root Delay: 0.001038 seconds Root Dispersion: 0.000458 seconds Reference ID: 17.253.28.253 Reference Timestamp: Jan 13, 2025 23:08:31.321128436 UTC Origin Timestamp: Sep 27, 2025 16:23:45.270437246 UTC Receive Timestamp: Jan 13, 2025 23:12:17.563498761 UTC Transmit Timestamp: Jan 13, 2025 23:12:17.563534690 UTC
これは、パケットを解析させてASCII表現させた例。ファイルメニュー -> エキスポートパケット 解析 -> プレインテキスト すれば得られるぞ。
ついでなので、本場のOpenNTP(@OpenBSD)でも確認したる。
eq$ ntpctl -s all 5/5 peers valid, constraint offset -1s, clock synced, stratum 2 peer wt tl st next poll offset delay jitter 2606:4700:f1::1 time.cloudflare.com 1 10 3 519s 1516s -18.585ms 51.636ms 112.034ms 129.250.35.251 from pool pool.ntp.org 1 10 2 636s 1637s 1.103ms 14.408ms 2.044ms 162.159.200.123 from pool pool.ntp.org 1 10 3 620s 1619s 4.811ms 26.535ms 33.260ms 133.243.238.243 from pool pool.ntp.org * 1 10 1 552s 1558s 0.805ms 15.644ms 2.669ms 129.250.35.250 from pool pool.ntp.org 1 8 2 1322s 1521s -2.918ms 12.823ms 1.850ms
同期が取れて安定期になった時の状況。その頃のパケットをキャプチャーしようと 思ったら、wiresharkが入っていなかったんで、伝家の宝刀tcpdumpです。
eq$ doas tcpdump -i iwm0 -w ntp.cap port ntp tcpdump: listening on iwm0, link-type EN10MB ^C 149555 packets received by filter 0 packets dropped by kernel
サーバーらの返答パケットです。
06:20:11.024263 2606:4700:f1::1.123 06:20:44.049510 133.243.238.243.123 06:21:52.095230 162.159.200.123.123 06:22:08.116334 129.250.35.251.123 06:33:34.693903 129.250.35.250.123 06:45:28.842930 2606:4700:f1::1.123 06:46:09.878417 133.243.238.243.123 06:47:00.922536 162.159.200.123.123
ちゃんと監視を継続してるね。
CUI console
前回の宿題事項を、かたづけておく。もしもの為です。
How do I change the font or the font size in the TTY (console)?
Ubuntu ServerのCUI環境(tty)のフォントを変更する
CapsLockキーをCtrlキーにするには、/etc/defalut/keyboardに下記を追加。
XKBOPTIONS="ctrl:nocaps"
フォント設定の方は、下記の様なエイリアスにしといた。そしてコンソールでは 日本語が不可なんで、ロケールを英語にして、豆腐を避ける。
alias font='setfont Uni3-TerminusBold28x14.psf.gz; LANG=en_US.UTF-8'
フォントの在処は、/usr/share/consolefonts/ になるんで、場合によっては、他の 物も容易に試してみられる。
ISO to USB
例のshutdownした時、パソコンの電源が切れない問題。電源ボタンを長押しで対処 してたんだけど、ボタンから手を離すタイミングが難しい。長すぎるとrebootしちゃう んだ。次のLTSに期待(2月と8月)したい所ではあるんだけど、どうもカーネル・バージョン が上らないと、解決しない問題のように思える。
ならば、新らしいカーネルが採用されてる(はずの)24.10を先行確認するって手があるな。 この際だから、Lubuntu自身でISOをUSBに焼いてみよう。デバイス名は、sdbになるはず なんだけど、一応リナのルールに則っり、確認(ググる)。
USBを刺すと、ファイルマネージャで開くが聞いてくるけど、そんなのは今回の目的 に似わないんで、いいえ で返答。こういう注意をしてくれてる所は無かったぞ。
sakae@lu:~$ sudo fdisk -l : ディスク /dev/sdb: 7.45 GiB, 7996440576 バイト, 15618048 セクタ Disk model: USB Flash Disk :
やはり、思った通りだ。メーカー名とかが出てこないのは、リナの伝統、ハードに敬意を 示さないからだな。
sakae@lu:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 4K 1 loop /snap/bare/5 : loop10 7:10 0 44.4M 1 loop /snap/snapd/23545 sda 8:0 0 238.5G 0 disk ├sda1 8:1 0 300M 0 part /boot/efi └sda2 8:2 0 238.2G 0 part / sdb 8:16 1 7.4G 0 disk ├sdb1 8:17 1 5.8G 0 part /media/sakae/Ubuntu 24.04.1 LTS amd64 ├sdb2 8:18 1 5M 0 part └sdb3 8:19 1 300K 0 part sr0 11:0 1 1024M 0 rom
簡易的には、ブロックデバイスをlsするって言う、なんだかなあーってコマンドでも 確認できるよ。
sakae@lu:ISO$ sudo dd if=lubuntu-24.10-desktop-amd64.iso of=/dev/sdb bs=1M 3350+1 records in 3350+1 records out 3513397248 bytes (3.5 GB, 3.3 GiB) copied, 382.8 s, 9.2 MB/s
焼いたUSBから起動して、Try Lubuntを選択。勿論、日本語でお願い、WiFiは、これ使ってて 本番のインストール・モードもどきにしたよ。firefoxは普通に使えた。そんな事より カーネル・バージョンの確認。6.11.0.8 になってた。LTSでは、6.8.0.51だから、大分 新らしいな。
これでshutdownを選んだら、やはり電源は切断されなかったぞ。ググると22.04 LTSの 頃はちゃんと断できたのに、24.04LTSで切れなくなったぞの、怨嗟の声が聞こえてくる。 もう、駄目なんすかネ?
lsblk
なんだかなあのコマンドをOpenBSDで確認してみる。
vm$ ls -l /dev | grep '^b' : brw-r----- 1 root operator 2, 136 Jan 5 07:48 fd1i brw-r----- 1 root operator 17, 0 Jan 5 07:48 rd0a brw-r----- 1 root operator 17, 2 Jan 5 07:48 rd0c brw-r----- 1 root operator 4, 0 Jan 5 07:48 sd0a brw-r----- 1 root operator 4, 1 Jan 5 07:48 sd0b brw-r----- 1 root operator 4, 2 Jan 5 07:48 sd0c brw-r----- 1 root operator 4, 3 Jan 5 07:48 sd0d :
ブロック・デバイスをリストしてねってコマンドだから、その通りにしてみただけ。 何でこんなのを真面目くさって専用なコマンドにするのかねぇ?
リナ方面も少子高齢化が進行してます。その対策の一環として志ある若者を取り 込もう作戦です。年間10個ぐらいを便利なコマンドとして表彰、及び 、パッケージとして取り込みます。これで若者を発奮させましょ。 BSD方面は、ロートル揃いなんで、こういう風潮は無いのかな。ただ老兵は消えるのみ、 ってのをヒシヒシと感じますよ。
sakae@lu:~$ ls -l /dev | grep '^b' brw-rw---- 1 root disk 7, 0 1月 17 05:02 loop0 brw-rw---- 1 root disk 7, 1 1月 17 05:02 loop1 : brw-rw---- 1 root disk 7, 9 1月 17 05:02 loop9 brw-rw---- 1 root disk 8, 0 1月 17 05:02 sda brw-rw---- 1 root disk 8, 1 1月 17 05:02 sda1 brw-rw---- 1 root disk 8, 2 1月 17 05:02 sda2 brw-rw----+ 1 root cdrom 11, 0 1月 17 05:02 sr0
一応リナでも確認してみた。デバイスは起動時に作成してるのか。
risc-V
上記の電源断も最終的にはカーネルの仕事となる。ならば、カーネルがどう作成 されているか知っておくのが良いだろう。 面白いものを見付けたぞ。
risc-Vってのがいいね。そして、ファイル・システムをtarに任せてしまうってのが 目から鱗ですよ。
etc
python主体の解説、すっかりRがのけ者にされてるのが悲しいぞ。これも時代の 流れか。 pythonだけじゃ夢が無いので、少し現実離れした問題を解いて貰おう。
Q: スマートフォン等に利用されてるバッテリーを充電すると、その重量がわずかだが 重くなるそうです。iphone 5 で、20%充電の状態から100%充電した時、どれぐらい 重くなりますか? 計算式を交えて説明してください。
A: スマートフォンのバッテリーが充電によってわずかに重くなるのは、エネルギーが電気として化学的にバッテリー内に蓄えられるためです。しかし、この重量増加は非常に小さく、通常の計測では検出できないほどです。以下に、iPhone 5の例を使って計算します。
—
### 前提条件
- iPhone 5のバッテリー容量: iPhone 5のバッテリー容量は 1440 mAh(1.44 Ah) で、電圧は 3.8 V 程度です。
- エネルギー量:
バッテリーのエネルギー量は次の式で計算できます:
\[
E = C \cdot V
\]
ここで、\( C \) はバッテリー容量(Ah)、\( V \) は電圧(V)です。
- 20%から100%充電の場合、80%が充電されるので: \( E_{\text{充電量}} = 1.44 \, \text{Ah} \cdot 3.8 \, \text{V} \cdot 0.8 \)
- エネルギーの質量変化:
アインシュタインの有名な式 \( E = mc^2 \) を使って、エネルギーの質量変化を計算します。ここで:
- \( E \) はエネルギー(ジュール)、
- \( m \) は質量(kg)、
- \( c \) は光速(約 \( 3.00 \times 10^8 \, \text{m/s} \))。
—
### 計算
- 充電によるエネルギーの増加: \[ E_{\text{充電量}} = 1.44 \cdot 3.8 \cdot 0.8 \, \text{Wh} = 4.37 \, \text{Wh} \] 1 Wh は 3600 ジュールなので: \[ E_{\text{充電量}} = 4.37 \cdot 3600 \, \text{J} = 15732 \, \text{J} \]
- エネルギーから質量への変換: \[ m = \frac{E}{c^2} \] \[ m = \frac{15732}{(3.00 \times 10^8)^2} \, \text{kg} \] \[ m \approx 1.75 \times 10^{-13} \, \text{kg} \]
- 結果: 充電による質量増加は約 \( 1.75 \times 10^{-13} \, \text{kg} \)(0.000000000000175 kg)です。
—
### 結論 iPhone 5を20%から100%充電した場合、その重量は理論上 約 0.175 ピコグラム(pg) 増加します。この量は非常に小さいため、日常生活では全く検出できません。
Q: 住む場所によって、時間の進み方が違うそうです。(日本にはこれを題材にした、 浦島太郎って言う物語があります) 東京都江戸川区の海抜0mに住む人と、富士山の山頂である海抜3776mに住む人では、 どれぐらい時間の進み方が違いますか? 計算式を交えて、説明してください。
A: 住む場所の標高によって時間の進み方が異なる現象は、**一般相対性理論**による「重力による時間の遅れ(重力時間遅延)」として説明できます。この現象では、重力が強い場所ほど時間がゆっくり進み、重力が弱い場所ほど時間が速く進みます。
—
### 重力時間遅延の計算式 重力による時間の遅れは、以下の近似式で表せます(重力場が比較的弱い場合):
\[ \Delta t = t \left( 1 - \frac{gh}{c^2} \right) \]
- \( \Delta t \): 標高差による影響を受けた時間
- \( t \): 基準の時間(平坦な重力場での時間)
- \( g \): 地球の重力加速度 (\(9.8 \, \mathrm{m/s^2}\))
- \( h \): 標高差(m単位)
- \( c \): 光速 (\(3 \times 10^8 \, \mathrm{m/s}\))
—
### 東京都江戸川区(海抜0m)と富士山山頂(海抜3776m)の場合
#### 1. 標高差の影響
- \( h = 3776 \, \mathrm{m} \)
- \( g = 9.8 \, \mathrm{m/s^2} \)
- \( c = 3 \times 10^8 \, \mathrm{m/s} \)
時間の遅れを計算すると、海抜0mと標高3776mの間の時間の進み方の差は以下のようになります。
\[ \Delta t = 1 - \frac{gh}{c^2} \]
\[ \Delta t = 1 - \frac{(9.8)(3776)}{(3 \times 10^8)^2} \]
計算すると:
\[ \frac{(9.8)(3776)}{(3 \times 10^8)^2} \approx 4.1 \times 10^{-13} \]
つまり、3776mの高さでは、時間は約 \( 4.1 \times 10^{-13} \) 秒/秒 速く進むことになります。
—
### 1年間での差
1年間(365日 = \( 31,536,000 \, \mathrm{s} \))では、どれくらいの差が生じるかを計算します:
\[ \text{時間差} = \Delta t \times \text{時間} = (4.1 \times 10^{-13}) \times 31,536,000 \]
\[ \text{時間差} \approx 0.013 \, \mathrm{s} \]
—
### 結論 東京都江戸川区(海抜0m)に住む人と富士山山頂(海抜3776m)に住む人では、**1年間で約0.013秒(13ミリ秒)程度の時間の進み方の違い**が生じます。 これは非常に小さい差ですが、原子時計などの超精密な測定機器では検出可能なレベルです。
浦島太郎のように「劇的な時間のズレ」にはなりませんが、現実の物理学ではこうした小さな違いが確かに存在します。
最近のChatGPTは、こんないやがらせな質問にも回答してくれるのね。はたして、こじつけは していないだろうか? 検証してみよう。
ここにもpythonが顔を出しているぞ。