Поддельная архитектура процессора в Debian
У меня есть сервер, который использует архитектуру процессора armhf (armv7l, Cortex A9 ARMv7, если быть точным).
Я пытался установить на него определенный пакет, но это не сработало.
Прежде всего, APT упомянул, что просто не поддерживает архитектуру:
N: Skipping acquire of configured file 'main/binary-armhf/Packages' as repository 'http://repo.r1soft.com/apt stable InRelease' doesn't support architecture 'armhf'
Далее ради всего этого я изменил архитектуру, используемую для хранилища. Я нашел репозиторий поддерживает amd64
,
Я изменил /etc/apt/sources.list
читать:
deb [arch=amd64] http://repo.r1soft.com/apt stable main
Это привело к исчезновению ошибки APT:
root@host:~# apt-get update
Get:1 http://last.public.ovh.hdaas.snap.mirrors.ovh.net/ubuntu xenial InRelease
Hit:2 http://ports.ubuntu.com/ubuntu-ports xenial InRelease
Ign:3 http://repo.r1soft.com/apt stable InRelease
Hit:4 http://repo.r1soft.com/apt stable Release
Get:6 http://repo.r1soft.com/apt stable/main amd64 Packages [3633 B]
Fetched 6325 B in 1s (3953 B/s)
Reading package lists... Done
W: http://repo.r1soft.com/apt/dists/stable/Release.gpg: Signature by key 8954063F882837AE08F8D2CB1BF3530AA40384ED uses weak digest algorithm (SHA1)
Однако после фактической установки пакета APT выдает ошибку:
root@host:~# apt-get install serverbackup-enterprise
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package serverbackup-enterprise
Естественно, это не работает, так как мы все еще устанавливаем пакет из репозитория без указания архитектуры. После этого:
root@host:~# apt-get install serverbackup-enterprise:amd64
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
r1soft-docstore:amd64 r1soft-getmodule:amd64 serverbackup-manager:amd64
serverbackup-setup:amd64
The following NEW packages will be installed:
r1soft-docstore:amd64 r1soft-getmodule:amd64 serverbackup-enterprise:amd64
serverbackup-manager:amd64 serverbackup-setup:amd64
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 348 MB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://repo.r1soft.com/apt stable/main amd64 r1soft-docstore amd64 6.2.2-78 [2110 kB]
Get:2 http://repo.r1soft.com/apt stable/main amd64 r1soft-getmodule amd64 1.0.0-51 [1860 kB]
Get:3 http://repo.r1soft.com/apt stable/main amd64 serverbackup-setup amd64 6.2.2-78 [2740 kB]
Get:4 http://repo.r1soft.com/apt stable/main amd64 serverbackup-manager amd64 6.2.2-78 [341 MB]
Get:5 http://repo.r1soft.com/apt stable/main amd64 serverbackup-enterprise amd64 6.2.2-78 [71.7 kB]
Fetched 348 MB in 2min 46s (2092 kB/s)
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "C.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("C.UTF-8").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
dpkg: error processing archive /var/cache/apt/archives/r1soft-docstore_6.2.2-78_amd64.deb (--unpack):
package architecture (amd64) does not match system (armhf)
dpkg: error processing archive /var/cache/apt/archives/r1soft-getmodule_1.0.0-51_amd64.deb (--unpack):
package architecture (amd64) does not match system (armhf)
dpkg: error processing archive /var/cache/apt/archives/serverbackup-setup_6.2.2-78_amd64.deb (--unpack):
package architecture (amd64) does not match system (armhf)
dpkg: error processing archive /var/cache/apt/archives/serverbackup-manager_6.2.2-78_amd64.deb (--unpack):
package architecture (amd64) does not match system (armhf)
dpkg: error processing archive /var/cache/apt/archives/serverbackup-enterprise_6.2.2-78_amd64.deb (--unpack):
package architecture (amd64) does not match system (armhf)
Errors were encountered while processing:
/var/cache/apt/archives/r1soft-docstore_6.2.2-78_amd64.deb
/var/cache/apt/archives/r1soft-getmodule_1.0.0-51_amd64.deb
/var/cache/apt/archives/serverbackup-setup_6.2.2-78_amd64.deb
/var/cache/apt/archives/serverbackup-manager_6.2.2-78_amd64.deb
/var/cache/apt/archives/serverbackup-enterprise_6.2.2-78_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Так о чем я думал... Само приложение поддерживает архитектуру - там ничего не может пойти не так.
Есть ли способ "подделать" архитектуру процессора?
Я попытался сделать это в надежде, что APT соберет информацию из вывода uname
команда, но я сомневаюсь в этом. Я все равно попробовал в любом случае:
alias UNAME="echo Linux host 4.9.2-armada375 #1 SMP Mon Jan 23 16:52:54 CET 2017 amd64 amd64 amd64 GNU/Linux"
Вместо:
alias UNAME="echo Linux host 4.9.2-armada375 #1 SMP Mon Jan 23 16:52:54 CET 2017 armv7l armv7l armv7l GNU/Linux"
1 ответ
Вам нужно будет эмулировать процессор AMD64 / x86 в настройке ARM, чтобы выполнить двоичные файлы, предназначенные для AMD64 / x86.
Хотя техническая эмуляция возможна, она будет медленной. Необходимо выполнить каждую инструкцию в двоичном файле с помощью программного обеспечения, которое переводит каждую инструкцию в архитектуру ARM. Это будет означать, что для стороны ARM необходимо выполнить несколько инструкций для выполнения одной инструкции AMD64 / x86.
Можно также эмулировать подсистему памяти и т. Д.
Я не знаю, была ли сделана такая эмуляция, и даже если бы она была сделана, я сомневаюсь, что она может использоваться в любом реальном случае использования.
Единственные варианты, которые у вас есть, - это получить оборудование AMD64 / x64 для этого программного обеспечения или спросить, может ли поставщик программного обеспечения предоставить его версию ARM.