2009年11月21日 星期六

Ubuntu & Dabian Deb包製作(1)

使用時機:

我在linux下寫了一隻AP(或別人已寫好的),想把他怖署成一個安裝檔,改如何做呢?
在Red hat 下軟體套件的格式是RPM,而在ubuntu下則是deb 。本文教你如何在ubuntu下製作個人的軟體套件包。


使用環境:

ubuntu & Dabian 系列的linux作業系統




實作方式:

(一)

安裝開發的必需套件:

  •  build-essential
  •  debhelper
  •  fakeroot


(二)

實現方法:在 commadn line 執行如下的指令

  •  apt-get △ install △ build-essential
  •  apt-get △ install △ debhelper
  •  apt-get △ install △ fakeroot


(三)

目錄架構:如下圖




其中:changelog、control、rules 是文件名稱,其餘的則是目錄。

而這三個文件則是我們要撰寫的script 與設定檔。

2009年11月18日 星期三

dpkg & rpm

安裝

Result
rpm
dpkg
安裝指定套件
rpm -i pkgfile.rpm
dpkg -i pkgfile.deb

查詢

Result
rpm
dpkg
顯示所有已安裝的套件名稱
rpm -qa
dpkg -l (小寫 L)
顯示套件包含的所有檔案
rpm -ql pkgname (小寫 L)
dpkg -L pkgname
顯示特定檔案所屬套件名稱
rpm -qf /path/to/file
dpkg -S /path/to/file
查詢套件檔案資訊
rpm -qip pkgfile.rpm (顯示套件資訊)
rpm -qlp pkgfile.rpm (小寫 L, 顯示套件內所有檔案)
dpkg -I pkgfile.deb (大寫 I )
dpkg -c pkgfile.deb
顯示指定套件是否安裝
rpm -q pkgname (只顯示套件名稱)
rpm -qi pkgname (顯示套件資訊)
dpkg -l pkgname (小寫 L, 只列出簡潔資訊)
dpkg -s pkgname (顯示詳細資訊)
dpkg -p pkgname (顯示詳細資訊)

移除

Result
rpm
dpkg
移除指定套件
rpm -e pkgname
dpkg -r pkgname (會留下套件設定檔)
dpkg -P pkgname (完全移除)

在 Debian  & Ubuntu 使用 alien 處理 RPM 套件
alien 可處理 .deb、.rpm、.slp、.tgz 等檔案格式, 進行轉檔或安裝.
於 Debian & Ubuntu 安裝非 Debian 套件時, 可使用 alien 進行安裝.
安裝 alien 套件: apt-get install alien

2009年11月16日 星期一

在Ubunut 上看ppstream

如何在ubuntu上看ppstream呢?!

Slove:

加入ppa來源
  • sudo gedit /etc/apt/sources.list
  • deb http://ppa.launchpad.net/portis25/ppa/ubuntu karmic main
  • deb-src http://ppa.launchpad.net/portis25/ppa/ubuntu karmic main

安裝方式
  • sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 27F5B2C1B3EAC8D9
  • sudo apt-get update
  • sudo apt-get install totem-pps
  • totem—>編輯—>插件–>選 pstream

Discuss:
PPStream也有linux版的,但和windows版最大的不同在於:不支援P2P的功能,而是使用內建播放器totem 或 mplayer的網路串流播放。因為沒有使用P2P,最大的缺點在於無法享受流暢的播放品質而速度
快慢決定在於頻寬的大小。

2009年11月12日 星期四

解決Linux 下 umount 時 出現 "Device is busy 問題

問題發生原因:
當我們把目錄mount到儲存設備,要umount 時 出現:『Device is busy』訊息時,
要如何解呢?! 問題發生的原因是有程式還在原來mount的目錄上執行,導致umount 失敗。
解決的方法就是找到佔用目錄的程式並kill掉它

失敗狀況演示

解決方法:

使用:fuser 查詢那隻行程佔用目錄

範例:
假設現在 USB 隨身碟是 mount 到 /media/disk 。
  •  查詢: fuser -m /media/disk
  •  顯示: /media/disk : 25023
就代表是 process 25023(pid) 使用到此目錄,

我們可以使用以下這二種方法來釋放掉資源:
  1.  kill -9 25023
  2.  fuser -m -k /media/disk

2009年11月11日 星期三

解決 linux root filesystem failed 的問題

問題發生原因:
linux 開機後 不能直接進入 x windows ;之前都還用的好好的,怎麼突然開個機就出問題 ?!
後來,發現是:檔案系統出問題了,導致開機後直接進入命令列模式。

(一)
開機後的狀況


(二) 連打:startx 都無入進 xwindows
狀況2



解決方法:
  1. 切到root 身份下這樣的指令進行修復:fsck \
  2. 修復完畢重新開機

演示

2009年11月10日 星期二

Linux 下 disable 和 enable usb 隨身碟

因為專案的需求,要在linux的環境下 鎖 USB 裝置 ;並且在鎖住之後也能開啟。
於是就用Perl 寫了一隻程式來滿足專案的需求。這一隻Perl程式 還要在搭配其他的javascript:void(0)
程式才能真正的做到中央控管的需求。但,就算是單獨執行,也能順利的完成關、開
USB儲存媒體的能力。

執行環境:Ubunut 9.04


執行前的準備工作
一 : 先把 usp.pl 程式 改成有執行的權限
二 : 把usb.pl 程式的 owner 和 group 改成是 root

如何 disable usb
一: 開啟command line 並切到 root 的權限
二 : usb.pl disab

如何 enable usb
一:開啟command line 並切到 root 的權限
二 :usb.pl enab

實作時用到的東西如下:
1:用到 Awk、Sed 處理 文字資訊
2:呼叫大量的外部指令(如:sed、awk、df等)

------------------------------------------
常用的技巧:
(一) 去掉變數中的空白字元
  1. $ve=`uname -r`;
  2. $ve=~s/\s+//; 
  3.  

(二)執行外部指令:
因為有用到 "|" 且又想截取指令的執行結果,故用open()。
用 `` 一樣可以執行外部命令,但是若遇到 "|" 會無法得到指令執行的結果。

  1. sub number{
  2.        my $umber;
  3.        open(PIPO,"df | grep '\\bmedia' | awk '{print \$1}'|wc -l |") ;
  4.        while(<PIPO>){
  5.              $unmber=$_ ;
  6.            } 
  7.      
  8.        return $unmber ;
  9. } 

注意:
指令中有以下符號時需使用:'\' 使其正去意義如此才能正確執行否則會有錯誤。
  • "\"
  • "$"
  • "\n"


(三)
grep使用邊界讓搜尋更準確一'\b'
使用方式: grep '\bkey' 檔案 或 | 的結果
範例:
  1. lsmod | grep '\busb_storage'


(四)去掉變數中的換行字元:
      如下圖執令的執行結果存到變數後如何以 ':'  代替 換行字元
      變成如:/dev/sdc:/dev/sdb 呢 ?!
  
      這樣做的好處是方便我們用split 函數把字串分割成陣列儲存






sed -e :x -e 'N;s/\\n/:/;tx'


下載程式: usb.pl

2009年10月21日 星期三

解決linux rdp disconnect:NO valid license available 問題

經過:
在linux下使用RDP 要去連 微軟的2003 Server時 卻連不上去,連線畫面一閃而過。
怪了,幾天前還可以正常使用,怎麼現在就不行了呢?!

原因:
在使用RDP 登入 微軟 windows 系統之後(可能一段時間),系統要求新的 client session
name 。若此時不餵給RDP一個新的client session name 就會造成 disconnect 的錯誤
訊息。

解決方法:

rdpdesktop -n newclient server_ip

例:
rdesktop -n new 192.168.0.190