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

上記の電源断も最終的にはカーネルの仕事となる。ならば、カーネルがどう作成 されているか知っておくのが良いだろう。 面白いものを見付けたぞ。

1000行でOSを作ってみよう

risc-Vってのがいいね。そして、ファイル・システムをtarに任せてしまうってのが 目から鱗ですよ。

etc

データサイエンス系チートシートを網羅してみた

python主体の解説、すっかりRがのけ者にされてるのが悲しいぞ。これも時代の 流れか。 pythonだけじゃ夢が無いので、少し現実離れした問題を解いて貰おう。

Q: スマートフォン等に利用されてるバッテリーを充電すると、その重量がわずかだが 重くなるそうです。iphone 5 で、20%充電の状態から100%充電した時、どれぐらい 重くなりますか? 計算式を交えて説明してください。

A: スマートフォンのバッテリーが充電によってわずかに重くなるのは、エネルギーが電気として化学的にバッテリー内に蓄えられるためです。しかし、この重量増加は非常に小さく、通常の計測では検出できないほどです。以下に、iPhone 5の例を使って計算します。

### 前提条件

  1. iPhone 5のバッテリー容量: iPhone 5のバッテリー容量は 1440 mAh(1.44 Ah) で、電圧は 3.8 V 程度です。
  2. エネルギー量: バッテリーのエネルギー量は次の式で計算できます: \[ 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 \)
  3. エネルギーの質量変化: アインシュタインの有名な式 \( E = mc^2 \) を使って、エネルギーの質量変化を計算します。ここで:
    • \( E \) はエネルギー(ジュール)、
    • \( m \) は質量(kg)、
    • \( c \) は光速(約 \( 3.00 \times 10^8 \, \text{m/s} \))。

### 計算

  1. 充電によるエネルギーの増加: \[ 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} \]
  2. エネルギーから質量への変換: \[ 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} \]
  3. 結果: 充電による質量増加は約 \( 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による幾何計算

ここにもpythonが顔を出しているぞ。


This year's Index

Home