From 2e132384878df1513b37b152ce36aa0e6eb8d757 Mon Sep 17 00:00:00 2001 From: William Godbe <wigodbe@microsoft.com> Date: Fri, 11 Mar 2022 09:24:23 -0800 Subject: [PATCH] Build .rpm packages for linux arm64 (#40485) * Build .rpm packages for linux arm64 * Fixup * Remove dupe asset manifest params * Don't build native * Fix RPM build condition * Get binlog * Fix arch * Fixup * No binlog * Avoid duplicate targeting-pack RPM Build - if an RPM containing platform-neutral executables is platform-neutral, this should be enough * Correct RPM arch name, include in targeting pack * Revert "Avoid duplicate targeting-pack RPM Build" This reverts commit 77f81b8d696d663249a54c56be4a1d70fe68668f * Rename x64 RPM to "x64" Co-authored-by: Doug Bunting <6431421+dougbu@users.noreply.github.com> --- .azure/pipelines/ci.yml | 32 ++++++++++++------- eng/Build.props | 2 +- src/Installers/Rpm/Directory.Build.props | 8 ++++- src/Installers/Rpm/Directory.Build.targets | 15 +++++---- .../Rpm/Runtime/Rpm.Runtime.rpmproj | 10 +++--- .../TargetingPack/Rpm.TargetingPack.rpmproj | 8 ++--- 6 files changed, 43 insertions(+), 32 deletions(-) diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index 704f4cc709e..720fac91095 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -389,7 +389,6 @@ stages: --no-build-nodejs --no-build-java -p:OnlyPackPlatformSpecificPackages=true - -p:AssetManifestFileName=aspnetcore-Linux_x64.xml $(_BuildArgs) $(_InternalRuntimeDownloadArgs) displayName: Run build.sh @@ -458,17 +457,26 @@ stages: jobName: Linux_arm64_build jobDisplayName: "Build: Linux ARM64" agentOs: Linux - buildArgs: - --arch arm64 - --all - --pack - --no-build-nodejs - --no-build-java - -p:OnlyPackPlatformSpecificPackages=true - -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml - $(_BuildArgs) - $(_PublishArgs) - $(_InternalRuntimeDownloadArgs) + steps: + - script: ./eng/build.sh + --ci + --arch arm64 + --pack + --all + --no-build-nodejs + --no-build-java + -p:OnlyPackPlatformSpecificPackages=true + $(_BuildArgs) + $(_InternalRuntimeDownloadArgs) + displayName: Run build.sh + - script: git clean -xfd src/**/obj/; + ./dockerbuild.sh rhel --ci --nobl --arch arm64 --build-installers --no-build-deps --no-build-nodejs + -p:OnlyPackPlatformSpecificPackages=true -p:BuildRuntimeArchive=false -p:LinuxInstallerType=rpm + -p:AssetManifestFileName=aspnetcore-Linux_arm64.xml + $(_BuildArgs) + $(_PublishArgs) + $(_InternalRuntimeDownloadArgs) + displayName: Build RPM installers installNodeJs: false artifacts: - name: Linux_arm64_Logs diff --git a/eng/Build.props b/eng/Build.props index d8e8b0bc824..4b25c964ece 100644 --- a/eng/Build.props +++ b/eng/Build.props @@ -103,7 +103,7 @@ <ProjectToBuild Include="$(RepoRoot)src\Installers\Windows\SharedFrameworkLib\SharedFrameworkLib.wixproj" AdditionalProperties="Platform=arm64" /> </ItemGroup> - <ItemGroup Condition="'$(BuildInstallers)' == 'true' AND '$(TargetRuntimeIdentifier)' == 'linux-x64'"> + <ItemGroup Condition="'$(BuildInstallers)' == 'true' AND ('$(TargetRuntimeIdentifier)' == 'linux-x64' OR '$(TargetRuntimeIdentifier)' == 'linux-arm64')"> <ProjectToBuild Condition=" '$(LinuxInstallerType)' == 'deb' " Include="$(RepoRoot)src\Installers\Debian\**\*.*proj" /> <ProjectToBuild Condition=" '$(LinuxInstallerType)' == 'rpm' " diff --git a/src/Installers/Rpm/Directory.Build.props b/src/Installers/Rpm/Directory.Build.props index 17abde691b6..b436fc469b1 100644 --- a/src/Installers/Rpm/Directory.Build.props +++ b/src/Installers/Rpm/Directory.Build.props @@ -9,9 +9,15 @@ <IntermediateOutputPath>$(IntermediateOutputPath)$(TargetRuntimeIdentifier)\</IntermediateOutputPath> <OutputPath>$(InstallersOutputPath)</OutputPath> + <CblMariner1VersionSuffix>-cm.1</CblMariner1VersionSuffix> + <CblMariner2VersionSuffix>-cm.2</CblMariner2VersionSuffix> + <!-- All installers are shipping assets. --> <IsShipping>true</IsShipping> <IsPackable>true</IsPackable> - </PropertyGroup> + <!-- RPM files are platform-specific and should be named appropriately. --> + <RpmArch Condition=" '$(TargetArchitecture)' == 'x64' ">x64</RpmArch> + <RpmArch Condition=" '$(TargetArchitecture)' == 'arm64' ">aarch64</RpmArch> + </PropertyGroup> </Project> diff --git a/src/Installers/Rpm/Directory.Build.targets b/src/Installers/Rpm/Directory.Build.targets index ebbdb0babab..44b87eea5ac 100644 --- a/src/Installers/Rpm/Directory.Build.targets +++ b/src/Installers/Rpm/Directory.Build.targets @@ -18,7 +18,7 @@ <Target Name="PrepareForBuild"> <MakeDir Directories="$(IntermediateOutputPath)" /> - <Error Text="Currently only linux-x64 is supported by Rpm installers." Condition=" '$(TargetRuntimeIdentifier)' != 'linux-x64' " /> + <Error Text="Currently only linux-x64 and linux-arm64 are supported by Rpm installers." Condition=" '$(TargetRuntimeIdentifier)' != 'linux-x64' AND '$(TargetRuntimeIdentifier)' != 'linux-arm64'" /> <Error Text="Missing required property: RpmPackageInstallRoot" Condition=" '$(RpmPackageInstallRoot)' == '' " /> <Error Text="Missing required property: PackageContentRoot" Condition=" '$(PackageContentRoot)' == '' " /> @@ -37,6 +37,11 @@ <Target Name="Pack" /> <Target Name="RpmBuild" DependsOnTargets="$(RpmBuildDependsOn)"> + <PropertyGroup> + <CblMariner1TargetPath>$(InstallersOutputPath)$(CblMarinerBaseName)$(CblMariner1VersionSuffix)$(CblMarinerExtension)</CblMariner1TargetPath> + <CblMariner2TargetPath>$(InstallersOutputPath)$(CblMarinerBaseName)$(CblMariner2VersionSuffix)$(CblMarinerExtension)</CblMariner2TargetPath> + </PropertyGroup> + <!-- Create layout: Create changelog --> <PropertyGroup> <ChangeLogProps>DATE=$([System.DateTime]::UtcNow.ToString(ddd MMM dd yyyy))</ChangeLogProps> @@ -51,10 +56,6 @@ <GenerateFileFromTemplate TemplateFile="$(MSBuildThisFileDirectory)changelog.in" OutputPath="$(GeneratedChangeLog)" Properties="$(ChangeLogProps)" /> <!-- Run fpm --> - <PropertyGroup> - <RpmArch Condition=" '$(TargetArchitecture)' == 'x64' ">amd64</RpmArch> - </PropertyGroup> - <ItemGroup> <FpmArgs Include="--verbose" /> <FpmArgs Include="--input-type=dir" /> @@ -79,12 +80,12 @@ <Exec Command="scl enable rh-ruby25 'fpm @(FpmArgs,' ')'" /> <Copy SourceFiles="$(TargetPath)" - DestinationFiles="$(CblMarinerTargetPath)" + DestinationFiles="$(CblMariner1TargetPath)" OverwriteReadOnlyFiles="True" SkipUnchangedFiles="False" UseHardlinksIfPossible="False" /> - <Message Text="$(TargetPath) -> $(CblMarinerTargetPath)" Importance="high" /> + <Message Text="$(TargetPath) -> $(CblMariner1TargetPath)" Importance="high" /> <Copy SourceFiles="$(TargetPath)" DestinationFiles="$(CblMariner2TargetPath)" diff --git a/src/Installers/Rpm/Runtime/Rpm.Runtime.rpmproj b/src/Installers/Rpm/Runtime/Rpm.Runtime.rpmproj index e24ebf037af..5e0427aea7f 100644 --- a/src/Installers/Rpm/Runtime/Rpm.Runtime.rpmproj +++ b/src/Installers/Rpm/Runtime/Rpm.Runtime.rpmproj @@ -1,5 +1,5 @@ <!-- - This project produces a generic RPM installer for Linux x64 platforms only. + This project produces a generic RPM installer for Linux x64/arm64 platforms only. --> <Project DefaultTargets="Build"> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" /> @@ -12,11 +12,9 @@ <Import Project="..\Rpm.Runtime.Common.targets" /> <PropertyGroup> - <TargetFileName>$(RuntimeInstallerBaseName)-$(SharedFxVersion)-x64.rpm</TargetFileName> - <CblMarinerTargetFileName>$(RuntimeInstallerBaseName)-$(SharedFxVersion)-cm.1-x64.rpm</CblMarinerTargetFileName> - <CblMariner2TargetFileName>$(RuntimeInstallerBaseName)-$(SharedFxVersion)-cm.2-x64.rpm</CblMariner2TargetFileName> + <TargetFileName>$(RuntimeInstallerBaseName)-$(SharedFxVersion)-$(RpmArch).rpm</TargetFileName> <TargetPath>$(InstallersOutputPath)$(TargetFileName)</TargetPath> - <CblMarinerTargetPath>$(InstallersOutputPath)$(CblMarinerTargetFileName)</CblMarinerTargetPath> - <CblMariner2TargetPath>$(InstallersOutputPath)$(CblMariner2TargetFileName)</CblMariner2TargetPath> + <CblMarinerBaseName>$(RuntimeInstallerBaseName)-$(SharedFxVersion)</CblMarinerBaseName> + <CblMarinerExtension>-$(RpmArch).rpm</CblMarinerExtension> </PropertyGroup> </Project> diff --git a/src/Installers/Rpm/TargetingPack/Rpm.TargetingPack.rpmproj b/src/Installers/Rpm/TargetingPack/Rpm.TargetingPack.rpmproj index 76ef621aa84..a29db936bd7 100644 --- a/src/Installers/Rpm/TargetingPack/Rpm.TargetingPack.rpmproj +++ b/src/Installers/Rpm/TargetingPack/Rpm.TargetingPack.rpmproj @@ -29,12 +29,10 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.Common.targets" /> <PropertyGroup> - <TargetFileName>$(TargetingPackInstallerBaseName)-$(TargetingPackVersion).rpm</TargetFileName> - <CblMarinerTargetFileName>$(TargetingPackInstallerBaseName)-$(TargetingPackVersion)-cm.1.rpm</CblMarinerTargetFileName> - <CblMariner2TargetFileName>$(TargetingPackInstallerBaseName)-$(TargetingPackVersion)-cm.2.rpm</CblMariner2TargetFileName> + <TargetFileName>$(TargetingPackInstallerBaseName)-$(TargetingPackVersion)-$(RpmArch).rpm</TargetFileName> <TargetPath>$(InstallersOutputPath)$(TargetFileName)</TargetPath> - <CblMarinerTargetPath>$(InstallersOutputPath)$(CblMarinerTargetFileName)</CblMarinerTargetPath> - <CblMariner2TargetPath>$(InstallersOutputPath)$(CblMariner2TargetFileName)</CblMariner2TargetPath> + <CblMarinerBaseName>$(TargetingPackInstallerBaseName)-$(TargetingPackVersion)</CblMarinerBaseName> + <CblMarinerExtension>-$(RpmArch).rpm</CblMarinerExtension> <PackageVersion>$(TargetingPackVersionPrefix)</PackageVersion> -- GitLab