見出し画像

砂場は監獄によく似ている プログラム作成挑戦記 おまけ

 初級者がプログラム作成に挑戦する記事の第二段の追記です。
 これまで三回に渡りプログラムの作成記事を書きました。今回は、それらのまとめを書くつもりだったのですが、前回の監獄について書き残したことがあるので、それを書きます。

 前回の記事は、作成記事というよりは、作成のために「僕ががんばって勉強したこと」の記事になってしまいました。
 今回は、少しは作成記事らしくするために「僕が作った'最強の'監獄の設定ファイル」を公開したいと思います。

 設定ファイルを見れば、監獄プログラムの構造と機能がだいたい把握できるでしょう。少し特殊なのは、ポリシールーティングを行っているところです。

# 監獄を識別するための名前
# 省略可能 省略時は<path>のbasename
base_name = "proxy"

# 監獄のルートディレクトリ
# 省略不可
root_dir = "/opt/proxy"

# 監獄のinit(pid=1)プロセスの'通常'名前空間におけるpidを記録するためのファイル
# 省略可能 省略時は<base_name>.pid
# 監獄名前空間を特定するために使用される
pid_file = ""

# 監獄のログファイル
# 省略可 省略時は通常出力になる
log_file = "/var/log/jail.log"

#
# Below this line, must use 'RELATIVE' paths
#

# プログラム名とその引数
# 省略不可(引数は省略可)
# <path>の値は実行可能ファイルでなければならない
# コマンドラインオプションが同時指定された場合は、こちらが劣後する
command = {
	path = "/bin/proxy"
	arguments = ["--config /etc/proxy.conf --log /var/log/proxy.log"]
}

# ネットワーク
network = {
# '通常'名前空間におけるvethペアのアドレス
# 省略不可
	local = "10.0.0.1/24"

# vethペアのMTU
	mtu = 1454

# '監獄'名前空間におけるvethペアの相手方リスト
# 複数可
	peer = [

# '監獄'名前空間におけるvethペアのアドレス
# 経路表を省略した場合は'通常'名前空間のmainテーブルに従う
		{address = "10.10.0.2/24"}

		{
# '監獄'名前空間におけるvethペアのアドレス
			address = "10.10.0.3/24"

# 上記アドレスからの送信に対する'通常'名前空間における経路表
			routing_table = {id = 2, gateway = "10.0.1.2"}
		}
	]
}
# '監獄'名前空間におけるプログラムのpidを記録するためのファイル
# 省略可 (例えば、プログラムが独自に作成する場合は不要)
guest_pid = "/run/proxy.pid"

# ケーパビリティ
# capability.hで定義される名称を使用する
# 省略可 省略時はCAP_MODE_NOPRIVが適用される
#capabilities = ["cap_setuid"]

# プロセスの実ユーザーIDおよび実グループID
# 省略可 省略時はルートのユーザーIDとグループIDが保持される
# <capabilities>と同時に指定された場合は、こちらが優先する
owner = {user = 2001, group = 2001}

 さて、本来なら、さらに色々なことを図解していく予定だったのですが、残念なことに設定ファイルだけで1000文字を超えてしまいました。残念なことに。なので、ここで終了です。

まとめ

 初めて監獄を通じてHTTPプロキシを立ち上げ、それにブラウザからアクセスしたときは、少し感動してしまいました。
 自作のプログラムが、ブラウザのような大規模プログラムと連動する様子は、まるで自作プログラムがWebシステムの一部にでもなったかような錯覚を起こさせるものでした。単体のプログラム(設定ファイル解析器)では味わえなかった感覚です。

 だから何だというのでしょう。私の個人的な感動など一銭にもなりません。どうもプログラムの方向性を違えていたようです。次は、もっと他人が共感しやすい、そう、視覚や聴覚に訴えるようなプログラムを作成したいと思います。金の為に!

古往今来得ざれば即ち書き得れば即ち飽くは筆の常也。と云うわけで御座います、この浅ましき乞食めに何卒皆々様のご慈悲をお願い致します。