在非互動模式下升級 PHP 和安裝庫
問題
我正在嘗試安裝
php 5.5
並php5-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 個文件和相應的檢查)
- 其次,使用
phpenv
和php-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
工具可以做到。