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...

ソースコードのチェック

プログラマに求められることは何か…

毎年、非常勤として言語や環境設定、アルゴリズムなどを少し教えている。
ここ数年気になっていることがある。

 自分のコードを書かない、書けない人の割合が増えているような気がしている。

確かに、Google先生に聞けば、いくらでもサンプルコードは入手できるし、解説も読める。以前に比べ格段に、ソースコードや開発に関わる情報を入手しやすくなっているとは思う。

 そして、自分が作成しようとするプログラムで行き詰まって、検索したサンプルコードを参考に動くようにする。
 これは、問題ないと思っている。
 人のコードを読む→理解する→自分のプログラムで使えるように修正する(または利用する)→動かす→デバッグする…。
 プログラマなら多分、普通の行動でしょう。

 ところが、最近、Webに紹介されているコードをそのまま利用して、動く・動かないだけを確認する学生を目にするようになった。
  • 課題を課す→同じ内容の問題と解答を探す→そのまま持ってきて提出する
  • 他人のプログラムを入手→改行やコメントを付け加える→提出する


これは、自分の考え・思考をコードに落としたことになるのか?
練習にもなっていないし、何も理解度が上がっていない…。
実力・経験値は一切向上していない…。



対策することに

他人のプログラムを、提出されて「はいOK」という訳にはいかない。
将来ソフトウェア関係の仕事をするのであれば、なおさらそんなことは許されない。

 これまでは、各ファイルのmd5sumを取って、同一かどうか(不正しているかどうか)の判定を最初に行っていた。

 ところが、最近は、コメントを書き加えるとか、無駄に改行やスペースを入れるという、Cheatまがいの手法を使うケースが目立ってきた。

 仕方なく、コメントを無視し、スペースや改行を無視した上で、同一かどうかを判定することにした。


md5.sh

手軽に処理するためにシェルスクリプトで作成してみた。
md5.shで保存して、実行権限を付加してパスの通ったところに置けばOK。
findと併用するのを前提にしている。

#!/bin/bash
# 元ファイルから改行・スペースを除去したハッシュ値を出力する
# 結果は カレントディレクトリの$resultfileに追記出力して保存

tmpfile1=$(mktemp)
tmpfile2=$(mktemp)

commandname=`basename $0`
resultfile="md5_result.txt"

if [ $# -ne 1 ]; then
  echo "Usage: $commandname file1" 1>&2
  echo "ex. find ./ -type f -exec md5.sh {} \;" 1>&2
  echo "ex. find ./ -name '*.php' -exec md5.sh {} \;" 1>&2
  exit 1
fi

# ディレクトリの場合、処理終了
if [ -d $1 ]; then
  exit 0
fi

# phpの場合、//コメント以降を削除
ext=${1##*.}
if [ $ext == "php" ];then
  sed -r -e 's/\/\/.+$//g' $1 > $tmpfile1
else
  cat $1 > $tmpfile1
fi

# 指定されたファイルから改行とスペースを削除
sed -r -e ':loop;N;$!b loop;s/\n/ /g' -e 's/ +//g' $tmpfile1 > $tmpfile2

# md5sumのハッシュ値と、元のファイル名のリストを作成する(スペース区切り)
md5sum $tmpfile2 | cut -d ' ' -f 1 | tr -d "\n" >> $resultfile
echo " $1" >> $resultfile

# 後始末
rm $tmpfile1 $tmpfile2

exit 0
使い方を出力するようにしたが、以下のように実行する。
$ find ./ -name '*.php' -exec md5.sh {} \;
すると、カレントディレクトリ以下のphpプログラムだけ拾って、ハッシュ化したリストをmd5_result.txtに吐き出す。

今の所、phpの時のみコメント(//〜)を取り除くようにしてみた。
ブロックコメントを処理しても良いが、正規表現が面倒だったので省略。

前処理で使うだけなので、これで取り敢えず目的は果たせる。
あとは、動作確認とソースコードのチェックをすれば、まあ大丈夫。



必要に迫られ、こんなプログラムを作成した。
おかげで、学生は経験値が増えず、自分の経験値が増えていくという…。

そのうち、変数の書き換えもチェックし…、あれも、これも…。

そんなことしたくない。

自分の脳味噌で考えて、コードを書くということが重要だという事に、早く気づいて欲しい…。


コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?