# ソフトウェアシステム論 (exaを読む 環境構築編) * rustで書かれたls、exa # なぜ読むのか * そもそもlsがよくわからないが、ユーティリティコマンドをよく知らない * rsgrepから興味を持ってlsはどうなんだと思った。 # TLTR dockerhubに公開したので、以下のコマンドを実行すれば実行環境が手に入るはず! ``` docker pull padawane15/ubuntu_rust_exa ``` Ubuntu 20.04 LTS MacOS 10.15.4 Catalina Docker version 19.03.8 # docker環境を自分で構築する方法 * 作業環境 Ubuntu 20.04 LTS MacOS 10.15.4 Catalina Docker version 19.03.8 ## dockerのコンテナ作成 ## Ubuntu(イメージ?)をダウンロードして、デバッグのためのコンテナを作成する ```zsh docker pull utuntu docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined apparmor=unconfined -it --name ubuntu_rust_exa ubuntu /bin/bash ``` ## 必要なパッケージをインストールする [dockerコンテナの中] * パッケージインストーラ ``` apt-get update -y && apt-get upgrade -y apt-get install -y build-essential curl vim llvm lldb make wget git ``` * もしかしたら必要なもの ``` apt-get install -y tzdata build-essential curl git libbz2-dev libffi-dev liblzma-dev libncurses5-dev libncursesw5-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev llvm make tk-dev unzip vim wget xz-utils zlib1g-dev ``` * rustのインストールとパスの設定 ``` curl https://sh.rustup.rs -sSf | sh source $HOME/.cargo/env source .bashrc rustup component add rust-src ``` * 読みたいパッケージ`exa`を用意する ソースコードからビルドしたいので、githubのソースコードをダウンロードする ``` git clone https://github.com/ogham/exa.git ``` * ビルドする `cargo build`でデバッグビルドになる(らしい?) 最適化は`--release`をつけてビルドする。 ``` cd exa cargo build --release cargo run --release make install ``` * その他 これでもいいみたい。 ``` cargo install --git https://github.com/ogham/exa ``` ## エラーになる原因 `docker run オプション`の注意点 `error: process launch failed: 'A' packet returned an error: 8` dockerの内部からlldbやgdbの機能を使うと出てくる。 解決方法の参考文献 https://forums.swift.org/t/debugging-using-lldb/18046/2 ## dockerの停止、再開 dockerは仮想サーバーに近い。`exit`で抜けても動いている。 * 停止したdockerコンテナに対してスタートして入る ``` docker start ubuntu_rust_exa docker exec -it ubuntu_rust_exa /bin/bash ``` * dockerの中から抜ける ``` exit ``` * 動いているdockerコンテナの中に入る ``` docker attach ubuntu_rust_exa ``` * dockerの状態を確認する ``` docker image ls docker container ls ``` * コンテナの削除 ``` docker rm [containerid] ``` * イメージの削除 ``` docker rmi [imageid] ``` ## dockerを公開する * コンテナIDの確認 ``` docker container ls ``` * dockerhubにコミットする ``` docker start docker commit -m "first commit " -a "username" [ContainerID] [username]/[ContainerName] ``` * dockerhubにプッシュする ``` docker push padawane15/ubuntu_rust_exa ``` # 実践編 https://hackmd.io/@padawan-e15/H18bJfI3L # 参考文献 https://github.com/ogham/exa ## その他 https://www.fabrica-com.co.jp/techblog/technology/994/ https://qiita.com/kiii142/items/cad9ac53a78c401545a2 https://www.slideshare.net/ShinichiMakino1/exa-84358376 https://blog.codecamp.jp/programming-docker-hub https://qiita.com/legokichi/items/e2f807f70316a916f4be https://forums.swift.org/t/debugging-using-lldb/18046/2