Ports/x8664/32bitOn64bit: различия между версиями

Материал из ALT Linux Wiki
< Ports‎ | x8664
(+arepo)
(fix markup)
Строка 1: Строка 1:
[[Category:Sisyphus]]
[[Category:Sisyphus]]
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/Ports/x8664/32bitOn64bit}}
=== 32bitOn64bit или собираем пакеты для 32битных систем на x86_64 ===
=== 32bitOn64bit или собираем пакеты для 32битных систем на x86_64 ===


# Нужно написать список репозиториев для 32-битной системы (в простейшем случае просто сделать копию <tt>/etc/apt/sources.list</tt> и заменить в этой копии <tt>x86_64</tt> на <tt>i586</tt>, если репозитории лежат рядом; можно ещё подключить i686 и i386). Файл списка можно положить в любое удобное место (не обязательно в каталог <tt>/etc/apt</tt>, но можно и туда -- например, в <tt>/etc/apt/i586-sources.list</tt>). В принципе можно удалить из этого списка строки <tt>rpm-src</tt> -- для работы hasher они не нужны.
# Нужно написать список репозиториев для 32-битной системы (в простейшем случае просто сделать копию <tt>/etc/apt/sources.list</tt> и заменить в этой копии <tt>x86_64</tt> на <tt>i586</tt>, если репозитории лежат рядом; можно ещё подключить i686 и i386). Файл списка можно положить в любое удобное место (не обязательно в каталог <tt>/etc/apt</tt>, но можно и туда -- например, в <tt>/etc/apt/i586-sources.list</tt>). В принципе можно удалить из этого списка строки <tt>rpm-src</tt> -- для работы hasher они не нужны.
# Поскольку hasher не позволяет указать файл списка репозиториев напрямую, нужно написать файл конфигурации apt (который опять-таки необязательно класть в <tt>/etc/apt</tt>).  В этом файле нужно указать имя созданного списка:
# Поскольку hasher не позволяет указать файл списка репозиториев напрямую, нужно написать файл конфигурации apt (который опять-таки необязательно класть в <tt>/etc/apt</tt>).  В этом файле нужно указать имя созданного списка:
::<pre>Dir::Etc::SourceList "/path/to/i586-sources.list";
<pre>Dir::Etc::SourceList "/path/to/i586-sources.list";
Dir::Etc::SourceParts "/var/empty";</pre>
Dir::Etc::SourceParts "/var/empty";</pre>
:Вторая строка необходима, чтобы обойти [https://bugzilla.altlinux.org/show_bug.cgi?id=5327#c12 грабли], заложенные в <tt>/etc/apt/sources.list.d/</tt>. Больше ничего в этом файле можно не писать, поскольку остальные параметры будут прочитаны из системного <tt>/etc/apt/apt.conf</tt>. Впрочем, можно и [https://bugzilla.altlinux.org/show_bug.cgi?id=5327#c17 полностью переопределить конфигурацию apt].
Вторая строка необходима, чтобы обойти [https://bugzilla.altlinux.org/show_bug.cgi?id=5327#c12 грабли], заложенные в <tt>/etc/apt/sources.list.d/</tt>. Больше ничего в этом файле можно не писать, поскольку остальные параметры будут прочитаны из системного <tt>/etc/apt/apt.conf</tt>. Впрочем, можно и [https://bugzilla.altlinux.org/show_bug.cgi?id=5327#c17 полностью переопределить конфигурацию apt].
# Хотя ядро Linux на x86_64 способно запускать 32-разрядные исполняемые файлы и без дополнительных настроек, по умолчанию поведение будет несколько отличаться от "настоящего" x86 -- в частности, ''uname()'' будет возвращать <tt>x86_64</tt> даже при вызове из 32-разрядных программ, в результате сборка пакетов в таком окружении может пойти не так, как нужно. Чтобы устранить это различие, нужно использовать утилиту <tt>/usr/bin/i386</tt> из пакета <tt>setarch</tt> -- она позволяет запустить процесс в таком режиме, чтобы ''uname()'' для него и всех запущенных им процессов возвращало <tt>i686</tt>.
# Хотя ядро Linux на x86_64 способно запускать 32-разрядные исполняемые файлы и без дополнительных настроек, по умолчанию поведение будет несколько отличаться от "настоящего" x86 -- в частности, ''uname()'' будет возвращать <tt>x86_64</tt> даже при вызове из 32-разрядных программ, в результате сборка пакетов в таком окружении может пойти не так, как нужно. Чтобы устранить это различие, нужно использовать утилиту <tt>/usr/bin/i386</tt> из пакета <tt>setarch</tt> -- она позволяет запустить процесс в таком режиме, чтобы ''uname()'' для него и всех запущенных им процессов возвращало <tt>i686</tt>.
# Запускать hasher для сборки нужно следующим образом:
# Запускать hasher для сборки нужно следующим образом:
::<pre>i386 hsh --target=i586 --apt-config=/path/to/i586-apt.conf (далее остальное, как обычно)</pre>
<pre>i386 hsh --target=i586 --apt-config=/path/to/i586-apt.conf (далее остальное, как обычно)</pre>
:Можно использовать для этого режима отдельный рабочий каталог, чтобы кеш hasher не пересоздавался каждый раз при переключении между сборкой для i586 и x86_64 (но запустить сборку в разных каталогах одновременно всё равно будет нельзя, если только не использовать опцию --number).
Можно использовать для этого режима отдельный рабочий каталог, чтобы кеш hasher не пересоздавался каждый раз при переключении между сборкой для i586 и x86_64 (но запустить сборку в разных каталогах одновременно всё равно будет нельзя, если только не использовать опцию --number).
# Чтобы не указывать опции --target и --apt-config каждый раз, можно вписать в файл <tt>~/.hasher/config</tt> следующий кусок:
# Чтобы не указывать опции --target и --apt-config каждый раз, можно вписать в файл <tt>~/.hasher/config</tt> следующий кусок:
::<pre>if [ `uname -m` = i686 ]; then
<pre>if [ `uname -m` = i686 ]; then
         def_target=i586
         def_target=i586
         apt_config="/path/to/i586-apt.conf"
         apt_config="/path/to/i586-apt.conf"
fi</pre>
fi</pre>
:Тогда достаточно будет просто добавить <tt>i386</tt> перед командой, вызывающей <tt>hsh</tt>, чтобы пакет собирался для i586. В последних версиях hasher в файле конфигурации можно переопределять и переменную <tt>workdir</tt>.
Тогда достаточно будет просто добавить <tt>i386</tt> перед командой, вызывающей <tt>hsh</tt>, чтобы пакет собирался для i586. В последних версиях hasher в файле конфигурации можно переопределять и переменную <tt>workdir</tt>.
 


==== biarch repos ====
==== biarch repos ====

Версия от 11:26, 18 августа 2008

32bitOn64bit или собираем пакеты для 32битных систем на x86_64

  1. Нужно написать список репозиториев для 32-битной системы (в простейшем случае просто сделать копию /etc/apt/sources.list и заменить в этой копии x86_64 на i586, если репозитории лежат рядом; можно ещё подключить i686 и i386). Файл списка можно положить в любое удобное место (не обязательно в каталог /etc/apt, но можно и туда -- например, в /etc/apt/i586-sources.list). В принципе можно удалить из этого списка строки rpm-src -- для работы hasher они не нужны.
  2. Поскольку hasher не позволяет указать файл списка репозиториев напрямую, нужно написать файл конфигурации apt (который опять-таки необязательно класть в /etc/apt). В этом файле нужно указать имя созданного списка:
Dir::Etc::SourceList "/path/to/i586-sources.list";
Dir::Etc::SourceParts "/var/empty";

Вторая строка необходима, чтобы обойти грабли, заложенные в /etc/apt/sources.list.d/. Больше ничего в этом файле можно не писать, поскольку остальные параметры будут прочитаны из системного /etc/apt/apt.conf. Впрочем, можно и полностью переопределить конфигурацию apt.

  1. Хотя ядро Linux на x86_64 способно запускать 32-разрядные исполняемые файлы и без дополнительных настроек, по умолчанию поведение будет несколько отличаться от "настоящего" x86 -- в частности, uname() будет возвращать x86_64 даже при вызове из 32-разрядных программ, в результате сборка пакетов в таком окружении может пойти не так, как нужно. Чтобы устранить это различие, нужно использовать утилиту /usr/bin/i386 из пакета setarch -- она позволяет запустить процесс в таком режиме, чтобы uname() для него и всех запущенных им процессов возвращало i686.
  2. Запускать hasher для сборки нужно следующим образом:
i386 hsh --target=i586 --apt-config=/path/to/i586-apt.conf (далее остальное, как обычно)

Можно использовать для этого режима отдельный рабочий каталог, чтобы кеш hasher не пересоздавался каждый раз при переключении между сборкой для i586 и x86_64 (но запустить сборку в разных каталогах одновременно всё равно будет нельзя, если только не использовать опцию --number).

  1. Чтобы не указывать опции --target и --apt-config каждый раз, можно вписать в файл ~/.hasher/config следующий кусок:
if [ `uname -m` = i686 ]; then
        def_target=i586
        apt_config="/path/to/i586-apt.conf"
fi

Тогда достаточно будет просто добавить i386 перед командой, вызывающей hsh, чтобы пакет собирался для i586. В последних версиях hasher в файле конфигурации можно переопределять и переменную workdir.

biarch repos