發表文章

精選文章

Linux 操作不求人系列 - 貳章之壹 - Shell Script 程式設計(I) - BASH

圖片
     本章開始進入Shell Scripts的程式設計,因為Linux Shell的種類相當多,故筆者僅挑選預設的Bash Shell 及 學術界常會使用的 C Shell (/bin/tcsh )來說明與對照,在此先說明。至於 Scripts 的概念,在前章就已經說明過,可視為前壹章的各項指令之組合,在令其在執行檔案裡,依序執行,如前章所看到的 /etc/profile 檔案,在其他軟體上,有點類似巨集(macro)的執行檔,或是MS Windows的批次檔(Batch)。先建立此概念後,我們可以先在Terminal的命令提示字元,使用 for 指令,如圖2-1,在 shell scripts 內為了重複做一件事,而僅修改某些變數值,我們會利用所謂的迴圈(loop)方式來完成,而 bash shell 內常用的是 for 或是 tcsh/csh shell 內的 foreach。



























(圖2-1)


     圖 2-1第一個指令輸入 for 的宣告,後面接著 seq 為變數名稱,為了逐次接收 in 後面之陣列值(http://www.gnu.org/software/bash/manual/html_node/Arrays.html)(註:若加了 ; 則 do 便可寫在同一行),接著 > 的提示字元的等待輸入,便是還沒遇到 done 指令來結束 do 的動作,控制此提示字元的環境變數為 PS2。,此例的 seq 值,依序為第一次讀入 first 字串並存入變數 seq 當其值,接著second、third,從 echo $seq 可以看出,接著設定一個變數 file 其值為 my開頭字串,緊接變數值 $seq(first、second、third),再接固定的 script.sh 字串,接著利用echo指令,印出變數值$file,檢查是不是我們預期的字串值(註:如果想要暫停,讓使用者可以看清楚再繼續,可以加上指令sleep 3,表示畫面停止三秒鐘),接著利用 touch 指令產生 $file 字串值的檔案,再將其利用 chmod 指令,u+x 參數為令僅創立此檔的使用者帳號可執行(若要改為同群組可執行,參數需改為 g+x)。故可看到第二個指令輸入 ls,便列出自動批次產生的shell執行檔了。
     以上其實就是 Shell Script 的程式設計之…

伍章之陸 - Intel PXE 與利用tftp + anaconda 來kickstart自動部署系統

圖片
     現代的個人電腦與筆電爲了節能省碳,往往皆省略了光碟機的設置。雖然說 USB隨身碟亦可應用於安裝作業系統,但若遇到機房的大量機器需安裝之問題,亦不適合此種用光碟片或隨身碟逐臺安裝的方式,或是需準備多片光碟或隨身碟。故爲了大量安裝與部屬 Linux作業系統的機器,我們便可透過具有PXE功能之網路卡(https://en.wikipedia.org/wiki/Preboot_Execution_Environment),其所具備的網路開機的能力,來作透過網路方式來安裝與大量部署 CentOS Linux作業系統
首先,我們一樣透過 yum來安裝所需的 tftp伺服器軟體(http://www.jounin.net/tftpd32.html),利用PXE支援 tftp 透過 udp 埠號 69連線,來提供檔案的能力,給利用 PXE開機後安裝作業係土的機器,圖5-60






































(圖5-60)


接著修改 tftp 設定檔 /etc/xinetd.d/tftp,如圖5-61,請記得 disable 要改為 no


(圖5-61)

     若要修改 server_args 參數為自訂的 tftp root 路徑,記得要變更 SELinux 的權限設定,如要改為/tftpboot,則使用指令 chcon 來調整,如以下:
$ mkdir /tftpboot
$ chcon  --reference /var/lib/tftpboot  /tftpboot

接著將 xinetd 與 tftp 加入開機啟動,並重啟動 xinetd,如下:
$ chkconfig  --level  235  xinetd on
$ chkconfig  --level  235  tftp  on
$ service xinetd restart

開放防火牆通行
$ iptables -A INPUT -p udp --dport 69 -j ACCEPT
$ service iptables restart 

開放 tcp wrapper 設定,更改 /etc/hosts.allow (以為只有udp,常忘記此設定要改,要注意)
in.tftpd:*  # * 為設定您要開放的IP或網域
xinetd:*    # * 為設定您要開放的IP或網域

其他安全性問題,可參考tftp 說明檔,位置在 /usr/shar…

Linux操作不求人 - 伍章之壹 - Generic Mapping Tools (GMT) 繪圖於 Linux 環境下

圖片
      本篇的GMT(Generic Mapping Tool,http://gmt.soest.hawaii.edu/)是地球科學學術領域相當常見的地圖繪圖工具,並非常看到的格林威治時間(GMT +8)。GMT科學繪圖軟體(以下簡稱gmt),在很多地球科學相關的科學文件內圖片,可常見到他繪圖的身影。當然有很多套裝軟體亦可達到相同的目的,如 MathWorks 的 MATLAB (https://www.mathworks.com/products/matlab.html)或是 HARRIS 的 IDL(http://www.harrisgeospatial.com/ProductsandSolutions/GeospatialProducts/IDL.aspx) 也是相當常見的,或是使用esri ArcGIS等相關繪製地圖的軟體,但這些軟體若要安裝在所有電腦,應當所費不貲。故口袋不深的研究人員,皆偏好 Open Source 的繪圖軟體,可能是 Python (http://matplotlib.org/basemap/)或是 R 環境內使用繪圖Library或免費的GIS軟體,如OpenStreetMap、Quantum GIS(QGIS)來製作。但筆者僅想透過本篇,介紹筆者在研究生時期曾經做過的 gmt 繪圖,以期能對地球科學研究的同好有些許幫助。
    首先,我們先回想第二章的 bash 或 csh 所撰寫的 Shell Scripts 方法,接下來所要展示的 gmt 繪圖指令,皆會透過 Shell Scripts 的撰寫方式帶入,來畫出 PS (PostScript,http://www.adobe.com/products/postscript/,往後簡稱 ps )格式的向量型圖檔,在 Linux 環境內,可用 Ghostscript 或Ghostview (hhttp://pages.cs.wisc.edu/~ghost/,http://www.ghostscript.com/download/gsdnld.html)來觀看圖。地形深度與高度網格數值檔 ETOPO,皆可透過 NOAA(https://www.ngdc.noaa.gov/mgg/global/global.html)下載,在此先感謝這些研究單位無私地提供資料,與這些 Open S…

Linux操作不求人 - 肆章之拾 - 伺服器架設(IX) - 帳號目錄與網域名稱伺服器 - LDAP 與 DNS

圖片
     LDAP(Lightweight Directory Access Protocol,https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol)通常用於跨作業平台間的使用者資料認證,透過TCP/IP的協議方式,便可以維護與登錄同一份帳號密碼跟使用者登錄的資訊,每個使用者用DN(distinguished name)來區別,DN內容包含如email,地址與電話,猶如商業登錄使用的黃頁簿電子版。關於LDAP 的屬性參數,可參考http://www.zytrax.com/books/ldap/ape/ 與 https://www.ldap.com/understanding-ldap-schema。筆者幾年前在安裝 Shibboleth(https://shibboleth.net/about/) 作為全球圖書館藏SSO(Single Sign On)的登入媒介時,就需先安裝LDAP的伺服器認證登入方式。在CentOS6_x64下,便是利用OpenLDAP(http://www.openldap.org/)來達到分享目錄的方式。同樣的,我們利用 yum install -y openldap-*,來下載 OpenLDAP 套件:
























(圖4-82)

接著利用以下指令複製設定檔至 /var/lib/ldap,並變更檔案擁有者與擁有群組皆為 ldap
$ cp /usr/share/openldap-server/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
$ chown ldap:ldap /var/lib/ldap/DB_CONFIG 

接著利用以下指令,產生用來做資料加密的金鑰,再利用ssl做成用RSA加密的金鑰,接著再由此金鑰產生憑證。如圖4-83
$ /etc/pki/tls/certs
$ make ldap.key
$ openssl rsa -in ldap.key -out ldap.key
$ make ldap.csr
$ openssl x509 -in ldap.csr -out ldap.crt -req -signkey ldap.key -days 3650
/*  同樣產生十年的私鑰來使用 */

$ chmod 400 ldap.*

Linux操作不求人 - 肆章之捌 - 伺服器架設(VIII) - 虛擬私有網路伺服器 - VPN 與 PPPoE

圖片
@VPN
     VPN (Virtual Private Network,https://en.wikipedia.org/wiki/Virtual_private_network),為於公司網域內建立一個私人的路由通道,可以在網際網路上透過登入VPN tunnel 的方式,來存取公司的內部網路,使用內部網站與網路資源。Tor(The Onion Routers,https://www.torproject.org/ )的方式,便是一種多層式 VPN 加密通道的應用。通常 VPN 的服務可以在防火牆、路由器、無線AP(如Juniper,Fortinet,Linksys,CISCO等網路設備公司)的設定,都可以看到設定 VPN Server 與搭配網路設備公司各自撰寫的 VPN Client,便可以將作業系統整個網路環境換成公司內部網路的 domain,而非利用 Tor browser 或是 Google Chrome plugin - VPN 此種則僅將瀏覽器視窗環境改成 VPN 的 domain,則可以用來〝翻牆〞,或用來網購國外特價的潮牌或名牌物品。在CentOS6_x64下,則有 OpenVPN 伺服器軟體可供架設 VPN Server。同樣的,我們利用指令 yum -y install openvpn 來下載。(圖4-71)



































(圖4-71)

接著複製 openvpn 範例檔案,來成為我們要使用的設定檔,如圖4-72,並利用指令 vim /etc/server.conf 修改內容:





 (圖4-72)

    筆者以下僅將要修改的參數列出,其餘維持預設值即可:
local   10.0.2.15 
port   1194
ca     /etc/openvpn/myca.crt
cert  /etc/openvpn/myvpn.crt
key   /etc/openvpn/myvpn.key
/*   自行派發的伺服器主機憑證與金鑰   */

dh   /etc/openvpn/myvpndh.pem
/*   VPN 所需要的 Diffie hellman 交換方法的金鑰檔,https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange  */ 

tls-auth  mytls.key  0  

Linux操作不求人 - 肆章之柒 - 伺服器架設(VII) - 代理與動態主機設定伺服器 - Proxy 與 DHCP/NAT-DHCP

圖片
     代理伺服器(以下簡稱 Proxy,https://en.wikipedia.org/wiki/Proxy_server)是在網際網路中,瀏覽網頁常用的加速方式,而透過代理伺服器,您的上網位置,也可以暫被識別成代理伺服器的 IP位址,如圖4-63-1,若 Client 1 設定 Proxy Server,並要存取Internet的資料時,則會先詢問Proxy Server是否已有該網站資料供快取(Cache),若有,則直接給Client 1資料,若無,則由Proxy Server去先該網站存取資料,再傳遞給Client 1,所以若有設定 Proxy 的瀏覽器存取網際網路的網站有錯誤時,記得要檢查Proxy Server是否有成功運作,或是取消設定 Proxy Server 來排除。而在 CentOS6_x64 內的 Proxy伺服器軟體,則是以 squid ( http://www.squid-cache.org/ )最為普遍,但其實架設網站的 Apache 與 Nginx 伺服器軟體,也具有 Proxy 的功能模組可用。但筆者本篇主要介紹 squid 伺服器軟體的架設方式,且 squid 亦有 MS Windows 的版本,可在 MS Windows 下運作 Proxy 的服務。在CentOS6_x64下,同樣的利用 yum -y install squid 來下載,如圖4-63-2























(圖4-63-1)
































(圖4-63-2)

接著編輯設定檔 /etc/squid/squid.conf,相信讀者應該也習慣每個伺服器軟體大致放置的設定檔位置與規則。squid 的設定檔內容相當少,筆者將其列於圖4-64-1與4-64-2,並僅將須修改之處列出如下:

acl my_network src 192.168.100.0/24
acl my_network src 10.0.2.0/24
/*  設定允許存取來源的網域,亦可以設定可存取目的的網域,將 src 改為 dst,若用網域來限制,則換為  srcdomain 與 dstdomain 如 acl my_domain srcdomain  .linux.com  */

# acl  safe_ports  port  70
# acl  safe_ports  port  210
# acl  safe_ports  por…