xenon
@xenon
Too drunk to fsck

Как на Debian поставить PHP под другую архитектуру?

Странное хочу:
Хост машина с архитектурой x86_64
Гостевая машина (LXC) тоже x86_64. (Создаю командой:
sudo lxc-create -n php -t download -- --dist=debian --release=buster --arch=amd64
, так что можете повторить в точности мою ситуацию).

Хочется на гостевой машине поставить PHP для i386 (32битный, а не 64битный).

(Зачем такие сложности? Потому что на самом деле есть продакшн виртуалка с такой проблемой, которую надо привести в божеский вид (она вся 64битная, но каким-то чудом там вкорячен PHP от i386, не спрашивайте, почему). И перед тем как брать острую бритву и править ее, хочется поиграться на тестовой машине. Multiarch HOWTO вроде прочитал)

На виртуалке добавил архитектуру в dpkg и sources.list:
root@php:/# arch
x86_64
root@php:/# dpkg --add-architecture i386
root@php:/# dpkg --print-foreign-architectures
i386
root@php:/# cat /etc/apt/sources.list
# Generated by distrobuilder
deb [arch=amd64,i386] http://deb.debian.org/debian buster main
deb [arch=amd64,i386] http://security.debian.org/debian-security buster/updates main


Ставим тестовый пакет:
# apt clean
# apt update
# apt install links:i386


Все отлично работает! Поcтавился links для i386. Со всеми зависимостями. Работает.

Но если пытаюсь поставить php таким же образом - не идет:
##### Пробуем тупо сходу

root@php:/# apt install php-cli:i386             
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'php7.3-cli:i386' instead of 'php-cli:i386'
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 php7.3-cli:i386 : Depends: php7.3-common:i386 (= 7.3.14-1~deb10u1) but it is not going to be installed
                   Depends: php7.3-json:i386 but it is not going to be installed
                   Depends: php7.3-opcache:i386 but it is not going to be installed
                   Depends: php7.3-readline:i386 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.


##### пробуем вручную

root@php:/# apt install php7.3-common:i386
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 php7.3-common:i386 : Depends: php-common:i386 (>= 1:35) but it is not installable
E: Unable to correct problems, you have held broken packages.


##### И еще вот так пробуем

root@php:/# apt install php7.3-common:i386 php-common:i386
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package php-common:i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'php-common:i386' has no installation candidate


Как его запинать? Как я понял, должен использоваться этот пакет: https://packages.debian.org/buster/php-common , он без архитектуры (all), версия 2:69 (то есть, другая эпоха - но это, вроде как, должно удовлетворять требованиям ведь).

Если его поставить командой: apt install php-common:all - то он ставится. Но не подходит все равно:
root@php:/# apt install php7.3-common:i386                
...
 php7.3-common:i386 : Depends: php-common:i386 (>= 1:35) but it is not installable
E: Unable to correct problems, you have held broken packages.

Почему-то он требует php-common именно для i386 (???), а даже установленный пакет архитектуры all его не устраивает.

Ну и как вишенка: apt install php-cli:amd64 - работает отлично. И если создать виртуалку i386 (arch показывает i686), то php-cli отлично поставится. И используется php-common версии 2:69, архитектуры all. (То есть, этот же пакет, который не подходил по зависимостям, теперь подходит)

Если скачивать на диск, и устанавливать через dpkg, то отдельный пакет поставить можно:
root@php:/tmp# dpkg --force all -i php7.3-common_7.3.14-1~deb10u1_i386.deb 
...

Но другие пакеты все равно спотыкаются, всех их скачивать и через --force all ставить что ли? Есть ощущение, что я что-то не так делаю просто, "недовключил" i386 где-то?

Где туплю, как поставить php-cli:i386 на чистую типовую amd64 виртуалку? Пакеты php не multiarch-aware? Но как-то же их поставили на сервер с другой архитектурой...
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
ky0
@ky0
Миллиардер, филантроп, патологический лгун
Надо не "брать острую бритву и править", а в спокойной обстановке попытаться воссоздать ту же конфигурацию на новой виртуалке, где нет зоопарка. Практически уверен, что всё взлетит и на 64-битном РНР.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы