Cài đặt XDebug trên MacOS với Homebrew

Mục tiêu

Cài đặt thành công Xdebug trên MacOS Homebrew, và giải pháp cho một vài trường hợp bị lỗi trong lúc cài đặt như:

  • ./configure: No such file or directory
  • “config.h” file not found
  •  Error: listen EADDRINUSE :::9000

Yêu cầu

Đã cài sẵn môi trường LEMP stack với Homebrew.

Triển khai

Cài đặt xcode-select, đây là công cụ hỗ trợ các lệnh command line trên MacOS do Apple cung cấp:

xcode-select --install

Check thông tin phiên bản PHP đang sử dụng trên máy, sử dụng lệnh phpinfo() để in ra web browser

H1. PHP info example
H1. PHP info example

Copy nội dung phpinfo() đã được render ra trên web browser vào khung textbox tại link này. Sau đó submit.

***Lưu ý: copy nội dung in trên web browser, chứ không phải copy raw HTML.

H2. Xdebug Tailored Installation Instructions tool
H2. Xdebug Tailored Installation Instructions tool

Sau khi submit nội dung phpinfo(), tool trên sẽ tự động generate ra các bước hướng dẫn cài đặt phiên bản Xdebug phù hợp:

H3. Kết quả sau phân tích
H3. Kết quả sau phân tích
H4. Hướng dẫn cài đặt Xdebug
H4. Hướng dẫn cài đặt Xdebug

Thực hiện theo các bước hướng dẫn bên trên, đầu tiên download source xdebug-2.7.0.tgz .

Kế đến, cài đặt package autoconf hỗ trợ việc build file từ source:

brew install autoconf

Hoặc nếu lệnh trên bị lỗi, dùng lệnh dưới này:

brew reinstall autoconf

Tiếp theo, giải nén file:

tar -xvzf xdebug-2.7.0.tgz

Di chuyển vào thư mục vừa được giải nén:

cd xdebug-2.7.0

Tiếp đến, chạy lần lượt các command sau:

sudo /usr/local/bin/phpize

sudo autoconf

./configure

sudo make install

Sau khi chạy xong, file modules/xdebug.so sẽ được tạo ra, chúng ta cần copy file này vào vị trí thư mục thực thi của php:

cp modules/xdebug.so /usr/local/lib/php/pecl/20170718

Tiếp theo là thêm nội dung config vào file php.ini.

Trước tiên cần check xem vị trí file php.ini đang được thực thi ở đâu:

php -i | grep php.ini

H5. Xác định vị trí file php.ini
H5. Xác định vị trí file php.ini

Mở file lên, di chuyển đến cuối file để thêm nội dung config cho Xdebug:

sudo vi /usr/local/etc/php/7.2/php.ini

Thêm vào cuối file nội dung sau:

H6. Edit nội dung php.ini
H6. Edit nội dung php.ini

Khởi động lại php-fpm service:

brew services restart php

Và … Done!

Trong quá trình cài đặt, sẽ có thể xảy ra một vài sự cố ngoài ý muốn, mình cũng đã chuẩn bị cho cases này, các bạn có thể tham khảo giải pháp ở mục bên dưới.

Xử lý sự cố (nếu có) trong quá trình cài đặt

Issue 1: ./configure: No such file or directory

Lỗi này xảy ra do trên máy thiếu package autoconf, để khắc phục các bạn chỉ cần cài đặt package này là okie:

brew install autoconf

Nếu chạy lệnh trên bị lỗi, thì chạy lệnh dưới này:

brew reinstall autoconf

Issue 2: “config.h” file not found

Lỗi này có liên quan đến Issue 1 ở trên, do quá trình build files bằng lệnh ./configure bị lỗi không tạo được file config.h

Để khắc phục, các bạn cần thực hiện theo các bước sau:

Cài lại xcode-select:

xcode-select --install

Xoá thư mục “xdebug-2.7.0”, và giải nén lại từ file xdebug-2.7.0.tgz đã download về ở bước cài đặt trên:

sudo rm -fr xdebug-2.7.0

Giải nén lại file xdebug-2.7.0.tgzđã download:

tar -xvzf xdebug-2.7.0.tgz

Di chuyển vào thư mục xdebug-2.7.0 vừa giải nén:

cd xdebug-2.7.0

Chạy theo thứ tự các command sau để build lại file modules/xdebug.so từ source:

sudo /usr/local/bin/phpize

sudo autoconf

./configure

sudo make install

Done.

Issue 3: Error: listen EADDRINUSE :::9000

Lỗi trên xảy ra là do có một process nào đó đang sử dụng port :9000 của xdebug, giải pháp là tìm và kill process đó.

Tìm xem process nào đang chiếm dụng port này:

sudo lsof -nP -iTCP:9000| grep LISTEN

Ví dụ, mình tìm ra được process đang chiếm là “php-fpm” không thuộc user mình đang đăng nhập quản lý, nên sẽ kill hết các process có tên trên:

sudo killall "php-fpm"

Các bạn cứ kill đến khi thấy user đang kiểm soát là chính tên user các bạn đang đăng nhập trên máy là được.

H7. Kill đến khi thấy user là tên user của bạn đang login
H7. Kill đến khi thấy user là tên user của bạn đang login

Vì mình đang login dưới user name là “zaczac”, nên kill đến đây đã là hoàn tất.

Tham khảo

  • xcode-select: https://macops.ca/developer-binaries-on-os-x-xcode-select-and-xcrun/
  • Setup php & xdebug with homebrew: https://medium.com/@romaninsh/install-php-7-2-xdebug-on-macos-high-sierra-with-homebrew-july-2018-d7968fe7e8b8
  • Why can’t run ./configure: https://stackoverflow.com/questions/31913844/how-to-run-configure-to-compile-an-application-on-mac-os