/

ICTSC2021 冬の陣にご参加いただいた学生の皆様、お疲れ様でした。

今回のICTSC2021 冬の陣は前回のICTSC2021の運営、それに加えて機材の提供や作問などでご助力いただいたスポンサー様方のおかげでなんとか開催し無事終了することができました 。参加していただいた方々につきましては、ここで培った知識・技術を今後に活かしていただければと思います。

今回出題した問題の問題文、及び問題解説を公開します。
ぜひ今後の研鑽にご利用いただければと思います。

Network

DHCP

Linux

Application

Kubernetes

Database

 /

ICTSC2021 夏の陣にご参加いただいた学生の皆様、お疲れ様でした。

今回のICTSC2021 夏の陣は前回のICTSC2020の運営と新しいメンバー、それに加えて機材の提供や作問などでご助力いただいたスポンサー様方のおかげでなんとか開催し無事終了することができました 。参加していただいた方々につきましては、ここで培った知識・技術を今後に活かしていただければと思います。

今回出題した問題の問題文、及び問題解説を公開します。
ぜひ今後の研鑽にご利用いただければと思います。

Container

止まらない

dockerをインストールしただけなのに…

k8s

クラウドネイティブは難しい…

Webサイトにアクセスできない

Linux

頑固なindex.html

キャッシュサーバ立てたけど…

Program

Webサーバが立ち上がらない

ンジンエックス

iscsi

iscsi targetにログインできない!

Routing

対向につながらにな。。

パケットが通らない!

なんでだ!?

Security

L or R?

DHCPv6

インターネット契約って大変だ!

アドレスが配布できない・・・

SSH

SSH繋がらなくなった

VPN

テレワーク推進部

Web

サーバ気象予報

何もしてないのに壊れた!

 /

ICTSC2020 本選にご参加いただいた学生の皆様、お疲れ様でした。

今回のICTSC2020を以ってICTSCは活動休止となり、学生の皆様は非常に驚かれたと思います。我々運営としても、こういった活動の場が無くなってしまうのは非常に寂しいですが、ここで培った知識・技術を今後に活かしていただければと思います。

今回出題した問題の問題文、及び問題解説を公開します。
ぜひ今後の研鑽にご利用いただければと思います。

Container

なぜか動きません!

docker-mailman

いつの間にか復活している君

コンテナに繋がらない

DNS

名前解決ができなくなった?

Webサーバーに繋がらない!

DNSサーバを作りたかったらしい

FTP

FTPなんもわからん

FTPが壊れちゃった!

k8s

Nginxが展開できない

証明書の取得ができない!!

Linux

このOpenstackなんか変だよぉ…

続・このOpenstackなんか変だよぉ…

まだだ、まだ終わらんよ

部署を統合したが…

LoadBalancer

リバースプロキシが動かない

Program

何かがおかしい。。。。

ボク わるいフレームワークじゃないよ

Routing

インターネット壊れた

あれ、おかしい。。。。

Tunnel

とんとんとんねる

GREが繋がらない!

Web

Server Sent Eventsが動作しない‼

 /
カテゴリー

はじめに  

作問者のabeです. 実はこの問題は史実に基づいて作られた問題です.

回答を見ていると私と同じ罠に引っかかったチームが居て嬉しかったです(?).

問題文  

部長さんへ

新米エンジニアの捕鯨太郎です。 プロジェクトでWEBサーバを構築するとのことなので、 docker-composeを使用してWEBサーバを構築しました。 無事に起動し、WEBページも確認できたのですが、 再起動するとアクセスできなくなってしまいました。

自動的に再起動するように記述してあるので不可解です。 しかも、トラブルシュートしているといつの間にか アクセスできるようになります。自分には原因がわかりません。

お知恵を拝借したいのですが、 お時間をいただけないでしょうか。

前提条件  

  • ~/web-server/docker-compose.ymlがあり編集可能
  • docker ps -aなどで確認するとコンテナが起動している

初期状態  

踏み台から $ curl 192.168.17.1 をしても応答がない

終了状態  

再起動しても踏み台から $ curl -I 192.168.17.1 をするとステータスコード200のレスポンスが返ってくる

答え  

まずは初期状態を確認しましょう.

~ curl 192.168.17.1
curl: (7) Failed to connect to 192.168.17.1 port 80: Connection refused

WEBページにアクセスできないのが確認できます. 次にコンテナの様子をみてみましょう.

[email protected]:~$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                NAMES
4e7db3e7cc97        nginx:latest        "/docker-entrypoint.…"   3 minutes ago       Up Less than a second   0.0.0.0:80->80/tcp   web-server_nginx_1

あれあれ,起動しているな…

もう一度確認すると… いつの間にか復活してる!!!

~ curl 192.168.17.1 -I
HTTP/1.1 200 OK
Server: nginx/1.19.6
Date: Sun, 07 Mar 2021 03:33:11 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 15 Dec 2020 13:59:38 GMT
Connection: keep-alive
ETag: "5fd8c14a-264"
Accept-Ranges: bytes

確認作業を行っているうちに復活してしまいました.

実はdockerコマンドを叩くとデーモンが起動するという罠があります.先ほどのdocker ps -aを見てみるとUp Less than a secondとあり,起動したてなのがわかります.

以下のコマンドで確認するとデーモンは起動していますが,enableになっていない事がわかります.

[email protected]:~$ systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; disabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-03-07 12:32:53 JST; 9min ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 2176 (dockerd)
      Tasks: 17
     Memory: 114.7M
     CGroup: /system.slice/docker.service
             ├─2176 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
             └─2362 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.18.0.2 -container-port 80
             

[email protected]:~$ systemctl is-enabled docker
disabled

そう,enableのし忘れですね.以下のコマンドで解決です.

systemctl enable docker

採点基準  

dockerサービスをenableできたか.

おわりに  

前提条件に書いた2点,docker-compose.ymlが編集可能である,docker ps -aすると起動している, に引っかかってくれたチームがいて嬉しかったです.

冷静に確認されると一瞬で解決してしまう問題なので簡単枠で出題しました.

 /
カテゴリー

はじめに  

作問者のabeです. この問題は昔バックアップパーティションに救われた経験から作りました.

概要  

ベテランエンジニアの虎魂くんはWEBサーバの運用を行っていました. ある日,記憶から消えかけていたような昔のプロジェクトのお客さんから電話がありました.

どうやらWEBサーバにアクセスするとエラーページが表示されるようです. 原因の理由と解決方法を回答してください.

前提条件  

  • WEBページのデータのバックアップはない.
  • WEBページの公開パスなどの変更は可能.

初期状態  

手元のPCから $ curl 192.168.11.1 をしてもエラーコードが帰ってくる.

終了状態  

  • 障害前に表示されていたページが表示されること.
  • 手元のPCから $ curl 192.168.11.1 をするとステータスコード200のレスポンスが返ってくる.

採点基準  

  • /dev/sdbのパーティションが壊れていることに気が付く 30%
  • 障害前のWEBページが確認できる 70%

答え  

まずは終了状態の確認を行います.400番台なのでエラーが発生しています.

[email protected]:~$ curl localhost
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.18.0 (Ubuntu)</center>
</body>
</html>

一応Nginxが起動しているか確認します.起動しています.

[email protected]:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2021-03-07 13:31:36 JST; 27min ago
       Docs: man:nginx(8)
   Main PID: 585 (nginx)
      Tasks: 2 (limit: 1168)
     Memory: 11.5M
     CGroup: /system.slice/nginx.service
             ├─585 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─586 nginx: worker process

Warning: some journal files were not opened due to insufficient permissions.

/var/log/nginx/error.logを確認すると以下のエラーが出力されています.

2021/03/07 13:55:27 [error] 586#586: *1 directory index of "/mnt/data/" is forbidden, client: 127.0.0.1, server: _, request: "GET / HTTP/1.1", host: "localhost"

ls /mnt/data/で確認するとディレクトリが空なのがわかります. ここでパスを見てみるとmntである事がわかります. mntディレクトリはファイルシステムをマウントする用途に使われるので/etc/fstabを確認します.

以下のようなマウントポイントが設定されてました.

/dev/sdb1 /mnt/data ext4 defaults 0 0

対象のデバイスを確認します.

sudo gdisk /dev/sdb 

するとエラーメッセージが出力されます.抜粋した以下を確認するとメインのパーティションテーブルが壊れている事がわかります. しかし,バックアップは生きているようなので復旧していきます.

Main header: ERROR
Backup header: OK
Main partition table: ERROR
Backup partition table: OK

復旧するので1番を選択

Found invalid MBR and corrupt GPT. What do you want to do? (Using the
GPT MAY permit recovery of GPT data.)
 1 - Use current GPT
 2 - Create blank GPT

Your answer: 1

リカバリモードに入り,バックアップから復元し書き込みます.

Command (? for help): r

Recovery/transformation command (? for help): c
Warning! This will probably do weird things if you've converted an MBR to
GPT form and haven't yet saved the GPT! Proceed? (Y/N): y

Recovery/transformation command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

マウントしてみます.

sudo mount -a

確認すると正常に復旧できた事がわかります.

[email protected]:~$ cat /mnt/data/index.html 
<!DOCTYPE html>
<html lang="ja">
        <head>
                <meta charset="utf-8" />
                <link rel="stylesheet"  href="style.css">
                <title>タイトル</title>
                <script
                          src="https://code.jquery.com/jquery-3.3.1.min.js"
                            integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
                              crossorigin="anonymous"></script>
        </head>
        <body>
                <main>
                        <p>ICTSC WEB!!!</p>
                </main>
        <script>
                $(function(){
                });
        </script>
        </body>
</html>

おわりに  

この問題は物理ディスクを2つ使うため,自分たちで仮想基盤を運用する本戦で出そうと思ってました. 150点問題としては多くのチームに解いていただけたので嬉しかったです.

gdiskではなくtestdiskを用いて回答していたチームもいました. どちらを使用しても終了条件を満たせるので満点にしています.

来年から社会人なので,最後の作問でしたが楽しかったです.