Initial Support for Fedora 24 (#2738)

* Initial support for Fedora 24
This commit adds initial support for the Fedora distribution,
starting with Fedora 24.

Whereever possible, build tooling for CentOS has been reused.

Until the next release of PowerShell is compiled against .NET 1.1,
the Docker release image uses the CentOS 7 build, but loads
in the CentOS 7 version of `libicu50` via LD_LIBRARY_PATH.

* Update Dockerfile

Fix typos
This commit is contained in:
Naadir Jeewa 2017-01-06 18:04:18 +00:00 committed by Andrew Schwartzmeyer
parent d6daf1f068
commit 01dfb88e4d
11 changed files with 129 additions and 10 deletions

View file

@ -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"

View file

@ -0,0 +1,17 @@
FROM microsoft/powershell:fedora24
MAINTAINER Andrew Schwartzmeyer <andschwa@microsoft.com>
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

View file

@ -0,0 +1,64 @@
FROM fedora:24
MAINTAINER Andrew Schwartzmeyer <andschwa@microsoft.com>
# 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" ]

View file

@ -22,6 +22,7 @@
"ubuntu.14.04-x64": { },
"debian.8-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"win7-x86": { },
"win7-x64": { },
"win81-x64": { },

View file

@ -47,6 +47,7 @@
"ubuntu.16.10-x64": { },
"debian.8-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"win7-x86": { },
"win7-x64": { },
"win81-x64": { },

View file

@ -45,6 +45,7 @@
"ubuntu.16.04-x64": { },
"ubuntu.16.10-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"win7-x86": { },
"win7-x64": { },
"win10-x64": { },

View file

@ -102,6 +102,7 @@
"ubuntu.16.10-x64": { },
"debian.8-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"osx.10.11-x64": { }
}
}

View file

@ -25,6 +25,7 @@
"ubuntu.14.04-x64": { },
"ubuntu.16.04-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"win7-x86": { },
"win7-x64": { },
"win10-x64": { },

View file

@ -30,6 +30,7 @@
"ubuntu.16.04-x64": { },
"debian.8-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"win7-x86": { },
"win7-x64": { },
"win81-x64": { },

View file

@ -20,6 +20,7 @@
"ubuntu.14.04-x64": { },
"debian.8-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"win7-x86": { },
"win7-x64": { },
"win81-x64": { },

View file

@ -20,6 +20,7 @@
"ubuntu.14.04-x64": { },
"debian.8-x64": { },
"centos.7-x64": { },
"fedora.24-x64": { },
"win7-x86": { },
"win7-x64": { },
"win81-x64": { },