QEMUでDOSアプリを動かす(1)

Windows 10をMac mini (Intel)のVMWareで動かしていますが,その目的は現在ではDOSアプリであるアマチュア無線用ログソフト(以下 “ログソフト”)を動かすためだけです

Windows 10になってDOS窓内での日本語入力ができなくなってしまいました.そこで現在,日本の地名などもローマ字書きしています.そのWindows 10のサポートは既にメインストリームサポート期間を終了して,セキュリティー対策等だけの延長サポート期に入っています.延長サポートも2025年10月15日に終了するそうなので,そろそろ対策を考え始めないといけません.

現在Windows 11が動くハードウエアも仮想マシンも持っていません.11でも多分DOS窓内で日本語入力は保証されていないでしょうから,そのDOS窓を開くだけのためにハードや仮想マシンやWindowsのライセンスへの新たな投資はバカバカしいです.

ずいぶん昔はLinuxマシン上でDOSEMUというi486エミュレーター上に日本語サポートされたFreeDOSを走らせてそこでログソフトを動かしていました.しかし,x86系のCPUを搭載したLinuxマシンを常用しなくなったこともあり,Windows 8.1→10のDOS窓内で動かしていた次第です.

DOSEMUの開発はとっくに終わっていて,今日のGCCでは自力でbuildもできません.

しかし世の中には同じようなことを必要としたりより高いスキルで解決したりする人がいるようで,自分が今日いじっているdistroを確認したところ,Manjaroには正規にパッケージがあります.また,Slackwareは好事家が作ったパッケージをまとめているサイトSlackBuildsbuild用スクリプトがあります.

Debianについては,開発元が開発をやめた関係で,4年前にUnstableからも外されていました

早速試してみたところ,Manjaroはそれこそ,

pacman -S dosemu

だけでインストールが済みました.また,SlackBuildsも,

sbopkg -i gcc5
sbopkg -i dosemu
sbopkg -i dosemu-fonts

で,かつてx86で動かしていたサブディレクトリーをコピーしてからC:, D:にそれぞれ割り付けることで動作確認できました(Manjaroは動作確認してません).

DOSEMUのいいところは,LinuxのファイルシステムのサブディレクトリーをC: D:ドライブに割り当てることができることで,他のエミュレーターのようにディスクイメージが必須ではありません(ディスクイメージも使えます).

これはなかなか塩梅が良く,DOS用ログソフトのデータファイルをLinuxのファイルシステムにおいたまま読み書きし(ログソフトでは新しい交信データを追記していくのがほとんどです),Linux上で自作スクリプトでMariaDBとやりとりできますし,Linux用のバックアップソフトでも更新したデータだけのバックアップで済みます.

ただ問題点としては,DOSEMUはCPUのエミュレートはしないため,x86のシステム上でしか動かず,Raspberry Piでは使えません.前述のように,今日x86のLinuxは常用していないのでできればRaspberry Piで動かしたいです.

いちおう,x86マシン上でDOSEMUを動かすというのは保険としてとっておいて,次はなんとかRaspberry Pi上でQEMUを使ってDOSを動かし,目的のログソフトを動かすことを目指します.

あとがき

呆れたことに,全く同じことを3年半前にやろうとしたようです.その成果が残っていないので頓挫したようです.

数年前までは,2〜3のWindows用アプリも動かしていました.
使いやすさが売りのManjaroがこうしたオタクしか使わないパッケージをサポートしているのは意外なようですが,大もとがオタクなArchLinuxなので普通にあるようです.

Enscriptのトラブル(Courierの字抜)の解決策

今まで動いていた自作のPerlスクリプトによるQSLカード記入面のデータ出力(enscript入力形式) から,enscript により印刷イメージのPS(PostScript)を生成する手順で,それぞれは動くのですが,出力されたPS形式のファイルをGhostscript付属のps2pdfでPDF化すると,どうしても等幅フォントCourierがひどく文字抜けします.アルファベットに関しては,ざっと見て大文字だけ抜けるのかと思えばそうでもなく小文字も多数抜けています.また数字は “1” 以外全部抜けているようです.

This image has an empty alt attribute; its file name is %E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-03-17-13.14.45.png

解決策

enscriptに与えるソースファイル内で,フォント名を “Courier”, “Courier-Bold” などから,それぞれ, “Courier-New”, “Courier-New-Bold” などに変更するだけです.

これだけで,enscriptとps2pdfで正しいPDFができます

This image has an empty alt attribute; its file name is 20240315-good-480x358.png

動作確認できたdistro

  • Slackware ARM (32bit) 15.0
  • Slackware AArch64 current
  • Raspberry Pi OS (64bit) Bookworm
  • Debian AMD64 Bookworm
  • Debian AArch64
  • Manjaro AMD64
  • Manjaro ARM(64bit)

Desktop環境はすべてKDE Plasma Desktopです.PDFの確認はOkularで行っています.

印刷も問題ありません.
Raspberry Pi OSでなく,UEFIブート用の本家Debian.Raspberry Pi OS (64bit)のもとで動く仮想マシン(KVM/QEMU)で稼働.

RPi3寿命近いか

長いこといわゆる自作パソコンを公私で使ってきました.最後に組み立てた “私” のほうは第4世代のIntel Core i7 4790Sを積んだデスクトップ機で,メモリーは32GB,ビデオカードは今日誰でも知ることになった “NVIDIA社” のGTX-750Tiです.

Core i7 4790SはWikipediaによれば2014年発売ということですから,組み立てたのはその年か翌年くらいなはずで,10年近く経つわけです.

全く元気で,メインのOSはManjaro AMD64にして,Debian aarch64の仮想マシンを含む,多数の仮想マシンのホストにしています

経験からMBの寿命が近づいたサインは,LANポートの故障,ディスクコントローラーの故障,メモリーエラーなどが出ることです.LANポートの故障やディスクコントローラーの故障は,PCIカードを差して代替しますが,その状態では寿命が近いので新しいMBとCPUと,メモリーなどの物色・購入に着手しました.

そうこう考えると,ほぼ毎日電源をONにしているのに,現用の “自作PC” は非常によく動いてくれてます.最近のGaming PCとは格段の差があるとは思いますが,クロックは3.2GHz (最大4.0GHz)で,あとから買ったMac mini (Space Grey, 2018,Intel Core i7 8700B 6-core)と比べて体感速度は遜色ありません

Raspberry Piも最初のものから,2, 3, 3+, 4, 5と買ってきました.Raspberry Pi 3 Model B+ (RPi3+)については,壊れてもう一台発注したと言う記事が当BLOGに残っていて1台は生きていますから,少なくとも都合2台は買ったことになります

今回Raspberry Pi 3 Model B (RPi3)が,不調になってきました.

最初は今年はじめくらいだったと思います.ルーターから数十cmという至近距離に置いて,防犯カメラから送られるRTSP(Real Time Streaming Protocol)による動画を表示させていますが,Wi-Fiでネットに繋がらなくなりました.テレビの裏においてDVIでテレビにつないでいますが,どうしてもテレビの裏はほこりっぽく,気がつけば基板はほこりまみれになっていました.強制空冷のファンがほこりを呼び込んで,この場所に置くにはふさわしくなかったようです.

このときはほこりを吹き飛ばすことで復活しました.そして,ほこりっぽくなりにくい環境で動いていたRPi3+と入れ替えました.RPi3+は熱を金属ケースに逃がすファンレスタイプです.ほこりっぽいところにはこちらのほうが向いているように思います.

RPi3はほこりの少ない方に持ってきましたが,またWi-Fiが繋がらなくなりました.基板を見てもほこりは全然ないので,ソフト的におかしいのかと,RPi3+のSDカードをクローニングして試しましたが同じです.色々悩みましたが,基板をケースから出して,ほこりが付いているようには見えないのですが,ほこりを吹き飛ばすようなことをしたら復活しました.

でも,いままでの経験から寿命は近いと思います.年末年始にかけてRapsberry Pi 5 Model Bを1台購入して,Raspberry Pi 4 Model B (4GB)が1台浮いていますので,RPi3が壊れたら当面はこれを後任に当てることにします.

個人的には,はんだ付けもドリルでの穴あけもせず,ネジを締めてコネクターを差し込むだけで “自作” とはおこがましいと思いますが,世の中そう呼ぶようなのでそうしときます😥
aarch64以外の内訳はAMD64が8,x86 32bitが2で,投げ出したgentooが2 (AMD64とx86 32bit各1)です.
ただし,Mac miniのCPUはモバイル用ですし,OSも違うので厳密な比較は不可能です
たぶん,記事中で発注したものと思われます.
RPiとRPi2も残っていないから故障して捨てたのだと思います.故障しないと捨てない性格なので😅
OSをクローニングしたら/etc/ssh内のkeyを削除して再作成しないと,どこかのレンタルサーバー屋さんみたいに全部のマシンで同じsshの鍵を使うというお間抜けなことになりますので注意が必要です.

Slackware aarch64でいくことに (6)

性急な判断はせずに,しばらく評価を続けることにします.ただ,評価のために1TBのSSDをまるまるあてがうのはもったいないので,かつてRaspberry Pi 4 Model B (RPi4)の評価用に使用してきた500GB SSDに引っ越すことにしました.

現在このSSDはRaspberry Pi 5 Model B (RPi5)に引き継いでいます.約半分をManjaro ARM64(以下単にManjaro)に,残りの半分をRaspberry Pi OS 64bit (RPiOS)に割り振り,RPiOSはSSDからブート,Manjaroは2GBのSDカードにboot部分を書いてあり,差し込んで起動したらManjaroになるようにしています.

RPiOSでは仮想マシンを扱っていてその仮想ディスクイメージがあるのでこれ以上パーティションのサイズを小さくしたくないので,Manjaroの方を半分にすることにしました.

作業はCore i7のManjaro AMD64上で行いました.まずManajroの内容をすべてManjaro AMD64のディスク上にコピーし,Manjaroのパーティションを削除し,半分サイズでもう一度Manjaroのパーティションを作成し,残りをSlackware aarch64ように切りました.

あとはformatしてコピーです.Manjaro AMD64のディスクに一旦退避したRPiOSの内容を半分に減らしたRPiOSのパーティションに,1TBのSlackware aarch64の内容をまるまる500GB SSDの中の新しいパーティションにそれぞれコピーします.rootのコピーが終わったら,microSDカードをvfatでフォーマットして,ここにSlackware aarch64の/boot部分を書き込みます.

ここまではほとんど物を考えずにできますが,ブートするようにそれぞれの/boot/cmdline.txt/etc/fstabを書き換えるのは慎重に行う必要があります.なんか勘違いやケアレスミスをして1度でブートしないことがよくあります.

ブートがうまくいかないのは,たいていcmdline.txtroot=の間違いです. "root="が抜けていたり,その引数が間違っていたりです.

ということで,500GBのSSDをRPi5に接続して,SDカード無しでブートすると,RPiOS,SDカードその1を差し込んでブートするとManjaroに,SDカードその2を差し込んでブートするとSlackware aarch64が起動するようにそれぞれなりました.

しばらく評価を続けます.

Slackware aarch64でいくことに (5)

うまく行きました.しかし,慣れたSlackwareの2度目のインストールにしてはトラブルだらけでした.以下紆余曲折は省略して最短経路を記します.

用意したハードウエア

用意したのはRaspberry Pi 5 Model B (RPi5),専用5V5A電源,USB-3接続の1TB SSD, 4GB microSDカード(以下 “SDカード” もしくは “SD” ),有線LAN,マウス,キーボード,モニターです.

ソースの準備

Slackware.ukAArch64-currentからrsyncしました.wgetに比べ,こちらのほうが後々差分だけの更新ですみますし,使い慣れているという事情もあります.

次に,anonymous FTPを家庭内LAN内に準備します.同じSlackware系のLinuxマシンで,vsftpdを使いました.設定は/etc/vsftpd.confのanonymousの行のコメントアウトのハッシュを消すだけですrsyncしてきた Slackwareのツリーを/home/ftp/の下に置きます

setup

SDカードに,SARPi5のインストーラーを書き込み,RPi5のSDカードスロットに差し込み,SSDをUSBに,有線LANケーブルをLANポートに,その他キーボード,マウス,モニターを接続して電源を入れます.

すると,Kernelが起動して,設定するキーボードを選択する表示が出て,適当な値をいれると,rootのプロンプトになります.

SSDのパーティションが切れてなかったら,ここでfdiskで設定します.現在はパーティションやディスクのswapを使わないので,gptパーティションにして512MBのMicrosoft Basic Dataと,残り約1TBのLinuxの2パーティションにしました.

あとはいよいよsetupで “Slackware” そのもののインストール手順を取ります.ソースは前述の通り家庭内LANのanonymous FTPとします.

setupで一通りインストールを終えてもブートはしません.そこで一旦RPi5は終了してSSDを適当なLinuxマシンにつなぎ,第2パーティションを例えば/mntに,第1パーティションを/mnt/bootにマウントします.そして,/mntにcdして,そこで,RPi5用のkernelやmoduleなど5つのtxztarで展開します.このやりかただと,Slackwareのパッケージデータベースに反映しないので,後で,RPi5で起動させてから,installpkgで上書きインストールしたほうがいいかもしれません(必須ではありません).

あとは,/mnt/boot/内のcmdline.txt.new, config.txt.newをそれぞれ.newのないファイルにコピーするかrenameして,中を編集します.config.txtに関してはそのままでいいと思います.

さらに,/mnt/etc/fstabの内容を念の為確認しておきます.

祈って起動

作業をしたLinuxマシンからSSDを安全に外して,RPi5に接続し,SDカードを外したことを確認して祈りながら電源を入れます.必要なことが行われていれば無事ログイン待ちのプロンプトが出ます.

ここまでくれば普通の Slackware です.

既知の問題とworkaround

Slackware AArac64は正式リリースでない “current” なので,KDE Plasma Desktopは起動しFirefoxもThunderbirdも付いてますが色々問題もあります.

一つは SDDMが稼働してくれないことです.この件 Slackware ARM (32bit) 15.0で起こっていますので, “current” だけの問題ではないようです.

退避策は2つで,CUIでログインしてstartxコマンドを発行する,あるいは,kdmを使うです.前者についてはこれ以上の説明はいらないと思います.

kdmを使う場合は,

chmod -v a-x /usr/bin/sddm

として,/etc/inittabのDefault run levelを4にすればよいです.

もう一つの問題が,設定のサイドメニューが出ないことです.

上のスクリーンショットのように真っ黒です.真っ黒ですけど生きていてクリックするとその項目の設定ができます.

しかし,それではあまりに不便,というか使い物になりません.現在退避策として "krunner" を使っています.どの状態からでもよく, “ALT” + “Space” で画面の一番上に文字入力欄が出ますから,そこに設定したい項目,例えば “display” と入力すると候補が出てそこをクリックします.

他に "host" コマンドがぶっ壊れているなど, workaroundがないものも見つかりますが “current” だからしょうがないです😅

手持ちのRPi5は技適マークが付いていないという事情もありますが,Slackware ARM/aarch64では,無線LAN, Bluetoothがまだ使えないと思います.
最初はUSBメモリースティックにコピーしましたが,インストールの途中でSSDが切断してしまうトラブルに見舞われました.USBポートから供給する電流が足りなくなるのが原因と推測されますが,詳しくは調べていません.2度起こったので諦めてanonymous FTPにしました.anonymous FTPも自分でサーバーを立てるのが面倒なので,Slackware.ukで始めましたが,我慢の限界を超える遅さだったので自前のサーバーを立てることとなりました.最小からそうしておけばよかった😅
これは勘違いで,defaultでanonymousはenabledです.ですから,anonymous_enable=NOとなっていたらコメントアウトするか,YESにします.
このanonymousのディレクトリーについても,最初はどこかさっぱりわからず,ネット検索しても的はずれな回答ばかりで苦労しました😅
実マシンも仮想マシンもすべてzramにしています.
たぶん200MBで十分ですが,ケチってもしょうがないので.