TWW HPMS 移植到其他操作系统
将 TWW HPMS 工具移植到其他操作系统时需要完成两项任务。
- 移植 TWW HPMS 工具本身
- 移植包源。
- 用于自动执行 TWW 工具移植的 Makefile。
- 一个用于为 nslu2 构建 TWW 工具的 Makefile。
- 编译 sbtuils 工具以生成 sb
- 使用 sb 编译和构建 pb 和 pkgutils
- 移植 sbtools
{}
- 移植 pbtools
- 移植 pkgutils
做完功课后,以下是一些关于 Mac OS X 上软件打包的优秀文档。
- PackageMaker 指南
- 本地 PMS
包管理系统正在变得更好,但仍然缺乏 PMS 应该具有的基本功能。例如,您无法使用命令行工具列出当前安装的包。您无法使用命令删除包或自动处理包依赖关系。
/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker 在 10.3.8 中得到了改进。我们现在可以使用命令行创建 .pkg。请注意,在 -p 或 -f 选项之后提供绝对路径。
以下是一个用于在 Mac OSX 的本地 PMS 格式中创建 TWW CPAM 工具的部分 Makefile。
<snip> # A simple layout for .pkg format #Test.pkg # Contents # Archive.bom # Archive.pax.gz # Info.plist # PkgInfo # Resources # Description.plist # postflight -1- # postinstall -2- # postupgrade -3- # preflight -4- # preinstall -5- # preupgrade -6- PKGMK=/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker SB_PKG_DIR=/opt/TWWfsw/sbutils124 SB_PKGNAME=sbutils-1.2.4 PB_PKGNAME=pbutils-1.1.12 PKGUTILS_PKGNAME=pkgutils-1.5.19 SB_PKG_HOME=/opt/build/sbutils-1.2.4 PB_PKG_HOME=${SB_PKG_HOME} PKGUTILS_PKG_HOME=${SB_PKG_HOME} SB_PKG_STG=${SB_PKG_HOME}/sbutils-stage PB_PKG_STG=${SB_PKG_HOME}/pbutils-stage PKGUTILS_PKG_STG=${SB_PKG_HOME}/pkgutils-stage PB_INSTALL_PREFIX=/opt/TWWfsw/pbutils11 PKGUTILS_INSTALL_PREFIX=/opt/TWWfsw/pkgutils15 sb-pkg: sb-pkg-prep sb-pkg-pkgmk sb-pkg-clean: rm -rf ${SB_PKG_HOME}/${SB_PKGNAME} ${SB_PKG_STG} sb-pkg-prep: rm -rf $(SB_PKG_STG) mkdir -p $(SB_PKG_STG)/Contents/Resources touch $(SB_PKG_STG)/Contents/Resources/postflight touch $(SB_PKG_STG)/Contents/Resources/postinstall touch $(SB_PKG_STG)/Contents/Resources/postupgrade touch $(SB_PKG_STG)/Contents/Resources/preflight touch $(SB_PKG_STG)/Contents/Resources/preinstall touch $(SB_PKG_STG)/Contents/Resources/preupgrade sb-pkg-pkgmk: $(PKGMK) -build -p ${SB_PKG_HOME}/${SB_PKGNAME}.pkg -f $(SB_INSTALL_PREFIX) -i ${SB_PKG_HOME}/src/macosx/Info.p\list.sb -d ${SB_PKG_HOME}/src/macosx/Description.plist.sb sb-pkg-pkgmk-clean: rm -rf ${SB_PKG_HOME}/${SB_PKGNAME} sb-pkg-install: /usr/sbin/installer -pkg sbutils-1.2.4-1.pkg -target / <snip>
- 移植 sbtools
sbutils-1.2.4 在 Mac OS X 10.3.8 上编译成功。我们也可以使用 packagemaker 将 sbutils-1.2.4 生成到 Mac OS X 的原生包格式。以下快速笔记需要稍后记录。
conchi:~/tww-tools/sbutils-1.2.4 tjyang$ sudo make sb-pkg rm -rf /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage mkdir -p /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/postflight touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/postinstall touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/postupgrade touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/preflight touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/preinstall touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/preupgrade cp -rp /opt/TWWfsw/sbutils124/* /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage ^Cmake: *** [sb-pkg-prep] Interrupt conchi:~/tww-tools/sbutils-1.2.4 tjyang$ sudo make sb-pkg rm -rf /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage mkdir -p /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/postflight touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/postinstall touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/postupgrade touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/preflight touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/preinstall touch /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Resources/preupgrade /usr/bin/mkbom -s /opt/TWWfsw/sbutils124 /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Archive.bom (pax -w -x cpio /opt/TWWfsw/sbutils124 |gzip - > /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents/Archive.pax.gz) /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker -build -p /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-1.2.4-1.pkg -f /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-stage/Contents -i //Users/tjyang/tww-tools/sbutils-1.2.4/Info.plist -d //Users/tjyang/tww-tools/sbutils-1.2.4/Description.plist 2005-02-27 23:29:24.664 PackageMaker[19034] ** building a package at /Users/tjyang/tww-tools/sbutils-1.2.4/sbutils-1.2.4-1.pkg ** 2005-02-27 23:29:32.961 PackageMaker[19034] done (0) conchi:~/tww-tools/sbutils-1.2.4 tjyang$ ls -lrt total 216 -rwx------ 1 tjyang tjyang 42318 23 Feb 15:04 systype -rw-r--r-- 1 tjyang tjyang 1069 27 Feb 15:49 cipo.error.txt drwx------ 43 tjyang tjyang 1462 27 Feb 15:59 src -rwxr-xr-x 1 tjyang tjyang 7796 27 Feb 22:23 genpkg.sh -rw-r--r-- 1 tjyang tjyang 459 27 Feb 23:13 Description.plist -rw-r--r-- 1 tjyang tjyang 1050 27 Feb 23:17 Info.plist -rwx------ 1 tjyang tjyang 44915 27 Feb 23:28 Makefile drwxr-xr-x 3 root tjyang 102 27 Feb 23:28 sbutils-stage drwxr-xr-x 3 root tjyang 102 27 Feb 23:29 sbutils-1.2.4-1.pkg conchi:~/tww-tools/sbutils-1.2.4 tjyang$ ls sbutils-1.2.4-1.pkg/ Contents conchi:~/tww-tools/sbutils-1.2.4 tjyang$ ls sbutils-1.2.4-1.pkg/Contents/ Archive.bom Archive.pax.gz Info.plist PkgInfo Resources conchi:~/tww-tools/sbutils-1.2.4 tjyang$ ls -l sbutils-1.2.4-1.pkg/Contents/ total 32312 -r--r--r-- 1 root tjyang 35525 27 Feb 23:29 Archive.bom -r--r--r-- 1 root tjyang 16496572 27 Feb 23:29 Archive.pax.gz -r--r--r-- 1 root tjyang 1050 27 Feb 23:29 Info.plist -r--r--r-- 1 root tjyang 8 27 Feb 23:29 PkgInfo drwxr-xr-x 7 root tjyang 238 27 Feb 23:29 Resources conchi:~/tww-tools/sbutils-1.2.4 tjyang$ ls -l sbutils-1.2.4-1.pkg/Contents/Resources/ total 40 -r--r--r-- 1 root tjyang 459 27 Feb 23:29 Description.plist lrwxr-xr-x 1 root tjyang 14 27 Feb 23:29 sbutils-1.2.4-1.bom -> ../Archive.bom -r--r--r-- 1 root tjyang 275 27 Feb 23:29 sbutils-1.2.4-1.info lrwxr-xr-x 1 root tjyang 17 27 Feb 23:29 sbutils-1.2.4-1.pax.gz -> ../Archive.pax.gz -r--r--r-- 1 root tjyang 46 27 Feb 23:29 sbutils-1.2.4-1.sizes conchi:~/tww-tools/sbutils-1.2.4 tjyang$ vi sbutils-1.2.4-1.pkg/Contents/Resources/sbutils-1.2.4-1.info conchi:~/tww-tools/sbutils-1.2.4 tjyang$
将 TWW HPMS 工具移植到 Win32 平台的第一个问题是使用哪个包创建软件以及基于哪个 Unix 基础软件。
- Unix 基础软件
- cygwin 的 sbutils 包源笔记。
"aux" need to be renamed to "auxx". perl -pi -e 's!\/aux\/!/aux!' Makfile http://cygwin.com/setup.html is the place to understand cygwin package format.
- mingw
- SFU
- 包创建工具
- MakeMSI(参见 http://users.cyberone.com.au/dbareis/makemsi.htm)自动构建(或更新)MSI 文件(或任何其他类型的 Windows Installer 数据库)。它使用类似 XML 的脚本语言,可以通过资源管理器或命令行调用。它还构建 MSI 文档,包括文件(MD5 检查安装的文件是否与预期等)和产品验证按钮。它包含一个非常强大的预处理器。
- 对话框可以创建,并且可以轻松格式化,无需使用对话框编辑器。有许多针对不同用途和用户技能的“框架”。可以集成自定义操作代码,并且具有一些 ADSI/COMPLUS/调度和其他支持。以下是一个小型示例脚本(一个文件,一个快捷方式,一个小型基于 VBScript 的自定义操作)。
;--- Load MAKEMSI (via wrapper which configures MAKEMSI to work how I like it) --- #include "DENNIS.MMH" ;--- Create INSTALLDIR (we wish to install file(s) here) --- <$DirectoryTree Key="INSTALLDIR" Dir="[ProgramFilesFolder]\TryMe" CHANGE="\" PrimaryFolder="Y"> ;--- Add "TRY.MM" and shortcut to same component (file must be keypath) --- <$Component "TryMe" Create="Y" Directory_="INSTALLDIR"> ;;In this case GUID autogenerated (at least 1st time) ;--- Add the files to the "TryMe" component ----------------------------- <$File SOURCE="TryMeWithAdvShortCut.MM" KeyPath="Y"> ;--- Add the shortcut (advertise the "complete" feature) ---------------- #( ;--- Advertised shortcut in "Start->programs" ----------------------- <$Shortcut Dir="ProgramMenuFolder" Feature="\" ;;root feature is my "complete" one Title="Open TryMeWithAdvShortCut.MM (via default association)" Description=^Simply opens "TryMeWithAdvShortCut.MM" in associated handler (probably notepad)!^ Icon="@.\TryMe.ico" WorkDir="INSTALLDIR" > #) <$/Component> ;--- Display a message during a non-silent install (logs if silent) --------- #data "PopupCaData" ;--- Some data we'd like to pass to the CA ------------------------------- "InstallationDirectory" "[INSTALLDIR]" "SystemFolder" "[SystemFolder]" #data <$VbsCa Binary="Popup.vbs" DATA=^PopupCaData^> <$VbsCaEntry "HiThere"> ;--- If the VBSCRIPT "MsgBox" or similar function was used this would prevent a silent install --- #( CaMsgBox "I", "Hi this is a message from '<?InputFile>'! This was displayed via a VBSCRIPT MSI custom action." & vbCRLF & vbCRLF & "Note that I have enlarged this message box so that when an error occurs you will see the whole text! " & "This and most tweeking MAKEMSI does to the user interface is optional (most performed by ""UISAMPLE.MMH"")." & vbCRLF & vbCRLF & "The installation directory is """ & VbsCaCadGet("InstallationDirectory") & """. " & "The system directory is """ & VbsCaCadGet("SystemFolder") & """." #) <$/VbsCaEntry> <$/VbsCa> <$VbsCaSetup Binary="Popup.vbs" Entry="HiThere" Seq="StartServices-" CONDITION=^<$CONDITION_INSTALL_ONLY>^ DATA=^PopupCaData^>
- NSIS http://nsis.sourceforge.net/
- Inno
- Wix 在 http://sourceforge.net/projects/wix,它具有 XML、脚本和命令行支持,可生成 MSI 包。
- 使用 Wix 工具集生成 Unix 包的挑战是 GUID。幸运的是,mallow.exe 来解救。它可以扫描 src 目录并为每个组件(目录或文件)生成 GUID。
- 我们需要弄清楚如何使 pb 生成 wxs xml 文件,并在 mallow 的帮助下与 candle 和 light 通信以生成 msi 包。
- 以下是一个小型批处理文件,用于说明创建 msi 包、安装和删除此包。
candle 和 light 是一对类似于 redhat 中的 rpmbuild、Max OS X 中的 packagemaker 或 solaris 中的 pkgmk 的命令行包创建工具。
F:\src\wix\tutorial\Sample1>cat batch11.bat del Sample11.msi candle -nologo Sample11.wxs light -nologo Sample11.wixobj msiexec /i Sample11.msi /l* Sample11.log rem msiexec /x Sample11.msi /qb F:\src\wix\tutorial\Sample1>
- wix 包源在以下文本中显示,以下是一些待办事项。
- 将 pbuitils 的 .pb xml 文件转换为 wix 的 wxs XML。
- 弄清楚 msiexec 如何在没有实际 .msi 包的情况下使用包 ID 删除包。
F:\src\wix\tutorial\Sample1>cat Sample11.wxs <?xml version='1.0' encoding='windows-1252'?> <Wix xmlns='http://schemas.microsoft.com/wix/2003/01/wi'> <Product Name='Foobar 1.0' Id='DB501C18-86C7-4D14-AEC0-86416A69ABDE' Language='1028' Codepage='1252' Version='1.0.0.0' Manufacturer='Acme Ltd.'> <Package Id='7EF38C48-95C1-4015-A361-3806ADA74AAC' Keywords='Installer' Description="Acme's Foobar 1.0 Installer" Comments='Foobar is a registered trademark of Acme Ltd.' Manufacturer='Acm e Ltd.' InstallerVersion='100' Languages='1028' Compressed='yes' SummaryCodepage=' 1252' /> <Media Id='1' Cabinet='Sample.cab' EmbedCab='yes' DiskPrompt="Acme's Foobar 1.0 Installation CD-ROM" /> <Directory Id='TARGETDIR' Name='SourceDir'> <Directory Id='ProgramFilesFolder' Name='PFiles'> <Directory Id='Acme' Name='Acme'> <Directory Id='INSTALLDIR' Name='Foobar10' LongName='Foobar 1.0'> <Component Id='MainExecutable' Guid='DCEECAA4-83F1-4F22-985B-FDB3C8ABD471'> <File Id='FoobarEXE' Name='Foobar10.exe' LongName='FoobarAppl10.exe' DiskId='1' src='FoobarAppl10.exe' Vital='yes' /> <Shortcut Id="startmenuFoobar10" Directory="ProgramMenuDir" Name="Foobar10" LongName="Foobar 1.0" Target="Complete" WorkingDirectory='INSTALLDIR' Icon="Foobar10.exe" IconIndex="0" /> <Shortcut Id="desktopFoobar10" Directory="DesktopFolder" Name="Foobar10" LongName="Foobar 1.0" Target="Complete" WorkingDirectory='INSTALLDIR' Icon="Foobar10.exe" IconIndex="0" /> <File Id='HelperDLL' Name='Helper.dll' DiskId='1' src='Helper.dll' Vital='yes' /> </Component> <Component Id='Manual' Guid='CE36F399-574D-4A9A-A266-5B5EC2C022A4'> <File Id='Manual' Name='Manual.pdf' DiskId='1' src='Manual.pdf' /> <Shortcut Id="startmenuManual" Directory="ProgramMenuDir" Name="Manual" LongName="Instruction Manual" Target="Documentation" /> </Component> </Directory> </Directory> </Directory> <Directory Id="ProgramMenuFolder" Name="PMenu" LongName="Programs"> <Directory Id="ProgramMenuDir" Name='Foobar10' LongName="Foobar 1.0" /> </Directory> <Directory Id="DesktopFolder" Name="Desktop" /> </Directory> <Feature Id='Complete' Level='1'> <ComponentRef Id='MainExecutable' /> <ComponentRef Id='Manual' /> </Feature> </Product> </Wix> F:\src\wix\tutorial\Sample1>
- WiX 和 MS 安装程序的参考资料。
http://www.tramontana.co.hu/wix/ http://www.ryanlowe.ca/blog/archives/001167_learning_wix_part_one.php http://blogs.msdn.com/robmen/
- 移植 sbtools
- 移植 pbtools
- 移植 pkgutils
- 移植 sbtools
- 移植 pbtools
- 移植 pkgutils
- 移植 sbtools
- 移植 pbtools
- 移植 pkgutils
软件工程流程包括通过软件开发人员设计和实现软件以生成源代码。然后需要构建、打包和管理源代码。我们可以将此流程分为三个步骤。
- 软件构建流程 (SB),SB 可以分为以下流程,这些流程在构建机器上执行
- 源代码解包
- 源代码修补
- 源代码配置
- 构建源代码以生成二进制文件和文档
- 二进制文件测试
- 二进制文件安装
- 二进制文件卸载
- 包构建 (PB) 流程非常直接
- 准备配置脚本
- 准备初始化脚本以启动/停止应用程序服务
- 调用本地 PMS 将二进制文件、文档和脚本打包到本地 PMS 格式中。
- 包管理 (PKGUTIL) 流程
- 上传和管理包在包仓库服务器上。
- 安装
- 删除
- 升级/修补
- 包依赖关系自动安装。
TWW 公司有三个工具与包管理流程相匹配。
- 软件构建
- sbutils
[root] ls -l /opt/TWWfsw/sbutils12/bin/ total 164 -rwxr-xr-x 1 root root 38551 Dec 1 15:17 gen-sb-db -rwxr-xr-x 1 root root 44418 Dec 1 15:17 sb [root]
- 包构建
- pbutils
[root] ls -l /opt/TWWfsw/pbutils11/bin/ total 186 -rwxr-xr-x 1 root root 29975 Apr 30 2004 gen-pb-db -rwxr-xr-x 1 root root 29169 Apr 30 2004 gen-pkg-db -rwxr-xr-x 1 root root 34023 Apr 30 2004 pb [root]
- 包管理
- pkgutils
[root] ls -l /opt/TWWfsw/pkgutils15/bin/ total 542 -rwxr-xr-x 1 root root 32434 Jan 25 2004 chk-pkg-updates -rwxr-xr-x 1 root root 18751 Jan 25 2004 pkg-config -rwxr-xr-x 1 root root 48281 Jan 25 2004 pkg-info -rwxr-xr-x 1 root root 70570 Jan 25 2004 pkg-inst -rwxr-xr-x 1 root other 68887 May 18 2003 pkg-inst~ -rwxr-xr-x 1 root root 35692 Jan 25 2004 pkg-rm [root]
- 如何获取 TWW 工具?
所有 TWW 工具及其支持包的源代码均符合 GPL 协议。它们在他们的 FTP 站点 ftp://support.thewrittenword.com 上免费提供。但他们的支持劳动和二进制包并不免费。我们很高兴 TWW 公司找到了一种方法来进行开源工作,并且仍然可以从中谋生。如果您的工作场所需要此类服务,请支持 TWW 公司 ( http://shopping.netsuite.com/tww )。