2016年5月18日 星期三

使用 preseed 自動安裝 Linux

我們一般安裝 Linux 的方式是一台一台裝,如果遇上大量佈建系統環境的情況,舉例來說,我們要裝 20 台 Linux 主機,那麼一台一台裝可能會非常辛苦。在這種情況下,Debian 提供了一種安裝系統的方式,稱為 preseed,其官方文件在:

https://wiki.debian.org/DebianInstaller/Preseed

這種安裝方式是透過一個預先作好的設定檔,檔案為 preseed.cfg (可自定檔案),裡面針對所需要的系統配置來定義要如何分割硬碟、安裝那些套件、root 密碼定義、一般使用者帳號、密碼定義,以及預設鏡像站 .. 等皆可設定在 pressed.cfg 中。

請至上課用 ftp 站下載預先建立好的 preseed.cfg,放在
http://192.168.10.254/preseed.cfg
用瀏灠器觀看其內容,看看是否有讀取的權限。

安裝

請修改 buildlinux1.sh 至 buildlinux2.sh,並將 boot d 改為 boot n,使用網路開機,在開機選單中按 TAB,加上底下設定:

auto=true url=http://192.168.10.254/preseed.cfg


然後按 Enter,看看系統會不會自動安裝。


這種手動安裝方式比較麻煩,還要在開機時按 TAB 進入開機選單編輯,如果要作全自動的安裝,請在 pxe server 底下的

/srv/tftp/debian-installer/amd64/boot-screens/txt.cfg 中將

append vga=788 initrd=debian-installer/amd64/initrd.gz --- quiet

改成

append vga=788 initrd=debian-installer/amd64/initrd.gz --- quiet auto=true priority=critical url=http://192.168.10.254/preseed.cfg

然後再重新啟動 buildlinux2.sh 試試看。



==========================================================================
假設要安裝 10 GB 之虛擬 Linux,其硬碟規畫如下:

/dev/sda1       /       ext4    2G
/dev/sda2       /usr    ext4    2.5G
/dev/sda3       swap    swap    2G
/dev/sda4       /home   xfs     *

其 preseed 語法如下:

d-i partman-auto/expert_recipe string
      boot-root ::
              2048 2100 4096 ext4
                      $primary{ } $bootable{ }
                      method{ format } format{ }
                      use_filesystem{ } filesystem{ ext4 }
                      mountpoint{ / }
              .
              2048 3000 4096 ext4
                      method{ format } format{ }
                      use_filesystem{ } filesystem{ ext4 }
                      mountpoint{ /usr }
              .
              1024 1500 300% linux-swap
                      method{ swap } format{ }

              .
              100000 1000000000 -1 xfs
                      method{ format } format{ }
                      use_filesystem{ } filesystem{ xfs }
                      mountpoint{ /home }

2016年5月16日 星期一

CIC IC 競賽元件庫安裝

請先完成

Synopsys Design Compiler/Synthesis 之安裝


再執行此部份流程。

Cell Library 標準元件庫是 Cell Base 流程的基礎,也是編譯 RTL 碼不可或缺的重要元素,所謂的標準元件庫是指由 AND、OR、NOT、XOR、FlipFlops .. 等構成的元件庫,這些元件可以用來組合成「所有」的數位電路。

由於 Cell Library 為各 EDA 大廠的智慧財產權,沒有申請前無法下載、使用商業版的 Cell Library,只能使用 CIC 所提供的 IC 競賽元件庫,底下介紹流程。

下載

CBDK_IC_Contest_v2.1.tar


解壓縮

請解壓縮至 /opt/PROCESS 目錄下

tar xfva CBDK_IC_Contest_v2.1.tar -C /opt/PROCESS

此時會出現底下目錄

/opt/PROCESS/CBDK_IC_Contest_v2.1/SynopsysDC

裡面有兩個子目錄,分別是 db 及 lib 目錄。

設定

請在 DC 的選單中執行:

File -> Setup

此時會出現 Setup 視窗,請在此視窗設定三個參數,分別如下:


Link Library

/opt/PROCESS/CBDK_IC_Contest_v2.1/SynopsysDC/db/fast.db


Target Library

/opt/PROCESS/CBDK_IC_Contest_v2.1/SynopsysDC/db/fast.db


Symbol Library

/opt/EDA/synthesis/cur/libraries/syn/class.sdb

並且將其它元件庫刪掉。

編譯:

如果一切都沒問題的話,我們可以執行編譯的流程,在編譯前請選 Logical Hierarchy 視窗中的 half_adder,並看其 Schematic (圖示在上方),我們會發現電路目前是一個十字符號。接著請執行選單:

Design -> Compile Design

此時會出現一個視窗作微調,在此我們不作任何微調,直接點選 OK 按鍵。點選 OK,Design Compiler 會自動進行電路編譯,並作最佳化,作完之後再點選 Schematic 即可看到編譯完之電路,理論上應該是最精簡的電路。編譯完之電路請選

File -> Save As 將編譯完之後的電路存為 ha_compile.v,其內容如下:


/////////////////////////////////////////////////////////////
// Created by: Synopsys DC Expert(TM) in wire load mode
// Version   : K-2015.06-SP5
// Date      : Tue May 17 11:08:48 2016
/////////////////////////////////////////////////////////////


module half_adder ( x, y, Sum, Cout );
  input x, y;
  output Sum, Cout;


  XOR2X1 U3 ( .A(y), .B(x), .Y(Sum) );
  AND2X1 U4 ( .A(y), .B(x), .Y(Cout) );
endmodule


我們可以很明顯的看出此段程式是由 Design Complier 所編譯出來,它使用到的 AND 及 XOR 閘的名稱分別是 AND2X1 以及 XOR2X1,這不是基本 Verilog 閘,所以如果我們使用 cver 來編譯這檔案,會出現底下錯誤:

cver ha_compile.v
GPLCVER_2.12a of 05/16/07 (Linux-elf).
Copyright (c) 1991-2007 Pragmatic C Software Corp.
  All Rights reserved.  Licensed under the GNU General Public License (GPL).
  See the 'COPYING' file for details.  NO WARRANTY provided.
Today is Tue May 17 11:32:39 2016.
Compiling source file "ha_compile.v"
Unresolved modules or udps:
  XOR2X1
  AND2X1

  2 modules or udps unresolved after library processing - cannot continue.
  Unable to begin simulation.
End of GPLCVER_2.12a at Tue May 17 11:32:39 2016 (elapsed 0.0 seconds).

這兩個錯誤的意思是 XOR2X1 及 AND2X1 是找不到的電路模組,要解決這個問題,我們還是要來看 CIC 所提供的元件庫,在

/opt/PROCESS/CBDK_IC_Contest_v2.1/Verilog/tsmc13.v 中可以看到其中有 AND2X1 及 XOR2X1 之定義。因此我們可以將此檔複製過來我們跑模擬的目錄,再執行:
cver ha_compile.v tsmc13.v

此時應該不會有任何錯誤。

最後我們再加上 testfixture 檔,看看能不能跑波型出來:

cver ha_compile.v tsmc13.v test_ha.v

此時一樣會生出新的 testha.dmp,並且可以使用 gtkwave 觀察出波形,我們可以看到這邊的波形是有輸入 -> 輸出 延遲的。

到這邊為止,我們已經完成 Design Compiler 編譯 RTL 碼至 Gate Level 碼的流程,並又使用 cver 來重新驗證所跑出來的 Gate Level 碼是否能正確模擬出波形來。

Synopsys Design Compiler/Synthesis 之安裝

Design Compiler/Synthesis 的目的是用來編譯 (Compile) 硬體描述語言所寫出來的電路,將 RTL 碼轉成 Gate Level 碼,以便進行電路合成 (Synthesis) 用。


下載:

請至 CIC 網頁下載

synthesis_2016.03_linux.tgz
lc_2015.06-sp3_linux.tgz
mvtools_2014.12-sp1_linux.tgz
DFT-Compiler.zip
Design-Compiler.zip
Power-Compiler.zip
installation_guide_synopsys.txt

解壓縮

請將 synthesis_2016.03_linux.tgz 解開至 /opt/EDA 目錄中,此時會出現

/opt/EDA/synthesis/cur 目錄

設定

請在 ~/.bashrc 中設定底下內容:

DC_bin="/opt/EDA/synthesis/cur/bin"

export PATH=$PATH:$DC_bin

執行

一開始執行 dc_shell 時,會出現底下錯誤:

$ dc_shell
/opt/EDA/synthesis/cur/linux64/syn/bin/common_shell_exec: error while loading shared libraries: libtiff.so.3: cannot open shared object file: No such file or directory


這個問題是因為它綁了一個很舊的函式庫叫 libtiff.so.3,如果到 /usr/lib 底下尋找的話,會發現最舊的版本是 libtiff.so.4,如底下所示:

/usr/lib$ find ./ -name libtiff.so*
./x86_64-linux-gnu/libtiff.so.5
./x86_64-linux-gnu/libtiff.so.5.2.0
./x86_64-linux-gnu/libtiff.so.4.3.6
./x86_64-linux-gnu/libtiff.so.4
./i386-linux-gnu/libtiff.so.5
./i386-linux-gnu/libtiff.so.5.2.0

我們使用鋸箭法來解決這個問題,請以 root 權限 至 /usr/lib/x86_64-linux-gnu/ 下建立一個 libtiff.so.3 的連結,指令如下:

cd /usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu # ln -s libtiff.so.4.3.6 libtiff.so.3

此時看到有一個 libtiff.so.3 的連結,之後再執行:

$ dc_shell -gui

看看可否正常執行。

測試

從 Design Compiler 的 GUI 畫面中載入 ha_rtl.v 看看能不能看到電路模組 ?

接下來請參考
 
CIC IC 競賽元件庫安裝

2016年5月11日 星期三

安裝、架設 DNS 伺服器

2019/10/21 修訂

參考資料:

http://www.l-penguin.idv.tw/article/dns.htm
http://www.twbsd.org/cht/book/ch22.htm

定義:

網域為:my.com,192.168.10.0/24
閘道 IP:192.168.10.1
PXE 伺服器 IP:192.168.10.254 -> pxe.my.com
其它每台主機的名稱為:

192.168.10.1 -> host1.my.com, gateway.my.com
192.168.10.2 -> host2.my.com
..
192.168.10.254 -> host254.my.com, pxe.my.com, dns.my.com

安裝 DNS 伺服器

# apt-get install bind9

設定 DNS 伺服器

主要設定檔位置:/etc/bind/named.conf -> 此檔應該不必修改,要修改的是所參考到的檔案。

/etc/bind/named.conf.default-zones 新增底下片段:

zone "my.com" IN {
        type master;
        file "/etc/bind/db-my.com";
        allow-update { none; };
};

接著編輯 /etc/bind/db-my.com 這個檔案,其內容如下:

$TTL          86400
$ORIGIN my.com.
@          1D IN SOA                    @ root.my.com. (
                                        2015041601          ; 修改序號
                                        3H                  ; refresh
                                        15M                 ; retry
                                        1W                  ; expiry
                                        1D )                ; minimum

@                   IN NS         dns.my.com.
dns.my.com.  IN A          192.168.10.254

;設定 MX record
;@              IN MX 10      ms1
;@              IN MX 20      ms2
;ms1            IN A          11.22.33.69
;ms2            IN A          11.22.33.70

;www            10 IN A       11.22.33.85     ;www 做 load balancing
;www            10 IN A       11.22.33.86     ;www 做 load balancing
;web            IN CNAME      www             ;讓 web.abc.com.tw 也指到 www
gateway         IN A     192.168.10.1;
pxe             IN A     192.168.10.254;
host1           IN A     192.168.10.1;
host2           IN A     192.168.10.2;
host3           IN A     192.168.10.3;
..
host254         IN A     192.168.10.254;

設定好之後請重啟 bind9

# systemctl restart bind9.service
# systemctl status bind9.service

並修改 /etc/resolv.conf 之內容如下:

search my.com
nameserver 192.168.10.254

再看看是否能順利進行正解:

nslookup host1.my.com

此時如果進行反解查詢,應該是找不到資料(因為我們還未設定)。

接下來要進行反解設定,請先在 /etc/bind/named.conf.default-zones 這個檔案中再
新增底下片段:

zone "10.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/db-192.168.10";
};

其中 10.168.192.in-addr.arpa 是設定 192.168.10.X 這個網段的資料,而

/etc/bind/db-192.168.10 這個檔案則是設定反查之紀錄,其內容如下:
;BIND reverse data file for empty rfc1918 zone
;
; DO NOT EDIT THIS FILE - it is used for multiple zones.
; Instead, copy it, edit named.conf, and use that copy.
;
$TTL    86400
@       IN      SOA     my.com. root.my.com. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
;@      IN      NS      dns.my.com.
        IN      NS      my.com.
1         IN PTR        gateway.my.com.
254       IN PTR        dns.my.com.
254       IN PTR        pxe.my.com.
1         IN PTR        host1.my.com.
2         IN PTR        host2.my.com.
3         IN PTR        host3.my.com.
4         IN PTR        host4.my.com.
..
254       IN PTR        host254.my.com.

設定完之後請再次重啟 bind9,並作正、反解查詢,如果沒有設定錯誤的話,現在
應該可以順利的進行正反解。

接著,我們來看看此 DNS 設定是否能查詢到外界網域,請執行:

nslookup www.google.com

理論上應該沒有問題,因為 dns 預設會往上查詢網路上已存在之正、反解資料。


設定 bind 只查 IPV4

# vi /etc/default/bind9
將 OPTIONS 改成底設定:

OPTIONS="-4 -u bind"

然後再重新啟動 /etc/init.d/bind9