# HOWTO - Szybsza kompilacja glibc

## nelchael

Wstep

Mam pewien komputer: P1MMX - 166MHz, 32 MB RAM - powaznym problemem jest nie tyle co kompilacja glibc (to zalatwia distcc) co jego instalacj: a dokladniej instalowanie locales.

Cala kompilacja odbywa sie z -j4 (4  procesy make'a), distcc ladnie rozprasza kompilacje pomiedzy hosty w sieci, jak do tej pory wszystko ok. Po kompilacji przychodzi pora na zainstalowanie glibc w katalogu /var/tmp/portage/..../image/ - instalowane sa biblioteki, naglowki i ... budowane sa locales (pliki zawierajace ustawienia dla LC_* i LANG). Kazdy proces budowania zajmuje okolo 50 MB RAM, co przy czterech procesach daje w porywach 200 MB RAM (!!). Policzmy: 200 MB - 32 MB (RAM) = 168 MB zajetego swap  :Sad:  Ciagle korzystanie ze swap powoduje straszne wydluzenie calego procesu (zajmuje to okolo 48 godzin  :Shocked: ).

Jest mozliwosc pominiecia instalacji niechcianych locales. Jak? Po pierwsze: nie korzystamy z 'emerge', tylko z 'ebuild' - troszke trudniej, ale nie musimy modyfikowac ebuild'a. Oto dokladne instrukcje:

Update

Sprawę można rozwiązać łatwiej: dodając userlocales do /etc/make.conf do USE. Należy wtedy wpisać jakie locale mają być budowane do /etc/locales.build. Czyli:

```
nelchael@nelchael ~$ cat /etc/locales.build 

en_GB/ISO-8859-1

en_GB.UTF-8/UTF-8

en_US/ISO-8859-1

en_US.UTF-8/UTF-8

pl_PL/ISO-8859-2

pl_PL.UTF-8/UTF-8

nelchael@nelchael ~$
```

Teraz wystarczy 

```
emerge -auv glibc
```

 i osiągniemy dokładnie ten sam efekt - bez ingerencji w ebuild'a lub korzystania z ebuild.

1. Wchodzimy do katalogu zawierajacego ebuild glibc:

```
# cd /usr/portage/sys-libs/glibc/
```

2. Rozpakowujemy glibc:

```
# ebuild glibc-2.3.4.20040619-r1.ebuild unpack
```

(oczywiscie zamiast 2.3.4.20040619-r1 wybieramy interesujaca nas wersje)

3. Kompilujemy:

```
# ebuild glibc-2.3.4.20040619-r1.ebuild compile
```

4. Zmiany w glibc:

Wchodzimy do katalogu 'work' glibc:

```
# cd /var/tmp/portage/glibc-2.3.4.20040619-r1/work/glibc-2.3.2/localedata/
```

(oczywiscie wchodzimy do katalogu dla wersji, ktora wlasnie skompilowalismy  :Smile:  )

Interesuje nas plik SUPPORTED - jest to lista obslugiwanych locales przez glibc - nic nie stoi na przeszkodzie pomieszanie w nim troche, a mianowicie usuniemy niepotrzebne locales zostawiajac:

```
# cat SUPPORTED 

SUPPORTED-LOCALES=\

en_GB.UTF-8/UTF-8 \

en_GB/ISO-8859-1 \

en_US.UTF-8/UTF-8 \

en_US/ISO-8859-1 \

pl_PL.UTF-8/UTF-8 \

pl_PL/ISO-8859-2
```

5. Dalsza czesc instalacji:

```
# ebuild glibc-2.3.4.20040619-r1.ebuild install
```

W tym momencie mamy zainstalowany glibc w katalogu /var/tmp/portage/.../image/

Zeby zainstalowac go teraz w systemie wystarczy wydac polecenie:

```
# ebuild glibc-2.3.4.20040619-r1.ebuild qmerge
```

Podsumowanie

Teraz plusy takiego rozwiazania:

 /usr/lib/locale/locale-archive zamiast 37 MB ma 1,6 MB  :Smile: 

 szybsza kompilacja

Wady:

 trudniejsza kompilacja

 instalacje nie jest automatyczna jak przy korzystaniu z emerge

Koncowa uwaga: polecam zapoznac sie ze skryptem localepurge - odchudzi glibc jeszcze bardziej (skrypt ten usuwa zbede pliki lokalizacji z katalogow LC_MESSAGES oraz zbede strony podrecznika)

----------

## Woocash

A gdzie jest/lub gdzie można zdobyć ten skrypt localpruge ?

----------

## nelchael

 *Woocash wrote:*   

> A gdzie jest/lub gdzie można zdobyć ten skrypt localpruge ?

 

 :Smile: 

```

nelchael@nelchael ~$ emerge -pv localepurge

These are the packages that I would merge, in order:

Calculating dependencies ...done!

[ebuild   R   ] app-admin/localepurge-0.2-r1   3 kB 

Total size of downloads: 3 kB

nelchael@nelchael ~$ 

```

----------

## arsen

Można całą sprawe uprościć pisząc ebuilda, który usunie owe locale po funkcji src_unpack.

----------

## nelchael

 *arsen^ wrote:*   

> Można całą sprawe uprościć pisząc ebuilda, który usunie owe locale po funkcji src_unpack.

 

Mozna, tylko, ze bylby to ebuild tylko dla Polakow (kazda nacja musialaby miec wlasnego ebuilda)

----------

## arsen

nie pisze i ebuildzie który miał by być oficjalnie w portage, zrobić ebuilda dla zainteresowanych userów tego forum, tak jak jest tu z innymi ebuildami.

----------

## nelchael

Spakowane ebuildy glibc dla wersji:

glibc-2.3.4.20040605-r1

glibc-2.3.4.20040605

glibc-2.3.4.20040619-r1

glibc-2.3.4.20040619

glibc-2.3.4.20040808

http://fatcat.ftj.agh.edu.pl/~nelchael/glibc/

Modyfikacja w kazdym z nich jest identyczna:

funkcja install_locales():

```

install_locales() {

   unset LANGUAGE LANG LC_ALL

   cd ${WORKDIR}/build

   make PARALLELMFLAGS="${MAKEOPTS}" \

      install_root=${D} localedata/install-locales || die

   keepdir /usr/lib/locale/ru_RU/LC_MESSAGES

}

```

zostaje zamieniona na:

```

install_locales() {

   unset LANGUAGE LANG LC_ALL

   echo -e "SUPPORTED-LOCALES=\\ \nen_GB.UTF-8/UTF-8 \\ \nen_GB/ISO-8859-1 \\ \nen_US.UTF-8/UTF-8 \\ \nen_US/ISO-8859-1 \\ \npl_PL.UTF-8/UTF-8 \\ \npl_PL/ISO-8859-2\n" >> ${WORKDIR}/localedata/SUPPORTED

   cd ${WORKDIR}/build

   make PARALLELMFLAGS="${MAKEOPTS}" \

      install_root=${D} localedata/install-locales || die

   keepdir /usr/lib/locale/ru_RU/LC_MESSAGES

}

```

(dodana jedna linijka)

----------

## marcs

A można też robić prościej  :Wink: 

Jak bootstapujemy lub normalnie emergujemy glibc to po rozpakowaniu zrodel emerge przystępuje do kompilacji. W tym czasie możemy zmodyfikować plik SUPPORTED wg zalecen nelchaela  :Smile: 

Musimy to zrobić w czasie pomiędzy zaczęciem kompilacji a budową locales - jak wiadomo nie ma się co spieszyć   :Wink: 

Pozdrawiam

----------

## nelchael

Mozna i tak  :Smile: 

----------

## nelchael

 *marcs wrote:*   

> A można też robić prościej 
> 
> Jak bootstapujemy lub normalnie emergujemy glibc to po rozpakowaniu zrodel emerge przystępuje do kompilacji. W tym czasie możemy zmodyfikować plik SUPPORTED wg zalecen nelchaela 
> 
> Musimy to zrobić w czasie pomiędzy zaczęciem kompilacji a budową locales - jak wiadomo nie ma się co spieszyć  
> ...

 

Pospiech tez nie jest wskazany: plik SUPPORTED mozna zmodyfikowac dopiero po tym jak portage zaaplikuje latki (inaczej epatch zakonczy sie bledem)

----------

## galimedes

Z góry sorry za wywlekanie posta ale myslę że to może coś wnieść nowgo.

glibc można skompilowac 

```
USE="userlocales" emerge sys-libs/glibc
```

oczywiście zmieniająć 

```
/etc/locales.build
```

i dodając 

```
pl_PL/ISO-8859-2
```

i teraz małe pytane do osób które już z tego kożystają czemu jak dodam 

```
pl_PL/ISO-8859-2

pl_PL/UTF-8
```

to próbuje mi wygenerować 

```
pl_PL/ISO-8859-2pl_PL/UTF-8
```

Pozdro  :Smile: 

----------

## nelchael

Tez to niedawno znalazlem: https://forums.gentoo.org/viewtopic.php?t=234247

----------

## nelchael

 *galimedes wrote:*   

> i teraz małe pytane do osób które już z tego kożystają czemu jak dodam 
> 
> ```
> pl_PL/ISO-8859-2
> 
> ...

 

dodaj zamiast 

```
pl_PL/UTF-8
```

```
pl_PL.UTF-8/UTF-8
```

----------

