fix compile script bug.
[reglxgmr.git] / tools / cmpl / defination / instpkg / instdir.imi
blob6c1355d5f68cd58d425e06573cceb2415457157f
1 # !loadimi
2 ############################################################
3 # source: instpkgdir.imi
4 # author: CottonCandyOwner(CottonCandyOwner@126.com)
5 # date: 2024-04-24
6 ############################################################
7 # note:
8 #       @ func dir
9 #               there are many dirs for a software/application in linux
10 #       system. bin/sbin for executables, lib for .so lib files ...
11 #       it's a 'functional' dir, use 'func' for short.
12 #               these dirs are in different paths in system, or under
13 #       software install dir. in system, it's called SysFunDir, in
14 #       install dir, it's called PkgFuncDir.
15 #       @ install-type & install-dir
16 #               a softare can be installed in different paths, due to
17 #       the different category/storage/using-purpose. by definning 
18 #       different install types, and the corresponding dir, a softeare
19 #       or a program can run on different install paths.
20 #               if a srcpkg is categoried in BZSH, it's a minial system.
21 #       if in DIST, it's installed in dist install area. these two
22 #       kinds of install type can be read only.
23 #       @ proting
24 #               whatever installed on any dirs, a softeare only access
25 #       func dirs in it's install dir. it can be installed on different
26 #       system with different install dir defination, it can be porting
27 #       to different operating system.
28 ############################################################
31 # [statical defination]
32 # @ conception
33
34 # @ INST_TYPE/SOFT_TYPE
35 # @ inst-dir
36 # INST_TYPE_SET
37 # INST_PFX_SET
38 # INST_DIR2TYPE_SET
39 # INST_DIR_RWTYPE_SET
41 # @ func-dir
42 # FUNC_DIR_TYPE_SET
43 # FUNC_DIR_SET
44 # PKG_INST_DIR_EVL
45 # PKG_DIR_SET_EVL
46 # SYS_INST_DIR_EVL
47 # SYS_FUNC_DIR_SET
49 # @ soft-category
50 # SOFT_TYPE_SET/PKG_SWTYPE_DIR_SET
52 # [run-time application orianted interface]
53 # @ sys init (system & session)
54 # input param
55 # system param
56 # session param
58 # @ gen pkg
59 # input param
60 # paths gen
62 # @ inst pkg
63 # input param
64 # paths gen
66 # @ prog running (process)
67 # input param
68 # paths gen
70 # @ dir reg
73 # todo:
74 # @ name-conception-define
75 # @ SYSTEM
76 #   # ROOTFS='$(cd \`dirname $(which ls)\`/..; pwd; cd - 2>/dev/null)'
77 #   # SYS_INST_PATH[]
78 #   # SYS_INST_RW_TYPE[]
79 #   # SYS_<SUBDIR>_PATH(各种sub-dir在系统中的路径)
80 #   # SYS_PKG_SUBDIR_LIST=() # _LIST中包含系统所使用的目录或类型。*添加_TYPE_数组。对一些系统中未使用的类型指定suggest-opt
81 #   # SYS_INST_TYPE_LIST≠()
82 #   # SYS_SOFT_TYPE_LIST=()
83 #   # valid_subdir/valid_softtype/
84 # @ PKG_BUILDING (构建)
85 #   # BUILD_PKG_NAME
86 #     BUILD_PROG_NAME[]
87 #   # BUILD_PKG_TYPE # 这里的type环境变量或可以添加_OPT,或以_TYPE表示为_LIST中的类型,用于其它变量的idx。
88 #     BUILD_PROG_TYPE[]
89 #   # BUILD_INST_TYPE
90 #   # BUILD_OUTPUT_DIR=
91 #   # BUILD_INST_DIR= # 安装目录
92 #   # BUILD_PKG_DIR=
93 # @ INSTALLATION (这里的环境变量由软件包的参数文件进行设置,PKG_PATH[1]和PKG_<SUBDIR>_PATH[1]是实际安装中用到的环境变量)
94 #   # PKG_NAME=
95 #   # PKG_TYPE=
96 #   # PKG_PROG_TYPE[]
97 #     PKG_SUBDIR_LIST=
98 #   # PKG_INST_TYPE=
99 #   # PKG_PATH[1]='${ROOTFS}/${}'
100 #     PKG_<SUBDIR>_PATH[1]
101 # @ PROG_RUNNING
102 # + # PROG_NAME[1]='$(basename $0)'
103 # +   PROG_EXE_NAME[1]='$(basename `readlink -f $0`)'
104 # +   PROG_PKG_NAME[1]='$(cd `dirname $(readlink -f $0)`/../; basename $PWD; cd - > /dev/null)'
105 # + # PROG_PATH[1]='$(dirname `readlink -f $0`)'
106 # +   PROG_EXE_PATH[1]='$(dirname $0)'
107 # +   PROG_PKG_PATH[1]='$(cd `dirname $(readlink -f $0)`/../; pwd; cd - > /dev/null)'
108 # + # PROG_TYPE[1]='$(cd `dirname $(readlink -f $0)`/../../; basename $PWD; cd - > /dev/null)'
109 # +   PROG_PKG_SOFT_TYPE[1]='$(cd `dirname $(readlink -f $0)`/../../; basename $PWD; cd - > /dev/null)'
110 # + # PROG_PKG_INST_TYPE[1]='$(cd `dirname $(readlink -f $0)`/../../../; basename $PWD; cd - > /dev/null)'
111 #   # 
112 #   # PROG_PKG_<SUBDIR>_DIR=
113 #     PROG_SYS_<SUBDIR>_DIR=
114 #   # get_subdir_path/get_prog_name/init_prog_subdir_path/init_prog_vars
115 # @ variable & function
118 # @ path2array:path字符串保存到一个数组中,便于访问各个dir。
119 # @ dbgout_varlist:逐行输出每个参数对应环境变量名称和内容
126 #####################################################
127 # @ conception & envar definition
128 #####################################################
130 [ conception ]
132 # [概念]
133 PKG  # 软件包:带脚本运行功能的自解压压缩包,用于提供软件安装的文件。软件打包后用于系统中的安装。软件包可以不是程序,
134      # 例如只是图片、字体等一些系统资源文件。
135 PROG # 程序:EXECUTABLES,在系统中可运行的文件,用户运行的软件,为APP应用程序,在命令行运行的命令是一种不带gui的CMD程序
136      # 在后台运行提供服务的是SVC服务程序,在内核运行的是DRV驱动程序。PROG=CMD/APP/SVC/DRV。
137 EXE  # 一个程序的exe名称通常是prog名称。只有在busybox这样的程序中,运行程序的文件名是一个链接文件,以prog
138      # 表示运行的链接文件名,以EXE表示实际的程序文件名。以PROG_NAME用于PROG_XXX中name相关的信息。
139 SOFT # 软件:,在系统中运行,为系统或用户提供功能实现的程序及相关文件。一款软件除了可执行程序,还包括一些资源
140      # 文件等数据文件。软件=程序+程序库+数据。
141 # PKG/PROG/SOFT
142          # 相对于PROG,SOFT是一个静态的概念,用于描述和表示软件包。PROG是一个运行时的概念。而PKG是一个压缩文件,
143          # 只有包含了SOFT类型,才表示一个PKG内的程序的类型。
145 CMD # 命令:,在命令行运行的,不带GUI的程序。
146 APP # 应用程序:,相对于系统的程序,为计算机使用者提供功能的软件。
147 SVC # 服务程序:,运行在系统后台的程序,用于提供某种功能。
148 LIB # 程序库:,公用程序库,.so文件。
149 COM/MIDWARE # 组件/中间件:,以较规范的形式提供软件功能接口的程序库。
150 DRV # 设备驱动程序:,内核中运行的程序,包括硬件板级支持包,通用硬件驱动,软件功能驱动程序等。
151     # DRV=BSP+GEN_DRV+SOFT_FUNC_DRV+other_misc_drv。
152 BSP # 板级支持包(硬件设备驱动):,与实际硬件平台相关的驱动程序。实现的是SOC是的外围设备,或者设备ctlr。
153 GEN_DRV # 通用设备驱动程序: ,一些与设备接口相关,但与具体硬件平台无关的设备驱动。像usb设备的驱动程序,
154         # 基于spi的设备驱动程序。这些驱动程序在不同硬件平台不同的总线控制器下,都可以使用。
155 SOFT_FUNC_DRV # 功能驱动程序: ,对应着内核中非硬件的驱动程序。像一些文件系统的驱动程序,加解密功能的驱动程序等。
156 DATA # 通用意义上的数据
157 PARAM_DATA # 参数数据,用于软件/程序的设置。
158 STCDATA/STATIC_DATA # 软件发布、安装后不进行写操作的数据。
159 RES_DATA # 通用的一些静态数据文件,例如font、picture、doc,不同于windows下的资源文件的是,rc-script归为PARAM_DATA。
160 USRDATA # 软件使用者编辑、操作的数据。
164 SOFT_NAME # 软件名称:,一个软件的名称。
165 PKG_NAME # 软件包名称:,软件包名称按照一定格式定义,除了软件名称,还包含软件主版本信息,发行版本信息,硬件平台类型,
166          # 发布日期等。
167 INST_TYPE # 安装类型:,根据不同的软件类型,使用不同的软件安装目录,具有不同的读写属性。
168 SOFT_INNER_SUBDIRS # 软件子目录:,一个软件安装目录下所具有的目录结构,与传统的/usr目录下的目录结构相近,
169                    # 另外增添了一些功能目录。
170 SOFT_TYPE # 软件类型:,根据软件在系统中的用途,分为不同的类型,软件分类存放,一个软件的安装路径为
171           # $INST_PFX/$SOFT_TYPE/$SOFT_NAME。
172 INST_PFX # 安装目录: ,用于某种安装类型的软件安装,包括像/usr这样的目录结构,以及不同SOFT_TYPE对应的目录。
173 SOFT_PATH # 软件安装目录: ,具体某一款软件安装时,使用的目录,等同于$INST_PFX/$SOFT_TYPE/$SOFT_NAME。
175 XXX_SET # 集合,枚举值
176 XXX_LST # 列表,枚举值
177 XXX_FMT # 需要eval重新生成字符串的"格式描述字符串"
180 #####################################################
181 # @ general
182 #####################################################
184 [ system ]
186 MACHINE_ID= # ,主机名称。用于REMOTE安装类型的运行时数据的存储目录名。
189 [ session ]
191 USER_ID= # ,用户名称。用于REMOTE安装类型的运行时数据的存储目录名。
192 HOST_USR_ID="$MACHINE_ID"-"$USER_ID" # ,主机用户名id,用于多系统共用nfs存储时,对主机和用户进行区分。
193                                      # 对于非REMOTE的数据存储目录,该环境变量为字符串"local"。
196 [ process ]
198 # 软件包安装时提供的环境变量
199 PROG_NAME= # 程序名称:EXECUTABLES,在系统中可运行的文件,用户运行的软件,为APP应用程序,在命令行运行的命令是一种不
200      # 带gui的CMD程序在后台运行提供服务的是SVC服务程序,在内核运行的是DRV驱动程序。PROG=CMD/APP/SVC/DRV。
201 EXE_NAME= # 一个程序的exe名称通常是prog名称。只有在busybox这样的程序中,运行程序的文件名是一个链接文件,以prog
202      # 表示运行的链接文件名,以EXE表示实际的程序文件名。以PROG_NAME用于PROG_XXX中name相关的信息。
203 SOFT_NAME= # ,软件名称,通常根据软件包文件名或软件包中的定义进行设置。
204 PKG_NAME= # ,软件包名称,包含软件名称之外,还包含软件主版本、发型版本信息、硬件平台类型、发布日期等信息。
206 INST_TYPE/DEF_INST_TYPE= # ,安装类型,与软件安装位置相关,在用户安装时设定,如不设定,使用默认值DEF_INST_TYPE。
207 SOFT_TYPE= # ,软件类型,软件在系统中的功能,对应着不同的软件安装路径。
208 # 系统环境变量
209 INST_TYPE=
210 INST_RW_TYPE= # ,根据安装类型,表示安装目录的读写属性。
211 INST_PFX= # ,根据安装类型,该安装类型软件的安装路径前缀。
212 SOFT_PATH= # ,一款具体的软件的安装目录路径,$INST_PFX/$SOFT_TYPE/$SOFT_NAME。
213 SOFT_INNER_SUBDIRS= # ,一个软件安装目录下的子目录。
214 SOFT_SUBDIR= # ,一款软件的各种subdir的路径,基本等效于$SOFT_PATH路径下的各个subdir的路径。在非
215                  # skeletone-linux中,这些sub dir不是所有目录都在$SOFT_PATH下,所以以环境变量的形式保存,
216                                  # 使得在各种运行环境下,这些功能的sub dir都可被使用。
219 PKG_CLASS_TYPE
220 PROG_DIR_INSYS_TYPE
221 DEF_INST_TYPE
223 SOFT_NAME=
228 #####################################################
229 # @ input param
230 #####################################################
232 #######################
233 # 【输入参数】
234 # 程序初始化运行时设置,
235 # 或者安装、build之前设置。
236 #######################
238 # ROOTFS的定义,设置成一个路径,用于系统安装时的安装目录
239 # 在交叉编译环境下使用。
240 if [[ -d $ROOTFS ]]; then
241         ROOTFS=$(cd `dirname $(which ls)`/..; pwd; cd - 2>/dev/null)
245 # parameters should be setted before this file load.
247 # *PROG_NAME=
248 # *EXE_NAME=
249 # PKG_NAME=
251 # INST_TYPE=
252 # SOFT_TYPE=
253 # LOCAL_TYPE=
254 RUNNING_TYPE=    # 定义PROG_SUB_PATH的DESC字符串。TRAD表示程序安装在系统目录中,
255                  # PKG表示安装在同一个软件包目录下。不同的安装目录,以不同的RUNNING_TYPE表示,
256                              # 
259 #####################################################
260 # @ inst-dir
261 #####################################################
263 [ inst-type ]
265 # install type, setted by INST_TYPE on install.
266 INST_TYPE_SET=(
267         BZSH            # /,fundamental linux system with shell (bzbox/bzlinux)
268         DIST            # /usr/,distribution
269         LOCAL           # /usr/local/,user installation on local machine
270         USER            # /home/$USER/usr/,user privacy installation
271         REMOTE          # /media/remote/usr/,install on remote machine
272         EXT1            # /usr/ext/,install on external storage
273         UNKNOWN         # non-standard installation, specify on install
274         DEFAULT
277 INST_TYPE_LIST=" ${!PKG_TYPE_DIR[@]} "
279 DEF_INST_TYPE=LOCAL
280 DEF_LOCAL_TYPE=GEN
281 DEF_RUNNING_TYPE=
284 [ inst-dir ]
287 # install dir prefix INST_PFX accroding to INST_TYPE.
290 INST_PFX_SET=(
291     [BZSH]="${ROOTFS:-/}"
292         [DIST]="$ROOTFS/usr"
293         [LOCAL]="$ROOTFS/usr/local"
294         [SOFT]="$ROOTFS/opt"
295         [USER]="$ROOTFS/home/$USER/usr"
296         [REMOTE]="$ROOTFS/usr/remote"
297         [EXT1]="$ROOTFS/usr/ext1"
298         [UNKNOWN]="$ROOTFS/usr/local"
299         [DEFAULT]="$ROOTFS/usr/local"
302 # envar definition.
303 # ROOTFS=/
304 BZSH_INST_PFX=$ROOTFS
305 DIST_INST_PFX=$ROOTFS/usr
306 LOCAL_INST_PFX=$ROOTFS/usr/local
307 SOFT_INST_PFX=$ROOTFS/opt
308 USER_INST_PFX=$ROOTFS/home/$USER/usr/
309 REMOTE_INST_PFX=$ROOTFS/usr/remote      # or /mnt/remote
310 # or /mnt/ext, or /media/$USER/ext,overlay dirs by overlayfs on /media/<storage-dev>/usr/
311 EXT_INST_PFX=$ROOTFS/usr/ext
312 DEFAULT_INST_PFX=$ROOTFS/usr/ext
314 INST_PFX_EVL='$(eval echo \${${INST_TYPE}_INST_PFX})'
317 [ inst-dir2type ]
319 # get INST_TYPE by install dir.
320 INST_DIR2TYPE_SET=(
321     [$(echo $BZSH_INST_PFX|tr '[^[:alnum:]_]' '_')]=BZSH
322         [$(echo $DIST_INST_PFX|tr '[^[:alnum:]_]' '_')]=DIST
323         [$(echo $LOCAL_INST_PFX|tr '[^[:alnum:]_]' '_')]=LOCAL
324         [$(echo $SOFT_INST_PFX|tr '[^[:alnum:]_]' '_')]=SOFT
325         [$(echo $USER_INST_PFX|tr '[^[:alnum:]_]' '_')]=USER
326         [$(echo $REMOTE_INST_PFX|tr '[^[:alnum:]_]' '_')]=REMOTE
327         [$(echo $EXT_INST_PFX|tr '[^[:alnum:]_]' '_')]=EXT
328 #       [$(echo $UNKNOWN_INST_PFX|tr '[^[:alnum:]_]' '_')]=UNKNOWN
329         [$(echo $DEFAULT_INST_PFX|tr '[^[:alnum:]_]' '_')]=DEFAULT
333 [ inst-dir-rw-attr ]
335 # install read/write attribution, defined on system construction.
336 # INST_RWTYPE
337 INST_DIR_RWTYPE_SET=(
338     [BZSH]=RO
339         [DIST]=RO
340         [LOCAL]=RW
341         [SOFT]=RW
342         [USER]=RW
343         [REMOTE]=RO
344         [EXT]=RW
345         [UNKNOWN]=RW
346         [DEFAULT]=RW
349 # envar definition.
350 BZSH_INST_RWTYPE=RO
351 DIST_INST_RWTYPE=RO
352 LOCAL_INST_RWTYPE=RW
353 SOFT_INST_RWTYPE=RW
354 USER_INST_RWTYPE=RW
355 REMOTE_INST_RWTYPE=RO
356 EXT1_INST_RWTYPE=RW
357 UNKNOWN_INST_RWTYPE=RW
358 DEFAULT_INST_RWTYPE="$(eval echo \${${DEF_INST_TYPE}_INST_RWTYPE})"
360 INST_RWTYPE_EVL='  $(eval echo \${${INST_TYPE}_INST_RWTYPE})'
364 #####################################################
365 # @ func-dir
366 #####################################################
368 [ func-dir ]
371 # enum for subdir & type under install pkg.
372 # all ware functional dir.
374 FUNC_DIR_TYPE_SET=(
375         # executables
376         BIN
377         SBIN
378         LIB
379         DRV
380         SVC
381         
382         # data
383         ETC                     # CFG
384         VAR                     # RTDATA
385         STCDATA         # STATIC_DATA
386         RUN                     # RTSYSDATA
387         TMP
388         USRDATA
390         # bakup data
391         ETCORG          # CFGORG
392         VARORG          # RTDATAORG
394         UPGRADE
395         RES
396         DOC
397         SRC
400 BIN_DIR=bin
401 SBIN_DIR=sbin
402 LIB_DIR=lib
403 SVC_DIR=svc
404 DRV_DIR=drv
406 ETC_DIR=etc
407 VAR_DIR=var
408 STCDATA_DIR=share
409 RUN_DIR=run
410 TMP_DIR=tmp
411 USRDATA_DIR=usrdata
413 ETCORG=$STCDATA_DIR/etc.org # maybe is a zipped file
414 VARORG=$STCDATA_DIR/var.org # maybe is a zipped file
416 UPGRADE_DIR=$VAR_DIR/upgrade
417 RES_DIR=$STCDATA_DIR/res
418 DOC_DIR=$STCDATA_DIR/doc
419 SRC_DIR=src
422 # alias func dir type(name) with actual dir string,
423 # to adapt to different running environment.
425 FUNC_DIR_SET=(
426         # executables
427         [BIN]="${BIN_DIR}"                       # rw attr for cmd prog dir
428         [SBIN]="${SBIN_DIR}"                 # rw attr for super-user cmd prog dir
429         [LIB]="${LIB_DIR}"                       # ro attr for lib dir
430         [DRV]="${DRV_DIR}"                   # ro attr for driver dir
431         [SVC]="${SVC_DIR}"                   # ro attr for service prog dir, or use libexec
433         # data
434     [ETC]="${ETC_DIR}"                   # rw attr for parameter dir
435         [VAR]="${VAR_DIR}"                   # rw attr for run-time application data dir
436         [STCDATA]="${STCDATA_DIR}"           # ro attr for static data dir
437         [RUN]="${RUN_DIR}"                   # rw attr for run-time system info dir
438         [TMP]="${TMP_DIR}"                   # rw attr for tmp dir
439         [USRDATA]="${USRDATA_DIR}"           # rw attr for user data dir
440         
441         # bakup data
442         [ETCORG]="${ETCORG_DIR}"             # ro attr for parameter data backup dir, or zipped file
443         [VARORG]="${VARORG_DIR}"             # ro attr for run-time data backup dir, or zipped file
445         # misc data
446         [UPGRADE]="${UPGRADE_DIR}"           # rw attr for upgrade dir in tmp
447         [RES]="${RES_DIR}"                   # ro attr for resource dir
448         [DOC]="${DOC_DIR}"                   # ro attr for doc  dir
449         [SRC]="${SRC_DIR}"                   # ro/rw attr for src dir
452 FUNC_DIR_LIST=" ${!SYS_GEN_FUNC_DIR[@]} "
455 [ sys-func-dir ]
457 SYS_INST_DIR_EVL='$(eval echo \${${INST_TYPE}_INST_PFX})'
459 SYS_BIN_DIR='${SYS_INST_DIR}/${BIN_DIR}'
460 SYS_SBIN_DIR='${SYS_INST_DIR}/${SBIN_DIR}'
461 SYS_LIB_DIR='${SYS_INST_DIR}/${LIB_DIR}'
462 SYS_SVC_DIR='${SYS_INST_DIR}/${SVC_DIR}'
463 SYS_DRV_DIR='${SYS_INST_DIR}/${DRV_DIR}/${KERNEL_VERSION}'
464 SYS_STCDATA_DIR='${SYS_INST_DIR}/${STCDATA_DIR}'
465 SYS_RES_DIR='${SYS_INST_DIR}/${RES_DIR}'
466 SYS_DOC_DIR='${SYS_INST_DIR}/${DOC_DIR}'
467 SYS_SRC_DIR='${SYS_INST_DIR}/${SRC_DIR}'
468 SYS_ETC_DIR='${SYS_INST_DIR}/${ETC_DIR}'
469 SYS_VAR_DIR='${SYS_INST_DIR}/${VAR_DIR}'
470 SYS_ETCORG='${SYS_INST_DIR}/${ETCORG_DIR}'
471 SYS_VARORG='${SYS_INST_DIR}/${VARORG_DIR}'
472 SYS_USRDATA_DIR='${SYS_INST_DIR}/${USRDATA_DIR}'
473 SYS_RUN_DIR='${SYS_INST_DIR}/${RUN_DIR}'
474 SYS_TMP_DIR='${SYS_INST_DIR}/${TMP_DIR}'
475 SYS_UPGRADE_DIR='${SYS_INST_DIR}/${UPGRADE_DIR}'
477 SYS_DIR_SET_EVL=(
478         # executables
479         [BIN]="${SYS_BIN_DIR}"
480         [SBIN]="${SYS_SBIN_DIR}"
481         [LIB]="${SYS_LIB_DIR}"
482         [DRV]="${SYS_DRV_DIR}"
483         [SVC]="${SYS_SVC_DIR}"
485         # data
486     [ETC]="${SYS_ETC_DIR}"
487         [VAR]="${SYS_VAR_DIR}"
488         [STCDATA]="${SYS_STCDATA_DIR}"
489         [RUN]="${SYS_RUN_DIR}"
490         [TMP]="${SYS_TMP_DIR}"
491         [USRDATA]="${SYS_USRDATA_DIR}"
492         
493         # bakup data
494         [ETCORG]="${SYS_ETCORG_DIR}"
495         [VARORG]="${SYS_VARORG_DIR}"
497         # misc data
498         [UPGRADE]="${SYS_UPGRADE_DIR}"
499         [RES]="${SYS_RES_DIR}"
500         [DOC]="${SYS_DOC_DIR}"
501         [SRC]="${SYS_SRC_DIR}"
505 [ pkg-func-dir ]
507 # TBD: by using $SOFT_PATH
508 PKG_INST_DIR_EVL='$(eval echo \${${INST_TYPE}_INST_PFX})/soft/${PKG_NAME}'
510 PKG_BIN_DIR='${PKG_INST_DIR}/${BIN_DIR}'
511 PKG_SBIN_DIR='${PKG_INST_DIR}/${SBIN_DIR}'
512 PKG_LIB_DIR='${PKG_INST_DIR}/${LIB_DIR}'
513 PKG_SVC_DIR='${PKG_INST_DIR}/${SVC_DIR}'
514 PKG_DRV_DIR='${PKG_INST_DIR}/${DRV_DIR}'
515 PKG_STCDATA_DIR='${PKG_INST_DIR}/${STCDATA_DIR}'
516 PKG_RES_DIR='${PKG_INST_DIR}/${RES_DIR}'
517 PKG_DOC_DIR='${PKG_INST_DIR}/${DOC_DIR}'
518 PKG_SRC_DIR='${PKG_INST_DIR}/${SRC_DIR}'
519 PKG_ETC_DIR='${PKG_INST_DIR}/${ETC_DIR}'
520 PKG_VAR_DIR='${PKG_INST_DIR}/${VAR_DIR}'
521 PKG_ETCORG='${PKG_INST_DIR}/${ETCORG_DIR}'
522 PKG_VARORG='${PKG_INST_DIR}/${VARORG_DIR}'
523 PKG_USRDATA_DIR='${PKG_INST_DIR}/${USRDATA_DIR}'
524 PKG_RUN_DIR='${PKG_INST_DIR}/${RUN_DIR}'
525 PKG_TMP_DIR='${PKG_INST_DIR}/${TMP_DIR}'
526 PKG_UPGRADE_DIR='${PKG_INST_DIR}/${UPGRADE_DIR}'
528 PKG_DIR_SET_EVL=(
529         # executables
530         [BIN]="${PKG_BIN_DIR}"
531         [SBIN]="${PKG_SBIN_DIR}"
532         [LIB]="${PKG_LIB_DIR}"
533         [DRV]="${PKG_DRV_DIR}"
534         [SVC]="${PKG_SVC_DIR}"
536         # data
537     [ETC]="${PKG_ETC_DIR}"
538         [VAR]="${PKG_VAR_DIR}"
539         [STCDATA]="${PKG_STCDATA_DIR}"
540         [RUN]="${PKG_RUN_DIR}"
541         [TMP]="${PKG_TMP_DIR}"
542         [USRDATA]="${PKG_USRDATA_DIR}"
543         
544         # bakup data
545         [ETCORG]="${PKG_ETCORG_DIR}"
546         [VARORG]="${PKG_VARORG_DIR}"
548         # misc data
549         [UPGRADE]="${PKG_UPGRADE_DIR}"
550         [RES]="${PKG_RES_DIR}"
551         [DOC]="${PKG_DOC_DIR}"
552         [SRC]="${PKG_SRC_DIR}"
556 [ func-dir-access ]
559 #####################################################
560 # @ soft-category
561 #####################################################
564 # SOFT_TYPE,setted in soft install pkg.
565 # @ for operating system, to provide system features.
566 # @ for user application.
567 #    [todo]这里的软件类型需要根据软件包分类而定。
569 SOFT_TYPE_SET=(
570         BZSH                    # ,minimal shell system (bzsh)
571         SYS_CMD                 # , 系统命令行命令程序
572         SYS_LIB                 # ,系统程序库,通常应用程序不使用这些库
573         SYS_BASIC               # ,用于为SYS_FRAMEWORK中的软件提供运行基础的软件包。
574         SYS_FRAMEWORK   # ,skeletone-linux中最基础的几款框架性的软件。
575         SYS_COM                 # ,系统程序中间件组件,包括各类subsys的系统组件。
577         SYS                             # , 系统程序。与APP同样是一个应用程序,但用于系统设置等系统功能。
578         SVC                             # , 服务程序
579         BSP                             # , 硬件驱动包
580         DRV                             # , 驱动程序,文件系统等非硬件的驱动程序
581         MID                             # ,中间件
582         #LIB                    # ,程序库,用于为各种app提供库
583         
584         APPCMD                  # , 应用命令行命令程序
585         APPLIB                  # ,应用专有的程序库
586         APPSVC                  # ,应用服务程序,为计算机用户提供功能,例如一些网络服务软件。
587         #APPCOM                 # , 应用程序中间件组件,
588         APP                             # , 应用程序
590         SOFT                    # ,包含多个类型的软件,通常有一个发行商vendor,或有一个专门功能。例如WPS软件。例如,示波器软件,
591                                         # 包含硬件驱动drv,公用库APPCOM,以及应用程序APP。例如,存储加密功能,包含加解密硬件驱动drv,
592                                         # 加解密中间件midware/lib,以及存储加解密工具软件SYSCMD。
594         UNKNOWN                 # 通用软件类型
597 classtype=( BZSH SYS CMD BSP SVC MIDWARE APP UNKNOWN )
600 #SOFT_TYPE包括系统、中间件和应用三大类别
601 # SYS_BZSH、SYS_BASIC、SYS_FRAMEWORK、SYS_SUBSYS_COM、SYS_COM是系统软件
602 # SOFT_COM是系统中为应用层提供第三方功能的组件或lib
603 # SYS_PROG、SYS_SVC_PROG、SYS_CMD_PROG、SYS_LIB是系统用途的应用软件
604 # APP_PROG、APP_SVR_PROG、APP_LIB、APP_CMD_PROG、是应用层的软件类型
607 #######################
608 # [软件分类(SOFT_TYPE)]
609 # 对于安装包的类型列举。
610 #######################
611 # declare -g -r -A PKG_SWTYPE_DIR_SET
612 #PKG_SWTYPE_DIR_SET=(
613 SW_INST_PFX_SET=(
614     [SYS]=System                 # 系统程序。
615     [SYSCMD]=SysCmd              # 系统命令行程序。与APP同样是一个应用程序,但用于系统设置等系统功能。
616         [SYSUTILS]=SysUtils          # 系统中的命令行工具程序,通常是没有安装包的命令行程序
617         [SYSLIB]=SysLib              # 系统程序库,通常应用程序不使用这些库
618         [SYSSVC]=SysSvc              # 系统服务程序
619         [SYSCOM]=SysCom              # 系统程序中间件组件,包括各类subsys的系统组件。
620         [SYS_BASIC]=SysBasic         # 用于为SYS_FRAMEWORK中的软件提供运行基础的软件包。
621         [SYS_FRAMEWORK]=SysFramework # skeletone-linux中最基础的几款框架性的软件。
622         [SVC]=Service                # 服务程序
623         [BSP]=BSP                    # 硬件驱动包
624         [DRV]=Driver                 # 驱动程序,文件系统等非硬件的驱动程序
625         [MID]=Midware                # 中间件
626         #[LIB]=Library               # 程序库,用于为各种app提供库
627         [APP]=Application            # 应用程序
628         [APPCMD]=AppCmd              # 应用命令行命令程序
629         [APPUTILS]=AppUtils          # 应用层的命令行工具程序,通常是没有安装包的命令行程序
630         [APPLIB]=AppLib              # 应用专有的程序库。
631         [APPSVC]=AppSvc              # 应用服务程序,为计算机用户提供功能,例如一些网络服务软件。
632         #[APPCOM]=AppCom             # 应用程序中间件组件
633         [SOFT]=Software              # 包含多个类型的软件,通常有一个发行商vendor,或有一个专门功能。
634                                                                  # 例如WPS软件。例如,示波器软件,包含硬件驱动drv,公用库APPCOM,
635                                                      # 以及应用程序APP。例如,存储加密功能,包含加解密硬件驱动drv,
636                                                                  # 加解密中间件midware/lib,以及存储加解密工具软件SYSCMD。
637         [GENERAL]=General            # 通用软件类型
638         [UNKNOWN]=Unknown            # 未知软件类型
641 SYS_SWTYPE_LIST=" ${!PKG_SWTYPE_DIR[@]} "
643 # 每个安装类型路径下用于存放软件包、软件类型、临时安装文件的目录。
644 SYS_SOFT_CLASS_DIR="softclass"
645 SYS_SOFT_DIR="soft"
646 SYS_INST_TMP_DIR=".installtmp"
648 BZSH_SOFT_DIR="${DIST_INST_PFX}/soft"
649 DIST_SOFT_DIR="${DIST_INST_PFX}/soft"
650 #LOCAL_SOFT_DIR="${LOCAL_INST_PFX}/soft"
651 LOCAL_SOFT_DIR="/opt"
652 SOFT_SOFT_DIR="/opt"
653 USER_SOFT_DIR="${USER_INST_PFX}/soft"
654 REMOTE_SOFT_DIR="${REMOTE_INST_PFX}/soft"
655 EXT1_SOFT_DIR="${EXT1_INST_PFX}/soft"
658 #####################################################
659 # @ run-time opr interface
660 #####################################################
662 [ sys init ]
665 [ gen pkg ]
668 [ inst pkg ]
671 [ prog running ]
673 #######################
674 # 【PROG运行时输入参数获取】
675 # 在程序初始化运行时进行初始化设置。
676 #######################
678 EXE_FILE=$0
680 PROG_NAME[1]='$(basename $EXE_FILE)'
681 PROG_PATH[1]='$(dirname $EXE_FILE)'
683 PROG_EXE_NAME[1]='$(basename `readlink -f $EXE_FILE`)'
684 PROG_EXE_PATH[1]='$(cd `dirname $(readlink -f $EXE_FILE)`; pwd; cd - > /dev/null)'
687 PKG_NAME[1]='$(cd `dirname $(readlink -f $EXE_FILE)`/../; basename $PWD; cd - > /dev/null)'
688 PKG_PATH[1]='$(cd `dirname $(readlink -f $EXE_FILE)`/../; pwd; cd - > /dev/null)'
690 #PROG_PKG_TYPE[1]='$(cd `dirname $(readlink -f $EXE_FILE)`/../../; basename $PWD; cd - > /dev/null)'
691 SOFT_TYPE[1]='$(cd `dirname $(readlink -f $EXE_FILE)`/../../; basename $PWD; cd - > /dev/null)'
692 INST_TYPE[1]='${SYS_PATH_TO_INST_TYPE["$(cd `dirname $(readlink -f $EXE_FILE)`/../../../; pwd | tr "/|." "_"; cd - > /dev/null)"]}'
695 [ dir reg ]
697 # fsyntax: func_dir_reg <category> <funcname> <rw> <funcdir>
698 func_dir_reg ()
700     :
703 # fsyntax: libdir_reg <funcname> <shlib> <oninc> <onload> <onunload>
704 libdir_reg ()
706     :
745 [ definations ]
748 [ SYSTEM ]
751 [ SESSION ]
754 [ PROG_RUNNING ] # run-time
757 [ PKG_BUILDING ]
760 [ INSTALLATION ]
777 # executables dir
780 # :executables
781 SYS_PROG_DIR=${SOFT_PATH}/bin
782 # :super executables
783 SYS_SU_PROG_DIR=${SOFT_PATH}/sbin
784 # :library
785 SYS_LIB_DIR=${SOFT_PATH}/lib/
786 # :daemon service program dir
787 SYS_SVC_DIR=${SOFT_PATH}/svc/
788 # :driver prog dir
789 SYS_DRV_DIR=${SOFT_PATH}/drv/
792 # static data dir (ro)
795 # :un-categoried static data for applications. it's the static data. eg: 
796 应用程序未分类的静态数据,像是初始化参数,软件自带的一些数据文件等,都是一些ro属性的数据。
797 SYS_STCDATA_DIR=${SOFT_PATH}/share/${SOFT_NAME}
798 # :通常都是ro的资源文件或固定的一些数据
799 SYS_RES_DIR=${SOFT_PATH}/share/res/${SOFT_NAME}
800 # :帮助文档的路径
801 SYS_DOC_DIR=${SOFT_PATH}/share/doc/${SOFT_NAME}
802 # (design,code,prj,dist):程序设计文件路径,常用于编译程序
803 SYS_SRC_DIR=${SOFT_PATH}/src/${SOFT_NAME}
806 # run-time dynamic data dir (local-host) (rw)
809 # :etc配置文件路径
810 SYS_ETC_DIR=${ROOTFS}/etc/${SOFT_NAME}
811 # :可变数据文件路径
812 SYS_VAR_DIR=${ROOTFS}/var/app/${SOFT_NAME}
813 # :用户数据路径,通常由应用程序设置
814 SYS_USRDATA_DIR=~/.$SOFT_NAME/usrdata/
815 # :运行时的一些系统文件路径。像是pid文件,文件锁之类的。系统重启不保存。
816 SYS_RUN_DIR=${ROOTFS}/run/$SOFT_TYPE/${SOFT_NAME}
817 # :临时数据文件,系统重启不保存。
818 SYS_TMP_DIR=${ROOTFS}/tmp/${SOFT_NAME}
819 # :程序更新升级时的目录
820 SYS_UPGRADE_DIR=${ROOTFS}/var/upgrade/${SOFT_NAME}
823 # run-time dynamic data dir (multi-host) (rw)
826 # :etc配置文件路径
827 SYS_ETC_DIR=${INST_PFX}/etc/$HOST_USR_ID/${SOFT_NAME}
828 # :可变数据文件路径
829 SYS_VAR_DIR=${INST_PFX}/var/app/$HOST_USR_ID/${SOFT_NAME}
830 # :用户数据路径,通常由应用设置。如果为REMOTE系统类型,~目录指向INST_PFX[REMOTE]/home/$USER_NAME
831 SYS_USRDATA_DIR=~/.$SOFT_NAME/$HOST_USR_ID/usrdata/
832 # :运行时的一些系统文件路径。像是pid文件,文件锁之类的。系统重启不保存。
833 SYS_RUN_DIR=${ROOTFS}/run/$HOST_USR_ID/$SOFT_TYPE/${SOFT_NAME}
834 # :临时数据文件,系统重启不保存。
835 SYS_TMP_DIR=${ROOTFS}/tmp/$HOST_USR_ID/${SOFT_NAME}
836 # :程序更新升级时的目录
837 SYS_UPGRADE_DIR=${ROOTFS}/var/$HOST_USR_ID/upgrade/${SOFT_NAME}