tosukeくんが誘ったあざらしくんにいきなり誘われて、ICTSC2022 に参加しました。
この 5 人でチーム word-unknown-tsukuba-otaku として参加しました。
当日がいつか把握していなかったので当日を意識できていませんでした。
生粋の Linux ガキ (ネットワークはわからない) としてはシェルをいじるような問題でお茶を濁すことでチームに貢献しました。
この問題は Dockerfile を書いて alpine のよく知られた問題としての glibc と musl libc の互換性のなさを埋めつつ不足バイナリを足すやつでした。
protoc
が PATH
に存在するのに
/bin/sh: protoc: not found
となって動かないので gcompat と
libstdc++ と libgcc を入れてやることで glibc への依存を誤魔化して
go
からバイナリを適当に落としてきた。(経緯: 実際 debian
をベースイメージにしてみるとコンパイルまで通るのでそれでいいなと思った)(てかビルドしたくなくね?w)
--- builder/Dockerfile.bkup 2023-03-04 12:14:37.336263829 +0900
+++ builder/Dockerfile 2023-03-04 14:14:21.871430982 +0900
@@ -6,6 +6,12 @@
wget -q "https://github.com/protocolbuffers/protobuf/releases/download/v22.0/protoc-22.0-linux-x86_64.zip" -O "protobuf.zip" && \
unzip -o protobuf.zip -d protobuf && chmod -R 755 protobuf/*
+RUN GOBIN=/download/gobin go install google.golang.org/protobuf/cmd/[email protected] && \
+ GOBIN=/download/gobin go install google.golang.org/grpc/cmd/[email protected]
+
FROM golang:1.20.1-alpine AS builder
+RUN apk add --no-cache gcompat libstdc++ libgcc
+
COPY --from=dl /download/protobuf/bin /usr/local/bin/+COPY --from=dl /download/gobin /usr/local/bin/
簡単で root ユーザーとして rbash から bash に chsh してやる。
zfs send
で出力したデータを unpigz
で圧縮して openssl enc
で暗号化したものを
{}.enc
として保存していたのでその逆をやれば良くて、適当にやって
zfs recv
で受け取ってやれば良い。一応スナップショットが残っていたりすると衝突エラーが出るので予め消す必要がある。
#!/bin/bash
function decode() {
cat $1 | openssl enc -iter 100 -aes-256-cbc -d -k ictsc2022 | unpigz -c
}
zfs destroy -r zpool
for i in $(ls $1 -1); do
decode $1/$i | zfs recv zpool -F
done
シェル芸問題を消費してしまったあとは過度な並列化によって仕事がなくなってしまったので、ランキング表を目watch
して盛り上げたり、「応援」していました。