見出し画像

ICTSC2021 夏の陣に参加した

8/28~8/29で開催された,ICTSC2021 夏の陣にお茶大生5人組(ピカチュウ先輩まいまいもも先輩とり先輩)でチーム名 Status Code 418s で参加しました.チーム名の読み方は「We are teapots.」です.

最終的に順位が確認できた時点での結果としては 9位で1700点!初めてICTSCに出た&私を含めほとんどの人が普段インフラを触ってないわりには,かなり解けている方な気がします.みんなで協力し合った成果!って感じでとても良かった👏(去年までの予選→本選形式なら本選にいけてるかも?!)

〜追記(8/31)〜
結果が出てました!上位1/3に入ってた🎉

スクリーンショット 2021-08-31 12.48.49


本番での流れ

1日目
9:25 Discord(自分たちのServer)のボイスチャンネルに集まった.
9:30~10:00 VNCのセットアップと踏み台サーバへのアクセスをチームメンバーみんなでした.
10:00~10:30 問題が公開されたのでみんなで問題を見ながら問題を割り振った.あらかじめ大雑把な担当分野は決めていた.
10:30~16:30 各自問題を解いた.わからないところは協力し合って解いた.問題について調べたことや問題の回答はHackmdにまとめた.
2日目
9:45~10:00 ぼちぼちボイスチャンネルに集まった.
10:30~16:30 各自問題を解いた.
17:30~18:15 閉会式見ながらみんなでワイワイ.

本番で私が触れた問題の感想

私は,DB系とプログラム系の問題を担当する予定でしたが,ほとんどなかったのでWeb系の問題を解きました.解いた順番に紹介します.
※想定解じゃないものも含まれる可能性があります⚠️

〜1日目に解いた問題〜

止まらない 50pt
go言語で書いたプログラムを実行したら,Ctrl+Cで終了させることができなくて困っている.という問題だった.
GoでCLIアプリ書いたことあるけどgin使ったことなくて?ってなってシグナルキャッチできるようなプログラムを書きながら,?という時間を過ごし続け1時間くらい溶かした.最終的に,とり先輩に相談して一緒に考えてもらってMakefileが悪いのかもしれないという話になり「とりあえずdockerコマンドを-itつけて実行してみるのどう?」と言われて恐る恐る実行して上手くいった.上手くいった後に考えてみると,それはそうだわってなって解答を書いた.先輩に感謝🙏
Ctrl+Cで終了できない理由としては,

コンテナのプロセスに対してttyを割り当てておらず,またコンテナの標準入力にアタッチしていなかったため,Dockerプロセスに対してターミナルからの標準入力が行えていなかったから.

とかいたら満点が来た.

↑を提出した時点で1日目の12:00くらいだった.

頑固なindex.html 150pt
OSを再起動すると再起動前に編集したindex.htmlが元の状態("Welcome to ICTSC"とだけ書かれた状態)に戻ってしまうのでそれを治して欲しいという問題だった.
まずは,上手く保存されてないのかな?とかlinux起動時に自動的に実行するコマンドが原因なのかなと思って色々ググったんだけどよくわからなかったので,とりあえず `mv index.html _index.html` をして再起動してみた.すると_index.htmlの内容はそのままでindex.htmlが出来上がった.なのでもしやどっかに "Welcome to ICTSC"という文字列が入ったスクリプトが置いてあるんじゃないかって思って(↑根拠になってない気がする)とりあえず /etc/ 以下で grep -rl 'Welcome to ICTSC' とすると,/etc/tmpfiles.d/ictsc.conf の中に'Welcome to ICTSC'と書かれたファイルがいることがわかった.
そこで tmpfiles.d について調べると,何とこれはOS起動時にファイルを作成するためのスクリプトを置く場所だった(参考)ので  /etc/tmpfiles.d/ictsc.conf の中身を空にしたら治った.
満点もらった.

↑を提出した時点で1日目の13:30くらいだった.

Webサーバが立ち上がらない 50pt
まいまいが担当してくれていたのだけれど,他の150点ぱっと見わからんってなったので手伝うことにした.なぜわかったのか忘れたけど,まいまいが今までしたことを聞いた上でパスまわりで何か起こっているのではという話だったので,適当に`pip3 install Flask --user`打ったら治った.ので解答を書くのをまいまいに任せた.

何もしてないのに壊れた!150pt
何でかわからなさすぎて,「何かが時と共に使えなくなったんだろうと思われる」という問題文そのままな感想を言って諦めた.2日目のまいまいに任せることになりまいまいが解いてくれた👏 

〜2日目に解いた問題〜

ンジンエックス 150pt
1. curl --http2 localhost してもリソースが取得できない
2.`sudo /usr/local/nginx/sbin/nginx`でエラーが出ている
のでこれらの問題を解決してという問題だった.あとは`nginx-1.21.1`がすでにダウンロードしてあったのでこれを使えということだった.
最初,`sudo /usr/local/nginx/sbin/nginx`をしてみると http2のモジュールが足りていないというようなエラーが出たので,http2のモジュールを追加する方法をググったら,nginx-1.21.1内で./configure --with-http_v2_module をすればいいということがわかったので,このコマンドを実行したのちに installすべく 'make'と'make install'をした.これでもう一度`sudo /usr/local/nginx/sbin/nginx`をするとエラーは出なくなってオッシャって思って curl --http2 localhost と打ったら`Failed to connect to localhost port 80`と言われたので/usr/local/nginx/conf/nginx.confに以下を追記した.

http {
   # 省略
   server {
       listen       80; # この行を追加
       # 省略
   }
   # 省略
}な

治った.満点が来た.(なんかすんなり解決したように書いているが,そんなにすんなり解決していない笑)(最初は --with-openssl=/usr/local/src/openssl-1.1.1fもつけて./configureを実行していたので修正した提出をした🙀)

iscsi targetにログインできない! 200pt
TargetのサーバとInitiatorのサーバが用意されていた.
1. initiatorのサーバで`sudo iscsiadm -m node --login`を実行してログインができない
2.`iscsi-initiator`で`lsblk`を実行すると`sda`が存在しない
のでログインできるようにし,lsblk`を実行すると`sda`が存在するようにして欲しいという問題だった.
最初,iscsiがICTSCと似てたのでiscsiadmがタイポしただけでICTSCオリジナルのプログラムなのかと思った.違った.なんかiscsi(アイスカジー)(絶対に読めへんやろ)っていう技術があった.https://wa3.i-3-i.info/word12371.html 読んで概要は理解した.
`sudo iscsiadm -m node --login`を実行すると,Targetはちゃんと正しい方向を向きながら,
login rejected: initiator failed authorization with target
ってエラーが出てたので,とりあえず認証を無効化した(ダメすぎる).当時のメモは以下の通り.

認証の無効化
1. ターゲットの方のサーバで作業している.
2. sudo targetcli
3. cd ../../
4. set attribute authentication=0
5. exit

何も解決しなかった.
ログインする時のPasswordとか存在したら,そこら辺違うとか?と思って設定で相違があるか確認した.
Target側

$ sudo targetcli
initiator> info
chap_password: ictsc2021
chap_userid: user
wwns:
iqn.2021-07.192.168.18.11:initiator

Initiator側

# /etc/iscsi/iscsid.conf
# authentication by the target(s), uncomment the following lines:
node.session.auth.username = user
node.session.auth.password = ictsc2021

ちゃんと設定されてた😢
と思ったんだけど,その後Initiator側で`/etc/iscsi/initiatorname.iscsi`を見たら!なんかTarget側のwwnsの設定の内容と違うことを発見した(天才w)!

# /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2021-07.192.168.18.1:initiator

となっていたので以下に修正した.

# /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2021-07.192.168.18.11:initiator

問題が解決した.満点だった💯

↑この時点でまいまいと私でWeb系の問題(not ネットワーク or not k8s )の問題を全部解き終わった🎉🎉(15:00くらい?)

このあとは,「 対向につながらにな。。」,「テレワーク推進部」とかのネットワーク系で解決できてない問題を眺めて他のだけど解決できなかった.次はネットワークも勉強して挑みたい😭(テレワーク推進部については,PrivateKeyなしで設定する方法がわからない😭とか言ってた..)

そもそもの参加した動機

動機1:運営をしている人たちがFFにいて去年の大会でICTSC(トラコン)自体を認知していた.が去年はICPCと時期が重なっていたので人が集まらなかった(ochachaの2人に振られたw).
動機2:今年が学生最後の年なので参加しないと悔い残りそうだなって思った.

本番までの話

私が言い出しっぺ(リーダー)だったため,チームメンバーを集める必要があった.とりあえずいつも仲良くしているochachaメンバー(とり先輩とまいまい)を誘うとOKしてくれたので比較的すぐに3人になれた.次に,とり先輩と私の知り合いであるピカチュウ先輩に声をかけてOKをもらい,そのあとに研究室で興味ある人がいないか聞いた時にリアクションつけてくれた,もも先輩に「参加しませんか?」とDMしに行き無事OKを貰い5人になった.

初めて出るコンテストで雰囲気とか問題のことが何も分からなかったため,チームメンバーで毎週勉強会をした.Docker勉強会 + 過去問を解く(毎週みんな1問ずつ解いてきて調べたことを共有し合う)をしていた.
勉強会についてはかなり長くなるのと,勉強会時のメモがすごい量あるのでそれらが公開できる状態になり次第また新しくブログを書こうと思います.

スクリーンショット 2021-08-29 21.46.32

感想(まとめ)

とにかく,楽しかったです!!!!
運営の方々こんなに楽しいコンテストを開いてくれてありがとうございます!!去年消滅しかけたとか色々あったみたいですが今年も開催されて良かったです.
あと,一緒にわいわい問題を解いてくれたチームメンバーにはとても感謝してます.協力して順位を上げていっている感が得られて気持ち良かった.
冬の陣もあるかもしれないとのことなので,楽しみです!お疲れ様でした🍵

チームメンバーのwriteup
とり先輩(https://torichan.hatenadiary.jp/entry/2021/08/29/231616

この記事が気に入ったらサポートをしてみませんか?