# Docker (Rootless mode) と nix の導入 ```{note} efabless 社 OpenLANE 1/2 や Caravel template の利用に必要な Docker,nix ソフトウェアの導入にあたり,本ドキュメントでは efabless 社の指定と異なる手順を記載しています. Docker や nix をより安全に利用する設定を採っており,Caravel template などの Makefile やスクリプトを一部変更する必要があることにご注意下さい. ``` 本ドキュメントでは,efabless 社 OpenLANE 1/2 や Caravel template の利用に必要な Docker,nix ソフトウェアを導入します. ここでは Ubuntu 22.04 LTS の動作環境があらかじめセットアップされており,ユーザ名 openeda を利用する設定としています. ## Docker (Rootless mode) の導入 一般ユーザから Docker を利用する Rootless mode を導入します.(efabless 社のドキュメントの方法ではユーザを docker のグループに登録する方法が記載されていますが,root 権限が利用される方法であり Rootless mode がより安全です) なお,Ubuntu 22.04 LTS では Docker 公式で記載されているユーザ単位の AppArmor 制御は利用できないため設定を行いません. 参照:https://docs.docker.com/engine/security/rootless/ ### 必要パッケージのインストール 必要パッケージを導入します. ``` sudo apt-get install -y dbus-user-session sudo apt-get install -y uidmap sudo apt-get install -y systemd-container sudo apt-get install -y curl ``` ### Docker (Rootless mode) のインストール Docker 公式のインストールスクリプトを用います. ``` curl -fsSL https://get.docker.com/rootless | sh ``` ### インストール後の設定 .bashrc へ Docker 起動のための環境変数を設定します. ``` export PATH=/home/$(whoami)/bin:$PATH export DOCKER_HOST=unix:///run/user/$(id -u)/docker.sock ``` Rootless mode で Docker を動作するためのデーモンを起動します. ``` systemctl --user start docker ``` OS の起動時にデーモンを起動するには,下記を実行します. ``` systemctl --user enable docker sudo loginctl enable-linger $(whoami) ``` ### 動作確認 以上の設定により,ユーザから Docker を Rootless mode で起動することを確認します. ``` docker run hello-world docker images ``` ## nix パッケージャの導入 nix 公式の手順により導入後,OpenLANE2 向けのバイナリキャッシュを設定します. ```{note} OpenLANE2 ではバージョンにより nix のバージョンが異なり,特に OpenLANE2 2.0.3 (caravel_user_template_ol2 採用)にて利用されている nix と,最新の OpenLANE2 2.1 ではコマンドの互換性に不具合があります.本ドキュメントでは,nix の最新バージョンを導入することから,OpenLANE2 2.0.3 では nix-shell 動作と Jupyter notebook 動作を混在して利用できない点にご注意下さい. ``` 参照:https://nix.dev/manual/nix/2.18/command-ref/new-cli/nix3-profile ### nix 本体のインストール まず,nix 公式の daemon 利用を利用するインストールスクリプトにより導入します.スクリプト実行中に管理者権限が要求されます. ``` sh <(curl -L https://nixos.org/nix/install) --daemon ``` スクリプト実行後に再起動することで利用可能となります.下記 nix のバージョンなど確認できます. ``` nix-shell -p nix-info --run "nix-info -m" ``` ### OpenLANE2 向けキャッシュの設定 OpenLANE2 で利用されるツールのバイナリが格納されているキャッシュを設定します.(あらかじめビルドされたバイナリの格納先を設定しており,設定しない場合はソースコードからのビルドが実行され,セットアップに数時間以上要します) ``` nix-env -f "" -iA cachix sudo env PATH="$PATH" cachix use openlane sudo pkill nix-daemon ```