2021-04-30 22:04:04 +08:00
< package-info :package = "package" showsbu > < / package-info >
< script >
new Vue({
el: '#main',
2021-05-02 22:00:17 +08:00
data: { package: {}, patch: {} },
2021-04-30 22:04:04 +08:00
mounted: function () {
2021-05-02 22:00:17 +08:00
this.getPackage();
this.getPatch();
2021-04-30 22:04:04 +08:00
},
methods: {
2021-05-02 22:00:17 +08:00
getPackage: function() {
getPackage('glibc')
2021-04-30 22:04:04 +08:00
.then(response => this.package = response);
},
2021-05-02 22:00:17 +08:00
getPatch: function() {
getPackage('glibc-patch')
.then(response => this.patch = response);
},
2021-04-30 22:04:04 +08:00
}
})
< / script >
## Дополнительные необходимые файлы
2021-05-02 22:00:17 +08:00
< a :href = "patch.url" >
{{ patch.url }}
< / a >
2021-04-30 22:04:04 +08:00
2021-05-05 18:58:00 +08:00
## Настройка
2021-04-30 22:04:04 +08:00
2021-05-05 18:58:00 +08:00
Необходимо создать две символические ссылки:
2021-04-30 22:04:04 +08:00
```bash
ln -sfv ../lib/ld-linux-x86-64.so.2 $LIN/lib64
ln -sfv ../lib/ld-linux-x86-64.so.2 $LIN/lib64/ld-lsb-x86-64.so.3
```
Первая ссылка используется GCC, вторую требует LSB.
2021-05-07 04:24:20 +08:00
В пакете {{package.name}} по умолчанию используется несоответствующая стандаруту FHS директория `/var/db` . Для исправления этого примените патч:
2021-04-30 22:04:04 +08:00
```bash
patch -Np1 -i ../glibc-2.33-fhs-1.patch
```
2021-05-07 04:38:25 +08:00
В документации пакета {{package.name}} требуется использовать отдельную директорию для сборки:
2021-04-30 22:04:04 +08:00
```bash
mkdir build
2021-06-28 12:21:07 +08:00
cd build
2021-04-30 22:04:04 +08:00
```
2021-06-26 20:02:42 +08:00
Далее запустите скрипт `configure` :
2021-04-30 22:04:04 +08:00
```bash
2021-06-28 12:21:07 +08:00
../configure \
2021-04-30 22:04:04 +08:00
--prefix=/usr \
--host=$LIN_TGT \
--build=$(../scripts/config.guess) \
--enable-kernel=3.2 \
--with-headers=$LIN/usr/include \
--libdir=/usr/lib \
--libexecdir=/usr/lib \
2021-06-28 12:21:07 +08:00
libc_cv_slibdir=/lib \
libc_cv_include_x86_isa_level=no \
--disable-nscd \
2021-04-30 22:04:04 +08:00
--disable-timezone-tools
```
2021-06-26 20:02:42 +08:00
2021-05-07 20:18:03 +08:00
### Для multilib
2021-04-30 22:04:04 +08:00
2021-05-05 18:58:00 +08:00
Добавьте параметр `--enable-multi-arch`
2021-04-30 22:04:04 +08:00
2021-06-10 21:28:16 +08:00
### Значения параметров
2021-04-30 22:04:04 +08:00
2021-06-26 20:02:42 +08:00
`--host=$LIN_TGT, --build=$(../scripts/config.guess)` - необходимо для кросс-компиляции.
2021-05-07 04:30:04 +08:00
`--enable-kernel=3.2` - оптимизирует glibc для использования с ядрами новее 3.2.
2021-04-30 22:04:04 +08:00
`--with-headers=$LIN/usr/include` - задает путь к заголовкам ядра.
`libc_cv_include_x86_isa_level=no` - исключает возможную ошибку.
2021-06-26 20:02:42 +08:00
` --disable-nscd, --disable-timezone-tools` - демон nscd и инструменты для управления часовыми поясами не нужны для временной glibc.
2021-04-30 22:04:04 +08:00
2021-05-05 18:58:00 +08:00
## Сборка
2021-06-26 20:02:42 +08:00
2021-04-30 22:04:04 +08:00
```bash
make
```
## Установка
```bash
make DESTDIR=$LIN install
```
2021-06-10 21:28:16 +08:00
Завершите установку файла `limits.h` , запустив скрипт из состава GCC:
2021-04-30 22:04:04 +08:00
```bash
$LIN/tools/libexec/gcc/$LIN_TGT/11.1.0/install-tools/mkheaders
```
## Тестирование
2021-06-28 12:21:07 +08:00
!> Н а данном этапе необходимо убедиться, что установленные ранее пакеты работают правильно. Внимательно изучите результаты вывода команд, и проверьте, что они строго соответствуют результатам вывода, приведенным ниже. Если есть несоответствия, значит инструкции на предыдущих этапах были выполнены некорректно.
2021-05-05 18:58:00 +08:00
2021-06-27 14:16:54 +08:00
### Чтобы проверить правильность работы кросс-компилятора и libc, выполните:
2021-04-30 22:04:04 +08:00
```bash
echo 'int main(){}' > dummy.c
$LIN_TGT-gcc dummy.c
readelf -l a.out | grep '/ld-linux'
```
2021-05-05 18:58:00 +08:00
#### Вывод должен быть таким:
2021-04-30 22:04:04 +08:00
```
[Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
```
2021-05-14 21:11:15 +08:00
#### Если все хорошо, удалите ненужные файлы:
2021-04-30 22:04:04 +08:00
```bash
rm -v dummy.c a.out
```
2021-05-07 20:18:03 +08:00
## Для multilib
2021-04-30 22:04:04 +08:00
Для MultiLib требуется установить 32-битную версию glibc.
2021-05-05 18:58:00 +08:00
Для этого, удалите оставшиеся файлы от 64-битной сборки glibc:
### Настройка
2021-04-30 22:04:04 +08:00
```bash
2021-05-03 00:35:46 +08:00
rm -rf ./*
2021-04-30 22:04:04 +08:00
find .. -name "*.a" -delete
```
Далее запустите скрипт `configure` :
```bash
2021-06-28 12:21:07 +08:00
CC="$LIN_TGT-gcc -m32" \
CXX="$LIN_TGT-g++ -m32" \
2021-05-03 00:58:15 +08:00
../configure \
2021-04-30 22:04:04 +08:00
--prefix=/usr \
--host=$LIN_TGT32 \
--build=$(../scripts/config.guess) \
--enable-kernel=3.2 \
--with-headers=$LIN/usr/include \
--enable-multi-arch \
--libdir=/usr/lib32 \
--libexecdir=/usr/lib32 \
2021-06-28 12:21:07 +08:00
libc_cv_slibdir=/lib32 \
libc_cv_include_x86_isa_level=no \
--disable-nscd \
2021-04-30 22:04:04 +08:00
--disable-timezone-tools
```
2021-05-05 18:58:00 +08:00
### Сборка
2021-04-30 22:04:04 +08:00
```bash
make
```
2021-05-05 18:58:00 +08:00
### Установка
2021-04-30 22:04:04 +08:00
Установите 32-битные библиотеки из этого пакета:
```bash
make DESTDIR=$PWD/DESTDIR install
2021-05-03 01:25:52 +08:00
cp -a DESTDIR/lib32/* $LIN/lib32/
cp -a DESTDIR/usr/lib32 $LIN/usr/
2021-04-30 22:04:04 +08:00
install -vm644 DESTDIR/usr/include/gnu/{lib-names,stubs}-32.h \
2021-05-03 01:25:52 +08:00
$LIN/usr/include/gnu/
ln -svf ../lib32/ld-linux.so.2 $LIN/lib/ld-linux.so.2
2021-04-30 22:04:04 +08:00
```
2021-05-05 18:58:00 +08:00
### Проверка работоспособности
2021-06-27 14:16:54 +08:00
Чтобы проверить работоспособность 32-битной glibc, выполните:
2021-04-30 22:04:04 +08:00
```bash
echo 'int main(){}' > dummy.c
$LIN_TGT-gcc -m32 dummy.c
readelf -l a.out | grep '/ld-linux'
```
2021-06-27 14:16:54 +08:00
Вывод должен быть таким:
2021-04-30 22:04:04 +08:00
```
[Requesting program interpreter: /lib/ld-linux.so.2]
```
2021-06-27 14:16:54 +08:00
Если всё хорошо, удалите ненужные файлы:
2021-04-30 22:04:04 +08:00
```bash
rm -v dummy.c a.out
```