[[PageOutline]] = hadoop4win 開發筆記 = = 0.1.4 版 = * 0.1.4 新版想加入的功能 * 更新 Hadoop、HBase 版本 - 考慮置放一個檔案於網站,以免網路安裝版本一段時間後便無法正常運作。 * NSIS 安裝檔 * [文件] [http://omega.idv.tw/nsis/Contents.html NSIS 繁體中文版說明文件] * 在 Debian / Ubuntu 系列有 nsis 的套件,只是需要學習怎麼使用。 {{{ ~$ sudo apt-get install nsis }}} == 2010-12-21 == * 學習使用 EclipseNSIS * [限制] 目前 EclipseNSIS 並不支援 Linux - [http://sourceforge.net/tracker/?func=detail&aid=1792092&group_id=116143&atid=673852 開發者覺得工程浩大,暫時不會改]。 * [結論] 光安裝就有點麻煩,得先裝 Eclipse 3.5 sr1 版本,然後還有 NSIS 、EclipseNSIS Plugin 要裝。若只是要產生安裝檔,似乎有點工程太大。加上仔細看了一下介紹,似乎都要寫 NSIS Script 腳本,EclipseNSIS 只是多了 !InstallOption 的介面設計工具罷了。所以還是改用指令好了~ * 在 Ubuntu 10.04 底下測試 NSIS 指令 - 其實只要找對範例程式,也不難寫啦~drbl-winroll 應該是用 nsExec 寫的。 {{{ ~$ sudo apt-get install nsis ~$ cp /usr/share/doc/nsis/Examples/nsExec/test.nsi . ~$ makensis test.nsi ... 略 ... Processed 1 file, writing output: Adding plug-ins initializing function... Done! Processing pages... Done! Removing unused resources... Done! Generating language tables... Done! Output: "nsExec Test.exe" Install: 2 pages (128 bytes), 3 sections (3144 bytes), 46 instructions (1288 bytes), 47 strings (946 bytes), 1 language table (198 bytes). Datablock optimizer saved 8092 bytes (~13.4%). Using zlib compression. EXE header size: 48128 / 50688 bytes Install code: 987 / 6032 bytes Install data: 4046 / 27660 bytes CRC (0x93CB145C): 4 / 4 bytes Total size: 53165 / 84384 bytes (63.0%) }}} * 如果要設計網路安裝版,倒也可以用 [http://nsis.sourceforge.net/Builtin_NSISdl_plug-in NSISdl] 這個 plugin 來開發。簡單寫一個測試範例,還算蠻簡單的。(注意:底下用 \$ 是為了配合 cat 語法,若直接貼程式碼請拿掉!) {{{ ~$ cat > NSISdl.nsi << EOF Name "NSISdl Plugin Test" OutFile "NSISdl.exe" ShowInstDetails show Section "Download Hadoop" NSISdl::download /TIMEOUT=30000 http://ftp.twaren.net/Unix/Web/apache//hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz hadoop-0.20.2.tar.gz Pop \$0 StrCmp \$0 "success" +3 MessageBox MB_OK "Download failed: \$0" Quit SectionEnd EOF ~$ makensis NSISdl.nsi }}} * 產生出來的 NSISdl.exe 在 Windows 7 上執行的結果如下圖: * [[Image(10-12-21_NSISdl_complete.png)]] * [[Image(10-12-21_NSISdl_result.png)]] * [文件] 多重使用者身份問題:README.!MultiUser.gz 這個文件說明了 NSIS 幫忙判斷使用者是否具備 Admin 或 !PowerUser 權限的寫法。而 README.!StartMenu 則說明了怎麼產生在開始選單的目錄。 {{{ ~$ zcat /usr/share/doc/nsis/README.MultiUser.gz | less ~$ less /usr/share/doc/nsis/README.StartMenu }}} * 學習讀取 ini 設定檔 - [參考] /usr/share/doc/nsis/Examples/{!FileFunc.nsi.gz, !FileFunc.ini} * 使用 [http://omega.idv.tw/nsis/Section4.9.html#4.9.2.10 ReadINIStr] 這個語法,以 !FileFunc.nsi 為例。 * 首先,第一步是找到 INI 檔案的路徑。第 17 行宣告 INI 這個變數。第 723~727 行,設定 INI 這個變數,並且讓它的內容等於編譯時提供的 !FileFunc.ini。 * 流程上,透過 [http://omega.idv.tw/nsis/Section4.7.html#4.7.2.1.2 .onInit] 這個函數宣告初始化流程要做的事情就是把 !FileFunc.ini 拷貝到 $PLUGINSDIR 目錄中的暫存檔 $INI。 * 用 [http://omega.idv.tw/nsis/Section4.9.html#4.9.7.3 InitPluginsDir] 這個語法設定 $PLUGINSDIR 目錄變數 * 用 [http://omega.idv.tw/nsis/Section4.9.html#4.9.3.10 GetTempFileName] 這個語法會在 $PLUGINSDIR 目錄產生一個暫存檔,並回傳檔名存放於 $INI 中。 * 用 [http://omega.idv.tw/nsis/Section4.9.html#4.9.1.5 File] 把 !FileFunc.ini 拷貝存放到 $INI 的路徑去。 {{{ GetTempFileName 使用者變數(輸出) [暫存檔路徑] }}} {{{ File [/nonfatal] [/a] ([/r] [/x 檔案|通配符 [...]] (檔案|通配符) [...] | /oname=輸出路徑\檔案名稱 輸入路徑\檔案名稱) }}} {{{ 17 Var INI 723 Function .onInit 724 InitPluginsDir 725 GetTempFileName $INI $PLUGINSDIR 726 File /oname=$INI "FileFunc.ini" 727 FunctionEnd }}} * 接著,第 19 行宣告 STATE 變數,並於第 96 行使用 [http://omega.idv.tw/nsis/Section4.9.html#4.9.2.10 ReadINIStr] 從 $INI 的 "![Field 1]" 這個區段(section)的某一項(entry) {{{ ReadINIStr 用戶變量(輸出) INI檔案 區段 項 ReadINIStr user_var(output) ini_filename section_name entry_name }}} * 在 !FileFunc.ini 中就定義了 "[Field 1]" 這一個區段(section),並定義了 State 這一項(entry)。 {{{ 5 [Field 1] 8 State=" 1. Locate" }}} {{{ 19 Var STATE 96 ReadINIStr $STATE $INI "Field 1" "State" }}} * [http://omega.idv.tw/nsis/Section4.8.html#4.8.1.45 4.8.1.45 XPStyle] 預設為 off,可用的設定值為 on 或 off。設定安裝程式與反安裝程式是否使用 XP 外觀樣式。 == 2010-12-28 == * Cygwin setup.exe 的參數列表:用 wine 跑 "setup.exe /?" 的結果 {{{ 2010/12/28 12:30:20 Starting cygwin install, version 2.738 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/setup.rc) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/last-cache) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/last-action) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/net-method) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/net-proxy-host) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/net-proxy-port) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/last-mirror) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/extrakeys) failed 2 No such file or directory 2010/12/28 12:30:20 io_stream_cygfile: fopen(/etc/setup/chooser_window_settings) failed 2 No such file or directory 2010/12/28 12:30:20 Current Directory: Z:\home\jazz\work 2010/12/28 12:30:20 Command Line Options: -D --download Download from internet -L --local-install Install from local directory -s --site Download site -O --only-site Ignore all sites except for -s -R --root Root installation directory -P --packages Specify packages to install -C --categories Specify entire categories to install -p --proxy HTTP/FTP proxy (host:port) -q --quiet-mode Unattended setup mode -M --package-manager Semi-attended chooser-only mode -h --help print help -l --local-package-dir Local package directory -r --no-replaceonreboot Disable replacing in-use files on next reboot. -X --no-verify Don't verify setup.ini signatures -n --no-shortcuts Disable creation of desktop and start menu shortcuts -N --no-startmenu Disable creation of start menu shortcut -d --no-desktop Disable creation of desktop shortcut -K --pubkey Path to extra public key file (gpg format) -S --sexpr-pubkey Extra public key in s-expr format -u --untrusted-keys Use untrusted keys from last-extrakeys -U --keep-untrusted-keys Use untrusted keys and retain all -A --disable-buggy-antivirus Disable known or suspected buggy anti virus software packages during execution. Ending cygwin install 2010/12/28 12:30:20 AddAccessAllowedAce(, owner) failed: 1337 2010/12/28 12:30:20 AddAccessAllowedAce(, group) failed: 1337 2010/12/28 12:30:20 AddAccessAllowedAce(, everyone) failed: 1337 2010/12/28 12:30:20 AddAccessAllowedAce(, owner) failed: 1337 2010/12/28 12:30:20 AddAccessAllowedAce(, group) failed: 1337 2010/12/28 12:30:20 AddAccessAllowedAce(, everyone) failed: 1337 }}} == 2010-10-30 == * [參考] 從 [http://old.nabble.com/Cygwin-setup.exe-via-the-cygwin-shell-td20259653.html Re: Cygwin setup.exe via the cygwin shell] 的討論可以看到一些參考的語法 ([wiki:jazz/10-02-03 2010-02-03]) {{{ setup.exe -d -q -R 'c:\cygwin' -s 'http://mirrors.xmission.com/cygwin/' -l 'c:\cygwin\home\thrall' -P vim,bc }}} * [http://alans.se/blog/2010/hadoop-hbase-cygwin-windows-7-x64/ Hadoop + HBase + Cygwin + Windows 7 x64] ([wiki:jazz/10-10-26 2010-10-26]) * 測試讓 cygwin setup.exe 從 http://ftp.ntu.edu.tw/pub/cygwin/ 下載到 cygwin_mirror 目錄 {{{ REM 純下載 Cygwin Base 分類下的檔案 setup.exe -q -D -O -s http://mirror.mcs.anl.gov/cygwin -C base REM 把 http 開頭的目錄搬到 cygwin_mirror move http* cygwin_mirror REM 用本地目錄 cygwin_mirror 安裝到 c:/hadoop4win setup.exe -q -d -L -l %cd%/cygwin_mirror -R c:/hadoop4win pause }}} = 0.1.5 版 = * 0.1.5 新版想加入的功能 * 整合 Eclipse 開發工具