Установка пакета glibc

Система збирання пакету Glibc є самодостатньою і пакет буде прекрасно встановлений навіть в разі, якщо файл специфікацій компілятора і компонувальник і раніше вказують на директорій / tools. Специфікації і компонувальник не слід міняти до установки пакета Glibc, оскільки не пройдуть тести Glibc autoconf і в результаті не вдасться отримати чисту збірку пакета.

Коли запускається команда make install. скрипт, який називається test-installation.pl. виконає невеличкий тест перевірки чистоти установки для нашої щойно встановленої бібліотеки Glibc. Однак, оскільки наш набір інструментальних засобів як і раніше вказує на директорій test-installation.pl. цей тест буде виконуватися над не тієї бібліотекою Glibc. Ми можемо змусити скрипт перевіряти бібліотеку Glibc, яку ми тільки що встановили, наступним чином:

DL = $ (readelf -l / bin / sh | sed -n 's @. * Interpret. * / Tools \ (. * \)] $ @ \ 1 @ p') sed -i "s | libs -o | libs -L / usr / lib -Wl, -dynamic-linker = $ DL -o | " \ Scripts / test-installation.plunset DL

Крім того, в скрипті test-installation.pl є помилка, в результаті якої робиться спроба скомпонувати тестову програму з бібліотекою, яка не встановлена ​​за допомогою команди make install. Виконайте наступну команду sed для того, щоб це виправити:

sed -i -e 's / "db1" / \\ $ Name ne "nss_test1" / 'scripts / test-installation.pl

В скрипті ldd. исполняемом в командній оболонці, використовується синтаксис, специфічний для Bash. У разі, якщо встановлено інший інтерпретатор, наприклад, / bin / sh. змініть програму інтерпретатора, який використовується за умовчанням, на / bin / bash так, як це написано в розділі Shells (Командні оболонки) в книзі BLFS:

sed -i 's | @ BASH @ | / bin / bash |' elf / ldd.bash.in

Виправте помилку, яка не дозволяється робити збірку пакета Glibc за допомогою компілятора GCC-4.5.2:

patch -Np1 -i. /glibc-2.13-gcc_fix-1.patch

Виправте помилку розбалансування стека, яка виникає при деяких обставинах:

sed -i '195,213 s / PRIVATE_FUTEX / FUTEX_CLOCK_REALTIME /' \ nptl / sysdeps / unix / sysv / linux / x86_64 / pthread_rwlock_timedlock.S

Документація по Glibc рекомендує збирати пакет Glibc в окремому директорії, призначеному для збірки, а не в директорії з вихідними кодами:

mkdir -v. / Glibc-buildcd. / Glibc-build

Як і в розділі 5, для машин з архітектурою x86 додайте в змінну CFLAGS прапори, необхідні для компілятора. Тут також може використовувати компілятор gcc вказуються режими оптимізації бібліотеки, що підвищують швидкість компіляції (-pipe) і збільшують продуктивність пакета (-O3).

Підготуйте пакет Glibc для компіляції:

/glibc-2.13/configure --prefix = / usr \ --disable-profile --enable-add-ons \ --enable-kernel = 2.6.22.5 --libexecdir = / usr / lib / glibc

Пояснення нових конфігураційних параметрів:

Важливо У цьому розділі виконання набору тестів для Glibc вважається важливим. Чи не пропускайте його ні за яких обставин.

Перед запуском тестів, скопіюйте файл з дерева вихідних кодів в дерево нашої збірки з тим, щоб запобігти ряд невдалих запусків тестів, потім перевірте результати:

cp -v. /glibc-2.13/iconvdata/gconv-modules iconvdatamake -k check 2> 1 | tee glibc-check-loggrep Error glibc-check-log

Ви, ймовірно, побачите очікуваний (ігнорований) відмова тесту posix / annexc. Крім того, тестовий набір для Glibc в деякій мірі залежить від хост системи. Нижче наведено список найбільш часто зустрічаються питань:

  • Іноді тести nptl / tst-clock2. nptl / tst-attr3 і rt / tst-cpuclock2 не проходять. Причина не зовсім зрозуміла, але є ознаки того, що проблеми з тестами можуть бути викликані малим часом виконання.
  • Математичні тести іноді також не проходять, коли вони виконуються в системах, де процесор не є порівняно новим фірмовим Intel або відповідним справжнім процесором AMD.
  • Якщо ви змонтували розділ LFS з параметром noatime. тест atime проходити не буде. Як уже згадувалося в розділі 2.4 "Монтування нового розділу", не використовуйте параметр noatime. коли збираєте систему LFS.
  • Будучи запущеними на старому або й повільному обладнанні або в системі, яка знаходиться під навантаженням, деякі тести можуть не проходити через те, що перевищені таймаут. Змініть команду make check і встановіть таке значення для TIMEOUTFACTOR, яке допоможе усунути ці помилки (наприклад, TIMEOUTFACTOR = 16 make -k check).

На стадії установки пакет Glibc буде скаржитися на відсутність файлу /etc/ld.so.conf. Це повідомлення нешкідливе; запобігти його появі можна наступним чином:

Зазначена вище команда не встановлює локалі, через які відповіді системи можуть видаватися на іншій мові. Жодна з локалей не потрібно, але якщо деякі з них відсутній, в наборах тестів пакетів, які будуть встановлюватися в майбутньому, деякі тестові випадки можуть бути пропущені.

Окремі локалі можна встановити за допомогою програми localedef. Наприклад, перша команда localedef. наведена нижче, об'єднує визначення локалі для незалежного набору даних / usr / share / i18n / locales / cs_CZ з визначенням таблиці відображення символів /usr/share/i18n/charmaps/UTF-8.gz і додає результат в файл / usr / lib / locale / locale-archive. Наступні інструкції встановлять мінімальний набір локалей, необхідних для виконання оптимального набору тестів:

mkdir -pv / usr / lib / localelocaledef -i cs_CZ -f UTF-8 cs_CZ.UTF-8localedef -i de_DE -f ISO-8859-1 de_DElocaledef -i de_DE @ euro -f ISO-8859-15 de_DE @ eurolocaledef -i de_DE -f UTF-8 de_DE.UTF-8localedef -i en_HK -f ISO-8859-1 en_HKlocaledef -i en_PH -f ISO-8859-1 en_PHlocaledef -i en_US -f ISO-8859-1 en_USlocaledef -i en_US -f UTF -8 en_US.UTF-8localedef -i es_MX -f ISO-8859-1 es_MXlocaledef -i fa_IR -f UTF-8 fa_IRlocaledef -i fr_FR -f ISO-8859-1 fr_FRlocaledef -i fr_FR @ euro -f ISO-8859-15 fr_FR @ eurolocaledef -i fr_FR -f UTF-8 fr_FR.UTF-8localedef -i it_IT -f ISO-8859-1 it_ITlocaledef -i ja_JP -f EUC-JP ja_JPlocaledef -i tr_TR -f UTF-8 tr_TR.UTF-8localedef - i zh_CN -f GB18030 zh_CN.GB18030

Додатково задайте локаль для своєї країни, мови і набору символів.

Або відразу встановіть все локалі, перераховані у файлі glibc-2.13 / localedata / SUPPORTED (в ньому знаходяться всі локалі, перераховані вище, і багато інших), за допомогою однієї наступної локалі:

Потім за допомогою команди localedef створіть і встановіть локалі, які не вказані в файлі glibc-2.13 / localedata / SUPPORTED. в тому малоймовірному випадку, коли такі вам будуть потрібні.

Схожі статті