20:50 <@jesse_> humm.... 10 分鐘後開始... 來準備一下... 20:50 -!- mode/#debian.tw [+o AndrewLee] by csardas 20:51 <@BBNS> Paulliu: 9/21記得來系計中捧場哩 :P 20:51 -!- mode/#debian.tw [-ooo AndrewLee BBNS vgod] by jesse_ 20:51 < paulliu> 9/21? 有什麼事嗎? 20:51 -!- mode/#debian.tw [-ooo csardas AceLan Victor_] by jesse_ 20:51 < paulliu> jesse_: 什麼事要開始了?? 20:51 < csardas> paulliu: see title 20:52 -!- mode/#debian.tw [-oo scw_ flyhermit] by jesse_ 20:52 < BBNS> paulliu: Debian Installfest 20:52 < BBNS> paulliu: 待會兒這裡要IrcConference 20:52 -!- mode/#debian.tw [-ooo kevinwat1 cnoize2 ycheng] by jesse_ 20:52 < paulliu> 喔.... 20:52 < BBNS> pauliu: asho大 要開始講課 20:53 <@asho> BBNS:...@@...講的不好不要打我... 20:53 < BBNS> asho: 你講的正是我最想學的哩 :D 20:54 < BBNS> chihchun: 這個Conference會被錄下來乎? 20:54 <@asho> BBNS:壓力來了...>< 20:54 < paulliu> 我也要聽... 20:54 <@jesse_> BBNS: 會錄下來 20:55 < BBNS> jesse_: ya ... 因為我大概會缺席半小時 20:55 < BBNS> jesse_: 要上英文課:~ 20:56 <@jesse_> BBNS: :) 20:56 -!- kanru [~kanru@61-231-216-71.HINET-IP.hinet.net] has joined #debian.tw 20:57 <@jesse_> 再三分鐘 20:58 <@jesse_> 突然變安靜了... @_@ 20:58 < csardas> 3 20:59 <@jesse_> bozilla: part 20:59 <@jesse_> err... 20:59 < csardas> ..... 20:59 < BBNS> -v- 20:59 <@jesse_> 直接踢嗎? bozilla 的老爸不在.. :P 21:00 < csardas> 不會自動login?? 21:00 -!- pwchi [~pwchi@c129.h061013218.is.net.tw] has joined #debian.tw 21:00 <@jesse_> 試看看... 21:00 -!- tumii [~tumi@140-109-231-54.adsl.sinica.edu.tw] has joined #debian.tw 21:00 -!- bozilla was kicked from #debian.tw by jesse_ [jesse_] 21:00 <@jesse_> ... 21:00 <@jesse_> 21:00 21:00 < informer_> 要拍手嗎 ? 21:00 <@jesse_> 來開始吧.. 21:00 <@jesse_> XD 21:00 * informer_ 拍手 21:00 * tumii 拍手 21:00 < flame_> pa pa pa... 21:01 < paulliu> * 拍手 21:01 < kanru> papapa 21:01 < pwchi> 啪啪啪啪 21:01 <@jesse_> 我會把 channel +m 21:01 < csardas> 拍 21:01 < cserustic> papapa 21:01 <@jesse_> 等會兒要發問的話, 請 /msg asho blah blah blah 21:01 < sbc_> 拍 21:01 <@jesse_> ok, 先 +m 了 21:01 -!- mode/#debian.tw [+m] by jesse_ 21:01 -!- louie [~louie@mail.louie.idv.tw] has joined #debian.tw 21:02 <@jesse_> 要發問的話, 請 /msg asho blah blah blah 唷 21:02 <@jesse_> 請 asho 開始吧 21:02 <@asho> jesse_: 謝謝 21:02 <@asho> 各位朋友晚安... 21:02 <@asho> 在這個中秋節過後的夜晚除了剩下的烤肉之外 21:03 <@asho> 順道來點irc吧...:-D 21:03 <@asho> 首先我先自我簡介 21:03 <@asho> 我叫阿信,是moto.dot上的一位user 21:04 <@asho> 同時也常常回答問題,不管有無給予正確解答, 21:04 <@asho> 還希望讓詢問者有收穫 21:04 <@asho> 今天很榮幸擔任irc conf第一場的主講人 21:04 <@asho> 同樣地...藉由這一場 21:05 <@asho> 小弟希望能將在Debian上得喜樂分享給各位朋友。 21:05 <@asho> All Right...It's time... 21:05 <@asho> 今天要來分享的是debian上製作deb的方法 21:06 <@asho> 我們知道deb是專屬於Debian上的package system 21:06 <@asho> 而Debian在操作以及管理上經常讓人讚賞 21:06 <@asho> 使得有許多朋友願意來使用 debian... 21:07 <@asho> 因為 debian 實在太人性化且方便了 21:07 <@asho> 雖然使用方便...那 package 製作呢? 21:08 <@asho> 是地...不要懷疑...Debian可是平易近人的,記得他的符號嗎?是否每天早上都會見到呢...:-P 21:08 <@asho> 以下將分成三小節來說明 21:08 <@asho> 第一:事情準備 21:08 <@asho> 第二:build package with 'debian' dir 21:09 <@asho> 第三:build package without 'debian' dir 21:09 <@asho> 好的...想必大家已經清楚了 21:09 <@asho> 那我們就接下去摟...:) 21:09 <@asho> 事情準備 21:10 <@asho> 在製作deb之前,可要先做點功課窩... 21:10 <@asho> 不然就會像沒閱讀無痛起步而痛不欲生...:D 21:10 <@asho> 首先我們要準備的當然是 21:11 <@asho> dpkg-dev , gcc , make , patch , file ,libc6-dev 等 compiler 或library 21:12 <@asho> 2.包裝的相關工具: dh-make (也就是後段的主角) 21:12 <@asho> debhelper 21:13 <@asho> 這些皆可在debian archieve中找到 21:13 <@asho> other useful tools... 21:13 <@asho> fakeroot 21:13 <@asho> debmake (maybe...if you need) 21:14 <@asho> 重要的文件.... 21:14 <@asho> 1. debian-policy 21:14 <@asho> 2. developers-reference 21:14 <@asho> 或是網路上得文章:http://www.debian.org/doc/manuals/maint-guide/index.en.html 21:15 <@asho> 這些文件是必需要念的...所以要辛苦一點窩 21:15 <@asho> 但希望今晚的講解,可以讓各位就不需要這些文件了...i hope...:-) 21:16 -!- hlb [hlb@ca.NCTU.edu.tw] has joined #debian.tw 21:16 <@asho> <認領 deb> 21:16 <@asho> 看完本篇之後一定想要開始動手了吧,但可別忘記檢查是否有人已經早一步製作了 21:16 <@asho> 記得別忘記以下的步驟 21:17 <@asho> 1. 先到 http://www.de.debian.org/devel/wnpp/being_packaged 確認是否有人已經認領了 21:17 <@asho> 2: license program:參考 http://www.debian.org/social_contract#guidelines 的方式定義該package為 main/non-free/contrib 21:17 <@asho> 或是寫信到 debian-legal@lists.debian.org 詢問 21:17 <@asho> 3. 聯絡該軟體的作者是否願意製程deb 21:18 <@asho> 4. well documented 21:18 <@asho> 如果製作過程遇到無法解決的問題,可以寫信到 debian-mentors@lists.debian.org 21:18 <@asho> 或是查詢 http://lists.debian.org/debian-mentors/ 這個 Mailing List的紀錄,或許就可迎刃而解。 21:19 <@asho> ok...以上是基本動作...我們可以繼續進行以下的部份 21:19 <@asho> 事前的說明雖然有點枯燥...但還請客位忍耐... 21:20 <@asho> 因為沒有寒冷的冬季,怎能聞得梅花撲鼻香呢...:-) 21:20 <@asho> 21:21 <@asho> 何謂 debianization 呢?當我們下載了一套軟體的原始碼來編譯時,往往還需要一些修改才能符合系統的環境 21:21 <@asho> 比如說各家的distribution目錄位置或名稱不同,就需要另外釋出修改好的 binary file 來安裝,Debian也是如此。 21:21 <@asho> 在產生 deb 的過程中 21:21 <@asho> Developer會利用deb的工具將copyright,README.Debian,changelog,control等相關檔案集合在該軟體下的一個 debian 目錄中 21:22 <@asho> 透過 "rules" 和 "dh_*" 等工具來進行包裝的過程 21:22 <@asho> 這些步驟就是所謂的 "debianization" 21:22 <@asho> 經過 "debianization" 之後的套件 21:23 <@asho> 我們只要在該目錄下執行:dpkg-buildpackage or dpkg-buildpackage -rfakeroot 21:23 <@asho> 就會自動幫我們產生該套件的deb檔案,如果有相依性的問題,也會在編譯之前提醒。 21:23 <@asho> <套件版本與編號> 21:23 <@asho> 當拿到了 package source 想躍躍欲試之前,請先確定一些 source dir 的限制。 21:24 <@asho> 1. source dir必須全部小寫,因為debian 限制 package name 必須是小寫 21:24 <@asho> 2. 目錄名稱要改成 - 21:24 <@asho> 3. 少於20個英文小寫字母 21:24 <@asho> 我們將的部份抽出來討論,有兩種表示方式: 21:24 <@asho> date 21:25 <@asho> date就是以日期為版本的套件請以表示 21:25 <@asho> 比如<19910501>和<20010601>,而這也代表了<20010601>比<19910501>來的>新,所以會自動升級 21:25 <@asho> upstream_version-debian_revision 21:25 <@asho> upstream_version就是該軟體本身發行的版本 21:25 <@asho> debian_revision就是該軟體在debian上發行的版本 21:26 <@asho> 兩者皆可以有字母或'.'或'+'等 符號 21:26 <@asho> dpkg的判斷方式是從左而右,先判斷 upstream_version的大小 21:26 <@asho> 然後在判斷 debian_revision的大小,遇到字母等符號以ASCII的數值來判斷 21:26 <@asho> 我是先在硬碟裡面準備了五個版本的 gv4l 21:26 <@asho> 21:27 <@asho> 1. gv4l-2.0.2-1.deb 21:27 <@asho> 2. gv4l-2.0.2-asho1.deb 21:27 <@asho> < Revision 2> 21:27 <@asho> 1. gv4l-2.0.2-2.deb 21:27 <@asho> 2. gv4l-2.0.2-asho2.deb 21:27 <@asho> 3. gv4l-2.0.2-2asho.deb 21:27 <@asho> 則他們的優先順序是: 21:28 <@asho> gv4l-2.0.2-asho2.deb > gv4l-2.0.2-asho1.deb > gv4l-2.0.2-2asho.deb >gv4l-2.0.2-2.deb > gv4l-2.0.2-1.deb 21:28 <@asho> 是不是看到一些"怪怪"的呢? 21:28 <@asho> 21:28 <@asho> 兩者只差在 revision 的號碼,所以數字大的表示比較新 21:28 <@asho> 21:29 <@asho> 這兩個寫法代表的意義不同這兩個寫法代表的意義不同 21:29 <@asho> gv4l-2.0.2-2asho.deb本來是以為gv4l-2.0.2-2再加入asho當作者的意思 21:29 <@asho> 所以就 revision 而言 21:29 <@asho> 應該 gv4l-2.0.2-2asho.deb 會比 gv4l-2.0.2-asho1.deb 要來的新 21:29 <@asho> 但實際上卻相反 21:29 <@asho> 因為當檢查完 "gv4l-2.0.2-" 這個字串之後 21:30 <@asho> 兩者的下一個字元是 "a" 與 "2" 21:30 <@asho> 而 "a" 的ASCII數值是97,"2"的ASCII數值是50 21:30 <@asho> 所以 gv4l-2.0.2-asho1.deb 會比 gv4l-2.0.2-2asho.deb 來的新 21:30 <@asho> 第二個例子讓我們知道了套件命名上容易混淆的地方 21:31 <@asho> 所以在包裝套件的時候要特別注意版本的寫法 21:31 <@asho> 其他的符號就請各位測試看看摟...:-) 21:31 <@asho> 21:31 <@asho> 目前有許多的軟體在解開 source.tar.gz 後 21:31 <@asho> 可以看到有一個 "debian" 的目錄 21:32 <@asho> 這個時候,你可以大喊"萬歲"...:-P 21:32 <@asho> 因為這個軟體已經針對 Debian 做好 debianization 了 21:32 <@asho> 舉 mplayer 這個軟體當例子 21:32 <@asho> 我從 http://www1.mplayerhq.hu/MPlayer/releases/MPlayer-0.91.tar.bz2 抓取最新的版本並解開如下 21:32 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_01 21:33 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_02 21:33 <@asho> 我們可以看到目錄下有 debian 這個目錄 21:33 <@asho> 於是可以執行 dpkg-buildpackage 產生mplayer的deb 21:34 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_03 21:34 <@asho> 除了這些未包裝的軟體之外 21:34 <@asho> 我們也可以編譯 Debian 所包好的套件 21:34 <@asho> 先在 /etc/apt/sources.list 中加入 deb-src 的來源路徑 21:34 <@asho> 然後可以執行 apt-get source [pkg-name] 來抓取該軟體的 source code 21:34 <@asho> 比如拿 zsnes 這個套件來說 21:34 <@asho> 當我們執行了 apt-get source zsnes 的時候,會抓取下列三個檔案 21:35 <@asho> 1. zsnes_xxx.diff.gz 21:35 <@asho> 2. zsnes_xxx.dsc 21:35 <@asho> 3. zsnes_xxx.orig.tar.gz 21:35 <@asho> 同時會進行 patch 及解開zsnese_xxx.orig.tar.gz 21:35 <@asho> 這時候就可以仿造上面的方式進行編譯 21:35 <@asho> 如果要修改編譯的選項或相依性 21:35 <@asho> 就可以編輯 debian 裡面的 rules , control等檔案即可 21:36 <@asho> 呼...以上大家應該都有用過... 21:36 <@asho> 接下來的部份可能比較辛苦一點... 21:36 <@asho> 大家加油...實作的部份就在不遠處了...yoyoyo... 21:36 <@asho> 21:37 <@asho> * To debianize * 21:37 <@asho> ** 製作之前 ** 21:37 <@asho> 當拿到一個軟體的source code之後,想必會馬上製作 deb 出來分享,但該怎麼利用那些工具呢,硬碟裡有一堆dh*開頭的指令,到底該用哪一個呢? 21:37 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_04 21:38 <@asho> 光看到就嚇死了,還說製作呢...:-) 21:38 <@asho> 放心吧,我們只需要一個指令:dh_make就可以幫我們做初始化的動作了 21:38 <@asho> 製作之前還需要一點準備工作,就是了解該軟體的性質和目標,怎麼說呢? 21:38 <@asho> Debian的package system具有分組的特性 21:38 <@asho> 比如有library的deb,kernel的deb或Server等等 21:38 <@asho> 在dselect或aptitude上皆可以看到軟體組別的狀態 21:38 <@asho> 而一個軟體又可以細分成 library , document , plug module等 21:39 <@asho> 以一些Server的軟體來說,通常會有xxx.deb,xxx-doc.deb以上 21:39 <@asho> 會另外拆開的原因不外乎就是為了"精簡"和"系統化" 21:39 <@asho> 不僅可以讓我們方便查詢套件之外,也可以只安裝所需要的就夠了,節省硬碟的空間 21:39 <@asho> 所以我們會常常看到有些軟體比如kdebase還會將konqueror,kate等再細分出來 21:39 <@asho> 因為不是每個人都需要那麼龐大的kdebase來佔系統降低速度 21:39 <@asho> 故在製作 deb 之前,請先了解並確定我們要製作的軟體要拆成多少個 deb。 21:39 <@asho> dh_make在初始化的過程中也會詢問該軟體的性質: 21:39 <@asho> 1. single binary 21:40 <@asho> 2. multiple binary 21:40 <@asho> 3. library 21:40 <@asho> 4. kernel module 21:40 <@asho> 請依照要製作的軟體來分類吧 21:40 <@asho> ** 範例 ** 21:41 <@asho> 我們先跳到實作的部份...先了解一下dh-make的使用情況 21:41 <@asho> 這次要建立的是 GV4L,這一套軟體是用來處理video in做影像的擷取 21:41 <@asho> 目前並沒有進到 Debian,所以我們就來為它製作 deb 吧 21:41 <@asho> 先到該網址下載 GV4L 的source code:http://gv4l.sourceforge.net/,目前版本是2.0.2 21:41 <@asho> 因為 GV4L 並不大,也沒有額外的文件,所以只建立 single binary 即可 21:42 <@asho> 接下來請解壓縮 GV4L的gv4l-2.0.2.tar.gz 21:42 <@asho> 解壓縮之後,切換到gv4l-2.0.2的目錄下,然後跟著以下的圖文框動作 21:42 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_05 21:43 <@asho> 透過 dh_make,我們就已經完成了 "debianization" 的初始動作了,接下來就跟 "with debian dir" 的情況一樣了。 21:43 <@asho> 到現在為止...已經可以建立好 deb了 21:44 <@asho> 但這樣做並不嚴謹,其他user拿到此deb雖然可以順利安裝但不一定能夠執行 21:44 <@asho> 製作 deb 的重點在於 "debian" 這個目錄下的檔案 21:44 <@asho> 其中以changelog,control,rules為主要的關鍵,接下來以剛剛的 GV4L 為例子,讓我們來了解這些檔案的格式與內容 21:44 <@asho> *** changelog *** 21:45 <@asho> 版本變更紀錄,此檔案主要是紀錄該軟體每次釋出所做的改變 21:45 <@asho> 比如增加新版本,加入修正,不同的編譯方式等,皆會在此檔案中紀錄 21:45 <@asho> 而此檔案只針對 Debian 的release更新,如果軟體有重大修正,是會有其它的說明文件。 21:45 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_06 21:45 <@asho> 以上的格式請特別注意空格以及符號 21:46 <@asho> 比如Maintainer前面必須要有一個空白 21:46 <@asho> '-'前面也需要一個空白,第一行的debian-dist後面的';' 21:46 <@asho> 整理好上面的欄位如下 21:46 <@asho> 1. pkg-name:該軟體在 debian 中的名字 21:46 <@asho> 2. (version-release):軟體版本編號-Debian釋出次數,()不能省略窩 21:46 <@asho> 3. debian-dist:stable/testing/unstable/frozen/experimental 21:47 <@asho> 4. urgency:緊急程度:low/medium/high,我們自己製作的填low就好了 21:47 <@asho> 5. * changes:將更新的部份紀錄在此,一行以一個 * 為開頭 21:47 <@asho> 6. Maintainer:Maintaner的全名 21:47 <@asho> 7. :Maintainer的電子郵件 21:48 <@asho> 8. date:請填入 822-date 的執行結果 21:48 <@asho> 這是剛剛 dh_make 初始化後後的 changelog: 21:48 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_07 21:48 <@asho> *** control *** 21:49 <@asho> 此檔案主要是控制套件的相依性,比如安裝和編譯的時候所需要的軟體,其次的是軟體資訊 21:49 <@asho> 當我們使用apt-cache的時候,是會從control這個檔案中取出資料 21:49 <@asho> 以下是 control 檔案的內容: 21:49 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_08 21:49 <@asho> 讓我們一行一行地解釋control的格式吧 21:49 <@asho> Source: # 套件的 source code 名稱 21:50 <@asho> Section: # 將此套件放在那個分類 21:50 <@asho> * base 21:50 <@asho> # x11 21:50 <@asho> # devel 21:50 <@asho> # doc 21:50 <@asho> # mail 21:50 <@asho> # lib 21:50 <@asho> # net 21:50 <@asho> # system 21:50 <@asho> # text 21:50 <@asho> * game 21:50 <@asho> 其他相關的section可以在aptitude中找到,至於main/contrib/non-free這三種分類可以省略 21:52 <@asho> Priority: 21:52 <@asho> * required:Debian系統不能缺少的軟體,否則系統會無法運作,如dpkg,base-files 21:52 <@asho> * important:被定義成 important 的軟體指的是一般 Unix-Like 的作業系統上常常看到的,比如簡單的editor:ed,或是定時工作的 cron,移除這些軟體並不影響系統工作 21:52 <@asho> * standard:一些基本功能的軟體,如ftp 21:52 <@asho> * optional 21:53 <@asho> * extra 21:53 <@asho> 上面的required,important,standard在第一次安裝 Debian 的時候皆會安裝在系統內 21:53 <@asho> Maintainer: # 請用英文全名 21:53 <@asho> Build-Depends: 21:54 <@asho> (version) , pkgname-2 # 括號中是版本的比較,比如 debhelper (>> 3.0.0),表示debhelper的版本要比3.0來的新,如果不清楚此套件需要哪些package的話,可以透過以下指令來找尋: 21:54 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_09 21:54 <@asho> Standards-Version: # Debian policy 的版本 21:54 <@asho> Package: #編譯之後產生的套件名稱 21:54 <@asho> Architecture: # 對那一平台編譯,i386/PPC/ALPHA等,但此欄位請填入any,因為dpkg-gencontrol會依照機器型態幫我們填好該值。 21:55 <@asho> Dependency:Debian在處理套件的dependency就在於此欄位的設定,以下是dependency的關係式 21:55 <@asho> * Depends:安裝該套件前所必須先安裝的套件 21:55 <@asho> * Recommends/Suggests:Debian是一個以精簡為特性的系統,所以軟體會被拆成 21:55 <@asho> 1. 必要:該套件必須要有這些軟體才能正常啟動,通常是library之類的 21:55 <@asho> 2. 推薦:安裝此區的軟體能讓原本的套件功能更完整,有可能是額外的module或codec,並不完全地需要 21:55 <@asho> 3. 建議:而此區的軟體通常是另外的套件,與原套件通常有相同性質的軟體,比如gqview建議安裝gimp,而gimp除了看圖之外,還可以編輯圖像 21:56 <@asho> * Pre-Depends:同 Depends 但不只要安裝外,還必須將 Pre-Depends 的套件設定好 21:56 <@asho> * Conflicts:此區的套件與所要安裝的套件相衝突,必須先移除掉才可以安裝新的套件 21:56 <@asho> * Provides:此區通常是一些 virtual package,本身並沒有實體檔案,但卻提供多個版本或不同名字但同性質的軟體,比如 c-compiler,並沒有 c-compiler 這個套件,但 apt 會告訴你有哪些可以安裝 21:56 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_10 21:56 <@asho> * Replaces:此區的套件與原本的套件是屬於相同性質的,但安裝此區的套件會將原本的套件被替換掉,比如 vim-gtk 和 vim-perl,兩者皆為 vim 的視窗介面但不能共存,如果先安裝了 vim-gtk,想再安裝 vim-perl 的話,那 vim-gtk 便會被替換掉,通常 Replaces 會與 Conflicts 一起使用 21:57 <@asho> 上面的關係運算子有下列這幾種: 21:57 <@asho> 1. << 21:57 <@asho> 2. <= 21:57 <@asho> 3. = 21:57 <@asho> 4. >= 21:57 <@asho> 5. >> 21:57 <@asho> Description: # 一些軟體的敘述 21:57 <@asho> hmm... 21:57 <@asho> 插花一下 21:58 <@asho> 上面的822-date部份,也可以用 date -R 21:58 <@asho> 以上由AndrewLee兄熱情提供 21:58 <@asho> *** copyright *** 21:58 <@asho> 此檔案是敘述該套件是以什麼樣的版權發行,比如GPL/BSD/LGPL等,dh_make會製作出一個樣本,直接修改內容便可 21:58 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_11 21:59 <@asho> *** rules *** 21:59 <@asho> 此檔案是一個命令稿(script),藉由 debhelper 中的 tools 來建立 deb,檢視該檔案便可以發現有點類似 Makefile ,rules 中有數個 action target,rules的內容及格式如下: 21:59 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_12 21:59 <@asho> 而最需要注意的是 dh_xxx 這些檔案,只要安裝了 debhelper 之後就可以看到 21:59 <@asho> 這些檔案是建立 deb 過程中的大功臣 21:59 <@asho> 所以在 rules 的 install target 中,都會看到許多 dh 開頭的指令,在建立的過程中 22:00 <@asho> debian目錄下會產生一個暫存目錄(通常為以pkg-name為名稱),在此範例為gv4l,用來當作 '/',下表是列出常用的指令 22:00 <@asho> 1. dh_testdir:檢查目前是否為該 source 的跟目錄 22:00 <@asho> 2. dh_testroot:檢查是否有 root 權限,一般user可以執行fakeroot或編譯時改成 dpkg-buildpackage -rfakeroot 22:00 <@asho> 3. dh_installman:拷貝manual files到debian目錄下的暫存目錄等待打包 22:01 <@asho> 4. dh_compress:壓縮軟體的文件檔 22:01 <@asho> 5. dh_gencontrol:拷貝 control 到 debian/gv4l/DEBIAN 22:01 <@asho> 6. dh_shlibdeps:calculates shared libraries dependencies of the libraries and executables 22:01 -!- bozilla [~www-data@linux4.cc.ntu.edu.tw] has joined #debian.tw 22:01 <@asho> 7.dh_md5sums:產生所有檔案的 md5sum 並拷貝到 debian/gv4l/DEBIAN 22:01 <@asho> 8. dh_installdeb:拷貝 Maintainer scripts 到 debian/gv4l/DEBIAN 22:02 <@asho> 9. dh_install:先在 debian 目錄下建立一個 gv4l.install,此檔案是紀錄編譯好的檔案路徑,之後dh_install會由gv4l.install的內容拷貝到適當的位置並打包成deb 22:02 <@asho> 還有許多dh_install*開頭的指令,用途都稍微不同,可以自行查閱 manual 22:02 <@asho> 除了上述命令之外,其餘指令可以自行查manual,而補充一點的是目前的 stable(woody)中的debhelper-4.0並不使用 dh_install 22:02 <@asho> 而是用 dh_movefiles,testing/unstable的debhelper-4.1以上都改用 dh_install了,所以在製作woody的backport時要特別注意這兩者的差異 22:03 <@asho> *** 其他檔案 *** 22:03 <@asho> 在 debian 目錄下除了上面所介紹的檔案之外,還有一些附加檔,這些檔案可有可無,我們還是看一下。 22:03 <@asho> 1. README.Debian:Maintainer對Debian系統編譯的README檔,通常是描述編譯的情況或額外的修正皆在此檔案,與原軟體的README有所出入。 22:03 <@asho> 2. conffiles.ex:是否記得升級一些軟體時,會詢問是否要復蓋或保留設定檔呢?conffiles.ex就是這個功能,只要將更新的設定檔或其他一行一個檔案寫在 conffiles.ex就可以了,以下表示未來升級 gv4l 的同時,會詢問是否要復蓋 gv4l.conf 這個設定檔 22:03 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_13 22:03 <@asho> # cron.d.ex:如果該軟體需要搭配 cron 的話,可以在這個檔案中加入 cron job,格式與編寫 cron 檔是一樣的 22:03 -!- bozilla [~www-data@linux4.cc.ntu.edu.tw] has left #debian.tw [bozilla] 22:04 <@asho> 4. docs:如果要加入額外的說明檔,請在此檔案中一行一行的加入,並透過 dh_installdocs 進行安裝,注意一下檔案的路經,其跟目錄以該 source code 的 Top Level開始 22:04 <@asho> 5. init.d.ex:如果該套件是一個 daemon,那請將 init script 改成此檔名 22:04 <@asho> 6. menu.ex:Debian上的Window Manager都會另外設計一個軟體選單,但軟體本身必須要提供 menu 檔案並透過 update-menus 產生該軟體選單 22:04 <@asho> menu的格式可以參考 http://moto.debian.org.tw/viewtopic.php?t=1896 22:04 <@asho> 7. postinst.ex/postrm.ex/preinst.ex/prerm.ex:Maintainer scripts,安裝,移除套件後的後續或前續動作可以寫在這邊,比如我們移除或安裝一個 daemon 的軟體之前,要先停止該 daemon,而這個動作應該是套件管理程式要自動處理,所以我們必須寫好停止該 daemon 的動作在 preinst.ex 之中,更多的資訊可以在 debian-policy 這個套件之中 22:05 <@asho> *** 再來一次 *** 22:05 <@asho> 閱讀了上面所寫的資料之後,想必對 Debian 的套件包裝有一定的了解,所以我們重來一次完整的步驟,把上面的設定檔仔細調校,準備 submit 吧...:-D 22:06 <@asho> changelog 22:06 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_14 22:06 <@asho> control 22:06 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_15 22:06 <@asho> copyright 22:06 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_16 22:06 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_17 22:07 <@asho> ** checkinstall ** 22:07 <@asho> 看了上面的方法之後,是否有點頭昏眼花呢?不管結果是眼花撩亂或是耳聰目明,或許會自問:『只是想本機使用而不管維護或給別人使用的話,是否有什麼更簡單的辦法?』,有的,就是本節要介紹的:checkinstall。 22:07 <@asho> checkinstall這套軟體的功能是方便我們製作出套件 22:07 <@asho> 比如 Redhat:rpm,Debian:deb,Slackware:tgz 22:08 <@asho> 只要軟體的source code有Makefile的情況下,checkinstall就能夠建立不同系統的二進位元檔,也就是rpm/deb/tgz等。 22:08 <@asho> Testing/Unstable的朋友可以直接用apt-get install checkinstall來安裝 22:08 <@asho> stable目前並沒有納入checkinstall,如要安裝可以抓回Testing中的sourc 22:08 <@asho> 然後依照 "with debian dir" 這一節來進行來製作deb。 22:08 <@asho> *** 流程 *** 22:08 <@asho> 一般編譯軟體的過程大致是三大步驟: 22:09 <@asho> 1. ./configure 22:09 <@asho> 2. make 22:09 <@asho> 3. make install 22:09 <@asho> 那checkinstall要怎麼跟以上做對應或是有什麼相似的地方呢? 22:09 <@asho> 我們將上面的方法改寫一下,就變成了checkinstall的使用步驟了... 22:09 <@asho> 1. ./configure 22:09 <@asho> 2. make 22:10 <@asho> 3. checkinstall 22:10 <@asho> 應該看的出來吧,只要將最後的make install改成checkinstall就可以了,因為checkinstall會依著Makefile進行追蹤,以紀錄檔案的位置,最後會詢問要產生那一種的二進位元檔。 22:10 <@asho> *** 範例 *** 22:10 <@asho> 我們就拿之前所用的 gv4l 來實作吧 22:10 <@asho> 同樣地,我們採取傳統編譯軟體的方式: 22:10 <@asho> 1. ./configure 22:10 <@asho> 2. make 22:10 <@asho> 到了最後一步,我們執行 checkinstall 22:11 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_18 22:11 -!- informer_ [~chatzilla@61-229-218-73.HINET-IP.hinet.net] has quit [ChatZilla 0.8.34 [Mozilla rv:1.5a/0]] 22:11 <@asho> 這個畫面是詢問是否要建立該軟體的文件備份,由於一般軟體在Makefile中就會指定好文件的位置,我們無須再建立另一份新的,所以這邊我們選 'n' 22:12 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_19 22:12 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_20 22:12 <@asho> 最後當然是直接選 'D'摟,因為我們的系統是 Debian...:-) 22:13 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_21 22:13 <@asho> 上圖可以增加所要修改的資訊,比如我選'0'來更改 Maintainer 的 E-Mail,修改好相關資訊之後,直接按下'enter'。 22:13 <@asho> http://gallery.debian.org.tw/IRCConf_20030913/irc_pic_22 22:13 <@asho> 這樣就完成了 gv4l 的deb打包以及安裝了,透過 checkinstall,便能將繁雜的 dh_make + 修改 rules/changelog/control 等步驟都省下來了,是不是很讚呢...:-) 22:13 <@asho> 如果有興趣更深入了解checkinstall,可以自行執行:checkinstall -h 22:14 <@asho> 乎...終於結束了.... 22:14 <@asho> 以上就是deb製作的基本認識與概念 22:15 <@asho> 後來的 maintain package部份,可以善用 debchange來維護該套件 22:16 <@asho> 以上過程的部份講解的不好 22:16 -!- mode/#debian.tw [-m] by jesse_ 22:16 <@asho> 還請各位包涵並指正阿信...讓我有在學習的機會 22:16 <@asho> 謝謝各位.... 22:16 <@asho> 下台一鞠躬 :-D 22:16 < kanru> 啪啪..啪啪.啪.啪.啪... 22:16 <@jesse_> 我有問題! 22:16 <@chihchun> 賀 22:16 <@chihchun> 我回來了 22:16 <@asho> jesse_: ><....請說... 22:16 < BBNS> asho:辛苦囉:) 22:16 < louie> 精采 22:17 <@chihchun> AndrewLee! 積單尼的 email 是甚麼 22:17 <@asho> chihchun:偷跑出去@@ 22:17 < pwchi> 啪啪啪啪 22:17 < flyhermit> 辛苦了 22:17 < kanru> 好阿~!! 22:17 <@jesse_> asho: version number 中有時會有 ":" 有什麼特別的意思嗎? 22:17 <@chihchun> asho: sorry, 剛剛在路上看到可愛美眉忘了時間 22:17 <@chihchun> jesse_: good question 22:17 <@asho> jesse_:等一下窩...頭昏昏的... 22:17 < pwchi> 記得存檔 post 到 網站阿!:) 22:17 <@chihchun> pwchi: sure, 包含現在的討論 22:18 < pwchi> chihchun: good job! 22:18 < flyhermit> 請問一下會post在哪呢? (其實我也有存耶) 22:18 <@asho> jesse_:在那個部份呢? 22:18 <@jesse_> asho: version number 22:18 < tumii> 辛苦了 22:18 <@jesse_> 一下好像找不到例子.. :P 22:19 <@asho> jesse_:能否舉例子說明...小弟不太懂呢...是有些package以:嗎? 22:19 < paulliu> 積丹尼?? jidanni@jidanni.org 吧 22:19 <@jesse_> chihchun: 幫忙舉個例子吧? 22:19 < paulliu> 他的網頁也在那 22:20 <@jesse_> 有了! 22:20 <@jesse_> asho: http://packages.debian.org/cgi-bin/search_packages.pl?keywords=gcc&searchon=names&subword=1&version=unstable&release=all 22:20 <@asho> jesse_:糟糕...是這種 gcc 3:3.3-1 22:20 <@jesse_> asho: 是的 22:21 <@asho> hmm...老實說...我不太清楚...甚至是漏掉了...不好意思,能請知道的朋友回答嗎? 22:22 -!- bozilla [~www-data@linux4.cc.ntu.edu.tw] has joined #debian.tw 22:22 < AndrewLee> http://bugs.debian.org/cgi-bin/pkgreport.cgi?which=submitter&data=jidanni%40jidanni.org&archive=no 22:22 -bozilla:#debian.tw- 150: http://bugs.debian.org/cgi-bin/pkgreport.cgi?which=submitter&data=jidanni%40jidanni.org&archive=no from AndrewLee 22:23 <@chihchun> 150:|恭喜積丹尼榮登 bug report 王寶座 22:23 -bozilla:#debian.tw- titled item 150 22:24 < AndrewLee> http://www.jidanni.org/comp/bugs.html 22:24 -bozilla:#debian.tw- 151: http://www.jidanni.org/comp/bugs.html from AndrewLee 22:24 < tumii> 據說今天晚上有播出他的訪問... 22:24 < tumii> http://www.settv.net/taiwan/twd013/sat920909.htm 22:24 -bozilla:#debian.tw- 152: http://www.settv.net/taiwan/twd013/sat920909.htm from tumii 22:24 <@chihchun> 150:http://www.jidanni.org/comp/bugs.html 22:24 -bozilla:#debian.tw- commented item 150 22:24 <@asho> jesse_:查詢到了... 22:24 < tumii> 半夜兩點還會播一次...三立台灣台 22:25 <@chihchun> 152:|電火條機密檔案 用電火條做地圖 22:25 -bozilla:#debian.tw- titled item 152 22:25 <@jesse_> asho: / 22:25 <@jesse_> asho: ? 22:26 <@asho> jesse_: hihi... 我有查詢到該意義,現在正想怎麼解釋 22:27 * chihchun 洗耳恭聽 22:27 -!- kanru [~kanru@61-231-216-71.HINET-IP.hinet.net] has quit [BitchX: the cootiless client] 22:27 <@asho> hmm...我試著說說看 22:28 <@asho> 這個冒號代表著該軟體是第幾個 "世代"... 22:28 <@asho> 比如說,我們看一下testing中的gcc 22:28 <@asho> 他的版本編號是 3:3.3-1 22:28 <@chihchun> asho: 有 reference url ? 22:29 <@asho> 第一個3是代表 minor version ,也就是第三版的gcc 22:29 <@asho> maybe can check up the debian-policy... 22:29 < tumii> 152: 據說今天晚上有播出他的訪問... 22:29 -bozilla:#debian.tw- commented item 152 22:30 <@asho> 然後第二個3.3就是指upstream的版本 22:30 < tumii> 152: 半夜兩點還會播一次...三立台灣台 22:30 -bozilla:#debian.tw- commented item 152 22:30 <@asho> 接下來看一下 gcc-3.3這個package 22:30 <@asho> 他的版本是 1:3.3.1 22:31 <@asho> 1就是gcc3的第一代...或稱為 epoch 1 22:32 <@asho> 我找一下 reference 22:32 -!- cserustic [~chatzilla@218-172-162-222.HINET-IP.hinet.net] has quit [] 22:33 <@asho> http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version 22:33 -bozilla:#debian.tw- 153: http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version from asho 22:33 -!- cschiu [James@dsnspc153.csie.nctu.edu.tw] has quit [] 22:34 <@jesse_> err.... 22:34 <@jesse_> 好像應該先來感謝一下 asho 22:35 <@jesse_> asho: 多謝啦!! 22:35 < pwchi> asho: 讚! 22:35 <@asho> jesse_: 先謝過...講不清楚本應受罰,以免誤導大家 22:35 <@chihchun> asho: 讚 22:35 < BBNS> asho: 做的好:) 22:35 < BBNS> asho: 有DD的風範 :D 22:35 <@asho> chihchun pwchi jesse_ BBNS: thanks guys 22:36 < louie> 感溫啦 22:36 <@jesse_> asho: 好像有點看懂了... 22:36 * AndrewLee 要再去跟 2.4.22 + ck2 戰鬥了 22:36 <@asho> louie: louie!!!!! 22:36 < flyhermit> asho: 讚 22:36 -!- mode/#debian.tw [+ooo csardas tumii AndrewLee] by jesse_ 22:36 -!- mode/#debian.tw [+oo AceLan BBNS] by jesse_ 22:36 <@AndrewLee> asho: Thank you. 22:36 -!- mode/#debian.tw [+o cnoize2] by jesse_ 22:36 -!- AndrewLee [~andrew@u50-250.u203-204.giga.net.tw] has quit [leaving] 22:37 <@asho> flyhermit: thanks 22:37 < pwchi> 一個一個說,不如大家要起立鼓掌吧....:D 22:37 <@jesse_> :D 22:37 <@asho> AndrewLee: you're welcome 22:37 < pwchi> asho: 可惜看不到。 22:37 * louie 起立鼓掌 22:37 <@asho> pwchi:小弟會害羞...@@ 22:38 * BBNS YOYO ASHO !! ㄟ( ̄▽ ̄)ㄟ~(? ̄▽ ̄) !! ASHO YOYO 22:38 < pwchi> 哇,一時之間擠滿上萬人的會議室,頓時掌聲雷動阿!..pa..pa..pa..... 22:38 <@asho> 壩鬥夭...要去吃飯了,謝謝各位今天的朋場...^_^*** 22:39 <@chihchun> 還沒吃飯呀 @_@ 22:39 < sbc_> 真了不起 22:39 <@jesse_> asho: 感謝感謝!! 22:39 < sbc_> 真了不起! 22:39 <@asho> 先下去吃飯了,各位晚安...:-D 22:39 -!- asho [~asho@61-231-241-103.HINET-IP.hinet.net] has quit [Client exiting] 22:40 < pwchi> 散會啦. 22:40 <@BBNS> 真的是神龍見頭不見尾 ~