故事是這個樣子的,說到 Linux 作業系統,現下市佔率最高的當然是 Ubuntu 了,無論從體驗、安裝的難易度、
參考文件、社群支援、更新穩定性來看,ubuntu 都是 Linux 的首選。
但是如果你是做硬體的,上面這段話就不適用了,由於商用作業系統的支援,大多數的 EDA 軟體選擇的都是 RedHat 系列的,
包括 RedHat Enterprise Linux (RHEL) 或是開源版本的 CentOS。
過去我們很常做的,就是買台新的主機,在上面只灌 CentOS 與 EDA 軟體連線使用,白白浪費了一台主機。
時至今日,我們有個更簡單的解決方案:透過 Docker 直接在 Ubuntu 環境中建立一個支援的作業系統的容器,
並在其中安裝各種 EDA 軟體。
這樣就能避掉 EDA 軟體在 Ubuntu 上支援不佳的問題,又能保有日常使用 Ubuntu 的可能性,不用白白犧牲一台電腦。
這篇文章就是個人完成這些步驟的流程記錄,讓你在 Ubuntu 上無痛啟動 RockyLinux 並安裝 EDA 工具。
為什麼不用 Ubuntu 執行 EDA?
目前我的經驗只試過兩個:Synopsys VCS 跟 Synopsys Design Compiler,在 Ubuntu 上安裝,大概可以分成兩點:
- 套件支援:有些 EDA 軟體依賴的函式庫,因為 Ubutnu apt 和 RHEL yum 的套件管理系統不同,在 Ubuntu 上安裝需要費一番工夫去找到正確的套件。
- 動態函式庫相容性,相比上一項這項更麻煩,Synopsys Design Compiler 需要的 glibc 是 RHEL 特別的版本, 和 Ubuntu 較新的不相容,執行時會遇上 GLIBC_PRIVATE 的錯誤:
/lib/x86_64-linux-gnu/libpthread.so.0: version `GLIBC_PRIVATE’ not found
第一點只是麻煩,下面會看到就算是 RHEL 也要自己慢慢用 yum, dnf 去找套件,沒差太多。
第二點真的就是硬傷,網路上唯一找到的解法
,
是自行編譯並安裝 glibc 2.31 版,再使用 patchelf 更改執行檔的 rpath,讓它改用 glibc 2.31 的 ld-linux 及動態函式庫。
不是無解,但這個解也太複雜太折騰人了。
使用 Docker 執行 Rocky Linux
目前 EDA 軟體推薦的作業系統有下面幾個:
- RHEL 8.4 以上
- CentOS 7 以上
- Rocky Linux
由於 CentOS 8 在 2021 年底停止維護,RedHat 推動 CentOS Stream 作為滾動更新版, 這與傳統的穩定版本 CentOS 7 存在較大差異,因此這次選用 CentOS 8 停止維護後誕生的 Rocky Linux 作為安裝對象。
至於安裝步驟,這種現在都問 ChatGPT 就好了,以下是提問:
請就你所知道步驟,整理如何在 ubuntu 上安裝 RockyLinux,並將 EDA 軟體的安裝檔放到 docker 中進行安裝。
步驟 1:安裝 Docker
如果你的 Ubuntu 還沒有安裝 Docker,可以執行以下指令來安裝:
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 讓當前使用者不需要 sudo 就能執行 docker
newgrp docker # 立即生效
確認安裝成功:
docker --version
步驟 2:拉取 Rocky Linux Docker 映像
Rocky Linux 提供官方的 Docker 映像,可以直接下載(這裡以 Rocky Linux 9 為例):
docker pull rockylinux:9
確認映像是否下載成功:
docker images
步驟 3:建立並啟動 Rocky 容器
docker run -it --name rocky_eda -v $HOME/eda_files:/mnt/eda rockylinux:9 /bin/bash
這樣做的好處:
- -it:讓你可以與容器內部互動
- –name rocky_eda:給容器取個名字
- -v $HOME/eda_files:/mnt/eda:把本機的 ~/eda_files 目錄掛載到容器內 /mnt/eda,方便放入安裝檔
步驟 4:安裝必要工具
進入容器後,執行:
dnf update -y
dnf install -y epel-release
dnf install -y wget vim tar xauth
如果 EDA 需要 GUI 界面,安裝以下工具:
dnf groupinstall -y "Server with GUI"
dnf install -y xorg-x11-xauth xorg-x11-fonts-* xterm
步驟 5:將 EDA 軟體安裝檔放入容器
回到 Ubuntu 主機,把 EDA 軟體的安裝檔放到剛剛掛載的資料夾(~/eda_files):
cp /path/to/EDA_installer.tar.gz ~/eda_files/
然後回到 Rocky 容器內,你應該可以在 /mnt/eda 目錄內找到安裝檔:
ls /mnt/eda
步驟 6:解壓並安裝 EDA 軟體
這步原本的內容是唬爛的,請大家自行進行安裝。
以下是我這次安裝 vcs 與 design compiler 後,在執行時發現必須安裝的執行檔與函式庫:
dnf install csh
dnf install libXi libXrandr libGL libXcomposite
dnf install libpulse-libs-devel
dnf install graphite2
dnf install bc
dnf install iputils telnet # 測試 license server 使用
dnf install gcc g++
dnf install glibc.i686 # EDA 軟體需要 32 bits 函式庫
dnf install elfutils-libelf.i686
其中 libpulse-libs-devel 顯示需要的函式褲為 libpulse-mainloop-glib.so.0,費了一番工夫才找到這個函式庫。
步驟 7:設定 GUI(選擇性)
如果需要 GUI,請在 Ubuntu 主機上安裝 xhost,然後允許 X11 轉發:
xhost +local:
接著在啟動容器時,啟用 X11 轉發(假設 $DISPLAY 為 :0):
docker run -it --name rocky_eda -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix rockylinux:9 /bin/bash
步驟 8:保存與啟動容器
安裝完成後,你可以退出容器:
exit
然後將其保存為新的映像:
docker commit rocky_eda rocky_eda_image
下次要使用時,直接啟動容器:
docker run -it --rm --name rocky_eda -v $HOME/eda_files:/mnt/eda rocky_eda_image /bin/bash
執行
ChatGPT 提供的回答,基本上都沒什麼問題,照做即可,以下是一些額外的除錯與設定:
udev_monitor_receive_device realloc crash
design compiler 在虛擬機內執行,會導致 libudev 呼叫 realloc 時 crash,相關的錯誤訊息可以找到的參考資料包括:
參照 systemd 的相關討論,目前有兩個解法
- 在執行前設定 LD_PRELOAD=/lib64/libudev.so.1
- 設定使用 read-only mode 掛載 /sys
兩個我試過都能解決問題,目前我是使用第二種,請見下面的 eda.sh。
eda.sh
因為我們安裝了一卡車的檔案,所以最後一步在 commit image 的時候會花上一段時間,最後會弄出一個 83.8 GB 的 image。
如果安裝更多的 EDA 軟體想必尺寸會更往上衝,不過受惠於 docker 強大的設計,即使是這麼大顆的 image,也是一秒鐘就能完成啟動並開始工作。
另外為了簡化工作流程,可以另外寫一個 eda.sh 執行 docker 指令。目前的結果是 vcs 與 design compiler 都能正常執行,打開 design compiler 的圖形介面也沒問題。
# eda.sh
# /etc/hosts/is ephemeral, add the license server
# -v /sys:/sys:ro required by design compiler, otherwise udev will crash
xhost +local:
docker run -it --rm \
--name rocky_eda \
-e DISPLAY=$DISPLAY \
--add-host licenseserver:1.1.1.1 \
-v /sys:/sys:ro \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/eda_files:/mnt/eda \
rocky_eda_image \
/bin/tcsh
結論
我們使用 docker 在 Ubuntu 內安裝 Rocky Linux,並在其中執行 Synopsys 的 VCS 與 Design Compiler。
目前的測試情況,VCS 能正確生成 simv 檔並進行模擬;Design Compiler 則還沒測試過。
如果真的有需要,再來看看能不能安裝更多工具如 INNOVUS, Verdi 等,如果有測試過再更新在這裡。