toshi00.log

いろいろ試したい

ICTSC2021 夏の陣に参加しました!

f:id:toshi00p:20210929194154j:plain
8/28,29のICTSC2021 夏の陣にチームPizzaで参加しました。

最終的に2100点で6位です。3位と100点差で、もう1問解ければ……という感じでした。5位とは同点、4位とは50点差です。 復習を兼ねて自分の提出した問題について書きます。

チームメンバーが書いた参加記もあります → ICTSC夏の陣に参加してきました

1日目

触った問題を順番に書いていきます。解説や問題の詳細は ICTSC2021 | ICTSC Tech Blog が詳しいです。

14. Webサーバーが立ち上がらない (50点)

Webサーバが立ち上がらない | ICTSC Tech Blog
とりあえず一番簡単そうな問題を取りました。python3 app/index.py するとflaskがないよ!って怒られているという問題です。

色々と問題背景はあるようですが、とりあえずflaskをインストールすれば終わります。こんな簡単でいいのか?と不安になりながら提出しました。

$ pip install Flask

3. なんでだ!?(150点)

なんでだ!? | ICTSC Tech Blog
冗長化したらHostAからHostBにpingが通らなくなった!という問題です。

HostA → RTA → HostB という通信経路がだめなようです。冗長化した!という設定を無視して、通信可能な経路に対してstaticルーティングを設定しました。50点しかきませんでした(それはそう)。とりあえず放置して次の問題に行きます。

トラブルがあったようで、2日目の朝にこの問題はなくなりました。セーフ。

13. サーバー気象予報(150点)

サーバ気象予報 | ICTSC Tech Blog
APIサーバー周りが微妙で、アプリケーションがうまく動かないという問題です。

サーバーの3000番でexpressサーバーが動いているはずですが、確認したら何もありません。

$ npm start

をすると、レスポンスが帰ってくるようになるのでexpressサーバーに問題がないことは確認できました。あとは自動的に起動するよう設定します。

方法はいくつかあると思いますが、今回はサービスファイルを書いて自動起動を有効化することにしました。サービスファイルを初めて書いたので、不十分or危ない部分があるかもしれません。こんな感じでapi_server.serviceを書きました。

[Unit]
Description=server.js - weather api
After=network.target

[Service]
Type=simple
User=user
ExecStart=/usr/bin/node /srv/api/server.js
Restart=on-failure

[Install]
WantedBy=multi-user.target
$ sudo systemctl enable api_server

また、CORSの設定にも問題があるようです。Nginxの設定を変更して対応します。

$ sudo vi /etc/nginx/nginx.conf

最終的に以下のようになりました。

~~~
server {
          listen 80;
          server_name api.test;

          location / {
            proxy_pass http://192.168.4.102:3000;

            add_header Access-Control-Allow-Origin '*';
            add_header Access-Control-Allow-Methods 'GET, POST';
            add_header Access-Control-Allow-Headers 'Content-Type';
          }
        }
~~~

サービスファイルを書いたことがなくて、少し詰まったものの問題特定から解決まで比較的サクサクと進めることができました。
また、本題から外れるのですが、expressサーバーに少し気になる挙動があります。

expressサーバーが、気温・湿度データのPOSTリクエストに対してレスポンスを返さない実装となっています。そのため、POSTリクエストを送信するとクライアント側でタイムアウトが発生します。動作に問題はありません。しかし、コンソール上にエラーが表示されるため、さっと修正を入れました。

7. 対向につながらにな。。(150点)

対向につながらにな。。 | ICTSC Tech Blog

ルーターの情報を確認していった結果、経路情報の配布されていない部分がありました。じゃあ配布すればええやろ!って配布します。

set protocols ospf redistribute bgp

動きました。

解説を読むと、OSPFの設定を入れることで解決することが多いようです。なるほどなぁ。
vyOSの知識があまりなく、経路情報再配布の方法を調べるのにかなり時間をかけてしまいました。インターネットって難しい。

2日目

解ける問題が残っていなくてあまり手の動かない1日でした。

2. 頑固なindex.html( 0 /150点)

頑固なindex.html | ICTSC Tech Blog

調べましたが、原因がわからずチームメンバーに引き継ぎました。Welcome to ICTSCという文章の載ったファイルを探してみようと思いつつ、Helloで検索するという謎ミスをしました。惜しい?解いてくれたチームメンバーに感謝。

6. iscsi targetにログインできない!(200点)

iscsi targetにログインできない! | ICTSC Tech Blog

iscsi-targetに設定されたaclの名前がiscsi-initiatorに設定された名前と異なっていたことが原因のようです。
ターゲットサーバーにて設定を確認すると、iqn.2021-07.192.168.18.11:initiatorがありました。一方でイニシエーターサーバーのInitiatorNameはiqn.2021-07.192.168.18.1:initiatorでした。よく見ると11と1で名前が異なっています。

公式の解説とは逆なのですが、イニシエーターサーバーのInitiatorNameを変更することで対応しました。具体的には、/etc/iscsi/initiatorname.iscsiを編集し、11のほうで統一します。

正直、iscsiを全く知らなかったので厳しかったです。調べていたら偶然解けました。

全体を通して

全体として知識が足りず、200点問題以上が厳しいという感覚でした。 チームメンバーのおかげで、あとちょっとで表彰台というところまで戦えて楽しかったです。お疲れさまでした!