2010/08/22

X11, GTK, QT

X11:X Window System Protocol Version 11。
X server 與 X client 間的通訊協定。
X server 是在 xfree86/xorg 驅動下顯示:滑鼠、鍵盤、設備等的通稱。
X client 通过 X11 協定與 xfree86/xorg 實做的 X server 通訊。
例如 X client 告訴 X server 畫一個左上角坐標(x,y),寬 w,高 h 的視窗,
xfree86 就把螢幕上的小燈(像素)打亮,然後你就看到了一個要求的視窗。

為了方便開發人員編寫 X clients,就有了 Xlib 來封裝 X11 協定;
Xlib 不够方便,又有了 QT(Q Toolkit)與 GTK(GIMP ToolKit),提供了很多視窗元件(widgets)。

為了方便使用者,於是出现了 GNOME 和 KDE 等『桌面管理系统』。
GNOME 使用的是 GTK 函式庫。
KDE 使用的是 QT 函式庫。

Reference:
01. http://blog.chinaunix.net/u2/78601/showart_1918209.html

2010/08/21

我的 Plurk 設定

body, html
{
font-family:LiHeiPro !important; 微軟正黑體;
font-size:13px !important;
}

.text_holder
{
font-family:LiHeiPro !important; 微軟正黑體;
font-size:13px !important;
line-height:16px;
}

#author
{
/* http://www.plurk.com/medicalwei */
}

#timeline_holder div.plurk
{
-webkit-transition: top 0.5s ease,-webkit-transform 0.5s ease;
-webkit-transform: rotate(5deg);
-webkit-transform-origin: 0 0;
}

#timeline_holder div.plurk .dots
{
position: absolute;
left: -1000em;
}

#timeline_holder div.plurk .td_img
{
opacity: 0;
-webkit-transition: opacity 0.5s ease;
}

#timeline_holder div.link_extend,
#timeline_holder div.plurk_box
{
-webkit-transition: -webkit-transform 0.5s ease;
-webkit-transform-origin: 0 0;
-webkit-transform: rotate(0deg);
}

#timeline_holder div.link_extend .td_img,
#timeline_holder div.plurk_box .td_img
{
opacity: 1;
-webkit-transition: opacity 0.5s ease;
}

::-webkit-scrollbar
{
background: #ccc;
width: 10px;
}

::-webkit-scrollbar-thumb
{
background: #999;
border-radius: 10px;
}

::-webkit-scrollbar-thumb:hover
{
background: #666;
border-radius: 10px;
}

.response_time
{
-webkit-transform:rotate(5deg);
-webkit-transform-origin: 0 0;
margin-left:-10px;
-webkit-box-shadow: 0.1px 2px 5px rgba(0,0,0,0.5);
border-radius: 5px;
border: none;
opacity: 0.5;
-webkit-transition: opacity 0.2s ease;
}

.response_time:hover
{
opacity: 1;
-webkit-transition: opacity 0.2s ease;
}

#timeline_holder .plurk_cnt
{
-webkit-box-shadow: 0.2px 4px 8px rgba(0,0,0,0.4);
border-radius: 5px;
-webkit-transition: -webkit-box-shadow 0.5s ease, background 0.5s ease;
border: none;
background: rgba(255,255,255,0.5) !important;
}

#timeline_holder div.link_extend .plurk_cnt,
#timeline_holder div.plurk_box .plurk_cnt
{
-webkit-box-shadow: 0 4px 24px rgba(0,0,0,0.2);
-webkit-transition: -webkit-box-shadow 0.2s ease, background 0.5s ease;
background: rgba(255,255,255,0.8) !important;
}

#timeline_holder div.plurk_box .plurk_cnt
{
border-radius: 5px 5px 0 0;
-webkit-transition: background 0.5s ease;
background: rgba(255,255,255,1) !important;
}

#form_holder div.list
{
-webkit-transition: height 0.5s ease;
}

2010/08/19

我的 Chrome 必備套件

Essential Extensions for Chrome

Cooliris
https://chrome.google.com/extensions/detail/noocneohefmdhonidldnlhaainpiomkp

Feedly
https://chrome.google.com/extensions/detail/ndhinffkekpekljifjkkkkkhopnjodja

Last.fm Free Music Player
https://chrome.google.com/extensions/detail/bbncpldmanoknoahidbgmkgobgmhnafh

Awesome Screenshot
https://chrome.google.com/extensions/detail/alelhddbbhepgpmgidjdcjakblofbmce

Image Zoom
https://chrome.google.com/extensions/detail/nonjdcjchghhkdoolnlbekcfllmednbl

Chrmoe Sniffer
https://chrome.google.com/extensions/detail/homgcnaoacgigpkkljjjekpignblkeae

CSSViewer
https://chrome.google.com/extensions/detail/ggfgijbpiheegefliciemofobhmofgce

Regular Expression Checker
https://chrome.google.com/extensions/detail/pgnkpcgniljiolidjmodgfljeomjjiha

XML Tree
https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadb

JSON Tree
https://chrome.google.com/extensions/detail/chklaanhfefbnpoihckbnefhakgolnmc

Resolution Test
https://chrome.google.com/extensions/detail/idhfcdbheobinplaamokffboaccidbal

Google Calendar Checker
https://chrome.google.com/extensions/detail/ookhcbgokankfmjafalglpofmolfopek

Google Mail Checker Plus
https://chrome.google.com/extensions/detail/gffjhibehnempbkeheiccaincokdjbfe

Google Dictionary
https://chrome.google.com/extensions/detail/mgijmajocgfcbeboacabfgobmjgjcoja

Google URL Shortener
https://chrome.google.com/extensions/detail/iblijlcdoidgdpfknkckljiocdbnlagk

renren.com Modifier
https://chrome.google.com/extensions/detail/bafellppfmjodafekndapfceggodmkfc

Chromed Bird
https://chrome.google.com/extensions/detail/encaiiljifbdbjlphpgpiimidegddhic

Sexy Undo Close Tab
https://chrome.google.com/extensions/detail/bcennaiejdjpomgmmohhpgnjlmpcjmbg

Clearlook Scrollbar Theme
https://chrome.google.com/extensions/detail/ppfdcmehpgiojcjgpclmfnbnpdmcmbgo

Stylebot
https://chrome.google.com/extensions/detail/oiaejidbmkiecgbjeifoejpgmdaleoha

---

The Best:
https://chrome.google.com/extensions/detail/mabenbhpjlchigbbpafligkdnlhjbmel

2010/08/18

我的 Ubuntu 手冊

My Ubuntu Desktop Manual

#Ubuntu Desktop 預設的桌面環境是 Gnome

安裝前建議先考慮好硬碟的分割配置。
Linux 作業系統至少需要 / 與 swap 兩個分割區。
可以將 /home 也獨立切割成一個分割區。
Ubuntu 預設會將程式配置檔、環境設定檔等存在使用者的家目錄。
獨立的 /home 分割區等於獨立備份使用者的設定與配置。

可以的話,建議裝 Ubuntu 與 Windows XP 雙作業系統。
有些很難避免的情況,還是需要回到 Windows 環境。
先安裝 Windows 再安裝 Ubuntu,Ubuntu 會偵測其他系統並安排到開機選單。

以我到桌上型主機為例,160 GB 硬碟。
使用 20 GB 先安裝了 Windows XP 作業系統;
扣除 Ubuntu 會使用到的容量,剩餘的硬碟空間全部切割成 NTFS;
Ubuntu 作業系統則作如下配置:
30 GB:/
 4 GB:/home
 4 GB:swap
/,根目錄(root)給 30 GB 已經很夠了,甚至再塞 KDE 桌面環境進去還是很空。
/home,4 GB 對我而言有點嫌多,因爲多數資料我會儲存在 NTFS 檔案系統。
swap,一般而言是設定成記憶體大小的兩倍。

規劃好硬碟配置後,就可以開始安裝了。
放入 Ubuntu 光碟,BIOS 選擇從光碟機開機。

可以選擇中文安裝,不過最好先接上網路。
Ubuntu 會自動偵測網路,中文安裝可能需要下載一些語言套件包。
沒有網路也無所謂,裝好後設定完網路,再更新即可。

安裝的過程非常簡單,安裝指引是漂亮的圖形介面,照着指示做就可以了。
安裝完成會退出光碟片,把光碟片取下,壓一下 enter 就會重新啓動了。



【sudo apt-get update && sudo apt-get upgrade】

第一次啓動後,請先設定好網路:
系統 > 偏好設定 > 網路連線

如果是 DHCP 自動取得 IP 就不用特別設定了。

確定網路 ok 後,前往:
系統 > 管理 > 軟體來源

把第一個分頁以及第三個分頁(更新)裡面的來源全部勾選,然後關閉。
系統會重載來源清單並進行更新。

喝杯咖啡,靜待更新完成。



【Compiz】

不管是 ATi、NVIDIA 或其他品牌顯示晶片,Ubuntu 都會自動偵測硬體驅動。
可以照以下步驟自行來啓用最新的驅動:
系統 > 管理 > 硬體驅動

點選最新的驅動啓用即可。
完成後可能需要重新開機

顯示驅動更新後,可以在桌面上:
點右鍵 > 更換桌面背景 > 視覺效果

最下面那個終極選項壓下去就對了!
Ubuntu 會啓用預設安裝的 Compiz 的多項視覺特效,非常酷!

Compiz 的各項效果可以透過 CCSM 與 Simple CCSM 兩個套件進行微調。
可以使用以下指令進行安裝:
sudo apt-get install compizconfig-settings-manager
sudo apt-get install simple-ccsm
安裝完成後,在「系統 > 偏好設定」裡面可以找到。
託自由軟體工作者的福,它們的中文化已經做得很好了,請盡情嘗試各項效果。



【程式開發編譯必備元件】
sudo apt-get install build-essential



【Non-Free】

多媒體影音方面,可能得用到部分非開源的編碼系統。
執行以下指令安裝:
sudo apt-get install ubuntu-restricted-extras

安裝應付 Windows 的壓縮與解壓縮套件,執行:
sudo apt-get install p7zip-full unrar cabextract p7zip-rar



【Plymouth】

從 Ubuntu 10.04 起開機動畫改用 Plymouth 取代了舊有的 Xsplash,可參考 Reference 04。
簡單說一下怎麼裝一些新的開機動畫、怎麼選擇新的開機動畫。
執行:
sudo apt-get install plymouth-theme-*
sudo update-alternatives --config default.plymouth
# 輸入編號選擇開機動畫,可以用名稱到 YouTube 搜尋預覽。
sudo update-initramfs -u

有時候,非開放性的顯示驅動會導致開機動畫的解析度變差,或沒有動畫。
可以照以下步驟修改:
a] 執行 sudo apt-get install v86d
b] 執行 gksu gedit /etc/default/grub,修改 grub 檔
c] 修改 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" 成為 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=uvesafb:mode_option=1280x1024-24,mtrr=3,scroll=ywrap"
d] 修改#GRUB_GFXMODE=640x480 成為 GRUB_GFXMODE=1280x1024
e] 注意!1280x1024 不一定是正確的解析度,通常筆電寬螢幕會是 1280x800,請自行確認。
f] 修改完成請儲存關閉 grub 檔
g] 執行 gksu gedit /etc/initramfs-tools/modules,修改 modules 檔
h] 在檔案最末加上 uvesafb mode_option=1280x1024-24 mtrr=3 scroll=ywrap
i] 注意!1280x1024 不一定是正確的解析度,請自行確認。
j] 修改完成請儲存關閉 modules 檔
k] 執行 echo FRAMEBUFFER=y | sudo tee /etc/initramfs-tools/conf.d/splash
l] 執行 sudo update-grub
m] 執行 sudo update-initramfs -u
n] 重新啟動檢查開機動畫



【Ubuntu Tweak】

Ubuntu Tweak 是一套圖形介面的 Ubuntu 設定、調教軟體。
可以把它想成類似 Windows XP 的控制臺。
請前往它的官方網站下載 deb 套件進行安裝:
http://ubuntu-tweak.com/



【More Zooty!】

安裝 Gnome-Do,請執行:
sudo add-apt-repository ppa:do-core/ppa 
sudo aptitude update
sudo aptitude install gnome-do

安裝 Conky,請執行:
sudo apt-get install conky



【Gnome Themes】

[ Equinox GTK Engine ]
[ Faenza ]

另外還有個不錯的主題套件庫(Reference 07),執行以下指令安裝:
sudo add-apt-repository ppa:bisigi
sudo aptitude update
sudo aptitude install bisigi-themes
要移除請執行:
sudo aptitude remove bisigi-themes



【Gedit Themes】

http://live.gnome.org/GtkSourceView/StyleSchemes
http://github.com/mig/gedit-themes



sudo update-alternatives --config editor

在終端機執行:
gconf-editor
進入 Ubuntu 微調設定,可以參考 [ 手把手玩 Ubuntu ]

[ Ubuntu 常用軟體 ]

[ Ubuntu 桌面技巧 ]



Reference:
01. http://www.omgubuntu.co.uk/2010/04/10-things-to-do-after-installing-ubuntu.html
02. https://launchpad.net/~shawn-p-huang/+archive/ppa
03. http://www.kdenlive.org/
04. http://blog.roodo.com/rocksaying/archives/12306099.html
05. https://help.ubuntu.com/10.04/basic-commands/C/
06. https://help.ubuntu.com/10.04/serverguide/C/index.html
07. http://www.ubuntugeek.com/nice-themes-for-ubuntu-10-04-lucid-lynx-users.html

我的 Kubuntu 手冊

My Kubuntu Manual

#預設環境是英文介面,所以會以英文標示選單步驟,請自行轉換對應的語言。



Kubuntu 底下,對任何一個應用程式 icon 壓右鍵,都可以針對其進行獨立的特別設定。

Kubuntu 底下,很多時候對 icon 只壓一下左鍵,就會進行開啟或執行的動作了。
如果不習慣的話,可以到這邊修改:
Settings > System Settings > Keyboard & Mouse > Mouse > General

Kubuntu 的應用程式選單稱為『Application Launcher』,預設是 Kickoff 樣式。
不習慣的話可以在左下角的 KDE icon 上壓右鍵,選擇『Switch to Classic Menu Style』。
如果還是不滿意,可以安裝 Lancelot:
sudo apt-get install plasma-widget-lancelot



要新增系統語言,執行:
Settings > System Settings > Regional & Language > install NEW Language

要改變系統預設語言,執行:
Settings > System Settings > Regional & Language > Select System Language



安裝 ibus 與中文拼音輸入法,執行:
sudo apt-get install ibus ibus-pinyin  ibus-qt4 ibus-gtk
啟動 ibus,執行:
ibus-daemon -x -r -d
在右下角找到 ibus 的圖示,壓右鍵選擇『Preferences』,新增自己喜歡的輸入法。

設定 ibus 開機自行啟動:
Settings > System Settings > Advanced > Autostart > Add Program
填入『ibus-daemon -x -r -d』,然後重新登入。



Kubuntu 的桌面效果設定可以到:
Settings > System Settings > General > Desktop

Desktop > Desktop Effects > General:
調整視窗切換動畫、桌面切換動畫,還有所有動畫的播放速度。

Desktop > Desktop Effects > All Effects:
Wobbly Windows = 果凍視窗效果
Magic Lamp = 視窗收縮效果
...

Desktop > Multiple Desktops:
多重桌面設定,可以設定桌面數量與切換動畫。

Desktop > Screen Edges:
設定滑鼠移動到各個桌面角落時的動作,以及視窗移動到桌面各邊緣的動作。

Desktop > Screen Saver:
設定螢幕保護程式



Kubuntu 的主題樣式、系統字型、視窗樣式、開機畫面等可以到這裡調整:
Settings > System Settings > Appearance



Kubuntu 的桌面是一個稱為『Plasma Workspaces』的環境。
Kubuntu 的工作列(Taskbar)稱做 Panel。
[ 注:請參考 Reference 03 與 04 ]

初次接觸可能會不大習慣,多壓右鍵,會發現可以設定的地方很多。
畫面的右上角一個小扇型,是預設的 Plasma 主控選單。
畫面的右下角一個小扇型,點一下可以對 Plane 進行各種調整。

Plasma 底下有一個『活動』(Activity)的概念。
『活動』(Activity)與『虛擬桌面』(Virtual Desktops)很像,可是不大一樣。
『活動』類似於可以自訂一個新的工作桌面環境。
例如可以自訂一個專門處理美工事務時的桌面、一個專門處理程式設計時的桌面等。

如果不小心刪除工作列收放程式的區域(程式縮小時顯示的地方),可以這樣叫回:
Panel 上壓右鍵 > Panel Options > Add Widgets > Task Manager



Kubuntu 的套件管理程式稱為『KPackageKit』:
System > Software Management

安裝完建議先來這邊設定軟體來源:
system > Software Management > Settings > Edit Software Source
建議把 Kubuntu Software,Other Software,Updates 底下的來源都打勾,然後執行更新。

要安裝任何新的軟體套件,都可以先來這邊搜尋,類似 Ubuntu 的 Software Center。
例如安裝一個叫『Kinfo Center』的套件,可以搜尋 kinfo,選取,然後 Apply。

如果不習慣 KPackageKit,可以另外安裝 Synaptic:
sudo apt-get install synaptic



安裝應付 Windows 的壓縮與解壓縮套件,執行:
sudo apt-get install p7zip-full unrar cabextract p7zip-rar



sudo apt-get install kubuntu-restricted-extras



sudo apt-add-repository ppa:kubuntu-ppa/ppa



Kubuntu 的 KDE Wallet 類似於 Ubuntu 的 GNOME Keyring。



Reference:
01. http://wiki.ubuntu.org.cn/index.php?title=Qref/Lucid/Kubuntu
02. http://en.wikipedia.org/wiki/Taskbar
03. http://en.wikipedia.org/wiki/Plasma_(KDE)
04. http://userbase.kde.org/Plasma/zh-tw
05. http://wiki.ubuntu.org.cn/Kubuntu

2010/08/13

Fedora 開機模式與自動啟動設定

將想要開機執行的命令可以新增在此檔案中:
/etc/rc.d/rc.local

例如:

# 啟動 tarball 安裝的 Apache
/your_tarball_path_of_apache2/bin/apachectl start

# 啟動 tarball 安裝的 MySQL
/your_tarball_path_of_mysql5/share/mysql/mysql.server start

# 啟動 rpm 安裝的 VSFTP
/etc/rc.d/init.d/vsftpd start

# 啟動 rpm 安裝的 Samba
/etc/rc.d/init.d/smb start
/etc/rc.d/init.d/nmb start

或使用 chkconfig 工具管理哪些服務該在哪個 run level 開機啓動。

例如:
chkconfig httpd on
chkconfig vsftpd on

---

Fedora 圖形介面或文字介面開機模式設定檔:
/etc/inittab

# 文字模式啟動
id:3:initdefault:

# 圖形介面啟動
id:5:initdefault:

MediaWiki 備份與遷移

*基本原理:
把舊有的 MySQL 資料庫備份起來。
新安裝一個資料庫,名稱和之前一模一樣,然後把新裝的資料庫砍掉,匯入舊的資料庫內容。
讓新安裝的 MediaWiki 去存取該資料庫。

備份資料庫:
使用 mysqldump 或第三方管理軟體(ex: phpMyAdmin)備份整個 MediaWiki 資料庫。
所有資料表和內容存成一個 *.sql 檔案,設定成 utf8 的儲存格式。

備份資料夾:
images
skins
extensions

備份檔案:
LocalSettings.php

---

edit: LocalSetting.php

#不同的主機 ProxyKey 值會不一樣!
$wgProxyKey =

#設定 mediawiki 資料庫內資料表的前置名稱
$wgDBprefix = "prefix_";

#設定首頁 Logo 圖片的位址
$wgLogo="URL://somewhere";
#編寫和瀏覽權限設定
$wgGroupPermissions['*']['createaccount'] = true;
$wgGroupPermissions['*']['read'] = true;
$wgGroupPermissions['*']['edit'] = false;
$wgGroupPermissions['*']['createpage'] = false;
$wgGroupPermissions['*']['createtalk'] = false;

#圖片上傳設定
$WGAllowExternalImages = true;

#時間區域和計算設定
$wgLocaltimezone = "Asia/Taipei";
$oldtz = getenv("TZ");
putenv("TZ=$wgLocaltimezone");
$wgLocalTZoffset = date("Z")/60;
putenv("TZ=$oldtz");

*注意:安裝完成後如果修改 MediaWiki 目錄的名稱會導致無法正常連線。

使用 SQL 指令建新資料庫

使用 SQL 文字命令架設資料庫及新增帳號。

1. 利用 MySQL 的 root 身份建立資料庫與帳號:

shell> mysql -u root -p
Enter password:
# 輸入你的 MySQL 的 root 密碼

mysql> create database DBNAME;
# 建立一個新的資料庫名稱為「DBNAME」,注意每個指令後面要加上「;」

mysql> grant all privileges on DBNAME.* to DBID@localhost identified by 'your.password' ;
# 將剛剛建立的「DBNAME」這個資料庫的權限指定給「DBID」這個帳號!
# 如果「DBID」這個不存在,系統會自動新建這個帳號,
# 並讓它擁有「DBNAME」這個資料庫的權限。
# 在 'your.password' 中填上自己要設定給「DBID」這個帳號的密碼!

mysql> exit

2. 測試剛剛建立的資料庫與帳號是否可以使用:

[root@test root]# mysql -u 資料庫帳號 -p
Enter password:

mysql> connect 資料庫名稱;

mysql> exit

使用 PHP 動態產生 XML

直接看一個靜態的例子:
<?php
ob_start();
header('Content-Type: text/xml');

$dom = new DOMDocument('1.0');
$dom->encoding = 'UTF-8';

// 建立母節點 $root
$root = $dom->createElement('root');
$dom->appendChild($root);

// 設定屬性
$root->setAttribute('name', 'xxx');

// 建立 $root 的子節點 $child
$child = $dom->createElement('child');
$root->appendChild($child);

// 建立文字節點 $text
$text = $dom->createTextNode('文字');

// $text 加到 $child 節點底下
$child->appendChild($text);

$xmlStr = $dom->saveXML();
echo $xmlStr;

?>

底下是一個從資料庫撈資料動態產生 RSS 檔的例子:
<?php
ob_start();
header('Content-Type: text/xml');

$dom = new DOMDocument('1.0');
$dom->encoding = 'UTF-8';

// 建立母節點 $rss
$rss = $dom->createElement('rss');
$dom->appendChild($rss);
$rss->setAttribute('version', '2.0');

// 建立第一子節點 $channel
$channel = $dom->createElement('channel');
$rss->appendChild($channel);

// $channel 底下的節點及其文字內容
$title = $dom->createElement('title');
$titleText = $dom->createTextNode('您的 RSS 標題');
$title->appendChild($titleText);
$channel->appendChild($title);

$link = $dom->createElement('link');
$linkText = $dom->createTextNode('http://您的網站連結/');
$link->appendChild($linkText);
$channel->appendChild($link);

$description = $dom->createElement('description');
$descriptionText = $dom->createTextNode('您的描述');
$description->appendChild($descriptionText);
$channel->appendChild($description);

// 查詢資料庫,撈資料來建立 item 節點
require_once("您的資料庫連結檔,包括資料庫名稱,帳號,密碼,連結等.php");
$query = "您的 SQL 子句";
$result = mysql_query($query, 連結);

while($row = @mysql_fetch_assoc($result))
{
$item = $dom->createElement('item');
$channel->appendChild($item);

$title = $dom->createElement('title');
$titleText = $dom->createTextNode($row['文章標題']);
$title->appendChild($titleText);
$item->appendChild($title);

$pubDate = $dom->createElement('pubDate');
$pubDateText = $dom->createTextNode($row['文章日期']);
$pubDate->appendChild($pubDateText);
$item->appendChild($pubDate);

$description = $dom->createElement('description');
$descriptionText = $dom->createTextNode($row['文章描述']);
$description->appendChild($descriptionText);
$item->appendChild($description);

$link = $dom->createElement('link');
$linkText = $dom->createTextNode('您的連結');
$link->appendChild($linkText);
$item->appendChild($link);
}

$xmlStr = $dom->saveXML();
echo $xmlStr;

mysql_close($link);
?>

Blogger 安裝 SyntaxHighlighter

Syntax Highlight - 語法高亮度顯示

Blogger 安裝 SyntaxHighlighter 3 教學

進入你的 blogger 設計頁面,選擇編輯 html。
找到 <head> 標籤,在標籤後空一行,貼入以下語法:








其他主題樣式與程式語言筆刷可以到以下網址參考:
http://alexgorbatchev.com/SyntaxHighlighter/hosting.html

在編輯文章時,將要 highlight 的片段用以下標籤包裹:

<pre class="brush: 程式語言種類">
// 您的程式碼
</pre>

Reference:
01. http://alexgorbatchev.com/SyntaxHighlighter/
02. http://shiouhhc.blogspot.com/2007/08/blogger_27.html

使用 MRTG 監控系統效能

軟體:Multi Router Traffic Grapher
環境:Ubuntu 9.10 Server

#請先切換到 root 身份。

首先,要先裝好 Apache 與 PHP:
apt-get install apache2
apt-get install php5 libapache2-mod-php5

接著安裝 SNMP:
apt-get install snmpd

修改 SNMP 設定檔:
vim /etc/snmp/snmpd.conf

把 snmpd.conf 的 sec.name source community 部份修改如下:
# com2sec paranoid default public
com2sec readonly default public
#com2sec readwrite default private

重新啟動 SNMP 服務:
/etc/init.d/snmpd restart

安裝 MRTG:
apt-get install mrtg

建立 MRTG 的網頁資料夾:
mkdir /var/www/mrtg

編輯 MRTG 設置檔:
vim /etc/mrtg.cfg

在檔案內 Global Settings 那段,修改成如下設定:
RunAsDaemon: yes
EnableIPv6: no
WorkDir: /var/www/mrtg
Options[_]: bits, growright
WriteExpires: Yes
Title[^]: Traffic Analysis For

查看 /etc/cron.d/mrtg 檔案,編輯 MRTG 的自動排程。
內容類似:
*/5 * * * * root if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg >> /var/log/mrtg/mrtg.log 2>&1; fi
或:
*/5 * * * * root if [ ! -d /var/lock/mrtg ]; then mkdir /var/lock/mrtg; fi; if [ -x /usr/bin/mrtg ] && [ -r /etc/mrtg.cfg ]; then env LANG=C /usr/bin/mrtg /etc/mrtg.cfg 2>&1 | tee -a /var/log/mrtg/mrtg.log ; fi

執行下列指令,產生本機監控設置:
cfgmaker public@localhost > /etc/mrtg.cfg

Creating a configuration file for a device using:
cfgmaker public@192.168.0.1 >> /etc/mrtg.cfg


使用 indexmaker 產生 MRTG 頁面:
indexmaker /etc/mrtg.cfg > /var/www/mrtg/index.html

執行以下指令三次,直到沒有錯誤訊息:
env LANG=C /usr/bin/mrtg /etc/mrtg.cfg

使用瀏覽器連線到本機的 MRTG 頁面資料夾觀察流量頁面:
http://localhost/mrtg/



搭配 sysstat 工具監控 CPU 負載量

安裝 sysstat 工具:
apt-get install sysstat

sysstat 指令簡單說明:
sar -u 1 3 # 每一秒鐘測一次 CPU,三次後計算平均。
sar -r 3 3 # 每三秒測一次實體與虛擬記憶體用量,三次後計算平均。

執行以下指令測試一下:
/usr/bin/sar -u 1 3

在 MRTG 網頁目錄下新增一個 CPU 目錄:
mkdir /var/www/mrtg/cpu
cd /var/www/mrtg/cpu

編寫 CPU 監控的 bash script:
vim cpu.sh

cpu.sh 內容如下:
#!/bin/bash
# 開始使用 sar 來監測 CPU 的 user 及 System 負載率
  cpuusr=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'`
  cpusys=`/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'`
  UPtime=`/usr/bin/uptime | awk '{print $3 " " $4 " " $5}'`

# 列出四個數據(前兩個為數字)
  echo $cpuusr
  echo $cpusys
  echo $UPtime
  echo localhost

修改執行權限:
chmod 755 cpu.sh

編寫監控 CPU 的 MRTG 設置檔:
vim cpu.cfg

cpu.cfg 內容如下:
### Global Config Options
### To get bits instead of bytes and graphs growing to the right
WorkDir: /var/www/mrtg/cpu/
Language: utf8
Target[localhost]: `/var/www/mrtg/cpu/cpu.sh`
MaxBytes[localhost]: 100
Options[localhost]: gauge, nopercent, growright
YLegend[localhost]: CPU loading (%)
ShortLegend[localhost]: %
LegendO[localhost]: &nbsp; CPU sys;
LegendI[localhost]: &nbsp; CPU usr;
Title[localhost]: CPU Utilization
PageTop[localhost]: <h1>localhost CPU usage</h1>

執行以下指令三次,直到沒有錯誤訊息:
env LANG=C /usr/bin/mrtg /var/www/mrtg/cpu/cpu.cfg

編輯系統排程檔:
vim /etc/crontab

寫入以下內容:
*/5 * * * * root /usr/bin/mrtg /var/www/mrtg/cpu/cpu.cfg > /dev/null 2>&1

使用瀏覽器觀察 CPU 負載頁面:
http://localhost/mrtg/cpu/localhost.html

Reference:
01. http://www.debianhelp.co.uk/mrtg.htm
02. http://www.linuxhomenetworking.com/wiki/
03. http://noc.navi.net/mrtg-conf.html
04. http://linux.vbird.org/linux_security/old/04mrtg.php

使用 Cacti 監控系統效能

#如果有套件管理軟體,請盡量用套件管理軟體裝就好了,不要為自己找麻煩 ...

Multi CPU Utilization Graph
http://forums.cacti.net/about11615.html

Reference:
01. http://cacti.xxoo.net/
02. http://forum.icst.org.tw/phpbb/viewtopic.php?t=7671
03. http://itgroup.blueshop.com.tw/towns/hc?n=wodvew&i=401
04. http://cha.homeip.net/blog/archives/2006/03/cacti.html
05. http://blog.pmail.idv.tw/index.php?load=read&id=373
06. http://www.ubuntugeek.com/

Further Reading:
http://ycfunet.blogspot.com/2008/05/rrdtool.html
http://www.study-area.org/tips/rrdtool/rrdtool.html

在 FreeBSD 內更新 DNS 設定

DNS 的設定檔通常在 /etc/namedb/ 資料夾底下。

領域資料檔更新時,記得更新裡面的 serial number。

通常會用「更新日期 + 編號」當作 serial number。

修改完領域資料檔,執行:
rndc flush

重開 DNS 服務,執行:
/etc/rc.d/named restart

Reference:
01. http://teacher.tysh.tyc.edu.tw/~t333/wiki/doku.php?id=freebsd:dns

安裝 TKG 網格機器

主題:在 Ubuntu 9.10 環境 ( x86_32 或 x86_64 ) 安裝 Globus Toolkit 4。

***************************

零、環境說明

TKG 網格主機,作業系統的預設使用者:
user008

# user008 的密碼為 TKG 的專用密碼。
# 請詢問老師或學長姐。

---------

TKG Globus 網格使用者名稱:
user008

# user008 的密碼為 TKG 的專用密碼。
# 請詢問老師或學長姐。

---------

「TKG Globus 網格使用者 user008」映對到「TKG 網格主機作業系統使用者 user008」。

「TKG Globus 網格使用者 user008」使用網格主機作業系統中的 user008 帳號存取主機資源。

---------

安裝過程中,需要設定密碼或要求輸入密碼的地方,請都使用 TKG 的專用密碼。

***************************

一、網路設定

執行:
sudo su -

執行:
vim /etc/network/interface

將 eth0 的內容改為如下:
auto eth0
iface eth0 inet static
address 192.168.100.(主機號碼)
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
gateway 192.168.100.1
dns-nameservers (資管系 DNS 主機位址)

執行:
/etc/init.d/networking restart

執行:
vim /etc/hostname

將內容修改為:
im(主機號碼).im.ncue.edu.tw

存檔離開,執行:
reboot

重開機之後,使用以下指令檢查一下主機名稱:
/bin/hostname

使用以下指令檢查一下網路設定:
ifconfig

然後執行:
ping 192.168.100.1
ping (資管系 DNS 主機位址)

***************************

二、下載相關檔案

執行:
cd /opt

執行:
scp -r user008@192.168.100.1:/opt/globus_ubuntu /opt

執行:
cd /opt/globus_ubuntu

執行:
ls -lh

顯示:
apache-ant-1.7.1-bin.tar.gz
globus_simple_ca_502cf2ea_setup-0.19.tar.gz
grid-mapfile
gt4.0.8-all-source-installer.tar.gz
gt4.2.1-all-source-installer.tar.gz
jdk-6u17-linux-i586.bin
jdk-6u17-linux-x64.bin
junit-4.3.1.jar
ld.so.conf
mpich.tar.gz
pre-requisites.sh
profile
xinetd.d_gsiftp
xinetd.d_gsigatekeeper

***************************

三、安裝必備軟體 ( prerequisite softwares )

執行:
cd /opt/globus_ubuntu

執行:
./pre-requisites.sh

系統進行安裝確認時,請輸入:Y

***************************

四、獨立安裝必備軟體:Java 與 Apache Ant

Java 的安裝。

執行:
cd /opt/globus_ubuntu

如果是 x86_32 環境請執行:
./jdk-6u17-linux-i586.bin

如果是 x86_64 環境請執行:
./jdk-6u17-linux-x64.bin

顯示:
Java 的 license terms,請壓一下 q,然後輸入 yes,按 enter。
Java 自解壓縮安裝完成後,請壓幾下 enter 結束安裝。

執行:
mv jdk1.6.0_17 ../java

---------

Apache Ant 的安裝。

執行:
cd /opt/globus_ubuntu

執行:
tar zxvf apache-ant-1.7.1-bin.tar.gz

執行:
mv apache-ant-1.7.1 ../ant

執行:
cp junit-4.3.1.jar ../ant/lib/

---------

匯入環境變數。

執行:
cd /opt/globus_ubuntu

執行:
more profile >> /etc/profile

執行:
source /etc/profile

# 先忽略 -su: /opt/globus/etc/globus-user-env.sh: No such file or directory 錯誤。

測試 Java,執行:
java -version

測試 Apache Ant,執行:
ant -version

***************************

五、安裝 Globus Toolkit

# 研究室舊有的網格使用的是 Globus Toolkit 4.0.* 版本的。
# Globus Toolkit 4.0.* 與 Globus Toolkit 4.2.* 是不相通的。

執行:
cd /opt/globus_ubuntu

執行:
tar zxvf gt4.0.8-all-source-installer.tar.gz

執行:
mkdir /opt/globus

執行:
cd /opt/globus_ubuntu/gt4.0.8-all-source-installer

執行:
./configure --prefix=/opt/globus

執行:
make | tee gt_make.log

# 編譯如果出現問題,請追蹤一下 gt_make.log 檔案,尋找錯誤訊息。

編譯完成,執行:
make install

安裝完成,執行:
cd /opt/globus_ubuntu

執行:
more ld.so.conf >> /etc/ld.so.conf

執行:
ldconfig

***************************

六、設置 Grid Security Infrastructure

# 由於 TKG 已有架設好的 SimpleCA Server ( 192.168.100.1 ),
# 直接使用 TKG 的 globus_simple_ca_502cf2ea_setup-0.19.tar.gz 檔案。

執行:
cp /opt/globus_ubuntu/globus_simple_ca_502cf2ea_setup-0.19.tar.gz /opt/globus/

執行:
cd /opt/globus

如果是 x86_32 環境,執行:
gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc32dbg

如果是 x86_64 環境,執行:
gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc64dbg

gpt-build 完成後,執行:
gpt-postinstall

執行:
/opt/globus/setup/globus_simple_ca_502cf2ea_setup/setup-gsi -default

***************************

七、設置 gsiftp 與 gsigatekeeper

執行:
cd /opt/globus_ubuntu

執行:
cp xinetd.d_gsiftp /etc/xinetd.d/gsiftp

執行:
cp xinetd.d_gsigatekeeper /etc/xinetd.d/gsigatekeeper

執行:
/etc/init.d/xinetd restart

***************************

八、主機認證與使用者認證

TKG 網格主機認證:

# TKG 網格 SimpleCA Server 為 192.168.100.1,主機名稱是 im1.im.ncue.edu.tw。
# SimpleCA Server 的管理者為 im1.im.ncue.edu.tw 作業系統中的 root 帳號。

執行:
scp user008@192.168.100.1:/etc/hosts /etc/hosts

執行:
vim /etc/hosts
# 將本機的 IP 與 hostname 對映寫入並存檔。
# 例如:192.168.100.256 im256.im.ncue.edu.tw im256

確認主機名稱符合格式,執行:
hostname

# 以 TKG 網格為例,名稱應該是 im主機號碼.im.ncue.edu.tw 這樣的格式。
# 若主機名稱有出入,請修改 /etc/hostname 並重新開機。

切換到 root 身份,執行:
cd /etc/grid-security/

執行:
grid-cert-request -host `hostname`

以上指令會在 /etc/grid-security 底下產生:
hostcert.pem
hostcert_request.pem
hostkey.pem

將 hostcert_request.pem 傳送到 im1 (192.168.100.1),執行:
scp hostcert_request.pem user008@im1:~/temp/

# 對 hostcert_request.pem 檔進行認證,需要登入到 SimpleCA Server 進行操作。
# 請另外開啟一個 SSH 連線,以 user008 帳號登入 im1 (192.168.100.1)。

@im1 執行:
sudo su -

@im1 執行:
cd /home/user008/temp

@im1 執行:
grid-ca-sign -in hostcert_request.pem -out hostcert.pem

回到認證中的網格主機,切換到 root 身份,執行:
cd /etc/grid-security/

從 SimpleCA Server 將認證產生的 hostcert.pem 取回,執行:
scp user008@im1:~/temp/hostcert.pem /etc/grid-security/hostcert.pem

---------

TKG 網格使用者認證:

# TKG 網格中只有一個「網格使用者 user008」,因此直接取用認證過 user008 身份的驗證檔案即可。

執行:
su - user008

執行:
cd /home/user008

執行:
scp -r user008@im1:~/.globus /home/user008/

執行:
grid-proxy-init

顯示:
Your identity: /O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008
Enter GRID pass phrase for this identity: # 輸入 TKG 專用密碼

grid-proxy-init 順利初始化,代表認證成功。

***************************

九、關於 grid-mapfile

執行:
sudo su -

# 為了讓網格中其他的機器也可以透過作業系統的 user008 帳號來運用本機資源

執行:
cp /opt/globus_ubuntu/grid-mapfile /etc/grid-security/

***************************

十、安裝 MPICH

執行:
cd /opt/globus_ubuntu/

執行:
tar zxvf mpich.tar.gz

執行:
mkdir /opt/mpich

執行:
cd mpich-1.2.7p1/

x86_32 環境執行:
./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc32dbg

x86_64 環境執行:
./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc64dbg

執行:
make | tee mpich_make.log

執行:
make install

執行:
su - user008

執行:
cp /opt/mpich/examples/cpi.c .

執行:
mpicc cpi.c -o cpi

在同一個目錄底下,執行:
vim machines

編寫 machines 檔,內容是:
"本機的 hostname" 1

編輯完成後,執行:
grid-proxy-init

Grid Proxy 起始化後,執行:
mpirun -np 1 cpi

順利的話,螢幕會印出 Pi 的值與執行的主機名稱。

***************************

附錄:

pre-requisites.sh 內容:
#!/bin/bash
sudo apt-get upgrade
sudo apt-get update
sudo apt-get install \
openssh-server \
libssl-dev \
zlib-bin \
zlib1g \
zlib1g-dev \
gcc \
g++ \
xinetd \

echo "*** DO NOT FORGET JAVA SDK & APACHE-ANT :-) ***"

globus_ubuntu/profile 內容:
export ANT_HOME=/opt/ant
export JAVA_HOME=/opt/java
export MPICH_HOME=/opt/mpich
export GLOBUS_LOCATION=/opt/globus
export PATH=$GLOBUS_LOCATION/bin:$GLOBUS_LOCATION/sbin:$MPICH_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/bin:$PATH
source $GLOBUS_LOCATION/etc/globus-user-env.sh

xinetd.d_gsiftp 內容:
service gsiftp
{
disable = no
instances = 100
socket_type = stream
wait = no
user = root
env += GLOBUS_LOCATION=/opt/globus
env += LD_LIBRARY_PATH=/opt/globus/lib
server = /opt/globus/sbin/globus-gridftp-server
server_args = -i
log_on_success += DURATION
nice = 10
}

xinetd.d_gsigatekeeper 內容:
service gsigatekeeper
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
env = LD_LIBRARY_PATH=/opt/globus/lib
server = /opt/globus/sbin/globus-gatekeeper
server_args = -conf /opt/globus/etc/globus-gatekeeper.conf
}

***************************

Reference:
01. http://tkg.im.ncue.edu.tw/

安裝 Globus 與 MPICH

*此篇安裝記錄的各項設定主要是針對彰化師大資管 TKG ( TK group ) 研究室的作業環境。
*如果您熟悉 Linux 系統,您可以自行修改安裝路徑、使用者帳號等參數以符合您的需求。

主題:在 Ubuntu 9.10 環境 ( x86_32 或 x86_64 ) 安裝 Globus Toolkit 4 ( 4.0.* 或 4.2.* )。

關於 Globus Toolkit 網格 ( Grid ) 環境:
在網格環境中,使用者通常會有一個網格身份,使用者透過該網格身份來使用網格的資源。
某個有限範圍的網格,通常會稱為一個 Virtual Organization ( VO ),網格身份就是指使用者在 VO 中的身份。
# 關於 VO 可以參考 [Reference 01]。
VO 可以用 domain name 來命名,例如彰師資管可以使用 im.ncue.edu.tw。
而「hostname.im.ncue.edu.tw」可以用來識別 im.ncue.edu.tw 這個 VO 內的某台主機,hostname 即主機名稱。
主機作業系統中的使用者身份和 VO 中的網格身份是不同的。
主機作業系統中的使用者身份和 VO 中的網格身份是一個對映 ( mapping ) 關係。

例如:
PC-A 作業系統中有一個使用者帳號 userA。
PC-B 作業系統中有一個使用者帳號 userB。
PC-A 和 PC-B 屬於同一個網格 ( 同一個 VO )。
網格 ( VO ) 中的一個網格身份 grid_user 對映到 PC-A 的 userA 與 PC-B 的 userB,
只要有 grid_user 這個網格身份的使用權,就可以使用 grid_user 身份對映到 userA 及 userB,
並透過 userA 和 userB 這兩個身份分別使用 PC-A 與 PC-B 的資源。

更詳細的 Globus Toolkit 說明,可以參考:......

***************************

零、說明

TKG 網格的主機,作業系統的預設使用者帳號是:user008
user008 的密碼為 TKG 的專用密碼,請詢問老師或學長姐。

安裝軟體時的身份皆是「作業系統的 root」,執行某些動作時,如需切換身份,會特別說明。
安裝完成的 Globus Toolkit 網格管理者是「作業系統的 root」。
安裝完成的 Globus Toolkit 對映到的作業系統帳號是「作業系統的 user008」。
安裝完成的 Globus Toolkit 網格使用者是「VO 的 user008」。

# 「網格使用者的帳號」跟「對映到的作業系統帳號」是否使用相同的名稱,是見仁見智的。

***************************

一、網路設定

TKG 網格使用的是 192.168.100.0/24 這個 Private Network,請先將您的機器加入這個 LAN。

# 請先熟悉一下 vim 的模式切換、編輯指令、存檔指令(例如:Esc,i,:w,:q)。
# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

例如,您將使用的 IP 是:192.168.100.256
# be careful with this IP :-)

在 Ubuntu 底下,請執行:
vim /etc/network/interface

將 eth0 的內容改為如下:
auto eth0
iface eth0 inet static
address 192.168.100.256
netmask 255.255.255.0
network 192.168.100.0
broadcast 192.168.100.255
gateway 192.168.100.1
dns-nameservers ( 請依據情況設定,通常是一個 Public IP )

然後執行:
/etc/init.d/networking restart

# 如果您是使用 SSH 遠端連線,連線會中斷。
# 請將你的 SSH Client 也加入 192.168.100.0/24 這個 LAN,再重新連線到剛剛設定的電腦。

接下來,需要修改主機的名稱,使用 im*.im.ncue.edu.tw 這個格式。
例如,您使用的 IP 是 192.168.100.256,主機名稱會是:im256.im.ncue.edu.tw

請執行:
vim /etc/hostname

將內容修改為:
im256.im.ncue.edu.tw

存檔離開後,請執行:
reboot

重開機之後,使用以下指令檢查一下主機名稱:
/bin/hostname

使用以下指令檢查一下網路設定:
ifconfig

然後執行:
ping 192.168.100.1
ping ( 您的 DNS IP )

兩個 ping 測試都成功,請繼續下一步驟。

***************************

二、下載相關檔案

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt

執行:
scp -r user008@192.168.100.1:/opt/globus_ubuntu /opt

執行:
cd /opt/globus_ubuntu

執行:
ls -lh

應該有這些檔案,總共大約 427 MB:
apache-ant-1.7.1-bin.tar.gz
globus_simple_ca_502cf2ea_setup-0.19.tar.gz
grid-mapfile
gt4.0.8-all-source-installer.tar.gz
gt4.2.1-all-source-installer.tar.gz
jdk-6u17-linux-i586.bin
jdk-6u17-linux-x64.bin
junit-4.3.1.jar
ld.so.conf
mpich.tar.gz
pre-requisites.sh
profile
xinetd.d_gsiftp
xinetd.d_gsigatekeeper

請繼續下一步驟。

***************************

三、安裝必備軟體 ( prerequisite softwares )

# 注意:這是個人測試 Ubuntu Server 環境下的必備軟體清單。
# 注意:如果您的環境不一樣,請檢查 Globus Toolkit 官方 prerequisite softwares 清單,補足缺少的軟體。
# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu

執行:
./pre-requisites.sh

pre-requisites.sh 的內容是:
#!/bin/bash
sudo apt-get upgrade
sudo apt-get update
sudo apt-get install \
openssh-server \
libssl-dev \
zlib-bin \
zlib1g \
zlib1g-dev \
gcc \
g++ \
xinetd \

echo "*** DO NOT FORGET JAVA SDK & APACHE-ANT :-) ***"

系統進行安裝確認時,請輸入:Y

請繼續下一步驟。

***************************

四、獨立安裝必備軟體:Java 與 Apache Ant

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

首先,進行 Java 的安裝。

執行:
cd /opt/globus_ubuntu

如果是 x86_32 環境請執行:
./jdk-6u17-linux-i586.bin

如果是 x86_64 環境請執行:
./jdk-6u17-linux-x64.bin

會出現 Java 的 license terms,請壓一下 q,然後輸入 yes,按 enter。
Java 自解壓縮安裝,完成後請壓幾下 enter 結束安裝。

執行:
mv jdk1.6.0_17 ../java

接下來,進行 Apache Ant 的安裝。

執行:
cd /opt/globus_ubuntu

執行:
tar zxvf apache-ant-1.7.1-bin.tar.gz

執行:
mv apache-ant-1.7.1 ../ant

執行:
cp junit-4.3.1.jar ../ant/lib/

接下來匯入環境變數,以測試安裝。

執行:
cd /opt/globus_ubuntu

執行:
more profile >> /etc/profile

globus_ubuntu/profile 的內容是:
export ANT_HOME=/opt/ant
export JAVA_HOME=/opt/java
export MPICH_HOME=/opt/mpich
export GLOBUS_LOCATION=/opt/globus
export PATH=$GLOBUS_LOCATION/bin:$GLOBUS_LOCATION/sbin:$MPICH_HOME/bin:$ANT_HOME/bin:$JAVA_HOME/bin:$PATH
source $GLOBUS_LOCATION/etc/globus-user-env.sh

執行:
source /etc/profile

# 暫時忽略 -su: /opt/globus/etc/globus-user-env.sh: No such file or directory 這行錯誤。

測試 Java,執行:
java -version

測試 Apache Ant,執行:
ant -version

測試成功,請繼續下一步驟。

***************************

五、安裝 Globus Toolkit

研究室舊有的網格使用的是 Globus Toolkit 4.0.* 版本的。
Globus Toolkit 4.0.* 與 Globus Toolkit 4.2.* 是不相通的。
如果您打算搭建一個全新的網格環境,不考慮與舊環境的銜接問題,請使用 Globus Toolkit 4.2.* 版本。
因研究室需求,在此以安裝舊版 Globus Toolkit 4.0.* 為例。

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu

執行:
tar zxvf gt4.0.8-all-source-installer.tar.gz

執行:
mkdir /opt/globus

執行:
cd /opt/globus_ubuntu/gt4.0.8-all-source-installer

執行:
./configure --prefix=/opt/globus

執行:
make | tee gt_make.log

編譯時間根據機器的性能不一,這時可以起來走跳一下,看看窗外綠葉。
編譯如果出現問題,請追蹤一下 gt_make.log 檔案,尋找錯誤訊息。

編譯如果順利完成,請執行:
make install

如果順利安裝完成,執行:
cd /opt/globus_ubuntu

執行:
more ld.so.conf >> /etc/ld.so.conf

執行:
ldconfig

***************************

六、設置 Grid Security Infrastructure ( with/without SimpleCA Server )

前面的步驟執行完,Globus Toolkit 其實已經安裝完,
但仍需進行 GSI ( Grid Security Infrastructure ) 的設置才可以使用。

GSI 的設置需要搭配一套 CA 認證系統,可以使用 Globus Toolkit 附帶 SimpleCA 模組。
安裝 SimpleCA Server 模組的時候,會產生一個 globus_simple_ca_HASH_setup.tar.gz 檔案。
Globus Toolkit 會使用該檔案來進行 gpt-build,完成 GSI 設置。
# HASH 是一串 16 進位亂數。
# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

---------

with SimpleCA Server already:

由於 TKG 已有架設好的 SimpleCA Server ( 192.168.100.1 ),
可以直接使用 TKG 的 globus_simple_ca_502cf2ea_setup-0.19.tar.gz 檔案。

執行:
cp /opt/globus_ubuntu/globus_simple_ca_502cf2ea_setup-0.19.tar.gz /opt/globus/

執行:
cd /opt/globus

如果是 x86_32 環境請執行:
gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc32dbg

如果是 x86_64 環境請執行:
gpt-build globus_simple_ca_502cf2ea_setup-0.19.tar.gz gcc64dbg

gpt-build 順利執行完成後,請執行:
gpt-postinstall

以上指令會在 /opt/globus/setup 資料夾底下產生 globus_simple_ca_502cf2ea_setup 資料夾,
執行 globus_simple_ca_502cf2ea_setup 資料夾底下的 setup-gsi 檔案,進行 GSI 設置。

執行:
/opt/globus/setup/globus_simple_ca_502cf2ea_setup/setup-gsi -default

以上指令會在 /etc 底下產生一個 grid-security 資料夾,涉及後續的主機認證和網格使用者對映。

---------

without SimpleCA Server:

如果是全新安裝的網格,尚無 CA Server,可以使用 Globus Toolkit 附帶的 SimpleCA 模組建立一個。

執行:
$GLOBUS_LOCATION/setup/globus/setup-simple-ca

以上指令執行時,會進行新建網格的設定,需要自訂組織名稱,網格管理密碼等等。
# SimpleCA 安裝說明請先暫時參考 [Reference 04]。

執行完成會在 $GLOBUS_LOCATION/setup/ 底下產生一個 globus_simple_ca_HASH_setup 資料夾。
# HASH 是一串 16 進位亂數。

執行:
$GLOBUS_LOCATION/setup/globus_simple_ca_HASH_setup/setup-gsi -default
# HASH 是一串 16 進位亂數。

以上指令會在 root 的家目錄產生一個 .globus 資料夾,裡面有一個名為 simpleCA 的資料夾。
simpleCA 資料夾即為新安裝 SimpleCA Server 的內容。
simpleCA 資料夾內會有一個 globus_simple_ca_HASH_setup.tar.gz 檔案,取用該檔案進行 gpt-build 即可。

執行:
cp /root/.globus/simpleCA/globus_simple_ca_HASH_setup.tar.gz /opt/globus/
# HASH 是一串 16 進位亂數。

執行:
cd /opt/globus

如果是 x86_32 環境請執行:
gpt-build globus_simple_ca_HASH_setup.tar.gz gcc32dbg
# HASH 是一串 16 進位亂數。

如果是 x86_64 環境請執行:
gpt-build globus_simple_ca_HASH_setup.tar.gz gcc64dbg
# HASH 是一串 16 進位亂數。

gpt-build 順利執行完成後,請執行:
gpt-postinstall

以上指令會在 /opt/globus/setup 資料夾底下產生 globus_simple_ca_HASH_setup 資料夾,
執行 globus_simple_ca_HASH_setup 資料夾底下的 setup-gsi 檔案,進行 GSI 設置。
# HASH 是一串 16 進位亂數。

執行:
/opt/globus/setup/globus_simple_ca_HASH_setup/setup-gsi -default

以上指令會在 /etc 底下產生一個 grid-security 資料夾,涉及後續的主機認證和網格使用者對映。

***************************

七、設置 gsiftp 與 gsigatekeeper

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu

執行:
cp xinetd.d_gsiftp /etc/xinetd.d/gsiftp

執行:
cp xinetd.d_gsigatekeeper /etc/xinetd.d/gsigatekeeper

執行:
/etc/init.d/xinetd restart

xinetd.d_gsiftp 內容:
service gsiftp
{
disable = no
instances = 100
socket_type = stream
wait = no
user = root
env += GLOBUS_LOCATION=/opt/globus
env += LD_LIBRARY_PATH=/opt/globus/lib
server = /opt/globus/sbin/globus-gridftp-server
server_args = -i
log_on_success += DURATION
nice = 10
}

xinetd.d_gsigatekeeper 內容:
service gsigatekeeper
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
env = LD_LIBRARY_PATH=/opt/globus/lib
server = /opt/globus/sbin/globus-gatekeeper
server_args = -conf /opt/globus/etc/globus-gatekeeper.conf
}

***************************

八、主機認證與使用者認證

主機認證:

主機認證很好理解,目的就是確認網格中的主機是合法的,不是外面阿貓阿狗假冒的。
首先必須先確認網格中的 SimpleCA Server 是哪一台機器,接下來的認證動作需要跟它溝通。

以 TKG 網格為例,SimpleCA Server 為 192.168.100.1,主機名稱是 im1.im.ncue.edu.tw。
SimpleCA Server 的管理者為 im1.im.ncue.edu.tw 中作業系統的 root 帳號,密碼為 TKG 專用密碼。

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

先與環境中主機的 hosts 檔進行同步,執行:
scp user008@192.168.100.1:/etc/hosts /etc/hosts
# user008@192.168.100.1 的密碼是 TKG 的專用密碼。

[注意!] 請將本機 IP 與 hostname 對映也編輯進入 /etc/hosts 檔案中。
[注意!] 執行:vim /etc/hosts 將本機的 IP 與 hostname 寫入並存檔。

試著 ping 一下:
ping im1

若 ping 成功,請繼續後續步驟。

執行:
cd /etc/grid-security/

再次確認一下主機名稱符合格式,執行:
hostname
# 以 TKG 網格為例,名稱應該是 im*.im.ncue.edu.tw 這樣的格式,* 代表數字。
# 若主機名稱有出入,請修改 /etc/hostname 並重新開機。

接下來要產生主機認證檔,執行:
grid-cert-request -host `hostname`

以上指令會在 /etc/grid-security 底下產生:
hostcert.pem
hostcert_request.pem
hostkey.pem

其中 hostcert.pem 目前暫時為空,大小是 0K。
要傳送 hostcert_request.pem 到 SimpleCA Server 進行認證,才會產生一個可用的 hostcert.pem。

接下來將 hostcert_request.pem 傳送到 im1 (192.168.100.1),執行:
scp hostcert_request.pem user008@im1:~/temp/

接著要對 hostcert_request.pem 檔進行認證,需要登入到 SimpleCA Server 進行操作。
請另外開啟一個 SSH 連線,以 user008 這個帳號登入 im1 (192.168.100.1)。

執行:
ssh user008@im1

@im1 執行:
sudo su -

@im1 執行:
cd /home/user008/temp

@im1 執行:
grid-ca-sign -in hostcert_request.pem -out hostcert.pem

以上指令會要求 SimpleCA Server 的管理密碼,密碼為 TKG 專用密碼。
完成後就可以結束對 im1 的連線了。

回到認證中的網格主機,切換到 root 身份,然後執行:
cd /etc/grid-security/

從 SimpleCA Server 將認證產生的 hostcert.pem 取回,執行:
scp user008@im1:~/temp/hostcert.pem /etc/grid-security/hostcert.pem

執行:
ls -lh

檢查 hostcert.pem 大小是否仍為 0K。

---------

TKG 網格使用者認證:

TKG 網格中只有一個 VO 使用者 user008,因此直接取用認證過 user008 身份的驗證檔案即可。
# 上一行中的 user008 指的是「網格使用者 user008」,不是「作業系統使用者 user008」。

[注意!] 首先,切換身份成「作業系統使用者 user008」:
su - user008

執行:
cd /home/user008

直接取用認證好的網格使用者檔案,執行:
scp -r user008@im1:~/.globus /home/user008/

執行:
grid-proxy-init

顯示:
Your identity: /O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008
Enter GRID pass phrase for this identity: # 輸入 TKG 專用密碼

grid-proxy-init 順利初始化,代表認證成功。

---------

新網格使用者認證:

若要用「作業系統使用者 user008」認證建立一個名稱非 user008 的新網格使用者,
[注意!]請先切換身份成「作業系統使用者 user008」:
su - user008

執行:
cd ~

執行:
grid-cert-request

顯示:
Enter your name, e.g., John Smith: # 請輸入新網格使用者名稱
Enter PEM pass phrase: # 請輸入新網格使用者的密碼
Verifying - Enter PEM pass phrase: # 請輸入新網格使用者的密碼

以上執行完畢會在 user008 家目錄底下產生一個 .globus 資料夾,裡面有:
usercert.pem
usercert_request.pem
userkey.pem

其中 usercert.pem 目前暫時為空,大小是 0K。
要傳送 usercert_request.pem 到 SimpleCA Server 進行認證,才會產生一個可用的 usercert.pem。

接下來將 usercert_request.pem 傳送到 im1 (192.168.100.1),執行:
scp ~/.globus/usercert_request.pem user008@im1:~/temp/

接著要對 usercert_request.pem 檔進行認證,需要登入到 SimpleCA Server 進行操作。
請另外開啟一個 SSH 連線,以 user008 這個帳號登入 im1 (192.168.100.1)。

執行:
ssh user008@im1

@im1 執行:
sudo su -

@im1 執行:
cd /home/user008/temp

@im1 執行:
grid-ca-sign -in usercert_request.pem -out usercert.pem

以上指令會要求 SimpleCA Server 的管理密碼,密碼為 TKG 專用密碼。
完成後就可以結束對 im1 的連線了。

回到進行身份認證的主機,切換到正在認證網格身份的「作業系統使用者帳號」:
su - user008

執行:
cd ~

從 SimpleCA Server 將認證產生的 usercert.pem 取回,執行:
scp user008@im1:~/temp/usertcert.pem ~/.globus/usercert.pem

執行:
ls -lh .globus

檢查 usercert.pem 大小是否仍為 0K。

執行:
grid-proxy-init

grid-proxy-init 順利初始化,代表認證成功。

***************************

九、關於 grid-mapfile

grid-mapfile 是記錄「網格使用者」和「作業系統使用者」的映對檔。

以 TKG 網格為例,grid-mapfile 的內容類似於:
"/O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw/CN=user008" user008

「/O=ncue/OU=tkgroup/OU=im.ncue.edu.tw/OU=im.ncue.edu.tw」代表 im.ncue.edu.tw 這個虛擬組織(VO)。
「/CN=user008」代表虛擬組織(VO)內的 user008 這位使用者。
「"虛擬組織(VO)/CN=使用者"」後,空一格,接著的是作業系統中 user008 這個使用者帳號。

整行的意思是:
虛擬組織(VO)內的 user008 這位使用者,可以透過作業系統中的 user008 帳號運用系統資源。

如此就很好理解了,相當於網格中的某個使用者要來運用這台主機資源時,該用哪個相對的帳號來登入。

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

為了讓網格中其他的機器也可以來運用本機資源,執行:
cp /opt/globus_ubuntu/grid-mapfile /etc/grid-security/

***************************

十、安裝 MPICH

# 請先使用「sudo su -」指令切換成作業系統的 root 身份。

執行:
cd /opt/globus_ubuntu/

執行:
tar zxvf mpich.tar.gz

執行:
mkdir /opt/mpich

執行:
cd mpich-1.2.7p1/

x86_32 環境執行:
./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc32dbg

x86_64 環境執行:
./configure --prefix=/opt/mpich/ --with-device=globus2:-flavor=gcc64dbg

執行:
make | tee mpich_make.log

執行:
make install

接下來測試一下 MPICH 是否可以運作,先切換到有認證進網格的作業系統使用者 user008。

執行:
su - user008

執行:
cp /opt/mpich/examples/cpi.c .

執行:
mpicc cpi.c -o cpi

在同一個目錄底下,執行:
vim machines

編寫 machines 檔,內容是:
"本機的 hostname" 1

編輯完成後,執行:
grid-proxy-init

Grid Proxy 起始化後,執行:
mpirun -np 1 cpi

順利的話,螢幕會印出 Pi 的值與執行的主機名稱。

***************************

Reference :
01. http://en.wikipedia.org/wiki/Virtual_Organization
02. http://www.globus.org/security/overview.html
03. http://www.globus.org/security/
04. http://blog.tmu.edu.tw/tedyeng/000071.html

Globus Toolkit 概要

Globus Toolkit (GT) 是一套網格中介軟體,是網格的基礎建設。
如果所有主機都佈署 GT,那麼網格裡某個 node 的使用者就可以透過 GT 使用其他 node 的資源。
#最新版本是 Globus Toolkit 5.0.0 (2010/03)

概念類似於 Web Service,大家遵循一定的規範將主機資源對外開放,外界對其存取有必需的流程及限制。

當然,背後的運作還有許多事情需要處理,
例如:資源的搜尋;使用者認證與授權;任務的分發;結果的傳遞;錯誤處理 ......。
這些使用者都不用去操心,Globus Toolkit 都會幫您處理好,這也是為什麼它叫基礎建設的原因。

其中在安全機制方面,Globus Toolkit 預設提供有 SimpleCA 認證模組,
使用者可以安裝自己的 SimpleCA Server,認證網格機器。

「Globus Toolkit 網格使用者」和「主機作業系統使用者」是不一樣的。
通常會在 Globus Toolkit 的 grid-mapfile 檔案裡作一個映對。
#grid-mapfile 一般在 /etc/grid-security/ 底下。

一組映對通常是這樣子的:
"//U=網格使用者名稱" 作業系統使用者帳號

所以網格使用者對主機的存取權限會為所映對的使用者帳號在該主機的權限所影響。

Linux 使用者可以試著執行:
globus-job-run 主機名稱 /bin/whoami
檢查網格使用者在該主機所映對的作業系統使用者帳號。

Globus Toolkit 4.2.x 和 Globus Toolkit 4.0.x 是沒有辦法兼容的。
官方推薦的 4.0.x 版本是 4.0.8。
官方推薦的 4.2.x 版本是 4.2.1。

編譯安裝 Globus Toolkit 之前,有一些前置工作。

首先先確認您的網格主機都使用在一個網域(domain),例如:*.example.org

編輯您的 /etc/hosts 檔案,讓主機名稱與 IP 位址正確映對。

安裝編譯 Globus Toolkit 所必需的軟體,官方有其必需軟體清單:
//
//

除了 Apache Ant 和 Java SDK,建議直接使用 apt-get 安裝以上軟體和函式庫。

Apache Ant 和 Java SDK 可以直接解壓縮到 /opt 目錄底下使用。

編輯 /etc/profile 檔案,將 Java 和 Apache Ant 的 bin 目錄加入環境變數。
假設 Globus Toolkit 將安裝在 /opt/globus 底下,則將 GLOBUS_LOCATION 變數也加入 shell 環境中:

JAVA_HOME=/opt/java
ANT_HOMT=/opt/ant
GLOBUS_LOCATION=/opt/globus

PATH=$GLOBUS_LOCATION/bin:$GLOBUS_LOCATION/sbin:$JAVA_HOME/bin:$ANT_HOME/bin:$PATH;

在最後加上以下指令,以便之後每次登入都自動匯入 Globus 環境變數:
. $GLOBUS_LOCATION/.../globus-user-env.sh

然後使用 source 指令讓 /etc/profile 的設定立即生效:
source /etc/profile

#先不用理會 gloubs-user-env.sh 無效的通知,因為還不存在。

將 Globus Toolkit 原始碼檔案解壓縮,進入其資料夾,使用以下指令 configure 產生 make 檔:
./configure --prefix=/opt/globus

順利設定完成便可以用以下指令進行編譯:
make | tee gt_make.log

編譯產生的訊息會儲存到 gt_make.log 檔案中,以便除錯。

順利編譯完成便可以用以下指令進行安裝:
make install

接下來是 Globus Toolkit 的後置部署,使用 gpt-build 這個指令。
這部分主要是 Globus Toolkit 安全機制 GSI 的部署。

全新安裝的網格通常還沒有 SimpleCA Server,可以使用 Globus Toolkit 所附帶的 SimpleCA,
第一臺安裝 Globus Toolkit 的機器可以身兼 SimpleCA Server。

安裝 SimpleCA Server ...

每個 Globus Toolkit 的 SimpleCA Server 都會有唯一一個網格認證檔,檔案名稱會是:
globus_HASH_.....
#HASH 是一串亂數編碼。

非 SimpleCA Server 的機器進行 Globus Toolkit 後置部署需要 SimpleCA Server 的網格認證檔。

將網格認證檔複製到 /opt/globus 底下,并切換到該目錄,使用以下指令:
32 位元環境:gpt-build globus_HASH_..... gcc32dbg
64 位元環境:gpt-build globus_HASH_..... gcc64dbg

然後執行:
gpt-postinstall

Kernel-based Virtual Machines

# 作業系統環境:Ubuntu 9.10 Server x86_64

一、安裝 KVM (Kernel-based Virtual Machines)

首先,確認 CPU 是否支援虛擬指令集。

開啟終端機,執行:
egrep '(vmx|svm)' --color=always /proc/cpuinfo

如果畫面印出相關資訊,並且有 highlight 的 vmx 或 svm 的字串,代表 CPU 有支援。

執行:
sudo apt-get update && sudo apt-get upgrade

執行:
sudo aptitude install kvm libvirt-bin ubuntu-vm-builder bridge-utils

# 安裝過程中會出現 Postfix 的問項,可以選 Internet。

安裝完成,執行:
sudo adduser `id -un` libvirtd

將當前登入的使用者加入 libvirtd 群組,方能執行 virsh 指令。
執行完畢,請登出,再重新登入,讓設定生效。

執行:
virsh -c qemu:///system list

有成功印出訊息,代表安裝成功。

***

二、設定橋接網路 ( bridge network )

# 如果您打算使用 KVM 預設 NAT 網路,請直接跳過這一步驟。
# 但在新增虛擬機器的時候,請注意調整符合的網路參數!
# 以下操作可能無法從遠端執行,因為涉及網路的中斷及重開。

安裝橋接用的套件,執行:
sudo apt-get install bridge-utils

# 注意!執行以下指令會讓網路切斷,SSH 將無法遠端連線!
為了確保設定期間沒有特殊問題,要先停掉網路服務,執行:
sudo invoke-rc.d networking stop

先備份原始網路設定檔:
sudo cp /etc/network/interfaces /etc/network/interfaces-backup

執行:
sudo vim /etc/network/interfaces

將 interfaces 內容編輯成類似:
# 以下為 TKG 網格的 Private Network 設定,請根據需求自行調整。
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
address 192.168.100.主機號碼
network 192.168.100.0
netmask 255.255.255.0
broadcast 192.168.100.255
gateway 192.168.100.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0

存檔離開後,執行:
sudo invoke-rc.d networking stop && sudo /etc/init.d/networking restart

網路順利啟動後,可以試著用 SSH 遠端登入看看。
可以執行更新或 ping DNS 等動作進行測試。

虛擬機器的各項預設值,可以參考 /etc/vmbuilder/libvirt/libvirtxml.tmpl 檔案。

***

三、安裝第一台虛擬機器

KVM 目前有三套主流管理工具:
virt-manager:一個圖形介面的管理工具,可以安裝在有 X window 的 Linux 機器上。
virt-install:一個用 python 撰寫的文字介面管理工具,Red Hat 開發。
ubuntu-vm-builder:文字介面管理工具,Canonical 開發。

virt-install 有比較大的操作自由度,所以選用它進行管理操作。

先把它裝起來,執行:
sudo apt-get install python-virtinst

查看 virt-install 各項的參數,執行:
virt-install --help

查看 virt-install 完整的使用說明,執行:
man virt-install

執行:
virt-install \
--connect qemu:///system \
--name=虛擬機器的名稱 \
--ram=分配的記憶體大小 [MB] \
--os-type=作業系統類型 [ex: linux] \
--os-variant=作業系統的版本名稱 [ex: ubuntujaunty] \
--hvm [全虛擬化,hvm 與 paravirt 擇其一,請參考附錄] \
--paravirt [半虛擬化,hvm 與 paravirt 擇其一,請參考附錄] \
--accelerate [KVM 加速器] \
--cdrom=系統安裝光碟的路徑 [ex: *.iso] \
--file=虛擬硬碟的路徑 [ex: *.qcow2] \
--file-size=虛擬硬碟的大小 [GB] \
--bridge=br0 [注意:如果您沒有使用橋接網路,請設定成 --network=default] \
--vnc \
--noautoconsole \
--debug

一個完整的例子如下:
virt-install \
--connect qemu:///system \
--name=imVM \
--ram=1024 \
--os-type=linux \
--os-variant=ubuntujaunty \
--hvm \
--accelerate \
--cdrom=~/ubuntu-9.04.iso \
--file=~/imVM.qcow2 \
--file-size=8 \
--bridge=br0 \
--vnc \
--noautoconsole \
--debug

順利執行完畢,虛擬機器就存在了。
新建的虛擬機器,其描述檔為:
/etc/libvirt/qemu/虛擬機器名稱.xml

要將新建的虛擬機器進行第一次開機,執行:
virsh

virsh # start 虛擬機器名稱
virsh # list --all
virsh # quit

確定虛擬機器開機後,到 X window 環境的機器底下,執行:
sudo apt-get install virt-viewer

執行:
virt-viewer --connect qemu+ssh://使用者帳號@虛擬機器的母體主機位址/system 虛擬機器名稱

成功登入之後,將會出現遠端的虛擬機器畫面。
進行正常的作業系統安裝動作,完成後關機。

再次進入 virsh 開機,然後從其他機器 SSH 連線測試。
如果出現問題,請使用 virt-viewer 檢查虛擬機器狀況。

***

四、使用已存在的虛擬硬碟檔安裝新的虛擬機器

執行:
virt-install \
--connect=qemu:///system \
--name=新的虛擬機器名稱 \
--ram=新的虛擬機器記憶體大小 [MB] \
--os-type=作業系統類型 \
--os-variant=作業系統名稱 \
--accelerate \
--file=已存在的虛擬硬碟路徑 [ex: *.qcow2] \
--bridge=br0 [注意:如果您沒有使用橋接網路,請設定成 --network=default] \
--vnc \
--noautoconsole \
--debug \
--import

***

五、複製虛擬機器

執行:
virt-clone \
--connect=qemu:///system \
-o 舊的虛擬機器名稱 \
-n 新的虛擬機器名稱 \
-f 新的虛擬硬碟路徑 [ex: *.qcow2]

***

六、虛擬機器的管理

執行:
virsh

# 查看所有可以用指令
virsh # help

# 取出虛擬機器描述檔
virsh # dumpxml 虛擬機器名稱 /tmp/虛擬機器描述檔 [ex: *.xml]

# 使用虛擬機器描述檔建立虛擬機器
virsh # define /etc/libvirt/qemu/虛擬機器描述檔 [ex: *.xml]

# 移除虛擬機器
virsh # undefine 虛擬機器名稱

# 列出所有虛擬機器
virsh # list --all

# 啟動虛擬機器
virsh # start 虛擬機器名稱

# 關閉虛擬機器
virsh # shutdown 虛擬機器名稱

# 拔除虛擬機器電源
virsh # destory 虛擬機器名稱

***

附錄:

Full Virtualization specific options

Parameters specific only to fully virtualized guest installs.

--sound
Attach a virtual audio device to the guest.

--noapic
Override the OS type / variant to disables the APIC setting for fully virtualized guest.

--noacpi
Override the OS type / variant to disables the ACPI setting for fully virtualized guest.

Virtualization Type options

Options to override the default virtualization type choices.

-v, --hvm
Request the use of full virtualization, if both para & full virtualization are available on the host. This parameter may not be available if connecting to a Xen hypervisor on a machine without hardware virtualization support. This parameter is implied if connecting to a QEMU based hypervisor.

-p, --paravirt
This guest should be a paravirtualized guest. If the host supports both para & full virtualization, and neither this parameter nor the "--hvm" are specified, this will be assumed.

--accelerate
When installing a QEMU guest, make use of the KVM or KQEMU kernel acceleration capabilities if available. Use of this option is recommended unless a guest OS is known to be incompatible with the accelerators. The KVM accelerator is preferred over KQEMU if both are available.

***

Reference :
01. https://help.ubuntu.com/community/KVM
02. http://thundersha.blogspot.com/2008/07/ubuntu-kvmgui-sector2.html
03. http://www.boobooke.com/v/bbk1819/
04. http://southbrain.com/south/2009/08/youtube-examples-of-xvm-virtin.html

使用 tar 指令

使用範例:將整個 /etc 目錄下的檔案全部打包到 /tmp 底下

[root@linux ~]# tar -cvf /tmp/etc.tar /etc <==僅打包,不壓縮!
[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc <==打包後,以 gzip 壓縮
[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc <==打包後,以 bzip2 壓縮

在參數 f 之後的檔案檔名是自己取的,習慣上都用 .tar 來作為辨識。
如果加 z 參數,則以 .tar.gz 或 .tgz 來代表 gzip 壓縮過的 tar file。
如果加 j 參數,則以 .tar.bz2 來作為附檔名。

上述指令在執行的時候,會顯示一個警告訊息:
『tar: Removing leading `/' from member names』
這是關於絕對路徑的特殊設定。

解壓縮:
[root@linux ~]# tar zxvf /tmp/etc.tar.gz <==解開 gzip
[root@linux ~]# tar jxvf /tmp/etc.tar.bz2 <==解開 bzip2

星際譯王

星際譯王是一套相當好用的翻譯軟體。
Ubuntu 底下安裝星際譯王(StarDict)非常簡單。
可以在終端機中執行以下指令:
sudo apt-get install stardict
安裝完成後,可以到 http://stardict.sourceforge.net/Dictionaries.php 下載字典檔。


選擇自己喜歡的字典檔下載即可。
下載後,可以使用以下指令解壓縮:
tar -jxvf 字典檔.tar.bz2 
把解壓縮後的字典檔資料夾搬到 /usr/share/stardict/dic/ 底下就可以使用了。


再來到 http://stardict.sourceforge.net/download.php 下載發音檔。
下載後,使用以下指令解壓縮:
tar -jxvf WyabdcRealPeopleTTS.tar.bz2 
把解壓縮後的 WyabdcRealPeopleTTS 資料夾搬到 /usr/share/ 底下。


開啟星際譯王,點一下右下角的小扳手進行設定。
點選 字典(Dictionary) 底下的 聲音(Sound)選項 ,將聲音播放的命令從 play 改成 aplay。
現在收尋的單字應該可以發音了

有興趣的人還可以試一下 QStarDict,是以 Qt 為基礎開發使用者介面的 StarDict。

使用 UUID 開機自動掛載硬碟

UUID(Universally Unique Identifier)

維基百科:
UUID 的目的,是讓分散式系統中的所有元素,都能有唯一的辨識資訊,
而不需要透過中央控制端來做辨識資訊的指定。
如此一來,每個人都可以建立不與其它人衝突的 UUID。

使用以下指令查詢所有掛載磁區的 UUID,
但必須小心確認哪一個磁區對應的是哪一個 UUID:
ls -l /dev/disk/by-uuid/

可以使用 blkid 查詢指定磁區的 UUID,例如查詢 sda1:
blkid /dev/sda1

開機自動掛載的磁區通常紀錄在 /etc/fstab 檔案。
要設定開機掛載就需要修改 /etc/fstab 檔案。
直接看一下 /etc/fstab 的內容:

---

# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
#
proc /proc proc defaults 0 0

# / was on /dev/sda1 during installation
UUID=根目錄磁區的UUID / ext4 errors=remount-ro 0 1

# /home was on /dev/sda3 during installation
UUID=家目錄磁區的UUID /home ext4 defaults 0 2

# swap was on /dev/sda2 during installation
UUID=置換空間磁區的UUID none swap sw 0 0

# 光碟機的掛載設定
/dev/scd0 /media/cdrom0 udf,iso9660 user,noauto,exec,utf8 0 0

# 以上是一般 /etc/fstab 基本內容
# 以下可以新增自己的掛載磁區,以掛載 Windows 系的 NTFS 檔案系統為例

# 使用者自行設定的掛載
UUID=磁碟磁區的UUID 自行設置的掛載目錄路徑 ntfs defaults 0 0

---

將編輯完成的 /etc/fstab 存檔後重新開機。
如果順利開機成功,便是設置完成了。

一般建議先備份一個原始的 /etc/fstab 檔再進行編輯。

SSH 免密碼登入

Linux/Ubuntu 底下,假設您要從 PC-A 的 user1 免密碼驗證 SSH 登入到 PC-B 的 user2。
如果兩台機器的使用者您都很信得過,覺得大家互相登入來登入去,ok 的!
那底下是直接的指令,只有 3 行,照著執行完就可以了:

user1@PC-A:~$ ssh-keygen -t rsa

user1@PC-A:~$ cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

user1@PC-A:~$ scp -r ~/.ssh user2@PC-B:~/

*輸入第一行指令後一直壓 enter,都使用預設或空白的設定即可。
*注意:操作完成,PC-A 的 user1 和 PC-B 的 user2 是可以「互相」免密碼登入的唷!

如果遇到 ssh host key check 的問題,可以在登入的 ssh 指令後加上:
-o StrictHostKeyChecking=no

強制忽略欲登入主機的 host key 檢查,例如:
user1@PC-A:~$ ssh -o StrictHostKeyChecking=no user2@PC-B

---

基本的原理就是使用一對「公鑰/私鑰」。
欲登入方持有私鑰,被登入方持有公鑰。
以自動驗證公鑰、私鑰是否成對來進行登入確認。

公鑰、私鑰是成對的,只要產生一組並且把它們保存好,就可以一直用。
公鑰、私鑰驗證的細節是很神奇的數學,這就不談了,因為我也不懂。
我只簡單地、直接地說一下免密碼登入怎麼設定,更多內容可以參考 reference。

user1 先在 PC-A 下先產生一對公鑰、私鑰,使用:
ssh-keygen -t rsa

它會請您設定鑰匙存放的路徑、以及一個使用時的 passphrase。
*請務必使用預設即可!
*一直壓 enter 鍵就好了!

完成後,user1 的家目錄底下會有 .ssh 這個資料夾,使用:
cd ~/.ssh/
ls -l ~/.ssh/

裡面至少會有這兩個檔案:
id_rsa
id_rsa.pub

id_rsa 就是這次產生的私鑰,id_rsa.pub 則是這次產生的公鑰。

接下來,如果您很懶,直接使用:
cp id_rsa.pub authorized_keys

將公鑰複製成檔名為 authorized_keys 的檔案。

然後使用:
scp -r ~/.ssh user2@PC-B:~/

將 user1 在 PC-A 上的整個 .ssh 資料夾複製到 PC-B 的 user2 家目錄下。
*注意:如此一來,不僅 user1 可以從 PC-A 直接免密碼登入 PC-B 的 user2。
*注意:如此一來,就連 PC-B 的 user2 也可以直接免密碼登入 PC-A 的 user1!

如果您不希望 PC-B 的 user2 免密碼登入 PC-A 的 user1,上面步驟做完後,
登入 PC-B 的 user2,使用:
cd ~/.ssh/

再使用:
rm id_rsa id_rsa.pub

在 user2 的 .ssh 資料夾裡僅留下 authorized_keys 檔案即可。

Reference:
01. http://josephjiang.com/article/understand-ssh-key/
02. http://help.github.com/linux-key-setup/
03. http://linuxcommando.blogspot.com/2008/10/how-to-disable-ssh-host-key-checking.html

Gnome 鑰匙圈

忘記 Gnome Keyring 的密碼。

Empathy 預設好像會請求設定一個 keyring,來防止別人隨便登入你的 IM。
有時候挺麻煩的,因為 desktop 都自己在用,有時候覺得其實不需要。
然後有一天可能突然就忘了那個密碼到底設定啥來著。

執行:
cd ~/.gnome2/keyrings/

可以看到相關的檔案,不過密碼內容是編碼過的。

執行:
rm ~/.gnome2/keyrings/*

就可以讓預設 keyring 密碼為空了。

Reference:
http://live.gnome.org/GnomeKeyring

Launchapd PPA & GPG

PPA(Personal Package Archive)

在說 PPA 之前,先來談一下 Launchpad(https://launchpad.net/)。

維基百科告訴我們:
Launchpad 是 Ubuntu 母公司 Canonical 所架設的網站,
是一個提供維護、支援或連絡「Ubuntu 開發者」的平台。

Launchpad 是一個軟體合作平台,註冊帳號之後,你可以在上面開啟或參與軟體專案。
Inkscape、MySQL 等都有使用 Launchpad 做 code hosting。
Ubuntu 預設的標準套件庫也是連到 Launchpad。
Launchpad 幾乎是所有 Ubuntu package 的維護中心。

Every individual and team in Launchpad can have one or more PPAs, each with its own URL.

前面說過,只要有註冊 Launchpad 的帳號,
個人或組織可以在上面展開一個或多個軟體專案。
一個 Launchpad 帳號即有一個 PPA(Personal Package Archive)。
我暫時翻為:個人套件庫
例如:Chrome for ubuntu(https://launchpad.net/~chromium-daily/)
其中小波浪(~)後面跟著的 chromium-daily 就是 Launchpad 帳號了。

Using a Personal Package Archive (PPA), you can distribute software and updates directly to Ubuntu users. Create your source package, upload it and Launchpad will build binaries and then host them in your own apt repository.

你在 PPA 底下開發的軟體,是可以直接發佈或更新給 Ubuntu 的使用者的。
只要該使用者取得你 PPA 的位址,並且將該 PPA 位址加入他的來源清單。
他之後就可以使用 apt-get 指令從你的 PPA 安裝或更新軟體。

Ubuntu 9.10 版之後,新增一個 PPA 來源很簡單。
只要連到欲加入 PPA 的 Launchpad 網頁(PPA's overview page),
找到類似底下型式的 PPA 位址:
ppa:某個 Launchpad 帳號/名稱
(例如:ppa:chromium-daily/stable)
在終端機底下執行:
sudo add-apt-repository ppa:某個 Launchpad 帳號/名稱
(例如:sudo add-apt-repository ppa:chromium-daily/stable)
最後,再執行一下:
sudo apt-get update

---

而舊版 Ubuntu 的 PPA 來源新增,一樣需要到該 PPA 的 Launchpad 網頁,
找到類似底下型式的位址:
deb http://ppa.launchpad.net/某個 Launchpad 帳號/名稱/ubuntu 你的 Ubuntu 版本代號 main
deb-src http://ppa.launchpad.net/某個 Launchpad 帳號/名稱/ubuntu 你的 Ubuntu 版本代號 main
(例如:deb http://ppa.launchpad.net/chromium-daily/stable/ubuntu lucid main)
(例如:deb-src http://ppa.launchpad.net/chromium-daily/stable/ubuntu lucid main )
複製這兩行來源位址,新增到以下的檔案的最末行:
/etc/apt/sources.list

將 sources.list 存檔,關閉。
回到該 PPA 的 Launchpad 網頁(PPA's overview page),
找到類似底下字串的簽名金鑰(Signing key),例如它可能是:
1024R/4E5E17B5
*注意:這只是例子,你要新增的 PPA 的金鑰跟上面那行字串可能是不同的。

複製後面的 4E5E17B5,到終端機底下執行:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4E5E17B5
*注意:記得把 4E5E17B5 換成你真正要新增的 PPA 的金鑰。
最後,再執行一下:
sudo apt-get update

---

如果是使用桌面版的 Ubuntu,套件來源以及 PPA 的管理可以到:
System -> Administration -> Software Source
*注:我是裝英文版 Ubuntu,我想中文應該是翻成:系統 -> 管理 -> 軟體來源

---

GPG(GNU Privacy Guard)

GPG(或稱 GnuPG)是使用公開金鑰(Public Key)的加密系統。
其中 OpenPGP、PGP、GPG/GnuPG 是三個不一樣的東西。

OpenPGP 是一套加密技術的標準規範,並不是一套程式。
PGP 是 Pretty Good Privacy 的縮寫,是根據 OpenPGP 規範實作的一套程式。
GPG/GnuPG 是 GNU Privacy Guard 的縮寫,是根據 OpenPGP 規範實作的一套程式。

Ubuntu 預設安裝的是 GPG/GnuPG,可以執行以下指令查看說明:
gpg --help

你可以 GPG 來產生自己的金鑰,可以加密電子郵件、製作電子簽名等等。
Launchpad 也是使用 GPG 作加密驗證。

GPG 的公鑰與私鑰是成對的。

---

透過 Proxy 來取得 gpg key:gpg --keyserver-options http-proxy --keyserver keyserver.ubuntu.com --recv-key E5267A6C

keyserver 出狀況時,只好手動來了
wiki.debian.org/SecureApt
1] get the public key file
2] apt-key add the_public_key_file

---

Reference:
http://wiki.ubuntu-tw.org/index.php?title=Launchpad
https://help.launchpad.net/Packaging/PPA
https://help.ubuntu.com/community/GnuPrivacyGuardHowto
http://wiki.debian.org.hk/w/Add_software_repositories_in_Ubuntu

Further Reading:
http://zh-tw.whygitisbetterthanx.com/

Ubuntu 套件庫

類似 Ubuntu 的作業系統中(其實就是 Debian 系的 GNU/Linux 作業系統),
軟體程式通常是使用 .deb 套件的方式來封裝,
相對於 Red Hat 系的 GNU/Linux 作業系統就是使用 .rpm 套件。

一個 .deb 套件通常包括了一個程式與其所需要的函式庫,可以透過網路或 CD 得到它們。
而 Repositories(套件庫)則是專門儲存各式套件的伺服器,
可以透過類似 Synaptic 的軟體來存取套件庫。
或桌面左上角 Application(應用程式) -> Ubuntu Software Center(Ubuntu 軟體中心)。

Ubuntu 套件庫以四大類區分(*可參考 reference 03):
Main - Ubuntu 官方支援的套件
Restricted - Ubuntu 官方支援,但並非完全開源的套件
Universe - 非 Ubuntu 官方支援,但是由自由社群維護著的套件
Multiverse - 非開源套件

Ubuntu 套件庫清單儲存在:
/etc/apt/source.list

編輯前建議先使用以下指令備份:
sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

/etc/apt/source.list 的內容是許多類似下列的東西:
# deb cdrom:[Ubuntu 10.04 LTS _Lucid Lynx_ - Release i386 (20100429)]/ lucid main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to newer versions of the distribution.
deb http://tw.archive.ubuntu.com/ubuntu/ lucid main restricted
deb-src http://tw.archive.ubuntu.com/ubuntu/ lucid main restricted

# 開頭的是註解。
deb 開頭,表示其包括了預先編譯或已編譯完成的套件執行檔,適合使用者。
deb-src 開頭,表示其包括了套件的未編譯原始碼,適合開發者。
在套件庫位址後空一格緊跟著的是 Ubuntu 的版本代號,例如:lucid、hardy。
在版本代號後空一格緊跟著的是套件庫的四大分類名稱,可以填很多個,使用空格分開。

要刪除某些套件庫位址,可以在其位址最前加上 # 號,或將其整列刪除。

要新增某些套件庫位址,可以新增在 /etc/apt/source.list 檔案最末列之後。
例如將以下內容加入 /etc/apt/source.list 將其存檔關閉:
deb http://ppa.launchpad.net/chromium-daily/ppa/ubuntu lucid main 
deb-src http://ppa.launchpad.net/chromium-daily/ppa/ubuntu lucid main

以上例子是加入 PPA 套件庫,所以還必須讓系統記錄該 PPA 套件庫的公開金鑰,
從該 PPA 套件庫的 Launchpad 網頁取得金鑰後,假設是:
4E5E17B5

則執行:
#
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4E5E17B5

然後執行:
sudo apt-get update && sudo apt-get upgrade

若順利執行完成則代表套件庫新增成功。

Ubuntu 9.10 之後,可以使用 add-apt-repository 工具,新增 PPA 套件庫更為簡單。
若無此工具,可以執行以下指令安裝:
sudo apt-get install python-software-properties

使用 add-apt-repository 新增套件庫時,可以執行以下指令:
sudo add-apt-repository ppa:[repository-name]

其中 [repository-name] 從 Launchpad 頁面取得,通常是一個 Launchpad 帳號。
有時候會加一個 /,後面指定該 Launchpad 帳號下的某個套件庫分支(branch),
例如:
ppa:chromium-daily/stable

任何時候修改完 /etc/apt/source.list,請務必執行 sudo apt-get update 檢查。

Reference:
01. https://help.ubuntu.com/community/Repositories
02. https://help.ubuntu.com/community/Repositories/Ubuntu
03. http://www.ubuntu.com/project/about-ubuntu/components
04. https://help.ubuntu.com/community/Repositories/CommandLine