How to Install Official PHP 7 release on FreeBSD 10.2

Finally  PHP 7 officialy released. I’m eager to see it again after already test it before (7.0.0 dev built on January 23 2015)

# freebsd-update fetch

Looking up update.FreeBSD.org mirrors… none found.
Fetching public key from update.FreeBSD.org… done.
Fetching metadata signature for 10.2-RELEASE from update.FreeBSD.org… failed.
No mirrors remaining, giving up.

# dig

dig: Command not found.

Fix it by install bind-tools

# pkg install bind-tools

Updating FreeBSD repository catalogue…
FreeBSD repository is up-to-date.
All repositories are up-to-date.
The following 4 package(s) will be affected (of 0 checked):

New packages to be INSTALLED:
    bind-tools: 9.10.3_1
    libxml2: 2.9.3
    libedit: 3.1.20150325_1
    idnkit: 1.0_5

The process will require 32 MiB more space.
3 MiB to be downloaded.

Proceed with this action? [y/N]: y
Fetching bind-tools-9.10.3_1.txz: 100%    2 MiB 310.1kB/s    00:08   
Fetching libxml2-2.9.3.txz: 100%  789 KiB 269.4kB/s    00:03   
Fetching libedit-3.1.20150325_1.txz: 100%  121 KiB 123.6kB/s    00:01   
Fetching idnkit-1.0_5.txz: 100%  194 KiB 198.5kB/s    00:01   
Checking integrity… done (0 conflicting)
[1/4] Installing libxml2-2.9.3…
[1/4] Extracting libxml2-2.9.3: 100%
[2/4] Installing libedit-3.1.20150325_1…
[2/4] Extracting libedit-3.1.20150325_1: 100%
[3/4] Installing idnkit-1.0_5…
[3/4] Extracting idnkit-1.0_5: 100%
[4/4] Installing bind-tools-9.10.3_1…
[4/4] Extracting bind-tools-9.10.3_1: 100%

Test it.

# dig update.freebsd.org

; <<>> DiG 9.10.3 <<>> update.freebsd.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27825
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 3, ADDITIONAL: 0

;; QUESTION SECTION:
;update.freebsd.org.        IN    A

;; ANSWER SECTION:
update.freebsd.org.    599    IN    CNAME    update2.freebsd.org.
update2.freebsd.org.    599    IN    A    149.20.53.26

;; AUTHORITY SECTION:
freebsd.org.        599    IN    NS    ns1.isc-sns.net.
freebsd.org.        599    IN    NS    ns2.isc-sns.com.
freebsd.org.        599    IN    NS    ns3.isc-sns.info.

;; Query time: 16 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Dec 05 16:55:49 WIB 2015
;; MSG SIZE  rcvd: 162

Now retry update FreeBSD.

root@php7:/usr/home/alam # freebsd-update fetch

Looking up update.FreeBSD.org mirrors… none found.
Fetching metadata signature for 10.2-RELEASE from update.FreeBSD.org… failed.
No mirrors remaining, giving up.

Ok, I give up too 🙂

Time to use VPS from Vultr.

It took less than 5 minutes to start

Login now

 ssh [email protected]
The authenticity of host ‘45.32.67.158 (45.32.67.158)’ can’t be established.
ECDSA key fingerprint is bb:93:1e:43:d5:2a:41:07:5c:0a:7b:8a:70:2a:60:f4.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘45.32.67.158’ (ECDSA) to the list of known hosts.
Password for root@vultr:
Last login: Tue Oct 27 18:44:11 2015 from 10.0.2.2
FreeBSD 10.2-RELEASE (GENERIC) #0 r286666: Wed Aug 12 15:26:37 UTC 2015

Welcome to FreeBSD!

Release Notes, Errata: https://www.FreeBSD.org/releases/
Security Advisories:   https://www.FreeBSD.org/security/
FreeBSD Handbook:      https://www.FreeBSD.org/handbook/
FreeBSD FAQ:           https://www.FreeBSD.org/faq/
Questions List: https://lists.FreeBSD.org/mailman/listinfo/freebsd-questions/
FreeBSD Forums:        https://forums.FreeBSD.org/

Documents installed with the system are in the /usr/local/share/doc/freebsd/
directory, or can be installed later with:  pkg install en-freebsd-doc
For other languages, replace “en” with a language code like de or fr.

Show the version of FreeBSD installed:  freebsd-version ; uname -a
Please include that output and any error messages when posting questions.
Introduction to manual pages:  man man
FreeBSD directory layout:      man hier

Edit /etc/motd to change this login announcement.
#

Update FreeBSD

Fetch latest update

# freebsd-update fetch

Looking up update.FreeBSD.org mirrors… 5 mirrors found.
Fetching metadata signature for 10.2-RELEASE from update5.freebsd.org… done.
Fetching metadata index… done.
Fetching 2 metadata patches.. done.
Applying metadata patches… done.
Inspecting system… done.
Preparing to download files… done.
Fetching 5 patches… done.
Applying patches… done.

The following files will be updated as part of updating to 10.2-RELEASE-p7:
/bin/freebsd-version
/boot/kernel/kernel
/boot/kernel/kernel.symbols
/usr/include/sys/vnode.h
/usr/sbin/ntpd

Install the update

# freebsd-update install

Installing updates… done.

Update pkg

# pkg update

The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/FreeBSD:10:amd64/quarterly, please wait…
Verifying signature with trusted certificate pkg.freebsd.org.2013102301… done
Installing pkg-1.6.1…
Extracting pkg-1.6.1: 100%
Message from pkg-1.6.1:
If you are upgrading from the old package format, first run:
 

# pkg2ng

Updating FreeBSD repository catalogue…
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01   
Fetching packagesite.txz: 100%    5 MiB   5.5MB/s    00:01   
Processing entries: 100%
FreeBSD repository update completed. 24617 packages processed.

Search for PHP package

# pkg search php | grep Language

mod_php5-5.4.45,1              PHP Scripting Language
mod_php55-5.5.30               PHP Scripting Language
mod_php56-5.6.14               PHP Scripting Language
php5-5.4.45                    PHP Scripting Language
php55-5.5.30                   PHP Scripting Language
php56-5.6.14                   PHP Scripting Language

Only PHP 5.4, 5.5 and 5.6 available. Continue with ports.

Install ports with Portsnap

Download snapshot

# portsnap fetch

Looking up portsnap.FreeBSD.org mirrors… 7 mirrors found.
Fetching public key from isc.portsnap.freebsd.org… done.
Fetching snapshot tag from isc.portsnap.freebsd.org… done.
Fetching snapshot metadata… done.
Fetching snapshot generated at Sat Dec  5 00:03:05 UTC 2015:
e77ac916c3137b60907a8bc1a7d4e7fae5ca0bf35dcd8e100% of   70 MB   37 MBps 00m01s
Extracting snapshot… done.
Verifying snapshot integrity… done.
Fetching snapshot tag from isc.portsnap.freebsd.org… done.
Fetching snapshot metadata… done.
Updating from Sat Dec  5 00:03:05 UTC 2015 to Sat Dec  5 03:10:07 UTC 2015.
Fetching 4 metadata patches… done.
Applying metadata patches… done.
Fetching 0 metadata files… done.
Fetching 5 patches.
(5/5) 100.00%  done.                            
done.
Applying patches…
done.
Fetching 0 new ports or files… done.

Extract ports

# portsnap extract

Find PHP 7

# make search name=php70
# make search name=php7
#

I must wait for developer to get it from ports or pkg.

Install PHP 7 from source

# pkg install -y git autoconf bison libxml2 libxslt jpeg png libxpm freetype2 gmp libmcrypt mysql56-client aspell recode

# hash -r

# mkdir ~/tmp
# cd ~/tmp

# git clone https://git.php.net/repository/php-src.git
Cloning into ‘php-src’…
remote: Counting objects: 642977, done.
remote: Compressing objects: 100% (129159/129159), done.
remote: Total 642977 (delta 514316), reused 640981 (delta 512488)
Receiving objects: 100% (642977/642977), 160.98 MiB | 16.17 MiB/s, done.
Resolving deltas: 100% (514316/514316), done.
Checking connectivity… done.
Checking out files: 100% (17869/17869), done.

# cd php-src
# ./buildconf
buildconf: checking installation…
buildconf: autoconf version 2.69 (ok)
rebuilding aclocal.m4
rebuilding configure
rebuilding main/php_config.h.in

Build it

# ./configure \
    –prefix=$HOME/tmp/usr \
    –with-config-file-path=$HOME/tmp/usr/etc \
    –enable-mbstring \
    –enable-zip \
    –enable-bcmath \
    –enable-pcntl \
    –enable-ftp \
    –enable-exif \
    –enable-calendar \
    –enable-sysvmsg \
    –enable-sysvsem \
    –enable-sysvshm \
    –enable-wddx \
    –with-curl \
    –with-mcrypt \
    –with-iconv \
    –with-gmp \
    –with-pspell \
    –with-gd \
    –with-jpeg-dir=/usr \
    –with-png-dir=/usr \
    –with-zlib-dir=/usr \
    –with-xpm-dir=/usr \
    –with-freetype-dir=/usr \
    –enable-gd-native-ttf \
    –enable-gd-jis-conv \
    –with-openssl \
    –with-gettext=/usr \
    –with-zlib=/usr \
    –with-bz2=/usr \
    –with-recode=/usr \
    –with-mysqli=/usr/local/bin/mysql_config

………..

Generating files
configure: creating ./config.status
creating main/internal_functions.c
creating main/internal_functions_cli.c
+——————————————————————–+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE.  By continuing this installation |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+——————————————————————–+

Thank you for using PHP.

config.status: creating php7.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: main/php_config.h is unchanged
config.status: executing default commands

Make

# make

…………….

…………………….

Build complete.
Don’t forget to run ‘make test’.

# make install

Installing shared extensions:     /root/tmp/usr/lib/php/extensions/no-debug-non-zts-20151012/
Installing PHP CLI binary:        /root/tmp/usr/bin/
Installing PHP CLI man page:      /root/tmp/usr/php/man/man1/
Installing phpdbg binary:         /root/tmp/usr/bin/
Installing phpdbg man page:       /root/tmp/usr/php/man/man1/
Installing PHP CGI binary:        /root/tmp/usr/bin/
Installing PHP CGI man page:      /root/tmp/usr/php/man/man1/
Installing build environment:     /root/tmp/usr/lib/php/build/
Installing header files:          /root/tmp/usr/include/php/
Installing helper programs:       /root/tmp/usr/bin/
  program: phpize
  program: php-config
Installing man pages:             /root/tmp/usr/php/man/man1/
  page: phpize.1
  page: php-config.1
Installing PEAR environment:      /root/tmp/usr/lib/php/
SSL certificate subject doesn’t match host pear.php.net
fetch: https://pear.php.net/install-pear-nozlib.phar: Authentication error
*** Error code 1

Stop.
make: stopped in /root/tmp/php-src

Check it

# /root/tmp/usr/bin/php -v
PHP 7.1.0-dev (cli) (built: Dec  5 2015 03:59:38) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2015 Zend Technologies
#

Lol, looks like I get ‘edge’ version. Maybe I should use traditional tar.gz file 🙂

I keep that for other update as my student already wait for my class.