Proxmoxでサーバ構築

イメージ
これまでテスト用にi5第8世代の廃棄PCを使用してきた。 とはいえ今の所何も問題は起きていないが、入れ替えも視野に入れ予備サーバを用意することに。 - メモリ:16GB - SSD:500GB - DDNS+Let's Encrypt - Ubuntu24.04 この環境なので、すぐに構築し直すことは可能だが、とりあえずこのまま置いておいて別のサーバを立てることにする。 最初はRaspberryPiで構築しようと思ったけれど、本体電源+外付けHDD電源+ディスプレイ電源と考えると、邪魔なので廃案。 そこで廃棄しようと思っていた「Lavie NS300/N」が手元にあったので、これを利用することに。 一応バッテリーは正常に動作するので、UPS代わりにそのまま。 - Core™ i3-8145U(やや非力) - メモリ:8GB(少ないが…) - HDD:1TB なので、これまで使用しているものより、若干スペックダウン。 ただ用途は、非常勤で教えに行っている専門学校生用の練習マシンとする予定なので、まぁ問題なさそう。 Proxmox導入 直接、Linuxを導入してもよいのだけれど、今回は Proxmox を導入し、その上でUbuntu Serverを動作させる計画。 USBにProxmoxのイメージを焼いて、インストールすれば問題なく完了。 ただ、現在のバージョンはdebian - trixieがベースになっているので、若干参考になるサイトが少なめ。とはいえ旧版のは参考になるので調べつつ… HDDなだけあって、最初の起動は少し遅いものの、立ち上がってしまえば問題ない。 さぁ、VMにするかCTにするか…。 GUI使うのであれば、VMかなぁ。サーバだしCTでいいかぁ。 という程度の選定で、CT(コンテナ)で進めることに。 - メモリ:4GB - CPU:2 - HDD:20GB(root disk) - HDD:400GB(home用) - Ubuntu24.04 という構成で進めることにした。 テンプレートを用意して、初期設定を行い起動。 まぁすんなりと入った。 液晶を閉じたら、Suspendになってしまったので、若干設定変更。 $ sudo nano /etc/systemd/logind.conf HandleLidSwitch=ignore $ sudo sy...

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にすることができるようになりました。

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

コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?