# [HOW TO]Stage1+GCC3.4.3+NPTL su Stage3

## paperp

Scopo di questa piccola guida è avere una intera Gentoo da capo a piedi , interamente compilata(nessun pacchetto escluso)in GCC 3.4.3 , non so se servirà a nessuno ma a me sembrava utile per chi , a volte ,si sente intimorito dalla madrelingua dei pc ,o semplicemente gli fa fatica.

Io l'ho testata con soddisfazione su architettura PIII e AMD Athlon , se dovesse essere una ripetizione la cestinerò.

Questa è solo una semplice traduzione in italiano di una guida avanzata di Bob P rintracciabile qui -->https://forums.gentoo.org/viewtopic-t-274968-postdays-0-postorder-asc-start-0.html ma semplice a mio parere(se è semplice per me lo può essere per moltissimi... :Wink: ))per avere una Gentoo stage1 con compilatore 3.4.3  anche sul bootstrap , incluso il compilatore stesso.

Il tutto partendo da uno stage3.Il risultato(testato sulla mia pelle(!) è una installazione molto performante e stabile sia AMD che Pentium)

ATTENZIONE il tempo necessario all'installzione sarà lungo , molto lungo ma la pazienza sarà ricompensata dai risultati(tutto è relativo a questo mondo , le opinioni no!)

[b]Obiettivi :installare uno Stage 1 su uno Stage 3 , usandi architettura x86 e Pentium III , partendo dalla ultima release di Gentoo CD.

Partiamo.

1)Procurarsi e masterizzare la .iso image 

```
http://www.die.unipd.it/pub/Linux/distributions/gentoo-sources/releases/x86/2004.3/livecd/install-x86-minimal-2004.3-r1.iso
```

2)Al boot pushare enter e scegliere il kernel di default (gentoo kernel)

3)Configurare la ethernet card.

Assumo per convenienza che abbiate una ethernet come me e quindi non mi sbatto troppo per il resto ; -) , in genere anche su macchine vecchie fa tutto da sola la cara Gentoo e riconosce tutto , se fate ping ve ne accorgerete ,in caso opposto:

```
# dhcpcd eth0
```

4)..e configuriamole 'ste partizioni sull'hardische!!

4.1)prima , però non dimentichiamoci di accellerarne le prestazioni con hdparm  , quindi considereremo di avere di default un  solo HD , e che   sia riconosciuto da Gentoo come 

```
/dev/hda
```

.Controlliamo i parametri impostati di default al boot :

```

 # hdparm /dev/hda

/dev/hda:

multcount    = 16 (on)

IO_support   = 0 (default 16-bit)

unmaskirq    = 0 (off)

using_dma    = 1 (on)

keepsettings = 0 (off)

readonly     = 0 (off)

readahead    = 256 (on)

geometry     = 16383/255/63, sectors = 120034123776, start = 0

 # hdparm -i /dev/hda

/dev/hda:

Model=WDC WD1200JB-00GVA0, FwRev=08.02D08, SerialNo=WD-WMAL92634373

Config={ HardSect NotMFM HdSw>15uSec SpinMotCtl Fixed DTR>5Mbs FmtGapReq}

RawCHS=16383/16/63, TrkSize=57600, SectSize=600, ECCbytes=74

BuffType=DualPortCache, BuffSize=8192kB, MaxMultSect=16, MultSect=16

CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=234441648

IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}

PIO modes:  pio0 pio1 pio2 pio3 pio4

DMA modes:  mdma0 mdma1 mdma2

UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5

AdvancedPM=no, WriteCache=enabled

Drive conforms to: device does not report version:

* signifies the current active mode
```

4.2)Ottimizziamo i parametri dell'hard disk con hdparm l'esempio che segue è di un particolare HD , vi consigliio di provare con vari parametri e fare test per ottenere i miglior settaggi per il VOSTRO PROPRIO HD:

```

# hdparm -a256A1c1d1m16u1 /dev/hda

/dev/hda:

setting fs readahead to 256

setting 32-bit IO_support flag to 1

setting multcount to 16

setting unmaskirq to 1 (on)

setting using_dma to 1 (on)

setting drive read-lookahead to 1 (on)

multcount    = 16 (on)

IO_support   =  1 (32-bit)

unmaskirq    =  1 (on)

using_dma    =  1 (on)

readahead    = 256 (on)
```

4.3)testiamo le nuove prestazioni con i settaggi cambiati:

```

# hdparm -tT /dev/hda

/dev/hda:

Timing cached reads:   520 MB in  2.01 seconds =  258.75 MB/sec

Timing buffered disk reads:   114 MB in   3.01 seconds =  37.90  MB/sec
```

                                                   Risultati di un HD con UDMA66 più o meno tipici senza ottimizzazioni:

```

# hdparm -tT /dev/hda

/dev/hda:

Timing cached reads:   144 MB in  2.04 seconds =  70.60 MB/sec

Timing buffered disk reads:   26 MB in  2.65 seconds =    9.81  MB/sec
```

4.4)Partizioni

Considerando che cHi si avventurerà in questa installazione è sufficientemente attrezzato , diamo per scontato la conoscenza di fdisk e il partizionamento in genere.

                                           Utilizzeremo per semplicità la seguente tabella di partizionamento:

```
Partition File System    ID  Size      Description

/dev/hda1 ReiserFS 3.6   83  100 MB    Boot partition

/dev/hda2 (swap)         82  512 MB    Swap partition

/dev/hda3 ReiserFS 3.6   83  Remainder Root Partition
```

Salviamo le partizioni e continuiamo:

```
Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks 
```

4.4)Installiamo il filesystem.

L'esempio segue l'uso di Reiserfs3.6 , nel caso di uso di reiser4 si deve semplicemente usare il livecd di Lxnay reperibile su questo stesso forum , piuttosto che quello ufficiale di Gentoo.

4.4.1)Installiamo Reiser FS on /dev/hda1 e /dev/hda3 (chi non sopporta il filejournaled di reiserfs su /boot può usare ext2): 

```
# mkreiserfs /dev/hda1 && mkreiserfs /dev/hda3
```

                                           ricordarsi di rispondere Y alla domanda se si vuole continuare(..a volte mette dubbio..)

4.5)Installiamo  la swap  su /dev/hda2:

```
# mkswap /dev/hda2 && swapon /dev/hda2
```

4.6)Montiamo le partizioni.

```

# mount /dev/hda3 /mnt/gentoo

# mkdir /mnt/gentoo/boot

# mount /dev/hda1 /mnt/gentoo/boot
```

5)Installiamo i file di Gentoo System.

5.1)Scarichiamo lo Stage3 , lo avevamo detto no ?!, eccolo..intanto spostiamoci di directory

# cd /mnt/gentoo

Abbiamo bisogno di due files uno il tarball e un altro per assicurarci di non aver scaricato quello sbagliato o latra roba , lo verificheremo facendo il checksum.

Usiamo il potente wget (per pigrizia e malabitudine ho usato mirrors della guida , voi siate più corretti usate quello di padova o altri vicini alla vostra città-->http://www.gentoo.org/main/en/mirrors.xml

```

# wget http://gentoo.osuosl.org/releases/x86/2004.3/stages/x86/stage3-x86-2004.3.tar.bz2

# wget http://gentoo.osuosl.org/releases/x86/2004.3/stages/x86/stage3-x86-2004.3.tar.bz2.md5
```

5.2)Verifichiamo.

```

# md5sum -c stage3-x86-2004.3.tar.bz2.md5

stage3-x86-2004.3.tar.bz2: OK
```

5.3) Spacchettiamo i tarball dello Stage3.

```
# tar -xjpvf stage3-x86-2004.3.tar.bz2
```

                                                      Segue breve pausa da dedicare alla piessedue,o al MAME....

5.4) Installiamo il Portage.

5.4.1) Scarichiamo uno snapshot fresco,fresco dal web.

```

 # wget http://gentoo.osuosl.org/snapshots/<il più recente>.tar.bz2
```

5.4.2) Spacchettiamo lo snapshot di portage.

```

 tar -xjvf /mnt/gentoo/<portage_snapshot>.tar.bz2 -C /mnt/gentoo/usr
```

               L'esempio che segue tiene presente come versione di Portage la 2005010,quindi voi adattate a quella più recente disponibile.

```

# wget http://gentoo.osuosl.org/snapshots/portage-20050101.tar.bz2

# wget http://gentoo.osuosl.org/snapshots/portage-20050101.tar.bz2.md5sum

# md5sum -c portage-20050101.tar.bz2.md5sum

# tar -xjvf /mnt/gentoo/portage-20050101.tar.bz2 -C /mnt/gentoo/usr
```

6)Installiamo il sistema di base di Gentoo(m°°°°°a come suona male in italiano..).

6.1)Copiamo le info del DNS.In modo che funzioni il nostro nuovo ambiente Gentoo.

```

 # cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
```

6.2)Montiano il filesystem di /proc.Questo serve affinchè la nostra installazione di Gentoo possa usare le info del kernel provvisto dentro      l'ambiente chroot.

```
# mount -t proc none /mnt/gentoo/proc
```

6.3)chroot dentro il nuovo Gentoo.

```

 # chroot /mnt/gentoo /bin/bash

 # env-update

 # source /etc/profile
```

6.4)Settiamo data e ora.

6.4.1)ricordiamo che il formato è MMDDHHMMYYYY-MM(mese),DD(giorno),HHMM(ora),YYYY(anno).Quindi per settare 1630 del 20                Febbraio   2005.

```

# date 022016302005

Sun Feb  20 16:30:00 Local time zone must be set--see zic manual page 2005
```

6.4.2)Configuriamo il time zone symlink.Mostriamo la zona a noi interessata con:

```

 # ls /usr/share/zoneinfo/Europe
```

                                                             Fissiamo il nostro TimeZone che in genere è Rome.

```
# rm /etc/localtime

# ln -s /usr/share/zoneinfo/Europe/Rome /etc/localtime

Sun Feb  20 19:32:50 UTC 2005
```

6.5)Configuriamo le USE Flags,le opzioni di Portage e della compilazione in /etc/make.conf.Nell'esempio viene utilizzato una architettura x86 Pentium 586, siete liberi di aggiungere le flags che credete , in questo config sono incluse le flags nptl, ithreads e pthreads , l'esclusione di nptonly USE flag è intenzionale al fine di supportare il fallback per linuxthreads e il threading di nptl.

```

# cat /etc/make.conf

CHOST="i586-pc-linux-gnu"

CFLAGS="-O2 -march=pentium -pipe"

CXXFLAGS=${CFLAGS}

#  "x86" refers to the stable  software branch

# "~x86" refers to the testing software branch

ACCEPT_KEYWORDS="x86"

PORTAGE_TMPDIR=/var/tmp

PORTDIR=/usr/portage

DISTDIR=${PORTDIR}/distfiles

PKGDIR=${PORTDIR}/packages

PORT_LOGDIR=/var/log/portage

PORTDIR_OVERLAY=/usr/local/portage

GENTOO_MIRRORS="<your mirror goes here> http://gentoo.osuosl.org http://www.ibiblio.org/pub/Linux/distributions/gentoo"

SYNC="rsync://rsync.gentoo.org/gentoo-portage"

RSYNC_RETRIES="3"

RSYNC_TIMEOUT=180

MAKEOPTS="-j2"

PORTAGE_NICENESS=3

AUTOCLEAN="yes"

FEATURES="sandbox ccache distlocks"

CCACHE_SIZE="512M"

RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes

USE="acpi cups ithreads ldap nls nptl pam pthreads python readline samba ssl tcpd" 
```

6.6)Ulteriore configurazione di Portage

6.6.1)Creare le directories di Portage.Se volete utilizzare la configurazione appena descritta dovete aggiungere delle directory per portage.In caso contrario il prossimo passaggio è inutile.

```

# mkdir /var/log/portage

# mkdir /usr/local/portage
```

6.6.2)Aggiorniamo Portage.

```

  emerge --sync
```

6.7) Attiviamo solo le User Locales adatte a noi

 Quando Gentoo conpila le glibc le compila in modo completo ovvero per tutti , oi le setteremo per utilizzare solo i paramtri locali nostri e ci salveremo del tempo in compilazione.

```

# cat /etc/portage/package.use

sys-libs/glibc userlocales
```

```

# cat /etc/locales.build

en_US/ISO-8859-1

en_US.UTF-8/UTF-8
```

7)Costruiamo il Toolkit.

7.1)Per abilitare il supporto a NPTL è richiesto un uso del kernle famiglia 2.6 e i linux-headers.sfortunatamente il tarball stage3 contiene i linux-headers il quale agisce come blocco per emergere linux26-headers.Nel costruire il Toolkit emergeremo prima linux-headers e poi linux26-headers.

I linux kernel headers sono aggiornati soltanto quando si aggoirna una versione delle glibc.Quindi dovremo , come risultato ricompilare le glibc dopo aver emergiato linux26-headers.Emergeremo anche la nuova versione delle binutils aggoirneremo alla versine di gcc quando comileremo il toolkit.

```

# env-update && source /etc/profile

# emerge -C linux-headers

# emerge linux26-headers

# emerge gcc-config glibc binutils gcc
```

Questa è un ottima occasione per fare pausa o per finire l'ultima ps di WRC4.

7.2)Ricompilazione del Toolkit con GCC 3.4.3.

Ricapitolando cechiamo di capire il punto di questa installazione e di conseguenza di questa guida.Allora , abbiamo usato gcc 3.3.4 e toolchain per compilare gcc3.4.3 , quindi per avere tutta la nostra Gentoo compilata da capo a piedi solo con gcc 3.4.3 , dobbiamo ricompilare tutto il toolchain con il gcc 3.4.3 che prò adesso abbiamo compilato con gcc3.4.3!!Prima di fare ciò chiaramente andremo a cambiare delle ipostazioni in /etc/make.conf che apportino il massimo beneficio alle nostre fatiche , sennò tanto valeva installare winzzozz..no?

7.3)Riconfiguriamo /etc/make.conf.

 Ricordiamo che utilizziamo una architettura Intel Pentium.

```
CFLAGS="-O3 -march=pentium -mtune=pentium -fforce-addr -momit-leaf-frame-pointer -fomit-frame-pointer -ftracer -pipe"

CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden"
```

Se avete AMD Athlon consilgio questa.

```

CFLAGS="-O3 -mtune=athlon-xp -march=athlon-xp -pipe -funroll-loops -falign-functions -fomit-frame-pointer -fmerge-all-constants -mfpmath=sse -maccumulate-outgoing-args -fprefetch-loop-arrays -ftracer -fforce-addr -momit-leaf-frame-pointer -frename-registers -fweb"

CXXFLAGS="${CFLAGS} -fvisibility-inlines-hidden -fvisibility=hidden"
```

NOTA.Mi permetto di aggiungere una piccola nota , si potrebbe anche utilizzare delle flags più conservative , ma in tal caso , sarebbe inutile seguire questa guida e l'installazione tradizionale darebbe migliori risultati.

7.4)Configuriamo il nostro compilatore.

Assicuriamo che il gcc sia quello che ci interessa.

Se abbiamo 

```
# gcc-config -l

[1] i386-pc-linux-gnu-3.3.4 *

[2] i386-pc-linux-gnu-3.4.3

[3] i386-pc-linux-gnu-3.4.3-hardened

[4] i386-pc-linux-gnu-3.4.3-hardenednopie

[5] i386-pc-linux-gnu-3.4.3-hardenednossp
```

inseriamo il gcc 3.4.3 con

```

# gcc-config 2
```

Se abbiamo invece già ..gnu-3.4.3 lasciamo com'è.

7.4)Aggiorniamo il sistema.

```

 # env-update && source /etc/profile
```

Adesso andremo andiamo a rcompilare il gcc3.4.3 con il gcc 3.4.3 ...poi andremo a ricompilare l'intero sistema in modo da vere un 3.4.3 toolkit e un intero sistema compilato attorno ad un 3.4.3..chiaro no??!!

Il  toolchain

```

# emerge glibc binutils gcc portage
```

Il sistema

```

# emerge -e system 
```

7.5)Adesso dobbiamo emergere strumenti , applicazioni che ci garantiscano un sistema di base.IL cosiddetto world.

```

# emerge syslog-ng xinetd grub vixie-cron reiserfsprogs sysfsutils udev dhcpcd hotplug coldplug gentoolkit

# emerge --nodeps acpid ntp
```

7.6)Assicuriamoci che vengano avviati al boot.

```

# rc-update add syslog-ng default

# rc-update add net.eth0 default

# rc-update add vixie-cron default

# rc-update add xinetd default

# rc-update add sshd default

# rc-update add hotplug default

# rc-update add coldplug default

# rc-update add acpid default
```

7.7)Configuriamo il NPT lato client.

Prima abbiamo emergiato l'applicazione per avere il sistema e il suo orologio aggoirnato in tempo reale dalla rete , in mdo da creare un sincronismo HW<->SW

Adesso lo configuriamo lato client.

```

# rc-update add ntp-client default && ntpdate -b -u ntp2.ien.it
```

Ok adesso viene il kernel ma da questo punto in poi sarebbe una ridondanza che non ritengo utile potendo tranquillamente seguire l'ottima guida ufficiale Gentoo.Sperando di essere stato utile almeno a qualcuno vi invito a commenti,critiche,modifiche etc,etc..

Ciauozz.

----------

## fedeliallalinea

Aggiunto ai post utilissimi sezione howto

----------

## mouser

Ohhhhh, vuoi dire che finalmente posso rifarmi il pc con -march=pentium-m e sotto mano una guida in italiano???????

Questa sarebbe un'ottima cosa!!!!

Domanda:

Ma lo stage3, non butta nel sistema cose che si potrebbero evitare con uno stage1???? Scusate la domanda scema, ma sono abbastanza n00b in questo senso........

Ciriciao e.... ottimo howto!

mouser  :Wink: 

----------

## Tiro

attenzione per chi ha AMD ad usare CXXFLAGS="${CFLAGS} -fvisibility=hidden" poichè fam fallisce la compilazione. https://bugs.gentoo.org/show_bug.cgi?id=80203

Ho risolto omettendo la flag solo per l'emersione di fam ma non so quanto possa essere pulita questa soluzione...  :Sad: 

----------

## mtto

 *paperp wrote:*   

>  7.4)Configuriamo il nostro compilatore.
> 
> Assicuriamo che il gcc sia quello che ci interessa.
> 
> Se abbiamo 
> ...

 

Ciao, io sono partito dal nuovo livecd 2005.0, ho seguito alla lettera questo HOWTO, ma l'opzione [2] non mi è comparsa  :Sad:  , sto quindi procedendo con le 3.3.5. Ah, l'unica differenza è che non ho emerso le linux26-headers, ma le linux-headers in quanto, da quel che ho capito, hanno cambiato nome.

Forse perchè manca questo? (trovato nell'HOWTO in inglese)

```
# cat /etc/portage/package.keywords 

sys-devel/gcc ~x86 

sys-devel/gcc-config ~x86 

sys-libs/libstdc++-v3 ~x86 

sys-libs/glibc ~x86
```

----------

## neryo

 *Quote:*   

> )Configurare la ethernet card.
> 
> Assumo per convenienza che abbiate una ethernet come me e quindi non mi sbatto troppo per il resto ; -) , in genere anche su macchine vecchie fa tutto da sola la cara Gentoo e riconosce tutto , se fate ping ve ne accorgerete ,in caso opposto:
> 
> Codice:
> ...

 

Io se fossi in te migliorerei questa parte, aggiungendo anche le configurazioni della rete nel caso non si ha un server dhcp che ci fornisce l'indirizzo.. ma un router come gataway o un pc che condivide la connessione...

```

ifconfig ethx 192.168.x.x netmask 255.255.255.0 up

route add default gw 192.168.x.x

```

commentando bene quando devono essere fatte.. magari mettendo un puntatore al manuale ufficiale...  :Wink: 

----------

## !equilibrium

 *mtto wrote:*   

> Forse perchè manca questo? (trovato nell'HOWTO in inglese)
> 
> ```
> # cat /etc/portage/package.keywords 
> 
> ...

 

mi trovo nella stessa situazione descritta da questo HOWTO e leggendolo confermo la segnalazione di mtto, manca il pezzo del package.keywords, senza non si ottiene l'effetto descritto.

direi che l'HOWTO va corretto.

----------

## lu_zero

Non per essere molto negativo...

Ma:

gcc si auto compila sempre da solo... (compilatore ospite ->xgcc ->gcc nuovo)

perche' farsi male usando stage3 e poi stage1 quando puoi usare semplicemente stage1 e profilo ~x86 (sulle altre architetture gcc-3.4 e'  il default )

userlocales mi sembra che sia una custom use flag per glibc tanto vale metterla negli use globali. usate gli use specifici solo il minimo necessario visto che rallentano emerge....

In buona sostanza se volete usare un toolchain di transizione e' probabilmente meglio usare anche gli altri pacchetti in transizione (quindi mettete pure ~x86) assicuratevi di usare solo un tipo di compilatore C++ visto che se no rischiate di avere dei problemi al momento dell'esecuzione o del link delle librerie.

Mi spiace demolire qualcosa fatta con la fatica altrui ma temo che seguire queste istruzioni porti almeno via piu' tempo del necessario.

----------

## !equilibrium

 *lu_zero wrote:*   

> Mi spiace demolire qualcosa fatta con la fatica altrui ma temo che seguire queste istruzioni porti almeno via piu' tempo del necessario.

 

condivido la tua filosofia, ma purtroppo regna sovrano il luogo comune che considera il profile ~x86 altamente instabile, insicuro, si insomma il male puro ... per cui la gente non lo usa e fa uso di questi "trucchetti" per usare x86 e ~x86; io ci ho provato a convincere le persone che il profile ~x86 è usabile e "abbastanza" sicuro in generale, ma con scarso successo

----------

