# QPKG 設定 一個新的 qpkg 專案產生後, 會有幾個比較重要的部分要設定 ## qpkg.cfg * 是一個一堆 key-value 的設定檔 * 有一堆設定, 可以參考 [官方文件](https://edhongcy.gitbooks.io/qdk-qpkg-development-kit/content/qpkg-configuration-file.html) * 重點 : * `QPKG_SERVICE_PROGRAM` 名稱, 要與下面的 [project_name].sh 相同 ( 包含.sh ) * QPKG 預設認定你的 app 介面是一個 web application 介面 * `QPKG_WEBUI` 預設的 web application path * `QPKG_WEB_PORT` 預設的 web application port * `QPKG_DESKTOP_APP` 預設認定用一個新的 broswer 分頁開啟你的 web application * 若是把它設定為 1, 則會用她自己 QTS 的 popup 視窗開啟 * 但此方式是 iframe, 會有 x-frame-options 問題 ## package_routines * 用來設定 安裝 / 移除 的 callback-function * 基本上是個 shell script * 這份文件內, 可以使用一些 QPKG 提供的變數, 可以參考 [官方文件](https://edhongcy.gitbooks.io/qdk-qpkg-development-kit/content/generic-installation-script.html) * 如 `SYS_QPKG_DIR` 是這個 QPKG 被安裝的路徑 * 有 `pkg_post_install`, `pkg_install`, `pkg_post_install` 三個安裝時的 callback * 這三個是一般 shell script 的 function, 可自由使用 `SYS_QPKG_DIR` 等變數 * `PKG_PRE_REMOVE`, `PKG_MAIN_REMOVE`, `PKG_POST_REMOVE` 這三個是移除的時候用的 callback 設定 * 他不是一個 shell script function, 而是一個 shell script 變數 * 內容是一個 string, 安裝時 QPKG 會把這個 string 拿去產生 shell script function * 但是新產生的 function 在執行時無法使用 `SYS_QPKG_DIR` 等官方提供的變數 * 因為是個 string, 所以延伸出很多問題 * 基本概念是把你要執行的 shell 指令寫在指令中 * shell script 的 string 在宣告時, 會先把 `$` 進行一次替變數替換, 若不想被替換, 要加上跳脫字元 `\$` * 基本上 : * 官方變數 及 自訂的 help 變數會直接帶入, 使用 `$` * function 運行中儲存資料的變數, 使用 `\$` * 範例 ```sh DOCKER=$(/sbin/getcfg container-station Install_Path -f ${QPKG_CONF})/bin/system-docker PKG_PRE_REMOVE="{ IMAGE_ID=\$(/bin/cat $SYS_QPKG_DIR/loaded_docker_images) $DOCKER image rm \$IMAGE_ID }" ``` * 在[官方文件](https://edhongcy.gitbooks.io/qdk-qpkg-development-kit/content/package-specific-installation-functions.html)(最下方)有提到這件事, 但其內容應該有一些 render 上的錯誤 * 其他 * 網路上看到的很多範例 (QPKG 包 docker-compose), 其 package_routines 內容都與此份 [官方 nginx 範例](https://github.com/qnap-dev/docker-qdk2/blob/master/example/nginx/package_routines) 一模一樣, 但還不了解其用意為何, 先備註起來 ## shared/[project_name].sh * 是個 shell script * 根據檔案預設的提示, 將 start / stop 的 shell 指令加在適當的位置即可 * 這個檔案吃不到 `SYS_QPKG_DIR` 等系統變數, 所以有些參數要用 getcfg 自己拿 ## shared folder * 你的程式主體放在這, 包含用來啟動的 [project_name].sh * 若有 `X86` 等專用的檔案, 要放在對應的資料夾, 而不是 shared ## icons * 程式 icon, 若 QPKG_NAME Name 為 KdanQPKG, 則需含有 * `KdanQPKG.gif` : App 列表顯示的 icon, 64*64px * `KdanQPKG_80.gif` : App details 顯示的 icon, 80*80px, * `KdanQPKG_gray.gif` : `KdanQPKG.gif` 的 disable 版本, 64*64px * 若沒有這些圖片, 會用預設圖片 * 可在 QDK 路徑下, 找到這三張預設圖片(為隱藏檔案, `.`開頭), 確認尺寸等詳細資訊 * [官方文件](https://edhongcy.gitbooks.io/qdk-qpkg-development-kit/content/qdk-variables.html) 有提到詳細尺寸