KMC活動ブログ

京大マイコンクラブの活動の様子を紹介します!!

C105で京大マイコンクラブのインフラ本を出します

こんにちは。KMC45代のsegreです。 これはKMC Advent Calender 2024 の21日目の記事です。

私が所属している「京大マイコンクラブ(KMC)」はコミックマーケット105にサークル参加します。 コミケでは毎回部誌として部員が書いた技術系コラム集を頒布していますが、今回はそれに加えてKMCのインフラについてまとめた本を頒布します。52P/B5/500円を予定しています。

新刊表紙

KMCについて

KMCとは京都大学を中心に活動しているコンピュータサークルです。1977 年に設立され、今年で48年目を迎えました。コンピュータを使ったゲーム制作、音楽制作、イラスト制作、Web サービス開発、電子工作をはじめとする創作活動や、競技プログラミング、情報分野の勉強会など様々な活動を行っていますが、インフラ関連の活動も活発で長い歴史をもっています。KMCでは2017年にAS59128の割り当てを受け運用を開始しましたが、それ以前の30年以上前からPIアドレスの割り当てを受けていました。京都の部室にはサーバーラックをはじめとして様々な機器が転がっています。

部室の様子

新刊「京大マイコンクラブのインフラ~AS59128 完全解剖~」

この度「京大マイコンクラブ」では新刊「京大マイコンクラブのインフラ~AS59128 完全解剖~」を頒布します。 内容は自分を含めた6人の有志によって書かれており、歴史、バックボーン、部室ネットワーク、仮想化基盤、サーバー、DNSに分けられています。 Circle.ms https://webcatalog-free.circle.ms/Circle/20011063 で冒頭数ページのサンプルも公開されているのでぜひご覧ください。

歴史では前節でも述べたようなPIアドレス割り当てに関することや、30年以上前のKMC部員がこのアドレスを使ってどのように遊んでいたのかを辿っています。

バックボーンではAS59128の構成や運用方法について述べられており、Linuxマシンをルーターとして使うノウハウが紹介されています。

部室ネットワークでは部室内で構築されているネットワークについて紹介します。 以下は部室の物理構成となっています。本ではモノクロになってしまっているのでカラー版をここに載せておきます。 この図は部員のcrashRTが作成したものです。

部室ネットワーク

仮想化基盤では5台のマシンで構築しているProxmoxクラスタについてその構成と行っている自動化について紹介しています。また、libvirtから移行したのでそのノウハウや手こずった点なども紹介しています。

サーバーでは構成管理ツールとして使用しているitamaeの紹介や仮想化基盤上で構築しているKubernetesクラスタについて紹介しています。

最後の章ではDNSについてその基本からKMCでの運用方法について紹介しています。

また、付録として初学者向けの解説集を掲載しています。本編でわからないことがあったらぜひご参照ください。

以上が本の内容となります。全52ページでKMCのインフラについてほぼすべてを網羅した内容になっています。主な対象者は自宅サーバーや個人ASを運用されている方、インフラに興味を持っている方です。当日は是非お立ち寄りください。

サークル座標

2日目 西2こ08aです!!

サークル「京大マイコンクラブ」で出展しています。

Circle.msも公開しているのでぜひご覧ください。

https://webcatalog-free.circle.ms/Circle/20011063

お品書きは後日掲載予定です。

申し訳ございませんが筆者(segre)はKMCのブースにはおらず、別の部員が頒布を行ってくれています。私は「Home NOC インフラ部」 2日目 西2い33aで頒布を行っています。記事について気になることなどがある場合はそちらにお立ち寄りください。「Home NOC インフラ部」でも新刊の頒布がございますので、そちらもよろしくお願いします。

TypstでC105に出す部誌を組みました

こんにちは。KMC 46thのmarimoです。 これはKMC Advent Calendar 2024 1日目の記事です。

KMCはコミケに合わせて部誌を年に二回刷っています。 C103まではLaTeXを使っていました1が、 年末のC105で頒布する予定の部誌をTypstで組んだので、その話をします2。

Typstを紹介する記事はすでに多くあるので、Typst自体やその基本的な機能の紹介はそちらに譲ることとして、 実際に印刷物を作る上で必要だったことを書くことにします。

この記事はTypst v0.12.0を前提としています。

ファイルの分割

長い文書は複数のファイルに分割したくなります。 そのための機能としてincludeとimportがあります。 機能としては書いてある通りでincludeはファイルを文書として読み込み、 importはファイルをプログラムとして(moduleとして)読み込みます。

#include "foo.typ"

だとfoo.typを評価した結果(Contents型の値)が入ります。 つまり、LaTeXのincludeなどのようにテキストがそのまま展開されるのではないので、中で書いた設定が外に漏れたりはしません(うれしい)。

目次、queryの活用

Typst標準でoutlineという関数がありますが、凝ったことをするには機能が足りません。 部誌は寄稿誌の形態をとっているので、目次には題だけでなく著者も載せたいです。 今回はheadingの後にmetadataをおいて、queryで情報をとってくるという戦略でやります。

= chapter1
#metadata([alice]) <author>
= chapter2
#metadata([bob]) <author>

このような文書があったときに

#let toc() = {
  let elements = query(heading.where(level: 1, outlined: true))
  for el in elements {
    let metadatas = query(selector(<author>).after(el.location()))
    let author = metadatas.first().value
  }
  <ç•¥>
}

などとしてchapter(level-1のheading)のリストと、そのauthorを得ることができます。 実際にはコーナーケースに対応する必要があります。

TypstはLaTeXなどと同様、文書を単なる要素列として取り扱います。 したがって要素に付随する情報を得るためには列の位置に依存して頑張る必要があります。 LaTeXはauxに書き出して収束するまで繰り返しコンパイルする必要がありましたが、 Typstは外部ファイルを使わずにqueryでとってこれたり、勝手に収束するまでコンパイルしてくれたり、そもそもコンパイルが速いといったうれしさがあります。

凝ったページデザイン

縁付けたりとか背景付けたりしたいときがあります。page関数のbackground,foregroundを使いましょう。

#set page(background: image("hogehoge.jpg"))

フォント

これはそこそこ知られていますが、v0.12.0現在、和文と欧文のフォントを別に設定するのに困難があります。 正規表現をつかうと禁則処理が壊れるなどの問題があります。

#show regex("[\p{scx:Han}\p{scx:Hira}\p{scx:Kana}]"): set text(font: "Hoge Font")

フォントのフォールバックを使ったほうがいいです。

#set text(font: ("Latin Font","Japanese Font"))

段組みの注意

Typstはpage(column: 2)とすれば2段組ができます。 あとは、v0.12.0になって段抜きの浮動図を置くことができるようになりました。 しかしv0.12.0現在、最後のページでバランスすることはできません(#466)。

さいごに

京大マイコンクラブ(KMC)は、C105の2日目(月曜日)西-08aで参加します。 年2回発行の部誌に加えて、今回はKMCが管理するAS59128の本も出す予定です。 コミケに参加する方はぜひお願いします。

さいごに参考にしたドキュメントを紹介します。 Typst公式のドキュメントは今どきらしく綺麗にまとまっています。 また、技術書展17で頒布されたTypstで技術同人誌を書こう!すぐに役立つ20のトピックも大いに参考になりました3。 テンプレートの例としては公式のtemplatesを見ると良いです。 Typstは開発が活発でその辺のコードは使い物にならないことがあるので(この記事含め)、基本的には公式のものを見ることになります。

Footnotes

1 https://github.com/kmc-jp/bushi-template2

2 ちなみにC104でも私が組版を担当して、そのときはSATySFiを使いました。

3 たまたまハンドルネームが一致していますが別人です。

「Happy Elements式 ゲーム開発の基礎語ります」を開催しました!

こんにちは!KMC 45thの進捗ゼミです。

2024年6月14日に、Happy Elementsさんをお招きし、「Happy Elements式 ゲーム開発の基礎語ります」という新歓イベントを開催しました!

ゲーム開発現場で活躍しているゲームデザイナーの方に、ゲームを面白くするためのコツや、時間の無い中でゲームを完成させるための工夫、 社内でのゲーム開発事例についてご講演をいただきました。

当日の様子

15人もの新入生が参加してくれました

少人数チームでのゲーム開発のコツについて学びました

手作り感がいい感じの会場の飾りつけ

Happy Elements社内で短期間でゲームを完成させるSuper Liteプロジェクトの事例についてお話いたしました。

解説していただいたゲーム事例。Super LiteのWebページから遊べます!

実際にゲームを遊びながら学びました

KMCとゲーム開発

KMCでは、毎年新入生がチームを作ってゲームを開発する「みんなでゲームを作る」という新歓プロジェクトを開催しています。 初心者がぶっつけ本番で挑むプロジェクトなので、すんなりいくチームもあれば、苦戦するチームもいます。

2023年NFに展示されたゲーム

スムーズなゲーム開発をサポートするため、ゲームの規模感と開発のスケジュールについて現場のリアルを学んでもらいたいという思いから、今回のイベントを企画しました。

今回のイベントに参加した新入生が刺激を受け、楽しみながら面白いゲーム開発をしてくれたらうれしいです!

ご参加ありがとうございました!

Happy Elementsの皆様、参加者の皆様、本当にありがとうございました!

新歓BBQを開催しました!

こんにちは!id:crashrt です。

6/1(土) に今年の新入生を呼んで新歓BBQを開催しました! 今年入部してくれた新入生が18人も参加してくれて賑わっていました

BBQの様子

新入生の一人が「一致するまで終われまテン」というミニゲームを遊べるサイトを教えてくれたのでみんなで遊びました。 珍回答続出で大盛り上がりでした。教えてくれた方ありがとうございます〜

時間に少し余裕があったので、自然の中を散歩してきた人たちもいたみたいです。

最後に

参加してくれた新入生の皆様、ありがとうございました! これからもよろしくお願いします!よきKMCライフを!

そして、新入生の参加費無料はOBの方々のカンパのおかげで成り立っています。 カンパしてくださったOBの皆様、本当にありがとうございました!

「Go言語ワークショップ with Money Forward」を開催しました!

こんにちは!KMC 46th の id:walnuts1018 です。

2024 年 4 月 25 日に、Money Forward の皆さんをお招きし、「Go 言語ワークショップ with Money Forward」という新歓イベントを開催しました!

初心者向けには、Go 言語の基本的な文法を学んで HTTP Client / Server を実装するという内容、上級者向けには、「ゲームエンジン Ebitengine を使ってアートを描いてみよう」という内容で、それぞれハンズオンを行っていただきました。

詳細な内容やコードについては、以下のリポジトリにて公開していますので、ぜひ体験してみてください! github.com

当日の様子

KMC のお仕事

ワークショップの内容についてはすべて Money Forward さんにお願いしましたが、KMC ではオンライン開発環境の提供を行いました。

KMC 内のオンプレサーバーにて、VSCode のブラウザ版 (coder/code-server)をセルフホストし、参加者の方々に使っていただきました。

裏側では結構てんやわんやでした...

VM のメモリ割り当てをドタバタで増やしている様子

Pod のメトリクス

また、質問対応やサポートを他の部員にお願いしました。 スタッフとして参加していだたいた部員の皆さん、ありがとうございました!

ご参加ありがとうございました!

Money Forward の皆様、参加者の皆様、本当にありがとうございました!

部内の主要サーバでProxmoxクラスタを組んだ話

はじめに

こんにちは、KMC4回生のsegreです。最近は部内のサービスを破壊することにハマっています。今回は部内の主要サーバの破壊と創造を行ったので事の顛末を紹介します。

マシンの紹介

KMCには主に4台のデスクトップPC内でLinuxサーバを動かしています。4台をさくっと紹介します。 デスクトップPCはすべてサーバーラックに収められています。

rack

shourin

最下段の左にあるのがshourinというマシンです。2022年に導入されたミドルレンジPCです。主に実験用/初心者用という位置づけになっています。

nozomi

最下段の右にあるのがnozomiです。2021年に導入された、当時最高のCPUとグラボを盛り込んだPCです。メモリは100Gあります。主に機械学習やメモリを使うゲーム用のサーバーになっています。

tamanegi

shourinとtachyoの上にある中央が青く光った箱がtamanegiです。元はデスクトップPC用のケースに入っていましたが、ラッキングしたかったのでラックマウントに対応したケースに詰め替えました。2019年から稼働しているこの中で最も古いPCです。メールサーバーやLDAPサーバー等重要なサーバーが収められています。

sakashita

tamanegiの上にある1Uのラックサーバーがsakashitaです。こちらはOBの方に譲っていただいたものです。HDDベイが大量にあるため、ストレージサーバーとなっています。メモリも潤沢であるため複数のゲームサーバーが動いています。

Proxmoxクラスタを組んだ

今まで各マシンではKVMでVMを管理していました。しかし、サーバー間のマイグレーションのやりにくさ、管理の難しさからGUIで管理できるようにしたいという声が上がり、この度Proxmoxクラスタを組むことになりました。

初期状態ではtamanegiとtachyonに多数のVMが存在し、shourinとsakashitaにはVMが存在しませんでした。

移行手順

2台でProxmoxクラスタを組む

まずはVMが何も入っていないshourinとsakashitaにProxmoxをインストールして2台でProxmoxクラスタを組みました。

VMをProxmoxクラスタに移す

続いて、tamanegiとtachyonのVMをshourinとsakashitaにマイグレーションしました。ここではライブマイグレーションすることができないので、VMを一時停止しdiskをコピーして移しました。移す際にVMの停止を忘れていたり、Proxmoxに移したことでNIC名が変わったりしたためややトラブルがありましたが、なんとか移し切りました。 ただ、tamanegi上で動いていたファイルサーバーだけはtamanegiに存在するディスクを用いていたためマイグレーションできませんでした。そのため、ファイルサーバーはtamanegiのOSを入れ替えた後に新たに構築することにしました。

OSをProxmoxに入れ替える

tamanegiとtachyonのVMはファイルサーバーを除きProxmoxに移ったので、OSをProxmoxに入れ替えます。

4台でProxmoxクラスタを組む

tamanegiとtachyonを既存のProxmoxクラスタに参加させます。これで4台でクラスタが組めました。

VMをLive Migrationする

先ほどshourinとsakashitaに移したVMをtamanegiとtachyonに戻したら作業完了です。proxmoxクラスタを組んだので1ボタンで簡単にLive Migrationできました。 結果として、以下の写真の通り4台でクラスタリングを行い、現在22個のVMが稼働しています。

pve

移行中のトラブル

ここでは移行中に起こったトラブルを紹介します。

VMのデータ不整合

まずは先程も述べたVMの停止忘れによるデータの不整合です。本来は停めてからdiskをコピーする必要がありましたが、停止を忘れていたため、Migration時にデータの不整合が生じ、サーバーが機能しなくなることがありました。

ディスク破損

冒頭にtamanegiのケースをラックマウント対応ケースに入れ替えたと申しまたが、このときにディスクのピンを曲げてしまいました......さらば4TB SSD。

ちなみに、これとは別にSSDがかなり低速になる問題があり、そのSSDを交換したばかりの出来事だったため、RAIDを組み直すのにかなり苦労しました。

SSD

移行後

無事、稼働しているVMが一覧で簡単に見られるようになりました。 一方で、問題というほどでもないのですが、VM作成のコストが高いという声もありました。

KMCでは構成管理ツールにitamaeを用いています。itamaeはVMを作る際に簡単にSSHやLDAPの登録ができるため非常に便利なのですが、VMを作るたびにマシンの定義をする必要があり、VMを頻繁に作成・削除するような場合には適しているとは言えません。

実現したこと

VMを簡単に作成できるようにするために、VMを作成したと同時にIPアドレスを自動で割り当てて固定し、VMのAレコードをDNSサーバーに登録して名前解決可能にする仕組みを作成しました。 これらはProxmoxでSDNの機能として提供されており、ほぼGUI上で作成することができました。Proxmox恐るべし......

IPアドレス固定

IP割り当てには、ProxmoxのIPAMを用いてIP管理を行いました。また、DHCPサーバーから受け取ったIPを用いてIPを自動で固定するようにcloud-initの設定を行いました。IPAM+cloud-initを用いることでVMを作成すると同時にDHCPサーバーから受け取った重複のないIPアドレスで固定されたマシンを作成することができます。 IPAMとcloud-init共にProxmoxのSDN機能として提供されていたため、簡単に構築することができました。詳しくは私が投稿した Proxmox VEでIPAM+cloud-initを用いてIP管理 をご覧ください。

DNS登録

Aレコードの登録にはPowerDNSで権威サーバーを立て、PowerDNSのREST APIをProxmoxから呼び出すことで実現しました。API呼び出しはProxmoxのSDN機能を利用しました。DNSサーバー自体は自分で構築する必要がありますが、この仕組みもSDNを用いれば簡単に実現できました。こちらも詳しくは私が投稿した Proxmox VEでVM作成時にDNSに自動登録 をご覧ください。

おわりに

今回は部内マシンのOSをすべて入れ替えて、Proxmoxクラスタを組みました!かなり大規模な改修であり、かつ主要なサーバーのダウンタイムをできる限り短くするため長時間ぶっ通しで作業したのでかなり大変でした。ProxmoxのSDN機能もまだまだ知らない機能があるのでもっとうまく活用していきたいです。ご覧いただきありがとうございました!

ICTトラブルシューティングコンテスト2023 に参加してきました

こんにちは!id:crashrt です。

KMCからインフラに興味のある4名がICTトラブルシューティングコンテスト2023(ICTSC2023)に参加しました! 結果は予選は231pt で8位、本戦は 1930pt で5位でした!

icttoracon.net

自分のブログで参加した感想を書いてみたのでよかったらこちらもご覧ください。

crashrt.hatenablog.com