Posez votre question Signaler

Linux from scratch

initials 76 6522Messages postés 21 avril 2008Date d'inscription 19 juin 2011Dernière intervention - Dernière réponse le 26 aoû 2009 à 22:10
Salut à tous ;)
Je m'intéresse à LFS car je voudrais bien créer mon système Linux entièrement personnalisé.
Je me posais quelques questions avant de me lancer dans l'aventure...
LFS est ce le bon chemin pour au bout du compte:
-Avoir le tout dernier noyaux 2.6.30.4
-Avec uniquement les dernières versions de mes logiciels favoris
-Choisir mon gestionnaire de logiciels favoris entre Dpkg,Yum,Pacman et autres
-Avoir un système stable avec le stricte nécessaire
Ne serais ce pas identique de démarrer sur une image Arch ou Debian minimale et d'y compiler le dernier noyaux
ainsi que les derniers logiciels?
Le PDF que j'ai commencé à lire est très fascinant :)
Merci pour vos lumières.
Lire la suite 

Linux from scratch »

136 réponses
Réponse
+1
moins plus
Salut,

Ne serais ce pas identique de démarrer sur une image Arch ou Debian minimale et d'y compiler le dernier noyaux
Le plaisir de te casser la tête de faire de A à Z, tu le laisses à qui?

Tu parle de PDF depuis le site de LFS ?!
initials 76 - 8 aoû 2009 à 11:24
Salut ;)

"Le plaisir de te casser la tête de faire de A à Z, tu le laisses à qui? "


Oui, donc démarrer sur une image minimale c'est pas pareil, je viens de comprendre qu'avec LFS on démarre encore plus tôt (à zero quoi) et on doit construire tout l'arbre système sois même, ok vu :)

"Tu parle de PDF depuis le site de LFS ?! "

Oui la version Française du livre 6.4,


bon y'a plus qu'a me lancer, merci ;)
Ajouter un commentaire
Réponse
+0
moins plus
Re,

bon, quelque chose ne colle pas :(

Partitionnement et création d'un point de montage d'un système de fichiers ext3 pas de problèmes.

Il est monté dans /media/LFS/

ensuite:

"Les paquets et les correctifs téléchargés doivent être stockés quelque part où ils seront facilement disponibles,....."
"Vous pouvez utiliser le répertoire $LFS/sources"
"Pour créer ce répertoire, lancez, en tant qu'utilisateur root, avant de commencer la session de téléchargement :"
mkdir -v $LFS/sources


(ha?bon, ok il doit être créé sur ma racine à moi et pas encore sur la partition d'installation.....)
"Donnez le droit d'écriture et le droit sticky sur ce répertoire"
chmod -v a+wt $LFS/sources


(chouette, ici je comprend que "a+wt" remplacent 777)

====>Je remarque qu'un nouveau répertoire nomé "sources" se trouve à la racine de ma Archlinux....Je continue et j'y colle tous les programmes demandés, de autoconf à zlib, en passant par binutils et gcc...Et surtout mon noyaux :)))

chapitre suivant: CONFIGURER LA VARIABLE $LFS

=====> À mon avis ils auraient du commencer par là, c'est une intuition.
export LFS=/media/LFS

et
echo $LFS

revoie bien:
/media/LFS

Ça roule.

Créer le répertoire "tools"
mkdir -v $LFS/tools


====> ha! cette fois ci un nouveau répertoire apparemment sur la racine de la nouvelle partition....À mon avis je vais devoir revenir en arrière et recommencer le répertoire "sources" au bon endroit... :S

création du lien symbolique /tools dans votre système hôte:
l
n -sv $LFS/tools /


je reviens en arrière pour "sources":

mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
cp /sources/* /media/LFS/souces
rm -Rf /sources/*
rmdir /sources


C'est rentré dans l'ordre...mais bon.

ajouter l'utilisateur lfs:
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools  <===lfs devient le proprio de "tools"
chown -v lfs $LFS/sources <====et celui de "sources" aussi

ensuite je me connecte en tant sue "lfs"
su - lfs

À ce moment la lfs est sur le système hôte
lfs@basile~:

Configurer l'environnement et un nouveau bash-profile:
cat > ~/.bash_profile << "EOF"
>exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
>EOF

Créez maintenant le fichier .bashrc :
cat > ~/.bashrc << "EOF"
>set +h
>umask 022
>LFS=/media/LFS
>LC_ALL=POSIX
>PATH=/tools/bin:/bin:/usr/bin
>export LFS LC_ALL PATH
>EOF

Enfin, pour avoir un environnement complètement préparé pour la construction des outils temporaires, chargez le
profil de l'utilisateur tout juste créé :

source ~/.bash_profile

et la lfs se trouve dans son répertoire:
lfs~$:


Donc la tout va bien on est dans le "home" de lfs et on viens de créer son environnement.

Le problème survient ensuite:(hé oui c'était trop beau)

Installation de Binutils

mkdir -v ../binutils-build


====> Pas les droits suffisants!

Je dois compiler binutils en tant que "lfs" mais il me faut les droits root pour créer les répertoires..

J"utilises donc:

su -c 'mkdir -v ../binutils-build'

Ça passe en root, mais à ce moment la je ne suis pas sur que le répertoire se trouve au bon endroit :S
Bref je m'arrange pour qu'il se trouve bien à /media/LFS/ puisque je suppose que c'est la qu'il doit se trouver, ou peut être dans /tools ??? :(

J'essaie la compilation
CC="gcc -B/usr/bin/" ../binutils-2.18/configure \
    --prefix=/tools --disable-nls --disable-werror


C'est en lisant la commande que j'ai remarqué qu'il fallait décompresser les archives, on ne l'avais pas dit....
../binutils-2.18/configure

no such file or directory
, qu'est ce que je m'amuse :)))

Je crois qu'on devrais d'abord m'expliquer ou décompresser les archives,et que signifient les deux points avant le slash lorsqu'on crée ou se place dans un répertoire :)
exemple
../binutils-builds

C'est à cause de ça que je ne sais plus ou je me trouve :(
Et si lfs dans son environnement et en ayant créer des liens symboliques mais sans les droits root peut vraiment créer les bons répertoires au bon endroit?

Je n'abandonnerai pas, mais je reprend depuis zero ;))


Merci pour vos lumières :)





Ajouter un commentaire
Réponse
+0
moins plus
Zut un message complet(3) à disparu :(
Je viens de passer 30 minutes à le rédiger pour rien :S
Ajouter un commentaire
Réponse
+0
moins plus
Salut

de tout façon avec arch puisque c'est en roll release tu te retrouve avec les derniers programmes, et le dernier kernel (compilé, mais rien ne t'empèche de le faire).
De plus comme il n'y as aucun environnement graphique par défaut, tu es vraiment libre (pour ma part openbox/pypanel/conky) et basta :p

Je suppose que tu as de bonne connaissance pour te lancé dans ce genre d'aventure.

Je dis juste que les raisons que tu as avancé ne sont pas selon moi les bonnes, si tu t'y connais très bien (tu compiles des kernels le matin avec le café au lait) c'est bien, sinon, pas certain que tu obtienne vraiment quelque chose de bien stable,

je le dis une fois encore les raisons que tu donnes, avoir le dernier kernel, une distrib minimaliste et légère, ainsi que les dernière logiciels sortie corresponde tout à fait à archlinux

bon courage en espérant t'avoir été utile.
initials 76 - 9 aoû 2009 à 13:12
Salut Nico, et merci pour les conseils ;)

Oui, c'est utile, j'aime bien Arch, c'est d'ailleurs depuis ma Arch que je commence mon LFS.

C'est vrai qu'elle est légère et minimaliste, le top du top.

Je démarre LFS, quitte à obtenir un système instable, afin d'en apprendre beaucoup plus, car effectivement, je ne compile pas des kernels au déjeuner en buvant du café ;-D

Disons que j'ai réussi à terminer ma Archlinux avec ce que je voulais dessus, j'en suis déjà fier,
mais bon, je me lance à l'eau avec LFS, c'est sur que ça va me prendre du temps avant d'avancer d'un centimètre
mais c'est tout benef pour moi :)

Encore merci pour tes conseils ;)
lami20j - 9 aoû 2009 à 13:15
Salut,

(compilé, mais rien ne t'empèche de le faire).
Si tu n'as pas encore compilé un kernel, vu que tu t'intéresses à LFS alors rends toi plaisir. Il ne faut pas sauter ça ;-))
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
(chouette, ici je comprend que "a+wt" remplacent 777)

Pas tout à fait ;-)
Effectivement le résultat obtenu est 1777 mais sous le capot se passe autre chose ;-)

a - All (Propriétaire, Groupe, Autres)
+ - ajoute droits
w - Write (seulement) - octal (Propriétaire - 200, Groupe 20, Autres 2)
t - sTicky bit - octal 1000
Ce qui dit en fait que pour tout le monde donner le droit Write et sTicky bit ce qui donne en octal
1000 + 200 + 20 + 2 = 1222

Prenons 3 exemples

1. les droits sur répertoire sont dr-xr-xr-x ce qui veut dire
propriétaire  400+0+100  =500
groupe        40+0+10    = 50
autres        4+0+1      =  5
Total                    =555

Avec a+wt en fait on fait l'additin de 1222 + 755 = 1777



2. les droits sur répertoire sont drwxr-xr-x ce qui veut dire
propriétaire  400+200+100=700
groupe        40+0+10    = 50
autres        4+0+1      =  5
Total                    =755


Avec a+wt en fait on fait l'addition de 1022 + 755 = 1777
Cette fois le propriétaires a déjà les droits d'écriture, donc le droits sera modifié au groupe et aux autres.

3. a+wt -> résultat final différent de 1777, les droits sur répertoire sont drwx------
lami20j@debian:~$ ls -ld rrr
drwx------ 2 lami20j lami20j 4096 aoû  9 10:01 rrr
lami20j@debian:~$ chmod -v a+wt rrr
Le mode d'accès de `rrr' a été modifié à 1722 (rwx-w--wT).
lami20j@debian:~$ ls -ld rrr
drwx-w--wT 2 lami20j lami20j 4096 aoû  9 10:01 rrr


Donc tu vois que cette fois on n'obtiens pas 1777
En octal au debut
propriétaire  400+200+100=700
groupe        0+0+0      =  0
autres        0+0+0      =  0
Total                    =700


Avec a+wt en fait on va additionner 1022 + 700 = 1722

Conclusion :

"a+wt" ne remplacent pas 777 même si en fonction des droits déjà existants a+wt permettra de compléter les droits pour arriver au final à 1777
initials 76 - 9 aoû 2009 à 13:19
Salut lami20j :)

Merci pour ces précisions sur chmod et sur les valeurs 8-)

,à mon avis en reprenant à zéro je serai moins perdu dans ce que lfs fait et l'endroit ou il pose ses répertoire.

J'utiliserai des ls -l pour retrouver les répertoires après création, je comprendrai mieux l'usage de ../

Bon Dimanche ;)
lami20j - 9 aoû 2009 à 13:24
Salut,

../ c'est le répertoire parent
./ c'est le répertoire courant

Donc tu montes d'un cran si tu veux dans l'arborescence
lami20j@debian:~/rep$ ls -l
total 4
-rw-r--r-- 1 lami20j lami20j 6 aoû  9 13:18 fic
lami20j@debian:~/rep$ cat fic
salut
lami20j@debian:~/rep$ ls -l ./
total 4
-rw-r--r-- 1 lami20j lami20j 6 aoû  9 13:18 fic
lami20j@debian:~/rep$ cat ./fic
salut
lami20j@debian:~/rep$ ls -l ../rep/
total 4
-rw-r--r-- 1 lami20j lami20j 6 aoû  9 13:18 fic
lami20j@debian:~/rep$ cat ../rep/fic
salut
initials 76 - 9 aoû 2009 à 15:37
Ok, donc en te trouvant dans /rep

c'est idem de faire:
cat fic

et
cat ../rep/fic


sauf que l'usage de ../ oblige à donner le nom du répertoire parent, vu ;)

Je m'y remet.
Ajouter un commentaire
Réponse
+0
moins plus
Salut initials 76,

Bon courage pour ta découverte de la LFS, mais assure-toi de bien connaitre les bases de Linux/UNIX avant de te lancer dans l'exercice. Ca vaut peut-etre le coût de te familiariser un peu avec le shell (bash) et les commandes GNU/Linux en général au préalable si tu ne veux pas être frustré ou dégouté, parce que faire une LFS 'est assez long et nécessite un peu de maitrise préalable du sujet ! Par contre, c'est un excellent moyen de comprendre un système Linux dans le détail (au lieu de rentrer dans les guéguerres de distributions Linux).

J'ai déjà fait plusieurs LFS (je suis ingénieur système Linux), mais ça date un peu, je ne peux que te conseiller de la patience, et surtout de bien bien lire et suivre la doc pas à pas : elle est (était) généralement bien faite pour ça. Par contre, le moindre oubli peut avoir des conséquences par la suite (genre si tu oublies un patch, ou une modification dans un script...)

Par contre, la LFS présente un gros désavantage par rapport à des distributions classiques : elle est difficile à maintenir. Par exemple, si tu veux installer un nouveau produit, tu te retrouves vite à devoir chercher toutes les dépendances à la main, certaines lib devront être ugpradées, et ça impactera d'autres produits qui ne marcheront plus, etc, etc. Tout ce travail est habituellement fait par les distributeurs, qui vérifient les compatibilités de produits entre eux et packagent le tout. Exemple: si tu veux installer firefox, tu devras compiler toutes les libs qui sont utilisées, dont X11 (plusieurs dizaines de Meg de sources) et d'autres, et tu en auras pour des heures de compilations (je suis sérieux).

Par expérience, je te conseille donc d'avoir un dual boot avec une distrib linux "classique", et ta LFS à coté, afin de ne pas devoir passer des heures à regarder des trucs se compiler sous pretexte que tu veux lire un DVD ou autre opération qui se font en 5 minutes sur une distrib.

Celà dit, tu m'as l'air d'être très motivé ! Tu pourrais devenir un professionnel du sujet si tu poursuis dans cette voie !

Bon courage à toi !
lami20j - 9 aoû 2009 à 18:36
Re,

j'ai pris la liberté de téléchargé des versions plus neuves de tous les logiciels,

Toutefois tu n'as pas tenu compte de leur recommandation ;-)
Vu que tu ne l'as jamais fait, alors peut être qu'il faudra les écouter ;-))

Nous vous recommandons fortement de ne pas utiliser de versions supérieures car les commandes de construction pour une version pourraient ne pas fonctionner avec une version plus récente. Les versions plus récentes pourraient aussi avoir des problèmes nécessitant des contournements. Ces derniers seront développés et stabilisés dans la version de développement du livre.
initials 76 - 9 aoû 2009 à 19:39
Re,

"Toutefois tu n'as pas tenu compte de leur recommandation ;-)
Vu que tu ne l'as jamais fait, alors peut être qu'il faudra les écouter ;-)) "


Oui c'est vrai :S

C'est beaucoup plus précis que je ne le croyais, on ne fait pas n'importe quoi avec n'importe quoi.

Pour le moment la compilation de gcc avance bien et le make ne retourne pas encore de messages d'erreurs.

Si à la fin j'obtiens un système stable, ce sera comme au poker: la chance du débutant :)
lami20j - 9 aoû 2009 à 19:43
Re,

Ben, non, il n'y a pas la chance. C'est toi qui est fort ;-)))
Ajouter un commentaire
Réponse
+0
moins plus
Bon apparemment je m'y suit retrouvé plutôt bien et il y avait une incohérence dans la doc lfs:

"La documentation de Binutils recommande de construire Binutils en dehors du répertoire des sources, c'est-à-dire
dans un répertoire de construction dédié :"


donc en root (puisque lfs n'as pas les droits pour créer ce répertoire)
su -c 'mkdir -v ../binutils-build'

ensuite on se place dedans,mais entre temps on y a décompresser bintuil-2.19.tar.bz2
cd ../binutils-build

donc dans ce répertoire j'ai: bintuils-2.19 décompressé.

Et pour compiler la commande donnée est:

CC="gcc -B/usr/bin/" ../binutils-2.19/configure \
    --prefix=/tools --disable-nls --disable-werror


Hors c'est normal que j'ai un "no such file or directory"

puisqu'il faut entrer:
CC="gcc -B/usr/bin/" ./binutils-2.19/configure \
    --prefix=/tools --disable-nls --disable-werror


sans remonter d'un répertoire pour bintuils-2.19 puisqu'avec cd je suis déjà dans le répertoire parent (merci lami20j)

Et la c'est passé, j'ai un début de début de début de système:
lfs:~$ ls -l $LFS/tools/
total 24
drwxr-xr-x 2 lfs lfs 4096 Aug  9 16:42 bin
drwxr-xr-x 4 lfs lfs 4096 Aug  9 16:40 i686-pc-linux-gnu
drwxr-xr-x 2 lfs lfs 4096 Aug  9 16:40 include
drwxr-xr-x 2 lfs lfs 4096 Aug  9 16:40 info
drwxr-xr-x 2 lfs lfs 4096 Aug  9 16:40 lib
drwxr-xr-x 3 lfs lfs 4096 Aug  9 16:40 man


Voyons la suite :)




Ajouter un commentaire
Réponse
+0
moins plus
Yop :)

Pour gcc c'est passé aussi (après 5h de compilation)

lfs:~$ ls -l $LFS/tools/
total 32
drwxr-xr-x 2 lfs lfs 4096 Aug  9 22:16 bin
drwxr-xr-x 4 lfs lfs 4096 Aug  9 16:40 i686-pc-linux-gnu
drwxr-xr-x 3 lfs lfs 4096 Aug  9 22:10 include
drwxr-xr-x 2 lfs lfs 4096 Aug  9 22:17 info
drwxr-xr-x 6 lfs lfs 4096 Aug  9 22:17 lib
drwxr-xr-x 3 lfs lfs 4096 Aug  9 22:10 libexec
drwxr-xr-x 4 lfs lfs 4096 Aug  9 22:10 man
drwxr-xr-x 4 lfs lfs 4096 Aug  9 22:17 share


Je continue :)

Tiens j'apprends une nouvelle commande:
make mrproper



lami20jinitials 76 - 10 aoû 2009 à 09:09
Re,

Par exemple dans ton 1er message

chown -v lfs $LFS/sources <====et celui de "sources" aussi
En fait quand tu télécharge les sources tu n'est pas connecté en tant qu'utilisateur lfs puisqu'il n'existe pas encore
Donc lfs devient le propriétaire de sources mais pas de son contenu.
Tu aurais du faire plutôt

chown -vR lfs $LFS/sources
<====et celui de "sources" aussi, ainsi que du contenu.
initials 76 - 10 aoû 2009 à 10:28
Ok c'est fait :)

Question:

Est ce qu'on aurait pu faire aussi:
chown -v lfs $LFS/sources/*.*

ou
chown -v lfs $LFS/sources/*/*/*

? :)
lami20j - 10 aoû 2009 à 11:00
Re,

chown -v lfs $LFS/sources/*.*
Non, puisque le propriétaire ne sera changé que pour les fichiers de type nomfichier.extension mais pas pour les nomdefichiers dans extension

Mais l'option R (recursif) est plus que suffisante ;-)

Pour la deuxième je n'ai pas testé ;-)
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,


Très bien !


Bon courage ....

:-)
initials 76 - 9 aoû 2009 à 22:32
Salut bob :)

C'est gentil de passer ;)

@+
Ajouter un commentaire
Réponse
+0
moins plus
Re,

Au cas où si tu rencontreras des soucis avec les paquets de versions plus récente ici tu trouveras les paquets utilisé pour LFS
ftp://mirror.cict.fr/lfs/lfs-packages/development/
On monte d'un cran et tu as même l'archive tar ;-)
ftp://mirror.cict.fr/lfs/lfs-packages/
initials 76 - 9 aoû 2009 à 23:59
Excellent, il y à l'archive de la version 6.4 avec le noyau 2.6.27.4

Merci ;)
Ajouter un commentaire
Réponse
+0
moins plus
Concernant les versions à utiliser, je conseillerais quand même de ne pas tenter de changer. Je l'ai déjà fait pour la glibc et quelques autres produits, et ça a été une horreur pour avoir un système stable. Après, vu que tu es motivé, c'est toi qui voit ;-)
initials 76 - 10 aoû 2009 à 02:06
Re ;)

Je te crois sur parole, je tente le coup pour au moins le finir, après je recommence si il le faut mais avec de meilleures bases :)

Ajouter un commentaire
Réponse
+0
moins plus
Bonsoir à tous,

blocage ici lors du déplacement de l'éditeur de liens :(

Ce n'est pas vraiment dans son déplacement, mais ensuite lors de l'édition du fichier specs de gcc avec sed:

gcc -dumpspecs | sed 's@/lib/ld-linux.so.2@/tools&@g' \
  > `dirname $(gcc -print-libgcc-file-name)`/specs


===> pas de fichier de ce type :-/

et c'est capital pour la suite de l'édition:

GCC_FIXED=`dirname $(gcc -print-libgcc-file-name)`/include-fixed &&
find ${GCC_FIXED}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &&
rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_FIXED}/*` &&
unset GCC_FIXED


et de la vérification de l'ensemble des outils:

echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'


qui doivent répondre:
[Requesting program interpreter:
    /tools/lib/ld-linux.so.2]


Sans ça impossible d'utiliser mes nouveaux outils ;)

edit: effectivement (après un './configure')
checking for C compiler default output file name... configure: error: C compiler cannot create executables



Je cherche aussi de mon côté.

Bonne nuit :)



initials 76 - 10 aoû 2009 à 10:52
C'est bon j'ai trouvé :))))

Sur cette excellente page:
http://www.mingw.org/wiki/SpecsFileHOWTO
GCC will produce a specs file via the following command.

gcc -dumpspecs > specs


Sauf que je l'ai éditée en fonction de l'endroit ou mon gcc cherchais ce fichier:
lfs:~$ gcc -dumpspecs > $LFS/tools/lib/gcc/i686-pc-linux-gnu/4.4.1/specs


Et la sortie de la commande de vérification des outils est bien:
lfs:~$ readelf -l a.out | grep ': /tools'
      [Requesting program interpreter: /tools/lib/ld-linux.so.2]


Et cette fois ci le './configure' pour tcl8 est parti :))))

Ajouter un commentaire
Réponse
+0
moins plus
Re,

Juste pour voir, affiche le résultat de la commande (exécute là dans une autre console)
gcc -dumpspecs 
initials 76 - 10 aoû 2009 à 13:42
Bonjour,ok ;)

C'est assez long :

lfs:~$ gcc -dumpspecs
*asm:
%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*}   %{!mno-sse2avx:%{mavx:-msse2avx}} %{msse2avx:%{!mavx:-msse2avx}}

*asm_debug:
%{!g0:%{gstabs*:--gstabs}%{!gstabs*:%{g*:--gdwarf2}}} %{fdebug-prefix-map=*:--debug-prefix-map %*}

*asm_final:


*asm_options:
%{--target-help:%:print-asm-header()} %a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}

*invoke_as:
%{!S:-o %|.s |
 as %(asm_options) %|.s %A }

*cpp:
%{posix:-D_POSIX_SOURCE} %{pthread:-D_REENTRANT}

*cpp_options:
%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w} %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*} %{undef} %{save-temps:-fpch-preprocess}

*cpp_debug_options:
%{d*}

*cpp_unique_options:
%{C|CC:%{!E:%eGCC does not support -C or -CC without -E}} %{!Q:-quiet} %{nostdinc*} %{C} %{CC} %{v} %{I*&F*} %{P} %I %{MD:-MD %{!o:%b.d}%{o*:%.d%*}} %{MMD:-MMD %{!o:%b.d}%{o*:%.d%*}} %{M} %{MM} %{MF*} %{MG} %{MP} %{MQ*} %{MT*} %{!E:%{!M:%{!MM:%{!MT:%{!MQ:%{MD|MMD:%{o*:-MQ %*}}}}}}} %{remap} %{g3|ggdb3|gstabs3|gcoff3|gxcoff3|gvms3:-dD} %{H} %C %{D*&U*&A*} %{i*} %Z %i %{fmudflap:-D_MUDFLAP -include mf-runtime.h} %{fmudflapth:-D_MUDFLAP -D_MUDFLAPTH -include mf-runtime.h} %{E|M|MM:%W{o*}}

*trad_capable_cpp:
cc1 -E %{traditional|ftraditional|traditional-cpp:-traditional-cpp}

*cc1:
%(cc1_cpu) %{profile:-p}

*cc1_options:
%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs} %{v:-version} %{pg:-p} %{p} %{f*} %{undef} %{Qn:-fno-ident} %{--help:--help} %{--target-help:--target-help} %{--help=*:--help=%(VALUE)} %{!fsyntax-only:%{S:%W{o*}%{!o*:-o %b.s}}} %{fsyntax-only:-o %j} %{-param*} %{fmudflap|fmudflapth:-fno-builtin -fno-merge-constants} %{coverage:-fprofile-arcs -ftest-coverage}

*cc1plus:


*link_gcc_c_sequence:
%{static:--start-group} %G %L %{static:--end-group}%{!static:%G}

*link_ssp:
%{fstack-protector:}

*endfile:
%{ffast-math|funsafe-math-optimizations:crtfastmath.o%s}    %{mpc32:crtprec32.o%s}    %{mpc64:crtprec64.o%s}    %{mpc80:crtprec80.o%s}    %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s

*link:
%{!static:--eh-frame-hdr} -m %(link_emulation) %{shared:-shared}   %{!shared:     %{!ibcs:       %{!static: 	%{rdynamic:-export-dynamic} 	%{!dynamic-linker:-dynamic-linker %(dynamic_linker)}} 	%{static:-static}}}

*lib:
%{pthread:-lpthread}    %{shared:-lc}    %{!shared:%{mieee-fp:-lieee} %{profile:-lc_p}%{!profile:-lc}}

*mfwrap:
 %{static: %{fmudflap|fmudflapth:  --wrap=malloc --wrap=free --wrap=calloc --wrap=realloc --wrap=mmap --wrap=munmap --wrap=alloca} %{fmudflapth: --wrap=pthread_create}} %{fmudflap|fmudflapth: --wrap=main}

*mflib:
%{fmudflap|fmudflapth: -export-dynamic}

*link_gomp:


*libgcc:
-lgcc

*startfile:
%{!shared: %{pg|p|profile:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}    crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}

*switches_need_spaces:


*cross_compile:
0

*version:
4.4.1

*multilib:
. ;

*multilib_defaults:


*multilib_extra:


*multilib_matches:


*multilib_exclusions:


*multilib_options:


*linker:
collect2

*link_libgcc:
%D

*md_exec_prefix:


*md_startfile_prefix:


*md_startfile_prefix_1:


*startfile_prefix_spec:


*sysroot_spec:
--sysroot=%R

*sysroot_suffix_spec:


*sysroot_hdrs_suffix_spec:


*cc1_cpu:
%{mcpu=*:-mtune=%* %n`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
} %<mcpu=* %{mintel-syntax:-masm=intel %n`-mintel-syntax' is deprecated. Use `-masm=intel' instead.
} %{mno-intel-syntax:-masm=att %n`-mno-intel-syntax' is deprecated. Use `-masm=att' instead.
}%{march=native:%<march=native %:local_cpu_detect(arch)   %{!mtune=*:%<mtune=native %:local_cpu_detect(tune)}} %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}

*link_emulation:
elf_i386

*dynamic_linker:
%{muclibc:%{mglibc:%e-mglibc and -muclibc used together}/lib/ld-uClibc.so.0;:/lib/ld-linux.so.2}

*link_command:
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %l %{pie:-pie} %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}    %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} %{L*} %(mfwrap) %(link_libgcc) %o    %{fopenmp|ftree-parallelize-loops=*:%:include(libgomp.spec)%(link_gomp)} %(mflib)    %{fprofile-arcs|fprofile-generate|coverage:-lgcov}    %{!nostdlib:%{!nodefaultlibs:%(link_ssp) %(link_gcc_c_sequence)}}    %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}

lfs:~$ 

Ajouter un commentaire
Réponse
+0
moins plus
Re,

Aussi
dirname $(gcc -print-libgcc-file-name)
initials 76 - 10 aoû 2009 à 14:37
Re,

Voila :)

lfs:~$ dirname $(gcc -print-libgcc-file-name)
/media/LFS/tools/bin/../lib/gcc/i686-pc-linux-gnu/4.4.1
lfs:~$ 


Il est au bon endroit?
Ajouter un commentaire
Réponse
+0
moins plus
Re,

Et ça

gcc -dumpspecs | sed 's@/lib/ld-linux.so.2@/tools&@g'  > `dirname $(gcc -print-libgcc-file-name)`/specs_test

Si tu as une erreur affiche le résultat sinon affiche le résultat de
find /media/LFS -name '*spec*'
initials 76 - 10 aoû 2009 à 16:17
Salut :)

À mon avis nos réponses se sont croisée:

ce matin

:))

Sorry d'avoir suivi ensuite sans rien dire, mais comme je ne comprend pas tout, je pensait que tu faisait d'autres vérifications :|
lami20j - 10 aoû 2009 à 18:32
Re,

Ben, non justement.
Tu as du faire une autre bidouille pour y arriver quand la commande de manuel fonctionne très bien.
Tu vois ce que je veux dire?

Dans ton message 30 tu disais que la commande de manuel ne fonctionne pas.
Ben, à priori elle fonctionne selon ton message 42.
initials 76 - 10 aoû 2009 à 20:50
Exact, au départ elle ne fonctionnait pas, car d'après ce que je crois avoir compris, specs n'avait pas été généré par défaut par gcc.

J'ai trouvé sur une page web sur gcc une commande qui génère un fichier specs et ça à résolu mon problème de "no such file or directory"

et j'ai pu ensuite suivre la doc et utiliser sed pour éditer ce fichier :)

Quand il s'agit de codage, "j'essaye de comprendre" mais je n'ai aucune idée d'où j'ai les pieds ;)

C'est ça qui est chouette, même si c'est pas un jeu.

Mais en tout cas merci énormément de me suivre.

;)
Ajouter un commentaire
Réponse
+0
moins plus
Re,

Juste pour te dire que jusqu'à ce moment je n'ai eu aucune erreur ni d'être obligé d'installer en root (je parle pour kernel)

lfs@debian:/mnt/lfs/sources$ gcc -dumpspecs | sed 's@/lib/ld-linux.so.2@/tools&@g' \
> > `dirname $(gcc -print-libgcc-file-name)`/specs
lfs@debian:/mnt/lfs/sources$ find /mnt/lfs/ -name '*specs*' 2>/dev/null
/mnt/lfs/tools/lib/libgomp.spec
/mnt/lfs/tools/lib/gcc/i686-pc-linux-gnu/4.3.2/specs
et la suite
lfs@debian:/mnt/lfs/sources$ echo 'main(){}' > dummy.c
lfs@debian:/mnt/lfs/sources$ cc dummy.c
lfs@debian:/mnt/lfs/sources$ readelf -l a.out | grep ': /tools'
      [Requesting program interpreter: /tools/lib/ld-linux.so.2]
lfs@debian:/mnt/lfs/sources$
initials 76 - 10 aoû 2009 à 20:57
Je viens de comprendre ma bourde au niveau du mélange des propriétaire:

Je travaille avec lfs dans le terminal, mais comme un grosbourrin, je décompresse graphiquement avec initials.

Donc lfs propriétaire de l'archive, initials propriétaire du répertoire issu de l'archive.

D'où mes problèmes de permissions.

Je mériterais des baffes :)

Bon, la je vais sûrement y passer ma soirée (voir même plus)
J'ai une erreur dans le make de la seconde passe de gcc.

/media/LFS/tools/bin/../lib/gcc/i686-pc-linux-gnu/4.4.1/../../../../i686-pc-linux-gnu/bin/ld: cannot find -lcloog
collect2: ld returned 1 exit status
make[2]: *** [cc1-dummy] Error 1
make[2]: Leaving directory `/home/gcc-build/gcc-4.4.1/host-i686-pc-linux-gnu/gcc'
make[1]: *** [all-gcc] Error 2
make[1]: Leaving directory `/home/gcc-build/gcc-4.4.1'
make: *** [all] Error 2


Je dois trouver pourquoi il ne trouve pas -lcloog
J'y replonge ;)

Encore merci pour la patience.
Ajouter un commentaire
Réponse
+0
moins plus
Re,

je décompresse graphiquement avec initials.
Au début dans le manuel, il est bien préciser de travailler en lfs.
Perso, je te conseille d'utiliser uniquement la console.
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

Bon, la je vais sûrement y passer ma soirée (voir même plus)
Toujours en vie ;-DDDD
initials 76 - 11 aoû 2009 à 14:19
Salut :)

Oui toujours en vie, et cette fois ci en "restart" en suivant bien ce qui est écrit dans le livre et en utilisant les logiciels conseillés et en suivant les conseils des anciens.

On va nulle part sans ;)

Je m'accroche, je réapparaîtrai lorsque je serai de nouveau au delà de la deuxième passe de gcc.

J'espère que je ne fais perdre son temps à personne ;)
lami20j - 11 aoû 2009 à 14:24
Re,

Chez moi c'est passé sans problèmes ;-)
initials 76 - 11 aoû 2009 à 14:34
Je te crois, mais comme j'avais pris gcc-4.4.1 au lieu de gcc-4.3.2 .....

On ne fais pas (à mon niveau) n'importe quoi avec n'importe quoi :)

Ça me fera les pieds :D
Ajouter un commentaire
Réponse
+0
moins plus
Re,

J'espère que tu n'as pas mélanger encore les droits.
En fait au début l'ordre est plutôt comme ça

export LFS=/mnt/lfs
mkdir -pv $LFS
mount -v -t ext3 /dev/$1 $LFS

mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
mkdir -v $LFS/tools
ln -sv $LFS/tools /
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources

su - lfs
cd $LFS/sources
wget ftp://mirror.cict.fr/lfs/lfs-packages/lfs-packages-6.4.tar
tar xf lfs-packages-6.4.tar


Comme ça on es sûr que lfs est propriétaire des archives, pour ne plus avoir ton histoire de compilation en root pour le kernel
initials 76 - 11 aoû 2009 à 15:26
Re ;)

"J'espère que tu n'as pas mélanger encore les droits."

Non pas de danger je ne quitte plus le terminal et je décompresse et copie avec lfs depuis $LFS/sources (lequel contenu lui appartient à 100%) jusqu'a son /home/lfs qui lui appartient complètement aussi.

Plus besoin de root désormais.

Dans la doc, ce qui induit en erreur (quand on à pas compris l'usage de ../)
C'est à ce moment ci:

Lorsqu'on est fraîchement connecté en tant que lfs on se trouve dans son répertoire.

Hors la première commande donnée pour créer un répertoire est:
mkdir -v ../binutils/build

Ce qui revient en fait à remonter d'un cran à coté des répertoire lfs et initials dans /home
Et c'est fatalement que root doit intervenir.
Hors le but (et j'ai compris ça ensuite) est de créer tous les répertoires hors sources dans /home/lfs/
Donc la bonne commande départ pour moi est (depuis lfs)
mkdir -v ./binutils-build


Je recommence sur de meilleures bases et plus proprement :)


Ajouter un commentaire
Réponse
+0
moins plus
Re,

Dans la doc, ce qui induit en erreur (quand on à pas compris l'usage de ../)
C'est à ce moment ci:

Lorsqu'on est fraîchement connecté en tant que lfs on se trouve dans son répertoire.

Hors la première commande donnée pour créer un répertoire est:


mkdir -v ../binutils/build


Je pense que tu n'as pas compris.

Donc la bonne commande départ pour moi est (depuis lfs)

mkdir -v ./binutils-build

Pas du tout, les commandes dans le livres sont correctes. Je les ai exécutées sans rien changer.
C'est vrai qu'on peut tout changer, mais ça ne vaut pas le coup.
Le répertoire de travail est /mnt/lfs/sources
Si on se connecte en lfs c'est puisque lfs a des droits sur /mnt/lfs/sources et /mnt/lfs/tools


En fait quand tu te connecte en lfs tu te trouveras en /home/lfs
Ce que ne dit pas le livre c'est de faire un cd /mnt/lfs/sources pour se positionner dans le répertoire sources qui sera le répertoire de travail.
su - lfs
cd /mnt/lfs/sources

C'est en ce moment que tu dois commencer.

Encore une chose.
Avant toute opération de configuration, patcher, compilation le livre suppose que tu as decompressé déjà l'archive et tu as fait un cd.

Prenons le cas de binutils

donc dans /mnt/lfs/sources tu as binutils-2.18.tar.bz2

Donc tu es dans /mnt/lfs/sources
tar xjf binutils-2.18.tar.bz2
cd binutils-2.18

et quand tu fais (donc tu te trouves en ce moment dans /mnt/lfs/sources/binutils-2.18 ) , il faut faire comme ça avec chaque archive (c'est l'étape N° 1)
mkdir -v ../binutils-build


En fait tu vas créer le répertoires binutils-build dans /mnt/lfs/sources qui est le répetoire parent de binutils-2.18

A ne pas oublier qu'après la compilation et installation tu dois supprimer /mnt/lfs/sources/binutils-build et /mnt/lfs/sources/binutils-2.18
initials 76 - 11 aoû 2009 à 15:50
"Ce que ne dit pas le livre c'est de faire un cd /mnt/lfs/sources pour se positionner dans le répertoire sources qui sera le répertoire de travail."

Argh!

Bon, c'est passé grâce aux liens symboliques crées vers /tools ...heureusement (et par deux fois)
À la prochaine je me positionne dans /sources c'est vrai que c'est plus cohérent que dans /home/lfs

Mais:
"La documentation de GCC recommande de ne pas construire GCC dans le répertoire des sources mais dans un répertoire de construction dédié"

M'a induit en erreur :S

C'est vrai que cette doc est très instructive, je plussoie, mais dédiées à ceux qui savent la lire...
Avant d'appliquer le patch pour binutils comme donné en toute première ligne sur la doc,
il faut avoir utilisé quelques fois cp, tar -jxf et mv....


Ajouter un commentaire
Ce document intitulé « Linux from scratch » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook
Linux from scratch - page 2