-
Notifications
You must be signed in to change notification settings - Fork 8k
Bundle PIE with PHP by default #21524
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
1cfcc88
93bdfd1
742c940
ce67233
0069c55
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,39 @@ | ||
| piedir=$(PIE_INSTALLDIR) | ||
|
|
||
| PIE_PHP_FLAGS = -dmemory_limit=-1 | ||
|
|
||
| CURL = `which curl 2>/dev/null` | ||
| WGET = `which wget 2>/dev/null` | ||
| FETCH = `which fetch 2>/dev/null` | ||
| FETCH_PHP = $(top_srcdir)/pear/fetch.php | ||
| GH = `which gh 2>/dev/null` | ||
| PIE_PHAR_URL = https://github.com/php/pie/releases/latest/download/pie.phar | ||
| PIE_PHAR_TEMP_DL_LOCATION = $(top_srcdir)/pie/pie_temp.phar | ||
| PIE_PHAR_DESTINATION = $(INSTALL_ROOT)$(piedir)/pie | ||
|
|
||
| $(PIE_PHAR_DESTINATION): | ||
| @echo "Installing PIE: $(PIE_PHAR_DESTINATION)" | ||
| # First, figure out a way to download the phar, with curl, wget, fetch, or a backup PHP script... | ||
| @if test ! -z "$(CURL)" && test -x "$(CURL)"; then \ | ||
| "$(CURL)" --no-progress-meter --silent --location "${PIE_PHAR_URL}" --output $(PIE_PHAR_TEMP_DL_LOCATION); \ | ||
| elif test ! -z "$(WGET)" && test -x "$(WGET)"; then \ | ||
| "$(WGET)" "${PIE_PHAR_URL}" --quiet --no-directories --output-document=$(PIE_PHAR_TEMP_DL_LOCATION); \ | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Build failure: https://github.com/php/php-src/actions/runs/23794236419/job/69337305959?pr=21524#step:9:37 |
||
| elif test ! -z "$(FETCH)" && test -x "$(FETCH)"; then \ | ||
| "$(FETCH)" -o $(PIE_PHAR_TEMP_DL_LOCATION) "${PIE_PHAR_URL}"; \ | ||
| else \ | ||
| $(top_builddir)/sapi/cli/php -n "${FETCH_PHP}" "${PIE_PHAR_URL}" $(PIE_PHAR_TEMP_DL_LOCATION) ; \ | ||
| fi | ||
| # Try to verify using `gh` CLI, or if not use `self-verify` (which isn't the best, since it could already have been tampered) | ||
| @if test ! -z "$(GH)" && test -x "$(GH)"; then \ | ||
| "$(GH)" attestation verify --owner=php $(PIE_PHAR_TEMP_DL_LOCATION); \ | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Build failure: https://github.com/php/php-src/actions/runs/23794236419/job/69337306006?pr=21524#step:11:39
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Likely similar issue: |
||
| else \ | ||
| $(top_builddir)/sapi/cli/php $(PIE_PHP_FLAGS) $(PIE_PHAR_TEMP_DL_LOCATION) self-verify; \ | ||
| fi | ||
TimWolla marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| # Once verified, move it to the real location | ||
| @mv $(PIE_PHAR_TEMP_DL_LOCATION) $(PIE_PHAR_DESTINATION) | ||
| @chmod +x $(PIE_PHAR_DESTINATION) | ||
|
|
||
| .PHONY: install-pie | ||
| install-pie: $(PIE_PHAR_DESTINATION) | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This issue warrants discussion; at the moment, since PIE doesn't (yet) support PHP 8.6 (fails at the Box requirements checker), this would cause a non-zero exit code. Same scenario would happen if PHP is installed without the minimum required extensions. I'd suggest we capture these kind of errors, print out a warning that PIE was not installed, but still return a zero exit code. Any other suggestions welcome :) Another option: install the experimental PIE executable coming in PIE 1.4.0 (if possible), since there is no dependency on the installed PHP version; if PIE executable can't be installed, fall back to PHAR (but still have the question about should we exit zero or non-zero if PIE won't work?)
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Example: https://github.com/php/php-src/actions/runs/23794236419/job/69337306073?pr=21524#step:3:2548 |
||
| @$(top_builddir)/sapi/cli/php $(PIE_PHP_FLAGS) $(PIE_PHAR_DESTINATION) self-update > /dev/null 2>&1 | ||
| @$(top_builddir)/sapi/cli/php $(PIE_PHP_FLAGS) $(PIE_PHAR_DESTINATION) --version | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| # PIE downloader | ||
|
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. General question to reviewers; what is the earliest version of PHP we could get this into? PIE supports PHP 8.1+, so ideally that, but obviously it is out of support, so won't actually get any new releases. I suppose it would be PHP 8.4+?
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
It's a feature, thus master. |
||
|
|
||
| When building PHP, the `--with-pie` flag is enabled by default. This will | ||
| attempt to download the latest stable version of PIE, using `curl`, `wget`, | ||
| `fetch`, or a PHP script. | ||
|
|
||
| By default it will download PIE to `$prefix/bin/pie`. You can change | ||
| the target path, e.g. `--with-pie=/usr/local/bin`, which will cause PIE to be | ||
| downloaded to `/usr/local/bin/pie`. | ||
|
|
||
| If the `gh` CLI tool exists on the system, it will be used to verify that the | ||
| PIE that is downloaded was built within PHP's CI system. If not, the | ||
| `pie self-verify` command is used, but this has limited benefit. | ||
|
|
||
| To build PHP without PIE, supply the `--without-pie` flag. | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Changed this to default ship with PIE, now you would have to use
--without-pieto not build with it