KVM 三部曲-最終曲

當我們在虛機平台上安裝一個作業系統後,如何使用快照(snapshot)的功能,快速佈署多台虛機出來。
請記住快照出來的虛機,若空間不足,可依照 LVM 的操作,擴展快照的空間。
  1. 對現有的虛機產生快照
  2. vm-ss:在二部曲的時候,第一個虛機就是安裝在這上面。
    vmss1:依照 vm-ss 目前的狀態,產生一個 2GB 容量的快照。 # lvcreate -sn vmss1 -L 2G /dev/vmss/vm-ss  // 對 vm-ss 產生一個 2GB 快照的 vmss1。
     Logical volume "vmss1" created
    # lvs


  3. 新增虛機

  4. 指定安裝方式

  5. 指到快照空間的路徑

  6. 分配硬體資源

  7. 雖然快照只有 2GB,但系統仍視為 20GB

  8. 完成後就會出現一個新的虛機,完全不用安裝。

  9. 直接開啟新虛機

大家可以感受這個功能的威力嗎?快速部署多個作業系統給使用者,這不就是雲端運算的概念,當然目前這個範例還不夠完善,若再有遠端登入就更棒了,但只能說受限於個人目前的功力,說不定以後標題可能改成四連發、五連彈。

安裝GeForce 610M Linux Driver

驅動程式版本NVIDIA-Linux-x86_64-310.19.run
runlevel 3 開機,安裝時出現以下訊息並中止程序。
# vim /etc/inittab
 id:3:initdefault:

# sh NVIDIA-Linux-x86_64-310.19.run
ERROR: The Nouveau kernel driver is currently in use by your system. This driver is incompatible with the NVIDIA driver, and must be disabled before proceeding. Please consult the NVIDIA driver README and your Linux distribution's documentation for details on how to correctly disable the Nouveau kernel driver.

# vim /etc/inittab
 id:5:initdefault:
# reboot

升級或安裝相關套件 # yum install kernel-devel kernel-headers dracut
# yum groupinstall "Development tools"

關閉Nouveau驅動程式 # lspci | grep --color nouveau
# vim /etc/modprobe.d/blacklist.conf
 blacklist nouveau

如果還是載入Nouveau驅動程式,試試第二種方法: # vim /etc/grub.conf  rdblacklist=nouveau  // 加入這組參數

# mv /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/gpu/drm/nouveau/nouveau.ko \
 > /lib/modules/2.6.32-279.el6.x86_64/kernel/drivers/gpu/drm/nouveau/nouveau.ko.txt

重建initramfs # cd /boot
# mv initramfs-$(uname -r).img initramfs-$(uname -r).img.bak
# dracut -v initramfs-$(uname -r).img $(uname -r)
# vim /etc/inittab
 id:3:initdefault:
# reboot

確認未載入Nouveau驅動程式 # lspci | grep --color nouveau
安裝NVIDIA驅動程式 # sh NVIDIA-Linux-x86_64-310.19.run
# vim /etc/inittab
 id:5:initdefault:
# reboot

Linux Boot Procedure

KVM三部曲-二部曲

在虛擬化平台上安裝 Linux 作業系統

請先建立一個 30GB 的 LVM 空間,等一下虛機要安裝在這上面,這樣才能做 snapshot,也才能進行KVM三部曲。 如果對LVM指令不熟,可以安裝圖形介面system-config-lvm操作,從PV(30GB)->VG->LV(20GB)。
  1. 開啟 KVM
  2. # virt-manager &

  3. 輸入虛機名稱及安裝方式

  4. 選擇安裝來源

  5. 配置硬體資源





  6. 虛機建立中

  7. 作業系統安裝啟始畫面

  8. 作業系統安裝完成開機後畫面

移除GRUB-簡單到不行

20121203 新增第二種方法

這裡提供二種方法來移除 GRUB

移除 GRUB 步驟:

方法一:這個方法是你還進得了 Windows7
  1. 查詢 windows 系統安裝磁區及裝置編號,【控制台】→【系統管理工具】→【電腦管理】→【磁碟管理】

  2. 下載修復 mbr 軟體

  3. 將壓縮檔內容放至路徑 C:\mbrfix,並執行以下指令

  4. 重開機

方法二:這個方法是你進不了 Windows7
資料來源:Bootsect 命令列選項
  1. 使用光碟 (修復光碟亦可) 開機
  2. 開啟命令提示字元
  3. 切換到光碟機
  4. X:\> f:  // 假設光碟機是 F
  5. 輸入以下指令
  6. F:\> bootsect.exe /nt60 all /mbr
  7. 出現以下訊息表示修復完成
  8. Successfully updated disk bootcode.
  9. 重開機
補充:

  • 參數 /nt60
  • 將與 Bootmgr 相容的主啟動碼套用至 SYS、ALL 或 <DriveLetter>。安裝在 SYS、ALL 或 <DriveLetter> 上的作業系統必須是 Windows Vista 或 Windows 7

    KVM三部曲-首部曲

    安裝及啟動虛擬化平台

    安裝 # yum grouplist | grep --color 虛擬
     虛擬化
     虛擬化客戶端
     虛擬化工具
     虛擬化平台
    # yum groupinstall 虛擬化 虛擬化客戶端 虛擬化工具 虛擬化平台

    啟動虛擬機 # virt-manager &
    出現以下錯誤訊息

    啟動相關服務 # chkconfig libvirtd on
    # service libvirtd start

    啟動畫面

    Auto-Unlock Keyring

    登入無線網路時,都會出現 unlock kerying 的視窗,要求輸入 Keyring 的密碼,非常的討厭。
    以下教您如何關閉這個畫面。
    1. 開啟 Passwords and Encryption Keys
    2. # seahorse &
    3. 新密碼請保留空白

    雙系統開機設定(Linux+Windows)

    想安裝雙系統在筆電或個人電腦上,要謹慎處理 bootloader 的安裝。
    假設原作業系統是 windows,安裝新作業系統 Linux 時,若沒有指定 bootloader 安裝的路徑,就會把 windows 的 bootloader 覆蓋,開機後將無法進入 windows。

    以下將教您解決雙系統安裝問題,若怕失敗,可先用 VMware Player 實做

    狀況一:假設目前系統是 Windows,要安裝 Linux。
    條件:安裝在同一顆硬碟,但不同磁區。
    1. 加大虛機的硬碟空間:目前硬碟大小為 80GB,再大到 100GB,多出來的 20GB 就是放至 Linux 作業系統。




    2. 光碟機載入 ISO 檔

    3. 進入 BIOS 按 F2 設定開機順序,使用光碟開機(使用加號或減號變更順序)。

    4. 設定 bootloader 安裝路徑,安裝在剛剛配置的磁區 sda5。



    5. 重開機進入 Windows 修改 Windows boot manager,最簡易的方法就是使用 EasyBCD 軟體設定。


    6. Windows 重開機後畫面

    狀況二:windows 的 bootloadr 被覆蓋,無法進入 windows 作業系統。
    在gurb.conf加入以下內容 title Windows7
     rootnoverify (hd0,0)  // Windows 是從第一個硬碟的第一個分割區啟動 (hd0,0),而且不檢驗此分割槽
     chainloader +1  // GRUB 載入指定分割區的第一個磁區
     makeactive  // 讓開機區的 boot 項目具有 active 的標誌

    解決FirefoxESR無法正常播放壹電視新聞

    安裝完flash player後,看youtube或一般的flash都沒有問題,唯獨要看壹電視新聞時,FirefoxESR就會停止運作,變成要強制關閉,這時候在終端機出現了以下的訊息。 *** NSPlugin Viewer *** WARNING:(../src/npw-viewer.c:1082):invoke_NPN_GetURLNotify: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))
    *** NSPlugin Viewer *** WARNING:(../src/npw-viewer.c:1082):invoke_NPN_GetURLNotify: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))
    *** NSPlugin Viewer *** WARNING:(../src/npw-viewer.c:1082):invoke_NPN_GetURLNotify: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))
    *** NSPlugin Viewer *** WARNING:(../src/npw-viewer.c:1082):invoke_NPN_GetURLNotify: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))
    *** NSPlugin Viewer *** WARNING:(../src/npw-viewer.c:1082):invoke_NPN_GetURLNotify: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))
    *** NSPlugin Viewer *** WARNING:(../src/npw-viewer.c:1082):invoke_NPN_GetURLNotify: assertion failed: (rpc_method_invoke_possible(g_rpc_connection))
    *** NSPlugin Viewer *** WARNING:(../src/npw-viewer.c:1082):invoke_NPN_GetURLNotify: assertion failed: (rpc_method_invoke_possible(g_rpc_connection)) ......

    關閉FirefoxESR Browser

    表示NSPlugin Viewer發生錯誤,所以用yum更新了nsplugin就正常了 # yum search nsplugin
     nspluginwrapper.i686 : A compatibility layer for Netscape 4 plugins
     nspluginwrapper.x86_64 : A compatibility layer for Netscape 4 plugins

    #yum install -y nspluginwrapper.x86_64

    Broadcom 802.11 BCM43227驅動程式安裝步驟(Linux)

    Broadcom Linux 驅動程式載點

    找出無線網卡模組編號 # lspci | grep Broadcom
    03:00.0 Network controller: Broadcom Corporation BCM43227 802.11b/g/n
    04:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57785 Gigabit Ethernet PCIe (rev 10)
    04:00.1 SD Host controller: Broadcom Corporation NetXtreme BCM57765 Memory Card Reader (rev 10)
    04:00.2 System peripheral: Broadcom Corporation Device 16be (rev 10)
    04:00.3 System peripheral: Broadcom Corporation Device 16bf (rev 10)

    安裝 kernel-devel,執行 make 時會用到。 # yum install kernel-devel-$(uname -r) kernel-headers
    # yum groupinstall "Development Tools"

    註:若沒有安裝,查看 /lib/modules/$(uname -r)/路徑,發現所需要build還未建立。 # /lib/modules/$(uname -r)/build/

    下載並解壓縮 # mkdir /root/Desktop/broadcom
    # cd /root/Desktop/broadcom
    # wget http://zh-tw.broadcom.com/docs/linux_sta/hybrid-portsrc_x86_64-v5_100_82_112.tar.gz
    # tar -zxvf hybrid-portsrc_x86_64-v5_100_82_112.tar.gz
    # make API=WEXT  // WEXT 或 CFG80211
    # ll *.ko
     wl.ko
    # cp wl.ko /lib/modules/2.6.32-279.el6.x86_64/kernel/net/wireless
    # depmod
    # modprobe wl
    # poweroff

    網頁自動跳出新視窗語法

    window.open 參數定義

    <script language="javascript">
    <!--
    var gt = unescape('%3e');
    var popup = null;
    var over = "Launch Pop-up Navigator";
    popup = window.open('', 'popupnav', 'width= 100,height= 100,resizable=1,scrollbars=auto');
    if (popup != null) {
    if (popup.opener == null) {
    popup.opener = self;
    }
    popup.location.href = '網址';
    }
    // -->
    </script>

    帳號管理-新增管理者

    root 帳號一直是帳號管理最頭痛的問題,因為這個帳號一定存在,所以當服務某些啟動時,就必須設定限制以 root 身份執行或登入,例如 SSH 登入。

    因此我們可以新增一名新使用者,授予 root 相同權限後,再將 root 密碼鎖定。

    # useradd -u 0 -g 0 -d /root -r -o Kagemusha
    # passwd Kagemusha
    # passwd -l root
     Locking password for user root.
     passwd: Success

    補充:參數定義
  • -u:root 的 uid 為『0』
  • -g:root 的 gid 為『0』
  • -d:指到 root 的家目錄
  • -r:建立系統帳號
  • -o:允許共同 uid 及 gid

  • root 密碼解除鎖定 # passwd -u root
     Unlocking password for user root.
     passwd: Success

    帳號管理-新增使用者預設值

    新增使用者時,用戶資訊及密碼資訊的預設值是參考以下2個檔案的內容。
    1. /etc/login.defs
    2. /etc/default/useradd
    login.defs內容 # grep -v -E '^#|^$' /etc/login.defs
     MAIL_DIR /var/spool/mail
     PASS_MAX_DAYS 99999
     PASS_MIN_DAYS 0
     PASS_MIN_LEN 5
     PASS_WARN_AGE 7
     UID_MIN 500
     UID_MAX 60000
     GID_MIN 500
     GID_MAX 60000
     CREATE_HOME yes
     UMASK 077
     USERGROUPS_ENAB yes
     ENCRYPT_METHOD MD5
     MD5_CRYPT_ENAB yes

    補充:PASS_MAX_DAYS、PASS_MIN_DAYS和PASS_WARN_AGE作用可參考帳號管理-/etc/passwd 和 /etc/shadow 結構

    /etc/default/useradd內容 # cat /etc/default/useradd
     # useradd defaults file
     GROUP=100
     HOME=/home
     INACTIVE=-1  // -1表示不啟動
     EXPIRE=
     SHELL=/bin/bash
     SKEL=/etc/skel
     CREATE_MAIL_SPOOL=yes

    補充:SKEL參數作用就好像是範本,定義新增使用者家目錄的內容。
    範例:
    # cd /etc/skel/
    # mkdir example
    # touch example.txt
    # useradd user1
    # su - user1
    $ ll
     total 4
     drwxr-xr-x. 2 user1 user1 4096 Nov 16 15:17 example
     -rw-r--r--. 1 user1 user1 0 Nov 16 15:17 example.txt

    去除註解及空白的行數-grep

    # grep -v -E '^#|^$' /etc/login.defs

    帳號管理-/etc/passwd和/etc/shadow結構

    Linux 身份認證的資訊,都放在 /etc/passwd 和 /etc/shadow,很多應用程式也會讀取這 2 個檔案,例如 ls。

    /etc/passwd 結構:用戶資訊

    User-Name:Encrypted-Password:UID:GID:Comment:$HMOE:$SHELL
    範例:apacheserver:x:500:500::/home/apacheserver:/bin/bash
    User-Name:apacheserver
    Encrypted-Password:x  // 密碼是放在 /etc/shadow,因為很多程式會讀這個內容,放在此處風險太高。
    UID:500
    GID:500
    Comment(GECOS):
    $HOME:/home/apacheserver
    $SHELL:/bin/bash

    /etc/shadow 結構:密碼資訊

    欄位 1:欄位 2:欄位 3:欄位 4:欄位 5:欄位 6:欄位 7:欄位 8:欄位 9

    欄位 1:使用者名稱
    欄位 2:加密後的密碼
    欄位 3:最近一次更改密碼日期
    欄位 4:限制密碼變更天數(PASS_MIN_DAYS),0 表示無限制
    欄位 5:限制密碼可使用天數(PASS_MAX_DAYS)
    欄位 6:密碼過期前警告天數(PASS_WARN_AGE)
    欄位 7:密碼過期後寬限時間(inactive)
    欄位 8:帳號失效日期(expiration)
    欄位 9:保留

    補充:使用date計算日期,因為沒有excel可以用XD。
    # date -d '19700101 15631 days'
     四 10月 18 00:00:00 CST 2012

    範例:apacheserver:$1$eSDh1dqo$1rEoTHCvdrVXvQQEONymx0:15631:5:30:7:3:15705:
    使用者名稱:apacheserver
    加密後的密碼:$1$eSDh1dqo$1rEoTHCvdrVXvQQEONymx0
    最近一次更改密碼日期:15631  // 這裡顯示的是天數,日期為 2012-10-18,從 1970-01-01 開始計算
    限制密碼變更天數:5  // 表示到 2012-10-23 都不能變更密碼。
    限制密碼可使用天數:30  // 表示 2012-11-17 以前必須變更密碼,不然原密碼就會失效。
    密碼過期前警告天數:7  // 表示 2012-11-10 至 2012-11-17,這 7 天只要登入系統,就會看到警告訊息。
    密碼過期後寬限時間:3  // 表示更改密碼的日期延後 3 天至 2012-11-20。
    帳號失效日期:15705  // 密碼失效日期為 2012-12-31,這裡顯示的是天數,從 1970-01-01 開始計算。

    ls 使用 /etc/passwd 範例: # ll
     drwx------. 29 apacheserver apacheserver 4096 Oct 23 11:15 apacheserver
    # vim /etc/passwd
     apacheserver:x::500::/home/apacheserver:/bin/bash  // 拿掉 uid
    # ll
     drwx------. 29 500 apacheserver 4096 Oct 23 11:15 apacheserver

    解除root執行google Chrome限制

    Chrome 載點

    在 root 身份安裝完成後,開啟 Chrome browser 會出現以下訊息,google 告訢你,如果一定要以 root 身份開啟 Chrome browser,請加入下的參數 --user-data-dir


    參數 --user-data-dir,是要讓你把 Chrome browser 的暫存資料,放在別的資料夾底下,不要放在 root 的家目錄底下,是 google 貼心的小限制。

    新增暫存目錄
    # mkdir /opt/root
    編輯 chrome 圖示屬性


    在 %U 之後加上 --user-data-dir=/opt/root


    再點選 chrome 圖示,即可正常開啟


    自動掛載-Autofs

    通常是搭配 NFS,目的是使用者需要存取 NFS 所分享的資料夾時,系統會自動掛載,不需要使用 mount,也不需要預先建立掛載點,掛載點系統會自動建立,離開分享資料夾,系統也會自動移除掛載點。

    範例:

    NFS 伺服器(10.10.10.146 )


    安裝並啟動服務 # yum install -y nfs-utils rpcbind
    # chkconfig nfs on; chkconfig rpcbind on
    # service nfs start; service rpcbind start

    關閉防火牆(實驗中先關閉防火牆,不然客戶端會被擋,若要設定 NFS 伺服器防火牆,可參考伺服器-NFS # service iptables stop
    NFS 伺服器端分享資料夾設定 # vim /etc/exports
     /var/ftp/pub *(ro)
     /var/www *(ro)
    # exportfs -rv

    NFS 客戶端(10.10.10.159 )


    安裝並啟動服務 # yum install -y nfs-utils rpcbind autofs
    # chkconfig nfs on; chkconfig rpcbind on; chkconfig autofs on
    # service nfs start; service rpcbind start; service autofs start

    查詢遠端主機是否提供 NFS 服務 # rpcinfo -p 10.10.10.146
    查詢 NFS 伺服器分享哪些資料夾 # showmount -e 10.10.10.146
     Export list for 10.10.10.146:
     /var/www *
     /var/ftp/pub *

    自動掛載設定檔(藍色字體為本地端對應目錄架構 # vim /etc/auto.master
     /localvar /etc/auto.autofs

    # vim /etc/auto.autofs
     pub 10.10.10.146:/var/ftp/pub
     www 10.10.10.146:/var/www

    # service autofs reload

    啟動 autofs 服務後,在根目錄下會產生不占空間的 /net 和 /localvar 目錄


    進入 NFS 伺服器 # cd /localvar/  // 尚未掛載
    # df

    # cd /localvar/www  // 此時就會掛載,若不想每次這樣一層一層的登入可以使用ln產生一個symbolic link。
    # df

    # cd ..
    # pwd
     /localvar
    # ll
     total 4
     drwxr-xr-x. 6 root root 4096 Nov 15 10:12 www
    # ll  // 離開目錄後,預設300秒後自動卸載(設定檔/etc/sysconfig/autofs)
     total 0

    補充:產生symbolic link指令
    # ln -s /localvar/www nfs-www
    # ll nfs-www
     lrwxrwxrwx. 1 root root 13 Nov 15 16:02 nfs-www -> /localvar/www
    # cd nfs-www
    # df

    刪除symbolic link指令
    # rm nfs-www
     rm: remove symbolic link `nfs-www'? y or n

    以月曆方式顯示日期

    引用:How To Make The Blogger Posts Have A Calendar For The Date In

    選擇 Date Header Format

    尋找以下的程式碼(有 2 段)
    <h2 class='date-header'><span><data:post.dateHeader/></span></h2>

    替換成以下的程式碼
    <div id='Date'>
    <script>changeDate(&#39;<data:post.dateHeader/>&#39;);</script>
    </div>
    <b:else/>
    <div id='Date'>
    <script>changeDate(&#39;&#39;);</script>
    </div>

    在</head>前面貼上以下的程式碼
    <script type='text/javascript'>
    //<![CDATA[
    var DateCalendar;
    function changeDate(d){
    if (d == "") {
    d = DateCalendar;
    }
    var da = d.split(' ');
    day = "<strong class='date_day'>"+da[0]+"</strong>";
    month = "<strong class='date_month'>"+da[1].slice(0,3)+"</strong>";
    year = "<strong class='date_year'>"+da[2]+"</strong>";
    document.write(month+day+year);
    DateCalendar = d;
    }
    //]]>
    </script> <b:if cond='data:blog.pageType != "static_page"'>
    <style type='text/css'>
    /* Calendar style date ----------------------------------------------- */
    #Date {
    background: transparent url(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgVQXyz6kgGu8PcPr5hwbui86flVfOrjml6adoNOF2hApETIrJEUYgdM3XEyEakVsr0nB_bWYE6g94ujREdIw8y5P884-YblKjRH093K9ExidYRPYw9h_VmY-d65os62dv67C7EitToIj1/s1600/calendar07.png) no-repeat;
    display: block;
    width:60px;
    height:60px;
    float: left;
    margin: 15px 2px 0 -108px;
    padding: 0 0 8px 0px;
    border: 0;
    text-transform: uppercase;
    }
    .date_month {
    display: block;
    font-size: 15px;
    font-weight:bold;
    margin-top:-1px;
    text-align:center;
    color:#ffffff; /* Month's color */
    }
    .date_day {
    display: block;
    font-size: 28px;
    font-weight:bold;
    margin-top:-8px;
    text-align:center;
    color:#282828; /* Day's color */
    }
    .date_year {
    display: block;
    font-size: 10px;
    margin-top:-8px;
    text-align:center;
    color:#282828; /* Year's color */
    }
    </style> </b:if>

    儲存並更新頁面,文章旁邊就會有日曆式的日期囉。

    VMware-自訂網段工具(vmnetcfg.exe)

    vmnetcfg.exe 這個可以指定網段和網路型態的小工具在 VMware Player 3 以後就被拿掉了,安裝時不會附在裡面。

    目前可以知道的是在 VMware Workstation 內是附有這個小工具的,因此解決方案的方法就是下載 VMware Workstation,從裡面把這個小工具拿出來。

    假設下載的檔案是 VMware-workstation-full-9.0.exe
    在命令提示字元下以下指令
    VMware-workstation-full-9.0.exe /e .\exarctfloder_name

    /e:解壓縮
    .\exarctfloder_name:解壓縮的目錄名稱

    在目錄底下會有一個 core.cab 的檔案,使用一般解壓縮軟體查看就會發現有 vmnetcfg.exe。
    將他複製到 VMware Player 目錄內,就可以指定網段的範圍了。

    天殺的~webserver被入侵了

    今天一早就聽到惡耗~~單位的 server 被入侵了。

    我卻很高興,實戰終於來了,為了找出被偷埋的程式,也花了我一些時間,原來是被放置了一個 htaccess 在DocumentRoot底下,導到別的網站並且執行不知名的 JS。

    雖然移除了,但目前已被 google 列為惡意網站,申請重新審核,據說要 1 天的回覆時間,期待明天就會有好消息。

    解決方法:找出最新被修改或是新增的檔案,並將他移除。
    # ls -ltrR > newfile.txt
    # grep '2012-xx-xx' newfile.txt