LoginSignup
8
3

More than 3 years have passed since last update.

Mac環境でVivadoを動かしたい話①

Last updated at Posted at 2021-05-16

何をしたいか

手持ちのMacBookでVerilogの勉強をしたいので、まずはその環境を作りたい。RTLシミュレータとして、XilinxのVivadoを使用したいが、Windows用とLinux用しか用意されていない。mac環境でやろうとすると、VMwareだったりVirtualBoxでLinux仮想マシンを立ち上げて、その中でvivadoを動かすということが考えられる。しかし、とはいうもののこれはマシンリソースをだいぶ食うので避けたい(昔、VirtualBox+CentOSで作ってみたことがあるが、発熱と電池消耗がハンパなかった)。
ということで、今回は勉強も兼ねてDockerで構築してみたいと思う。

環境

  • MacBook Air (M1, 2020)
  • MacOS BigSur 11.2.3

DockerDesktop for Macのインストールとhello-worldの実行

公式サイトにmac用のバイナリが公開されている。それどころかIntel版とApple版の2種類が用意されている!せっかくなのでAppleシリコン版を選択。
hello-worldイメージをダウンロードして、コンテナ実行できることを確認。

% docker container run hello-world

"Hello from Docker!"メッセージが表示されるまでの流れが示されていて、

  1. DockerHubからhello-worldイメージを取得(pull)してきて、
  2. このイメージから新規コンテナを作成・実行して、
  3. このメッセージを生成して、ターミナルに送信した

ということらしい。コマンドで明示的に与えたのは2だけだが、ローカルのイメージファイルを検索して、なければDockerHubからイメージを取得してきてきてくれる。

ubuntuイメージの確認

これまでcentos派だったのだが、昨今の動向もあり今回はubuntuで進めてみる。DockerHubのイメージもubuntuベースのものが多いようにも思える。

お試しでhello-worldに記載のあった方法でubuntuコンテナを起動して、xを飛ばすところまでを確認してみる。

hello-worldの実行とは異なり、作成後のコンテナを操作するために"-it"オプションを指定する。ホスト名が211966417e8bでrootでログインしているようだ。

% docker run -it ubuntu bash
root@211966417e8b:/#

さらにパッケージのアップデートとx11パッケージのインストールを行う

root@211966417e8b:/# apt-get update
root@211966417e8b:/# apt-get install -y x11-apps
root@211966417e8b:/# xeyes &
[1] 648
root@211966417e8b:/# Error: Can't open display: 

[1]+  Exit 1                  xeyes

最近のMacはX11を同梱してなくて、Xquartzを追加でインストールする必要があるとか。

xを動かすまで

結構苦戦したので、別章で。

XQuartzの環境設定

XQuartzをインストールして、Preference→Securityで

  • "Authenticate connections"
  • "Allow connections from network clients"

にチェックを入れて、XQuartzを再起動。

hostのIPアドレスの確認

ubuntu側で設定するDISPLAY変数用にホストのIPアドレスを取得しておく。今回の場合、ホスト=macのこと。ipconfig getifaddr en0の結果を使用する。

コンテナの再起動

-eオプションでDISPLAY変数の値を渡し、-vオプションで.Xauthorityをubuntu側にマウントする。

% docker run -e DISPLAY="<IPaddr>:0" -v ~/.Xauthority:/root/.Xauthority -it ubuntu bash

こうして起動したコンテナに対して、再度

root@c5f2445da776:/# apt-get update
root@c5f2445da776:/# apt-get install -y x11-apps
root@c5f2445da776:/# eyes &

無事目玉が表示されたのでOK。

XQuartzの設定

ところでXQuartzを起動するとxtermが自動起動されてしまう。こちらは使用しないので、以下の手順で自動起動しないようにする。
#いくつかのサイトを参照したがうまくいかず、どうやらパスが変わったらしい

# 元の設定を確認
% defaults read org.xquartz.X11          
{
    "NSWindow Frame x11_prefs" = "372 447 484 336 0 0 1680 1025 ";
    SUHasLaunchedBefore = 1;
    SULastCheckTime = "2021-05-16 11:36:30 +0000";
    "app_to_run" = "/opt/X11/bin/xterm";
    "apps_menu" =     (
                (
            Terminal,
            xterm,
            n
        ),
                (
            xman,
            xman,
            ""
        ),
                (
            xlogo,
            xlogo,
            ""
        )
    );
    "cache_fonts" = 1;
    "done_xinit_check" = 1;
    "enable_iglx" = 0;
    "login_shell" = "/bin/sh";
    "no_auth" = 0;
    "nolisten_tcp" = 0;
    "startx_script" = "/opt/X11/bin/startx -- /opt/X11/bin/Xquartz";
}

# 起動時に実行するアプリを空にする
% defaults write org.xquartz.X11 app_to_run ""

# 設定が反映されていることを確認
% defaults read org.xquartz.X11               
{
    "NSWindow Frame x11_prefs" = "372 447 484 336 0 0 1680 1025 ";
    SUHasLaunchedBefore = 1;
    SULastCheckTime = "2021-05-16 11:36:30 +0000";
    "app_to_run" = "";
    "apps_menu" =     (
                (
            Terminal,
            xterm,
            n
        ),
                (
            xman,
            xman,
            ""
        ),
                (
            xlogo,
            xlogo,
            ""
        )
    );
    "cache_fonts" = 1;
    "done_xinit_check" = 1;
    "enable_iglx" = 0;
    "login_shell" = "/bin/sh";
    "no_auth" = 0;
    "nolisten_tcp" = 0;
    "startx_script" = "/opt/X11/bin/startx -- /opt/X11/bin/Xquartz";
}

これでXQuartzを起動しても、不要なxtermは実行されなくなった。

停止させたコンテナの破棄

最初のhello-worldコンテナだったり、ubuntuコンテナをexitで抜けた後、これらのコンテナは「停止」状態になっている。明示的に破棄しない限りストレージ領域を食い潰すので、以下のコマンドで破棄する。

# コンテナを確認。statusは全てexitedになっている
% docker container ls -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                           PORTS     NAMES
9c8d40b83710   ubuntu        "bash"                   6 minutes ago   Exited (127) 4 minutes ago                 compassionate_pike
c5f2445da776   ubuntu        "bash"                   3 hours ago     Exited (129) About an hour ago             elated_rosalind
5eeb98e95524   ubuntu        "bash"                   3 hours ago     Exited (0) 3 hours ago                     vigorous_carson
00945096ebc4   ubuntu        "bash"                   3 hours ago     Exited (0) 3 hours ago                     practical_feistel
1a7cf61e2203   ubuntu        "bash"                   3 hours ago     Exited (1) 3 hours ago                     youthful_galileo
f07cd430c93f   ubuntu        "bash"                   3 hours ago     Exited (100) 3 hours ago                   flamboyant_gauss
00797699839d   ubuntu        "bash"                   3 hours ago     Exited (0) 3 hours ago                     mystifying_haibt
8c43d7de8a61   ubuntu        "bash -v /Users/kamu…"   3 hours ago     Exited (127) 3 hours ago                   pensive_driscoll
d9dd49abc9a2   ubuntu        "bash -e DISPLAY=loc…"   3 hours ago     Exited (1) 3 hours ago                     sad_haslett
c87d6fa7033f   ubuntu        "bash"                   3 hours ago     Exited (127) 3 hours ago                   dazzling_dirac
211966417e8b   ubuntu        "bash"                   3 hours ago     Exited (129) 3 hours ago                   happy_kilby
25894b2736b4   ubuntu        "bash"                   4 hours ago     Exited (127) 3 hours ago                   dreamy_pike
1638b28b41bb   hello-world   "/hello"                 4 hours ago     Exited (0) 4 hours ago                     sharp_proskuriakova

# 停止中のコンテナをまとめて破棄する
% docker container prune -f
Deleted Containers:
9c8d40b83710131bb740b5ff1d47d967cbcd2630f7a3b847c85ff10239542353
c5f2445da776b9cd35b9f0e0a5ee3d2a333d27c3e6ac6d5cd8cce7151ea5e9db
5eeb98e955246b72bfc8867dbd7ac544b10b70650a664b18f5e15e4175aa751d
00945096ebc44d0c5cd0c7ef6a729db2a341f357effb88657a23659348c51627
1a7cf61e220322cff6716ee5281d52040e161a9bc9b753311c6ec6a48d45de95
f07cd430c93f8509273fe33e0dc66343d1cbd18211e0fed0dabc75005a977b5f
00797699839d80c0884efe35b957b1df4d4417d56cab044d30215b53db168990
8c43d7de8a6128a8304cf1d34f761a9327d3244a64fad267d7fb023665452c95
d9dd49abc9a29a8b1e083581c658ed92bdf173ce58977f4afc96ced2a2d7bab4
c87d6fa7033f9e547f23c64c13e24e713f5d1a407e8aa8d7631b99fbb081ef16
211966417e8bcb48dac2dd165ad2ed0693d3facd381c2df1f5f84e4eda1c82b2
25894b2736b441195b712c2e4688b8ce0a5f22e5e834b162cdec8b4c11d231ac
1638b28b41bbb9b29d5dfd2fb347bd2ace7c7f8dcbbad0c948eb1fb63282119e

Total reclaimed space: 507.7MB

# 削除されていることを確認
% docker container ls -a   
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

四苦八苦してubuntuコンテナをたくさん作ったが、それでも507MB。かなり軽い(何もパッケージ入ってないけど)。

ひとまずここまで。もう少しdockerを掘り下げて、Dockerfileの作成を行いたい。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3