Ubuntu
讓 Ubuntu 確認安裝了自定義建構的 PHP 版本
我正在嘗試在我的 Ubuntu 12.04 VPS 上從原始碼安裝 PHP。
我正在像這樣安裝 PHP:
- 從 php.net 網站下載最新版本。
- 使用以下參數對其進行配置。
- 必要時安裝任何依賴項。(libxxxxxx-開發)
- 然後做一個
- 然後進行安裝
- 將php.ini文件和fpm配置文件移動到合適的位置
我在配置命令中使用這些參數:
--enable-intl --with-openssl --without-pear --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-freetype-dir=/usr --with-freetype --enable-exif --enable-zip --with-zlib --with-zlib-dir=/usr --with-mcrypt=/usr --with-pdo-sqlite --enable-soap --enable-xmlreader --with-xsl --enable-ftp --with-curl=/usr --with-tidy --with-xmlrpc --enable-sysvsem --enable-sysvshm --enable-shmop --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-pcntl --with-readline --enable-mbstring --with-curl --with-pgsql --with-pdo-pgsql --with-gettext --enable-sockets --with-bz2 --enable-bcmath --enable-calendar --with-libdir=lib --enable-maintainer-zts --with-gmp --enable-fpm
現在,一切順利。該版本按預期工作,在安裝過程中我沒有遇到任何問題。現在有趣的東西來了。每當我想安裝類似
mcrypt
(例如)的東西時,我通常會輸入apt-get install php5-mcrypt
,但是當我這樣做時,看看依賴項,我發現 PHP5 仍然被列為一個,並且一旦我點擊就會安裝y
(覆蓋我自己的版本)。現在我的問題的真正核心是,我如何讓 Ubuntu 知道我已經安裝了 PHP5,以便它不再嘗試將 PHP5 作為依賴項安裝。我必須在配置過程中更改某些內容嗎?我是否必須先使用該
apt-get
方式安裝 PHP5,然後手動將其刪除,然後再安裝我自己的 PHP 版本。值得一提的是,我需要這個定制的 PHP 建構來使 Pthreads 工作,因為沒有提供 ZTS 版本的 PHP 的儲存庫(但是,請做一個,有人嗎?)。
這裡有幾種選擇:
- 添加
--prefix=/usr/local
到配置腳本(假設這是 PHP 使用的)或以其他方式確保您的 PHP 安裝到/usr/local
. 這意味著您將在系統之一旁邊安裝您自己的 PHP 版本。例如,由於/usr/local/bin
優先於/usr/bin
inPATH
,因此您自己的建構將在許多情況下使用(特別是從命令行啟動時)。預設情況下,這不應干擾系統包,這些包可能是針對特定版本的 PHP 建構的,並且如果它們嘗試使用您自己建構的庫提供的庫,則會被破壞。使用這種方法雖然您確實需要注意哪些程序正在使用哪些庫,但是應該可以毫無問題地做到這一點。- 找到更接近您需求的 PHP 打包版本。如果它是較新的版本,有很多 Ubuntu ppa 提供此功能(最好先查看官方的“backport”儲存庫,因為任何人都可以創建可能損壞的 ppa)。請注意,這也可能導致衝突,迫使您從 ppa 安裝其他軟體包(或者如果它們不可用,則讓您搞砸)。
- 下載源碼包並重新編譯。如果您想要自定義建構選項,這可能是您需要做的。整個網際網路上有很多教程,但基本上你會在
deb-src
你的文件中添加必要的行sources.list
(或sources.list.d
)並下載apt-get source
(或直接從packages.ubuntu.com下載必要的文件)。使用檔案提取dpkg-source
然後您將調整包debian
目錄中的建構選項,使用建構debuild
或dpkg-buildpackage
安裝dpkg -i
。如果您還需要更新版本,您甚至可以使用來自 ppa 的包來執行此操作(儘管同樣需要注意)。- 最後,最困難的選擇是創建自己的包。從上述源包之一開始並使用與其他可用源不同版本的上游源是一個不錯的起點。但是,這完全取決於您,以確保該軟體包與您系統的其餘部分很好地配合使用。