CVS 簡易說明

我們先假設 192.168.0.1 有安裝 cvs server
並且有三個專案在上面
怎麼用??
0. 確定自己電腦上有安裝 cvs
一般來說,如果是 Red Hat 或 Mandrake,那麼預設會有安裝
如果是其他的,我就不知道了
請到 www.cvsroot.org 去下載套件並安裝之
1. 設定
#當然你如果習慣用 vi, 這邊的 EDITOR 就設為 vi 的路徑
export EDITOR=/usr/bin/vim
#此處的 username, 要替換為自己的 username
export CVSROOT=:pserver:username@192.168.0.1:/home/cvsroot
export CVSREAD=yes
你可以把這些敘述放到 /etc/profile 或 /root/.bash_profile 裡面
免得以後每次用的時候還要再打一次
2. login
輸入
cvs lgin
cvs 會要求你輸入密碼,此密碼就是你在 192.168.0.1 上的密碼
3. checkout 將專案下載到你的電腦上
所以你可以打
cvs checkout clockd
cvs checkout helloworld
cvs checkout qt
把專案下載到自己的電腦上
4.
做完 checkout 後,你可以看到自己的電腦上出現了專案
先輸入 cvs edit xxxx
然後就可以做編輯了,你可以試著亂改, 加上一些註解或無聊的程式碼
做完修改後,當然要放回 server 囉
你可以用
cvs commit [檔案名稱]
指令來更新回 server, 更新之前, cvs 會打開 editor 讓你輸入一些文字,為這次的修改作一些說明
對了,如果別人在你修改之前修改了這個檔案,那麼 cvs 會自動將檔案作合併,讓你再去做編輯,請務必玩一玩
5.
如果要看目前的狀況,就打
cvs status [檔案名稱]
cvs diff [檔案名稱]
cvs history [檔案名稱]
來查看各種狀況
6.
不想要這個檔案加入版本管理的話,得先刪除該檔案後,再使用
cvs remove [檔案名稱]
來移除
7.若要登出 cvs server,則輸入 cvs logout 即可

autofs 的應用

這是在這一期(2002/05)的 Linux Journal 看到的~~
以下是我的摘錄:
首先先假設你已經有了一堆 iso 檔案~
如果沒有
你可以用 cat /dev/cdrom > image1.iso 來建立 iso 檔案
要不然也可以利用免費的 iso buster 來建立 iso 檔案
再放到 Linux 上去
我們把這些 iso 檔案都放到 /mnt/images 下面
然後安裝 automount 套件~~
這個套件,CD 裡面應該就有附上了~
安裝以後,利用 chkconfig –list automount
確定 automount 會開機時自動啟動.
編輯 /etc/auto.master,
加上
/mnt/isosrv_auto /etc/auto.isorv –timeout=60
這表示 automount 會參考 /etc/auto.isorv 這個設定檔,自動掛載設定中的檔案系統到 /mnt/isosrv_auto 下
建立 /etc/auto.isorv
加上
image1 “tab” -fstype=iso9660,ro,loop “tab” :/mnt/images/redhat73_1.iso
上面這行的 表示要用 tab 分開(這是我自己實驗後的心得,automount 似乎會認格式)
image1 表示會在 /mnt/isosrv_auto 下建立的目錄名稱
-fstype=iso9660,ro,loop 表示檔案系統及參數
:/mnt/images/redhat73_1.iso 表示來源的所在位置
這樣設定之後
當你 ls /mnt/isosrv_auto/image1 的時候,linux 就會自動幫你掛載上去了
因為 ls /mnt/isosrv_auto 的時候,並沒有東西顯示,也因此無法得知有什麼目錄可以使用,此時可藉著 symbolic link 解決此問題
舉例來說,我們又另外建立 /mnt/CDs
然後在 /mnt/CDs 下建立 symbolic link 連結到 /mnt/isosrv_auto/image1
ln -s /mnt/isosrv_auto/image1 image1
這樣當你 ls /mnt/CDs 的時候
不就知道有什麼目錄了嗎?
套件的名字是叫做 autofs
後記:後來才知道除了 isofs 之外,這也能把一些其他的 filesystem 掛載進來,所以能應用的範圍就更廣囉.比如說可以配合 crond 用在自動備份上面,也是非常方便的呢. ^_^

cvsweb.cgi

前幾天, 友人找到一個不錯的 cvs web 介面,粉漂亮
是用 Perl 寫的CGI,於是我試著把他裝在 cvs server 上面~
一般的安裝方法,就是找到你的 httpd 伺服器,然後放在 cgi-bin/ 下面
以 redhat 為例,就是放在 /var/www/cgi-bin/ 下面
並且把執行的屬性改為執行~執行的擁有者改為適當的擁有者
但是在安裝以後
發現友人給我的檔案無法使用
於是我 follow 該檔裡面的網址前去下載~~
網址如下:
http://www.freebsd.org/cgi/cvsweb.cgi/www/en/cgi/cvsweb.cgi/
下載之後
發現仍然無法使用
他告訴我還需要
cgi-style.pl
我的老天,網海茫茫,到哪裡去找??
後來突然發現
http://www.freebsd.org/cgi/cvsweb.cgi/www/en/cgi/
這邊就可以看到 cgi-style.pl
下載之後
又發現我沒有 cvsweb.conf
於是再次從
http://www.freebsd.org/cgi/cvsweb.cgi/www/en/cgi/
找到 cvsweb.conf
這樣子,檔案就全部到齊了
請用編輯器打開 cvsweb.cgi, 找到以下這行
for (“$mydir/cvsweb.conf”, ‘/usr/local/etc/cvsweb/cvsweb.conf’) {
加入 /etc/cvsweb.conf,於是就變成
for (“$mydir/cvsweb.conf”, ‘/usr/local/etc/cvsweb/cvsweb.conf’,’/etc/cvsweb.conf’) {
然後再用編輯器打開 cvsweb.conf, 找到以下這行
@CVSrepositories = (
…….
);
這個 Perl 陣列裡面就是你的 CVS 存放的位置也就是 CVSROOT 所指的位置
請修改之以符合你的環境.
假設,你的 CVSROOT 是 /home/cvsroot/, 裡面有一個 respository 為 libs
那麼裡面就應該是
‘libs’ => [‘libs’, ‘/home/cvsroot’],
緊接著@CVSrepositories 下面,你會看到 %MIRRORS
如果你的 CVS Server 有 Mirror 的話
也請修改,否則的話,就把他清成空的,像是這樣~
%MIRRORS = (
);
修改之後,再打開瀏覽器去執行,果然看到 cvsweb 漂漂的畫面
一切就大功告成了~~
cvsweb.jpg

J2SE in linux安裝導引

首先到 Sun(http://java.sun.com) 網站下載最新版的 j2se for linux.
假設你下載的是最新版的 1.4 版,檔名是 j2sdk-1_4_0-fcs-linux-i386.rpm.bin
並放到 /download 資料夾中
$chmod +x j2sdk-1_4_0-fcs-linux-i386.rpm.bin
$./j2sdk-1_4_0-fcs-linux-ie86.rpm.bin
此時會詢問你是否同意其版權,選擇 yes 以後,將會解出 j2sdk-1_4_0-fcs-linux-ie86.rpm
$rpm -ivh j2sdk-1_4_0-fcs-linux-i386.rpm
這樣子就安裝完成了,預設會安裝到 /usr/java/j2sdk1.4.0/ 下,接著要做一些設定
請用你順手的文書編輯器,編輯 /etc/profile
加入這幾行
# Java
export CLASSPATH=.:/usr/java/j2sdk1.4.0/lib
PATH=”$PATH:/usr/java/j2sdk1.4.0/bin”
把 CLASSPATH 和 PATH 都指向 /usr/java/j2sdk1.4.0/ 下~
登出再重新登入之後,應該就可以使用 j2se 了
讓我們編寫一個簡單的 java 程式來實驗看看,程式碼如下

class HelloLinux {
public static void main(String[] args) {
System.out.println("Hello Linux!!");
}
}

並命名為 HelloLinux.java
用 javac HelloLinux.java 編譯之.
用 java HelloLinux 執行之,注意,此處不可以用 java HelloLinux.class, 否則會發生錯誤!!這也是初學者常有的錯誤之一~
運行順利的話,你應該會看到
Hello Linux!!
Yes, Hello Linux
絕佳的學習指引:
http://java.sun.com/docs/books/tutorial/
碁峰有把這部分出書~現在已經出到 3rd Edition 了~不錯!

RAMDisk on Linux

dd if=/dev/zero of=/dev/ram bs=1k count=32768
mke2fs /dev/ram
mount –t ext2 /dev/ram /mnt/ramdisk
這樣就有個Ramdisk的Parititon
進一步的應用,
要修改的地方還有lilo.conf, fstab, rc.local…

Apache SSI 筆記

設定:
在 <directory xxxx> </directory>中的 options 加上 "+Include".
若不想執行外部程式,則改用 IncludeNoExec

慣例命名:
一般都以 .shtml 或 .shtm 來命名.

命令格式:
<!–#命令 引數1=xxx 引數2=xxx…->

命令可以是:

1.config: 可用於顯示錯或設定時間,檔案大小的格式

引數有: errmsg, sizefmt, timefmt
如:<!--#config errmsg="error" -->
<!--#config sizefmt="bytes"-->
<!--#config timefmt="%m/%d/%y"-->

2.echo:列印變數

如:<!--#echo var="DATE_LOCAL"-->

3.exec:執行外部程式

如:<!--#exec cgi="/cgi-bin/prog.cgi"-->
<!--#exec cmd="prog"--> 會啟動 shell 來處理

4.fsize:印出指定檔案的大小

如:<!--#fsize file="路徑"-->
<!--#fsize virtual="URL"-->

5.flastmod:印出檔案最後修改日期

如:<!--#flastmod file="路徑"-->
<!--#flastmod virtual="URL"-->

6.include:將某檔案含括進來

如:<!--#include file="路徑"-->
<!--#include virtual="URL"-->

7.printenv:印出所有環境變數

如:<!--#printenv-->

8.set:自行設定變數

如:<!--#set var="home" value="index.shtml"-->

SSI 預設的變數:

  1. DATE_GMT
  2. DATE_LOCAL
  3. DOCUMENT_NAME
  4. DOCUMENT_URI
  5. LAST_MODIFIED

流程控制:

<!--#if expr="${REMOTE_HOST}=/206\.171\.50/&&${DOCUMENT_NAME}=/${DATE_LOCAL}/"-->
<!--#else-->
<!--#endif-->
p.s.若是變數,要加上${}以示區別.

devfs 架設過程實錄

devfs, 讓我想起 Linuxer 第 20 期正好有這麼一篇介紹的文章.
大家可以參考這篇文章來作做看.
以下是我嘗試架設的過程,我使用的kernel是 2.4.7-10:
首先要先把 kernel 中的選項打開,但是第一次進去找,我始終都找不到這個選項,後來把 “Prompt for development and/or incomplete code/drivers” 此選項打開之後,才在 File System 裡面找到.
然後就把他打開,重新 build kernel.
依照慣例,把 vmlinux, vmlinuz, System.map 都複製到 /boot 之後
我很快樂的重新開機,結果,開不起來. poor.
原來是因為沒有安裝 devfsd 的緣故~ Linuxer 的文章中有提到,而我以為 kernel 裡面已經有了說~ sad ~
上網去找到 devfsd.tar.gz, 這是最新的版本,不是 1.3.9 的喔~
下載之後,執行 make 來重新編譯
無法編譯,依照編譯的錯誤訊息指示
我在 linux/devfs.h 裡面的 #define DEVFSD_NOTIFY_CREATE 後面加上
#define DEVFSD_NOTIFY_DELETE 7
這行
同時在 make 的時候改用下列敘述來 make (這是在make時指定環境變數的方法)
KERNEL_DIR=/usr/src/linux make
然後就 compile ok 了
接著執行
make install
依照文章指示,/etc/rc.d/rc.sysint 裡面還要有一行
[-e /dev/.devfsd -a -x /bin/devfsd] && /sbin/devfsd /dev
可是我的 /etc/rc.d/rc.sysint 檔案裡面早就已經有了
注意,這一行要放在很前面喔,否則我猜想可能會開不起來
於是再重新開機
果然就 ok 了~~
可是,文字模式下的滑鼠起不來
於是我又把 /etc/sysconfig/mouse 裡面的 DEVICE 改為 /dev/psaux
重新開機後,文字模式下的滑鼠就 ok 了
可是有些特定的設備,我還不會設定( 設定檔在 /etc/devfsd.conf )
比如我自己寫的一個 driver 還是起不來~~
devfsd 相關的套件,可以利用 Google 搜尋引擎找到.
個人覺得 devfs 與原來的 /dev 相容性蠻高的,幾乎不用作什麼修改.在Documents/filesystems/devfs/README 這份文件說的蠻清楚的,什麼有支援,什麼不支援,裡面都有說~
/dev/mouse 是確定不支援的,要改成 /dev/psaux;其他的一些 driver,我想修改 /etc/devfsd.conf 應該一切都能搞定,只是我還不會設.
coding 的話~~
現在所有中文有關 kernel 的書,講到的 register_chrdev() 都是舊的方法.
如果要支援 devfs 的話,直接使用
devfs_register_chrdev() / devfs_unregister_chrdev()
devfs_register_blkdev() / devfs_unregister_blkdev()
devfs_register() / devfs_unregister()
來註冊,跟原來的語法用法是很接近的
函數的原型參考,可以在 include/linux/devfs_fs_kernel.h 裡面找到
事實上在 devfs_fs_kernel.h 裡面
已經有利用 CONFIG_DEVFS_FS 來作判斷了
當 CONFIG_DEVFS_FS 有被定義的時候, devfs_register() / devfs_unregister() 是有東西的,如果沒被定義,那麼則是空殼子~
此外 devfs_fs_kernel.h 裡面有許多關於 devfs 的函數,而函數的實作則是放在 fs/devfs/base.c 裡面~
driver 寫的時候,建議的順序是這樣子的(看了兩三個driver的source才了解)
1.用 devfs_handle_t 宣告一個 handle.
2.用 devfs_register_chrdev() / devfs_register_blkdev() 註冊裝備的動作,MAJOR號碼以及名稱
3.再用 devfs_register() 去 /dev 裡面註冊一個設備檔案
當然如果有很多的話,可以先用 devfs_mk_dir() 去註冊一個目錄,再利用 devfs_register_series() 去註冊一狗票的設備檔案或者利用迴圈去註冊一狗票的設備檔案.
然後就 ok 了
release 的時候,則是:
1. 先 devfs_unregister() 掉設備檔案
2. 再 devfs_unregister_chrdev() / devfs_unregister_blkdev()

Stream Server – icecast 架設實錄

前兩個星期在 Linux fab 上看到一則新聞
說 icecast 已經釋出新版本了
But what is icecast?
仔細一看
才明白,原來他是一個 stream server,就類似微軟的 media service.
這樣講也許還不是很清楚,拿個實例來說吧:如廣播電台,目前廣播電台都已經可以在網路上收聽了,他們就是架設一個 server 並提供一個 url, 讓你在 media player 或 real player 裡面輸入,於是你就可以收聽到即時的節目了.又比如之前紅極一時的Naked News也是這樣子做的,只是他們輸出的是影音新聞節目.
架設的時候你必須到 icecast 網站先取得 icecast 套件,目前最新的版本是 1.3.11.
取得之後,依照 linux 的慣例安裝三部曲,輸入
./configure
make
make install
於是安裝完成~~
接下來我切換到套件預設的安裝路徑 /usr/local/icecast/
將 conf 裡面的 icecast.conf.dist 複製到 /etc, 並命名為 icecast.conf
修改裡面的
streamurl 為 http://redhat71
server_name 為 redhat71
接著就要啟用囉
請輸入
/usr/local/icecast/bin/icecast -c /etc/icecast.conf -b
以啟動 icecast server
當然到這裡都很簡單,只是依照套件內附的文件行事而已
接下來,要怎麼讓音樂播放出來呢??
這可讓我傷透了腦筋
最後才在 icecast 網站的 getting start找到方法.
我用的是 shout, 這同樣也是 icecast 網站提供的另外一個套件
請下載 shout ,依照 linux 慣例安裝三部曲來安裝.
接著,要製作 mp3 play list
我們可以利用如下指令來製作
find /mnt/cdrom -name *.mp3 -print >> /etc/mp3.lst
不過據我實驗的結果,中文的檔案名稱似乎無法用 find 來取得~~討厭~~
本來想把所有的 mp3 都用 stream server 來播放的~
最後就可以使用如下的指令來將 mp3 塞到 stream server 了
/usr/local/icecast/bin/shout localhost -P hackme -a -x -p /etc/mp3.lst -l -n “A sample name”
shout 可接的參數,在此就不再贅述,可以自行加上 –help 參數來取得.
(看到 localhost 了嗎??這表示你也可以從遠端來控制要播出的節目喔.)

RPM常用指令

rpm 的幾個必要用法:
安裝:
rpm -i lcdctld-1.0.0-1.i386.rpm
rpm -ivh lcdctld-1.0.0-1.i386.rpm #加上 vh 是顯示安裝進度及狀態
rpm -i ftp://your_site/lcdctld-1.0.0-1.i386.rpm #從 ftp 站下載並安裝
升級:
rpm -U lcdctld-1.0.1-1.i386.rpm
rpm -Uvh lcdctld-1.0.1-1.i386.rpm #加上 vh 是顯示升級進度及狀態
移除:
rpm -e lcdctld-1.0.0-1.i386.rpm
求助:
rpm –help
man rpm
如何了解目前 rpm 包的一個狀態(用個大陸用法”包”,別介意):
檢查是否有檔案被誤刪:
rpm -Va
查詢檔案屬於哪個包:
rpm -qf /usr/sbin/lcdctld
查詢包的資訊
rpm -qpi lcdctld-1.0.0-1.i386.rpm
查詢包裡面的檔案會被安裝到哪兒
rpm -qpl lcdctld-1.0.0-1.i386.rpm
怎麼建立包
建立包的程序,你可以參考上一篇的程序.
.spec 的格式說明
要注意的一點,一般一個包,裡面會包含 Source 和 Binary.
Header
.spec 檔是挺重要的檔案,有幾個 header,咱們必得放進去:
Summary:放一行簡單的說明
Name:放包的名稱
Version:放包的版本
Release:放包的釋出編號
Copyright:放包的版權宣告,譬如:GPL,BSD,MIT,public domain, distributable或 commerical
Group:包的分類,參考後面的附表一
Source:來源檔案的檔名,可以有多個,多個的時候,則用 Source0, Source1…
Patch:修正包的檔名,同樣地,可以有多個,多個的時候,用 Patch0, Patch1…
[*]BuildRoot:指定一個安裝路徑,通常命名為 name-root.
description 則可有可無~,建議是放上去,作一個詳細的說明,因為 Summary 提供的說明只有一行而已
Sections
prep:這個 section 一開始通常是放 %setup,%setup會先把SOURCES裡面的包解開放到 BUILD 目錄,再切換到該目錄下.再者就是 %patch,可以讓你對源碼作 patch 的動作,如果你前面的 header 有多個 patch 檔,那麼這裡只要用 %patch0 -p1 %patch1 -p2 就行了.
build:這個 section 則是建立.我參考 thttpd.spec, thttpd.spec 在這裡是放 configure 的動作,我認為此處也可以順便做 make的動作,反正都已經解開也patch過,Makefile 也出來了.不過一般似乎都是已經先 make 好了.
install:這個 section 就是放安裝的動作了,在這裡除了用笨方法 %{__mkdir}, install..等一些 shell script 去安裝之外,還可以用 make install 去安裝,這正好證實了我的推論,在 build section 中可以用 make.
clean:把之前在 prep section 解開放到 BUILD 的目錄給移除掉.
可有可無的Sections
pre:作安裝前的準備,yes, 就是 On_BeforeInstall
post:作安裝後的處置, yes, 就是 On_AfterInstall
preun:作移除安裝前的準備, 嗯, 就是 On_BeforeUnInstall
postun:作移除安裝後的擦屁股動作,就是 On_AfterUnInstall
files Section
這是一個很重要的 section, 他記錄了這個包有放什麼檔案到什麼地方.
簡單的用法就是寫
/usr/sbin/lcdctld
直接以絕對路徑+檔名指明,當然這樣子很累啦.
rpm 包有提供一些 macro 讓你省去這樣子的功夫.
%doc
%config
%dir
%defattr
%files
%doc 的位置是 /usr/doc/name-xx.xx.xx-xx, 你可以這麼用: %doc README INSTALL HISTORY ChangeLog
%config 就是指一些設定檔,例如: /etc/xxxxxx
%dir 表示特定屬於這個包的目錄,舉例來說就是 /etc/httpd/
%defattr 設定檔案的屬性,語法是 %defattr (mode,owner,group) filename
%files 看不懂,我猜應該跟直接列出檔名是一樣的
不過我看 thttpd.spec, %dir 可以直接用 /etc/httpd 來代替,前面不需要加上%dir, %defattr 則可以用 %attr 來代替.
changelog Section
這主要是讓維護包的人,可以放歷史紀錄,格式是
* Fri Dec 14 2001 Ellery Tsai
– do nothing, but eat, drink, sleep.
打包
打包的語法是:
rpm -ba lcdctld-1.0.0.spec

rpm -bb lcdctld-1.0.0.spec
ba 跟 bb 的差別是,ba 會連 source 和 binary 都打包,結果會產生兩個 rpm ,而 bb 只包 binary,只出現一個 rpm.
其他還有一些用法:
列出 files section 的檔案
rpm -bl lcdctld-1.0.0.spec
只做某些步驟,我猜想是便於內部測試用:
rpm -bc lcdctld-1.0.0.spec
rpm -bi lcdctld-1.0.0.spec
rpm -bp lcdctld-1.0.0.spec
建議
建議最好是先到 SOURCES 去手動一步一步來
先解開 tar 檔,並且先複製一份,並更名為 name-xx.xx.xx.orig,這主要是為了方便製作 patch 用.接著,依照說明去作:
patch
configure
make
make install
在 make install 的時候,順便把檔案位置都記下來,然後再把位置放到 .spec 檔中的 files section 裡面.
如果在前面幾個步驟,有需要修正一些東西,那麼表示你要做一個 patch 檔
作 patch 檔的語法如下:
diff -uNr name-xx.xx.xx.orig name-xx.xx.xx > name-xx.xx.xx-linux.patch
接著到 .spec 檔裡面的 patch header, 作修正.
最後
Yes, That’s All.
資料來源:RPM HOW-TO
此份文件在 \\xserver\linux\Datasheet\Linux-HOWTOs\English_pdf 這裡有.
附表一:
Amusements/Games
Amusements/Graphics
Applications/Archiving
Applications/Communications
Applications/Databases
Applications/Editors
Applications/Emulators
Applications/Engineering
Applications/File
Applications/Internet
Applications/Multimedia
Applications/Productivity
Applications/Publishing
Applications/System
Applications/Text
Development/Debuggers
Development/Languages
Development/Libraries
Development/System
Development/Tools
Documentation
System Environment/Base
System Environment/Daemons
System Environment/Kernel
System Environment/Libraries
System Environment/Shells
User Interface/Desktops
User Interface/X
User Interface/X Hardware Support

RPM製作簡單說明

在此直接以我在公司開發的 lcd daemon 來作為實例
首先把我的 lcd daemon 編譯過,得到 lcdctld, 假設為 1.0.0 版,release 第一次
接著,隨便在某個地方建立目錄,命名為 lcdctld-1.0.0
在裡面建立 /usr/sbin
然後把 lcdctld 放到 lcdctld-1.0.0/usr/sbin 裡面去
利用
tar cvzf lcdctld-1.0.0.tar.gz lcdctld-1.0.0
這個指令得到 tar.gz 檔案
把這個檔案丟到 /usr/src/redhat/SOURCES 裡面去
接著就是最重要的地方了
要編輯 lcdctld.spec 檔案
內容如下:

%define name lcdctld
%define ver 1.0.0
Summary: MS-9507 LCD Daemon
Name: %{name}
Version: %{ver}
Release: 1
License: Micro Star Inc.
Group: System Environment/Daemons
BuildRoot: %{_tmppath}/%{name}-%{ver}-root%
description
lcdctld is a daemon that listen MS-9507 device.
%prep
%setup -q
%build
%install
rm -rf $RPM_BUILD_ROOT
%{__mkdir} $RPM_BUILD_ROOT/
%{__mkdir} $RPM_BUILD_ROOT/usr
%{__mkdir} $RPM_BUILD_ROOT/usr/sbin
install -m555 usr/sbin/lcdctld $RPM_BUILD_ROOT/usr/sbin
rm -f tmp
%cleanrm -rf $RPM_BUILD_ROOT
%files/usr/sbin/lcdctld

這裡面有很多東西,建議直接找個範本來修改比較好,我是直接拿 thttpd 的來作修改.
主要要修改的有上面的欄位:Summary, License, Name, Version, Group, …等等的
還有 %install 開始的地方,這裡主要就是寫複製檔案的 script.事實上, RPM 會自動把你 SOURCES 下的 tar.gz 檔解開,所以你只要把對應的檔案複製到 RPM_BUILD_ROOT 對應的目錄去就好了.
最後還有 %files ,如果這裡沒有東西,rpm 會發生錯誤.這裡主要是放檔案的列表,讓 rpm 知道這個 package 裡面有什麼檔案.
編輯好 lcdctld.spec 之後,輸入
rpm -bb lcdctld.spec
順利的話,你應該會在 /usr/src/redhat/RPMS/i386 目錄下看到 lcdctld-1.0.0-1.rpm 才對~~
你可以使用
rpm -Uvh lcdctld-1.0.0-1.rpm
來安裝
然後使用
rpm -e lcdctld-1.0.0-1
來移除
.spec 裡面的一些用法
%define -> 定義一些變數
%{xxx} -> 引用變數
%{_tmppath} -> 會指到 /var/tmp 下面
%{__command}-> shell的指令幾乎都可以引用,只是前面要加上兩個底線,例如 mkdir 就是 %{__mkdir}.
%prep
%setup
%build
%install
%clean
%files -> 這些都是表示特定的步驟,雜誌上只說在 %install, %clean, %files 要加東西而已,其他不清楚
我想這樣子在目前的使用上,應該就足夠了吧~
將來如果有新的發現,會在這個主題上繼續累加~
資料參考來源: Linuxer 雜誌第 12 期以及 Linux in a NutShell
Linux in a NutShell 只有說明 rpm 指令有哪些參數而已,完全沒有說明 .spec 檔要如何編輯