VanillaOS 3を試す

イメージ
以前仮想マシンで試したものの、あまり時間が取れず、しっかり使えていなかった。 余っている(テスト用においてある)Thinkpad x390に実際に入れて試してみた。 Vanilla OS ところが、サイトに行ってみると少し前(2026-08-24)にUpdateされており2→3へと2年ぶりの更新。 簡単に言うとイミュータブルなOSで、OS本体の書き換えは基本的にできず、A/Bパターンで起動する必要がある。 Aでインストールしたものは、Bに入れられ、起動時にBを選択するとインストール後の状態で使える仕組み。不具合があればまたAに戻せるというもの。 若干、コマンド類が変わってしまっているらしい。 イミュータブルなOSは、これまでにも試したものの日本語がうまく扱えないなど常用するには結構厳しいものがあった。 とはいえ、時間の経過で様々なアプリケーションがFlatpakやAppImageで出揃ってきたので、今回テストすることにした。 インストーラ自体は小さく、起動用のUSBに書き込んで起動すればOK。 インストール完了後、マシン名やユーザ名を入力することで、環境設定は完了。 基本的にはFlatpakでインストールするのが正しい使い方らしいので、必要そうなものを入れてみた。 vscode Brave Browser LMStudio DBeaver-ce Thunderird Obsidian opencode LibreOffice など・・・ どれも、サクサクと動作して気持ちいい。 日本語環境 さて、問題は日本語環境だが、調べてみるとflatpakにmozcもfcitx5も存在していた。 これんらばと思い、入れてみる。 https://note.kurodigi.com/vanillaos-fcitx5-mozc/ が、vanillaOS2の記事のようだけれども、同じ手順でOKだった。 すばらしい。 いつも使用しているmozcが動作するようになった。 ところが、LMStudioでハマった… flatpak特有の問題 LMStudioはすんなり入り、LMLinkでローカルのAIサーバも使用可能。 で、URLを指定したときにWEBサイトを取りに行かせて、処理させるMCPでハマった。 https://github.com/modelcontextprotocol/servers...

Perl ScriptのEXE化で苦戦

exeの生成が必要

以前(随分前だけど)やったことが、あったので楽勝と思ったら、意外なところで躓いたのでちゃんと記録しておく。

基本的にスクリプト言語であるPerlのコードはテキストファイル。
Perlの実行環境さえあれば、ほぼ動く。
 LinuxやMacなら最初からperlが入っているので、何も考えることはない。
じゃ、windowsのように実行環境がない場合はどうするかというと、

  1. Perlを動かせるようにインストールする(ActivePerlで簡単に入る)
  2. exeファイルにして、実行する。(ファイルが巨大になる)
  3. 諦める
と、これくらいしか選択肢がない。

今回は、作成したスクリプトを、Perl実行環境のない端末で何台も動かすことになりそう。
でもって、それぞれの端末にPerlをインストールして、pmなどのライブラリを揃えてというのが、メンテナンス上大変になりそう。

となると、2.のexe化を検討するしかない。

環境準備1

まずは、新しいVMを用意して、ActivePerlのインストールから始める。
ActiveStateに行くと、ActivePerl-5.20.2.2002-MSWin32-x86-64int-299195.msi が最新らしい。随分とバージョンが上がってるなぁ…。

早速インストール→数分で完了。
コマンドプロンプトから、
cpan install PAR::Packer
で、exe化に必要なモジュールをインストール。
まっさらな状態からのインストールなので、若干時間がかかるけれど、無事終了…。
あれ?無事終了しない。Error吐いてる。


main.c: In function 'main':
main.c:121:23: warning: assignment discards 'const' qualifier from pointer target type [enabled by default]
windres -i winres/pp.rc -o ppresource.coff --input-format=rc --output-format=coff --target=pe-i386
'windres' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。
dmake.exe:  Error code 129, while making 'ppresource.coff'
dmake.exe:  Error code 255, while making 'subdirs'
  RSCHUPP/PAR-Packer-1.026.tar.gz
  C:\Perl\site\bin\dmake.exe -- NOT OK


おや? 必要なコマンド類も入れてくれるはずなのに、windresが無いという。
面倒なので、PPM(perl package manager)で入れてみる。確かwindowsのはGUIになっていたはず。

環境準備2

PPMを起動し、PAR::Packerを入れると、すんなり終了。
初めからこうすればよかった。

作業ディレクトリで、サンプルを変換してみる。
hello.plを作成。(まぁ予想通りのプログラムですww)
pp -o hello.exe hello.pl
これでサクッと…。
いかない。ちゅうかエラー吐いているし。
Perl lib version (5.20.2) doesn't match executable 'perl.exe' version (5.20.1) at C:/Perl/lib/Config.pm line 62.
はぁ?
インストールしたPerlは、5.20.2なのに、実行用perlは5.20.1って…。
パッキング用は別に用意するんだけど、バージョンの不一致が起きているのか?
と解釈して、Config.pmを書き換えてみることに。

 62行目あたりのバージョンをチェックしている部分を 5.20.1に変更してみる。

すると、さっきとはエラーを吐くタイミングが少し変わったが、
Perl lib version (5.20.2) doesn't match executable 'perl.exe' version (5.20.2) at C:/Perl/lib/Config.pm line 62.
と、ますます訳の分からない表示に。

じゃ、古いActivePerlを入れれば動くんじゃね?と思って他のVersionを落としてくる。
5.22.0.2200
5.18.4.1805
が、提供されている。5.20.1は無いし…。試しに「5.18.4.1805」でやってみるが当然動作せず。
 ActivePerlを何度も入れなおす羽目に。

調べてみると、ActiveStatesのCommunity Forumに全く同じ書き込みがあった。
PAR::Packer could not pack script: version mismatch between perl lib (5.20.2) and perl.exe (5.20.1)
そこを読んでいくと、最後に

grahams
ActiveState Staff
 Mon, 2015-06-22 12:00
This appears to be an upstream bug in Par::Packer.
Modules should not need to be recompiled, and should be compatible with newer releases of the same major revision of Perl. It's not clear why Par::Packer complains here. The maintainer should have a better idea.
って書いてあるやん。
6月の段階で見つかっているのに、まだ治っていないのかよ…。
次のリリースにって言われても、今使いたいんだし。

別の方法を探ることにする。

環境準備3

Googleでしつこく探してみると、同じような状況の記録がありました。
Perlスクリプトの汎用化+GUI化+exe化=アプリ誕生!(3)
あぁ同じような手順を踏んでいます。

なんと、環境準備1の方法で無理やりクリアしたらしい。
といっても、ものすごく簡単な方法だった。
windresが、異なるフォルダにあるらしいので、これをコピーしてやれと。
探してみると C:\Perl\site\lib\auto\MinGW\bin に確かにwindres.exeがありました。

そこで、こいつをPATHの通っているC:\Perl\site\bin にコピーする。
最後に、再度cpan installをかけてみる。
Appending installation info to C:\Perl\lib/perllocal.pod
  RSCHUPP/PAR-Packer-1.026.tar.gz
  C:\Perl\site\bin\dmake.exe install  -- OK
やった!とりあえずエラー無しで導入まで完了した。

実際に動かしてみる

サンプル用のスクリプトを、exe化してみる。その時の結果が以下の通り。
18バイトだったスクリプトは、PERL本体とその他必要なライブラリ等を組み込んで約3MB程度になっています。

 まあ、今どきの環境であれば、たかだか「Hello」を表示するのに3MB程度使っても
問題はないよね?


一応、無事にexeにすることができるようになりました。

ふぅ、これで終わりじゃ無いんだよね。
実際のスクリプトを作成しないといけないわけで、やっとスタートですゎ。

コメント

このブログの人気の投稿

MEGAにも弱点があった?

Ubuntu24.04 でGUIが死んだ

VirtualBoxでUSBを使う方法が分かった!