Ubuntu

在非互動模式下升級 PHP 和安裝庫

  • April 20, 2015

問題

我正在嘗試安裝php 5.5php5-memcached為我的機器預裝了 php 5.3。此外,我無法更改預設配置,因為它是為 CI 提供的暫存框。所以讓我們假設 php 5.3 已預先安裝並且無法更改。

所以,首先我嘗試安裝 php,然後是 php-memcached:

sudo apt-get update
sudo apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite" install -y php5
sudo apt-get -o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite" install -y php5-memcached

重要的是上面的命令是由建構執行程序呼叫的,因此,它不是“互動”模式,因為沒有“使用者”負責安裝。

問題是由於現有的 php 5.3 我得到:

(B)0包配置┌────────────────────┤ 修改配置文件├───────────────── ──────┐│新版本的配置文件/etc/php5/cli/php.ini 可用,││但是目前安裝的版本已經在本地修改了。││││修改了要怎麼辦配置文件php.ini?││││安裝包維護者的版本││保持目前安裝的本地版本││顯示版本之間的差異││顯示版本之間的並排差異││啟動一個新的shell看情況││││││││└────────────────────────────────── ──────────────────────────────────────┘

那是因為它找到了一些修改過的配置文件。問題是 - 我可以以某種方式強制它被覆蓋嗎?如您所見,我已經嘗試過-o Dpkg::Options::="--force-confnew" -o Dpkg::Options::="--force-overwrite"但沒有成功(我想那是因為這個“對話框”與 dpkg 無關)。顯然,這個“對話框”的問題在於,所有設置命令都是從 CI 容器內部呼叫的,並且沒有可以執行任何“操作”的“使用者”——它應該是完全自動執行的。

再次,

問題:在這種情況下如何強制覆蓋任何配置?否則,我怎樣才能實現最初的目標並將 php 從 5.3 升級到 5.5,然後安裝 php5-memcached?

有問題的消息不相關dpkg,因此無法使用dpkg選項控制它。我發現有兩個可行的選擇:

  • 首先,完全重新安裝PHP:先刪除PHP 5.3,然後在“空白系統”上安裝5.5。就我而言,這不是一個好的解決方案,因為刪除 PHP 5.3 需要很長時間(超過 500.000 個文件和相應的檢查)
  • 其次,使用phpenvphp-build管理不同的 PHP 環境,而不涉及目前安裝的環境。預設情況下,它提供了pyrus用於數據包管理器的擴展pyrus,允許使用它。對於 php-memcached,我將其簡單地用作:
pyrus install pecl/memcached-2.1.0
pyrus build pecl/memcached-2.1.0
phpenv rehash

請注意,pyrus install pecl/memcached在某些 PHP 版本上可能會失敗,因此,建構指定特定版本的 PHP 會更安全。這種方法pyrus將允許安裝任何可用於pyrus. 如果您仍然需要自定義的東西(我需要 phalcon),您可以使用自定義編譯來建構它,例如:

#!/bin/bash

PHPVERSION=$1

# get the extension via wget, for example

# cd to extension directory

# Perform the compilation
~/.phpenv/versions/$PHPVERSION/bin/phpize
./configure --with-php-config=/home/ubuntu/.phpenv/versions/$PHPVERSION  /bin/php-config --enable-extension
make && make install

echo "extension=extension.so" > ~/.phpenv/versions/$PHPVERSION/etc/conf.d/extension.ini

where--enable-extension等,"extension.so"您需要用您編譯的副檔名替換。

如您所見,這不是解決問題的直接方法,但它仍然符合全自動 CI 建構的目標,允許為此類建構創建任何 PHP 版本設置/擴展啟用。

PS如果有人能找到解決問題中資訊的方法,這將是“第三個”選項,但我不相信dpkg工具可以做到。

引用自:https://serverfault.com/questions/683444