翼度科技»论坛 云主机 LINUX 查看内容

Packaging.DebUOS 专门为 dotnet 应用制作 UOS 安装包

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
Packaging.DebUOS 是我所在的团队开发开源的一款专门用在为 dotnet 的应用制作成为符合要求的 UOS 统信系统软件安装包的工具,此工具可以辅助开发者使用现有的工具链经过简单的配置即可完成安装包的制作
设计思想

Packaging.DebUOS 旨在通过使用 csproj 项目文件等方式进行配置,避免直接处理deb包的打包细节,从而降低学习成本。它内置了大量默认属性,可以直接开箱即用而无需进行大量配置。此外,它依赖于 dotnet 构建命令,能与现有工具链无缝集成,方便接入团队旧有的CI/CD服务。除了提供简单易用的方法外,还提供了高级的命令行方法,以满足高定制 deb 包制作的需求。在高级命令行用法部分将对这些高级方法进行补充介绍
使用方法

第一步,安装 NuGet 库。通过 NuGet 管理器或采用如下代码编辑 csproj 项目文件安装 Packaging.DebUOS 库
  1.   <ItemGroup>
  2.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  3.   </ItemGroup>
复制代码
安装 Packaging.DebUOS 库不会影响到你的应用代码逻辑,仅仅只用来收集构建 UOS 应用安装包所需的配置信息,以及深度集成到 dotnet 构建命令里面
第二步,配置 UOS 的 AppId 属性值。如下面代码,编辑 csproj 项目文件,设置 AppId 属性。按照 UOS 的规范,请务必使用厂商的倒置域名+产品名作为应用包名,如 com.example.demo 格式,前半部分为厂商域名倒置,后半部分为产品名,只允许小写字母
  1.   <PropertyGroup>
  2.     <AppId>com.example.demo</AppId>
  3.   </PropertyGroup>
复制代码
具体更改可参阅 FileDownloader 项目的更改内容: 配置 ID 用来打包 - dotnet-campus/dotnetCampus.FileDownloader@2d5769b - GitHub
第三步,执行命令行打包。在原有的 dotnet publish 命令里面,带上 -t:CreateDebUOS 参数,即可在正常发布完成之后,自动使用发布的输出文件制作成为符合要求的 UOS 统信系统软件安装包
  1. dotnet publish -c release -r linux-x64 --self-contained true -t:CreateDebUOS
复制代码
如此即可完成一个最为简单的符合要求的 UOS 统信系统软件安装包的制作。输出的安装包将会放在发布文件夹里面,可以将其拷贝到开发者的 UOS 系统上进行测试安装,预计正常都能安装成功
以上就是通过 Packaging.DebUOS 制作 UOS 统信系统软件安装包的最简单步骤。但相信对于大部分开发者来说,仅仅只是打出安装包还不能满足需求,开发者们还期望能够更好的配置安装包的更多信息,比如说安装到开始菜单的图标、开始菜单显示的应用名、配置安装包版本号等等,以下更多配置部分将会给出更多打包属性以满足开发者的更多定制需求
更多配置

以下列举出一些常用配置属性,更多的可配置属性请参阅 DebUOSConfiguration 配置大全 文档列举的属性,或参考本文末尾的全部配置项章节

  • UOSDebVersion : 安装包的版本号。可不写,默认将会取 Version 属性
  • AppName : 应用名,英文名。可不写,默认取 AssemblyName 程序集名属性
  • AppNameZhCN : 应用名,中文名,可不写。将在开始菜单中显示。如不写,将在开始菜单中显示英文的应用名
  • DesktopComment : 放入到 desktop 里面的 Comment 属性,作为关于本程序的通用简述
  • DesktopCommentZhCN : 放入到 desktop 里面的 Comment 属性,可不写,功能和 DesktopComment 相同,只是这是其中文版本
  • DebControlDescription : 放入到 DEBIAN\control 文件的 Description 属性。可不写,如不填写,默认将使用 Description 属性的值。可在安装包双击时看到此描述内容
  • Png32x32IconFile : 用于配置图标,配置完成的图标可在开始菜单作为应用程序图标。对应的还有 Png16x16IconFile Png24x24IconFile 等等不同尺寸的属性配置,以及矢量图 svg 的 SvgIconFile 属性配置
以下是对这些属性进行配置的 csproj 代码文件示例
  1.   <ItemGroup>
  2.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  3.   </ItemGroup>      com.dotnetcampus.unofiledownloader    1.0.1  <ItemGroup>
  4.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  5.   </ItemGroup>UnoFileDownloader  <ItemGroup>
  6.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  7.   </ItemGroup>下载器    Download32x32Icon.png    The file downloader.    文件下载器,代码完全开源    The UNO file downloader.    https://github.com/dotnet-campus/dotnetCampus.FileDownloader    dotnet-campus  
复制代码
完成以上配置即可构建出一个比较完备的 deb 安装包了
以上的示例对应的真实项目代码变更请参阅: 加上更多打包属性 - dotnet-campus/dotnetCampus.FileDownloader@a834677 - GitHub
如期望自动在发布之后输出符合 UOS 规范的 deb 包,期望不需要在命令行添加 -t:CreateDebUOS 参数,则可以通过配置 true 属性到 csproj 从而实现在发布之后,自动执行打包,如以下代码
  1.   <PropertyGroup>
  2.     <AutoCreateDebUOSAfterPublish>true</AutoCreateDebUOSAfterPublish>
  3.   </PropertyGroup>
复制代码
如果仅通过属性配置依然无法达到预期的安装包制作要求,可以参考以下的高级命令行用法
高级命令行用法

命令行的使用方法是通过 dotnet tool 调用 Packaging.DebUOS.Tool 工具进行打包。通过 Packaging.DebUOS.Tool 工具可以作为 dpkg-deb 工具在 Windows 上的部分功能替代品
使用命令行工具比较适合创建构建更为复杂的 deb 安装包,可以有更强的定制化,适合对 UOS 安装包规范较熟悉的开发者使用
使用以下命令进行更新或安装工具:
  1. dotnet tool update -g Packaging.DebUOS.Tool
复制代码
将已经准备好的符合 UOS 安装包文件组织规范的文件夹打包为 deb 安装包:
  1. dotnet dpkg-debuos -b C:\lindexi\DebPacking -o C:\lindexi\UOS\Foo.deb
复制代码
以上的 C:\lindexi\DebPacking 为已准备好的符合 UOS 安装包文件组织规范的文件夹,以上的 C:\lindexi\UOS\Foo.deb 为打包输出的文件。其中 -o 指定打包输出文件参数可以忽略,如忽略此参数,则将会在打包文件夹输出 deb 安装包
通过命令行工具打包的方法,可以让开发者自行组织 UOS 安装包文件夹,可以让开发者有更自由更高级的定制
开源地址

此工具使用最友好的 MIT 协议在 GitHub 上完全开源,详细请看: https://github.com/dotnet-campus/dotnetcampus.DotNETBuildSDK
如有问题欢迎到 GitHub 上提 Issus 交流
参考文档

感谢

如使用过程有问题,欢迎加入国产应用开发群交流: 810052083
全部配置项

大部分配置都是可选项,以下仅仅作为示例参考使用
  1. <DebControlFile>Assets\control</DebControlFile>
  2. <DebPostinstFile>Assets\PostInstall.sh</DebPostinstFile>
  3. <DebPrermFile>Assets\PreRm.sh</DebPrermFile>
  4. <DebPostrmFile>Assets\PostRm.sh</DebPostrmFile>
  5. <DebPreinstFile>Assets\preinst.sh</DebPreinstFile>
  6. <DebInfoFile>Assets\Info.json</DebInfoFile>
  7. <DebDesktopFile>Assets\Demo.desktop</DebDesktopFile>
  8. <AppId>com.example.demo</AppId>
  9. <UOSAppId>com.example.demo</UOSAppId>
  10. <Version>1.2.3</Version>
  11. <UOSDebVersion>1.2.3</UOSDebVersion>
  12. <DebControlSection>utils</DebControlSection>
  13. <DebControlPriority>optional</DebControlPriority>
  14. <Architecture>amd64</Architecture>
  15. <DebControlMultiArch>foreign</DebControlMultiArch>
  16. <DebControlBuildDepends>debhelper (>=9)</DebControlBuildDepends>
  17. <DebControlStandardsVersion>3.9.6</DebControlStandardsVersion>
  18. <DebControlMaintainer>dotnet-campus</DebControlMaintainer>
  19. <DebControlHomepage>https://github.com/dotnet-campus/dotnetcampus.DotNETBuildSDK</DebControlHomepage>
  20. <DebControlDescription>The file downloader.</DebControlDescription>
  21. <DebControlDepends></DebControlDepends>
  22. <AppName>UnoFileDownloader</AppName>
  23. <AppNameZhCN>下载器</AppNameZhCN>
  24. <InfoPermissions>autostart;notification;trayicon;clipboard;account</InfoPermissions>
  25. <DesktopCategories>Other</DesktopCategories>
  26. <DesktopKeywords>deepin;downloader</DesktopKeywords>
  27. <DesktopKeywordsZhCN>工具;下载器</DesktopKeywordsZhCN>
  28. <DesktopComment>The file downloader.</DesktopComment>
  29. <DesktopCommentZhCN>这是一个下载器</DesktopCommentZhCN>
  30. <DesktopNoDisplay>false</DesktopNoDisplay>
  31. <DesktopExec>/opt/apps/$(AppId)/files/bin/$(AssemblyName)</DesktopExec>
  32. <DesktopIcon>$(UOSAppId)</DesktopIcon>
  33. <DesktopType>Application</DesktopType>
  34. <DesktopTerminal>false</DesktopTerminal>
  35. <DesktopStartupNotify>true</DesktopStartupNotify>
  36. <DesktopMimeType>audio/aac;application/aac;</DesktopMimeType>
  37. <PackingFolder>obj\DebUOSPacking\Packing\</PackingFolder>
  38. <WorkingFolder>obj\DebUOSPacking\</WorkingFolder>
  39. <ProjectPublishFolder>$([MSBuild]::NormalizePath($(MSBuildProjectDirectory), $(PublishDir)))</ProjectPublishFolder>
  40. <DebUOSOutputFilePath>bin\Foo.deb</DebUOSOutputFilePath>
  41. <UOSDebIconFolder>Assets\Icons\</UOSDebIconFolder>
  42. <SvgIconFile>Assets\Icons\Logo.svg</SvgIconFile>
  43. <Png16x16IconFile>Assets\Icons\Logo16x16.png</Png16x16IconFile>
  44. <ExcludePackingDebFileExtensions>.pdb;.dbg;.md</ExcludePackingDebFileExtensions>
复制代码
FAQ

如何在 deb 包里面添加符号 pdb 文件

添加 ExcludePackingDebFileExtensions 属性配置,重新指定打包时应该有哪些后缀被排除。因为默认的 ExcludePackingDebFileExtensions 属性包含了 .pdb .dbg .md 文件,因此符号 pdb 文件将被排除
  1.   <ItemGroup>
  2.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  3.   </ItemGroup>  .dbg;.md   
复制代码
如何添加更多文件加入 deb 打包里

一般情况下,能够输出到发布路径的,就能加入到 deb 包里面。比如在 csproj 配置某些文件如果较新则拷贝等
如果需要动态编写构建逻辑,则可在 Publish 之后,在 CreateDebUOS 之前,进行动态加入文件。如以下例子,添加的是构建信息 Version.txt 文件到打包的 deb 里面
  1.   <ItemGroup>
  2.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  3.   </ItemGroup>    $([System.IO.Path]::Combine($(PublishDir), "Version.txt"))      $([System.DateTimeOffset]::get_Now().ToString())  <ItemGroup>
  4.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  5.   </ItemGroup>  <ItemGroup>
  6.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  7.   </ItemGroup>  <ItemGroup>
  8.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  9.   </ItemGroup>  <ItemGroup>
  10.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  11.   </ItemGroup>  <ItemGroup>
  12.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  13.   </ItemGroup>  <ItemGroup>
  14.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  15.   </ItemGroup>  <ItemGroup>
  16.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  17.   </ItemGroup>  <ItemGroup>
  18.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  19.   </ItemGroup>  <ItemGroup>
  20.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  21.   </ItemGroup>  <ItemGroup>
  22.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  23.   </ItemGroup>   
复制代码
如何添加 vlc 依赖

在 PropertyGroup 里的 DebControlDepends 属性的添加 vlc,libvlc-dev 依赖,代码如下
  1.   <ItemGroup>
  2.     <PackageReference Include="Packaging.DebUOS" Version="3.16.3"/>
  3.   </ItemGroup>  vlc,libvlc-dev  
复制代码
由于 LibVLCSharp 难以维护 Linux 复杂的 VLC 版本,因此软件带 VLC 是推荐声明依赖。声明依赖之后,将在安装 deb 安装包的时候要求依赖负载。如使用 dpkg 命令,则在缺失依赖时不给安装,且给出其依赖说明。如使用图形界面的安装器,比如麒麟系统的 kylin-installer 安装器,一般都会自动从软件包源安装依赖

来源:https://www.cnblogs.com/lindexi/p/17995729
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具