がべーじこれくしょん

技術系とかいろいろ

ICTSC2021 冬の陣 参加記

執筆・創作活動への支援をぜひお願いします🙏
Buy Me A Coffee

前回の夏の陣に引き続き、「トラコン」ことICTトラブルシューティングコンテスト(ICTSC)2021 冬の陣に「mis1yakudo」として参加してきました。

学生生活最後のトラコンで、現メンバーでのトラコン出場はこれで最後となります。4月からは本番のトラブルシューティングが始まると考えたら震えが止まりません。困った。

ちなみに前回(夏の陣)の記事はこちらから↓

musaprg.hatenablog.com

結果は、全問正答で優勝でした。

f:id:musaprg:20220301025542p:plain

チームでの最終獲得点数は、2300ptでした。

以下は解いた問題のメモ。

writeup

04 cilium-bgp

200点じゃないだろこれ明らかに点数から推測されないように高得点が設定されている問題な気がしている

ciliumを入れたけどcilium関連のpodが上がらないという。

kubectl get pods -n kube-systemとするとcilium関連のpodがCrashLoopBackOffになってたりしている。

こういうときはログを見るのが定石ってことで徐にログを見る。

user@k8s:~$ kubectl -n kube-system logs -l k8s-app=cilium
level=info msg=" - !:annotation.*" subsys=labels-filter
level=info msg=" - !:etcd_node" subsys=labels-filter
level=info msg="Using autogenerated IPv4 allocation range" subsys=node v4Prefix=10.1.0.0/16
level=info msg="Initializing daemon" subsys=daemon
level=info msg="Establishing connection to apiserver" host="https://10.96.0.1:443" subsys=k8s
level=info msg="Connected to apiserver" subsys=k8s
level=info msg="Auto-disabling \"enable-node-port\", \"enable-external-ips\", \"enable-host-reachable-services\", \"enable-host-port\", \"enable-session-affinity\" features and falling back to \"enable-host-legacy-routing\"" subsys=daemon
level=info msg="Inheriting MTU from external network interface" device=eth0 ipAddr=192.168.26.1 mtu=1500 subsys=mtu
level=error msg="Error creating new BGP speaker" error="open /var/lib/cilium/bgp/config.yaml: no such file or directory" subsys=daemon
level=fatal msg="Error while creating daemon" error="open /var/lib/cilium/bgp/config.yaml: no such file or directory" subsys=daemon

なんかBGP関連のconfigが読めていないらしい。

BGP関連のconfigはConfigMap経由でPodにマウントしてるのでこいつが原因っぽい。まあ見てみる。

user@k8s:~$ cat bgp-config.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: kube-system
  name: bgp-config
data:
  config: | 
    peers:
    - peer-address: 192.168.26.254
      peer-asn: 65020
      my-asn: 65021
    address-pools:
    - name: default
      protocol: bgp
      addresses:
      - 192.168.26.10/31

チュートリアルのサンプルと見比べるとtypoがあることを発見。この手のやつ普通に身に覚えがあるので解きながら悲しい気持ちになりました。

user@k8s:~$ diff -u bgp-config.yaml.orig bgp-config.yaml
--- bgp-config.yaml.orig        2022-02-26 12:54:49.437335760 +0900
+++ bgp-config.yaml     2022-02-26 12:54:56.757363032 +0900
@@ -4,7 +4,7 @@
   namespace: kube-system
   name: bgp-config
 data:
-  config: | 
+  config.yaml: | 
     peers:
     - peer-address: 192.168.26.254
       peer-asn: 65020

これでCIliumは起動したので、ingress-nginxをhelmで入れてGG。

05 アンインストールされたがらない呪い

着手後すぐにお昼食べに行っちゃたので時間かかってしまった…

apt removeしようとするとdpkg関連のファイルをlockできんよと怒られる。親の顔より見たCould not get lock /var/lib/dpkg/lock

shikugawaが最初に手をつけていたが、とっかかりがつかなかったらしくヘルプに入る。

エラーメッセージが「11 Resource temporarily unavailable」や「13 Permission denied」ではなく「1: Operation not permitted」なことに注目。何かしらLinuxACLじゃない部分で操作を禁止されていそう。

考えうるものとしてはSE LInuxやApp Armorが思い浮かんだがチームメイトが事前調査した限りは違いそう。

雑にGoogleで「linux file operation restriction security howto」みたいな感じで調べたらlsattrというコマンドがヒット。

これはext2/ext3/ext4で利用可能なファイル属性を確認するコマンドらしい。これでファイルの変更を禁止することとかもでるらしく、どうみてもこれと断定。知らんかった…

というわけでsudo chattr -i /var/lib/dpkg/lockをしてGG。

06 5lowquery

I S U C O N

countクエリが遅い、ってことで雑にwhereしてるカラムにindexをはる。

11 明日の通勤は

SoftEther問題。最初は19が手をつけてたがSoftEtherであることを突き止めてもらった後にバトンタッチ。

VPNが繋がらないらしいとのことなので一旦ClientからVPNを繋ぎに行ってみる。Clientの設定に問題はなさそうでServerにも問題なく繋がる。が、dhclientでtun/tapにIPアドレスを割り当てるとpingが通らなくなりVPNも切れる。

Tsuzuくんと相談した結果、VPNIPアドレスと接続先のNICに割り当てられてるIPアドレスのサブネットが衝突してることが判明。あとはTsuzuくんに丸投げして解いてもらいました。感謝。

14 無限

キャッシュサーバにhttpscurlをしてもページが正常に表示されないというやつ。

curlしてみると301 moved permanentlyが出るのでリダイレクトオプションをつけて再度試してみる。すると無限リダイレクトが発生する。

この時点でnginxの設定を疑う。cacheサーバー側の/etc/nginx/sites-enabled/defaultを見るとproxy_passにhttpのアドレスを指定していることが判明。これだとhttpsへリダイレクトした時に飛ばされる先が正しくないので無限にリダイレクトしてしまう。

そこで以下のように書き換えるといい感じになる。

user@cache-server:/etc/nginx/sites-enabled$ diff -u /tmp/default ./default 
--- /tmp/default        2022-02-26 11:11:06.180189991 +0900
+++ ./default   2022-02-26 11:18:59.481442268 +0900
@@ -81,7 +81,7 @@
        server_name mydomain.test;
 
        location / {
-               proxy_pass http://wictsc.test;
+               proxy_pass https://wictsc.test;
        }
 }

15 ansible

問題名をよく覚えてないけどansible問題。

見るとsetup.yamlがガバなので直す。

  • apt関連のコマンド実行、configファイルの転送、serviceの再起動には権限昇格が必要なのでbecome: yesをよしなに追加
  • templateに変数を埋め込むためにはcopyモジュールではなくtemplateモジュールを使用する必要があるのでそのように変更

あとはやるだけ

16 無限クリック

VNCで繋いで、指定されたファイルをファイルマネージャから開くとうまくFireFoxが開かないという。対象のファイルはprob16.htmlみたいな名前のHTMLファイルだった気がする。

一瞬見えるウインドウにPython3.8のSyntaxErrorが見えたのでおそらくデフォルトのアプリが間違って設定されているとかだろうなと推測。

実際以下のように推測通りの状態になっている。

$ xdg-mime query default text/html
python3.8.desktop

xdg-mimeってコマンドはもちろん知らなかったので、ググって突き止めました。

ファイルのMIMEタイプごとにデフォルトアプリを設定するのはどうするのかと調べたら、どうやらだいたいのファイルマネージャは裏側でxdg-openを叩いてるらしい。なのでxdg-openが参照する設定ファイルをどうにかすればいい。

具体的には以下のようにすれば直る。

$ xdg-mime default firefox.desktop text/html

余談と写真たち

  • 僕ができそうな問題は初日に全部解き終わってしまったので、2日目は応援係をしていました。
  • 採点結果待ちの時間はアニソンイントロクイズをしてました。脳への負荷が異常。
  • airbnbしたおうちがスカイツリーにめちゃくちゃ近かったのでソラマチに大変お世話になった。やっぱり泊まり込みでやると合宿感があってよい、おすすめです。

(こいつどんだけすき家いってんだ?)

というわけで、mis1yakudoチーム発足からICTSCに合計4回(ICTSC2019〜2020、2021夏、2021冬)参加したことになります。初回は圧倒的力不足を感じて非常に悔しい思いをしたことを今でも覚えています。あの時から思えば、今のmis1yakudoのメンバーは全員が圧倒的に成長しているなというのを強く感じます。

一つ心残りがあるとすれば時期が悪くて一回もオンサイト参加できなかったことですかね。実機がさわれないのはネットワーク勢も嘆いていて非常に残念です。

ただ学生のうちからこういったトラブルシューティングの経験を積むのは非常に良いと思います。ぜひみなさんも来年(もしあれば)ICTSCに参加してみてはいかがでしょうか。

有志の運営のみなさん、大会運営お疲れ様でした&ありがとうございました!

就職しても何かしらの形でICTSCに関われたらいいなあとぼんやり思う今日この頃なのでした(˘ω˘)