波哥的IT私房菜

2010年11月7日 星期日

解決Linux下 Grub 開機的問題

(1)問題描述:
    最近,在一台已經裝有Ubuntu 的機器上,由於測試的需求要再安裝另一個作業系統
    CentOS。在CentOS安裝完畢之後,重新開機,進入CentOS的開機選單,選擇要進入
    Ubuntu時卻出現錯誤 訊息進不去,但相反的卻可以進去到CentOS。


(2)Try and Error:
    
    此時選擇進入CentOS,在命令列模式下執行以下指令: 
   (一):
   
 [root@CentOS5 /]# sudo  grub
 

  (二):此指令會在各個分割區去尋找是否有 kernel  為 2.6.28-19-generic 的檔案,也就是
           Ubuntu的Kernel
    
[root@CentOS5 /]#find /boot/vmlinuz-2.6.28-19-generic


(三):執行 find 命令的結果卻是:
[root@CentOS5 /]#Error 15: File not found

說明:
由於在CentOS上找不到 vmlinuz-2.6.28-19-generic 這個檔案,所 以,也就無法透過menu.lst 去 增加Ubunutu 的開機 選項。因為就算添加,在CentOS的開機選單上仍然是無法正常執行

(3)問題發生原因:
原因在於一CentOS 和 Ubuntu的 檔案系統的 Inodes 大小是不同的
CentOS檔案系統的Inodes是128KB,而Ubuntu是256k,所以CentOS
的Grub 辨識不了 Ubutu。但是相反的,Ubuntu的 Grub 卻能辨識CentOS

祥細的討論可參考以下這一篇文章:
Grub開機問題

(4)解決方法:
 即然CentOS的Grub辨識不了 Ubutu,那麼我們只好使用Ubuntu的Grub了。
而這也是不更改現在分割區的indoes大小的唯一辦法了。
使用 Ubuntu 的 live cd 去更改 Grub,把Grub設成是Ubuntu。
祥細可以參考以下這一篇文章:
Ubuntu設定Grub

步驟如下:

(一)
使用 live cd 進入 ubuntu,並開啟命令列模式

(二)
sudo  grup

(三) :此步驟必須明確知道Ubuntu是裝在那顆硬碟的那個分割區。本例是第1顆硬碟的第1個分割區。
root (hd0,0)

(四)
setup (hd0)

(五)
exit

以上步驟完成之後,grub就由原本的centos改成是ubuntu了。開機即可進入ubuntu。在進入ubuntu後,開啟命令列模式,進行以下操作:


(一)
sudo grub

(二)
find  /boot/vmlinuz-2.6.18-194.el5PAE (查centos 的 kernel 檔案)

(三)
執行結果如下:
(hd0,2)
發現找到了,沒有出現錯誤訊息出來。 此時,我們可以把centos的選項 增加到 ubuntu 的 menu.list 內。

(四)
sudo vim /boot/grub/menu.lst

(五)
title CentOS 5 (2.6.18-194.el5PAE)
root (hd0,2)
kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/ rhgb quiet
initrd /boot/initrd-2.6.18-194.el5PAE.img

(六)
存檔重新開機


  
  
 

2010年6月22日 星期二

在 Deabin/Ubuntu Server 下 架設 APT Server

問題描述:

如何在Deabin/Ubuntu Server 下 架設 一台 APT Server  好讓 end user使呢?!



解決方法:

     安裝文件已寫成pdf檔,下載網址如下:       
           

注章事項:
  • 1 當您解開懶人包時,會出現一個 pkgs 空的目錄。此即是放deb套件的目錄
  • 2 pkgs 是空目錄時,請不要執行 update 的 script 程式 否則會產生錯誤訊息
  • 3 承2 此時 請下載一個deb 包放到此pkgs目錄下做測式:skype (點我)

                

2010年3月24日 星期三

Ubuntu 9.04 下解決 抓不到 Attansic AR81系列 網卡問題

問題描述:
在Ubuntu 9.04下 抓不到 Attansic AR81系列 的網路卡 ,原因在於9.04 的 kernel 不支援
該系列的網卡


解決方法:

(方法一) kernel 升級或重新安裝Ubuntu 9.10。

(方法二) 官網下載Source code重新編譯安裝。
  1. 下載 drive source code: 點我
  2. 選擇 AR81Family Linux Driver
  3. tar -xzvf AR813X-linux-v1.0.0.9.tar.gz
  4. cd src
  5. sudo make
  6. sudo maike install
  7. sudo insmod atl1e.ko


Q:支援那些Attansic AR81系列的網路卡呢 ?

A:支援如下的網卡




說明:        
                每個PCI 的硬體裝罝 都會有一對的vendor id 與 device id 。其中
                vendor id 代表的是硬體廠商的編號;而device id 表示產品編號。
                因此,只要知道網路卡的 vendor_id 與 device_id,再對照此表 
                就能知道該驅動程式是否支援這一塊網路卡了






Q:要如何知道網卡的 vendor_id  與 device_id ?!

A:方法如下

  1.  在命令列模式下指令:

    james@james-desktop:~$ lspci -nn   

  2. 出現如下結果(只截選網卡資訊):
james@james-desktop:~$ 03:00.0 Ethernet controller [0200]: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+[10ec:8139]

    3. 其中:10ec:8139 就是vendor_id與device_id

2010年3月19日 星期五

解決 mount: cannot mount block device read-only 問題

說明:
在 Ubuntu Server 上要 mount nas上的資料匣到本地端,卻出現如下的錯誤訊息:

root@james-desktop:/home/james# mount -t cifs -o username="james" -o iocharset=utf8 //192.168.1.242/images db/
mount: block device //192.168.1.242/images is write-protected, mounting read-only
mount: cannot mount block device //192.168.1.242/images read-only


解決方法:
安裝smbfs套件即可解決
james@james-desktop:~$ apt-get install smbfs

2010年3月16日 星期二

openfire 整合 微軟的AD網域

說明:
因台北移民署專案的需求,openfire需整合微軟AD 帳號進來,其目的是要
讓clinet 端的 Pidgin 能用 AD上 的帳號就能登入,無需額外再openfire上
用人力的方式再建立一份跟AD上一模一樣的帳號。


實作方法如下:

1 openfire 安裝完之後,進入到web的初始設定畫面

2 進行到 profile settings 選項,選擇:(LDAP)

  



3 把ad的帳號匯入openfire,基本設定如下:

  • server type選擇:Active Directory
  •  Host 填入 微軟 AD 的 網域名稱(Domain name) 或 ip
  •  填入Base DN:指填入AD的網域名稱,但必須符合格式,以本例的網域名稱 是:immigration.gov.tw 為例,則要設定為:dc="immigration",dc="gov",dc="tw
  •  填入Administrator DN: 主要是告訴openfire AD網域上的那一個帳號是具有管理者的權限。以本例來說,網域上的administrator是具有管理者權限。那麼在 Administrator DN 這個欄位上就要做如此的設定:cn="Administrator",cn="Users",dc="immigration",dc="gov",dc="tw"。這個設定很明確的告訴了openfire 在 AD網域(immigration.gov.tw) 上的 Users 目錄裡的Administrator這個帳號具有管理者權限 。這個步驟完畢之後,即可按Continue鈕







4 這一頁使用預設值即可,無需改寫。按 Continue鈕




5 同樣使用預設值就可以了,按 Continue鈕



6 新增ad 網域上的 administrator 為 openfire 的管理者

 



7  重新登出再登入。即完成 openfire 整合 微軟 ad





使用Pidgin 驗證 整合成功:

1 開啟Pidgin 
2 帳號-->管理帳號-->新增





3   設置新增帳號:
  • 通訊協定:選擇XMPP
  • 使用者:填入AD上的帳號
  • 域名:填入Openfire 的 ip 或 網域名稱(Domain name)
  • 填入完畢之後,按加入鈕






4  紅色框框所圍的圖示是彩色的表示已經上線了;若是灰白表示未上線。




2010年3月15日 星期一

sed、awk 二三事

(一)
說明:
在外交部的案子中,因應專案的需求要做一個雙系統的備份/還原程式。
簡單的說,就是程式要能備份整台電腦的雙OS系統,並且能指定要還原
系統中的那一個OS。

與同事討論後認為:Clonezilla + Perl 是最好的組合與實作。

實作上,要把 Clonezilla 安裝在本機機器上,再搭配寫好的 Perl 程式
自動去把 Clonezilla 的 開機 與 復原 的參數 寫到 linux grub 的 menu.list 檔裡面。
使用者只要利用 Clonezilla 把 os 的 image 檔存在指定的分割區中,那麼,一但系統
當掉要再 回復的作業,只要開機進入menu選單 ,選擇要復原的 作業系統,Clonezilla
即會自動做回復的動作。

該支perl 程式 有用到 awk 命令 ,就把實務上常用的命令記下來吧!

(二):
awk 實例:

以冒號區分欄位,並印出第一筆記錄的第四個欄位值
awk 'BEGIN{FS=":"} NR==1 {print $4} ' config `


網路上有很多awk 的資源,推好文如下:
awk 單行腳本

2010年3月4日 星期四

Postgresql DB 備份與還原

說明:
 使用Postgresql DB 要做資料的備份與還原時,可以用以下的二個指令:

  • pg_dump :資料庫備份的指令
  • pg_restore :資料庫回復(Recover)的指令

實驗環境:

  • Ubuntu 9.04
  • Postgresql DB 8.3

    pg_dump 常用指令參數:
    •  -f  file
       --file=file
       輸出到指定的文件


    • -F format
      --format=format
      輸出的格式可以是下列之一

      p  輸出成一個sql 腳本

      t   輸出成一個 tar 檔

      c  輸出成一個壓縮格式的文件

       
    • -v
      --verbose
      備份時在瑩幕上顯示出祥細的訊息(如備份進度等)


    • -Z 0..9
      --compress=0..9
      此選項要配合輸出格式參數為 'c'   一起配合使用。數字
      0到9表示壓縮的級別


    • -h  host
      --host=host
      連線的主機名稱(也可以是ip)


    • -p  port
      --port=port
      資料庫的連結埠


    • -U username
      登入資料庫的帳號





    使用 pg_dump 做資料庫備份:

    (1)把名稱為xdna_kiosk_client 的資料庫備份
    到james家目錄的db資料匣中,且備份的檔名為 kiosk_client.bak
    pg_dump -h 127.0.0.1 -p 5432 -U postgres -F c -b -v -f "/home/james/db/xdna_kiosk_client.bak" xdna_kiosk_client  
    


    使用 pg_restore做備份還原:

    (1)
    新建一個空白的資料庫,該資料庫名稱為mydb:
    psql -U postgres -h 127.0.0.1 -c "create database mydb"
    

    (2)
    把james家目錄的db資料匣中備份檔 Recover 到 mydb
    pg_restore -h 127.0.0.1 -p 5432 -U postgres -F c -b -v -f "/home/james/db/xdna_kiosk_client.bak" mydb