2013年1月24日 星期四

Rasper Pi 連接非HDMI螢幕的顯示設定

如果 Rasper Pi 是透過轉接頭(HDMI to DVI 或 HDMI to VGA)連接液晶螢幕,最好先修改SD卡中的config.txt檔案內容,可以避免因為顯示器頻率問題而造成畫面無法出現。


需要更改的項目:(將原先 hdmi_group=2 和 hdmi_mode=16 前面的 # 拿掉)

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=2
hdmi_mode=16


讓KVM虛擬系統的Windows Guest有比較高的螢幕解析度與色彩品質

主要是在Windows Guest中將顯示卡設定成『vmvga』,再安裝正確的驅動程式,就可以提升Windows虛擬機器的螢幕解析度與色彩品質。





詳細內容請參考 Using Vmware VGA with KVM Windows Guests 一文,網址 http://www.linux-kvm.com/content/using-vmware-vga-kvm-windows-guests

驅動程式下載:
1. vmwarevga32-kvm.iso
2. vmwarevga64-kvm-2.iso

2013年1月23日 星期三

解決 Oulook 2007/2010 無法透過 SME Server 8 寄信


# config setprop qpsmtpd TLSBeforeAuth 0
# signal-event email-update

blogspot 時區設定


SME Server 的PHP暫存目錄(tmp)設定

假設 ibay 名稱為 sitweb:

步驟一
IBAY='ibayname'

db accounts setprop $IBAY PHPBaseDir /tmp/:/home/e-smith/files/ibays/$IBAY/html/:/home/e-smith/files/ibays/$IBAY/tmp
db accounts setprop $IBAY AllowOverride All
db accounts setprop  $IBAY FollowSymLinks enabled
signal-event ibay-modify $IBAY
/etc/init.d/httpd-e-smith restart

步驟二

mkdir -p /etc/e-smith/templates-custom/etc/php.ini
cp /etc/e-smith/templates/etc/php.ini/50PathsDirectories /etc/e-smith/templates-custom/etc/php.ini
echo upload_tmp_dir = \"/home/e-smith/files/ibays/$IBAY/tmp\" >> /etc/e-smith/templates-custom/etc/php.ini/50PathsDirectories
expand-template /etc/php.ini
sv t httpd-e-smith


參考資料:http://bricoles.du-libre.org/doku.php/sme:apache

避免Windows8畫面暫時凍結


1. 關閉系統還原
2. 啟用Hyper-V
3. 更新顯示卡驅動程式
4. 掃描保護的系統檔案(sfc /scannow) 

2013年1月17日 星期四

建立一個高可用性(HA, High-Availability)的網路儲存系統


本案例將介紹如何利用GlusterFS建立一個高可用性(HA, High-Availability)的網路儲存系統。目標是希望能夠將二台網路伺服器的儲存空間透過網路執行鏡像(Mirror)的功能,當使用者對網路儲存系統寫入檔案時,二台伺服器會自動複製(replicate),即使有一台伺服器故障也不會造成資料的損失。

本案例將利用三台安裝Ubuntu 12.04作業系統的電腦來完成:
Server1.eagle.com.tw  ----  IP: 192.168.0.100 (server)
Server2.eagle.com.tw  ----  IP: 192.168.0.101 (server)
Client1.eagle.com.tw  ----  IP: 192.168.0.102 (client)

所有的步驟均需以root權限執行,因此建議先執行 sudo su 或者在底下步驟的每個指令之前自行加入 sudo 指令。

1. 修改 /etc/hosts 內容 (非必須) 為了能夠快速而正確的解析電腦名稱,請先將此三台電腦的 /etc/hosts 內容修改如下:

127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.eagle.com.tw     server1
192.168.0.101   server2.eagle.com.tw     server2
192.168.0.102   client1.eagle.com.tw     client1

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

註:網域名稱請依照實際網路環境輸入,如果不欲使用電腦名稱而打算全部使用IP來完成,則此步驟可以省略,無須更動 /etc/hosts內容。

2. 在server1和server2安裝GlusterFS Server:

apt-get install glusterfs-server
glusterfsd --version

此時應該可以看到類似底下的內容代表安裝正確完成: glusterfs 3.2.5 built on Jan 31 2012 07:39:58 Repository revision: git://git.gluster.com/glusterfs.git Copyright (c) 2006-2011 Gluster Inc.http://www.gluster.com GlusterFS comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of GlusterFS under the terms of the GNU General Public License.

此案例擬將資料同時寫入server1和server2的 /data 目錄,因此請分別在此 二台電腦新增一個 /data 目錄:
mkdir /data

3. 在server1將server2加入叢集,並檢視叢集成員狀態:

gluster peer probe server2.eagle.com.tw
gluster peer status

如果一切正常,應該可以看到類似底下的內容: Number of Peers: 1 Hostname: server2.eagle.com.tw Uuid: 7cd93007-fccb-4fcb-8063-133e6ba81cd9 State: Peer in Cluster (Connected)

4. 在server1建立卷冊(testvol)將二台server的 /data目錄連接起來:

# gluster volume create testvol replica 2 transport tcp server1.eagle.com.tw:/data server2.eagle.com.tw:/data

執行之後會看到:Creation of volume testvol has been successful. Please start the volume to access data.代表卷冊建立成功。

5. 在server1啟動卷冊:
# gluster volume start testvol

6. 在server1檢視卷冊資訊,並設定允許使用卷冊的網路位址或網段:
# gluster volume info

此時會出現底下的資訊,代表卷冊在二台servere間正常運作 Volume Name: testvo Type: Replicate Status: Started Number of Bricks: 2 Transport-type: tcp Bricks: Brick1: server1.eagle.com.tw:/data Brick2: server2.eagle.com.tw:/data

接著設定允許使用卷冊的範圍,在此案例中設定僅client1可以使用,在實際運作中也可以設定整個網段:
# gluster volume set testvol auth.allow 192.168.0.102

7. 在client1安裝 GlusterFS Client,並建立一個目錄來掛載卷冊:

# apt-get install glusterfs-client
# mkdir /mnt/glusterfs
# mount.glusterfs server1.eagle.com.tw:/testvol /mnt/glusterf

接著修改client1的 /etc/fstab 設定開機之後即自動掛載,請編輯 /etc/fstab 並在檔案內容尾端加入一列: server1.eagle.com.tw:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0

8. 測試:

首先在client1建立二個檔案,並使用ls –l 指令察看目錄:
# touch /mnt/glusterfs/test1
# touch /mnt/glusterfs/test2
# ls –l /mnt/glusterfs/

此時應該可以看到 /mnt/glusterfs 目錄下有 test1 和 test2二個檔案。

接著server1或 server2關機,然後在client1繼續建立二個檔案:
# touch /mnt/glusterfs/test3
# touch /mnt/glusterfs/test4
# ls –l /mnt/glusterfs/

此時應該可以看到 /mnt/glusterfs 目錄下有 test1、test2 、test3和 test4四個檔案。這表示當任何一台server發生故障時,並不會影響卷冊中所儲存的資料,用戶端可以繼續正常使用網路儲存系統中的檔案。

接著將剛剛關機的server1或 server2重新啟動,然後在client1再執行一次ls –l /mnt/glusterfs/ 指令察看目錄,感覺上似乎沒有什麼變化,實際上server1和server2已經自動複製(replicate)剛剛離線時產生的檔案。

請在server1和servre2執行 ls –l /data 就可以發現二台server的檔案內容是一樣的。至此,整個高可用性的網路儲存系統就已經建立並測試完成。如果網路速度夠快,將server1和server2置放在不同的位置,也可以形成另一種異地備援;如果再配合筆者先前分享的『使用KVM建立虛擬機器』一文,將虛擬機器映像檔(Virtual Machine Image file)存放在此案例的卷冊中,就可以完成一朵簡單的私有雲(Private Cloud)。


註:
GlusterFS是一種分散式的檔案系統,透過網路將不同的儲存系統結合成一個儲存池,最大容量可達72 brontobytes。

如何在 Android 裝置閱讀使用 DRM 機制的電子書


1. 在Adobe 網站 http://www.adobe.com/tw 註冊取得 Adobe ID

2. 在電腦下載並安裝免費的閱讀軟體Adobe ADE (Adobe® Digital Editions)

3. 安裝完成 Adobe Digital Editions 後請啟動程式,選擇功能列上的「圖書館」 並點選「授權電腦」,輸入您的 Adobe ID,即開始授權電腦設備可以讀取使用 DRM 機制的電子書。

4. 從電腦下載並開始閱讀電子書。

5. Adobe PDF 電子書在電腦資料夾中的位置:C:\Users\使用者名稱\Documents\My Digital Editions。將下載的電子書從電腦複製到 Android 裝置。


7. 開啟 Aldiko Book Reader 並從選單點選設置,在ADOBE DRM的地方輸入您的 Adobe ID
Aldiko Book Reader

8. 接著回主畫面點選文件,再選擇您存放電子書的目錄,接著點選該電子書並選擇『導入』,導入完成即可順利閱讀
import

使用KVM建立虛擬機器(以Ubuntu 12.04 LTS平台為例)


以下的步驟均在Ubuntu 12.04 LTS 環境中執行,並以root身份登入。

1. 先檢查實體電腦是否支援 Intel VT or AMD-V: 
# egrep '(vmx|svm)' --color=always /proc/cpuinfo

如果有出現 vmx 或者 svm 表示實體CPU有支援,如果CPU沒有支援就無法繼續了。
或者您也可以安裝CPU檢查套件來檢查:
# apt-get install cpu-checker
# kvm-ok

如果出現KVM acceleration can be used就表示可以繼續安裝KVM。要注意的是您也必須檢查BIOS是否有將VT的功能開啟。

2. 安裝KVM和 vmbuilder
# apt-get install ubuntu-virt-server python-vm-builder kvm-ipxe

安裝完畢後必須將目前的使用者(root)加入libvirtd的群組,請輸入:
# adduser `id -un` libvirtd
# adduser `id -un` kvm

接著請務必先登出再登入,使群組生效。重新登入後請執行:
# virsh -c qemu:///system list

如果出現底下的畫面,表示您的KVM已經正確運行。
Id 名稱 狀態
----------------------------------

3. 安裝網路橋接(Bridge)界面,讓虛擬機器可以和外面的網路連接:
# apt-get install bridge-utils

安裝完成後必須修改網路組態設定,請使用您熟悉的編輯器開啟/etc/network/interfaces,修改前的組態可能是:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
dns-nameservers 8.8.8.8 8.8.4.4

請將內容修改為:(增加br0橋接界面)

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0 iface eth0 inet manual
auto br0 iface br0 inet static
address 192.168.0.100
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
dns-nameservers 8.8.8.8 8.8.4.4

bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

接著重新啟動網路:
# /etc/init.d/networking restart

檢查修改後的網路組態,看看br0界面是否正常運行以及IP位址是否正確:
# ifconfig

br0 Link encap:Ethernet HWaddr 00:26:18:97:91:72
      inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0
      inet6 addr: fe80::226:18ff:fe97:9172/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
      RX packets:228570 errors:0 dropped:0 overruns:0 frame:0
      TX packets:143241 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0
      RX bytes:322035649 (322.0 MB) TX bytes:11535133 (11.5 MB)

eth0 Link encap:Ethernet HWaddr 00:26:18:97:91:72
        inet6 addr: fe80::226:18ff:fe97:9172/64 Scope:Link
        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
        RX packets:229408 errors:4 dropped:0 overruns:0 frame:4
        TX packets:143224 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:325306184 (325.3 MB) TX bytes:11538445 (11.5 MB)
        Interrupt:19 Base address:0xdead

lo Link encap:Local Loopback
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:36 errors:0 dropped:0 overruns:0 frame:0
    TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:2720 (2.7 KB) TX bytes:2720 (2.7 KB)

virbr0 Link encap:Ethernet HWaddr da:b0:93:41:4a:3b
          inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
          UP BROADCAST MULTICAST MTU:1500 Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

如果網路組態正確無誤,請重新啟動實體電腦主機。

4. 安裝virt-install(虛擬機器建立)virt-manager(虛擬機器管理員):
# apt-get install virtinst
# apt-get install virt-manager

5. 利用virt-manager建立虛擬機器(Guest),請執行:
# virt-manager

會出現虛擬機器管理員:
 
虛擬機器管理員

請點選左上角的圖示建立新的機器,會出現底下的畫面(步驟 1/5):
 
步驟1/5

接著輸入虛擬機器名稱,並選擇安裝方式,然後再按下一步。例如您要安裝Windows 7,則在名稱欄位輸入Windows7並選擇本地端安裝媒體,接著按下一步。(註:在本範例中筆者已事先將Windows 7的光碟轉成ISO格式,並置於/media/ISO/ 目錄中,您也可以直接利用光碟來安裝)

在步驟 2/5 的畫面只要指定正確的ISO檔位置,並選取要建立的虛擬機器作業系統類型與版本,再點選下一步。
步驟2/5

接著指定虛擬機器的CPU及記憶體,再按下一步
 
步驟3/5

接下來是指定儲存空間,請依照需求指定虛擬機器的硬碟容量大小(例如20G),在這個畫面中如果您勾選現在分配整個磁碟,則系統會實際產生一個您所指定容量的儲存空間(20G),優點是安裝系統時間會縮短,缺點是會佔用實體硬碟的空間。如果您沒有勾選分配整個磁碟,在安裝時並不會真正佔用20G的空間,可以節省佔用實體硬碟的容量。
 
步驟4/5

最後一個步驟是檢視虛擬機器組態及指定網路界面。在這個步驟中要注意的是產生的虛擬機器會被置放在 /var/lib/libvirt/images/ 目錄下並命名為 Windows7.img 。

另外在網路設定的部份,您可以選擇NAT模式,或者改用橋接的方式讓虛擬機器和實體機器位於同一個網段。如果要採用橋接方式,請在進階選項點選 Specify shared device name ,接著在Bridge name輸入br0 就可以了。

為了要再次確認虛擬機器組態,請先勾選在安裝前自訂組態,再點選完成。
 
步驟5/5

您可以在自訂組態的畫面檢視內容或者變更虛擬機器的硬體設定,如果一切無誤請點選左上角的開始安裝。
 
開始安裝

接著就會出現熟悉的安裝畫面,請先依照畫面安裝好Windows7的虛擬機器,後續再進行效能調校:
 
Windows7安裝

6. Windows虛擬機器效能調整
如果想讓Windows虛擬機器在KVM中有比較好的效能,可以安裝virtio驅動程式來提昇虛擬機器中的硬碟及網路卡速度。請先到 http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/ 下載最新版本的virtio(本範例版本為virtio-win-0.1-30.iso),接著先將Windows的虛擬機器關機,並從虛擬機器管理員編輯虛擬機器細節,將下載的virtio-win-0.1-30.iso掛載到IDE CDROM 1(先將原先Windows7的安裝光碟斷線再連線,並指定virtio-win-0.1-30.iso檔的位置),接著再加入硬體,新增一個Storage儲存裝置,並指定裝置類型為Virtio disk,然後將網路界面(NIC)的裝置類型也改為virtio,最後就可以將Windows虛擬機器再度開啟。
Virtio disk

Windows虛擬機器再度開啟之後,裝置管理員中會產生二個有驚嘆號的裝置,分別是Ethernet控制卡和SCSI控制卡,只要更新此二個裝置的驅動程式,並將驅動程式的位置指向剛剛掛載virtio的光碟機就可以正確安裝。

安裝完畢請再度將Windows虛擬機器關機,並再次從虛擬機器管理員編輯虛擬機器細節,移除剛剛新增的0.1G虛擬硬碟(請勿刪錯磁碟),再將原先安裝Windows系統的IDE Disk 1之虛擬磁碟型態改為Virtio,然後再重新開啟Windows虛擬機器。如此就可以提昇Windows的效能。
IDE to Virtio

7. 複製(Clone)虛擬機器
虛擬機器安裝完成後,接下來如果要產生第二台相同的虛擬機器,只要使用複製(Clone)的方式就可以了,不需要重新再安裝一次。Clone的方法有二種,在Clone之前必須先關閉虛擬機器,第一種是利用virt-clone指令:

# virt-clone --connect qemu:///system -o Windows7 -n Windows7-clone -f /var/lib/libvirt/images/Windows7-clone.img

第二種是在虛擬機器管理員點選欲複製的虛擬機器,按滑鼠右鍵並選擇Clone來進行複製。
Clone-1
Clone-2

8. 匯入現有磁碟映像:
在上一個步驟我們Clone了一台虛擬機器,並在/var/lib/libvirt/images/ 目錄下產生Windows7-clone.img的映像檔,接著我們利用虛擬機器管理員將此映像檔掛載成另一台新的虛擬機器。
只要再新增一台新的虛擬機器,自訂好名稱並選擇匯入現有的磁碟映像,接著指定映像檔所在的位置(/var/lib/libvirt/images/Windows7-clone.img),然後依照之前建立虛擬機器的方式逐步執行就可以了。
匯入1
匯入2

9. 將實體機器轉換成虛擬機器(P2V)
就筆者所知KVM並沒有提供實體轉虛擬的工具,因此必須利用第三方工具程式先行將實體機器轉為虛擬,再掛載到KVM當中執行。建議使用VMware 所提供的VMware vCenter Converter™ 來進行實體轉虛擬的動作,您可以到 http://www.vmware.com/products/converter/overview.html 下載Converter,轉換步驟請自行參考相關文件,本文不再贅述。轉換完成之後可以直接掛載vmdk 檔,或者先將vmdk 轉成qcow2格式的映像檔,再進行掛載,轉換指令如下:

# kvm-img convert -O qcow2 VM1.vmdk VM1.qcow2

轉換完成後請依照前面步驟8. 匯入現有磁碟映像的方式,就可以啟動此實體轉虛擬的機器。