Intel Quartus LiteをVagrantで動かした話
諸般の理由でIntel Quartus Liteを動かす必要がありましたが、Quartus LiteはWindowsとLinuxしかサポートしていません。僕は普段macOSを使っているためデュアルブートか仮想マシンを使う必要がありますが、わざわざQuartus Liteのためにデュアルブートを設定するのも大変なので仮想マシンを使うことにしました。Virutalbox等の仮想マシンを直接使ってQuartus Liteを動かしても良いですが、今回はVagrantとansibleを使って環境構築を行いました。
今回使ったIntel Quartus Liteのバージョンは17.1です。Windows版とLinux版を両方とも無料で https://fpgasoftware.intel.com/17.1/?edition=lite からダウンロードができます(Intelへの会員登録は必要です)。Linux用のファイルである Quartus-lite-17.1.0.590-linux.tar
が Vagrantfile
や playbook.yaml
と同じディレクトリに置かれていることを想定しています。
VagrantとVirtualboxのインストール
VagrantとVirtualboxは両方ともHomebrewからインストールできます。具体的には以下のコマンドでインストールできます。
brew install vagrant virtualbox
Vagrantfile
まず、vagrantでのvmの設定ファイルである Vagrantfile
は以下の様になります。
# frozen_string_literal: true
Vagrant.configure('2') do |config|
config.vm.box = 'bento/ubuntu-16.04'
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network 'private_network', ip: '192.168.33.10'
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder './working', '/home/vagrant/working'
# Envable X11 forwarding via SSH
config.ssh.forward_x11 = true
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
config.vm.provider 'virtualbox' do |vb|
# Customize the amount of memory on the VM:
vb.memory = '16384' # 16GiB
vb.cpus = 4
end
# Provision by Ansible
config.vm.provision 'ansible' do |ansible|
ansible.playbook = 'playbook.yaml'
ansible.inventory_path = 'hosts'
ansible.limit = 'all'
end
end
ここから Vagrantfile
の中身を説明していきます。
Boxの指定
まず始めに今回の環境を構築する元になる環境を指定します。Intel Quartus Lite 17.1でサポートされている最新のUbuntuはUbuntu 16.04なので、ここではUbuntu 16.04を指定します。
config.vm.box = 'bento/ubuntu-16.04'
プライベートネットワークの設定
次にプライベートネットワークを設定します。本来プライベートネットワークは設定しなくてもvagrantを使うことはできますが、今回はansibleを使ってプロビジョンするためにプライベートネットワークを使います。
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network 'private_network', ip: '192.168.33.10'
同期されるフォルダ
次に ./working
というフォルダを同期される様な設定を行います。この設定も本来不要ですが、同期されるフォルダを設定しておくとQuartus Liteで扱うファイルをホストと共有するのが非常に楽になるのでオススメです。
# Share an additional folder to the guest VM. The first argument is
# the path on the host to the actual folder. The second argument is
# the path on the guest to mount the folder. And the optional third
# argument is a set of non-required options.
config.vm.synced_folder './working', '/home/vagrant/working'
SSHでX11転送の有効化
次はSSHでX11転送を有効化します。今回Quartus LiteはSSHのX11転送で実行するのでこの設定は必須となります。
# Envable X11 forwarding via SSH
config.ssh.forward_x11 = true
Virtualboxでの仮想マシンの設定
次にVirtualboxでの仮想マシンの設定を行います。具体的には仮想マシンに割り振るRAMやCPUの個数を設定します。以下では4つのCPUと16GiBのRAMを割り振る様な設定を行っていますが、ホストマシンのリソースに合わせて上手く変更してください。
# Provider-specific configuration so you can fine-tune various
# backing providers for Vagrant. These expose provider-specific options.
config.vm.provider 'virtualbox' do |vb|
# Customize the amount of memory on the VM:
vb.memory = '16384' # 16GiB
vb.cpus = 4
end
Ansibleでの環境構築
最後にAnsibleで環境構築を行う設定を行います。ここで使っている playbook.yaml
と hosts
のファイルはこれから解説していきます。
# Provision by Ansible
config.vm.provision 'ansible' do |ansible|
ansible.playbook = 'playbook.yaml'
ansible.inventory_path = 'hosts'
ansible.limit = 'all'
end
Ansibleの設定
以下ではAnsibleでの環境構築を説明します。まず、Ansibleでの環境構築内容を記述した、 playbook.yaml
は以下の様になります。
- hosts: vagrant
tasks:
# ModelSim requires i386 support
- name: add i386 support
command: dpkg --add-architecture i386
become: true
- name: install required packages
apt:
name: "{{ item }}"
update_cache: yes
with_items:
- libglib2.0-0
- libpng12-0
- libfreetype6
- libsm6
- libxrender1
- libfontconfig1
- libxext6
- xinit
# ModelSim requires i386 support
- libc6:i386
- libstdc++6:i386
- libx11-6:i386
- libxext6:i386
- libxft2:i386
- libncurses5:i386
become: true
- name: unarchive Quartus file
unarchive:
src: ./Quartus-lite-17.1.0.590-linux.tar
dest: /tmp
- name: execute Quartus installer
shell: ./setup.sh --accept_eula 1 --mode unattended
args:
chdir: /tmp
- name: set up PATH
lineinfile:
path: /home/vagrant/.bashrc
regexp: '^export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'
line: 'export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'
ここから playbook.yaml
の中身を説明していきます。
i386サポートを追加
まず、ModelSimを動かすために32bit環境のサポートを追加します。
# ModelSim requires i386 support
- name: add i386 support
command: dpkg --add-architecture i386
become: true
必要なパッケージをインストール
次にaptで必要なパッケージをインストールします。ここでも、ModelSimを動かすために32bitアプリケーション用のライブラリもインストールします。
- name: install required packages
apt:
name: "{{ item }}"
update_cache: yes
with_items:
- libglib2.0-0
- libpng12-0
- libfreetype6
- libsm6
- libxrender1
- libfontconfig1
- libxext6
- xinit
# ModelSim requires i386 support
- libc6:i386
- libstdc++6:i386
- libx11-6:i386
- libxext6:i386
- libxft2:i386
- libncurses5:i386
become: true
Quartus Liteのファイルを展開
次にQuartus Liteのファイルを展開します。ここで、 Quartus-lite-17.1.0.590-linux.tar
が Vagrantfile
や playbook.yaml
と同じディレクトリに置かれている必要があります。
- name: unarchive Quartus file
unarchive:
src: ./Quartus-lite-17.1.0.590-linux.tar
dest: /tmp
Quartus Liteのインストーラを実行
次にQuartus Liteのインストーラを非対話的に実行します。非対話的実行のためのオプションは --accept_eula 1
(ソフトウェア利用許諾の承認) と --mode unattended
(非対話で実行) となります。
- name: execute Quartus installer
shell: ./setup.sh --accept_eula 1 --mode unattended
args:
chdir: /tmp
PATH の設定
最後にquartusをコマンドラインから実行できる様に、 PATH
環境変数を設定します。複数回実行した場合に同じ内容が何度も .bashrc
に追記されない様に、lineinfileを使って設定しています。
- name: set up PATH
lineinfile:
path: /home/vagrant/.bashrc
regexp: '^export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'
line: 'export PATH=$PATH:/home/vagrant/intelFPGA_lite/17.1/quartus/bin/'
ホストファイル
最後に host
を設定します。ここでは vagrantで作った仮想マシンにアクセスするためのIPアドレスである 192.168.33.10
(Vagrantfile
でプライベートネットワークのIPアドレスとして指定したもの)を設定します。
[vagrant]
192.168.33.10