diff --git a/build.psm1 b/build.psm1 index aaa2cfa66f..3535525267 100644 --- a/build.psm1 +++ b/build.psm1 @@ -37,6 +37,14 @@ if ($IsLinux) { $IsUbuntu14 = $IsUbuntu -and $LinuxInfo.VERSION_ID -match '14.04' $IsUbuntu16 = $IsUbuntu -and $LinuxInfo.VERSION_ID -match '16.04' $IsCentOS = $LinuxInfo.ID -match 'centos' -and $LinuxInfo.VERSION_ID -match '7' + $IsFedora = $LinuxInfo.ID -match 'fedora' -and $LinuxInfo.VERSION_ID -ge 24 + $IsRedHatFamily = $IsCentOS -or $IsFedora + + # Workaround for temporary LD_LIBRARY_PATH hack for Fedora 24 + if (Test-Path ENV:\LD_LIBRARY_PATH) { + Remove-Item -Force ENV:\LD_LIBRARY_PATH + Get-ChildItem ENV: + } } # @@ -81,6 +89,7 @@ function Start-PSBuild { "ubuntu.16.04-x64", "debian.8-x64", "centos.7-x64", + "fedora.24-x64", "win7-x64", "win7-x86", "win81-x64", @@ -441,6 +450,7 @@ function New-PSOptions { "ubuntu.16.04-x64", "debian.8-x64", "centos.7-x64", + "fedora.24-x64", "win7-x86", "win7-x64", "win81-x64", @@ -953,6 +963,15 @@ function Install-Dotnet { } } +function Get-RedHatPackageManager { + if ($IsRedHatFamily -and $IsCentOS) { + "yum" + } elseif ($IsRedHatFamily -and $IsFedora) { + "dnf" + } else { + throw "Error determining package manager for this distribution." + } +} function Start-PSBootstrap { [CmdletBinding( @@ -1009,7 +1028,7 @@ function Start-PSBootstrap { Invoke-Expression "$sudo apt-get update" Invoke-Expression "$sudo apt-get install -y -qq $Deps" } - } elseif ($IsCentOS) { + } elseif ($IsRedHatFamily) { # Build tools $Deps += "which", "curl", "gcc-c++", "cmake", "make" @@ -1019,9 +1038,11 @@ function Start-PSBootstrap { # Packaging tools if ($Package) { $Deps += "ruby-devel", "rpm-build", "groff" } + $PackageManager = Get-RedHatPackageManager + # Install dependencies Start-NativeExecution { - Invoke-Expression "$sudo yum install -y -q $Deps" + Invoke-Expression "$sudo $PackageManager install -y -q $Deps" } } elseif ($IsOSX) { precheck 'brew' "Bootstrap dependency 'brew' not found, must install Homebrew! See http://brew.sh/" @@ -1201,7 +1222,7 @@ function Start-PSPackage { [ValidatePattern("^powershell")] [string]$Name = "powershell", - # Ubuntu, CentOS, and OS X, and Windows packages are supported + # Ubuntu, CentOS, Fedora, OS X, and Windows packages are supported [ValidateSet("deb", "osxpkg", "rpm", "msi", "appx", "zip")] [string[]]$Type, @@ -1255,7 +1276,7 @@ function Start-PSPackage { $Type = if ($IsLinux) { if ($LinuxInfo.ID -match "ubuntu") { "deb" - } elseif ($LinuxInfo.ID -match "centos") { + } elseif ($IsRedHatFamily) { "rpm" } else { throw "Building packages for $($LinuxInfo.PRETTY_NAME) is unsupported!" @@ -1366,8 +1387,8 @@ function New-UnixPackage { } } "rpm" { - if (!$IsCentOS) { - throw ($ErrorMessage -f "CentOS") + if (!$IsRedHatFamily) { + throw ($ErrorMessage -f "Redhat Family") } } "osxpkg" { @@ -1431,7 +1452,7 @@ It consists of a cross-platform command-line shell and associated scripting lang New-Item -Force -ItemType SymbolicLink -Path "/tmp/$Name" -Target "$Destination/$Name" >$null - if ($IsCentos) { + if ($IsRedHatFamily) { # add two symbolic links to system shared libraries that libmi.so is dependent on to handle # platform specific changes. This is the only set of platforms needed for this currently # as Ubuntu has these specific library files in the platform and OSX builds for itself @@ -1555,7 +1576,7 @@ esac } elseif ($IsUbuntu16) { $Dependencies += "libicu55" } - } elseif ($IsCentOS) { + } elseif ($IsRedHatFamily) { $Dependencies = @( "glibc", "libcurl", @@ -1578,9 +1599,15 @@ esac $Iteration += "ubuntu1.16.04.1" } - # We currently only support CentOS 7 + # We currently only support CentOS 7 and Fedora 24+ # https://fedoraproject.org/wiki/Packaging:DistTag - $rpm_dist = "el7.centos" + if ($IsCentOS) { + $rpm_dist = "el7.centos" + } elseif ($IsFedora) { + $version_id = $LinuxInfo.VERSION_ID + $rpm_dist = "fedora.$version_id" + } + $Arguments = @( "--force", "--verbose", @@ -2586,6 +2613,7 @@ function Start-CrossGen { "ubuntu.16.04-x64", "debian.8-x64", "centos.7-x64", + "fedora.24-x64", "win7-x86", "win7-x64", "win81-x64", @@ -2652,6 +2680,8 @@ function Start-CrossGen { "ubuntu.14.04-x64" } elseif ($IsCentOS) { "rhel.7-x64" + } elseif ($IsFedora) { + "fedora.24-x64" } } elseif ($IsOSX) { "osx.10.10-x64" diff --git a/docker/nightly/fedora24/Dockerfile b/docker/nightly/fedora24/Dockerfile new file mode 100644 index 0000000000..726065312c --- /dev/null +++ b/docker/nightly/fedora24/Dockerfile @@ -0,0 +1,17 @@ +FROM microsoft/powershell:fedora24 +MAINTAINER Andrew Schwartzmeyer +LABEL Readme.md="https://github.com/PowerShell/PowerShell/blob/master/docker/README.md" +LABEL Description="This Dockerfile will install and build the latest release of PS." + +ARG fork=PowerShell +ARG branch=master +SHELL ["powershell", "-command"] +RUN git clone --recursive https://github.com/$env:fork/PowerShell.git -b $env:branch; \ + Set-Location PowerShell; \ + Import-Module ./build.psm1; \ + Start-PSBootstrap -Package -NoSudo; \ + Start-PSBuild -Crossgen -PSModuleRestore; \ + Start-PSPackage; + +SHELL ["/bin/sh", "-c"] +RUN dnf install -y PowerShell/powershell*.rpm diff --git a/docker/release/fedora24/Dockerfile b/docker/release/fedora24/Dockerfile new file mode 100644 index 0000000000..4899be1da2 --- /dev/null +++ b/docker/release/fedora24/Dockerfile @@ -0,0 +1,64 @@ +FROM fedora:24 +MAINTAINER Andrew Schwartzmeyer + +# This release Dockerfile uses the CentOS 7 build for the purposes of enabling +# nightlies + +ARG POWERSHELL_VERSION=6.0.0-alpha.13 +ARG POWERSHELL_RELEASE=v6.0.0-alpha.13 +ARG POWERSHELL_PACKAGE=powershell-6.0.0_alpha.13-1.el7.centos.x86_64.rpm + +# The CentOS 7 release relies on an older version of libicu, so we'll be downloading it +# from the University of Kent (GB) mirror service. +ARG LIBICU50_SOURCE=https://www.mirrorservice.org/sites/mirror.centos.org/7.2.1511/os/x86_64/Packages +ARG LIBICU50_PACKAGE=libicu-50.1.2-15.el7.x86_64.rpm +ARG LIBICU50_PACKAGE_MD5=c3c1ebaabc8d1619377d535698784953 + +# Install the English language pack first + +RUN dnf install -y glibc glibc-langpack-en glibc-locale-source + +ENV LANG en_US.UTF-8 +ENV LC_ALL $LANG +RUN localedef --charmap=UTF-8 --inputfile=en_US $LANG + +# Disable Delta RPMS +RUN echo "deltarpm=False" >> /etc/dnf/dnf.conf + +# Install dependencies and clean up +RUN dnf install -y \ + libcurl \ + ca-certificates \ + libgcc \ + libicu \ + openssl \ + libstdc++ \ + ncurses-base \ + libunwind \ + uuid \ + zlib \ + which \ + curl \ + git \ + cpio \ + && dnf update -y \ + && dnf clean all + +# Install PowerShell package +RUN curl -SLO https://github.com/PowerShell/PowerShell/releases/download/$POWERSHELL_RELEASE/$POWERSHELL_PACKAGE \ + && dnf install -y $POWERSHELL_PACKAGE \ + && rm $POWERSHELL_PACKAGE + +# Once the next release of PowerShell is done, this libicu50 & LD_LIBRARY_PATH hackery can be dropped. +RUN curl -SLO ${LIBICU50_SOURCE}/${LIBICU50_PACKAGE} \ + && md5sum $LIBICU50_PACKAGE | grep $LIBICU50_PACKAGE_MD5 \ + && cd /opt/microsoft/powershell/$POWERSHELL_VERSION \ + && rpm2cpio /$LIBICU50_PACKAGE | cpio -idmv \ + && rm /$LIBICU50_PACKAGE + +# Append the old library to LD_LIBRARY_PATH + +ENV LD_LIBRARY_PATH /opt/microsoft/powershell/$POWERSHELL_VERSION/usr/lib64 + +# Use array to avoid Docker prepending /bin/sh -c +ENTRYPOINT [ "powershell" ] diff --git a/src/ResGen/project.json b/src/ResGen/project.json index 92410e028d..6ad96f2c74 100644 --- a/src/ResGen/project.json +++ b/src/ResGen/project.json @@ -22,6 +22,7 @@ "ubuntu.14.04-x64": { }, "debian.8-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "win7-x86": { }, "win7-x64": { }, "win81-x64": { }, diff --git a/src/TypeCatalogGen/project.json b/src/TypeCatalogGen/project.json index 18b73d036a..ba658a7f93 100644 --- a/src/TypeCatalogGen/project.json +++ b/src/TypeCatalogGen/project.json @@ -47,6 +47,7 @@ "ubuntu.16.10-x64": { }, "debian.8-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "win7-x86": { }, "win7-x64": { }, "win81-x64": { }, diff --git a/src/TypeCatalogParser/project.json b/src/TypeCatalogParser/project.json index 6eef8fd7d2..e385685ba4 100644 --- a/src/TypeCatalogParser/project.json +++ b/src/TypeCatalogParser/project.json @@ -45,6 +45,7 @@ "ubuntu.16.04-x64": { }, "ubuntu.16.10-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "win7-x86": { }, "win7-x64": { }, "win10-x64": { }, diff --git a/src/powershell-unix/project.json b/src/powershell-unix/project.json index f63c3b96c1..511f8f7740 100644 --- a/src/powershell-unix/project.json +++ b/src/powershell-unix/project.json @@ -102,6 +102,7 @@ "ubuntu.16.10-x64": { }, "debian.8-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "osx.10.11-x64": { } } } diff --git a/test/PSReadLine/project.json b/test/PSReadLine/project.json index 7e9acb4e06..741ab1e38a 100644 --- a/test/PSReadLine/project.json +++ b/test/PSReadLine/project.json @@ -25,6 +25,7 @@ "ubuntu.14.04-x64": { }, "ubuntu.16.04-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "win7-x86": { }, "win7-x64": { }, "win10-x64": { }, diff --git a/test/csharp/project.json b/test/csharp/project.json index 9dead4604c..16930621b2 100644 --- a/test/csharp/project.json +++ b/test/csharp/project.json @@ -30,6 +30,7 @@ "ubuntu.16.04-x64": { }, "debian.8-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "win7-x86": { }, "win7-x64": { }, "win81-x64": { }, diff --git a/test/tools/CreateChildProcess/project.json b/test/tools/CreateChildProcess/project.json index 156487aaa4..90dc5ed0e6 100644 --- a/test/tools/CreateChildProcess/project.json +++ b/test/tools/CreateChildProcess/project.json @@ -20,6 +20,7 @@ "ubuntu.14.04-x64": { }, "debian.8-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "win7-x86": { }, "win7-x64": { }, "win81-x64": { }, diff --git a/test/tools/EchoArgs/project.json b/test/tools/EchoArgs/project.json index cf4de148d4..8273c36659 100644 --- a/test/tools/EchoArgs/project.json +++ b/test/tools/EchoArgs/project.json @@ -20,6 +20,7 @@ "ubuntu.14.04-x64": { }, "debian.8-x64": { }, "centos.7-x64": { }, + "fedora.24-x64": { }, "win7-x86": { }, "win7-x64": { }, "win81-x64": { },