本文出自:Aubrey Li
下面用一個簡單的程序例子,來講解如何製作deb包。首先你需要一個deb包管理的系統,debian, ubuntu等。
這裡我用的是nexenta. 這些系統默認裝好了deb包製作需要的工具,如dpkg-dev, devscripts等。如果沒有,你也可以在製作過程中用apt-get install <packagename>來手動安裝。
1. 創建一個簡單的源碼包
aubrey@aubrey-nexenta:~/deb$ ls -l hellodeb/ total 2 -rw-r--r-- 1 aubrey staff 203 Feb 16 12:50 Makefile -rw-r--r-- 1 aubrey staff 73 Feb 16 12:46 hellodeb.c |
PROG=hellodeb CC=gcc BINDIR=/usr/bin INSTALL=cp $(PROG): hellodeb.c $(CC) -o $(PROG) hellodeb.c clean: rm -rf $(PROG) install: $(INSTALL) $(PROG) $(BINDIR) uninstall: rm -rf $(BINDIR)/$(PROG) |
aubrey@aubrey-nexenta:~/deb/hellodeb$ gpg --list-keys /export/home/aubrey/.gnupg/pubring.gpg -------------------------------------- pub 1024D/7F8F1E57 2008-01-29 uid Aubrey Li <aubreylee@gmail.com> sub 2048g/6AF6581E 2008-01-29 |
aubrey@aubrey-nexenta:~/deb$ ls hellodeb aubrey@aubrey-nexenta:~/deb$ mv hellodeb/ hellodeb-1.0 aubrey@aubrey-nexenta:~/deb$ ls hellodeb-1.0 |
aubrey@aubrey-nexenta:~/deb$ export DEBEMAIL="aubreylee@gmail.com" aubrey@aubrey-nexenta:~/deb$ export DEBFULLNAME="Aubrey Li" |
5. 現在可以對源碼包進行deb化了。
aubrey@aubrey-nexenta:~/deb/hellodeb-1.0$ dh_make Type of package: single binary, multiple binary, library, kernel module or cdbs? [s/m/l/k/b] s Maintainer name : Aubrey Li Email-Address : aubreylee@gmail.com Date : Sat, 16 Feb 2008 13:19:46 +0800 Package Name : hellodeb Version : 1.0 License : blank Type of Package : Single Hit <enter> to confirm: Done. Please edit the files in the debian/ subdirectory now. You should also check that the hellodeb Makefiles install into $DESTDIR and not in / . aubrey@aubrey-nexenta:~/deb/hellodeb-1.0$ |
還有兩個重要的提示:
- Please edit the files in the debian/ subdirectory now.
- You should also check that the hellodeb Makefiles install into $DESTDIR and not in / .
PROG=hellodeb CC=gcc BINDIR=$(DESTDIR)/usr/bin INSTALL=cp $(PROG): hellodeb.c $(CC) -o $(PROG) hellodeb.c clean: rm -rf $(PROG) install: mkdir -p $(BINDIR) $(INSTALL) $(PROG) $(BINDIR) uninstall: rm -rf $(BINDIR)/$(PROG) |
第二個修改是因為修改後的BINDIR變量的目錄並不存在,所以需要手動創建。
7. 然後我們要看一下debian這個生成的目錄了
aubrey@aubrey-nexenta:~/deb/hellodeb-1.0/debian$ ls README.Debian control docs hellodeb-default.ex manpage.sgml.ex postrm.ex watch.ex changelog copyright emacsen-install.ex hellodeb.doc-base.EX manpage.xml.ex preinst.ex compat cron.d.ex emacsen-remove.ex init.d.ex menu.ex prerm.ex conffiles.ex dirs emacsen-startup.ex manpage.1.ex postinst.ex rules |
- control文件: 聲明很多重要的變量,dpkg通過這些變量來管理軟件包
- copyright文件: 不用說,版權信息,相當重要
- changelog文件: 這是一個必需文件,包含軟件版本號,修訂號,發行版和優先級。
- rules文件: 這實際上是另外一個Makefile腳本,用來給dpkg-buildpackage用的.
- compat文件: 這個文件留著是有用的
- dirs文件:這個文件指出我們需要的但是在缺省情況下不會自動創建的目錄
aubrey@aubrey-nexenta:~/deb/hellodeb-1.0/debian$ ls changelog compat control copyright dirs rules |
8. 好了,所有的準備工作都就緒了。我們可以build軟件包。dpkg-buildpackage有一項dh_testroot的檢查,你必須用root來運行這個命令,或者用fakeroot(需要安裝fakeroot包)
aubrey@aubrey-nexenta:~/deb/hellodeb-1.0$ dpkg-buildpackage -rfakeroot -sa |
aubrey@aubrey-nexenta:~/deb/hellodeb-1.0$ sudo -s Password: root@aubrey-nexenta:~/deb/hellodeb-1.0# dpkg-buildpackage -sa |
9. 創建完成後,在該目錄的上級目錄應該得到如下幾個文件:
- hellodeb_1.0-1.tar.gz: 源碼包
- hellodeb_1.0-1.dsc: 源代碼總結,根據control文件創建,包含GPG簽名
- hellodeb_1.0-1_solaris-i386.deb: 完整的二進制包,可用dpkg管理
- hellodeb_1.0-1_solaris-i386.changes: 供dput使用
root@aubrey-nexenta:~/deb# dpkg-deb -c hellodeb_1.0-1_solaris-i386.deb drwxr-xr-x root/root 0 2008-02-16 13:56:12 ./ drwxr-xr-x root/root 0 2008-02-16 13:56:10 ./usr/ drwxr-xr-x root/root 0 2008-02-16 13:56:10 ./usr/share/ drwxr-xr-x root/root 0 2008-02-16 13:56:10 ./usr/share/doc/ drwxr-xr-x root/root 0 2008-02-16 13:56:12 ./usr/share/doc/hellodeb/ -rw-r--r-- root/root 246 2008-02-16 13:19:48 ./usr/share/doc/hellodeb/copyright -rw-r--r-- root/root 191 2008-02-16 13:19:48 ./usr/share/doc/hellodeb/changelog.Debian.gz drwxr-xr-x root/root 0 2008-02-16 13:56:11 ./usr/bin/ -rwxr-xr-x root/root 3436 2008-02-16 13:56:11 ./usr/bin/hellodeb root@aubrey-nexenta:~/deb# dpkg -i hellodeb_1.0-1_solaris-i386.deb Selecting previously deselected package hellodeb. (Reading database ... 31630 files and directories currently installed.) Unpacking hellodeb (from hellodeb_1.0-1_solaris-i386.deb) ... Setting up hellodeb (1.0-1) ... root@aubrey-nexenta:~/deb# which hellodeb /usr/bin/hellodeb root@aubrey-nexenta:~/deb# hellodeb hello deb root@aubrey-nexenta:~/deb# dpkg -r hellodeb (Reading database ... 31632 files and directories currently installed.) Removing hellodeb ... root@aubrey-nexenta:~/deb# which hellodeb root@aubrey-nexenta:~/deb# |
全站熱搜
留言列表