$30 off During Our Annual Pro Sale. View Details »

Finch OSSコードリーディング

x-blood
April 24, 2023

Finch OSSコードリーディング

x-blood

April 24, 2023
Tweet

More Decks by x-blood

Other Decks in Programming

Transcript

  1. Finch OSS
    コードリーディング
    佐藤 靖幸
    JAWS-UG コンテナ⽀部 #23 春のFinch特集
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 1

    View Slide

  2. ⾃⼰紹介
    佐藤 靖幸
    @yasai_ls
    JAWS UGコンテナ⽀部
    運営メンバー
    好きAWSサービス︓
    VPC、Lambda、ECS、EKS
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 2
    PARTNER
    NETWORK
    2022 APN AWS Top Engineers

    View Slide

  3. アジェンダ
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 3
    Finch OSSコードリーディング
    GitHubリポジトリの構成要素
    GitHubリポジトリのディレクトリ構成
    主要なライブラリ
    コードリーディング
    まとめ

    View Slide

  4. GitHubリポジトリの構成要素
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 4
    (2023年4⽉24⽇ 時点)
    種別
    P. Language go 1.20
    Linter golangci-lint
    License Apache 2.0
    CI GitHub Actions

    View Slide

  5. GitHubリポジトリのディレクトリ構成
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 5
    finch
    ├── benchmark
    │ ├── container ... コンテナのビルドと起動時間のベンチマークを取得
    │ └── vm ... 仮想環境の初期化とベンチマークを取得
    ├── cmd
    │ └── finch ... CLIアプリケーションが格納されているメインとなるソースコード
    ├── contrib
    │ ├── hello-finch ... サンプルのDockerコンテナ(finchのAAがある)
    │ └── logo ... Finchのロゴファイル(svg)
    ├── deps
    │ └── finch-core ... Gitサブモジュール。finch-coreリポジトリを参照
    ├── docs
    │ └── design ... 設計ドキュメント
    ├── e2e
    │ ├── container ... common-testsを参照。push,pull,runを検証
    │ │ └── cosign_data
    │ └── vm ... 各種vmコマンドを検証

    View Slide

  6. GitHubリポジトリのディレクトリ構成
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 6
    finch
    └── pkg ... finchのmainコードから派⽣する各種処理
    ├── command ... 各種コマンドを実⾏
    ├── config ... Finchのコンフィグファイルから設定を適⽤
    ├── dependency
    │ └── vmnet ... LimaマネージドNWを利⽤するためのユーザー操作
    ├── disk ... ユーザーデータを保存する永続層を管理
    ├── flog ... ログ出⼒
    ├── fmemory ... メモリ情報を取得
    ├── fssh ... SSH接続の設定と作成
    ├── lima ... lima vm に関する共通処理
    ├── mocks ... MockGenによって⾃動⽣成
    ├── path ... ユーザーデータや設定ファイルなどのパスを特定
    ├── support ... プラットフォーム情報などをfinch実⾏時に取得
    ├── system ... OSに関連するAPIインターフェース
    └── version ... バージョン情報

    View Slide

  7. Finchのサブモジュール構成
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 7
    Runfinch/finch
    └── finch-core
    ├── lima
    └── socket_vmnet
    MakefileによるFinchのパッケージビルド実⾏時に、
    依存するGit サブモジュールを利⽤
    • Lima ... ⾃動ファイル共有とポートフォワーディン
    グ、およびcontainerdを備えたLinux仮想マシン
    • socket_vmnet ... Limaで起動したLinux稼働マシンと
    通信するためのライブラリ

    View Slide

  8. 主要なライブラリ
    • cobra
    • CLIアプリケーションを作成するためのライブラリ。Kubernetesでも
    使⽤されている。
    • Afero
    • FileSystem抽象化ライブラリ
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 8

    View Slide

  9. コードリーディング
    cmd/finch/main.go
    Finchにおけるメイン関数(main)
    ログ出⼒、ファイルシステム管理、メモリ管理などを指定
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 9

    View Slide

  10. コードリーディング
    cmd/finch/main.go
    main関数から呼び出されるxmain関数
    パス設定を⾏い、finch⽤設定ファイルを読み込む
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 10

    View Slide

  11. コードリーディング
    cmd/finch/main.go
    nerdctl を利⽤してcontainerdにアクセスするコマンドと
    finch⽤のコマンドを、cobraで利⽤するコマンドに指定
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 11

    View Slide

  12. コードリーディング
    cmd/finch/virtual_machine.go
    finch vmコマンドの実装例
    start stopなどのコマンド毎に関数として定義
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 12

    View Slide

  13. コードリーディング
    cmd/finch/virtual_machine_start.go
    コマンド毎の関数の実装例
    Cobraライブラリにお作法として渡す
    RunEで実⾏される処理を指定。pkgパッケージを参照
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 13

    View Slide

  14. (再掲)ディレクトリ構成
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 14
    finch
    ├── cmd
    │ └── finch ... CLIアプリケーションが格納されているメインとなるソースコード
    └── pkg ... finchのmainコードから派⽣する各種処理
    ├── command ... 各種コマンドを実⾏
    ├── config ... Finchのコンフィグファイルから設定を適⽤
    ├── dependency
    │ └── vmnet ... LimaマネージドNWを利⽤するためのユーザー操作
    ├── disk ... ユーザーデータを保存する永続層を管理
    ├── flog ... ログ出⼒
    ├── fmemory ... メモリ情報を取得
    ├── fssh ... SSH接続の設定と作成
    ├── lima ... lima vm に関する共通処理
    ├── path ... ユーザーデータや設定ファイルなどのパスを特定
    ├── support ... プラットフォーム情報などをfinch実⾏時に取得
    ├── system ... OSに関連するAPIインターフェース
    └── version ... バージョン情報
    着眼するディレクトリはcmd, pkg、この2つ!

    View Slide

  15. コードリーディング
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 15
    contrib/hello-finch/main.go
    (おまけ)動作確認⽤コンテナはfinchのAAがあるよ︕

    View Slide

  16. まとめ
    • FinchはLimaに依存しており、LimaのVMに対して操作を⾏う
    CLIツールとして実装されている。
    • Git サブモジュールを活⽤してコアとなる依存モジュール
    (Lima、socket_vmnet)を管理している。
    • OSSのcobraを活⽤したCLIツールの実装の⼀例としてコード
    リーディングすると、今後cobraを活⽤する時によさげ︕
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 16

    View Slide

  17. ご清聴ありがとうございました︕
    2023/04/24 JAWS-UG コンテナ⽀部 #23 春のFinch特集 17

    View Slide