今日の戯言 by maa
基本的にただの独り言です。有益な情報を求めてはいけませんw
基本的にただの独り言です。有益な情報を求めてはいけませんw
「はじめてのプログラミング」の授業用に Web コンテンツを用意しているのだが、学内アクセス専用にしたいために学内ローカルアドレス(http://maa.u.icc.ac.jp/pb/)で公開していたところ、学生からアクセスできないといわれた。どうやら学生が使う学内 Wi-Fi の LAN から研究室の LAN には直接アクセスできないように VLAN が設定されているようだ。こうなると proxypass の設定で大学 Web ページ下に見せているグローバルアドレス(https://www.icc.ac.jp/maa/pb/)でアクセスしてもらうしかない。何とかならないものかと研究室の Web サーバ apache2 をあれこれやってみた記録である。
上位サーバの proxypass 下でアクセスされると、クライアント IP アドレス(http の環境変数REMOTE_ADDR)が上位サーバの IP アドレスで記録されてしまうので、実際のクライアント IP アドレスがわからない。そこで、mod_remoteip をロードして /etc/apache2/conf-available/remoteip.conf を設定した(#a2enconf remoteip を忘れずに)。
RemoteIPHeader X-Forwarded-For RemoteIPInternalProxy 127.0.0.1 RemoteIPInternalProxy 172.16.0.0/12 RemoteIPInternalProxy 192.168.0.0/16
127.0.0.1 はなんか多くの AI クローラーが騙ってくるので、それを弾く(本来のクライアントグローバルアドレスに書き換える)ために付け加えた。172* と 192* は学内で使われているローカルアドレスである。これで環境変数 REMOTE_ADDR には本来のクライアント IP アドレスが記録される。
これが結構難儀した。<If> ディレクティブを使って 172.16.0.0/12 以外に認証をかけようとしたのだが、REMOTE_ADDR との文字列比較に 172.16.0.0/12 とネットワークアドレスで書けないので、純粋な文字列パターンで 172.16~172.31 に恐らく正規表現でマッチさせなければならない。そこであれこれ調べたところ、正規表現での比較には「=~」で正規表現にマッチするもの、「!~」正規表現にマッチしないものが書けるということ。また、apache2 での正規表現は perl の書き方で書くということだった。で付け加えたところは以下の <If> から </If> のところ。
<Directory "/var/www/pb"> AllowOverride None Options ExecCGI <If "%{REMOTE_ADDR} !~ /^172\.(1[6-9]|2[0-9]|3[0-1])\..*/"> AuthType Basic AuthName "pb" AuthBasicProvider file AuthUserFile "/etc/apache2/xxxxxxxxx" Require user userxx1 userxx2 </If> <Files "*.txt*"> Require all denied </Files> </Directory>
動作チェック済みだが、マッチングパターンに漏れはないだろうか。仮に漏れがあっても情報漏洩とかするやつではないのでそこまで気に病むことでもないのだが、正規表現は強力だけどややこしい...
追記:"|" による or は3つ並べられないみたい(エラーは出ないが)だったので、"()" によりグループ化するように修正した。ようは "A | B | C" とはかけないので "(A | B) | C" のようにした。 ←動作チェックしてダメだったからこのような修正をしたのだが、or で3つ並べてもよいみたい。なんか他のところで引っかかってたのか... 結局もっともシンプルな表現で良いようだ。
土曜日は1年生の履修ガイダンスで朝から5号館で仕事だった。学環の仕事は4月からなのに、いきなり教務委員として履修ガイダンスをやるはめになってしまってなんだかなな感じなのだが、ようは履修要覧と履修登録の手引きに書いてあることがすべてなので、適当に要約したパワポを用意して無難に終わった。コンピュータ基礎Iでもパワポを扱うので、あまり下手なプレゼンはできないこともあって、アニメーションつけたりするのに結構時間を費やしてしまった。
4月から学環の主担当教員になったので入学式の舞台に登壇しないといけなくなった。ずっと以前は全教員が登壇していたのだが、いつからか忘れたが近年は学長、副学長、学部長、学科主任だけが登壇することになったので、ここ何年も入学式自体は他人事のような行事になっていた。学環は学部長相当の学環長以外は主担当教員と副担当教員で構成されているので、いわゆる学科主任(入学式で「○○学科1年次生、○○名全員起立」という役割がある)がおらず、式で「全員起立」という役をやらされることになった。緞帳が開く前の舞台はなにやら怪しげな衣装を身に着けた学長~学部長が座っていた。
学内でよく使う駐車場わきに粗大ごみ置き場があって、この時期は PC がよく廃棄されるのでゴミ漁りリサイクルできるものはないかと眺めてみると1台の PC が目に入った。埃まみれだが i5 のラベルが貼ってある。研究室の最古 PC は 32bit の Pentium4 なので、それに比べれば十分新しい。そこでとりあえず筐体を開けて(PC 分解用のドライバーはいつもカバンに入っている)みると、これまた随分使い込まれているのか埃がびっしりついている。マザーボードは MicroATX でなにやらショボそうなグラボが刺さっていた。さすがに CPU の世代は CPU クーラーを取り外すか、起動して BIOS でも見ないとわからない。ちょっと悩んだが、マザーボードと電源を取り外して持っていくことにした。
とりあえずエアダスターで一通り埃を飛ばしてから、パーツのストックを物色し、メモリ2枚 8GB と Windows10 がインストールされている 1TB の HDD 、筐体がないので起動用の電源スイッチなどをかき集めてマザーボードむき出しのまま適当につなげて電源を入れて BIOS を確認してみた。
とりあえずデバイスは全部認識されているようなので使えそう、メモリも Dual Channel で動いている。残念ながら CPU は思ったより古い第2世代の i5 だった。一通り BIOS のシステムチェックを行ってから、HDD から起動させると Windows がちゃんと起動した。デバイスマネージャーでも問題なさそう。
続いて BIOS のアップデートが出てないか調べるとあるようだ。現在の BIOS 画面は文字ベースの質素で古めかしいものだったが、最新のにすると GUI ベースの今どきっぽい画面に変わるようだった。んっ?ということは UEFI ベースですね。世代的にはそのはずだが、BIOS が文字ベースだったので旧 BIOS PC だと錯覚していたようだ。早速ダウンロードしてアップデートするとちゃっと GUI に変わっていた。つづく...
Windows11 がサポートしない古い PC にあえて Windows を入れる意味はない。Windows10 を起動させたのはあくまで動作確認と BIOS アップデート(アップデートソフトは大概 Windows 用しかない)のためだ。最初から狙うのは Linux サーバーの予備機だ。現在の予備機は去年まで現役メインサーバーだったとはいえ Core2Quad という i7 でも i5 でもない Core2 世代、拾ってきたのが i5 の第2世代なので、いうなれば i7 の第0世代といったところか?しかし、今回は MicroATX でなにやらコンパクトなのがいいし、定石の HDD 2台つっこんで RAID1 というのもなんなので、ストレージは USB メモリとかなんか不揮発メモリですっきりさせたくなった。幸い USB3 タイプA が付いているみたいだし。
残念ながら USB3 はチップセット外の別チップで起動ドライブとはならないようだった。USB2 起動ではメインストレージとしては残念過ぎるほど遅いので問題外なので、あとは SATA につないだ SSD しかない。64GB の SSD があるにはあるが、これまた Windows11 のライセンス維持のために古い PC にメインストレージとして使っている状態。仕方ない、面倒だけどこの SSD をあえて普通とは逆の HDD へ換装して持ってくることにした。しかし、64GB だと Linux 自体のインストールは問題ないが、Web サーバーやファイルサーバーとしてのデータストレージとしては容量が全然足りない。あっ、そういえば 256GB の NVMe があるな...
こうなれば完全ドミノ倒し状態。メインの Windows PC に載っていた 256GB の NVMe がそろそろ辛くなってきていたので、予算が使えるうちにと 1TB の NVMe と換装作業に使うための PCIe 接続の NVMe 増設カードを買ってあったのだ。勢いで 256GB から 1TB に換装して余った 256GB の NVMe を PCIe 2.0x1 接続(本来は PCIe 3.0x4 対応だがマザーボードが古いので無理)して、/var と /home にマウントすることにした。
こうして無事、SSD + NVMe ストレージの体感的に十分高速なサーバーが組みあがった。Linux(Debian) のインストールレポートは割愛する。
パーツむき出しで机の上に乱雑に置かれている状態で起動しているのを見ているのはなんだかうれしいのだが、このままというわけにはいかないので、MicroATX のとにかくコンパクトな筐体(ケース)をネットで探してみると安くてよさげなものを見つけた。しかし3月はもう予算も使えないし、中身は完全リサイクル PC でもあるので、ここは私費で買ってしまおう。ということでなかなか良いものができた。今どきのケースはガラス張りで中身が見える。マー〇ルチョコのところは、本来はアニメキャラやネギをもって歌う少女の画像を貼るのが正しい?ようだが、幸いにもそうゆう趣味はないので無難にポップな感じに仕立てておいた。あの裏側は無粋な電源部分のごちゃごちゃしたケーブルが押し込められている部分なので目隠しにガラスの内側からカラープリンタで印刷した写真を張り付けてある。最後の仕上げとして、ドミノ倒しで古参の Pentium4 PC を廃棄した。
![]() |
黄ばみを取るために研究室のベランダで漂白剤に浸けて日光にさらしておいたやつですが、冬の太陽の高度は低いのでなかなか日照時間が稼げないようだった。また、キーキャップもどうしてもひっくり返って沈んでしまうので日が当たりづらく、そろそろ妥協するころかと見計らって終わりにした。まぁ、前のと比べれば明らかに黄ばみはましになってるし、清潔であることは間違いない。
サーバーで使っている年季の入ったキーボード。フルキーボードでありながらコンパクトで打鍵感も気に入っているのだが、如何せん古くてすごく日焼けして見るからに古臭い。おまけにインターフェイスは PS/2 と、今どきの PC では見かけなくなった既に滅びたもの。コンパクトなフルキーボードで良さそうなのが見つからなくて、ずっと PS/2-USB の変換アダプタを使って無理やり使い続けていたのだが、今回なんか良さげなものを見つけたので思い切って買い換えることにした。
今回はあえて英字配列(US98)のものにした。なぜってかな入力なんかしないのにキートップにおもいっきり「あいうえお」が書いてあるのが邪魔すぎるから。日本語配列のキーボードでかなが刻印されていないやつってほとんどゲーミングキーボードしかなく、また大概ゲーミングキーボードでコンパクトなやつはテンキーレスだし、さらに研究費で「ゲーミング〜」ってちょっと買いにくいし...
さて、JP と US で一番異なるのが記号類の場所。よく使うので言えばアットマークとかコロンとかダブルクォートとかアンダーバーとか、なんか結構あるな... あとエンターキーが細長いのでちょっとなれるまでかかるかも...
古い方のキーボードをそのまま捨てるのは忍びないので、ばらして汚れを落としたあと、研究室の日当たりの良い窓際で漂白剤につけて紫外線に晒しておいた。2〜3週間もすると真っ白になるらしい。