{{{ #!html
Deb檔打包工作
}}} [[PageOutline]] = 前言 = * 要學習如何包裝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 === {{{ #!sh #!/usr/bin/make -f export DH_VERBOSE=0 all: install: dh_testdir dh_testroot dh_install -Xlicense.txt dh_installdocs dh_installchangelogs #dh_installexamples dh_compress dh_fixperms dh_installdeb dh_link dh_gencontrol dh_md5sums dh_builddeb clean: dh_clean binary: install build: binary-arch: binary-indep: }}} === control === {{{ #!sh Source: hadoop Section: devel Priority: extra Maintainer: Jazz Yao-Tsung Wang Build-Depends: debhelper (>= 5) Standards-Version: 3.7.2 Package: hadoop Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, sun-java6-jre, sun-java6-bin Suggests: sun-java6-jdk Description: Apache Hadoop Core . Apache Hadoop Core is a software platform that lets one easily write and run applications that process vast amounts of data. . Here's what makes Hadoop especially useful: * Scalable: Hadoop can reliably store and process petabytes. * Economical: It distributes the data and processing across clusters of commonly available computers. These clusters can number into the thousands of nodes. * Efficient: By distributing the data, Hadoop can process it in parallel on the nodes where the data is located. This makes it extremely rapid. * Reliable: Hadoop automatically maintains multiple copies of data and automatically redeploys computing tasks based on failures. . Hadoop implements MapReduce, using the Hadoop Distributed File System (HDFS) MapReduce divides applications into many small blocks of work. HDFS creates multiple replicas of data blocks for reliability, placing them on compute nodes around the cluster. MapReduce can then process the data where it is located. . For more information about Hadoop, please see the Hadoop website. http://hadoop.apache.org/ Package: hadoop-src Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, sun-java6-jdk, ant, gcc, g++, hadoop Description: Apache Hadoop Core ( java source code and examples ) . Apache Hadoop Core is a software platform that lets one easily write and run applications that process vast amounts of data. . This package include the java source code and examples from original tarball. Install this package only when you need to rebuild the jar binary or want to run the 'Word Count' examples of MapReduce. Package: hadoop-doc Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends} Description: Apache Hadoop Core Documents . Apache Hadoop Core is a software platform that lets one easily write and run applications that process vast amounts of data. . This package include the HTML and PDF documents from original tarball. Install this package only when you need these documents. }}} === 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" }}} * 以上檔案做完應該會如附檔 debain-hadoop-pkg.zip == 執行makefile的內容 == {{{ $ make source; make deb; make clean }}} * 之後會在 ~/test 下出現 hadoop_0.19.1-1_amd64.deb 的檔案 = 參考 = * [http://trac.nchc.org.tw/cloud/wiki/jazz/Hadoop_deb Hadoop_deb製作] * 用Jazz的Hadoop打包方式 * 這篇是hadoop的deb打包過程,不過有些細節沒有寫到,因此來補完。 * [http://www.study-area.org/tips/opentools/opentools/x1425.html 用Open Source工具開發軟體:套件包裝製作] * 這篇寫的算詳細,可以參考