{{{ #!html
Deb檔打包工作
}}} [[PageOutline]] = 參考一 : Debian 無痛起步法- 自己動手製作.deb 檔 = * [http://people.debian.org.tw/~moto/debian/DebianLessPain/Debian-Install-Guide-12.html Debian 無痛起步法( 線上最新版): 自己動手製作.deb 檔] * 用google 搜尋 "deb 製作" 最直接的連結為上面的內容,然而無痛的結果應該是"看完還是不會做"吧!(個人感覺) = 參考二: 用Open Source工具開發軟體- 套件包裝製作 = * [http://www.study-area.org/tips/opentools/opentools/x1425.html 用Open Source工具開發軟體:套件包裝製作] * 這篇寫的比較詳細,可以參考 = 參考三: 用Jazz的Hadoop打包方式 = * [http://trac.nchc.org.tw/cloud/wiki/jazz/Hadoop_deb Hadoop_deb製作] * 這篇是hadoop的deb打包過程,不過有些細節沒有寫到,因此來補完。 = 前言 = * 要學習如何包裝nutch 的 deb檔 * 然而目前大部分找到的說明是適用於 c code等要configure , make , make install 的專案,才會很簡單的用以下方法來完成製作deb * 目錄名稱如 '''pkgname-version''' ,例: hadoop-0.19 * 在source code內執行'''dh_make''' * 修改 新產生debian資料夾內的設定檔 * 執行'''dpkg-buildpackage -rfakeroot''' * 不過hadoop 與 nutch都是java code,沒有make or configure檔,因此試過上面的方法會遇到錯誤 * 因此此篇適合用在:打包已經compiler好的可執行檔,並搭配設定好的配置檔來做簡便安裝用途者 = 步驟 = == 製作deb打包設定檔 == {{{ $ mkdir -p ~/test/hadoop-0.19.1/debian $ cd ~/test/hadoop-0.19.1/debian }}} == 編輯檔案 == * 這些與dh_make產生出來的檔案差不多,就不討論了 || changelog || || copyright || || compat || || control || || rules || * 以下檔案就把內容列出 === hadoop.install === {{{ #!sh conf/* etc/hadoop debian/conf/* etc/hadoop bin opt/hadoop c++ opt/hadoop contrib opt/hadoop lib opt/hadoop libhdfs opt/hadoop librecordio opt/hadoop webapps opt/hadoop *.jar opt/hadoop }}} === hadoop.prerm === {{{ #!sh #!/bin/sh su -c /opt/hadoop/bin/stop-all.sh hdfsadm - }}} === hadoop-doc.install === {{{ #!sh docs/* usr/share/doc/hadoop }}} === hadoop.links === {{{ #!sh etc/hadoop opt/hadoop/conf usr/share/doc/hadoop opt/hadoop/docs var/log/hadoop opt/hadoop/logs }}} === hadoop-src.install === {{{ #!sh src opt/hadoop *.xml opt/hadoop }}} === hadoop-doc.links === {{{ #!sh usr/share/doc/hadoop opt/hadoop/docs }}} === hadoop.postinst === {{{ #!sh #!/bin/sh echo "$1" if [ "$1" != configure ] then exit 0 fi setup_hdfsadm_user() { if ! getent passwd hdfsadm >/dev/null; then useradd hdfsadm mkdir -p /home/hdfsadm/.ssh mkdir -p /var/log/hadoop ssh-keygen -t rsa -q -f /home/hdfsadm/.ssh/id_rsa -N "" cp /home/hdfsadm/.ssh/id_rsa.pub /home/hdfsadm/.ssh/authorized_keys chown hdfsadm:hdfsadm /var/log/hadoop chown -R hdfsadm:hdfsadm /home/hdfsadm/.ssh chown -R hdfsadm:hdfsadm /home/hdfsadm su -c "/opt/hadoop/bin/hadoop namenode -format" hdfsadm - su -c /opt/hadoop/bin/start-all.sh hdfsadm - echo "Please check via browsing following URLs:" echo "(1) http://localhost:50030 for Hadoop Map/Reduce Administration." echo "(2) http://localhost:50060 for Hadoop Task Tracker status" echo "(3) http://localhost:50070 for Hadoop Distributed File System status" fi } setup_hdfsadm_user }}} === hadoop.docs === {{{ #!sh CHANGES.txt LICENSE.txt NOTICE.txt README.txt }}} === hadoop.postrm === {{{ #!sh #!/bin/sh echo "$1" if [ "$1" != remove ] then exit 0 fi setup_hdfsadm_user() { if ! getent passwd hdfsadm >/dev/null; then echo "no account found: 'hdfsadm'." else userdel hdfsadm rm -rf /home/hdfsadm rm -rf /var/log/hadoop rm -rf /tmp/hadoop-hdfsadm* rm -rf /tmp/hsperfdata_* fi } setup_hdfsadm_user }}} === 加入目錄 conf === * 用來放編輯好的Hadoop設定檔,而此設定檔與hadoop有關,就不再贅述 == 編輯一個Makefile == {{{ VERSION = 0.19.1 all: help deb: @dpkg-buildpackage -rfakeroot -aamd64 @dpkg-buildpackage -rfakeroot -ai386 clean: @debian/rules clean source: @wget http://ftp.twaren.net/Unix/Web/apache/hadoop/core/hadoop-${VERSION}/hadoop-${VERSION}.tar.gz @tar zxvf hadoop-${VERSION}.tar.gz -C .. @rm conf/hadoop-env.sh @rm conf/hadoop-site.xml @chmod a+x `find . -name "configure"` update: @scp ../hadoop*_amd64.deb www.classcloud.org:/var/www/hadoop/dists/unstable/main/binary-amd64/. @scp ../hadoop*_i386.deb www.classcloud.org:/var/www/hadoop/dists/unstable/main/binary-i386/. @ssh www.classcloud.org /var/www/hadoop/update-repository.sh help: @echo "Usage:" @echo "make deb - Build Debian Package." @echo "make clean - Clean up Debian Package temparate files." @echo "make source - download source tarball from hadoop mirror site." @echo "make update - upload deb packages to classcloud.org." @echo "make help - show Makefile options." @echo " " @echo "Example:" @echo "$$ make source; make deb; make clean" }}} == 執行makefile的內容 == {{{ $ make source; make deb; make clean }}}