Jan 31, 2016

Issues when reinstall phpbrew on OS X EI Capitan

Annoying things coming one by one.

After update to EI Capitan, I found that all my configuration for linking phpbrew with system apache lost. Resolved quickly, but...

After did 'brew update' today, phpbrew poisoned by new version of icu4 installed by homebrew. It was built with 54, but now version is 56, so it always complained about could not find the so file...even when change a directory, just because the 'source ~/.phpbrew/bashrc' in my own .bashrc.

At last, I decided to CLEAN all this messed stuff up, via... rm -rf ~/.phpbrew.

And prepared to reinstall it, not be aware of what was waiting for me....

Issue#0 operation not permistted when 'sudo chmod -R oga+rw /usr/libexec/apache2'
  root cause: Apple's system integrity protection
  solution: reboot, cmd+r to enter repair mode, open terminal, execute 'csrutil disable; reboot'
  reference: http://stackoverflow.com/questions/32659348/operation-not-permitted-when-on-root-el-capitan-rootless-disabled

Issue#1 Cannot find OpenSSL's <evp.h>
  root cause: openssl header file missing
  solution: $phpbrew ...+openssl=/usr/local/opt/openssl
refernce: https://github.com/phpbrew/phpbrew/issues/612

Issue#2 Cannot find OpenSSL's libraries
  root cause: openssl lib path missing
  solution: $sudo ln -s /usr/local/opt/openssl /usr/lib/openssl
  reference: https://github.com/phpbrew/phpbrew/issues/418

Issue#3 Cannot locate header file libintl.h
  root cause: gettext header file missing
  solution: $brew link icu4c gettext --force
  refernce: https://github.com/phpbrew/phpbrew/issues/453

Issue#4 symbols not match when php build sis linking:
  Undefined symbols for architecture x86_64:
  "_PKCS5_PBKDF2_HMAC", referenced from:
      _zif_openssl_pbkdf2 in openssl.o
  "_TLSv1_1_client_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_1_server_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_client_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  "_TLSv1_2_server_method", referenced from:
      _php_openssl_setup_crypto in xp_ssl.o
  root cause: ???
  solution: run following command before phpbrew install: $export LDFLAGS="/usr/local/opt/openssl/lib/libssl.dylib /usr/local/opt/openssl/lib/libcrypto.dylib"
  referenc: http://weaponsgradecode.com/2015/10/12/installing-php-5-6-14-with-phpbrew-and-homebrew-on-os-x-el-capitan/

Finally, my new php-5.6.17 was installed under phpbrew with the following command:
phpbrew install 5.6.17 +default +mysql +pdo +apxs2=/usr/sbin/apxs +dba +filter +gettext +iconv +mcrypt +openssl=/usr/local/opt/openssl +posix +session +soap +sqlite +gd -- --with-gd=shared --enable-gd-natf --with-jpeg-dir=/usr --with-png-dir=/usr

Final thought: it came to my mind at last that homebrew suggest similar method as LDFLAGS config when install some module like openssl. So it might be a compile flag setting which could solve the openssol <evp.h> issue....but anyways, I don't want to try that myself.

Dec 25, 2015

Resolved issue aborting test with jasmine via PhantomJS

Weird issue when executed:

grunt test

I got:
...
Running "concurrent:ts_test" (concurrent) task

        Running "jasmine:ts_dist" (jasmine) task
        Testing jasmine specs via PhantomJS

        Warning: Cannot read property 'pid' of undefined Use --force to continue.

        Aborted due to warnings.
...

After googling solution, found a way work around:

cd node_modules/phantomjs/
npm install

Jasmine working again then.

Oct 16, 2015

Install zmq extension to phpbrew

phpbrew doesn't (seems) support zmq in its official extension list.

Have to find a way around this issue.

Firstly, turn off phpbrew
  phpbrew off

Now using system php.

Next, upgrade system php to 5.6:
  sudo add-apt-repository ppa:ondrej/php5-5.6
  sudo apt-get update
  sudo apt-get install python-software-properties
  sudo apt-get update
  sudo apt-get install php5

Now, install zmq:
  sudo pecl install zmq-beta

After zmq.so created, copy it to the phpbrew directory:
  sudo cp /usr/lib/php5/20131226/zmq.so ~/.phpbrew/php/php-5.6.6/lib/php/extensions/no-debug-non-zts-20131226/zmq.so

Bingo! Now I can composer require react/zmq under my project!!

Links:
http://www.dev-metal.com/install-setup-php-5-6-ubuntu-14-04-lts/

Jun 1, 2015

Solved phpbrew problem with posix function not found

This morning apache complained to me that:

  posix_geteuid() function not found

So weird, because I installed this php version definitely with posix enabled, via phpbrew.

So I installed again:

sudo -s
phpbrew init -c config.yaml
phpbrew install 5.3.29 +dev (i have predefined a dev shortcut in the config file for convenience)
...
phpbrew switch 5.3.29
exit
sudo service apache2 restart

Not working....

So I decided to do it manually instead, guessing the config file not configuring phpbrew very fitting.


phpbrew install 5.3.29 +default +mysql +pdo +apxs2=/usr/bin/apxs2 +dba +filter +gettext +iconv +mcrypt +openssl +posix +session +soap +sqlite +gd -- \
--with-libdir=lib/x86_64-linux-gnu --with-gd=shared --enable-gd-natf --with-jpeg-dir=/usr --with-png-dir=/usr

This time the installed php version working.

So my guess is correct.

ps, the content in my config.yaml:

variants:
    dev:
        bcmath:
        bz2:
        calendar:
        cli:
        ctype:
        dba:
        dom:
        fileinfo:
        filter:
        gettext:
        ipc:
        iconv:
        json:
        mbregex:
        mbstring:
        mhash:
        mcrypt:
        mysql:
        openssl:
        pdo:
        posix:
        session:
        soap:
        sqlite:
        gd:
          - --with-libdir=lib/x86_64-linux-gnu
          - --with-gd=shared
          - --enable-gd-natf
          - --with-jpeg-dir=/usr
          - --with-png-dir=/usr
extensions:
    dev:
        xdebug: stable
        yaml: stable
        curl: stable
        gd: stable

Jan 9, 2015

解决 phpbrew gd 的 undefined symbol: php_gd_gdImageJpegCtx in Unknown on line 0

Issues coming one after one, started from the day I upgrade my machine from ubuntu 12.04 to 14.04.

Thanks to our ancient symfony 1.4 project, I had to ask phpbrew for php version 5.3.x, and then I got a problem with gd when project rebuild on the step of regenerating avatars.

It said in bloody color:

The image processing library GD is not enabled. See PHP Manual for installation instructions.

WTF?

I checked the extensions of current php:

  $phpbrew ext

Oh well, gd ext not enabled, so

  $phpbrew ext enable gd

However, it complained:
 
PHP Warning:  PHP Startup: Unable to load dynamic library '/home/htsg/.phpbrew/php/php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626/gd.so' - /home/htsg/.phpbrew/php/php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626/gd.so: undefined symbol: php_gd_gdImageJpegCtx in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/home/htsg/.phpbrew/php/php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626/gd.so' - /home/htsg/.phpbrew/php/php-5.3.29/lib/php/extensions/no-debug-non-zts-20090626/gd.so: undefined symbol: php_gd_gdImageJpegCtx in Unknown on line 0
===> Enabling extension gd
gd extension is not installed. Suggestions:
$ phpbrew ext install gd

Damn it, how could it suggest to install an extension already installed, sth wrong with it definitely....

Googling time....... with painful tries...ruined my whole lovely friday morning....

When it turned to be hopeless, found a working solution:

$cd
$cd .phpbrew/build/php-5.3.29/ext/gd/
$make clean
$phpbrew ext install gd -- --with-libdir=lib/i386-linux-gnu --with-gd=shared --enable-gd-native-ttf --with-jpeg-dir=/usr --with-png-dir=/usr

This time it said install ok as before, but I saw gd in the enabled list when check extensions.

Thanks to this link for saving the rest of my Friday!






Jan 5, 2015

Solved the PHPunit not found problem after updated it by composer

PHPUnit now supports installation via composer:

$sudo composer global require "phpunit/phpunit=4.4.*"
$sudo composer global require "phpunit/phpunit-selenium"
$sudo composer global require "phpunit/dbunit"

But before installation, you would have to uninstall them via phear:

$sudo pear uninstall phpunit/PHPUnit_MockObject  \
 phpunit/PHP_CodeCoverage \
 phpunit/DbUnit \
 phpunit/PHPUnit_Selenium \
 phpunit/PHPUnit \
 phpunit/PHP_Timer \

However, symfony phpunit task lost its link to phpunit after above operations.

sh: 1: phpunit: not found

I had to link phpunit to /usr/local/bin, seems a temporary solution:

sudo ln -fs /home/ACCOUNT/.composer/vendor/bin/phpunit /usr/bin/phpunit

Reference links:
https://github.com/sebastianbergmann/phpunit/wiki/End-of-Life-for-PEAR-Installation-Method

Nov 13, 2014

解决eclipse4.3.1 ctrl click不工作的问题

升级eclipse到Kepler(4.3.1)之后,发现ctrl+click函数声明追踪不好使了,股沟了一下,原来是dltk的数据库版本不向下兼容:

!ENTRY org.eclipse.dltk.core.index.sql 4 0 2013-10-14 16:45:28.670
!MESSAGE An exception has thrown while performing a search
!STACK 0
org.h2.jdbc.JdbcSQLException: 
Unsupported database file version or invalid file header in file "Old database: 
/home//workspace/.metadata/.plugins/org.eclipse.dltk.core.index.sql.h2/model.data.db 
- 
please convert the database to a SQL script and re-create it." [90048-168]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)

解决办法:

关闭eclipse,把workspace/.metadata/.plugins/org.eclipse.dltk.core.index.sql.h2/目录下的文件全部删除,再打开eclipse,它会自动重建声明索引数据库。

PS,期间遇到“workspace in use or cannot be created”的问题,到workspace/.metadat/目录下,删除.lock文件,轻松解决。