UEFI環境でのFAT領域を無くす

ここに記載するコマンドは非常に危険で、スペルミスや大文字/小文字を間違えただけで取り返しのつかない事態となります。全て、自己責任でお願いします。また、ここで示すbios_grubによる対応は決してメジャーな方法ではありません。

         キーワード:bios_grub

UEFI方式が出現し10年以上経過していますが、未だに壊れやすいFAT32領域 512MB以上 を必要としている点には疑問を感じます。マウントしない対応や、ReadOnlyでマウントすることも可能ですが、アップデート時にrwマウントするのを忘れ、トラブルとなるケースもあります。

これを打開する方法として、bios_grubという1MBの小さなパーティションを設けることで、UEFIシステムで従来のMBR方式で起動させる対応があります。この対応は、ChatGPT先生でも誘導してあげないと正しいガイドをしてくれないので、ここで整理します。以下、Ubuntu22.04では動作確認済みです。

パーティションの作成は、gpartedというGUIツールを使えばマウス操作だけでも可能で、実際、私もしばらくはgpartedを使って調整していました。しかし、M.2 SATAも普及しUEFIへの対応場面が増え、GUI操作がうっとおしくなってきたので、コマンド対応にしました。コマンドは sgdisk を使います。

## 環境に合わせて・・・
SSD=/dev/nvme0n1
SSDp2=/dev/nvme0n1p2

## パーティションテーブルを作る。以下、状況に合わせて・・・
sgdisk -o $SSD  ## 既存のパーティションデータを消去
sgdisk -Z $SSD ## 上記でエラーの場合は根こそぎクリア
sgdisk -g $SSD  ## MBRをGPTに変更する場合(元データは消えない)
sgdisk -G $SSD ## もしクローンしたSSDならGUID(固有値)を変える

sgdisk -L ## [参考] ef02, 8300などのtypeの説明を表示

## パーティションを区切る。bios_grubは+1MでもOK。
## EF02の区画にはgrub-installでcore.img(MBR/i386)が入る。

sgdisk -n 0:0:+2M -t 0:ef02 -c 0:"bios_grub" $SSD
sgdisk -n 0:0:0 -t 0:8300 -c 0:"ROOTFS" $SSD

## ROOTFS区画をフォーマット
mkfs.ext4 $SSDp2
tune2fs -c0 -i0 $SSDp2   ## ディスクチェック無効化
e2label $SSDp2 ROOTFS    ## LABEL名でマウントさせるため

## マウント
mount LABEL=ROOTFS /mnt

こうして作ったパーティションは下記のようにFAT32領域が無しとなります。このシンプルなパーティションで、下記では/dev/sdh2にユーザランドをコピーすれば、UEFIマザーボードでUbuntu22.04が起動します!

--

以下は、LinuxのクローンSSDを作成するときの実施例(ご参考)です。ここでのrootfsのコピー実施方法はケースバイケースでノウハウも必要です。ここではあえて明記しませんが、コピー元の/bootや/homeが別パーティションになっている場合には、それらの内容もROOTFS(/mnt)に全部コピーする必要があります。

## rootfsのコピー . . . . . (割愛)

## chrootの準備
mount -t proc proc /mnt/proc
mount -obind /dev /mnt/dev
mount -obind /dev/pts /mnt/dev/pts
mount -obind /sys /mnt/sys
chroot /mnt

## chrootの新技!
apt install arch-install-scripts     ## 新技を仕込む
cp /mnt/etc/fstab /mnt/etc/fstab_org ## backup
genfstab
-L /mnt > /mnt/etc/fstab    ## 新技①
arch-chroot /mnt                     ## 新技②

vi /etc/defaults/grub   ## 下記4行を追加(任意)
GRUB_RECORDFAIL_TIMEOUT=5
GRUB_DISABLE_OS_PROBER=false
GRUB_DISABLE_LINUX_UUID=true
GRUB_DEVICE="LABEL=ROOTFS"

## /etc/fstabの編集(上記の新技①で作ってあれば不要)
## 例)LABEL=ROOTFS ext4 defaults 0 1


## chroot環境でのオペ
findmnt /   ## SSDバイスsdh,nvme0n1 などを確認
grub-install --target=i386-pc /dev/nvme0n1
update-grub ## Debian/Ubuntu系での対応
grub2-mkconfig -o /boot/grub2/grub.cfg ## RHEL系での対応(未確認)

## マシンIDを更新。忘れないで!
rm -f /etc/machine-id
systemd-machine-id-setup
exit

 

参考になったページ:
GRUB/ヒントとテクニック - ArchWiki 
ArchLinuxのページですが、
Ubuntuでもほぼ同じです。core.imgの説明がとても参考になりました。

AIがプログラムを作る時代(3) やっぱり凄い!

生成AIは、ディベロッパーにとってはまさに技のデパートIT土方やシェル芸人と呼ばれる方々の存亡が危ぶまれますが、「プロンプト」を使いこなせる人はまだ少なく、「プロンプト」を使いこなすことで、もうしばらくはその職を維持できるかもしれません。Google検索窓への入力と同様、「プロンプト」への入力にはある程度のセンスが必要です。

生成AIもいろいろと出てきましたが、それぞれ一長一短があり、用途に応じた使い分けが必要です。個人的には、デバイスドライバレベルの比較的ショートなC言語プログラムや、シェル芸で済むレベルのユーティリティを作るシーンで、Webブラウザで無償で使えるものをペアプログラミングのパートナー(・・・というよりは師匠)にしています。年明けにはパートナーが変わっているかもしれませんが、現時点では下記がパートナーとして良いと感じています。
① ChatGPT(GPT3.5)
コードの正確性はいまひとつですが、マクロなどの提案力が秀逸で、スピードも早いです。「可読性をある程度維持しながら、演算数と行数を減らして!」などと要望すれば、指示以上のマクロ技を展開してくれて感動すること多々あります。たまに、在りもしないコマンドを提案したりもしますので、そこは要注意ですが、プログラムのアウトラインを把握するケースで極めて有効です。GPT4に比べて劣るということも無く、むしろ、ユーザが多い分の利が出力に反映されていると感じます(気のせい?)。
② Phind (* Pair Programmerモード)
「フィンド」と読むようです。プログラマー向けとあって、コードの正確性が秀逸です。ハルシネーション(嘘を繰り返す応答)はほぼ無さそうで、不明点があれば正直に質問が来ます。評判の良いGitHub Copilot(有償)はまだ使ったことがありませんが、そこと良い勝負かと思います。但し、スピードはちょっと遅いです。

他、Google Bard, BingAI, Claude2 なども試しました。それぞれ特色があり、インプットが多い場面や、数値解析や演算が複雑な場面で有利と推測しています。一方で、プログラムの生成では期待外れのコードであったり、ハルシネーションがひどいケースもありました。但しこれも、「プロンプト」のテクニック次第だったかもしれません。

--
生成AIの進化と浸透がここまで加速するとは予想できませんでした。今後の人生設計にも影響が出始めています。このあたりまでの目論見では70歳まで会社に居座れるつもりでしたが、、、2038年問題とか2036年問題とかはAIが素っ気なく解決してくれるでしょう。ここを書いた頃はAIがデータシート読むなんてまだまだ先の話と思ってましたけど、、、有償AIや未公開AIならば簡単にできるでしょう。ChatGPT(無償)でも、プロンプト入力を、応答に応じて段階的に進めれば、アウトラインやひな形として通用するコードを吐けてます。

--

今はどこも人手不足ですが、突如、この状況が逆転する日が来るかもしれません。もしかすると自然界には、演算処理能力とアルゴリズムの条件が整うと、なにかしら魂が宿るという法則があるのかもしれません。もしその日が訪れたら、スターウォーズをはじめとするSF映画のように、個性豊かなドロイドや機械生命体が出現します。そんな日が来ることを期待と不安を持って妄想しながら、70歳まで(許されるならそれ以降も)会社にしがみ付く方法を考えていきます。

 

AIがプログラムを作る時代(2) ChatGPT先生

ここ ←で書いた同じ課題をChatGPT先生に投げてみました!

素晴らしい回答です!

あのコピペ騒ぎと昨今までのステイホーム/リモート化の影響で、今では主要大学にはTurnitin(ターンイットイン)というコピペ盗用発見ツールが導入されていて、学生は過去レポも流用できない状況でしたが、まさに(悪い)救世主です。ChatGPTが生成した論文/コードをTurnitinで検出できるのか! AI vs AIが始まってます。 参考1  参考2

ところで、こうして生成したソースコードを業務で利用するには、著作権が気になるところですが、これも聞いてみました!

なんか生煮えの回答です。
--

ついでに、どうでもいいことも聞いてみました!


もう、恋人にしちゃいたいです💛(^^♪
脱字も華麗にスルーしてくれてます (;^_^

なお、ChatGPTのニセアプリも多数出回っている様子なので、注意してください。現時点ではスマホアプリではなく、Webブラウザから入るのが正解です。*1 Webでは OpenAIのサイト から「Try ChatGPT→」を選択しアカウントを作ります。サイトは英語ですが、最下の質問枠に日本語を入れれば、やりとりは日本語になります。

更に、AI vs AIについて、どうしても気になることを聞いてみました。

・・・恋人にしてはならず、距離感は必要ということのようです。


[3/14] スマホの「Bing」アプリでも、ほぼ同様の対応ができました! モードを独創性・バランス・厳密の3段階から選べます。いつからこんなことできるようになってたんだろうか。。。Orz

*1:iPhone, Android向けアプリも公開されました。

Rustの初コンパイル と conky

大好きだったscreenletsがメンテされないため、あきらめてconkyを勉強しています。conkyでカレンダーを表示しようとしたところ、Rustの勉強をする機会に恵まれたため、整理しておきます。

conkyでのカレンダー表示はいろいろあるのですが、たまたま下記を選択したのがきっかけです。
https://github.com/michaelnoguera/conky-calendar

このソースがRustであることに気付くのにしばらく時間がかかりました。そして、いろいろと調査した結果、Oracle Linux 8では下記の操作となりました。

sudo dnf install rust cargo
git clone https://github.com/michaelnoguera/conky-calendar
cd conky-calendar
vi src/main.rs ## 曜日を日本語にした!
cargo build --release。

この成果は、下記画面の右上のカレンダーです。曜日が日本語になっただけです ^^;

・・・今回、いろいろとgoogle先生に聞きながら作業しましたが、ここ最近、人気急上昇でざわつきはじめたChatGPT先生に聞くべきだったなぁ〜と思います。
なお、上記conkyのベースはこちら↓です。
https://github.com/moabdrabou/Conky_Desktop_Guru
ここからアレンジさせていただきました。


Tips:
上記デスクトップではfontが正しく当たっていなかったようです。ソースでMontserrat-Regular、他の中央ハイフンを設定してあげることで、ちょっと見栄えが良くなりました。fc-listコマンドや、/usr/shar/fonts、$HOME/.fonts にあるフォントについて、しっかりと確認した方が良さそうです。
改良後:

Ubuntu20.04 電源ブチ切り myinit Ver.3 (systemd)

※ この記事は編集中です。 /sbin/myiniと/etc/fstabを調整する内容を追記する必要があります。


禁断の一手を使う。

前提:

  1. /sbin/myinitは、Ver.2の最終行 /sbin/initをコメントアウトする。
  2. /etc/myrwtabは、Ver.2で作成済み。
  3. /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTはオリジナルに戻す。init=/sbin/myinitの定義があれば削除のうえupdate-grubを実行。
## readonly-rootの最新版を入手する。現時点では10.17.1
wget http://ftp.riken.jp/Linux/fedora/releases/37/Everything/x86_64/os/Packages/r/readonly-root-10.17-1.fc37.noarch.rpm

## readonly-rootパッケージは「noarch」なので、alienを使うホストのCPUは任意。
## 但し、root権限で、
apt install alien
alien readonly-root-10.17-1.fc37.noarch.rpm
## ターゲットのコンソール(root)で、
dpkg -i readonly-root_10.17-2_all.deb
vi /lib/systemd/system/readonly-root.service
  ##
  ## 「ExecStart=/sbin/myinit」 に書き換える
  ##
systemctl enable readonly-root.service

ToDo: readonly-root.serviceの起動位置を確認しておいた方が良い。 確認方法の例はこちら

タバタ プロトコル

去年、リハビリで通っていた整形外科の理学療法士のお兄さんとの会話:

お兄さん>ジムに行ってるならエアロバイクがおすすめですよ。
私>エアロビクスならいいけど、エアロバイクは単調で無理!
お兄さん>タバタプロトコルがいいですよ。
私>タバタ? なにそれ?
お兄さん>スマホアプリもあるから検索! 軽めでいいからピーク100回転あたりで回して。テレビ見ながらとか、本読みながらとか、ながら運転じゃ駄目ですよー。

・・・最後のお兄さんコメントは、お兄さんの自転車愛とこだわりがあってのコメントで、万人向けではありませんが、タバタについて調べたところ、アメリカではオオタニよりも有名?!らしく、ここでも時代に取り残されたか...Orz という感じです。

タバタプロトコルは、強20秒+弱10秒 x 8回 = 4分 のインターバルトレーニングで、どのようなトレーニングにも適用できます。かなりきついのですが、効果大!。これを3セットやれば、その夜はぐっすり寝れます。

YouTube#タバタ

スマホアプリ解説 


ジムでタバタをやっている人を見たことありませんが、単に気付いてないだけかもしれません。調子に乗りすぎて、クールダウンを怠り、やらかしたので、またしばらくこのプロトコルのお世話になりそうです (;^_^ 。 去年と違って、ひざ周辺や太もも裏の筋肉のベースがしっかりあるので、マッスルメモリー発動! 回復は早そう。

AIがプログラムを作る時代、そして・・・


AIがプログラムしてくれます。 同じお題でも、気分で異なるコードを出力します。
aiprogrammer.hashlab.jp 例)2の平方根ニュートン法で近似解を求める (python)
回答1:

def square_root(number):
    """
    Calculate the square root of a number using the Newton-Raphson method.
    Args:
        number (float): The number to take the square root of.
    Returns:
        The square root of the input number.
    """
    guess = number
    i = 0
    while i < 100:
        epsilon = 0.0000001
        new_guess = (guess + (number / guess)) / 2
        if abs(new_guess - guess) < epsilon:
            print("i:", i)
            return new_guess
        guess = new_guess
        i += 1
    return -1
print(square_root(2))

回答2:

def newton_method(x):
    epsilon = 1e-10
    guess = 1.0
    while abs(guess**2 - x) >= epsilon:
        guess = guess - ((guess**2 - x)/(2*guess))
    return guess
## この時はprintが無かったので自分で補足
ans = newton_method(2)
print(ans)

上記のコードを見ると、AIで生成した、、、というよりは、AIがネットサーフィンでピックアップしたソースコードという感じです(特に回答1のコメント文とか)。

制御系では人間がソースコードを作る時代はとっくに終わっていて、モデルから自動生成していくのが主流です。人間がコードを書けば必ずバグが入るためです。ですが、デバイスを直接扱う所はまだまだ人力です。もし、デバイスのデータシートからデバイスドライバ/デバイスツリーを書いてくれるAIが出現したら、おそらく私の業務は半減します。出力ソースコードC言語ではなくてRustかなぁ。。。はたして私の定年前にそのようなところまで技術が到達するか、楽しみです。もしそうなったときのため、首相が掲げるリスキリングにも取り組まなければ・・・