From 734f83f2121c2c4e6d73ec0dabdcac1c8f3c4760 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Nov 27 2019 18:02:14 +0000 Subject: [PATCH 1/12] Update to .NET Core 3.1 Preview 3 --- diff --git a/coreclr-27048-sysctl-deprecation.patch b/coreclr-27048-sysctl-deprecation.patch index e1fdb5a..2591908 100644 --- a/coreclr-27048-sysctl-deprecation.patch +++ b/coreclr-27048-sysctl-deprecation.patch @@ -26,8 +26,8 @@ index e1c949e38d53..50ccf3a75e16 100644 --- a/src/pal/src/misc/sysinfo.cpp +++ b/src/pal/src/misc/sysinfo.cpp @@ -28,9 +28,12 @@ Revision History: - #include - #include + #define __STDC_FORMAT_MACROS + #include #include -#if HAVE_SYSCTL + diff --git a/dotnet3.1.spec b/dotnet3.1.spec index 372161c..7f0de4b 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -23,11 +23,11 @@ %endif %global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') -%global host_version 3.1.0-preview1.19506.1 -%global runtime_version 3.1.0-preview1.19506.1 -%global aspnetcore_runtime_version 3.1.0-preview1.19508.20 -%global sdk_version 3.1.100-preview1-014459 -%global templates_version 3.1.0-preview1-014459 +%global host_version 3.1.0-preview3.19553.2 +%global runtime_version 3.1.0-preview3.19553.2 +%global aspnetcore_runtime_version 3.1.0-preview3.19555.2 +%global sdk_version 3.1.100-preview3-014645 +%global templates_version 3.1.0-preview3-014645 %global host_rpm_version 3.1.0 %global aspnetcore_runtime_rpm_version 3.1.0 @@ -52,11 +52,13 @@ Name: dotnet3.1 Version: %{sdk_rpm_version} -Release: 0.1%{?dist} +Release: 0.3.preview3%{?dist} Summary: .NET Core CLI tools and runtime License: MIT and ASL 2.0 and BSD URL: https://github.com/dotnet/ +Packager: Fedora DotNet SIG + # The source is generated on a Fedora box via: # ./build-dotnet-tarball dotnet-v%%{runtime_version} Source0: dotnet-v%{sdk_version}-SDK.tar.gz @@ -435,6 +437,13 @@ echo "Testing build results for debug symbols..." %dir %{_libdir}/dotnet/packs %changelog +* Fri Nov 15 2019 Omair Majid - 3.1.100-0.3.preview3 +- Update to .NET Core Runtime 3.1.0-preview3.19553.2 and SDK + 3.1.100-preview3-014645 + +* Wed Nov 06 2019 Omair Majid - 3.1.100-0.2 +- Update to .NET Core 3.1 Preview 2 + * Wed Oct 30 2019 Omair Majid - 3.1.100-0.1 - Update to .NET Core 3.1 Preview 1 diff --git a/update-release b/update-release index be3a0a0..1f436c7 100755 --- a/update-release +++ b/update-release @@ -26,7 +26,7 @@ while [[ "$#" -gt 0 ]]; do esac done -spec_file=dotnet3.0.spec +spec_file=dotnet3.1.spec runtime_version=${positional_args[0]:-} if [[ -z ${runtime_version} ]]; then @@ -41,12 +41,12 @@ if [[ -z ${sdk_version} ]]; then exit 1 fi -if [[ ! -f "dotnet-v${runtime_version}.tar.gz" ]] && [[ -f "dotnet-${runtime_version}.tar.gz" ]]; then - ./rename-tarball "dotnet-${runtime_version}.tar.gz" "dotnet-v${runtime_version}.tar.gz" +if [[ ! -f "dotnet-v${sdk_version}-SDK.tar.gz" ]] && [[ -f "dotnet-${sdk_version}-SDK.tar.gz" ]]; then + ./rename-tarball "dotnet-${sdk_version}-SDK.tar.gz" "dotnet-v${sdk_version}-SDK.tar.gz" fi -if [[ ! -f "dotnet-v${runtime_version}.tar.gz" ]]; then - ./build-dotnet-tarball "v${runtime_version}" +if [[ ! -f "dotnet-v${sdk_version}-SDK.tar.gz" ]]; then + ./build-dotnet-tarball "v${sdk_version}-SDK" fi set -x From 020c21307dc546a292bf36d76e0173e375bb603f Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Nov 27 2019 18:02:14 +0000 Subject: [PATCH 2/12] Fix apphost permissions --- diff --git a/dotnet3.1.spec b/dotnet3.1.spec index 7f0de4b..2327516 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -52,7 +52,7 @@ Name: dotnet3.1 Version: %{sdk_rpm_version} -Release: 0.3.preview3%{?dist} +Release: 0.4.preview3%{?dist} Summary: .NET Core CLI tools and runtime License: MIT and ASL 2.0 and BSD URL: https://github.com/dotnet/ @@ -362,6 +362,9 @@ find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pdb' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.props' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pubxml' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.targets' -exec chmod -x {} \; +chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost +chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so +chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ install dotnet.sh %{buildroot}%{_sysconfdir}/profile.d/ @@ -437,6 +440,9 @@ echo "Testing build results for debug symbols..." %dir %{_libdir}/dotnet/packs %changelog +* Mon Nov 18 2019 Omair Majid - 3.1.100-0.4.preview3 +- Fix apphost permissions + * Fri Nov 15 2019 Omair Majid - 3.1.100-0.3.preview3 - Update to .NET Core Runtime 3.1.0-preview3.19553.2 and SDK 3.1.100-preview3-014645 diff --git a/update-release b/update-release index 1f436c7..dfb72a9 100755 --- a/update-release +++ b/update-release @@ -51,8 +51,8 @@ fi set -x -sed -i -E "s|^%global host_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]|%global host_version ${host_version}|" "$spec_file" -sed -i -E "s|^%global runtime_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]|%global runtime_version ${runtime_version}|" "$spec_file" +sed -i -E "s|^%global host_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global host_version ${host_version}|" "$spec_file" +sed -i -E "s|^%global runtime_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global runtime_version ${runtime_version}|" "$spec_file" sed -i -E "s|^%global sdk_version [[:digit:]]\.[[:digit:]]\.[[:digit:]][[:digit:]][[:digit:]]|%global sdk_version ${sdk_version}|" "$spec_file" comment="Update to .NET Core Runtime ${runtime_version} and SDK ${sdk_version}" From e1affb271924ca101a4dc59bd3cb6b0bb6960e13 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Dec 07 2019 14:52:31 +0000 Subject: [PATCH 3/12] Update to .NET Core Runtime 3.1.0 and SDK 3.1.100 --- diff --git a/build-dotnet-tarball b/build-dotnet-tarball index 59639ee..4af7757 100755 --- a/build-dotnet-tarball +++ b/build-dotnet-tarball @@ -3,10 +3,12 @@ # Usage: # build-dotnet-tarball # -# Creates a source archive from a tag at github.com/dotnet/source-build +# Creates a source archive from a tag (or commit) at github.com/dotnet/source-build -# Source-build is a little strange, we need to clone it, check out the tag, -# build it and then create a tarball from the archive directory it creates. +# Source-build is a little strange, we need to clone it, check out the +# tag, build it and then create a tarball from the archive directory +# it creates. Also, it is likely that the source archive is only +# buildable on the OS it was initially created in. set -euo pipefail IFS=$'\n\t' @@ -23,6 +25,31 @@ clean_dotnet_cache() { rm -rf /tmp/NuGet /tmp/NuGetScratch /tmp/.NETCore* /tmp/.NETStandard* /tmp/.dotnet /tmp/dotnet.* /tmp/clr-debug-pipe* /tmp/Razor-Server /tmp/CoreFxPipe* /tmp/VBCSCompiler /tmp/.NETFramework* } +function runtime_id { + + declare -A archmap + archmap=( + ["aarch64"]="arm64" + ["amd64"]="x64" + ["armv8l"]="arm" + ["i686"]="x86" + ["i386"]="x86" + ["x86_64"]="x64" + ) + + arch=${archmap["$(uname -m)"]} + + source /etc/os-release + case "${ID}" in + # Remove the RHEL minor version + rhel) rid_version=${VERSION_ID%.*} ;; + + *) rid_version=${VERSION_ID} ;; + esac + + echo "${ID}.${rid_version}-${arch}" +} + positional_args=() while [[ "$#" -gt 0 ]]; do arg="${1}" @@ -47,26 +74,44 @@ fi set -x -temp_dir=$(mktemp -d -p "$(pwd)") -dir_name="dotnet-${tag}" -pushd "${temp_dir}" -git clone https://github.com/dotnet/source-build -pushd source-build -git checkout "${tag}" -git submodule update --init --recursive -clean_dotnet_cache -sed -i -e 's|cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE||' repos/coreclr.proj -./build-source-tarball.sh "${dir_name}" - -# Remove files with funny licenses and crypto implementations -pushd "${dir_name}" -find src/AspNetCore.*/src -type d -name samples | xargs rm -r -rm -r src/NuGet.Client.*/test/EndToEnd/ProjectTemplates/NetCoreWebApplication1.0.zip -popd +dir_name="dotnet-${tag}-$(runtime_id)" +unmodified_tarball_name="${dir_name}-original" +tarball_name="${dir_name}" -popd -popd +if [ -f "${tarball_name}.tar.gz" ]; then + echo "error: ${tarball_name}.tar.gz already exists" + exit 1 +fi + +if [ ! -f "${unmodified_tarball_name}.tar.gz" ]; then + temp_dir=$(mktemp -d -p "$(pwd)") + pushd "${temp_dir}" + git clone https://github.com/dotnet/source-build + pushd source-build + git checkout "${tag}" + git submodule update --init --recursive + clean_dotnet_cache + sed -i -e 's|cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE||' repos/coreclr.proj + ./build-source-tarball.sh "${unmodified_tarball_name}" + popd + popd + + tar czf "${unmodified_tarball_name}.tar.gz" -C "${temp_dir}/source-build" "${unmodified_tarball_name}" -tar czf "${dir_name}.tar.gz" -C "${temp_dir}/source-build" "${dir_name}" + rm -rf "${temp_dir}" +fi + +rm -rf "${tarball_name}" +tar xf "${unmodified_tarball_name}.tar.gz" +mv "${unmodified_tarball_name}" "${tarball_name}" + +pushd "${tarball_name}" +# Remove files with funny licenses, crypto implementations and other +# not-very-useful artifacts to reduce tarball size +rm -r src/AspNetCore.*/src/SignalR/clients/java/signalr/gradle* +find src/AspNetCore.*/src -type d -name samples -print0 | xargs -0 rm -r +rm -r src/NuGet.Client.*/test/EndToEnd/ProjectTemplates/NetCoreWebApplication1.0.zip +find src/coreclr.*/ -depth -name tests -print0 | xargs -0 rm -r +popd -rm -rf "${temp_dir}" +tar czf "${tarball_name}.tar.gz" "${tarball_name}" diff --git a/dotnet3.1.spec b/dotnet3.1.spec index 2327516..b478374 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -23,16 +23,16 @@ %endif %global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') -%global host_version 3.1.0-preview3.19553.2 -%global runtime_version 3.1.0-preview3.19553.2 -%global aspnetcore_runtime_version 3.1.0-preview3.19555.2 -%global sdk_version 3.1.100-preview3-014645 -%global templates_version 3.1.0-preview3-014645 +%global host_version 3.1.0 +%global runtime_version 3.1.0 +%global aspnetcore_runtime_version %{runtime_version} +%global sdk_version 3.1.100 +%global templates_version %{runtime_version} -%global host_rpm_version 3.1.0 -%global aspnetcore_runtime_rpm_version 3.1.0 -%global runtime_rpm_version 3.1.0 -%global sdk_rpm_version 3.1.100 +%global host_rpm_version %{host_version} +%global aspnetcore_runtime_rpm_version %{aspnetcore_runtime_version} +%global runtime_rpm_version %{runtime_version} +%global sdk_rpm_version %{sdk_version} %if 0%{?fedora} || 0%{?rhel} < 8 %global use_bundled_libunwind 0 @@ -40,19 +40,26 @@ %global use_bundled_libunwind 1 %endif +%ifarch x86_64 +%global runtime_arch x64 +%endif +%ifarch aarch64 +%global runtime_arch arm64 +%endif + %if 0%{?fedora} -%global runtime_id fedora.%{fedora}-x64 +%global runtime_id fedora.%{fedora}-%{runtime_arch} %else %if 0%{?centos} -%global runtime_id centos.%{centos}-x64 +%global runtime_id centos.%{centos}-%{runtime_arch} %else -%global runtime_id rhel.%{rhel}-x64 +%global runtime_id rhel.%{rhel}-%{runtime_arch} %endif %endif Name: dotnet3.1 Version: %{sdk_rpm_version} -Release: 0.4.preview3%{?dist} +Release: 1%{?dist} Summary: .NET Core CLI tools and runtime License: MIT and ASL 2.0 and BSD URL: https://github.com/dotnet/ @@ -61,7 +68,7 @@ Packager: Fedora DotNet SIG # The source is generated on a Fedora box via: # ./build-dotnet-tarball dotnet-v%%{runtime_version} -Source0: dotnet-v%{sdk_version}-SDK.tar.gz +Source0: dotnet-v%{sdk_version}-SDK-fedora.31-%{runtime_arch}.tar.gz Source1: check-debug-symbols.py Source2: dotnet.sh.in @@ -286,7 +293,7 @@ applications using the .NET Core SDK. %prep -%setup -q -n dotnet-v%{sdk_version}-SDK +%setup -q -n dotnet-v%{sdk_version}-SDK-fedora.31-%{runtime_arch} # Fix bad hardcoded path in build sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/core-setup.*/src/corehost/common/pal.unix.cpp @@ -349,11 +356,11 @@ sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE2} > dotnet.sh %install install -dm 0755 %{buildroot}%{_libdir}/dotnet -ls bin/x64/Release -tar xf bin/x64/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ +ls bin/%{runtime_arch}/Release +tar xf bin/%{runtime_arch}/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ # Install managed symbols -tar xf bin/x64/Release/runtime/dotnet-runtime-symbols-%{runtime_version}-%{runtime_id}.tar.gz \ +tar xf bin/%{runtime_arch}/Release/runtime/dotnet-runtime-symbols-%{runtime_version}-%{runtime_id}.tar.gz \ -C %{buildroot}/%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version}/ # Fix executable permissions on files @@ -440,6 +447,9 @@ echo "Testing build results for debug symbols..." %dir %{_libdir}/dotnet/packs %changelog +* Thu Dec 05 2019 Omair Majid - 3.1.100-1 +- Update to .NET Core Runtime 3.1.0 and SDK 3.1.100 + * Mon Nov 18 2019 Omair Majid - 3.1.100-0.4.preview3 - Fix apphost permissions From bedf9f6f9c188944636b4a3c327e78d1a1f7bf48 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Jan 27 2020 15:30:53 +0000 Subject: [PATCH 4/12] Update to .NET Core SDK 3.1.101 and Runtime 3.1.1 Enable bootstrapping --- diff --git a/dotnet3.1.spec b/dotnet3.1.spec index b478374..7157050 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -1,3 +1,5 @@ +%bcond_without bootstrap + # Avoid provides/requires from private libraries %global privlibs libhostfxr %global privlibs %{privlibs}|libclrjit @@ -23,10 +25,10 @@ %endif %global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') -%global host_version 3.1.0 -%global runtime_version 3.1.0 +%global host_version 3.1.1 +%global runtime_version 3.1.1 %global aspnetcore_runtime_version %{runtime_version} -%global sdk_version 3.1.100 +%global sdk_version 3.1.101 %global templates_version %{runtime_version} %global host_rpm_version %{host_version} @@ -68,7 +70,7 @@ Packager: Fedora DotNet SIG # The source is generated on a Fedora box via: # ./build-dotnet-tarball dotnet-v%%{runtime_version} -Source0: dotnet-v%{sdk_version}-SDK-fedora.31-%{runtime_arch}.tar.gz +Source0: dotnet-v%{sdk_version}-SDK.tar.gz Source1: check-debug-symbols.py Source2: dotnet.sh.in @@ -92,6 +94,10 @@ ExclusiveArch: x86_64 BuildRequires: clang BuildRequires: cmake BuildRequires: coreutils +%if %{without bootstrap} +BuildRequires: dotnet-sdk-3.1 +BuildRequires: dotnet-sdk-3.1-source-built-artifacts +%endif BuildRequires: git %if 0%{?fedora} || 0%{?rhel} > 7 BuildRequires: glibc-langpack-en @@ -106,6 +112,7 @@ BuildRequires: libunwind-devel BuildRequires: lldb-devel BuildRequires: llvm BuildRequires: lttng-ust-devel +BuildRequires: make BuildRequires: openssl-devel BuildRequires: python3 BuildRequires: tar @@ -292,11 +299,40 @@ applications using the .NET Core SDK. %dotnet_targeting_pack netstandard-targeting-pack-2.1 %{sdk_rpm_version} NETStandard.Library 2.1 NETStandard.Library.Ref +%package -n dotnet-sdk-3.1-source-built-artifacts + +Version: %{sdk_rpm_version} +Summary: Internal package for building .NET Core 3.1 Software Development Kit + +%description -n dotnet-sdk-3.1-source-built-artifacts +The .NET Core source-built archive is a collection of packages needed +to build the .NET Core SDK itself. + +These are not meant for general use. + + %prep -%setup -q -n dotnet-v%{sdk_version}-SDK-fedora.31-%{runtime_arch} +%setup -q -n dotnet-v%{sdk_version}-SDK + +%if %{without bootstrap} +# Remove all prebuilts +find -iname '*.dll' -type f -delete +find -iname '*.so' -type f -delete +find -iname '*.tar.gz' -type f -delete +find -iname '*.nupkg' -type f -delete +rm -r .dotnet/ +rm -r packages/source-built +%endif + +%if %{without bootstrap} +sed -i -e 's|3.1.100-preview1-014459|3.1.101|' global.json +mkdir -p packages/archive +ln -s %{_libdir}/dotnet/source-built-artifacts/*.tar.gz packages/archive/ +ln -s %{_libdir}/dotnet/reference-packages/Private.SourceBuild.ReferencePackages*.tar.gz packages/archive +%endif # Fix bad hardcoded path in build -sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/core-setup.*/src/corehost/common/pal.unix.cpp +sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/dotnet-core-setup.*/src/corehost/common/pal.unix.cpp # Disable warnings sed -i 's|skiptests|skiptests ignorewarnings|' repos/coreclr.proj @@ -315,12 +351,12 @@ pushd src/coreclr.* %patch203 -p1 popd -pushd src/core-setup.* +pushd src/dotnet-core-setup.* %patch300 -p1 %patch301 -p1 popd -pushd src/cli.* +pushd src/dotnet-cli.* %patch500 -p1 popd @@ -340,6 +376,10 @@ find -iname 'nuget.config' -exec echo {}: \; -exec cat {} \; -exec echo \; %build cat /etc/os-release +%if %{without bootstrap} +cp -a %{_libdir}/dotnet .dotnet +%endif + export CFLAGS="%{dotnet_cflags}" export CXXFLAGS="%{dotnet_cflags}" export LDFLAGS="%{dotnet_ldflags}" @@ -369,16 +409,19 @@ find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pdb' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.props' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pubxml' -exec chmod -x {} \; find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.targets' -exec chmod -x {} \; -chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost -chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so -chmod ugo=rx %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost +chmod 0755 %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost +chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so +chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost +chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/nethost.h +chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.0/obj/Microsoft.AspNetCore.App.Ref.csproj.nuget.cache +chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.0/Microsoft.AspNetCore.App.Ref/3.1.0/Debug/netstandard2.0/Microsoft.AspNetCore.App.Ref.assets.cache install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ install dotnet.sh %{buildroot}%{_sysconfdir}/profile.d/ install -dm 0755 %{buildroot}/%{_datadir}/bash-completion/completions # dynamic completion needs the file to be named the same as the base command -install src/cli.*/scripts/register-completions.bash %{buildroot}/%{_datadir}/bash-completion/completions/dotnet +install src/dotnet-cli.*/scripts/register-completions.bash %{buildroot}/%{_datadir}/bash-completion/completions/dotnet # TODO: the zsh completion script needs to be ported to use #compdef #install -dm 755 %%{buildroot}/%%{_datadir}/zsh/site-functions @@ -394,6 +437,9 @@ echo "%{_libdir}/dotnet" >> install_location install -dm 0755 %{buildroot}%{_sysconfdir}/dotnet install install_location %{buildroot}%{_sysconfdir}/dotnet/ +install -dm 0755 %{buildroot}%{_libdir}/dotnet/source-built-artifacts +install bin/%{runtime_arch}/Release/Private.SourceBuilt.Artifacts.*.tar.gz %{buildroot}/%{_libdir}/dotnet/source-built-artifacts/ + # Check debug symbols in all elf objects. This is not in %%check # because native binaries are stripped by rpm-build after %%install. # So we need to do this check earlier. @@ -446,7 +492,15 @@ echo "Testing build results for debug symbols..." %{_libdir}/dotnet/sdk/%{sdk_version} %dir %{_libdir}/dotnet/packs +%files -n dotnet-sdk-3.1-source-built-artifacts +%dir %{_libdir}/dotnet +%{_libdir}/dotnet/source-built-artifacts + + %changelog +* Tue Jan 21 2020 Omair Majid - 3.1.101-1 +- Update to .NET Core Runtime 3.1.1 and SDK 3.1.101 + * Thu Dec 05 2019 Omair Majid - 3.1.100-1 - Update to .NET Core Runtime 3.1.0 and SDK 3.1.100 diff --git a/update-release b/update-release index dfb72a9..09eb509 100755 --- a/update-release +++ b/update-release @@ -41,10 +41,6 @@ if [[ -z ${sdk_version} ]]; then exit 1 fi -if [[ ! -f "dotnet-v${sdk_version}-SDK.tar.gz" ]] && [[ -f "dotnet-${sdk_version}-SDK.tar.gz" ]]; then - ./rename-tarball "dotnet-${sdk_version}-SDK.tar.gz" "dotnet-v${sdk_version}-SDK.tar.gz" -fi - if [[ ! -f "dotnet-v${sdk_version}-SDK.tar.gz" ]]; then ./build-dotnet-tarball "v${sdk_version}-SDK" fi From 8e3dd6920c8c1c91e3661e5312feb9532afe1310 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Jan 28 2020 20:33:50 +0000 Subject: [PATCH 5/12] Improve package - Remove non-upstreamed cgroupv2 patches - Add bundled(jquery) - Remove 'Packager' tag --- diff --git a/coreclr-cgroupv2-02.patch b/coreclr-cgroupv2-02.patch deleted file mode 100644 index 3097d86..0000000 --- a/coreclr-cgroupv2-02.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff --git a/src/gc/unix/cgroup.cpp b/src/gc/unix/cgroup.cpp -index e5760bebd8..d9a4e2dedd 100644 ---- a/src/gc/unix/cgroup.cpp -+++ b/src/gc/unix/cgroup.cpp -@@ -31,6 +31,9 @@ Abstract: - #ifndef SIZE_T_MAX - #define SIZE_T_MAX (~(size_t)0) - #endif -+#ifndef _countof -+#define _countof(_array) (sizeof(_array) / sizeof(_array[0])) -+#endif // !_countof - - #define PROC_MOUNTINFO_FILENAME "/proc/self/mountinfo" - #define PROC_CGROUP_FILENAME "/proc/self/cgroup" -@@ -74,7 +77,7 @@ public: - if (s_memory_cgroup_path == nullptr) - return result; - -- mem_limit_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); -+ mem_limit_filename = SearchForFile(s_memory_cgroup_path, files, _countof(files)); - if (mem_limit_filename == nullptr) - return result; - -@@ -97,7 +100,7 @@ public: - if (s_memory_cgroup_path == nullptr) - return result; - -- mem_usage_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); -+ mem_usage_filename = SearchForFile(s_memory_cgroup_path, files, _countof(files)); - if (mem_usage_filename == nullptr) - return result; - -diff --git a/src/pal/src/misc/cgroup.cpp b/src/pal/src/misc/cgroup.cpp -index e32b74aabe..0b922123c8 100644 ---- a/src/pal/src/misc/cgroup.cpp -+++ b/src/pal/src/misc/cgroup.cpp -@@ -62,7 +61,7 @@ public: - if (s_memory_cgroup_path == nullptr) - return result; - -- mem_limit_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); -+ mem_limit_filename = SearchForFile(s_memory_cgroup_path, files, _countof(files)); - if (mem_limit_filename == nullptr) - return result; - -@@ -85,7 +84,7 @@ public: - if (s_memory_cgroup_path == nullptr) - return result; - -- mem_usage_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); -+ mem_usage_filename = SearchForFile(s_memory_cgroup_path, files, _countof(files)); - if (mem_usage_filename == nullptr) - return result; - diff --git a/coreclr-cgroupv2.patch b/coreclr-cgroupv2.patch deleted file mode 100644 index 2233808..0000000 --- a/coreclr-cgroupv2.patch +++ /dev/null @@ -1,876 +0,0 @@ -From 7b33e078b41819284175533215047359bb952b5d Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Fri, 26 Jul 2019 17:12:48 -0400 -Subject: [PATCH] Add cgroup v2 support to CoreCLR - -Upstream cgroup v2 documentation is available at: -https://www.kernel.org/doc/Documentation/cgroup-v2.txt - -Some notable differences between cgroup v1 and v2, from a CoreCLR point -of view, include: - -- cgroup v2 has a single hierarchy, so we just look for a single "cgroup2" - entry in /proc/self/mountinfo (without looking for a subsystem match). - -- Since cgroup v2 has a single hierarchy, /proc/self/cgroup generally - has a single line "0::/path". There's no need to match subsystems or - hierarchy ids here. - -- "memory.limit_in_bytes" is now "memory.max". It can contain the - literal "max" to indicate no limit. - -- "memory.usage_in_bytes" is now "memory.current" - -- "cpu.cfs_quota_us" and "cpu.cfs_period_us" have been combined into a - single "cpu.max" file with the format "$MAX $PERIOD". The max value - can be a literal "max" to indicate a limit is not active. ---- - src/gc/unix/cgroup.cpp | 292 +++++++++++++++++++++++++++++------- - src/pal/src/misc/cgroup.cpp | 287 ++++++++++++++++++++++++++++------- - 2 files changed, 471 insertions(+), 108 deletions(-) - -diff --git a/src/gc/unix/cgroup.cpp b/src/gc/unix/cgroup.cpp -index 1e60898948..e5760bebd8 100644 ---- a/src/gc/unix/cgroup.cpp -+++ b/src/gc/unix/cgroup.cpp -@@ -35,20 +35,24 @@ Abstract: - #define PROC_MOUNTINFO_FILENAME "/proc/self/mountinfo" - #define PROC_CGROUP_FILENAME "/proc/self/cgroup" - #define PROC_STATM_FILENAME "/proc/self/statm" --#define MEM_LIMIT_FILENAME "/memory.limit_in_bytes" --#define MEM_USAGE_FILENAME "/memory.usage_in_bytes" --#define CFS_QUOTA_FILENAME "/cpu.cfs_quota_us" --#define CFS_PERIOD_FILENAME "/cpu.cfs_period_us" -+#define CGROUP1_MEMORY_LIMIT_FILENAME "/memory.limit_in_bytes" -+#define CGROUP2_MEMORY_LIMIT_FILENAME "/memory.max" -+#define CGROUP1_MEMORY_USAGE_FILENAME "/memory.usage_in_bytes" -+#define CGROUP2_MEMORY_USAGE_FILENAME "/memory.current" -+#define CGROUP1_CFS_QUOTA_FILENAME "/cpu.cfs_quota_us" -+#define CGROUP1_CFS_PERIOD_FILENAME "/cpu.cfs_period_us" -+#define CGROUP2_CPU_MAX_FILENAME "/cpu.max" -+ - - class CGroup - { -- static char* s_memory_cgroup_path; -- static char* s_cpu_cgroup_path; -+ static char *s_memory_cgroup_path; -+ static char *s_cpu_cgroup_path; - public: - static void Initialize() - { -- s_memory_cgroup_path = FindCgroupPath(&IsMemorySubsystem); -- s_cpu_cgroup_path = FindCgroupPath(&IsCpuSubsystem); -+ s_memory_cgroup_path = FindCGroupPath(&IsCGroup1MemorySubsystem); -+ s_cpu_cgroup_path = FindCGroupPath(&IsCGroup1CpuSubsystem); - } - - static void Cleanup() -@@ -59,20 +63,21 @@ public: - - static bool GetPhysicalMemoryLimit(size_t *val) - { -+ const char *files[] = { -+ CGROUP1_MEMORY_LIMIT_FILENAME, -+ CGROUP2_MEMORY_LIMIT_FILENAME -+ }; -+ - char *mem_limit_filename = nullptr; - bool result = false; - - if (s_memory_cgroup_path == nullptr) - return result; - -- size_t len = strlen(s_memory_cgroup_path); -- len += strlen(MEM_LIMIT_FILENAME); -- mem_limit_filename = (char*)malloc(len+1); -+ mem_limit_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); - if (mem_limit_filename == nullptr) - return result; - -- strcpy(mem_limit_filename, s_memory_cgroup_path); -- strcat(mem_limit_filename, MEM_LIMIT_FILENAME); - result = ReadMemoryValueFromFile(mem_limit_filename, val); - free(mem_limit_filename); - return result; -@@ -80,6 +85,11 @@ public: - - static bool GetPhysicalMemoryUsage(size_t *val) - { -+ const char *files[] = { -+ CGROUP1_MEMORY_USAGE_FILENAME, -+ CGROUP2_MEMORY_USAGE_FILENAME -+ }; -+ - char *mem_usage_filename = nullptr; - bool result = false; - -@@ -87,14 +97,10 @@ public: - if (s_memory_cgroup_path == nullptr) - return result; - -- size_t len = strlen(s_memory_cgroup_path); -- len += strlen(MEM_USAGE_FILENAME); -- mem_usage_filename = (char*)malloc(len+1); -+ mem_usage_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); - if (mem_usage_filename == nullptr) - return result; - -- strcpy(mem_usage_filename, s_memory_cgroup_path); -- strcat(mem_usage_filename, MEM_USAGE_FILENAME); - result = ReadMemoryValueFromFile(mem_usage_filename, val); - free(mem_usage_filename); - return result; -@@ -112,16 +118,149 @@ public: - } - - static bool GetCpuLimit(uint32_t *val) -+ { -+ if (GetCGroup1CpuLimit(val)) -+ { -+ return true; -+ } -+ -+ if (GetCGroup2CpuLimit(val)) -+ { -+ return true; -+ } -+ -+ return false; -+ } -+ -+private: -+ static bool IsCGroup1MemorySubsystem(const char *strTok){ -+ return strcmp("memory", strTok) == 0; -+ } -+ -+ static bool IsCGroup1CpuSubsystem(const char *strTok){ -+ return strcmp("cpu", strTok) == 0; -+ } -+ -+ static bool GetCGroup2CpuLimit(uint32_t *val) -+ { -+ char *line = nullptr; -+ char *filename = nullptr; -+ FILE *file = nullptr; -+ char *max_quota_string = nullptr; -+ char *period_string = nullptr; -+ -+ size_t lineLen = 0; -+ int sscanRet = 0; -+ long long max_quota = 0; -+ long long period = 0; -+ double cpu_count = 0; -+ -+ bool result = false; -+ -+ if (s_cpu_cgroup_path == nullptr) -+ { -+ return false; -+ } -+ -+ size_t filename_len = strlen(s_cpu_cgroup_path) + strlen(CGROUP2_CPU_MAX_FILENAME); -+ filename = (char*)malloc(filename_len + 1); -+ if (filename == nullptr) -+ { -+ goto done; -+ } -+ -+ strcpy(filename, s_cpu_cgroup_path); -+ strcat(filename, CGROUP2_CPU_MAX_FILENAME); -+ -+ file = fopen(filename, "r"); -+ if (file == nullptr) -+ { -+ goto done; -+ } -+ -+ if (getline(&line, &lineLen, file) == -1) -+ { -+ goto done; -+ } -+ -+ // The expected format is: -+ // $MAX $PERIOD -+ // Where "$MAX" may be the string literal "max" -+ -+ max_quota_string = (char*) malloc(lineLen + 1); -+ if (max_quota_string == nullptr) -+ { -+ goto done; -+ } -+ period_string = (char*) malloc(lineLen + 1); -+ if (period_string == nullptr) -+ { -+ goto done; -+ } -+ -+ sscanRet = sscanf(line, "%s %s", max_quota_string, period_string); -+ if (sscanRet != 2) -+ { -+ assert(!"Unable to parse " CGROUP2_CPU_MAX_FILENAME " file contents with sscanf."); -+ goto done; -+ } -+ -+ // "max" means no cpu limit -+ if (strncmp("max", max_quota_string, lineLen + 1) == 0) -+ { -+ goto done; -+ } -+ -+ errno = 0; -+ max_quota = atoll(max_quota_string); -+ if (errno != 0) -+ { -+ goto done; -+ } -+ -+ errno = 0; -+ period = atoll(period_string); -+ if (errno != 0) -+ { -+ goto done; -+ } -+ -+ // Cannot have less than 1 CPU -+ if (max_quota <= period) -+ { -+ result = true; -+ *val = 1; -+ goto done; -+ } -+ -+ // Calculate cpu count based on quota and round it up -+ cpu_count = (double) max_quota / period + 0.999999999; -+ *val = (cpu_count < UINT32_MAX) ? (uint32_t)cpu_count : UINT32_MAX; -+ -+ result = true; -+ -+ done: -+ if (file) -+ fclose(file); -+ free(filename); -+ free(line); -+ free(max_quota_string); -+ free(period_string); -+ -+ return result; -+ } -+ -+ static bool GetCGroup1CpuLimit(uint32_t *val) - { - long long quota; - long long period; - double cpu_count; - -- quota = ReadCpuCGroupValue(CFS_QUOTA_FILENAME); -+ quota = ReadCpuCGroupValue(CGROUP1_CFS_QUOTA_FILENAME); - if (quota <= 0) - return false; - -- period = ReadCpuCGroupValue(CFS_PERIOD_FILENAME); -+ period = ReadCpuCGroupValue(CGROUP1_CFS_PERIOD_FILENAME); - if (period <= 0) - return false; - -@@ -138,27 +277,19 @@ public: - - return true; - } -- --private: -- static bool IsMemorySubsystem(const char *strTok){ -- return strcmp("memory", strTok) == 0; -- } - -- static bool IsCpuSubsystem(const char *strTok){ -- return strcmp("cpu", strTok) == 0; -- } -- -- static char* FindCgroupPath(bool (*is_subsystem)(const char *)){ -+ static char* FindCGroupPath(bool (*is_subsystem)(const char *)){ - char *cgroup_path = nullptr; - char *hierarchy_mount = nullptr; - char *hierarchy_root = nullptr; - char *cgroup_path_relative_to_mount = nullptr; -+ bool is_cgroupv2 = false; - -- FindHierarchyMount(is_subsystem, &hierarchy_mount, &hierarchy_root); -+ FindHierarchyMount(is_subsystem, &is_cgroupv2, &hierarchy_mount, &hierarchy_root); - if (hierarchy_mount == nullptr || hierarchy_root == nullptr) - goto done; - -- cgroup_path_relative_to_mount = FindCGroupPathForSubsystem(is_subsystem); -+ cgroup_path_relative_to_mount = FindCGroupPathForSubsystem(is_cgroupv2, is_subsystem); - if (cgroup_path_relative_to_mount == nullptr) - goto done; - -@@ -179,7 +310,7 @@ private: - return cgroup_path; - } - -- static void FindHierarchyMount(bool (*is_subsystem)(const char *), char** pmountpath, char** pmountroot) -+ static void FindHierarchyMount(bool (*is_subsystem)(const char *), bool* is_cgroupv2, char** pmountpath, char** pmountroot) - { - char *line = nullptr; - size_t lineLen = 0, maxLineLen = 0; -@@ -219,14 +350,18 @@ private: - assert(!"Failed to parse mount info file contents with sscanf."); - goto done; - } -- -+ - if (strncmp(filesystemType, "cgroup", 6) == 0) - { -+ if (strncmp(filesystemType, "cgroup2", 8) == 0) -+ { -+ *is_cgroupv2 = true; -+ } - char* context = nullptr; - char* strTok = strtok_r(options, ",", &context); - while (strTok != nullptr) - { -- if (is_subsystem(strTok)) -+ if (*is_cgroupv2 || is_subsystem(strTok)) - { - mountpath = (char*)malloc(lineLen+1); - if (mountpath == nullptr) -@@ -234,7 +369,7 @@ private: - mountroot = (char*)malloc(lineLen+1); - if (mountroot == nullptr) - goto done; -- -+ - sscanfRet = sscanf(line, - "%*s %*s %*s %s %s ", - mountroot, -@@ -261,8 +396,8 @@ private: - if (mountinfofile) - fclose(mountinfofile); - } -- -- static char* FindCGroupPathForSubsystem(bool (*is_subsystem)(const char *)) -+ -+ static char* FindCGroupPathForSubsystem(bool is_cgroupv2, bool (*is_subsystem)(const char *)) - { - char *line = nullptr; - size_t lineLen = 0; -@@ -274,7 +409,7 @@ private: - FILE *cgroupfile = fopen(PROC_CGROUP_FILENAME, "r"); - if (cgroupfile == nullptr) - goto done; -- -+ - while (!result && getline(&line, &lineLen, cgroupfile) != -1) - { - if (subsystem_list == nullptr || lineLen > maxLineLen) -@@ -289,28 +424,43 @@ private: - goto done; - maxLineLen = lineLen; - } -- -- // See man page of proc to get format for /proc/self/cgroup file -- int sscanfRet = sscanf(line, -- "%*[^:]:%[^:]:%s", -- subsystem_list, -- cgroup_path); -- if (sscanfRet != 2) -+ -+ if (is_cgroupv2) - { -- assert(!"Failed to parse cgroup info file contents with sscanf."); -- goto done; -+ // See https://www.kernel.org/doc/Documentation/cgroup-v2.txt -+ // Look for "0::/some/path" -+ int sscanfRet = sscanf(line, -+ "0::%s", -+ cgroup_path); -+ if (sscanfRet == 1) -+ { -+ result = true; -+ } - } -- -- char* context = nullptr; -- char* strTok = strtok_r(subsystem_list, ",", &context); -- while (strTok != nullptr) -+ else - { -- if (is_subsystem(strTok)) -+ // See man page of proc to get format for /proc/self/cgroup file -+ int sscanfRet = sscanf(line, -+ "%*[^:]:%[^:]:%s", -+ subsystem_list, -+ cgroup_path); -+ if (sscanfRet != 2) - { -- result = true; -- break; -+ assert(!"Failed to parse cgroup info file contents with sscanf."); -+ goto done; -+ } -+ -+ char* context = nullptr; -+ char* strTok = strtok_r(subsystem_list, ",", &context); -+ while (strTok != nullptr) -+ { -+ if (is_subsystem(strTok)) -+ { -+ result = true; -+ break; -+ } -+ strTok = strtok_r(nullptr, ",", &context); - } -- strTok = strtok_r(nullptr, ",", &context); - } - } - done: -@@ -325,6 +475,36 @@ private: - fclose(cgroupfile); - return cgroup_path; - } -+ -+ static char* SearchForFile(char* search_root, const char* possible_files[], size_t possible_files_len) -+ { -+ if (search_root == nullptr) -+ { -+ return nullptr; -+ } -+ -+ for (size_t i = 0; i < possible_files_len; i++) -+ { -+ const char* possible_file = possible_files[i]; -+ size_t len = strlen(search_root); -+ len += strlen(possible_file); -+ char* full_filename = (char*)malloc(len+1); -+ if (full_filename == nullptr) -+ { -+ return nullptr; -+ } -+ strcpy(full_filename, search_root); -+ strcat(full_filename, possible_file); -+ if (access(full_filename, R_OK) != -1) -+ { -+ return full_filename; -+ } -+ -+ free(full_filename); -+ } -+ -+ return nullptr; -+ } - - static bool ReadMemoryValueFromFile(const char* filename, size_t* val) - { -diff --git a/src/pal/src/misc/cgroup.cpp b/src/pal/src/misc/cgroup.cpp -index 3fc43a7b05..e32b74aabe 100644 ---- a/src/pal/src/misc/cgroup.cpp -+++ b/src/pal/src/misc/cgroup.cpp -@@ -23,10 +23,15 @@ - #define PROC_MOUNTINFO_FILENAME "/proc/self/mountinfo" - #define PROC_CGROUP_FILENAME "/proc/self/cgroup" - #define PROC_STATM_FILENAME "/proc/self/statm" --#define MEM_LIMIT_FILENAME "/memory.limit_in_bytes" --#define MEM_USAGE_FILENAME "/memory.usage_in_bytes" --#define CFS_QUOTA_FILENAME "/cpu.cfs_quota_us" --#define CFS_PERIOD_FILENAME "/cpu.cfs_period_us" -+#define CGROUP1_MEMORY_LIMIT_FILENAME "/memory.limit_in_bytes" -+#define CGROUP2_MEMORY_LIMIT_FILENAME "/memory.max" -+#define CGROUP1_MEMORY_USAGE_FILENAME "/memory.usage_in_bytes" -+#define CGROUP2_MEMORY_USAGE_FILENAME "/memory.current" -+#define CGROUP1_CFS_QUOTA_FILENAME "/cpu.cfs_quota_us" -+#define CGROUP1_CFS_PERIOD_FILENAME "/cpu.cfs_period_us" -+#define CGROUP2_CPU_MAX_FILENAME "/cpu.max" -+ -+ - class CGroup - { - static char *s_memory_cgroup_path; -@@ -34,8 +39,8 @@ - public: - static void Initialize() - { -- s_memory_cgroup_path = FindCgroupPath(&IsMemorySubsystem); -- s_cpu_cgroup_path = FindCgroupPath(&IsCpuSubsystem); -+ s_memory_cgroup_path = FindCGroupPath(&IsCGroup1MemorySubsystem); -+ s_cpu_cgroup_path = FindCGroupPath(&IsCGroup1CpuSubsystem); - } - - static void Cleanup() -@@ -43,23 +48,24 @@ - PAL_free(s_memory_cgroup_path); - PAL_free(s_cpu_cgroup_path); - } -- -+ - static bool GetPhysicalMemoryLimit(size_t *val) - { -+ const char *files[] = { -+ CGROUP1_MEMORY_LIMIT_FILENAME, -+ CGROUP2_MEMORY_LIMIT_FILENAME -+ }; -+ - char *mem_limit_filename = nullptr; - bool result = false; - - if (s_memory_cgroup_path == nullptr) - return result; - -- size_t len = strlen(s_memory_cgroup_path); -- len += strlen(MEM_LIMIT_FILENAME); -- mem_limit_filename = (char*)PAL_malloc(len+1); -+ mem_limit_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); - if (mem_limit_filename == nullptr) - return result; - -- strcpy_s(mem_limit_filename, len+1, s_memory_cgroup_path); -- strcat_s(mem_limit_filename, len+1, MEM_LIMIT_FILENAME); - result = ReadMemoryValueFromFile(mem_limit_filename, val); - PAL_free(mem_limit_filename); - return result; -@@ -67,36 +73,172 @@ - - static bool GetPhysicalMemoryUsage(size_t *val) - { -+ const char *files[] = { -+ CGROUP1_MEMORY_USAGE_FILENAME, -+ CGROUP2_MEMORY_USAGE_FILENAME -+ }; -+ - char *mem_usage_filename = nullptr; - bool result = false; - - if (s_memory_cgroup_path == nullptr) - return result; - -- size_t len = strlen(s_memory_cgroup_path); -- len += strlen(MEM_USAGE_FILENAME); -- mem_usage_filename = (char*)malloc(len+1); -+ mem_usage_filename = SearchForFile(s_memory_cgroup_path, files, sizeof(files)); - if (mem_usage_filename == nullptr) - return result; - -- strcpy(mem_usage_filename, s_memory_cgroup_path); -- strcat(mem_usage_filename, MEM_USAGE_FILENAME); - result = ReadMemoryValueFromFile(mem_usage_filename, val); -- free(mem_usage_filename); -+ PAL_free(mem_usage_filename); - return result; - } - - static bool GetCpuLimit(UINT *val) - { -+ if (GetCGroup1CpuLimit(val)) -+ { -+ return true; -+ } -+ -+ if (GetCGroup2CpuLimit(val)) -+ { -+ return true; -+ } -+ -+ return false; -+ } -+ -+private: -+ static bool IsCGroup1MemorySubsystem(const char *strTok){ -+ return strcmp("memory", strTok) == 0; -+ } -+ -+ static bool IsCGroup1CpuSubsystem(const char *strTok){ -+ return strcmp("cpu", strTok) == 0; -+ } -+ -+ static bool GetCGroup2CpuLimit(UINT *val) -+ { -+ char *line = nullptr; -+ char *filename = nullptr; -+ FILE *file = nullptr; -+ char *max_quota_string = nullptr; -+ char *period_string = nullptr; -+ -+ size_t lineLen = 0; -+ int sscanRet = 0; -+ long long max_quota = 0; -+ long long period = 0; -+ double cpu_count = 0; -+ -+ bool result = false; -+ -+ if (s_cpu_cgroup_path == nullptr) -+ { -+ return false; -+ } -+ -+ size_t filename_len = strlen(s_cpu_cgroup_path) + strlen(CGROUP2_CPU_MAX_FILENAME); -+ filename = (char*)PAL_malloc(filename_len + 1); -+ if (filename == nullptr) -+ { -+ goto done; -+ } -+ -+ strcpy_s(filename, filename_len + 1, s_cpu_cgroup_path); -+ strcat_s(filename, filename_len + 1, CGROUP2_CPU_MAX_FILENAME); -+ -+ file = fopen(filename, "r"); -+ if (file == nullptr) -+ { -+ goto done; -+ } -+ -+ if (getline(&line, &lineLen, file) == -1) -+ { -+ goto done; -+ } -+ -+ // The expected format is: -+ // $MAX $PERIOD -+ // Where "$MAX" may be the string literal "max" -+ -+ max_quota_string = (char*)PAL_malloc(lineLen + 1); -+ if (max_quota_string == nullptr) -+ { -+ goto done; -+ } -+ period_string = (char*)PAL_malloc(lineLen + 1); -+ if (period_string == nullptr) -+ { -+ goto done; -+ } -+ -+ sscanRet = sscanf_s(line, "%s %s", -+ max_quota_string, lineLen + 1, -+ period_string, lineLen + 1); -+ if (sscanRet != 2) -+ { -+ _ASSERTE(!"Unable to parse " CGROUP2_CPU_MAX_FILENAME " file contents with sscanf_s."); -+ goto done; -+ } -+ -+ // "max" means no cpu limit -+ if (strncmp("max", max_quota_string, lineLen + 1) == 0) -+ { -+ goto done; -+ } -+ -+ errno = 0; -+ max_quota = atoll(max_quota_string); -+ if (errno != 0) -+ { -+ goto done; -+ } -+ -+ errno = 0; -+ period = atoll(period_string); -+ if (errno != 0) -+ { -+ goto done; -+ } -+ -+ // Cannot have less than 1 CPU -+ if (max_quota <= period) -+ { -+ result = true; -+ *val = 1; -+ goto done; -+ } -+ -+ // Calculate cpu count based on quota and round it up -+ cpu_count = (double) max_quota / period + 0.999999999; -+ *val = (cpu_count < UINT_MAX) ? (UINT)cpu_count : UINT_MAX; -+ -+ result = true; -+ -+ done: -+ if (file) -+ fclose(file); -+ PAL_free(filename); -+ PAL_free(line); -+ PAL_free(max_quota_string); -+ PAL_free(period_string); -+ -+ return result; -+ } -+ -+ static bool GetCGroup1CpuLimit(UINT *val) -+ { - long long quota; - long long period; - double cpu_count; - -- quota = ReadCpuCGroupValue(CFS_QUOTA_FILENAME); -+ quota = ReadCpuCGroupValue(CGROUP1_CFS_QUOTA_FILENAME); - if (quota <= 0) - return false; - -- period = ReadCpuCGroupValue(CFS_PERIOD_FILENAME); -+ period = ReadCpuCGroupValue(CGROUP1_CFS_PERIOD_FILENAME); - if (period <= 0) - return false; - -@@ -114,27 +256,19 @@ - return true; - } - --private: -- static bool IsMemorySubsystem(const char *strTok){ -- return strcmp("memory", strTok) == 0; -- } -- -- static bool IsCpuSubsystem(const char *strTok){ -- return strcmp("cpu", strTok) == 0; -- } -- -- static char* FindCgroupPath(bool (*is_subsystem)(const char *)){ -+ static char* FindCGroupPath(bool (*is_subsystem)(const char *)){ - char *cgroup_path = nullptr; - char *hierarchy_mount = nullptr; - char *hierarchy_root = nullptr; - char *cgroup_path_relative_to_mount = nullptr; -+ bool is_cgroupv2 = false; - size_t len; - -- FindHierarchyMount(is_subsystem, &hierarchy_mount, &hierarchy_root); -+ FindHierarchyMount(is_subsystem, &is_cgroupv2, &hierarchy_mount, &hierarchy_root); - if (hierarchy_mount == nullptr || hierarchy_root == nullptr) - goto done; - -- cgroup_path_relative_to_mount = FindCGroupPathForSubsystem(is_subsystem); -+ cgroup_path_relative_to_mount = FindCGroupPathForSubsystem(is_cgroupv2, is_subsystem); - if (cgroup_path_relative_to_mount == nullptr) - goto done; - -@@ -157,7 +291,7 @@ - return cgroup_path; - } - -- static void FindHierarchyMount(bool (*is_subsystem)(const char *), char** pmountpath, char** pmountroot) -+ static void FindHierarchyMount(bool (*is_subsystem)(const char *), bool* is_cgroupv2, char** pmountpath, char** pmountroot) - { - char *line = nullptr; - size_t lineLen = 0, maxLineLen = 0; -@@ -199,11 +333,15 @@ - - if (strncmp(filesystemType, "cgroup", 6) == 0) - { -+ if (strncmp(filesystemType, "cgroup2", 8) == 0) -+ { -+ *is_cgroupv2 = true; -+ } - char* context = nullptr; - char* strTok = strtok_s(options, ",", &context); - while (strTok != nullptr) - { -- if (is_subsystem(strTok)) -+ if (*is_cgroupv2 || is_subsystem(strTok)) - { - mountpath = (char*)PAL_malloc(lineLen+1); - if (mountpath == nullptr) -@@ -239,7 +377,7 @@ - fclose(mountinfofile); - } - -- static char* FindCGroupPathForSubsystem(bool (*is_subsystem)(const char *)) -+ static char* FindCGroupPathForSubsystem(bool is_cgroupv2, bool (*is_subsystem)(const char *)) - { - char *line = nullptr; - size_t lineLen = 0; -@@ -267,27 +405,42 @@ - maxLineLen = lineLen; - } - -- // See man page of proc to get format for /proc/self/cgroup file -- int sscanfRet = sscanf_s(line, -- "%*[^:]:%[^:]:%s", -- subsystem_list, lineLen+1, -- cgroup_path, lineLen+1); -- if (sscanfRet != 2) -+ if (is_cgroupv2) - { -- _ASSERTE(!"Failed to parse cgroup info file contents with sscanf_s."); -- goto done; -+ // See https://www.kernel.org/doc/Documentation/cgroup-v2.txt -+ // Look for "0::/some/path" -+ int sscanfRet = sscanf_s(line, -+ "0::%s", -+ cgroup_path, lineLen+1); -+ if (sscanfRet == 1) -+ { -+ result = true; -+ } - } -- -- char* context = nullptr; -- char* strTok = strtok_s(subsystem_list, ",", &context); -- while (strTok != nullptr) -+ else - { -- if (is_subsystem(strTok)) -+ // See man page of proc to get format for /proc/self/cgroup file -+ int sscanfRet = sscanf_s(line, -+ "%*[^:]:%[^:]:%s", -+ subsystem_list, lineLen+1, -+ cgroup_path, lineLen+1); -+ if (sscanfRet != 2) - { -- result = true; -- break; -+ _ASSERTE(!"Failed to parse cgroup info file contents with sscanf_s."); -+ goto done; -+ } -+ -+ char* context = nullptr; -+ char* strTok = strtok_s(subsystem_list, ",", &context); -+ while (strTok != nullptr) -+ { -+ if (is_subsystem(strTok)) -+ { -+ result = true; -+ break; -+ } -+ strTok = strtok_s(nullptr, ",", &context); - } -- strTok = strtok_s(nullptr, ",", &context); - } - } - done: -@@ -303,6 +456,36 @@ - return cgroup_path; - } - -+ static char* SearchForFile(char* search_root, const char* possible_files[], size_t possible_files_len) -+ { -+ if (search_root == nullptr) -+ { -+ return nullptr; -+ } -+ -+ for (size_t i = 0; i < possible_files_len; i++) -+ { -+ const char* possible_file = possible_files[i]; -+ size_t len = strlen(search_root); -+ len += strlen(possible_file); -+ char* full_filename = (char*)PAL_malloc(len+1); -+ if (full_filename == nullptr) -+ { -+ return nullptr; -+ } -+ strcpy_s(full_filename, len+1, search_root); -+ strcat_s(full_filename, len+1, possible_file); -+ if (access(full_filename, R_OK) != -1) -+ { -+ return full_filename; -+ } -+ -+ PAL_free(full_filename); -+ } -+ -+ return nullptr; -+ } -+ - static bool ReadMemoryValueFromFile(const char* filename, size_t* val) - { - return ::ReadMemoryValueFromFile(filename, val); --- -2.23.0 diff --git a/dotnet3.1.spec b/dotnet3.1.spec index 7157050..46eefcf 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -62,12 +62,10 @@ Name: dotnet3.1 Version: %{sdk_rpm_version} Release: 1%{?dist} -Summary: .NET Core CLI tools and runtime -License: MIT and ASL 2.0 and BSD +Summary: .NET Core Runtime and SDK +License: MIT and ASL 2.0 and BSD and LGPLv2+ and CC-BY and CC0 and MS-PL and EPL-1.0 and GPL+ and GPLv2 and ISC and OFL and zlib URL: https://github.com/dotnet/ -Packager: Fedora DotNet SIG - # The source is generated on a Fedora box via: # ./build-dotnet-tarball dotnet-v%%{runtime_version} Source0: dotnet-v%{sdk_version}-SDK.tar.gz @@ -81,8 +79,6 @@ Patch103: corefx-39633-cgroupv2-mountpoints.patch Patch200: coreclr-27048-sysctl-deprecation.patch Patch201: coreclr-hardening-flags.patch -Patch202: coreclr-cgroupv2.patch -Patch203: coreclr-cgroupv2-02.patch Patch300: core-setup-do-not-strip.patch Patch301: core-setup-hardening-flags.patch @@ -193,7 +189,7 @@ Summary: NET Core 3.1 runtime Requires: dotnet-hostfxr-3.1%{?_isa} >= %{host_rpm_version}-%{release} # libicu is dlopen()ed -Requires: libicu +Requires: libicu%{?_isa} %if %{use_bundled_libunwind} Provides: bundled(libunwind) = 1.3 @@ -254,6 +250,9 @@ applications and micro-services. Version: %{sdk_rpm_version} Summary: .NET Core 3.1 Software Development Kit +Provides: bundled(js-jquery) +Provides: bundled(npm) + Requires: dotnet-runtime-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} Requires: aspnetcore-runtime-3.1%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} @@ -275,13 +274,13 @@ It particularly focuses on creating console applications, web applications and micro-services. -%define dotnet_targeting_pack() %{expand: +%global dotnet_targeting_pack() %{expand: %package -n %{1} Version: %{2} Summary: Targeting Pack for %{3} %{4} -Requires: dotnet-host +Requires: dotnet-host%{?_isa} %description -n %{1} This package provides a targetting pack for %{3} %{4} @@ -347,8 +346,6 @@ popd pushd src/coreclr.* %patch200 -p1 %patch201 -p1 -%patch202 -p1 -%patch203 -p1 popd pushd src/dotnet-core-setup.* From 569554ef2b548ad5aecb66d65e2437682d01a5d9 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Jan 29 2020 22:02:47 +0000 Subject: [PATCH 6/12] Add BuildRequires on dotnet/source-build-reference-packages --- diff --git a/dotnet3.1.spec b/dotnet3.1.spec index 46eefcf..089fd35 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -91,6 +91,7 @@ BuildRequires: clang BuildRequires: cmake BuildRequires: coreutils %if %{without bootstrap} +BuildRequires: dotnet-build-reference-packages BuildRequires: dotnet-sdk-3.1 BuildRequires: dotnet-sdk-3.1-source-built-artifacts %endif @@ -319,6 +320,7 @@ find -iname '*.dll' -type f -delete find -iname '*.so' -type f -delete find -iname '*.tar.gz' -type f -delete find -iname '*.nupkg' -type f -delete +find -iname '*.zip' -type f -delete rm -r .dotnet/ rm -r packages/source-built %endif From 0004ee9d047da6f274ae19169c36c3774fa76684 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Jan 31 2020 19:27:38 +0000 Subject: [PATCH 7/12] Fix spelling mistake --- diff --git a/dotnet3.1.spec b/dotnet3.1.spec index 089fd35..cf73d25 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -284,7 +284,7 @@ Summary: Targeting Pack for %{3} %{4} Requires: dotnet-host%{?_isa} %description -n %{1} -This package provides a targetting pack for %{3} %{4} +This package provides a targeting pack for %{3} %{4} that allows developers to compile against and target %{3} %{4} applications using the .NET Core SDK. @@ -561,7 +561,7 @@ echo "Testing build results for debug symbols..." * Wed Jun 26 2019 Omair Majid - 3.0.0-0.6.preview6 - Update to .NET Core Runtime 3.0.0-preview6-27804-01 and SDK 3.0.100-preview6-012264 - Set dotnet installation location in /etc/dotnet/install_location -- Update targetting packs +- Update targeting packs - Install managed symbols - Completely conditionalize libunwind bundling From efe9e6e5c71f3c141efd99b8d4bf27a78bd016eb Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Jan 31 2020 20:27:02 +0000 Subject: [PATCH 8/12] Remove strip patch Stripping is opt-in already. Deleting the code that is never exercised, because we don't opt in, should not have any issues. The built-time test making sure that debuginfo is still included passes with this change. --- diff --git a/core-setup-do-not-strip.patch b/core-setup-do-not-strip.patch deleted file mode 100644 index 2b3a8b3..0000000 --- a/core-setup-do-not-strip.patch +++ /dev/null @@ -1,58 +0,0 @@ ---- a/src/settings.cmake -+++ b/src/settings.cmake -@@ -69,55 +69,10 @@ - endif (CMAKE_SYSTEM_NAME STREQUAL Darwin) - endif () - --function(strip_symbols targetName outputFilename) -- if(CLR_CMAKE_PLATFORM_UNIX) -- if(STRIP_SYMBOLS) -- -- # On the older version of cmake (2.8.12) used on Ubuntu 14.04 the TARGET_FILE -- # generator expression doesn't work correctly returning the wrong path and on -- # the newer cmake versions the LOCATION property isn't supported anymore. -- if(CMAKE_VERSION VERSION_EQUAL 3.0 OR CMAKE_VERSION VERSION_GREATER 3.0) -- set(strip_source_file $) -- else() -- get_property(strip_source_file TARGET ${targetName} PROPERTY LOCATION) -- endif() -- -- if(CMAKE_SYSTEM_NAME STREQUAL Darwin) -- set(strip_destination_file ${strip_source_file}.dwarf) -- -- add_custom_command( -- TARGET ${targetName} -- POST_BUILD -- VERBATIM -- COMMAND ${DSYMUTIL} --flat --minimize ${strip_source_file} -- COMMAND ${STRIP} -u -r ${strip_source_file} -- COMMENT Stripping symbols from ${strip_source_file} into file ${strip_destination_file} -- ) -- else(CMAKE_SYSTEM_NAME STREQUAL Darwin) -- set(strip_destination_file ${strip_source_file}.dbg) -- -- add_custom_command( -- TARGET ${targetName} -- POST_BUILD -- VERBATIM -- COMMAND ${OBJCOPY} --only-keep-debug ${strip_source_file} ${strip_destination_file} -- COMMAND ${OBJCOPY} --strip-unneeded ${strip_source_file} -- COMMAND ${OBJCOPY} --add-gnu-debuglink=${strip_destination_file} ${strip_source_file} -- COMMENT Stripping symbols from ${strip_source_file} into file ${strip_destination_file} -- ) -- endif(CMAKE_SYSTEM_NAME STREQUAL Darwin) -- -- set(${outputFilename} ${strip_destination_file} PARENT_SCOPE) -- endif(STRIP_SYMBOLS) -- endif(CLR_CMAKE_PLATFORM_UNIX) --endfunction() -- - function(install_symbols targetName destination_path) - if(WIN32) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/$/${targetName}.pdb DESTINATION ${destination_path}) - else() -- strip_symbols(${targetName} strip_destination_file) -- install(FILES ${strip_destination_file} DESTINATION ${destination_path}) - endif() - endfunction() - diff --git a/dotnet3.1.spec b/dotnet3.1.spec index cf73d25..ef6ebc8 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -80,8 +80,7 @@ Patch103: corefx-39633-cgroupv2-mountpoints.patch Patch200: coreclr-27048-sysctl-deprecation.patch Patch201: coreclr-hardening-flags.patch -Patch300: core-setup-do-not-strip.patch -Patch301: core-setup-hardening-flags.patch +Patch300: core-setup-hardening-flags.patch Patch500: cli-telemetry-optout.patch @@ -352,7 +351,6 @@ popd pushd src/dotnet-core-setup.* %patch300 -p1 -%patch301 -p1 popd pushd src/dotnet-cli.* From d63fb61c1ba0f0b0bf31067ac18b537aa4f5ae73 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Feb 12 2020 15:31:54 +0000 Subject: [PATCH 9/12] Drop sysctl.h-deprecation fix We dont treat warnings as errors in our build so leaving that warning be doesn't really matter. --- diff --git a/build-dotnet-tarball b/build-dotnet-tarball index 4af7757..0923778 100755 --- a/build-dotnet-tarball +++ b/build-dotnet-tarball @@ -74,7 +74,7 @@ fi set -x -dir_name="dotnet-${tag}-$(runtime_id)" +dir_name="dotnet-${tag}" unmodified_tarball_name="${dir_name}-original" tarball_name="${dir_name}" diff --git a/coreclr-27048-sysctl-deprecation.patch b/coreclr-27048-sysctl-deprecation.patch deleted file mode 100644 index 2591908..0000000 --- a/coreclr-27048-sysctl-deprecation.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 3dd725eca0079e2b49821dfeb0ec1cb166cc7414 Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Fri, 4 Oct 2019 19:29:53 -0400 -Subject: [PATCH] Handle glibc sys/sysctl.h deprecation - -glibc has deprecated sys/sysctl.h: - - In file included from /coreclr/src/pal/src/misc/sysinfo.cpp:32: - /usr/include/sys/sysctl.h:21:2: error: "The header is deprecated and will be removed." [-Werror,-W#warnings] - #warning "The header is deprecated and will be removed." - ^ - 1 error generated. - -Fix that by preferring sysconf and only including sys/sysctl.h if -HAVE_SYSCONF is not true. This mirrors the order of the implementation -code in this file (sysinfo.cpp) which checks for HAVE_SYSCONF -before HAVE_SYSCTL. - -Fixes #27008 ---- - src/pal/src/misc/sysinfo.cpp | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) - -diff --git a/src/pal/src/misc/sysinfo.cpp b/src/pal/src/misc/sysinfo.cpp -index e1c949e38d53..50ccf3a75e16 100644 ---- a/src/pal/src/misc/sysinfo.cpp -+++ b/src/pal/src/misc/sysinfo.cpp -@@ -28,9 +28,12 @@ Revision History: - #define __STDC_FORMAT_MACROS - #include - #include --#if HAVE_SYSCTL -+ -+#if HAVE_SYSCONF -+// already included above -+#elif HAVE_SYSCTL - #include --#elif !HAVE_SYSCONF -+#else - #error Either sysctl or sysconf is required for GetSystemInfo. - #endif - diff --git a/dotnet3.1.spec b/dotnet3.1.spec index ef6ebc8..cb2c223 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -14,15 +14,10 @@ %global __provides_exclude ^(%{privlibs})\\.so %global __requires_exclude ^(%{privlibs})\\.so -# Filter flags not supported by clang/dotnet: -# -fstack-clash-protection is not supported by clang -# -specs= is not supported by clang +# Filter flags not supported by clang +# -fstack-clash-protection +# -specs= %global dotnet_cflags %(echo %optflags | sed -e 's/-fstack-clash-protection//' | sed -re 's/-specs=[^ ]*//g') -%if 0%{?fedora} < 30 -# on Fedora 29, clang, -fcf-protection and binutils interact in strage ways leading to -# "" errors. -%global dotnet_cflags %(echo %dotnet_cflags | sed -e 's/ -fcf-protection//') -%endif %global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') %global host_version 3.1.1 @@ -67,7 +62,7 @@ License: MIT and ASL 2.0 and BSD and LGPLv2+ and CC-BY and CC0 and MS-PL URL: https://github.com/dotnet/ # The source is generated on a Fedora box via: -# ./build-dotnet-tarball dotnet-v%%{runtime_version} +# ./build-dotnet-tarball v%%{sdk_version}-SDK Source0: dotnet-v%{sdk_version}-SDK.tar.gz Source1: check-debug-symbols.py Source2: dotnet.sh.in @@ -77,8 +72,7 @@ Patch101: corefx-39686-cgroupv2-01.patch Patch102: corefx-39686-cgroupv2-02.patch Patch103: corefx-39633-cgroupv2-mountpoints.patch -Patch200: coreclr-27048-sysctl-deprecation.patch -Patch201: coreclr-hardening-flags.patch +Patch200: coreclr-hardening-flags.patch Patch300: core-setup-hardening-flags.patch @@ -346,7 +340,6 @@ popd pushd src/coreclr.* %patch200 -p1 -%patch201 -p1 popd pushd src/dotnet-core-setup.* From 9034a08d1089a34ea31f11241ee49db6521a4205 Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Feb 12 2020 17:17:16 +0000 Subject: [PATCH 10/12] Dont disable new/specific warnings -Wno-error takes care of making all warnings non-fatal. --- diff --git a/corefx-optflags-support.patch b/corefx-optflags-support.patch index 63f4730..6f76d7f 100644 --- a/corefx-optflags-support.patch +++ b/corefx-optflags-support.patch @@ -2,12 +2,11 @@ diff --git a/src/Native/Unix/CMakeLists.txt b/src/Native/Unix/CMakeLists.txt index 7d804a1e54..717c2718d7 100644 --- a/src/Native/Unix/CMakeLists.txt +++ b/src/Native/Unix/CMakeLists.txt -@@ -25,7 +25,7 @@ add_compile_options(-fPIC) +@@ -25,7 +25,6 @@ add_compile_options(-fPIC) add_compile_options(-Wthread-safety) add_compile_options(-Wno-thread-safety-analysis) endif() -add_compile_options(-Werror) -+add_compile_options(-Wno-unused-result) if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) set(CLR_CMAKE_PLATFORM_WASM 1) From 53d03f8406dd7fbc2aced1580f2217cd1e8f0e4f Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Feb 18 2020 20:13:23 +0000 Subject: [PATCH 11/12] Add comments to patches in the spec file --- diff --git a/dotnet3.1.spec b/dotnet3.1.spec index cb2c223..4536929 100644 --- a/dotnet3.1.spec +++ b/dotnet3.1.spec @@ -67,15 +67,22 @@ Source0: dotnet-v%{sdk_version}-SDK.tar.gz Source1: check-debug-symbols.py Source2: dotnet.sh.in +# Fix building with our additional CFLAGS/CXXFLAGS/LDFLAGS Patch100: corefx-optflags-support.patch + +# Add some support for cgroupv2 in corefx +# All these patches are upstreamed for 5.0 Patch101: corefx-39686-cgroupv2-01.patch Patch102: corefx-39686-cgroupv2-02.patch Patch103: corefx-39633-cgroupv2-mountpoints.patch +# Build with with hardening flags, including -pie Patch200: coreclr-hardening-flags.patch +# Build with with hardening flags, including -pie Patch300: core-setup-hardening-flags.patch +# Disable telemetry by default; make it opt-in Patch500: cli-telemetry-optout.patch ExclusiveArch: x86_64 From 8db266e73b4dc225e6c22f614f5d1b55f6a3dedb Mon Sep 17 00:00:00 2001 From: Omair Majid Date: Mar 02 2020 22:57:03 +0000 Subject: [PATCH 12/12] Mark repository as obsolete --- diff --git a/README.md b/README.md index ae2b637..1fb1cda 100644 --- a/README.md +++ b/README.md @@ -1,104 +1,14 @@ -# fedora-dotnet -.NET Core Fedora RPM packages +# Obsolete -This repository contains the spec files for building .NET Core RPM's. +This repository is now obsolete. -These are the base for what will hopefully become the official .NET -Core packages in Fedora. +Please use .NET Core 3.1 packages from the main Fedora repository, instead: +`dnf install dotnet-sdk-3.1`. -# Fedora dotnet SIG +This repository has now been obsoleted for a couple of reasons. -These packages are maintained by the Fedora DotNet SIG (Special -Interest Group). You can find out more about the DotNet SIG at: - -- https://fedoraproject.org/wiki/SIGs/DotNet -- https://fedoraproject.org/wiki/DotNet -- https://lists.fedoraproject.org/archives/list/dotnet-sig@lists.fedoraproject.org/ - -# Getting builds from COPR - -Packages from this repository are available the DotNet SIG copr at -https://copr.fedorainfracloud.org/coprs/g/dotnet-sig/dotnet-preview/ - -Please see the copr repository for steps on how to install the -packages and use them. - -Please report any issues [here](https://pagure.io/dotnet-sig/packaging-issues/new_issue). - -# Specification - -- Follows [package naming and contents suggested by upstream](https://docs.microsoft.com/en-us/dotnet/core/build/distribution-packaging) -- Installs dotnet to `/usr/lib64/dotnet` - -# Building - -1. You will need credentials and permissions to build in copr. - - - You need [a valid Fedora - account](https://admin.fedoraproject.org/accounts/) to be able to - use any Fedora infrastructure, including copr. - - You will need a token for `copr-cli` commands. See - https://copr.fedorainfracloud.org/api/ for how to get a token. - - To build in dotnet-sig copr, ask an admin of dotnet-sig for - permissions. - -2. Fork [the dotnet-sig repo](https://pagure.io/dotnet-sig/dotnet-3-1) via - copr. You should now have a repo with the web url - https://pagure.io/fork/$USER/dotnet-3-1 - -3. Checkout the forked repository - - - `git clone ssh://git@pagure.io/forks/$USER/dotnet-3-1.git` - - `cd dotnet-3-1` - -4. Bump version/release in the spec file. Add a Changelog. Make sure - the `Source` tag corresponds to the new tarball name, if there is a - new tarball. - -5. Do local builds: - - - `fedpkg local` - - Fix any errors that come up and rebuild until it works locally. - -6. Upload the new tarball to a public URL, if there is a new tarball. - I use: - - - `scp dotnet-3-1.100.tar.gz omajid.fedorapeople.org:public_html/dotnet/ ` - - Make sure `spectool -g /path/to/dotnet.spec` can download this - tarball from the public URL. - -7. Commit the changes to the git repo and do a build on copr. - - - `git add # any new files, such as new patches` - - `git remove # old files, such as old patches` - - `git commit -a` - - `git push` - - `./copr-build` - -8. If it fails, update spec file/patches and rebuild with the same set - of steps. - -# Testing - -1. Pull down the packages from copr, and install them: - - - `dnf copr enable @dotnet-sig/dotnet` - - (Or `dnf copr enable @dotnet-sig/dotnet-preview` to get the preview builds) - - `dnf install dotnet-sdk-3.1` - - OR, if you already have the packages installed: - - - `dnf upgrade 'dotnet*'` - - Make sure it installs the version you just built. Sometimes it - takes a few minutes to an hour for the latest version to show up - in the copr repos. - -2. Run some smoke tests - - - `dotnet new console -o ConsoleApplication` - - `dotnet run` - - `dotnet publish -c Release -r linux-x64` +- .NET Core 3.1 should now be a part of Fedora itself; we are working to add it + to Fedora releases. +- Due to onging copr issues, we can't update .NET Core 3.1 past preview + releases: https://pagure.io/copr/copr/issue/1228 diff --git a/build-dotnet-tarball b/build-dotnet-tarball deleted file mode 100755 index 0923778..0000000 --- a/build-dotnet-tarball +++ /dev/null @@ -1,117 +0,0 @@ -#!/bin/bash - -# Usage: -# build-dotnet-tarball -# -# Creates a source archive from a tag (or commit) at github.com/dotnet/source-build - -# Source-build is a little strange, we need to clone it, check out the -# tag, build it and then create a tarball from the archive directory -# it creates. Also, it is likely that the source archive is only -# buildable on the OS it was initially created in. - -set -euo pipefail -IFS=$'\n\t' - -print_usage() { - echo "Usage:" - echo "$0 " - echo - echo "Creates a source archive from a tag at https://github.com/dotnet/source-build" -} - -clean_dotnet_cache() { - rm -rf ~/.aspnet ~/.dotnet/ ~/.nuget/ ~/.local/share/NuGet ~/.templateengine - rm -rf /tmp/NuGet /tmp/NuGetScratch /tmp/.NETCore* /tmp/.NETStandard* /tmp/.dotnet /tmp/dotnet.* /tmp/clr-debug-pipe* /tmp/Razor-Server /tmp/CoreFxPipe* /tmp/VBCSCompiler /tmp/.NETFramework* -} - -function runtime_id { - - declare -A archmap - archmap=( - ["aarch64"]="arm64" - ["amd64"]="x64" - ["armv8l"]="arm" - ["i686"]="x86" - ["i386"]="x86" - ["x86_64"]="x64" - ) - - arch=${archmap["$(uname -m)"]} - - source /etc/os-release - case "${ID}" in - # Remove the RHEL minor version - rhel) rid_version=${VERSION_ID%.*} ;; - - *) rid_version=${VERSION_ID} ;; - esac - - echo "${ID}.${rid_version}-${arch}" -} - -positional_args=() -while [[ "$#" -gt 0 ]]; do - arg="${1}" - case "${arg}" in - -h|--help) - print_usage - exit 0 - ;; - *) - positional_args+=("$1") - shift - ;; - esac -done - - -tag=${positional_args[0]:-} -if [[ -z ${tag} ]]; then - echo "error: missing tag to build" - exit 1 -fi - -set -x - -dir_name="dotnet-${tag}" -unmodified_tarball_name="${dir_name}-original" -tarball_name="${dir_name}" - -if [ -f "${tarball_name}.tar.gz" ]; then - echo "error: ${tarball_name}.tar.gz already exists" - exit 1 -fi - -if [ ! -f "${unmodified_tarball_name}.tar.gz" ]; then - temp_dir=$(mktemp -d -p "$(pwd)") - pushd "${temp_dir}" - git clone https://github.com/dotnet/source-build - pushd source-build - git checkout "${tag}" - git submodule update --init --recursive - clean_dotnet_cache - sed -i -e 's|cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE||' repos/coreclr.proj - ./build-source-tarball.sh "${unmodified_tarball_name}" - popd - popd - - tar czf "${unmodified_tarball_name}.tar.gz" -C "${temp_dir}/source-build" "${unmodified_tarball_name}" - - rm -rf "${temp_dir}" -fi - -rm -rf "${tarball_name}" -tar xf "${unmodified_tarball_name}.tar.gz" -mv "${unmodified_tarball_name}" "${tarball_name}" - -pushd "${tarball_name}" -# Remove files with funny licenses, crypto implementations and other -# not-very-useful artifacts to reduce tarball size -rm -r src/AspNetCore.*/src/SignalR/clients/java/signalr/gradle* -find src/AspNetCore.*/src -type d -name samples -print0 | xargs -0 rm -r -rm -r src/NuGet.Client.*/test/EndToEnd/ProjectTemplates/NetCoreWebApplication1.0.zip -find src/coreclr.*/ -depth -name tests -print0 | xargs -0 rm -r -popd - -tar czf "${tarball_name}.tar.gz" "${tarball_name}" diff --git a/check-debug-symbols.py b/check-debug-symbols.py deleted file mode 100755 index be26d87..0000000 --- a/check-debug-symbols.py +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/python3 - -""" -Check debug symbols are present in shared object and can identify -code. - -It starts scanning from a directory and recursively scans all ELF -files found in it for various symbols to ensure all debuginfo is -present and nothing has been stripped. - -Usage: - -./check-debug-symbols /path/of/dir/to/scan/ - - -Example: - -./check-debug-symbols /usr/lib64 -""" - -# This technique was explained to me by Mark Wielaard (mjw). - -import collections -import os -import re -import subprocess -import sys - -ScanResult = collections.namedtuple('ScanResult', - 'file_name debug_info debug_abbrev file_symbols gnu_debuglink') - - -def scan_file(file): - "Scan the provided file and return a ScanResult containing results of the scan." - - # Test for .debug_* sections in the shared object. This is the main test. - # Stripped objects will not contain these. - readelf_S_result = subprocess.run(['eu-readelf', '-S', file], - stdout=subprocess.PIPE, encoding='utf-8', check=True) - has_debug_info = any(line for line in readelf_S_result.stdout.split('\n') if '] .debug_info' in line) - - has_debug_abbrev = any(line for line in readelf_S_result.stdout.split('\n') if '] .debug_abbrev' in line) - - # Test FILE symbols. These will most likely be removed by anyting that - # manipulates symbol tables because it's generally useless. So a nice test - # that nothing has messed with symbols. - def contains_file_symbols(line): - parts = line.split() - if len(parts) < 8: - return False - return \ - parts[2] == '0' and parts[3] == 'FILE' and parts[4] == 'LOCAL' and parts[5] == 'DEFAULT' and \ - parts[6] == 'ABS' and re.match(r'((.*/)?[-_a-zA-Z0-9]+\.(c|cc|cpp|cxx))?', parts[7]) - - readelf_s_result = subprocess.run(["eu-readelf", '-s', file], - stdout=subprocess.PIPE, encoding='utf-8', check=True) - has_file_symbols = any(line for line in readelf_s_result.stdout.split('\n') if contains_file_symbols(line)) - - # Test that there are no .gnu_debuglink sections pointing to another - # debuginfo file. There shouldn't be any debuginfo files, so the link makes - # no sense either. - has_gnu_debuglink = any(line for line in readelf_s_result.stdout.split('\n') if '] .gnu_debuglink' in line) - - return ScanResult(file, has_debug_info, has_debug_abbrev, has_file_symbols, has_gnu_debuglink) - -def is_elf(file): - result = subprocess.run(['file', file], stdout=subprocess.PIPE, encoding='utf-8', check=True) - return re.search('ELF 64-bit LSB (?:executable|shared object)', result.stdout) - -def scan_file_if_sensible(file): - if is_elf(file): - # print(file) - return scan_file(file) - return None - -def scan_dir(dir): - results = [] - for root, _, files in os.walk(dir): - for name in files: - result = scan_file_if_sensible(os.path.join(root, name)) - if result: - results.append(result) - return results - -def scan(file): - file = os.path.abspath(file) - if os.path.isdir(file): - return scan_dir(file) - elif os.path.isfile(file): - return [scan_file_if_sensible(file)] - -def is_bad_result(result): - return not result.debug_info or not result.debug_abbrev or not result.file_symbols or result.gnu_debuglink - -def print_scan_results(results, verbose): - # print(results) - for result in results: - file_name = result.file_name - found_issue = False - if not result.debug_info: - found_issue = True - print('error: missing .debug_info section in', file_name) - if not result.debug_abbrev: - found_issue = True - print('error: missing .debug_abbrev section in', file_name) - if not result.file_symbols: - found_issue = True - print('error: missing FILE symbols in', file_name) - if result.gnu_debuglink: - found_issue = True - print('error: unexpected .gnu_debuglink section in', file_name) - if verbose and not found_issue: - print('OK: ', file_name) - -def main(args): - verbose = False - files = [] - for arg in args: - if arg == '--verbose' or arg == '-v': - verbose = True - else: - files.append(arg) - - results = [] - for file in files: - results.extend(scan(file)) - - print_scan_results(results, verbose) - - if any(is_bad_result(result) for result in results): - return 1 - return 0 - - -if __name__ == '__main__': - sys.exit(main(sys.argv[1:])) diff --git a/cli-telemetry-optout.patch b/cli-telemetry-optout.patch deleted file mode 100644 index 9b01f13..0000000 --- a/cli-telemetry-optout.patch +++ /dev/null @@ -1,18 +0,0 @@ -diff --git a/src/dotnet/Program.cs b/src/dotnet/Program.cs -index de1ebb9e6..6bbf479de 100644 ---- a/src/dotnet/Program.cs -+++ b/src/dotnet/Program.cs -@@ -28,6 +28,13 @@ public class Program - - public static int Main(string[] args) - { -+ // opt out of telemetry by default if the env var is unset -+ string telemetryValue = Environment.GetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT"); -+ if (String.IsNullOrEmpty(telemetryValue)) -+ { -+ Environment.SetEnvironmentVariable("DOTNET_CLI_TELEMETRY_OPTOUT", "1"); -+ } -+ - DebugHelper.HandleDebugSwitch(ref args); - - new MulticoreJitActivator().TryActivateMulticoreJit(); diff --git a/copr-build b/copr-build deleted file mode 100755 index a511135..0000000 --- a/copr-build +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash - -set -euo pipefail - -set -x - -fedpkg srpm 2>&1 | tee fedpkg.output - -srpm_name=$(grep 'Wrote: ' fedpkg.output | cut -d' ' -f 2) - -copr-cli build @dotnet-sig/dotnet-preview "${srpm_name}" diff --git a/core-setup-hardening-flags.patch b/core-setup-hardening-flags.patch deleted file mode 100644 index 3f6b91c..0000000 --- a/core-setup-hardening-flags.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/src/settings.cmake b/src/settings.cmake ---- a/src/settings.cmake -+++ b/src/settings.cmake -@@ -218,6 +218,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "Linux") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Xlinker -Bsymbolic -Bsymbolic-functions") - set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--build-id=sha1") - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id=sha1") -+ set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pie") - add_compile_options(-fstack-protector-strong) - elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - add_compile_options(-fstack-protector) diff --git a/coreclr-hardening-flags.patch b/coreclr-hardening-flags.patch deleted file mode 100644 index d58d735..0000000 --- a/coreclr-hardening-flags.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff --git a/src/debug/createdump/CMakeLists.txt b/src/debug/createdump/CMakeLists.txt ---- a/src/debug/createdump/CMakeLists.txt -+++ b/src/debug/createdump/CMakeLists.txt -@@ -21,6 +21,7 @@ include_directories(BEFORE ${VM_DIR}) - add_definitions(-DPAL_STDCPP_COMPAT) - - add_compile_options(-fPIE) -+add_link_options(-pie) - - set(CREATEDUMP_SOURCES - createdump.cpp diff --git a/corefx-39633-cgroupv2-mountpoints.patch b/corefx-39633-cgroupv2-mountpoints.patch deleted file mode 100644 index 34fbecb..0000000 --- a/corefx-39633-cgroupv2-mountpoints.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 1864630f762160e1cb439362cc0577471624192a Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Fri, 19 Jul 2019 19:18:51 -0400 -Subject: [PATCH] Fix up cgroup2fs in Interop.MountPoints.FormatInfo - -`stat -fc %T /sys/fs/cgroup` calls this file system `cgroup2fs` - -Add the cgroup2fs file system magic number. Available from: - - - https://www.kernel.org/doc/Documentation/cgroup-v2.txt - - man 2 statfs - -Move cgroup2fs next to cgroupfs in the drive type list, since it is also -DriveType.Ram. ---- - .../Unix/System.Native/Interop.MountPoints.FormatInfo.cs | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs b/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs -index af38a2285ba2..4240bd4853ab 100644 ---- a/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs -+++ b/src/Common/src/Interop/Unix/System.Native/Interop.MountPoints.FormatInfo.cs -@@ -47,6 +47,7 @@ internal enum UnixFileSystemTypes : long - btrfs = 0x9123683E, - ceph = 0x00C36400, - cgroupfs = 0x0027E0EB, -+ cgroup2fs = 0x63677270, - cifs = 0xFF534D42, - coda = 0x73757245, - coherent = 0x012FF7B7, -@@ -231,7 +232,6 @@ private static DriveType GetDriveType(string fileSystemName) - case "bpf_fs": - case "btrfs": - case "btrfs_test": -- case "cgroup2fs": - case "coh": - case "daxfs": - case "drvfs": -@@ -384,6 +384,7 @@ private static DriveType GetDriveType(string fileSystemName) - case "binfmt_misc": - case "cgroup": - case "cgroupfs": -+ case "cgroup2fs": - case "configfs": - case "cramfs": - case "cramfs-wend": diff --git a/corefx-39686-cgroupv2-01.patch b/corefx-39686-cgroupv2-01.patch deleted file mode 100644 index e7628e2..0000000 --- a/corefx-39686-cgroupv2-01.patch +++ /dev/null @@ -1,391 +0,0 @@ -From 2b2273ea4ea1c28472fa0d6ad2ffeb6374500550 Mon Sep 17 00:00:00 2001 -From: Omair Majid -Date: Wed, 23 Oct 2019 17:45:59 -0400 -Subject: [PATCH 1/2] Add cgroup v2 support to Interop.cgroups - -Fix up code to adjust cgroup v1 assumptions and check cgroup v2 paths, -locations and values. - -Continue using the older cgroup v1 terminology for APIs. ---- - .../Interop/Linux/cgroups/Interop.cgroups.cs | 116 ++++++++++++++---- - src/Common/tests/Common.Tests.csproj | 4 + - .../tests/Tests/Interop/cgroupsTests.cs | 107 ++++++++++++++++ - .../tests/DescriptionNameTests.cs | 2 +- - 4 files changed, 206 insertions(+), 23 deletions(-) - create mode 100644 src/Common/tests/Tests/Interop/cgroupsTests.cs - -diff --git a/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs b/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs -index 0ffd4d7b7c03..186fe0516c5b 100644 ---- a/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs -+++ b/src/Common/src/Interop/Linux/cgroups/Interop.cgroups.cs -@@ -9,17 +9,22 @@ - - internal static partial class Interop - { -+ /// Provides access to some cgroup (v1 and v2) features - internal static partial class cgroups - { -+ // For cgroup v1, see https://www.kernel.org/doc/Documentation/cgroup-v1/ -+ // For cgroup v2, see https://www.kernel.org/doc/Documentation/cgroup-v2.txt -+ -+ /// The version of cgroup that's being used -+ internal enum CGroupVersion { None, CGroup1, CGroup2 }; -+ - /// Path to mountinfo file in procfs for the current process. - private const string ProcMountInfoFilePath = "/proc/self/mountinfo"; - /// Path to cgroup directory in procfs for the current process. - private const string ProcCGroupFilePath = "/proc/self/cgroup"; - -- /// Path to the found cgroup location, or null if it couldn't be found. -- internal static readonly string s_cgroupMemoryPath = FindCGroupPath("memory"); -- /// Path to the found cgroup memory limit_in_bytes path, or null if it couldn't be found. -- private static readonly string s_cgroupMemoryLimitPath = s_cgroupMemoryPath != null ? s_cgroupMemoryPath + "/memory.limit_in_bytes" : null; -+ /// Path to the found cgroup memory limit path, or null if it couldn't be found. -+ internal static readonly string s_cgroupMemoryLimitPath = FindCGroupMemoryLimitPath(); - - /// Tries to read the memory limit from the cgroup memory location. - /// The read limit, or 0 if it couldn't be read. -@@ -42,7 +47,7 @@ public static bool TryGetMemoryLimit(out ulong limit) - /// The path to the file to parse. - /// The parsed result, or 0 if it couldn't be parsed. - /// true if the value was read successfully; otherwise, false. -- private static bool TryReadMemoryValueFromFile(string path, out ulong result) -+ internal static bool TryReadMemoryValueFromFile(string path, out ulong result) - { - if (File.Exists(path)) - { -@@ -79,6 +84,11 @@ private static bool TryReadMemoryValueFromFile(string path, out ulong result) - result = checked(ulongValue * multiplier); - return true; - } -+ -+ // 'max' is also a possible valid value -+ // -+ // Treat this as 'no memory limit' and let the caller -+ // fallback to reading the real limit via other means - } - catch (Exception e) - { -@@ -90,12 +100,35 @@ private static bool TryReadMemoryValueFromFile(string path, out ulong result) - return false; - } - -+ /// Find the cgroup memory limit path. -+ /// The limit path if found; otherwise, null. -+ private static string FindCGroupMemoryLimitPath() -+ { -+ string cgroupMemoryPath = FindCGroupPath("memory", out CGroupVersion version); -+ if (cgroupMemoryPath != null) -+ { -+ if (version == CGroupVersion.CGroup1) -+ { -+ return cgroupMemoryPath + "/memory.limit_in_bytes"; -+ } -+ -+ if (version == CGroupVersion.CGroup2) -+ { -+ // 'memory.high' is a soft limit; the process may get throttled -+ // 'memory.max' is where OOM killer kicks in -+ return cgroupMemoryPath + "/memory.max"; -+ } -+ } -+ -+ return null; -+ } -+ - /// Find the cgroup path for the specified subsystem. - /// The subsystem, e.g. "memory". - /// The cgroup path if found; otherwise, null. -- private static string FindCGroupPath(string subsystem) -+ private static string FindCGroupPath(string subsystem, out CGroupVersion version) - { -- if (TryFindHierarchyMount(subsystem, out string hierarchyRoot, out string hierarchyMount) && -+ if (TryFindHierarchyMount(subsystem, out version, out string hierarchyRoot, out string hierarchyMount) && - TryFindCGroupPathForSubsystem(subsystem, out string cgroupPathRelativeToMount)) - { - // For a host cgroup, we need to append the relative path. -@@ -113,19 +146,24 @@ private static string FindCGroupPath(string subsystem) - /// The path of the directory in the filesystem which forms the root of this mount; null if not found. - /// The path of the mount point relative to the process's root directory; null if not found. - /// true if the mount was found; otherwise, null. -- private static bool TryFindHierarchyMount(string subsystem, out string root, out string path) -+ private static bool TryFindHierarchyMount(string subsystem, out CGroupVersion version, out string root, out string path) - { -- if (File.Exists(ProcMountInfoFilePath)) -+ return TryFindHierarchyMount(ProcMountInfoFilePath, subsystem, out version, out root, out path); -+ } -+ -+ internal static bool TryFindHierarchyMount(string mountInfoFilePath, string subsystem, out CGroupVersion version, out string root, out string path) -+ { -+ if (File.Exists(mountInfoFilePath)) - { - try - { -- using (var reader = new StreamReader(ProcMountInfoFilePath)) -+ using (var reader = new StreamReader(mountInfoFilePath)) - { - string line; - while ((line = reader.ReadLine()) != null) - { - // Look for an entry that has cgroup as the "filesystem type" -- // and that has options containing the specified subsystem. -+ // and, for cgroup1, that has options containing the specified subsystem - // See man page for /proc/[pid]/mountinfo for details, e.g.: - // (1)(2)(3) (4) (5) (6) (7) (8) (9) (10) (11) - // 36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue -@@ -148,17 +186,35 @@ private static bool TryFindHierarchyMount(string subsystem, out string root, out - continue; - } - -- if (postSeparatorlineParts[0] != "cgroup" || -- Array.IndexOf(postSeparatorlineParts[2].Split(','), subsystem) < 0) -+ bool validCGroup1Entry = ((postSeparatorlineParts[0] == "cgroup") && -+ (Array.IndexOf(postSeparatorlineParts[2].Split(','), subsystem) >= 0)); -+ bool validCGroup2Entry = postSeparatorlineParts[0] == "cgroup2"; -+ -+ if (!validCGroup1Entry && !validCGroup2Entry) - { - // Not the relevant entry. - continue; - } - -- // Found the relevant entry. Extract the mount root and path. -+ // Found the relevant entry. Extract the cgroup version, mount root and path. -+ switch (postSeparatorlineParts[0]) -+ { -+ case "cgroup": -+ version = CGroupVersion.CGroup1; -+ break; -+ case "cgroup2": -+ version = CGroupVersion.CGroup2; -+ break; -+ default: -+ version = CGroupVersion.None; -+ Debug.Fail($"invalid value for CGroupVersion \"{postSeparatorlineParts[0]}\""); -+ break; -+ } -+ - string[] lineParts = line.Substring(0, endOfOptionalFields).Split(' '); - root = lineParts[3]; - path = lineParts[4]; -+ - return true; - } - } -@@ -169,6 +225,7 @@ private static bool TryFindHierarchyMount(string subsystem, out string root, out - } - } - -+ version = CGroupVersion.None; - root = null; - path = null; - return false; -@@ -180,27 +237,42 @@ private static bool TryFindHierarchyMount(string subsystem, out string root, out - /// - private static bool TryFindCGroupPathForSubsystem(string subsystem, out string path) - { -- if (File.Exists(ProcCGroupFilePath)) -+ return TryFindCGroupPathForSubsystem(ProcCGroupFilePath, subsystem, out path); -+ } -+ -+ internal static bool TryFindCGroupPathForSubsystem(string procCGroupFilePath, string subsystem, out string path) -+ { -+ if (File.Exists(procCGroupFilePath)) - { - try - { -- using (var reader = new StreamReader(ProcCGroupFilePath)) -+ using (var reader = new StreamReader(procCGroupFilePath)) - { - string line; - while ((line = reader.ReadLine()) != null) - { -- // Find the first entry that has the subsystem listed in its controller -- // list. See man page for cgroups for /proc/[pid]/cgroups format, e.g: -- // hierarchy-ID:controller-list:cgroup-path -- // 5:cpuacct,cpu,cpuset:/daemons -- - string[] lineParts = line.Split(':'); -+ - if (lineParts.Length != 3) - { - // Malformed line. - continue; - } - -+ // cgroup v2: Find the first entry that matches the cgroup v2 hierarchy: -+ // 0::$PATH -+ -+ if ((lineParts[0] == "0") && (string.Empty == lineParts[1])) -+ { -+ path = lineParts[2]; -+ return true; -+ } -+ -+ // cgroup v1: Find the first entry that has the subsystem listed in its controller -+ // list. See man page for cgroups for /proc/[pid]/cgroups format, e.g: -+ // hierarchy-ID:controller-list:cgroup-path -+ // 5:cpuacct,cpu,cpuset:/daemons -+ - if (Array.IndexOf(lineParts[1].Split(','), subsystem) < 0) - { - // Not the relevant entry. -@@ -214,7 +286,7 @@ private static bool TryFindCGroupPathForSubsystem(string subsystem, out string p - } - catch (Exception e) - { -- Debug.Fail($"Failed to read or parse \"{ProcMountInfoFilePath}\": {e}"); -+ Debug.Fail($"Failed to read or parse \"{procCGroupFilePath}\": {e}"); - } - } - -diff --git a/src/Common/tests/Common.Tests.csproj b/src/Common/tests/Common.Tests.csproj -index a189d856348b..979c8dd7fbe6 100644 ---- a/src/Common/tests/Common.Tests.csproj -+++ b/src/Common/tests/Common.Tests.csproj -@@ -12,6 +12,9 @@ - - Common\System\Security\Cryptography\ByteUtils.cs - -+ -+ Common\Interop\Linux\cgroups\Interop.cgroups.cs -+ - - Common\Interop\Linux\procfs\Interop.ProcFsStat.cs - -@@ -69,6 +72,7 @@ - - Common\CoreLib\System\PasteArguments.cs - -+ - - - -diff --git a/src/Common/tests/Tests/Interop/cgroupsTests.cs b/src/Common/tests/Tests/Interop/cgroupsTests.cs -new file mode 100644 -index 000000000000..f16d9242879c ---- /dev/null -+++ b/src/Common/tests/Tests/Interop/cgroupsTests.cs -@@ -0,0 +1,107 @@ -+// Licensed to the .NET Foundation under one or more agreements. -+// The .NET Foundation licenses this file to you under the MIT license. -+// See the LICENSE file in the project root for more information. -+ -+using System; -+using System.IO; -+using System.Text; -+using Xunit; -+ -+namespace Common.Tests -+{ -+ public class cgroupsTests -+ { -+ [Theory] -+ [InlineData(true, "0", 0)] -+ [InlineData(false, "max", 0)] -+ [InlineData(true, "1k", 1024)] -+ [InlineData(true, "1K", 1024)] -+ public static void ValidateTryReadMemoryValue(bool expectedResult, string valueText, ulong expectedValue) -+ { -+ string path = Path.GetTempFileName(); -+ try -+ { -+ File.WriteAllText(path, valueText); -+ -+ bool result = Interop.cgroups.TryReadMemoryValueFromFile(path, out ulong val); -+ -+ Assert.Equal(expectedResult, result); -+ if (result) -+ { -+ Assert.Equal(expectedValue, val); -+ } -+ } -+ finally -+ { -+ File.Delete(path); -+ } -+ } -+ -+ [Theory] -+ [InlineData(false, "0 0 0:0 / /foo ignore ignore - overlay overlay ignore", "ignore", 0, "/", "/")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup2 cgroup2 ignore", "ignore", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup2 cgroup2 ignore", "memory", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup2 cgroup2 ignore", "cpu", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore - cgroup2 cgroup2 ignore", "cpu", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore ignore - cgroup2 cgroup2 ignore", "cpu", 2, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo-with-dashes ignore ignore - cgroup2 cgroup2 ignore", "ignore", 2, "/", "/foo-with-dashes")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup memory", "memory", 1, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo-with-dashes ignore ignore - cgroup cgroup memory", "memory", 1, "/", "/foo-with-dashes")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu,memory", "memory", 1, "/", "/foo")] -+ [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup memory,cpu", "memory", 1, "/", "/foo")] -+ [InlineData(false, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu", "memory", 0, "/", "/foo")] -+ public static void ParseValidateMountInfo(bool found, string procSelfMountInfoText, string subsystem, int expectedVersion, string expectedRoot, string expectedMount) -+ { -+ string path = Path.GetTempFileName(); -+ try -+ { -+ File.WriteAllText(path, procSelfMountInfoText); -+ -+ bool result = Interop.cgroups.TryFindHierarchyMount(path, subsystem, out Interop.cgroups.CGroupVersion version, out string root, out string mount); -+ -+ Assert.Equal(found, result); -+ if (found) -+ { -+ Assert.Equal(expectedVersion, (int)version); -+ Assert.Equal(expectedRoot, root); -+ Assert.Equal(expectedMount, mount); -+ } -+ } -+ finally -+ { -+ File.Delete(path); -+ } -+ } -+ -+ [Theory] -+ [InlineData(true, "0::/foo", "ignore", "/foo")] -+ [InlineData(true, "0::/bar", "ignore", "/bar")] -+ [InlineData(true, "0::frob", "ignore", "frob")] -+ [InlineData(false, "1::frob", "ignore", "ignore")] -+ [InlineData(true, "1:foo:bar", "foo", "bar")] -+ [InlineData(true, "2:foo:bar", "foo", "bar")] -+ [InlineData(false, "2:foo:bar", "bar", "ignore")] -+ [InlineData(true, "1:foo:bar\n2:eggs:spam", "foo", "bar")] -+ [InlineData(true, "1:foo:bar\n2:eggs:spam", "eggs", "spam")] -+ public static void ParseValidateProcCGroup(bool found, string procSelfCgroupText, string subsystem, string expectedMountPath) -+ { -+ string path = Path.GetTempFileName(); -+ try -+ { -+ File.WriteAllText(path, procSelfCgroupText); -+ -+ bool result = Interop.cgroups.TryFindCGroupPathForSubsystem(path, subsystem, out string mountPath); -+ -+ Assert.Equal(found, result); -+ if (found) -+ { -+ Assert.Equal(expectedMountPath, mountPath); -+ } -+ } -+ finally -+ { -+ File.Delete(path); -+ } -+ } -+ } -+} -diff --git a/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs b/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs -index 910af2fd82b4..73f692898dbc 100644 ---- a/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs -+++ b/src/System.Runtime.InteropServices.RuntimeInformation/tests/DescriptionNameTests.cs -@@ -40,7 +40,7 @@ public void DumpRuntimeInformationToConsole() - - Console.WriteLine($"### CURRENT DIRECTORY: {Environment.CurrentDirectory}"); - -- string cgroupsLocation = Interop.cgroups.s_cgroupMemoryPath; -+ string cgroupsLocation = Interop.cgroups.s_cgroupMemoryLimitPath; - if (cgroupsLocation != null) - { - Console.WriteLine($"### CGROUPS MEMORY: {cgroupsLocation}"); - diff --git a/corefx-39686-cgroupv2-02.patch b/corefx-39686-cgroupv2-02.patch deleted file mode 100644 index 88dcd99..0000000 --- a/corefx-39686-cgroupv2-02.patch +++ /dev/null @@ -1,129 +0,0 @@ -From 9a8c5e4014ffca8aff70808cc0e50a403d38c292 Mon Sep 17 00:00:00 2001 -From: Stephen Toub -Date: Wed, 23 Oct 2019 20:35:49 -0400 -Subject: [PATCH 2/2] Clean up new tests - ---- - .../tests/Tests/Interop/cgroupsTests.cs | 79 ++++++------------- - 1 file changed, 25 insertions(+), 54 deletions(-) - -diff --git a/src/Common/tests/Tests/Interop/cgroupsTests.cs b/src/Common/tests/Tests/Interop/cgroupsTests.cs -index f16d9242879c..fc6ab5c9753c 100644 ---- a/src/Common/tests/Tests/Interop/cgroupsTests.cs -+++ b/src/Common/tests/Tests/Interop/cgroupsTests.cs -@@ -2,38 +2,27 @@ - // The .NET Foundation licenses this file to you under the MIT license. - // See the LICENSE file in the project root for more information. - --using System; - using System.IO; --using System.Text; - using Xunit; - - namespace Common.Tests - { -- public class cgroupsTests -+ public class cgroupsTests : FileCleanupTestBase - { - [Theory] -- [InlineData(true, "0", 0)] -- [InlineData(false, "max", 0)] -- [InlineData(true, "1k", 1024)] -- [InlineData(true, "1K", 1024)] -- public static void ValidateTryReadMemoryValue(bool expectedResult, string valueText, ulong expectedValue) -+ [InlineData(true, "0", 0)] -+ [InlineData(false, "max", 0)] -+ [InlineData(true, "1k", 1024)] -+ [InlineData(true, "1K", 1024)] -+ public void ValidateTryReadMemoryValue(bool expectedResult, string valueText, ulong expectedValue) - { -- string path = Path.GetTempFileName(); -- try -- { -- File.WriteAllText(path, valueText); -- -- bool result = Interop.cgroups.TryReadMemoryValueFromFile(path, out ulong val); -+ string path = GetTestFilePath(); -+ File.WriteAllText(path, valueText); - -- Assert.Equal(expectedResult, result); -- if (result) -- { -- Assert.Equal(expectedValue, val); -- } -- } -- finally -+ Assert.Equal(expectedResult, Interop.cgroups.TryReadMemoryValueFromFile(path, out ulong val)); -+ if (expectedResult) - { -- File.Delete(path); -+ Assert.Equal(expectedValue, val); - } - } - -@@ -50,26 +39,17 @@ public static void ValidateTryReadMemoryValue(bool expectedResult, string valueT - [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu,memory", "memory", 1, "/", "/foo")] - [InlineData(true, "0 0 0:0 / /foo ignore ignore - cgroup cgroup memory,cpu", "memory", 1, "/", "/foo")] - [InlineData(false, "0 0 0:0 / /foo ignore ignore - cgroup cgroup cpu", "memory", 0, "/", "/foo")] -- public static void ParseValidateMountInfo(bool found, string procSelfMountInfoText, string subsystem, int expectedVersion, string expectedRoot, string expectedMount) -+ public void ParseValidateMountInfo(bool expectedFound, string procSelfMountInfoText, string subsystem, int expectedVersion, string expectedRoot, string expectedMount) - { -- string path = Path.GetTempFileName(); -- try -- { -- File.WriteAllText(path, procSelfMountInfoText); -- -- bool result = Interop.cgroups.TryFindHierarchyMount(path, subsystem, out Interop.cgroups.CGroupVersion version, out string root, out string mount); -+ string path = GetTestFilePath(); -+ File.WriteAllText(path, procSelfMountInfoText); - -- Assert.Equal(found, result); -- if (found) -- { -- Assert.Equal(expectedVersion, (int)version); -- Assert.Equal(expectedRoot, root); -- Assert.Equal(expectedMount, mount); -- } -- } -- finally -+ Assert.Equal(expectedFound, Interop.cgroups.TryFindHierarchyMount(path, subsystem, out Interop.cgroups.CGroupVersion version, out string root, out string mount)); -+ if (expectedFound) - { -- File.Delete(path); -+ Assert.Equal(expectedVersion, (int)version); -+ Assert.Equal(expectedRoot, root); -+ Assert.Equal(expectedMount, mount); - } - } - -@@ -83,24 +63,15 @@ public static void ParseValidateMountInfo(bool found, string procSelfMountInfoTe - [InlineData(false, "2:foo:bar", "bar", "ignore")] - [InlineData(true, "1:foo:bar\n2:eggs:spam", "foo", "bar")] - [InlineData(true, "1:foo:bar\n2:eggs:spam", "eggs", "spam")] -- public static void ParseValidateProcCGroup(bool found, string procSelfCgroupText, string subsystem, string expectedMountPath) -+ public void ParseValidateProcCGroup(bool expectedFound, string procSelfCgroupText, string subsystem, string expectedMountPath) - { -- string path = Path.GetTempFileName(); -- try -- { -- File.WriteAllText(path, procSelfCgroupText); -+ string path = GetTestFilePath(); -+ File.WriteAllText(path, procSelfCgroupText); - -- bool result = Interop.cgroups.TryFindCGroupPathForSubsystem(path, subsystem, out string mountPath); -- -- Assert.Equal(found, result); -- if (found) -- { -- Assert.Equal(expectedMountPath, mountPath); -- } -- } -- finally -+ Assert.Equal(expectedFound, Interop.cgroups.TryFindCGroupPathForSubsystem(path, subsystem, out string mountPath)); -+ if (expectedFound) - { -- File.Delete(path); -+ Assert.Equal(expectedMountPath, mountPath); - } - } - } diff --git a/corefx-optflags-support.patch b/corefx-optflags-support.patch deleted file mode 100644 index 6f76d7f..0000000 --- a/corefx-optflags-support.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/src/Native/Unix/CMakeLists.txt b/src/Native/Unix/CMakeLists.txt -index 7d804a1e54..717c2718d7 100644 ---- a/src/Native/Unix/CMakeLists.txt -+++ b/src/Native/Unix/CMakeLists.txt -@@ -25,7 +25,6 @@ add_compile_options(-fPIC) - add_compile_options(-Wthread-safety) - add_compile_options(-Wno-thread-safety-analysis) - endif() --add_compile_options(-Werror) - - if(CMAKE_SYSTEM_NAME STREQUAL Emscripten) - set(CLR_CMAKE_PLATFORM_WASM 1) -diff --git a/src/Native/Unix/configure.cmake b/src/Native/Unix/configure.cmake -index f4a30ad6cb..f2db68402a 100644 ---- a/src/Native/Unix/configure.cmake -+++ b/src/Native/Unix/configure.cmake -@@ -27,6 +27,12 @@ else () - message(FATAL_ERROR "Unknown platform. Cannot define PAL_UNIX_NAME, used by RuntimeInformation.") - endif () - -+ -+set (PREVIOUS_CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) -+set (CMAKE_CXX_FLAGS "-D_GNU_SOURCE") -+set (PREVIOUS_CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) -+set (CMAKE_C_FLAGS "-D_GNU_SOURCE") -+ - # We compile with -Werror, so we need to make sure these code fragments compile without warnings. - # Older CMake versions (3.8) do not assign the result of their tests, causing unused-value errors - # which are not distinguished from the test failing. So no error for that one. -@@ -698,6 +704,9 @@ endif() - - set (CMAKE_REQUIRED_LIBRARIES) - -+set (CMAKE_CXX_FLAGS "${PREVIOUS_CMAKE_CXX_FLAGS}") -+set (CMAKE_C_FLAGS "${PREVIOUS_CMAKE_C_FLAGS}") -+ - check_c_source_compiles( - " - #include diff --git a/dotnet.sh.in b/dotnet.sh.in deleted file mode 100644 index 65b92a0..0000000 --- a/dotnet.sh.in +++ /dev/null @@ -1,14 +0,0 @@ - -# Set location for AppHost lookup -[ -z "$DOTNET_ROOT" ] && export DOTNET_ROOT=@LIBDIR@/dotnet - -# Add dotnet tools directory to PATH -DOTNET_TOOLS_PATH="$HOME/.dotnet/tools" -case "$PATH" in - *"$DOTNET_TOOLS_PATH"* ) true ;; - * ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;; -esac - -# Extract self-contained executables under HOME -# to avoid multi-user issues from using the default '/var/tmp'. -[ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" diff --git a/dotnet3.1.spec b/dotnet3.1.spec deleted file mode 100644 index 4536929..0000000 --- a/dotnet3.1.spec +++ /dev/null @@ -1,682 +0,0 @@ -%bcond_without bootstrap - -# Avoid provides/requires from private libraries -%global privlibs libhostfxr -%global privlibs %{privlibs}|libclrjit -%global privlibs %{privlibs}|libcoreclr -%global privlibs %{privlibs}|libcoreclrtraceptprovider -%global privlibs %{privlibs}|libdbgshim -%global privlibs %{privlibs}|libhostpolicy -%global privlibs %{privlibs}|libmscordaccore -%global privlibs %{privlibs}|libmscordbi -%global privlibs %{privlibs}|libsos -%global privlibs %{privlibs}|libsosplugin -%global __provides_exclude ^(%{privlibs})\\.so -%global __requires_exclude ^(%{privlibs})\\.so - -# Filter flags not supported by clang -# -fstack-clash-protection -# -specs= -%global dotnet_cflags %(echo %optflags | sed -e 's/-fstack-clash-protection//' | sed -re 's/-specs=[^ ]*//g') -%global dotnet_ldflags %(echo %{__global_ldflags} | sed -re 's/-specs=[^ ]*//g') - -%global host_version 3.1.1 -%global runtime_version 3.1.1 -%global aspnetcore_runtime_version %{runtime_version} -%global sdk_version 3.1.101 -%global templates_version %{runtime_version} - -%global host_rpm_version %{host_version} -%global aspnetcore_runtime_rpm_version %{aspnetcore_runtime_version} -%global runtime_rpm_version %{runtime_version} -%global sdk_rpm_version %{sdk_version} - -%if 0%{?fedora} || 0%{?rhel} < 8 -%global use_bundled_libunwind 0 -%else -%global use_bundled_libunwind 1 -%endif - -%ifarch x86_64 -%global runtime_arch x64 -%endif -%ifarch aarch64 -%global runtime_arch arm64 -%endif - -%if 0%{?fedora} -%global runtime_id fedora.%{fedora}-%{runtime_arch} -%else -%if 0%{?centos} -%global runtime_id centos.%{centos}-%{runtime_arch} -%else -%global runtime_id rhel.%{rhel}-%{runtime_arch} -%endif -%endif - -Name: dotnet3.1 -Version: %{sdk_rpm_version} -Release: 1%{?dist} -Summary: .NET Core Runtime and SDK -License: MIT and ASL 2.0 and BSD and LGPLv2+ and CC-BY and CC0 and MS-PL and EPL-1.0 and GPL+ and GPLv2 and ISC and OFL and zlib -URL: https://github.com/dotnet/ - -# The source is generated on a Fedora box via: -# ./build-dotnet-tarball v%%{sdk_version}-SDK -Source0: dotnet-v%{sdk_version}-SDK.tar.gz -Source1: check-debug-symbols.py -Source2: dotnet.sh.in - -# Fix building with our additional CFLAGS/CXXFLAGS/LDFLAGS -Patch100: corefx-optflags-support.patch - -# Add some support for cgroupv2 in corefx -# All these patches are upstreamed for 5.0 -Patch101: corefx-39686-cgroupv2-01.patch -Patch102: corefx-39686-cgroupv2-02.patch -Patch103: corefx-39633-cgroupv2-mountpoints.patch - -# Build with with hardening flags, including -pie -Patch200: coreclr-hardening-flags.patch - -# Build with with hardening flags, including -pie -Patch300: core-setup-hardening-flags.patch - -# Disable telemetry by default; make it opt-in -Patch500: cli-telemetry-optout.patch - -ExclusiveArch: x86_64 - -BuildRequires: clang -BuildRequires: cmake -BuildRequires: coreutils -%if %{without bootstrap} -BuildRequires: dotnet-build-reference-packages -BuildRequires: dotnet-sdk-3.1 -BuildRequires: dotnet-sdk-3.1-source-built-artifacts -%endif -BuildRequires: git -%if 0%{?fedora} || 0%{?rhel} > 7 -BuildRequires: glibc-langpack-en -%endif -BuildRequires: hostname -BuildRequires: krb5-devel -BuildRequires: libcurl-devel -BuildRequires: libicu-devel -%if ! %{use_bundled_libunwind} -BuildRequires: libunwind-devel -%endif -BuildRequires: lldb-devel -BuildRequires: llvm -BuildRequires: lttng-ust-devel -BuildRequires: make -BuildRequires: openssl-devel -BuildRequires: python3 -BuildRequires: tar -BuildRequires: zlib-devel - -%description -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, macOS and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - -.NET Core contains a runtime conforming to .NET Standards a set of -framework libraries, an SDK containing compilers and a 'dotnet' -application to drive everything. - - -%package -n dotnet - -Version: %{sdk_rpm_version} -Summary: .NET Core CLI tools and runtime - -Requires: dotnet-sdk-3.1%{?_isa} >= %{sdk_rpm_version}-%{release} - -%description -n dotnet -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, macOS and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - -.NET Core contains a runtime conforming to .NET Standards a set of -framework libraries, an SDK containing compilers and a 'dotnet' -application to drive everything. - - -%package -n dotnet-host - -Version: %{host_rpm_version} -Summary: .NET command line launcher - -%description -n dotnet-host -The .NET Core host is a command line program that runs a standalone -.NET core application or launches the SDK. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-hostfxr-3.1 - -Version: %{host_rpm_version} -Summary: .NET Core command line host resolver - -# Theoretically any version of the host should work. But lets aim for the one -# provided by this package, or from a newer version of .NET Core -Requires: dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} - -%description -n dotnet-hostfxr-3.1 -The .NET Core host resolver contains the logic to resolve and select -the right version of the .NET Core SDK or runtime to use. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-runtime-3.1 - -Version: %{runtime_rpm_version} -Summary: NET Core 3.1 runtime - -Requires: dotnet-hostfxr-3.1%{?_isa} >= %{host_rpm_version}-%{release} - -# libicu is dlopen()ed -Requires: libicu%{?_isa} - -%if %{use_bundled_libunwind} -Provides: bundled(libunwind) = 1.3 -%endif - -%description -n dotnet-runtime-3.1 -The .NET Core runtime contains everything needed to run .NET Core applications. -It includes a high performance Virtual Machine as well as the framework -libraries used by .NET Core applications. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n aspnetcore-runtime-3.1 - -Version: %{aspnetcore_runtime_rpm_version} -Summary: ASP.NET Core 3.1 runtime - -Requires: dotnet-runtime-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} - -%description -n aspnetcore-runtime-3.1 -The ASP.NET Core runtime contains everything needed to run .NET Core -web applications. It includes a high performance Virtual Machine as -well as the framework libraries used by .NET Core applications. - -ASP.NET Core is a fast, lightweight and modular platform for creating -cross platform web applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-templates-3.1 - -Version: %{sdk_rpm_version} -Summary: .NET Core 3.1 templates - -# Theoretically any version of the host should work. But lets aim for the one -# provided by this package, or from a newer version of .NET Core -Requires: dotnet-host%{?_isa} >= %{host_rpm_version}-%{release} - -%description -n dotnet-templates-3.1 -This package contains templates used by the .NET Core SDK. - -ASP.NET Core is a fast, lightweight and modular platform for creating -cross platform web applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%package -n dotnet-sdk-3.1 - -Version: %{sdk_rpm_version} -Summary: .NET Core 3.1 Software Development Kit - -Provides: bundled(js-jquery) -Provides: bundled(npm) - -Requires: dotnet-runtime-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} -Requires: aspnetcore-runtime-3.1%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} - -Requires: dotnet-apphost-pack-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} -Requires: dotnet-targeting-pack-3.1%{?_isa} >= %{runtime_rpm_version}-%{release} -Requires: aspnetcore-targeting-pack-3.1%{?_isa} >= %{aspnetcore_runtime_rpm_version}-%{release} -Requires: netstandard-targeting-pack-2.1%{?_isa} >= %{sdk_rpm_version}-%{release} - -Requires: dotnet-templates-3.1%{?_isa} >= %{sdk_rpm_version}-%{release} - -%description -n dotnet-sdk-3.1 -The .NET Core SDK is a collection of command line applications to -create, build, publish and run .NET Core applications. - -.NET Core is a fast, lightweight and modular platform for creating -cross platform applications that work on Linux, Mac and Windows. - -It particularly focuses on creating console applications, web -applications and micro-services. - - -%global dotnet_targeting_pack() %{expand: -%package -n %{1} - -Version: %{2} -Summary: Targeting Pack for %{3} %{4} - -Requires: dotnet-host%{?_isa} - -%description -n %{1} -This package provides a targeting pack for %{3} %{4} -that allows developers to compile against and target %{3} %{4} -applications using the .NET Core SDK. - -%files -n %{1} -%dir %{_libdir}/dotnet/packs -%{_libdir}/dotnet/packs/%{5} -} - -%dotnet_targeting_pack dotnet-apphost-pack-3.1 %{runtime_rpm_version} Microsoft.NETCore.App 3.1 Microsoft.NETCore.App.Host.%{runtime_id} -%dotnet_targeting_pack dotnet-targeting-pack-3.1 %{runtime_rpm_version} Microsoft.NETCore.App 3.1 Microsoft.NETCore.App.Ref -%dotnet_targeting_pack aspnetcore-targeting-pack-3.1 %{aspnetcore_runtime_rpm_version} Microsoft.AspNetCore.App 3.1 Microsoft.AspNetCore.App.Ref -%dotnet_targeting_pack netstandard-targeting-pack-2.1 %{sdk_rpm_version} NETStandard.Library 2.1 NETStandard.Library.Ref - - -%package -n dotnet-sdk-3.1-source-built-artifacts - -Version: %{sdk_rpm_version} -Summary: Internal package for building .NET Core 3.1 Software Development Kit - -%description -n dotnet-sdk-3.1-source-built-artifacts -The .NET Core source-built archive is a collection of packages needed -to build the .NET Core SDK itself. - -These are not meant for general use. - - -%prep -%setup -q -n dotnet-v%{sdk_version}-SDK - -%if %{without bootstrap} -# Remove all prebuilts -find -iname '*.dll' -type f -delete -find -iname '*.so' -type f -delete -find -iname '*.tar.gz' -type f -delete -find -iname '*.nupkg' -type f -delete -find -iname '*.zip' -type f -delete -rm -r .dotnet/ -rm -r packages/source-built -%endif - -%if %{without bootstrap} -sed -i -e 's|3.1.100-preview1-014459|3.1.101|' global.json -mkdir -p packages/archive -ln -s %{_libdir}/dotnet/source-built-artifacts/*.tar.gz packages/archive/ -ln -s %{_libdir}/dotnet/reference-packages/Private.SourceBuild.ReferencePackages*.tar.gz packages/archive -%endif - -# Fix bad hardcoded path in build -sed -i 's|/usr/share/dotnet|%{_libdir}/dotnet|' src/dotnet-core-setup.*/src/corehost/common/pal.unix.cpp - -# Disable warnings -sed -i 's|skiptests|skiptests ignorewarnings|' repos/coreclr.proj - -pushd src/corefx.* -%patch100 -p1 -%patch101 -p1 -%patch102 -p1 -%patch103 -p1 -popd - -pushd src/coreclr.* -%patch200 -p1 -popd - -pushd src/dotnet-core-setup.* -%patch300 -p1 -popd - -pushd src/dotnet-cli.* -%patch500 -p1 -popd - -# If CLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE is misisng, add it back -grep CLR_CMAKE_USE_SYSTEM_LIBUNWIND repos/coreclr.proj || \ - sed -i 's|\$(BuildArguments) |$(BuildArguments) cmakeargs -DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|' repos/coreclr.proj - -%if %{use_bundled_libunwind} -sed -i 's|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=TRUE|-DCLR_CMAKE_USE_SYSTEM_LIBUNWIND=FALSE|' repos/coreclr.proj -%endif - -cat source-build-info.txt - -find -iname 'nuget.config' -exec echo {}: \; -exec cat {} \; -exec echo \; - - -%build -cat /etc/os-release - -%if %{without bootstrap} -cp -a %{_libdir}/dotnet .dotnet -%endif - -export CFLAGS="%{dotnet_cflags}" -export CXXFLAGS="%{dotnet_cflags}" -export LDFLAGS="%{dotnet_ldflags}" - -VERBOSE=1 ./build.sh \ - /v:n \ - /p:LogVerbosity=n \ - /p:MinimalConsoleLogOutput=false \ - /p:ContinueOnPrebuiltBaselineError=true \ - - -sed -e 's|[@]LIBDIR[@]|%{_libdir}|g' %{SOURCE2} > dotnet.sh - - -%install -install -dm 0755 %{buildroot}%{_libdir}/dotnet -ls bin/%{runtime_arch}/Release -tar xf bin/%{runtime_arch}/Release/dotnet-sdk-%{sdk_version}-%{runtime_id}.tar.gz -C %{buildroot}%{_libdir}/dotnet/ - -# Install managed symbols -tar xf bin/%{runtime_arch}/Release/runtime/dotnet-runtime-symbols-%{runtime_version}-%{runtime_id}.tar.gz \ - -C %{buildroot}/%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version}/ - -# Fix executable permissions on files -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.dll' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pdb' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.props' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.pubxml' -exec chmod -x {} \; -find %{buildroot}%{_libdir}/dotnet/ -type f -name '*.targets' -exec chmod -x {} \; -chmod 0755 %{buildroot}/%{_libdir}/dotnet/sdk/%{sdk_version}/AppHostTemplate/apphost -chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/libnethost.so -chmod 0755 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/apphost -chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.NETCore.App.Host.%{runtime_id}/%{runtime_version}/runtimes/%{runtime_id}/native/nethost.h -chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.0/obj/Microsoft.AspNetCore.App.Ref.csproj.nuget.cache -chmod 0644 %{buildroot}/%{_libdir}/dotnet/packs/Microsoft.AspNetCore.App.Ref/3.1.0/Microsoft.AspNetCore.App.Ref/3.1.0/Debug/netstandard2.0/Microsoft.AspNetCore.App.Ref.assets.cache - -install -dm 0755 %{buildroot}%{_sysconfdir}/profile.d/ -install dotnet.sh %{buildroot}%{_sysconfdir}/profile.d/ - -install -dm 0755 %{buildroot}/%{_datadir}/bash-completion/completions -# dynamic completion needs the file to be named the same as the base command -install src/dotnet-cli.*/scripts/register-completions.bash %{buildroot}/%{_datadir}/bash-completion/completions/dotnet - -# TODO: the zsh completion script needs to be ported to use #compdef -#install -dm 755 %%{buildroot}/%%{_datadir}/zsh/site-functions -#install src/cli/scripts/register-completions.zsh %%{buildroot}/%%{_datadir}/zsh/site-functions/_dotnet - -install -dm 0755 %{buildroot}%{_bindir} -ln -s ../../%{_libdir}/dotnet/dotnet %{buildroot}%{_bindir}/ - -install -dm 0755 %{buildroot}%{_mandir}/man1/ -find -iname 'dotnet*.1' -type f -exec cp {} %{buildroot}%{_mandir}/man1/ \; - -echo "%{_libdir}/dotnet" >> install_location -install -dm 0755 %{buildroot}%{_sysconfdir}/dotnet -install install_location %{buildroot}%{_sysconfdir}/dotnet/ - -install -dm 0755 %{buildroot}%{_libdir}/dotnet/source-built-artifacts -install bin/%{runtime_arch}/Release/Private.SourceBuilt.Artifacts.*.tar.gz %{buildroot}/%{_libdir}/dotnet/source-built-artifacts/ - -# Check debug symbols in all elf objects. This is not in %%check -# because native binaries are stripped by rpm-build after %%install. -# So we need to do this check earlier. -echo "Testing build results for debug symbols..." -%{SOURCE1} -v %{buildroot}%{_libdir}/dotnet/ - - -%check -%{buildroot}%{_libdir}/dotnet/dotnet --info - - -%files -n dotnet -# empty package useful for dependencies - -%files -n dotnet-host -%dir %{_libdir}/dotnet -%{_libdir}/dotnet/dotnet -%dir %{_libdir}/dotnet/host -%dir %{_libdir}/dotnet/host/fxr -%{_bindir}/dotnet -%license %{_libdir}/dotnet/LICENSE.txt -%license %{_libdir}/dotnet/ThirdPartyNotices.txt -%doc %{_mandir}/man1/dotnet*.1.gz -%{_sysconfdir}/profile.d/dotnet.sh -%{_sysconfdir}/dotnet -%dir %{_datadir}/bash-completion -%dir %{_datadir}/bash-completion/completions -%{_datadir}/bash-completion/completions/dotnet - -%files -n dotnet-hostfxr-3.1 -%dir %{_libdir}/dotnet/host/fxr -%{_libdir}/dotnet/host/fxr/%{host_version} - -%files -n dotnet-runtime-3.1 -%dir %{_libdir}/dotnet/shared -%dir %{_libdir}/dotnet/shared/Microsoft.NETCore.App -%{_libdir}/dotnet/shared/Microsoft.NETCore.App/%{runtime_version} - -%files -n aspnetcore-runtime-3.1 -%dir %{_libdir}/dotnet/shared -%dir %{_libdir}/dotnet/shared/Microsoft.AspNetCore.App -%{_libdir}/dotnet/shared/Microsoft.AspNetCore.App/%{aspnetcore_runtime_version} - -%files -n dotnet-templates-3.1 -%dir %{_libdir}/dotnet/templates -%{_libdir}/dotnet/templates/%{templates_version} - -%files -n dotnet-sdk-3.1 -%dir %{_libdir}/dotnet/sdk -%{_libdir}/dotnet/sdk/%{sdk_version} -%dir %{_libdir}/dotnet/packs - -%files -n dotnet-sdk-3.1-source-built-artifacts -%dir %{_libdir}/dotnet -%{_libdir}/dotnet/source-built-artifacts - - -%changelog -* Tue Jan 21 2020 Omair Majid - 3.1.101-1 -- Update to .NET Core Runtime 3.1.1 and SDK 3.1.101 - -* Thu Dec 05 2019 Omair Majid - 3.1.100-1 -- Update to .NET Core Runtime 3.1.0 and SDK 3.1.100 - -* Mon Nov 18 2019 Omair Majid - 3.1.100-0.4.preview3 -- Fix apphost permissions - -* Fri Nov 15 2019 Omair Majid - 3.1.100-0.3.preview3 -- Update to .NET Core Runtime 3.1.0-preview3.19553.2 and SDK - 3.1.100-preview3-014645 - -* Wed Nov 06 2019 Omair Majid - 3.1.100-0.2 -- Update to .NET Core 3.1 Preview 2 - -* Wed Oct 30 2019 Omair Majid - 3.1.100-0.1 -- Update to .NET Core 3.1 Preview 1 - -* Thu Oct 24 2019 Omair Majid - 3.0.100-5 -- Add cgroupv2 support to .NET Core - -* Wed Oct 16 2019 Omair Majid - 3.0.100-4 -- Include fix from coreclr for building on Fedora 32 - -* Wed Oct 16 2019 Omair Majid - 3.0.100-3 -- Harden built binaries to pass annocheck - -* Fri Oct 11 2019 Omair Majid - 3.0.100-2 -- Export DOTNET_ROOT in profile to make apphost lookup work - -* Fri Sep 27 2019 Omair Majid - 3.0.100-1 -- Update to .NET Core Runtime 3.0.0 and SDK 3.0.100 - -* Wed Sep 25 2019 Omair Majid - 3.0.100-0.18.rc1 -- Update to .NET Core Runtime 3.0.0-rc1-19456-20 and SDK 3.0.100-rc1-014190 - -* Tue Sep 17 2019 Omair Majid - 3.0.100-0.16.preview9 -- Fix files duplicated between dotnet-apphost-pack-3.0 and dotnet-targeting-pack-3.0 -- Fix dependencies between .NET SDK and the targeting packs - -* Mon Sep 16 2019 Omair Majid - 3.0.100-0.15.preview9 -- Update to .NET Core Runtime 3.0.0-preview 9 and SDK 3.0.100-preview9 - -* Mon Aug 19 2019 Omair Majid - 3.0.100-0.11.preview8 -- Update to .NET Core Runtime 3.0.0-preview8-28405-07 and SDK - 3.0.100-preview8-013656 - -* Tue Jul 30 2019 Omair Majid - 3.0.100-0.9.preview7 -- Update to .NET Core Runtime 3.0.0-preview7-27912-14 and SDK - 3.0.100-preview7-012821 - -* Fri Jul 26 2019 Omair Majid - 3.0.100-0.8.preview7 -- Update to .NET Core Runtime 3.0.0-preview7-27902-19 and SDK - 3.0.100-preview7-012802 - -* Wed Jun 26 2019 Omair Majid - 3.0.0-0.7.preview6 -- Obsolete dotnet-sdk-3.0.1xx -- Add supackages for targeting packs -- Add -fcf-protection to CFLAGS - -* Wed Jun 26 2019 Omair Majid - 3.0.0-0.6.preview6 -- Update to .NET Core Runtime 3.0.0-preview6-27804-01 and SDK 3.0.100-preview6-012264 -- Set dotnet installation location in /etc/dotnet/install_location -- Update targeting packs -- Install managed symbols -- Completely conditionalize libunwind bundling - -* Tue May 07 2019 Omair Majid - 3.0.0-0.3.preview4 -- Update to .NET Core 3.0 preview 4 - -* Tue Dec 18 2018 Omair Majid - 3.0.0-0.1.preview1 -- Update to .NET Core 3.0 preview 1 - -* Fri Dec 07 2018 Omair Majid - 2.2.100 -- Update to .NET Core 2.2.0 - -* Wed Nov 07 2018 Omair Majid - 2.2.100-0.2.preview3 -- Update to .NET Core 2.2.0-preview3 - -* Fri Nov 02 2018 Omair Majid - 2.1.403-3 -- Add host-fxr-2.1 subpackage - -* Mon Oct 15 2018 Omair Majid - 2.1.403-2 -- Disable telemetry by default -- Users have to manually export DOTNET_CLI_TELEMETRY_OPTOUT=0 to enable - -* Tue Oct 02 2018 Omair Majid - 2.1.403-1 -- Update to .NET Core Runtime 2.1.5 and SDK 2.1.403 - -* Wed Sep 26 2018 Omair Majid - 2.1.402-2 -- Add ~/.dotnet/tools to $PATH to make it easier to use dotnet tools - -* Thu Sep 13 2018 Omair Majid - 2.1.402-1 -- Update to .NET Core Runtime 2.1.4 and SDK 2.1.402 - -* Wed Sep 05 2018 Omair Majid - 2.1.401-2 -- Use distro-standard flags when building .NET Core - -* Tue Aug 21 2018 Omair Majid - 2.1.401-1 -- Update to .NET Core Runtime 2.1.3 and SDK 2.1.401 - -* Mon Aug 20 2018 Omair Majid - 2.1.302-1 -- Update to .NET Core Runtime 2.1.2 and SDK 2.1.302 - -* Fri Jul 20 2018 Omair Majid - 2.1.301-1 -- Update to .NET Core 2.1 - -* Thu May 03 2018 Omair Majid - 2.0.7-1 -- Update to .NET Core 2.0.7 - -* Wed Mar 28 2018 Omair Majid - 2.0.6-2 -- Enable bash completion for dotnet -- Remove redundant buildrequires and requires - -* Wed Mar 14 2018 Omair Majid - 2.0.6-1 -- Update to .NET Core 2.0.6 - -* Fri Feb 23 2018 Omair Majid - 2.0.5-1 -- Update to .NET Core 2.0.5 - -* Wed Jan 24 2018 Omair Majid - 2.0.3-5 -- Don't apply corefx clang warnings fix on clang < 5 - -* Fri Jan 19 2018 Omair Majid - 2.0.3-4 -- Add a test script to sanity check debug and symbol info. -- Build with clang 5.0 -- Make main package real instead of using a virtual provides (see RHBZ 1519325) - -* Wed Nov 29 2017 Omair Majid - 2.0.3-3 -- Add a Provides for 'dotnet' -- Fix conditional macro - -* Tue Nov 28 2017 Omair Majid - 2.0.3-2 -- Fix build on Fedora 27 - -* Fri Nov 17 2017 Omair Majid - 2.0.3-1 -- Update to .NET Core 2.0.3 - -* Thu Oct 19 2017 Omair Majid - 2.0.0-4 -- Add a hack to let omnisharp work - -* Wed Aug 30 2017 Omair Majid - 2.0.0-3 -- Add a patch for building coreclr and core-setup correctly on Fedora >= 27 - -* Fri Aug 25 2017 Omair Majid - 2.0.0-2 -- Move libicu/libcurl/libunwind requires to runtime package -- Make sdk depend on the exact version of the runtime package - -* Thu Aug 24 2017 Omair Majid - 2.0.0-1 -- Update to 2.0.0 final release - -* Wed Jul 26 2017 Omair Majid - 2.0.0-0.3.preview2 -- Add man pages - -* Tue Jul 25 2017 Omair Majid - 2.0.0-0.2.preview2 -- Add Requires on libicu -- Split into multiple packages -- Do not repeat first-run message - -* Fri Jul 21 2017 Omair Majid - 2.0.0-0.1.preview2 -- Update to .NET Core 2.0 Preview 2 - -* Thu Mar 16 2017 Nemanja Milošević - 1.1.0-7 -- rebuilt with latest libldb -* Wed Feb 22 2017 Nemanja Milosevic - 1.1.0-6 -- compat-openssl 1.0 for F26 for now -* Sun Feb 19 2017 Nemanja Milosevic - 1.1.0-5 -- Fix wrong commit id's -* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-4 -- Use commit id's instead of branch names -* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-3 -- Improper patch5 fix -* Sat Feb 18 2017 Nemanja Milosevic - 1.1.0-2 -- SPEC cleanup -- git removal (using all tarballs for reproducible builds) -- more reasonable versioning -* Thu Feb 09 2017 Nemanja Milosevic - 1.1.0-1 -- Fixed debuginfo going to separate package (Patch1) -- Added F25/F26 RIL and fixed the version info (Patch2) -- Added F25/F26 RIL in Microsoft.NETCore.App suported runtime graph (Patch3) -- SPEC file cleanup -* Wed Jan 11 2017 Nemanja Milosevic - 1.1.0-0 -- Initial RPM for Fedora 25/26. - diff --git a/rename-tarball b/rename-tarball deleted file mode 100755 index b6b6086..0000000 --- a/rename-tarball +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -# Usage: -# ./rename-tarball original-name.tar.gz new-name.tar.gz - -set -euo pipefail -IFS=$'\n\t' - -positional_args=() -while [[ "$#" -gt 0 ]]; do - arg="${1}" - case "${arg}" in - -h|--help) - print_usage - exit 0 - ;; - *) - positional_args+=("$1") - shift - ;; - esac -done - -original_name=${positional_args[0]:-} -if [[ -z ${original_name} ]]; then - echo "error: missing original tarball name" - exit 1 -fi - -new_name=${positional_args[1]:-} -if [[ -z ${new_name} ]]; then - echo "error: missing new tarball name" - exit 1 -fi - -original_name=${original_name/%.tar.gz} -new_name=${new_name/.tar.gz} - -echo "Original: ${original_name}.tar.gz" -echo "New name: ${new_name}.tar.gz" - -mkdir "temp-${new_name}" -pushd "temp-${new_name}" -tar xf "../${original_name}.tar.gz" -mv "${original_name}" "${new_name}" -tar czf ../"${new_name}.tar.gz" "${new_name}" -rm -rf "${new_name}" -popd -rmdir "temp-${new_name}" diff --git a/tests/Dockerfile b/tests/Dockerfile deleted file mode 100644 index 2dbc908..0000000 --- a/tests/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM fedora:28 - -RUN dnf install -y dnf-plugins-core && \ - dnf copr enable @dotnet-sig/dotnet-preview -y && \ - dnf upgrade --refresh -y && \ - dnf install -y dotnet-sdk-3.1 standard-test-roles ansible git && \ - dnf clean all - -# Keep files created by ansible. Useful for debugging -ENV ANSIBLE_KEEP_REMOTE_FILES=1 -ENV TEST_DEBUG=1 - -RUN mkdir /dotnet-3-1/ -COPY tests.yml /dotnet-3-1/tests.yml - -CMD ["ansible-playbook", "dotnet-3-1/tests.yml"] diff --git a/tests/tests.yml b/tests/tests.yml deleted file mode 100644 index 07288c8..0000000 --- a/tests/tests.yml +++ /dev/null @@ -1,26 +0,0 @@ ---- -- hosts: localhost - roles: - - role: standard-test-basic - tags: - - classic - - container - - atomic - repositories: - - repo: "https://github.com/redhat-developer/dotnet-bunny.git" - dest: "dotnet-bunny" - - repo: "https://github.com/redhat-developer/dotnet-regular-tests.git" - dest: "dotnet-bunny/dotnet-regular-tests" - tests: - - regular: - dir: dotnet-bunny/ - run: ./run-tests.py 3.1 -l={{ remote_artifacts }} - required_packages: - - expect - - which - - python3 - - jq - - bash-completion - - binutils - - npm - - strace diff --git a/update-release b/update-release deleted file mode 100755 index 09eb509..0000000 --- a/update-release +++ /dev/null @@ -1,62 +0,0 @@ -#!/bin/bash - -# Usage: -# ./update-release runtime-version sdk-version - -set -euo pipefail -IFS=$'\n\t' - -print_usage() { - echo " Usage:" - echo " ./update-release runtime-version sdk-version" -} - -positional_args=() -while [[ "$#" -gt 0 ]]; do - arg="${1}" - case "${arg}" in - -h|--help) - print_usage - exit 0 - ;; - *) - positional_args+=("$1") - shift - ;; - esac -done - -spec_file=dotnet3.1.spec - -runtime_version=${positional_args[0]:-} -if [[ -z ${runtime_version} ]]; then - echo "error: missing runtime version" - exit 1 -fi -host_version="$runtime_version" - -sdk_version=${positional_args[1]:-} -if [[ -z ${sdk_version} ]]; then - echo "error: missing sdk version" - exit 1 -fi - -if [[ ! -f "dotnet-v${sdk_version}-SDK.tar.gz" ]]; then - ./build-dotnet-tarball "v${sdk_version}-SDK" -fi - -set -x - -sed -i -E "s|^%global host_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global host_version ${host_version}|" "$spec_file" -sed -i -E "s|^%global runtime_version [[:digit:]]\.[[:digit:]]\.[[:digit:]]+|%global runtime_version ${runtime_version}|" "$spec_file" -sed -i -E "s|^%global sdk_version [[:digit:]]\.[[:digit:]]\.[[:digit:]][[:digit:]][[:digit:]]|%global sdk_version ${sdk_version}|" "$spec_file" - -comment="Update to .NET Core Runtime ${runtime_version} and SDK ${sdk_version}" - -rpmdev-bumpspec --comment="$comment" $spec_file - -# Reset release to 1 in 'Release' tag -sed -i -E 's|^Release: [[:digit:]]+%|Release: 1%|' $spec_file -# Reset Release in changelog comment -# See https://stackoverflow.com/questions/18620153/find-matching-text-and-replace-next-line -sed -i -E '/^%changelog$/!b;n;s/-[[:digit:]]+$/-1/' $spec_file