Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияСледующая версияСледующая версия справа и слева |
ru:slackware:multilib [2013/03/18 08:26 (UTC)] – [Компилирование 32-битных программ] bormant | ru:slackware:multilib [2017/07/07 19:39 (UTC)] – [Slackware64 current] bormant |
---|
* //glibc// (такой glibc, который поддерживает //исполнение// как 32-ных, так и 64-битных бинарных файлов), и | * //glibc// (такой glibc, который поддерживает //исполнение// как 32-ных, так и 64-битных бинарных файлов), и |
* //gcc// (способный //компилировать// в 32-битные бинарные файлы наравне с 64-битными). | * //gcc// (способный //компилировать// в 32-битные бинарные файлы наравне с 64-битными). |
- Затем взять из 32-битной Slackware библиотеки и установить их в 64-битной Slackware, что завершит процесс создания 32-битного программного слоя. | - Затем взять из 32-битной Slackware библиотеки и вместе с их 64-битными версиями установить их в 64-битной Slackware, что завершит процесс создания 32-битного программного слоя совместимости. |
| |
<note>Slackware для архитектуры x86_64 (или для краткости «//Slackware64//») является чистой 64-битной операционной системой, но легко обновляется до мультибииблиотечной. //Изначально в Slackware64 возможно компилировать и исполнять только 64-битные бинарные файлы//.</note> | |
| |
Когда вышла Slackware64, она имела преимущество перед прочими существовавшими 64-битными «форками». Последние добавляли 32-битный слой совместимости путём перекомпиляции множества своих пакетов как 32-битных бинарников. С другой стороны, Slackware — это дистрибутив, состоящий из 32-битного и 64-битного выпуска, разрабатываемых параллельно. Это означает, что вам не нужно компилировать 32-битные пакеты с нуля для добавления мультибиблиотечности в 64-битную систему. Можно просто взять их из дерева пакетов 32-битной Slackware!\\ Это было одной из причин не добавлять в Slackware64 полную мультибиблиотечность — мы создали необходимые условия, но если пользователю нужна мультибиблиотечность, то ему нужно действовать самостоятельно. \\ В разделе [[#подробные_инструкции | ниже]] я объясню, как взять 32-битный пакет Slackware (скажем, пакет «mesa») и перепаковать его содержимое в пакет «mesa-compat32», который можно установить непосредственно в Slackware64. | Когда вышла Slackware64, она имела преимущество перед прочими существовавшими 64-битными «форками». Последние добавляли 32-битный слой совместимости путём перекомпиляции множества своих пакетов как 32-битных бинарников. С другой стороны, Slackware — это дистрибутив, состоящий из 32-битного и 64-битного выпуска, разрабатываемых параллельно. Это означает, что вам не нужно компилировать 32-битные пакеты с нуля для добавления мультибиблиотечности в 64-битную систему. Можно просто взять их из дерева пакетов 32-битной Slackware!\\ Это было одной из причин не добавлять в Slackware64 полную мультибиблиотечность — мы создали необходимые условия, но если пользователю нужна мультибиблиотечность, то ему нужно действовать самостоятельно. \\ В разделе [[#подробные_инструкции | ниже]] я объясню, как взять 32-битный пакет Slackware (скажем, пакет «mesa») и перепаковать его содержимое в пакет «mesa-compat32», который можно установить непосредственно в Slackware64. |
| |
| <note>Slackware для архитектуры x86_64 (или для краткости «//Slackware64//») является чистой 64-битной операционной системой, но легко обновляется до мультибииблиотечной. //Изначально в Slackware64 возможно компилировать и исполнять только 64-битные бинарные файлы//.</note> |
| |
| |
* [[http://winehq.org/ | Wine]] \\ Большинство программ для Windows по-прежнему 32-разрядные, для их запуска на Linux в Wine требуется 32-битная версия Wine. | * [[http://winehq.org/ | Wine]] \\ Большинство программ для Windows по-прежнему 32-разрядные, для их запуска на Linux в Wine требуется 32-битная версия Wine. |
* [[http://www.virtualbox.org/ | VirtualBox]] \\ Популярное программное обеспечение для виртуальных машин. Несмотря на открытый (частично) исходный код, все ещё нуждается в 32-битных библиотеках на 64-битной Slackware. | * [[http://www.virtualbox.org/ | VirtualBox]] \\ Популярное программное обеспечение для виртуальных машин. Несмотря на открытый (частично) исходный код, все ещё нуждается в 32-битных библиотеках на 64-битной Slackware. |
| * [[http://steampowered.com|Steam]] \\ Очень популярная игровая платформа по-прежнему требует [[http://www.slackware.com/~alien/slackbuilds/steamclient/|32-разрядного клиента]]. Большинство доступных игр также 32-разрядные. |
* [[http://www.skype.com/ | Skype]], [[http://www.citrix.com/lang/English/home.asp | Citrix client]], ... \\ Это проприетарные программы с закрытыми исходными кодами. Мы вынуждены зависеть от их разработчиков в части доступности 64-битных бинарников. Для этих программ пока подобного не случилось. | * [[http://www.skype.com/ | Skype]], [[http://www.citrix.com/lang/English/home.asp | Citrix client]], ... \\ Это проприетарные программы с закрытыми исходными кодами. Мы вынуждены зависеть от их разработчиков в части доступности 64-битных бинарников. Для этих программ пока подобного не случилось. |
| |
Наряду с несколькими файлами README (эта статья вики — расширенная версия одного из тех файлов) ниже каталога верхнего уровня «//multilib//» находятся подкаталоги для каждого 64-битного выпуска Slackware. Там же расположен каталог «//source//». Он содержит исходные тексты и сценарии SlackBuild.\\ Что вам действительно нужно — бинарные пакеты — доступны в каталоге //<номер_выпуска_slackware>// ниже каталога верхнего уровня. Каждый такой каталог содержит подкаталог «//slackware64-compat32//», где находится основной набор конвертированных 32-битных пакетов Slackware, готовых к установке на 64-битной Slackware. | Наряду с несколькими файлами README (эта статья вики — расширенная версия одного из тех файлов) ниже каталога верхнего уровня «//multilib//» находятся подкаталоги для каждого 64-битного выпуска Slackware. Там же расположен каталог «//source//». Он содержит исходные тексты и сценарии SlackBuild.\\ Что вам действительно нужно — бинарные пакеты — доступны в каталоге //<номер_выпуска_slackware>// ниже каталога верхнего уровня. Каждый такой каталог содержит подкаталог «//slackware64-compat32//», где находится основной набор конвертированных 32-битных пакетов Slackware, готовых к установке на 64-битной Slackware. |
| |
<note tip>Для поддержки актуальности советую обратить внимание на [[http://slackware.com/~alien/multilib/ChangeLog.txt | ChangeLog]] ([[http://slackware.com/~alien/multilib/ChangeLog.rss | лента RSS]]), которые я поддерживаю для моих мультибиблиотечных пакетов. Обычно обновляются пакеты //glibc and gcc// в течении дня после обновления их в Slackware. Также обратите внимание на [[#сторонние_ инструменты_поддержки | compat32pkg]] от Sėbastien Ballet, автоматизирующие этот процесс, как это делает slackpkg.</note> | |
| ===== Поддержка мультибиблиотечности в актуальном состоянии ===== |
| |
| Для поддержки актуальности советую обратить внимание на [[http://slackware.com/~alien/multilib/ChangeLog.txt | ChangeLog]] ([[http://slackware.com/~alien/multilib/ChangeLog.rss | лента RSS]]), которые я поддерживаю для моих мультибиблиотечных пакетов. Обычно обновляются пакеты //glibc and gcc// в течении дня после обновления их в Slackware. |
| |
| Автоматизация: |
| - Обратите внимание на [[#сторонние_инструменты_поддержки | compat32pkg]] от Sėbastien Ballet, автоматизирующий процесс наподобие slackpkg. |
| - Если для управления пакетами предпочитаете slackpkg, стоит обратить внимание на [[http://slakfinder.org/slackpkg+.html|slackpkg+]], расширение для slackpkg, управляющее пакетами, установленными из сторонних хранилищ, включая мультибиблиотечные пакеты. При правильной настройке, поддерржка сводится к запуску: <code> |
| # slackpkg update |
| # slackpkg upgrade multilib |
| # slackpkg install multilib |
| </code> Последняя команда покажет новые «compat32» пакеты, например недавно добавленные llvm-compat32 и orc-compat32. |
| * Вот как выглядит типичная настройка для Slackware-current с использованием тестового хранилища KDE от Alien BOB. PKGS_PRIORITY задает приоритет пакетов gcc и glibc из мультибиблиотечного хранилища перед официнальным деревом Salckaware. Ключевое слово «multilib», которое задает имя хранилища, должно соответствовать используемому в приведенных выше командах «slackpkg». Слово «multilib» выбрано произвольно, с тем же успехом можно было везде использовать «compat32». \\ Ниже приведено примерное содержимое файла «/etc/slackpkg/slackpkgplus.conf»: <file> |
| SLACKPKGPLUS=on |
| VERBOSE=1 |
| ALLOW32BIT=off |
| USEBL=1 |
| WGETOPTS="--timeout=5 --tries=1" |
| GREYLIST=on |
| PKGS_PRIORITY=( multilib restricted alienbob ktown ) |
| REPOPLUS=( slackpkgplus multilib restricted alienbob ktown ) |
| MIRRORPLUS['multilib']=http://bear.alienbase.nl/mirrors/people/alien/multilib/current/ |
| MIRRORPLUS['alienbob']=http://bear.alienbase.nl/mirrors/people/alien/sbrepos/current/x86_64/ |
| MIRRORPLUS['restricted']=http://bear.alienbase.nl/mirrors/people/alien/restricted_sbrepos/current/x86_64/ |
| MIRRORPLUS['ktown']=http://bear.alienbase.nl/mirrors/alien-kde/current/latest/x86_64/ |
| MIRRORPLUS['slackpkgplus']=http://slakfinder.org/slackpkg+/ |
| </file> |
| |
| |
Этот раздел содержит основные инструкции по добавлению полной поддержки мультибиблиотечности в вашу систему Slackware64. Если хотите разобраться в процессе более подробно или нужна информация о том, как компилировать 32-битные программы в Slackware64, прочтите и последующие разделы.\\ Обратите внимание, знак «#» в начале команд означает //приглашение суперпользователя root//. | Этот раздел содержит основные инструкции по добавлению полной поддержки мультибиблиотечности в вашу систему Slackware64. Если хотите разобраться в процессе более подробно или нужна информация о том, как компилировать 32-битные программы в Slackware64, прочтите и последующие разделы.\\ Обратите внимание, знак «#» в начале команд означает //приглашение суперпользователя root//. |
| |
* Загрузите пакеты с моего сайта (я давал ссылку в [[#получение_мультибиблиотечных_пакетов | предыдущем разделе]]), в примере ниже использована ссылка на зеркало. Допустим, используется Slackware 14.0. Выполните: <code> | * Загрузите пакеты с моего сайта (я давал ссылку в [[#получение_мультибиблиотечных_пакетов | предыдущем разделе]]), в примере ниже использована ссылка на зеркало. Допустим, используется Slackware 14.2. Выполните: <code> |
# SLACKVER=14.0 | # SLACKVER=14.2 |
# mkdir multilib | # mkdir multilib |
# cd multilib | # cd multilib |
# lftp -c "open http://taper.alienbase.nl/mirrors/people/alien/multilib/ ; mirror ${SLACKVER}" | # lftp -c "open http://bear.alienbase.nl/mirrors/people/alien/multilib/ ; mirror -c -e ${SLACKVER}" |
# cd ${SLACKVER} | # cd ${SLACKVER} |
</code> | </code> |
</code>которая установит все 32-битные пакеты Slackware (или обновит их, если установлены более старые их версии, например, при обновлении до новой версии Slackware). Это всё! | </code>которая установит все 32-битные пакеты Slackware (или обновит их, если установлены более старые их версии, например, при обновлении до новой версии Slackware). Это всё! |
* Если каталог //slackware64-compat32// отсутствует, то либо его не загрузили, либо зеркало его не содержало. В этом случае придётся выполнить конвертацию 32-битных пакетов самостоятельно. Несложно, но займёт какое-то время: | * Если каталог //slackware64-compat32// отсутствует, то либо его не загрузили, либо зеркало его не содержало. В этом случае придётся выполнить конвертацию 32-битных пакетов самостоятельно. Несложно, но займёт какое-то время: |
* Быстрее всего, если у вас есть локальный каталог с оригинальными 32-битными пакетами Slackware (//локальное зеркало//). Купившие официальный DVD Slackware могут использовать его: он двусторонний и 32-битная Slackware на одной из сторон. __В этом примере__ будем считать, что локальное зеркало дерева 32-битной Slackware доступно в каталоге «''/home/ftp/pub/slackware/slackware-13.37/slackware/''».\\ Непосредственно в нём должны быть подкаталоги «a», «ap», «d», «l», «n», «x». (Если смонтировали DVD Slackware, возможный каталог «''/media/SlackDVD/slackware/''», но в примерах команд ниже я его не буду использовать). | * Быстрее всего, если у вас есть локальный каталог с оригинальными 32-битными пакетами Slackware (//локальное зеркало//). Купившие официальный DVD Slackware могут использовать его: он двусторонний, и 32-битная Slackware на одной из сторон. __В этом примере__ будем считать, что локальное зеркало дерева 32-битной Slackware доступно в каталоге «''/home/ftp/pub/slackware/slackware-14.2/slackware/''».\\ Непосредственно в нём должны быть подкаталоги «a», «ap», «d», «l», «n», «x». (Если смонтировали DVD Slackware, возможный каталог «''/media/SlackDVD/slackware/''», но в примерах команд ниже я его не буду использовать). |
* Создайте новый пустой каталог (назовём его «slackware64-compat32») и перейдите в него: <code> | * Создайте новый пустой каталог (назовём его «slackware64-compat32») и перейдите в него: <code> |
# mkdir slackware64-compat32 ; cd slackware64-compat32 | # mkdir slackware64-compat32 ; cd slackware64-compat32 |
</code> | </code> |
* Выполните следующую команду для создания набора 32-битных пакетов совместимости, используя в качестве параметра каталог с официальными 32-битными пакетами Slackware: <code> | * Выполните следующую команду для создания набора 32-битных пакетов совместимости, используя в качестве параметра каталог с официальными 32-битными пакетами Slackware: <code> |
# massconvert32.sh -i /home/ftp/pub/slackware/slackware-13.37/slackware/ | # massconvert32.sh -i /home/ftp/pub/slackware/slackware-14.2/slackware/ |
</code> | </code> |
* Предыдущий шаг займёт какое-то время. По завершении установите 90Мб свежеконвертированных 32-битных пакетов Slackware, созданных в подкаталогах //текущего каталога//: <code> | * Предыдущий шаг займёт какое-то время. По завершении установите 90Мб свежеконвертированных 32-битных пакетов Slackware, созданных в подкаталогах //текущего каталога//: <code> |
<note warning>Если используете пакетный менеджер, как //slackpkg//, придётся добавить все пакеты ''glibc'' и ''gcc'' в его чёрный список. Если не принять подобных мер предосторожности, есть риск, что пакетный менеджер случайно заменит мультибиблиотечные версии версиями из оригинальной чисто 64-битной Slackware!\\ Если используете Slackware 13.37 или новее, тогда slackpkg поддерживает регулярные выражения в файле чёрного списка. В этом случае будет достаточно одной строки в ''/etc/slackpkg/blacklist'' для внесения в чёрный список всех моих пакетов (включая мультибиблиотечные пакеты gcc и glibc и все пакеты ''compat32''): <code> | <note warning>Если используете пакетный менеджер, как //slackpkg//, придётся добавить все пакеты ''glibc'' и ''gcc'' в его чёрный список. Если не принять подобных мер предосторожности, есть риск, что пакетный менеджер случайно заменит мультибиблиотечные версии версиями из оригинальной чисто 64-битной Slackware!\\ Если используете Slackware 13.37 или новее, тогда slackpkg поддерживает регулярные выражения в файле чёрного списка. В этом случае будет достаточно одной строки в ''/etc/slackpkg/blacklist'' для внесения в чёрный список всех моих пакетов (включая мультибиблиотечные пакеты gcc и glibc и все пакеты ''compat32''): <code> |
[0-9]+alien | [0-9]+alien |
[0-9]+compat32</code></note> | [0-9]+compat32</code> С другой стороны, если используете расширение slackpkg [[http://slakfinder.org/slackpkg+.html|slackpkg+]], то **не** включайте эти пакеты в чёрный список, иначе slackpkg+ не сможет ими управлять!</note> |
| |
<note tip>Если используете Slackware 13.1 или новее и загрузили пакет compat32-tools для этого выпуска, сценарий //massconvert32.sh// может использовать удалённый сервер веб для загрузки с него 32-битных пакетов Slackware, вместо локального зеркала Slackare или DVD. Используйте параметр «-u» для указания URL, как в примере ниже: <code> | <note tip>Если используете Slackware 13.1 или новее и загрузили пакет compat32-tools для этого выпуска, сценарий //massconvert32.sh// может загрузить 32-битные пакеты Slackware с удалённого веб-сервера, вместо локального зеркала Slackare или DVD. Используйте параметр «-u» для указания URL, как в примере ниже: <code> |
# massconvert32.sh -u http://someserver.org/path/to/slackware-13.37/slackware | # massconvert32.sh -u http://someserver.org/path/to/slackware-14.2/slackware |
</code> </note> | </code> </note> |
| |
* gcc-objc-4.5.2_multilib-x86_64-2alien.txz | * gcc-objc-4.5.2_multilib-x86_64-2alien.txz |
* Библиотеки GNU libc: | * Библиотеки GNU libc: |
* glibc-2.13_multilib-x86_64-3alien.txz | * glibc-2.13_multilib-x86_64-7alien.txz |
* glibc-i18n-2.13_multilib-x86_64-3alien.txz | * glibc-i18n-2.13_multilib-x86_64-7alien.txz |
* glibc-profile-2.13_multilib-x86_64-3alien.txz | * glibc-profile-2.13_multilib-x86_64-7alien.txz |
* glibc-solibs-2.13_multilib-x86_64-3alien.txz | * glibc-solibs-2.13_multilib-x86_64-7alien.txz |
* glibc-zoneinfo-2.13_multilib-noarch-3alien.txz | |
| |
====Slackware64 current==== | ====Slackware64 14.0==== |
| |
| * Комплект компиляторов gcc: |
| * gcc-g++-4.7.1_multilib-x86_64-1alien.txz |
| * gcc-gfortran-4.7.1_multilib-x86_64-1alien.txz |
| * gcc-gnat-4.7.1_multilib-x86_64-1alien.txz |
| * gcc-go-4.7.1_multilib-x86_64-1alien.txz |
| * gcc-java-4.7.1_multilib-x86_64-1alien.txz |
| * gcc-objc-4.7.1_multilib-x86_64-1alien.txz |
| * Библиотеки GNU libc: |
| * glibc-2.15_multilib-x86_64-9alien.txz |
| * glibc-i18n-2.15_multilib-x86_64-9alien.txz |
| * glibc-profile-2.15_multilib-x86_64-9alien.txz |
| * glibc-solibs-2.15_multilib-x86_64-9alien.txz |
| |
| ====Slackware64 14.1==== |
| |
* До тех пор, пока отсутствует отдельный каталог «//current//», используйте файлы из каталога для наиболее свежего стабильного выпуска. | * До тех пор, пока отсутствует отдельный каталог «//current//», используйте файлы из каталога для наиболее свежего стабильного выпуска. |
| |
* Комплект компиляторов gcc: | * Комплект компиляторов gcc: |
* gcc-4.7.1_multilib-x86_64-1fix1_alien.txz | * gcc-4.8.2_multilib-x86_64-1alien.txz |
* gcc-g++-4.7.1_multilib-x86_64-1fix1_alien.txz | * gcc-g++-4.8.2_multilib-x86_64-1alien.txz |
* gcc-gfortran-4.7.1_multilib-x86_64-1fix1_alien.txz | * gcc-gfortran-4.8.2_multilib-x86_64-1alien.txz |
* gcc-gnat-4.7.1_multilib-x86_64-1fix1_alien.txz | * gcc-gnat-4.8.2_multilib-x86_64-1alien.txz |
* gcc-go-4.7.1_multilib-x86_64-1fix1_alien.txz | * gcc-go-4.8.2_multilib-x86_64-1alien.txz |
* gcc-java-4.7.1_multilib-x86_64-1fix1_alien.txz | * gcc-java-4.8.2_multilib-x86_64-1alien.txz |
* gcc-objc-4.7.1_multilib-x86_64-1fix1_alien.txz | * gcc-objc-4.8.2_multilib-x86_64-1alien.txz |
* Библиотеки GNU libc: | * Библиотеки GNU libc: |
* glibc-2.15_multilib-x86_64-6alien.txz | * glibc-2.17_multilib-x86_64-10alien.txz |
* glibc-i18n-2.15_multilib-x86_64-6alien.txz | * glibc-i18n-2.17_multilib-x86_64-10alien.txz |
* glibc-profile-2.15_multilib-x86_64-6alien.txz | * glibc-profile-2.17_multilib-x86_64-10alien.txz |
* glibc-solibs-2.15_multilib-x86_64-6alien.txz | * glibc-solibs-2.17_multilib-x86_64-10alien.txz |
* glibc-zoneinfo-2012e_2012e_multilib-noarch-6alien.txz | |
| |
Есть один дополнительный пакет для установки программой «installpkg»: | ====Slackware64 14.2==== |
| |
* «32-битный инструментарий» (сценарий, облегчающий создание 32-битных пакетов) | * Комплект компиляторов gcc: |
* compat32-tools-2.2-noarch-2alien.tgz | * gcc-5.3.0_multilib-x86_64-3alien.txz |
| * gcc-g++-5.3.0_multilib-x86_64-3alien.txz |
| * gcc-gfortran-5.3.0_multilib-x86_64-3alien.txz |
| * gcc-gnat-5.3.0_multilib-x86_64-3alien.txz |
| * gcc-go-5.3.0_multilib-x86_64-3alien.txz |
| * gcc-java-5.3.0_multilib-x86_64-3alien.txz |
| * gcc-objc-5.3.0_multilib-x86_64-3alien.txz |
| * Библиотеки GNU libc: |
| * glibc-2.23_multilib-x86_64-2alien.txz |
| * glibc-i18n-2.23_multilib-x86_64-2alien.txz |
| * glibc-profile-2.23_multilib-x86_64-2alien.txz |
| * glibc-solibs-2.23_multilib-x86_64-2alien.txz |
| |
<note>В Slamd64 имеются отдельные мультибиблиотечные 64-битные и 32-битные пакеты gcc/glibc.\\ Тем не менее, я считаю, что правильнее сохранять эти основные мультибиблиотечные пакеты неразделёнными. Я последовал концепции, используемой в пакете //binutils// из самой Slackware64, который сочетает 64-битные и 32-битные мультибиблиотечные возможности в едином пакете.</note> | ====Slackware64 current==== |
| |
| * Комплект компиляторов gcc: |
| * gcc-7.1.0_multilib-x86_64-2alien.txz |
| * gcc-brig-7.1.0_multilib-x86_64-2alien.txz |
| * gcc-g++-7.1.0_multilib-x86_64-2alien.txz |
| * gcc-gfortran-7.1.0_multilib-x86_64-2alien.txz |
| * gcc-gnat-7.1.0_multilib-x86_64-2alien.txz |
| * gcc-go-7.1.0_multilib-x86_64-2alien.txz |
| * gcc-objc-7.1.0_multilib-x86_64-2alien.txz |
| |
| * Библиотеки GNU libc: |
| * glibc-2.25_multilib-x86_64-3alien.txz |
| * glibc-i18n-2.25_multilib-x86_64-3alien.txz |
| * glibc-profile-2.25_multilib-x86_64-3alien.txz |
| * glibc-solibs-2.25_multilib-x86_64-3alien.txz |
| |
| <note>После обновления до gcc 7 пакета ''gcc-java'' больше не существует, так как его разработка прекращена.</note> |
| <note>Пакет ''glibc-zoneinfo'' не содержит кода и поэтому не входит в мультилиб. Этот пакет устанавливается из 64-битной Slackware.</note> |
| |
| ====Все версии Slackware==== |
| |
| Есть один дополнительный пакет для установки программой «installpkg». Актуальная версия для каждого из выпусков Slackware может отличаться, но пакет находится в том же каталоге, что и мультибиблиотечные версии ''gcc'' и ''glibc'': |
| |
| * «32-битный инструментарий» (сценарий, облегчающий создание 32-битных пакетов) |
| * compat32-tools-3.7-noarch-1alien.tgz |
| |
| |
Потребуются дополнительные меры предосторожности для удаления ненужных/нежелательных файлов из 32-битных пакетов перед их установкой. Нужны 32-битные пакеты, которые не конфликтуют с тем, что уже есть в 64-битной Slackware. Отсюда и название «32-битный пакет совместимости». | Потребуются дополнительные меры предосторожности для удаления ненужных/нежелательных файлов из 32-битных пакетов перед их установкой. Нужны 32-битные пакеты, которые не конфликтуют с тем, что уже есть в 64-битной Slackware. Отсюда и название «32-битный пакет совместимости». |
| |
Я решил, что если 32-битные пакеты совместимости для Slackware буду делать я сам, это будет пустой тратой загрузочного канала. В конце концов, вероятно, у вас уже есть купленный DVD Slackware 13.37, то есть уже имеется в наличии и 64-битная, и 32-битная версии Slackware... в противном случае дерево пакетов 32-битной Slackware, безусловно, доступно для свободной загрузки ;-) | Я решил, что если 32-битные пакеты совместимости для Slackware буду делать я сам, это будет пустой тратой загрузочного канала. В конце концов, вероятно, у вас уже есть купленный DVD Slackware 14.2, то есть уже имеется в наличии и 64-битная, и 32-битная версии Slackware... в противном случае дерево пакетов 32-битной Slackware, безусловно, доступно для свободной загрузки ;-) |
| |
Вместо этого я написал несколько сценариев (часть кода написана Fred Emmott для небезызвестной [[http://slamd64.com/ | Slamd64]]) и обернул их в пакет «//compat32-tools//». Их назначение — позволить вам самостоятельно извлечь необходимое из произвольного 32-битного пакета Slackware и и использовать его для создания нового пакета, который можно безопасно устанавливать на 64-битной Slackware. | Вместо этого я написал несколько сценариев (часть кода написана Fred Emmott для небезызвестной [[http://slamd64.com/ | Slamd64]]) и обернул их в пакет «//compat32-tools//». Их назначение — позволить вам самостоятельно извлечь необходимое из произвольного 32-битного пакета Slackware и и использовать его для создания нового пакета, который можно безопасно устанавливать на 64-битной Slackware. |
* //convertpkg-compat32//\\ Этот сценарий принимает 32-битный пакет Slackware и собирает на его основе пакет «-compat32», который можно безопасно установить (при помощи «installpkg») на Slackware64, параллельно с 64-битной версией того же самого пакета. Например, допустим, потребовались 32-битные библиотеки из пакета «mesa». Берём пакет «mesa» из 32-битной Slackware (''x/mesa-7.5-i486-1.txz'') и выполняем <code> | * //convertpkg-compat32//\\ Этот сценарий принимает 32-битный пакет Slackware и собирает на его основе пакет «-compat32», который можно безопасно установить (при помощи «installpkg») на Slackware64, параллельно с 64-битной версией того же самого пакета. Например, допустим, потребовались 32-битные библиотеки из пакета «mesa». Берём пакет «mesa» из 32-битной Slackware (''x/mesa-7.5-i486-1.txz'') и выполняем <code> |
# convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz | # convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz |
</code> который создаст новый пакет ''mesa-compat32-7.5-x86_64-1.txz''. Этот новый пакет (созданный в каталоге ''/tmp'', если не указали другой каталог) основан на прежнем 32-битном пакете, но не содержит лишнего. Смена базового имени пакета (//mesa// на //mesa-compat32//) позволяет установить этот новый пакет в Slackware64, где он сможет сосуществовать с 64-битным пакетом //mesa// не перезаписывая его файлов.\\ Временные файлы, оставленные сценарием в каталоге «''/tmp/package-<prgnam>-compat32''», можно удалить. | </code> который создаст новый пакет ''mesa-compat32-7.5-x86_64-1compat32.txz''. Этот новый пакет (созданный в каталоге ''/tmp'', если не указали другой каталог) основан на прежнем 32-битном пакете, но не содержит лишнего. Смена базового имени пакета (//mesa// на //mesa-compat32//) позволяет установить этот новый пакет в Slackware64, где он сможет сосуществовать с 64-битным пакетом //mesa// не перезаписывая его файлов.\\ Временные файлы, оставленные сценарием в каталоге «''/tmp/package-<prgnam>-compat32''», можно удалить. |
| |
* //massconvert32.sh//\\ Этот сценарий содержит внутренний список пакетов, которые я считаю основой 32-битной Slackware. Он использует упомянутый выше сценарий «//convertpkg-compat32//» для конвертации пакетов по внутреннему списку в «-compat32».\\ Этот сценарий достаточно запустить один раз, например, как показано ниже (в примере считается, что 32-битный DVD Slackware смонтирован в ''/mnt/dvd''): <code> | * //massconvert32.sh//\\ Этот сценарий содержит внутренний список пакетов, которые я считаю основой 32-битной Slackware. Он использует упомянутый выше сценарий «//convertpkg-compat32//» для конвертации пакетов по внутреннему списку в «-compat32».\\ Этот сценарий достаточно запустить один раз, например, как показано ниже (в примере считается, что 32-битный DVD Slackware смонтирован в ''/mnt/dvd''): <code> |
# massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32 | # massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32 |
</code> В результате примерно 60 Мб новых пакетов будут записаны во вновь созданный каталог ''~/compat32'' (имя каталога выбрано для примера и, конечно, может быть произвольным). Эти пакеты содержат 32-битный костяк мультибиблиотечной системы Slackware64.\\ Установите их при помощи «''installpkg''», и они обеспечат вам достаточно полный 323-битный слой совместимости поверх Slackware64: <code> | </code> В результате примерно 150 МБ новых пакетов будут записаны во вновь созданный каталог ''~/compat32'' (имя каталога выбрано для примера и, конечно, может быть произвольным). Эти пакеты содержат 32-битный костяк мультибиблиотечной системы Slackware64.\\ Установите их при помощи «''installpkg''», и они обеспечат вам достаточно полный 32[[http://example.com|Внешняя ссылка]]-битный слой совместимости поверх Slackware64: <code> |
# installpkg ~/compat32/*/*.t?z | # installpkg ~/compat32/*/*.t?z |
</code> Конечно, при обновлении с предыдущих версий этих пакетов (например, при обновлении 64-битной Slackware до новой версии) нужно использовать «''upgradepkg --install-new''» вместо «''installpkg''»: <code> | </code> Конечно, при обновлении с предыдущих версий этих пакетов (например, при обновлении 64-битной Slackware до новой версии) нужно использовать «''upgradepkg --install-new''» вместо «''installpkg''»: <code> |
===== Компилирование 32-битных программ ===== | ===== Компилирование 32-битных программ ===== |
| |
Если нужно скомпилировать 32-битную программу (wine и grub — пара примеров исключительно 32-битных программ с открытым исходным кодом), сперва настройте окружение запуском следующей команды:<code> | Если нужно скомпилировать 32-битную программу (wine и grub — пара примеров исключительно 32-битных программ с открытым исходным кодом), сперва настройте окружение суперпользователя root запуском следующей команды:<code> |
$ . /etc/profile.d/32dev.sh | # . /etc/profile.d/32dev.sh |
</code> Обратите внимание на точку перед именем файла — это тоже часть команды (синоним команды source)! Запуск команды изменяет или создаёт несколько переменных окружения. В результате при компиляции 32-битные версии бинарных файлов получат приоритет над 64-битными — будет запускаться 32-битная компиляция. Изменения действуют до выхода (logout) из шелла. | </code> Обратите внимание на точку в начале строки — это тоже часть команды. Использование точки эквивалентно команде source. \\ Запуск команды изменяет или создаёт несколько переменных окружения. В результате при компиляции 32-битные версии бинарных файлов получат приоритет над 64-битными — будет запускаться 32-битная компиляция. Изменения действуют до выхода (logout) из шелла суперпользователя root. |
| |
В этом изменённом окружении возможно использовать стандартные SlackBuild-ы для сборки 32-битных пакетов для Slackware64. Пара важных замечаний: | В этом изменённом окружении возможно использовать стандартные SlackBuild-ы для сборки 32-битных пакетов для Slackware64. Несколько важных замечаний: |
- Необходимо устанавливать переменную ARCH в значение «x86_64», несмотря на компиляцию 32-битной программы! \\ Это относится к //тройке// «$ARCH-slackware-linux», обычно используемой в команде «configure». Если установить ARCH, например, в значение «i486», то определение //CFLAGS// для этой архитектуры приведёт к ошибке ''gcc'' наподобие «//compiler can not create executables//» («//компилятор не может создавать исполняемые файлы//»). Это относится к дизайну сценариев SlackBuild. Вместо правки сценариев и изменения/удаления определения //GFLAGS// можно установить переменную ARCH в «x86_64» и сэкономить себе время. Реальную работу выполняет сценарий ''32dev.sh''. | - Необходимо устанавливать переменную ARCH в значение «i486», поскольку компилируется 32-битная программа хотя бы и на 64-битной системе! \\ Это относится к //тройке// «$ARCH-slackware-linux», обычно используемой в команде «configure». |
- Правка сценария SlackBuild потребуется, если он будет использовать каталоги «lib64/» при «$ARCH = x86_64». Придётся заставить его использовать каталоги «lib/». Обычно это достигается поиском определения:<code> | - В качестве исключения, компилировать пакет «wine» необходимо с «ARCH=x86_64», поскольку он будет установлен непосредственно на мультибиблиотечный компьютер без преобразования в пакет «compat32». |
LIBDIRSUFFIX="64" | - Для установки этого 32-битного пакета на мультибиблиотечную Slackware64, его нужно преобразовать в совместимый пакет «compat32»: \\ <code> |
</code> и заменой этой строки на <code> | # convertpkg-compat32 -i /path/to/your/fresh/foo-VERSION-i486-BUILD.txz |
LIBDIRSUFFIX="" | # upgradepkg --install-new /tmp/foo-compat32-VERSION-x86_64-BUILDcompat32.txz |
</code> | </code> |
| |
| |
<code bash> | <code bash> |
# Серия A/: | # Набор A/: |
| |
aaa_elflibs | aaa_elflibs |
| attr |
bzip2 | bzip2 |
cups | cups |
dbus | dbus |
e2fsprogs | e2fsprogs |
| eudev |
| libgudev |
openssl-solibs | openssl-solibs |
| udev |
util-linux | util-linux |
| xz |
| |
# Серия AP/: | # Набор AP/: |
| |
| cups |
| cups-filters |
| flac |
| mariadb |
mpg123 | mpg123 |
mysql | mysql |
| sqlite |
| |
# Серия D/: | # Набор D/: |
| |
libtool | libtool |
| llvm |
| opencl-headers |
| |
# Серия L/: | # Набор L/: |
| |
| SDL2 |
alsa-lib | alsa-lib |
alsa-oss | alsa-oss |
| alsa-plugins |
atk | atk |
audiofile | audiofile |
cairo | cairo |
dbus-glib | dbus-glib |
| elfutils |
esound | esound |
expat | expat |
| ffmpeg |
| fftw |
freetype | freetype |
| fribidi |
gamin | gamin |
| gc |
gdk-pixbuf2 | gdk-pixbuf2 |
| giflib |
glib2 | glib2 |
| gmp |
| gnome-keyring |
gtk+2 | gtk+2 |
gst-plugins-base | gst-plugins-base |
| gst-plugins-base0 |
gst-plugins-good | gst-plugins-good |
| gst-plugins-good0 |
| gst-plugins-libav |
gstreamer | gstreamer |
| gstreamer0 |
hal | hal |
| harfbuzz |
| icu4c |
jasper | jasper |
| json-c |
| lame |
lcms | lcms |
| lcms2 |
| libaio |
libart_lgpl | libart_lgpl |
| libasyncns |
| libclc |
| libedit |
libelf | libelf |
libexif | libexif |
| libffi |
libglade | libglade |
libgphoto2 | libgphoto2 |
libieee1284 | libieee1284 |
libjpeg | libjpeg |
| libjpeg-turbo |
libmng | libmng |
libmpc | libmpc |
| libnl3 |
| libnotify |
| libogg |
libpcap | libpcap |
libpng | libpng |
| libsamplerate |
libsndfile | libsndfile |
| libtasn1 |
libtermcap | libtermcap |
libtiff | libtiff |
| libunistring |
libusb | libusb |
| libvorbis |
libxml2 | libxml2 |
libxslt | libxslt |
| lzo |
ncurses | ncurses |
| ocl-icd |
| openjpeg |
| orc |
pango | pango |
popt | popt |
| pulseaudio |
| python-six |
qt | qt |
readline | readline |
| sbc |
sdl | sdl |
seamonkey-solibs | seamonkey-solibs |
| speexdsp |
| startup-notification |
svgalib | svgalib |
v4l-utils | v4l-utils |
zlib | zlib |
| |
# Серия N/: | # Набор N/: |
| |
curl | curl |
libgcrypt | libgcrypt |
libgpg-error | libgpg-error |
| libtirpc |
| nettle |
openldap-client | openldap-client |
openssl | openssl |
| p11-kit |
| samba |
| |
# Серия X/: | # Набор X/: |
| |
fontconfig | fontconfig |
| freeglut |
glew | glew |
| glu |
libFS | libFS |
libICE | libICE |
libXfixes | libXfixes |
libXfont | libXfont |
| libXfont2 |
libXfontcache | libXfontcache |
libXft | libXft |
libdmx | libdmx |
libdrm | libdrm |
| libepoxy |
libfontenc | libfontenc |
| libinput |
| libpciaccess |
| libva |
| libva-intel-driver |
| libvdpau |
libxcb | libxcb |
| libxshmfence |
mesa | mesa |
pixman | pixman |
| vulkan-sdk |
| xcb-util |
| |
| # Набор XAP/: |
| |
| sane |
</code> | </code> |
| |
| |
| ===== Зеркала мультибиблиотек ===== |
| |
| Загрузить мультибиблиотечные пакеты можно (как минимум) по этим адресам: |
| |
| * [[http://slackware.com/~alien/multilib/ | http://slackware.com/~alien/multilib/]] |
| * [[http://bear.alienbase.nl/mirrors/people/alien/multilib/ | http://bear.alienbase.nl/mirrors/people/alien/multilib/]] |
| * [[http://slackware.uk/people/alien/multilib/| http://slackware.uk/people/alien/multilib/]] |
| * [[http://alien.slackbook.org/slackware/multilib/| http://alien.slackbook.org/slackware/multilib/]] |
| * [[http://slackbuilds.org/mirror/alien/multilib/| http://slackbuilds.org/mirror/alien/multilib/]] |
| |
===== Сторонние инструменты поддержки ===== | ===== Сторонние инструменты поддержки ===== |
| |
* Sėbastien Ballet написал инструмент //compat32pkg//. На [[http://compat32pkg.sourceforge.net/ | его сайте]] //compat32pkg// доступен для загрузки как и обширная документация по его использованию в Slackware64.\\ Цитата с сайта:\\ //«Compat32pkg — это автоматический инструмент, предоставляющий всё необходимое для управления (конвертации, установки, обновления, удаления) 32-битной части мультибиблиотечной slackware-64 от AlienBob-а, а также всех 32-битных пакетов из Slackware-32, в которых у пользователей 64-битного окружения может возникнуть потребность, таких как firefox, seamonkey, jre, ...»// | * Sėbastien Ballet написал инструмент //compat32pkg//. На [[http://compat32pkg.sourceforge.net/ | его сайте]] //compat32pkg// доступен для загрузки как и обширная документация по его использованию в Slackware64.\\ Цитата с сайта:\\ //«Compat32pkg — это автоматический инструмент, предоставляющий всё необходимое для управления (конвертации, установки, обновления, удаления) 32-битной части мультибиблиотечной slackware-64 от AlienBob-а, а также всех 32-битных пакетов из Slackware-32, в которых у пользователей 64-битного окружения может возникнуть потребность, таких как firefox, seamonkey, jre, ...»// |
| * Написанный Matteo Rossini (ник zerouno) с правками (в частности) от Sėbastien Ballet [[http://slakfinder.org/slackpkg+.html|slackpkg+]]. Это плагин для [[http://slackpkg.org/|slackpkg]] из Slackware, добавляющий возможность установки пакетов из внешних (сторонних) неофициальных репозиториев Slackware. Он хорошо подходит для добавления мультибиблиотечности в вашу 64-битную Slackware и поддержания её в актуальном состоянии. |
| |
| |
===== Благодарности ===== | ===== Благодарности ===== |
| |
* Большое спасибо Fred Emmott, создателю Slamd64 — оригинального неофициального 64-битного форка Slackware. Хотя Slackware64 и не основана на его работе, большая часть моих знаний про настройку 32-битной части мультибиблиотечного Linux из его записок в Slamd64. | * Большое спасибо Fred Emmott, создателю Slamd64 — оригинального неофициального 64-битного форка Slackware. Хотя Slackware64 и не основана на его работе, большая часть моих знаний про настройку 32-битной части мультибиблиотечного Linux из его записок в Slamd64.\\ Заметьте, что в Slamd64 имеются отдельные мультибиблиотечные 64-битные и 32-битные пакеты gcc/glibc. Тем не менее, я считаю, что правильнее сохранять эти основные мультибиблиотечные пакеты неразделёнными. Я последовал концепции, используемой в пакете //binutils// из самой Slackware64, который сочетает 64-битные и 32-битные мультибиблиотечные возможности в едином пакете. |
| |
* Cross Linux From Scratch.\\ Вики CLFS (http://trac.cross-lfs.org/wiki/read#ReadtheCrossLinuxFromScratchBookOnline) из разряда «обязательно к прочтению», если хотите разобраться с портированием Linux на новую архитектуру. Там я позаимствовал несколько идей, концепций и патчей при создании Slackware64 с нуля, и опять, когда я создавал с нуля свои мультибиблиотечные пакеты gcc/glibc (мой README по мультибиблиотечности-с-нуля доступен в каталоге ''./source''). | * Cross Linux From Scratch.\\ Вики CLFS (http://trac.cross-lfs.org/wiki/read#ReadtheCrossLinuxFromScratchBookOnline) из разряда «обязательно к прочтению», если хотите разобраться с портированием Linux на новую архитектуру. Там я позаимствовал несколько идей, концепций и патчей при создании Slackware64 с нуля, и опять, когда я создавал с нуля свои мультибиблиотечные пакеты gcc/glibc (мой README по мультибиблиотечности-с-нуля доступен в каталоге ''./source''). |