[2024-feb-29] Sad news: Eric Layton aka Nocturnal Slacker aka vtel57 passed away on Feb 26th, shortly after hospitalization. He was one of our Wiki's most prominent admins. He will be missed.

Welcome to the Slackware Documentation Project

Це стара версія документу!


In Translating…

Додавання Мульти-Бібліотечності в Slackware з архітектурою x86_64

Це стаття містить інструкцію по тому, як створити справжню мультибібліотечну Slackware64. Мультибібліотечна Slackware64 спроможна запускати як 64-х розрядні так і 32-х розрядні програми. У документі Стандарт ієрархії файлової системи описується оптимальне розміщення 32-х та 64-х бітного програмного забезпечення в одній системі. Коли була розпочата розробка порту “Slackware64” (офіційний порт під архітектуру x86_64) ми вирішили адаптуватися під цей стандарт. Тому Slackware64 налаштована шукати 64-х розрядні бібліотеки у директоріях /lib64 та /usr/lib64. Ось чому вона має назву Slackware64 “multilib-ready” - хоча, 32-х розрядні бібліотеки вона буде шукати у директоріях /lib та /usr/lib, але 32-х розрядних програми чи бібліотек, з системою не постачається. Є декілька кроків, які повинен зробити користувач, щоб перетворити систему на Slackware64 “multilib-enabled”.

Це досягається наступним чином:

  1. Спочатку треба перемкнути в режим мультибібліотечності наступні програми:
    • glibc (так як glibc підтримує запуск як 32-х так і 64-х розрядних програм), а також
    • gcc (так як він може скомпілювати як 32-х так і 64-х розрядні програми).
  2. Після цього треба взяти системні бібліотеки з 32-х розрядної Slackware та скопіювати до 64-х розрядної, для створення 32-х розрядного програмного шару.
Slackware для архітектури x86_64 (чи скорочено “Slackware64”) це чиста 64-х розрядна операційна система, але вона дуже просто може бути перетворена на варіант з мультибібліотечністю. З коробки Slackware64 може виконувати та збирати тільки 32-х розрядне програмне забезпечення.

Коли вийшов Skackware64, він мав перевагу над 64-розрядними “форками” які були на той час доступні. Ці форки додавали 32-розрядний шар завдяки повній перекомпіляції великої кількості програмного забезпечення як 32-х розрядного.

Іншими словами, Slackware це дистрибутив який виходить як 32-х так і в 64-х розрядному вигляді, обидва варіанти розробляються паралельно. Це означає, що вам не доведеться знову збирати 32-х розрядні пакунки з нуля, для того щоб додати сумісність у вигляді мультибібліоті до системи з архітектурою 64. Ви просто берете пакунки з 32-х розрядного дистрибутиву Slackware!
Ось чому ми не додаємо відразу мультибібліотечніть до Slackware64 - на томість ми створюємо передумову, завдяки якій у вас є вибір, та і інструкція по тому як зробити мультибібліотечну систему.
В розділі нижче, я покажу як взяти пакунки 32-х розрядної Slackware (назвемо їх “mesa” пакунки) та переупакуємо їх вміст в “mesa-compat32” пакунки, які можна буде встановити напряму в Slackware64.

Переваги мульти-бібліотечної системи

Ось декілька прикладів програмного забезпечення, яке потребує наявності мульти-бібліотечності в системі Slackware з архітектурою 64, тому що воно не може бути запущено чи зібрано без сумісного 32-х розрядного шару:

  • Wine
    Більшість програм для платформи Windows все ще 32-х розрядні, і для того зоб запустити таке ПЗ на Linux, вам необхідна 32-х розрядна версія Wine.
  • VirtualBox
    Популярна програмна віртуальна машина. Так-як ця програма (частково) з відкритим кодом, для неї досі треба 32-х розрядний шар сумісності в системі Slackware 64-х розрядної архітектури.
  • Skype, Citrix клієнт, …
    Ці програми проприєтарні, та їх код закрито. Ми залежні від розробника, який не виробляє 64-х розрядні бінарні файли. В цьому випадку, саме така ситуація.

На радість, 64-розрядні програми набувають все більшої популярності. Adobe довгий час не випускав, але з якоїсь миті, нарешті випустив Flash плагін для 64-х розрядних операційних систем. Sun (поглинутий компанією Oracle) випустили 64-х розрядну версію плагіна Java. Ці дві великі події подали сигнал, що треба розробляти 64-х розрядну версію - Slackware64.

Отримання мульти-бібліотечних пакунків

Ви можете завантажити пакет multilib-enabled та скрипти з мого веб-сайту: http://slackware.com/~alien/multilib/ .

Крім декількох README файлів (ця стаття з Wiki є поліпшеною версією тих README файлів), ви знайдете по одній під-дерикторії на кожен реліз Slackware, відносно кореневої папки “multilib”. Також існує директорія під назвою “source”. В папці “source” знаходяться пакунки з сирцевим кодом та скриптами збірки SlackBuild.
Але набагато цікавіше - бінарні пакунки доступні в під-директорії <slackware_номер_релізу> яка знаходиться під кореневою папкою. Кожна така директорія містить під-директорію “slackware64-compat32” де ви знайдете перезібрані 32-розрядні пакунки, готові для встановлення для 64-х розрядної Slackware.

Для того, щоб бути в курсі оновлень, Я наполягаю на тому, щоб ви слідкували за Змінами (RSS новинами) які я обслуговуваю для моїх мульти-бібліотечних пакунків. За звичай, я поновлюю пакунки glibc та gcc на слідуючий день, після оновлення цих пакунків у Slackware. Ще слідкуйте за compat32pkg інструментом Себастіана Балета, який автоматизує цей процес, він схожий на slackpkg.

Включення підтримки мульти-бібліотечності в Slackware64

Інструкція по швидкому методу

Цей розділ містить основні інструкції щодо додавання повної мультибібліотечної сумісності в систему Slackware64. Якщо ви хочете зрозуміти більш детальніше цей процес, чи вам потрібна інформація по збірці 32-х розрядного ПЗ на Slackware64, вам треба ознайомитись з наступним розділом.
Увага, символ “#” означає що це командний рядок користувача root.

  • Завантажте пакунки з мого веб сайту (я даю посилання в попередньому розділі, але в цьому прикладі я використовую дзеркало). Припустимо що у вас запущена Slackware 14.1. Виконайте команди:
    # SLACKVER=14.1
    # mkdir multilib
    # cd multilib
    # lftp -c "open http://taper.alienbase.nl/mirrors/people/alien/multilib/ ; mirror -c -e ${SLACKVER}"
    # cd ${SLACKVER}
  • Поновіть в 64-х розрядній Slackware такі пакунки gcc“ та ”glibc“ до мульти-бібліотечних версій.
    Виконайте команду:
    # upgradepkg --reinstall --install-new *.t?z

    після того як ви перейшли до директорії в яку завантажили ці пакунки.
    Ця команда встановить допоміжні пакунки під назвою ”compat32-tools“.

  • Якщо ви також завантажили директорію slackware64-compat32 (в моєму прикладі команда ”lftp“ робить це автоматично) ви будете раді пізнати, що необхідні 32-х розрядні пакунки вже перетворенні як треба! Все що від вас потрібно, це виконати команду:
    # upgradepkg --install-new slackware64-compat32/*-compat32/*.t?z

    яка встановить усі необхідні 32-х розрядні пакунки (чи поновить їх, якщо вони вже встановлені зі старою версією набору мульти-бібліотечності). Це все!

  • Якщо ви не знайшли директорію slackware64-compat32 це значить, що в її не завантажили, або дзеркало з пакунками не містить необхідну директорію. В цьому випадку, ви можете самі перетворити 32-х розрядні пакунки для встановлення. Це не важко, та займе декілька хвилин:
  • Найшвидше буде, якщо у вас є локальна копія з оригінальними 32-х розрядними пакунками від Slackware, (в цьому випадку воно має назву локальне дзеркало ). В тих, у кого є офіційний DVD носій, може використати його: він двосторонній, та 32-х розрядна версія Slackware знаходиться на одній із сторін. Для цього прикладу Я очікую, що у вас є локальна копія 32-х розрядної Slackware у директорії ”/home/ftp/pub/slackware/slackware-14.1/slackware/“.
    Де розміщені під-директорії 'a', 'ap', 'd', 'l', 'n' та 'x'. (Якщо у вас змонтовано DVD диск, то директорія може знаходитись тут ”/media/SlackDVD/slackware/“ але цей варіант я тут не використовую).
  • Створіть нову пусту директорію (давайте назвемо її 'slackware64-compat32') та перейдіть до неї:
    # mkdir slackware64-compat32 ; cd slackware64-compat32
    • Запустіть наступну команду, для створення низки 32-х розрядних пакетів, використовуючи офіційні 32-х розрядні пакети Slacwkare на вході команди:
      # massconvert32.sh -i /home/ftp/pub/slackware/slackware-14.1/slackware/
    • Попередній крок, займе деякий час. Коли він завершиться, продовжіть встановленням 90 Мб свіжих перероблених 32-х розрядних пакунків, які були створені у під-директоріях відносно поточної:
      # upgradepkg --install-new *-compat32/*.t?z
    • Готово! Тепер ви можете завантажувати, встановлювати та запускати 32-х розрядні програми. Це було і не також важко?
Якщо ви використовуєте пакетні менеджери, такі як slackpkg, ви повинні додати усі пакети з назвою glibc та gcc до чорного списку цього менеджеру. Якщо ви цього не зробите, ви ризикуєте тим, що цей менеджер може замінити, мульти-бібліотечні пакунки на оригінальні з Slackware64!
Якщо у вас запущено Slackware 13.37 чи вище, в цих версіях slackpkg, є підтримка регулярних виражень у файлі чорного списку. В цьому випадку, однієї стрічки у файлі /etc/slackpkg/blacklist буде достатньо для внесення усіх моїх пакунків до чорного списку (включаючи мульти-бібліотечні пакунки gcc, glibc та усіх compat32):
[0-9]+alien
[0-9]+compat32
Якщо ви працюєте на Slackware 13.1 чи новіше, та ви завантажили пакунок з інструментами compat32-tools для цієї версії Slackware, скрипт massconvert32.sh може використовувати віддалений веб сервер, для завантаження 32-х розрядних пакунків Slackware, замість завантаження їх до локального дзеркала чи з DVD. Вкажіть параметр ”-u“ як адресу URL віддаленого сервера:
# massconvert32.sh -u http://someserver.org/path/to/slackware-14.1/slackware

Детальніша інструкція

Оновлення glibc та gcc

Наступні пакунки glibc/gcc замінять - не додадуть - стандартні пакунки Slackware. Використайте команду ”upgradepkg“ для оновлення до моїх мільти-бібліотечних версій gcc та glibc. Вони потрібні для запуску (glibc), та збірки (gcc) 32-х розрядного програмного забезпечення на 64-х розрядному комп'ютері зі Slackware:

Slackware64 13.0

  • Набір компілятора gcc:
    • gcc-4.3.3_multilib-x86_64-4alien.txz
    • gcc-g++-4.3.3_multilib-x86_64-4alien.txz
    • gcc-gfortran-4.3.3_multilib-x86_64-4alien.txz
    • gcc-gnat-4.3.3_multilib-x86_64-4alien.txz
    • gcc-java-4.3.3_multilib-x86_64-4alien.txz
    • gcc-objc-4.3.3_multilib-x86_64-4alien.txz
  • Бібліотеки GNU libc:
    • glibc-2.9_multilib-x86_64-3alien.txz
    • glibc-i18n-2.9_multilib-x86_64-3alien.txz
    • glibc-profile-2.9_multilib-x86_64-3alien.txz
    • glibc-solibs-2.9_multilib-x86_64-3alien.txz
    • glibc-zoneinfo-2.9_multilib-noarch-3alien.txz

Slackware64 13.1

  • Набір компілятора gcc:
    • gcc-4.4.4_multilib-x86_64-1alien.txz
    • gcc-g++-4.4.4_multilib-x86_64-1alien.txz
    • gcc-gfortran-4.4.4_multilib-x86_64-1alien.txz
    • gcc-gnat-4.4.4_multilib-x86_64-1alien.txz
    • gcc-java-4.4.4_multilib-x86_64-1alien.txz
    • gcc-objc-4.4.4_multilib-x86_64-1alien.txz
  • Бібліотеки GNU libc:
    • glibc-2.11.1_multilib-x86_64-3alien.txz
    • glibc-i18n-2.11.1_multilib-x86_64-3alien.txz
    • glibc-profile-2.11.1_multilib-x86_64-3alien.txz
    • glibc-solibs-2.11.1_multilib-x86_64-3alien.txz
    • glibc-zoneinfo-2.11.1_multilib-noarch-3alien.txz

Slackware64 13.37

  • Набір компілятора gcc:
    • gcc-4.5.2_multilib-x86_64-2alien.txz
    • gcc-g++-4.5.2_multilib-x86_64-2alien.txz
    • gcc-gfortran-4.5.2_multilib-x86_64-2alien.txz
    • gcc-gnat-4.5.2_multilib-x86_64-2alien.txz
    • gcc-java-4.5.2_multilib-x86_64-2alien.txz
    • gcc-objc-4.5.2_multilib-x86_64-2alien.txz
  • Бібліотеки GNU libc:
    • glibc-2.13_multilib-x86_64-7alien.txz
    • glibc-i18n-2.13_multilib-x86_64-7alien.txz
    • glibc-profile-2.13_multilib-x86_64-7alien.txz
    • glibc-solibs-2.13_multilib-x86_64-7alien.txz
    • glibc-zoneinfo-2013d_multilib-noarch-7alien.txz

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-8alien.txz
    • glibc-i18n-2.15_multilib-x86_64-8alien.txz
    • glibc-profile-2.15_multilib-x86_64-8alien.txz
    • glibc-solibs-2.15_multilib-x86_64-8alien.txz
    • glibc-zoneinfo-2013d_2013d_multilib-noarch-8alien.txz

Slackware64 14.1

  • Набір компілятора gcc:
    • gcc-4.8.2_multilib-x86_64-1alien.txz
    • gcc-g++-4.8.@_multilib-x86_64-1alien.txz
    • gcc-gfortran-4.8.2_multilib-x86_64-1alien.txz
    • gcc-gnat-4.8.2_multilib-x86_64-1alien.txz
    • gcc-go-4.8.2_multilib-x86_64-1alien.txz
    • gcc-java-4.8.2_multilib-x86_64-1alien.txz
    • gcc-objc-4.8.2_multilib-x86_64-1alien.txz
  • Бібліотеки GNU libc:
    • glibc-2.17_multilib-x86_64-7alien.txz
    • glibc-i18n-2.17_multilib-x86_64-7alien.txz
    • glibc-profile-2.17_multilib-x86_64-7alien.txz
    • glibc-solibs-2.17_multilib-x86_64-7alien.txz
    • glibc-zoneinfo-2013d_multilib-noarch-7alien.txz

Slackware64 current

  • Доки ви не бачите окрему директорію з назвою ”current“ ви можете використовувати файли в ній, для стабільних версій Slackware.
  • Набір компілятора gcc:
    • gcc-4.8.3_multilib-x86_64-1alien.txz
    • gcc-g++-4.8.3_multilib-x86_64-1alien.txz
    • gcc-gfortran-4.8.3_multilib-x86_64-1alien.txz
    • gcc-gnat-4.8.3_multilib-x86_64-1alien.txz
    • gcc-go-4.8.3_multilib-x86_64-1alien.txz
    • gcc-java-4.8.3_multilib-x86_64-1alien.txz
    • gcc-objc-4.8.3_multilib-x86_64-1alien.txz
  • Бібліотеки GNU libc:
    • glibc-2.19_multilib-x86_64-1alien.txz
    • glibc-i18n-2.19_multilib-x86_64-1alien.txz
    • glibc-profile-2.19_multilib-x86_64-1alien.txz
    • glibc-solibs-2.19_multilib-x86_64-1alien.txz
    • glibc-zoneinfo-2014b_multilib-noarch-1alien.txz

Ось один додатковий пакунок, який ви встановлюєте програмою “installpkg”:

  • Це “32-х розрядний набір інструментів” (скрипти які вміють створювати 32-х розрядні пакунки)
    • compat32-tools-3.2-noarch-2alien.tgz
Slamd64 має відокремлені версії 64-х та 32-х розрядні мульти-бібліотечні версії пакунків gcc/glibc.
Але, я вірю, в те, що найкраще не розділяти ці пакунки. Я слідую за принципом з Slakcware64 там свій пакунок binutils, який використовує 64-х та 32-розрядний мульти-бібліотечний сумісний шар в одному пакунку.

Додавання 32-х розрядних бібліотек Slackware

Оновлення glibc та gcc яке було описано вище, перемикає режим системи з ”multilib-ready“ на ”multilib-enabled“.
Все що вам треба, це встановити 32-х розрядні версії програмного забезпечення для Slackware , щоб в майбутньому ці 32-х розрядні програми знаходили 32-х розрядні бібліотеки які їм потрібні для запуску та роботи.

Цей процес не просто, встановлювання 32-х розрядного ПЗ в Slackware64:

  • По перше, в цьому випадку, з’явиться пакунки з однаковим ім’ям (два пакунка 'mesa', 'zlib' та інші…) це буде вводити в оману користувача, та пакетні менеджери як наприклад slackpkg.
  • А ще, якщо 32-х розрядний пакунок містить бінарні файли (наприклад /usr/bin/foo), вони перезапишуть 64-х розрядні оригінали, коли ви будете встановлювати 32-х розрядний пакунок поверх існуючого 64-х розрядного. Це буде дуже фатально, якщо таке трапиться.

Тут треба бути уважнішим, щоб не трапилась плутанина з файлами та їх розрядністю під час встановлення 32-х розрядних пакунків. Але вам треба 32-х розрядний пакунок, який не конфліктує з вже встановленим 64-х розрядним в системі. Його назва “32-х розрядний сумісний пакунок”.

Я вирішив, буде марно витрачено трафік, якщо я створю сумісні 32-х розрядні пакунки для Slackware. Та і велика вірогідність що ви придбали диск з Slackware 14.1 DVD, і у вас вже є обидві 64-х та 32-х розрядні версії цієї системи… чи є доступ до дерева пакунків Slackware яке доступно для безкоштовного завантаження ;-)

Напроти, я написав скрипт (частина нього написана Фредом Емотом для Slamd64) та включено до пакунка ”compat32-tools“. Цей скрипт запропонує, розпакувати вміст 32-х розрядного пакунку, та створення з нього нового пакунка, який можна буде встановлювати на 64-х розрядну Slackware.

Пакунок ”compat32-tools“ вимагає деякого розуміння.
Тому протчіть файл 'README' в директорії /usr/doc/compat32-tools-*/, це допоможе розібратись що до чого. В ньому є низька корисних скриптів, які встановлюються в систему:

  • /etc/profile.d/32dev.sh
    Це той ж самий скрипт який йде з Slamd64. Він переналаштовує оточення оболонки, для того щоб було зручно збирати 32-х розрядне програмне забезпечення (перемикаючи пріоритет на 32-х розрядний компілятор та бібліотеки в 64-х розрядній Slacwkare)
  • convertpkg-compat32
    Цей скрипт бере 32-х розрядний пакунок та конвертує його в пакунок '-compat32', який потім можна встановити (використовуючи “installpkg”) в Slackware64, біля 64-х розрядної версії того ж самого пакунка. Наприклад. припустимо що вам потрібні 32-х розрядні бібліотеки які містяться у пакунку mesa. Ви берете пакунок mesa з 32-х розрядної Slackware (x/mesa-7.5-i486-1.txz) та виконуєте команду
    # convertpkg-compat32 -i /path/to/mesa-7.5-i486-1.txz

    яка створить новий пакунок під назвою mesa-compat32-7.5-x86_64-1.txz. Новий пакунок (який було створено у директорії '/tmp' у випадку якщо ви не вказали іншу директорію для зберігання) це старий 32-х розрядний пакунок, але з нього вилучено не потрібні частини. Змінено ім’я (mesa стало mesa-compat32) що дозволяє встановити цей пакунок в Slackware64 де вже є 64-х розрядна mesa не перезаписав вже встановлений пакунок.
    Скрипт залишає тимчасові файли у директорії ”/tmp/package-<prgnam>-compat32“ які можна безпечно видалити.

  • massconvert32.sh
    В цьому скрипті знаходиться список 32-х розрядних пакунків, які я вважаю необхідні. Він використовує скрипт ”convertpkg-compat32“ для стягування кожного пакунка із з списку, та їх конвертація в пакунки '-compat32'.
    Цей скрипт треба запускати лише один раз, на приклад (в цьому прикладі вважається, що 32-х розрядна Slackware на DVD змонтована в /mnt/dvd):
    # massconvert32.sh -i /mnt/dvd/slackware -d ~/compat32

    Після цього, у вас з’явиться пакунки близько 60Мб в новій директорії ~/compat32 (ім’я цієї директорії можна налаштовувати, я вибрав таке ім’я лише для прикладу). Ці пакунки включають 32-х розрядні компоненти для мульти-бібліотечної Slackware64.
    Їх треба встновити використовуючи ”installpkg“, зо надасть шар сумісності, поверх Slackware64:

    # installpkg ~/compat32/*/*.t?z

    Якщо ви виконуєте оновлення з попередньої версії цих пакунків (на приклад ви оновлюєте 64-х розрядну Slackware до нової версії) це означає, що використовувати ”installpkg“ не можна, а замість цієї команди, треба виконати ”upgradepkg –install-new“: code>

# upgradepkg –install-new ~/compat32/*/*.t?z </code> параметр ”–install-new“ необхідний для, того щоб додати нові пакунки compat32 які були додані між версіями.

Коли встановлюються пакунки compat32, можна побачити помилки про відсутні файли в /etc. Це “так заплановано”, ці помилки можна проігнорувати. Ці повідомлення, говорять нам про той факт, що файли в /etc були видалені з пакунків ”-compat32“ в процесі конвертації (окрім pango та gtk+2). Мається на увазі, що файли в /etc, вже встановлені від оригінальних 64-х розрядних пакунків.
Приклад цієї “помилки” в пакунку cups-compat32:
Executing install script for cups-compat32-1.3.11-x86_64-1.txz.
install/doinst.sh: line 5: [: too many arguments
cat: etc/cups/interfaces: Is a directory
cat: etc/cups/ppd: Is a directory
cat: etc/cups/ssl: Is a directory
cat: etc/cups/*.new: No such file or directory
cat: etc/dbus-1/system.d/cups.conf.new: No such file or directory
chmod: cannot access `etc/rc.d/rc.cups.new': No such file or directory
cat: etc/rc.d/rc.cups.new: No such file or directory
Package cups-compat32-1.3.11-x86_64-1.txz installed.
Якщо ви плануєте використати скрипт convertpkg-compat32 для конвертації не-Slackware пакунка в -compat32, Я повинен вас попередити. Цей інструмент було створено лише для однієї задачі, це створення з 32-х розрядних пакунків в набір мільти-бібліотечності для Slackware64. Та такі дії як, вилучення деяких компонентів з оригінальних 32-х розрядних пакунків - компоненти які були встановлені як частина оригінальних 64-х розрядних пакунків.
В багатьох випадках, коли ви завантажуєте не-Slackware 32-х розрядний пакунок, та хочете щоб він запрацював на Slackware64, найліпше буде знайти сирцевий код цієї програми, та зібрати 64-х розрядну версію цього пакунка. Альтернативно, ви можете просто встановити оригінальній 32-х розрядний пакунок, замість “його конвертації”, та спробувати його запустити з командного рядка, щоб побачити помилки про відсутні 32х розрядні бібліотеки, які потрібно дістати з офіційних пакунків Slackware.

Запуск 32-х розрядних програм

Запуск вже зібраної 32-х розрядної програми, стане можливим, як тільки ви закінчите підготовку системи як показано вище. Залишиться тільки завантажити, встановити та запустити її!

Інколи, буде траплятись, що ви запустите програму яка потребує конкретні 32-х розрядні бібліотеки, яких у вас немає. В цьому випадку, знайдіть ці бібліотеки в 32-х розрядних пакунках Slackware. Використайте скрипт ”convertpkg-compat32“ для конвертації знайденого 32-х розрядного пакунку з необхідними бібліотеками у ”сумісний“ пакунок який можна буде встановити в Slackware64.

Компіляція 32-х розрядних програм

В тому випадку, якщо вам необхідно скомпілювати 32-х розрядне програмне забезпечення (wine та grub це яскраві приклади програм, які існують тільки в 32-х розрядному вигляді) знадобиться налаштувати оточення оболонки користувача root, запустивши команду:

# . /etc/profile.d/32dev.sh

Звернуть увагу на “крапку” в початку - це актуальна частина команди! Використання крапки еквівалентно використання команди 'source'.
Виконання цієї команди змінює декілька змінних оточення. Ефект від цього, це зміна пріоритету, 32-х розрядних версій бінарних файлів над 64-х розрядними, на час компіляції 32-х розрядного ПЗ з сирцевого коду. Ефект буде працювати доки ви не вийдете з оболонки користувача root.

В цій модифікованої оболонці, змінних оточення, ви можете використовувати стандартні SlackBuild для створення 32-х розрядних пакунків для Slackware64. Є декілька речей які треба пам’ятати:

  1. Ви повинні встановити значення змінної ARCH в 'i486', тому що, навіть на комп’ютері з архітектурою 'x86_64', ви збираєте 32-х розрядне ПЗ!
    Це пов’язано з triplet змінною “$ARCH-slackware-linux” який за звичай використовується в команді “configure”.
  2. Як виняток, ви повинні компілювати пакунок “wine” з змінною 'ARCH=x86_64', так як цей пакунок буде встановлюватись напряму в мульти-бібліотечну систему, без переконвертації в сумісний 'compat32' пакунок.
  3. Якщо ви хочете встановити цей 32-х розрядний пакунок в систему Slackware64-multilib, ви повинні спочатку конвертувати його в сумісний пакунок 'compat32':
    # convertpkg-compat32 -i /path/to/your/fresh/foo-VERSION-i486-BUILD.tgz
    # upgradepkg --install-new /tmp/foo-compat32-VERSION-x86_64-BUILDcompat32.txz

Caveats

  • After installing the ”-compat32“ packages, you may have to re-install your binary Nvidia or Ati video X.Org drivers. These driver packages contain both 64bit and 32bit libraries to be maximally useful on a 64bit multilib OS. If you installed the driver files for both architectures, the ”mesa-compat32“ package will overwrite some of the 32bit library files.

    On the other hand, if you originally only installed the 64bit driver libraries for your Nvidia/Ati card, it is recommended after installation of the multilib packages, to re-install the binary driver package. This time, choose to install the 32bit driver files as well.

    The graphical 32bit applications that you are going to run on your multilib installation will require these 32bit driver libraries. Crashes are likely to occur if you fail to install the correct files.
  • If you want to compile your 64bit kernel yourself, be sure to compile 32bit emulation capability into it or else multilib will mysteriously fail. You will need this piece of kernel configuration: CONFIG_IA32_EMULATION

Packages converted by massconvert32.sh

This is the list of packages that is converted into ”-compat32“ versions by the massconvert32.sh script. Note that some of these packages are not part of Slackware 13.0 or 13.1, they were added in a later Slackware version so they will produce a ”* FAIL: package 'package_name' was not found!“ message when you run the script on an older release. The other way round is true as well - some packages have been removed in later versions of Slackware and they will also trigger the ”* FAIL: package 'package_name' was not found!“ message. Don't worry about that.

# The A/ series:
 
aaa_elflibs
attr
bzip2
cups
cxxlibs
dbus
e2fsprogs
openssl-solibs
udev
util-linux
 
# The AP/ series:
 
flac
mariadb
mpg123
mysql
sqlite
 
# The D/ series:
 
libtool
 
# The L/ series:
 
alsa-lib
alsa-oss
atk
audiofile
cairo
dbus-glib
esound
expat
freetype
fribidi
gamin
gdk-pixbuf2
giflib
glib2
gmp
gnome-keyring
gtk+2
gst-plugins-base
gst-plugins-good
gstreamer
hal
harfbuzz
icu4c
jasper
lcms
lcms2
libart_lgpl
libelf
libexif
libffi
libglade
libgphoto2
libidn
libieee1284
libjpeg
libmng
libmpc
libogg
libpcap
libpng
libsamplerate
libsndfile
libtasn1
libtermcap
libtiff
libusb
libvorbis
libxml2
libxslt
ncurses
pango
popt
qt
readline
sdl
seamonkey-solibs
startup-notification
svgalib
v4l-utils
zlib
 
# The N/ series:
 
curl
cyrus-sasl
gnutls
libgcrypt
libgpg-error
nettle
openldap-client
openssl
p11-kit
 
# The X/ series:
 
fontconfig
freeglut
glew
glu
libFS
libICE
libSM
libX11
libXScrnSaver
libXTrap
libXau
libXaw
libXcomposite
libXcursor
libXdamage
libXdmcp
libXevie
libXext
libXfixes
libXfont
libXfontcache
libXft
libXi
libXinerama
libXmu
libXp
libXpm
libXprintUtil
libXrandr
libXrender
libXres
libXt
libXtst
libXv
libXvMC
libXxf86dga
libXxf86misc
libXxf86vm
libdmx
libdrm
libfontenc
libpciaccess
libxcb
mesa
pixman
xcb-util
 
# The XAP/ series:
 
sane
xsane

Multilib download mirrors

3rd party support tools

  • Sėbastien Ballet has written a tool called compat32pkg. On his web site he has compat32pkg available for download as well as extensive documentation about how to use it on Slackware64.
    I will quote the site:
    “Compat32pkg is an automated tool that provides all the necessary for managing (converting, installing, upgrading, removing) the 32-bit part of AlienBob's multilib for slackware-64, and all 32-bit packages from Slackware-32 for which users could find a needs into a 64-bit environment, like firefox, seamonkey, jre,…”
  • There is also slackpkg+, written by Matteo Rossini (nicknamed zerouno) with contributions from (among others) Sėbastien Ballet. This is a plugin for Slackware's own slackpkg which adds the capability for installing packages from external (3rd-party) unofficial Slackware repositories. It has good support for adding multilib to your 64-bit Slackware and keeping it up to date.

Translations

Acknowledgements

  • A lot of thanks should go to Fred Emmott, who created Slamd64, the original unofficial 64-bit fork of Slackware. Although Slackware64 was not based on Fred's work, I still learnt most of what I know about setting up the 32-bit part of a multilib Linux from his writings that are found in Slamd64.
  • Cross Linux From Scratch.
    The CLFS Wiki (http://trac.cross-lfs.org/wiki/read#ReadtheCrossLinuxFromScratchBookOnline) is a 'must-read' if you want to understand how to port Linux to a new architecture. I took several ideas, concepts and patches from them when creating Slackware64 from scratch, and again when I created my multilib gcc/glibc packages from scratch (my README on this multilib-from-scratch is available in the ./source directory).

Have fun!

Eric

Sources

 uk:slackware:multilib ()
Цей переклад старіший ніж оригінальна сторінка і може бути не актуальним. Дивіться що було змінено.
Переклад цієї сторінки?: